From cefe88509287c3b3c5f15c114ede4717a4db6e5f Mon Sep 17 00:00:00 2001 From: Usman Rashid Date: Mon, 17 Jun 2024 16:08:06 +1200 Subject: [PATCH 01/87] Added orthofinder --- conf/modules.config | 13 +- modules.json | 5 + modules/nf-core/orthofinder/environment.yml | 9 + modules/nf-core/orthofinder/main.nf | 69 +++ modules/nf-core/orthofinder/meta.yml | 50 ++ .../nf-core/orthofinder/tests/main.nf.test | 96 ++++ .../orthofinder/tests/main.nf.test.snap | 438 ++++++++++++++++++ modules/nf-core/orthofinder/tests/tags.yml | 2 + subworkflows/local/gff_store.nf | 15 + workflows/pangene.nf | 17 +- 10 files changed, 712 insertions(+), 2 deletions(-) create mode 100644 modules/nf-core/orthofinder/environment.yml create mode 100644 modules/nf-core/orthofinder/main.nf create mode 100644 modules/nf-core/orthofinder/meta.yml create mode 100644 modules/nf-core/orthofinder/tests/main.nf.test create mode 100644 modules/nf-core/orthofinder/tests/main.nf.test.snap create mode 100644 modules/nf-core/orthofinder/tests/tags.yml diff --git a/conf/modules.config b/conf/modules.config index f5e0cbf..aba4401 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -240,7 +240,7 @@ process { } process { - withName: 'FINAL_GFF_CHECK' { + withName: '.*:GFF_STORE:FINAL_GFF_CHECK' { ext.args = '-tidy -retainids -sort' publishDir = [ @@ -249,6 +249,17 @@ process { saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, ] } + + withName: '.*:GFF_STORE:EXTRACT_PROTEINS' { + ext.args = '-y' + ext.prefix = { "${meta.id}.pep" } + + publishDir = [ + path: { "${params.outdir}/final/$meta.id" }, + mode: "copy", + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + ] + } } process { diff --git a/modules.json b/modules.json index 27dc611..b49cdc9 100644 --- a/modules.json +++ b/modules.json @@ -153,6 +153,11 @@ "git_sha": "8ce34a40589137b75b65dfe8bb334c9b94f1d6c8", "installed_by": ["modules"] }, + "orthofinder": { + "branch": "master", + "git_sha": "07f10f34d88408af7c71f13227d11f23b7f53b50", + "installed_by": ["modules"] + }, "samtools/cat": { "branch": "master", "git_sha": "f4596fe0bdc096cf53ec4497e83defdb3a94ff62", diff --git a/modules/nf-core/orthofinder/environment.yml b/modules/nf-core/orthofinder/environment.yml new file mode 100644 index 0000000..f93b9bb --- /dev/null +++ b/modules/nf-core/orthofinder/environment.yml @@ -0,0 +1,9 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json +name: "orthofinder" +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - "bioconda::orthofinder=2.5.5" diff --git a/modules/nf-core/orthofinder/main.nf b/modules/nf-core/orthofinder/main.nf new file mode 100644 index 0000000..2971fc0 --- /dev/null +++ b/modules/nf-core/orthofinder/main.nf @@ -0,0 +1,69 @@ +process ORTHOFINDER { + tag "$meta.id" + label 'process_high' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/orthofinder:2.5.5--hdfd78af_2': + 'biocontainers/orthofinder:2.5.5--hdfd78af_2' }" + + input: + tuple val(meta), path(fastas, stageAs: 'input/') + + output: + tuple val(meta), path("$prefix") , emit: orthofinder + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + prefix = task.ext.prefix ?: "${meta.id}" + """ + mkdir temp_pickle + + orthofinder \\ + $args \\ + -t $task.cpus \\ + -a $task.cpus \\ + -p temp_pickle \\ + -f input \\ + -n $prefix + + mv \\ + input/OrthoFinder/Results_$prefix \\ + $prefix + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + orthofinder: \$(orthofinder -h | sed -n 's/.*version \\(.*\\) Copy.*/\\1/p') + END_VERSIONS + """ + + stub: + def args = task.ext.args ?: '' + prefix = task.ext.prefix ?: "${meta.id}" + """ + mkdir -p $prefix/Comparative_Genomics_Statistics + mkdir $prefix/Gene_Duplication_Events + mkdir $prefix/Gene_Trees + mkdir $prefix/Orthogroup_Sequences + mkdir $prefix/Orthogroups + mkdir $prefix/Orthologues + mkdir $prefix/Phylogenetic_Hierarchical_Orthogroups + mkdir $prefix/Phylogenetically_Misplaced_Genes + mkdir $prefix/Putative_Xenologs + mkdir $prefix/Resolved_Gene_Trees + mkdir $prefix/Single_Copy_Orthologue_Sequences + mkdir $prefix/Species_Tree + mkdir $prefix/WorkingDirectory + + touch $prefix/Log.txt + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + orthofinder: \$(orthofinder -h | sed -n 's/.*version \\(.*\\) Copy.*/\\1/p') + END_VERSIONS + """ +} diff --git a/modules/nf-core/orthofinder/meta.yml b/modules/nf-core/orthofinder/meta.yml new file mode 100644 index 0000000..23cc532 --- /dev/null +++ b/modules/nf-core/orthofinder/meta.yml @@ -0,0 +1,50 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/meta-schema.json +name: "orthofinder" +description: OrthoFinder is a fast, accurate and comprehensive platform for comparative genomics. +keywords: + - genomics + - orthogroup + - orthologs + - gene + - duplication + - tree + - phylogeny +tools: + - "orthofinder": + description: "Accurate inference of orthogroups, orthologues, gene trees and rooted species tree made easy!" + homepage: "https://github.com/davidemms/OrthoFinder" + documentation: "https://github.com/davidemms/OrthoFinder" + tool_dev_url: "https://github.com/davidemms/OrthoFinder" + doi: "10.1186/s13059-019-1832-y" + licence: ["GPL v3"] + +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1' ]` + - fastas: + type: list + description: Input fasta files + pattern: "*.{fa,faa,fasta,fas,pep}" + +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1' ]` + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" + - orthofinder: + type: directory + description: Orthofinder output directory + +authors: + - "@GallVp" +maintainers: + - "@GallVp" diff --git a/modules/nf-core/orthofinder/tests/main.nf.test b/modules/nf-core/orthofinder/tests/main.nf.test new file mode 100644 index 0000000..2d64800 --- /dev/null +++ b/modules/nf-core/orthofinder/tests/main.nf.test @@ -0,0 +1,96 @@ +import groovy.io.FileType + +nextflow_process { + + name "Test Process ORTHOFINDER" + script "../main.nf" + process "ORTHOFINDER" + + tag "modules" + tag "modules_nfcore" + tag "orthofinder" + + test("sarscov2 - candidatus_portiera_aleyrodidarum - proteome") { + + when { + process { + """ + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/proteome.fasta', checkIfExists: true) + .copyTo("${workDir}/sarscov2.fasta") + + file(params.modules_testdata_base_path + 'genomics/prokaryotes/candidatus_portiera_aleyrodidarum/genome/proteome.fasta', checkIfExists: true) + .copyTo("${workDir}/candidatus_portiera_aleyrodidarum.fasta") + + def file_a = file("${workDir}/sarscov2.fasta", checkIfExists:true) + def file_b = file("${workDir}/candidatus_portiera_aleyrodidarum.fasta", checkIfExists:true) + + input[0] = [ + [ id:'test', single_end:false ], + [ file_a, file_b ] + ] + """ + } + } + + then { + assert process.success + + def all_files = [] + + file(process.out.orthofinder[0][1]).eachFileRecurse (FileType.FILES) { file -> + all_files << file + } + + def all_file_names = all_files.collect { it.name }.sort(false) + + def stable_file_names = [ + 'Statistics_PerSpecies.tsv', + 'SpeciesTree_Gene_Duplications_0.5_Support.txt', + 'SpeciesTree_rooted.txt' + ] + + def stable_files = all_files.findAll { it.name in stable_file_names } + + assert snapshot( + all_file_names, + stable_files, + process.out.versions[0] + ).match() + } + + } + + test("sarscov2 - candidatus_portiera_aleyrodidarum - proteome - stub") { + + options '-stub' + + when { + process { + """ + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/proteome.fasta', checkIfExists: true) + .copyTo("${workDir}/sarscov2.fasta") + + file(params.modules_testdata_base_path + 'genomics/prokaryotes/candidatus_portiera_aleyrodidarum/genome/proteome.fasta', checkIfExists: true) + .copyTo("${workDir}/candidatus_portiera_aleyrodidarum.fasta") + + def file_a = file("${workDir}/sarscov2.fasta", checkIfExists:true) + def file_b = file("${workDir}/candidatus_portiera_aleyrodidarum.fasta", checkIfExists:true) + + input[0] = [ + [ id:'test', single_end:false ], + [ file_a, file_b ] + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + +} diff --git a/modules/nf-core/orthofinder/tests/main.nf.test.snap b/modules/nf-core/orthofinder/tests/main.nf.test.snap new file mode 100644 index 0000000..8b621c0 --- /dev/null +++ b/modules/nf-core/orthofinder/tests/main.nf.test.snap @@ -0,0 +1,438 @@ +{ + "sarscov2 - candidatus_portiera_aleyrodidarum - proteome": { + "content": [ + [ + "Blast0_0.txt.gz", + "Blast0_1.txt.gz", + "Blast1_0.txt.gz", + "Blast1_1.txt.gz", + "Citation.txt", + "Duplications.tsv", + "Duplications_per_Orthogroup.tsv", + "Duplications_per_Species_Tree_Node.tsv", + "Log.txt", + "N0.tsv", + "OG0000000.fa", + "OG0000000_tree.txt", + "OG0000000_tree.txt", + "OG0000000_tree_id.txt", + "OG0000001.fa", + "OG0000001_tree.txt", + "OG0000001_tree.txt", + "OG0000001_tree_id.txt", + "OG0000002.fa", + "OG0000003.fa", + "OG0000004.fa", + "OG0000005.fa", + "OG0000006.fa", + "OG0000007.fa", + "OG0000008.fa", + "OG0000009.fa", + "OG0000010.fa", + "OG0000011.fa", + "OG0000012.fa", + "OG0000013.fa", + "OG0000014.fa", + "OG0000015.fa", + "OG0000016.fa", + "OG0000017.fa", + "OG0000018.fa", + "OG0000019.fa", + "OG0000020.fa", + "OG0000021.fa", + "OG0000022.fa", + "OG0000023.fa", + "OG0000024.fa", + "OG0000025.fa", + "OG0000026.fa", + "OG0000027.fa", + "OG0000028.fa", + "OG0000029.fa", + "OG0000030.fa", + "OG0000031.fa", + "OG0000032.fa", + "OG0000033.fa", + "OG0000034.fa", + "OG0000035.fa", + "OG0000036.fa", + "OG0000037.fa", + "OG0000038.fa", + "OG0000039.fa", + "OG0000040.fa", + "OG0000041.fa", + "OG0000042.fa", + "OG0000043.fa", + "OG0000044.fa", + "OG0000045.fa", + "OG0000046.fa", + "OG0000047.fa", + "OG0000048.fa", + "OG0000049.fa", + "OG0000050.fa", + "OG0000051.fa", + "OG0000052.fa", + "OG0000053.fa", + "OG0000054.fa", + "OG0000055.fa", + "OG0000056.fa", + "OG0000057.fa", + "OG0000058.fa", + "OG0000059.fa", + "OG0000060.fa", + "OG0000061.fa", + "OG0000062.fa", + "OG0000063.fa", + "OG0000064.fa", + "OG0000065.fa", + "OG0000066.fa", + "OG0000067.fa", + "OG0000068.fa", + "OG0000069.fa", + "OG0000070.fa", + "OG0000071.fa", + "OG0000072.fa", + "OG0000073.fa", + "OG0000074.fa", + "OG0000075.fa", + "OG0000076.fa", + "OG0000077.fa", + "OG0000078.fa", + "OG0000079.fa", + "OG0000080.fa", + "OG0000081.fa", + "OG0000082.fa", + "OG0000083.fa", + "OG0000084.fa", + "OG0000085.fa", + "OG0000086.fa", + "OG0000087.fa", + "OG0000088.fa", + "OG0000089.fa", + "OG0000090.fa", + "OG0000091.fa", + "OG0000092.fa", + "OG0000093.fa", + "OG0000094.fa", + "OG0000095.fa", + "OG0000096.fa", + "OG0000097.fa", + "OG0000098.fa", + "OG0000099.fa", + "OG0000100.fa", + "OG0000101.fa", + "OG0000102.fa", + "OG0000103.fa", + "OG0000104.fa", + "OG0000105.fa", + "OG0000106.fa", + "OG0000107.fa", + "OG0000108.fa", + "OG0000109.fa", + "OG0000110.fa", + "OG0000111.fa", + "OG0000112.fa", + "OG0000113.fa", + "OG0000114.fa", + "OG0000115.fa", + "OG0000116.fa", + "OG0000117.fa", + "OG0000118.fa", + "OG0000119.fa", + "OG0000120.fa", + "OG0000121.fa", + "OG0000122.fa", + "OG0000123.fa", + "OG0000124.fa", + "OG0000125.fa", + "OG0000126.fa", + "OG0000127.fa", + "OG0000128.fa", + "OG0000129.fa", + "OG0000130.fa", + "OG0000131.fa", + "OG0000132.fa", + "OG0000133.fa", + "OG0000134.fa", + "OG0000135.fa", + "OG0000136.fa", + "OG0000137.fa", + "OG0000138.fa", + "OG0000139.fa", + "OG0000140.fa", + "OG0000141.fa", + "OG0000142.fa", + "OG0000143.fa", + "OG0000144.fa", + "OG0000145.fa", + "OG0000146.fa", + "OG0000147.fa", + "OG0000148.fa", + "OG0000149.fa", + "OG0000150.fa", + "OG0000151.fa", + "OG0000152.fa", + "OG0000153.fa", + "OG0000154.fa", + "OG0000155.fa", + "OG0000156.fa", + "OG0000157.fa", + "OG0000158.fa", + "OG0000159.fa", + "OG0000160.fa", + "OG0000161.fa", + "OG0000162.fa", + "OG0000163.fa", + "OG0000164.fa", + "OG0000165.fa", + "OG0000166.fa", + "OG0000167.fa", + "OG0000168.fa", + "OG0000169.fa", + "OG0000170.fa", + "OG0000171.fa", + "OG0000172.fa", + "OG0000173.fa", + "OG0000174.fa", + "OG0000175.fa", + "OG0000176.fa", + "OG0000177.fa", + "OG0000178.fa", + "OG0000179.fa", + "OG0000180.fa", + "OG0000181.fa", + "OG0000182.fa", + "OG0000183.fa", + "OG0000184.fa", + "OG0000185.fa", + "OG0000186.fa", + "OG0000187.fa", + "OG0000188.fa", + "OG0000189.fa", + "OG0000190.fa", + "OG0000191.fa", + "OG0000192.fa", + "OG0000193.fa", + "OG0000194.fa", + "OG0000195.fa", + "OG0000196.fa", + "OG0000197.fa", + "OG0000198.fa", + "OG0000199.fa", + "OG0000200.fa", + "OG0000201.fa", + "OG0000202.fa", + "OG0000203.fa", + "OG0000204.fa", + "OG0000205.fa", + "OG0000206.fa", + "OG0000207.fa", + "OG0000208.fa", + "OG0000209.fa", + "OG0000210.fa", + "OG0000211.fa", + "OG0000212.fa", + "OG0000213.fa", + "OG0000214.fa", + "OG0000215.fa", + "OG0000216.fa", + "OG0000217.fa", + "OG0000218.fa", + "OG0000219.fa", + "OG0000220.fa", + "OG0000221.fa", + "OG0000222.fa", + "OG0000223.fa", + "OG0000224.fa", + "OG0000225.fa", + "OG0000226.fa", + "OG0000227.fa", + "OG0000228.fa", + "OG0000229.fa", + "OG0000230.fa", + "OG0000231.fa", + "OG0000232.fa", + "OG0000233.fa", + "OG0000234.fa", + "OG0000235.fa", + "OG0000236.fa", + "OG0000237.fa", + "OG0000238.fa", + "OG0000239.fa", + "OG0000240.fa", + "OG0000241.fa", + "OG0000242.fa", + "OG0000243.fa", + "OG0000244.fa", + "OG0000245.fa", + "OrthoFinder_graph.txt", + "Orthogroups.GeneCount.tsv", + "Orthogroups.tsv", + "Orthogroups.txt", + "Orthogroups_SingleCopyOrthologues.txt", + "Orthogroups_SpeciesOverlaps.tsv", + "Orthogroups_UnassignedGenes.tsv", + "OrthologuesStats_Totals.tsv", + "OrthologuesStats_many-to-many.tsv", + "OrthologuesStats_many-to-one.tsv", + "OrthologuesStats_one-to-many.tsv", + "OrthologuesStats_one-to-one.tsv", + "SequenceIDs.txt", + "SimpleTest.phy", + "SimpleTest.phy_fastme_stat.txt", + "SimpleTest.tre", + "Species0.fa", + "Species0.fa", + "Species1.fa", + "SpeciesIDs.txt", + "SpeciesTree_Gene_Duplications_0.5_Support.txt", + "SpeciesTree_rooted.txt", + "SpeciesTree_rooted_ids.txt", + "SpeciesTree_rooted_node_labels.txt", + "SpeciesTree_unrooted.txt", + "SpeciesTree_unrooted_ids.txt", + "Statistics_Overall.tsv", + "Statistics_PerSpecies.tsv", + "candidatus_portiera_aleyrodidarum.tsv", + "candidatus_portiera_aleyrodidarum.tsv", + "candidatus_portiera_aleyrodidarum__v__sarscov2.tsv", + "clusters_OrthoFinder_I1.5.txt", + "clusters_OrthoFinder_I1.5.txt_id_pairs.txt", + "diamondDBSpecies0.dmnd", + "diamondDBSpecies0.dmnd", + "diamondDBSpecies1.dmnd", + "sarscov2.tsv", + "sarscov2.tsv", + "sarscov2__v__candidatus_portiera_aleyrodidarum.tsv", + "test_search_results.txt.gz" + ], + [ + "Statistics_PerSpecies.tsv:md5,984b5011a34d54527fe17896bfa36a2d", + "SpeciesTree_Gene_Duplications_0.5_Support.txt:md5,8b7a673e2e8b6d1aeb697f2bb88afa18", + "SpeciesTree_rooted.txt:md5,4d5ea525feebe479fca0c0768271ba81" + ], + "versions.yml:md5,86b472c85626aac1840eec0769016f5c" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-07T21:33:50.902329" + }, + "sarscov2 - candidatus_portiera_aleyrodidarum - proteome - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + [ + [ + + ], + [ + + ], + [ + + ], + "Log.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + [ + + ], + [ + + ], + [ + + ], + [ + + ], + [ + + ], + [ + + ], + [ + + ], + [ + + ], + [ + + ], + [ + + ] + ] + ] + ], + "1": [ + "versions.yml:md5,86b472c85626aac1840eec0769016f5c" + ], + "orthofinder": [ + [ + { + "id": "test", + "single_end": false + }, + [ + [ + + ], + [ + + ], + [ + + ], + "Log.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + [ + + ], + [ + + ], + [ + + ], + [ + + ], + [ + + ], + [ + + ], + [ + + ], + [ + + ], + [ + + ], + [ + + ] + ] + ] + ], + "versions": [ + "versions.yml:md5,86b472c85626aac1840eec0769016f5c" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-07T16:00:56.530716" + } +} \ No newline at end of file diff --git a/modules/nf-core/orthofinder/tests/tags.yml b/modules/nf-core/orthofinder/tests/tags.yml new file mode 100644 index 0000000..f386e25 --- /dev/null +++ b/modules/nf-core/orthofinder/tests/tags.yml @@ -0,0 +1,2 @@ +orthofinder: + - "modules/nf-core/orthofinder/**" diff --git a/subworkflows/local/gff_store.nf b/subworkflows/local/gff_store.nf index 3326e2a..217cb6d 100644 --- a/subworkflows/local/gff_store.nf +++ b/subworkflows/local/gff_store.nf @@ -1,11 +1,13 @@ import java.net.URLEncoder include { GT_GFF3 as FINAL_GFF_CHECK } from '../../modules/nf-core/gt/gff3/main' +include { GFFREAD as EXTRACT_PROTEINS } from '../../modules/nf-core/gffread/main' workflow GFF_STORE { take: ch_target_gff // [ meta, gff ] ch_eggnogmapper_annotations // [ meta, annotations ] + ch_fasta // [ meta, fasta ] main: ch_versions = Channel.empty() @@ -112,8 +114,21 @@ workflow GFF_STORE { ch_final_gff = FINAL_GFF_CHECK.out.gt_gff3 ch_versions = ch_versions.mix(FINAL_GFF_CHECK.out.versions.first()) + // MODULE: GFFREAD as EXTRACT_PROTEINS + ch_extraction_inputs = ch_final_gff + | join(ch_fasta) + + EXTRACT_PROTEINS( + ch_extraction_inputs.map { meta, gff, fasta -> [ meta, gff ] }, + ch_extraction_inputs.map { meta, gff, fasta -> fasta } + ) + + ch_final_proteins = EXTRACT_PROTEINS.out.gffread_fasta + ch_versions = ch_versions.mix(FINAL_GFF_CHECK.out.versions.first()) + emit: final_gff = ch_final_gff // [ meta, gff ] + final_proteins = ch_final_proteins // [ meta, fasta ] versions = ch_versions // [ versions.yml ] } diff --git a/workflows/pangene.nf b/workflows/pangene.nf index b11a014..3b9d834 100644 --- a/workflows/pangene.nf +++ b/workflows/pangene.nf @@ -11,6 +11,7 @@ include { GFF_MERGE_CLEANUP } from '../subworkflows/local/gf include { GFF_EGGNOGMAPPER } from '../subworkflows/local/gff_eggnogmapper' include { PURGE_NOHIT_MODELS } from '../subworkflows/local/purge_nohit_models' include { GFF_STORE } from '../subworkflows/local/gff_store' +include { ORTHOFINDER } from '../modules/nf-core/orthofinder/main' include { CUSTOM_DUMPSOFTWAREVERSIONS } from '../modules/nf-core/custom/dumpsoftwareversions' log.info paramsSummaryLog(workflow) @@ -256,9 +257,23 @@ workflow PANGENE { // SUBWORKFLOW: GFF_STORE GFF_STORE( ch_purged_gff, - ch_eggnogmapper_annotations + ch_eggnogmapper_annotations, + ch_valid_target_assembly ) + ch_final_proteins = GFF_STORE.out.final_proteins + ch_versions = ch_versions.mix(GFF_STORE.out.versions) + + // MODULE: ORTHOFINDER + ch_orthofinder_peps = ch_final_proteins + | map { meta, fasta -> fasta } + | collect + | filter { it.size() > 1 } + + ORTHOFINDER ( ch_orthofinder_peps.map { fastas -> [ [ id: 'pangene' ], fastas ] } ) + + ch_versions = ch_versions.mix(ORTHOFINDER.out.versions) + // MODULE: CUSTOM_DUMPSOFTWAREVERSIONS CUSTOM_DUMPSOFTWAREVERSIONS ( ch_versions.unique().collectFile(name: 'collated_versions.yml') From be19f5901ba2f57a15c3b21e9d4a4d5f6dbd9927 Mon Sep 17 00:00:00 2001 From: Usman Rashid Date: Tue, 18 Jun 2024 12:36:23 +1200 Subject: [PATCH 02/87] Added orthofinder_annotations param --- assets/schema_liftoff.json | 4 +- assets/schema_orthofinder.json | 31 ++++++++++++ conf/modules.config | 7 +++ nextflow.config | 1 + nextflow_schema.json | 20 +++++--- subworkflows/local/fasta_gfff_orthofinder.nf | 53 ++++++++++++++++++++ workflows/pangene.nf | 34 +++++++++---- 7 files changed, 131 insertions(+), 19 deletions(-) create mode 100644 assets/schema_orthofinder.json create mode 100644 subworkflows/local/fasta_gfff_orthofinder.nf diff --git a/assets/schema_liftoff.json b/assets/schema_liftoff.json index f4bb651..9b19af6 100644 --- a/assets/schema_liftoff.json +++ b/assets/schema_liftoff.json @@ -1,8 +1,8 @@ { "$schema": "http://json-schema.org/draft-07/schema", "$id": "https://raw.githubusercontent.com/plantandfoodresearch/pangene/master/assets/schema_fastq.json", - "title": "plantandfoodresearch/pangene pipeline - params.fastq schema", - "description": "Schema for the file provided with params.fastq", + "title": "plantandfoodresearch/pangene pipeline - params.liftoff_annotations schema", + "description": "Schema for the file provided with params.liftoff_annotations", "type": "array", "items": { "type": "object", diff --git a/assets/schema_orthofinder.json b/assets/schema_orthofinder.json new file mode 100644 index 0000000..62561ae --- /dev/null +++ b/assets/schema_orthofinder.json @@ -0,0 +1,31 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema", + "$id": "https://raw.githubusercontent.com/plantandfoodresearch/pangene/master/assets/schema_fastq.json", + "title": "plantandfoodresearch/pangene pipeline - params.orthofinder_annotations schema", + "description": "Schema for the file provided with params.orthofinder_annotations", + "type": "array", + "items": { + "type": "object", + "properties": { + "tag": { + "type": "string", + "pattern": "^\\w+$", + "errorMessage": "Annotation tags must be provided and can only contain alphanumeric characters including '_'", + "unique": true + }, + "fasta": { + "type": "string", + "pattern": "^\\S+\\.f(a|asta|as|sa|na)(\\.gz)?$", + "errorMessage": "FASTA file path cannot contain spaces and must have extension '.f(a|asta|as|sa|na)' or '.f(a|asta|as|sa|na).gz'", + "unique": true + }, + "gff3": { + "type": "string", + "pattern": "^\\S+\\.gff(3)?(\\.gz)?$", + "errorMessage": "Annotation GFF3 file path cannot contain spaces and must have extension '.gff.gz', '.gff3.gz', '.gff' or '.gff3'", + "unique": true + } + }, + "required": ["tag", "fasta", "gff3"] + } +} diff --git a/conf/modules.config b/conf/modules.config index aba4401..8e10af8 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -262,6 +262,13 @@ process { } } +process { + withName: '.*:FASTA_GFFF_ORTHOFINDER:EXTRACT_PROTEINS' { + ext.args = '-y' + ext.prefix = { "${meta.id}.pep" } + } +} + process { withName: 'CUSTOM_DUMPSOFTWAREVERSIONS' { publishDir = [ diff --git a/nextflow.config b/nextflow.config index 1b191f6..4dd95e4 100644 --- a/nextflow.config +++ b/nextflow.config @@ -8,6 +8,7 @@ params { eggnogmapper_tax_scope = null fastq = null liftoff_annotations = null + orthofinder_annotations = null outdir = "./results" // Repeat annotation options diff --git a/nextflow_schema.json b/nextflow_schema.json index 988f87a..7968ba8 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -10,7 +10,7 @@ "type": "object", "fa_icon": "fas fa-terminal", "description": "", - "required": ["input", "outdir", "external_protein_fastas", "eggnogmapper_db_dir", "eggnogmapper_tax_scope"], + "required": ["input", "external_protein_fastas", "eggnogmapper_db_dir", "eggnogmapper_tax_scope", "outdir"], "properties": { "input": { "type": "string", @@ -19,13 +19,11 @@ "schema": "assets/schema_input.json", "pattern": "^\\S+\\.csv$", "description": "Target assemblies listed in a CSV sheet", - "fa_icon": "fas fa-file-csv", - "help_text": "FASTA and other associated files for target assemblies provided as a CSV sheet" + "fa_icon": "fas fa-file-csv" }, "external_protein_fastas": { "type": "string", "description": "External protein fastas listed in a text sheet", - "help_text": "A text file listing FASTA files to provide protein evidence for annotation", "format": "file-path", "mimetype": "text/txt", "fa_icon": "far fa-file-alt" @@ -46,7 +44,6 @@ "mimetype": "text/csv", "schema": "assets/schema_fastq.json", "pattern": "^\\S+\\.csv$", - "help_text": "FASTQ files for RNASeq samples corresponding to each target assembly provided in a CSV sheet", "fa_icon": "fas fa-file-csv", "description": "FASTQ samples listed in a CSV sheet" }, @@ -57,7 +54,15 @@ "schema": "assets/schema_liftoff.json", "pattern": "^\\S+\\.csv$", "description": "Reference annotations listed in a CSV sheet", - "help_text": "FASTA and GFF3 files for reference annotations for liftoff listed in a CSV sheet", + "fa_icon": "fas fa-file-csv" + }, + "orthofinder_annotations": { + "type": "string", + "format": "file-path", + "mimetype": "text/csv", + "schema": "/assets/schema_orthofinder.json", + "pattern": "^\\S+\\.csv$", + "description": "Additional annotations for orthology listed in a CSV sheet", "fa_icon": "fas fa-file-csv" }, "outdir": { @@ -65,8 +70,7 @@ "format": "directory-path", "description": "The output directory where the results will be saved", "fa_icon": "fas fa-folder-open", - "default": "./results", - "help_text": " Use absolute paths to storage on Cloud infrastructure" + "default": "./results" } } }, diff --git a/subworkflows/local/fasta_gfff_orthofinder.nf b/subworkflows/local/fasta_gfff_orthofinder.nf new file mode 100644 index 0000000..f0a4298 --- /dev/null +++ b/subworkflows/local/fasta_gfff_orthofinder.nf @@ -0,0 +1,53 @@ +include { FILE_GUNZIP as FASTA_GUNZIP } from '../../subworkflows/local/file_gunzip' +include { FILE_GUNZIP as GFF_GUNZIP } from '../../subworkflows/local/file_gunzip' +include { GFFREAD as EXTRACT_PROTEINS } from '../../modules/nf-core/gffread/main' +include { ORTHOFINDER } from '../../modules/nf-core/orthofinder/main' + +workflow FASTA_GFFF_ORTHOFINDER { + take: + ch_pep_fasta // [ meta, fasta ] + ch_fasta // [ meta, fasta ] + ch_gff // [ meta, gff ] + + main: + ch_versions = Channel.empty() + + // SUBWORKFLOW: FILE_GUNZIP as FASTA_GUNZIP + FASTA_GUNZIP ( ch_fasta ) + + ch_fasta_unzipped = FASTA_GUNZIP.out.gunzip + ch_versions = ch_versions.mix(FASTA_GUNZIP.out.versions) + + // SUBWORKFLOW: FILE_GUNZIP as GFF_GUNZIP + GFF_GUNZIP ( ch_gff ) + + ch_gff_unzipped = GFF_GUNZIP.out.gunzip + ch_versions = ch_versions.mix(GFF_GUNZIP.out.versions) + + // MODULE: GFFREAD as EXTRACT_PROTEINS + ch_extraction_inputs = ch_gff_unzipped + | join(ch_fasta_unzipped) + + EXTRACT_PROTEINS( + ch_extraction_inputs.map { meta, gff, fasta -> [ meta, gff ] }, + ch_extraction_inputs.map { meta, gff, fasta -> fasta } + ) + + ch_versions = ch_versions.mix(EXTRACT_PROTEINS.out.versions.first()) + + // MODULE: ORTHOFINDER + ch_orthofinder_peps = EXTRACT_PROTEINS.out.gffread_fasta + | map { meta, fasta -> fasta } + | mix( + ch_pep_fasta.map { meta, fasta -> fasta } + ) + | collect + | filter { it.size() > 1 } + + ORTHOFINDER ( ch_orthofinder_peps.map { fastas -> [ [ id: 'pangene' ], fastas ] } ) + + ch_versions = ch_versions.mix(ORTHOFINDER.out.versions) + + emit: + versions = ch_versions // [ versions.yml ] +} diff --git a/workflows/pangene.nf b/workflows/pangene.nf index 3b9d834..4e82a49 100644 --- a/workflows/pangene.nf +++ b/workflows/pangene.nf @@ -11,7 +11,7 @@ include { GFF_MERGE_CLEANUP } from '../subworkflows/local/gf include { GFF_EGGNOGMAPPER } from '../subworkflows/local/gff_eggnogmapper' include { PURGE_NOHIT_MODELS } from '../subworkflows/local/purge_nohit_models' include { GFF_STORE } from '../subworkflows/local/gff_store' -include { ORTHOFINDER } from '../modules/nf-core/orthofinder/main' +include { FASTA_GFFF_ORTHOFINDER } from '../subworkflows/local/fasta_gfff_orthofinder' include { CUSTOM_DUMPSOFTWAREVERSIONS } from '../modules/nf-core/custom/dumpsoftwareversions' log.info paramsSummaryLog(workflow) @@ -140,6 +140,23 @@ workflow PANGENE { ? "${projectDir}/assets/tsebra-default.cfg" : "${projectDir}/assets/tsebra-1form.cfg" + ch_orthofinder_mm = ! params.orthofinder_annotations + ? Channel.empty() + : Channel.fromSamplesheet('orthofinder_annotations') + | multiMap { tag, fasta, gff -> + + fasta: [ [ id: tag ], file(fasta, checkIfExists:true) ] + gff: [ [ id: tag ], file(gff, checkIfExists:true) ] + } + + ch_orthofinder_fasta = params.orthofinder_annotations + ? ch_orthofinder_mm.fasta + : Channel.empty() + + ch_orthofinder_gff = params.orthofinder_annotations + ? ch_orthofinder_mm.gff + : Channel.empty() + // SUBWORKFLOW: PREPARE_ASSEMBLY PREPARE_ASSEMBLY( ch_target_assembly, @@ -264,15 +281,14 @@ workflow PANGENE { ch_final_proteins = GFF_STORE.out.final_proteins ch_versions = ch_versions.mix(GFF_STORE.out.versions) - // MODULE: ORTHOFINDER - ch_orthofinder_peps = ch_final_proteins - | map { meta, fasta -> fasta } - | collect - | filter { it.size() > 1 } - - ORTHOFINDER ( ch_orthofinder_peps.map { fastas -> [ [ id: 'pangene' ], fastas ] } ) + // SUBWORKFLOW: FASTA_GFFF_ORTHOFINDER + FASTA_GFFF_ORTHOFINDER( + ch_final_proteins, + ch_orthofinder_fasta, + ch_orthofinder_gff + ) - ch_versions = ch_versions.mix(ORTHOFINDER.out.versions) + ch_versions = ch_versions.mix(FASTA_GFFF_ORTHOFINDER.out.versions) // MODULE: CUSTOM_DUMPSOFTWAREVERSIONS CUSTOM_DUMPSOFTWAREVERSIONS ( From 10164c83ea8d316070c372ed2867c7495469aacb Mon Sep 17 00:00:00 2001 From: Usman Rashid Date: Wed, 19 Jun 2024 12:24:02 +1200 Subject: [PATCH 03/87] Fixed spellings --- CHANGELOG.md | 20 ++++++++++++++++++- nextflow.config | 2 +- ...rthofinder.nf => fasta_gff_orthofinder.nf} | 2 +- subworkflows/local/purge_breaker_models.nf | 2 +- workflows/pangene.nf | 18 ++++++++--------- 5 files changed, 31 insertions(+), 13 deletions(-) rename subworkflows/local/{fasta_gfff_orthofinder.nf => fasta_gff_orthofinder.nf} (98%) diff --git a/CHANGELOG.md b/CHANGELOG.md index be03a5c..45c61be 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,24 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## 0.4 - [19-Jun-2024] + +### `Added` + +1. Added `orthofinder_annotations` param +2. Added `FASTA_GFF_ORTHOFINDER` sub-workflow + +### `Fixed` + +1. Fixed BRAKER spellings [#36](https://github.com/PlantandFoodResearch/pangene/issues/36) + +### `Dependencies` + +1. NextFlow!>=23.04.4 +2. nf-validation=1.1.3 + +### `Deprecated` + ## 0.3.3 - [18-Jun-2024] ### `Added` @@ -80,7 +98,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 20. Now using a txt file for `params.external_protein_fastas` 21. Now using nf-validation for `params.liftoff_annotations` 22. Now using nf-validation for all the parameters -23. Added `PURGE_BREAKER_MODELS` sub-workflow +23. Added `PURGE_BRAKER_MODELS` sub-workflow 24. Added `GFF_EGGNOGMAPPER` sub-workflow 25. Now using a custom version of `GFFREAD` which supports `meta` and `fasta` 26. Now using TSEBRA to purge models which do not have full intron support from BRAKER hints diff --git a/nextflow.config b/nextflow.config index 4dd95e4..ed291fb 100644 --- a/nextflow.config +++ b/nextflow.config @@ -59,7 +59,7 @@ manifest { description = """A NextFlow pipeline for pan-genome annotation""" mainScript = 'main.nf' nextflowVersion = '!>=23.04.4' - version = '0.3.3' + version = '0.4' doi = '' } diff --git a/subworkflows/local/fasta_gfff_orthofinder.nf b/subworkflows/local/fasta_gff_orthofinder.nf similarity index 98% rename from subworkflows/local/fasta_gfff_orthofinder.nf rename to subworkflows/local/fasta_gff_orthofinder.nf index f0a4298..52fe66d 100644 --- a/subworkflows/local/fasta_gfff_orthofinder.nf +++ b/subworkflows/local/fasta_gff_orthofinder.nf @@ -3,7 +3,7 @@ include { FILE_GUNZIP as GFF_GUNZIP } from '../../subworkflows/local/file_gu include { GFFREAD as EXTRACT_PROTEINS } from '../../modules/nf-core/gffread/main' include { ORTHOFINDER } from '../../modules/nf-core/orthofinder/main' -workflow FASTA_GFFF_ORTHOFINDER { +workflow FASTA_GFF_ORTHOFINDER { take: ch_pep_fasta // [ meta, fasta ] ch_fasta // [ meta, fasta ] diff --git a/subworkflows/local/purge_breaker_models.nf b/subworkflows/local/purge_breaker_models.nf index db828ab..f15ec87 100644 --- a/subworkflows/local/purge_breaker_models.nf +++ b/subworkflows/local/purge_breaker_models.nf @@ -7,7 +7,7 @@ include { AGAT_SPFILTERFEATUREFROMKILLLIST } from '../. include { GFFCOMPARE as VALIDATE_PURGING_BY_AGAT } from '../../modules/nf-core/gffcompare/main' include { AGAT_SPMERGEANNOTATIONS as MERGE_BRAKER_LIFTOFF } from '../../modules/pfr/agat/spmergeannotations/main' -workflow PURGE_BREAKER_MODELS { +workflow PURGE_BRAKER_MODELS { take: braker_gff3 // [ meta, gff3 ] braker_hints // [ meta, gff ] diff --git a/workflows/pangene.nf b/workflows/pangene.nf index 4e82a49..0660bb6 100644 --- a/workflows/pangene.nf +++ b/workflows/pangene.nf @@ -6,12 +6,12 @@ include { ALIGN_RNASEQ } from '../subworkflows/local/al include { PREPARE_EXT_PROTS } from '../subworkflows/local/prepare_ext_prots' include { FASTA_BRAKER3 } from '../subworkflows/local/fasta_braker3' include { FASTA_LIFTOFF } from '../subworkflows/local/fasta_liftoff' -include { PURGE_BREAKER_MODELS } from '../subworkflows/local/purge_breaker_models' +include { PURGE_BRAKER_MODELS } from '../subworkflows/local/purge_braker_models' include { GFF_MERGE_CLEANUP } from '../subworkflows/local/gff_merge_cleanup' include { GFF_EGGNOGMAPPER } from '../subworkflows/local/gff_eggnogmapper' include { PURGE_NOHIT_MODELS } from '../subworkflows/local/purge_nohit_models' include { GFF_STORE } from '../subworkflows/local/gff_store' -include { FASTA_GFFF_ORTHOFINDER } from '../subworkflows/local/fasta_gfff_orthofinder' +include { FASTA_GFF_ORTHOFINDER } from '../subworkflows/local/fasta_gff_orthofinder' include { CUSTOM_DUMPSOFTWAREVERSIONS } from '../modules/nf-core/custom/dumpsoftwareversions' log.info paramsSummaryLog(workflow) @@ -229,8 +229,8 @@ workflow PANGENE { ch_liftoff_gff3 = FASTA_LIFTOFF.out.gff3 ch_versions = ch_versions.mix(FASTA_LIFTOFF.out.versions) - // SUBWORKFLOW: PURGE_BREAKER_MODELS - PURGE_BREAKER_MODELS( + // SUBWORKFLOW: PURGE_BRAKER_MODELS + PURGE_BRAKER_MODELS( ch_braker_gff3, ch_braker_hints, ch_liftoff_gff3, @@ -238,8 +238,8 @@ workflow PANGENE { params.braker_allow_isoforms ) - ch_braker_purged_gff = PURGE_BREAKER_MODELS.out.braker_purged_gff - ch_versions = ch_versions.mix(PURGE_BREAKER_MODELS.out.versions) + ch_braker_purged_gff = PURGE_BRAKER_MODELS.out.braker_purged_gff + ch_versions = ch_versions.mix(PURGE_BRAKER_MODELS.out.versions) // SUBWORKFLOW: GFF_MERGE_CLEANUP GFF_MERGE_CLEANUP( @@ -281,14 +281,14 @@ workflow PANGENE { ch_final_proteins = GFF_STORE.out.final_proteins ch_versions = ch_versions.mix(GFF_STORE.out.versions) - // SUBWORKFLOW: FASTA_GFFF_ORTHOFINDER - FASTA_GFFF_ORTHOFINDER( + // SUBWORKFLOW: FASTA_GFF_ORTHOFINDER + FASTA_GFF_ORTHOFINDER( ch_final_proteins, ch_orthofinder_fasta, ch_orthofinder_gff ) - ch_versions = ch_versions.mix(FASTA_GFFF_ORTHOFINDER.out.versions) + ch_versions = ch_versions.mix(FASTA_GFF_ORTHOFINDER.out.versions) // MODULE: CUSTOM_DUMPSOFTWAREVERSIONS CUSTOM_DUMPSOFTWAREVERSIONS ( From 735a8236bfba82c47ac777e55280cf3a3729301d Mon Sep 17 00:00:00 2001 From: Usman Rashid Date: Wed, 19 Jun 2024 12:47:32 +1200 Subject: [PATCH 04/87] Updated modules and subworkflows --- CHANGELOG.md | 2 + modules.json | 66 +- .../agat/convertspgff2gtf/environment.yml | 2 +- modules/nf-core/agat/convertspgff2gtf/main.nf | 8 +- .../nf-core/agat/convertspgff2gtf/meta.yml | 1 + .../convertspgff2gtf/tests/main.nf.test.snap | 18 +- modules/nf-core/cat/fastq/tests/main.nf.test | 2 + .../templates/dumpsoftwareversions.py | 1 - .../nf-core/eggnogmapper/eggnogmapper.diff | 53 - modules/nf-core/eggnogmapper/main.nf | 8 +- .../nf-core/eggnogmapper/tests/main.nf.test | 67 +- .../eggnogmapper/tests/main.nf.test.snap | 47 +- modules/nf-core/fastp/main.nf | 17 +- modules/nf-core/fastp/meta.yml | 6 +- modules/nf-core/fastp/tests/main.nf.test | 712 ++++-------- modules/nf-core/fastp/tests/main.nf.test.snap | 1018 +++++++++++++---- modules/nf-core/gffread/gffread.diff | 675 ----------- modules/nf-core/gffread/main.nf | 4 +- .../builddatabase/environment.yml | 0 .../repeatmodeler/builddatabase/main.nf | 0 .../repeatmodeler/builddatabase/meta.yml | 0 .../builddatabase/tests/main.nf.test | 8 +- .../builddatabase/tests/main.nf.test.snap | 92 ++ .../builddatabase/tests/tags.yml | 2 + .../repeatmodeler/environment.yml | 0 .../repeatmodeler/repeatmodeler/main.nf | 10 +- .../repeatmodeler/repeatmodeler/meta.yml | 0 .../repeatmodeler/tests/main.nf.test | 24 +- .../repeatmodeler/tests/main.nf.test.snap | 113 ++ .../repeatmodeler/tests/tags.yml | 2 + modules/nf-core/samtools/cat/environment.yml | 4 +- modules/nf-core/samtools/cat/main.nf | 4 +- .../samtools/cat/tests/main.nf.test.snap | 12 +- .../{pfr => nf-core}/tsebra/environment.yml | 2 +- modules/{pfr => nf-core}/tsebra/main.nf | 9 +- modules/{pfr => nf-core}/tsebra/meta.yml | 0 .../tsebra/tests/main.nf.test | 14 +- .../tsebra/tests/main.nf.test.snap | 16 +- modules/nf-core/tsebra/tests/tags.yml | 2 + .../templates/restore_gff_ids.py | 6 +- .../custom/restoregffids/tests/main.nf.test | 2 +- .../restoregffids/tests/main.nf.test.snap | 20 + .../custom/shortenfastaids/environment.yml | 2 +- modules/pfr/custom/shortenfastaids/main.nf | 6 +- .../templates/shorten_fasta_ids.py | 10 +- .../custom/shortenfastaids/tests/main.nf.test | 20 +- .../shortenfastaids/tests/main.nf.test.snap | 73 +- modules/pfr/edta/edta/environment.yml | 9 - modules/pfr/edta/edta/main.nf | 1 - modules/pfr/edta/edta/tests/main.nf.test | 43 +- modules/pfr/edta/edta/tests/main.nf.test.snap | 81 ++ modules/pfr/edta/edta/tests/nextflow.config | 4 +- .../builddatabase/tests/main.nf.test.snap | 16 - .../builddatabase/tests/tags.yml | 2 - .../repeatmodeler/tests/main.nf.test.snap | 46 - .../repeatmodeler/tests/tags.yml | 2 - modules/pfr/tsebra/tests/tags.yml | 2 - subworkflows/local/prepare_assembly.nf | 4 +- subworkflows/local/purge_breaker_models.nf | 2 +- .../fastq_fastqc_umitools_fastp/main.nf | 11 +- .../tests/main.nf.test | 38 +- .../tests/main.nf.test.snap | 32 +- .../tests/nextflow.config | 4 +- .../tests/nextflow.save_trimmed.config | 2 +- subworkflows/pfr/fasta_edta_lai/main.nf | 127 +- .../pfr/fasta_edta_lai/tests/main.nf.test | 50 +- .../fasta_edta_lai/tests/main.nf.test.snap | 18 +- 67 files changed, 1871 insertions(+), 1783 deletions(-) delete mode 100644 modules/nf-core/eggnogmapper/eggnogmapper.diff delete mode 100644 modules/nf-core/gffread/gffread.diff rename modules/{pfr => nf-core}/repeatmodeler/builddatabase/environment.yml (100%) rename modules/{pfr => nf-core}/repeatmodeler/builddatabase/main.nf (100%) rename modules/{pfr => nf-core}/repeatmodeler/builddatabase/meta.yml (100%) rename modules/{pfr => nf-core}/repeatmodeler/builddatabase/tests/main.nf.test (83%) create mode 100644 modules/nf-core/repeatmodeler/builddatabase/tests/main.nf.test.snap create mode 100644 modules/nf-core/repeatmodeler/builddatabase/tests/tags.yml rename modules/{pfr => nf-core}/repeatmodeler/repeatmodeler/environment.yml (100%) rename modules/{pfr => nf-core}/repeatmodeler/repeatmodeler/main.nf (85%) rename modules/{pfr => nf-core}/repeatmodeler/repeatmodeler/meta.yml (100%) rename modules/{pfr => nf-core}/repeatmodeler/repeatmodeler/tests/main.nf.test (64%) create mode 100644 modules/nf-core/repeatmodeler/repeatmodeler/tests/main.nf.test.snap create mode 100644 modules/nf-core/repeatmodeler/repeatmodeler/tests/tags.yml rename modules/{pfr => nf-core}/tsebra/environment.yml (86%) rename modules/{pfr => nf-core}/tsebra/main.nf (77%) rename modules/{pfr => nf-core}/tsebra/meta.yml (100%) rename modules/{pfr => nf-core}/tsebra/tests/main.nf.test (70%) rename modules/{pfr => nf-core}/tsebra/tests/main.nf.test.snap (84%) create mode 100644 modules/nf-core/tsebra/tests/tags.yml delete mode 100644 modules/pfr/edta/edta/environment.yml create mode 100644 modules/pfr/edta/edta/tests/main.nf.test.snap delete mode 100644 modules/pfr/repeatmodeler/builddatabase/tests/main.nf.test.snap delete mode 100644 modules/pfr/repeatmodeler/builddatabase/tests/tags.yml delete mode 100644 modules/pfr/repeatmodeler/repeatmodeler/tests/main.nf.test.snap delete mode 100644 modules/pfr/repeatmodeler/repeatmodeler/tests/tags.yml delete mode 100644 modules/pfr/tsebra/tests/tags.yml diff --git a/CHANGELOG.md b/CHANGELOG.md index 45c61be..078d2c7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 1. Added `orthofinder_annotations` param 2. Added `FASTA_GFF_ORTHOFINDER` sub-workflow +3. Updated modules: `AGAT_CONVERTSPGFF2GTF`, `CAT_FASTQ`, `CUSTOM_DUMPSOFTWAREVERSIONS`, `EGGNOGMAPPER`, `FASTP`, `GFFREAD`, `SAMTOOLS_CAT`, `CUSTOM_RESTOREGFFIDS`, `CUSTOM_SHORTENFASTAIDS` and `EDTA_EDTA` +4. Updated sub-workflows: `FASTQ_FASTQC_UMITOOLS_FASTP` and `FASTA_EDTA_LAI` ### `Fixed` diff --git a/modules.json b/modules.json index b49cdc9..a465611 100644 --- a/modules.json +++ b/modules.json @@ -2,7 +2,7 @@ "name": "PlantandFoodResearch/pangene", "homePage": "https://github.com/PlantandFoodResearch/pangene", "repos": { - "git@github.com:PlantandFoodResearch/nxf-modules.git": { + "https://github.com/PlantandFoodResearch/nxf-modules.git": { "modules": { "pfr": { "agat/spfilterfeaturefromkilllist": { @@ -17,38 +17,23 @@ }, "custom/restoregffids": { "branch": "main", - "git_sha": "10b046eaac396f279c08e7e2bb067482ccd9c74e", + "git_sha": "da7a50af5eaac9601e23f33e00bf24e61f9c27ab", "installed_by": ["fasta_edta_lai"] }, "custom/shortenfastaids": { "branch": "main", - "git_sha": "10b046eaac396f279c08e7e2bb067482ccd9c74e", + "git_sha": "e9ec2e4c48ead3d760c8e13950c568c19ae86b8b", "installed_by": ["fasta_edta_lai"] }, "edta/edta": { "branch": "main", - "git_sha": "10b046eaac396f279c08e7e2bb067482ccd9c74e", + "git_sha": "651ee91ac838eaf11a5866cc022bd4be54c53e55", "installed_by": ["fasta_edta_lai"] }, "ltrretriever/lai": { "branch": "main", "git_sha": "10b046eaac396f279c08e7e2bb067482ccd9c74e", "installed_by": ["fasta_edta_lai"] - }, - "repeatmodeler/builddatabase": { - "branch": "main", - "git_sha": "10b046eaac396f279c08e7e2bb067482ccd9c74e", - "installed_by": ["modules"] - }, - "repeatmodeler/repeatmodeler": { - "branch": "main", - "git_sha": "10b046eaac396f279c08e7e2bb067482ccd9c74e", - "installed_by": ["modules"] - }, - "tsebra": { - "branch": "main", - "git_sha": "a3b86c357980e5244cb313027c1d980d89c19ef4", - "installed_by": ["modules"] } } }, @@ -56,13 +41,13 @@ "pfr": { "fasta_edta_lai": { "branch": "main", - "git_sha": "10b046eaac396f279c08e7e2bb067482ccd9c74e", + "git_sha": "e9ec2e4c48ead3d760c8e13950c568c19ae86b8b", "installed_by": ["subworkflows"] } } } }, - "git@github.com:kherronism/nf-modules.git": { + "https://github.com/kherronism/nf-modules.git": { "modules": { "kherronism": { "braker3": { @@ -83,12 +68,12 @@ "nf-core": { "agat/convertspgff2gtf": { "branch": "master", - "git_sha": "15f1cf0a1a12da63839c336eb1ecd96d03320e94", + "git_sha": "b1d41826971b91f9649b46a8f3ccb226ee150c85", "installed_by": ["modules"] }, "agat/convertspgxf2gxf": { "branch": "master", - "git_sha": "71ccbccbd498af48c33939e1123517340bab3d6f", + "git_sha": "b7d09fae1f4fd5880138af68a68c9587528f0de8", "installed_by": ["modules"] }, "cat/cat": { @@ -98,19 +83,18 @@ }, "cat/fastq": { "branch": "master", - "git_sha": "0997b47c93c06b49aa7b3fefda87e728312cf2ca", + "git_sha": "4fc983ad0b30e6e32696fa7d980c76c7bfe1c03e", "installed_by": ["modules"] }, "custom/dumpsoftwareversions": { "branch": "master", - "git_sha": "de45447d060b8c8b98575bc637a4a575fd0638e1", + "git_sha": "82024cf6325d2ee194e7f056d841ecad2f6856e9", "installed_by": ["modules"] }, "eggnogmapper": { "branch": "master", - "git_sha": "9be0d5f9aeb31bded6780b5b589de7158ccf2c7b", - "installed_by": ["modules"], - "patch": "modules/nf-core/eggnogmapper/eggnogmapper.diff" + "git_sha": "c0707299f4c5afbadc157ef49d49efaa2484a768", + "installed_by": ["modules"] }, "fastavalidator": { "branch": "master", @@ -119,7 +103,7 @@ }, "fastp": { "branch": "master", - "git_sha": "95cf5fe0194c7bf5cb0e3027a2eb7e7c89385080", + "git_sha": "b90b5cd93149a1b3be263d916c7234fe0708a71c", "installed_by": ["fastq_fastqc_umitools_fastp"] }, "fastqc": { @@ -134,9 +118,8 @@ }, "gffread": { "branch": "master", - "git_sha": "b1b959609bda44341120aed1766329909f54b8d0", - "installed_by": ["modules"], - "patch": "modules/nf-core/gffread/gffread.diff" + "git_sha": "6c996d7fbe0816dcbb68ce587ad5f873313682a1", + "installed_by": ["modules"] }, "gt/gff3": { "branch": "master", @@ -158,9 +141,19 @@ "git_sha": "07f10f34d88408af7c71f13227d11f23b7f53b50", "installed_by": ["modules"] }, + "repeatmodeler/builddatabase": { + "branch": "master", + "git_sha": "1cbb5551b917aa423e414dcd69898d01520a309d", + "installed_by": ["modules"] + }, + "repeatmodeler/repeatmodeler": { + "branch": "master", + "git_sha": "84efd2f87d07deb22ee9378f065a9aa5f1434161", + "installed_by": ["modules"] + }, "samtools/cat": { "branch": "master", - "git_sha": "f4596fe0bdc096cf53ec4497e83defdb3a94ff62", + "git_sha": "04fbbc7c43cebc0b95d5b126f6d9fe4effa33519", "installed_by": ["modules"] }, "sortmerna": { @@ -178,6 +171,11 @@ "git_sha": "a21faa6a3481af92a343a10926f59c189a2c16c9", "installed_by": ["modules"] }, + "tsebra": { + "branch": "master", + "git_sha": "0995f9cd0cc5e4eb60f7870280b75ecdb5ab0db2", + "installed_by": ["modules"] + }, "umitools/extract": { "branch": "master", "git_sha": "d2c5e76f291379f3dd403e48e46ed7e6ba5da744", @@ -189,7 +187,7 @@ "nf-core": { "fastq_fastqc_umitools_fastp": { "branch": "master", - "git_sha": "cabcc0dadf8366aa7a9930066a7b3dd90d9825d5", + "git_sha": "b90b5cd93149a1b3be263d916c7234fe0708a71c", "installed_by": ["subworkflows"] } } diff --git a/modules/nf-core/agat/convertspgff2gtf/environment.yml b/modules/nf-core/agat/convertspgff2gtf/environment.yml index 381154f..6747331 100644 --- a/modules/nf-core/agat/convertspgff2gtf/environment.yml +++ b/modules/nf-core/agat/convertspgff2gtf/environment.yml @@ -4,4 +4,4 @@ channels: - bioconda - defaults dependencies: - - bioconda::agat=1.0.0 + - bioconda::agat=1.4.0 diff --git a/modules/nf-core/agat/convertspgff2gtf/main.nf b/modules/nf-core/agat/convertspgff2gtf/main.nf index 8f1f8b4..38af025 100644 --- a/modules/nf-core/agat/convertspgff2gtf/main.nf +++ b/modules/nf-core/agat/convertspgff2gtf/main.nf @@ -4,8 +4,8 @@ process AGAT_CONVERTSPGFF2GTF { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/agat:1.0.0--pl5321hdfd78af_0' : - 'biocontainers/agat:1.0.0--pl5321hdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/agat:1.4.0--pl5321hdfd78af_0' : + 'biocontainers/agat:1.4.0--pl5321hdfd78af_0' }" input: tuple val(meta), path(gff) @@ -29,7 +29,7 @@ process AGAT_CONVERTSPGFF2GTF { cat <<-END_VERSIONS > versions.yml "${task.process}": - agat: \$(agat_convert_sp_gff2gtf.pl --help | sed '4!d; s/.*v//') + agat: \$(agat_convert_sp_gff2gtf.pl --help | sed -n 's/.*(AGAT) - Version: \\(.*\\) .*/\\1/p') END_VERSIONS """ @@ -42,7 +42,7 @@ process AGAT_CONVERTSPGFF2GTF { cat <<-END_VERSIONS > versions.yml "${task.process}": - agat: \$(agat_convert_sp_gff2gtf.pl --help | sed '4!d; s/.*v//') + agat: \$(agat_convert_sp_gff2gtf.pl --help | sed -n 's/.*(AGAT) - Version: \\(.*\\) .*/\\1/p') END_VERSIONS """ } diff --git a/modules/nf-core/agat/convertspgff2gtf/meta.yml b/modules/nf-core/agat/convertspgff2gtf/meta.yml index dcdc8d9..ab39f01 100644 --- a/modules/nf-core/agat/convertspgff2gtf/meta.yml +++ b/modules/nf-core/agat/convertspgff2gtf/meta.yml @@ -41,3 +41,4 @@ authors: - "@toniher" maintainers: - "@toniher" + - "@gallvp" diff --git a/modules/nf-core/agat/convertspgff2gtf/tests/main.nf.test.snap b/modules/nf-core/agat/convertspgff2gtf/tests/main.nf.test.snap index 6193be8..4088c71 100644 --- a/modules/nf-core/agat/convertspgff2gtf/tests/main.nf.test.snap +++ b/modules/nf-core/agat/convertspgff2gtf/tests/main.nf.test.snap @@ -4,10 +4,14 @@ [ "test.agat.gtf", "genome.gff3.agat.log", - "versions.yml:md5,dcbde1b24eb36571645f2d4bd4b4e551" + "versions.yml:md5,dcc621fac77aa683287f6a0d61e10395" ] ], - "timestamp": "2023-12-24T23:36:49.538312808" + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-05-08T10:05:11.177573" }, "sarscov2 - genome [gff3]": { "content": [ @@ -16,13 +20,17 @@ { "id": "test" }, - "test.agat.gtf:md5,bbe333239767d048eb8392bba6856616" + "test.agat.gtf:md5,be1c396ac00fd5a84dc08a36d84ff8c5" ] ], [ - "versions.yml:md5,dcbde1b24eb36571645f2d4bd4b4e551" + "versions.yml:md5,dcc621fac77aa683287f6a0d61e10395" ] ], - "timestamp": "2023-12-24T23:36:39.319717066" + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-05-08T10:05:06.695419" } } \ No newline at end of file diff --git a/modules/nf-core/cat/fastq/tests/main.nf.test b/modules/nf-core/cat/fastq/tests/main.nf.test index dab2e14..a71dcb8 100644 --- a/modules/nf-core/cat/fastq/tests/main.nf.test +++ b/modules/nf-core/cat/fastq/tests/main.nf.test @@ -1,3 +1,5 @@ +// NOTE The version snaps may not be consistant +// https://github.com/nf-core/modules/pull/4087#issuecomment-1767948035 nextflow_process { name "Test Process CAT_FASTQ" diff --git a/modules/nf-core/custom/dumpsoftwareversions/templates/dumpsoftwareversions.py b/modules/nf-core/custom/dumpsoftwareversions/templates/dumpsoftwareversions.py index da03340..9a493ac 100755 --- a/modules/nf-core/custom/dumpsoftwareversions/templates/dumpsoftwareversions.py +++ b/modules/nf-core/custom/dumpsoftwareversions/templates/dumpsoftwareversions.py @@ -3,7 +3,6 @@ """Provide functions to merge multiple versions.yml files.""" - import yaml import platform from textwrap import dedent diff --git a/modules/nf-core/eggnogmapper/eggnogmapper.diff b/modules/nf-core/eggnogmapper/eggnogmapper.diff deleted file mode 100644 index b38223d..0000000 --- a/modules/nf-core/eggnogmapper/eggnogmapper.diff +++ /dev/null @@ -1,53 +0,0 @@ -Changes in module 'nf-core/eggnogmapper' ---- modules/nf-core/eggnogmapper/meta.yml -+++ modules/nf-core/eggnogmapper/meta.yml -@@ -60,3 +60,6 @@ - pattern: "versions.yml" - authors: - - "@vagkaratzas" -+maintainers: -+ - "@vagkaratzas" -+ - "@gallvp" - ---- modules/nf-core/eggnogmapper/main.nf -+++ modules/nf-core/eggnogmapper/main.nf -@@ -1,6 +1,6 @@ - process EGGNOGMAPPER { - tag "$meta.id" -- label 'process_long' -+ label 'process_high' - - conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? -@@ -23,11 +23,13 @@ - task.ext.when == null || task.ext.when - - script: -- def args = task.ext.args ?: '' -- def prefix = task.ext.prefix ?: "${meta.id}" -- def is_compressed = fasta.name.endsWith(".gz") -- def fasta_name = fasta.name.replace(".gz", "") -- def dbmem = task.memory.toMega() > 40000 ? '--dbmem' : '' -+ def args = task.ext.args ?: '' -+ def prefix = task.ext.prefix ?: "${meta.id}" -+ def is_compressed = fasta.name.endsWith(".gz") -+ def fasta_name = fasta.name.replace(".gz", "") -+ def dbmem = task.memory.toMega() > 40000 ? '--dbmem' : '' -+ def database_arg = eggnog_db ? "--database $eggnog_db" : '' -+ def dmnd_db_arg = eggnog_diamond_db ? "--dmnd_db $eggnog_diamond_db" : '' - """ - if [ "$is_compressed" == "true" ]; then - gzip -c -d $fasta > $fasta_name -@@ -38,8 +40,8 @@ - -i ${fasta_name} \\ - --data_dir ${eggnog_data_dir} \\ - -m diamond \\ -- --dmnd_db ${eggnog_diamond_db} \\ -- --database ${eggnog_db} \\ -+ $dmnd_db_arg \\ -+ $database_arg \\ - --output ${prefix} \\ - ${dbmem} \\ - $args - -************************************************************ diff --git a/modules/nf-core/eggnogmapper/main.nf b/modules/nf-core/eggnogmapper/main.nf index 134451d..2489b7f 100644 --- a/modules/nf-core/eggnogmapper/main.nf +++ b/modules/nf-core/eggnogmapper/main.nf @@ -25,8 +25,8 @@ process EGGNOGMAPPER { script: def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" - def is_compressed = fasta.name.endsWith(".gz") - def fasta_name = fasta.name.replace(".gz", "") + def is_compressed = fasta.extension == '.gz' ? true : false + def fasta_name = is_compressed ? fasta.baseName : "$fasta" def dbmem = task.memory.toMega() > 40000 ? '--dbmem' : '' def database_arg = eggnog_db ? "--database $eggnog_db" : '' def dmnd_db_arg = eggnog_diamond_db ? "--dmnd_db $eggnog_diamond_db" : '' @@ -53,8 +53,8 @@ process EGGNOGMAPPER { """ stub: - def args = task.ext.args ?: '' - def prefix = task.ext.prefix ?: "${meta.id}" + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" """ touch ${prefix}.emapper.annotations touch ${prefix}.emapper.seed_orthologs diff --git a/modules/nf-core/eggnogmapper/tests/main.nf.test b/modules/nf-core/eggnogmapper/tests/main.nf.test index fb707ea..6f06ca9 100644 --- a/modules/nf-core/eggnogmapper/tests/main.nf.test +++ b/modules/nf-core/eggnogmapper/tests/main.nf.test @@ -8,21 +8,21 @@ nextflow_process { tag "eggnogmapper" tag "diamond/makedb" - test("Should search for protein annotations against the eggnogmapper db") { - - setup { - run("DIAMOND_MAKEDB") { - script "../../diamond/makedb/main.nf" - process { - """ - input[0] = [ [id:'test2'], file(params.test_data['sarscov2']['genome']['proteome_fasta'], checkIfExists: true) ] - input[1] = [] - input[2] = [] - input[3] = [] - """ - } + setup { + run("DIAMOND_MAKEDB") { + script "../../diamond/makedb/main.nf" + process { + """ + input[0] = [ [id:'test2'], file(params.test_data['sarscov2']['genome']['proteome_fasta'], checkIfExists: true) ] + input[1] = [] + input[2] = [] + input[3] = [] + """ } } + } + + test("Should search for protein annotations against the eggnogmapper db") { when { params { @@ -47,7 +47,46 @@ nextflow_process { { assert path(process.out.annotations.get(0).get(1)).readLines().contains("ENSSASP00005000002.1\tENSSASP00005000002.1\t0.0\t14179.0\tCOG0498@1|root,COG0498@2|Bacteria,1MUWQ@1224|Proteobacteria,2VHR6@28216|Betaproteobacteria,2KUMA@206389|Rhodocyclales\t1224|Proteobacteria\tE\tthreonine synthase\t-\t-\t-\t-\t-\t-\t-\t-\t-\t-\t-\t-\t-") }, { assert path(process.out.orthologs.get(0).get(1)).readLines().contains("ENSSASP00005000002.1\tENSSASP00005000002.1\t0.0\t14179.0\t1\t7096\t1\t7096\t100.0\t100.0\t100.0") }, { assert snapshot(process.out.hits).match("hits") }, - { assert process.out.versions } + { assert snapshot(process.out.versions).match("versions") } + ) + } + + } + + test("Should search for protein annotations against the eggnogmapper db -- empty-params") { + + when { + params { + outdir = "$outputDir" + } + process { + """ + eggnog_db = file("https://github.com/nf-core/test-datasets/raw/eddf5b0e3336e0f93c81d4b4843b07257f9efaec/data/delete_me/eggnogmapper/eggnog.db", checkIfExists: true) + eggnog_db.copyTo("${workDir}/tmp/eggnog.db") + + ch_synced_inputs = DIAMOND_MAKEDB.out.db.map { meta, dmnd -> + dmnd.copyTo("${workDir}/tmp/eggnog_proteins.dmnd") + + return true + } + | combine ( Channel.fromPath( "${workDir}/tmp/" ) ) + eggnog_data_dir = ch_synced_inputs.map { sync_status, data_dir -> data_dir } + + input[0] = [ [id:'test'], file(params.test_data['sarscov2']['genome']['proteome_fasta'], checkIfExists: true) ] + input[1] = [] + input[2] = eggnog_data_dir + input[3] = [[], []] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert path(process.out.annotations.get(0).get(1)).readLines().contains("ENSSASP00005000002.1\tENSSASP00005000002.1\t0.0\t14179.0\tCOG0498@1|root,COG0498@2|Bacteria,1MUWQ@1224|Proteobacteria,2VHR6@28216|Betaproteobacteria,2KUMA@206389|Rhodocyclales\t1224|Proteobacteria\tE\tthreonine synthase\t-\t-\t-\t-\t-\t-\t-\t-\t-\t-\t-\t-\t-") }, + { assert path(process.out.orthologs.get(0).get(1)).readLines().contains("ENSSASP00005000002.1\tENSSASP00005000002.1\t0.0\t14179.0\t1\t7096\t1\t7096\t100.0\t100.0\t100.0") }, + { assert snapshot(process.out.hits).match("hits--empty-params") }, + { assert snapshot(process.out.versions).match("versions--empty-params") } ) } diff --git a/modules/nf-core/eggnogmapper/tests/main.nf.test.snap b/modules/nf-core/eggnogmapper/tests/main.nf.test.snap index 4e1c837..170e8c9 100644 --- a/modules/nf-core/eggnogmapper/tests/main.nf.test.snap +++ b/modules/nf-core/eggnogmapper/tests/main.nf.test.snap @@ -10,6 +10,51 @@ ] ] ], - "timestamp": "2023-11-08T20:43:50.173213923" + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-04-12T13:43:01.751295" + }, + "versions--empty-params": { + "content": [ + [ + "versions.yml:md5,d3e4efad28b5a924585ea3dfcf72c32c" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-04-15T11:42:23.737523" + }, + "versions": { + "content": [ + [ + "versions.yml:md5,d3e4efad28b5a924585ea3dfcf72c32c" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-04-12T13:45:26.555465" + }, + "hits--empty-params": { + "content": [ + [ + [ + { + "id": "test" + }, + "test.emapper.hits:md5,864b7a1f902893d8aee6621baeab7be8" + ] + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-04-15T11:42:23.690105" } } \ No newline at end of file diff --git a/modules/nf-core/fastp/main.nf b/modules/nf-core/fastp/main.nf index 4fc19b7..df60ff6 100644 --- a/modules/nf-core/fastp/main.nf +++ b/modules/nf-core/fastp/main.nf @@ -10,6 +10,7 @@ process FASTP { input: tuple val(meta), path(reads) path adapter_fasta + val discard_trimmed_pass val save_trimmed_fail val save_merged @@ -18,9 +19,9 @@ process FASTP { tuple val(meta), path('*.json') , emit: json tuple val(meta), path('*.html') , emit: html tuple val(meta), path('*.log') , emit: log - path "versions.yml" , emit: versions tuple val(meta), path('*.fail.fastq.gz') , optional:true, emit: reads_fail tuple val(meta), path('*.merged.fastq.gz'), optional:true, emit: reads_merged + path "versions.yml" , emit: versions when: task.ext.when == null || task.ext.when @@ -30,6 +31,8 @@ process FASTP { def prefix = task.ext.prefix ?: "${meta.id}" def adapter_list = adapter_fasta ? "--adapter_fasta ${adapter_fasta}" : "" def fail_fastq = save_trimmed_fail && meta.single_end ? "--failed_out ${prefix}.fail.fastq.gz" : save_trimmed_fail && !meta.single_end ? "--failed_out ${prefix}.paired.fail.fastq.gz --unpaired1 ${prefix}_1.fail.fastq.gz --unpaired2 ${prefix}_2.fail.fastq.gz" : '' + def out_fq1 = discard_trimmed_pass ?: ( meta.single_end ? "--out1 ${prefix}.fastp.fastq.gz" : "--out1 ${prefix}_1.fastp.fastq.gz" ) + def out_fq2 = discard_trimmed_pass ?: "--out2 ${prefix}_2.fastp.fastq.gz" // Added soft-links to original fastqs for consistent naming in MultiQC // Use single ended for interleaved. Add --interleaved_in in config. if ( task.ext.args?.contains('--interleaved_in') ) { @@ -59,7 +62,7 @@ process FASTP { fastp \\ --in1 ${prefix}.fastq.gz \\ - --out1 ${prefix}.fastp.fastq.gz \\ + $out_fq1 \\ --thread $task.cpus \\ --json ${prefix}.fastp.json \\ --html ${prefix}.fastp.html \\ @@ -81,8 +84,8 @@ process FASTP { fastp \\ --in1 ${prefix}_1.fastq.gz \\ --in2 ${prefix}_2.fastq.gz \\ - --out1 ${prefix}_1.fastp.fastq.gz \\ - --out2 ${prefix}_2.fastp.fastq.gz \\ + $out_fq1 \\ + $out_fq2 \\ --json ${prefix}.fastp.json \\ --html ${prefix}.fastp.html \\ $adapter_list \\ @@ -103,10 +106,10 @@ process FASTP { stub: def prefix = task.ext.prefix ?: "${meta.id}" def is_single_output = task.ext.args?.contains('--interleaved_in') || meta.single_end - def touch_reads = is_single_output ? "${prefix}.fastp.fastq.gz" : "${prefix}_1.fastp.fastq.gz ${prefix}_2.fastp.fastq.gz" - def touch_merged = (!is_single_output && save_merged) ? "touch ${prefix}.merged.fastq.gz" : "" + def touch_reads = (is_single_output && !discard_trimmed_pass) ? "echo '' | gzip > ${prefix}.fastp.fastq.gz" : "echo '' | gzip > ${prefix}_1.fastp.fastq.gz ; echo '' | gzip > ${prefix}_2.fastp.fastq.gz" + def touch_merged = (!is_single_output && save_merged) ? "echo '' | gzip > ${prefix}.merged.fastq.gz" : "" """ - touch $touch_reads + $touch_reads touch "${prefix}.fastp.json" touch "${prefix}.fastp.html" touch "${prefix}.fastp.log" diff --git a/modules/nf-core/fastp/meta.yml b/modules/nf-core/fastp/meta.yml index c22a16a..8dfecc1 100644 --- a/modules/nf-core/fastp/meta.yml +++ b/modules/nf-core/fastp/meta.yml @@ -27,12 +27,16 @@ input: type: file description: File in FASTA format containing possible adapters to remove. pattern: "*.{fasta,fna,fas,fa}" + - discard_trimmed_pass: + type: boolean + description: Specify true to not write any reads that pass trimming thresholds. | + This can be used to use fastp for the output report only. - save_trimmed_fail: type: boolean description: Specify true to save files that failed to pass trimming thresholds ending in `*.fail.fastq.gz` - save_merged: type: boolean - description: Specify true to save all merged reads to the a file ending in `*.merged.fastq.gz` + description: Specify true to save all merged reads to a file ending in `*.merged.fastq.gz` output: - meta: type: map diff --git a/modules/nf-core/fastp/tests/main.nf.test b/modules/nf-core/fastp/tests/main.nf.test index 6f1f489..a659ebd 100644 --- a/modules/nf-core/fastp/tests/main.nf.test +++ b/modules/nf-core/fastp/tests/main.nf.test @@ -10,66 +10,32 @@ nextflow_process { test("test_fastp_single_end") { when { - params { - outdir = "$outputDir" - } + process { """ - adapter_fasta = [] - save_trimmed_fail = false - save_merged = false - input[0] = Channel.of([ [ id:'test', single_end:true ], [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) ] ]) - input[1] = adapter_fasta - input[2] = save_trimmed_fail - input[3] = save_merged + input[1] = [] + input[2] = false + input[3] = false + input[4] = false """ } } then { - def html_text = [ "Q20 bases:12.922000 K (92.984097%)", - "single end (151 cycles)" ] - def log_text = [ "Q20 bases: 12922(92.9841%)", - "reads passed filter: 99" ] - def read_lines = ["@ERR5069949.2151832 NS500628:121:HK3MMAFX2:2:21208:10793:15304/1", - "TCATAAACCAAAGCACTCACAGTGTCAACAATTTCAGCAGGACAACGCCGACAAGTTCCGAGGAACATGTCTGGACCTATAGTTTTCATAAGTCTACACACTGAATTGAAATATTCTGGTTCTAGTGTGCCCTTAGTTAGCAATGTGCGT", - "AAAAAAEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEAAEEEEAEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEAAEEEEE - { assert path(process.out.reads.get(0).get(1)).linesGzip.contains(read_line) } - } - }, - { html_text.each { html_part -> - { assert path(process.out.html.get(0).get(1)).getText().contains(html_part) } - } - }, - { assert snapshot(process.out.json).match("test_fastp_single_end_json") }, - { log_text.each { log_part -> - { assert path(process.out.log.get(0).get(1)).getText().contains(log_part) } - } - }, - { - assert snapshot( - ( - [process.out.reads[0][0].toString()] + // meta - process.out.reads.collect { file(it[1]).getName() } + - process.out.json.collect { file(it[1]).getName() } + - process.out.html.collect { file(it[1]).getName() } + - process.out.log.collect { file(it[1]).getName() } + - process.out.reads_fail.collect { file(it[1]).getName() } + - process.out.reads_merged.collect { file(it[1]).getName() } - ).sort() - ).match("test_fastp_single_end-_match") - }, - { assert snapshot(process.out.versions).match("versions_single_end") } + { assert snapshot( + process.out.reads, + process.out.json, + process.out.versions).match() }, + { assert process.out.reads_fail == [] }, + { assert process.out.reads_merged == [] }, + { assert path(process.out.log.get(0).get(1)).getText().contains("reads passed filter: 99") }, + { assert path(process.out.html.get(0).get(1)).getText().contains("single end (151 cycles)") } ) } } @@ -79,22 +45,16 @@ nextflow_process { options '-stub' when { - params { - outdir = "$outputDir" - } process { """ - adapter_fasta = [] - save_trimmed_fail = false - save_merged = false - input[0] = Channel.of([ [ id:'test', single_end:true ], [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) ] ]) - input[1] = adapter_fasta - input[2] = save_trimmed_fail - input[3] = save_merged + input[1] = [] + input[2] = false + input[3] = false + input[4] = false """ } } @@ -103,20 +63,7 @@ nextflow_process { assertAll( { assert process.success }, - { - assert snapshot( - ( - [process.out.reads[0][0].toString()] + // meta - process.out.reads.collect { file(it[1]).getName() } + - process.out.json.collect { file(it[1]).getName() } + - process.out.html.collect { file(it[1]).getName() } + - process.out.log.collect { file(it[1]).getName() } + - process.out.reads_fail.collect { file(it[1]).getName() } + - process.out.reads_merged.collect { file(it[1]).getName() } - ).sort() - ).match("test_fastp_single_end-for_stub_match") - }, - { assert snapshot(process.out.versions).match("versions_single_end_stub") } + { assert snapshot(process.out).match() } ) } } @@ -124,12 +71,11 @@ nextflow_process { test("test_fastp_paired_end") { when { - params { - outdir = "$outputDir" - } + process { """ adapter_fasta = [] + save_trimmed_pass = true save_trimmed_fail = false save_merged = false @@ -138,93 +84,46 @@ nextflow_process { [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) ] ]) - input[1] = adapter_fasta - input[2] = save_trimmed_fail - input[3] = save_merged + input[1] = [] + input[2] = false + input[3] = false + input[4] = false """ } } then { - def html_text = [ "Q20 bases:25.719000 K (93.033098%)", - "The input has little adapter percentage (~0.000000%), probably it's trimmed before."] - def log_text = [ "No adapter detected for read1", - "Q30 bases: 12281(88.3716%)"] - def json_text = ['"passed_filter_reads": 198'] - def read1_lines = ["@ERR5069949.2151832 NS500628:121:HK3MMAFX2:2:21208:10793:15304/1", - "TCATAAACCAAAGCACTCACAGTGTCAACAATTTCAGCAGGACAACGCCGACAAGTTCCGAGGAACATGTCTGGACCTATAGTTTTCATAAGTCTACACACTGAATTGAAATATTCTGGTTCTAGTGTGCCCTTAGTTAGCAATGTGCGT", - "AAAAAAEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEAAEEEEAEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEAAEEEEE - { assert path(process.out.reads.get(0).get(1).get(0)).linesGzip.contains(read1_line) } - } - }, - { read2_lines.each { read2_line -> - { assert path(process.out.reads.get(0).get(1).get(1)).linesGzip.contains(read2_line) } - } - }, - { html_text.each { html_part -> - { assert path(process.out.html.get(0).get(1)).getText().contains(html_part) } - } - }, - { json_text.each { json_part -> - { assert path(process.out.json.get(0).get(1)).getText().contains(json_part) } - } - }, - { log_text.each { log_part -> - { assert path(process.out.log.get(0).get(1)).getText().contains(log_part) } - } - }, - { - assert snapshot( - ( - [process.out.reads[0][0].toString()] + // meta - process.out.reads.collect { it[1].collect { item -> file(item).getName() } } + - process.out.json.collect { file(it[1]).getName() } + - process.out.html.collect { file(it[1]).getName() } + - process.out.log.collect { file(it[1]).getName() } + - process.out.reads_fail.collect { file(it[1]).getName() } + - process.out.reads_merged.collect { file(it[1]).getName() } - ).sort() - ).match("test_fastp_paired_end_match") - }, - { assert snapshot(process.out.versions).match("versions_paired_end") } + { assert snapshot( + process.out.reads, + process.out.json, + process.out.versions).match() }, + { assert process.out.reads_fail == [] }, + { assert process.out.reads_merged == [] }, + { assert path(process.out.log.get(0).get(1)).getText().contains("Q30 bases: 12281(88.3716%)") }, + { assert path(process.out.html.get(0).get(1)).getText().contains("The input has little adapter percentage (~0.000000%), probably it's trimmed before.") } ) } } - test("test_fastp_paired_end-stub") { + test("test_fastp_paired_end - stub") { options '-stub' when { - params { - outdir = "$outputDir" - } + process { """ - adapter_fasta = [] - save_trimmed_fail = false - save_merged = false - input[0] = Channel.of([ [ id:'test', single_end:false ], // meta map [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) ] ]) - input[1] = adapter_fasta - input[2] = save_trimmed_fail - input[3] = save_merged + input[1] = [] + input[2] = false + input[3] = false + input[4] = false """ } } @@ -232,20 +131,7 @@ nextflow_process { then { assertAll( { assert process.success }, - { - assert snapshot( - ( - [process.out.reads[0][0].toString()] + // meta - process.out.reads.collect { it[1].collect { item -> file(item).getName() } } + - process.out.json.collect { file(it[1]).getName() } + - process.out.html.collect { file(it[1]).getName() } + - process.out.log.collect { file(it[1]).getName() } + - process.out.reads_fail.collect { file(it[1]).getName() } + - process.out.reads_merged.collect { file(it[1]).getName() } - ).sort() - ).match("test_fastp_paired_end-for_stub_match") - }, - { assert snapshot(process.out.versions).match("versions_paired_end-stub") } + { assert snapshot(process.out).match() }, ) } } @@ -254,92 +140,52 @@ nextflow_process { config './nextflow.interleaved.config' when { - params { - outdir = "$outputDir" - } process { """ - adapter_fasta = [] - save_trimmed_fail = false - save_merged = false - input[0] = Channel.of([ [ id:'test', single_end:true ], // meta map [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_interleaved.fastq.gz', checkIfExists: true) ] ]) - input[1] = adapter_fasta - input[2] = save_trimmed_fail - input[3] = save_merged + input[1] = [] + input[2] = false + input[3] = false + input[4] = false """ } } then { - def html_text = [ "Q20 bases:25.719000 K (93.033098%)", - "paired end (151 cycles + 151 cycles)"] - def log_text = [ "Q20 bases: 12922(92.9841%)", - "reads passed filter: 162"] - def read_lines = [ "@ERR5069949.2151832 NS500628:121:HK3MMAFX2:2:21208:10793:15304/1", - "TCATAAACCAAAGCACTCACAGTGTCAACAATTTCAGCAGGACAACGCCGACAAGTTCCGAGGAACATGTCTGGACCTATAGTTTTCATAAGTCTACACACTGAATTGAAATATTCTGGTTCTAGTGTGCCCTTAGTTAGCAATGTGCGT", - "AAAAAAEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEAAEEEEAEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEAAEEEEE - { assert path(process.out.reads.get(0).get(1)).linesGzip.contains(read_line) } - } - }, - { html_text.each { html_part -> - { assert path(process.out.html.get(0).get(1)).getText().contains(html_part) } - } - }, - { assert snapshot(process.out.json).match("fastp test_fastp_interleaved_json") }, - { log_text.each { log_part -> - { assert path(process.out.log.get(0).get(1)).getText().contains(log_part) } - } - }, - { - assert snapshot( - ( - [process.out.reads[0][0].toString()] + // meta - process.out.reads.collect { file(it[1]).getName() } + - process.out.json.collect { file(it[1]).getName() } + - process.out.html.collect { file(it[1]).getName() } + - process.out.log.collect { file(it[1]).getName() } + - process.out.reads_fail.collect { file(it[1]).getName() } + - process.out.reads_merged.collect { file(it[1]).getName() } - ).sort() - ).match("test_fastp_interleaved-_match") - }, - { assert snapshot(process.out.versions).match("versions_interleaved") } + { assert snapshot( + process.out.reads, + process.out.json, + process.out.versions).match() }, + { assert process.out.reads_fail == [] }, + { assert process.out.reads_merged == [] }, + { assert path(process.out.log.get(0).get(1)).getText().contains("reads passed filter: 162") }, + { assert path(process.out.html.get(0).get(1)).getText().contains("paired end (151 cycles + 151 cycles)") } ) } } - test("fastp test_fastp_interleaved-stub") { + test("fastp test_fastp_interleaved - stub") { options '-stub' config './nextflow.interleaved.config' when { - params { - outdir = "$outputDir" - } + process { """ - adapter_fasta = [] - save_trimmed_fail = false - save_merged = false - input[0] = Channel.of([ [ id:'test', single_end:true ], // meta map [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_interleaved.fastq.gz', checkIfExists: true) ] ]) - input[1] = adapter_fasta - input[2] = save_trimmed_fail - input[3] = save_merged + input[1] = [] + input[2] = false + input[3] = false + input[4] = false """ } } @@ -347,20 +193,7 @@ nextflow_process { then { assertAll( { assert process.success }, - { - assert snapshot( - ( - [process.out.reads[0][0].toString()] + // meta - process.out.reads.collect { file(it[1]).getName() } + - process.out.json.collect { file(it[1]).getName() } + - process.out.html.collect { file(it[1]).getName() } + - process.out.log.collect { file(it[1]).getName() } + - process.out.reads_fail.collect { file(it[1]).getName() } + - process.out.reads_merged.collect { file(it[1]).getName() } - ).sort() - ).match("test_fastp_interleaved-for_stub_match") - }, - { assert snapshot(process.out.versions).match("versions_interleaved-stub") } + { assert snapshot(process.out).match() }, ) } } @@ -368,60 +201,32 @@ nextflow_process { test("test_fastp_single_end_trim_fail") { when { - params { - outdir = "$outputDir" - } + process { """ - adapter_fasta = [] - save_trimmed_fail = true - save_merged = false - input[0] = Channel.of([ [ id:'test', single_end:true ], // meta map [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) ] ]) - input[1] = adapter_fasta - input[2] = save_trimmed_fail - input[3] = save_merged + input[1] = [] + input[2] = false + input[3] = true + input[4] = false """ } } then { - def html_text = [ "Q20 bases:12.922000 K (92.984097%)", - "single end (151 cycles)"] - def log_text = [ "Q20 bases: 12922(92.9841%)", - "reads passed filter: 99" ] - def read_lines = [ "@ERR5069949.2151832 NS500628:121:HK3MMAFX2:2:21208:10793:15304/1", - "TCATAAACCAAAGCACTCACAGTGTCAACAATTTCAGCAGGACAACGCCGACAAGTTCCGAGGAACATGTCTGGACCTATAGTTTTCATAAGTCTACACACTGAATTGAAATATTCTGGTTCTAGTGTGCCCTTAGTTAGCAATGTGCGT", - "AAAAAAEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEAAEEEEAEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEAAEEEEE - { assert path(process.out.reads.get(0).get(1)).linesGzip.contains(read_line) } - } - }, - { failed_read_lines.each { failed_read_line -> - { assert path(process.out.reads_fail.get(0).get(1)).linesGzip.contains(failed_read_line) } - } - }, - { html_text.each { html_part -> - { assert path(process.out.html.get(0).get(1)).getText().contains(html_part) } - } - }, - { assert snapshot(process.out.json).match("test_fastp_single_end_trim_fail_json") }, - { log_text.each { log_part -> - { assert path(process.out.log.get(0).get(1)).getText().contains(log_part) } - } - }, - { assert snapshot(process.out.versions).match("versions_single_end_trim_fail") } + { assert snapshot( + process.out.reads, + process.out.reads_fail, + process.out.json, + process.out.versions).match() }, + { assert process.out.reads_merged == [] }, + { assert path(process.out.log.get(0).get(1)).getText().contains("reads passed filter: 99") }, + { assert path(process.out.html.get(0).get(1)).getText().contains("single end (151 cycles)") }, ) } } @@ -430,77 +235,32 @@ nextflow_process { config './nextflow.save_failed.config' when { - params { - outdir = "$outputDir" - } process { """ - adapter_fasta = [] - save_trimmed_fail = true - save_merged = false - input[0] = Channel.of([ [ id:'test', single_end:false ], // meta map [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true)] ]) - input[1] = adapter_fasta - input[2] = save_trimmed_fail - input[3] = save_merged + input[1] = [] + input[2] = false + input[3] = true + input[4] = false """ } } then { - def html_text = [ "Q20 bases:25.719000 K (93.033098%)", - "The input has little adapter percentage (~0.000000%), probably it's trimmed before."] - def log_text = [ "No adapter detected for read1", - "Q30 bases: 12281(88.3716%)"] - def json_text = ['"passed_filter_reads": 162'] - def read1_lines = ["@ERR5069949.2151832 NS500628:121:HK3MMAFX2:2:21208:10793:15304/1", - "TCATAAACCAAAGCACTCACAGTGTCAACAATTTCAGCAGGACAACGCCGACAAGTTCCGAGGAACATGTCTGGACCTATAGTTTTCATAAGTCTACACACTGAATTGAAATATTCTGGTTCTAGTGTGCCCTTAGTTAGCAATGTGCGT", - "AAAAAAEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEAAEEEEAEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEAAEEEEE - { assert path(process.out.reads.get(0).get(1).get(0)).linesGzip.contains(read1_line) } - } - }, - { read2_lines.each { read2_line -> - { assert path(process.out.reads.get(0).get(1).get(1)).linesGzip.contains(read2_line) } - } - }, - { failed_read2_lines.each { failed_read2_line -> - { assert path(process.out.reads_fail.get(0).get(1).get(2)).linesGzip.contains(failed_read2_line) } - } - }, - { html_text.each { html_part -> - { assert path(process.out.html.get(0).get(1)).getText().contains(html_part) } - } - }, - { json_text.each { json_part -> - { assert path(process.out.json.get(0).get(1)).getText().contains(json_part) } - } - }, - { log_text.each { log_part -> - { assert path(process.out.log.get(0).get(1)).getText().contains(log_part) } - } - }, - { assert snapshot(process.out.versions).match("versions_paired_end_trim_fail") } + { assert snapshot( + process.out.reads, + process.out.reads_fail, + process.out.json, + process.out.versions).match() }, + { assert process.out.reads_merged == [] }, + { assert path(process.out.log.get(0).get(1)).getText().contains("reads passed filter: 162") }, + { assert path(process.out.html.get(0).get(1)).getText().contains("The input has little adapter percentage (~0.000000%), probably it's trimmed before.") } ) } } @@ -508,90 +268,32 @@ nextflow_process { test("test_fastp_paired_end_merged") { when { - params { - outdir = "$outputDir" - } process { """ - adapter_fasta = [] - save_trimmed_fail = false - save_merged = true input[0] = Channel.of([ [ id:'test', single_end:false ], // meta map [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) ] ]) - input[1] = adapter_fasta - input[2] = save_trimmed_fail - input[3] = save_merged + input[1] = [] + input[2] = false + input[3] = false + input[4] = true """ } } then { - def html_text = [ "
"] - def log_text = [ "Merged and filtered:", - "total reads: 75", - "total bases: 13683"] - def json_text = ['"merged_and_filtered": {', '"total_reads": 75', '"total_bases": 13683'] - def read1_lines = [ "@ERR5069949.1066259 NS500628:121:HK3MMAFX2:1:11312:18369:8333/1", - "CCTTATGACAGCAAGAACTGTGTATGATGATGGTGCTAGGAGAGTGTGGACACTTATGAATGTCTTGACACTCGTTTATAAAGTTTATTATGGTAATGCTTTAGATCAAGCCATTTCCATGTGGGCTCTTATAATCTCTGTTACTTC", - "AAAAAEAEEAEEEEEEEEEEEEEEEEAEEEEAEEEEEEEEAEEEEEEEEEEEEEEEEE/EAEEEEEE/6EEEEEEEEEEAEEAEEE/EE/AEEAEEEEEAEEEA/EEAAEAE - { assert path(process.out.reads.get(0).get(1).get(0)).linesGzip.contains(read1_line) } - } - }, - { read2_lines.each { read2_line -> - { assert path(process.out.reads.get(0).get(1).get(1)).linesGzip.contains(read2_line) } - } - }, - { read_merged_lines.each { read_merged_line -> - { assert path(process.out.reads_merged.get(0).get(1)).linesGzip.contains(read_merged_line) } - } - }, - { html_text.each { html_part -> - { assert path(process.out.html.get(0).get(1)).getText().contains(html_part) } - } - }, - { json_text.each { json_part -> - { assert path(process.out.json.get(0).get(1)).getText().contains(json_part) } - } - }, - { log_text.each { log_part -> - { assert path(process.out.log.get(0).get(1)).getText().contains(log_part) } - } - }, - { - assert snapshot( - ( - [process.out.reads[0][0].toString()] + // meta - process.out.reads.collect { it[1].collect { item -> file(item).getName() } } + - process.out.json.collect { file(it[1]).getName() } + - process.out.html.collect { file(it[1]).getName() } + - process.out.log.collect { file(it[1]).getName() } + - process.out.reads_fail.collect { file(it[1]).getName() } + - process.out.reads_merged.collect { file(it[1]).getName() } - ).sort() - ).match("test_fastp_paired_end_merged_match") - }, - { assert snapshot(process.out.versions).match("versions_paired_end_merged") } + { assert snapshot( + process.out.reads, + process.out.reads_merged, + process.out.json, + process.out.versions).match() }, + { assert process.out.reads_fail == [] }, + { assert path(process.out.log.get(0).get(1)).getText().contains("total reads: 75") }, + { assert path(process.out.html.get(0).get(1)).getText().contains("The input has little adapter percentage (~0.000000%), probably it's trimmed before.") } ) } } @@ -601,23 +303,17 @@ nextflow_process { options '-stub' when { - params { - outdir = "$outputDir" - } process { """ - adapter_fasta = [] - save_trimmed_fail = false - save_merged = true - input[0] = Channel.of([ [ id:'test', single_end:false ], // meta map [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) ] ]) - input[1] = adapter_fasta - input[2] = save_trimmed_fail - input[3] = save_merged + input[1] = [] + input[2] = false + input[3] = false + input[4] = true """ } } @@ -625,101 +321,171 @@ nextflow_process { then { assertAll( { assert process.success }, - { - assert snapshot( - ( - [process.out.reads[0][0].toString()] + // meta - process.out.reads.collect { it[1].collect { item -> file(item).getName() } } + - process.out.json.collect { file(it[1]).getName() } + - process.out.html.collect { file(it[1]).getName() } + - process.out.log.collect { file(it[1]).getName() } + - process.out.reads_fail.collect { file(it[1]).getName() } + - process.out.reads_merged.collect { file(it[1]).getName() } - ).sort() - ).match("test_fastp_paired_end_merged-for_stub_match") - }, - { assert snapshot(process.out.versions).match("versions_paired_end_merged_stub") } + { assert snapshot(process.out).match() }, ) } } test("test_fastp_paired_end_merged_adapterlist") { + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) ] + ]) + input[1] = Channel.of([ file(params.modules_testdata_base_path + 'delete_me/fastp/adapters.fasta', checkIfExists: true) ]) + input[2] = false + input[3] = false + input[4] = true + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.reads, + process.out.reads_merged, + process.out.json, + process.out.versions).match() }, + { assert process.out.reads_fail == [] }, + { assert path(process.out.log.get(0).get(1)).getText().contains("total bases: 13683") }, + { assert path(process.out.html.get(0).get(1)).getText().contains("
") } + ) + } + } + + test("test_fastp_single_end_qc_only") { + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:true ], + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) ] + ]) + input[1] = [] + input[2] = true + input[3] = false + input[4] = false + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.reads, + process.out.reads_fail, + process.out.reads_merged, + process.out.json, + process.out.versions).match() }, + { assert process.out.reads == [] }, + { assert process.out.reads_fail == [] }, + { assert process.out.reads_merged == [] }, + { assert path(process.out.log.get(0).get(1)).getText().contains("reads passed filter: 99") }, + { assert path(process.out.html.get(0).get(1)).getText().contains("single end (151 cycles)") }, + ) + } + } + + test("test_fastp_single_end_qc_only-stub") { + + options '-stub' + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:true ], + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) ] + ]) + input[1] = [] + input[2] = true + input[3] = false + input[4] = false + """ + } + } + + then { + + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() }, + ) + } + } + + test("test_fastp_paired_end_qc_only") { + when { params { outdir = "$outputDir" } process { """ - adapter_fasta = Channel.of([ file(params.modules_testdata_base_path + 'delete_me/fastp/adapters.fasta', checkIfExists: true) ]) - save_trimmed_fail = false - save_merged = true - input[0] = Channel.of([ [ id:'test', single_end:false ], // meta map [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) ] ]) - input[1] = adapter_fasta - input[2] = save_trimmed_fail - input[3] = save_merged + input[1] = [] + input[2] = true + input[3] = false + input[4] = false """ } } then { - def html_text = [ "
"] - def log_text = [ "Merged and filtered:", - "total reads: 75", - "total bases: 13683"] - def json_text = ['"merged_and_filtered": {', '"total_reads": 75', '"total_bases": 13683',"--adapter_fasta"] - def read1_lines = ["@ERR5069949.1066259 NS500628:121:HK3MMAFX2:1:11312:18369:8333/1", - "CCTTATGACAGCAAGAACTGTGTATGATGATGGTGCTAGGAGAGTGTGGACACTTATGAATGTCTTGACACTCGTTTATAAAGTTTATTATGGTAATGCTTTAGATCAAGCCATTTCCATGTGGGCTCTTATAATCTCTGTTACTTC", - "AAAAAEAEEAEEEEEEEEEEEEEEEEAEEEEAEEEEEEEEAEEEEEEEEEEEEEEEEE/EAEEEEEE/6EEEEEEEEEEAEEAEEE/EE/AEEAEEEEEAEEEA/EEAAEAE - { assert path(process.out.reads.get(0).get(1).get(0)).linesGzip.contains(read1_line) } - } - }, - { read2_lines.each { read2_line -> - { assert path(process.out.reads.get(0).get(1).get(1)).linesGzip.contains(read2_line) } - } - }, - { read_merged_lines.each { read_merged_line -> - { assert path(process.out.reads_merged.get(0).get(1)).linesGzip.contains(read_merged_line) } - } - }, - { html_text.each { html_part -> - { assert path(process.out.html.get(0).get(1)).getText().contains(html_part) } - } - }, - { json_text.each { json_part -> - { assert path(process.out.json.get(0).get(1)).getText().contains(json_part) } - } - }, - { log_text.each { log_part -> - { assert path(process.out.log.get(0).get(1)).getText().contains(log_part) } - } - }, - { assert snapshot(process.out.versions).match("versions_paired_end_merged_adapterlist") } + { assert snapshot(process.out).match() }, ) } } -} +} \ No newline at end of file diff --git a/modules/nf-core/fastp/tests/main.nf.test.snap b/modules/nf-core/fastp/tests/main.nf.test.snap index 3e87628..b609b9a 100644 --- a/modules/nf-core/fastp/tests/main.nf.test.snap +++ b/modules/nf-core/fastp/tests/main.nf.test.snap @@ -1,330 +1,966 @@ { - "fastp test_fastp_interleaved_json": { + "test_fastp_paired_end_qc_only-stub": { "content": [ - [ - [ - { - "id": "test", - "single_end": true - }, - "test.fastp.json:md5,b24e0624df5cc0b11cd5ba21b726fb22" + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "4": [ + + ], + "5": [ + + ], + "6": [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + ], + "html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "json": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "log": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "reads": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "reads_fail": [ + + ], + "reads_merged": [ + + ], + "versions": [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" ] - ] + } ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.2" }, - "timestamp": "2024-03-18T16:19:15.063001" + "timestamp": "2024-06-08T05:42:26.603745039" }, - "test_fastp_paired_end_merged-for_stub_match": { + "test_fastp_paired_end": { "content": [ [ [ - "test_1.fastp.fastq.gz", - "test_2.fastp.fastq.gz" - ], - "test.fastp.html", - "test.fastp.json", - "test.fastp.log", - "test.merged.fastq.gz", - "{id=test, single_end=false}" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-01-17T18:10:13.467574" - }, - "versions_interleaved": { - "content": [ - [ - "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-02-01T11:56:24.615634793" - }, - "test_fastp_single_end_json": { - "content": [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,67b2bbae47f073e05a97a9c2edce23c7", + "test_2.fastp.fastq.gz:md5,25cbdca08e2083dbd4f0502de6b62f39" + ] + ] + ], [ [ { "id": "test", - "single_end": true + "single_end": false }, - "test.fastp.json:md5,c852d7a6dba5819e4ac8d9673bedcacc" + "test.fastp.json:md5,1e0f8e27e71728e2b63fc64086be95cd" ] - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-03-18T16:18:43.526412" - }, - "versions_paired_end": { - "content": [ + ], [ "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" ] ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.2" }, - "timestamp": "2024-02-01T11:55:42.333545689" + "timestamp": "2024-06-10T13:02:09.747686552" }, - "test_fastp_paired_end_match": { + "fastp test_fastp_interleaved - stub": { "content": [ - [ - [ - "test_1.fastp.fastq.gz", - "test_2.fastp.fastq.gz" + { + "0": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] ], - "test.fastp.html", - "test.fastp.json", - "test.fastp.log", - "{id=test, single_end=false}" - ] + "1": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "4": [ + + ], + "5": [ + + ], + "6": [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + ], + "html": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "json": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "log": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "reads": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "reads_fail": [ + + ], + "reads_merged": [ + + ], + "versions": [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + ] + } ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.2" }, - "timestamp": "2024-02-01T12:03:06.431833729" + "timestamp": "2024-06-10T13:03:09.374379128" }, - "test_fastp_interleaved-_match": { + "test_fastp_paired_end_merged_adapterlist": { "content": [ [ - "test.fastp.fastq.gz", - "test.fastp.html", - "test.fastp.json", - "test.fastp.log", - "{id=test, single_end=true}" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-03-18T16:19:15.111894" - }, - "test_fastp_paired_end_merged_match": { - "content": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,54b726a55e992a869fd3fa778afe1672", + "test_2.fastp.fastq.gz:md5,29d3b33b869f7b63417b8ff07bb128ba" + ] + ] + ], [ [ - "test_1.fastp.fastq.gz", - "test_2.fastp.fastq.gz" - ], - "test.fastp.html", - "test.fastp.json", - "test.fastp.log", - "test.merged.fastq.gz", - "{id=test, single_end=false}" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-02-01T12:08:44.496251446" - }, - "versions_single_end_stub": { - "content": [ + { + "id": "test", + "single_end": false + }, + "test.merged.fastq.gz:md5,c873bb1ab3fa859dcc47306465e749d5" + ] + ], [ - "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-02-01T11:55:27.354051299" - }, - "versions_interleaved-stub": { - "content": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,5914ca3f21ce162123a824e33e8564f6" + ] + ], [ "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" ] ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.2" }, - "timestamp": "2024-02-01T11:56:46.535528418" + "timestamp": "2024-06-10T13:04:47.637461379" }, - "versions_single_end_trim_fail": { + "test_fastp_single_end_qc_only": { "content": [ + [ + + ], + [ + + ], + [ + + ], + [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.json:md5,5cc5f01e449309e0e689ed6f51a2294a" + ] + ], [ "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" ] ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.2" }, - "timestamp": "2024-02-01T11:59:03.724591407" + "timestamp": "2024-06-10T20:11:50.885505279" }, - "test_fastp_paired_end-for_stub_match": { + "test_fastp_single_end-stub": { "content": [ - [ - [ - "test_1.fastp.fastq.gz", - "test_2.fastp.fastq.gz" + { + "0": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] ], - "test.fastp.html", - "test.fastp.json", - "test.fastp.log", - "{id=test, single_end=false}" - ] + "1": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "4": [ + + ], + "5": [ + + ], + "6": [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + ], + "html": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "json": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "log": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "reads": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "reads_fail": [ + + ], + "reads_merged": [ + + ], + "versions": [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + ] + } ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.2" }, - "timestamp": "2024-01-17T18:07:15.398827" + "timestamp": "2024-06-10T13:01:55.987280865" }, - "versions_paired_end-stub": { + "test_fastp_paired_end_trim_fail": { "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,6ff32a64c5188b9a9192be1398c262c7", + "test_2.fastp.fastq.gz:md5,db0cb7c9977e94ac2b4b446ebd017a8a" + ] + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.paired.fail.fastq.gz:md5,409b687c734cedd7a1fec14d316e1366", + "test_1.fail.fastq.gz:md5,4f273cf3159c13f79e8ffae12f5661f6", + "test_2.fail.fastq.gz:md5,f97b9edefb5649aab661fbc9e71fc995" + ] + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,4c3268ddb50ea5b33125984776aa3519" + ] + ], [ "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" ] ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.2" }, - "timestamp": "2024-02-01T11:56:06.50017282" + "timestamp": "2024-06-10T13:03:46.458766801" }, - "versions_single_end": { + "test_fastp_paired_end - stub": { "content": [ - [ - "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" - ] + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "4": [ + + ], + "5": [ + + ], + "6": [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + ], + "html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "json": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "log": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "reads": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "reads_fail": [ + + ], + "reads_merged": [ + + ], + "versions": [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + ] + } ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.2" }, - "timestamp": "2024-02-01T11:55:07.67921647" + "timestamp": "2024-06-08T05:36:36.446112695" }, - "versions_paired_end_merged_stub": { + "test_fastp_paired_end_merged": { "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,54b726a55e992a869fd3fa778afe1672", + "test_2.fastp.fastq.gz:md5,29d3b33b869f7b63417b8ff07bb128ba" + ] + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.merged.fastq.gz:md5,c873bb1ab3fa859dcc47306465e749d5" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,b712fd68ed0322f4bec49ff2a5237fcc" + ] + ], [ "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" ] ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.2" }, - "timestamp": "2024-02-01T11:59:47.350653154" + "timestamp": "2024-06-10T13:04:09.964580373" }, - "test_fastp_interleaved-for_stub_match": { + "test_fastp_single_end": { "content": [ [ - "test.fastp.fastq.gz", - "test.fastp.html", - "test.fastp.json", - "test.fastp.log", - "{id=test, single_end=true}" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-01-17T18:08:06.127974" - }, - "versions_paired_end_trim_fail": { - "content": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.fastq.gz:md5,67b2bbae47f073e05a97a9c2edce23c7" + ] + ], + [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.json:md5,c852d7a6dba5819e4ac8d9673bedcacc" + ] + ], [ "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" ] ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.2" }, - "timestamp": "2024-02-01T11:59:18.140484878" + "timestamp": "2024-06-10T13:01:34.044931225" }, - "test_fastp_single_end-for_stub_match": { + "test_fastp_paired_end_merged-stub": { "content": [ - [ - "test.fastp.fastq.gz", - "test.fastp.html", - "test.fastp.json", - "test.fastp.log", - "{id=test, single_end=true}" - ] + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "4": [ + + ], + "5": [ + [ + { + "id": "test", + "single_end": false + }, + "test.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "6": [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + ], + "html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "json": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "log": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "reads": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "reads_fail": [ + + ], + "reads_merged": [ + [ + { + "id": "test", + "single_end": false + }, + "test.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "versions": [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + ] + } ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.2" }, - "timestamp": "2024-01-17T18:06:00.244202" + "timestamp": "2024-06-08T05:39:42.022707162" }, - "test_fastp_single_end-_match": { + "test_fastp_single_end_qc_only-stub": { "content": [ - [ - "test.fastp.fastq.gz", - "test.fastp.html", - "test.fastp.json", - "test.fastp.log", - "{id=test, single_end=true}" - ] + { + "0": [ + [ + { + "id": "test", + "single_end": true + }, + [ + "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "4": [ + + ], + "5": [ + + ], + "6": [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + ], + "html": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "json": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "log": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "reads": [ + [ + { + "id": "test", + "single_end": true + }, + [ + "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "reads_fail": [ + + ], + "reads_merged": [ + + ], + "versions": [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + ] + } ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.2" }, - "timestamp": "2024-03-18T16:18:43.580336" + "timestamp": "2024-06-10T13:05:31.722431847" }, - "versions_paired_end_merged_adapterlist": { + "fastp test_fastp_interleaved": { "content": [ + [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.fastq.gz:md5,217d62dc13a23e92513a1bd8e1bcea39" + ] + ], + [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.json:md5,b24e0624df5cc0b11cd5ba21b726fb22" + ] + ], [ "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" ] ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.2" }, - "timestamp": "2024-02-01T12:05:37.845370554" + "timestamp": "2024-06-07T22:35:04.608948751" }, - "versions_paired_end_merged": { + "test_fastp_single_end_trim_fail": { "content": [ + [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.fastq.gz:md5,67b2bbae47f073e05a97a9c2edce23c7" + ] + ], + [ + [ + { + "id": "test", + "single_end": true + }, + "test.fail.fastq.gz:md5,3e4aaadb66a5b8fc9b881bf39c227abd" + ] + ], + [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.json:md5,9a7ee180f000e8d00c7fb67f06293eb5" + ] + ], [ "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" ] ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.2" }, - "timestamp": "2024-02-01T11:59:32.860543858" + "timestamp": "2024-06-10T13:03:23.130471376" }, - "test_fastp_single_end_trim_fail_json": { + "test_fastp_paired_end_qc_only": { "content": [ + [ + + ], + [ + + ], + [ + + ], [ [ { "id": "test", - "single_end": true + "single_end": false }, - "test.fastp.json:md5,9a7ee180f000e8d00c7fb67f06293eb5" + "test.fastp.json:md5,623064a45912dac6f2b64e3f2e9901df" ] + ], + [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" ] ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.2" }, - "timestamp": "2024-01-17T18:08:41.942317" + "timestamp": "2024-06-10T20:12:14.00927619" } } \ No newline at end of file diff --git a/modules/nf-core/gffread/gffread.diff b/modules/nf-core/gffread/gffread.diff deleted file mode 100644 index fa3668c..0000000 --- a/modules/nf-core/gffread/gffread.diff +++ /dev/null @@ -1,675 +0,0 @@ -Changes in module 'nf-core/gffread' ---- modules/nf-core/gffread/environment.yml -+++ modules/nf-core/gffread/environment.yml -@@ -4,4 +4,4 @@ - - bioconda - - defaults - dependencies: -- - bioconda::gffread=0.12.1 -+ - bioconda::gffread=0.12.7 - ---- modules/nf-core/gffread/meta.yml -+++ modules/nf-core/gffread/meta.yml -@@ -13,11 +13,25 @@ - doi: 10.12688/f1000research.23297.1 - licence: ["MIT"] - input: -+ - meta: -+ type: map -+ description: | -+ Groovy Map containing meta data -+ e.g. [ id:'test' ] - - gff: - type: file - description: A reference file in either the GFF3, GFF2 or GTF format. - pattern: "*.{gff, gtf}" -+ - fasta: -+ type: file -+ description: A multi-fasta file with the genomic sequences -+ pattern: "*.{fasta,fa,faa,fas,fsa}" - output: -+ - meta: -+ type: map -+ description: | -+ Groovy Map containing meta data -+ e.g. [ id:'test' ] - - gtf: - type: file - description: GTF file resulting from the conversion of the GFF input file if '-T' argument is present -@@ -25,7 +39,11 @@ - - gffread_gff: - type: file - description: GFF3 file resulting from the conversion of the GFF input file if '-T' argument is absent -- pattern: "*.{gff3}" -+ pattern: "*.gff3" -+ - gffread_fasta: -+ type: file -+ description: Fasta file produced when either of '-w', '-x', '-y' parameters is present -+ pattern: "*.fasta" - - versions: - type: file - description: File containing software versions -@@ -34,3 +52,4 @@ - - "@edmundmiller" - maintainers: - - "@edmundmiller" -+ - "@gallvp" - ---- modules/nf-core/gffread/main.nf -+++ modules/nf-core/gffread/main.nf -@@ -1,32 +1,59 @@ - process GFFREAD { -- tag "$gff" -+ tag "$meta.id" - label 'process_low' - - conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? -- 'https://depot.galaxyproject.org/singularity/gffread:0.12.1--h8b12597_0' : -- 'biocontainers/gffread:0.12.1--h8b12597_0' }" -+ 'https://depot.galaxyproject.org/singularity/gffread:0.12.7--hdcf5f25_4' : -+ 'biocontainers/gffread:0.12.7--hdcf5f25_4' }" - - input: -- path gff -+ tuple val(meta), path(gff) -+ path fasta - - output: -- path "*.gtf" , emit: gtf , optional: true -- path "*.gff3" , emit: gffread_gff , optional: true -- path "versions.yml" , emit: versions -+ tuple val(meta), path("*.gtf") , emit: gtf , optional: true -+ tuple val(meta), path("*.gff3") , emit: gffread_gff , optional: true -+ tuple val(meta), path("*.fasta"), emit: gffread_fasta , optional: true -+ path "versions.yml" , emit: versions - - when: - task.ext.when == null || task.ext.when - - script: -- def args = task.ext.args ?: '' -- def prefix = task.ext.prefix ?: "${gff.baseName}" -- def extension = args.contains("-T") ? 'gtf' : 'gffread.gff3' -+ def args = task.ext.args ?: '' -+ def prefix = task.ext.prefix ?: "${meta.id}" -+ def extension = args.contains("-T") ? 'gtf' : ( ( ['-w', '-x', '-y' ].any { args.contains(it) } ) ? 'fasta' : 'gff3' ) -+ def fasta_arg = fasta ? "-g $fasta" : '' -+ def output_name = "${prefix}.${extension}" -+ def output = extension == "fasta" ? "$output_name" : "-o $output_name" -+ def args_sorted = args.replaceAll(/(.*)(-[wxy])(.*)/) { all, pre, param, post -> "$pre $post $param" }.trim() -+ if ( "$output_name" in [ "$gff", "$fasta" ] ) error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!" - """ - gffread \\ - $gff \\ -- $args \\ -- -o ${prefix}.${extension} -+ $fasta_arg \\ -+ $args_sorted \\ -+ $output -+ -+ cat <<-END_VERSIONS > versions.yml -+ "${task.process}": -+ gffread: \$(gffread --version 2>&1) -+ END_VERSIONS -+ """ -+ -+ stub: -+ def args = task.ext.args ?: '' -+ def prefix = task.ext.prefix ?: "${meta.id}" -+ def extension = args.contains("-T") ? 'gtf' : ( ( ['-w', '-x', '-y' ].any { args.contains(it) } ) ? 'fasta' : 'gff3' ) -+ def fasta_arg = fasta ? "-g $fasta" : '' -+ def output_name = "${prefix}.${extension}" -+ def output = extension == "fasta" ? "$output_name" : "-o $output_name" -+ def args_sorted = args.replaceAll(/(.*)(-[wxy])(.*)/) { all, pre, param, post -> "$pre $post $param" }.trim() -+ if ( "$output_name" in [ "$gff", "$fasta" ] ) error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!" -+ """ -+ touch $output_name -+ - cat <<-END_VERSIONS > versions.yml - "${task.process}": - gffread: \$(gffread --version 2>&1) - ---- modules/nf-core/gffread/tests/main.nf.test.snap -+++ modules/nf-core/gffread/tests/main.nf.test.snap -@@ -1,24 +1,272 @@ - { - "sarscov2-gff3-gtf": { - "content": [ -- [ -- "genome.gtf:md5,2394072d7d31530dfd590c4a117bf6e3" -- ], -- [ -- "versions.yml:md5,a71b6cdfa528dd206a238ec64bae13d6" -- ] -- ], -- "timestamp": "2024-01-23T20:00:32.688779117" -+ { -+ "0": [ -+ [ -+ { -+ "id": "test" -+ }, -+ "test.gtf:md5,1ea0ae98d3388e0576407dc4a24ef428" -+ ] -+ ], -+ "1": [ -+ -+ ], -+ "2": [ -+ -+ ], -+ "3": [ -+ "versions.yml:md5,05f671c6c6e530acedad0af0a5948dbd" -+ ], -+ "gffread_fasta": [ -+ -+ ], -+ "gffread_gff": [ -+ -+ ], -+ "gtf": [ -+ [ -+ { -+ "id": "test" -+ }, -+ "test.gtf:md5,1ea0ae98d3388e0576407dc4a24ef428" -+ ] -+ ], -+ "versions": [ -+ "versions.yml:md5,05f671c6c6e530acedad0af0a5948dbd" -+ ] -+ } -+ ], -+ "meta": { -+ "nf-test": "0.8.4", -+ "nextflow": "23.10.1" -+ }, -+ "timestamp": "2024-04-09T10:48:56.496187" - }, - "sarscov2-gff3-gff3": { - "content": [ -- [ -- "genome.gffread.gff3:md5,a7d40d99dcddac23ac673c473279ea2d" -- ], -- [ -- "versions.yml:md5,a71b6cdfa528dd206a238ec64bae13d6" -- ] -- ], -- "timestamp": "2024-01-23T20:07:11.457356625" -+ { -+ "0": [ -+ -+ ], -+ "1": [ -+ [ -+ { -+ "id": "test" -+ }, -+ "test.gff3:md5,c4e5da6267c6bee5899a2c204ae1ad91" -+ ] -+ ], -+ "2": [ -+ -+ ], -+ "3": [ -+ "versions.yml:md5,05f671c6c6e530acedad0af0a5948dbd" -+ ], -+ "gffread_fasta": [ -+ -+ ], -+ "gffread_gff": [ -+ [ -+ { -+ "id": "test" -+ }, -+ "test.gff3:md5,c4e5da6267c6bee5899a2c204ae1ad91" -+ ] -+ ], -+ "gtf": [ -+ -+ ], -+ "versions": [ -+ "versions.yml:md5,05f671c6c6e530acedad0af0a5948dbd" -+ ] -+ } -+ ], -+ "meta": { -+ "nf-test": "0.8.4", -+ "nextflow": "23.10.1" -+ }, -+ "timestamp": "2024-04-09T10:49:00.892782" -+ }, -+ "sarscov2-gff3-gtf-stub": { -+ "content": [ -+ { -+ "0": [ -+ [ -+ { -+ "id": "test" -+ }, -+ "test.gtf:md5,d41d8cd98f00b204e9800998ecf8427e" -+ ] -+ ], -+ "1": [ -+ -+ ], -+ "2": [ -+ -+ ], -+ "3": [ -+ "versions.yml:md5,05f671c6c6e530acedad0af0a5948dbd" -+ ], -+ "gffread_fasta": [ -+ -+ ], -+ "gffread_gff": [ -+ -+ ], -+ "gtf": [ -+ [ -+ { -+ "id": "test" -+ }, -+ "test.gtf:md5,d41d8cd98f00b204e9800998ecf8427e" -+ ] -+ ], -+ "versions": [ -+ "versions.yml:md5,05f671c6c6e530acedad0af0a5948dbd" -+ ] -+ } -+ ], -+ "meta": { -+ "nf-test": "0.8.4", -+ "nextflow": "23.10.1" -+ }, -+ "timestamp": "2024-04-09T11:11:26.975666" -+ }, -+ "sarscov2-gff3-fasta-stub": { -+ "content": [ -+ { -+ "0": [ -+ -+ ], -+ "1": [ -+ -+ ], -+ "2": [ -+ [ -+ { -+ "id": "test" -+ }, -+ "test.fasta:md5,d41d8cd98f00b204e9800998ecf8427e" -+ ] -+ ], -+ "3": [ -+ "versions.yml:md5,05f671c6c6e530acedad0af0a5948dbd" -+ ], -+ "gffread_fasta": [ -+ [ -+ { -+ "id": "test" -+ }, -+ "test.fasta:md5,d41d8cd98f00b204e9800998ecf8427e" -+ ] -+ ], -+ "gffread_gff": [ -+ -+ ], -+ "gtf": [ -+ -+ ], -+ "versions": [ -+ "versions.yml:md5,05f671c6c6e530acedad0af0a5948dbd" -+ ] -+ } -+ ], -+ "meta": { -+ "nf-test": "0.8.4", -+ "nextflow": "23.10.1" -+ }, -+ "timestamp": "2024-04-09T11:11:44.34792" -+ }, -+ "sarscov2-gff3-gff3-stub": { -+ "content": [ -+ { -+ "0": [ -+ -+ ], -+ "1": [ -+ [ -+ { -+ "id": "test" -+ }, -+ "test.gff3:md5,d41d8cd98f00b204e9800998ecf8427e" -+ ] -+ ], -+ "2": [ -+ -+ ], -+ "3": [ -+ "versions.yml:md5,05f671c6c6e530acedad0af0a5948dbd" -+ ], -+ "gffread_fasta": [ -+ -+ ], -+ "gffread_gff": [ -+ [ -+ { -+ "id": "test" -+ }, -+ "test.gff3:md5,d41d8cd98f00b204e9800998ecf8427e" -+ ] -+ ], -+ "gtf": [ -+ -+ ], -+ "versions": [ -+ "versions.yml:md5,05f671c6c6e530acedad0af0a5948dbd" -+ ] -+ } -+ ], -+ "meta": { -+ "nf-test": "0.8.4", -+ "nextflow": "23.10.1" -+ }, -+ "timestamp": "2024-04-09T11:11:35.221671" -+ }, -+ "sarscov2-gff3-fasta": { -+ "content": [ -+ { -+ "0": [ -+ -+ ], -+ "1": [ -+ -+ ], -+ "2": [ -+ [ -+ { -+ "id": "test" -+ }, -+ "test.fasta:md5,5f8108fb51739a0588ccf0a251de919a" -+ ] -+ ], -+ "3": [ -+ "versions.yml:md5,05f671c6c6e530acedad0af0a5948dbd" -+ ], -+ "gffread_fasta": [ -+ [ -+ { -+ "id": "test" -+ }, -+ "test.fasta:md5,5f8108fb51739a0588ccf0a251de919a" -+ ] -+ ], -+ "gffread_gff": [ -+ -+ ], -+ "gtf": [ -+ -+ ], -+ "versions": [ -+ "versions.yml:md5,05f671c6c6e530acedad0af0a5948dbd" -+ ] -+ } -+ ], -+ "meta": { -+ "nf-test": "0.8.4", -+ "nextflow": "23.10.1" -+ }, -+ "timestamp": "2024-04-09T10:54:02.88143" - } - } ---- modules/nf-core/gffread/tests/main.nf.test -+++ modules/nf-core/gffread/tests/main.nf.test -@@ -18,47 +18,203 @@ - } - process { - """ -- input[0] = file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.gff3", checkIfExists: true) -- """ -- } -- } -- -- then { -- assertAll ( -- { assert process.success }, -- { assert snapshot( -- process.out.gtf, -- process.out.versions -- ).match() }, -+ input[0] = [ -+ [id: 'test'], -+ file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.gff3", checkIfExists: true) -+ ] -+ input[1] = [] -+ """ -+ } -+ } -+ -+ then { -+ assertAll ( -+ { assert process.success }, -+ { assert snapshot(process.out).match() }, -+ { assert process.out.gffread_gff == [] }, -+ { assert process.out.gffread_fasta == [] } -+ ) -+ } -+ -+ } -+ -+ test("sarscov2-gff3-gtf-stub") { -+ -+ options '-stub' -+ config "./nextflow.config" -+ -+ when { -+ params { -+ outdir = "$outputDir" -+ } -+ process { -+ """ -+ input[0] = [ -+ [id: 'test'], -+ file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.gff3", checkIfExists: true) -+ ] -+ input[1] = [] -+ """ -+ } -+ } -+ -+ then { -+ assertAll ( -+ { assert process.success }, -+ { assert snapshot(process.out).match() }, -+ { assert process.out.gffread_gff == [] }, -+ { assert process.out.gffread_fasta == [] } -+ ) -+ } -+ -+ } -+ -+ test("sarscov2-gff3-gff3") { -+ -+ config "./nextflow-gff3.config" -+ -+ when { -+ params { -+ outdir = "$outputDir" -+ } -+ process { -+ """ -+ input[0] = [ -+ [id: 'test'], -+ file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.gff3", checkIfExists: true) -+ ] -+ input[1] = [] -+ """ -+ } -+ } -+ -+ then { -+ assertAll ( -+ { assert process.success }, -+ { assert snapshot(process.out).match() }, -+ { assert process.out.gtf == [] }, -+ { assert process.out.gffread_fasta == [] } -+ ) -+ } -+ -+ } -+ -+ test("sarscov2-gff3-gff3-stub") { -+ -+ options '-stub' -+ config "./nextflow-gff3.config" -+ -+ when { -+ params { -+ outdir = "$outputDir" -+ } -+ process { -+ """ -+ input[0] = [ -+ [id: 'test'], -+ file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.gff3", checkIfExists: true) -+ ] -+ input[1] = [] -+ """ -+ } -+ } -+ -+ then { -+ assertAll ( -+ { assert process.success }, -+ { assert snapshot(process.out).match() }, -+ { assert process.out.gtf == [] }, -+ { assert process.out.gffread_fasta == [] } -+ ) -+ } -+ -+ } -+ -+ test("sarscov2-gff3-fasta") { -+ -+ config "./nextflow-fasta.config" -+ -+ when { -+ params { -+ outdir = "$outputDir" -+ } -+ process { -+ """ -+ input[0] = [ -+ [id: 'test'], -+ file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.gff3", checkIfExists: true) -+ ] -+ input[1] = file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.fasta", checkIfExists: true) -+ """ -+ } -+ } -+ -+ then { -+ assertAll ( -+ { assert process.success }, -+ { assert snapshot(process.out).match() }, -+ { assert process.out.gtf == [] }, - { assert process.out.gffread_gff == [] } - ) - } - - } - -- test("sarscov2-gff3-gff3") { -- -- config "./nextflow-gff3.config" -- -- when { -- params { -- outdir = "$outputDir" -- } -- process { -- """ -- input[0] = file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.gff3", checkIfExists: true) -- """ -- } -- } -- -- then { -- assertAll ( -- { assert process.success }, -- { assert snapshot( -- process.out.gffread_gff, -- process.out.versions -- ).match() }, -- { assert process.out.gtf == [] }, -+ test("sarscov2-gff3-fasta-stub") { -+ -+ options '-stub' -+ config "./nextflow-fasta.config" -+ -+ when { -+ params { -+ outdir = "$outputDir" -+ } -+ process { -+ """ -+ input[0] = [ -+ [id: 'test'], -+ file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.gff3", checkIfExists: true) -+ ] -+ input[1] = file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.fasta", checkIfExists: true) -+ """ -+ } -+ } -+ -+ then { -+ assertAll ( -+ { assert process.success }, -+ { assert snapshot(process.out).match() }, -+ { assert process.out.gtf == [] }, -+ { assert process.out.gffread_gff == [] } -+ ) -+ } -+ -+ } -+ -+ test("sarscov2-gff3-fasta-fail-catch") { -+ -+ options '-stub' -+ config "./nextflow-fasta.config" -+ -+ when { -+ params { -+ outdir = "$outputDir" -+ } -+ process { -+ """ -+ input[0] = [ -+ [id: 'genome'], -+ file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.gff3", checkIfExists: true) -+ ] -+ input[1] = file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.fasta", checkIfExists: true) -+ """ -+ } -+ } -+ -+ then { -+ assertAll ( -+ { assert ! process.success }, -+ { assert process.stdout.toString().contains("Input and output names are the same") } - ) - } - - ---- /dev/null -+++ modules/nf-core/gffread/tests/nextflow-fasta.config -@@ -0,0 +1,5 @@ -+process { -+ withName: GFFREAD { -+ ext.args = '-w -S' -+ } -+} - -************************************************************ diff --git a/modules/nf-core/gffread/main.nf b/modules/nf-core/gffread/main.nf index cfd3e2f..da55cba 100644 --- a/modules/nf-core/gffread/main.nf +++ b/modules/nf-core/gffread/main.nf @@ -28,6 +28,7 @@ process GFFREAD { def output_name = "${prefix}.${extension}" def output = extension == "fasta" ? "$output_name" : "-o $output_name" def args_sorted = args.replaceAll(/(.*)(-[wxy])(.*)/) { all, pre, param, post -> "$pre $post $param" }.trim() + // args_sorted = Move '-w', '-x', and '-y' to the end of the args string as gffread expects the file name after these parameters if ( "$output_name" in [ "$gff", "$fasta" ] ) error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!" """ gffread \\ @@ -46,10 +47,7 @@ process GFFREAD { def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" def extension = args.contains("-T") ? 'gtf' : ( ( ['-w', '-x', '-y' ].any { args.contains(it) } ) ? 'fasta' : 'gff3' ) - def fasta_arg = fasta ? "-g $fasta" : '' def output_name = "${prefix}.${extension}" - def output = extension == "fasta" ? "$output_name" : "-o $output_name" - def args_sorted = args.replaceAll(/(.*)(-[wxy])(.*)/) { all, pre, param, post -> "$pre $post $param" }.trim() if ( "$output_name" in [ "$gff", "$fasta" ] ) error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!" """ touch $output_name diff --git a/modules/pfr/repeatmodeler/builddatabase/environment.yml b/modules/nf-core/repeatmodeler/builddatabase/environment.yml similarity index 100% rename from modules/pfr/repeatmodeler/builddatabase/environment.yml rename to modules/nf-core/repeatmodeler/builddatabase/environment.yml diff --git a/modules/pfr/repeatmodeler/builddatabase/main.nf b/modules/nf-core/repeatmodeler/builddatabase/main.nf similarity index 100% rename from modules/pfr/repeatmodeler/builddatabase/main.nf rename to modules/nf-core/repeatmodeler/builddatabase/main.nf diff --git a/modules/pfr/repeatmodeler/builddatabase/meta.yml b/modules/nf-core/repeatmodeler/builddatabase/meta.yml similarity index 100% rename from modules/pfr/repeatmodeler/builddatabase/meta.yml rename to modules/nf-core/repeatmodeler/builddatabase/meta.yml diff --git a/modules/pfr/repeatmodeler/builddatabase/tests/main.nf.test b/modules/nf-core/repeatmodeler/builddatabase/tests/main.nf.test similarity index 83% rename from modules/pfr/repeatmodeler/builddatabase/tests/main.nf.test rename to modules/nf-core/repeatmodeler/builddatabase/tests/main.nf.test index fdeda4a..bfe5d78 100644 --- a/modules/pfr/repeatmodeler/builddatabase/tests/main.nf.test +++ b/modules/nf-core/repeatmodeler/builddatabase/tests/main.nf.test @@ -26,7 +26,8 @@ nextflow_process { assertAll( { assert process.success }, { assert snapshot(process.out.versions).match("versions") }, - { assert snapshot(process.out.db[0][1].collect { file(it).name }.sort().toString()).match("for-stub-match") } + { assert snapshot(process.out.db[0][1].collect { file(it).name }.sort().toString()).match("db") }, + { assert snapshot(process.out.db[0][1].findAll { ! ( "$it"[-3..-1] in [ 'nin', 'njs' ] ) } ).match("stable_md5") } ) } @@ -50,11 +51,10 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(process.out.versions).match("versions") }, - { assert snapshot(process.out.db[0][1].collect { file(it).name }.sort().toString()).match("for-stub-match") } + { assert snapshot(process.out).match() } ) } } -} \ No newline at end of file +} diff --git a/modules/nf-core/repeatmodeler/builddatabase/tests/main.nf.test.snap b/modules/nf-core/repeatmodeler/builddatabase/tests/main.nf.test.snap new file mode 100644 index 0000000..1f1a551 --- /dev/null +++ b/modules/nf-core/repeatmodeler/builddatabase/tests/main.nf.test.snap @@ -0,0 +1,92 @@ +{ + "sarscov2-genome_fasta-stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + [ + "test.nhr:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.nin:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.njs:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.nnd:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.nni:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.nog:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.nsq:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.translation:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "1": [ + "versions.yml:md5,7944637266bc3e2726899eaad5e46c87" + ], + "db": [ + [ + { + "id": "test" + }, + [ + "test.nhr:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.nin:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.njs:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.nnd:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.nni:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.nog:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.nsq:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.translation:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "versions": [ + "versions.yml:md5,7944637266bc3e2726899eaad5e46c87" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-04-02T12:06:44.261566" + }, + "versions": { + "content": [ + [ + "versions.yml:md5,7944637266bc3e2726899eaad5e46c87" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-01-09T15:14:48.807063" + }, + "stable_md5": { + "content": [ + [ + "test.nhr:md5,1a41cb6d0b00c28f62ad60e75ae2f6fc", + "test.nnd:md5,2002e13acf59079a1a5782c918894579", + "test.nni:md5,26a954ba0fd80983b550d8f6b8b35ff8", + "test.nog:md5,30896f123998e926ea2237b89091e7fe", + "test.nsq:md5,982cbc7d9e38743b9b1037588862b9da", + "test.translation:md5,ccbb119522c09daa976a9015ba999329" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-04-23T10:03:41.669433" + }, + "db": { + "content": [ + "[test.nhr, test.nin, test.njs, test.nnd, test.nni, test.nog, test.nsq, test.translation]" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-04-02T12:08:36.94713" + } +} \ No newline at end of file diff --git a/modules/nf-core/repeatmodeler/builddatabase/tests/tags.yml b/modules/nf-core/repeatmodeler/builddatabase/tests/tags.yml new file mode 100644 index 0000000..c524294 --- /dev/null +++ b/modules/nf-core/repeatmodeler/builddatabase/tests/tags.yml @@ -0,0 +1,2 @@ +repeatmodeler/builddatabase: + - "modules/nf-core/repeatmodeler/builddatabase/**" diff --git a/modules/pfr/repeatmodeler/repeatmodeler/environment.yml b/modules/nf-core/repeatmodeler/repeatmodeler/environment.yml similarity index 100% rename from modules/pfr/repeatmodeler/repeatmodeler/environment.yml rename to modules/nf-core/repeatmodeler/repeatmodeler/environment.yml diff --git a/modules/pfr/repeatmodeler/repeatmodeler/main.nf b/modules/nf-core/repeatmodeler/repeatmodeler/main.nf similarity index 85% rename from modules/pfr/repeatmodeler/repeatmodeler/main.nf rename to modules/nf-core/repeatmodeler/repeatmodeler/main.nf index c7df9ca..9d0449f 100644 --- a/modules/pfr/repeatmodeler/repeatmodeler/main.nf +++ b/modules/nf-core/repeatmodeler/repeatmodeler/main.nf @@ -1,6 +1,6 @@ process REPEATMODELER_REPEATMODELER { tag "$meta.id" - label 'process_high' + label 'process_medium' conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? @@ -11,10 +11,10 @@ process REPEATMODELER_REPEATMODELER { tuple val(meta), path(db) output: - tuple val(meta), path("*.fa") , emit: fasta - tuple val(meta), path("*.stk") , emit: stk - tuple val(meta), path("*.log") , emit: log - path "versions.yml" , emit: versions + tuple val(meta), path("*.fa") , emit: fasta + tuple val(meta), path("*.stk"), emit: stk + tuple val(meta), path("*.log"), emit: log + path "versions.yml" , emit: versions when: task.ext.when == null || task.ext.when diff --git a/modules/pfr/repeatmodeler/repeatmodeler/meta.yml b/modules/nf-core/repeatmodeler/repeatmodeler/meta.yml similarity index 100% rename from modules/pfr/repeatmodeler/repeatmodeler/meta.yml rename to modules/nf-core/repeatmodeler/repeatmodeler/meta.yml diff --git a/modules/pfr/repeatmodeler/repeatmodeler/tests/main.nf.test b/modules/nf-core/repeatmodeler/repeatmodeler/tests/main.nf.test similarity index 64% rename from modules/pfr/repeatmodeler/repeatmodeler/tests/main.nf.test rename to modules/nf-core/repeatmodeler/repeatmodeler/tests/main.nf.test index dd7185f..65edd7e 100644 --- a/modules/pfr/repeatmodeler/repeatmodeler/tests/main.nf.test +++ b/modules/nf-core/repeatmodeler/repeatmodeler/tests/main.nf.test @@ -14,7 +14,7 @@ nextflow_process { setup { run("REPEATMODELER_BUILDDATABASE") { - script "../../../../pfr/repeatmodeler/builddatabase" + script "../../../../nf-core/repeatmodeler/builddatabase" process { """ @@ -41,16 +41,7 @@ nextflow_process { { assert snapshot(process.out.fasta).match("fasta") }, { assert snapshot(process.out.stk).match("stk") }, { assert file(process.out.log[0][1]).text.contains('1 families discovered.') }, - { assert snapshot(process.out.versions).match("versions") }, - { - assert snapshot( - ( - process.out.fasta.collect { file(it[1]).getName() } + - process.out.stk.collect { file(it[1]).getName() } + - process.out.log.collect { file(it[1]).getName() } - ).sort() - ).match("for-stub-match") - } + { assert snapshot(process.out.versions).match("versions") } ) } @@ -74,16 +65,7 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(process.out.versions).match("versions") }, - { - assert snapshot( - ( - process.out.fasta.collect { file(it[1]).getName() } + - process.out.stk.collect { file(it[1]).getName() } + - process.out.log.collect { file(it[1]).getName() } - ).sort() - ).match("for-stub-match") - } + { assert snapshot(process.out).match() } ) } diff --git a/modules/nf-core/repeatmodeler/repeatmodeler/tests/main.nf.test.snap b/modules/nf-core/repeatmodeler/repeatmodeler/tests/main.nf.test.snap new file mode 100644 index 0000000..e923952 --- /dev/null +++ b/modules/nf-core/repeatmodeler/repeatmodeler/tests/main.nf.test.snap @@ -0,0 +1,113 @@ +{ + "versions": { + "content": [ + [ + "versions.yml:md5,1bb6846ecf1304c262eaef4d3de60cf9" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-01-09T15:06:55.753492" + }, + "homo_sapiens-genome_fasta-stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.fa:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test" + }, + "test.stk:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + [ + { + "id": "test" + }, + "test.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + "versions.yml:md5,1bb6846ecf1304c262eaef4d3de60cf9" + ], + "fasta": [ + [ + { + "id": "test" + }, + "test.fa:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "log": [ + [ + { + "id": "test" + }, + "test.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "stk": [ + [ + { + "id": "test" + }, + "test.stk:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,1bb6846ecf1304c262eaef4d3de60cf9" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-04-29T13:16:41.45166" + }, + "stk": { + "content": [ + [ + [ + { + "id": "test" + }, + "test.stk:md5,acd01ad35763c11315e2297a4f051d57" + ] + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-01-09T15:06:55.740963" + }, + "fasta": { + "content": [ + [ + [ + { + "id": "test" + }, + "test.fa:md5,e25326771341204e1f8054d9529411e5" + ] + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-01-09T15:06:55.737658" + } +} \ No newline at end of file diff --git a/modules/nf-core/repeatmodeler/repeatmodeler/tests/tags.yml b/modules/nf-core/repeatmodeler/repeatmodeler/tests/tags.yml new file mode 100644 index 0000000..df65110 --- /dev/null +++ b/modules/nf-core/repeatmodeler/repeatmodeler/tests/tags.yml @@ -0,0 +1,2 @@ +repeatmodeler/repeatmodeler: + - "modules/nf-core/repeatmodeler/repeatmodeler/**" diff --git a/modules/nf-core/samtools/cat/environment.yml b/modules/nf-core/samtools/cat/environment.yml index 75f10f7..a368198 100644 --- a/modules/nf-core/samtools/cat/environment.yml +++ b/modules/nf-core/samtools/cat/environment.yml @@ -4,5 +4,5 @@ channels: - bioconda - defaults dependencies: - - bioconda::samtools=1.19.2 - - bioconda::htslib=1.19.1 + - bioconda::samtools=1.20 + - bioconda::htslib=1.20 diff --git a/modules/nf-core/samtools/cat/main.nf b/modules/nf-core/samtools/cat/main.nf index 06615aa..9447b65 100644 --- a/modules/nf-core/samtools/cat/main.nf +++ b/modules/nf-core/samtools/cat/main.nf @@ -4,8 +4,8 @@ process SAMTOOLS_CAT { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/samtools:1.19.2--h50ea8bc_0' : - 'biocontainers/samtools:1.19.2--h50ea8bc_0' }" + 'https://depot.galaxyproject.org/singularity/samtools:1.20--h50ea8bc_0' : + 'biocontainers/samtools:1.20--h50ea8bc_0' }" input: tuple val(meta), path(input_files, stageAs: "?/*") diff --git a/modules/nf-core/samtools/cat/tests/main.nf.test.snap b/modules/nf-core/samtools/cat/tests/main.nf.test.snap index f99cdd6..ae9344d 100644 --- a/modules/nf-core/samtools/cat/tests/main.nf.test.snap +++ b/modules/nf-core/samtools/cat/tests/main.nf.test.snap @@ -14,14 +14,14 @@ "bams_stub_versions": { "content": [ [ - "versions.yml:md5,e214a92343158372aa79dabe0fb0064a" + "versions.yml:md5,9b9451947b5de303ed028cf6513be3e8" ] ], "meta": { "nf-test": "0.8.4", - "nextflow": "24.01.0" + "nextflow": "23.10.1" }, - "timestamp": "2024-02-13T16:15:40.92408626" + "timestamp": "2024-05-28T15:45:35.044644556" }, "bams_bam": { "content": [ @@ -58,13 +58,13 @@ "bams_versions": { "content": [ [ - "versions.yml:md5,e214a92343158372aa79dabe0fb0064a" + "versions.yml:md5,9b9451947b5de303ed028cf6513be3e8" ] ], "meta": { "nf-test": "0.8.4", - "nextflow": "24.01.0" + "nextflow": "23.10.1" }, - "timestamp": "2024-02-13T16:15:33.224336325" + "timestamp": "2024-05-28T15:45:29.652817652" } } \ No newline at end of file diff --git a/modules/pfr/tsebra/environment.yml b/modules/nf-core/tsebra/environment.yml similarity index 86% rename from modules/pfr/tsebra/environment.yml rename to modules/nf-core/tsebra/environment.yml index 3505512..657cd82 100644 --- a/modules/pfr/tsebra/environment.yml +++ b/modules/nf-core/tsebra/environment.yml @@ -6,4 +6,4 @@ channels: - bioconda - defaults dependencies: - - "bioconda::tsebra=1.1.2.4" + - "bioconda::tsebra=1.1.2.5" diff --git a/modules/pfr/tsebra/main.nf b/modules/nf-core/tsebra/main.nf similarity index 77% rename from modules/pfr/tsebra/main.nf rename to modules/nf-core/tsebra/main.nf index c92ade7..2b0673a 100644 --- a/modules/pfr/tsebra/main.nf +++ b/modules/nf-core/tsebra/main.nf @@ -2,10 +2,11 @@ process TSEBRA { tag "$meta.id" label 'process_single' + // WARN: Version information not provided by tool on CLI. Please update this string when bumping container versions. conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/tsebra:1.1.2.4--pyhca03a8a_0': - 'biocontainers/tsebra:1.1.2.4--pyhca03a8a_0' }" + 'https://depot.galaxyproject.org/singularity/tsebra:1.1.2.5--pyhca03a8a_0': + 'biocontainers/tsebra:1.1.2.5--pyhca03a8a_0' }" input: tuple val(meta), path(gtfs) @@ -28,7 +29,7 @@ process TSEBRA { def hints_arg = '-e ' + hints_files.collect { "$it" }.join(',') def keep_arg = keep_gtfs ? ( '-k ' + keep_gtfs.collect { "$it" }.join(',') ) : '' def config_arg = config ? "-c $config" : '' - def VERSION = '1.1.2.4' + def VERSION = '1.1.2.5' // WARN: Version information not provided by tool on CLI. Please update this string when bumping container versions. """ tsebra.py \\ $gtf_arg \\ @@ -48,7 +49,7 @@ process TSEBRA { stub: def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" - def VERSION = '1.1.2.4' + def VERSION = '1.1.2.5' // WARN: Version information not provided by tool on CLI. Please update this string when bumping container versions. """ touch ${prefix}.gtf touch ${prefix}.tsv diff --git a/modules/pfr/tsebra/meta.yml b/modules/nf-core/tsebra/meta.yml similarity index 100% rename from modules/pfr/tsebra/meta.yml rename to modules/nf-core/tsebra/meta.yml diff --git a/modules/pfr/tsebra/tests/main.nf.test b/modules/nf-core/tsebra/tests/main.nf.test similarity index 70% rename from modules/pfr/tsebra/tests/main.nf.test rename to modules/nf-core/tsebra/tests/main.nf.test index ddf7a6c..6e45110 100644 --- a/modules/pfr/tsebra/tests/main.nf.test +++ b/modules/nf-core/tsebra/tests/main.nf.test @@ -7,32 +7,32 @@ nextflow_process { tag "modules" tag "modules_nfcore" tag "tsebra" - tag "nf-core/gunzip/main" + tag "gunzip" test("actinidia_chinensis-genome") { setup { run('GUNZIP', alias: 'GUNZIP_GTF') { - script "../../../nf-core/gunzip/main" + script "../../../nf-core/gunzip" process { """ input[0] = [ [ id:'test' ], // meta map - file(params.test_data['actinidia_chinensis']['genome']['genome_1_gtf_gz'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/eukaryotes/actinidia_chinensis/genome/chr1/genome.gtf.gz', checkIfExists: true) ] """ } } run('GUNZIP', alias: 'GUNZIP_HINTS') { - script "../../../nf-core/gunzip/main" + script "../../../nf-core/gunzip" process { """ input[0] = [ [ id:'test' ], // meta map - file(params.test_data['actinidia_chinensis']['genome']['genome_1_hints_gff_gz'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/eukaryotes/actinidia_chinensis/genome/chr1/genome.hints.gff.gz', checkIfExists: true) ] """ } @@ -68,10 +68,10 @@ nextflow_process { """ input[0] = [ [ id:'test' ], // meta map - [ file(params.test_data['actinidia_chinensis']['genome']['genome_1_gtf_gz'], checkIfExists: true) ] + [ file(params.modules_testdata_base_path + 'genomics/eukaryotes/actinidia_chinensis/genome/chr1/genome.gtf.gz', checkIfExists: true) ] ] input[1] = [ - file(params.test_data['actinidia_chinensis']['genome']['genome_1_hints_gff_gz'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/eukaryotes/actinidia_chinensis/genome/chr1/genome.hints.gff.gz', checkIfExists: true) ] input[2] = [] input[3] = [] diff --git a/modules/pfr/tsebra/tests/main.nf.test.snap b/modules/nf-core/tsebra/tests/main.nf.test.snap similarity index 84% rename from modules/pfr/tsebra/tests/main.nf.test.snap rename to modules/nf-core/tsebra/tests/main.nf.test.snap index 4d9e15f..bbe880d 100644 --- a/modules/pfr/tsebra/tests/main.nf.test.snap +++ b/modules/nf-core/tsebra/tests/main.nf.test.snap @@ -19,7 +19,7 @@ ] ], "2": [ - "versions.yml:md5,6d60045f4f9b66baa508c174ae6a6408" + "versions.yml:md5,4e3a44cee65282ac56b08e2bbc4f1d46" ], "tsebra_gtf": [ [ @@ -38,15 +38,15 @@ ] ], "versions": [ - "versions.yml:md5,6d60045f4f9b66baa508c174ae6a6408" + "versions.yml:md5,4e3a44cee65282ac56b08e2bbc4f1d46" ] } ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.1" }, - "timestamp": "2024-04-11T12:20:49.618044" + "timestamp": "2024-05-28T16:27:56.639849" }, "actinidia_chinensis-genome": { "content": [ @@ -68,7 +68,7 @@ ] ], "2": [ - "versions.yml:md5,6d60045f4f9b66baa508c174ae6a6408" + "versions.yml:md5,4e3a44cee65282ac56b08e2bbc4f1d46" ], "tsebra_gtf": [ [ @@ -87,14 +87,14 @@ ] ], "versions": [ - "versions.yml:md5,6d60045f4f9b66baa508c174ae6a6408" + "versions.yml:md5,4e3a44cee65282ac56b08e2bbc4f1d46" ] } ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.1" }, - "timestamp": "2024-04-11T12:20:45.666076" + "timestamp": "2024-05-28T16:27:52.049367" } } \ No newline at end of file diff --git a/modules/nf-core/tsebra/tests/tags.yml b/modules/nf-core/tsebra/tests/tags.yml new file mode 100644 index 0000000..c76165b --- /dev/null +++ b/modules/nf-core/tsebra/tests/tags.yml @@ -0,0 +1,2 @@ +tsebra: + - "modules/nf-core/tsebra/**" diff --git a/modules/pfr/custom/restoregffids/templates/restore_gff_ids.py b/modules/pfr/custom/restoregffids/templates/restore_gff_ids.py index d0699de..2bde7ab 100755 --- a/modules/pfr/custom/restoregffids/templates/restore_gff_ids.py +++ b/modules/pfr/custom/restoregffids/templates/restore_gff_ids.py @@ -10,7 +10,7 @@ def create_name_mapping_from_tsv(file_path): dictionary = {} - with open(file_path, "r") as tsv_file: + with open(file_path) as tsv_file: for line in tsv_file: columns = line.strip().split("\\t") if len(columns) != 2: @@ -24,11 +24,11 @@ def create_name_mapping_from_tsv(file_path): def restore_gff3_ids(new_to_orig_ids, file_path, output_file_name): # Write versions - with open(f"versions.yml", "w") as f_versions: + with open("versions.yml", "w") as f_versions: f_versions.write('"${task.process}":\\n') f_versions.write(f" python: {python_version()}\\n") - with open(file_path, "r") as input_gff3_file: + with open(file_path) as input_gff3_file: input_lines = input_gff3_file.readlines() with open(output_file_name, "w") as output_gff_file: diff --git a/modules/pfr/custom/restoregffids/tests/main.nf.test b/modules/pfr/custom/restoregffids/tests/main.nf.test index cc374b7..20aa85c 100644 --- a/modules/pfr/custom/restoregffids/tests/main.nf.test +++ b/modules/pfr/custom/restoregffids/tests/main.nf.test @@ -54,7 +54,7 @@ nextflow_process { assertAll( { assert process.success }, { assert process.out.restored_ids_gff3 != null }, - { assert snapshot(process.out.versions).match("versions") } + { assert snapshot(process.out.versions).match("versions_stub") } ) } diff --git a/modules/pfr/custom/restoregffids/tests/main.nf.test.snap b/modules/pfr/custom/restoregffids/tests/main.nf.test.snap index ffe43e7..ebe850a 100644 --- a/modules/pfr/custom/restoregffids/tests/main.nf.test.snap +++ b/modules/pfr/custom/restoregffids/tests/main.nf.test.snap @@ -28,14 +28,34 @@ ] } ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, "timestamp": "2023-12-07T13:49:30.047425" }, + "versions_stub": { + "content": [ + [ + "versions.yml:md5,32d31c4f1da9a3d1be013fd163e5867e" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-05-10T15:26:11.66528" + }, "versions": { "content": [ [ "versions.yml:md5,32d31c4f1da9a3d1be013fd163e5867e" ] ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, "timestamp": "2023-12-07T13:49:30.071175" } } \ No newline at end of file diff --git a/modules/pfr/custom/shortenfastaids/environment.yml b/modules/pfr/custom/shortenfastaids/environment.yml index e80fa7c..a64758c 100644 --- a/modules/pfr/custom/shortenfastaids/environment.yml +++ b/modules/pfr/custom/shortenfastaids/environment.yml @@ -8,4 +8,4 @@ channels: dependencies: - biopython==1.75 - - python=3.8 + - python==3.8.13 diff --git a/modules/pfr/custom/shortenfastaids/main.nf b/modules/pfr/custom/shortenfastaids/main.nf index 92762ef..3cdaa07 100644 --- a/modules/pfr/custom/shortenfastaids/main.nf +++ b/modules/pfr/custom/shortenfastaids/main.nf @@ -12,7 +12,7 @@ process CUSTOM_SHORTENFASTAIDS { output: tuple val(meta), path("*.short.ids.fasta") , emit: short_ids_fasta , optional: true - tuple val(meta), path("*.short.ids.tsv") , emit: short_ids_tsv , optional: true + tuple val(meta), path("*.short.ids.tsv") , emit: short_ids_tsv path "versions.yml" , emit: versions when: @@ -25,6 +25,10 @@ process CUSTOM_SHORTENFASTAIDS { stub: def prefix = task.ext.prefix ?: "${meta.id}" """ + echo \\ + 'IDs have acceptable length and character. No change required.' \\ + > ${meta.id}.short.ids.tsv + cat <<-END_VERSIONS > versions.yml "${task.process}": python: \$(python --version | cut -d' ' -f2) diff --git a/modules/pfr/custom/shortenfastaids/templates/shorten_fasta_ids.py b/modules/pfr/custom/shortenfastaids/templates/shorten_fasta_ids.py index 54f35bf..0ce4390 100755 --- a/modules/pfr/custom/shortenfastaids/templates/shorten_fasta_ids.py +++ b/modules/pfr/custom/shortenfastaids/templates/shorten_fasta_ids.py @@ -1,11 +1,11 @@ #!/usr/bin/env python3 import re - -from Bio import SeqIO from importlib.metadata import version from platform import python_version +from Bio import SeqIO + # The input fasta file path fasta_file_path = "$fasta" output_files_prefix = "$prefix" @@ -122,7 +122,7 @@ def shorten_id_by_pattern_replacement(patterns_dict, id): for pattern in matches_for_id: shortened_id = re.sub( - r"({})".format(re.escape(pattern)), + rf"({re.escape(pattern)})", patterns_dict[pattern], shortened_id, ) @@ -158,13 +158,15 @@ def fail_if_new_ids_not_valid(ids): input_ids = [x[0] for x in input_ids_and_descriptions] # Write versions - with open(f"versions.yml", "w") as f_versions: + with open("versions.yml", "w") as f_versions: f_versions.write('"${task.process}":\\n') f_versions.write(f" python: {python_version()}\\n") f_versions.write(f" biopython: {version('biopython')}\\n") if not do_ids_need_to_change(input_ids_and_descriptions): print("IDs have acceptable length and character. No change required.") + with open(f"{output_files_prefix}.short.ids.tsv", "w") as f: + f.write("IDs have acceptable length and character. No change required.") exit(0) new_ids = shorten_ids( diff --git a/modules/pfr/custom/shortenfastaids/tests/main.nf.test b/modules/pfr/custom/shortenfastaids/tests/main.nf.test index efff639..c87e8eb 100644 --- a/modules/pfr/custom/shortenfastaids/tests/main.nf.test +++ b/modules/pfr/custom/shortenfastaids/tests/main.nf.test @@ -5,7 +5,7 @@ nextflow_process { process "CUSTOM_SHORTENFASTAIDS" tag "modules" - tag "modules_nfcore" + tag "modules_pfr" tag "custom" tag "custom/shortenfastaids" @@ -25,10 +25,7 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(process.out).match() }, - { assert snapshot(process.out.versions).match("versions") }, - { assert process.out.short_ids_fasta == [] }, - { assert process.out.short_ids_tsv == [] } + { assert snapshot(process.out).match() } ) } @@ -50,8 +47,7 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(process.out).match() }, - { assert snapshot(process.out.versions).match("versions") } + { assert snapshot(process.out).match() } ) } @@ -73,8 +69,7 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(process.out).match() }, - { assert snapshot(process.out.versions).match("versions") } + { assert snapshot(process.out).match() } ) } @@ -95,8 +90,7 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(process.out).match() }, - { assert snapshot(process.out.versions).match("versions") } + { assert snapshot(process.out).match() } ) } @@ -120,9 +114,7 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(process.out.versions).match("versions") }, - { assert process.out.short_ids_fasta == [] }, - { assert process.out.short_ids_tsv == [] } + { assert snapshot(process.out).match() } ) } diff --git a/modules/pfr/custom/shortenfastaids/tests/main.nf.test.snap b/modules/pfr/custom/shortenfastaids/tests/main.nf.test.snap index 8fed1b9..2506ebd 100644 --- a/modules/pfr/custom/shortenfastaids/tests/main.nf.test.snap +++ b/modules/pfr/custom/shortenfastaids/tests/main.nf.test.snap @@ -42,15 +42,50 @@ ] } ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, "timestamp": "2023-12-07T13:33:05.523745" }, - "versions": { + "stub": { "content": [ - [ - "versions.yml:md5,e5704a53ebea373dac3a93ae800d48ba" - ] + { + "0": [ + + ], + "1": [ + [ + { + "id": "test" + }, + "test.short.ids.tsv:md5,fcf920d9a7b57a1e3c29a9e88673330f" + ] + ], + "2": [ + "versions.yml:md5,e5704a53ebea373dac3a93ae800d48ba" + ], + "short_ids_fasta": [ + + ], + "short_ids_tsv": [ + [ + { + "id": "test" + }, + "test.short.ids.tsv:md5,fcf920d9a7b57a1e3c29a9e88673330f" + ] + ], + "versions": [ + "versions.yml:md5,e5704a53ebea373dac3a93ae800d48ba" + ] + } ], - "timestamp": "2023-12-07T13:30:30.361527" + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-04T13:58:30.161542" }, "homo_sapiens-genome_fasta-no_change": { "content": [ @@ -59,7 +94,12 @@ ], "1": [ - + [ + { + "id": "test" + }, + "test.short.ids.tsv:md5,642382addc4beba37088b1ebe09d38cf" + ] ], "2": [ "versions.yml:md5,e5704a53ebea373dac3a93ae800d48ba" @@ -68,14 +108,23 @@ ], "short_ids_tsv": [ - + [ + { + "id": "test" + }, + "test.short.ids.tsv:md5,642382addc4beba37088b1ebe09d38cf" + ] ], "versions": [ "versions.yml:md5,e5704a53ebea373dac3a93ae800d48ba" ] } ], - "timestamp": "2023-12-07T13:32:54.220188" + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.1" + }, + "timestamp": "2024-06-02T20:54:17.945233" }, "homo_sapiens-genome2_fasta-length_change": { "content": [ @@ -120,6 +169,10 @@ ] } ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, "timestamp": "2023-12-07T13:33:01.924483" }, "sarscov2-genome_fasta-pattern_change": { @@ -165,6 +218,10 @@ ] } ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, "timestamp": "2023-12-07T13:32:58.12885" } } \ No newline at end of file diff --git a/modules/pfr/edta/edta/environment.yml b/modules/pfr/edta/edta/environment.yml deleted file mode 100644 index 63160e8..0000000 --- a/modules/pfr/edta/edta/environment.yml +++ /dev/null @@ -1,9 +0,0 @@ ---- -# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json -name: "edta_edta" -channels: - - conda-forge - - bioconda - - defaults -dependencies: - - "bioconda::edta=2.1.0" diff --git a/modules/pfr/edta/edta/main.nf b/modules/pfr/edta/edta/main.nf index a81c528..cddac07 100644 --- a/modules/pfr/edta/edta/main.nf +++ b/modules/pfr/edta/edta/main.nf @@ -2,7 +2,6 @@ process EDTA_EDTA { tag "$meta.id" label 'process_high' - conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/edta:2.1.0--hdfd78af_1': 'biocontainers/edta:2.1.0--hdfd78af_1' }" diff --git a/modules/pfr/edta/edta/tests/main.nf.test b/modules/pfr/edta/edta/tests/main.nf.test index 7601876..4963741 100644 --- a/modules/pfr/edta/edta/tests/main.nf.test +++ b/modules/pfr/edta/edta/tests/main.nf.test @@ -6,24 +6,32 @@ nextflow_process { config "./nextflow.config" tag "modules" - tag "modules_nfcore" + tag "modules_pfr" tag "edta" tag "edta/edta" + tag "modules/nf-core/gunzip" - test("homo_sapiens-genome_fasta") { + test("actinidia_chinensis-genome_1_fasta_gz") { + + setup { + run("GUNZIP") { + script "../../../../../modules/nf-core/gunzip" + + process { + """ + input[0] = [ + [ id:'test' ], + file(params.test_data['actinidia_chinensis']['genome']['genome_1_fasta_gz'], checkIfExists: true) + ] + """ + } + } + } when { process { """ - input[0] = Channel.of(file(params.test_data['homo_sapiens']['genome']['genome_21_fasta'], checkIfExists: true)) - | map { f -> - ( - ['>Chr21'] + - f.readLines().subList(66666.toInteger(), 116666.toInteger()) // 4 MB to 7 MB; 60 bases per line - ).join('\\n') - } - | collectFile(name: 'genome_3_to_10_mb.fasta') - | map { f -> [ [ id: 'test'], f ] } + input[0] = GUNZIP.out.gunzip input[1] = [] input[2] = [] input[3] = [] @@ -35,7 +43,11 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(process.out.versions).match("versions") } + { assert snapshot(process.out.versions).match("versions") }, + { assert path(process.out.te_lib_fasta[0][1]).text.contains('LTR/Copia') }, + { assert path(process.out.pass_list[0][1]).text.contains('Copia') }, + { assert process.out.out_file == [] }, + { assert process.out.te_anno_gff3 == [] } ) } @@ -63,12 +75,7 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(process.out.versions).match("versions") }, - { assert process.out.log != null }, - { assert process.out.te_lib_fasta != null }, - { assert process.out.pass_list != null }, - { assert process.out.out_file != null }, - { assert process.out.te_anno_gff3 != null } + { assert snapshot(process.out).match() } ) } diff --git a/modules/pfr/edta/edta/tests/main.nf.test.snap b/modules/pfr/edta/edta/tests/main.nf.test.snap new file mode 100644 index 0000000..d989e01 --- /dev/null +++ b/modules/pfr/edta/edta/tests/main.nf.test.snap @@ -0,0 +1,81 @@ +{ + "versions": { + "content": [ + [ + "versions.yml:md5,f9e6b414c1eb81520a9fdbb15f797405" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-05-10T14:43:10.298103" + }, + "stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test" + }, + "test.EDTA.TElib.fa:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + + ], + "3": [ + + ], + "4": [ + + ], + "5": [ + "versions.yml:md5,f9e6b414c1eb81520a9fdbb15f797405" + ], + "log": [ + [ + { + "id": "test" + }, + "test.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "out_file": [ + + ], + "pass_list": [ + + ], + "te_anno_gff3": [ + + ], + "te_lib_fasta": [ + [ + { + "id": "test" + }, + "test.EDTA.TElib.fa:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,f9e6b414c1eb81520a9fdbb15f797405" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-05-10T14:43:16.561778" + } +} \ No newline at end of file diff --git a/modules/pfr/edta/edta/tests/nextflow.config b/modules/pfr/edta/edta/tests/nextflow.config index e58e10e..ac46798 100644 --- a/modules/pfr/edta/edta/tests/nextflow.config +++ b/modules/pfr/edta/edta/tests/nextflow.config @@ -1,3 +1,5 @@ process { - ext.args = '--anno 1' + withName: EDTA_EDTA { + ext.args = '--anno 0' + } } diff --git a/modules/pfr/repeatmodeler/builddatabase/tests/main.nf.test.snap b/modules/pfr/repeatmodeler/builddatabase/tests/main.nf.test.snap deleted file mode 100644 index cda327e..0000000 --- a/modules/pfr/repeatmodeler/builddatabase/tests/main.nf.test.snap +++ /dev/null @@ -1,16 +0,0 @@ -{ - "versions": { - "content": [ - [ - "versions.yml:md5,7944637266bc3e2726899eaad5e46c87" - ] - ], - "timestamp": "2024-01-09T15:14:48.807063" - }, - "for-stub-match": { - "content": [ - "[test.nhr, test.nin, test.njs, test.nnd, test.nni, test.nog, test.nsq, test.translation]" - ], - "timestamp": "2024-01-09T15:14:48.81702" - } -} \ No newline at end of file diff --git a/modules/pfr/repeatmodeler/builddatabase/tests/tags.yml b/modules/pfr/repeatmodeler/builddatabase/tests/tags.yml deleted file mode 100644 index 426540d..0000000 --- a/modules/pfr/repeatmodeler/builddatabase/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -repeatmodeler/builddatabase: - - "modules/pfr/repeatmodeler/builddatabase/**" diff --git a/modules/pfr/repeatmodeler/repeatmodeler/tests/main.nf.test.snap b/modules/pfr/repeatmodeler/repeatmodeler/tests/main.nf.test.snap deleted file mode 100644 index 051dd60..0000000 --- a/modules/pfr/repeatmodeler/repeatmodeler/tests/main.nf.test.snap +++ /dev/null @@ -1,46 +0,0 @@ -{ - "versions": { - "content": [ - [ - "versions.yml:md5,1bb6846ecf1304c262eaef4d3de60cf9" - ] - ], - "timestamp": "2024-01-09T15:06:55.753492" - }, - "stk": { - "content": [ - [ - [ - { - "id": "test" - }, - "test.stk:md5,acd01ad35763c11315e2297a4f051d57" - ] - ] - ], - "timestamp": "2024-01-09T15:06:55.740963" - }, - "for-stub-match": { - "content": [ - [ - "test.fa", - "test.log", - "test.stk" - ] - ], - "timestamp": "2024-01-09T15:06:55.759971" - }, - "fasta": { - "content": [ - [ - [ - { - "id": "test" - }, - "test.fa:md5,e25326771341204e1f8054d9529411e5" - ] - ] - ], - "timestamp": "2024-01-09T15:06:55.737658" - } -} \ No newline at end of file diff --git a/modules/pfr/repeatmodeler/repeatmodeler/tests/tags.yml b/modules/pfr/repeatmodeler/repeatmodeler/tests/tags.yml deleted file mode 100644 index 648cc93..0000000 --- a/modules/pfr/repeatmodeler/repeatmodeler/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -repeatmodeler/repeatmodeler: - - "modules/pfr/repeatmodeler/repeatmodeler/**" diff --git a/modules/pfr/tsebra/tests/tags.yml b/modules/pfr/tsebra/tests/tags.yml deleted file mode 100644 index 7594182..0000000 --- a/modules/pfr/tsebra/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -tsebra: - - "modules/pfr/tsebra/**" diff --git a/subworkflows/local/prepare_assembly.nf b/subworkflows/local/prepare_assembly.nf index c3701bb..fff044a 100644 --- a/subworkflows/local/prepare_assembly.nf +++ b/subworkflows/local/prepare_assembly.nf @@ -1,8 +1,8 @@ include { GUNZIP as GUNZIP_TARGET_ASSEMBLY } from '../../modules/nf-core/gunzip' include { GUNZIP as GUNZIP_TE_LIBRARY } from '../../modules/nf-core/gunzip' include { FASTAVALIDATOR } from '../../modules/nf-core/fastavalidator' -include { REPEATMODELER_BUILDDATABASE } from '../../modules/pfr/repeatmodeler/builddatabase' -include { REPEATMODELER_REPEATMODELER } from '../../modules/pfr/repeatmodeler/repeatmodeler' +include { REPEATMODELER_BUILDDATABASE } from '../../modules/nf-core/repeatmodeler/builddatabase' +include { REPEATMODELER_REPEATMODELER } from '../../modules/nf-core/repeatmodeler/repeatmodeler' include { REPEATMASKER } from '../../modules/kherronism/repeatmasker' include { STAR_GENOMEGENERATE } from '../../modules/nf-core/star/genomegenerate' diff --git a/subworkflows/local/purge_breaker_models.nf b/subworkflows/local/purge_breaker_models.nf index f15ec87..a213d66 100644 --- a/subworkflows/local/purge_breaker_models.nf +++ b/subworkflows/local/purge_breaker_models.nf @@ -1,5 +1,5 @@ include { AGAT_CONVERTSPGFF2GTF } from '../../modules/nf-core/agat/convertspgff2gtf/main' -include { TSEBRA } from '../../modules/pfr/tsebra/main' +include { TSEBRA } from '../../modules/nf-core/tsebra/main' include { AGAT_CONVERTSPGXF2GXF } from '../../modules/nf-core/agat/convertspgxf2gxf/main' include { AGAT_SPFILTERFEATUREFROMKILLLIST as KILL_TSEBRA_ISOFORMS } from '../../modules/pfr/agat/spfilterfeaturefromkilllist/main' include { GFFCOMPARE as COMPARE_BRAKER_TO_LIFTOFF } from '../../modules/nf-core/gffcompare/main' diff --git a/subworkflows/nf-core/fastq_fastqc_umitools_fastp/main.nf b/subworkflows/nf-core/fastq_fastqc_umitools_fastp/main.nf index 833d82b..c472d71 100644 --- a/subworkflows/nf-core/fastq_fastqc_umitools_fastp/main.nf +++ b/subworkflows/nf-core/fastq_fastqc_umitools_fastp/main.nf @@ -12,18 +12,12 @@ include { FASTP } from '../../../modules/nf-core/fastp/main' // import groovy.json.JsonSlurper -def getFastpReadsAfterFiltering(json_file, min_trimmed_reads) { - - if (!json_file.text) { return min_trimmed_reads } // Usman Rashid: To allow -stub with FASTP - +def getFastpReadsAfterFiltering(json_file) { def Map json = (Map) new JsonSlurper().parseText(json_file.text).get('summary') return json['after_filtering']['total_reads'].toLong() } def getFastpAdapterSequence(json_file){ - - if (!json_file.text) { return "" } // Usman Rashid: To allow -stub with FASTP - def Map json = (Map) new JsonSlurper().parseText(json_file.text) try{ adapter = json['adapter_cutting']['read1_adapter_sequence'] @@ -97,6 +91,7 @@ workflow FASTQ_FASTQC_UMITOOLS_FASTP { FASTP ( umi_reads, adapter_fasta, + false, // don't want to set discard_trimmed_pass, else there will be no reads output save_trimmed_fail, save_merged ) @@ -114,7 +109,7 @@ workflow FASTQ_FASTQC_UMITOOLS_FASTP { .out .reads .join(trim_json) - .map { meta, reads, json -> [ meta, reads, getFastpReadsAfterFiltering(json, min_trimmed_reads) ] } + .map { meta, reads, json -> [ meta, reads, getFastpReadsAfterFiltering(json) ] } .set { ch_num_trimmed_reads } ch_num_trimmed_reads diff --git a/subworkflows/nf-core/fastq_fastqc_umitools_fastp/tests/main.nf.test b/subworkflows/nf-core/fastq_fastqc_umitools_fastp/tests/main.nf.test index 961b5b4..80e06b9 100644 --- a/subworkflows/nf-core/fastq_fastqc_umitools_fastp/tests/main.nf.test +++ b/subworkflows/nf-core/fastq_fastqc_umitools_fastp/tests/main.nf.test @@ -4,7 +4,7 @@ nextflow_workflow { script "../main.nf" workflow "FASTQ_FASTQC_UMITOOLS_FASTP" config './nextflow.config' - + tag "subworkflows" tag "subworkflows_nfcore" tag "subworkflows/fastq_fastqc_umitools_fastp" @@ -31,7 +31,7 @@ nextflow_workflow { input[0] = Channel.of([ [ id:'test', single_end:false ], // meta map - [ + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) ] @@ -61,7 +61,7 @@ nextflow_workflow { workflow.out.adapter_seq, workflow.out.trim_read_count, workflow.out.versions - ).match() + ).match() }, { assert workflow.out.fastqc_raw_html }, @@ -91,7 +91,7 @@ nextflow_workflow { input[0] = Channel.of([ [ id:'test', single_end: false ], // meta map - [ + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) ] @@ -121,7 +121,7 @@ nextflow_workflow { workflow.out.adapter_seq, workflow.out.trim_read_count, workflow.out.versions - ).match() + ).match() }, { assert !workflow.out.fastqc_raw_html }, @@ -151,7 +151,7 @@ nextflow_workflow { input[0] = Channel.of([ [ id:'test', single_end:false ], // meta map - [ + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) ] @@ -180,7 +180,7 @@ nextflow_workflow { workflow.out.adapter_seq, workflow.out.trim_read_count, workflow.out.versions - ).match() + ).match() }, { assert workflow.out.fastqc_raw_html }, @@ -211,7 +211,7 @@ nextflow_workflow { input[0] = Channel.of([ [ id:'test', single_end:false ], // meta map - [ + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) ] @@ -241,7 +241,7 @@ nextflow_workflow { workflow.out.adapter_seq, workflow.out.trim_read_count, workflow.out.versions - ).match() + ).match() }, { assert workflow.out.fastqc_raw_html }, @@ -271,7 +271,7 @@ nextflow_workflow { input[0] = Channel.of([ [ id:'test', single_end:false ], // meta map - [ + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) ] @@ -301,7 +301,7 @@ nextflow_workflow { workflow.out.adapter_seq, workflow.out.trim_read_count, workflow.out.versions - ).match() + ).match() }, { assert workflow.out.fastqc_raw_html }, @@ -331,7 +331,7 @@ nextflow_workflow { input[0] = Channel.of([ [ id:'test', single_end:false ], // meta map - [ + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) ] @@ -364,7 +364,7 @@ nextflow_workflow { workflow.out.adapter_seq, workflow.out.trim_read_count, workflow.out.versions - ).match() + ).match() }, { assert workflow.out.fastqc_raw_html }, @@ -396,7 +396,7 @@ nextflow_workflow { input[0] = Channel.of([ [ id:'test', single_end:false ], // meta map - [ + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) ] @@ -426,7 +426,7 @@ nextflow_workflow { workflow.out.adapter_seq, workflow.out.trim_read_count, workflow.out.versions - ).match() + ).match() }, { assert workflow.out.fastqc_raw_html }, @@ -456,7 +456,7 @@ nextflow_workflow { input[0] = Channel.of([ [ id:'test', single_end:false ], // meta map - [ + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) ] @@ -486,7 +486,7 @@ nextflow_workflow { workflow.out.adapter_seq, workflow.out.trim_read_count, workflow.out.versions - ).match() + ).match() }, { assert workflow.out.fastqc_raw_html }, @@ -517,7 +517,7 @@ nextflow_workflow { input[0] = Channel.of([ [ id:'test', single_end:false ], // meta map - [ + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) ] @@ -547,7 +547,7 @@ nextflow_workflow { workflow.out.adapter_seq, workflow.out.trim_read_count, workflow.out.versions - ).match() + ).match() }, { assert workflow.out.fastqc_raw_html }, diff --git a/subworkflows/nf-core/fastq_fastqc_umitools_fastp/tests/main.nf.test.snap b/subworkflows/nf-core/fastq_fastqc_umitools_fastp/tests/main.nf.test.snap index 3e11d9e..4a6689f 100644 --- a/subworkflows/nf-core/fastq_fastqc_umitools_fastp/tests/main.nf.test.snap +++ b/subworkflows/nf-core/fastq_fastqc_umitools_fastp/tests/main.nf.test.snap @@ -55,9 +55,9 @@ ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.2" }, - "timestamp": "2024-03-18T16:53:49.315194" + "timestamp": "2024-06-10T15:08:06.209854813" }, "save_trimmed_fail": { "content": [ @@ -127,9 +127,9 @@ ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.2" }, - "timestamp": "2024-03-18T16:51:45.34934" + "timestamp": "2024-06-10T15:09:56.338504908" }, "skip_umi_extract": { "content": [ @@ -189,9 +189,9 @@ ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.2" }, - "timestamp": "2024-03-18T12:07:40.34249" + "timestamp": "2024-06-10T15:08:51.174735433" }, "umi_discard_read = 2": { "content": [ @@ -251,9 +251,9 @@ ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.2" }, - "timestamp": "2024-03-18T12:08:24.141938" + "timestamp": "2024-06-10T15:09:14.145250471" }, "save_merged": { "content": [ @@ -319,9 +319,9 @@ ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.2" }, - "timestamp": "2024-03-18T12:10:18.546963" + "timestamp": "2024-06-10T15:10:16.25526763" }, "skip_trimming": { "content": [ @@ -417,9 +417,9 @@ ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.2" }, - "timestamp": "2024-03-18T16:53:39.139038" + "timestamp": "2024-06-10T15:07:52.031579846" }, "min_trimmed_reads = 26": { "content": [ @@ -485,9 +485,9 @@ ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.2" }, - "timestamp": "2024-03-18T11:52:23.849945" + "timestamp": "2024-06-10T15:10:34.68796644" }, "with_umi": { "content": [ @@ -542,8 +542,8 @@ ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.2" }, - "timestamp": "2024-03-18T17:31:09.193212" + "timestamp": "2024-06-10T15:08:32.267769943" } } \ No newline at end of file diff --git a/subworkflows/nf-core/fastq_fastqc_umitools_fastp/tests/nextflow.config b/subworkflows/nf-core/fastq_fastqc_umitools_fastp/tests/nextflow.config index 12f7b25..0174cae 100644 --- a/subworkflows/nf-core/fastq_fastqc_umitools_fastp/tests/nextflow.config +++ b/subworkflows/nf-core/fastq_fastqc_umitools_fastp/tests/nextflow.config @@ -7,5 +7,5 @@ process { withName: UMICOLLAPSE { ext.prefix = { "${meta.id}.dedup" } } - -} \ No newline at end of file + +} diff --git a/subworkflows/nf-core/fastq_fastqc_umitools_fastp/tests/nextflow.save_trimmed.config b/subworkflows/nf-core/fastq_fastqc_umitools_fastp/tests/nextflow.save_trimmed.config index 2430e9d..21207ad 100644 --- a/subworkflows/nf-core/fastq_fastqc_umitools_fastp/tests/nextflow.save_trimmed.config +++ b/subworkflows/nf-core/fastq_fastqc_umitools_fastp/tests/nextflow.save_trimmed.config @@ -3,4 +3,4 @@ process { withName: FASTP { ext.args = "-e 30" } -} \ No newline at end of file +} diff --git a/subworkflows/pfr/fasta_edta_lai/main.nf b/subworkflows/pfr/fasta_edta_lai/main.nf index 628e255..ab1eefd 100644 --- a/subworkflows/pfr/fasta_edta_lai/main.nf +++ b/subworkflows/pfr/fasta_edta_lai/main.nf @@ -7,36 +7,63 @@ workflow FASTA_EDTA_LAI { take: ch_fasta // channel: [ val(meta), fasta ] - ch_monoploid_seqs // channel: [ val(meta), txt ]; Optional: Set to [] if not needed - skip_lai // val; true|false + ch_monoploid_seqs // channel: [ val(meta2), txt ]; Optional: Set to [] if not needed + // val(meta) from ch_fasta and val(meta2) from ch_monoploid_seqs are + // only required to have the same `id` + skip_lai // val(true|false) main: ch_versions = Channel.empty() + // Prapre input channels + ch_monoploid_seqs_plain = ( ch_monoploid_seqs ?: Channel.empty() ) + | filter { meta2, seqs -> seqs } + // Cater to channel: [ meta2, [] ] + | map { meta2, seqs -> [ meta2.id, seqs ] } + // MOUDLE: CUSTOM_SHORTENFASTAIDS CUSTOM_SHORTENFASTAIDS ( ch_fasta ) - ch_short_ids_fasta = ch_fasta - | join(CUSTOM_SHORTENFASTAIDS.out.short_ids_fasta, by:0, remainder:true) - | map { meta, fasta, short_ids_fasta -> - if ( fasta ) { [ meta, short_ids_fasta ?: fasta ] } + ch_short_ids_tsv = CUSTOM_SHORTENFASTAIDS.out.short_ids_tsv + ch_shortenfastaids_branch = ch_short_ids_tsv + | branch { meta, tsv -> + change: ! tsv.text.contains('IDs have acceptable length and character') + nonchange: tsv.text.contains('IDs have acceptable length and character') } - ch_short_ids_tsv = CUSTOM_SHORTENFASTAIDS.out.short_ids_tsv - ch_short_monoploid_seqs = ch_short_ids_tsv + ch_short_ids_fasta = ch_shortenfastaids_branch.nonchange | join( - ch_monoploid_seqs ?: Channel.empty() + ch_fasta + ) + | map { meta, tsv, fasta -> [ meta, fasta ] } + | mix( + ch_shortenfastaids_branch.change + | join( + CUSTOM_SHORTENFASTAIDS.out.short_ids_fasta + ) + | map { meta, tsv, fasta -> [ meta, fasta ] } ) - | map { meta, short_ids_tsv, monoploid_seqs -> - map_monoploid_seqs_to_new_ids(meta, short_ids_tsv, monoploid_seqs) + + ch_versions = ch_versions.mix(CUSTOM_SHORTENFASTAIDS.out.versions.first()) + + // collectFile: Map monoploid seqs to short IDs + ch_short_monoploid_seqs = ch_short_ids_tsv + | map { meta, tsv -> [ meta.id, tsv ] } + | join(ch_monoploid_seqs_plain) + | map { id, tsv, seqs -> + map_monoploid_seqs_to_new_ids(id, tsv, seqs) } | collectFile(newLine:true) | map { seqs -> def id = seqs.name.split('.mapped.monoploid.seqs.txt')[0] - [ [ id: id ], seqs ] + [ id, seqs ] } - ch_versions = ch_versions.mix(CUSTOM_SHORTENFASTAIDS.out.versions.first()) + | join( + ch_short_ids_tsv + | map { meta, tsv -> [ meta.id, meta, tsv ] } + ) + | map { id, seqs, meta, tsv -> [ meta, seqs ] } // MODULE: EDTA_EDTA EDTA_EDTA( @@ -47,35 +74,42 @@ workflow FASTA_EDTA_LAI { [] ) - ch_te_lib_fasta = EDTA_EDTA.out.te_lib_fasta ch_pass_list = EDTA_EDTA.out.pass_list ch_out_file = EDTA_EDTA.out.out_file + ch_pass_out = ch_pass_list.join(ch_out_file) + ch_te_lib_fasta = EDTA_EDTA.out.te_lib_fasta ch_te_anno_gff3 = EDTA_EDTA.out.te_anno_gff3 ch_versions = ch_versions.mix(EDTA_EDTA.out.versions.first()) - // MODULE: LAI - ch_lai_inputs = skip_lai - ? Channel.empty() - : ch_short_ids_fasta - | join(ch_pass_list) - | join(ch_out_file) - | map { meta, fasta, pass, out -> - [ meta.id, meta, fasta, pass, out ] - } + ch_short_ids_fasta_mono = ch_short_ids_fasta | join( - ch_short_monoploid_seqs - | map { meta, mono -> [ meta.id, mono ] }, + ch_short_monoploid_seqs, by:0, remainder: true ) - | map { id, meta, fasta, pass, out, mono -> - [ meta, fasta, pass, out, mono ?: [] ] + // Danger! This partial join can fail + | filter { meta, fasta, seqs -> fasta } + // This filter safeguards against fail on upstream + // process failure: https://github.com/nextflow-io/nextflow/issues/5043 + // fasta may come from upstream processes + // seqs also comes from upstream processes, it is optional + // and may not be present for some of the combinations + | map { meta, fasta, seqs -> [ meta, fasta, seqs ?: [] ] } + + ch_lai_inputs = skip_lai + ? Channel.empty() + : ch_short_ids_fasta_mono + | join( + ch_pass_out + ) + | map { meta, fasta, seqs, pass, out -> + [ meta, fasta, pass, out, seqs ] } LTRRETRIEVER_LAI( - ch_lai_inputs.map { meta, fasta, pass, out, mono -> [ meta, fasta ] }, - ch_lai_inputs.map { meta, fasta, pass, out, mono -> pass }, - ch_lai_inputs.map { meta, fasta, pass, out, mono -> out }, - ch_lai_inputs.map { meta, fasta, pass, out, mono -> mono } + ch_lai_inputs.map { meta, fasta, pass, out, seqs -> [ meta, fasta ] }, + ch_lai_inputs.map { meta, fasta, pass, out, seqs -> pass }, + ch_lai_inputs.map { meta, fasta, pass, out, seqs -> out }, + ch_lai_inputs.map { meta, fasta, pass, out, seqs -> seqs } ) ch_lai_log = LTRRETRIEVER_LAI.out.log @@ -83,16 +117,21 @@ workflow FASTA_EDTA_LAI { ch_versions = ch_versions.mix(LTRRETRIEVER_LAI.out.versions.first()) // MODULE: CUSTOM_RESTOREGFFIDS - ch_restorable_gff_tsv = ch_te_anno_gff3.join(ch_short_ids_tsv) + ch_gff_tsv_branch = ch_te_anno_gff3.join(ch_short_ids_tsv) + | branch { meta, gff, tsv -> + change: ! tsv.text.contains('IDs have acceptable length and character') + nochange: tsv.text.contains('IDs have acceptable length and character') + } CUSTOM_RESTOREGFFIDS ( - ch_restorable_gff_tsv.map { meta, gff, tsv -> [ meta, gff ] }, - ch_restorable_gff_tsv.map { meta, gff, tsv -> tsv } + ch_gff_tsv_branch.change.map { meta, gff, tsv -> [ meta, gff ] }, + ch_gff_tsv_branch.change.map { meta, gff, tsv -> tsv } ) - ch_restored_gff = ch_te_anno_gff3 - | join(CUSTOM_RESTOREGFFIDS.out.restored_ids_gff3, by:0, remainder:true) - | map { meta, gff, restored_gff -> [ meta, restored_gff ?: gff ] } + ch_restored_gff = ch_gff_tsv_branch.nochange + | map { meta, gff, tsv -> [ meta, gff ] } + | mix(CUSTOM_RESTOREGFFIDS.out.restored_ids_gff3) + ch_versions = ch_versions.mix(CUSTOM_RESTOREGFFIDS.out.versions.first()) emit: @@ -103,29 +142,29 @@ workflow FASTA_EDTA_LAI { versions = ch_versions // channel: [ versions.yml ] } -def map_monoploid_seqs_to_new_ids(meta, short_ids_tsv, monoploid_seqs) { +def map_monoploid_seqs_to_new_ids(id, short_ids_tsv, monoploid_seqs) { - def short_ids_head = short_ids_tsv.text.split('\n')[0] + def short_ids_head = short_ids_tsv.text.tokenize('\n')[0] if (short_ids_head == "IDs have acceptable length and character. No change required.") { - return [ "${meta.id}.mapped.monoploid.seqs.txt" ] + monoploid_seqs.text.split('\n') + return [ "${id}.mapped.monoploid.seqs.txt" ] + monoploid_seqs.text.tokenize('\n') } def orig_to_new_ids = [:] short_ids_tsv.text.eachLine { line -> - def (original_id, renamed_id) = line.split('\t') + def (original_id, renamed_id) = line.tokenize('\t') orig_to_new_ids[original_id] = renamed_id } def mapped_ids = [] monoploid_seqs.text.eachLine { original_id -> if (!orig_to_new_ids[original_id]) { - error "Faild to find $original_id in ${monoploid_seqs}" + - "The monoploid_seqs file is malformed!" + error "Faild to find $original_id in ${short_ids_tsv}" + + "\nThe short_ids_tsv file is malformed!" } mapped_ids.add(orig_to_new_ids[original_id]) } - return [ "${meta.id}.mapped.monoploid.seqs.txt" ] + mapped_ids + return [ "${id}.mapped.monoploid.seqs.txt" ] + mapped_ids } diff --git a/subworkflows/pfr/fasta_edta_lai/tests/main.nf.test b/subworkflows/pfr/fasta_edta_lai/tests/main.nf.test index 2c6850d..fe9fd12 100644 --- a/subworkflows/pfr/fasta_edta_lai/tests/main.nf.test +++ b/subworkflows/pfr/fasta_edta_lai/tests/main.nf.test @@ -6,7 +6,7 @@ nextflow_workflow { config "./nextflow.config" tag "subworkflows" - tag "subworkflows_nfcore" + tag "subworkflows_pfr" tag "subworkflows/fasta_edta_lai" tag "fasta_edta_lai" tag "modules/nf-core/gunzip" @@ -15,22 +15,22 @@ nextflow_workflow { tag "ltrretriever/lai" tag "custom/restoregffids" - test("actinidia_chinensis-genome_21_fasta_gz") { + setup { + run("GUNZIP") { + script "../../../../modules/nf-core/gunzip" - setup { - run("GUNZIP") { - script "../../../../modules/nf-core/gunzip" - - process { - """ - input[0] = [ - [ id:'test' ], - file(params.test_data['actinidia_chinensis']['genome']['genome_21_fasta_gz'], checkIfExists: true) - ] - """ - } + process { + """ + input[0] = [ + [ id:'test' ], + file(params.test_data['actinidia_chinensis']['genome']['genome_1_fasta_gz'], checkIfExists: true) + ] + """ } } + } + + test("actinidia_chinensis-genome_1_fasta_gz") { when { workflow { @@ -48,31 +48,17 @@ nextflow_workflow { { assert file(workflow.out.te_anno_gff3[0][1]).text.contains('Copia_LTR_retrotransposon') }, { assert file(workflow.out.lai_log[0][1]).text.contains('Calculate LAI:') }, { assert file(workflow.out.lai_log[0][1]).text.contains('Done!') }, - { assert Math.abs(Float.parseFloat(path(workflow.out.lai_out[0][1]).text.split("\n")[1].split("\t")[6]) - 31.29) <= 1.0 }, - { assert file(workflow.out.te_lib_fasta[0][1]).text.contains('#LTR/Copia') } + { assert Math.abs(Float.parseFloat(path(workflow.out.lai_out[0][1]).text.split("\n")[1].split("\t")[6]) - 31.87) <= 2.0 }, + { assert file(workflow.out.te_lib_fasta[0][1]).text.contains('#LTR/Copia') }, + { assert snapshot(workflow.out.versions).match() } ) } } - test("actinidia_chinensis-genome_21_fasta_gz-stub") { + test("actinidia_chinensis-genome_1_fasta_gz-stub") { options '-stub' - setup { - run("GUNZIP") { - script "../../../../modules/nf-core/gunzip" - - process { - """ - input[0] = [ - [ id:'test' ], - file(params.test_data['actinidia_chinensis']['genome']['genome_21_fasta_gz'], checkIfExists: true) - ] - """ - } - } - } - when { workflow { """ diff --git a/subworkflows/pfr/fasta_edta_lai/tests/main.nf.test.snap b/subworkflows/pfr/fasta_edta_lai/tests/main.nf.test.snap index 2ab7da2..532ddd5 100644 --- a/subworkflows/pfr/fasta_edta_lai/tests/main.nf.test.snap +++ b/subworkflows/pfr/fasta_edta_lai/tests/main.nf.test.snap @@ -1,5 +1,5 @@ { - "actinidia_chinensis-genome_21_fasta_gz-stub": { + "actinidia_chinensis-genome_1_fasta_gz-stub": { "content": [ { "0": [ @@ -78,10 +78,24 @@ ] } ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-04T14:00:09.252745" + }, + "actinidia_chinensis-genome_1_fasta_gz": { + "content": [ + [ + "versions.yml:md5,0d4bc49e94acb8995ca552d4e666e3ce", + "versions.yml:md5,65666e975bdfd71978843ca963e84d0c", + "versions.yml:md5,754bb19f86be761d90c002a0af2faf1c" + ] + ], "meta": { "nf-test": "0.8.4", "nextflow": "23.10.1" }, - "timestamp": "2024-03-20T18:05:46.667121" + "timestamp": "2024-05-10T13:22:28.063183" } } \ No newline at end of file From 23e0b56d3b2c1665e449239d38ceafbafee3be66 Mon Sep 17 00:00:00 2001 From: Usman Rashid Date: Wed, 19 Jun 2024 12:59:49 +1200 Subject: [PATCH 05/87] Fixed liftoff failure when lifting off from a single reference --- CHANGELOG.md | 1 + conf/modules.config | 2 +- subworkflows/local/fasta_liftoff.nf | 7 ++++++- .../{purge_breaker_models.nf => purge_braker_models.nf} | 0 4 files changed, 8 insertions(+), 2 deletions(-) rename subworkflows/local/{purge_breaker_models.nf => purge_braker_models.nf} (100%) diff --git a/CHANGELOG.md b/CHANGELOG.md index 078d2c7..415851d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### `Fixed` 1. Fixed BRAKER spellings [#36](https://github.com/PlantandFoodResearch/pangene/issues/36) +2. Fixed liftoff failure when lifting off from a single reference [#40](https://github.com/PlantandFoodResearch/pangene/issues/40) ### `Dependencies` diff --git a/conf/modules.config b/conf/modules.config index 8e10af8..124a939 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -263,7 +263,7 @@ process { } process { - withName: '.*:FASTA_GFFF_ORTHOFINDER:EXTRACT_PROTEINS' { + withName: '.*:FASTA_GFF_ORTHOFINDER:EXTRACT_PROTEINS' { ext.args = '-y' ext.prefix = { "${meta.id}.pep" } } diff --git a/subworkflows/local/fasta_liftoff.nf b/subworkflows/local/fasta_liftoff.nf index 01cd776..5bfb271 100644 --- a/subworkflows/local/fasta_liftoff.nf +++ b/subworkflows/local/fasta_liftoff.nf @@ -98,7 +98,12 @@ workflow FASTA_LIFTOFF { [] ) - ch_merged_gff = MERGE_LIFTOFF_ANNOTATIONS.out.gff.mix(ch_merge_inputs.one) + ch_merged_gff = MERGE_LIFTOFF_ANNOTATIONS.out.gff + | mix( + ch_merge_inputs.one + | map { meta, gffs -> [ meta, gffs[0] ] } + // Unlist the upstream groupTuple + ) ch_versions = ch_versions.mix(MERGE_LIFTOFF_ANNOTATIONS.out.versions.first()) // COLLECTFILE: Transcript level kill list diff --git a/subworkflows/local/purge_breaker_models.nf b/subworkflows/local/purge_braker_models.nf similarity index 100% rename from subworkflows/local/purge_breaker_models.nf rename to subworkflows/local/purge_braker_models.nf From ad20b4b7788ce211617dd0fa1858ae700370ecb2 Mon Sep 17 00:00:00 2001 From: Usman Rashid Date: Wed, 19 Jun 2024 13:30:49 +1200 Subject: [PATCH 06/87] Added evaluation by BUSCO --- CHANGELOG.md | 1 + conf/modules.config | 44 ++ modules.json | 20 + modules/pfr/busco/busco/environment.yml | 7 + modules/pfr/busco/busco/main.nf | 107 +++ modules/pfr/busco/busco/meta.yml | 98 +++ modules/pfr/busco/busco/tests/main.nf.test | 419 ++++++++++++ .../pfr/busco/busco/tests/main.nf.test.snap | 230 +++++++ .../busco/tests/nextflow.augustus.config | 5 + modules/pfr/busco/busco/tests/nextflow.config | 5 + .../busco/busco/tests/nextflow.metaeuk.config | 5 + modules/pfr/busco/busco/tests/old_test.yml | 624 ++++++++++++++++++ modules/pfr/busco/busco/tests/tags.yml | 2 + .../pfr/busco/generateplot/environment.yml | 9 + modules/pfr/busco/generateplot/main.nf | 45 ++ modules/pfr/busco/generateplot/meta.yml | 35 + .../pfr/busco/generateplot/tests/main.nf.test | 72 ++ .../generateplot/tests/main.nf.test.snap | 37 ++ modules/pfr/busco/generateplot/tests/tags.yml | 2 + modules/pfr/gffread/environment.yml | 7 + modules/pfr/gffread/main.nf | 60 ++ modules/pfr/gffread/meta.yml | 55 ++ modules/pfr/gffread/tests/main.nf.test | 223 +++++++ modules/pfr/gffread/tests/main.nf.test.snap | 272 ++++++++ .../pfr/gffread/tests/nextflow-fasta.config | 5 + .../pfr/gffread/tests/nextflow-gff3.config | 5 + modules/pfr/gffread/tests/nextflow.config | 5 + modules/pfr/gffread/tests/tags.yml | 2 + nextflow.config | 4 + nextflow_schema.json | 23 + subworkflows/pfr/fasta_gxf_busco_plot/main.nf | 169 +++++ .../pfr/fasta_gxf_busco_plot/meta.yml | 106 +++ .../fasta_gxf_busco_plot/tests/main.nf.test | 104 +++ .../tests/main.nf.test.snap | 231 +++++++ .../tests/nextflow.config | 5 + .../pfr/fasta_gxf_busco_plot/tests/tags.yml | 2 + workflows/pangene.nf | 14 + 37 files changed, 3059 insertions(+) create mode 100644 modules/pfr/busco/busco/environment.yml create mode 100644 modules/pfr/busco/busco/main.nf create mode 100644 modules/pfr/busco/busco/meta.yml create mode 100644 modules/pfr/busco/busco/tests/main.nf.test create mode 100644 modules/pfr/busco/busco/tests/main.nf.test.snap create mode 100644 modules/pfr/busco/busco/tests/nextflow.augustus.config create mode 100644 modules/pfr/busco/busco/tests/nextflow.config create mode 100644 modules/pfr/busco/busco/tests/nextflow.metaeuk.config create mode 100644 modules/pfr/busco/busco/tests/old_test.yml create mode 100644 modules/pfr/busco/busco/tests/tags.yml create mode 100644 modules/pfr/busco/generateplot/environment.yml create mode 100644 modules/pfr/busco/generateplot/main.nf create mode 100644 modules/pfr/busco/generateplot/meta.yml create mode 100644 modules/pfr/busco/generateplot/tests/main.nf.test create mode 100644 modules/pfr/busco/generateplot/tests/main.nf.test.snap create mode 100644 modules/pfr/busco/generateplot/tests/tags.yml create mode 100644 modules/pfr/gffread/environment.yml create mode 100644 modules/pfr/gffread/main.nf create mode 100644 modules/pfr/gffread/meta.yml create mode 100644 modules/pfr/gffread/tests/main.nf.test create mode 100644 modules/pfr/gffread/tests/main.nf.test.snap create mode 100644 modules/pfr/gffread/tests/nextflow-fasta.config create mode 100644 modules/pfr/gffread/tests/nextflow-gff3.config create mode 100644 modules/pfr/gffread/tests/nextflow.config create mode 100644 modules/pfr/gffread/tests/tags.yml create mode 100644 subworkflows/pfr/fasta_gxf_busco_plot/main.nf create mode 100644 subworkflows/pfr/fasta_gxf_busco_plot/meta.yml create mode 100644 subworkflows/pfr/fasta_gxf_busco_plot/tests/main.nf.test create mode 100644 subworkflows/pfr/fasta_gxf_busco_plot/tests/main.nf.test.snap create mode 100644 subworkflows/pfr/fasta_gxf_busco_plot/tests/nextflow.config create mode 100644 subworkflows/pfr/fasta_gxf_busco_plot/tests/tags.yml diff --git a/CHANGELOG.md b/CHANGELOG.md index 415851d..55a121f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 2. Added `FASTA_GFF_ORTHOFINDER` sub-workflow 3. Updated modules: `AGAT_CONVERTSPGFF2GTF`, `CAT_FASTQ`, `CUSTOM_DUMPSOFTWAREVERSIONS`, `EGGNOGMAPPER`, `FASTP`, `GFFREAD`, `SAMTOOLS_CAT`, `CUSTOM_RESTOREGFFIDS`, `CUSTOM_SHORTENFASTAIDS` and `EDTA_EDTA` 4. Updated sub-workflows: `FASTQ_FASTQC_UMITOOLS_FASTP` and `FASTA_EDTA_LAI` +5. Added evaluation by BUSCO [#41](https://github.com/PlantandFoodResearch/pangene/issues/41) ### `Fixed` diff --git a/conf/modules.config b/conf/modules.config index 124a939..17c9b82 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -279,3 +279,47 @@ process { ] } } + +process { + withName: '.*:FASTA_GXF_BUSCO_PLOT:BUSCO_ASSEMBLY' { + ext.args = '--metaeuk' + publishDir = [ + path: { "${params.outdir}/busco/fasta" }, + mode: "copy", + pattern: 'short_summary.*.txt', + saveAs: { filename -> "short_summary.specific.${meta.id}.${lineage}.txt" } + ] + } + + withName: '.*:FASTA_GXF_BUSCO_PLOT:PLOT_ASSEMBLY' { + ext.prefix = 'busco_figure' + publishDir = [ + path: { "${params.outdir}/busco/fasta" }, + mode: "copy", + saveAs: { filename -> filename.equals("versions.yml") ? null : filename } + ] + } + + withName: '.*:FASTA_GXF_BUSCO_PLOT:EXTRACT_PROTEINS' { + ext.args = '-y' + } + + withName: '.*:FASTA_GXF_BUSCO_PLOT:BUSCO_ANNOTATION' { + ext.args = '--metaeuk' + publishDir = [ + path: { "${params.outdir}/busco/gff" }, + mode: "copy", + pattern: 'short_summary.*.txt', + saveAs: { filename -> "short_summary.specific.${meta.id}.${lineage}.txt" } + ] + } + + withName: '.*:FASTA_GXF_BUSCO_PLOT:PLOT_ANNOTATION' { + ext.prefix = 'busco_figure' + publishDir = [ + path: { "${params.outdir}/busco/gff" }, + mode: "copy", + saveAs: { filename -> filename.equals("versions.yml") ? null : filename } + ] + } +} diff --git a/modules.json b/modules.json index a465611..80355c0 100644 --- a/modules.json +++ b/modules.json @@ -15,6 +15,16 @@ "git_sha": "10b046eaac396f279c08e7e2bb067482ccd9c74e", "installed_by": ["modules"] }, + "busco/busco": { + "branch": "main", + "git_sha": "c3ef9317fe867609f5927588fbf17e3c3ebf389c", + "installed_by": ["fasta_gxf_busco_plot"] + }, + "busco/generateplot": { + "branch": "main", + "git_sha": "c3ef9317fe867609f5927588fbf17e3c3ebf389c", + "installed_by": ["fasta_gxf_busco_plot"] + }, "custom/restoregffids": { "branch": "main", "git_sha": "da7a50af5eaac9601e23f33e00bf24e61f9c27ab", @@ -30,6 +40,11 @@ "git_sha": "651ee91ac838eaf11a5866cc022bd4be54c53e55", "installed_by": ["fasta_edta_lai"] }, + "gffread": { + "branch": "main", + "git_sha": "c3ef9317fe867609f5927588fbf17e3c3ebf389c", + "installed_by": ["fasta_gxf_busco_plot"] + }, "ltrretriever/lai": { "branch": "main", "git_sha": "10b046eaac396f279c08e7e2bb067482ccd9c74e", @@ -43,6 +58,11 @@ "branch": "main", "git_sha": "e9ec2e4c48ead3d760c8e13950c568c19ae86b8b", "installed_by": ["subworkflows"] + }, + "fasta_gxf_busco_plot": { + "branch": "main", + "git_sha": "0e4afaff4964485d2d93f1115c5254a99765b9c1", + "installed_by": ["subworkflows"] } } } diff --git a/modules/pfr/busco/busco/environment.yml b/modules/pfr/busco/busco/environment.yml new file mode 100644 index 0000000..06a5d93 --- /dev/null +++ b/modules/pfr/busco/busco/environment.yml @@ -0,0 +1,7 @@ +name: busco_busco +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bioconda::busco=5.7.1 diff --git a/modules/pfr/busco/busco/main.nf b/modules/pfr/busco/busco/main.nf new file mode 100644 index 0000000..f7c1a66 --- /dev/null +++ b/modules/pfr/busco/busco/main.nf @@ -0,0 +1,107 @@ +process BUSCO_BUSCO { + tag "$meta.id" + label 'process_medium' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/busco:5.7.1--pyhdfd78af_0': + 'biocontainers/busco:5.7.1--pyhdfd78af_0' }" + + input: + tuple val(meta), path(fasta, stageAs:'tmp_input/*') + val mode // Required: One of genome, proteins, or transcriptome + val lineage // Required: lineage to check against, "auto" enables --auto-lineage instead + path busco_lineages_path // Recommended: path to busco lineages - downloads if not set + path config_file // Optional: busco configuration file + + output: + tuple val(meta), path("*-busco.batch_summary.txt") , emit: batch_summary + tuple val(meta), path("short_summary.*.txt") , emit: short_summaries_txt , optional: true + tuple val(meta), path("short_summary.*.json") , emit: short_summaries_json , optional: true + tuple val(meta), path("*-busco/*/run_*/full_table.tsv") , emit: full_table , optional: true + tuple val(meta), path("*-busco/*/run_*/missing_busco_list.tsv") , emit: missing_busco_list , optional: true + tuple val(meta), path("*-busco/*/run_*/single_copy_proteins.faa") , emit: single_copy_proteins , optional: true + tuple val(meta), path("*-busco/*/run_*/busco_sequences") , emit: seq_dir + tuple val(meta), path("*-busco/*/translated_proteins") , emit: translated_dir , optional: true + tuple val(meta), path("*-busco") , emit: busco_dir + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + if ( mode !in [ 'genome', 'proteins', 'transcriptome' ] ) { + error "Mode must be one of 'genome', 'proteins', or 'transcriptome'." + } + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}-${lineage}" + def busco_config = config_file ? "--config $config_file" : '' + def busco_lineage = lineage.equals('auto') ? '--auto-lineage' : "--lineage_dataset ${lineage}" + def busco_lineage_dir = busco_lineages_path ? "--download_path ${busco_lineages_path}" : '' + """ + # Nextflow changes the container --entrypoint to /bin/bash (container default entrypoint: /usr/local/env-execute) + # Check for container variable initialisation script and source it. + if [ -f "/usr/local/env-activate.sh" ]; then + set +u # Otherwise, errors out because of various unbound variables + . "/usr/local/env-activate.sh" + set -u + fi + + # If the augustus config directory is not writable, then copy to writeable area + if [ ! -w "\${AUGUSTUS_CONFIG_PATH}" ]; then + # Create writable tmp directory for augustus + AUG_CONF_DIR=\$( mktemp -d -p \$PWD ) + cp -r \$AUGUSTUS_CONFIG_PATH/* \$AUG_CONF_DIR + export AUGUSTUS_CONFIG_PATH=\$AUG_CONF_DIR + echo "New AUGUSTUS_CONFIG_PATH=\${AUGUSTUS_CONFIG_PATH}" + fi + + # Ensure the input is uncompressed + INPUT_SEQS=input_seqs + mkdir "\$INPUT_SEQS" + cd "\$INPUT_SEQS" + for FASTA in ../tmp_input/*; do + if [ "\${FASTA##*.}" == 'gz' ]; then + gzip -cdf "\$FASTA" > \$( basename "\$FASTA" .gz ) + else + ln -s "\$FASTA" . + fi + done + cd .. + + busco \\ + --cpu $task.cpus \\ + --in "\$INPUT_SEQS" \\ + --out ${prefix}-busco \\ + --mode $mode \\ + $busco_lineage \\ + $busco_lineage_dir \\ + $busco_config \\ + $args + + # clean up + rm -rf "\$INPUT_SEQS" + + # Move files to avoid staging/publishing issues + mv ${prefix}-busco/batch_summary.txt ${prefix}-busco.batch_summary.txt + mv ${prefix}-busco/*/short_summary.*.{json,txt} . || echo "Short summaries were not available: No genes were found." + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + busco: \$( busco --version 2>&1 | sed 's/^BUSCO //' ) + END_VERSIONS + """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}-${lineage}" + def fasta_name = files(fasta).first().name - '.gz' + """ + touch ${prefix}-busco.batch_summary.txt + mkdir -p ${prefix}-busco/$fasta_name/run_${lineage}/busco_sequences + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + busco: \$( busco --version 2>&1 | sed 's/^BUSCO //' ) + END_VERSIONS + """ +} diff --git a/modules/pfr/busco/busco/meta.yml b/modules/pfr/busco/busco/meta.yml new file mode 100644 index 0000000..29745d2 --- /dev/null +++ b/modules/pfr/busco/busco/meta.yml @@ -0,0 +1,98 @@ +name: busco_busco +description: Benchmarking Universal Single Copy Orthologs +keywords: + - quality control + - genome + - transcriptome + - proteome +tools: + - busco: + description: BUSCO provides measures for quantitative assessment of genome assembly, gene set, and transcriptome completeness based on evolutionarily informed expectations of gene content from near-universal single-copy orthologs selected from OrthoDB. + homepage: https://busco.ezlab.org/ + documentation: https://busco.ezlab.org/busco_userguide.html + tool_dev_url: https://gitlab.com/ezlab/busco + doi: "10.1007/978-1-4939-9173-0_14" + licence: ["MIT"] +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - fasta: + type: file + description: Nucleic or amino acid sequence file in FASTA format. + pattern: "*.{fasta,fna,fa,fasta.gz,fna.gz,fa.gz}" + - mode: + type: string + description: The mode to run Busco in. One of genome, proteins, or transcriptome + pattern: "{genome,proteins,transcriptome}" + - lineage: + type: string + description: The BUSCO lineage to use, or "auto" to automatically select lineage + - busco_lineages_path: + type: directory + description: Path to local BUSCO lineages directory. + - config_file: + type: file + description: Path to BUSCO config file. +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - batch_summary: + type: file + description: Summary of all sequence files analyzed + pattern: "*-busco.batch_summary.txt" + - short_summaries_txt: + type: file + description: Short Busco summary in plain text format + pattern: "short_summary.*.txt" + - short_summaries_json: + type: file + description: Short Busco summary in JSON format + pattern: "short_summary.*.json" + - busco_dir: + type: directory + description: BUSCO lineage specific output + pattern: "*-busco" + - full_table: + type: file + description: Full BUSCO results table + pattern: "full_table.tsv" + - missing_busco_list: + type: file + description: List of missing BUSCOs + pattern: "missing_busco_list.tsv" + - single_copy_proteins: + type: file + description: Fasta file of single copy proteins (transcriptome mode) + pattern: "single_copy_proteins.faa" + - seq_dir: + type: directory + description: BUSCO sequence directory + pattern: "busco_sequences" + - translated_dir: + type: directory + description: Six frame translations of each transcript made by the transcriptome mode + pattern: "translated_dir" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@priyanka-surana" + - "@charles-plessy" + - "@mahesh-panchal" + - "@muffato" + - "@jvhagey" + - "@gallvp" +maintainers: + - "@priyanka-surana" + - "@charles-plessy" + - "@mahesh-panchal" + - "@muffato" + - "@jvhagey" + - "@gallvp" diff --git a/modules/pfr/busco/busco/tests/main.nf.test b/modules/pfr/busco/busco/tests/main.nf.test new file mode 100644 index 0000000..16b708b --- /dev/null +++ b/modules/pfr/busco/busco/tests/main.nf.test @@ -0,0 +1,419 @@ +nextflow_process { + + name "Test Process BUSCO_BUSCO" + script "../main.nf" + process "BUSCO_BUSCO" + + tag "modules" + tag "modules_nfcore" + tag "busco" + tag "busco/busco" + + test("test_busco_genome_single_fasta") { + + config './nextflow.config' + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + file( params.test_data['bacteroides_fragilis']['genome']['genome_fna_gz'], checkIfExists: true) + ] + input[1] = 'genome' + input[2] = 'bacteria_odb10' // Launch with 'auto' to use --auto-lineage, and specified lineages // 'auto' removed from test due to memory issues + input[3] = [] // Download busco lineage + input[4] = [] // No config + """ + } + } + + then { + assert process.success + + with(path(process.out.short_summaries_txt[0][1]).text) { + assert contains('BUSCO version') + assert contains('The lineage dataset is') + assert contains('BUSCO was run in mode') + assert contains('Complete BUSCOs') + assert contains('Missing BUSCOs') + assert contains('Dependencies and versions') + } + + with(path(process.out.short_summaries_json[0][1]).text) { + assert contains('one_line_summary') + assert contains('mode') + assert contains('dataset') + } + + assert snapshot( + process.out.batch_summary[0][1], + process.out.full_table[0][1], + process.out.missing_busco_list[0][1], + process.out.versions[0] + ).match() + + with(file(process.out.seq_dir[0][1]).listFiles().collect { it.name }) { + assert contains('single_copy_busco_sequences.tar.gz') + assert contains('multi_copy_busco_sequences.tar.gz') + assert contains('fragmented_busco_sequences.tar.gz') + } + + with(path("${process.out.busco_dir[0][1]}/logs/busco.log").text) { + assert contains('DEBUG:busco.run_BUSCO') + assert contains('Results from dataset') + assert contains('how to cite BUSCO') + } + + assert process.out.single_copy_proteins == [] + assert process.out.translated_dir == [] + } + } + + test("test_busco_genome_multi_fasta") { + + config './nextflow.config' + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + [ + file( params.test_data['bacteroides_fragilis']['genome']['genome_fna_gz'], checkIfExists: true), + file( params.test_data['candidatus_portiera_aleyrodidarum']['genome']['genome_fasta'], checkIfExists: true) + ] + ] + input[1] = 'genome' + input[2] = 'bacteria_odb10' + input[3] = [] + input[4] = [] + """ + } + } + + then { + assert process.success + + with(path(process.out.short_summaries_txt[0][1][0]).text) { + assert contains('BUSCO version') + assert contains('The lineage dataset is') + assert contains('BUSCO was run in mode') + assert contains('Complete BUSCOs') + assert contains('Missing BUSCOs') + assert contains('Dependencies and versions') + } + + with(path(process.out.short_summaries_txt[0][1][1]).text) { + assert contains('BUSCO version') + assert contains('The lineage dataset is') + assert contains('BUSCO was run in mode') + assert contains('Complete BUSCOs') + assert contains('Missing BUSCOs') + assert contains('Dependencies and versions') + } + + with(path(process.out.short_summaries_json[0][1][0]).text) { + assert contains('one_line_summary') + assert contains('mode') + assert contains('dataset') + } + + with(path(process.out.short_summaries_json[0][1][1]).text) { + assert contains('one_line_summary') + assert contains('mode') + assert contains('dataset') + } + + assert snapshot( + process.out.batch_summary[0][1], + process.out.full_table[0][1], + process.out.missing_busco_list[0][1], + process.out.versions[0] + ).match() + + with(file(process.out.seq_dir[0][1][0]).listFiles().collect { it.name }) { + assert contains('single_copy_busco_sequences.tar.gz') + assert contains('multi_copy_busco_sequences.tar.gz') + assert contains('fragmented_busco_sequences.tar.gz') + } + + with(file(process.out.seq_dir[0][1][1]).listFiles().collect { it.name }) { + assert contains('single_copy_busco_sequences.tar.gz') + assert contains('multi_copy_busco_sequences.tar.gz') + assert contains('fragmented_busco_sequences.tar.gz') + } + + with(path("${process.out.busco_dir[0][1]}/logs/busco.log").text) { + assert contains('DEBUG:busco.run_BUSCO') + assert contains('Results from dataset') + assert contains('how to cite BUSCO') + } + + assert process.out.single_copy_proteins == [] + assert process.out.translated_dir == [] + } + + } + + test("test_busco_eukaryote_metaeuk") { + + config './nextflow.metaeuk.config' + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + file( params.test_data['homo_sapiens']['genome']['genome_fasta'], checkIfExists: true) + ] + input[1] = 'genome' + input[2] = 'eukaryota_odb10' + input[3] = [] + input[4] = [] + """ + } + } + + then { + assert process.success + + with(path(process.out.short_summaries_txt[0][1]).text) { + assert contains('BUSCO version') + assert contains('The lineage dataset is') + assert contains('BUSCO was run in mode') + assert contains('Complete BUSCOs') + assert contains('Missing BUSCOs') + assert contains('Dependencies and versions') + } + + with(path(process.out.short_summaries_json[0][1]).text) { + assert contains('one_line_summary') + assert contains('mode') + assert contains('dataset') + } + + assert snapshot( + process.out.batch_summary[0][1], + process.out.full_table[0][1], + process.out.missing_busco_list[0][1], + process.out.versions[0] + ).match() + + with(file(process.out.seq_dir[0][1]).listFiles().collect { it.name }) { + assert contains('single_copy_busco_sequences.tar.gz') + assert contains('multi_copy_busco_sequences.tar.gz') + assert contains('fragmented_busco_sequences.tar.gz') + } + + with(path("${process.out.busco_dir[0][1]}/logs/busco.log").text) { + assert contains('DEBUG:busco.run_BUSCO') + assert contains("'use_augustus', 'False'") + assert contains("'use_metaeuk', 'True'") // METAEUK + assert contains('Results from dataset') + assert contains('how to cite BUSCO') + + } + + assert process.out.single_copy_proteins == [] + assert process.out.translated_dir == [] + } + + } + + test("test_busco_eukaryote_augustus") { + + config './nextflow.augustus.config' + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + file( params.test_data['homo_sapiens']['genome']['genome_fasta'], checkIfExists: true) + ] + input[1] = 'genome' + input[2] = 'eukaryota_odb10' + input[3] = [] + input[4] = [] + """ + } + } + + then { + assert process.success + + assert snapshot( + process.out.batch_summary[0][1], + process.out.versions[0] + ).match() + + with(path("${process.out.busco_dir[0][1]}/logs/busco.log").text) { + assert contains('DEBUG:busco.run_BUSCO') + assert contains("'use_augustus', 'True'") + assert contains("'use_metaeuk', 'False'") // AUGUSTUS + assert contains('Augustus did not recognize any genes') + + } + + assert process.out.short_summaries_json == [] + assert process.out.short_summaries_txt == [] + assert process.out.missing_busco_list == [] + assert process.out.full_table == [] + assert process.out.single_copy_proteins == [] + assert process.out.translated_dir == [] + } + + } + + test("test_busco_protein") { + + config './nextflow.config' + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + file( params.test_data['candidatus_portiera_aleyrodidarum']['genome']['proteome_fasta'], checkIfExists: true) + ] + input[1] = 'proteins' + input[2] = 'bacteria_odb10' + input[3] = [] + input[4] = [] + """ + } + } + + then { + assert process.success + + with(path(process.out.short_summaries_txt[0][1]).text) { + assert contains('BUSCO version') + assert contains('The lineage dataset is') + assert contains('BUSCO was run in mode') + assert contains('Complete BUSCOs') + assert contains('Missing BUSCOs') + assert contains('Dependencies and versions') + } + + with(path(process.out.short_summaries_json[0][1]).text) { + assert contains('one_line_summary') + assert contains('mode') + assert contains('dataset') + } + + assert snapshot( + process.out.batch_summary[0][1], + process.out.full_table[0][1], + process.out.missing_busco_list[0][1], + process.out.versions[0] + ).match() + + with(file(process.out.seq_dir[0][1]).listFiles().collect { it.name }) { + assert contains('single_copy_busco_sequences.tar.gz') + assert contains('multi_copy_busco_sequences.tar.gz') + assert contains('fragmented_busco_sequences.tar.gz') + } + + with(path("${process.out.busco_dir[0][1]}/logs/busco.log").text) { + assert contains('DEBUG:busco.run_BUSCO') + assert contains('Results from dataset') + assert contains('how to cite BUSCO') + } + + assert process.out.single_copy_proteins == [] + assert process.out.translated_dir == [] + } + + } + + test("test_busco_transcriptome") { + + config './nextflow.config' + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + file( params.test_data['bacteroides_fragilis']['illumina']['test1_contigs_fa_gz'], checkIfExists: true) + ] + input[1] = 'transcriptome' + input[2] = 'bacteria_odb10' + input[3] = [] + input[4] = [] + """ + } + } + + then { + assert process.success + + with(path(process.out.short_summaries_txt[0][1]).text) { + assert contains('BUSCO version') + assert contains('The lineage dataset is') + assert contains('BUSCO was run in mode') + assert contains('Complete BUSCOs') + assert contains('Missing BUSCOs') + assert contains('Dependencies and versions') + } + + with(path(process.out.short_summaries_json[0][1]).text) { + assert contains('one_line_summary') + assert contains('mode') + assert contains('dataset') + } + + assert snapshot( + process.out.batch_summary[0][1], + process.out.full_table[0][1], + process.out.missing_busco_list[0][1], + process.out.translated_dir[0][1], + process.out.single_copy_proteins[0][1], + process.out.versions[0] + ).match() + + with(file(process.out.seq_dir[0][1]).listFiles().collect { it.name }) { + assert contains('single_copy_busco_sequences.tar.gz') + assert contains('multi_copy_busco_sequences.tar.gz') + assert contains('fragmented_busco_sequences.tar.gz') + } + + with(path("${process.out.busco_dir[0][1]}/logs/busco.log").text) { + assert contains('DEBUG:busco.run_BUSCO') + assert contains('Results from dataset') + assert contains('how to cite BUSCO') + } + } + + } + + test("minimal-stub") { + + options '-stub' + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + file( params.test_data['bacteroides_fragilis']['genome']['genome_fna_gz'], checkIfExists: true) + ] + input[1] = 'genome' + input[2] = 'bacteria_odb10' + input[3] = [] + input[4] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + +} diff --git a/modules/pfr/busco/busco/tests/main.nf.test.snap b/modules/pfr/busco/busco/tests/main.nf.test.snap new file mode 100644 index 0000000..1b6411b --- /dev/null +++ b/modules/pfr/busco/busco/tests/main.nf.test.snap @@ -0,0 +1,230 @@ +{ + "minimal-stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test-bacteria_odb10-busco.batch_summary.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + + ], + "2": [ + + ], + "3": [ + + ], + "4": [ + + ], + "5": [ + + ], + "6": [ + [ + { + "id": "test" + }, + [ + + ] + ] + ], + "7": [ + + ], + "8": [ + [ + { + "id": "test" + }, + [ + [ + [ + [ + + ] + ] + ] + ] + ] + ], + "9": [ + "versions.yml:md5,3fc94714b95c2dc15399a4229d9dd1d9" + ], + "batch_summary": [ + [ + { + "id": "test" + }, + "test-bacteria_odb10-busco.batch_summary.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "busco_dir": [ + [ + { + "id": "test" + }, + [ + [ + [ + [ + + ] + ] + ] + ] + ] + ], + "full_table": [ + + ], + "missing_busco_list": [ + + ], + "seq_dir": [ + [ + { + "id": "test" + }, + [ + + ] + ] + ], + "short_summaries_json": [ + + ], + "short_summaries_txt": [ + + ], + "single_copy_proteins": [ + + ], + "translated_dir": [ + + ], + "versions": [ + "versions.yml:md5,3fc94714b95c2dc15399a4229d9dd1d9" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-05-03T13:28:04.451297" + }, + "test_busco_eukaryote_augustus": { + "content": [ + "test-eukaryota_odb10-busco.batch_summary.txt:md5,3ea3bdc423a461dae514d816bdc61c89", + "versions.yml:md5,3fc94714b95c2dc15399a4229d9dd1d9" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-05-03T13:26:36.974986" + }, + "test_busco_genome_single_fasta": { + "content": [ + "test-bacteria_odb10-busco.batch_summary.txt:md5,21b3fb771cf36be917cc451540d999be", + "full_table.tsv:md5,638fe7590f442c57361554dae330eca1", + "missing_busco_list.tsv:md5,1530af4fe7673a6d001349537bcd410a", + "versions.yml:md5,3fc94714b95c2dc15399a4229d9dd1d9" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-05-03T13:22:45.07816" + }, + "test_busco_genome_multi_fasta": { + "content": [ + "test-bacteria_odb10-busco.batch_summary.txt:md5,fcd3c208913e8abda3d6742c43fec5fa", + [ + "full_table.tsv:md5,c657edcc7d0de0175869717551df6e83", + "full_table.tsv:md5,638fe7590f442c57361554dae330eca1" + ], + [ + "missing_busco_list.tsv:md5,aceb66e347a353cb7fca8e2a725f9112", + "missing_busco_list.tsv:md5,1530af4fe7673a6d001349537bcd410a" + ], + "versions.yml:md5,3fc94714b95c2dc15399a4229d9dd1d9" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-05-03T13:23:50.255602" + }, + "test_busco_eukaryote_metaeuk": { + "content": [ + "test-eukaryota_odb10-busco.batch_summary.txt:md5,ff6d8277e452a83ce9456bbee666feb6", + "full_table.tsv:md5,92b1b1d5cb5ea0e2093d16f00187e8c7", + "missing_busco_list.tsv:md5,0352e563de290bf804c708323c35a9e3", + "versions.yml:md5,3fc94714b95c2dc15399a4229d9dd1d9" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-05-03T13:25:38.159041" + }, + "test_busco_transcriptome": { + "content": [ + "test-bacteria_odb10-busco.batch_summary.txt:md5,8734b3f379c4c0928e5dd4ea1873dc64", + "full_table.tsv:md5,1b2ce808fdafa744c56b5f781551272d", + "missing_busco_list.tsv:md5,a6931b6470262b997b8b99ea0f1d14a4", + [ + "1024388at2.faa:md5,797d603d262a6595a112e25b73e878b0", + "1054741at2.faa:md5,cd4b928cba6b19b4437746ba507e7195", + "1093223at2.faa:md5,df9549708e5ffcfaee6a74dd70a0e5dc", + "1151822at2.faa:md5,12726afc1cdc40c13392e1596e93df3a", + "143460at2.faa:md5,d887431fd988a5556a523440f02d9594", + "1491686at2.faa:md5,d03362d19979b27306c192f1c74a84e5", + "1504821at2.faa:md5,4f5f6e5c57bac0092c1d85ded73d7e67", + "1574817at2.faa:md5,1153e55998c2929eacad2aed7d08d248", + "1592033at2.faa:md5,bb7a59e5f3a57ba12d10dabf4c77ab57", + "1623045at2.faa:md5,8fe38155feb1802beb97ef7714837bf5", + "1661836at2.faa:md5,6c6d592c2fbb0d7a4e5e1f47a15644f0", + "1674344at2.faa:md5,bb41b44e53565a54cadf0b780532fe08", + "1698718at2.faa:md5,f233860000028eb00329aa85236c71e5", + "1990650at2.faa:md5,34a2d29c5f8b6253159ddb7a43fa1829", + "223233at2.faa:md5,dec6705c7846c989296e73942f953cbc", + "402899at2.faa:md5,acc0f271f9a586d2ce1ee41669b22999", + "505485at2.faa:md5,aa0391f8fa5d9bd19b30d844d5a99845", + "665824at2.faa:md5,47f8ad43b6a6078206feb48c2e552793", + "776861at2.faa:md5,f8b90c13f7c6be828dea3bb920195e3d", + "874197at2.faa:md5,8d22a35a768debe6f376fc695d233a69", + "932854at2.faa:md5,2eff2de1ab83b22f3234a529a44e22bb", + "95696at2.faa:md5,247bfd1aef432f7b5456307768e9149c" + ], + "single_copy_proteins.faa:md5,73e2c5d6a9b0f01f2deea3cc5f21b764", + "versions.yml:md5,3fc94714b95c2dc15399a4229d9dd1d9" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-05-03T13:27:53.992893" + }, + "test_busco_protein": { + "content": [ + "test-bacteria_odb10-busco.batch_summary.txt:md5,f5a782378f9f94a748aa907381fdef91", + "full_table.tsv:md5,812ab6a0496fccab774643cf40c4f2a8", + "missing_busco_list.tsv:md5,aceb66e347a353cb7fca8e2a725f9112", + "versions.yml:md5,3fc94714b95c2dc15399a4229d9dd1d9" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-05-03T13:27:12.724862" + } +} \ No newline at end of file diff --git a/modules/pfr/busco/busco/tests/nextflow.augustus.config b/modules/pfr/busco/busco/tests/nextflow.augustus.config new file mode 100644 index 0000000..84daa69 --- /dev/null +++ b/modules/pfr/busco/busco/tests/nextflow.augustus.config @@ -0,0 +1,5 @@ +process { + withName: 'BUSCO_BUSCO' { + ext.args = '--tar --augustus' + } +} diff --git a/modules/pfr/busco/busco/tests/nextflow.config b/modules/pfr/busco/busco/tests/nextflow.config new file mode 100644 index 0000000..1ec3fec --- /dev/null +++ b/modules/pfr/busco/busco/tests/nextflow.config @@ -0,0 +1,5 @@ +process { + withName: 'BUSCO_BUSCO' { + ext.args = '--tar' + } +} diff --git a/modules/pfr/busco/busco/tests/nextflow.metaeuk.config b/modules/pfr/busco/busco/tests/nextflow.metaeuk.config new file mode 100644 index 0000000..c141844 --- /dev/null +++ b/modules/pfr/busco/busco/tests/nextflow.metaeuk.config @@ -0,0 +1,5 @@ +process { + withName: 'BUSCO_BUSCO' { + ext.args = '--tar --metaeuk' + } +} diff --git a/modules/pfr/busco/busco/tests/old_test.yml b/modules/pfr/busco/busco/tests/old_test.yml new file mode 100644 index 0000000..75177f5 --- /dev/null +++ b/modules/pfr/busco/busco/tests/old_test.yml @@ -0,0 +1,624 @@ +- name: busco test_busco_genome_single_fasta + command: nextflow run ./tests/modules/nf-core/busco -entry test_busco_genome_single_fasta -c ./tests/config/nextflow.config + tags: + - busco + files: + - path: output/busco/short_summary.specific.bacteria_odb10.genome.fna.json + contains: + - "one_line_summary" + - "mode" + - "dataset" + - path: output/busco/short_summary.specific.bacteria_odb10.genome.fna.txt + contains: + - "BUSCO version" + - "The lineage dataset is" + - "BUSCO was run in mode" + - "Complete BUSCOs" + - "Missing BUSCOs" + - "Dependencies and versions" + - path: output/busco/test-bacteria_odb10-busco.batch_summary.txt + md5sum: bc2440f8a68d7fbf931ff911c1c3fdfa + - path: output/busco/test-bacteria_odb10-busco/genome.fna/logs/bbtools_err.log + - path: output/busco/test-bacteria_odb10-busco/genome.fna/logs/bbtools_out.log + md5sum: 9caf1a1434414c78562eb0bbb9c0e53f + - path: output/busco/test-bacteria_odb10-busco/genome.fna/logs/hmmsearch_err.log + - path: output/busco/test-bacteria_odb10-busco/genome.fna/logs/hmmsearch_out.log + contains: + - "# hmmsearch :: search profile(s) against a sequence database" + - "# target sequence database:" + - "Internal pipeline statistics summary:" + - "[ok]" + - path: output/busco/test-bacteria_odb10-busco/genome.fna/logs/prodigal_err.log + md5sum: 538510cfc7483498210f01e53fe035ad + - path: output/busco/test-bacteria_odb10-busco/genome.fna/logs/prodigal_out.log + md5sum: 61050b0706addc9498b2088a2d6efa9a + - path: output/busco/test-bacteria_odb10-busco/genome.fna/prodigal_output/.checkpoint + contains: + - "Tool: prodigal" + - "Completed" + - "jobs" + - path: output/busco/test-bacteria_odb10-busco/genome.fna/prodigal_output/predicted_genes/predicted.faa + md5sum: 836e9a80d33d8b89168f07ddc13ee991 + - path: output/busco/test-bacteria_odb10-busco/genome.fna/prodigal_output/predicted_genes/predicted.fna + md5sum: 20eeb75f86842e6e136f02bca8b73a9f + - path: output/busco/test-bacteria_odb10-busco/genome.fna/prodigal_output/predicted_genes/tmp/prodigal_mode_single_code_11.faa + md5sum: 836e9a80d33d8b89168f07ddc13ee991 + - path: output/busco/test-bacteria_odb10-busco/genome.fna/prodigal_output/predicted_genes/tmp/prodigal_mode_single_code_11.fna + md5sum: 20eeb75f86842e6e136f02bca8b73a9f + - path: output/busco/test-bacteria_odb10-busco/genome.fna/prodigal_output/predicted_genes/tmp/prodigal_mode_single_code_11_err.log + md5sum: 538510cfc7483498210f01e53fe035ad + - path: output/busco/test-bacteria_odb10-busco/genome.fna/prodigal_output/predicted_genes/tmp/prodigal_mode_single_code_11_out.log + md5sum: 61050b0706addc9498b2088a2d6efa9a + - path: output/busco/test-bacteria_odb10-busco/genome.fna/run_bacteria_odb10/.bbtools_output/.checkpoint + contains: + - "Tool: bbtools" + - "Completed" + - "jobs" + - path: output/busco/test-bacteria_odb10-busco/genome.fna/run_bacteria_odb10/busco_sequences/fragmented_busco_sequences.tar.gz + - path: output/busco/test-bacteria_odb10-busco/genome.fna/run_bacteria_odb10/busco_sequences/multi_copy_busco_sequences.tar.gz + - path: output/busco/test-bacteria_odb10-busco/genome.fna/run_bacteria_odb10/busco_sequences/single_copy_busco_sequences.tar.gz + - path: output/busco/test-bacteria_odb10-busco/genome.fna/run_bacteria_odb10/full_table.tsv + md5sum: c56edab1dc1522e993c25ae2b730799f + - path: output/busco/test-bacteria_odb10-busco/genome.fna/run_bacteria_odb10/hmmer_output.tar.gz + - path: output/busco/test-bacteria_odb10-busco/genome.fna/run_bacteria_odb10/missing_busco_list.tsv + md5sum: b533ef30270f27160acce85a22d01bf5 + - path: output/busco/test-bacteria_odb10-busco/genome.fna/run_bacteria_odb10/short_summary.json + contains: + - "one_line_summary" + - "mode" + - "lineage_dataset" + - path: output/busco/test-bacteria_odb10-busco/genome.fna/run_bacteria_odb10/short_summary.txt + contains: + - "# BUSCO version is:" + - "Results:" + - "busco:" + - path: output/busco/test-bacteria_odb10-busco/logs/busco.log + contains: + - "DEBUG:busco.run_BUSCO" + - "Results from dataset" + - "how to cite BUSCO" + - path: output/busco/versions.yml + +- name: busco test_busco_genome_multi_fasta + command: nextflow run ./tests/modules/nf-core/busco -entry test_busco_genome_multi_fasta -c ./tests/config/nextflow.config + tags: + - busco + files: + - path: output/busco/short_summary.specific.bacteria_odb10.genome.fasta.json + contains: + - "one_line_summary" + - "mode" + - "dataset" + - path: output/busco/short_summary.specific.bacteria_odb10.genome.fasta.txt + contains: + - "BUSCO version" + - "The lineage dataset is" + - "BUSCO was run in mode" + - "Complete BUSCOs" + - "Missing BUSCOs" + - "Dependencies and versions" + - path: output/busco/short_summary.specific.bacteria_odb10.genome.fna.json + contains: + - "one_line_summary" + - "mode" + - "dataset" + - path: output/busco/short_summary.specific.bacteria_odb10.genome.fna.txt + contains: + - "BUSCO version" + - "The lineage dataset is" + - "BUSCO was run in mode" + - "Complete BUSCOs" + - "Missing BUSCOs" + - "Dependencies and versions" + - path: output/busco/test-bacteria_odb10-busco.batch_summary.txt + md5sum: 8c64c1a28b086ef2ee444f99cbed5f7d + - path: output/busco/test-bacteria_odb10-busco/genome.fasta/logs/bbtools_err.log + - path: output/busco/test-bacteria_odb10-busco/genome.fasta/logs/bbtools_out.log + md5sum: 8f047bdb33264d22a83920bc2c63f29a + - path: output/busco/test-bacteria_odb10-busco/genome.fasta/logs/hmmsearch_err.log + - path: output/busco/test-bacteria_odb10-busco/genome.fasta/logs/hmmsearch_out.log + contains: + - "# hmmsearch :: search profile(s) against a sequence database" + - "# target sequence database:" + - "Internal pipeline statistics summary:" + - "[ok]" + - path: output/busco/test-bacteria_odb10-busco/genome.fasta/logs/prodigal_err.log + md5sum: c1fdc6977332f53dfe7f632733bb4585 + - path: output/busco/test-bacteria_odb10-busco/genome.fasta/logs/prodigal_out.log + md5sum: 50752acb1c5a20be886bfdfc06635bcb + - path: output/busco/test-bacteria_odb10-busco/genome.fasta/prodigal_output/.checkpoint + contains: + - "Tool: prodigal" + - "Completed" + - "jobs" + - path: output/busco/test-bacteria_odb10-busco/genome.fasta/prodigal_output/predicted_genes/predicted.faa + md5sum: 8166471fc5f08c82fd5643ab42327f9d + - path: output/busco/test-bacteria_odb10-busco/genome.fasta/prodigal_output/predicted_genes/predicted.fna + md5sum: ddc508a18f60e7f3314534df50cdf8ca + - path: output/busco/test-bacteria_odb10-busco/genome.fasta/prodigal_output/predicted_genes/tmp/prodigal_mode_single_code_11.faa + md5sum: 8166471fc5f08c82fd5643ab42327f9d + - path: output/busco/test-bacteria_odb10-busco/genome.fasta/prodigal_output/predicted_genes/tmp/prodigal_mode_single_code_11.fna + md5sum: ddc508a18f60e7f3314534df50cdf8ca + - path: output/busco/test-bacteria_odb10-busco/genome.fasta/prodigal_output/predicted_genes/tmp/prodigal_mode_single_code_11_err.log + md5sum: c1fdc6977332f53dfe7f632733bb4585 + - path: output/busco/test-bacteria_odb10-busco/genome.fasta/prodigal_output/predicted_genes/tmp/prodigal_mode_single_code_11_out.log + md5sum: 50752acb1c5a20be886bfdfc06635bcb + - path: output/busco/test-bacteria_odb10-busco/genome.fasta/prodigal_output/predicted_genes/tmp/prodigal_mode_single_code_4.faa + md5sum: e56fd59c38248dc21ac94355dca98121 + - path: output/busco/test-bacteria_odb10-busco/genome.fasta/prodigal_output/predicted_genes/tmp/prodigal_mode_single_code_4.fna + md5sum: b365f84bf99c68357952e0b98ed7ce42 + - path: output/busco/test-bacteria_odb10-busco/genome.fasta/prodigal_output/predicted_genes/tmp/prodigal_mode_single_code_4_err.log + md5sum: e5f14d7925ba14a0f9850542f3739894 + - path: output/busco/test-bacteria_odb10-busco/genome.fasta/prodigal_output/predicted_genes/tmp/prodigal_mode_single_code_4_out.log + md5sum: d41971bfc1b621d4ffd2633bc47017ea + - path: output/busco/test-bacteria_odb10-busco/genome.fasta/run_bacteria_odb10/.bbtools_output/.checkpoint + contains: + - "Tool: bbtools" + - "Completed" + - "jobs" + - path: output/busco/test-bacteria_odb10-busco/genome.fasta/run_bacteria_odb10/busco_sequences/fragmented_busco_sequences.tar.gz + - path: output/busco/test-bacteria_odb10-busco/genome.fasta/run_bacteria_odb10/busco_sequences/multi_copy_busco_sequences.tar.gz + - path: output/busco/test-bacteria_odb10-busco/genome.fasta/run_bacteria_odb10/busco_sequences/single_copy_busco_sequences.tar.gz + - path: output/busco/test-bacteria_odb10-busco/genome.fasta/run_bacteria_odb10/full_table.tsv + md5sum: c9651b88b10871abc260ee655898e828 + - path: output/busco/test-bacteria_odb10-busco/genome.fasta/run_bacteria_odb10/hmmer_output.tar.gz + - path: output/busco/test-bacteria_odb10-busco/genome.fasta/run_bacteria_odb10/missing_busco_list.tsv + md5sum: 9939309df2da5419de88c32d1435c779 + - path: output/busco/test-bacteria_odb10-busco/genome.fasta/run_bacteria_odb10/short_summary.json + contains: + - "one_line_summary" + - "mode" + - "dataset" + - path: output/busco/test-bacteria_odb10-busco/genome.fasta/run_bacteria_odb10/short_summary.txt + contains: + - "# BUSCO version is:" + - "Results:" + - "busco:" + - path: output/busco/test-bacteria_odb10-busco/genome.fna/logs/bbtools_err.log + - path: output/busco/test-bacteria_odb10-busco/genome.fna/logs/bbtools_out.log + md5sum: 9caf1a1434414c78562eb0bbb9c0e53f + - path: output/busco/test-bacteria_odb10-busco/genome.fna/logs/hmmsearch_err.log + - path: output/busco/test-bacteria_odb10-busco/genome.fna/logs/hmmsearch_out.log + contains: + - "# hmmsearch :: search profile(s) against a sequence database" + - "# target sequence database:" + - "Internal pipeline statistics summary:" + - "[ok]" + - path: output/busco/test-bacteria_odb10-busco/genome.fna/logs/prodigal_err.log + md5sum: 538510cfc7483498210f01e53fe035ad + - path: output/busco/test-bacteria_odb10-busco/genome.fna/logs/prodigal_out.log + md5sum: 61050b0706addc9498b2088a2d6efa9a + - path: output/busco/test-bacteria_odb10-busco/genome.fna/prodigal_output/.checkpoint + contains: + - "Tool: prodigal" + - "Completed" + - "jobs" + - path: output/busco/test-bacteria_odb10-busco/genome.fna/prodigal_output/predicted_genes/predicted.faa + md5sum: 836e9a80d33d8b89168f07ddc13ee991 + - path: output/busco/test-bacteria_odb10-busco/genome.fna/prodigal_output/predicted_genes/predicted.fna + md5sum: 20eeb75f86842e6e136f02bca8b73a9f + - path: output/busco/test-bacteria_odb10-busco/genome.fna/prodigal_output/predicted_genes/tmp/prodigal_mode_single_code_11.faa + md5sum: 836e9a80d33d8b89168f07ddc13ee991 + - path: output/busco/test-bacteria_odb10-busco/genome.fna/prodigal_output/predicted_genes/tmp/prodigal_mode_single_code_11.fna + md5sum: 20eeb75f86842e6e136f02bca8b73a9f + - path: output/busco/test-bacteria_odb10-busco/genome.fna/prodigal_output/predicted_genes/tmp/prodigal_mode_single_code_11_err.log + md5sum: 538510cfc7483498210f01e53fe035ad + - path: output/busco/test-bacteria_odb10-busco/genome.fna/prodigal_output/predicted_genes/tmp/prodigal_mode_single_code_11_out.log + md5sum: 61050b0706addc9498b2088a2d6efa9a + - path: output/busco/test-bacteria_odb10-busco/genome.fna/run_bacteria_odb10/.bbtools_output/.checkpoint + contains: + - "Tool: bbtools" + - "Completed" + - "jobs" + - path: output/busco/test-bacteria_odb10-busco/genome.fna/run_bacteria_odb10/busco_sequences/fragmented_busco_sequences.tar.gz + - path: output/busco/test-bacteria_odb10-busco/genome.fna/run_bacteria_odb10/busco_sequences/multi_copy_busco_sequences.tar.gz + - path: output/busco/test-bacteria_odb10-busco/genome.fna/run_bacteria_odb10/busco_sequences/single_copy_busco_sequences.tar.gz + - path: output/busco/test-bacteria_odb10-busco/genome.fna/run_bacteria_odb10/full_table.tsv + md5sum: c56edab1dc1522e993c25ae2b730799f + - path: output/busco/test-bacteria_odb10-busco/genome.fna/run_bacteria_odb10/hmmer_output.tar.gz + - path: output/busco/test-bacteria_odb10-busco/genome.fna/run_bacteria_odb10/missing_busco_list.tsv + md5sum: b533ef30270f27160acce85a22d01bf5 + - path: output/busco/test-bacteria_odb10-busco/genome.fna/run_bacteria_odb10/short_summary.json + contains: + - "one_line_summary" + - "mode" + - "dataset" + - path: output/busco/test-bacteria_odb10-busco/genome.fna/run_bacteria_odb10/short_summary.txt + contains: + - "# BUSCO version is:" + - "Results:" + - "busco:" + - path: output/busco/test-bacteria_odb10-busco/logs/busco.log + contains: + - "DEBUG:busco.run_BUSCO" + - "Results from dataset" + - "how to cite BUSCO" + - path: output/busco/versions.yml + +- name: busco test_busco_eukaryote_metaeuk + command: nextflow run ./tests/modules/nf-core/busco -entry test_busco_eukaryote_metaeuk -c ./tests/config/nextflow.config + tags: + - busco + files: + - path: output/busco/short_summary.specific.eukaryota_odb10.genome.fasta.json + contains: + - "one_line_summary" + - "mode" + - "dataset" + - path: output/busco/short_summary.specific.eukaryota_odb10.genome.fasta.txt + contains: + - "BUSCO version" + - "The lineage dataset is" + - "BUSCO was run in mode" + - "Complete BUSCOs" + - "Missing BUSCOs" + - "Dependencies and versions" + - path: output/busco/test-eukaryota_odb10-busco.batch_summary.txt + md5sum: ff6d8277e452a83ce9456bbee666feb6 + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/logs/bbtools_err.log + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/logs/bbtools_out.log + md5sum: e63debaa653f18f7405d936050abc093 + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/logs/hmmsearch_err.log + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/logs/hmmsearch_out.log + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/logs/metaeuk_run1_err.log + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/logs/metaeuk_run1_out.log + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/logs/metaeuk_run2_err.log + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/logs/metaeuk_run2_out.log + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/.bbtools_output/.checkpoint + contains: + - "Tool: bbtools" + - "Completed" + - "jobs" + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/busco_sequences/fragmented_busco_sequences.tar.gz + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/busco_sequences/multi_copy_busco_sequences.tar.gz + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/busco_sequences/single_copy_busco_sequences.tar.gz + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/full_table.tsv + md5sum: bd880e90b9e5620a58943a3e0f9ff16b + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/hmmer_output.tar.gz + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/metaeuk_output/.checkpoint + contains: + - "Tool: metaeuk" + - "Completed" + - "jobs" + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/metaeuk_output/combined_pred_proteins.fas + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/metaeuk_output/initial_results/genome.fasta.codon.fas + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/metaeuk_output/initial_results/genome.fasta.fas + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/metaeuk_output/initial_results/genome.fasta.gff + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/metaeuk_output/initial_results/genome.fasta.headersMap.tsv + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/metaeuk_output/refseq_db_rerun.faa + md5sum: d80b8fa4cb5ed0d47d63d6aa93635bc2 + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/metaeuk_output/rerun_results/genome.fasta.codon.fas + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/metaeuk_output/rerun_results/genome.fasta.fas + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/metaeuk_output/rerun_results/genome.fasta.gff + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/metaeuk_output/rerun_results/genome.fasta.headersMap.tsv + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/missing_busco_list.tsv + md5sum: 1e8e79c540fd2e69ba0d2659d9eb2988 + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/short_summary.json + contains: + - "one_line_summary" + - "mode" + - "dataset" + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/short_summary.txt + contains: + - "# BUSCO version is:" + - "Results:" + - "busco:" + - path: output/busco/test-eukaryota_odb10-busco/logs/busco.log + contains: + - "DEBUG:busco.run_BUSCO" + - "Results from dataset" + - "how to cite BUSCO" + - path: output/busco/versions.yml + +- name: busco test_busco_eukaryote_augustus + command: nextflow run ./tests/modules/nf-core/busco -entry test_busco_eukaryote_augustus -c ./tests/config/nextflow.config + tags: + - busco + files: + - path: output/busco/short_summary.specific.eukaryota_odb10.genome.fasta.json + contains: + - "one_line_summary" + - "mode" + - "dataset" + - path: output/busco/short_summary.specific.eukaryota_odb10.genome.fasta.txt + contains: + - "BUSCO version" + - "The lineage dataset is" + - "BUSCO was run in mode" + - "Complete BUSCOs" + - "Missing BUSCOs" + - "Dependencies and versions" + - path: output/busco/test-eukaryota_odb10-busco.batch_summary.txt + md5sum: ff6d8277e452a83ce9456bbee666feb6 + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/logs/bbtools_err.log + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/logs/bbtools_out.log + md5sum: e63debaa653f18f7405d936050abc093 + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/logs/hmmsearch_err.log + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/logs/hmmsearch_out.log + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/logs/metaeuk_run1_err.log + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/logs/metaeuk_run1_out.log + contains: + - "metaeuk" + - "easy-predict" + - "Compute score and coverage" + - "Time for processing:" + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/logs/metaeuk_run2_err.log + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/logs/metaeuk_run2_out.log + contains: + - "metaeuk" + - "easy-predict" + - "Compute score and coverage" + - "Time for processing:" + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/.bbtools_output/.checkpoint + contains: + - "Tool: bbtools" + - "Completed" + - "jobs" + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/busco_sequences/fragmented_busco_sequences.tar.gz + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/busco_sequences/multi_copy_busco_sequences.tar.gz + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/busco_sequences/single_copy_busco_sequences.tar.gz + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/full_table.tsv + md5sum: bd880e90b9e5620a58943a3e0f9ff16b + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/hmmer_output.tar.gz + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/metaeuk_output/.checkpoint + contains: + - "Tool: metaeuk" + - "Completed" + - "jobs" + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/metaeuk_output/combined_pred_proteins.fas + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/metaeuk_output/initial_results/genome.fasta.codon.fas + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/metaeuk_output/initial_results/genome.fasta.fas + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/metaeuk_output/initial_results/genome.fasta.gff + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/metaeuk_output/initial_results/genome.fasta.headersMap.tsv + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/metaeuk_output/refseq_db_rerun.faa + md5sum: d80b8fa4cb5ed0d47d63d6aa93635bc2 + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/metaeuk_output/rerun_results/genome.fasta.codon.fas + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/metaeuk_output/rerun_results/genome.fasta.fas + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/metaeuk_output/rerun_results/genome.fasta.gff + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/metaeuk_output/rerun_results/genome.fasta.headersMap.tsv + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/missing_busco_list.tsv + md5sum: 1e8e79c540fd2e69ba0d2659d9eb2988 + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/short_summary.json + contains: + - "one_line_summary" + - "mode" + - "dataset" + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/short_summary.txt + contains: + - "# BUSCO version is:" + - "Results:" + - "busco:" + - path: output/busco/test-eukaryota_odb10-busco/logs/busco.log + contains: + - "DEBUG:busco.run_BUSCO" + - "Results from dataset" + - "how to cite BUSCO" + - path: output/busco/versions.yml + +- name: busco test_busco_protein + command: nextflow run ./tests/modules/nf-core/busco -entry test_busco_protein -c ./tests/config/nextflow.config + tags: + - busco + files: + - path: output/busco/short_summary.specific.bacteria_odb10.proteome.fasta.json + contains: + - "one_line_summary" + - "mode" + - "dataset" + - path: output/busco/short_summary.specific.bacteria_odb10.proteome.fasta.txt + contains: + - "BUSCO version" + - "The lineage dataset is" + - "BUSCO was run in mode" + - "Complete BUSCOs" + - "Missing BUSCOs" + - "Dependencies and versions" + - path: output/busco/test-bacteria_odb10-busco.batch_summary.txt + md5sum: 7a65e6cbb6c56a2ea4e739ae0aa3297d + - path: output/busco/test-bacteria_odb10-busco/logs/busco.log + contains: + - "DEBUG:busco.run_BUSCO" + - "Results from dataset" + - "how to cite BUSCO" + - path: output/busco/test-bacteria_odb10-busco/proteome.fasta/logs/hmmsearch_err.log + - path: output/busco/test-bacteria_odb10-busco/proteome.fasta/logs/hmmsearch_out.log + contains: + - "# hmmsearch :: search profile(s) against a sequence database" + - "# target sequence database:" + - "Internal pipeline statistics summary:" + - "[ok]" + - path: output/busco/test-bacteria_odb10-busco/proteome.fasta/run_bacteria_odb10/busco_sequences/fragmented_busco_sequences.tar.gz + - path: output/busco/test-bacteria_odb10-busco/proteome.fasta/run_bacteria_odb10/busco_sequences/multi_copy_busco_sequences.tar.gz + - path: output/busco/test-bacteria_odb10-busco/proteome.fasta/run_bacteria_odb10/busco_sequences/single_copy_busco_sequences.tar.gz + - path: output/busco/test-bacteria_odb10-busco/proteome.fasta/run_bacteria_odb10/full_table.tsv + md5sum: 0e34f1011cd83ea1d5d5103ec62b8922 + - path: output/busco/test-bacteria_odb10-busco/proteome.fasta/run_bacteria_odb10/hmmer_output.tar.gz + - path: output/busco/test-bacteria_odb10-busco/proteome.fasta/run_bacteria_odb10/missing_busco_list.tsv + md5sum: 9939309df2da5419de88c32d1435c779 + - path: output/busco/test-bacteria_odb10-busco/proteome.fasta/run_bacteria_odb10/short_summary.json + contains: + - "one_line_summary" + - "mode" + - "dataset" + - path: output/busco/test-bacteria_odb10-busco/proteome.fasta/run_bacteria_odb10/short_summary.txt + contains: + - "# BUSCO version is:" + - "Results:" + - "busco:" + - path: output/busco/versions.yml + +- name: busco test_busco_transcriptome + command: nextflow run ./tests/modules/nf-core/busco -entry test_busco_transcriptome -c ./tests/config/nextflow.config + tags: + - busco + files: + - path: output/busco/short_summary.specific.bacteria_odb10.test1.contigs.fa.json + contains: + - "one_line_summary" + - "mode" + - "dataset" + - path: output/busco/short_summary.specific.bacteria_odb10.test1.contigs.fa.txt + contains: + - "BUSCO version" + - "The lineage dataset is" + - "BUSCO was run in mode" + - "Complete BUSCOs" + - "Missing BUSCOs" + - "Dependencies and versions" + - path: output/busco/test-bacteria_odb10-busco.batch_summary.txt + md5sum: 46118ecf60d1b87d22b96d80f4f03632 + - path: output/busco/test-bacteria_odb10-busco/logs/busco.log + contains: + - "DEBUG:busco.run_BUSCO" + - "Results from dataset" + - "how to cite BUSCO" + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/blast_db/.checkpoint + contains: + - "Tool: makeblastdb" + - "Completed" + - "jobs" + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/blast_db/test1.contigs.fa.ndb + md5sum: 3788c017fe5e6f0f58224e9cdd21822b + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/blast_db/test1.contigs.fa.nhr + md5sum: 8ecd2ce392bb5e25ddbe1d85f879582e + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/blast_db/test1.contigs.fa.nin + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/blast_db/test1.contigs.fa.njs + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/blast_db/test1.contigs.fa.not + md5sum: 0c340e376c7e85d19f82ec1a833e6a6e + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/blast_db/test1.contigs.fa.nsq + md5sum: 532d5c0a7ea00fe95ca3c97cb3be6198 + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/blast_db/test1.contigs.fa.ntf + md5sum: de1250813f0c7affc6d12dac9d0fb6bb + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/blast_db/test1.contigs.fa.nto + md5sum: ff74bd41f9cc9b011c63a32c4f7693bf + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/logs/hmmsearch_err.log + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/logs/hmmsearch_out.log + contains: + - "# hmmsearch :: search profile(s) against a sequence database" + - "# target sequence database:" + - "Internal pipeline statistics summary:" + - "[ok]" + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/logs/makeblastdb_err.log + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/logs/makeblastdb_out.log + contains: + - "Building a new DB" + - "Adding sequences from FASTA" + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/logs/tblastn_err.log + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/logs/tblastn_out.log + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/blast_output/.checkpoint + contains: + - "Tool: tblastn" + - "Completed" + - "jobs" + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/blast_output/coordinates.tsv + md5sum: cc30eed321944af293452bdbcfc24292 + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/blast_output/sequences/k141_101.temp + md5sum: 73e9c65fc83fedc58f57f09b08f08238 + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/blast_output/sequences/k141_119.temp + md5sum: 7fa4cc7955ec0cc36330a221c579b975 + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/blast_output/sequences/k141_129.temp + md5sum: 6f1601c875d019e3f6f1f98ed8e988d4 + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/blast_output/sequences/k141_138.temp + md5sum: 3f8e034686cd240c2330650d791bcae2 + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/blast_output/sequences/k141_143.temp + md5sum: df3dfa8e9ba30ed70cf75b5e7abf2179 + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/blast_output/sequences/k141_172.temp + md5sum: 7d463e0e6cf7169bc9077d8dc776dda1 + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/blast_output/sequences/k141_178.temp + md5sum: 2288edf7fa4f88f51b4cf4d94086f77e + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/blast_output/sequences/k141_188.temp + md5sum: 029906abbad6d87fc57830dd548cac24 + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/blast_output/sequences/k141_195.temp + md5sum: 4937f3b348774a31b1160a00297c29cc + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/blast_output/sequences/k141_210.temp + md5sum: afcb20ba4c466479d6b91c8c62251e1f + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/blast_output/sequences/k141_232.temp + md5sum: 2e1e823ce017345bd998191a39fa9924 + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/blast_output/sequences/k141_268.temp + md5sum: 08c2d82c34ecffbe1c638b410349412e + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/blast_output/sequences/k141_29.temp + md5sum: cd9b63cf93524284781535c888313764 + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/blast_output/sequences/k141_44.temp + md5sum: d1929b742b24ebe379bf4801ca882dca + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/blast_output/sequences/k141_58.temp + md5sum: 69215765b010c05336538cb322c900b3 + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/blast_output/sequences/k141_72.temp + md5sum: 6feaa1cc3b0899a147ea9d466878f3e3 + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/blast_output/sequences/k141_80.temp + md5sum: 13625eae14e860a96ce17cd4e37e9d01 + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/blast_output/sequences/k141_81.temp + md5sum: e14b2484649b0dbc8926815c207b806d + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/blast_output/sequences/k141_93.temp + md5sum: 6902c93691df00e690faea914c71839e + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/blast_output/sequences/k141_97.temp + md5sum: 0a0d9d38a83acbd5ad43c29cdf429988 + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/blast_output/tblastn.tsv + contains: + - "TBLASTN" + - "BLAST processed" + - "queries" + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/busco_sequences/fragmented_busco_sequences.tar.gz + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/busco_sequences/multi_copy_busco_sequences.tar.gz + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/busco_sequences/single_copy_busco_sequences.tar.gz + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/full_table.tsv + md5sum: 24df25199e13c88bd892fc3e7b541ca0 + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/hmmer_output.tar.gz + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/missing_busco_list.tsv + md5sum: e7232e2b8cca4fdfdd9e363b39ebbc81 + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/short_summary.json + contains: + - "one_line_summary" + - "mode" + - "dataset" + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/short_summary.txt + contains: + - "# BUSCO version is:" + - "Results:" + - "busco:" + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/single_copy_proteins.faa + md5sum: e04b9465733577ae6e4bccb7aa01e720 + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/translated_proteins/1024388at2.faa + md5sum: 7333c39a20258f20c7019ea0cd83157c + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/translated_proteins/1054741at2.faa + md5sum: ebb481e77a824685fbe04d8a2f3a0d7d + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/translated_proteins/1093223at2.faa + md5sum: 34621c7d499034e8f8e6b92fd4020a93 + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/translated_proteins/1151822at2.faa + md5sum: aa89ca381c1c70c9c4e1380351ca7c2a + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/translated_proteins/143460at2.faa + md5sum: f2e91d78b8dd3722840378789f29e8c8 + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/translated_proteins/1491686at2.faa + md5sum: 73c25aef5c9cba7f4151804941b146ea + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/translated_proteins/1504821at2.faa + md5sum: cda556018d1f84ebe517e89f6fc107d0 + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/translated_proteins/1574817at2.faa + md5sum: a9096c9fb8b25c78a72871ab0463acdc + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/translated_proteins/1592033at2.faa + md5sum: e463d25ce186c0cebfd749474f3a4c64 + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/translated_proteins/1623045at2.faa + md5sum: f2cfd241590c6d8377286d6135480937 + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/translated_proteins/1661836at2.faa + md5sum: 586569546fb9861502468e3d9ba2775c + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/translated_proteins/1674344at2.faa + md5sum: 24c658bee14ad84b062d81ad96642eb8 + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/translated_proteins/1698718at2.faa + md5sum: 0b8e26ddf5149bbd8805be7af125208d + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/translated_proteins/1990650at2.faa + md5sum: 159320712ee01fb2ccb31a25df44eead + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/translated_proteins/223233at2.faa + md5sum: 812629c0b06ac3d18661c2ca78de0c08 + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/translated_proteins/402899at2.faa + md5sum: f7ff4e1591342d30b77392a2e84b57d9 + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/translated_proteins/505485at2.faa + md5sum: 7b34a24fc49c540d46fcf96ff5129564 + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/translated_proteins/665824at2.faa + md5sum: 4cff2df64f6bcaff8bc19c234c8bcccd + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/translated_proteins/776861at2.faa + md5sum: 613af7a3fea30ea2bece66f603b9284a + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/translated_proteins/874197at2.faa + md5sum: a7cd1b13c9ef91c7ef4e31614166f197 + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/translated_proteins/932854at2.faa + md5sum: fe313ffd5efdb0fed887a04fba352552 + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/translated_proteins/95696at2.faa + md5sum: 4e1f30a2fea4dfbf9bb7fae2700622a0 + - path: output/busco/versions.yml diff --git a/modules/pfr/busco/busco/tests/tags.yml b/modules/pfr/busco/busco/tests/tags.yml new file mode 100644 index 0000000..7c4d283 --- /dev/null +++ b/modules/pfr/busco/busco/tests/tags.yml @@ -0,0 +1,2 @@ +busco/busco: + - "modules/nf-core/busco/busco/**" diff --git a/modules/pfr/busco/generateplot/environment.yml b/modules/pfr/busco/generateplot/environment.yml new file mode 100644 index 0000000..1ca5bab --- /dev/null +++ b/modules/pfr/busco/generateplot/environment.yml @@ -0,0 +1,9 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json +name: "busco_generateplot" +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bioconda::busco=5.7.1 diff --git a/modules/pfr/busco/generateplot/main.nf b/modules/pfr/busco/generateplot/main.nf new file mode 100644 index 0000000..6a4b339 --- /dev/null +++ b/modules/pfr/busco/generateplot/main.nf @@ -0,0 +1,45 @@ +process BUSCO_GENERATEPLOT { + label 'process_single' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/busco:5.7.1--pyhdfd78af_0': + 'biocontainers/busco:5.7.1--pyhdfd78af_0' }" + + input: + path short_summary_txt, stageAs: 'busco/*' + + output: + path '*.png' , emit: png + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: 'busco_figure' + """ + generate_plot.py \\ + $args \\ + -wd busco + + mv ./busco/busco_figure.png ${prefix}.png + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + busco: \$( busco --version 2>&1 | sed 's/^BUSCO //' ) + END_VERSIONS + """ + + stub: + def prefix = task.ext.prefix ?: 'busco_figure' + """ + touch ${prefix}.png + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + busco: \$( busco --version 2>&1 | sed 's/^BUSCO //' ) + END_VERSIONS + """ +} diff --git a/modules/pfr/busco/generateplot/meta.yml b/modules/pfr/busco/generateplot/meta.yml new file mode 100644 index 0000000..796f32b --- /dev/null +++ b/modules/pfr/busco/generateplot/meta.yml @@ -0,0 +1,35 @@ +name: "busco_generateplot" +description: BUSCO plot generation tool +keywords: + - genome + - fasta + - annotation + - busco + - transcriptome + - quality control +tools: + - busco: + description: BUSCO provides measures for quantitative assessment of genome assembly, gene set, and transcriptome completeness based on evolutionarily informed expectations of gene content from near-universal single-copy orthologs selected from OrthoDB. + homepage: https://busco.ezlab.org/ + documentation: https://busco.ezlab.org/busco_userguide.html + tool_dev_url: https://gitlab.com/ezlab/busco + doi: "10.1007/978-1-4939-9173-0_14" + licence: ["MIT"] +input: + - short_summary_txt: + type: file + description: One or more short summary txt files from BUSCO + pattern: "short_summary.*.txt" +output: + - png: + type: file + description: A summary plot in png format + pattern: "*.png" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@GallVp" +maintainers: + - "@GallVp" diff --git a/modules/pfr/busco/generateplot/tests/main.nf.test b/modules/pfr/busco/generateplot/tests/main.nf.test new file mode 100644 index 0000000..853dc5e --- /dev/null +++ b/modules/pfr/busco/generateplot/tests/main.nf.test @@ -0,0 +1,72 @@ +nextflow_process { + + name "Test Process BUSCO_GENERATEPLOT" + script "../main.nf" + process "BUSCO_GENERATEPLOT" + + tag "modules" + tag "modules_nfcore" + tag "busco" + tag "busco/busco" + tag "busco/generateplot" + + test("bacteroides_fragilis-genome_fna_gz") { + + setup { + run("BUSCO_BUSCO") { + script "../../busco" + process { + """ + input[0] = [ + [ id:'test' ], // meta map + file(params.test_data['bacteroides_fragilis']['genome']['genome_fna_gz'], checkIfExists: true) + ] + input[1] = 'genome' + input[2] = 'bacteria_odb10' + input[3] = [] + input[4] = [] + """ + } + } + } + + when { + process { + """ + input[0] = BUSCO_BUSCO.out.short_summaries_txt.map { meta, summary -> summary } + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out.versions).match("versions") }, + { assert process.out.png != null } // PNGs with same data but different meta-data. Not sure how to get around this, yet! + ) + } + + } + + test("stub") { + + options "-stub" + + when { + process { + """ + input[0] = file(params.test_data['bacteroides_fragilis']['genome']['genome_fna_gz'], checkIfExists: true) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + +} \ No newline at end of file diff --git a/modules/pfr/busco/generateplot/tests/main.nf.test.snap b/modules/pfr/busco/generateplot/tests/main.nf.test.snap new file mode 100644 index 0000000..d9773ec --- /dev/null +++ b/modules/pfr/busco/generateplot/tests/main.nf.test.snap @@ -0,0 +1,37 @@ +{ + "versions": { + "content": [ + [ + "versions.yml:md5,726fa3440ea3a0b2e9d032d7e4d25e74" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-05-03T15:40:01.523993" + }, + "stub": { + "content": [ + { + "0": [ + "busco_figure.png:md5,d41d8cd98f00b204e9800998ecf8427e" + ], + "1": [ + "versions.yml:md5,726fa3440ea3a0b2e9d032d7e4d25e74" + ], + "png": [ + "busco_figure.png:md5,d41d8cd98f00b204e9800998ecf8427e" + ], + "versions": [ + "versions.yml:md5,726fa3440ea3a0b2e9d032d7e4d25e74" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-05-03T15:40:11.864276" + } +} \ No newline at end of file diff --git a/modules/pfr/busco/generateplot/tests/tags.yml b/modules/pfr/busco/generateplot/tests/tags.yml new file mode 100644 index 0000000..b6548a6 --- /dev/null +++ b/modules/pfr/busco/generateplot/tests/tags.yml @@ -0,0 +1,2 @@ +busco/generateplot: + - "modules/nf-core/busco/generateplot/**" diff --git a/modules/pfr/gffread/environment.yml b/modules/pfr/gffread/environment.yml new file mode 100644 index 0000000..c6df58a --- /dev/null +++ b/modules/pfr/gffread/environment.yml @@ -0,0 +1,7 @@ +name: gffread +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bioconda::gffread=0.12.7 diff --git a/modules/pfr/gffread/main.nf b/modules/pfr/gffread/main.nf new file mode 100644 index 0000000..da55cba --- /dev/null +++ b/modules/pfr/gffread/main.nf @@ -0,0 +1,60 @@ +process GFFREAD { + tag "$meta.id" + label 'process_low' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/gffread:0.12.7--hdcf5f25_4' : + 'biocontainers/gffread:0.12.7--hdcf5f25_4' }" + + input: + tuple val(meta), path(gff) + path fasta + + output: + tuple val(meta), path("*.gtf") , emit: gtf , optional: true + tuple val(meta), path("*.gff3") , emit: gffread_gff , optional: true + tuple val(meta), path("*.fasta"), emit: gffread_fasta , optional: true + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def extension = args.contains("-T") ? 'gtf' : ( ( ['-w', '-x', '-y' ].any { args.contains(it) } ) ? 'fasta' : 'gff3' ) + def fasta_arg = fasta ? "-g $fasta" : '' + def output_name = "${prefix}.${extension}" + def output = extension == "fasta" ? "$output_name" : "-o $output_name" + def args_sorted = args.replaceAll(/(.*)(-[wxy])(.*)/) { all, pre, param, post -> "$pre $post $param" }.trim() + // args_sorted = Move '-w', '-x', and '-y' to the end of the args string as gffread expects the file name after these parameters + if ( "$output_name" in [ "$gff", "$fasta" ] ) error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!" + """ + gffread \\ + $gff \\ + $fasta_arg \\ + $args_sorted \\ + $output + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + gffread: \$(gffread --version 2>&1) + END_VERSIONS + """ + + stub: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def extension = args.contains("-T") ? 'gtf' : ( ( ['-w', '-x', '-y' ].any { args.contains(it) } ) ? 'fasta' : 'gff3' ) + def output_name = "${prefix}.${extension}" + if ( "$output_name" in [ "$gff", "$fasta" ] ) error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!" + """ + touch $output_name + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + gffread: \$(gffread --version 2>&1) + END_VERSIONS + """ +} diff --git a/modules/pfr/gffread/meta.yml b/modules/pfr/gffread/meta.yml new file mode 100644 index 0000000..c060282 --- /dev/null +++ b/modules/pfr/gffread/meta.yml @@ -0,0 +1,55 @@ +name: gffread +description: Validate, filter, convert and perform various other operations on GFF files +keywords: + - gff + - conversion + - validation +tools: + - gffread: + description: GFF/GTF utility providing format conversions, region filtering, FASTA sequence extraction and more. + homepage: http://ccb.jhu.edu/software/stringtie/gff.shtml#gffread + documentation: http://ccb.jhu.edu/software/stringtie/gff.shtml#gffread + tool_dev_url: https://github.com/gpertea/gffread + doi: 10.12688/f1000research.23297.1 + licence: ["MIT"] +input: + - meta: + type: map + description: | + Groovy Map containing meta data + e.g. [ id:'test' ] + - gff: + type: file + description: A reference file in either the GFF3, GFF2 or GTF format. + pattern: "*.{gff, gtf}" + - fasta: + type: file + description: A multi-fasta file with the genomic sequences + pattern: "*.{fasta,fa,faa,fas,fsa}" +output: + - meta: + type: map + description: | + Groovy Map containing meta data + e.g. [ id:'test' ] + - gtf: + type: file + description: GTF file resulting from the conversion of the GFF input file if '-T' argument is present + pattern: "*.{gtf}" + - gffread_gff: + type: file + description: GFF3 file resulting from the conversion of the GFF input file if '-T' argument is absent + pattern: "*.gff3" + - gffread_fasta: + type: file + description: Fasta file produced when either of '-w', '-x', '-y' parameters is present + pattern: "*.fasta" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@edmundmiller" +maintainers: + - "@edmundmiller" + - "@gallvp" diff --git a/modules/pfr/gffread/tests/main.nf.test b/modules/pfr/gffread/tests/main.nf.test new file mode 100644 index 0000000..4cd13dc --- /dev/null +++ b/modules/pfr/gffread/tests/main.nf.test @@ -0,0 +1,223 @@ +nextflow_process { + + name "Test Process GFFREAD" + script "../main.nf" + process "GFFREAD" + + tag "gffread" + tag "modules_nfcore" + tag "modules" + + test("sarscov2-gff3-gtf") { + + config "./nextflow.config" + + when { + params { + outdir = "$outputDir" + } + process { + """ + input[0] = [ + [id: 'test'], + file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.gff3", checkIfExists: true) + ] + input[1] = [] + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() }, + { assert process.out.gffread_gff == [] }, + { assert process.out.gffread_fasta == [] } + ) + } + + } + + test("sarscov2-gff3-gtf-stub") { + + options '-stub' + config "./nextflow.config" + + when { + params { + outdir = "$outputDir" + } + process { + """ + input[0] = [ + [id: 'test'], + file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.gff3", checkIfExists: true) + ] + input[1] = [] + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() }, + { assert process.out.gffread_gff == [] }, + { assert process.out.gffread_fasta == [] } + ) + } + + } + + test("sarscov2-gff3-gff3") { + + config "./nextflow-gff3.config" + + when { + params { + outdir = "$outputDir" + } + process { + """ + input[0] = [ + [id: 'test'], + file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.gff3", checkIfExists: true) + ] + input[1] = [] + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() }, + { assert process.out.gtf == [] }, + { assert process.out.gffread_fasta == [] } + ) + } + + } + + test("sarscov2-gff3-gff3-stub") { + + options '-stub' + config "./nextflow-gff3.config" + + when { + params { + outdir = "$outputDir" + } + process { + """ + input[0] = [ + [id: 'test'], + file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.gff3", checkIfExists: true) + ] + input[1] = [] + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() }, + { assert process.out.gtf == [] }, + { assert process.out.gffread_fasta == [] } + ) + } + + } + + test("sarscov2-gff3-fasta") { + + config "./nextflow-fasta.config" + + when { + params { + outdir = "$outputDir" + } + process { + """ + input[0] = [ + [id: 'test'], + file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.gff3", checkIfExists: true) + ] + input[1] = file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.fasta", checkIfExists: true) + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() }, + { assert process.out.gtf == [] }, + { assert process.out.gffread_gff == [] } + ) + } + + } + + test("sarscov2-gff3-fasta-stub") { + + options '-stub' + config "./nextflow-fasta.config" + + when { + params { + outdir = "$outputDir" + } + process { + """ + input[0] = [ + [id: 'test'], + file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.gff3", checkIfExists: true) + ] + input[1] = file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.fasta", checkIfExists: true) + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() }, + { assert process.out.gtf == [] }, + { assert process.out.gffread_gff == [] } + ) + } + + } + + test("sarscov2-gff3-fasta-fail-catch") { + + options '-stub' + config "./nextflow-fasta.config" + + when { + params { + outdir = "$outputDir" + } + process { + """ + input[0] = [ + [id: 'genome'], + file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.gff3", checkIfExists: true) + ] + input[1] = file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.fasta", checkIfExists: true) + """ + } + } + + then { + assertAll ( + { assert ! process.success }, + { assert process.stdout.toString().contains("Input and output names are the same") } + ) + } + + } + +} diff --git a/modules/pfr/gffread/tests/main.nf.test.snap b/modules/pfr/gffread/tests/main.nf.test.snap new file mode 100644 index 0000000..1526232 --- /dev/null +++ b/modules/pfr/gffread/tests/main.nf.test.snap @@ -0,0 +1,272 @@ +{ + "sarscov2-gff3-gtf": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.gtf:md5,1ea0ae98d3388e0576407dc4a24ef428" + ] + ], + "1": [ + + ], + "2": [ + + ], + "3": [ + "versions.yml:md5,05f671c6c6e530acedad0af0a5948dbd" + ], + "gffread_fasta": [ + + ], + "gffread_gff": [ + + ], + "gtf": [ + [ + { + "id": "test" + }, + "test.gtf:md5,1ea0ae98d3388e0576407dc4a24ef428" + ] + ], + "versions": [ + "versions.yml:md5,05f671c6c6e530acedad0af0a5948dbd" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-04-09T10:48:56.496187" + }, + "sarscov2-gff3-gff3": { + "content": [ + { + "0": [ + + ], + "1": [ + [ + { + "id": "test" + }, + "test.gff3:md5,c4e5da6267c6bee5899a2c204ae1ad91" + ] + ], + "2": [ + + ], + "3": [ + "versions.yml:md5,05f671c6c6e530acedad0af0a5948dbd" + ], + "gffread_fasta": [ + + ], + "gffread_gff": [ + [ + { + "id": "test" + }, + "test.gff3:md5,c4e5da6267c6bee5899a2c204ae1ad91" + ] + ], + "gtf": [ + + ], + "versions": [ + "versions.yml:md5,05f671c6c6e530acedad0af0a5948dbd" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-04-09T10:49:00.892782" + }, + "sarscov2-gff3-gtf-stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.gtf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + + ], + "2": [ + + ], + "3": [ + "versions.yml:md5,05f671c6c6e530acedad0af0a5948dbd" + ], + "gffread_fasta": [ + + ], + "gffread_gff": [ + + ], + "gtf": [ + [ + { + "id": "test" + }, + "test.gtf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,05f671c6c6e530acedad0af0a5948dbd" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-04-09T11:11:26.975666" + }, + "sarscov2-gff3-fasta-stub": { + "content": [ + { + "0": [ + + ], + "1": [ + + ], + "2": [ + [ + { + "id": "test" + }, + "test.fasta:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + "versions.yml:md5,05f671c6c6e530acedad0af0a5948dbd" + ], + "gffread_fasta": [ + [ + { + "id": "test" + }, + "test.fasta:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "gffread_gff": [ + + ], + "gtf": [ + + ], + "versions": [ + "versions.yml:md5,05f671c6c6e530acedad0af0a5948dbd" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-04-09T11:11:44.34792" + }, + "sarscov2-gff3-gff3-stub": { + "content": [ + { + "0": [ + + ], + "1": [ + [ + { + "id": "test" + }, + "test.gff3:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + + ], + "3": [ + "versions.yml:md5,05f671c6c6e530acedad0af0a5948dbd" + ], + "gffread_fasta": [ + + ], + "gffread_gff": [ + [ + { + "id": "test" + }, + "test.gff3:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "gtf": [ + + ], + "versions": [ + "versions.yml:md5,05f671c6c6e530acedad0af0a5948dbd" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-04-09T11:11:35.221671" + }, + "sarscov2-gff3-fasta": { + "content": [ + { + "0": [ + + ], + "1": [ + + ], + "2": [ + [ + { + "id": "test" + }, + "test.fasta:md5,5f8108fb51739a0588ccf0a251de919a" + ] + ], + "3": [ + "versions.yml:md5,05f671c6c6e530acedad0af0a5948dbd" + ], + "gffread_fasta": [ + [ + { + "id": "test" + }, + "test.fasta:md5,5f8108fb51739a0588ccf0a251de919a" + ] + ], + "gffread_gff": [ + + ], + "gtf": [ + + ], + "versions": [ + "versions.yml:md5,05f671c6c6e530acedad0af0a5948dbd" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-04-09T10:54:02.88143" + } +} \ No newline at end of file diff --git a/modules/pfr/gffread/tests/nextflow-fasta.config b/modules/pfr/gffread/tests/nextflow-fasta.config new file mode 100644 index 0000000..ac6cb14 --- /dev/null +++ b/modules/pfr/gffread/tests/nextflow-fasta.config @@ -0,0 +1,5 @@ +process { + withName: GFFREAD { + ext.args = '-w -S' + } +} diff --git a/modules/pfr/gffread/tests/nextflow-gff3.config b/modules/pfr/gffread/tests/nextflow-gff3.config new file mode 100644 index 0000000..afe0830 --- /dev/null +++ b/modules/pfr/gffread/tests/nextflow-gff3.config @@ -0,0 +1,5 @@ +process { + withName: GFFREAD { + ext.args = '' + } +} diff --git a/modules/pfr/gffread/tests/nextflow.config b/modules/pfr/gffread/tests/nextflow.config new file mode 100644 index 0000000..74b2509 --- /dev/null +++ b/modules/pfr/gffread/tests/nextflow.config @@ -0,0 +1,5 @@ +process { + withName: GFFREAD { + ext.args = '-T' + } +} diff --git a/modules/pfr/gffread/tests/tags.yml b/modules/pfr/gffread/tests/tags.yml new file mode 100644 index 0000000..0557606 --- /dev/null +++ b/modules/pfr/gffread/tests/tags.yml @@ -0,0 +1,2 @@ +gffread: + - modules/nf-core/gffread/** diff --git a/nextflow.config b/nextflow.config index ed291fb..b2b24f0 100644 --- a/nextflow.config +++ b/nextflow.config @@ -42,6 +42,10 @@ params { eggnogmapper_pident = 35 eggnogmapper_purge_nohits = false + // Evaluation options + busco_skip = false + busco_lineage_datasets = 'eukaryota_odb10' + // Max job request options max_cpus = 12 max_memory = '200.GB' diff --git a/nextflow_schema.json b/nextflow_schema.json index 7968ba8..4193b8e 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -216,6 +216,26 @@ } } }, + "evaluation_options": { + "title": "Evaluation options", + "type": "object", + "description": "", + "default": "", + "fa_icon": "fas fa-balance-scale-right", + "properties": { + "busco_skip": { + "type": "boolean", + "fa_icon": "fas fa-fast-forward", + "description": "Skip evaluation by BUSCO" + }, + "busco_lineage_datasets": { + "type": "string", + "fa_icon": "fas fa-tree", + "description": "BUSCO lineages. It should be provided as a space-separated list of lineages: 'fungi_odb10 microsporidia_odb10'", + "default": "eukaryota_odb10" + } + } + }, "max_job_request_options": { "title": "Max job request options", "type": "object", @@ -287,6 +307,9 @@ { "$ref": "#/definitions/annotation_options" }, + { + "$ref": "#/definitions/evaluation_options" + }, { "$ref": "#/definitions/max_job_request_options" }, diff --git a/subworkflows/pfr/fasta_gxf_busco_plot/main.nf b/subworkflows/pfr/fasta_gxf_busco_plot/main.nf new file mode 100644 index 0000000..2af0a89 --- /dev/null +++ b/subworkflows/pfr/fasta_gxf_busco_plot/main.nf @@ -0,0 +1,169 @@ +include { BUSCO_BUSCO as BUSCO_ASSEMBLY } from '../../../modules/pfr/busco/busco/main' +include { BUSCO_GENERATEPLOT as PLOT_ASSEMBLY } from '../../../modules/pfr/busco/generateplot/main' +include { GFFREAD as EXTRACT_PROTEINS } from '../../../modules/pfr/gffread/main' +include { BUSCO_BUSCO as BUSCO_ANNOTATION } from '../../../modules/pfr/busco/busco/main' +include { BUSCO_GENERATEPLOT as PLOT_ANNOTATION } from '../../../modules/pfr/busco/generateplot/main' + +workflow FASTA_GXF_BUSCO_PLOT { + + take: + ch_fasta // channel: [ val(meta), fasta ] + ch_gxf // channel: [ val(meta2), gxf ]; gxf ~ gff | gff3 | gtf + // + // Meta and meta2 should have same id + + val_mode // val(mode); BUSCO mode to apply to ch_fasta + // - genome, for genome assemblies (DNA) + // - transcriptome, for transcriptome assemblies (DNA) + // - proteins, for annotated gene sets (protein) + // + // If mode is genome, annotations from ch_gxf are evaluated with + // mode proteins, otherwise, evaluation of the annotations is skipped + // + val_lineages // [ val(lineage) ] + val_busco_lineages_path // val(path); Optional; Set to [] if not needed + val_busco_config // val(path); Optional; Set to [] if not needed + + main: + ch_versions = Channel.empty() + ch_db_path = val_busco_lineages_path + ? Channel.of(file(val_busco_lineages_path, checkIfExists: true)) + : Channel.of(null) + ch_config_path = val_busco_config + ? Channel.of(file(val_busco_config, checkIfExists: true)) + : Channel.of(null) + + // MODULE: BUSCO_BUSCO as BUSCO_ASSEMBLY + ch_busco_assembly_inputs = ch_fasta + | combine( + Channel.of(val_mode) + ) + | combine( + Channel.fromList(val_lineages) + ) + | map { meta, fasta, mode, lineage -> + [ + meta + [ mode:mode, lineage:lineage ], + fasta, mode, lineage + ] + } + | combine( + ch_db_path + ) + | combine( + ch_config_path + ) + + BUSCO_ASSEMBLY( + ch_busco_assembly_inputs.map { meta, fasta, mode, lineage, db, config -> [ meta, fasta ] }, + ch_busco_assembly_inputs.map { meta, fasta, mode, lineage, db, config -> mode }, + ch_busco_assembly_inputs.map { meta, fasta, mode, lineage, db, config -> lineage }, + ch_busco_assembly_inputs.map { meta, fasta, mode, lineage, db, config -> db ?: [] }, + ch_busco_assembly_inputs.map { meta, fasta, mode, lineage, db, config -> config ?: [] } + ) + + ch_assembly_batch_summary = BUSCO_ASSEMBLY.out.batch_summary + ch_assembly_short_summaries_txt = BUSCO_ASSEMBLY.out.short_summaries_txt + ch_assembly_short_summaries_json = BUSCO_ASSEMBLY.out.short_summaries_json + ch_versions = ch_versions.mix(BUSCO_ASSEMBLY.out.versions.first()) + + // MODULE: BUSCO_GENERATEPLOT as PLOT_ASSEMBLY + ch_assembly_plot_inputs = ch_assembly_short_summaries_txt + | map { meta, txt -> + def lineage_name = meta.lineage.split('_odb')[0] + [ + "short_summary.specific.${meta.lineage}.${meta.id}_${lineage_name}.txt", + txt.text + ] + } + | collectFile + | collect + + PLOT_ASSEMBLY( ch_assembly_plot_inputs ) + + ch_assembly_png = PLOT_ASSEMBLY.out.png + ch_versions = ch_versions.mix(PLOT_ASSEMBLY.out.versions) + + // MODULE: GFFREAD as EXTRACT_PROTEINS + ch_gffread_inputs = ! ( val_mode == 'geno' || val_mode == 'genome' ) + ? Channel.empty() + : ch_fasta + | map { meta, fasta -> [ meta.id, meta, fasta ] } + | join( + ch_gxf.map { meta2, gxf -> [ meta2.id, gxf ] } + // Join with matching annotation + // to allow one annotations per fasta + ) + | map { id, meta, fasta, gxf -> [ meta, gxf, fasta ] } + EXTRACT_PROTEINS( + ch_gffread_inputs.map { meta, gxf, fasta -> [ meta, gxf ] }, + ch_gffread_inputs.map { meta, gxf, fasta -> fasta } + ) + + ch_proteins = EXTRACT_PROTEINS.out.gffread_fasta + ch_versions = ch_versions.mix(EXTRACT_PROTEINS.out.versions.first()) + + // MODULE: BUSCO_BUSCO as BUSCO_ANNOTATION + ch_busco_annotation_inputs = ch_proteins + | combine( + Channel.of('proteins') + ) + | combine( + Channel.fromList(val_lineages) + ) + | map { meta, fasta, mode, lineage -> + [ + meta + [ mode:mode, lineage:lineage ], + fasta, mode, lineage + ] + } + | combine( + ch_db_path + ) + | combine( + ch_config_path + ) + + BUSCO_ANNOTATION( + ch_busco_annotation_inputs.map { meta, fasta, mode, lineage, db, config -> [ meta, fasta ] }, + ch_busco_annotation_inputs.map { meta, fasta, mode, lineage, db, config -> mode }, + ch_busco_annotation_inputs.map { meta, fasta, mode, lineage, db, config -> lineage }, + ch_busco_annotation_inputs.map { meta, fasta, mode, lineage, db, config -> db ?: [] }, + ch_busco_annotation_inputs.map { meta, fasta, mode, lineage, db, config -> config ?: [] } + ) + + ch_annotation_batch_summary = BUSCO_ANNOTATION.out.batch_summary + ch_annotation_short_summaries_txt = BUSCO_ANNOTATION.out.short_summaries_txt + ch_annotation_short_summaries_json = BUSCO_ANNOTATION.out.short_summaries_json + ch_versions = ch_versions.mix(BUSCO_ANNOTATION.out.versions.first()) + + // MODULE: BUSCO_GENERATEPLOT as PLOT_ANNOTATION + ch_annotation_plot_inputs = ch_annotation_short_summaries_txt + | map { meta, txt -> + def lineage_name = meta.lineage.split('_odb')[0] + [ + "short_summary.specific.${meta.lineage}.${meta.id}_${lineage_name}.txt", + txt.text + ] + } + | collectFile + | collect + + PLOT_ANNOTATION( ch_annotation_plot_inputs ) + + ch_annotation_png = PLOT_ANNOTATION.out.png + ch_versions = ch_versions.mix(PLOT_ANNOTATION.out.versions) + + + emit: + assembly_batch_summary = ch_assembly_batch_summary // channel: [ meta3, txt ]; meta3 ~ meta + [ val(mode), val(lineage) ] + assembly_short_summaries_txt = ch_assembly_short_summaries_txt // channel: [ meta3, txt ] + assembly_short_summaries_json = ch_assembly_short_summaries_json // channel: [ meta3, json ] + assembly_png = ch_assembly_png // channel: [ png ] + annotation_batch_summary = ch_annotation_batch_summary // channel: [ meta3, txt ] + annotation_short_summaries_txt = ch_annotation_short_summaries_txt // channel: [ meta3, txt ] + annotation_short_summaries_json = ch_annotation_short_summaries_json // channel: [ meta3, json ] + annotation_png = ch_annotation_png // channel: [ png ] + versions = ch_versions // channel: [ versions.yml ] +} + diff --git a/subworkflows/pfr/fasta_gxf_busco_plot/meta.yml b/subworkflows/pfr/fasta_gxf_busco_plot/meta.yml new file mode 100644 index 0000000..9226357 --- /dev/null +++ b/subworkflows/pfr/fasta_gxf_busco_plot/meta.yml @@ -0,0 +1,106 @@ +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/subworkflows/yaml-schema.json +name: "fasta_gxf_busco_plot" +description: | + Runs BUSCO for input assemblies and their annotations in GFF/GFF3/GTF format, and creates summary plots using `BUSCO/generate_plot.py` script +keywords: + - genome + - annotation + - busco + - plot +components: + - busco/busco + - busco/generateplot + - gffread +input: + - ch_fasta: + type: file + description: | + Channel containing FASTA files + Structure:[ val(meta), fasta ] + pattern: "*.{fa,faa,fsa,fas,fasta}(.gz)?" + - ch_gxf: + type: file + description: | + Channel containing GFF/GFF3/GTF files + Structure:[ val(meta2), gxf ] + pattern: "*.{gff,gff3,gtf}" + - val_mode: + type: string + description: | + String containing BUSCO mode to apply to ch_fasta files + Structure:val(mode) + - val_lineages: + type: array + description: | + Array of strings representing BUSCO lineage datasets + Structure:[ val(lineage) ] + - val_busco_lineages_path: + type: path + description: | + Path where BUSCO lineages are located or downloaded if not already there. If this input is `[]`, + BUSCO will download the datasets in the task work directory + Structure:val(busco_lineages_path) + - val_busco_config: + type: path + description: | + Path to BUSCO config. It is optional and can be set to `[]` + Structure:val(busco_config) +output: + - assembly_batch_summary: + type: file + description: | + Channel containing BUSCO batch summaries corresponding to fasta files + Structure: [ val(meta), txt ] + pattern: "*.txt" + - assembly_short_summaries_txt: + type: file + description: | + Channel containing BUSCO short summaries corresponding to fasta files + Structure: [ val(meta), txt ] + pattern: "*.txt" + - assembly_short_summaries_json: + type: file + description: | + Channel containing BUSCO short summaries corresponding to fasta files + Structure: [ val(meta), json ] + pattern: "*.json" + - assembly_png: + type: file + description: | + Channel containing summary plot for assemblies + Structure: png + pattern: "*.png" + - annotation_batch_summary: + type: file + description: | + Channel containing BUSCO batch summaries corresponding to annotation files + Structure: [ val(meta), txt ] + pattern: "*.txt" + - annotation_short_summaries_txt: + type: file + description: | + Channel containing BUSCO short summaries corresponding to annotation files + Structure: [ val(meta), txt ] + pattern: "*.txt" + - annotation_short_summaries_json: + type: file + description: | + Channel containing BUSCO short summaries corresponding to annotation files + Structure: [ val(meta), json ] + pattern: "*.json" + - annotation_png: + type: file + description: | + Channel containing summary plot for annotations + Structure: png + pattern: "*.png" + - versions: + type: file + description: | + File containing software versions + Structure: [ path(versions.yml) ] + pattern: "versions.yml" +authors: + - "@GallVp" +maintainers: + - "@GallVp" diff --git a/subworkflows/pfr/fasta_gxf_busco_plot/tests/main.nf.test b/subworkflows/pfr/fasta_gxf_busco_plot/tests/main.nf.test new file mode 100644 index 0000000..8c8ac7b --- /dev/null +++ b/subworkflows/pfr/fasta_gxf_busco_plot/tests/main.nf.test @@ -0,0 +1,104 @@ +nextflow_workflow { + + name "Test Subworkflow FASTA_GXF_BUSCO_PLOT" + script "../main.nf" + workflow "FASTA_GXF_BUSCO_PLOT" + config './nextflow.config' + + tag "subworkflows" + tag "subworkflows_nfcore" + tag "subworkflows/fasta_gxf_busco_plot" + tag "busco" + tag "busco/busco" + tag "busco/generateplot" + tag "gffread" + + test("candidatus_portiera_aleyrodidarum - bacteroides_fragilis - genome") { + + when { + workflow { + """ + input[0] = Channel.of( + [ + [ id:'test' ], // meta map + file( params.test_data['candidatus_portiera_aleyrodidarum']['genome']['genome_fasta'], checkIfExists: true) + ], + [ + [ id:'test2' ], // meta map + file( params.test_data['bacteroides_fragilis']['genome']['genome_fna_gz'], checkIfExists: true) + ] + ) + input[1] = Channel.of( + [ + [ id:'test' ], // meta map + file( params.test_data['candidatus_portiera_aleyrodidarum']['genome']['test1_gff'], checkIfExists: true) + ] + ) + input[2] = 'genome' + input[3] = [ 'bacteria_odb10', 'archaea_odb10' ] + input[4] = [] + input[5] = [] + """ + } + } + + then { + assertAll( + { assert workflow.success}, + { assert snapshot( + workflow.out.assembly_batch_summary, + workflow.out.annotation_batch_summary, + workflow.out.versions, + ).match() + }, + + { assert workflow.out.assembly_png != null }, + { assert workflow.out.annotation_png != null }, + + { assert workflow.out.assembly_short_summaries_json != null }, + { assert workflow.out.assembly_short_summaries_txt != null }, + { assert workflow.out.annotation_short_summaries_json != null }, + { assert workflow.out.annotation_short_summaries_txt != null } + ) + } + } + + test("candidatus_portiera_aleyrodidarum - bacteroides_fragilis - genome - stub") { + + options '-stub' + + when { + workflow { + """ + input[0] = Channel.of( + [ + [ id:'test' ], // meta map + file( params.test_data['candidatus_portiera_aleyrodidarum']['genome']['genome_fasta'], checkIfExists: true) + ], + [ + [ id:'test2' ], // meta map + file( params.test_data['bacteroides_fragilis']['genome']['genome_fna_gz'], checkIfExists: true) + ] + ) + input[1] = Channel.of( + [ + [ id:'test' ], // meta map + file( params.test_data['candidatus_portiera_aleyrodidarum']['genome']['test1_gff'], checkIfExists: true) + ] + ) + input[2] = 'genome' + input[3] = [ 'bacteria_odb10', 'archaea_odb10' ] + input[4] = [] + input[5] = [] + """ + } + } + + then { + assertAll( + { assert workflow.success}, + { assert snapshot(workflow.out).match()} + ) + } + } +} diff --git a/subworkflows/pfr/fasta_gxf_busco_plot/tests/main.nf.test.snap b/subworkflows/pfr/fasta_gxf_busco_plot/tests/main.nf.test.snap new file mode 100644 index 0000000..118ad7e --- /dev/null +++ b/subworkflows/pfr/fasta_gxf_busco_plot/tests/main.nf.test.snap @@ -0,0 +1,231 @@ +{ + "candidatus_portiera_aleyrodidarum - bacteroides_fragilis - genome - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "mode": "genome", + "lineage": "archaea_odb10" + }, + "test-archaea_odb10-busco.batch_summary.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ], + [ + { + "id": "test", + "mode": "genome", + "lineage": "bacteria_odb10" + }, + "test-bacteria_odb10-busco.batch_summary.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ], + [ + { + "id": "test2", + "mode": "genome", + "lineage": "archaea_odb10" + }, + "test2-archaea_odb10-busco.batch_summary.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ], + [ + { + "id": "test2", + "mode": "genome", + "lineage": "bacteria_odb10" + }, + "test2-bacteria_odb10-busco.batch_summary.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + + ], + "2": [ + + ], + "3": [ + + ], + "4": [ + [ + { + "id": "test", + "mode": "proteins", + "lineage": "archaea_odb10" + }, + "test-archaea_odb10-busco.batch_summary.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ], + [ + { + "id": "test", + "mode": "proteins", + "lineage": "bacteria_odb10" + }, + "test-bacteria_odb10-busco.batch_summary.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "5": [ + + ], + "6": [ + + ], + "7": [ + + ], + "8": [ + "versions.yml:md5,36b11c442943567e471af0abd474a10b", + "versions.yml:md5,9435355f913e283f60b4fb7ef77dd52a", + "versions.yml:md5,e9d65e2f2f13175e99c5b7f4ae1013b9" + ], + "annotation_batch_summary": [ + [ + { + "id": "test", + "mode": "proteins", + "lineage": "archaea_odb10" + }, + "test-archaea_odb10-busco.batch_summary.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ], + [ + { + "id": "test", + "mode": "proteins", + "lineage": "bacteria_odb10" + }, + "test-bacteria_odb10-busco.batch_summary.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "annotation_png": [ + + ], + "annotation_short_summaries_json": [ + + ], + "annotation_short_summaries_txt": [ + + ], + "assembly_batch_summary": [ + [ + { + "id": "test", + "mode": "genome", + "lineage": "archaea_odb10" + }, + "test-archaea_odb10-busco.batch_summary.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ], + [ + { + "id": "test", + "mode": "genome", + "lineage": "bacteria_odb10" + }, + "test-bacteria_odb10-busco.batch_summary.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ], + [ + { + "id": "test2", + "mode": "genome", + "lineage": "archaea_odb10" + }, + "test2-archaea_odb10-busco.batch_summary.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ], + [ + { + "id": "test2", + "mode": "genome", + "lineage": "bacteria_odb10" + }, + "test2-bacteria_odb10-busco.batch_summary.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "assembly_png": [ + + ], + "assembly_short_summaries_json": [ + + ], + "assembly_short_summaries_txt": [ + + ], + "versions": [ + "versions.yml:md5,36b11c442943567e471af0abd474a10b", + "versions.yml:md5,9435355f913e283f60b4fb7ef77dd52a", + "versions.yml:md5,e9d65e2f2f13175e99c5b7f4ae1013b9" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-05-13T16:39:45.021811" + }, + "candidatus_portiera_aleyrodidarum - bacteroides_fragilis - genome": { + "content": [ + [ + [ + { + "id": "test", + "mode": "genome", + "lineage": "archaea_odb10" + }, + "test-archaea_odb10-busco.batch_summary.txt:md5,1397d74518a776ad75b16a843bc5b6c1" + ], + [ + { + "id": "test", + "mode": "genome", + "lineage": "bacteria_odb10" + }, + "test-bacteria_odb10-busco.batch_summary.txt:md5,a1186bc25448ac1949bf7790810f7161" + ], + [ + { + "id": "test2", + "mode": "genome", + "lineage": "archaea_odb10" + }, + "test2-archaea_odb10-busco.batch_summary.txt:md5,946582b353a8dba7d6452a71856eca06" + ], + [ + { + "id": "test2", + "mode": "genome", + "lineage": "bacteria_odb10" + }, + "test2-bacteria_odb10-busco.batch_summary.txt:md5,21b3fb771cf36be917cc451540d999be" + ] + ], + [ + [ + { + "id": "test", + "mode": "proteins", + "lineage": "archaea_odb10" + }, + "test-archaea_odb10-busco.batch_summary.txt:md5,95172bd5b1a30e632fc79084ea0ca585" + ], + [ + { + "id": "test", + "mode": "proteins", + "lineage": "bacteria_odb10" + }, + "test-bacteria_odb10-busco.batch_summary.txt:md5,995127c0caecb36205dbf21aa2f9f8a8" + ] + ], + [ + "versions.yml:md5,05d8022e3afb0d5642ed17147b991730", + "versions.yml:md5,36b11c442943567e471af0abd474a10b", + "versions.yml:md5,53987b35fc275297efdaf525937fdca3", + "versions.yml:md5,9435355f913e283f60b4fb7ef77dd52a", + "versions.yml:md5,e9d65e2f2f13175e99c5b7f4ae1013b9" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-05-13T16:39:04.376704" + } +} \ No newline at end of file diff --git a/subworkflows/pfr/fasta_gxf_busco_plot/tests/nextflow.config b/subworkflows/pfr/fasta_gxf_busco_plot/tests/nextflow.config new file mode 100644 index 0000000..ddbc644 --- /dev/null +++ b/subworkflows/pfr/fasta_gxf_busco_plot/tests/nextflow.config @@ -0,0 +1,5 @@ +process { + withName: EXTRACT_PROTEINS { + ext.args = '-y' + } +} diff --git a/subworkflows/pfr/fasta_gxf_busco_plot/tests/tags.yml b/subworkflows/pfr/fasta_gxf_busco_plot/tests/tags.yml new file mode 100644 index 0000000..b8786a5 --- /dev/null +++ b/subworkflows/pfr/fasta_gxf_busco_plot/tests/tags.yml @@ -0,0 +1,2 @@ +subworkflows/fasta_gxf_busco_plot: + - subworkflows/pfr/fasta_gxf_busco_plot/** diff --git a/workflows/pangene.nf b/workflows/pangene.nf index 0660bb6..2237bc2 100644 --- a/workflows/pangene.nf +++ b/workflows/pangene.nf @@ -12,6 +12,7 @@ include { GFF_EGGNOGMAPPER } from '../subworkflows/local/gf include { PURGE_NOHIT_MODELS } from '../subworkflows/local/purge_nohit_models' include { GFF_STORE } from '../subworkflows/local/gff_store' include { FASTA_GFF_ORTHOFINDER } from '../subworkflows/local/fasta_gff_orthofinder' +include { FASTA_GXF_BUSCO_PLOT } from '../subworkflows/pfr/fasta_gxf_busco_plot/main' include { CUSTOM_DUMPSOFTWAREVERSIONS } from '../modules/nf-core/custom/dumpsoftwareversions' log.info paramsSummaryLog(workflow) @@ -278,6 +279,7 @@ workflow PANGENE { ch_valid_target_assembly ) + ch_final_gff = GFF_STORE.out.final_gff ch_final_proteins = GFF_STORE.out.final_proteins ch_versions = ch_versions.mix(GFF_STORE.out.versions) @@ -290,6 +292,18 @@ workflow PANGENE { ch_versions = ch_versions.mix(FASTA_GFF_ORTHOFINDER.out.versions) + // SUBWORKFLOW: FASTA_GXF_BUSCO_PLOT + FASTA_GXF_BUSCO_PLOT( + params.busco_skip ? Channel.empty() : ch_valid_target_assembly, + params.busco_skip ? Channel.empty() : ch_final_gff, + 'genome', + params.busco_lineage_datasets?.tokenize(' '), + [], // val_busco_lineages_path + [] // val_busco_config + ) + + ch_versions = ch_versions.mix(FASTA_GXF_BUSCO_PLOT.out.versions) + // MODULE: CUSTOM_DUMPSOFTWAREVERSIONS CUSTOM_DUMPSOFTWAREVERSIONS ( ch_versions.unique().collectFile(name: 'collated_versions.yml') From 39aeab5d0d1ae3f6c9d7e3d671f744811e330b97 Mon Sep 17 00:00:00 2001 From: Usman Rashid Date: Thu, 20 Jun 2024 12:31:13 +1200 Subject: [PATCH 07/87] Added pattern to busco_lineage_datasets --- nextflow_schema.json | 1 + 1 file changed, 1 insertion(+) diff --git a/nextflow_schema.json b/nextflow_schema.json index 4193b8e..6de5d36 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -230,6 +230,7 @@ }, "busco_lineage_datasets": { "type": "string", + "pattern": "^(\\w+_odb10\\s)*\\w+_odb10$", "fa_icon": "fas fa-tree", "description": "BUSCO lineages. It should be provided as a space-separated list of lineages: 'fungi_odb10 microsporidia_odb10'", "default": "eukaryota_odb10" From 7049e0b92323f004abd7fd4155684a00d2e5629f Mon Sep 17 00:00:00 2001 From: Usman Rashid Date: Thu, 20 Jun 2024 13:29:20 +1200 Subject: [PATCH 08/87] Fixed fasat/gff fead for busco --- subworkflows/local/fasta_gff_orthofinder.nf | 2 ++ workflows/pangene.nf | 14 ++++++++++++-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/subworkflows/local/fasta_gff_orthofinder.nf b/subworkflows/local/fasta_gff_orthofinder.nf index 52fe66d..8d2eebe 100644 --- a/subworkflows/local/fasta_gff_orthofinder.nf +++ b/subworkflows/local/fasta_gff_orthofinder.nf @@ -49,5 +49,7 @@ workflow FASTA_GFF_ORTHOFINDER { ch_versions = ch_versions.mix(ORTHOFINDER.out.versions) emit: + fasta_unzipped = ch_fasta_unzipped // [ meta, fasta ] + gff_unzipped = ch_gff_unzipped // [ meta, gff ] versions = ch_versions // [ versions.yml ] } diff --git a/workflows/pangene.nf b/workflows/pangene.nf index 2237bc2..0ea405f 100644 --- a/workflows/pangene.nf +++ b/workflows/pangene.nf @@ -293,9 +293,19 @@ workflow PANGENE { ch_versions = ch_versions.mix(FASTA_GFF_ORTHOFINDER.out.versions) // SUBWORKFLOW: FASTA_GXF_BUSCO_PLOT + ch_busco_fasta = params.busco_skip + ? Channel.empty() + : ch_valid_target_assembly + | mix ( FASTA_GFF_ORTHOFINDER.out.fasta_unzipped ) + + ch_busco_gff = params.busco_skip + ? Channel.empty() + : ch_final_gff + | mix ( FASTA_GFF_ORTHOFINDER.out.gff_unzipped ) + FASTA_GXF_BUSCO_PLOT( - params.busco_skip ? Channel.empty() : ch_valid_target_assembly, - params.busco_skip ? Channel.empty() : ch_final_gff, + ch_busco_fasta, + ch_busco_gff, 'genome', params.busco_lineage_datasets?.tokenize(' '), [], // val_busco_lineages_path From 43db2ceafec8a60929edce7996f15d3707ca253a Mon Sep 17 00:00:00 2001 From: Usman Rashid Date: Thu, 20 Jun 2024 13:42:38 +1200 Subject: [PATCH 09/87] Included common tax ids for eggnog mapper --- CHANGELOG.md | 3 ++- docs/parameters.md | 43 +++++++++++++++++++++++++++++-------------- nextflow_schema.json | 14 +++++--------- 3 files changed, 36 insertions(+), 24 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 55a121f..c4b7e28 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## 0.4 - [19-Jun-2024] +## 0.4 - [20-Jun-2024] ### `Added` @@ -12,6 +12,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 3. Updated modules: `AGAT_CONVERTSPGFF2GTF`, `CAT_FASTQ`, `CUSTOM_DUMPSOFTWAREVERSIONS`, `EGGNOGMAPPER`, `FASTP`, `GFFREAD`, `SAMTOOLS_CAT`, `CUSTOM_RESTOREGFFIDS`, `CUSTOM_SHORTENFASTAIDS` and `EDTA_EDTA` 4. Updated sub-workflows: `FASTQ_FASTQC_UMITOOLS_FASTP` and `FASTA_EDTA_LAI` 5. Added evaluation by BUSCO [#41](https://github.com/PlantandFoodResearch/pangene/issues/41) +6. Included common tax ids for eggnog mapper [#27](https://github.com/PlantandFoodResearch/pangene/issues/27) ### `Fixed` diff --git a/docs/parameters.md b/docs/parameters.md index 8403d49..bf514dc 100644 --- a/docs/parameters.md +++ b/docs/parameters.md @@ -4,15 +4,16 @@ A NextFlow pipeline for pan-genome annotation ## Input/output options -| Parameter | Description | Type | Default | Required | Hidden | -| ------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------- | --------- | -------- | ------ | -| `input` | Target assemblies listed in a CSV sheet
HelpFASTA and other associated files for target assemblies provided as a CSV sheet
| `string` | | True | | -| `external_protein_fastas` | External protein fastas listed in a text sheet
HelpA text file listing FASTA files to provide protein evidence for annotation
| `string` | | True | | -| `eggnogmapper_db_dir` | Eggnogmapper database directory | `string` | | True | | -| `eggnogmapper_tax_scope` | Eggnogmapper taxonomy scopre | `integer` | | True | | -| `fastq` | FASTQ samples listed in a CSV sheet
HelpFASTQ files for RNASeq samples corresponding to each target assembly provided in a CSV sheet
| `string` | | | | -| `liftoff_annotations` | Reference annotations listed in a CSV sheet
HelpFASTA and GFF3 files for reference annotations for liftoff listed in a CSV sheet
| `string` | | | | -| `outdir` | The output directory where the results will be saved
Help Use absolute paths to storage on Cloud infrastructure
| `string` | ./results | True | | +| Parameter | Description | Type | Default | Required | Hidden | +| ------------------------- | -------------------------------------------------------------------------------------------------------- | --------- | --------- | -------- | ------ | +| `input` | Target assemblies listed in a CSV sheet | `string` | | True | | +| `external_protein_fastas` | External protein fastas listed in a text sheet | `string` | | True | | +| `eggnogmapper_db_dir` | Eggnogmapper database directory | `string` | | True | | +| `eggnogmapper_tax_scope` | Eggnogmapper taxonomy scopre. Eukaryota: 2759, Viridiplantae: 33090, Archaea: 2157, Bacteria: 2, root: 1 | `integer` | | True | | +| `fastq` | FASTQ samples listed in a CSV sheet | `string` | | | | +| `liftoff_annotations` | Reference annotations listed in a CSV sheet | `string` | | | | +| `orthofinder_annotations` | Additional annotations for orthology listed in a CSV sheet | `string` | | | | +| `outdir` | The output directory where the results will be saved | `string` | ./results | True | | ## Repeat annotation options @@ -57,12 +58,26 @@ A NextFlow pipeline for pan-genome annotation | `eggnogmapper_pident` | Only report alignments above or equal to the given percentage of identity (0-100) | `integer` | 35 | | | | `eggnogmapper_purge_nohits` | Purge transcripts which do not have a hit against eggnog | `boolean` | | | | +## Evaluation options + +| Parameter | Description | Type | Default | Required | Hidden | +| ------------------------ | --------------------------------------------------------------------------- | --------- | --------------- | -------- | ------ | +| `busco_skip` | Skip evaluation by BUSCO | `boolean` | | | | +| `busco_lineage_datasets` | BUSCO lineages as a space-separated list: 'fungi_odb10 microsporidia_odb10' | `string` | eukaryota_odb10 | | | + ## Max job request options Set the top limit for requested resources for any single job. -| Parameter | Description | Type | Default | Required | Hidden | -| ------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------- | ------- | -------- | ------ | -| `max_cpus` | Maximum number of CPUs that can be requested for any single job.
HelpUse to set an upper-limit for the CPU requirement for each process. Should be an integer e.g. `--max_cpus 1`
| `integer` | 12 | | True | -| `max_memory` | Maximum amount of memory that can be requested for any single job.
HelpUse to set an upper-limit for the memory requirement for each process. Should be a string in the format integer-unit e.g. `--max_memory '8.GB'`
| `string` | 200.GB | | True | -| `max_time` | Maximum amount of time that can be requested for any single job.
HelpUse to set an upper-limit for the time requirement for each process. Should be a string in the format integer-unit e.g. `--max_time '2.h'`
| `string` | 7.day | | True | +| Parameter | Description | Type | Default | Required | Hidden | +| ------------ | ------------------------------------------------------------------ | --------- | ------- | -------- | ------ | +| `max_cpus` | Maximum number of CPUs that can be requested for any single job. | `integer` | 12 | | True | +| `max_memory` | Maximum amount of memory that can be requested for any single job. | `string` | 200.GB | | True | +| `max_time` | Maximum amount of time that can be requested for any single job. | `string` | 7.day | | True | + +## Infrastructure options + +| Parameter | Description | Type | Default | Required | Hidden | +| ------------------------------ | ----------- | --------- | ------- | -------- | ------ | +| `validationSkipDuplicateCheck` | | `boolean` | True | | True | +| `validationS3PathCheck` | | `boolean` | True | | True | diff --git a/nextflow_schema.json b/nextflow_schema.json index 6de5d36..4d4aef7 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -35,7 +35,7 @@ }, "eggnogmapper_tax_scope": { "type": "integer", - "description": "Eggnogmapper taxonomy scopre", + "description": "Eggnogmapper taxonomy scopre. Eukaryota: 2759, Viridiplantae: 33090, Archaea: 2157, Bacteria: 2, root: 1", "minimum": 0 }, "fastq": { @@ -232,7 +232,7 @@ "type": "string", "pattern": "^(\\w+_odb10\\s)*\\w+_odb10$", "fa_icon": "fas fa-tree", - "description": "BUSCO lineages. It should be provided as a space-separated list of lineages: 'fungi_odb10 microsporidia_odb10'", + "description": "BUSCO lineages as a space-separated list: 'fungi_odb10 microsporidia_odb10'", "default": "eukaryota_odb10" } } @@ -242,15 +242,13 @@ "type": "object", "fa_icon": "fab fa-acquisitions-incorporated", "description": "Set the top limit for requested resources for any single job.", - "help_text": "If you are running on a smaller system, a pipeline step requesting more resources than are available may cause the Nextflow to stop the run with an error. These options allow you to cap the maximum resources requested by any single job so that the pipeline will run on your system.\n\nNote that you can not _increase_ the resources requested by any job using these options. For that you will need your own configuration file. See [the nf-core website](https://nf-co.re/usage/configuration) for details.", "properties": { "max_cpus": { "type": "integer", "description": "Maximum number of CPUs that can be requested for any single job.", "default": 12, "fa_icon": "fas fa-microchip", - "hidden": true, - "help_text": "Use to set an upper-limit for the CPU requirement for each process. Should be an integer e.g. `--max_cpus 1`" + "hidden": true }, "max_memory": { "type": "string", @@ -258,8 +256,7 @@ "default": "200.GB", "fa_icon": "fas fa-memory", "pattern": "^\\d+(\\.\\d+)?\\.?\\s*(K|M|G|T)?B$", - "hidden": true, - "help_text": "Use to set an upper-limit for the memory requirement for each process. Should be a string in the format integer-unit e.g. `--max_memory '8.GB'`" + "hidden": true }, "max_time": { "type": "string", @@ -267,8 +264,7 @@ "default": "7.day", "fa_icon": "far fa-clock", "pattern": "^(\\d+\\.?\\s*(s|m|h|d|day)\\s*)+$", - "hidden": true, - "help_text": "Use to set an upper-limit for the time requirement for each process. Should be a string in the format integer-unit e.g. `--max_time '2.h'`" + "hidden": true } } }, From c3895cc9e6ce72dd33f10a21528cfcf88726abc1 Mon Sep 17 00:00:00 2001 From: Usman Rashid Date: Thu, 20 Jun 2024 13:45:17 +1200 Subject: [PATCH 10/87] Added versions from GFF_STORE sub-workflows --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index c4b7e28..c09a4a2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 1. Fixed BRAKER spellings [#36](https://github.com/PlantandFoodResearch/pangene/issues/36) 2. Fixed liftoff failure when lifting off from a single reference [#40](https://github.com/PlantandFoodResearch/pangene/issues/40) +3. Added versions from GFF_STORE sub-workflows [#33](https://github.com/PlantandFoodResearch/pangene/issues/33) ### `Dependencies` From 9970b353dad9f46535377ffad9a8cf4cf4b9c4cb Mon Sep 17 00:00:00 2001 From: Usman Rashid Date: Thu, 20 Jun 2024 16:55:44 +1200 Subject: [PATCH 11/87] Implemented hierarchical naming scheme: geneI.tJ, geneI.tJ.exonK, geneI.tJ.cdsK --- CHANGELOG.md | 1 + subworkflows/local/gff_merge_cleanup.nf | 72 ++++++++++++++++++++++--- 2 files changed, 65 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c09a4a2..5f7f550 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 4. Updated sub-workflows: `FASTQ_FASTQC_UMITOOLS_FASTP` and `FASTA_EDTA_LAI` 5. Added evaluation by BUSCO [#41](https://github.com/PlantandFoodResearch/pangene/issues/41) 6. Included common tax ids for eggnog mapper [#27](https://github.com/PlantandFoodResearch/pangene/issues/27) +7. Implemented hierarchical naming scheme: geneI.tJ, geneI.tJ.exonK, geneI.tJ.cdsK [#19](https://github.com/PlantandFoodResearch/pangene/issues/19), [#34](https://github.com/PlantandFoodResearch/pangene/issues/34) ### `Fixed` diff --git a/subworkflows/local/gff_merge_cleanup.nf b/subworkflows/local/gff_merge_cleanup.nf index 834af94..02ce6f6 100644 --- a/subworkflows/local/gff_merge_cleanup.nf +++ b/subworkflows/local/gff_merge_cleanup.nf @@ -80,11 +80,21 @@ workflow GFF_MERGE_CLEANUP { ch_agat_gff = AGAT_CONVERTSPGXF2GXF.out.output_gff ch_versions = ch_versions.mix(AGAT_CONVERTSPGXF2GXF.out.versions.first()) - // COLLECTFILE: Format AGAT_CONVERTSPGXF2GXF output - ch_final_gff = ch_agat_gff + // COLLECTFILE: Format AGAT_CONVERTSPGXF2GXF output and only allow: [ 'gene', 'mRNA', 'exon', 'CDS' ] + ch_agat_formatted_gff = ch_agat_gff | map { meta, gff -> - def lines = gff.readLines() + def filtered_lines = gff.readLines() + .findAll { line -> + if ( line.startsWith('#') ) { return true } + + def cols = line.split('\t') + def feat = cols[2].trim() + + ( feat in [ 'gene', 'mRNA', 'exon', 'CDS' ] ) + ? true + : false + } .collect { line -> if ( line.startsWith('#') ) { return line } @@ -103,9 +113,55 @@ workflow GFF_MERGE_CLEANUP { def atts_g = "ID=${newID};liftoffID=${oldID}" return ( cols[0..7] + [ atts_g ] ).join('\t') - }.join('\n') - - [ "${meta.id}.agat.cleanup.gff" ] + [ lines ] + } + + def tx_formatted_lines = [] + def current_gene_id = '' + def current_mrna_id = -1 + def current_exon_id = -1 + def current_cds_id = -1 + + filtered_lines.each { line -> + if ( line.startsWith('#') ) { + tx_formatted_lines << line + return + } + + def cols = line.split('\t') + def feat = cols[2] + def atts = cols[8] + def id = ( atts =~ /ID=([^;]*)/ )[0][1] + + if ( feat == 'gene' ) { + tx_formatted_lines << line + current_gene_id = id + current_mrna_id = 0 + return + } + + if ( feat == 'mRNA' ) { + current_mrna_id += 1 + current_exon_id = 0 + current_cds_id = 0 + tx_formatted_lines << ( ( cols[0..7] + [ "ID=${current_gene_id}.t${current_mrna_id};Parent=${current_gene_id}" ] ).join('\t') ) + return + } + + if ( feat == 'exon' ) { + current_exon_id += 1 + tx_formatted_lines << ( ( cols[0..7] + [ "ID=${current_gene_id}.t${current_mrna_id}.exon${current_exon_id};Parent=${current_gene_id}.t${current_mrna_id}" ] ).join('\t') ) + return + } + + if ( feat == 'CDS' ) { + current_cds_id += 1 + tx_formatted_lines << ( ( cols[0..7] + [ "ID=${current_gene_id}.t${current_mrna_id}.cds${current_cds_id};Parent=${current_gene_id}.t${current_mrna_id}" ] ).join('\t') ) + return + } + + } + + [ "${meta.id}.agat.cleanup.gff" ] + [ tx_formatted_lines.join('\n') ] } | collectFile(newLine: true) | map { file -> @@ -113,6 +169,6 @@ workflow GFF_MERGE_CLEANUP { } emit: - gff = ch_final_gff // [ meta, gff ] - versions = ch_versions // [ versions.yml ] + gff = ch_agat_formatted_gff // [ meta, gff ] + versions = ch_versions // [ versions.yml ] } From df2183f7335c6402664f77bf99964182f89d11f1 Mon Sep 17 00:00:00 2001 From: Usman Rashid Date: Thu, 20 Jun 2024 16:59:50 +1200 Subject: [PATCH 12/87] Updated contributors --- README.md | 35 ++++++++++++++++++++--------------- docs/contributors.sh | 6 +++--- 2 files changed, 23 insertions(+), 18 deletions(-) diff --git a/README.md b/README.md index d255a36..0f7c4ae 100644 --- a/README.md +++ b/README.md @@ -36,25 +36,30 @@ We thank the following people for their extensive assistance in the development The pipeline uses nf-core modules contributed by following authors. - - - - - - - - - - + - - - - - + + + + + + + + + + + + + + + + + + + ## Citations diff --git a/docs/contributors.sh b/docs/contributors.sh index 8dbfc36..e694e49 100755 --- a/docs/contributors.sh +++ b/docs/contributors.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -module_authors=$(find ./modules -name meta.yml | xargs -I {} grep -A20 'authors:' {} | grep '\- ' | tr -d '[-" ]' | tr '[:upper:]' '[:lower:]') -workflow_authors=$(find ./subworkflows -name meta.yml | xargs -I {} grep -A20 'authors:' {} | grep '\- ' | tr -d '[-" ]' | tr '[:upper:]' '[:lower:]') -echo -e "${module_authors}\n${workflow_authors}" | sort -V | uniq | sed -n 's|@\(.*\)||p' +module_authors=$(find ./modules -name meta.yml | xargs -I {} grep -A20 'authors:' {} | grep '\- ' | tr -d '"' | tr '[:upper:]' '[:lower:]' | awk '{print $2}') +workflow_authors=$(find ./subworkflows -name meta.yml | xargs -I {} grep -A20 'authors:' {} | grep '\- ' | tr -d '"' | tr '[:upper:]' '[:lower:]' | awk '{print $2}') +echo -e "${module_authors}\n${workflow_authors}" | sort -V | uniq -c | sort -k1,1 -r | awk '{print $2}' | sed -n 's|@\(.*\)||p' From cfa93b3fe62fd5bbf77d0dab9cdc3ccc8360e326 Mon Sep 17 00:00:00 2001 From: Usman Rashid Date: Fri, 21 Jun 2024 10:43:04 +1200 Subject: [PATCH 13/87] Now sorting list of bam and list of fastq before cat to avoid resume cache misses --- CHANGELOG.md | 3 ++- subworkflows/local/align_rnaseq.nf | 6 ++++-- subworkflows/local/prepare_ext_prots.nf | 9 ++++++++- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5f7f550..2dc690d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## 0.4 - [20-Jun-2024] +## 0.4 - [21-Jun-2024] ### `Added` @@ -14,6 +14,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 5. Added evaluation by BUSCO [#41](https://github.com/PlantandFoodResearch/pangene/issues/41) 6. Included common tax ids for eggnog mapper [#27](https://github.com/PlantandFoodResearch/pangene/issues/27) 7. Implemented hierarchical naming scheme: geneI.tJ, geneI.tJ.exonK, geneI.tJ.cdsK [#19](https://github.com/PlantandFoodResearch/pangene/issues/19), [#34](https://github.com/PlantandFoodResearch/pangene/issues/34) +8. Now sorting list of bam and list of fastq before cat to avoid resume cache misses ### `Fixed` diff --git a/subworkflows/local/align_rnaseq.nf b/subworkflows/local/align_rnaseq.nf index 94d8b8d..0a6372a 100644 --- a/subworkflows/local/align_rnaseq.nf +++ b/subworkflows/local/align_rnaseq.nf @@ -60,10 +60,12 @@ workflow ALIGN_RNASEQ { bam: bamList.size() <= 1 } - SAMTOOLS_CAT ( ch_star_bam_branch.bams ) + SAMTOOLS_CAT( + ch_star_bam_branch.bams.map { meta, bams -> [ meta, bams.toSorted() ] } + ) ch_samtools_bam = SAMTOOLS_CAT.out.bam - | map { meta, bam -> [meta, [bam]] } + | map { meta, bam -> [ meta, [ bam ] ] } | mix( ch_star_bam_branch.bam ) diff --git a/subworkflows/local/prepare_ext_prots.nf b/subworkflows/local/prepare_ext_prots.nf index ee65f77..92c245d 100644 --- a/subworkflows/local/prepare_ext_prots.nf +++ b/subworkflows/local/prepare_ext_prots.nf @@ -20,7 +20,14 @@ workflow PREPARE_EXT_PROTS { ch_ext_prot_gunzip_fastas = GUNZIP.out.gunzip.mix(ch_ext_prot_seqs_branch.rest) | map { meta, filePath -> filePath } | collect - | map { fileList -> [ [ id: "ext_protein_seqs" ], fileList ] } + | map { fileList -> + [ + [ id: "ext_protein_seqs" ], + ( fileList instanceof List ) + ? fileList.toSorted() + : fileList + ] + } ch_versions = ch_versions.mix(GUNZIP.out.versions.first()) From 48e3e29b9c43ece895a406eec39a8f892c8884a3 Mon Sep 17 00:00:00 2001 From: Usman Rashid Date: Fri, 21 Jun 2024 10:53:09 +1200 Subject: [PATCH 14/87] Renamed external_protein_fastas param to protein_evidence --- CHANGELOG.md | 2 ++ docs/parameters.md | 2 +- nextflow.config | 2 +- nextflow_schema.json | 6 +++--- pfr/params.json | 2 +- tests/stub/params.json | 2 +- workflows/pangene.nf | 4 ++-- 7 files changed, 11 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2dc690d..cf2906d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -29,6 +29,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### `Deprecated` +1. Renamed `external_protein_fastas` param to `protein_evidence` + ## 0.3.3 - [18-Jun-2024] ### `Added` diff --git a/docs/parameters.md b/docs/parameters.md index bf514dc..0bff10a 100644 --- a/docs/parameters.md +++ b/docs/parameters.md @@ -7,7 +7,7 @@ A NextFlow pipeline for pan-genome annotation | Parameter | Description | Type | Default | Required | Hidden | | ------------------------- | -------------------------------------------------------------------------------------------------------- | --------- | --------- | -------- | ------ | | `input` | Target assemblies listed in a CSV sheet | `string` | | True | | -| `external_protein_fastas` | External protein fastas listed in a text sheet | `string` | | True | | +| `protein_evidence` | Protein evidence provided as fasta files listed in a text sheet | `string` | | True | | | `eggnogmapper_db_dir` | Eggnogmapper database directory | `string` | | True | | | `eggnogmapper_tax_scope` | Eggnogmapper taxonomy scopre. Eukaryota: 2759, Viridiplantae: 33090, Archaea: 2157, Bacteria: 2, root: 1 | `integer` | | True | | | `fastq` | FASTQ samples listed in a CSV sheet | `string` | | | | diff --git a/nextflow.config b/nextflow.config index b2b24f0..5865867 100644 --- a/nextflow.config +++ b/nextflow.config @@ -3,7 +3,7 @@ includeConfig './conf/base.config' params { // Input/output options input = null - external_protein_fastas = null + protein_evidence = null eggnogmapper_db_dir = null eggnogmapper_tax_scope = null fastq = null diff --git a/nextflow_schema.json b/nextflow_schema.json index 4d4aef7..01eebc4 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -10,7 +10,7 @@ "type": "object", "fa_icon": "fas fa-terminal", "description": "", - "required": ["input", "external_protein_fastas", "eggnogmapper_db_dir", "eggnogmapper_tax_scope", "outdir"], + "required": ["input", "protein_evidence", "eggnogmapper_db_dir", "eggnogmapper_tax_scope", "outdir"], "properties": { "input": { "type": "string", @@ -21,9 +21,9 @@ "description": "Target assemblies listed in a CSV sheet", "fa_icon": "fas fa-file-csv" }, - "external_protein_fastas": { + "protein_evidence": { "type": "string", - "description": "External protein fastas listed in a text sheet", + "description": "Protein evidence provided as fasta files listed in a text sheet", "format": "file-path", "mimetype": "text/txt", "fa_icon": "far fa-file-alt" diff --git a/pfr/params.json b/pfr/params.json index cb7d801..c33fc07 100644 --- a/pfr/params.json +++ b/pfr/params.json @@ -1,6 +1,6 @@ { "input": "/workspace/pangene/test_data/assemblysheet.csv", - "external_protein_fastas": "/workspace/pangene/test_data/external-protein-fastas.txt", + "protein_evidence": "/workspace/pangene/test_data/external-protein-fastas.txt", "eggnogmapper_db_dir": "/workspace/ComparativeDataSources/emapperdb/5.0.2", "eggnogmapper_tax_scope": 33090, "fastq": "/workspace/pangene/test_data/fastqsheet.csv", diff --git a/tests/stub/params.json b/tests/stub/params.json index db97d3b..cd389b0 100644 --- a/tests/stub/params.json +++ b/tests/stub/params.json @@ -1,6 +1,6 @@ { "input": "tests/stub/assemblysheet.csv", - "external_protein_fastas": "tests/stub/external-protein-fastas.txt", + "protein_evidence": "tests/stub/external-protein-fastas.txt", "eggnogmapper_db_dir": "tests/stub/emapperdb/5.0.2", "eggnogmapper_tax_scope": 33090, "fastq": "tests/stub/fastqsheet.csv", diff --git a/workflows/pangene.nf b/workflows/pangene.nf index 0ea405f..4d4cafd 100644 --- a/workflows/pangene.nf +++ b/workflows/pangene.nf @@ -110,9 +110,9 @@ workflow PANGENE { | collect : Channel.empty() - ch_ext_prot_fastas = ! params.external_protein_fastas + ch_ext_prot_fastas = ! params.protein_evidence ? Channel.empty() - : Channel.fromPath(params.external_protein_fastas) + : Channel.fromPath(params.protein_evidence) | splitText | map { file_path -> def file_handle = file(file_path.strip(), checkIfExists: true) From 0d14d971210e7da3aa8816d667ec5a600faa37f8 Mon Sep 17 00:00:00 2001 From: Usman Rashid Date: Fri, 21 Jun 2024 15:15:39 +1200 Subject: [PATCH 15/87] Allowed BAM files for RNA evidence --- CHANGELOG.md | 3 + assets/schema_liftoff.json | 2 +- assets/schema_orthofinder.json | 2 +- assets/{schema_fastq.json => schema_rna.json} | 22 +++---- modules/local/utils.nf | 31 +++++++++- nextflow.config | 4 +- nextflow_schema.json | 6 +- pfr/params.json | 2 +- subworkflows/local/align_rnaseq.nf | 3 + .../fastq_fastqc_umitools_fastp/main.nf | 10 +++- tests/stub/bam/1505KHS-0090_Root3.red5_v3.bam | 0 tests/stub/bam/1505KHS-0092_Root3.red5_v3.bam | 0 tests/stub/params.json | 2 +- tests/stub/{fastqsheet.csv => rnasheet.csv} | 10 ++-- workflows/pangene.nf | 59 +++++++++++++++---- 15 files changed, 119 insertions(+), 37 deletions(-) rename assets/{schema_fastq.json => schema_rna.json} (62%) create mode 100644 tests/stub/bam/1505KHS-0090_Root3.red5_v3.bam create mode 100644 tests/stub/bam/1505KHS-0092_Root3.red5_v3.bam rename tests/stub/{fastqsheet.csv => rnasheet.csv} (58%) diff --git a/CHANGELOG.md b/CHANGELOG.md index cf2906d..3dfea0e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 6. Included common tax ids for eggnog mapper [#27](https://github.com/PlantandFoodResearch/pangene/issues/27) 7. Implemented hierarchical naming scheme: geneI.tJ, geneI.tJ.exonK, geneI.tJ.cdsK [#19](https://github.com/PlantandFoodResearch/pangene/issues/19), [#34](https://github.com/PlantandFoodResearch/pangene/issues/34) 8. Now sorting list of bam and list of fastq before cat to avoid resume cache misses +9. Added a local modification to `FASTQ_FASTQC_UMITOOLS_FASTP` for stub and PR to nf-core/modules +10. Allowed BAM files for RNA evidence [#3](https://github.com/PlantandFoodResearch/pangene/issues/3) ### `Fixed` @@ -30,6 +32,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### `Deprecated` 1. Renamed `external_protein_fastas` param to `protein_evidence` +2. Renamed `fastq` param to `rna_evidence` ## 0.3.3 - [18-Jun-2024] diff --git a/assets/schema_liftoff.json b/assets/schema_liftoff.json index 9b19af6..d32f5f0 100644 --- a/assets/schema_liftoff.json +++ b/assets/schema_liftoff.json @@ -1,6 +1,6 @@ { "$schema": "http://json-schema.org/draft-07/schema", - "$id": "https://raw.githubusercontent.com/plantandfoodresearch/pangene/master/assets/schema_fastq.json", + "$id": "https://raw.githubusercontent.com/plantandfoodresearch/pangene/master/assets/schema_liftoff.json", "title": "plantandfoodresearch/pangene pipeline - params.liftoff_annotations schema", "description": "Schema for the file provided with params.liftoff_annotations", "type": "array", diff --git a/assets/schema_orthofinder.json b/assets/schema_orthofinder.json index 62561ae..5d6ff0d 100644 --- a/assets/schema_orthofinder.json +++ b/assets/schema_orthofinder.json @@ -1,6 +1,6 @@ { "$schema": "http://json-schema.org/draft-07/schema", - "$id": "https://raw.githubusercontent.com/plantandfoodresearch/pangene/master/assets/schema_fastq.json", + "$id": "https://raw.githubusercontent.com/plantandfoodresearch/pangene/master/assets/schema_orthofinder.json", "title": "plantandfoodresearch/pangene pipeline - params.orthofinder_annotations schema", "description": "Schema for the file provided with params.orthofinder_annotations", "type": "array", diff --git a/assets/schema_fastq.json b/assets/schema_rna.json similarity index 62% rename from assets/schema_fastq.json rename to assets/schema_rna.json index 0890ce3..da9b273 100644 --- a/assets/schema_fastq.json +++ b/assets/schema_rna.json @@ -1,8 +1,8 @@ { "$schema": "http://json-schema.org/draft-07/schema", - "$id": "https://raw.githubusercontent.com/plantandfoodresearch/pangene/master/assets/schema_fastq.json", - "title": "plantandfoodresearch/pangene pipeline - params.fastq schema", - "description": "Schema for the file provided with params.fastq", + "$id": "https://raw.githubusercontent.com/plantandfoodresearch/pangene/master/assets/schema_rna.json", + "title": "plantandfoodresearch/pangene pipeline - params.rna_evidence schema", + "description": "Schema for the file provided with params.rna_evidence", "type": "array", "items": { "type": "object", @@ -13,13 +13,14 @@ "errorMessage": "Sample name must be provided and cannot contain spaces", "meta": ["id"] }, - "fastq_1": { + "file_1": { "type": "string", - "pattern": "^\\S+\\.f(ast)?q\\.gz$", - "errorMessage": "FastQ file for reads 1 must be provided, cannot contain spaces and must have extension '.fq.gz' or '.fastq.gz'" + "pattern": "^\\S+\\.(f(ast)?q\\.gz|bam)$", + "errorMessage": "FASTQ file for reads 1 or BAM file containing mapped reads must be provided, cannot contain spaces and must have extension '.fq.gz', '.fastq.gz' or '.bam'", + "unique": true }, - "fastq_2": { - "errorMessage": "FastQ file for reads 2 cannot contain spaces and must have extension '.fq.gz' or '.fastq.gz'", + "file_2": { + "errorMessage": "FASTQ file for reads 2 cannot contain spaces and must have extension '.fq.gz' or '.fastq.gz'", "anyOf": [ { "type": "string", @@ -30,7 +31,8 @@ "maxLength": 0 } ], - "dependentRequired": ["fastq_1"] + "dependentRequired": ["file_1"], + "unique": true }, "target_assemblies": { "type": "string", @@ -39,6 +41,6 @@ "meta": ["target_assemblies"] } }, - "required": ["sample", "fastq_1", "target_assemblies"] + "required": ["sample", "file_1", "target_assemblies"] } } diff --git a/modules/local/utils.nf b/modules/local/utils.nf index 7e1c86a..2878afc 100644 --- a/modules/local/utils.nf +++ b/modules/local/utils.nf @@ -22,7 +22,7 @@ def validateFastqMetadata(metas, fqs, permAssString) { // Check if each listed assembly is permissible metas.each { meta -> if ( meta.target_assemblies.any { !permAssList.contains( it ) } ) { - exit 1, "Sample ${meta.id} targets ${meta.target_assemblies} which are not in $permAssList" + error "Sample ${meta.id} targets ${meta.target_assemblies} which are not in $permAssList" } } @@ -38,3 +38,32 @@ def validateFastqMetadata(metas, fqs, permAssString) { [ metas.first(), fqs ] } + + +def validateBamMetadata(metas, bams, permAssString) { + def permAssList = permAssString.split(",") + + // Check if each listed assembly is permissible + metas.each { meta -> + if ( meta.target_assemblies.any { !permAssList.contains( it ) } ) { + error "Sample ${meta.id} targets ${meta.target_assemblies} which are not in $permAssList" + } + } + + // Check that when the first file is bam then the second file is absent + bams.findAll { files -> + files.first().extension == 'bam' && files.size() != 1 + } + .each { error "Sample ${metas.first().id} contains both bam and fastq pairs. When a bam file is provided as file_1, a fastq for file_2 is not permitted" } + + // Check that a bam file only targets a single assembly + bams.eachWithIndex { files, index -> + if ( files.first().extension == 'bam' && metas[index].target_assemblies.size() > 1 ) { + error "BAM file for sample ${metas.first().id} can only target one assembly: ${metas[index].target_assemblies}" + } + } + + metas.every { it.target_assemblies == metas.first().target_assemblies } + ? [ [ metas.first(), bams.flatten() ] ] + : metas.withIndex().collect { meta, index -> [ meta, bams[index].flatten() ] } +} diff --git a/nextflow.config b/nextflow.config index 5865867..670dcd9 100644 --- a/nextflow.config +++ b/nextflow.config @@ -6,7 +6,7 @@ params { protein_evidence = null eggnogmapper_db_dir = null eggnogmapper_tax_scope = null - fastq = null + rna_evidence = null liftoff_annotations = null orthofinder_annotations = null outdir = "./results" @@ -31,7 +31,7 @@ params { star_max_intron_length = 16000 star_align_extra_args = "" star_save_outputs = false - save_cat_bam = false + save_cat_bam = true // Annotation options braker_extra_args = "" diff --git a/nextflow_schema.json b/nextflow_schema.json index 01eebc4..62bccfb 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -38,14 +38,14 @@ "description": "Eggnogmapper taxonomy scopre. Eukaryota: 2759, Viridiplantae: 33090, Archaea: 2157, Bacteria: 2, root: 1", "minimum": 0 }, - "fastq": { + "rna_evidence": { "type": "string", "format": "file-path", "mimetype": "text/csv", - "schema": "assets/schema_fastq.json", + "schema": "assets/schema_rna.json", "pattern": "^\\S+\\.csv$", "fa_icon": "fas fa-file-csv", - "description": "FASTQ samples listed in a CSV sheet" + "description": "FASTQ/BAM samples listed in a CSV sheet" }, "liftoff_annotations": { "type": "string", diff --git a/pfr/params.json b/pfr/params.json index c33fc07..c0a1200 100644 --- a/pfr/params.json +++ b/pfr/params.json @@ -3,6 +3,6 @@ "protein_evidence": "/workspace/pangene/test_data/external-protein-fastas.txt", "eggnogmapper_db_dir": "/workspace/ComparativeDataSources/emapperdb/5.0.2", "eggnogmapper_tax_scope": 33090, - "fastq": "/workspace/pangene/test_data/fastqsheet.csv", + "rna_evidence": "/workspace/pangene/test_data/fastqsheet.csv", "liftoff_annotations": "/workspace/pangene/test_data/liftoffannotations.csv" } diff --git a/subworkflows/local/align_rnaseq.nf b/subworkflows/local/align_rnaseq.nf index 0a6372a..0ad3b59 100644 --- a/subworkflows/local/align_rnaseq.nf +++ b/subworkflows/local/align_rnaseq.nf @@ -5,6 +5,7 @@ workflow ALIGN_RNASEQ { take: reads_target // channel: [ meta, assembly_id ] trim_reads // channel: [ meta, [ fq ] ] + rna_bam_by_assembly // channel: [ meta, [ bam ] ] assembly_index // channel: [ meta2, star_index ] main: @@ -54,7 +55,9 @@ workflow ALIGN_RNASEQ { bam instanceof List ? bam.find { it =~ /Aligned/ } : bam ] } + | mix ( rna_bam_by_assembly ) | groupTuple + | map { meta, bams -> [ meta, bams.flatten() ] } | branch { meta, bamList -> bams: bamList.size() > 1 bam: bamList.size() <= 1 diff --git a/subworkflows/nf-core/fastq_fastqc_umitools_fastp/main.nf b/subworkflows/nf-core/fastq_fastqc_umitools_fastp/main.nf index c472d71..979625d 100644 --- a/subworkflows/nf-core/fastq_fastqc_umitools_fastp/main.nf +++ b/subworkflows/nf-core/fastq_fastqc_umitools_fastp/main.nf @@ -12,12 +12,18 @@ include { FASTP } from '../../../modules/nf-core/fastp/main' // import groovy.json.JsonSlurper -def getFastpReadsAfterFiltering(json_file) { +def getFastpReadsAfterFiltering(json_file, min_trimmed_reads) { + + if ( workflow.stubRun ) { return min_trimmed_reads.toLong() } + def Map json = (Map) new JsonSlurper().parseText(json_file.text).get('summary') return json['after_filtering']['total_reads'].toLong() } def getFastpAdapterSequence(json_file){ + + if ( workflow.stubRun ) { return "" } + def Map json = (Map) new JsonSlurper().parseText(json_file.text) try{ adapter = json['adapter_cutting']['read1_adapter_sequence'] @@ -109,7 +115,7 @@ workflow FASTQ_FASTQC_UMITOOLS_FASTP { .out .reads .join(trim_json) - .map { meta, reads, json -> [ meta, reads, getFastpReadsAfterFiltering(json) ] } + .map { meta, reads, json -> [ meta, reads, getFastpReadsAfterFiltering(json, min_trimmed_reads) ] } .set { ch_num_trimmed_reads } ch_num_trimmed_reads diff --git a/tests/stub/bam/1505KHS-0090_Root3.red5_v3.bam b/tests/stub/bam/1505KHS-0090_Root3.red5_v3.bam new file mode 100644 index 0000000..e69de29 diff --git a/tests/stub/bam/1505KHS-0092_Root3.red5_v3.bam b/tests/stub/bam/1505KHS-0092_Root3.red5_v3.bam new file mode 100644 index 0000000..e69de29 diff --git a/tests/stub/params.json b/tests/stub/params.json index cd389b0..dbaa4fb 100644 --- a/tests/stub/params.json +++ b/tests/stub/params.json @@ -3,7 +3,7 @@ "protein_evidence": "tests/stub/external-protein-fastas.txt", "eggnogmapper_db_dir": "tests/stub/emapperdb/5.0.2", "eggnogmapper_tax_scope": 33090, - "fastq": "tests/stub/fastqsheet.csv", + "rna_evidence": "tests/stub/rnasheet.csv", "liftoff_annotations": "tests/stub/liftoffannotations.csv", "max_cpus": 2, "max_memory": "3.GB" diff --git a/tests/stub/fastqsheet.csv b/tests/stub/rnasheet.csv similarity index 58% rename from tests/stub/fastqsheet.csv rename to tests/stub/rnasheet.csv index 0b7e223..610bfbc 100644 --- a/tests/stub/fastqsheet.csv +++ b/tests/stub/rnasheet.csv @@ -1,4 +1,6 @@ -sample,fastq_1,fastq_2,target_assemblies -Root1,tests/stub/fq/1505KHS-0090_Root1_162bp_C728RACXX_Lane1_R1.1k.fastq.gz,tests/stub/fq/1505KHS-0090_Root1_162bp_C728RACXX_Lane1_R2.1k.fastq.gz,red5_v2p1 -Root1,tests/stub/fq/1505KHS-0090_Root2_156bp_C728RACXX_Lane1_R1.1k.fastq.gz,tests/stub/fq/1505KHS-0090_Root2_156bp_C728RACXX_Lane1_R2.1k.fastq.gz,red5_v2p1 -cane3,tests/stub/fq/1505KHS-0090_cane3_165bp_C728RACXX_Lane1_R1.1k.fastq.gz,tests/stub/fq/1505KHS-0090_cane3_165bp_C728RACXX_Lane1_R2.1k.fastq.gz,red5_v2p1;donghong +sample,file_1,file_2,target_assemblies +Root1,tests/stub/fq/1505KHS-0090_Root1_162bp_C728RACXX_Lane1_R1.1k.fastq.gz,tests/stub/fq/1505KHS-0090_Root1_162bp_C728RACXX_Lane1_R2.1k.fastq.gz,red5_v2p1;red5_v3 +Root1,tests/stub/fq/1505KHS-0090_Root2_156bp_C728RACXX_Lane1_R1.1k.fastq.gz,tests/stub/fq/1505KHS-0090_Root2_156bp_C728RACXX_Lane1_R2.1k.fastq.gz,red5_v2p1;red5_v3 +Root3,tests/stub/bam/1505KHS-0090_Root3.red5_v3.bam,,red5_v3 +Root3,tests/stub/bam/1505KHS-0092_Root3.red5_v3.bam,,red5_v3 +cane3,tests/stub/fq/1505KHS-0090_cane3_165bp_C728RACXX_Lane1_R1.1k.fastq.gz,tests/stub/fq/1505KHS-0090_cane3_165bp_C728RACXX_Lane1_R2.1k.fastq.gz,red5_v2p1;donghong;red5_v3 diff --git a/workflows/pangene.nf b/workflows/pangene.nf index 4d4cafd..4dcdd5b 100644 --- a/workflows/pangene.nf +++ b/workflows/pangene.nf @@ -1,5 +1,6 @@ include { fromSamplesheet; paramsSummaryLog } from 'plugin/nf-validation' include { idFromFileName; validateFastqMetadata } from '../modules/local/utils' +include { validateBamMetadata } from '../modules/local/utils' include { PREPARE_ASSEMBLY } from '../subworkflows/local/prepare_assembly' include { PREPROCESS_RNASEQ } from '../subworkflows/local/preprocess_rnaseq' include { ALIGN_RNASEQ } from '../subworkflows/local/align_rnaseq' @@ -83,23 +84,58 @@ workflow PANGENE { | map { it.join(",") } | ifEmpty( "" ) - ch_reads = ! params.fastq + ch_rna_branch = ! params.rna_evidence ? Channel.empty() - : Channel.fromSamplesheet('fastq') - | map { meta, fq1, fq2 -> - fq2 - ? [ meta + [ single_end: false ], [ file(fq1, checkIfExists:true), file(fq2, checkIfExists:true) ] ] - : [ meta + [ single_end: true ], [ file(fq1, checkIfExists:true) ] ] + : Channel.fromSamplesheet('rna_evidence') + | map { meta, f1, f2 -> + f2 + ? [ meta + [ single_end: false ], [ file(f1, checkIfExists:true), file(f2, checkIfExists:true) ] ] + : [ meta + [ single_end: true ], [ file(f1, checkIfExists:true) ] ] } - | map { meta, fqs -> - [ meta.id, meta + [ target_assemblies: meta.target_assemblies.split(';').sort() ], fqs ] + | map { meta, files -> + [ meta + [ target_assemblies: meta.target_assemblies.split(';').sort() ], files ] } + | branch { meta, files -> + fq: files.first().extension != 'bam' + bam: files.first().extension == 'bam' + } + + ch_rna_fq = ch_rna_branch.fq + | map { meta, files -> [ meta.id, meta, files ] } + | groupTuple + | combine(ch_tar_assm_str) + | map { id, metas, files, tar_assm_str -> + validateFastqMetadata(metas, files, tar_assm_str) + } + + ch_rna_bam = ch_rna_branch.bam + | map { meta, files -> [ meta.id, meta, files ] } | groupTuple | combine(ch_tar_assm_str) - | map { id, metas, fqs, tar_assm_str -> - validateFastqMetadata(metas, fqs, tar_assm_str) + | flatMap { id, metas, files, tar_assm_str -> + validateBamMetadata(metas, files, tar_assm_str) } + // Check if each sample for a given assembly has either bam or fastq files + ch_rna_bam + | flatMap { meta, bams -> + meta.target_assemblies.collect { [ [ meta.id, it ], 'bam' ] } + } + | join( + ch_rna_fq + | flatMap { meta, fqs -> + meta.target_assemblies.collect { [ [ meta.id, it ], 'fq' ] } + } + ) + | map { combination, bam, fq -> + error "Sample ${combination[0]} for assembly ${combination[1]} can not have both fastq and bam files" + } + + ch_rna_bam_by_assembly = ch_rna_bam + | map { meta, bams -> [ [ id: meta.target_assemblies.first() ], bams ] } + | groupTuple + | map { meta, bams -> [ meta, bams.flatten() ] } + ch_ribo_db = params.remove_ribo_rna ? file(params.ribo_database_manifest, checkIfExists: true) : null @@ -174,7 +210,7 @@ workflow PANGENE { // SUBWORKFLOW: PREPROCESS_RNASEQ PREPROCESS_RNASEQ( - ch_reads, + ch_rna_fq, ch_tar_assm_str, ch_braker_ex_asm_str, params.skip_fastqc, @@ -193,6 +229,7 @@ workflow PANGENE { ALIGN_RNASEQ( ch_reads_target, ch_trim_reads, + ch_rna_bam_by_assembly, ch_target_assemby_index, ) From f325bbd1fa63f1374c3f292825bc324fb8c192fc Mon Sep 17 00:00:00 2001 From: Usman Rashid Date: Mon, 24 Jun 2024 16:54:36 +1200 Subject: [PATCH 16/87] Added GXF_FASTA_AGAT_SPADDINTRONS_SPEXTRACTSEQUENCES sub-workflow --- CHANGELOG.md | 3 +- conf/modules.config | 6 + modules.json | 15 ++ modules/pfr/agat/spaddintrons/environment.yml | 9 ++ modules/pfr/agat/spaddintrons/main.nf | 50 +++++++ modules/pfr/agat/spaddintrons/meta.yml | 55 +++++++ .../pfr/agat/spaddintrons/tests/main.nf.test | 61 ++++++++ .../agat/spaddintrons/tests/main.nf.test.snap | 72 ++++++++++ modules/pfr/agat/spaddintrons/tests/tags.yml | 2 + .../agat/spextractsequences/environment.yml | 9 ++ modules/pfr/agat/spextractsequences/main.nf | 52 +++++++ modules/pfr/agat/spextractsequences/meta.yml | 60 ++++++++ .../spextractsequences/tests/main.nf.test | 62 ++++++++ .../tests/main.nf.test.snap | 72 ++++++++++ .../agat/spextractsequences/tests/tags.yml | 2 + .../main.nf | 136 ++++++++++++++++++ .../meta.yml | 54 +++++++ .../tests/main.nf.test | 83 +++++++++++ .../tests/main.nf.test.snap | 104 ++++++++++++++ .../tests/nextflow.config | 6 + .../tests/tags.yml | 2 + workflows/pangene.nf | 11 ++ 22 files changed, 925 insertions(+), 1 deletion(-) create mode 100644 modules/pfr/agat/spaddintrons/environment.yml create mode 100644 modules/pfr/agat/spaddintrons/main.nf create mode 100644 modules/pfr/agat/spaddintrons/meta.yml create mode 100644 modules/pfr/agat/spaddintrons/tests/main.nf.test create mode 100644 modules/pfr/agat/spaddintrons/tests/main.nf.test.snap create mode 100644 modules/pfr/agat/spaddintrons/tests/tags.yml create mode 100644 modules/pfr/agat/spextractsequences/environment.yml create mode 100644 modules/pfr/agat/spextractsequences/main.nf create mode 100644 modules/pfr/agat/spextractsequences/meta.yml create mode 100644 modules/pfr/agat/spextractsequences/tests/main.nf.test create mode 100644 modules/pfr/agat/spextractsequences/tests/main.nf.test.snap create mode 100644 modules/pfr/agat/spextractsequences/tests/tags.yml create mode 100644 subworkflows/pfr/gxf_fasta_agat_spaddintrons_spextractsequences/main.nf create mode 100644 subworkflows/pfr/gxf_fasta_agat_spaddintrons_spextractsequences/meta.yml create mode 100644 subworkflows/pfr/gxf_fasta_agat_spaddintrons_spextractsequences/tests/main.nf.test create mode 100644 subworkflows/pfr/gxf_fasta_agat_spaddintrons_spextractsequences/tests/main.nf.test.snap create mode 100644 subworkflows/pfr/gxf_fasta_agat_spaddintrons_spextractsequences/tests/nextflow.config create mode 100644 subworkflows/pfr/gxf_fasta_agat_spaddintrons_spextractsequences/tests/tags.yml diff --git a/CHANGELOG.md b/CHANGELOG.md index 3dfea0e..ed872b7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## 0.4 - [21-Jun-2024] +## 0.4 - [24-Jun-2024] ### `Added` @@ -17,6 +17,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 8. Now sorting list of bam and list of fastq before cat to avoid resume cache misses 9. Added a local modification to `FASTQ_FASTQC_UMITOOLS_FASTP` for stub and PR to nf-core/modules 10. Allowed BAM files for RNA evidence [#3](https://github.com/PlantandFoodResearch/pangene/issues/3) +11. Added `GXF_FASTA_AGAT_SPADDINTRONS_SPEXTRACTSEQUENCES` sub-workflow for splice type statistics [#11](https://github.com/PlantandFoodResearch/pangene/issues/11) ### `Fixed` diff --git a/conf/modules.config b/conf/modules.config index 17c9b82..dcca115 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -323,3 +323,9 @@ process { ] } } + +process { + withName: '.*:GXF_FASTA_AGAT_SPADDINTRONS_SPEXTRACTSEQUENCES:AGAT_SPEXTRACTSEQUENCES' { + ext.args = '-t intron' + } +} diff --git a/modules.json b/modules.json index 80355c0..d211885 100644 --- a/modules.json +++ b/modules.json @@ -5,6 +5,16 @@ "https://github.com/PlantandFoodResearch/nxf-modules.git": { "modules": { "pfr": { + "agat/spaddintrons": { + "branch": "main", + "git_sha": "f373339d099de4e7330cd8f3c400ad9a080358c9", + "installed_by": ["gxf_fasta_agat_spaddintrons_spextractsequences"] + }, + "agat/spextractsequences": { + "branch": "main", + "git_sha": "e2a6ed64cb035a16da154f738f65639ace7e0c74", + "installed_by": ["gxf_fasta_agat_spaddintrons_spextractsequences"] + }, "agat/spfilterfeaturefromkilllist": { "branch": "main", "git_sha": "10b046eaac396f279c08e7e2bb067482ccd9c74e", @@ -63,6 +73,11 @@ "branch": "main", "git_sha": "0e4afaff4964485d2d93f1115c5254a99765b9c1", "installed_by": ["subworkflows"] + }, + "gxf_fasta_agat_spaddintrons_spextractsequences": { + "branch": "main", + "git_sha": "f373339d099de4e7330cd8f3c400ad9a080358c9", + "installed_by": ["subworkflows"] } } } diff --git a/modules/pfr/agat/spaddintrons/environment.yml b/modules/pfr/agat/spaddintrons/environment.yml new file mode 100644 index 0000000..854ee35 --- /dev/null +++ b/modules/pfr/agat/spaddintrons/environment.yml @@ -0,0 +1,9 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json +name: "agat_spaddintrons" +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - "bioconda::agat=1.4.0" diff --git a/modules/pfr/agat/spaddintrons/main.nf b/modules/pfr/agat/spaddintrons/main.nf new file mode 100644 index 0000000..164b3d3 --- /dev/null +++ b/modules/pfr/agat/spaddintrons/main.nf @@ -0,0 +1,50 @@ +process AGAT_SPADDINTRONS { + tag "$meta.id" + label 'process_single' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/agat:1.4.0--pl5321hdfd78af_0' : + 'biocontainers/agat:1.4.0--pl5321hdfd78af_0' }" + + input: + tuple val(meta), path(gxf) + path config + + output: + tuple val(meta), path("*.gff") , emit: gff + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def config_arg = config ? "-c $config" : '' + if( "$gxf" == "${prefix}.gff" ) error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!" + """ + agat_sp_add_introns.pl \\ + $args \\ + -g $gxf \\ + $config_arg \\ + -o ${prefix}.gff + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + agat: \$(agat_sp_add_introns.pl -h | sed -n 's/.*(AGAT) - Version: \\(.*\\) .*/\\1/p') + END_VERSIONS + """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + if( "$gxf" == "${prefix}.gff" ) error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!" + """ + touch ${prefix}.gff + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + agat: \$(agat_sp_add_introns.pl -h | sed -n 's/.*(AGAT) - Version: \\(.*\\) .*/\\1/p') + END_VERSIONS + """ +} diff --git a/modules/pfr/agat/spaddintrons/meta.yml b/modules/pfr/agat/spaddintrons/meta.yml new file mode 100644 index 0000000..c05c924 --- /dev/null +++ b/modules/pfr/agat/spaddintrons/meta.yml @@ -0,0 +1,55 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/meta-schema.json +name: "agat_spaddintrons" +description: | + The script aims to add intron features to gtf/gff file without intron features. +keywords: + - genomics + - gff + - gtf + - add + - intron + - feature +tools: + - "agat": + description: "Another Gff Analysis Toolkit (AGAT). Suite of tools to handle gene annotations in any GTF/GFF format." + homepage: "https://agat.readthedocs.io/en/latest/" + documentation: "https://agat.readthedocs.io/en/latest/tools/agat_sp_add_introns.html" + tool_dev_url: "https://github.com/NBISweden/AGAT" + doi: "10.5281/zenodo.3552717" + licence: ["GPL v3"] +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1', single_end:false ]` + - gxf: + type: file + description: Input GFF3/GTF file + pattern: "*.{gff,gff3,gtf}" + - config: + type: file + description: | + Input agat config file. By default AGAT takes as input agat_config.yaml file from the working directory if any, otherwise it takes the orignal agat_config.yaml shipped with AGAT. To get the agat_config.yaml locally type: "agat config --expose". The --config option gives you the possibility to use your own AGAT config file (located elsewhere or named differently). + pattern: "*.yaml" + +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1', single_end:false ] + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" + - gff: + type: file + description: Output GFF file. + pattern: "*.gff" + +authors: + - "@GallVp" +maintainers: + - "@GallVp" diff --git a/modules/pfr/agat/spaddintrons/tests/main.nf.test b/modules/pfr/agat/spaddintrons/tests/main.nf.test new file mode 100644 index 0000000..e7bf26a --- /dev/null +++ b/modules/pfr/agat/spaddintrons/tests/main.nf.test @@ -0,0 +1,61 @@ +nextflow_process { + + name "Test Process AGAT_SPADDINTRONS" + script "../main.nf" + process "AGAT_SPADDINTRONS" + + tag "modules" + tag "modules_pfr" + tag "agat" + tag "agat/spaddintrons" + + test("homo_sapiens - genome - gtf") { + + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr1/genome.gtf', checkIfExists: true) + ] + input[1] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("homo_sapiens - genome - gtf - stub") { + + options '-stub' + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr1/genome.gtf', checkIfExists: true) + ] + input[1] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + +} diff --git a/modules/pfr/agat/spaddintrons/tests/main.nf.test.snap b/modules/pfr/agat/spaddintrons/tests/main.nf.test.snap new file mode 100644 index 0000000..6947711 --- /dev/null +++ b/modules/pfr/agat/spaddintrons/tests/main.nf.test.snap @@ -0,0 +1,72 @@ +{ + "homo_sapiens - genome - gtf - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.gff:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + "versions.yml:md5,480dfe983a8b4469c1dff8b7a08d855d" + ], + "gff": [ + [ + { + "id": "test", + "single_end": false + }, + "test.gff:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,480dfe983a8b4469c1dff8b7a08d855d" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-24T16:22:13.888389" + }, + "homo_sapiens - genome - gtf": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.gff:md5,a798830c6ad0a27b1564b98e1a1fc3aa" + ] + ], + "1": [ + "versions.yml:md5,480dfe983a8b4469c1dff8b7a08d855d" + ], + "gff": [ + [ + { + "id": "test", + "single_end": false + }, + "test.gff:md5,a798830c6ad0a27b1564b98e1a1fc3aa" + ] + ], + "versions": [ + "versions.yml:md5,480dfe983a8b4469c1dff8b7a08d855d" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-24T15:21:51.693488" + } +} \ No newline at end of file diff --git a/modules/pfr/agat/spaddintrons/tests/tags.yml b/modules/pfr/agat/spaddintrons/tests/tags.yml new file mode 100644 index 0000000..c407b01 --- /dev/null +++ b/modules/pfr/agat/spaddintrons/tests/tags.yml @@ -0,0 +1,2 @@ +agat/spaddintrons: + - "modules/pfr/agat/spaddintrons/**" diff --git a/modules/pfr/agat/spextractsequences/environment.yml b/modules/pfr/agat/spextractsequences/environment.yml new file mode 100644 index 0000000..be40401 --- /dev/null +++ b/modules/pfr/agat/spextractsequences/environment.yml @@ -0,0 +1,9 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json +name: "agat_spextractsequences" +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bioconda::agat=1.4.0 diff --git a/modules/pfr/agat/spextractsequences/main.nf b/modules/pfr/agat/spextractsequences/main.nf new file mode 100644 index 0000000..ccf4b4d --- /dev/null +++ b/modules/pfr/agat/spextractsequences/main.nf @@ -0,0 +1,52 @@ +process AGAT_SPEXTRACTSEQUENCES { + tag "$meta.id" + label 'process_single' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/agat:1.4.0--pl5321hdfd78af_0' : + 'biocontainers/agat:1.4.0--pl5321hdfd78af_0' }" + + input: + tuple val(meta), path(gxf) + path fasta + path config + + output: + tuple val(meta), path("*.fasta") , emit: fasta + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def config_arg = config ? "-c $config" : '' + if( "$fasta" == "${prefix}.fasta" ) error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!" + """ + agat_sp_extract_sequences.pl \\ + $args \\ + -g $gxf \\ + -f $fasta \\ + $config_arg \\ + -o ${prefix}.fasta + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + agat: \$(agat_sp_extract_sequences.pl -h | sed -n 's/.*(AGAT) - Version: \\(.*\\) .*/\\1/p') + END_VERSIONS + """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + if( "$fasta" == "${prefix}.fasta" ) error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!" + """ + touch ${prefix}.fasta + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + agat: \$(agat_sp_extract_sequences.pl -h | sed -n 's/.*(AGAT) - Version: \\(.*\\) .*/\\1/p') + END_VERSIONS + """ +} diff --git a/modules/pfr/agat/spextractsequences/meta.yml b/modules/pfr/agat/spextractsequences/meta.yml new file mode 100644 index 0000000..611af62 --- /dev/null +++ b/modules/pfr/agat/spextractsequences/meta.yml @@ -0,0 +1,60 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/meta-schema.json +name: "agat_spextractsequences" +description: | + This script extracts sequences in fasta format according to features described + in a gff file. +keywords: + - genomics + - gff + - extract + - fasta + - sequence + - feature +tools: + - "agat": + description: "Another Gff Analysis Toolkit (AGAT). Suite of tools to handle gene annotations in any GTF/GFF format." + homepage: "https://agat.readthedocs.io/en/latest/" + documentation: "https://agat.readthedocs.io/en/latest/tools/agat_sp_extract_sequences.html" + tool_dev_url: "https://github.com/NBISweden/AGAT" + doi: "10.5281/zenodo.3552717" + licence: ["GPL v3"] +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1', single_end:false ]` + - gxf: + type: file + description: Input GFF3/GTF file + pattern: "*.{gff,gff3,gtf}" + - fasta: + type: file + description: Input FASTA file + pattern: "*.{fa,fsa,faa,fasta}" + - config: + type: file + description: | + Input agat config file. By default AGAT takes as input agat_config.yaml file from the working directory if any, otherwise it takes the orignal agat_config.yaml shipped with AGAT. To get the agat_config.yaml locally type: "agat config --expose". The --config option gives you the possibility to use your own AGAT config file (located elsewhere or named differently). + pattern: "*.yaml" + +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1', single_end:false ] + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" + - fasta: + type: file + description: Output FASTA file. + pattern: "*.fasta" + +authors: + - "@GallVp" +maintainers: + - "@GallVp" diff --git a/modules/pfr/agat/spextractsequences/tests/main.nf.test b/modules/pfr/agat/spextractsequences/tests/main.nf.test new file mode 100644 index 0000000..44b7986 --- /dev/null +++ b/modules/pfr/agat/spextractsequences/tests/main.nf.test @@ -0,0 +1,62 @@ +nextflow_process { + + name "Test Process AGAT_SPEXTRACTSEQUENCES" + script "../main.nf" + process "AGAT_SPEXTRACTSEQUENCES" + + tag "modules" + tag "modules_pfr" + tag "agat" + tag "agat/spextractsequences" + + test("sarscov2 - gff - fasta") { + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.gff3', checkIfExists: true) + ] + input[1] = file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + input[2] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("sarscov2 - gff - fasta - stub") { + + options '-stub' + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.gff3', checkIfExists: true) + ] + input[1] = file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + input[2] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + +} diff --git a/modules/pfr/agat/spextractsequences/tests/main.nf.test.snap b/modules/pfr/agat/spextractsequences/tests/main.nf.test.snap new file mode 100644 index 0000000..4ee76fe --- /dev/null +++ b/modules/pfr/agat/spextractsequences/tests/main.nf.test.snap @@ -0,0 +1,72 @@ +{ + "sarscov2 - gff - fasta": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fasta:md5,e4a8c6c1d2b33c92240e9d2ba07aecc2" + ] + ], + "1": [ + "versions.yml:md5,b31a3d3961871a1e453919bc3b45bf2f" + ], + "fasta": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fasta:md5,e4a8c6c1d2b33c92240e9d2ba07aecc2" + ] + ], + "versions": [ + "versions.yml:md5,b31a3d3961871a1e453919bc3b45bf2f" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-21T16:20:58.856035" + }, + "sarscov2 - gff - fasta - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fasta:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + "versions.yml:md5,b31a3d3961871a1e453919bc3b45bf2f" + ], + "fasta": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fasta:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,b31a3d3961871a1e453919bc3b45bf2f" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-21T16:21:04.022292" + } +} \ No newline at end of file diff --git a/modules/pfr/agat/spextractsequences/tests/tags.yml b/modules/pfr/agat/spextractsequences/tests/tags.yml new file mode 100644 index 0000000..31ec6c0 --- /dev/null +++ b/modules/pfr/agat/spextractsequences/tests/tags.yml @@ -0,0 +1,2 @@ +agat/spextractsequences: + - "modules/pfr/agat/spextractsequences/**" diff --git a/subworkflows/pfr/gxf_fasta_agat_spaddintrons_spextractsequences/main.nf b/subworkflows/pfr/gxf_fasta_agat_spaddintrons_spextractsequences/main.nf new file mode 100644 index 0000000..e7b4cc5 --- /dev/null +++ b/subworkflows/pfr/gxf_fasta_agat_spaddintrons_spextractsequences/main.nf @@ -0,0 +1,136 @@ +include { AGAT_SPADDINTRONS } from '../../../modules/pfr/agat/spaddintrons/main' +include { AGAT_SPEXTRACTSEQUENCES } from '../../../modules/pfr/agat/spextractsequences/main' + +workflow GXF_FASTA_AGAT_SPADDINTRONS_SPEXTRACTSEQUENCES { + + take: + ch_gxf // channel: [ val(meta), gxf ] + ch_fasta // channel: [ val(meta2), fasta ] + + main: + ch_versions = Channel.empty() + + // collectFile: Remove all/partial introns + ch_gxf_purged = ch_gxf + | map { meta, gxf -> + def gxf_lines = gxf.readLines().findAll { line -> + + if ( line.startsWith('#') ) { return true } + + def cols = line.tokenize('\t') + def feat = cols[2].trim().toLowerCase() + + if ( feat == 'intron' ) { return false } + + return true + } + + [ "${meta.id}.nointrons.${gxf.extension}", gxf_lines.join('\n') ] + } + | collectFile + | map { gxf -> [ gxf.baseName.replace('.nointrons', ''), gxf ] } + | join( + ch_gxf.map { meta, gxf -> [ meta.id, meta ] } + ) + | map { id, gxf, meta -> [ meta, gxf ] } + + // MODULE: AGAT_SPADDINTRONS + AGAT_SPADDINTRONS ( ch_gxf_purged, [] ) + + ch_introns_gff = AGAT_SPADDINTRONS.out.gff + ch_versions = ch_versions.mix(AGAT_SPADDINTRONS.out.versions.first()) + + // MODULE: AGAT_SPEXTRACTSEQUENCES + ch_gxf_fasta = ch_introns_gff + | map { meta, gff3 -> [ meta.id, meta, gff3 ] } + | join( + ch_fasta.map { meta2, fasta -> [ meta2.id, fasta ] } + ) + | map { id, meta, gff3, fasta -> [ meta, gff3, fasta ] } + + AGAT_SPEXTRACTSEQUENCES( + ch_gxf_fasta.map { meta, gff3, fasta -> [ meta, gff3 ] }, + ch_gxf_fasta.map { meta, gff3, fasta -> fasta }, + [] // config + ) + + ch_intron_sequences = AGAT_SPEXTRACTSEQUENCES.out.fasta + ch_versions = ch_versions.mix(AGAT_SPEXTRACTSEQUENCES.out.versions.first()) + + // collectFile: splice motifs + ch_splice_motifs = ch_intron_sequences + | map { meta, fasta -> + def splice_motifs = fasta.splitFasta ( record: [id: true, seqString: true] ) + .collect { el -> [ el.id, "${el.seqString[0..1]}${el.seqString[-2..-1]}" ].join('\t') } + + [ "${meta.id}.motifs.tsv", splice_motifs.join('\n') ] + } + | collectFile + | map { tsv -> [ tsv.baseName.replace('.motifs', ''), tsv ] } + | join( + ch_gxf_purged.map { meta, gxf -> [ meta.id, meta ] } + ) + | map { id, tsv, meta -> [ meta, tsv ] } + + // collectFile: Mark gff3 + ch_marked_gff3 = ch_introns_gff + | join ( ch_splice_motifs ) + | map { meta, gff3, tsv -> + def motif_map = [:] + tsv.eachLine { line -> + def cols = line.tokenize('\t') + def id = cols[0] + def motif = cols[1] + + motif_map [ ( id ) ] = motif + } + + def marked_gff3 = gff3.readLines().collect{ line -> + if ( line.startsWith('#') ) { return line } + + def cols = line.tokenize('\t') + def feat = cols[2].trim() + + if ( feat != 'intron' ) { return line } + + def atts = cols[8].trim() + def id = ( atts =~ /ID=([^;]*)/ )[0][1] + + def atts_r = "$atts;splice_motif=${motif_map[id]};canonical_splicing=${motif_map[id]=='GTAG'}" + + return ( cols[0..7] + [ atts_r ] ).join('\t') + } + + [ "${meta.id}.marked.gff3", marked_gff3.join('\n') ] + } + | collectFile + | map { gff3 -> [ gff3.baseName.replace('.marked', ''), gff3 ] } + | join( + ch_gxf_purged.map { meta, gxf -> [ meta.id, meta ] } + ) + | map { id, gff3, meta -> [ meta, gff3 ] } + + // collectFile: Stats + ch_stats_tsv = ch_marked_gff3 + | map { meta, gff3 -> + def summary = gff3.readLines().findAll { line -> + if ( line.startsWith('#') ) { return false } + + def cols = line.tokenize('\t') + def feat = cols[2].trim().toLowerCase() + + if ( feat == 'intron' ) { return true } + + return false + } + .collect { line -> + + } + } + + + emit: + motifs_tsv = ch_splice_motifs // channel: [ val(meta), tsv ] + marked_gff3 = ch_marked_gff3 // channel: [ val(meta), gff3 ] + versions = ch_versions // channel: [ versions.yml ] +} diff --git a/subworkflows/pfr/gxf_fasta_agat_spaddintrons_spextractsequences/meta.yml b/subworkflows/pfr/gxf_fasta_agat_spaddintrons_spextractsequences/meta.yml new file mode 100644 index 0000000..1863d97 --- /dev/null +++ b/subworkflows/pfr/gxf_fasta_agat_spaddintrons_spextractsequences/meta.yml @@ -0,0 +1,54 @@ +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/subworkflows/yaml-schema.json +name: "gxf_fasta_agat_spaddintrons_spextractsequences" +description: Add introns, extract intron sequences and mark introns with splice motifs +keywords: + - genomics + - gtf + - gff + - fasta + - intron + - extract + - sequence + - mark + - splice + - motif +components: + - agat/spaddintrons + - agat/spextractsequences +input: + - ch_gxf: + type: file + description: | + The input channel containing the GTF/GFF file + Structure: [ val(meta), path(gxf) ] + pattern: "*.{gtf,gff,gff3}" + - ch_fasta: + type: file + description: | + The input channel containing the fasta file + Structure: [ val(meta), path(fasta) ] + pattern: "*.{fa,fas,fsa,faa,fasta}" +output: + - motifs_tsv: + type: file + description: | + The output channel containing the motifs TSV file with first column containing intron ID and + the second column containing the splice motif + Structure: [ val(meta), path(tsv) ] + pattern: "*.motifs.tsv" + - marked_gff3: + type: file + description: | + The output channel containing the GFF3 file with splicing annotation added to it + Structure: [ val(meta), path(gff3) ] + pattern: "*.marked.gff3" + - versions: + type: file + description: | + File containing software versions + Structure: [ path(versions.yml) ] + pattern: "versions.yml" +authors: + - "@GallVp" +maintainers: + - "@GallVp" diff --git a/subworkflows/pfr/gxf_fasta_agat_spaddintrons_spextractsequences/tests/main.nf.test b/subworkflows/pfr/gxf_fasta_agat_spaddintrons_spextractsequences/tests/main.nf.test new file mode 100644 index 0000000..0d00c7a --- /dev/null +++ b/subworkflows/pfr/gxf_fasta_agat_spaddintrons_spextractsequences/tests/main.nf.test @@ -0,0 +1,83 @@ +nextflow_workflow { + + name "Test Subworkflow GXF_FASTA_AGAT_SPADDINTRONS_SPEXTRACTSEQUENCES" + script "../main.nf" + workflow "GXF_FASTA_AGAT_SPADDINTRONS_SPEXTRACTSEQUENCES" + config './nextflow.config' + + tag "subworkflows" + tag "subworkflows_pfr" + tag "subworkflows/gxf_fasta_agat_spaddintrons_spextractsequences" + tag "modules/nf-core/gunzip" + tag "agat/spextractsequences" + tag "agat/spaddintrons" + + setup { + run("GUNZIP", alias: 'GUNZIP_FASTA') { + script "../../../../modules/nf-core/gunzip" + + process { + """ + input[0] = [ + [ id:'test' ], + file(params.modules_testdata_base_path + 'genomics/eukaryotes/actinidia_chinensis/genome/chr1/genome.fasta.gz' , checkIfExists: true) + ] + """ + } + } + + run("GUNZIP", alias: 'GUNZIP_GFF3') { + script "../../../../modules/nf-core/gunzip" + + process { + """ + input[0] = [ + [ id:'test' ], + file(params.modules_testdata_base_path + 'genomics/eukaryotes/actinidia_chinensis/genome/chr1/genome.gff3.gz' , checkIfExists: true) + ] + """ + } + } + } + + + test("actinidia_chinensis - fasta - gff3") { + + when { + workflow { + """ + input[0] = GUNZIP_GFF3.out.gunzip + input[1] = GUNZIP_FASTA.out.gunzip + """ + } + } + + then { + assertAll( + { assert workflow.success}, + { assert snapshot(workflow.out).match()} + ) + } + } + + test("actinidia_chinensis - fasta - gff3 - stub") { + + options '-stub' + + when { + workflow { + """ + input[0] = GUNZIP_GFF3.out.gunzip + input[1] = GUNZIP_FASTA.out.gunzip + """ + } + } + + then { + assertAll( + { assert workflow.success}, + { assert snapshot(workflow.out).match()} + ) + } + } +} diff --git a/subworkflows/pfr/gxf_fasta_agat_spaddintrons_spextractsequences/tests/main.nf.test.snap b/subworkflows/pfr/gxf_fasta_agat_spaddintrons_spextractsequences/tests/main.nf.test.snap new file mode 100644 index 0000000..a52bebe --- /dev/null +++ b/subworkflows/pfr/gxf_fasta_agat_spaddintrons_spextractsequences/tests/main.nf.test.snap @@ -0,0 +1,104 @@ +{ + "actinidia_chinensis - fasta - gff3": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.motifs.tsv:md5,feb30ceeb2662125a80539929f2908c5" + ] + ], + "1": [ + [ + { + "id": "test" + }, + "test.marked.gff3:md5,ae8800dc42d5da4a94c93cf09d319fc5" + ] + ], + "2": [ + "versions.yml:md5,1befbe41bc7abbf49767b8dc68877bc7", + "versions.yml:md5,65042e008b2466984150cb219a05291c" + ], + "marked_gff3": [ + [ + { + "id": "test" + }, + "test.marked.gff3:md5,ae8800dc42d5da4a94c93cf09d319fc5" + ] + ], + "motifs_tsv": [ + [ + { + "id": "test" + }, + "test.motifs.tsv:md5,feb30ceeb2662125a80539929f2908c5" + ] + ], + "versions": [ + "versions.yml:md5,1befbe41bc7abbf49767b8dc68877bc7", + "versions.yml:md5,65042e008b2466984150cb219a05291c" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-24T16:20:01.32929" + }, + "actinidia_chinensis - fasta - gff3 - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.motifs.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test" + }, + "test.marked.gff3:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + "versions.yml:md5,1befbe41bc7abbf49767b8dc68877bc7", + "versions.yml:md5,65042e008b2466984150cb219a05291c" + ], + "marked_gff3": [ + [ + { + "id": "test" + }, + "test.marked.gff3:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "motifs_tsv": [ + [ + { + "id": "test" + }, + "test.motifs.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,1befbe41bc7abbf49767b8dc68877bc7", + "versions.yml:md5,65042e008b2466984150cb219a05291c" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-24T16:22:01.840388" + } +} \ No newline at end of file diff --git a/subworkflows/pfr/gxf_fasta_agat_spaddintrons_spextractsequences/tests/nextflow.config b/subworkflows/pfr/gxf_fasta_agat_spaddintrons_spextractsequences/tests/nextflow.config new file mode 100644 index 0000000..456093c --- /dev/null +++ b/subworkflows/pfr/gxf_fasta_agat_spaddintrons_spextractsequences/tests/nextflow.config @@ -0,0 +1,6 @@ +process { + + withName: AGAT_SPEXTRACTSEQUENCES { + ext.args = '-t intron' + } +} diff --git a/subworkflows/pfr/gxf_fasta_agat_spaddintrons_spextractsequences/tests/tags.yml b/subworkflows/pfr/gxf_fasta_agat_spaddintrons_spextractsequences/tests/tags.yml new file mode 100644 index 0000000..a27b632 --- /dev/null +++ b/subworkflows/pfr/gxf_fasta_agat_spaddintrons_spextractsequences/tests/tags.yml @@ -0,0 +1,2 @@ +subworkflows/gxf_fasta_agat_spaddintrons_spextractsequences: + - subworkflows/pfr/gxf_fasta_agat_spaddintrons_spextractsequences/** diff --git a/workflows/pangene.nf b/workflows/pangene.nf index 4dcdd5b..25f83db 100644 --- a/workflows/pangene.nf +++ b/workflows/pangene.nf @@ -16,6 +16,8 @@ include { FASTA_GFF_ORTHOFINDER } from '../subworkflows/local/fa include { FASTA_GXF_BUSCO_PLOT } from '../subworkflows/pfr/fasta_gxf_busco_plot/main' include { CUSTOM_DUMPSOFTWAREVERSIONS } from '../modules/nf-core/custom/dumpsoftwareversions' +include { GXF_FASTA_AGAT_SPADDINTRONS_SPEXTRACTSEQUENCES } from '../subworkflows/pfr/gxf_fasta_agat_spaddintrons_spextractsequences/main' + log.info paramsSummaryLog(workflow) workflow PANGENE { @@ -351,6 +353,15 @@ workflow PANGENE { ch_versions = ch_versions.mix(FASTA_GXF_BUSCO_PLOT.out.versions) + // SUBWORKFLOW: GXF_FASTA_AGAT_SPADDINTRONS_SPEXTRACTSEQUENCES + GXF_FASTA_AGAT_SPADDINTRONS_SPEXTRACTSEQUENCES( + ch_final_gff, + ch_valid_target_assembly + ) + + ch_splicing_marked_gff3 = GXF_FASTA_AGAT_SPADDINTRONS_SPEXTRACTSEQUENCES.out.marked_gff3 + ch_versions = ch_versions.mix(GXF_FASTA_AGAT_SPADDINTRONS_SPEXTRACTSEQUENCES.out.versions) + // MODULE: CUSTOM_DUMPSOFTWAREVERSIONS CUSTOM_DUMPSOFTWAREVERSIONS ( ch_versions.unique().collectFile(name: 'collated_versions.yml') From 2d7f9a5d628965c9fa43ea942dbb4adf0a06bfa9 Mon Sep 17 00:00:00 2001 From: Usman Rashid Date: Mon, 24 Jun 2024 16:56:37 +1200 Subject: [PATCH 17/87] Updated fastq_fastqc_umitools_fastp --- CHANGELOG.md | 5 +- modules.json | 2 +- .../fastq_fastqc_umitools_fastp/main.nf | 6 +- .../tests/main.nf.test | 45 ++++ .../tests/main.nf.test.snap | 225 ++++++++++++++++++ 5 files changed, 276 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ed872b7..ac31784 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,9 +15,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 6. Included common tax ids for eggnog mapper [#27](https://github.com/PlantandFoodResearch/pangene/issues/27) 7. Implemented hierarchical naming scheme: geneI.tJ, geneI.tJ.exonK, geneI.tJ.cdsK [#19](https://github.com/PlantandFoodResearch/pangene/issues/19), [#34](https://github.com/PlantandFoodResearch/pangene/issues/34) 8. Now sorting list of bam and list of fastq before cat to avoid resume cache misses -9. Added a local modification to `FASTQ_FASTQC_UMITOOLS_FASTP` for stub and PR to nf-core/modules -10. Allowed BAM files for RNA evidence [#3](https://github.com/PlantandFoodResearch/pangene/issues/3) -11. Added `GXF_FASTA_AGAT_SPADDINTRONS_SPEXTRACTSEQUENCES` sub-workflow for splice type statistics [#11](https://github.com/PlantandFoodResearch/pangene/issues/11) +9. Allowed BAM files for RNA evidence [#3](https://github.com/PlantandFoodResearch/pangene/issues/3) +10. Added `GXF_FASTA_AGAT_SPADDINTRONS_SPEXTRACTSEQUENCES` sub-workflow for splice type statistics [#11](https://github.com/PlantandFoodResearch/pangene/issues/11) ### `Fixed` diff --git a/modules.json b/modules.json index d211885..201d0a8 100644 --- a/modules.json +++ b/modules.json @@ -222,7 +222,7 @@ "nf-core": { "fastq_fastqc_umitools_fastp": { "branch": "master", - "git_sha": "b90b5cd93149a1b3be263d916c7234fe0708a71c", + "git_sha": "db35d26edeafacf9906a517827df621a29adc13d", "installed_by": ["subworkflows"] } } diff --git a/subworkflows/nf-core/fastq_fastqc_umitools_fastp/main.nf b/subworkflows/nf-core/fastq_fastqc_umitools_fastp/main.nf index 979625d..ab6cbb3 100644 --- a/subworkflows/nf-core/fastq_fastqc_umitools_fastp/main.nf +++ b/subworkflows/nf-core/fastq_fastqc_umitools_fastp/main.nf @@ -12,9 +12,9 @@ include { FASTP } from '../../../modules/nf-core/fastp/main' // import groovy.json.JsonSlurper -def getFastpReadsAfterFiltering(json_file, min_trimmed_reads) { +def getFastpReadsAfterFiltering(json_file, min_num_reads) { - if ( workflow.stubRun ) { return min_trimmed_reads.toLong() } + if ( workflow.stubRun ) { return min_num_reads } def Map json = (Map) new JsonSlurper().parseText(json_file.text).get('summary') return json['after_filtering']['total_reads'].toLong() @@ -115,7 +115,7 @@ workflow FASTQ_FASTQC_UMITOOLS_FASTP { .out .reads .join(trim_json) - .map { meta, reads, json -> [ meta, reads, getFastpReadsAfterFiltering(json, min_trimmed_reads) ] } + .map { meta, reads, json -> [ meta, reads, getFastpReadsAfterFiltering(json, min_trimmed_reads.toLong()) ] } .set { ch_num_trimmed_reads } ch_num_trimmed_reads diff --git a/subworkflows/nf-core/fastq_fastqc_umitools_fastp/tests/main.nf.test b/subworkflows/nf-core/fastq_fastqc_umitools_fastp/tests/main.nf.test index 80e06b9..70fa164 100644 --- a/subworkflows/nf-core/fastq_fastqc_umitools_fastp/tests/main.nf.test +++ b/subworkflows/nf-core/fastq_fastqc_umitools_fastp/tests/main.nf.test @@ -559,4 +559,49 @@ nextflow_workflow { ) } } + + test("sarscov2 paired-end [fastq] - stub") { + + options '-stub' + + when { + workflow { + """ + skip_fastqc = false + with_umi = false + skip_umi_extract = false + umi_discard_read = 1 + skip_trimming = false + adapter_fasta = [] + save_trimmed_fail = false + save_merged = false + min_trimmed_reads = 1 + + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) + ] + ]) + input[1] = skip_fastqc + input[2] = with_umi + input[3] = skip_umi_extract + input[4] = umi_discard_read + input[5] = skip_trimming + input[6] = adapter_fasta + input[7] = save_trimmed_fail + input[8] = save_merged + input[9] = min_trimmed_reads + """ + } + } + + then { + assertAll( + { assert workflow.success }, + { assert snapshot(workflow.out).match() } + ) + } + } } diff --git a/subworkflows/nf-core/fastq_fastqc_umitools_fastp/tests/main.nf.test.snap b/subworkflows/nf-core/fastq_fastqc_umitools_fastp/tests/main.nf.test.snap index 4a6689f..b591fab 100644 --- a/subworkflows/nf-core/fastq_fastqc_umitools_fastp/tests/main.nf.test.snap +++ b/subworkflows/nf-core/fastq_fastqc_umitools_fastp/tests/main.nf.test.snap @@ -545,5 +545,230 @@ "nextflow": "24.04.2" }, "timestamp": "2024-06-10T15:08:32.267769943" + }, + "sarscov2 paired-end [fastq] - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "10": [ + [ + { + "id": "test", + "single_end": false + }, + 1 + ] + ], + "11": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "12": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "13": [ + "versions.yml:md5,85bd0117e5778fff18e3920972a296ad", + "versions.yml:md5,c50aa59475ab901bc6f9a2cf7b1a14e0", + "versions.yml:md5,f3dcaae948e8eed92b4a5557b4c6668e" + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + + ], + "4": [ + [ + { + "id": "test", + "single_end": false + }, + "" + ] + ], + "5": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "6": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "7": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "8": [ + + ], + "9": [ + + ], + "adapter_seq": [ + [ + { + "id": "test", + "single_end": false + }, + "" + ] + ], + "fastqc_raw_html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "fastqc_raw_zip": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "fastqc_trim_html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "fastqc_trim_zip": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "reads": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "trim_html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "trim_json": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "trim_log": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "trim_read_count": [ + [ + { + "id": "test", + "single_end": false + }, + 1 + ] + ], + "trim_reads_fail": [ + + ], + "trim_reads_merged": [ + + ], + "umi_log": [ + + ], + "versions": [ + "versions.yml:md5,85bd0117e5778fff18e3920972a296ad", + "versions.yml:md5,c50aa59475ab901bc6f9a2cf7b1a14e0", + "versions.yml:md5,f3dcaae948e8eed92b4a5557b4c6668e" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-21T14:46:58.329605" } } \ No newline at end of file From 343ed201f94f69bcdc0e31b2e9e146af6d0ebaff Mon Sep 17 00:00:00 2001 From: Usman Rashid Date: Tue, 25 Jun 2024 14:17:10 +1200 Subject: [PATCH 18/87] Changed orthofinder_annotations from FASTA/GFF to protein FASTA --- CHANGELOG.md | 2 + assets/schema_orthofinder.json | 12 +- conf/modules.config | 3 +- modules.json | 3 +- modules/nf-core/gunzip/gunzip.diff | 259 ++++++++++++++++++ modules/nf-core/gunzip/main.nf | 13 +- modules/nf-core/gunzip/meta.yml | 1 + modules/nf-core/gunzip/tests/main.nf.test | 85 ++++++ .../nf-core/gunzip/tests/main.nf.test.snap | 103 +++++++ modules/nf-core/gunzip/tests/nextflow.config | 5 + subworkflows/local/fasta_gff_orthofinder.nf | 55 ---- subworkflows/local/fasta_orthofinder.nf | 33 +++ workflows/pangene.nf | 29 +- 13 files changed, 512 insertions(+), 91 deletions(-) create mode 100644 modules/nf-core/gunzip/gunzip.diff create mode 100644 modules/nf-core/gunzip/tests/nextflow.config delete mode 100644 subworkflows/local/fasta_gff_orthofinder.nf create mode 100644 subworkflows/local/fasta_orthofinder.nf diff --git a/CHANGELOG.md b/CHANGELOG.md index ac31784..ae57106 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 8. Now sorting list of bam and list of fastq before cat to avoid resume cache misses 9. Allowed BAM files for RNA evidence [#3](https://github.com/PlantandFoodResearch/pangene/issues/3) 10. Added `GXF_FASTA_AGAT_SPADDINTRONS_SPEXTRACTSEQUENCES` sub-workflow for splice type statistics [#11](https://github.com/PlantandFoodResearch/pangene/issues/11) +11. Added a local patch for `GUNZIP` +12. Changed `orthofinder_annotations` from FASTA/GFF to protein FASTA [#43](https://github.com/PlantandFoodResearch/pangene/issues/43) ### `Fixed` diff --git a/assets/schema_orthofinder.json b/assets/schema_orthofinder.json index 5d6ff0d..49301fe 100644 --- a/assets/schema_orthofinder.json +++ b/assets/schema_orthofinder.json @@ -15,17 +15,11 @@ }, "fasta": { "type": "string", - "pattern": "^\\S+\\.f(a|asta|as|sa|na)(\\.gz)?$", - "errorMessage": "FASTA file path cannot contain spaces and must have extension '.f(a|asta|as|sa|na)' or '.f(a|asta|as|sa|na).gz'", - "unique": true - }, - "gff3": { - "type": "string", - "pattern": "^\\S+\\.gff(3)?(\\.gz)?$", - "errorMessage": "Annotation GFF3 file path cannot contain spaces and must have extension '.gff.gz', '.gff3.gz', '.gff' or '.gff3'", + "pattern": "^\\S+\\.(fa|fas|pep|faa|fasta)(\\.gz)?$", + "errorMessage": "Proteins FASTA file path cannot contain spaces and must have extension '.(fa|fas|pep|faa|fasta)' or '.(fa|fas|pep|faa|fasta).gz'. Orthofinder does not allow 'fna' extension", "unique": true } }, - "required": ["tag", "fasta", "gff3"] + "required": ["tag", "fasta"] } } diff --git a/conf/modules.config b/conf/modules.config index dcca115..9b92920 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -263,8 +263,7 @@ process { } process { - withName: '.*:FASTA_GFF_ORTHOFINDER:EXTRACT_PROTEINS' { - ext.args = '-y' + withName: '.*:FASTA_ORTHOFINDER:FASTA_GUNZIP:GUNZIP' { ext.prefix = { "${meta.id}.pep" } } } diff --git a/modules.json b/modules.json index 201d0a8..e8a5bd3 100644 --- a/modules.json +++ b/modules.json @@ -164,7 +164,8 @@ "gunzip": { "branch": "master", "git_sha": "3a5fef109d113b4997c9822198664ca5f2716208", - "installed_by": ["modules"] + "installed_by": ["modules"], + "patch": "modules/nf-core/gunzip/gunzip.diff" }, "liftoff": { "branch": "master", diff --git a/modules/nf-core/gunzip/gunzip.diff b/modules/nf-core/gunzip/gunzip.diff new file mode 100644 index 0000000..286f3d8 --- /dev/null +++ b/modules/nf-core/gunzip/gunzip.diff @@ -0,0 +1,259 @@ +Changes in module 'nf-core/gunzip' +--- modules/nf-core/gunzip/meta.yml ++++ modules/nf-core/gunzip/meta.yml +@@ -37,3 +37,4 @@ + - "@joseespinosa" + - "@drpatelh" + - "@jfy133" ++ - "@gallvp" + +--- modules/nf-core/gunzip/main.nf ++++ modules/nf-core/gunzip/main.nf +@@ -18,8 +18,11 @@ + task.ext.when == null || task.ext.when + + script: +- def args = task.ext.args ?: '' +- gunzip = archive.toString() - '.gz' ++ def args = task.ext.args ?: '' ++ def extension = ( archive.toString() - '.gz' ).tokenize('.')[-1] ++ def name = archive.toString() - '.gz' - ".$extension" ++ def prefix = task.ext.prefix ?: name ++ gunzip = prefix + ".$extension" + """ + # Not calling gunzip itself because it creates files + # with the original group ownership rather than the +@@ -37,7 +40,11 @@ + """ + + stub: +- gunzip = archive.toString() - '.gz' ++ def args = task.ext.args ?: '' ++ def extension = ( archive.toString() - '.gz' ).tokenize('.')[-1] ++ def name = archive.toString() - '.gz' - ".$extension" ++ def prefix = task.ext.prefix ?: name ++ gunzip = prefix + ".$extension" + """ + touch $gunzip + cat <<-END_VERSIONS > versions.yml + +--- modules/nf-core/gunzip/tests/main.nf.test.snap ++++ modules/nf-core/gunzip/tests/main.nf.test.snap +@@ -1,4 +1,70 @@ + { ++ "Should run without failures - prefix - stub": { ++ "content": [ ++ { ++ "0": [ ++ [ ++ { ++ "id": "test" ++ }, ++ "test.xyz.fastq:md5,d41d8cd98f00b204e9800998ecf8427e" ++ ] ++ ], ++ "1": [ ++ "versions.yml:md5,54376d32aca20e937a4ec26dac228e84" ++ ], ++ "gunzip": [ ++ [ ++ { ++ "id": "test" ++ }, ++ "test.xyz.fastq:md5,d41d8cd98f00b204e9800998ecf8427e" ++ ] ++ ], ++ "versions": [ ++ "versions.yml:md5,54376d32aca20e937a4ec26dac228e84" ++ ] ++ } ++ ], ++ "meta": { ++ "nf-test": "0.8.4", ++ "nextflow": "24.04.2" ++ }, ++ "timestamp": "2024-06-25T11:35:10.861293" ++ }, ++ "Should run without failures - stub": { ++ "content": [ ++ { ++ "0": [ ++ [ ++ [ ++ ++ ], ++ "test_1.fastq:md5,d41d8cd98f00b204e9800998ecf8427e" ++ ] ++ ], ++ "1": [ ++ "versions.yml:md5,54376d32aca20e937a4ec26dac228e84" ++ ], ++ "gunzip": [ ++ [ ++ [ ++ ++ ], ++ "test_1.fastq:md5,d41d8cd98f00b204e9800998ecf8427e" ++ ] ++ ], ++ "versions": [ ++ "versions.yml:md5,54376d32aca20e937a4ec26dac228e84" ++ ] ++ } ++ ], ++ "meta": { ++ "nf-test": "0.8.4", ++ "nextflow": "24.04.2" ++ }, ++ "timestamp": "2024-06-25T11:35:05.857145" ++ }, + "Should run without failures": { + "content": [ + { +@@ -26,6 +92,43 @@ + ] + } + ], ++ "meta": { ++ "nf-test": "0.8.4", ++ "nextflow": "24.04.2" ++ }, + "timestamp": "2023-10-17T15:35:37.690477896" ++ }, ++ "Should run without failures - prefix": { ++ "content": [ ++ { ++ "0": [ ++ [ ++ { ++ "id": "test" ++ }, ++ "test.xyz.fastq:md5,4161df271f9bfcd25d5845a1e220dbec" ++ ] ++ ], ++ "1": [ ++ "versions.yml:md5,54376d32aca20e937a4ec26dac228e84" ++ ], ++ "gunzip": [ ++ [ ++ { ++ "id": "test" ++ }, ++ "test.xyz.fastq:md5,4161df271f9bfcd25d5845a1e220dbec" ++ ] ++ ], ++ "versions": [ ++ "versions.yml:md5,54376d32aca20e937a4ec26dac228e84" ++ ] ++ } ++ ], ++ "meta": { ++ "nf-test": "0.8.4", ++ "nextflow": "24.04.2" ++ }, ++ "timestamp": "2024-06-25T11:33:32.921739" + } + } +--- /dev/null ++++ modules/nf-core/gunzip/tests/nextflow.config +@@ -0,0 +1,5 @@ ++process { ++ withName: GUNZIP { ++ ext.prefix = { "${meta.id}.xyz" } ++ } ++} + +--- modules/nf-core/gunzip/tests/main.nf.test ++++ modules/nf-core/gunzip/tests/main.nf.test +@@ -33,4 +33,89 @@ + + } + ++ test("Should run without failures - prefix") { ++ ++ config './nextflow.config' ++ ++ when { ++ params { ++ outdir = "$outputDir" ++ } ++ process { ++ """ ++ input[0] = Channel.of([ ++ [ id: 'test' ], ++ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) ++ ] ++ ) ++ """ ++ } ++ } ++ ++ then { ++ assertAll( ++ { assert process.success }, ++ { assert snapshot(process.out).match() } ++ ) ++ } ++ ++ } ++ ++ test("Should run without failures - stub") { ++ ++ options '-stub' ++ ++ when { ++ params { ++ outdir = "$outputDir" ++ } ++ process { ++ """ ++ input[0] = Channel.of([ ++ [], ++ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) ++ ] ++ ) ++ """ ++ } ++ } ++ ++ then { ++ assertAll( ++ { assert process.success }, ++ { assert snapshot(process.out).match() } ++ ) ++ } ++ ++ } ++ ++ test("Should run without failures - prefix - stub") { ++ ++ options '-stub' ++ config './nextflow.config' ++ ++ when { ++ params { ++ outdir = "$outputDir" ++ } ++ process { ++ """ ++ input[0] = Channel.of([ ++ [ id: 'test' ], ++ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) ++ ] ++ ) ++ """ ++ } ++ } ++ ++ then { ++ assertAll( ++ { assert process.success }, ++ { assert snapshot(process.out).match() } ++ ) ++ } ++ ++ } ++ + } + +************************************************************ diff --git a/modules/nf-core/gunzip/main.nf b/modules/nf-core/gunzip/main.nf index 468a6f2..4ae609f 100644 --- a/modules/nf-core/gunzip/main.nf +++ b/modules/nf-core/gunzip/main.nf @@ -18,8 +18,11 @@ process GUNZIP { task.ext.when == null || task.ext.when script: - def args = task.ext.args ?: '' - gunzip = archive.toString() - '.gz' + def args = task.ext.args ?: '' + def extension = ( archive.toString() - '.gz' ).tokenize('.')[-1] + def name = archive.toString() - '.gz' - ".$extension" + def prefix = task.ext.prefix ?: name + gunzip = prefix + ".$extension" """ # Not calling gunzip itself because it creates files # with the original group ownership rather than the @@ -37,7 +40,11 @@ process GUNZIP { """ stub: - gunzip = archive.toString() - '.gz' + def args = task.ext.args ?: '' + def extension = ( archive.toString() - '.gz' ).tokenize('.')[-1] + def name = archive.toString() - '.gz' - ".$extension" + def prefix = task.ext.prefix ?: name + gunzip = prefix + ".$extension" """ touch $gunzip cat <<-END_VERSIONS > versions.yml diff --git a/modules/nf-core/gunzip/meta.yml b/modules/nf-core/gunzip/meta.yml index 231034f..f32973a 100644 --- a/modules/nf-core/gunzip/meta.yml +++ b/modules/nf-core/gunzip/meta.yml @@ -37,3 +37,4 @@ maintainers: - "@joseespinosa" - "@drpatelh" - "@jfy133" + - "@gallvp" diff --git a/modules/nf-core/gunzip/tests/main.nf.test b/modules/nf-core/gunzip/tests/main.nf.test index 6406008..776211a 100644 --- a/modules/nf-core/gunzip/tests/main.nf.test +++ b/modules/nf-core/gunzip/tests/main.nf.test @@ -33,4 +33,89 @@ nextflow_process { } + test("Should run without failures - prefix") { + + config './nextflow.config' + + when { + params { + outdir = "$outputDir" + } + process { + """ + input[0] = Channel.of([ + [ id: 'test' ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) + ] + ) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("Should run without failures - stub") { + + options '-stub' + + when { + params { + outdir = "$outputDir" + } + process { + """ + input[0] = Channel.of([ + [], + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) + ] + ) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("Should run without failures - prefix - stub") { + + options '-stub' + config './nextflow.config' + + when { + params { + outdir = "$outputDir" + } + process { + """ + input[0] = Channel.of([ + [ id: 'test' ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) + ] + ) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + } diff --git a/modules/nf-core/gunzip/tests/main.nf.test.snap b/modules/nf-core/gunzip/tests/main.nf.test.snap index 720fd9f..069967e 100644 --- a/modules/nf-core/gunzip/tests/main.nf.test.snap +++ b/modules/nf-core/gunzip/tests/main.nf.test.snap @@ -1,4 +1,70 @@ { + "Should run without failures - prefix - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.xyz.fastq:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + "versions.yml:md5,54376d32aca20e937a4ec26dac228e84" + ], + "gunzip": [ + [ + { + "id": "test" + }, + "test.xyz.fastq:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,54376d32aca20e937a4ec26dac228e84" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-25T11:35:10.861293" + }, + "Should run without failures - stub": { + "content": [ + { + "0": [ + [ + [ + + ], + "test_1.fastq:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + "versions.yml:md5,54376d32aca20e937a4ec26dac228e84" + ], + "gunzip": [ + [ + [ + + ], + "test_1.fastq:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,54376d32aca20e937a4ec26dac228e84" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-25T11:35:05.857145" + }, "Should run without failures": { "content": [ { @@ -26,6 +92,43 @@ ] } ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, "timestamp": "2023-10-17T15:35:37.690477896" + }, + "Should run without failures - prefix": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.xyz.fastq:md5,4161df271f9bfcd25d5845a1e220dbec" + ] + ], + "1": [ + "versions.yml:md5,54376d32aca20e937a4ec26dac228e84" + ], + "gunzip": [ + [ + { + "id": "test" + }, + "test.xyz.fastq:md5,4161df271f9bfcd25d5845a1e220dbec" + ] + ], + "versions": [ + "versions.yml:md5,54376d32aca20e937a4ec26dac228e84" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-25T11:33:32.921739" } } \ No newline at end of file diff --git a/modules/nf-core/gunzip/tests/nextflow.config b/modules/nf-core/gunzip/tests/nextflow.config new file mode 100644 index 0000000..dec7764 --- /dev/null +++ b/modules/nf-core/gunzip/tests/nextflow.config @@ -0,0 +1,5 @@ +process { + withName: GUNZIP { + ext.prefix = { "${meta.id}.xyz" } + } +} diff --git a/subworkflows/local/fasta_gff_orthofinder.nf b/subworkflows/local/fasta_gff_orthofinder.nf deleted file mode 100644 index 8d2eebe..0000000 --- a/subworkflows/local/fasta_gff_orthofinder.nf +++ /dev/null @@ -1,55 +0,0 @@ -include { FILE_GUNZIP as FASTA_GUNZIP } from '../../subworkflows/local/file_gunzip' -include { FILE_GUNZIP as GFF_GUNZIP } from '../../subworkflows/local/file_gunzip' -include { GFFREAD as EXTRACT_PROTEINS } from '../../modules/nf-core/gffread/main' -include { ORTHOFINDER } from '../../modules/nf-core/orthofinder/main' - -workflow FASTA_GFF_ORTHOFINDER { - take: - ch_pep_fasta // [ meta, fasta ] - ch_fasta // [ meta, fasta ] - ch_gff // [ meta, gff ] - - main: - ch_versions = Channel.empty() - - // SUBWORKFLOW: FILE_GUNZIP as FASTA_GUNZIP - FASTA_GUNZIP ( ch_fasta ) - - ch_fasta_unzipped = FASTA_GUNZIP.out.gunzip - ch_versions = ch_versions.mix(FASTA_GUNZIP.out.versions) - - // SUBWORKFLOW: FILE_GUNZIP as GFF_GUNZIP - GFF_GUNZIP ( ch_gff ) - - ch_gff_unzipped = GFF_GUNZIP.out.gunzip - ch_versions = ch_versions.mix(GFF_GUNZIP.out.versions) - - // MODULE: GFFREAD as EXTRACT_PROTEINS - ch_extraction_inputs = ch_gff_unzipped - | join(ch_fasta_unzipped) - - EXTRACT_PROTEINS( - ch_extraction_inputs.map { meta, gff, fasta -> [ meta, gff ] }, - ch_extraction_inputs.map { meta, gff, fasta -> fasta } - ) - - ch_versions = ch_versions.mix(EXTRACT_PROTEINS.out.versions.first()) - - // MODULE: ORTHOFINDER - ch_orthofinder_peps = EXTRACT_PROTEINS.out.gffread_fasta - | map { meta, fasta -> fasta } - | mix( - ch_pep_fasta.map { meta, fasta -> fasta } - ) - | collect - | filter { it.size() > 1 } - - ORTHOFINDER ( ch_orthofinder_peps.map { fastas -> [ [ id: 'pangene' ], fastas ] } ) - - ch_versions = ch_versions.mix(ORTHOFINDER.out.versions) - - emit: - fasta_unzipped = ch_fasta_unzipped // [ meta, fasta ] - gff_unzipped = ch_gff_unzipped // [ meta, gff ] - versions = ch_versions // [ versions.yml ] -} diff --git a/subworkflows/local/fasta_orthofinder.nf b/subworkflows/local/fasta_orthofinder.nf new file mode 100644 index 0000000..4170ddc --- /dev/null +++ b/subworkflows/local/fasta_orthofinder.nf @@ -0,0 +1,33 @@ +include { FILE_GUNZIP as FASTA_GUNZIP } from '../../subworkflows/local/file_gunzip' +include { ORTHOFINDER } from '../../modules/nf-core/orthofinder/main' + +workflow FASTA_ORTHOFINDER { + take: + ch_pep_fasta // [ meta, fasta ] + ch_external_pep_fasta // [ meta, fasta ] + + main: + ch_versions = Channel.empty() + + // SUBWORKFLOW: FILE_GUNZIP as FASTA_GUNZIP + FASTA_GUNZIP ( ch_external_pep_fasta ) + + ch_fasta_unzipped = FASTA_GUNZIP.out.gunzip + ch_versions = ch_versions.mix(FASTA_GUNZIP.out.versions) + + // MODULE: ORTHOFINDER + ch_orthofinder_peps = ch_fasta_unzipped + | map { meta, fasta -> fasta } + | mix( + ch_pep_fasta.map { meta, fasta -> fasta } + ) + | collect + | filter { it.size() > 1 } + + ORTHOFINDER ( ch_orthofinder_peps.map { fastas -> [ [ id: 'pangene' ], fastas ] } ) + + ch_versions = ch_versions.mix(ORTHOFINDER.out.versions) + + emit: + versions = ch_versions // [ versions.yml ] +} diff --git a/workflows/pangene.nf b/workflows/pangene.nf index 25f83db..4c1793a 100644 --- a/workflows/pangene.nf +++ b/workflows/pangene.nf @@ -12,7 +12,7 @@ include { GFF_MERGE_CLEANUP } from '../subworkflows/local/gf include { GFF_EGGNOGMAPPER } from '../subworkflows/local/gff_eggnogmapper' include { PURGE_NOHIT_MODELS } from '../subworkflows/local/purge_nohit_models' include { GFF_STORE } from '../subworkflows/local/gff_store' -include { FASTA_GFF_ORTHOFINDER } from '../subworkflows/local/fasta_gff_orthofinder' +include { FASTA_ORTHOFINDER } from '../subworkflows/local/fasta_orthofinder' include { FASTA_GXF_BUSCO_PLOT } from '../subworkflows/pfr/fasta_gxf_busco_plot/main' include { CUSTOM_DUMPSOFTWAREVERSIONS } from '../modules/nf-core/custom/dumpsoftwareversions' @@ -179,23 +179,13 @@ workflow PANGENE { ? "${projectDir}/assets/tsebra-default.cfg" : "${projectDir}/assets/tsebra-1form.cfg" - ch_orthofinder_mm = ! params.orthofinder_annotations + ch_orthofinder_pep = ! params.orthofinder_annotations ? Channel.empty() : Channel.fromSamplesheet('orthofinder_annotations') - | multiMap { tag, fasta, gff -> - - fasta: [ [ id: tag ], file(fasta, checkIfExists:true) ] - gff: [ [ id: tag ], file(gff, checkIfExists:true) ] + | map { tag, fasta -> + [ [ id: tag ], file(fasta, checkIfExists:true) ] } - ch_orthofinder_fasta = params.orthofinder_annotations - ? ch_orthofinder_mm.fasta - : Channel.empty() - - ch_orthofinder_gff = params.orthofinder_annotations - ? ch_orthofinder_mm.gff - : Channel.empty() - // SUBWORKFLOW: PREPARE_ASSEMBLY PREPARE_ASSEMBLY( ch_target_assembly, @@ -322,25 +312,22 @@ workflow PANGENE { ch_final_proteins = GFF_STORE.out.final_proteins ch_versions = ch_versions.mix(GFF_STORE.out.versions) - // SUBWORKFLOW: FASTA_GFF_ORTHOFINDER - FASTA_GFF_ORTHOFINDER( + // SUBWORKFLOW: FASTA_ORTHOFINDER + FASTA_ORTHOFINDER( ch_final_proteins, - ch_orthofinder_fasta, - ch_orthofinder_gff + ch_orthofinder_pep ) - ch_versions = ch_versions.mix(FASTA_GFF_ORTHOFINDER.out.versions) + ch_versions = ch_versions.mix(FASTA_ORTHOFINDER.out.versions) // SUBWORKFLOW: FASTA_GXF_BUSCO_PLOT ch_busco_fasta = params.busco_skip ? Channel.empty() : ch_valid_target_assembly - | mix ( FASTA_GFF_ORTHOFINDER.out.fasta_unzipped ) ch_busco_gff = params.busco_skip ? Channel.empty() : ch_final_gff - | mix ( FASTA_GFF_ORTHOFINDER.out.gff_unzipped ) FASTA_GXF_BUSCO_PLOT( ch_busco_fasta, From 70f34d0bb1c93f85096bd922bcbdde4e0e986963 Mon Sep 17 00:00:00 2001 From: Usman Rashid Date: Tue, 25 Jun 2024 15:26:21 +1200 Subject: [PATCH 19/87] Renamed braker_allow_isoforms param to allow_isoforms --- CHANGELOG.md | 3 ++- docs/parameters.md | 2 +- nextflow.config | 2 +- nextflow_schema.json | 10 +++++----- subworkflows/local/purge_braker_models.nf | 6 +++--- workflows/pangene.nf | 4 ++-- 6 files changed, 14 insertions(+), 13 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ae57106..07fc43b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## 0.4 - [24-Jun-2024] +## 0.4 - [25-Jun-2024] ### `Added` @@ -35,6 +35,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 1. Renamed `external_protein_fastas` param to `protein_evidence` 2. Renamed `fastq` param to `rna_evidence` +3. Renamed `braker_allow_isoforms` param to `allow_isoforms` ## 0.3.3 - [18-Jun-2024] diff --git a/docs/parameters.md b/docs/parameters.md index 0bff10a..47056de 100644 --- a/docs/parameters.md +++ b/docs/parameters.md @@ -51,9 +51,9 @@ A NextFlow pipeline for pan-genome annotation | Parameter | Description | Type | Default | Required | Hidden | | --------------------------- | --------------------------------------------------------------------------------- | --------- | ------- | -------- | ------ | | `braker_extra_args` | Extra arguments for BRAKER | `string` | | | | -| `braker_allow_isoforms` | Allow multiple isoforms for gene models | `boolean` | True | | | | `liftoff_coverage` | Liftoff coverage parameter | `number` | 0.9 | | | | `liftoff_identity` | Liftoff identity parameter | `number` | 0.9 | | | +| `allow_isoforms` | Allow multiple isoforms for gene models | `boolean` | True | | | | `eggnogmapper_evalue` | Only report alignments below or equal the e-value threshold | `number` | 1e-05 | | | | `eggnogmapper_pident` | Only report alignments above or equal to the given percentage of identity (0-100) | `integer` | 35 | | | | `eggnogmapper_purge_nohits` | Purge transcripts which do not have a hit against eggnog | `boolean` | | | | diff --git a/nextflow.config b/nextflow.config index 670dcd9..21ed0bc 100644 --- a/nextflow.config +++ b/nextflow.config @@ -35,9 +35,9 @@ params { // Annotation options braker_extra_args = "" - braker_allow_isoforms = true liftoff_coverage = 0.9 liftoff_identity = 0.9 + allow_isoforms = true eggnogmapper_evalue = 0.00001 eggnogmapper_pident = 35 eggnogmapper_purge_nohits = false diff --git a/nextflow_schema.json b/nextflow_schema.json index 62bccfb..cd177b1 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -181,11 +181,6 @@ "type": "string", "description": "Extra arguments for BRAKER" }, - "braker_allow_isoforms": { - "type": "boolean", - "default": true, - "description": "Allow multiple isoforms for gene models" - }, "liftoff_coverage": { "type": "number", "default": 0.9, @@ -198,6 +193,11 @@ "default": 0.9, "description": "Liftoff identity parameter" }, + "allow_isoforms": { + "type": "boolean", + "default": true, + "description": "Allow multiple isoforms for gene models" + }, "eggnogmapper_evalue": { "type": "number", "default": 1e-5, diff --git a/subworkflows/local/purge_braker_models.nf b/subworkflows/local/purge_braker_models.nf index a213d66..03811e5 100644 --- a/subworkflows/local/purge_braker_models.nf +++ b/subworkflows/local/purge_braker_models.nf @@ -13,7 +13,7 @@ workflow PURGE_BRAKER_MODELS { braker_hints // [ meta, gff ] liftoff_gff3 // [ meta, gff3 ] tsebra_config // val(tsebra_config) - braker_allow_isoforms // val(true|false) + allow_isoforms // val(true|false) main: ch_versions = Channel.empty() @@ -117,8 +117,8 @@ workflow PURGE_BRAKER_MODELS { [ [ id: file.baseName ], file ] } - // COLLECTFILE: Iso-form kill list if braker_allow_isoforms=true - ch_post_tsebra_kill_list = braker_allow_isoforms + // COLLECTFILE: Iso-form kill list if allow_isoforms=true + ch_post_tsebra_kill_list = allow_isoforms ? Channel.empty() : ch_tsebra_gff | map { meta, gff -> diff --git a/workflows/pangene.nf b/workflows/pangene.nf index 4c1793a..fbf9c46 100644 --- a/workflows/pangene.nf +++ b/workflows/pangene.nf @@ -175,7 +175,7 @@ workflow PANGENE { ? ch_liftoff_mm.gff : Channel.empty() - val_tsebra_config = params.braker_allow_isoforms + val_tsebra_config = params.allow_isoforms ? "${projectDir}/assets/tsebra-default.cfg" : "${projectDir}/assets/tsebra-1form.cfg" @@ -265,7 +265,7 @@ workflow PANGENE { ch_braker_hints, ch_liftoff_gff3, val_tsebra_config, - params.braker_allow_isoforms + params.allow_isoforms ) ch_braker_purged_gff = PURGE_BRAKER_MODELS.out.braker_purged_gff From 587c16980a755ccef025f148322471dd785caa2b Mon Sep 17 00:00:00 2001 From: Usman Rashid Date: Tue, 25 Jun 2024 16:24:35 +1200 Subject: [PATCH 20/87] Added param to turn on/off strict model purging by TSEBRA --- CHANGELOG.md | 1 + assets/tsebra-default.cfg | 16 ----------- .../{tsebra-1form.cfg => tsebra-template.cfg} | 10 +++---- docs/parameters.md | 21 ++++++++------- nextflow.config | 3 ++- nextflow_schema.json | 9 ++++++- subworkflows/local/purge_braker_models.nf | 4 +-- workflows/pangene.nf | 27 ++++++++++++++++--- 8 files changed, 52 insertions(+), 39 deletions(-) delete mode 100644 assets/tsebra-default.cfg rename assets/{tsebra-1form.cfg => tsebra-template.cfg} (75%) diff --git a/CHANGELOG.md b/CHANGELOG.md index 07fc43b..184911d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,6 +19,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 10. Added `GXF_FASTA_AGAT_SPADDINTRONS_SPEXTRACTSEQUENCES` sub-workflow for splice type statistics [#11](https://github.com/PlantandFoodResearch/pangene/issues/11) 11. Added a local patch for `GUNZIP` 12. Changed `orthofinder_annotations` from FASTA/GFF to protein FASTA [#43](https://github.com/PlantandFoodResearch/pangene/issues/43) +13. Added param `enforce_full_intron_support` to turn on/off strict model purging by TSEBRA [#21](https://github.com/PlantandFoodResearch/pangene/issues/21) ### `Fixed` diff --git a/assets/tsebra-default.cfg b/assets/tsebra-default.cfg deleted file mode 100644 index 8ec1a98..0000000 --- a/assets/tsebra-default.cfg +++ /dev/null @@ -1,16 +0,0 @@ -# Weight for each hint source -# Values have to be >= 0 -P 1 -E 20 -C 1 -M 1 -# Required fraction of supported introns or supported start/stop-codons for a transcript -# Values have to be in [0,1] -intron_support 1.0 -stasto_support 2 -# Allowed difference for each feature -# Values have to be in [0,1] -e_1 0.1 -e_2 0.5 -e_3 0.05 -e_4 0.2 diff --git a/assets/tsebra-1form.cfg b/assets/tsebra-template.cfg similarity index 75% rename from assets/tsebra-1form.cfg rename to assets/tsebra-template.cfg index 2b076fa..fa06c50 100644 --- a/assets/tsebra-1form.cfg +++ b/assets/tsebra-template.cfg @@ -6,11 +6,11 @@ C 1 M 1 # Required fraction of supported introns or supported start/stop-codons for a transcript # Values have to be in [0,1] -intron_support 1.0 +intron_support PARAM_INTRON_SUPPORT stasto_support 2 # Allowed difference for each feature # Values have to be in [0,1] -e_1 0 -e_2 0 -e_3 0 -e_4 0 +e_1 PARAM_E1 +e_2 PARAM_E2 +e_3 PARAM_E3 +e_4 PARAM_E4 diff --git a/docs/parameters.md b/docs/parameters.md index 47056de..17d04e3 100644 --- a/docs/parameters.md +++ b/docs/parameters.md @@ -10,7 +10,7 @@ A NextFlow pipeline for pan-genome annotation | `protein_evidence` | Protein evidence provided as fasta files listed in a text sheet | `string` | | True | | | `eggnogmapper_db_dir` | Eggnogmapper database directory | `string` | | True | | | `eggnogmapper_tax_scope` | Eggnogmapper taxonomy scopre. Eukaryota: 2759, Viridiplantae: 33090, Archaea: 2157, Bacteria: 2, root: 1 | `integer` | | True | | -| `fastq` | FASTQ samples listed in a CSV sheet | `string` | | | | +| `rna_evidence` | FASTQ/BAM samples listed in a CSV sheet | `string` | | | | | `liftoff_annotations` | Reference annotations listed in a CSV sheet | `string` | | | | | `orthofinder_annotations` | Additional annotations for orthology listed in a CSV sheet | `string` | | | | | `outdir` | The output directory where the results will be saved | `string` | ./results | True | | @@ -48,15 +48,16 @@ A NextFlow pipeline for pan-genome annotation ## Annotation options -| Parameter | Description | Type | Default | Required | Hidden | -| --------------------------- | --------------------------------------------------------------------------------- | --------- | ------- | -------- | ------ | -| `braker_extra_args` | Extra arguments for BRAKER | `string` | | | | -| `liftoff_coverage` | Liftoff coverage parameter | `number` | 0.9 | | | -| `liftoff_identity` | Liftoff identity parameter | `number` | 0.9 | | | -| `allow_isoforms` | Allow multiple isoforms for gene models | `boolean` | True | | | -| `eggnogmapper_evalue` | Only report alignments below or equal the e-value threshold | `number` | 1e-05 | | | -| `eggnogmapper_pident` | Only report alignments above or equal to the given percentage of identity (0-100) | `integer` | 35 | | | -| `eggnogmapper_purge_nohits` | Purge transcripts which do not have a hit against eggnog | `boolean` | | | | +| Parameter | Description | Type | Default | Required | Hidden | +| ----------------------------- | --------------------------------------------------------------------------------- | --------- | ------- | -------- | ------ | +| `braker_extra_args` | Extra arguments for BRAKER | `string` | | | | +| `liftoff_coverage` | Liftoff coverage parameter | `number` | 0.9 | | | +| `liftoff_identity` | Liftoff identity parameter | `number` | 0.9 | | | +| `allow_isoforms` | Allow multiple isoforms for gene models | `boolean` | True | | | +| `enforce_full_intron_support` | Require every model to have external evidence for all its introns | `boolean` | True | | | +| `eggnogmapper_evalue` | Only report alignments below or equal the e-value threshold | `number` | 1e-05 | | | +| `eggnogmapper_pident` | Only report alignments above or equal to the given percentage of identity (0-100) | `integer` | 35 | | | +| `eggnogmapper_purge_nohits` | Purge transcripts which do not have a hit against eggnog | `boolean` | | | | ## Evaluation options diff --git a/nextflow.config b/nextflow.config index 21ed0bc..2b6ed19 100644 --- a/nextflow.config +++ b/nextflow.config @@ -31,13 +31,14 @@ params { star_max_intron_length = 16000 star_align_extra_args = "" star_save_outputs = false - save_cat_bam = true + save_cat_bam = false // Annotation options braker_extra_args = "" liftoff_coverage = 0.9 liftoff_identity = 0.9 allow_isoforms = true + enforce_full_intron_support = true eggnogmapper_evalue = 0.00001 eggnogmapper_pident = 35 eggnogmapper_purge_nohits = false diff --git a/nextflow_schema.json b/nextflow_schema.json index cd177b1..1fa3c12 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -196,7 +196,14 @@ "allow_isoforms": { "type": "boolean", "default": true, - "description": "Allow multiple isoforms for gene models" + "description": "Allow multiple isoforms for gene models", + "fa_icon": "fas fa-question-circle" + }, + "enforce_full_intron_support": { + "type": "boolean", + "default": true, + "fa_icon": "fas fa-question-circle", + "description": "Require every model to have external evidence for all its introns" }, "eggnogmapper_evalue": { "type": "number", diff --git a/subworkflows/local/purge_braker_models.nf b/subworkflows/local/purge_braker_models.nf index 03811e5..2d5a865 100644 --- a/subworkflows/local/purge_braker_models.nf +++ b/subworkflows/local/purge_braker_models.nf @@ -12,7 +12,7 @@ workflow PURGE_BRAKER_MODELS { braker_gff3 // [ meta, gff3 ] braker_hints // [ meta, gff ] liftoff_gff3 // [ meta, gff3 ] - tsebra_config // val(tsebra_config) + tsebra_config // Channel: [ cfg ] allow_isoforms // val(true|false) main: @@ -56,7 +56,7 @@ workflow PURGE_BRAKER_MODELS { // MODULE: TSEBRA ch_tsebra_inputs = ch_tsebra_input_gtf | join(braker_hints) - | combine(Channel.fromPath(tsebra_config)) + | combine(tsebra_config) TSEBRA( ch_tsebra_inputs.map { meta, gtf, gff, cfg -> [ meta, [ gtf ] ] }, ch_tsebra_inputs.map { meta, gtf, gff, cfg -> [ gff ] }, diff --git a/workflows/pangene.nf b/workflows/pangene.nf index fbf9c46..ea041d9 100644 --- a/workflows/pangene.nf +++ b/workflows/pangene.nf @@ -175,9 +175,28 @@ workflow PANGENE { ? ch_liftoff_mm.gff : Channel.empty() - val_tsebra_config = params.allow_isoforms - ? "${projectDir}/assets/tsebra-default.cfg" - : "${projectDir}/assets/tsebra-1form.cfg" + ch_tsebra_config = Channel.of ( file("${projectDir}/assets/tsebra-template.cfg", checkIfExists: true) ) + | map { cfg -> + def param_intron_support = params.enforce_full_intron_support ? '1.0' : '0.0' + + def param_e1 = params.allow_isoforms ? '0.1' : '0.0' + def param_e2 = params.allow_isoforms ? '0.5' : '0.0' + def param_e3 = params.allow_isoforms ? '0.05' : '0.0' + def param_e4 = params.allow_isoforms ? '0.2' : '0.0' + + [ + 'tsebra-config.cfg', + cfg + .text + .replace('PARAM_INTRON_SUPPORT', param_intron_support) + .replace('PARAM_E1', param_e1) + .replace('PARAM_E2', param_e2) + .replace('PARAM_E3', param_e3) + .replace('PARAM_E4', param_e4) + ] + } + | collectFile + ch_orthofinder_pep = ! params.orthofinder_annotations ? Channel.empty() @@ -264,7 +283,7 @@ workflow PANGENE { ch_braker_gff3, ch_braker_hints, ch_liftoff_gff3, - val_tsebra_config, + ch_tsebra_config, params.allow_isoforms ) From 183e5d036a3aa9e2ccf580526379538b16a19545 Mon Sep 17 00:00:00 2001 From: Usman Rashid Date: Wed, 26 Jun 2024 12:08:27 +1200 Subject: [PATCH 21/87] Added top level subworkflow paths to module config blocks --- conf/modules.config | 138 +++++++++++++++++++++----------------------- 1 file changed, 67 insertions(+), 71 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index 9b92920..3b1970d 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -1,5 +1,5 @@ -process { - withName: 'EDTA_EDTA' { +process { // SUBWORKFLOW: PREPARE_ASSEMBLY + withName: '.*:PREPARE_ASSEMBLY:FASTA_EDTA_LAI:EDTA_EDTA' { ext.args = [ params.edta_is_sensitive ? "--sensitive 1" : "--sensitive 0", "--anno 0", @@ -14,7 +14,7 @@ process { ] } - withName: 'REPEATMODELER_REPEATMODELER' { + withName: '.*:PREPARE_ASSEMBLY:REPEATMODELER_REPEATMODELER' { ext.args = '-LTRStruct' publishDir = [ @@ -25,7 +25,7 @@ process { ] } - withName: 'REPEATMASKER' { + withName: '.*:PREPARE_ASSEMBLY:REPEATMASKER' { ext.args = [ "-no_is", "-xsmall", @@ -40,13 +40,13 @@ process { } } -if(!params.skip_fastqc) { - process { - withName: '.*:FASTQ_FASTQC_UMITOOLS_FASTP:FASTQC_RAW' { +process { // SUBWORKFLOW: PREPROCESS_RNASEQ + if(!params.skip_fastqc) { + withName: '.*:PREPROCESS_RNASEQ:FASTQ_FASTQC_UMITOOLS_FASTP:FASTQC_RAW' { ext.args = '--quiet' } - withName: '.*:FASTQ_FASTQC_UMITOOLS_FASTP:FASTQC_TRIM' { + withName: '.*:PREPROCESS_RNASEQ:FASTQ_FASTQC_UMITOOLS_FASTP:FASTQC_TRIM' { ext.args = '--quiet' publishDir = [ path: { "${params.outdir}/fastp/fastqc" }, @@ -55,11 +55,9 @@ if(!params.skip_fastqc) { ] } } -} -if(!params.skip_fastp) { - process { - withName: '.*:FASTQ_FASTQC_UMITOOLS_FASTP:FASTP' { + if(!params.skip_fastp) { + withName: '.*:PREPROCESS_RNASEQ:FASTQ_FASTQC_UMITOOLS_FASTP:FASTP' { ext.args = params.extra_fastp_args ?: '' publishDir = [ [ @@ -86,15 +84,13 @@ if(!params.skip_fastp) { ] } } -} -if (params.remove_ribo_rna) { - process { - withName: SORTMERNA_INDEX { + if (params.remove_ribo_rna) { + withName: '.*:PREPROCESS_RNASEQ:SORTMERNA_INDEX' { ext.args = '--index 1' } - withName: SORTMERNA_READS { + withName: '.*:PREPROCESS_RNASEQ:SORTMERNA_READS' { ext.args = '--index 0 --num_alignments 1 -v' publishDir = [ [ @@ -113,8 +109,8 @@ if (params.remove_ribo_rna) { } } -process { - withName: STAR_ALIGN { +process { // SUBWORKFLOW: ALIGN_RNASEQ + withName: '.*:ALIGN_RNASEQ:STAR_ALIGN' { ext.args = [ "--outSAMstrandField intronMotif", "--outSAMtype BAM SortedByCoordinate", @@ -139,8 +135,10 @@ process { enabled: params.save_cat_bam ] } +} - withName: BRAKER3 { +process { // SUBWORKFLOW: FASTA_BRAKER3 + withName: '.*:FASTA_BRAKER3:BRAKER3' { ext.args = [ "--gff3", params.braker_extra_args ? params.braker_extra_args.split("\\s(?=--)") : '' @@ -154,53 +152,47 @@ process { } } -if(params.liftoff_annotations) { - process { - withName: LIFTOFF { - ext.args = [ - '-exclude_partial', - '-copies', - '-polish', - "-a $params.liftoff_coverage", - "-s $params.liftoff_identity" - ].join(' ').trim() - } +process { // SUBWORKFLOW: FASTA_LIFTOFF + withName: '.*:FASTA_LIFTOFF:LIFTOFF' { + ext.args = [ + '-exclude_partial', + '-copies', + '-polish', + "-a $params.liftoff_coverage", + "-s $params.liftoff_identity" + ].join(' ').trim() + } - withName: '.*:FASTA_LIFTOFF:GFFREAD_BEFORE_LIFTOFF' { - ext.args = '--no-pseudo --keep-genes' - } + withName: '.*:FASTA_LIFTOFF:GFFREAD_BEFORE_LIFTOFF' { + ext.args = '--no-pseudo --keep-genes' + } - withName: MERGE_LIFTOFF_ANNOTATIONS { - ext.prefix = { "${meta.id}.merged.liftoffs" } - } + withName: '.*:FASTA_LIFTOFF:MERGE_LIFTOFF_ANNOTATIONS' { + ext.prefix = { "${meta.id}.merged.liftoffs" } + } - withName: '.*:FASTA_LIFTOFF:AGAT_SPFILTERFEATUREFROMKILLLIST' { - ext.prefix = { "${meta.id}.invalid.orf.purged" } - } + withName: '.*:FASTA_LIFTOFF:AGAT_SPFILTERFEATUREFROMKILLLIST' { + ext.prefix = { "${meta.id}.invalid.orf.purged" } + } - withName: '.*:FASTA_LIFTOFF:GFFREAD_AFTER_LIFTOFF' { - ext.prefix = { "${meta.id}.liftoff" } - ext.args = '--keep-genes' - } + withName: '.*:FASTA_LIFTOFF:GFFREAD_AFTER_LIFTOFF' { + ext.prefix = { "${meta.id}.liftoff" } + ext.args = '--keep-genes' } } -process { +process { // SUBWORKFLOW: PURGE_BRAKER_MODELS - withName: 'AGAT_CONVERTSPGFF2GTF' { + withName: '.*:PURGE_BRAKER_MODELS:AGAT_CONVERTSPGFF2GTF' { ext.args = '--gtf_version relax' } - withName: 'KILL_TSEBRA_ISOFORMS' { + withName: '.*:PURGE_BRAKER_MODELS:KILL_TSEBRA_ISOFORMS' { ext.prefix = { "${meta.id}.1form" } } - - withName: 'AGAT_SPFILTERFEATUREFROMKILLLIST' { - ext.prefix = { "${meta.id}.purged" } - } } -process { +process { // SUBWORKFLOW: GFF_MERGE_CLEANUP withName: '.*:GFF_MERGE_CLEANUP:AGAT_SPMERGEANNOTATIONS' { ext.prefix = { "${meta.id}.liftoff.braker" } } @@ -210,12 +202,12 @@ process { } } -process { - withName: GFF2FASTA_FOR_EGGNOGMAPPER { +process { // SUBWORKFLOW: GFF_EGGNOGMAPPER + withName: '.*:GFF_EGGNOGMAPPER:GFF2FASTA_FOR_EGGNOGMAPPER' { ext.args = '-y' } - withName: EGGNOGMAPPER { + withName: '.*:GFF_EGGNOGMAPPER:EGGNOGMAPPER' { ext.args = [ "--evalue $params.eggnogmapper_evalue", "--pident $params.eggnogmapper_pident", @@ -233,13 +225,13 @@ process { } } -process { +process { // SUBWORKFLOW: PURGE_NOHIT_MODELS withName: '.*:PURGE_NOHIT_MODELS:AGAT_SPFILTERFEATUREFROMKILLLIST' { ext.prefix = { "${meta.id}.nohits.purged" } } } -process { +process { // SUBWORKFLOW: GFF_STORE withName: '.*:GFF_STORE:FINAL_GFF_CHECK' { ext.args = '-tidy -retainids -sort' @@ -262,24 +254,13 @@ process { } } -process { +process { // SUBWORKFLOW: FASTA_ORTHOFINDER withName: '.*:FASTA_ORTHOFINDER:FASTA_GUNZIP:GUNZIP' { ext.prefix = { "${meta.id}.pep" } } } -process { - withName: 'CUSTOM_DUMPSOFTWAREVERSIONS' { - publishDir = [ - path: "$params.outdir/pipeline_info", - pattern: "software_versions.yml", - mode: "copy", - enabled: true - ] - } -} - -process { +process { // SUBWORKFLOW: FASTA_GXF_BUSCO_PLOT withName: '.*:FASTA_GXF_BUSCO_PLOT:BUSCO_ASSEMBLY' { ext.args = '--metaeuk' publishDir = [ @@ -323,8 +304,23 @@ process { } } -process { +process { // SUBWORKFLOW: GXF_FASTA_AGAT_SPADDINTRONS_SPEXTRACTSEQUENCES withName: '.*:GXF_FASTA_AGAT_SPADDINTRONS_SPEXTRACTSEQUENCES:AGAT_SPEXTRACTSEQUENCES' { ext.args = '-t intron' } } + +process { // Universal + withName: AGAT_SPFILTERFEATUREFROMKILLLIST { + ext.prefix = { "${meta.id}.purged" } + } + + withName: CUSTOM_DUMPSOFTWAREVERSIONS { + publishDir = [ + path: "$params.outdir/pipeline_info", + pattern: "software_versions.yml", + mode: "copy", + enabled: true + ] + } +} From 088c3d6b12b2a4aa1d7da88b7577dfaa7b0318b8 Mon Sep 17 00:00:00 2001 From: Usman Rashid Date: Wed, 26 Jun 2024 12:32:21 +1200 Subject: [PATCH 22/87] Refactored GFF_TSEBRA_SPFILTERFEATUREFROMKILLLIST subworkflow --- conf/modules.config | 4 +- .../gff_tsebra_spfilterfeaturefromkilllist.nf | 174 ++++++++++++++++++ subworkflows/local/purge_braker_models.nf | 164 +---------------- 3 files changed, 185 insertions(+), 157 deletions(-) create mode 100644 subworkflows/local/gff_tsebra_spfilterfeaturefromkilllist.nf diff --git a/conf/modules.config b/conf/modules.config index 3b1970d..d36799c 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -183,11 +183,11 @@ process { // SUBWORKFLOW: FASTA_LIFTOFF process { // SUBWORKFLOW: PURGE_BRAKER_MODELS - withName: '.*:PURGE_BRAKER_MODELS:AGAT_CONVERTSPGFF2GTF' { + withName: '.*:PURGE_BRAKER_MODELS:GFF_TSEBRA_SPFILTERFEATUREFROMKILLLIST:AGAT_CONVERTSPGFF2GTF' { ext.args = '--gtf_version relax' } - withName: '.*:PURGE_BRAKER_MODELS:KILL_TSEBRA_ISOFORMS' { + withName: '.*:PURGE_BRAKER_MODELS:GFF_TSEBRA_SPFILTERFEATUREFROMKILLLIST:KILL_TSEBRA_ISOFORMS' { ext.prefix = { "${meta.id}.1form" } } } diff --git a/subworkflows/local/gff_tsebra_spfilterfeaturefromkilllist.nf b/subworkflows/local/gff_tsebra_spfilterfeaturefromkilllist.nf new file mode 100644 index 0000000..3955bd9 --- /dev/null +++ b/subworkflows/local/gff_tsebra_spfilterfeaturefromkilllist.nf @@ -0,0 +1,174 @@ +include { AGAT_CONVERTSPGFF2GTF } from '../../modules/nf-core/agat/convertspgff2gtf/main' +include { TSEBRA } from '../../modules/nf-core/tsebra/main' +include { AGAT_CONVERTSPGXF2GXF } from '../../modules/nf-core/agat/convertspgxf2gxf/main' +include { AGAT_SPFILTERFEATUREFROMKILLLIST as KILL_TSEBRA_ISOFORMS } from '../../modules/pfr/agat/spfilterfeaturefromkilllist/main' + +workflow GFF_TSEBRA_SPFILTERFEATUREFROMKILLLIST { + + take: + input_gff3 // [ meta, gff3 ] + braker_hints // [ meta, gff ] + tsebra_config // Channel: [ cfg ] + allow_isoforms // val(true|false) + + main: + ch_versions = Channel.empty() + + // MODULE: AGAT_CONVERTSPGFF2GTF + AGAT_CONVERTSPGFF2GTF ( input_gff3 ) + + ch_input_gtf = AGAT_CONVERTSPGFF2GTF.out.output_gtf + ch_versions = ch_versions.mix(AGAT_CONVERTSPGFF2GTF.out.versions.first()) + + // COLLECTFILE: Prepare for TSEBRA + ch_tsebra_input_gtf = ch_input_gtf + | map { meta, gtf -> + + def lines = gtf.readLines() + .collect { line -> + if ( line.startsWith('#') ) { return line } + + def cols = line.split('\t') + def feat = cols[2] + + if ( ! ( feat in [ 'gene', 'transcript', 'mRNA' ] ) ) { return line } + + def atts = cols[8] + def matches = atts =~ /ID ([^;]*)/ + def id = matches[0][1] + + def feat_format = ( feat == 'mRNA' ) ? 'transcript' : feat + + return ( cols[0..1] + [ feat_format ] + cols[3..7] + [ id ] ).join('\t') + }.join('\n') + + [ "${meta.id}.clean.gtf" ] + [ lines ] + } + | collectFile(newLine: true) + | map { file -> + [ [ id: file.baseName.replace(".clean", "") ], file ] + } + + // MODULE: TSEBRA + ch_tsebra_inputs = ch_tsebra_input_gtf + | join(braker_hints) + | combine(tsebra_config) + TSEBRA( + ch_tsebra_inputs.map { meta, gtf, gff, cfg -> [ meta, [ gtf ] ] }, + ch_tsebra_inputs.map { meta, gtf, gff, cfg -> [ gff ] }, + [], + ch_tsebra_inputs.map { meta, gtf, gff, cfg -> cfg } + ) + + ch_tsebra_gtf = TSEBRA.out.tsebra_gtf + ch_versions = ch_versions.mix(TSEBRA.out.versions.first()) + + // COLLECTFILE: Format TSEBRA output + ch_tsebra_formatted_gtf = ch_tsebra_gtf + | map { meta, gtf -> + + def lines = gtf.readLines() + .collect { line -> + if ( line.startsWith('#') ) { return line } + + def cols = line.split('\t') + def atts_r = '' + // Remove attributes and use AGAT_CONVERTSPGXF2GXF + // to create attributes based on sequential layout + + return ( cols[0..7] + [ atts_r ] ).join('\t') + }.join('\n') + + [ "${meta.id}.gtf" ] + [ lines ] + } + | collectFile(newLine: true) + | map { file -> + [ [ id: file.baseName ], file ] + } + + // MODULE: AGAT_CONVERTSPGXF2GXF + AGAT_CONVERTSPGXF2GXF ( ch_tsebra_formatted_gtf ) + + ch_tsebra_formatted_gff = AGAT_CONVERTSPGXF2GXF.out.output_gff + ch_versions = ch_versions.mix(AGAT_CONVERTSPGXF2GXF.out.versions.first()) + + // COLLECTFILE: Format AGAT_CONVERTSPGXF2GXF output + ch_tsebra_gff = ch_tsebra_formatted_gff + | map { meta, gff -> + + def lines = gff.readLines() + .collect { line -> + if ( line.startsWith('#') ) { return line } + + def cols = line.split('\t') + def atts_r = cols[8].replaceAll('-', '').replaceAll('agat', '') + + return ( cols[0..7] + [ atts_r ] ).join('\t') + }.join('\n') + + [ "${meta.id}.gff3" ] + [ lines ] + } + | collectFile(newLine: true) + | map { file -> + [ [ id: file.baseName ], file ] + } + + // COLLECTFILE: Iso-form kill list if allow_isoforms=true + ch_post_tsebra_kill_list = allow_isoforms + ? Channel.empty() + : ch_tsebra_gff + | map { meta, gff -> + def kill_list = gff.readLines() + .findAll { line -> + if ( line.startsWith('#') ) { return false } + + def cols = line.split('\t') + def feat = cols[2] + + ( feat == 'mRNA' || feat == 'transcript' ) + } + .collect { line -> + def cols = line.split('\t') + def atts = cols[8] + def tx_id = ( atts =~ /ID=([^;]*)/ )[0][1] + def g_id = ( atts =~ /Parent=([^;]*)/ )[0][1] + + [ g_id, tx_id ] + } + .groupBy { g_id, tx_id -> g_id } + .findAll { key, value -> value.size() > 1 } + .collect { key, value -> + value.collect { it[1] }[1..-1] + } + .flatten() + .join('\n') + + [ "${meta.id}.kill.list.txt" ] + [ kill_list ] + } + | collectFile(newLine: true) + | map { file -> + [ [ id: file.baseName.replace('.kill.list', '') ], file ] + } + + // MODULE: AGAT_SPFILTERFEATUREFROMKILLLIST as KILL_TSEBRA_ISOFORMS + ch_tsebra_kill_inputs = ch_tsebra_gff + | join(ch_post_tsebra_kill_list) + + + KILL_TSEBRA_ISOFORMS( + ch_tsebra_kill_inputs.map { meta, gff, kill -> [ meta, gff ] }, + ch_tsebra_kill_inputs.map { meta, gff, kill -> kill }, + [] // default config + ) + + ch_tsebra_killed_gff = ch_tsebra_gff + | join(KILL_TSEBRA_ISOFORMS.out.gff, remainder: true) + | map { meta, tsebra, killed -> + if ( tsebra ) { [ meta, killed ?: tsebra ] } + } + ch_versions = ch_versions.mix(KILL_TSEBRA_ISOFORMS.out.versions.first()) + + emit: + tsebra_killed_gff = ch_tsebra_killed_gff // [ val(meta), gff ] + versions = ch_versions // [ versions.yml ] +} diff --git a/subworkflows/local/purge_braker_models.nf b/subworkflows/local/purge_braker_models.nf index 2d5a865..905efd1 100644 --- a/subworkflows/local/purge_braker_models.nf +++ b/subworkflows/local/purge_braker_models.nf @@ -1,7 +1,4 @@ -include { AGAT_CONVERTSPGFF2GTF } from '../../modules/nf-core/agat/convertspgff2gtf/main' -include { TSEBRA } from '../../modules/nf-core/tsebra/main' -include { AGAT_CONVERTSPGXF2GXF } from '../../modules/nf-core/agat/convertspgxf2gxf/main' -include { AGAT_SPFILTERFEATUREFROMKILLLIST as KILL_TSEBRA_ISOFORMS } from '../../modules/pfr/agat/spfilterfeaturefromkilllist/main' +include { GFF_TSEBRA_SPFILTERFEATUREFROMKILLLIST } from '../../subworkflows/local/gff_tsebra_spfilterfeaturefromkilllist' include { GFFCOMPARE as COMPARE_BRAKER_TO_LIFTOFF } from '../../modules/nf-core/gffcompare/main' include { AGAT_SPFILTERFEATUREFROMKILLLIST } from '../../modules/pfr/agat/spfilterfeaturefromkilllist/main' include { GFFCOMPARE as VALIDATE_PURGING_BY_AGAT } from '../../modules/nf-core/gffcompare/main' @@ -18,159 +15,16 @@ workflow PURGE_BRAKER_MODELS { main: ch_versions = Channel.empty() - // MODULE: AGAT_CONVERTSPGFF2GTF - AGAT_CONVERTSPGFF2GTF ( braker_gff3 ) - - ch_braker_gtf = AGAT_CONVERTSPGFF2GTF.out.output_gtf - ch_versions = ch_versions.mix(AGAT_CONVERTSPGFF2GTF.out.versions.first()) - - // COLLECTFILE: Prepare for TSEBRA - ch_tsebra_input_gtf = ch_braker_gtf - | map { meta, gtf -> - - def lines = gtf.readLines() - .collect { line -> - if ( line.startsWith('#') ) { return line } - - def cols = line.split('\t') - def feat = cols[2] - - if ( ! ( feat in [ 'gene', 'transcript', 'mRNA' ] ) ) { return line } - - def atts = cols[8] - def matches = atts =~ /ID ([^;]*)/ - def id = matches[0][1] - - def feat_format = ( feat == 'mRNA' ) ? 'transcript' : feat - - return ( cols[0..1] + [ feat_format ] + cols[3..7] + [ id ] ).join('\t') - }.join('\n') - - [ "${meta.id}.clean.gtf" ] + [ lines ] - } - | collectFile(newLine: true) - | map { file -> - [ [ id: file.baseName.replace(".clean", "") ], file ] - } - - // MODULE: TSEBRA - ch_tsebra_inputs = ch_tsebra_input_gtf - | join(braker_hints) - | combine(tsebra_config) - TSEBRA( - ch_tsebra_inputs.map { meta, gtf, gff, cfg -> [ meta, [ gtf ] ] }, - ch_tsebra_inputs.map { meta, gtf, gff, cfg -> [ gff ] }, - [], - ch_tsebra_inputs.map { meta, gtf, gff, cfg -> cfg } + // SUBWORKFLOW: GFF_TSEBRA_SPFILTERFEATUREFROMKILLLIST + GFF_TSEBRA_SPFILTERFEATUREFROMKILLLIST( + braker_gff3, + braker_hints, + tsebra_config, + allow_isoforms ) - ch_tsebra_gtf = TSEBRA.out.tsebra_gtf - ch_versions = ch_versions.mix(TSEBRA.out.versions.first()) - - // COLLECTFILE: Format TSEBRA output - ch_tsebra_formatted_gtf = ch_tsebra_gtf - | map { meta, gtf -> - - def lines = gtf.readLines() - .collect { line -> - if ( line.startsWith('#') ) { return line } - - def cols = line.split('\t') - def atts_r = '' - // Remove attributes and use AGAT_CONVERTSPGXF2GXF - // to create attributes based on sequential layout - - return ( cols[0..7] + [ atts_r ] ).join('\t') - }.join('\n') - - [ "${meta.id}.gtf" ] + [ lines ] - } - | collectFile(newLine: true) - | map { file -> - [ [ id: file.baseName ], file ] - } - - // MODULE: AGAT_CONVERTSPGXF2GXF - AGAT_CONVERTSPGXF2GXF ( ch_tsebra_formatted_gtf ) - - ch_tsebra_formatted_gff = AGAT_CONVERTSPGXF2GXF.out.output_gff - ch_versions = ch_versions.mix(AGAT_CONVERTSPGXF2GXF.out.versions.first()) - - // COLLECTFILE: Format AGAT_CONVERTSPGXF2GXF output - ch_tsebra_gff = ch_tsebra_formatted_gff - | map { meta, gff -> - - def lines = gff.readLines() - .collect { line -> - if ( line.startsWith('#') ) { return line } - - def cols = line.split('\t') - def atts_r = cols[8].replaceAll('-', '').replaceAll('agat', '') - - return ( cols[0..7] + [ atts_r ] ).join('\t') - }.join('\n') - - [ "${meta.id}.gff3" ] + [ lines ] - } - | collectFile(newLine: true) - | map { file -> - [ [ id: file.baseName ], file ] - } - - // COLLECTFILE: Iso-form kill list if allow_isoforms=true - ch_post_tsebra_kill_list = allow_isoforms - ? Channel.empty() - : ch_tsebra_gff - | map { meta, gff -> - def kill_list = gff.readLines() - .findAll { line -> - if ( line.startsWith('#') ) { return false } - - def cols = line.split('\t') - def feat = cols[2] - - ( feat == 'mRNA' || feat == 'transcript' ) - } - .collect { line -> - def cols = line.split('\t') - def atts = cols[8] - def tx_id = ( atts =~ /ID=([^;]*)/ )[0][1] - def g_id = ( atts =~ /Parent=([^;]*)/ )[0][1] - - [ g_id, tx_id ] - } - .groupBy { g_id, tx_id -> g_id } - .findAll { key, value -> value.size() > 1 } - .collect { key, value -> - value.collect { it[1] }[1..-1] - } - .flatten() - .join('\n') - - [ "${meta.id}.kill.list.txt" ] + [ kill_list ] - } - | collectFile(newLine: true) - | map { file -> - [ [ id: file.baseName.replace('.kill.list', '') ], file ] - } - - // MODULE: AGAT_SPFILTERFEATUREFROMKILLLIST as KILL_TSEBRA_ISOFORMS - ch_tsebra_kill_inputs = ch_tsebra_gff - | join(ch_post_tsebra_kill_list) - - - KILL_TSEBRA_ISOFORMS( - ch_tsebra_kill_inputs.map { meta, gff, kill -> [ meta, gff ] }, - ch_tsebra_kill_inputs.map { meta, gff, kill -> kill }, - [] // default config - ) - - ch_tsebra_killed_gff = ch_tsebra_gff - | join(KILL_TSEBRA_ISOFORMS.out.gff, remainder: true) - | map { meta, tsebra, killed -> - if ( tsebra ) { [ meta, killed ?: tsebra ] } - } - ch_versions = ch_versions.mix(KILL_TSEBRA_ISOFORMS.out.versions.first()) + ch_tsebra_killed_gff = GFF_TSEBRA_SPFILTERFEATUREFROMKILLLIST.out.tsebra_killed_gff + ch_versions = ch_versions.mix(GFF_TSEBRA_SPFILTERFEATUREFROMKILLLIST.out.versions) // MODULE: GFFCOMPARE as COMPARE_BRAKER_TO_LIFTOFF ch_comparison_inputs = ch_tsebra_killed_gff From 0ea16a68cbdc7c558a3feb1ad7970b8b8fbd5f2c Mon Sep 17 00:00:00 2001 From: Usman Rashid Date: Wed, 26 Jun 2024 14:28:54 +1200 Subject: [PATCH 23/87] Added param filter_liftoff_by_hints --- CHANGELOG.md | 2 ++ conf/modules.config | 8 ++++++ docs/parameters.md | 3 ++- nextflow.config | 3 ++- nextflow_schema.json | 8 +++++- subworkflows/local/fasta_liftoff.nf | 27 +++++++++++++++++-- subworkflows/local/gff_merge_cleanup.nf | 23 +++++++++++----- .../gff_tsebra_spfilterfeaturefromkilllist.nf | 18 ++++++++++--- subworkflows/local/purge_braker_models.nf | 3 ++- workflows/pangene.nf | 6 ++++- 10 files changed, 84 insertions(+), 17 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 184911d..0d45d05 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 11. Added a local patch for `GUNZIP` 12. Changed `orthofinder_annotations` from FASTA/GFF to protein FASTA [#43](https://github.com/PlantandFoodResearch/pangene/issues/43) 13. Added param `enforce_full_intron_support` to turn on/off strict model purging by TSEBRA [#21](https://github.com/PlantandFoodResearch/pangene/issues/21) +14. Added param `filter_liftoff_by_hints` to evaluate liftoff models with TSEBRA to make sure they have the same level of evidence as BRAKER [#28](ttps://github.com/PlantandFoodResearch/pangene/issues/28) ### `Fixed` @@ -37,6 +38,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 1. Renamed `external_protein_fastas` param to `protein_evidence` 2. Renamed `fastq` param to `rna_evidence` 3. Renamed `braker_allow_isoforms` param to `allow_isoforms` +4. Moved liftoffID from gene level to mRNA/transcript level ## 0.3.3 - [18-Jun-2024] diff --git a/conf/modules.config b/conf/modules.config index d36799c..9f01fed 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -179,6 +179,14 @@ process { // SUBWORKFLOW: FASTA_LIFTOFF ext.prefix = { "${meta.id}.liftoff" } ext.args = '--keep-genes' } + + withName: '.*:FASTA_LIFTOFF:GFF_TSEBRA_SPFILTERFEATUREFROMKILLLIST:AGAT_CONVERTSPGFF2GTF' { + ext.args = '--gtf_version relax' + } + + withName: '.*:FASTA_LIFTOFF:GFF_TSEBRA_SPFILTERFEATUREFROMKILLLIST:KILL_TSEBRA_ISOFORMS' { + ext.prefix = { "${meta.id}.liftoff.1form" } + } } process { // SUBWORKFLOW: PURGE_BRAKER_MODELS diff --git a/docs/parameters.md b/docs/parameters.md index 17d04e3..fa5a1fd 100644 --- a/docs/parameters.md +++ b/docs/parameters.md @@ -55,6 +55,7 @@ A NextFlow pipeline for pan-genome annotation | `liftoff_identity` | Liftoff identity parameter | `number` | 0.9 | | | | `allow_isoforms` | Allow multiple isoforms for gene models | `boolean` | True | | | | `enforce_full_intron_support` | Require every model to have external evidence for all its introns | `boolean` | True | | | +| `filter_liftoff_by_hints` | Use BRAKER hints to filter Liftoff models | `boolean` | True | | | | `eggnogmapper_evalue` | Only report alignments below or equal the e-value threshold | `number` | 1e-05 | | | | `eggnogmapper_pident` | Only report alignments above or equal to the given percentage of identity (0-100) | `integer` | 35 | | | | `eggnogmapper_purge_nohits` | Purge transcripts which do not have a hit against eggnog | `boolean` | | | | @@ -73,7 +74,7 @@ Set the top limit for requested resources for any single job. | Parameter | Description | Type | Default | Required | Hidden | | ------------ | ------------------------------------------------------------------ | --------- | ------- | -------- | ------ | | `max_cpus` | Maximum number of CPUs that can be requested for any single job. | `integer` | 12 | | True | -| `max_memory` | Maximum amount of memory that can be requested for any single job. | `string` | 200.GB | | True | +| `max_memory` | Maximum amount of memory that can be requested for any single job. | `string` | 72.GB | | True | | `max_time` | Maximum amount of time that can be requested for any single job. | `string` | 7.day | | True | ## Infrastructure options diff --git a/nextflow.config b/nextflow.config index 2b6ed19..9b776ab 100644 --- a/nextflow.config +++ b/nextflow.config @@ -39,6 +39,7 @@ params { liftoff_identity = 0.9 allow_isoforms = true enforce_full_intron_support = true + filter_liftoff_by_hints = true eggnogmapper_evalue = 0.00001 eggnogmapper_pident = 35 eggnogmapper_purge_nohits = false @@ -49,7 +50,7 @@ params { // Max job request options max_cpus = 12 - max_memory = '200.GB' + max_memory = '72.GB' max_time = '7.day' // Infrastructure options diff --git a/nextflow_schema.json b/nextflow_schema.json index 1fa3c12..e2b3edd 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -205,6 +205,12 @@ "fa_icon": "fas fa-question-circle", "description": "Require every model to have external evidence for all its introns" }, + "filter_liftoff_by_hints": { + "type": "boolean", + "default": true, + "fa_icon": "fas fa-question-circle", + "description": "Use BRAKER hints to filter Liftoff models" + }, "eggnogmapper_evalue": { "type": "number", "default": 1e-5, @@ -260,7 +266,7 @@ "max_memory": { "type": "string", "description": "Maximum amount of memory that can be requested for any single job.", - "default": "200.GB", + "default": "72.GB", "fa_icon": "fas fa-memory", "pattern": "^\\d+(\\.\\d+)?\\.?\\s*(K|M|G|T)?B$", "hidden": true diff --git a/subworkflows/local/fasta_liftoff.nf b/subworkflows/local/fasta_liftoff.nf index 5bfb271..79a2b93 100644 --- a/subworkflows/local/fasta_liftoff.nf +++ b/subworkflows/local/fasta_liftoff.nf @@ -5,12 +5,18 @@ include { LIFTOFF } from '../../mo include { AGAT_SPMERGEANNOTATIONS as MERGE_LIFTOFF_ANNOTATIONS } from '../../modules/pfr/agat/spmergeannotations/main' include { AGAT_SPFILTERFEATUREFROMKILLLIST } from '../../modules/pfr/agat/spfilterfeaturefromkilllist/main' include { GFFREAD as GFFREAD_AFTER_LIFTOFF } from '../../modules/nf-core/gffread/main' +include { GFF_TSEBRA_SPFILTERFEATUREFROMKILLLIST } from '../../subworkflows/local/gff_tsebra_spfilterfeaturefromkilllist' workflow FASTA_LIFTOFF { take: target_assemby // Channel: [ meta, fasta ] xref_fasta // Channel: [ meta2, fasta ] xref_gff // Channel: [ meta2, gff3 ] + val_filter_liftoff_by_hints // val(true|false) + braker_hints // [ meta, gff ] + tsebra_config // Channel: [ cfg ] + allow_isoforms // val(true|false) + main: ch_versions = Channel.empty() @@ -106,7 +112,7 @@ workflow FASTA_LIFTOFF { ) ch_versions = ch_versions.mix(MERGE_LIFTOFF_ANNOTATIONS.out.versions.first()) - // COLLECTFILE: Transcript level kill list + // COLLECTFILE: Kill list for valid_ORF=False transcripts ch_kill_list = ch_merged_gff | map { meta, gff -> @@ -157,7 +163,24 @@ workflow FASTA_LIFTOFF { ch_attr_trimmed_gff = GFFREAD_AFTER_LIFTOFF.out.gffread_gff ch_versions = ch_versions.mix(GFFREAD_AFTER_LIFTOFF.out.versions.first()) + // SUBWORKFLOW: GFF_TSEBRA_SPFILTERFEATUREFROMKILLLIST + GFF_TSEBRA_SPFILTERFEATUREFROMKILLLIST( + val_filter_liftoff_by_hints ? ch_attr_trimmed_gff : Channel.empty(), + braker_hints, + tsebra_config, + allow_isoforms, + 'liftoff' + ) + + ch_tsebra_killed_gff = GFF_TSEBRA_SPFILTERFEATUREFROMKILLLIST.out.tsebra_killed_gff + ch_versions = ch_versions.mix(GFF_TSEBRA_SPFILTERFEATUREFROMKILLLIST.out.versions) + + // Prepare output channel + ch_output_gff = val_filter_liftoff_by_hints + ? ch_tsebra_killed_gff + : ch_attr_trimmed_gff + emit: - gff3 = ch_attr_trimmed_gff // [ meta, gff3 ] + gff3 = ch_output_gff // [ meta, gff3 ] versions = ch_versions // [ versions.yml ] } diff --git a/subworkflows/local/gff_merge_cleanup.nf b/subworkflows/local/gff_merge_cleanup.nf index 02ce6f6..da64e3a 100644 --- a/subworkflows/local/gff_merge_cleanup.nf +++ b/subworkflows/local/gff_merge_cleanup.nf @@ -56,14 +56,18 @@ workflow GFF_MERGE_CLEANUP { def feat_r = feat == 'transcript' ? 'mRNA' : feat // Use mRNA inplace of transcript - if ( feat != 'gene' || program != 'Liftoff' ) { + if ( feat_r != 'mRNA' || program != 'Liftoff' ) { return ( cols[0..1] + [ feat_r ] + cols[3..7] + [ atts_r ] ).join('\t') } - def gene_id = ( atts =~ /ID=([^;]*)/ )[0][1] - def atts_g = "liftoffID=$gene_id" + def tx_id = ( atts =~ /ID=([^;]*)/ )[0][1] + def matches = ( atts =~ /liftoffID=([^;]*)/ ) - return ( cols[0..7] + [ atts_g ] ).join('\t') + def liftoffID = matches ? matches[0][1] : tx_id + + def atts_g = "liftoffID=$liftoffID" + + return ( cols[0..1] + [ feat_r ] + cols[3..7] + [ atts_g ] ).join('\t') }.join('\n') @@ -104,13 +108,14 @@ workflow GFF_MERGE_CLEANUP { def atts = cols[8] def atts_r = atts.replace('-', '').replace('agat', '') - if ( feat != 'gene' || program != 'Liftoff' ) { + if ( feat != 'mRNA' || program != 'Liftoff' ) { return ( cols[0..7] + [ atts_r ] ).join('\t') } def oldID = ( atts =~ /liftoffID=([^;]*)/ )[0][1] def newID = ( atts =~ /ID=([^;]*)/ )[0][1].replace('-', '').replace('agat', '') - def atts_g = "ID=${newID};liftoffID=${oldID}" + def pID = ( atts =~ /Parent=([^;]*)/ )[0][1].replace('-', '').replace('agat', '') + def atts_g = "ID=${newID};Parent=${pID};liftoffID=${oldID}" return ( cols[0..7] + [ atts_g ] ).join('\t') } @@ -143,7 +148,11 @@ workflow GFF_MERGE_CLEANUP { current_mrna_id += 1 current_exon_id = 0 current_cds_id = 0 - tx_formatted_lines << ( ( cols[0..7] + [ "ID=${current_gene_id}.t${current_mrna_id};Parent=${current_gene_id}" ] ).join('\t') ) + + def matches = ( atts =~ /liftoffID=([^;]*)/ ) + def liftoffIDStr = matches ? ";liftoffID=${matches[0][1]}" : '' + + tx_formatted_lines << ( ( cols[0..7] + [ "ID=${current_gene_id}.t${current_mrna_id};Parent=${current_gene_id}${liftoffIDStr}" ] ).join('\t') ) return } diff --git a/subworkflows/local/gff_tsebra_spfilterfeaturefromkilllist.nf b/subworkflows/local/gff_tsebra_spfilterfeaturefromkilllist.nf index 3955bd9..e816277 100644 --- a/subworkflows/local/gff_tsebra_spfilterfeaturefromkilllist.nf +++ b/subworkflows/local/gff_tsebra_spfilterfeaturefromkilllist.nf @@ -10,6 +10,7 @@ workflow GFF_TSEBRA_SPFILTERFEATUREFROMKILLLIST { braker_hints // [ meta, gff ] tsebra_config // Channel: [ cfg ] allow_isoforms // val(true|false) + val_prefix // val(String) main: ch_versions = Channel.empty() @@ -72,11 +73,22 @@ workflow GFF_TSEBRA_SPFILTERFEATUREFROMKILLLIST { if ( line.startsWith('#') ) { return line } def cols = line.split('\t') + def program = cols[1] + def feat = cols[2] + def atts = cols[8] + def atts_r = '' // Remove attributes and use AGAT_CONVERTSPGXF2GXF // to create attributes based on sequential layout - return ( cols[0..7] + [ atts_r ] ).join('\t') + if ( feat != 'transcript' || program != 'Liftoff' ) { + return ( cols[0..7] + [ atts_r ] ).join('\t') + } + + def tx_id = atts.trim().replaceFirst('anno1.', '') + def atts_g = "liftoffID $tx_id" + + return ( cols[0..7] + [ atts_g ] ).join('\t') }.join('\n') [ "${meta.id}.gtf" ] + [ lines ] @@ -106,11 +118,11 @@ workflow GFF_TSEBRA_SPFILTERFEATUREFROMKILLLIST { return ( cols[0..7] + [ atts_r ] ).join('\t') }.join('\n') - [ "${meta.id}.gff3" ] + [ lines ] + [ "${meta.id}.${val_prefix}.gff3" ] + [ lines ] } | collectFile(newLine: true) | map { file -> - [ [ id: file.baseName ], file ] + [ [ id: file.baseName.replace(".${val_prefix}", '') ], file ] } // COLLECTFILE: Iso-form kill list if allow_isoforms=true diff --git a/subworkflows/local/purge_braker_models.nf b/subworkflows/local/purge_braker_models.nf index 905efd1..26d72d3 100644 --- a/subworkflows/local/purge_braker_models.nf +++ b/subworkflows/local/purge_braker_models.nf @@ -20,7 +20,8 @@ workflow PURGE_BRAKER_MODELS { braker_gff3, braker_hints, tsebra_config, - allow_isoforms + allow_isoforms, + 'braker' ) ch_tsebra_killed_gff = GFF_TSEBRA_SPFILTERFEATUREFROMKILLLIST.out.tsebra_killed_gff diff --git a/workflows/pangene.nf b/workflows/pangene.nf index ea041d9..93e03e6 100644 --- a/workflows/pangene.nf +++ b/workflows/pangene.nf @@ -272,7 +272,11 @@ workflow PANGENE { FASTA_LIFTOFF( ch_valid_target_assembly, ch_liftoff_fasta, - ch_liftoff_gff + ch_liftoff_gff, + params.filter_liftoff_by_hints, + ch_braker_hints, + ch_tsebra_config, + params.allow_isoforms ) ch_liftoff_gff3 = FASTA_LIFTOFF.out.gff3 From 6bb61d43edac14987770cd0a09d8190c3e3aab64 Mon Sep 17 00:00:00 2001 From: Usman Rashid Date: Wed, 26 Jun 2024 16:35:36 +1200 Subject: [PATCH 24/87] Updated flowchart --- README.md | 2 +- docs/img/pangene.drawio | 561 ++++++++++++++++++---------------------- docs/img/pangene.png | Bin 863296 -> 838585 bytes 3 files changed, 258 insertions(+), 305 deletions(-) diff --git a/README.md b/README.md index 0f7c4ae..d1e8a3b 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ A NextFlow pipeline for pan-genome annotation. It can also be used for annotatio ## Flowchart -

+

## Alpha Release diff --git a/docs/img/pangene.drawio b/docs/img/pangene.drawio index 0c61685..38446e4 100644 --- a/docs/img/pangene.drawio +++ b/docs/img/pangene.drawio @@ -1,430 +1,383 @@ - + - + - - + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - - - - + + - - + + - - - - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - - - - + + - - - - - - - - - + + - - + + - - - - - + + - - + + - - - - - + + + + + - + - - + + - - + + - - + + - - - - - + + - - - - + + + + + + - - + + - + + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - - - - + + - - + + - - + + - - - - - + + - - - - - + + - - + + - - + + - - - - - - - - - + + - - + + - + - + - - + + - - + + - - + + - - + + - - + + - - - - - + + - - - - - + + + + + - - + + - - + + - - + + - - + + - + + + + - + - - + + - - + + - - + + - - + + - - + + - - + + - + - - - - - + + - - + + - - + + - - + + - - - - - - - - - - - - - - + + - - + + - - - - - + + - - + + - - - - - + + - - + + - - + + - - + + - - + + - - - - - - - - - + + - - - - - + + - - + + - - + + - - - - - + + - - + + - - + + - - - - - - - - - + + - - - - - + + - - + + - - + + diff --git a/docs/img/pangene.png b/docs/img/pangene.png index a81e1c1348fc351625b0fc3061dd10c14ac51e8d..17cb4e7ace88546a333c0ae59f9a011203604f25 100644 GIT binary patch literal 838585 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

1+Ggi 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

p>Z3X+5 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

d#_rF=i^Jt5nsYI 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

OzDdn1Vd*HOd0dQxr^&h-M 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Πj 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 A=l}o! From 91b22f219ab5dbff9e206163091c451debba88bb Mon Sep 17 00:00:00 2001 From: Usman Rashid Date: Wed, 26 Jun 2024 16:38:16 +1200 Subject: [PATCH 25/87] Updated flowchart --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index d1e8a3b..0ee65e0 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ A NextFlow pipeline for pan-genome annotation. It can also be used for annotatio ## Flowchart -

+

## Alpha Release From 93ff75445e5b9152f28f1e84ce87738166a1a1a3 Mon Sep 17 00:00:00 2001 From: Usman Rashid Date: Wed, 26 Jun 2024 16:44:48 +1200 Subject: [PATCH 26/87] Updated flowchart --- docs/img/pangene.png | Bin 838585 -> 334096 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/img/pangene.png b/docs/img/pangene.png index 17cb4e7ace88546a333c0ae59f9a011203604f25..679f214ab340f750ed6a4b3fd8c7710e541665df 100644 GIT binary patch literal 334096 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

$iblrI_)s+ka`Wa*U@#qCO^(V6_P%}l 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

xksV|DXl#5b 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

I$FJs;sXa;|IuhV$z2Dfzq2X@vB?%?RLL~> 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�_ls!nm3cHDR8wFBPx2_gj#xaJ z^$ry#pB)#{j5Q_?2mXl6RhB37UF4k~DKz)SyD%}%QKJwjP8p+01F}30G%ch-_Y1kJ zkgN6kWeA_52;mg^{VNR)z)W8K?sIF`>dZR`xlom%ImubG8h1WL!=_?%1rtM`VT|xc z9m$*IjUTd*`o0TP4L~hd?n;n;$9A^cIK8xVgyM z&)2;|`Dki$?pK89PeAi^>cF57;#>9#M2#(NOiwiB+k7`udvnM>lh<7#lnt)ko~AOC zClyvvkPJ=p#2CwP`dY14t$Gw=>rk_Y9io4zImRp?BU(a}ODV+zqMxTR-XqW`fc* z#*Q2qk^}8%1wOuxD41TK3^-6iLAva(mnud$kBZIf%H6fhU}vh4?TbA)hxP#q1s9h( zRO}Z!?&b}JROqTX4eu7*+%|p#Z-+soMG=qdwrdw>S9e9f9)z;v{v3-KjeMyuR5h|y zm=HY>qP+6t zUc1$IUGa-|>DYJb5k>-l`z15PA77-qP@v9;+)v@BTcWnjk&CN{E}r<4Ba&APSvrrW_f4qE6kr$3V_szylrwjLMy+sC*X3Tyy=a z3N)1LN^**rGz&6`4$)R=>e4vc3BHmC-x>pSyIjTVR?vPC&;m@=0vZ+96nnwQ3ar&M zli<>=`;0~-b?VlvZ$kk0Zkl-*nET*57K{FRvWb*X%T?MAeGlq-SXQ&nbe9XfU?>yp z`nW2~i8(ou(6V%XWN(41-_9)4{0IX!lf5e<{Mp?f;a;t|05XaV+wam{j+z*&1gkCN(OI6Tm@*3KEel6$?BenV1;%w6OdxzVJXKrwQ*^cBvrywI!@^V9Z zEe0eZ!a$#NVe+S=r2I@49eMlW7wFD!a0EvgGou7c$iRYLw}mcm)}7bM!k0ixgLn%t zrAugQCv>DUVQyz+<^%&ApZLrT_L{5NrQ6Q4*sUV#1Sn|NY2#l_%BF|~K_*)xHdvp* z=Q`CFW(RygW3{|$}0nwtLG5v#F}H;PW5lV|L>^c;-zid zIcMGeVohK6Hz7@PH`g|3$UScr7+#fMd?3Xpi7H(&MkDlswE(Yb4a&y3rs2TKeNMvG z`v$^jR-*yu%oqqx9J^nYn!V}H)vO^)rR&JsF$r^ec4be~ehf2;)`(^LBn`uyiuo3*TC} z(|i>(JIUD9s}`YGPu+Ehbkr0Qa%M8@fuWZdD;j2)$i@ayd=wSR4>hx(b1c#kZ<2{z zYVV=GHsJ<+!rZ&Md#X)~917%E(N*+$nW7GJ&uK#v8U)IXf^dPg6Aki=4=MvgNpPRd z2c05xXeSE=ADI8_N_$}GPCjZpRa0d;#7+>MQP9lsW|~HbvhS`W*+6)u_@qhXlzWN? z|1}DU=;Kf?t;ysnr0>zAtQ{kTIK0`yw)MlESghWA@(?=_H|M$u@*ejEiAX6QaI0+u znR}?%DtKniC}($Ik}E8A_%p%_JD3&R94c+c6i+>iQL4hD_~4Hb%w619|!kpq8Zvfjws4QQI1CU0vt#Y7)t)Y;0 zJ4&cF?f&sOz`h9NCw_c+eZMZ2I1usB8!?IV6S1Q1+O>;qLDTQl6dHM2n7o&W%T~<; z>z5*qW7;z7u86!tA4kRL4zNfS+@fa0&fKb651wum{h`|LDVD>|RD=c5TD8)nZFNl3@Z+TxXCHina$)eg$8-<{7DcKmpe?k!vo9e7{FMKTq#b-^R2?xeTa z>=`~WP}b-I&MhDh*Q0Rkv+tORO2~JB=HTrMkvpHogd0TeV1_-CZxStXS4#ZSiRImE ze^)a9X_-O68?Ly+!&gacpQ4k9h-@(iyKZ;86Scc%!2AVB%O zW`c6B1MeCYhI=^=ND$25j{vKe65x6S++g*d04yg02u5uNpGLqmxD5E|*L$3<$`+%t z2bD-nXXDxrhCyGb9wL1bAj39qlFMs=<$)NCih{ai!4`OA4kB2^*~k4*A~f{o*t_mp zpT7XzGct;M5NIJP3WLyL{KxDKkxaq#Y< zsVu9Hi?f})(huG|L3>}o#}VR@%PrJB#?7YvnoE}nEbhxxcCR|H7Utwr)Y(TSrH7@Se)D+a_Bcn zM|E9+B(Kc;WXNFfV_F)Oah4>I3QTmGNaCTNUw0H|2NxUMXin5Vk1QlkVIeca>u}X- z4tM7e-0jrn{Um4`CWKf=A+w)V8l))ljtR8isCaOKPUn^nCqdEmIp1N&q9ZB66XSU* zKm9zVxB!?80ZpLDcNMN_y4`o_^dIJ5zR%#R)=UPw_$~usb;nUAV6Ak>J4dU~$Y+o- zK5E8}S@@hYedgTmk@b(RZJ20Ut$dU{J~=hOTwbXk7FQP*bD$=xNWz|HlwhKHcXZEh zMAWF*(alF%4~>BIEtE|ic!T1IJs-*0t9Nf>(iKDk_e24t+=ljt>+4n>O254gIo`J2 zSC-(XRBgqtlfF|v@v#g$ZVQ;m5tIyN z$GP*ei7AeEBnuwxuSpK>T4OFk_hz7ujTkX&(O#|NY_FM;nC3VRm=298%I_WRK7Zi295d~M48L`?K9=nV=@ z8bN&b$WK4-EZGSZe5~mV8bmH*(gYS0rhdwntGaa_9C;>#%!a*LuYgN>eOPY1W*`D^ zF9Zkm9%`#w#*XB&FSeTNZ7D8b=WSW4IntQbp)t9pz~^$f829YESH9!kCduZFsu_qz zPaP~qJLo1UVNK($(1upXlB{m3*@u5uAn8=T1s$@<0jG}T<%{iMdO2m2uLI{Rb42cf zL=BM$B}>L}6Zd}(wwVPn6{83d`%>kaS_n@P1v0MzF*eEvVo5GvxfL=AC>fG1jj=C3 zqSB6@as3n(ahV*OAnxMSYc!HDlkczmoHYfC#|On8l(ZLI?ci^r53a|U%DJ@YJ92SE zB?u@><>i6u!eU~fV5!pog6&a_MEFy<&wW~#7qhRkn(-h;oMk{JsyuGuz*@O#qdN^0 zeqnYMI?w&)ex)&#l2ziInHLsDY-%@en7pfd(V1K!S0RcZait2)9!6H{6~)@Uf&fS3gk(0OjoZc zMvR87^t`s7vaeSpNN}9!wfe928e3{8q^uIuxv#*T0pIomlIMl?IL5SNH87xy8fv8UJ^ZJQ#V@#C!S1Dgqe8-t+nHB8?uy|=+;c;D?{j+as|;ny5_G}on{OU1oA zSJ$~_%=DU@xmsBy6&pA8aPjQHl|8+M;Uajg%Pk;eYky;EhQ6%b+Tp?zd9 z*a>kDWG|AB$1r$mO;C{}QUO2TxFl!Q9_VxfFW8KZ5M@6sL$OJxF#Eg$T5-1fi9Wmvj zHK*a=($B#On`QbtNl%=gSSX0cz+U7s#eM!Jw-bI=4Wv-`a2TUc=5ujvac8 z#@%V(B8$WLA5`y5UP~OmQjz?uDPe(Ps+(mA8VupY4_-byJCd*GQ@Y{zs?Y!Uwf<5E zVBB#Hp*JCo`Nb-KA&g?IH1DGwPMkk2A?2V`Y4dfGLo?QV^@ywp5pp8RiVAO0hU0h;rq!ReG3Py->>CI)Ua#>2c1M z@X!IOCAPesLQFWDJhk6YO>!SorfMuWlA~0KngK|qW|h<}<{LurVzC2DGu)bbPIugz z6w7oH*pXDOE~=kt47A(9$(_EOCaq)@u&;r0A2)3{_pr?}YvF=f8bFIe28|$1yS=TY zt;QqJSw8#P*1CMDy`gf$dbAGdEeiu6s|)bFMpQ0tR0!XAm}d-dmtF!i@!}hQY7{TDJ>&Z_PinhM-tv8{K6s{6-DD%yY z@eN8&q7Cg|^<2-onbE*&<7H9)y@)&0YA)%)xoxI5nDB7ikcTtMpDYRwhZ`OaPU3mr zy^Xo4*{B_$95sU6lN3By%tvlf(?N8ArTz1NSV^!iTp=z}>1JQGG#`Nlrh5`WTdcTF z#{0?sQAJyG%e~Iw%EwcZfwH$)O=#i5N34 zG7?Hn;sInDX{jtxXUJu_0%h^Ry1sR?Z>42&-T}qI@%d|qWrDOB_g+i!<48+0JbqC7 z6s5}9+R_lbH=^xk)APYBmF4O4Vp41~6!mmbMFw-rj-z`)eB+a}O2sC9Nv|Od3^ySa zd1m8y_6zxinJ>+NhP4!B`iBL2en2h~5~K?d{K5~id!Bv__qhx{pg<$Jvg$f?GyCgU zx#9r;C%eFQK+?heA5R0C|2+EE0pf2Zu`^U!x$7q7^r}_$XGg+=t&<3B*;*w@*gL;4 z>`pFYiM?ZYq~fGJ`+^&7Zdc~kaW!#-+H+MQB(n7KAlCX}T?_vydn3Ym1yc6bkoD@- zrm!cAG$w+zcTjiPY6g8aUCBsFH2DVz4O|&pSsye;+#;Md5-q9*VYDcu@zY;uu~4hA z3ZHyc@xOQYO!K^@T%|;D*V~5=j$OxW=+sIB$w+eVL-=+z!!=vlZT@DHJPjYi-46*r z;F?MeBrGf+r(ER%fz`FDw$NnJWgv%jY}|mjTRgYNbLy`<0l}K^)8ta~>3HvpB{4my zG>QLklEz+vltyVa-}3Zf{gxgPHdfnZNnlua^tb=oT*E+Ai8{EJ6BNhbA>j^VbEHrUIf3Cc2LTk>$^P+S*5%R1S5k5iJ(0AvN za`j3y({k#WFefyPmsgKjsrz`h%LFqoJFi#y)lAXMjbV)>;`PLO7tJpz`>^|i?98mN zHa#_#rW`eLP&94*!$P0yCWmM|6mP9YfpOX24vON;u2Z~OtVqw>wN+>2bZdprURB-z0axZm#Cp6BzaBgVPmIfV34u8BLBmp%pRSlw>YkciiyXR z`V0o3{Gppcal3zkPa70@4*fd+&U{o&yP24qqTrZx>h|$AcGP^4@2N+&H z-|{8g8<+fr?}^n>md~$tsKG17^Fj0p^9*>79KFs9?ebnw>s`su#90`w8ob01ieq{| z{Z=u){}0&I046lbdzLK7mqoU3V+iOE(JK-W(*%ThKF)Q#eG*y`*PCZWix#D3MbqD# zGax4wGTiTeiyik#J2*Nm15&*BY{;t<4jePp3FZZfhS2ZNtT`^e`*2Y5>Ja~;5M<8a zr-e5(KCtv)=14ZD3WMI{S=#<$34DR#J5MmvWRksAUyE=Y?}xvf7;kJ({{U+3xsE7pPFfic5ijbu7p0#_Xrx&+ zg&kldPbIzS##cOK=rBO`E*iSF?_$S%?~?g>F<<>pLKQf;gvR*q5w!gRM)F>-)T~d7 zo(>CYG3uMUHXeP&3lkLa7_O0#mpkxsAH0dI`~_$fCo9HPIZ$u7C5c@y)ebOi8(Dp!h}Qa|C( zi)tw3biKw`Sop?fsHFac-3R%V(L|odYmusV zbB{gK69?zzQ8WhM*y+tgr1MbuY5Ms2;T^0h0EdnY1d+q{zaUO&?qR@ldT3oXa})mV z?E(dsVJBIK^Mg0zlLO~D+xySoPX?)*hlt|z53E+O!%;6tZ=Pg+K;$B03oqZkJj*$&tjw5Z*&%L1)n`rUgN z56##bh_L)X2=O4}0|m=8G|-8=rrcem#$Rm`P7?T?QV_@O?jH~ zm15VfeWyI1tnUNQ4*RGm(H^#wi!qu7!#r-)>EXW86rE3ZyUB=YC`l_K6Z@e%nS%Pp zYUHYjxCCwoSX3h-U*^bWs2f zOwc?AWL=LCxp!R+CZfFoCDl}#f|=~oi>L0v`vMi2&<=nvz2(t&I1lsbtD3rL6tWBk zzk}>&khzWyQqD^XcP%Kuyv7oH2K{WF^<qT(70Z~}V$T2g?q|JQSS0`&-2XxOmE$i~j~ z<29BK6O&V-5{GX{)$5xcktdK|)?4;-O1Vh$Jo^63E7L3cG-e{lF_Q#M#%3Uw3PQU< zzwJ)2>gbJZjC01!o89W06#N8D%xKu#f<$tQs@5-F0t|o9b*K6P(f{M@z2mvw|Nila zGEzp8{kF49$jB<0AqvT=P?VjJJsK!`Zy6ygBYU;XB4lNjy+^k2dpzlUu5(UZ*Y*2e z=Z|jZoOpYAy`;yB;C*R*CuEBEA)#nOmFV*TFeanId*o6&ulbCX z$<56ZAS%6rQK;g3_}Z<>W&wEk=(ME3)PljR1-33d+gVq0FXNZs|D^@+RTg*was~}Y) zw{$g_1q_GICGy%}yG!CfY}jnQG$EUi&AA*w_@4w9)kuOSImP;J%#5r0=N;f_Fq}xp zI5OdxRyJFz2pGY0ub#--)eo~e!(s|JG>?;x*nCroI{HVLfn`zko2-LoqLwE)H5bM3 z>CJfoa^*L9PVaegVv_CR`E)#x+RC}oMD{Tlc!Le#dgu9oU~;!y$2;%7zvs|w3*Wsg za);ig%WHI5Y1=d><(zmYg$fzms#~yOI}ik@HoA(IM-rzr-aMl4WjzShRlh!`TG|rR zI7JK@4HGd(l_=}hNy>QpL&Vg(@#2`*;ct~K0&wpE!CSiV8A-H3OM3X}@bh;RY2ZDk z2D=&1i5&Z;bYXiFmi8qs`06vBy6M_Q*?_%&#{&eFU+<_JCk}w*S<}hKX3M^bN&548~*Q+35#kAl2jo=NA4tdC5rmoDW9Y%-@0r5Mpl zl#?bq4;m&k-Ts&EgoqoIgPep;UkWeq}NJ?1vkU8=Awgc%MVEf(#Q z+eJ~!0Ak?dyP`~34>{gPz?*Nn{RTYy-z@x z7vK4LFUR>yEV8Qv8If*5r~!L1uWo)IFligDYUc2{JBOfqz~y`0?|O`4XlaIZE(gSj zxkMsmLCd+V?EEJ73A9nTt7c)L{vtUU?Wh1V&a-fAble%SXAN)Pb~G~p0ZbUZf4F-H zm1xik0sTKDyZEpJSQ`BBZ7Q@LQ9$a`&u-#_Jo+l(_~dz{5d&I)Co(nYIh;mpWaP`v z6pEZ~g4J*ez)l|>vHQ@Byi~@i`O6ZI{c%fpn~*=N;|nl>wW&0PnFC2knr1Ja%IcYr z_sHWUA!Sf{xqbRnP<9g_xrC=0XS*clcw?%MPA8{$EQjC14sId_bmm+G$g5Bqzg0_D zIcVD@M%eLqKBnLb&p|dccsr*oIoC2B0QF>qfi2!NGQ-`%+-ySh*E(yTe|a5M5r!#fAC0pltugi^AC zW(71bx2|4-S)|SR(|e&DE9KsFd|~b2(`L~cRo2ez z^xFM`+5FfIBJT2J-q^XVL9BS)MAlIt>nOkwyV7kog4AjN1KlIoGaQ*~#mqxgM)1E>l=*eb8o&fi?ak?88GN0~N!()O-aULsA z{q1~Wn-Ns1j#wJ>A}dt<#-Alc?oTpr9O%@3Fk3Qa2w2H%#~<6Ub*%@K>$j}C9hI<5 zddl-$;ZLwO%REav&#<;7oPe? zoZuM@ihx-;K`TX&w5>tq$3E*8M25ut=VfLut|}>Sg3HXzYm3s$2eVHSmU5Hr#iR>( z1)1Gyq&G>K#n>vmDt1i28ulfX@Om4Evq_1yK@L8=YP_RkR(Zao4v-n_1PaPv>yo(C^6B?)^f zjjPX$cdPYcX5_5de%hl6&AEbfb+60L+h9))|3Jhbjot zm}(;eha%E@i3!FASrZPB6DctZw!sa9ZP(Wt65=Rq;HU7pCAw#NDflO$_H6zx@Esj z%D?|L6u#jc==vB^j7Dsgnoh#AHtnHvZtDQ~)gB?#qx@Fq#V~wMpEZ#o(kkMGu3&~O z;?&E`qaKAX41HK7x3-)qOzKnFGy8Jkl!D^fO_ zPrv)QFdGnQpSdz!=^@%Nt9Y+n>?^=;n+X(QGG%t>b>L#|2%&B0901y720;hul)^Cm zshba>i0^qJI5zEq2%ms9EF=<{DQG)>-7G^I48U#3>4KTxfYf^fATOq)cqSh*BH@4* z!y2GKS}Ii;8(ZRBbUBFR9f0fj#zZpUPCI@tIA@sNJu^}DD+V#3o&8guNhpvEp=_#k zGP-rEG>w9v+a z=dI?JXuyn1b$&d0_iG2NEENGi=RbQwVsBJF=qdS*gDAyHeN&$H^t~S=7M`KbPD1xT zpF4fF{ya6&92@T-9k+3(yU%&e1n6WEgX6x2Ldb0tTkSQV81>q!EC|gd@GCatXOzPR zCFde&>3cf1p$zj@?)dhY@4=#BOQ_eh0#ZQ%`_X(t16MD?UNCM_dwveLM{jbnMMSlb zx&dqy3=2rZv!!i;gjx1nakoD>aUU8eh1lL5vOAY_rTxgR~P9*AeqZ>A#myzly0rA$M~n-jjFQZZ&^g zaBR!>z1heCkrr%pX0O!$_<2{;=DPXNOW*0YU300`TDN0aVnw=h5?=v*?XHGV?4z#w z3-M#HM$MN|q7ip0R;58ROZYMNWG5?R+n5u#D24l9a{O>!mxaksbRz!jGDm0r5oRze z@gphT+1_MfWc(g6^XLrVg>*qo<)&;z0DI zxsb4=q(p=728?;kOtlVxsL5OVP<gsyn#-MOn0O<-3T^32t=7QYO)w2uARD9*u)IY`s!sZCy*Yb$m_BGkG?+!S z`9VgFsd5vsE_Z!0V!i|Gy+r=RDHh^l5c;?P+CZRNH1dc-4*)jp$7!9c-{4YsWk*1^ zNK7;Yk>tG!5p{M~6Po2Kd~fFeSfb;;U`=E1|ALdnOzBja>|On`SX9KOHRCY2Nw#3a zoG5s0Z7tF6SXWe77%P|pg#(Q5Sl8q;3)ruiwa8yoYCysZ1?Qg1>%PYT!U@s`B^#L& zNZ=&mQz&yroqcYQ4ESY(F9o;b9>{=Ef$vRx0%v!$f~pH-@)da*+z!AhWyKebjg9#l zgxclyxvCPVc1pjJ9;Axo5q5L-lV3TTmw zlblUZ29j_QEab=LcbALrn^cfy9RWOd03^UY$P)ZIZh>yu$GX$a*|Z8w0?nLCZ@-pP zTIp~sIR2zJ$!vl7fyI30Q4_VBNjFCtIy9qpflhijNKTPuaNHiZEDsPc!T>nQ%q1xO z{)DUn*dWGP*mwBmwS(90Gh%BnSicQTB1&OM$e9AYsXB1{F;z(=(*fCXA65pT=SavE z@f;CGS@oU`pFgM}_MQk!m?!x>T->SWsHBmjXVzoloHc%T5DKlMTaKz7pt@SSvH2p{ zAvy%H-VsWNRNR}Aw$rtjoJ?3s8fLIupp1=e3%i1O`{Tu%$h*8@1-E&` zUBG`h@w8Y-0UC}$t)bC+M~Kc{jT}_q9Rd~80pQW&z(kQ&Gk!3eHNQ3@PDLWZ8Ki2Y zC6Y(5o~B2w7DEF((UqITrCs>Zad2m4a%T>?2ML1-o9}l|@}&-K3oZKAsc4GeMEdc& z-zopN=;^~Y={DipD3cwzJ}Q;u7xL7v;6QrVQ}&)C-_Ov=g;yOmJpNkClgGj;Qs?s$ z_K-ccB2R*67;L3)=mcgjxgf}S?LnqXWKa0rjRCbM(;jd67C#T#$aIj9Qa$@C!bcD! z8>ZBaThNDwOdm};PkIy3|HtTc3xQ5`HaUYhGK^DOmwil7yp}%(2Rkx)c<{jqCeYW+$YN2k2&$J+Ry0&SZ7#CayKr`yW}rDRy!Sf zS?wd;WH_g$GAa&>daV`bsnjoiisI*YTC<#Dh&FM_&W>3E4=C9sqO*T|a9h}}vwBQq zE)kd~XLlk)#_RA*^te@Dvb>Lac#xm9^Yp9fW-*gIPO+Zi{#)(Q^$Be|DvV4qxgJ4Q z?{w+XJonvqdvbW`BsZj%eDS+5cjgmgzHWs~MFd)cvKcMZY-F@&w8MFHFTVBOYniHV zyARlH@icF*#Vi0l)3M-KJ6VcCNo$pCBhYi(9or23kE|MJ-6;$aRVfRu=kd)s>5kV$ zh%|MTMQ8YjBA1pcwS(=K#LEkwvWoQq!)dWqk(V<5TJ4Q-=1vjEv$!yhD4uu`jo8fs zv$k+(F0dWVR?i4qIOR^DlV|81x>NwQ8*22f7g ztllQOES~%A>K*S-ztFq`RQ`^a9xoQ&<7$97X|+RXO5qba2RYkdN$xE%3nxPJ#08yNAIY{ za=O#>@g1|vYC1vB#y0}4c;#H8QW~atgyw{|K0VHk--r`NaK@Ch-&V9-Q5e^3hN+;BrAk+;1(X3(~d2;QpaRb`0h!i)c_&Y({d4;2?WRw!nRq@^Va-wBU zsS%OckavKIkkt*2fbej(D4HV6Z|4lKwtAkEIl}a4IVGq#n{3k9dK!w!3;OvlMmz|4 z0zefgRDoKl=cu_AJd_^toz$ugr_OMk53YX0WqG96Ul!*Djg`aZ?GBc%vmE_fpq4~L zH(~SZk^X#Xvx+9}lUS#NOGNHzyYEC&&-C@BMR?s{qHs{?Z4rFD(%^0sf9E-UaU%wG0`30<7?mk+* z{@T}JuYVTevb6f~G{wj_?1?M?hTXkI*SQwk6x-SUP(VbF72Txlb!&e#w zbz50A0uUkH6P1ILgIf@KfNFY~`OKNlR0C)Hj(XezXTovdK)ZR+#G9)9f3DdP`oK#QkPxDHC`YPo)F{KW=3KrIxo4B z^mj_F#V;*9^YVTyj@UI%N-7r8hRmc#2Dy%3T3}nSQgKj@%Ut=g)pkrJQ7y_Mcvf2O zq5jrFuJ=P~ycmEIcDPm5$qk72!=yWEIR<6bP#Ab0kE!Qk=HyfaePIC;WG?{qF~DeT z^Y`yi+y~s)W;=bn@;NwMs94`2^YVF?7nDeS#e6VWK5Pu0=pP-7sxi8*`s=G;9obb@pADVCcCjxBh5rLsMq5+Qt`!++A)kJ z>j9hPEYhL8U%5zXK$mo zwzVXBpMe6!gncZOzQimK>eve1aHpoJfYlr61Qa)yb}bkgw>)tK7$eD+<+YuG3B{K8 z49@ur$Z-$~(5WBqirDLmjb&U~@*DDA#=(BEkU186ohNeGNriTnb2O%z#lUP-(3hB@X})s4*> z5EaWYbj&Y&hP{%diq71vKdF7bH%XnB9_Fx5SJvs2g3ERs{li$;yB|EsSf0>VTCB|O zdu@HKugyus4`Tnk3Wka49o3hr>u<2DI1ru#Dp(zx-bSRP3rZd0?fE8ctalTNKncTa ze$}}enxd?FHD?jwH+T<=-B?wTbXnq1-B0$YOUc2EtFW_D;8`@nJxY7b4_wiQm~4+mQ&=KOz;?J z$KGQ3JTXv=R?j(tNQV&oh}l4na%IZ?FhM5#^c?M?*$9Q@o$yM(PO%rHf*~bt%8W*N z-?xya45*e|jVua3U{3*@rZRudm1E)3$)0`Aw9Iophui7`jzvIDhLPlCgm{<{X<$=p zf;|1ss_Razb$G2#WNTl7MFN_BwVY{YVc&RsVW7Cctf%9eLOJlB)qp+Q^2AQ$vVZoq z0+1}3daQAK6crnp0N7?uE$~AnH_{Ad$$s)jf2&@G1aIl!V=7_y9sRckzl75nZ(PD{ z#tuNgE#4GRZ;}wK8lM{TH&E|x> z01Y)WR&2o3V`_6^=Udl;55wG*{!P$_L zqfAPY$G*tNiEk}kCiPOV{w8z`1ww!sK~=x_Gm&CAXUjD-E$-c_u{R_RYm`0GTxVOB zl)0Mk`G*ayPoH998z_|(jRgw(HER6cAKJSd5#h5D#8W@Qa8Z!p^X-5j* zd(m8b>@0Fc1>YlHn3CkyaE$w$+iC81u9j8Ja;9;Wb0@}bbtJ(}#*+*6v%!79oj?)# zqKi1?<FeB&8gFel!H@94`IPes(;=Y{&6uf%;qa4!%RReg(A3jW;z8%`+5Bd_k$uQ_% zc=FZ^mh(AokB{*0`)2O-7E3Gb5`zJ5C~$|VT=gl~)!s)uNe&(b+NHUZYy8;NGETKV~EF6m@{VgF#evoh?IkD8L`fZ?yG zdkAPXFftxh)22%C-^Y-+WVJf3`stiBofuv$LqHSu1Uci)<>xjogRwMvIWOCC^d%@^ z@*jL{t~c2NXEJYau&mP zOHQv+do|NM%5-1RW8)=DN@`w2!WqaZM^TE`r0g#2L@)44&VwdJ%8a`(6*lF?>rfBW z_!zJgsV0w@OmVyeq2uUr4z8m(Y8;lsbtJ%%@NFYERQqaoX9k2CjhG~_0D$$22+me1 zgQQm-QNf`CMeB3Y4%cwJ%QxRFFU)>Bg@!;FXV?cb5TzrJMVoFVAJErqtpWm$Kz~GA zZGDfTHz|wZ2On}AuktPTn@)Q(#s6%7(V&C_e{FN4k@LQO*a|s)sA=xb14s6_)Z#-9 z#uzL{3)h63wW}a?NUh1*DNoj~_w(mZY0W$FqINv!FJB#pUmg>10Vi+MD7Ss@&I1&qc1`uo)KVSZ$0;q$AQ2N0|{g`;4R(?@Z z^I#7QDghz*rBPskbI7@alP`*7=FX`$y${IF|q#ZlNu8?Nv{(#nZjU+ZAc8IFW67&wwBphv{Vy(5XA-R77r2+ zg3@0 zp(ZChqYj7MEO}bey}vBwwPYxVx*-fD^_)qPKn0*4q?XW%sC+E0LxtE6A=fb1*%NYF zwsX`RC)!>W4c7;1_u3mpu6JUHdb3HA%$5eV5JFW=waPC27uD!Xh~QUTCqhF&L=I>qV^)v00hE1md& zdo=WRsx&C}Oc+RjH&kse^F~587_J|x$Qh_;@jJy35QPo648fT=Odz{bsiyr{My$>4 z8~fm)lH*==J~1RV3BMPghxEp|^E-0$VQK}&s*xi1U!ql;+N=3yZvvagWPTR zMcl?l$4>*nPj0e#IJCW#esqsKte>bqph-YP(N=#hhB=_=NUSEk-atkg9MtE12fSN#O24f)RdYpT&KK}cW4d}pT z%Z>>VE*q_TLwK-l0EkEKl9mG2~zNyV;kocU5x#Ph`$AZU&&@WSv2P!PMZ2!q$WXOrhE5K7XPE zQ9m9CLZL8DsQX0MMTE7A%O4^FD=A@zrL@i1WJ{Hb>rDV2XGPTuf#c290^-l1R7Yq< zLWVC=vy}qOVy{{x* z8T+AED}I0QllFN}mmyW+x{uh9fCEXGWbCJp(lRhQ|3Ed$Vhy#0T%l?A*$xTXl=y03 zLp~exdE5lav&|4AB_*{8rKtkYa8f{j%EbEO;Xmys0)%l6>k2VHJ;D{%cf+xD`l0ph zX6{do0%tU&TjgJdd}Om+Uo?t5dBcNbSlDh>Cn_ePvbG;eTFSHbuV4+2QSz&o+N-kV zxZStL4j<2HS&8ilzxG6~)gq4O!Lz|jZFx$})jO^f?=Q9n5JCGMiVX|z)1&d@k5mMl z0*+naJ=+J12gnU+m!200G1p3B8u7;sO)5^l)_cXo%*_0$Nq;B1qbg^4&UCaOg;MmO zHDkh$xmzD27|>!PmntlnH9b#$zYP`N17M6vYvLyv9&#Uk=w;KM0dvCJ&&Uiy=*T{Q zdYsvQs~|*nw;v) z;e{P%7@FF{ihN9ietH)RjrLf7&pB=cF{KU)f^<8V1><{}!?RIp5KqQ68EVX1m#56GsmkB6lv11Suax4q4m0RyEmsS|uDC zm!J-W3%Eh7Bor7n4@w<3&SNfMpE`94u}+2@k~G#Xt&D zFP#YT$v&i*^F7I;W`guhsq`c)ONScF3;qP!kgPUx7d>S+Jh*;7Z*^Kv*mB#Arp)Q0 zO|jRWH0%uTQ* zWbE+h6kl4pNxQM-yfm&_bRfx9Q4@sR*ZMo2-Y5bf($6jYqh*ikl}$Jjuo3}oqzjTw z=1xa|%33`$r1|nn{TiJyj2)nn(XbvhY_};oRdHSRoV4CN#xQ_^m|0=xpbxR?hQxtq zyO|3^guA4GK~m$nB7xgj_txfbfKIj#L{6o*@7{f=t(Eog@OYN7JWg%3@wO1qQM+xC z#I=IBKZOW4$!qx1(z12+oT|g7aJ{`MDK~l57!7vTH`WvmSJ99TQeaB% z4Tmw75Ga02c&o-`cWUVFHQ(SN!?W%Hoos+Ho%8@(yDQX;PaWg=p|7wWX)r2RiDFZs zW7jUsTo6yM)Vx;Va6gG>DE1W7UaeYv58&;&IW5_7A+NeRZ{NtxY2z8cThL_|ShTZB zrKBG}F;#GOgNi#%uJ>-ixe|g0=9ncopp-I$&~buLS$1*fK&gW2&k_Qv4!e))C$7G_ z?omP@qVGQF^7ug-rSY+&LRQ}q(m`}~Q=9ku^Lqg{JV8yD2@W0N->&RX*MI?=!B6L` zAAw7AQ^2t`k~*aiGBn!%X23Gd76$zfNrm!33r< z2M_q`FWTKW@>{v`?{EA=MYH!M)u*wMS=rKbciZXM7R6HhaRO&B^eqzGhRJs_NXq0n zEZ^xV5C0guXYcv;&|)4STsIQ z@4q5*`~UjMyBE}jC*&b5_$h5A0WS2&%~taN^MwLqc?SnV#kL(=3%7@~x1`!S4@2UW z11}u^@3$F~K@b8SN-zvFa@fG}zG!k*?*`r2;@b1^|GP~j@hgfhu&Q?gUEdWVlWzjp zu)nbu3A;DegovWUZyym_L#jzNgN-cm^o1TUrX#=QG}IPnhvazw&o_IJ!5utO8UfKN z_Jz7HIkg&OYKMW@T{J^{?%cWLi;;ZR(_N?Fm9bQ*uC3_nBK*CW{{Q`U?!#)vr;%{! z#Up)?E$iR|x%))rfucVF(0(8F{qx6S+6W&$e%t`~!qZz1tUchjmy|h*kqdF~r(#I_ zlAi)R-T#NH`t`;0jP3x2l!pkO3@}@yb?hOnx72kK0b?g;S*VNI-fR{Y&7sNwRw)RyJ(`RTtQ92pn@x!!$ zXb4x2>O>Trxy~44bV2|7&->SxP+qzYg#-+#!ML=M$G^x~@>s?+-4Kk;9`7W}8=S@-#QOH`H)!-{C3khLO` zTU&4)5HQGBOP;fPH{A{jVB>hJZC_eTDJOLJAKpRtrDI)ow(-+=eGCVi=tCMw!ddu4 z)U3zqxb4QcnT{OIVR)_hh16AlXNiurc9*U7hYxGLxa%$i6n||xUg+-lfWr6yW}fg6 zceObJY_Vas68!n|rPPBqINs3GjTXfDc0kO?bWZ#4y)&ybaBUyW20d^bQyhPtOrNad zUCb!jJk7Vw-Bl*JtvX|pPC|X+mukenYv+B~k-FEx*A}TlUX8nT=~4ifUino7_2~B7 zdm07gpW_EW-ZlU<{)NO&N-?H#@t7@HrIY*q4`;SI1Lv*9qsI53@s%OLCPGBaLYJAX zyp*FfP&ci6Z&>+b?ECiK|L!*N`ASMlKLjoA&P69YVy(qX=;kD6NTS&j;5gJ?USV&u zf_(FWD9w@s8VYuBWB9|}-n+bcJ$Euq&z(X_h=WoNj z!+S;}tma22c1J`{Utb^f3s>Fiu6Plk$g+hCb;iu;Plf$Z? z6FxCoifXZ*7-cCsk~{L{SY){offQpAZug(aMNlY|s}Dl2!v`Wkjo(b1VG+jFv-|sF z0=D5zJ-c(9m~pY3{eK8H0UX$=*>OSm)NFFnHqt(u0}gjMr4o;Fwt{EIpU#nebT#at zhoM7z@ouueq6`^_7Q~@nbsyFoDMoI%yVjF9@V3|l(LZDQ--;UdD(m>B{T3k>%KZR;}u8n82|$e3A!EL2>{6%Oywd zp4Ow9%Sr6af_lAjR}X1Awv=Bj+rPg}j?Eq5-Sse(y6Eq+GOdNUD<)!y`LYkYpHniR z?zBG~F6t<_G@tp+5GEa~fK45mh-=HZMEmAHUwX zB+@@1buHY2h4+h#9-43+ZPx9z)|X|GVtj(5|J$eRUM?nyU|few6W&eD5Mv~1Z=Z@T zON<9DYqYliuge;QSt8PJs{BB{;Mf{S($B+N< zA=Z^*cQWSGHw1*f*w@V*U9Pjr(zdT9?v)tdy)iCf*P(I~`dj2U-X9ISVD9*@2Sx7X z9>?V%`AOo@r0Z??-_zwR*#VT3VBokCVIMbwI--PPTNvN;2+y zwx0qQs4HzaC5Oi^c}fqMt%K_5O`7O65F_}<1;dTKG6=F7vwSqLo)MQRlfJfG)6z(0*c^)j;06-$Cz1V**Q_k=! zhEN?O3XVCv5>`hK+kJ`R^GIbG%=ckvlS^|^Qqm2O8S+3oHTabm|8d0Y%CSYy*+sr9na7S_*{7dphH~$`p-J-E!rxrRm zczqqTQ(3sUE&^C~x1B-#>`uiW4U_zaz z<+mIj``12puwEOHyF^b%$z#yz8yc*s!qOGDrYu;`dS9Uk#VEVBl5@S*O&^O zX<<8L|2?~S*Cy<*>V)o?koBW6 zqynz^`Y>5Hxc3>Iaaab$%nlMv-jzhse>_`w88R6@r{1ur4?jK8?sQ*!ri=K}Pf`+c z27S}x7StGyxU%9ycSJ7frEPgEnRLm{Hrd(zG>_@`3p|c5p4VzZ`;X!TI{wnu&j>3O z%BdL!%FZ49lF71dq231$9mha_6rSm_Y}h>BMu@F-8BNiU?zM(n9m6OdDVPh?=X&SB z?;`mUZ+t2qhVb=pf4C5B2e#|=;5O+SO8v>BbK&53JW_J*Yy8`{+ImVE13@JX9ie~) z6l`Fb6nVHmmod=9^P=9H5jno~{U0ZGZ;1VqYS5T6g4uSMXUo18Sf8W-1TAbP?LV~H zzn(YTkV_{t8PEpnnbu~BPU(78y-=x7fJ))RPP|Q*o+H*j7p)W{Hd3Ycud9OMTX4(}fu2==`!D8wYJhX=&+*mEbcLdRlpg_*jgW8TM+K zzit)0N_A1#ei+rC|UPkOQ_|zhh$7CbxVdgzoP?3{mlhG}}BRQOAhvPl1!CXq| z+?GrDj}%?)iA+sGK|73D6vDqpHgh7`4S?>?S;(*U7o-r z&1F=z{$dPL85-CQZ$?3+alBxzXA4?)oKZxu2 z;ZjLBNm-ob@JUz%Zu}~W=*YWZoeDhg<^mO{ha*AZuoq}FFU->Zt2+AiZ|<3#0YY+D z_|uGOYL>M-jr!x(tyW|EjCCtt|I|-eX?pq0jEdPIX?rT@-I*sQ(PxDhBRW*wf8EjD z+d7L6mO0YMJCjW%&L+omXZHSVuW%B*hcx?5!`nD{&#J+Rg9-eLi^K+CdWt6N$bhEM z>^0V3Kmrn8LwQe#Rn(1>>50#e2w80V%QK77XR`f7*r(#Swz!=u4%9}Tt(8F}I zBP3?F-X>VN{_Za=fHh)9>)E#&dzt?%>wJqWz1E6=^{^ar7%`&e_^pb<+$DT}gmeUd zO+VqbdL2gz$^CanQ`M$lUQoH>(p%84`YrlXr&ZfTC*OL5P+ybG-%AQhl|i6gw!ToJ zMw9X!PiaSJPjKGqf?^xTE0~{Cia8XtiPYA>ag+x(BJ5?P!DPwgp=YVh#P_tqp9%qW zK~JDtvy>W)wx|q5bT=3^>l)9L*Mq4iI?-x5dSb#ZKa1OB>WN5wkDoe+M=G3Rh<^9M zWeAc%;?fVjg7z3U@F4wncXS9^-?mNXFb)U3s_L(zdG{Ip^@rPeNl$5uGY=GhI{l=H zHr&c3vMM4Qn6DpYihU`;B(h$c{j+@Rws$$L$=A$V3sEobU-^6DlU&3>PCl^num)z+ z@QiU=6ef^}xE;^X${oVF0!(&>VHfy<6etwoh)4kSGc&Z!GNK?hvkog`G@5v^`5^}* zcU0dK0)7CEJIqY$k;W?(_M&t*n1g|CzBbeZV+AlAQr6nl)-_asp$$I0#yM$xvEtoL zItX~+R)SA7_*b5qxd&^OFb1YJ+VtOFZZ7r!-rJSMKg3*<15-D&#*JnX6 zqlkS!r@$aL>_cjXqQy|He>i01$hdNUe}57TY?Lks30?y{ChA%l-yMLWIHVf5me2MD zrf%F@O3LvC5+ch}3SL`Ng?V-TyP#@u&gU3+)b+A%S~%LlH$>5M-h$`6y?UI4aU&kL zXfHg?7rW^_uYC#26U8`(Np=ru4Y@D>9_R$r<0Q^WHuXaRoU=O?QoPW6}40Vk9_so{o8jvm9vEydS{6RVE8#ND&q zeFhUJh^eSJHe|DP8RQJvq{aUJc+l%fsgGe4ITuEMjVC^virwPpSMA3<&dqC`t3@u0 z&4Vh2^>0$FhdO)>V~xMeoM>EO2tUWADc4V1sJ;Dqg1Ut4UTs0VL&{_>L16mfy*_jA z$up}Af_O%uR6;@mrX`^Tk#Q!MR&m0VfUtkC)B&g-WB4=2Co&{S=SyFTD^T|Z5 zbl9O1gnF%hzmB>9Gz2~{lo!?;bjC*H)* zOaObg+kAo46UcbsV$b^=q)Vt%=_I_(YQF3L2Y?n2X-1f^)dh#%*d1QNvIrWMdYAxw zXl`z{o%h28x?m)KTL`*;WFiJ@08anRAO_cRrh9ff%rdWJZ+=%k$-1)Q&B-<#E>=}n zrud{`GN9e+zU>)nqh_OS=A~=Kra~t2L4s6Nt)E*T66t$q`xt5fP9;#eedmV8C)>YA zM7b9z${Pqv37$N8$tH0JAg*`5-UB>L3M_(NEH7~4k$&hL6vWojMvjDG`=An_fXvh= z=%?TzeHgzIaItJSHXlA9@|Eo}U`FdjeHcs zYFjX>mX@!~TvvPV`M2f-ehjD0$WQ=PTH%^F+Td)Aygk?$neer?!KOY^gc+} z73W=L6}qpy=Wq01<)b?nucg5Emrj+l_aa~44eRyF(>Idq`Pe0Vx$>)!Dq|v}>6XGU zJ45%)oqUcTD^1}hJ+2||C=NFUK9yx&t5aCF{~+P}Ip{#dM}=LC*t~j6&OcgOxsvK{ z@17Wen!yX&iDah=$!`GR94}Cklk-AmK{e`YN9fLu7x?D;;&{iTzanzaWP1hNt;S$; z&@VP}{;mKu5Nw6LGh+HXk#CI}k8bHOj2t19=Hi$SRLV5W@IngfDGH(18lOPG2a4xI%mJaEkY4yc zlZ8Itd(AGwi%0px%HYf1$@s6FkSsm;J~Vi-IW)e`{YSRS>^&Nb&PZK8RzW8l?!_pB z;I$Sdt1O-YN-gUtLmEy}5@zeC{;|Y$me^F7R^dzFns!w8 z4Ofa(A}lWz?d^-x-vPOV1r%xJCofZBe7s)i&ch|3@ZrbcZ&n9v+zz^(4myfKcI2-aj{kkn^xkQ+d_b9Se<- za8Hb3^kW?4lEmE8Jt&5~aXbq&DiMAfF`Y~YDs`b?skrU-jQJfwR~CPP&4gM}^CuGK z$&RdOMdw$HyVJkwDI6NCL=e|EFx}W-g_{Cq8du}SK$tx!S-b>`QD1)m$Jw~J48X99 zuyqDZ#sNdhe;8 zWq|P|na|Qcs%LnE-0TQq%3PEyuS)1KCW)PS(-?|T4X27_ac%m^er^G3v%b5w!8LYg zlvO4EIkl6=wZWc*;wh+r(RTOEUck{J@-46!(3@sm9%~F&fuREz0|P^%6tm{80U^k% zWb>yeQQ@QI9+>nZtrxXCLwVF+odsd(ng&&%ZyY6Z9cP|F?z6z#Z8g3^!jIIdcsH~(hN+pKtIk49^L7q92 zZ5yA=*#8)2hCX@~J5c)&SG?T@f8cM{0mgt=SaA4$%K_i`>cw~G9ayFSY*zQi^I+^@ z;Nicu7e}gAc$C20@oD#tQOIpkkko8>#Q~~FL15C>`_kJi_JH@}BlPAyO)ZjRy5l}~ zH)w#l?zT!0f$K%X)PYfjlMREVkGb_DIRJSoG%bUcve-cd$EzS827mqIKVWLfbI|)4 z?HWShLIX`~$s$((NTfsb%#6|@EOAXS%;+y5tJ==?vV$X6-cdk#7c)jw%8LSBo)Vl` z&O(S&1M(=lMrOpqXw|m6sX891*2JZ~68pbeJjoieh>E*@5A{S1MCaA)LW9^iBzSc1 z+Jug-3WmpQ3!AOB9I%y2Oe}fYpsmy&;^B^~JK5ZlrsHnSSFm2DmLf-9%L)npzdjHR z(6V&`A)X8M^>E2S$zO&uBVfu8!gV-3qyrOhH~|k@w`R)c5}P5F2-Q~2fN#$PCV`WF zoZ~zdUF*rfj1gFYqWRL(Y;zDQ;n1{8qQ#cETI+WMIun4h@RZ#OTZXndKT}1g#AV9? zrkr-)KcNj4FA0!4o{ZC^!hvrjndvL*%)+R;W8-pdwm%iQyKu#A95m(-5`p;eN z!UH3<^T-96MIj^r^ndCe6E*FK%h52mdgp_K#Iq?~iSRFk$FGrBj6c_t8i0RHP7{$j zgD9f%6b<#g;ks|d^_@1vSBuPJ`Axen*}Q#S#=^|}{;JqF=!Zzl)MuzklCVu&w{P5bB+5E8G)Xo*nSWel=77xh?1hQJx=Ecu&4= zwQ1A%<^Y6+9ht40p67{z3L2wN=ahHbyM5u(J1rlZPh=~_sN0>U=-ad?)wntmNN}XF zVtp>O40|@HxBH%A{aKdeg+AXD{dbjone9*1$_zo<;MqUQJxl#T$g64@8r+ni>7i5Q zqH9CCg}ir=yyRDtpBPoRH)I7Z>Lzdm!mexo6oo$XXht&~t(mCJ_+atG(iCh*=4?c% zFY8}lo@{Rg|FRMw9Qho15ifuD`Vgv*b)S2AxW&5Z%BikOzzlXFCT~N_&^88CiOOgt zTgeLneK+Wgy-{ieCPHYI7JeYS7o!SRsPAiQov7|X@;_zKNQT8&LA-?2pq9?^%Pj$G zK{(4`chVx+L0WQ@+ z608;i4=#&4+dq7EM^vrfY&-kxYIVM~{`1ZEY}E8eBE*gVK9?9wtOmH;GjgMC7%|{D z8V967QYn;5gm_##WA|fJ2_%jbdbi%6ffCpxQ_@hNr6bp0&uHK!(h_?aReFW=^Oz#^ zxfkf~svOgOlLF>Nq*PRs_2v_tWCVazxxk^BZR&Un5eE=G`t94dradB52x9{Ib-Flu zI!DxYIsg(Uv!jG9yr^F&{Hj+gefmA^uQTMsr=gM1n^B91GWZQ?rkq#vrjZ^7o8 zo2_tic!!ilK}byFr*HnPPeCx`7TkV;Q?z`#5jDGAHL+hPVB`FFw?a@*Pq*UNU6*3J zK`-HQR-iPs`6A=s)YM%ZXB~Vdb5JI;c@zK;r>}8akmNR#pleE;ZmbjjotO3lu zTGmwk`^vb87NLoG?I8^l)gYiJiFUKi-f=UAkX?xN98mBIFl`7DI{+^(s>?*MBe|h% zJ~4IHPWbZf?WDj#DhwdK2!>vcN;cjbXk+)`DMhR;RI~pgrF`u3TU-B193Y+|__S&{E&B@e}{> z;jr=tKd#N@gaRcb5S*E73TcV>UbsDeZzJyh_)$No)*!0th5Z*c#OOivf=xLl0LJn4 z;O#I1VpykL=rZ-I`X}n|L_o7%s60h#QGRdCZ=sw+zp{Lx_sjL<*_`HPnEy4vCYj4K zh|0E=IQelb5Z=OyH*r?Ahr(YoGjB~pn1NQM)j*QnfI!WjS$WI`Puq`MfYYNhheC6 z-*z+kGH@QG1L~OG+Ca}2ceL1ftdL8%SX%t*_VY~PQVp0kQupmR&sxAhRNiExVG>*M z2={B|6VX+f!wqqbdA?dK|9+MLjVTrR2!YP*AfL_nrAWxwI0p`VEo?uqL7A)`3H|-V zBLabopUWTIYYFxL=yPD-v|^ygBVK+6x2aN$>T#qOvn@! z2D07v$u)C^y1)U9Ldc58KFugbznq1I{ImiJz6|q)otOucrC94p5#EH<1iJIf5IHA8> zQn&%u*e9m|o$~8+V7V)v;cbj~9pBj7Cn2nRA0UAT116y8Jj-hNtp*njUe=A8&!%P^ zCfQ9TMpo{x=1&4KAR)yg`wBlK=0-t{P#o_}o3y{dt$|(G6eG+8)k2i&EmkKbSS<8Ghxe!XAUbv@UWoh4oD&Vrx#~mtD+X0j+4kS*I6|YI!VW*h_V%4NpQ!dZJZU!ZMxBIZ)yhUe&_V3uK3_>?(t35k1&7b-}+K! z1$sd=pcyQSB!wqlE9nA?LF+Husve~qutc~Y${_1N1y+8*1&|bcT6(qmT`a~D9E@Lo zzZ!FvTGwl#k3SW5bhs9S(L| zV-aBE$Ea|LwqAl+hVcd+CyA4i`AE1bZ#}_PQtn!hcOJ#%wetUe?-aB}hOEt;zau3s zKuEm3Ji_+r!DwKd$-cVJ%+M7!tmzacIy#nsvwfilXBba>nyMSLac%CcZjt0Y% zMRRZ>oyIE$o0oW*=OkhF>kk6fe6DXW3CfAEE~)Z`Bj?4uYuB$w<86yCU-jqEugV5l zspg#zW#kmGRueUT`Oc$<9O55b$S1eZcHEyc|cE& zXRd1bfdime?Jf4nsPw`_I_1j|93q}a#d^Pn2V=j`?C!IspSo}Av&_Iu8SY#B$~usZeDjW$!lsfs1rD3Bge*5WmW z?_LDkGD2#Hi?~WfpCs6L=LH{!kI6jh2uR1ujmGs~z8@bKF<|qDd24oi2-FKE6Y6@FMleL##f|5yohY^F?c^m~2eq%hm%e!}-C+_I{Yp;&1O% zh%KD1DOMVYkPSKt+Hk8cyz7%kjWjc9C{Pk0Nu|nwyyQV=fTYG+sbU6@pOx<5!8YNS z$C0o>_Rc~c!(La}ME;6+Q!k9d`Ohna_MuNO*?&8n)OLIJY2eu6Ajr5MLy|9-QV$0q z@$z>CB-;64>iF=YOb&DN*Y*U$ z&P%z&l*WsM2CLxIud_Gt4(Z6{I7@-?$_%V<+JW6})B#3opK93*W@`yZB@s?QInv+1 zc=Ji=(F3rQ+#pxxPQtJ zE^waDqNN9r1uzGB7tXp#=IL#CWqR#(oFGZRepb@zg*O#Bxz$+4f1!ekK^;Rk6fD_h z)ss^{9{-F8eMDD!kQ#Mc(D-S^ej@ohlTk;i@5p-)i@(HqTk3B5cg-wnZm*g*3D9E` z?Rv%my=pQME03{~3nCEV?M156Z$h&-X}R{+Klh!_Gb-jyE&5UKBnx==TXjE*c17$< z+_)eq=R$;c0Q{a`*?Myz&L2)6&q9-Q@{x`yeuLP`8pM?abjVg#$Z^+zb8a*7Itib! z#UJu|Dun7Ca)SyWiK7SFH%&chJu`l;X2VVxJIJ&PLA8^qnz^5~8?j}Ph7KqF<#R}D z!lSr&YDrnPA`!r($fJWHy!Ac~YW>mip7qF3e<5?A0$7KVq#ql>RmcGZH>Jr#cITnU zD%Pu}GnWygBWNmFzrF>v;je2!&=TK(5#1V$e~z&OB+P&3EMz2pA{EdE?TvW3r)Tad zFJbAt&B}iz$V-`?=~TF{g!{%8qTmD^Po83si{Bs#LbHu@(myOeLIe2qyw#-}%$d>i zFIBJX-+S0*&n96iD~hbM+Ms z)GW8PuU|I2bd!9>ju4t30O#^FjTCvrasFIl7*emO_140%;!h=9U|?L)e<0heoZPnh z%&WZvVp*+#??}cOt5Qdz#Xu>AxMY}^1LogQAgm1%ub%wpbtS?AW}f<99}7tJ8>C<( z*6o^{n+I3j)MUXyj3n{qZ1TbtK-oUgh(Irj(5WQcjcu2?j%vn#+>i_!#Pg-icKV6I z(z;ZG;}Xp^l@)2p!#OgHtsfs5#3{zs0=fu}ySvI~t$&&!sTuydph=M&z6j=M|hvw`(HEnGLeg<*YG7-dr=;g4GHaoE>0lX77o4zB{9D%z;XFSDC83k>*L)% z_`S|suHyD*$6;tJ06K)n7qk{xmgWv&csjq0wB5+SZ0hw5*Bg?U<^fj}SddvVjs#tw z5~Pe|R&-sq=)xc=oCzU&WEXGhnL{&SHS=!S->hB4U9JHXZ~Y;7WO=}df-|Ge?IIP9 zG<_?2>)IP+Qe4?}b9rq`#asemH3$;~%Q>6o+|u*PPd!2)am4+v*#p`PWbl<>iHi>g zY*AvnXyok4ix^7L=={oe_zUFl%mGTmA>M$jx%Cq4D@lM@0(~8=6F>q^fF1p>@h9z8 zn;btV@No`MdFl_oYBp$p5jscm2>FxW;y!;m!HT#$?hza1J_|k~{G;@aRG8<)L2^tY z>Uo$EWp|F&rXz%^gr;C z&N?USykQc++BbkJkfdZD9t(k4^vV!L918VQPv$+y=U@%7G=vf{z_nCM&FOB(eY2rr z`+gtviVaI$Hhu?X5o$gk_y$cpzgSNIjnRzCtLC6{H-hSt;|FfXmQZG4VsjmQN^W+*7X(mh)bxXKxmVwV(CIOK zFM0b}lV`FI?3)?WzSuka9sMYI_Ei@KglPIPI3bJxS-k$`X02ty0m6j_Ny8{M9<-45 zZ-6%%-HIS6Vcd&wbEE%K%jj2LAeR2PvG5Tpk5`&a$mg<%BZiFO9KDORoXrQq|7FDtt4m9Dr8RiA&13o2 z?!75J+r~Igklb)rfdzSuCs3XitG%f7EQ97d6ZYGt2{n8D1v^el7lTw7h)HN~p~EV^ z)R@NKRNtw%Fu-<~;*E~tDWTO%-Z&f0R;0en`Zhfk!Ap+o+v`bm)m%(OclVzs_SySc z+k3{o^gp@kDI1->1v^{2xB4{d^daLCd{zNKdP;5nih8VW1pzVL;2gB4nj^L(GmuB!YLMBC<2jAQd}6s=!?nuj&GyO z0wNG_-LX-}jg9j)i<`ooTka8F3LTBzD}ZJCAWb4VGVr$f2AtT)&r(OxK)KMA)-EeQ z7N<1nR=l444@Dn_`iP8Z`D3*~vnSWBS9#zU8r%KTj>?g3PxKm{ZjCs))ie3khM&;U z@H#FtRUIGri}`KW&A-elna}_Y=k32fHF_Sj$D@_x+G?%>{UqBG&&MvftMzxT!F1L| zmRj%X@pCt6PnJtzJ@14Eg)}pa;WCigsBmyqO^1~&31rNEN{P&;XgnSZK9q}Q& z23P94D#0t@1_M;hRu{X~spiXWeJBdZMP3--C`~jpB9Dkhr&OPwA+>7<oyfYX9Z>yCAQE*HIT`q~=&Jp$%%1yjxE~lN~_j9CQpZ1cA|Pmyhl}NH78$ zgy_x#dlEi>s?S9RwhxwXFJa`{Mj zWHV!2#aCw_CPqB=o4w%W04W2-$YmP}YBV*VzSc{u>ut@PAE3R>yKAs!B!}d@@hv=J zrgNS7BNsvb?LH?z{;ptt2LxAhcvJ?sZC67;vJ#jA6V8Fl&XC`Eri*zyTtrltd6;6j zjQ7LOkLr4~!vQBRRnS`wKI=E+)kg7SpWh#VQ7##2%|P3pK{Q6PbPN+_=7+)$@-T(7 z+-N^(7m69P+u65OX)b0Ra~D889iF$}Rvm$^`UZ&lM))ORoPC{csK#{+p*)qQ!`U)8 zpYs>W_Zxk-OYG{~UV;WI@zGy*8d}q2x?>L~xd+t66z!!v50OV$NA5Ilt7{nZ$dVy0 z9vAFriJw{)^q&Tw3VT|4_+pgDpr^*<07PQz!YA!jUU>)1tqzqnW@Y;PC|SEdRZc=k zWBQ7KSwwLQoEG`YaqO?I+YFJh11pGHjo@RJ-$fE_~0*?-=IK`{)gJew&M>ghA^NQk}DA7NW zdRCxm6ayD|&yQbqXGjliPkHDL&R;lrVFX?TGD+vL<@8^NbiwOw$4B=^Hixm|c_T~p z+J;!}yh}c=fIva*O4BcO7t0&H)^j9wK3cl0ObGXT*d*;Ql!rcfs|+fxwX8moQ5g$)ZH8V+`Zw;MaJ|+1H1a@@OP+21)So5{YjoFxGfyK(E zn%l>Wdq3Wqk<#_eKE;^&a7sPlZ@?ZMz+X&dt2?o-#A zJo@+V9j?|lvw;`L$psz0aca)}Zp}dn7wIS5H0~?eCv8gy@gSbszJHlP-xI+?XJHRr zdI2&EMClqB_yp1J!@XI{iuW9Jzl#G;+ILgUPp?{Gf`FwT8Y6KN_zXQN5AfOX0B2KY zu^D9|dc%Y=9X*g%+TZV90o`;z5{JmZz@Yo+@@swYoc3SVE~pF~P^jY6EmbjCSu7ff zEcj4i^4WQOSIM zWB{~(QSb9lgU3Rrl=Ve#Qrp7Nbls^ZuuCM#YU(%5ozbFOA(=DxW}olkEzS9qB8m{Z ziMnDPvVQTE0Fa2heyH`1`nxa26Ny2-_wx=V>&EsrMP|aYm951h5z1`@;+h}a>Z}EN zi2^t|q%g!8pn?0c-Me2P9faEGB)HV*+YF8CDjz6^J|7Axjsjg_fb0pW`tV%vANd*w zD>Pq?tmf3c)$YSm$Ap3f3S;GtZHvwLC>(500dkBcp+Ld%26d)kqC?#J1?xofiC zThq;HJ;_=|b8}-_0v;>+y389zj{9!U+3v=kF`PlC+sur?}{f1Lsg zN*voCnn)x{Af*{lS^fB47T!wxyex%SSewMDT||%MtdC&D6N$s#VkAr7H~H@Kk|=+= z@|PF&`lHSZ<^flu3CTA|r-SUsK(zGWI8BBN-AL`{2TNcJdb}z~y_|F;4ksu;^t3Sz zlEH>D&-@yI0AIUymaQNe9N%?*L{>amDg7)=KgTVr4I2s(H{U!c3^yjQ;zR3xF1Sf- z^fIBt%AR74S}SAw5nAeixhv!6n!Q3??-)fmvh@z(x5xPY$C!wqLGKszn)l?f*s+;Y z(7Qx|-D#Lh@jJfkzD%_NeBca|FCe#5B0YER_H+A555EVc(9uJwPi}Ou5pm;K1vjZ7 zulE12WC#&%x+``#cpP zgWd1&nM2fBiC=;9^Z~!WofdwlVVZKqG94%dK-~M2f%oUz?Q z&7XfEIV=<_>TA>0qCRtEDJ?Xj+h|{3lsLFz}+i>e*-*T29{ISHnim1}qiufy(T=$a(j0|0VFZ^2Ku!}1S$n`%FEsM?6 zI841%2xfU?Mil$vRJG(e#Ge|ZLXYIG;1LoEOOg?uUrzc1;yw=W^j>yQz&$DNyZE<% zDd_1cDTzV6yf0Ya1fccqfB(x(vn(`ne|PPY^_xUzA4Nh^WCbC3h-KLtCcwgXdv9Z2 z6A-tSh0(&=z^kSJHC1I?^%MWZgcyb3wdznmI#8NgqmlA|u~c#ivSm~~rYcsmzY&^v zhd$;#Mok`)cM|FCRQcj;sLOM97l&_?dpz9aT@51cjXaMJMg!4x2KnVMhbus zQULrQfR`H?z8(I>1X!tHXV%)+cly4T;M&xWDhBi$4{Z)LlrHj>LN^}?8X>Wd;iy4h2XN1>;mh$o>mUXRvu zwoN=(_K;>frQ_!g7t`yN-e@=2w{Gf&`VCGYx+_PBCuC%dDc|!@B(KYaMdHIHTI;LW zhvq9^4|dykc zJ!~TV>N+IyRbA+TcEs|!?5Fvr(@!@)-jVg`=#+VAEj@cA0G-5VdX4OW>``_{KNgGr zgp-c3*8&CAw_b8KE{@nzfC*&&oF`S)lJ<5#J_E>ieqcTrN8{lJ*f`i7gBSlS8uxUJ}}?_ zh5X#xOlhVlh3rlWYIU3;?Q(VrvpK#YFY0p&}$JaMOf%sL*T7E`{yrNw0(G_ znGmsjhy5SSzys2Y2;-4eavaimdQ*sW$l+KBfgh3gbCjycv@UI4CdW~s z4>&gF{g^{EPHhY_2tc&L=Q2Z>5f+D(-V~h9VU$COIDUz{^daEe5LUdUv>szc?^3;` zEDkj}x(r=HRqCk2Lo!6N@#VwXJS0~puat4dnqB3+LBu2M040a@YV|SXZ-$|Oy7jFfj^L)kb#@n_v0X9u}_T7fduj}e>7C|Pc0s) zm9H*S1z8a+QFJ1>;1J*tCU$BxCphgTpb0gA%ZuvU2BD2G>oA+GJ|e~etciwf%><9Q zd(G$)XHifT@ZaHTiSD}4Rng{hbyqVE0q0_fnWx4XCKhY zzFzF!zpx=Y2!<8SR+Pc4_Tev|q={XlKE z|1Hh-yQ=Y%=!~Yqn}`GZ(hoR&3aMGio>UWCuls2l(?eyJ+7@qS2t%q`qWZ;q91|J4(%U zSdb;1`MAD&s%Odt>(BeOlqXkg4WILuo@uA}^KxpTFQ>FVHA%j@wAOle_WBjUi_h;j zNVjF|8Jn66Vn|mqzI|8=;KD6MKy5Cu?=NJeadz5Qjo2R?pJRlafdq<2dS0)p&f%ao z;G5}(b+2=e(f>JuF=ZzA1C)a3rc1G2DY?rEtj?@eUwlA!t3`*hxWK zRb$l{4eK(fOh{NkIB#j$fDfQ4BD7oY;tYpslsw;`Lc`_ZefO7JVgU;LXDMKQ_(Z4m zN*-A3ItQxuprbSO1S!k7TD68lk=>;3n9*b>;#pNQ z%I^Mr?S}KN<_mpi&&SghEQ(dqC;3|`Q^fx3iyo`TPl?{>Bx4t?>ydi>?>+kqFG zF&mPDkP`)D#ATU-zL)5$3MlCB^Si>w3eUX~W8~u-sWacPm z1*}d6OzR08q%up{xJ=p-i? z8RErIjCM}?FD+opx?Gd7@g!$R=VDzZpF#%${$r{LV)cyX?Ev4W}zUhe!2^U6m>wVbTIAR@#!D?zuuugkcxy znfJGr6O5nVHSBtXNej3WG#yiLFnGy1r%RhlUG>v`MlX5>2Rke*RFAg6OmS|J!ahcp zn?B;~RQCJ(Q4DL>ZogTd!hQ7a3pvU5nyjfYQ+3?Z=8>uBo3EC`fVo8KE6%ZB#Kb;; zZ-dnw2UUP#ELLj0#whwm`uFBsxC3QKP$UWK8f-h&q>dQkA_$Li>gtb%xiP-7a_3M= zR7>X9v+*Xm8;aV1$pudn64yVAiINa~K59xWvJY6CD$oaPb(WF632bM*y}dQS zwc;>zq2cAJe7}n&_9(wr-)%QMNng7C!C)-{ywz)l*!;a239d^! zk)KQCzAeRb$gz$IWSnn6^X{AFS?a9Hp(yBMP3v9l5xux3s^i?EYKWpDZrMz^B`ikU%KgYM@WZbN}PvY~Amlq&~;r zT5SxrBu8v1UwW(Z+?g*fHu8P;foPFGsF6ADwPdvSHAb1lhSvipr=kBIdbj+MbQL}Q z{$bbJ){@R!h(}%iFAHFd*+4Px5q(NHA&Q$hg7D4cY2*c=_rS2@h2?!^VHkq+o;>E< zaY$v*0L62e>G`Rmq2tR4z$2${mXfrOB=VviJi>gyV~U7AeEDKxY)xws1rh!64Gj(8 zQ{-XLfSlj1#p$ybujYXcBuPS2Qm5y!n5zx-RbNrCSw$`kWZodob`m`m1l@}vm?)M6 z#)`Grkiaf>B5~J+s0FMRx8-Y~_aEhcgn|v@f}qez`IV^=0Y$^v1}52XH3z)v-jX z>U6XDe&T*;hUg7u?JYPuIdZm?#hx2xj^ev+qe{dP zUN&(7sRZ8!v#4}6Z|cY0xu41>QN4;*UQIKuzhL{CHb`V`YB1zF*|K{`v*1mw_pGBI zYpcIYXSMsO-5B7_f5h6F^d$=>&$rHB|}1I_X?Lk^HpkOFIV&nT`TV4r9&1E*~=X zVpq+2i;N!h3?ViqrqEk;T*B~MRVCeL*Y~`lq;!EGB=wH9dxUzWx!l4QTozMsbw|tT`rQ+f3LSDuy zsi2My>CS2~$P%g*#9RVs;X0^21v#%kWV(j_t;E~2(cnG|k0f~`Ofa6~u`)4)*rRJK z^PpfvfoxO-373xV!P{XAwC&KBIfNP+k@>CmQ|o;Zfc6K9&SaQRn{R<&ojRY(A(2xj zf{0F{=*JU&<2tpc5=yajk~xrO)VV7O>Qn9KcMY5cgr7ce6(zz}$$nU63)~1f$$F)0 z>GD$5M|Mh8hq00*C<{9vt||frZjLm!xW+u;WGP(hOwELVxX5y!r=Vb=qfv-D$IxtC ztX)`UP#a;bS)lFjk)tcswy2uQC$p~a*nAH{1qwlcK@#)ng37cjL*OhPTEZt|pWYF; z19Wwu_BHJbH}>!)9}p*A494p;knt1kM#|94wXyRu?c4_4prx!qHqNlsZT(S%e^ z_e-Cn;iLI?)UIy$n8XN@uAw?Z4)8y5VG{gZH7%57W3Oiop1);ryxs9blVoiC>->F< zV(xtHekYqrQhirDp3GkfW@Eb424phQqq5hfnUfyQo(Z`~h4y4B54?%PC>W+JN=k%% zp_b^2m~6|vH4S&+2fbCcO?2Aq4>s`c6LUTF_0kl%@P6xQCx5AgwR)0C8P57}u|nbU zhfSmAi6yh@cBeBuC8gX{7O3@yfw`FQ8G=i6i;D{M-z~}C{d%h88N7OX)py@&dHGRV zuKwK;r3iwqQ`nTG-KVTq|JG0`6u6c0h-k%$yF?9daWaeh?F;FYXe*6;JOBO{?4jpT z%RY;bPs;WZwCi^6wu$YaPLgAzb`6mQW{IV2<{oFL!1pMTpYm8Uv%uGLJiijJH;Ez98&)VB|9lJI9$!eIJ3@8cuC z&Vy6s9gG|;9xFL86WyUu9o*w)Rvx@~X)S{ggUCE~Lu|tQsJgiH zaiHP^zY!*UkW$w-4K_(Eac=!yw=CW}S1IPYK(6=arLt{S?zZO{`iy@al}d*idOEH8 z=cJ2C0yTe#Y-d2`4fldKVqASOm;`29pZAPY^k$!YjaWbQnq*F-+`iY(+QdUc=Cyt~ z>^0p5niXQEabGzZ*$??DR88F7LSc%!_%mn2MCx)(+nPs9iZE@2v>E5lWOUG`=g`g#QK;ZY`Eb5yX-$Ncjs#y(q2!=rO(X0z7T~)5Psn&&bM!( z1V-qo*fO z)^oTv()F3JunjT#0S;gW#*^C6?0LwI*~InqQ1S| z(61MP#ETpPNKzaUgt&9?^@NESDM{BGrd{a+T`6QEh*hu4hHYjQ7P2inKezwK@lYZ;zfon+7=hCYP zZ1mUJS>B{xxI(8pkI`o~R`hsF~+fn*` zZ>(EqZd3Ye(<_c@vhC83A`|(qO0Y|`dDE)dp=!wIqiw}dK}@?urTAgPO@+0Jm{YfU z$Mf5D-Mb&}O#KKFX+8dBIx#oyr82EM&6DQl_Sg}d#DgNZc7E|FyEb;7?UL9Pv5`RK zLyj8}+#W1i0{|e9y(T7pmH?*GVOUSQ4DyK~;b)YcWMz#PVF$<+`6xd~ z`-wo2W5W2tDNDUwy9lvWg0;zrh3|beUf&eFz|U%a36`o3J$X~b{nhM+m&QR`tMA^h zP-Md_UQl2lR*7kA^KX&6eQ_5heVCgGO&XnKo{O`7yLi=Cf2dsX`Q!89VE(tlj>o9Pfycwt63j+U&h8P^hFc7;Q7me_^*VJpJZDFH3l&A^(6Y7Akk=P}-?QGlI^# zMeEaD>!cdtktw;hT(cOJ9I9KFwEK6s#~-}0;>k4(6{Jn?SXQuIdQT8g5-~iwgVj^! zXx+joPTGnez(QAhaQ$!$4r`_Pey~usML@85_yasqMr=&zfRvc}I8Mb#W{M|=kVK-B z-*m>uCz@>A*)QxiHJ_b%Se!^7I;)Lrg)C{kfy_* zp9I(SQ3_}6nE-vwY1HT&`U%YBC@iHJlI)sj%iAZOM~o0D`kE!1O)t`B718UsA*SHD z`(ym;m;Y-)6xbn1sHC349xXY!VkvcZ4-ZNc>VW-awqW~QV^}>AU7}r_)0F+l&g9_v zKq@~|tJnH9kW{xxj;Tci^Pc`!t8B*TaLBrl9fQ^}2_dHL7^73Gem_M7+5=n;o zDND}wu}SOSr>{g$GuFXgl274czeyqkd^(L4a^OrCS6t06ROfy5zj^RuG8QZTC9xLm z4Enov{f05JeI^MbRVCMprJGU79t=j6+R2(ijras%R^LSR8D-DkK{1{gpIB4ST+ACS z)>e2Y*-qzlz4i>1lQF80?r9FiqMklCedp6}srd_viEnt4mU14msnVqfv!|3_AS@G- z*7CYFqSnOEnw@}^(M#wmFNA}W=xvOwi<4+HGP)3-#iY(E<~_fHtYd?Fbi!`5h-Bqct-^=u z-nuLh8N#RZD%YEelL|q_}^)vf^+yufZx2@&G3Gl@_rWSz=j8K1lxTeGPKa_Re?}NBy1V4h`ccgw&t{7Ba_k{S^U%#P<4my3|!JWl&2M4|2 zM~aM{oGYzwwwbBe_9$MIt%lH4aR63Rhf4VHE%27ASHW&x@G^eM<@H}<*T;MZ+>B8o zsC&b2B1`XjywxNlWpPzvjks7kUt%L1hcqo@FwB*!=qW!I4If)^#!>0`fJS{q4=2vH zj}+Lavv2toRV+-&x8=7s><%v-S}ui5;dP7KO^$>G+#n`j#=9hS$iY$_IG=;x)lE9xeQL14mr@T4@yg%zgHhk& zn=JB{NWWk(FOS2NE}Vt%uAhhHrmf;gM=?^4bL|7*yCu&r;e|trf-E=+spN11!snPkPKwXHe6W7FZhxEp!J8438+~29y=!sW= z;(n8}zy1s~f;~m|rrNY20&V>sm6{BMt-xktkrMrCMn6~^pT~M3aVP$vEGeFUbS0Ya zJ>JwFaFS`Q1Ww06fjbbfSL5#N0Pc0(7ChfyyAeN_G0CFP+c=#;txdHTf;8*OYjZDh zc%mPpup-0mhCZgTIH?*z9~sTrkqb_9ikR$^p<>9zc94}?GQ^{wnEltTbTI_kR%Q(y zj1Vln>N$Iv=3z3}e5=Wjan@~S@XC{qZcYYTHu)sNZB%Rq7Bkce2lUfvT{^DW@Sq2S zM+nL(Np;?8Xw+9y-7_m%a4oPT_1gH3$0J_b%Xyk{L~_K1Ie5CzvX5xA@|u})rck|| zyUAxU375elY9?F~4NC(yeUoS>23B(g6pSW=_j>%9+RddReS%VNzss)|`fN+YfhX@g z@QCTzS63;5aPEEf#>Y5hAGsQdi%nb?)iRAlr*5}!i2vf<7`zaLrJG}6l1yFzx z)jOi*V~>$Z)9vW9ge|*nhx_g&T7@yX>t0XR=I7-oIJL7uZyyn?#urQ$Po8>kMx+pI zJDK2DWr^V8J1xtjub3zQX!F984rqv$U}r6P=6xR8!mO;U-@9`^esF!3EjO$O{_uL@ zRX?9kzBkCU@|9VdrFBbf4zJlI#{~W0hYK#D10W&Gv4^*TiAO|MxdF<%`xY_DT5w_p zZ_p31F>FyTxcv9}!&Xz>u%PV<us%QhlM*#kd3A_0Sf*vWUZO9=cZ}JN%Q`2IVY6|Jwu;EygFWA)7cX%yOvz<8<_H_o)i!h^6f7z`u6TS>1g0bu@zK>#RTe z#(pD_{aL?vXI0GdeHHmi?PAhQ5MT@S-=^U@S_BOYd$h=fbSzfxN1>coCXYZ^T=PDD zdzGT?3c!=O061#tQD836YgUgs$m_8g_cEdy=|V6)H!~Q=4{r<*)^2j+p9>; zZ-Isycw^Hwo@NHJMPxwClw;iF(q|oMM;sq>QOcBmiVvr=8rEw>5*3FoA3VkDqQrh{ zyANhl45NXOEa-&r9NXbKOK~7_^e5&pPjXK)gY_1`X9f!@3#4s$jN z-~?((H_W4|=7-C#uqa98m}W%&dm}88ItGlc*e#Zul=wBXIOh@t<0yDPP}+9lNL`kU z?34;A{UBFB#}Gf-dziAjys()bOwfsg?@y&d(m59(I-W1&B$=Wn1SbIre)dV#_B`wQ z{nKn!^ZQeEQ=aYL*%QRs;OJe^SS~xxB6eb1;(bRlsd1Nuxf6>|Y3FPI{Z9TLl#-ae z-BjH8k@lW4w?r;?HBROWwKaur3dBtjT0wQX;@57FtIu4IVmc8nk?EIyk3vm@IV#RQ zJw+jtlyhfspem?J(K&JxVeYn6NAFC2E&b^F*}|bn_p4#VUdBuGTZUh7ay8(ads}Rw z`w2peiT9nHox?R^AIkE_IiZl@m)?|wPeBoqEd(B>475*c!u;{imAzrBI7^M=y)*U}bX7 zNA+S_N>YyaZ*B^VSp2u(Xm-yA^7Q1hFoQ6MHkwY-@ZicYsR3tnDU4`Bu)mRVkP~~x zjg`0ujdYNJ9!1S+^m@K$Wc23E`2HKhxn<{=+2?z%T;-%=_&e+S@}kWdqQ^22w|d3z z;L}+8)hLn4stG33ZF#tUVFkF7F~#*#BD!->{WGgH33W+cl}I+eJp0FFqyygq)Td;6 zYjH;1!*vq(1pi0UeIUd5lCk4ozZzfj#1Vg-T&V8*O_>*3y+zk!^XTR{8htZ%+p`5|0?`TC8~ygN-L8c)is+07<=UkKbk zW3i(i7+z%XjR!k}zi#dy{?_)PI8r`{>5b-7Pm{=5V*It@ z+H^O!Zt>cAjF7S|hr{zt@{BOG-`?lzZ5!kHz2!^d3qx;_wtJeRj-DND_3TlUFl`Y} z(uC^K$UCVCMhUIjby@cBu`P0ZPuRH=lyY!Mo6J&wmwM{&L#EQ^vK2Xt62sh>F9cW-F0L=WRQSr>!UF zlO|>pe;=ik76xN7v(^B)ZUIWcA6G-0W*0V8I_S{9b^~2g(^9ur`&(wjaK~R=Q0bsX z#a@&ufB{{$rGu+}eqljAl{gSLOS3>l>FDUFS?@fEL?|<*0!+y{pQs&l3u{6Y!!p1U z&AO^Y(Ds7_K?7E*b~&?0ry#iWUy8{*X&;!EA*kc!-liR!QWCCRP0Y4xD{{7pJ6K$E zmO9e_L*z4}$C*^7=fm!!ypCF|`zeR8PZ8mNs_DD*6qRyrM2>|};o`Y-icVC;H=hOH zsxeq|{t|SwT`_$GgXhM^Mh>iH41eG9?t2u$=ZDe=H3*9+A{=G~O`%S2uYA^ferCg2 zHPYUwNeokv1cs~bSzXW>$m%hS_%=BhuU(T45hKNuga|{3t2K1nm{ThCq=@XdsKCUm z=-L_@vqVQ8zcSlB*XX{q2S~}E&qp_kSiH0ii+jwfTB03w0^MIn5pw{1X1pn)XG}=a zL(&-U$`|xo-WfOLk349g zN!1=#rA<~_o>t8iPcmnUPH%zzqauZN)Pgo=R5L_1^k}1I0Y7>MYKcgZnO}o495A9Q zfL!F}n*}$d`#X7J9k04$@PntV-mDdMu@t-WjKF1&w)o!T zOl*rY_K2#Z2@<*ea`_=Th01ltu)}?9#=x4jzEpSmttboDqLAwYeu0`2Y7d4o9Av8_!`T?5Ab3lV{91ZMBr zg+;{%D2+F#T>$nhW8eepS*I0qeFrmE*-o47dpbkN9tI3oB_nRMJs?1U0+*v+3liHt zg$J_7h6m~omOyu+JQh7HX#J)O#mL0?;-pOpGeQ8?01^Ke!o4Rkp69uo(fTO+_$GxS? z4ikeAvDEeB8Q}Xj;h#TNBD;8Noe;A-$9m<)!(X3i7?m>a{n=W+?!@<)z|+%nJ?$zk(MENHY=SB{vNe{!EE#<1-J~H8@sn z*^RIN5w^+by5Vc`+>Nt~iNlOJX<b;VErE zhMQTF>0JA!3b0sT+3~{9;L2)#l5E(0{5Y=nQ{R()ouBq13>scmqO?t(veXej?Wex zeief-&!{%}VN|hj+D73R8*A_%<0H2{^7wQn=3xCQ|_rS1zexTOi#-3OZqe^_1ny5>R*bFDQlkJd|~+ z>Y34Wx;}G)ne$=yFa-8h>1Xgg50Q1@`b9Gw*pE?|Bn>2BU=?`Prx1aV1}rjairR&0 zw88y}hSQ&%p}S;fBEnPJuwL0ihq zx}*IcmxfFlKwl;VNh%sqr!}5G9b{s@cExGcsLCAsrQf;D7r?Eu$sYLuihQ0~L z^dbIpyz&>|42WLFW^pdJj7?MMfull);$|Ga9^U`=F$bDprm^`Pr=LpNe~tJ=bNMbY zu7t9P6%h9PySL*^7~jfq4Ktu7r-o|3moe{U}YvjKC8pGVSF--B%ZLi6U}PUbHz z5qqKMxtRs>;`zREf#RW6kb<-i{#)bB!ffbiE!pZ{`2y8qPpZfHG+s`2cyVs2G9}AY z!(ELFK;5Lb#@EIjtKt-?Sb4Y36MuBKZ}@I{?Y5Y)6W*IdMy)6pCl{{NHt8t0kq}?I zO*|rV9L#Fyoo5P)XzZbB&Ijy;3TpKQqOo|Q%t4w4%9`mG`>e55alH&uonC@P5WYmh zYQ>4$C57z%c}GM*kPF&9`wEGe%Sg)D=TN(xWP~~bOQL23IfqK=#^t|_l_(arihnc@ z!w^XMb#_H<)sASh@p}iJKvPDJiv=is>`=nvILyEqC+cB*Ob}#ZDBkYL`2BmG32{E= zP)s_vqF>@EOp<(r4J9RHH$g>V2Lpr6ds;ZK)>#~~7(kE5%8bDSxDPT3S%y~-nMF>k zF-ILNt@Q4EHz|V#xZRBPGG3$0SOdG$>IcZYH|CxJ%=kDX-2xoac&=4-U5|&QxADXC zHb8918s=^U#)P97i05H%YHU>ebnpgHCJFjLdjleYpR^l+OwQB4&`z&T zc{CfwNGV?lzSs!OqLwkXe8pFYK5$?}63+#12{RzS@$Z8NEz6|;x6%oX?a49iO;tey zMJr|IBS(99%905o;Mh0GT{ab5`jl>~sT-w-35OcTCNEC<^P6Jb_P(z8;Zoh*08NW> ziTd7m27a0?+R0|KPdiqq8gx!;FnPL<`HrYil0G5*w(>r@BUdkWS*91K`^&&n&MVuT z<608({S*`K_Ean6N5yhqg}m*g^N-R%W<@B>Ktd44tb9P7g*Q52l>Sh5eGey!&9cWz zB|q>LFf4Xi1&nKm(S?c^~dSkzBx=J=Ttb|}!2G>njegmsWs)Jd8G88~$| z#YX(meAN))y1%tCf1_KCnIV3eF$GAPJm0;5$h}c;gDQXv}oOiCLw(l9( z{ttQM!#+emZTq1AWrQi^==Bj--!;bCcrh#7Fdxmv{88b{nDB+nv_ek$YuA-B6Ex$a z9#VX+OMs}^An?_{{I`{bb&cNs=wn<*u~G5Qmp&?Qo=)7A9gX1C(Pjq zH`o3jSKl2^b^rd4jyeeE9J|nQ>={BtLdV{Fgfc2b8L8|MIYu@~_R6lT?5$|oBP(P# z5Tc0Rb-M4*_w#xD{<#0S?>dkBywB_Xx~}WFt{+W>W(BrVEPM$3#p2@yY3!>wS^xs{ zPvv$4H_OACssP%|Vb;4#2I+i{sV)aN1-oaF!LN%?W~&6fqrxe1T5c1HNuMG)#nWM` zG;fNq@9rM~u8}zARgmS(+~p|#u8JYK`1k!3*iVf`!jH`1ml|Dty19AvW@Sp^jT0l3 zgg$FnUx`fEty02ZY}#S0@Cj!lR1w_diFa@-NDl7ZqJ`J9oR;mJk>_n$4q~3co`_;x;*U%P;~g z^n)OOD#C|jDwMGYC9vSE*zhqZUW@4da{~#el6*3izGi;Hb1B^)(c1-r$hZI#<>k5}r#`3WItvCvLY(b7Q_okxg@jbo<_^zB?gI1)kZ?tb^~Q+U6hTs!GLf)(S5YYX`FRz!d27zQGJlg!S??z~s z5-u&^`*f4wXk$w9>C5u(Jt7UR{)6iL=jx@146F(BXdk~kee&NQnv<-SV-TS4b|+?w zIDSJO0pnu&(2x+qg_PW!oT}njF0ON~GbCW2)~J-Dgw&#RNDtH^#-ErbCYFReX|6S& zEHyt<=d5G*FZtezunkhsc$v8MV@k6tLj+bx1+P#EEZ(@Prj%nYU%3JZ_wZciGF@4H zt%i`H%ysVJiZm7<1Q$nt&Y8%S)yk4T=@N)|`%lqda+5{}H zCKY+jE<#uR0A>lXFP)@KCm`da6%GG{>h9_1J z?(2{-SI^u0 zxk8dfAq7E?mP$jNlmk8YG}AvmemChK0su%C5P3O*N9i`C%uyndC^mVJie7~9v>YH- zB5*Mv1}u&~p@c(Z==$%jD^`DnWG#H#D%=RLy4y+RDu+^N3d09+CozXU?3;Aimlo&` zl}CbraabLFmbr>cMxlg3M(Hb6Dv7Xs>OA&52%7Qyw;$DTM8(NISDcu|7c-UFR(8X@iVw2ahL_xU#cOH?#9Oz!&@t_0|t_M+H)VM6KOpMUr%6ABR*Z(t zYzW4jLYTqxwqwnlY5`cckB(ITt|9DR0J0Y>pQ$P*2MI8N^;sI-Ea%W`bn$q^}i78A##26$dtj= zfy%eblL;OX#+C`S1D*ABd`VB5yJ!B50+_k5R^n~=LwE8CF3&Y^#s+#isP*w)RLy({sD z-1UFj9|e=U9mpy!-*3rGYnSxtdBT$bk3`BLDq5z?Qi%jF26c$!^5!g~%7 zvKghZUOmS`x#JC+2a2QxanmQjW)DbO?&-sF2(z3fxQ2NrCS4Eqau};BENjSd4NW~3< z{lK~FYA$x)hasqkUp=17ApYaCU8`rRY9SBAmLfy(*Ekm`wOVH>u6*aALa-g!&5`n8 z$pB!)tVQN&-#F}|@{-aZ`#rZ_{&%uvO=^u`5R@Rt*TxZ-UOB-&zW(=21TQQls7KSw zrxIAhT@$*~TD!hOpt2)qpXV-=GV+w&anzBuO#YWvY+cfs`TDt1;@9%Ctq#S+NJ`te#wdUhOMT$NL zRA!cbKs+ZJ5yq;8ZAP!t`e{({b8bmrKh|t;XK0zwxL=ax}t&cfZl$Lr>k- z;B4kHDEi({-S1-=<@Y9Al9k3x`4lzVwq(@QYVC7jwI$p=Js-X}q8w3p`Ppar4KNBh zCj zR(s5q%K}0!$|Z5`_mw}5P4OW`M*U)4zF+F^o^po(2xfuA8bw;-QX z6^ERkpYxzc1s#d*bqe|%WMd|XRl0=o4G9YygfK@A5#POy&#E0F_Ma*P)flOGDG`YX zd?2R`rp--L7Zxch>xzvxdR0n~zBzGLRtRw(&`PU6>e2Xtx%c$~ZXEw9{$Mw1g`k!$ z@)zruegbu<;#D(!1szuw?(Xv!gF`4?0Xb_<;p_3KwpAhMRhpd6m|b-Qy?5d{Pp6OW zuLo#K!z3kFoZOC7sSm7+GmdfJrt^=9C@h1wZf%e-7&*6KjuVM4$r&Z2*so1 zAC{a?7O+3P#*DpiAK-^cc0id3aNZx_#CV7)99nI&nJHmSr>+oK-rr`y0vef@SKJQAaF9i zmcM4_>-HH%XQn}Qt#hUdx7*r?9;-Co^}8FJahWSW2H(!r>9|blhOQlGWtvxgdnHBm zXj$lstE$n9NVC8H@%X(G&NzqSj3EYPvnKjtTtbxJR8uX4Jd@~YwitHs`8xJO0)ne@ zB?cctN?A#HYSi9L3Ul{=m}^xMozp0%RXYlFF~XLt|zep93A(zNvEl z1xO)5^%kFzWBKY8VkRn!M<@{M4AcVSPAbS7`t?aa5NeRpidU4FO_HUez%Ze&;F5Cf zH~U^Y`YwW1S#7J1lCa+MR#@lC?!(shDudQx`tMc+?Ku8Z&vv!MRP&)vc+jJ=#w2V( z-y}>Cp7`NRKlv|ex>$}Z9&CJsCN!3GRdWDOa!c>7hS#Dn+Ym0%+gE%19|Q_ss4N8% zDopF~>?>`-b2;3UU8OqL&~d}ay1(;;LObU=WQowF-FxoMWa3xFF$K#v4>dJbUuYr9e>k8Q)^bRo0e(U{FdGGQ_R8^;IW zfLZYfp)rci1J7(PpU`t8$#>JW8>y{(zJMSi#ez;sI3!_aCh#6u{EB1w@-Jx!WSIMS zn$@DGkd6GFw?@8XH-wQhg+IDBtZ2guL#DlyR5@HIa)Um_(I9CM{RXGZDekn3Jjm5n zKd)f|c-@0Mx;~rg&R2l2PMV%ndQp2bRph`*f$x^i*SaQC)L1!BnfD?xd@QazO&4pE zC<*$!n0Y*2Eo>r0GFw$4WbbWC-rn~q*{*WnW3_MId_!i~6#-21-$`4F!xd<%{;AKi z7r!9(q(|(Mra_x25TOBQXl1GnYN|en{kIsG+@-ikHc*|d8gVduSTx)bUa`tEC`yOz zM}2@j;a_tS0)-wPXAvjdya+9xgcI2Z9$4a|@7eeUR1CY5(}lQOo#%pT88Lnz$Z)=6 z5CUZU=N%BUn!7&1fyl@)sG`8Y;S5cg88Jovh_oVw8E{o1`eWG7W&xT__kqcRH113G z#V}R_wM1TBc8ezO>JbswzccjTYdPyaNm?Ax<^l)z(f7;lE8}Z;-h2b04!HPaNRb4t zr7TDiFat6_{07hu5%_fymJ(|q#5?)uP$&fe26KsS#f&5=TL~-|jK$HEPyhaHcuddF zlgg0B4MnEKcEedp8pL2Eg~rqdKORZ&XUeovg3C$${i^pit)GB&?0#8EsU-(d3l;uH zLK9d7wa*%AA#1&H4XXU&Z+@Qj%k%qeYDeY{V|B>?d>&)8xkV7gIMlMNOF=KIB2FxH zP+Wceo=wGZ(RoJpwGz&Q;P$bWhvcc0XMTNdU z-7Tg7RUjCWDcUG*?QIm9$Q4V_spZov$=^zm1>*cCEH0q*TjJ^VKUpaz( zV1v9`GH#$I0l{a)b(_u?(i{TFP{_7wMSko-P*y8r9G^aJqq6z-3TC*}e6W;9pJ{Fd z>ZCqk6?Q{i)yPS`A+pGTbF#7}46|}nApE<4;H|aZ`uWp@AzkhL>!jFa&_d)x?>Kn& zlP@RrLZuJvA*foFw{x2Wx#k33AtaiZhd6Oc{@5M!IOUG;qln{dCF>1zI_4HiwGf1# zvb{HihMItC(`Qz){x8nkdItd^YI;iNAD4YAm1Tn|DT%rp85ub6=p{cQ_~_M_lJPzcKfXD%Hnbgs7b|lT)|-#=rv} zOTy_9@#sA^UJo{c)-fhirJN_dw<11W0-VJkSM$k)4yE42LK!{}f6UEs>B^N~6H6vL?muSv88PPCV*Zj>B8`tP zAn;jPT=eY`zY7F6zGN4eDiEjF#-G~$&%wY;&>F)jd!3~6El#-H?^R!Io z30PnC6!t^()VP2o)HWI*paICI=bez}eFdJl9D_)3L=kL*mwL-u$lfM!uj{6Kbzx4qLUWx`@+@~^Z?f={<%+9jk3L<}A(?~# zMjb#m^1EhWeA%0cF`Hj1yX3wFO5cU{^2 ziXHD*Dq{r94)@MepEB*bbV?vAX_^ldQQW}@piQtI;j&x+kb_#}_@}y=1puS*)eCC) z$;QVL;DvwM{_LMd5yZk5Nk(4~^USqR>T+2==j+|7a5SA{{-^RuixY2^*?WWen!M9| z#BFgl6{~xI$O@GA#X~?sJ**{Bm1As}3 z+&^eoD9e0$g>dz;+s+@J|I_+JQ5_x(%sEywokaF_@rKysu6Dw^ezoXh&F zd1C1n`UfzA+9>Tfd7u1cQeK~ud{*1~w}G_(2lOQSP-mRMk$;BVH&^ZMGK5pKoZ}&_ zegE*hbo9)%oU>b$1Z-`fN96b?CyN~kiRKUY{GK1VU8Wc59@zFs2l^thF|x@cF*Pd6Q7kJ+>&7o(yGQ6wvtOM`rYD z(?Cn)nSSmA{Y#DL1_arWBOqBclCv4GnMa-1mlAG6!D5x1fN41n-0sXQRD7^*le`GO9WQN*4rLW-@H3y{9L< zKsQq)*;p{_vp$4<cNO#gC)+VwX(B5n` z-Z#yM7)q*-kb?kvlqjGEKqGV56aaSFyA~Dp6m4-jl(3w*zn^C5I6v{-(MiXUKdk*3 zgmnZ^JY?;eg@WiMBJs@mD5KSr`Bmg*a=y*IQ-S38WP^EcEv!GP)?8hF$D>B_4BK*V=M<#ByX5RoxBB1^qj^8*qvR_ z^{}RY5!^0Fr94o455n9Z^lH7ZP|Aj^H`QJ(GN2!jXqEch0#L%o20#h$a>rXKHr zcHjXM={(a{)iX`kS5g~+G}11;Bbdd-rLmfpc+}{tu8-eN|M2zS>^Uhw{7Z8`6m7E< zF;nAG<^DeK;k>-++YiD_(d0GehEFvNtM~o!w z&~IYp?whTtFVmgdTs}U<5FKE#VO4#LALL%QLCHuJUUkLIzmd~*{R7ANZI^`dzgk;@ z|0{I#p%dvbTy2mda~WgP+a1iI)bJZub~=J48F8?F+wNI+zMWkOH_BBmF=V(k`=2a; z+8_jwz4nx5Btj25mSx8_A z&*9CDI+S`Y%D}@2*^ZY)CiuQV^fgXe|G!mZ3^se!);C-9rbI>9$-{b-Ad0<|C|Q_- zytg&}oM89FvIiv~GHwZwf4B%b8Y6}b4bPL3PFz1TxiuO2!!Lg(v_jP`1mwHQYx9~F zXWyn(-*7B7rA_c%IC0C6Zk}4ExE_3cm30Ii_+=5YrA}82ampolL-k>O2=dwSL_bMW zH6vKz37kvV>h=p~)igd#;5u0}9*ss{L-z|}+wYPuu}L!Fv~rq3%f_u!3TtZ3kIc7k zWRQd?m~FLhG3Rn|1sARZMLM^3YoF#3S?~&k+9}cNYC57YZC(mDNTX^on6{~JK++N6 ze8=v;JT@6;D=r7|Gw8?nP9L)J@^ZxWcaV2!-gH{0oi<~`)c|-N- zh>pT!rQ2r}r?KbR4ohXm?7TvN#WkS(Ni<2BvccpVm)+F>%J$m1qamsqLEf87y}V<3 z@E|N2#RhYfsoI^`ERy@p`YApyo+{V4EtCFl9}{>LA)eojH#fYROLf3hnvwX78{3W~ zDj!preHR}8yl9dbrZ=_3WMrN3NNPy{)@`1N^#|5qI+U=)&J^PP)AwOVIbm>e# zH^J~=n>v0d+AN_ysCS39*|Gdp&xjW|1Md~g(PP-PVyw?&p1el56WZLL_GssmyS)N( zoPS+A>)L4CDbAJl1giPRZ3%Ld^XWEuDl;^jW)4iB(1WfTU-4Hfk{LrCPPbd9TzfsH z!a^9)JLW0ltclfpBNXy^MENk%+z3VW!~@+k}C?{72im+Bv6=X%mmHE&n+w| ztFE!-e)i`LS^LfH&6DNdgK8*#LN4`tn1YvGwDaFA{r~n;wqIuH!gQK z<^Gjzezz_pY-&_0Y1>t`QE0X5BUu@m--dl>A7G7+Oo-$wJ)M><+D6UCC!|(MLpgKe zSis%gOQM$NN2|oktFi6P?Dsk(1Yb$<4AWy?#c^L68yYx?l~*)hqElJU+K3YP8e7{sB;^{rne@_Q4^DMAB8w zNMtdj)XG9sXqj!=zvlcqIFgNHj0c7h@Xkci)y^*3GK+|aKug8l&UH)9$B3#a2b~rM z|B+Xox2qCg$7l8&`~LBnFxcN%DidT{F8}mn21&W_Ox`_^Wz~BbPLQ&W3c9-Qf)Je# zHV)LBij8J;dmsEI2d)5%#-IJgWU3T$x~2`$15Woh!>t?dDWXW`P7F*2Ca~ndX0o}G z$wODmc3%P{vh;zveIbH5A0&~N8y6o$QZLH8ra*89W$j}nhiqc;U!RzRrG^|x+z?s$ z(@;tV1HpE$OcqjKUScv{!)Qt*;1Ha!fdsNq7=!{Rs~imlAlX>|ybLM>8xNjB9Bd zs}K}4>Lr=9HP`7u%Crk^>|MWx20Wqk z8O{T4mx+^hds`ag^06Wm(mvlZZ~w0eBqOjIQc4i`2f34*z3k(64FA|f+jx0=x~`U- zp)$+l!NZn@a=^MU&QGz|imgX@-g;jwju`8J0P#tIdJL!lP7 zx>=^q;IBj?c7!egDCoGn*TmVmhVLMwE(Er$-;br)MiqDQgxldk8n)bAL>jZ=i4~)ZEqQY=_Fhh3ENWBzvT*S-iOSq*kj50-HDC z=5g#71rC=VNci>^Cyd}N&(Tok0~d$3{JF_>WtGA4N9>;kXa0lru972Jc1HH_r30*^t#(Ucq6$PdSnE z-2dGCOhVtVq*3x$N~}MiBG!MVP7o{~5ii6mQL&SdxDi#yOtLCu-IxM! z9-Uo&K*vuwaL2z~+4h$coO*dHlh3u?qlY*s_A-d|kM@K!d5g_2@U02Efk{gmScexi zRJDv2b?)44!$;|wwh$pM%ukcQgk;pnFNwRB1u;{Vi;aX>tKx(lRu>lXO9bz54TP%K z=&7k8y}Z2*Kr!Xq>^KMEriI{sF6dF2K*iZ+lfL8Cj|5^Nl8m}qJZ;Ady}q%54t=nz zUBb9a16g)M%QDF}Ufl4zu~=T1J*WI-62%mafAD#J2c{J+Ik2`SuFD%v=kDr~P&KzL zn5;B6PM^0&$5|U#MiU>wItwZVe6`f9(t4vA7Mxr}+VCEy^{N9f3ljI%uQ;B0RnpKP z3mT)q=RZ;mW{wKoe3zYOFmp_@Q|n*koXCy)AuSox&R{=?-Zf~hgEXzJiJQ)JJPT_{ zQZ7F!mr~b?{RB&+GL&ny&nxACs@@!UcKsG)Ej$*)#w$2C)~i1<3^B4^ z6XXdAxctYbUtO&{8VIj%a@B>}8&dAWG7l-tlu2?XsvnIEfKm4LOG6GHa;M8V>C1^Y z(-p9PNObrVV37s^(x**F)2cvW(gz-1eo*i)8hx(N!j2$kyd8e@U(TIkS~&M=r}oC< z@|=!r%Y!F`vl4H8YMf3!*e+$jya?=$y*Al2ib1J!o`g^%5C9mD8~FkgCe@a$C^9)Y zsn#>xRwc(83%IH>>`4@TU-9uyvXFUa_{vw4TW9hnQN;1F)tT&*|6WLPU1pg5MDJWq{cyUcX6P_QuiqR>1!jECvClGb=#DER>;ym1- zD3ksJD?s`u+;2U{g{1}}J)e`Mn6Q+}5p~6XIS4Rx#wdW(w9xdIwTco=*|a#^oTQEARhldU4kfOCq@76Njk>_tS8?C%{Ympj3{+3=fe}Q3+3n3 zv?|eTO{II9KAlT6d~z>{wyg2_fLiN=VN<|sm>GD6elj+fbcwGt$RCe9PRBbYkCeL8 zcTcF+eBaNnq(53|>}b#vOKDjd!cSmQ9$psDOF7bnBgYJEm30>rxs1UnAKLqpJfszCsb9FxbQ)P{`M)mQW3c~T}XL;T#ZyTKyBhZH*3VIDLX zxV}NTlnfq*$k$G+n=Oz8POQP6%YBOb6R?b0vhDm9C^0bUv-4RJPD2EhXjcA544l-P z`k;?g1{gaZ){6GQqLmd`-~mBlJmH&~SgFA?OXO5PDgybAPWPT89p$kASNZq3Jx_3| z_Pp+DH1;ayn-<%q+m)vMEmfCo~1#gicyA5H3IW z&Vsf=Qt9Sjyc<;TV-s=9u&g57ANl;wHw)s%R9q)0xCTecUeTRdpu9MQ@M#7*)?eJ1uk!8 zh<8?E{I{CZkTK@@XjFgMXCaJpp&~iI{A$B0V`$13H3a%-a|wfo5tr{lWUo+m>^kaW zdR0Cr+OiA`Qals1ycW7wAZOsVifi@2$;aRo)p7A0d=WJ|$5O`D)oj;& zFEFl``*U#phJ0Fvx3&xGL<{Aj-CX>@AB&HaN^{^y?^17dO?qj3MPE>Bx$}?Rzwj|Q zF;J?AW5?dokR>#V6-`LIL!)LV?M|4zLoG279K?DuIc+e{JL8aarP|8ZYYNUljB!7? za)}jzZ#`=I<45xnzNH(e<*A0Vv$fd_#D+Rcfi$@C8a|}ihw7_Zp0csbA@tP5ntINA ztI(YzfwdNCgAM_2&MQ~zpb4hV``(N3DH1n+^1KRc(WT+J0>tpC{bm!&{qL`~!!kaf z>kQFOmB{8)jpmcQo*3Qrq`xNl22*D#>ccAfP4T(`x^3(XV(v7@rdgJI(9c=@x!g79c&-^U z@SME(mGl@Z%>%!W0PBDzE zMO7C9@^wVLe2gB(<(Vpk+|gnShb$rdqroz6lDGw}HFFaRg6M;+=S07em2c8X!?-AA z2Z!P8#CGmb%Nk`z)VbRXtb~8=Df&o+2*sQeH^-R=L0{~+N&6`-oc{f*`!w8neFrVk z_>v71NiJ2K^kExmY=;FA z2d}IQ1UCsW7;*p4AJ0fxA?PqSW185)vHpRP4-Kx6?ZRc|2r(D+JgI`!9V>^J*2yF1 z$#S5U4}$8rGklv^?;+D=S;>J`6-RIau)UzEc(bc$vX}76$o=SH?>FedMqv9U1Fcv z1u8O&fU8Z)+hq)xe4SOrBLdq`6_bup(k*PRuwVQ>ROjfrpg3feGPeAEuDl_`2&I(6 zVSLmOpo=0-klPDM`Ghufwhu<)vmZ~ZoZh{h*LD37%4B(zZjmy)uOOr5#(cRVii*Fh zMJdNWI5scV0394yXthxTE?yfpARMJGf3nr*9D!b}RNPGZ&epTB7+2PTlU{@K4C&_0 z{C}wHWExh=7_D?LnBm^bnd4@&BurD-78^1i1lcFVz+}QEGDq_gUT;j(m_z^Otejl^ z&ln@D6=_L>=4@*4QIiu23>Bu&>xH2jj6G@f3RpOH(N!n0!G9O@5p80(-{(u#mtU>= zIXmBxQ1!Xs_nd;m5hb`+9s8sH?1R81f^K&U{@?Im7I1fWH<%ExRLV@u~{coP%}N`A6Q|L|@KqGMv^;Nx!^ZB>6`A6k| zSr6kB-RRSuKODb&$MQX;WWEadNft0#USIimwS9YoJNI_o!!&jo<+%QYK3?~aDvsfN zXky5N`~?>M@XIG*p#a+SoJqrl8?~yah5ersw;rg6kQY3!e_?sg+dG2JZsEsPflb9M zOaPtXT^4lJeLOt0FP%RcSbl2+nTdD9?7spLlqLd86ZAI9QsD}sjrPMSIMUfM#2`>$ z?XC`4!Fmgao$phLa$fGax2FkyWYWDCOQXI-LinuJk=D+y#D1?GmrvZeEZZ=A?&H*s!#NNyW};npDRQTNk_eM25UC7%Z5O8FQz1nYVfF6K~Y7U{^L zQu73Md0)OKw^9kc?y%kS?@ZsVxIg#pn@eIe^*cK=@QnJw)(f#87$qe=J=E~C%b8%! zxHUKh)_v+S%ewgEOhT=nd_Oh&DZ8bVo!f(fN10dl?Ac8w_ljZWTDI5RBuu5y0)b!5>BogX51RwI{@*Nws`4J=|%U4zDzA29|~3N7fi#q8=fnEI%rQt*!W|#a~8+LM~2_C-+1kNDuR~+ zti6=Sk8^3Qc2M@hK#pOGcbcei*(&~F;`u7+AForZ2tw40feIr)odVvt0qH(9wNY}He^-kTxWa7*s&cbFdd#7*jH+>AKTlP`!H zgDBPBO}mw6sgaE40a}|4sm}b#ZS&`}Dh#Q7C}4iK2V3Ye3^u5?t|bWHb*dHqaG!+M zLv3c#mKjzkW7jmn@V!^eXDUYBKr?hE-7&gY&gT#)WPD7>H)egWny3vP)&}X+ z1K|)nZ0pH~OEtDEl(=Nrz-q{R{1_1mz}gUzfc67lueG_eM3>kgvua0MXBr#Kzm8jqm+#)UK9P8Py=IZdc0j;nycb)m`B4CH z93Zc?wB??poM%;6LySJY(>0N5l_{8_OZ*g3KgG75ccwdHpy^%QTslD!*;>{L%J1vR zt2&BRhG#Fc&0ecm5rs->USM44b?aBTVAU(<;L z-wtnDq85l@v@w_YWeK@#`{xfwW)6cfgEd~V{-{=alG6Hv`5ro}BkVHnT-q6O=0cIf z!-f!mcZpUImnq|+A{9gT&%v76$4qfQ^^c2!U%u7s!|N2Dw5i^TV zKw!4)Qg@c9`U8n>c%&sCu)f~Wd|YoJk)7?lw~@z%e7_l@_YosPw1ZCeChrIx5YN#5 z;c+k8zxAC)a|UqtkR)zbx~a)NK`x8Ndt$Tp1q^0IM`&|7a07Hi)XJr;+GM9=#Oy*T#T z09v>%FNmlal_y;dy~F}8N%EGUeyOhcl`1<6~(TSv)H=tZ`_ziKh`D8xU3ODE@< z=%We>QW*~Yq_m_W!ycX6(}!fjvJFx46o)GmO-ebrJJAL!rTP5%Uk-VlzBp!r)mfFB zr0qj*SOCZ2=o_k-ncAtRO1FM!t+Cjh#pYQ0IZ~(l-#+(mq>H5$7;fCuXYyTLDnH%5 zP%Sc&nud{eq*;J2T`a9mTktVuc(cg1r11xH{`#@9rQlXwS9*g;=q~hMid#{Ls1$%L zIpoHpy7!AICJW#0skK7)1iQsMhwC~zI{0A?SA~xy;4HZeqgSc^u`mWw_?jSYPSz^I zp3N8cGPfxS&=p>UIBJ8h$LIpY`X_JysIw*i@SKHIOYOmgk(pVF_V{gg_Z(0;^g-B| z{ls52CgRZ;L_xZ_>F2ZEKawibj)H4weJads28bU06Hbk~VH1O2KaNv{C~6s3I~lh( z((D%m-sp$5WbeigiDW;F)mOh<$)1D^f}vhf%{6riGYKB znKrf`Fm4&d!~O#Rz}An_?S2Kb>T=~Fr6|cUo>m<0*n#Uk2jYzrw5vsO)^PoZq_p(d z+!UA^g87hwu8qD$a_U2qr1tMqjjN7+fK}6V#&vT4t%gU)9w_0|6%wWOZC@;C2J>}{ zDCK0*9zr4#V&29$tRlAiXy#?hv$G3J!dg6+%cPHM;a^`*@91bA^-iI0Sy|;d=etIj zGs`>9#LMJ#sgc^a$6Q%sZuB0WgsyZcJyjPat_D4UZJ_kde51Ki&hKAe1|KO~6n_6R zcI0zs&u0kOfq*sv{tr>75g| zK?PpgO!xssBb*1ts&V<#;@IvBTl~Tdi1$-(J#$O>D~rEJWXC$#KScKj+(2E^CCZW- zDfCJ&YoX?Lz!sBt!?P|Jv}kC=^k+UH1OIql{0qYq2Rx=pgL53D5NYI^2-!$+Q(CiDu=@3x@$;t&aK9505sX$VkaTrhQIl?^q{V8zJ(LNTga^K`>c> z9*Q9;2irs;z=y>Sz-H}7dKamMQEE!9w?1q>sr{Jlb*8dG{Z2>If$OzT4bR^7e0}%z ziO=_buDLUD-IVduD^I{Qr=-`I{A+J-5C~0*kTZgeC-FJp-otdCp&0f*{Bzf7u;AhB zEOCiJ7CZUEsY?@pZBw($jY-&$x$tVI;=vG5^Nr_~{G647H56f9t0wQHtiWW*0&j0Z zghYb%3ymyxjtVqJKp|8FLg3}N)?f=Ui3z5k_g@l?ap-Ps02i^>!|__!fqgnR4$gHA z&Q`7*)8D{(BMW0#eYv}V8Nlq`>~u4Wsg&ZKr509 zMY$nY_WOPKW6Y#~|1=jeBxEZ0zDA(migP|+WxyhH1{U+Jt|n|e$>|F!(IH9A2#TRo z8A_r`NLnIAg`W#&R*?8OMJDM=Fp|E%EEu@0DnqOKyuFSS-9(b?bkx7rVR|Q(gR1q4D$JY($gd zib0-7;SyP|(#*{*{T_|q3ay(NdVKw`^~ zS)Fo|3EOqj(U2r67UI)hS3?lfQNb@v-$S9;7iZOR_U5G8v!_#GeH zXLLuq&!y0)^Jtu!RL0rSsX7nULP{dNkSx2t8oCIfUI?(I7L?xB*$fRzv z5DS~!y*}(R z3(PfMg#&a6k%G66Ji2y2K<9 zPLqmUN(!Gt(&@<6@!v9tzvy(Ga_qP3UmmRLG^b%g4w^AhB4@T_T*J3ds+VQ^Y3ah>W%bBs zM38(~nKHerX-v?##;@Ka5OC!;Dn-rygutCG45A8&UmdC@;A;@L;aK?3lb+dhO(=Tj*tq=0 zl7&42IjhlG*O0?0a2NH193?|gH^pnC>m~}uaWgKK zoX=r2Z(lPgbv$Qx4T*PZfscmWi0BCXwQxLeKuXnAZl=yrB=DujaIIXpOA_}o(d$BR z0O!pEXfvq)J`C%Jttn!5NCEt{;};}uz#?4lpigl6jw{AKyKv`g%Hvr!-`H6@c!mSy zN?|INf1e-m6Gh1i&^}={Tyo* z$2#dm#kc~GIvs>EM@>j5NjLSA`!#(|3u(y6;~vtr68?@3flB`G;sqivrdtOYY{IYF2j+hiFFMM<0LVD=D9RVb@kcP-b{__dyZusiLx#?i(>q^ z>B7IFXM3k30^y})PY{k%i&V(_{g@k5bTA94uU8fnvO5ctKi*V)aIjw;SEHP|$MoGQ zYeSZ&FEYT|VZ_eb?u4(px?jB0h)4Ea&KZ6@?mT^oQIQfjMA2NF=TC`T|EFdU&LfEH zf=eH2lB>yDS!dY13Jra9<>#;^C;8*caeygBS33I`I<~1mabX! z9a7?w?A*iG)GCwM2Lj@#dB0SjR>!Po;8UhzV{s_ z9E2L&8IlTIwwulfcDZ|33Txc9mh}b9EAj@9wc~Lzx3Rb8QbqQn?=1HPE%s)fUh6Jr ztR01l3|)h>>E~VImV07G`D;oM8-y(jX{;%Tem&minsK0t(l2pizyO_^MdJ8Cjh>xd zM+<8ZwA zno90<%&Ae(2uzzK?wY<7bo; z6he}r;t}cs@vVzi$Vt-=l8?D_@HE3%g3$S2ywp|~qH6f^(3J?>?c3O0lJ^EfSJU2O zmPA=Z){zJW*WGIqW)`J|JPv4rXpib_%<>-F=Vg^bHy+LHtT%!hW>#;So~DIHFJ-UV zHB8-hqw}lu6jE%PeQlK>L4jXy`L)ZVJto#)^(O8cb7L>ElbcNMr-i?h%)>F!cvoF1 z97?fT7&?IDrzzkwak^Zbp5tsVWi;UvK{h45uotz&Af?i3h!VYsZMTe>meUyA>BaJ~ zM}LyB-Z9@(pQlq?q@bae@+92NnC$09W#1Q~4Daq%aB4sEl069d?Fpmf8w8FM+f>^O z{$d=J+t06ybjqE>v*JN~<*|!yf6Iz1eg-6-L-n3FvKez#u}Xr4$D3diE}|MI{5Dlm zkSK=3@Ji8`het)xzY&MUtGQ5Y2Z8fJm@mVrRNBsgsTk)vNl*w034_R%fmE7DUE*X| z(w>n|);`}P$Ll>yjszhGgT-yYv6nxO*nP}_YC8?y;o#DtimRHwLlQhF$M(4wq0$#n z9oR}ZEZxP_Uw$mU7tDC*0lT}Fsg9v2(>NGXRws|76E`8Q+@+6jhrq>3IggoUn~tMz z(mw8<{Tf0+C$!T`%}jb1OR_DC3NB?f+5sk+*J!7-s^dI5M5gf8;}<|EBJ;U8m0Q5- zEFRQ-JnL%*u}BclE0-uD%G4e+M!Grs@4u18kuYHGm*THJP!zNeR7z&I|82lD2Z+>X zDIA({?S;Z*iRo#jzSua9OQ;HM=v>m{d3A5jf7t%}d4E4-20;dwNS@fG<{V905tbSn zANB&o1)VHG+H&UK#WZkzs`eUFf$XH~zF|vscoJ)F_B~KoVJl<9( zsB@@%ag^GSUTg#%JdysQ<1EeKr-*jOOYI6X@21YorFw498h0G=X5BdbYoi`h>oW3Y ziBH$+?Oic#uKFMAlz*~gAL~rZ@U!8tUV)BE`Bj|d_6S>wpxEa=5_cwEM%0g<7z{bf zmmM`Omm2*2n0W>RUAWN2SJZOHNhj^L2&F#_$>SW}EsE7cjlN(WpNDYIV2LCQ(2N*Q z90kRExTgVw@JsvhVavAR+>JG2tl+i3++>@3i_7Df z7+S^i{9s|I>3UHUb7d+EyV(-j-rkOkI7!hT2nmpaw`r;8pMxidvLZHl5SA`4!}8OC z;s}v5nplIA-2|8p4D^4Ly8!l>N0%Yv!ILiSrnG8jM4|K+Ob-tybG~Hj`~WUpH9)6O z7VAyi$>n_yyBoMa6Q!7be22~V*43jGU`(wLBXfI5G9pIw{y`BIJ1_BJ7(mF!KVN!A z3FH2G)Bim~qGZpGl4;?*B@aIMCjLDaYG`IjC;F*cj^5U(LVeDu<9gq@FhR$OX@%!} zcSW0E=`g}JuFPf@ROdCg`z*eYz;fl%`@R1;R4NFaDH(0LyE+nVB;na;2Wh)QEv1^< zmDiHg>UBeo*kZ|-u1!y)!gJOGw8m6G`Kr#l4+%l zOuo8#6A?Wnr;>0-x8Qp3`xf7hYRXX|L6=etG;iazuAFCX!Yk5AMTYJ0Yudh{%-_{G zo^?(i#jhYL?>6C`MMD>EMDO+GA#z^l$&=s4U#_QaZN}uBM9>0QFKBkMqhz0Ql zW!U?g!FQfvKn5xxenbyr_aRb^GMF%}h;y3_JLO+!`mM&j(I;eF+mc!B408$eOo(bO z&inO-kmgtf%9euthrc(g;6RNIZZ7@q2~enL-McJ&B*>vJOVPr(|EdWE-sz$+4oyce zy4`q-N?H7|GH}r#D@TSfnI5OmDI0^PPYYI=)eLlg@r7g~JXUFyB{2sQ__f=9aAK)Qm)YWCW6n3TIQk&Uhi`X}YgE8JHkX zT|4Ky(MzTL-l2)b^yh{iLgaj{))|_2d4-Sk3$CTSI!!(N!Su;de$tPetAAqR_bd#h z81OliR@#D?9v)+E)2jlp&4KSizc2^E(}@WAd?)H9o~9;KC~>afd%DW&ThRZqpFBu= zj_!UU6~m2-V?P1E$uh4;@w@qiZq;X+`pvtYnBX^@iLcn@efYZl4S(t|gjhZ%)5k4* zKV~dn8N#!|RXcD4wT>YEij9l6XT!zGq7=yRB&6j;`G}zDyP}w-caIZL(vUrColOZ+ z1zCOpy~5>*m(PY?C%u76W(X_pELYlZUuwKtX8MdB+5sjOpk9A5-5QNY(%U z&vkLl?!71!u1gY1*_juYtg|G9uYzrOc3MsI2U)$Y>!eE0Ov=Z}0c} z^ZothpW-^sIj`sQF#|3<-Uqrt&3zvp#qbb-`mjfmQC~?p#k#qdS~lL5`$P~}F&Jey ziiQ@Y)H6?zSHIJF-spF*3I}7)7OM$LPe?pUt;-728W661|@`b08 zJJxe!5C8A&LU)j|X~ZE+!CCRtzndZ(2~?E{Ex{po**V8m4 zf~GzFfA(oFjQOW=7}(}*7k?tr`MWg9|HcqTe%Eyl4c>G(Fc&CB8+Jf%Z*aNeShf6& zRPV9ZRGj!ViS^^>48wAijgmO3^g&8fT;5b+FdH9X*=nC=f{J@IPHQh0^tNj$H*+G@ zneVRD=xN0F$Y<}OOxVPp^S}H`Db51i=BH2GYyo=K=~(+L;$CSiQE<$|@2qFjhu+$+ zvnp!IbjOm%Rv+I4>9gUT9t1T#PSkcao?)1I}--;kFQi!(=GUK_7`{sZ1T zc{-V518cJ{-%5#ZsL2A|79w>V6i#AxUv1y(FHo})PylNj8xsFM&xij4 zG8oc~N?=QDwlV+yAu8TF2{NkA%|!{rhdecW#eaKA6EKHDV4Sp1!^gq}u!;8eH5ojT zZxn-|GpL>rHm|#y?3s?Egjqcf@B)FYq4IDi&fen{-cW{2E{c7nRN?aUInOjN-^(AE z5wNWBnN01%$z}-9Rx#c6n_*#|?{84^p%0@73;jBQsUOD3oh7kEy@B-~kJGa;LFKVT z5SFv`G5dck{fxts1JA%pUvlt!`hS3!I|n6-GF4DN495vxDVi{>9kiXIY}dhfgsN9W zp+c?Q-mN`pg+v;oW>3eiJEsfh4}b4LqW;vKirGBng-mu;(zZpbRSAYzb0im zz~4$X&LZ}T&ixv$;{l6H21*raRp=OlquOdg72CzEnuexa>H7*u$|QMC)=FK5#7?Vi z^Lr;#Yq-zKmxQGL*%Vn<mjH|itv3ll#G}s^H*JYQ#>Zx1j#K}&JV|^ckE`K^!G*_ zws`GazF=FRhVS{yHb{ADN_5Pw$+xpCBG{Phqv*0XmZBk+`6r8lz27vnu4i937Q*G@ z`6{Sg905~BA(&cNh7YW**Mq*Q1d*Q2izUzG;i1~`5!Q}dxtV=yWfn~}D5QEn?(jd? zgfPiRR#0Xs1T=VB3m!OO`Y05fA;-7G%ZYkQh{U`Jk~N_|qE^5c8 zbaNenjN{}$s81>Lzo_@@N%|E{p2 z2%P>>V~e3|%=&n@;n(Z;1U2WzernR;^&fWe^lt`U4IhvVUm|`MhM}Tjl zo~Bb$(lXi?^H5UlO18DOHvhsLJV?d8CGmx4xPq#Sk8g=N^oneWU;O#{u$vwPt*Kr3 z10Y+sb1i!?Ovw3G!9QOq|2!6X`>s+bzc8O78GN0zk#-&GD@%+A0^z9>yx!r&FYVsW$fLwD{1d<{-udDU^x7xI?66iPI z?<&I4Yi@Za)okH?{&(R^&ni|P?$AAp>VrY>LktCq2m#1PZC%BLwJW@elHR|@*Y&Ka z4suW>cR16;LG;9ciB-_&o>P;N|Gkr~k(2SyvTj@}a^l48cpm?gI<4W-9rn zl^0@aduL%hy~83ba+p)+%uq*dY~D*wzw)7(tlU$i4vFTRWt3zAH`^1#NY-A=i*>>0 z9~FeR^DtY#&*Jz=1Y~!n0PVXTzP@ONGtN@0D%M-$?*{2iI`m1h=?ho02%A7?&Wf5GY?I&-ogF%nniNiy<&Zse~}U<@!<2z4ek<(5q_PXP86xa3S%VRD%*ZF3wCu zd}^(q6aqIf(}Z~*=6f+jubDuc!fUVJ<}Jjpw3qf&)4uR!!XaUj`R5gw#_g!EHlX&T57hb5RV2JP*s z&K2KtKgwrKN%_nE)#?)H{{h@C$799Y2@h(O^adK>6RF_2FY-ZP@AOrOhf;U7Am9A|u1D3;6k+}crerGR5Mud0 zC*Nlh)|19>M<1)(?_!p%-1J(Wt!FRdM~;DU4jiu!E^83OR`1tG^^<09)_vW7vZTKv;&(O41BK5;isE+nxbC!^4NY~fZf~R14_)eepXoc)>}u1B-_djY6paYC-BXD5 zt{K;lAu6yAI^7oShh+P$!>O{P(v|YsxTZ zV#={K1RyoT3BAz!{c-iN`G?j0xkidAdiaj`8`KV%ob+taOs z0DgD7Gd;VEmOePsN{7dU`Cud}?VhQo&tNE@=~;^z&mJd$0ZsfKAz7ob-=kJ!XxY%Oe&7B=STKE*ts<;cVO;7>&AAv zgrkA-g?7JVdsSu2YnBlapCA{9fc1|jswqqSsBJ8XuI&%>y*Mo-kA zXn-fF1ioQh$QbQ{W*-<4i%dRmeZ~of8qu$3U1kiT5E!D9{Hs0ie>EHish{|rgktMLQt33J` z_M&oOIvisHs#x;t$Y6u^d*V!s>sc*o6wj*3lDe5;=7EwB*#5%AG+?DluW9W5^4zOB z?iuWS^VVy;vNwK6OffO!-%r-1Gux@X-+7)CJ7M&5>2qh_sICvT&q|PEpzqhY!=kPQ zUqx-~(Z+{AgZ+N-Q^h&98y6(_8xy9_ka|BTR7fRMM_d{3NoY+NwZ6^HGIt;ng?r@R z^`Wdecv<`LAuT(9=EN5~143$@DE{z6e>#l02?8n#fni9G|JMv9BZM?slxf1Kny-xn(~=uYd@gyE6<*)m{Y1xnS#y`6Zh!q z0ABmHSZo5tcqydJ0gK~WW+mJUr~_2|bk2(`;0A^tT3J1gBP-A=7n_;s@(`V<9(0U* zX=9}BJ=u2>$*3P}rLCPthA_0@Uh7imt@HZwA{zUG)}GU{9z1yP9M0eX)u?POT*5MF zQXYb@Cb#viny#z;s_M%WKNdUw58FUb`K#)<>7zVDmnQuesuZ0Hbw;c4w~P+{sBBPM zM?XOFIX(R_;_O^=DZuSy6em8X?4G0m=1km?$A8C8+%3$h8+?-HB12hX>@DV*ZAQ}& z9h@RpRR4Cel1JW`VCro1?|e#LD|eJBx~Q~uf0xP07?JA2JYV8pUfqvis?+54C$>fp zySQ0VehwuM?;kwhFZ)2qjC;UEVUQt$*4c?Qn z^z%(~Z&lVu72SehXM=Pjv(4s2{ouK6x~#g3axBM>RD3E|xyNe9B(5|gI7eP!1ZZI)%h_!$I2|$}2s)_3FQ{Qrs5*-3yVzFFEk|en@C(6I> zu8c~Jj zZ5?*EBBiQQqL1X7w#=6L-TFIYv|K?Eyn~<}GxBT#^{HQLbypx?KD~K$qCO5H)p)l~ z8;;-CCw2aBpx#N3d(<;KyTlU06@@;Pf)Tjwtd^_0 zSw_LhMLX7W@1+xNP0L=M?`Dn+ax1N}ZN zg{$swbxX}xoKkt!BIj2HjW%NKMYQz3A0C>~b}}!bV~O4j-3%l5nlwic!c`-#Qw*bR zHA`orh{h;J$j6aWf4xVxSvX+-Kxj*tl9H$K44X@8A1X&OQ?cA-1Iqpz=TnN}LGe|99E@sZ6N<^>s4 zd>~t;=fdEef6hru*_SV=#|wbPQHeSKB|guPgM@PNxOW+m%&1ls$AHXxRIG-3F(&kV zpmGjZbsUPT@Zzzz%-=+Qze6aBV9YrE&-5x2M}TN%rn~AyVn2Y!NI!0*zxq@4B{g*>7jB2NzJ(lT%ElzCb!1e@ATXzaIdmXaZE%7A=wpGgMf_Y0is#4|&l1XcLEQX_rg8MPJ^8zw(k=Rl|u1rPy<2pF_EOz0SK%opuNvIq68I zD|1s#j@@R^1>zor7{!-FoD=S)G-B;!rI%GtQ7lO`*Sh*^o8n%OiZU@z|IWC7z<- z1JL;M`a6Z}XEPMlWSz`fj_wEgDrP=CYo^bSAW1d3t+U%q1czSX*U)TLY;Abevib`3 z3+TB`z!(}8-upWr$C5NQ#~pJ0PS44E{k??PlL&P!qRcvgJ%bnBo~q#(Nyv?P{T>G{ zhXFH?N7p-#4~~D~9$JAsPW+A!Ky8C(?A~UjeKjU1CotUe${6|Js=kEPUZ33|3wOs>b9@8^Boqs-J3HJ6r7>Zeu1J9H$N?~^vy z0W^5!n@d^^$XAJ&2djwrIU+|#hFCFvD)PG?<-01_Dp^u#-F0wRX7>!sjgG6NOk|(A z!P(oz6-$K5qWg(TzfA=vJ86jW46Pr55l?OM;NqK+K=AVNhHd)(`5pAaFXjgGv|nwE zgflG-Weu2k!knEiRy|%V$0uKEv*`VoR5Fd}5HX;eUWI5hBS>nSqIwFZjA)OBeHVyh z5DPPB?)ab~U*Le2Ej1{Py(Br+;%B(&QnCFFlHyY|Z99@?)6SWGF2`bSM|3ydfy?U94KNsM1*|f5+@Fa(C*Ql*S+QON85nBGC z7M=gM;gw*<0$h0Bo{@P|*Cxj`E&L;=K*Dg~p5=8bk7x>nQOMX9A1K^9i}i0%e=7KG zyw?<=5uP`;^;Nn*c1U>smC`Q9UJ%RP;9B!b!P{*c;eHv+S%>8ko^5x_&BJ*pGxZ@Y zQbEZ3zSwwI;~@28JES}fNshkha(iU*X5xBo`cMA#{64G0nj8l9{pC_3Huz*-;?i0y z&RQ34yQ|h)q*O&U|K?vaV&}%r3@j51M5S&ORIxSdZ4ZALzI-WJNi9r4r=>`3#I4Zl zk^^NlP>89wA&mXgQe7k0KVWPq7eX)brQ~6fY!zo%d%o78(R4_}!!%Z9bShPS{n+EH zcOAm6c$YsseQ&fOVpc=$l`Dn9jFMkZ2NnPfo15}7GD@A@{JydWKETL!A!Ic#`ta(2 zofM?XFHSvq45Zo|iUet}dO&v4g>(93VUp)T@J*%(WPR82hF;>=FtIYZf$K43 zv_{Ia0{ZGV&m(Z_euQM?qerL8);~hqw(!c`3-=>!U*bM@qh@y$Xz@xHb&zD?(5-Q< zkSqV}C2K~=M|y2)ohi3Pty>vY#cqZtZpo0*gDA% zufLEuD1G=IEzAj6!s)xNx%4qF=ZYOOqzB~v=xV!v_2yAA=Yv~fu_eoQf#tk+YSWHZ z{n>kTMK-1xYT45L8&hJru`4V+ev{26$A=vKbNCtU~41O7%E2RoX038LOq+?#voSp{(; z)o*QW)x9-sBOLynh20Mzj_KyGI*B$mz{$k!O>fMeiPeCt5~jUqCfdnDa9Xh+wtSMU9L zmc+>G7!3~duVRa^um}gnqlkLP#Wqe(4!4hW+93%qPJ@6+{4>k}ucnzlaq+1Vf`NyO zD9=b2?TG1cRdgB_d?8+K{4$VS+@y)ilJ~1gC4^VIGyB6IiC>+cA7(Ww4otMWe4`JP zuviLKi&!?Zs%1qgdQ63K-btS2q)NLFHCzU8K_Z-Pb09DpmN*xXX{@M_Eiw|?6dE?z{8`WgCIgCItIFK~QOizzBvwS3YlTo{zL>LCU zg~~x5(@Zft#zXc5iLl|SOrE-=F$e@Z4Gl=l~-zf+M70!g`1 zuO;%GVvNKOd@*F44mVji9JB8@Cr?dUZ3xkYb3J-vf&YB!9RaC(1UOGU6r~Pypc+{y z(aN+BIUr-LyYp^m3V&g+u~Jds!W99jYOzCTc?X_5d`Csf_K#|2hx;2XDU-~!O4UHz z+=8H#KYXt#Af4GliEw{4r{rYpguSv{fg)>6ir^=CLG<`tIkuQD+}YXzRm*IuJIA)} zQ@-1)#V0Gw(9Lf^_0xQuXloL;KA1G;A5RAthEdxHBtC0ihMW>D*jp0no|-S5RKugA z*VaduWNT#=-TuW#>M#^Piy-FO^J_2HY(EHScA>t=iw!jEPW^c#6hb9b+UV#KQ!E#o zkWo_W$6B|KReiX-IKk2POAwfXU*js5>tzqSPsjr&qGyR;W&O`@58K)|!s0)Lhh8m> zg!pfwGzH`8!|$M7o2W1OO0Pp;K7OgC(f3c#%H$bx@hQ{;v2Rn(A$mW``>nI@)~GJ= zS*s_|)7z43fspt#&zru{J|Fy|a+E?`Wil39gSAi;~X@Y z%v1_d^jewBywn<4CifV^02sXLA%)a3cc+}9WTzKu&_5JkQ%D&gE6boLr_fLE0&9$f zTt6sJsY}~&0SW+5FeCHAMjKo%9{13YVs2ek`n7gbW1V-y@SAC}hFaKTSa)VRQID|6 z$NqTDxw?|q9Dy#vI<1n@4b8zNhlFYWW9K_=GpNvYa(t)StHw?^n50GDA*S~Cq7=Dd zqFOUYLPu~JWOQ9gE+NwSB{7N#UB3JWG}LL>Xrog}v(yZ|HH@N3vv92{CWy@^U`kJ_ z0pV29@Bs$5M*XsIffEiQzj71;(jlI-!uYM-zaTGsLBBy+1o$SjPV7qZQVbfaKDq)9 zi{o)22W9>Cicm$VTW1QgvW2 zjXiTwPMSX|BEj?w#frpvG^&}0IPJRE%X<9zRh6=o;(|dlZA1G%J)TP=r)3XaKR;pX zJ9YU;{0X&a;ir_87D{as>-A-2K(}2^YfV)O3O4+0etwS?KX60<>!|$F?$Rv+uqhM4 zesV5Nb!jUK`=Z}OI!c}j|0uw7#NAO;afl`Ymr;VgokC2c4Es?RG*qZ$6BR=|J)@z= z^Qa-#%Y0nhh(A&V*CbNNmpTVC=QaAnCSyUIOoQAJL?Bi~AsnAb7E zJlr#O`Vjv}|CZ4c#^tFw+SzFzk5Kx}0jDmlU=I-Is{q@lKW|<&E>vfFi90<+wI~x7 zib#vvF&G}q91*@4?@O7@B8KPGki~`9Ilb$mJm$j^bBX|Fw#Mz*J#R2QfJ#{kr1J() zoBqneV+BrS%Zxn4+*=5@V(gUG8x}hpHS0c8ZA$U34s_4`BM(;eEux$lQqO~nsr<|} z_;#}1OM=nXLgP9&^iJ9$MR1|ET^dR8V<$|QJPaT@Y53@k_uGBMe-!L6Nnps6#GKXV zwlm7SsOpwz2Acf$)6-T-tKTo4l##gu@G{^2{!c62b%khd!c&93HRlBpNAAvtwlOkE zNQO?Du_I)JfKR~U#ow8DlsA+o-!zZpDXk$1f{cUXskXFOHa0fZ^@&TQj@Ac4YzYw# z3IX39JZ|r{ed_=Iy2xD6ukUZ>a)Z=4L{j){-ok3(eD~_g$5);p6_fbZNFI0o1ytu~ zNlb^N2IpAf?r|R}%HO5_W>}ofR!GOWb6F|)tM5_4KP|3pROL*0FE|($Ms7qn@KU@I z5;Wo9K$yoloIG!qwlSx?qbhrS1Eoe(W0z#vQYRK1!{}bkzJ6&6_4IPN(z`M!)g3Ml z%$VOWJn{8`5B|~Ol9RcIf5g!3zI55cl7eHQT@Ip$g3gC(oB?HLIKfrHX0DK1%!1nl zB_Ft*gh+Xk^U8bU)!VxH#-`9yKIoWAK}Z%!&r)wwj7<^H?34&xOi<91a?i$bAfEj$Pdu<6Ca6KLwz< zPsgX%^w0;Wr1B+Iey$7o6P&!vb#3TEj~Q8{Rhie*`u7#U&X;!MEP{Y@?7p@ zln@uJvPCbW?iuDsBDg;so3qS&5c>v%#-+ftF0L_OoSY_bt{nuRo%`wb#I*RBOz!}{QQc{fO>G}y!lo)24pfuu7 zybN&SU$fm{M50+J2Agw~HEGH-ap*-eXLQWw>y)&cD3}^_cfqt|=UT9mApPMKSIFhD z%)?yhK7ANN7bLqgXVEgT-;P9wnSWu%W1=tV>4O6^bOa5|j!eWekUW%uc+0@}bOqOF zxv_R2PfzKpSaOF@^Aefp@`wR9&>Ys~V|88)ecE{xI<&}5z~c`Lw5T@G?=1p9rW0{0os9Ig{*jH2(WhHtUxVH4 z`@`NhJ@5nQ=qWEElKri5SW?rqB8{Tm!4FJ8TPE^cK6k{KkL(P2|#MbaOG8Twa&s+ zd+%1D3i@jdyS?^~m^%o5*14_vI7fK$=ChB{Z;-FpOhhE`sp@XKDUZ@PI%FScHuLj#7=R5MRaR1B%u%Y)Rz- zf5)3oiys@fEDfS7L0((5CU}Fx{j_={E64oE?TZalGD{i2qwg9mEbH}B16MzC#qL@M zhnOu|)D76M757k-fyx&+$nVQ>3EHJ;qzapygcc>HOuB;WcTOGpm*JGbSrb8yTuQ{F zN$9IZLg=!s#S4iVNH69(IS9*IbZP|WrV=1bS}hF2UF`8c3iUn@)RNzB93+%SSwz9K{p?gvg>dOfs@$e%w1w)%_SIMm|0D(=77msd!7K(}9y4UhW z_bm&!?f^>+VIg%^m@nZP04dqBQZ~U!Cr=o&YRa7MQUWILf$(c?x<`De!Ws*ika48&Vd8`qayLQPx{Fg<~QbGqS=r}pih|kEngo$ zl5_iZu{m8lg z!-s$Ec_tnBuRKUmytrYsPrNvQrNiHkNO`Rqd4z}u2>K0u(U11r?*MA9Oo06*ctviN ze;w)DadX0XuL~m4gk!a z)WM~Y+P(fBA*PU{xC$`b08kW+7w4v|V4*Dr{C$1qITfdjd!A|tSV2obH>(FT7uVtv zgZs3y_ho(&=l2Z{GzeE$Z}#0k-+8;cL!-ug|CJ9%jj|i$6%+2%ONWGnAifg-h33w@ zH){nZga9998B^G>TQJdt^EXvu$ePVzNTjBY=~28{@BfUPp$Kp9SO>cLo_7zxr@+ge z&8B6cHu!Y;dr$@@dM#*YE>2X3X?NtJ+W-u0bo`S4?!b<~l&e=oZZ(!jx_!vbl5oUp zgsL;4-AJoX?ca2Uppd~4mY^5MpjE=<%gBjKxS2OHM)70+9VC?MIBzte zf4?N}t>?@x<++-(FqIq0xt%CaejMrAACw?3SqgdTb>LBz_5A1_AB>*7cq)jpJiDR> z_2P%7h?O;=e?8dlq<{KZx|Gcg$wRoZQQC}ee4&I*H5PK$rhs-CA~?eWSEg!lf5!Y`QZVtnMWO`J~#Vl?9V@Xn|o3zSC_fe zUD*O>4X%_oRLQ84Vhzt*iX0DZgl<%!}PG9PT}H>g@QHRVy1raxBtKfsImrbS{&M7$lqywnyc7 z>dP0jDRnDE!5X5LtWm*JFJjdkXr!gjWT!2IvQ9AWgT8xm2Z3klhgye3RB#JaajV`F zr`EF|oPx(juK24|SoVK^!O18JL{!q)0VgaZN{KJA+n(oRU}P+Ul!7r&cf ztfioa#j`gb)>>JAH#+2k_}=KII|V`?#Lml8A3uqsUg**K@8~IUq^8Bd(W#(DF6=OG z3x2Bi01?y9c3r%~6)cOjxE`}izP;Cqh@HdTj9oTxOr$lnmm09FS#Y=nDBHL1(-2Qh^1yf*pB1|c zIOg}eHV_Fr$9;JkMZ{Z&2i(b=KC0Ir7aKcxv}EE(AEdL3qh=mELy4EpRDk<_sab7_ zo_@Q+;YB9@&b!NRBAczC!(1&sRsT_g7XOP4)*MV7W7`9LT7F~GPr3eRmF3iwbhfftvRbKD@rI zZIL6K@a=J-Ah~hG#^@zRgoyO3rVQSTr1t38Qfa-L@P8}IWFmRF-Tl_1HBpIfGie9fkD%m*1vY_@abrx9xki-hZQ3E0Z&z; zp7a17``itdo|0(d+Br}XZW$VVAn3S{Y+Ft1*8a)WXh-55^gnrfL{Q{B44K^GyVn}< zdN^sP)ws({Q~#TYDrF~?PW`}jU<7J#l#yp6t{LAIqRQNbNCa$jlQSJHi9Fbdw*4yb zBfxUvjUvGEBPR(#yXfI#;-&b&pPw^S)aJ+%=pM;tS5Ot<`%g88`uw*vA}LD)aDI6l z_+)1l^;IT2mj@%H`GGRSV^j8I^Y|wtOWFeu8$B0NV49Dndf}EPw7x|pxI60xDe{5X zXmp+xEc1xjv8l)zX$5?;?8x(*v}GZGeyeP0oe-~m#VOgr4{J4li;2UAJQ5%UyhgOY zI2DNYu@w!T3kKgG)0(~QK;Ll#(O1zU(4id5zH859tJ1DQh#4AUEaDPJo=d6&g5nGM z>^gMNDi7~{x~;2o`xsf0RrS@MpKPj({+0_-8m-^-45%046EN zhVyI912rNsdcy;J@sJeC_g-jfAN1PEm>6>xMnuuUznKXtNu7@Eu)>qwo1S|JG>HWX#Xk#P+Mu>BETKa4;I4)6fkrv#ZHYnF@T?f26vJ7E< zwmiNIs9ry8o$YuZPrgGwYX}5GpAHV-ZP&k~8d(=UkE5thAGq6AlyFEo3y;pf`(D>| zXv}4Lu=?T~PyhXg?4-o;A=~?4fxFB6`fT23x3h<|fT7UbS9AXy!uLJr37VqJd9IfS z9K!5WvBbM4UBwhE)(WkUlTgZKI046T@~k;rqJN$xy8nK;M)=3U8X)5bo;gunHNBTF zQM8SYAQ~mm5zPsH8fN|bxX;<_=Prgd+ySa&LN9CA{+lU8jMQxkt{HH&^IFsn7N64f zZ7{mJciI7CW zhd=Ebs8+)&baW`Skz79hOGdlj=ic-5l<9QD9Dn;WN)Lg~!Hi@sGf|%3rl&b}J{x`Q z4G3gw;z9ENCOp)$g#b~4je0bXR;|9(a%XCGXZ$Cro{S=t85CcIttAzTKkv&WTtg)5 zmweP!+8!8Au~}v>o0!8`de4bRu8Kzg%F)1ur6dm2A9^DLfyWqP78qlqRA2k7gO`)dQwC}S38+$-7yED-nXN{lrGop_$w()&y)yNUfK$0^ z+nL&~wZDs*t0DwT*}(72LT_OoXslK+5!;;aM0VlNkX`tHEvC4+?i9C1hKN4Jy&g+T z52Z`d05PH1kzG*PM2c7r994uoQ}yJ_jf}nsgXgn{qfR_dlO(vW$M1_fek*<;CJic( zGHuG_!CtHHT}@G61{2;$7YUm3V!2w6E1jLlaMe|e2|DunqL;View`1!LeTHw{9Y%@ zXrj!+&D4fpw|^SmlK9o*$Tr%zt>nHRT971pYengao8Nr&A`SzA8#9IYitNJ4ZBegZb@{5w6CC0Y9*A*zFQ` zWl2tzA2HBrMwL9@J$hE0)L}-^WSNaaV-Knbvu?>}lF=`k3p|8-UCp_VsNmLb&l|IQ zMR0O5Dd$RaKvc4gwY)w=3WQM;Se^Lki$!fNAZ7f#bF`c|M})++~L}%U8IHA zuI@ziCJ6hFF4OgK?HtBm+l2eEUCuU1wZ}eCN|pZwlDx;GR+#DNc$03eiG*#?^hx7R z5sqTE^xP4Cr69x|^t)mAi;vREr=E9@$N9?*t!-l6J<)N*)3V#-Et;_+6MZw|GO(Su^s5DbgLQx;Mx!WO{!dF*RPWihR9)pEdyIDWexvI@qA@E~#!SxL}1>bFgY;oYi`T*#{ zF|X}!h$6_kP_QE&_RfO+SSYQYwO(*!GO0)M$Bf0q4VQ=ZxokBV_dyRJJDhp+IGAkI zN-gd+o-mm)qMbMWVp*Q`-Xc=Ep2c1Csr@%j z8{aCfzWJPXA(16+L4SwO@$L%_dWNGYB<&-xmdE_3WN38hKrArmO$!AHnx)tdDoR^T z>cpk)HF2m~?Ux5@G(HB^4;_X?9d)Sxmav@H0Vbz=RIF<4jK}YpQ1&lRmf&S1Op`9X zTc^dtYRMP@H2%3(Sv5GVt4DV~=t3g%CE`Eh-Q`>L^1QE@OVbEO;~J% zy;S>!tJFX;n6aCW-9W;}_L2Te)N@m2UlT(JrB)}+jB61j=bpMN_GU?T2g^kD>G5*{ z%B$LRi86KAovABF;Ykid#@`zbU4fdBwt-*4#*1-9UI1YlrM8abQ$4Z@ccm&QW$^sT zHTC?ODbZWA5E82g2?Wj+N46n@M_JB$Df;9a^Xh#!rP8Ijaos)$Y!>dQ@!x{ep%{J{ zI>|POA$sFZRc7Jc0;Y_7$Txp|)n<=UlP-Sbu=764pdzZv_oVj-ME!_dpZw?bEsb9T zS~RXlb437qS(%x^+P;S|8TH%?mJb%uY~HOCcSR5GeCKNdU@)APLFz9Y_jewR=0f&H zWEb*y?`!CbZi)MvbBwcrz6HyC+)4fYNw>mpiB*T0<3tu!zXb|J^F{V9S<_LLZpK5J z$x7tZJC}@}W0@T(2L|tqXWX3ad+9h=#WO#6Q=568`GI)q^@-yYC*+#qN3yNH&0M=U z^X;Ry+rfaFPG2id#3~yhD7!icvYh&E;mL=$4D=zHx&)#no=TxlfUl=&+f_L}rCcpcB)C2=c zZAAk4edf0q2yBL)%j44PT&E`P4b8Ob;3(8E<2MK}+&V%~z7ZseI=bOJS~hy+bof&W zHk~dobIY5SS}t-aAdX=4=AGQj!Os|WBBA%%`!nycG3Y;`IISahAH?2&&~|@G)kE!I zYUYWHQp$HwD0kPl5F}eQXD%vtY0@T%%PM{N;Bux0ziRTg$%tpr?B@vJX!BGMd57`S z9aX-MXlqiAO-&XUVEyDGe~e_*{Z}s$Dvg7 zee9c)P2vA6s<^_wRCeepP>$10VcMXM|pAadP&~Wg&N^HoE;4}MGXDL-lI-N z6rg|eGJJspI$TWO-Tf5FIz0XeIR{nb3*;^hJumf0kWTy`w#(0o4CA35(hVqSOdudF z&|^xFq@f0d4Qk1yb*w^2!X-c72y)g2j>dYr^5aW4vAyem1~pvUOMHKwI6p3;WXS-G42;rMtY=OHIz zlpA*mq|^)!ebr@qq36^E^kQ14d8C2xp7Vz|is2~5{mmhES~M1m7rXHd6B8I1h${bK z`m)|~noB9T#q+HnxNioZUG~DlyO!nJi$#aM6C;)XcmS-CaOWqT0qF9oBNkYUgRA=% zN3jb2n;I=P?N3xU!L8?~z47d6A{{XucjN8`=tG2;8Di<|qYvtdnSmYVI3B|qm&f@s zmS`}~qH|R2ZX%c5g&)2J1qG!LGKF{VcdikB&{fG%Z(v<%g^QW-Hz+Og((-oT1ywJ^8CHlz0$ehpG8M?f7fdp7$xhx3w;)NO# z20(5U2x6=KK#`=w{?t!m$`Da%^Rh<}`#|s`YhYqM??7L8r z7JzPjVqUJi?eZ&SNB=Rs<%!!*m-isbE$$h(drQFr)=X<%q!C_khZKDd5-VPm8sL*d zOQOc*Mk;24UQTBg7_ar9enX{puDz1)K;T?E-HVC;oZf_AxX{osFuvTO&l%0i2R#)I zL!L-}T*{X$G5_NHI;38~?VjokpyetNI*WN(+SzA;VosX#_7@CgvRG* z{*o9U#4v*mZJ>w8rZkwJF6B|)r}c3?`ybB6NxMZ_=QQ}S6tysCsS z`+Em@e}C!Y`*%zp!-c9%0DYm>_Nl(?`j|0Wj4g*qzXoi%OL-hOjbvD3T&G)IUf&D) z|1kU*8S{EH8bDPL&(Dc=XhJoT-^-72iu#2$#HuQcQ0y!J==;nSx)A-6)12ajB`*1)Z6 zep0PpA1UIk2cPsv|3t37E#?W>yCeB};d+7(eYq6SKZZ0_;g^u*0Ycx?&Lu)v zWxBW%vv`WIUb)p48{bfwX;7p)%-{cvhA=+}QHZ#ZR>xTG2rypiuJ4VbR}^jGAi4ecbmR zKYwtz4}70K#}b1`xgWE#y7;ofbFM)#nJ>bPemBoR7lF~VhbRw?EQ8Ub;Pm^H+oS(V z<1wX)sX9d$U8B9SUl-f^ATMdI77vXHHOT$F8ht(J>c#RCWQ(Ci?RA<@MLucQOn=a? zvZO}F!wg<(Heg>8L!=%$WK?CA8~c+z;q6vD!Gezhum7N>Ugto->Vm=qw(eD3TMi#f z%x2Q;dibqp5Z|;IixI_N{hZlWNL9P0vo*SqCgD8gZXR;^X{zaisKYrg9k}mkKIYz- z$mUk3t3J|M@FD1jrQ^2i5oyGAa+G5iBysaHf^9u{7w7xFgNFHt20$94UaFB_K%x&~ zq<>?h2uplPkm#&+SL#7G)vKe)f)EN`2N58PU?=U~_`=-7OA*Gd!HL@bLzb^<-BkZl ziKU7rg18IYcS79;;)ziC;rfX;`l3w_vazYj_+-;n(QyG4n`}bu8ZjYnd>8ae4WS(jZ90sP!aBp4czhd>zy@i6z75m<7j)&l}<&P~? zk~;8j+TU6iE>veO*KH>Zb`fnB?{l768ss2@u&%hCn&K{j;i&8P-(B!Ho>|QQ)Uu$s zGHzZLv{D34N4Bw8#j2ke(q#L=JyemAhK<;J*1F@b&s^2T8NAOriv6s0TiZoN?qP>` zDXBgAWP}HeGCCOsNVchm`{y&Aiiz$p)2WV8ju~0UF)|yJ$mZZg zl59d`uOvdl-m7DesH|jU&$3F{vR7nON;cW^|2o}!zyIIk;nCe)&iS18`}KNGYH#w9 zmWUT&b`1Tv6mFUT#lW6#w5pjRe!}#0ea`$iWg&rQwSwimUvA~KrFF34u)Md*h1Mf) zU{sz-HkeYL1yLNx7CGIFi#O6IyENOa7plw8s=o*UEkz3}m@<`SgYrHX(1a>vh(^5P zu#?HE?>Z2o3%Dh&#rsf5Y?b18TooeyRJr2MHLxhrR0u2ZIGS56K|DrBr^{DRP`Sp1 z5{ru=1||#cJk{M@Kn8g4j(gFoWJUgG<3QV?eze8}y=)*zRBjmDhLME#$;110&c$k6 zzGl=~G9X^P9>=d8dg)r#_e9h!Nc7ItExdlGIg%TFslx!o-@hU7{=ytv<5Qwg(tTRS zTWmN(nM#4>B^n{$4%ozrC)z>8AS<40i7x?bI31O+OeyWQcq`}uSsKaE0ah`Tku6jr z7^gI}21)?~EVXH`WiSqtfvw=tNXG>>x1J0qL3ckgzS)xmYVx;pYZc(H@c$(Ou*?Ps zfgcY1Z!!zTdjG&29ISHX!bIw>*fZ4_c>;2C>6l+TzxWGnRFRUJt0rBz6PWWUQo?QV z1}q?CBm5RbJGlX%7pCur!sT`#eCLbHpI3KYJrr5^FDQYCp&lsSR_)f=vFTE$+mO6Q zC!6z0AKMd1!Hf!3dKiC2-*#3r>vGo0t~yiG;Hi<0?D-`5dR8NAL&2|Z@p%908vS{- z)8Mp&G3~6JexQ&ex+PWgDV%y89m6s)#x;-SK+;}*Lm8qx)yn%B(zD$Wj&>Np=1=Je-kf4-y z&ZP4Di#D6)2F}ho#-~nBgWVZ2WaxaSM=!oQNRXcjDAYgM?d%hTAwl%?*Y=@)z10po zhwbS&QupsHzMSb5S5h$Ya2~PMIcg>nBxrG?FfU!d?m$Y-(qWsESK0?VOA~pNHH`D%#Y$tme-wPVLl6Y1lwj2!A3?0QywS=G{WRiv(2>Eh zl&B=jZ7)u1ANcZ+sDDsqe`5Yn(omU)W<+KF)D+3TSpex#P8(@vM+ex^>VUOaUWuQ~ zE36Zy96zoCkXY8`ad*E!D)#HBvIHg+4&R-dJwv*h!sJV!?~S&Xey(?%o>$~21dO=O z9*$GbLm*z!pqV)9Fz-rV3!o*KuHas++_9tE_oByLc#WSMp$-c-_ zJQd1>Oe_0Nxc$tvxEyM#S}UG0?xNfeU#=cc=0ArC6O<|UtphiF+3Cc;aFmF)axOPPh#6K+MSwM+P~oL{{LK~7Ute`MKaLJd zI*nnx8`{}Dx8$xc8e z*h!QQy&A&|EB^+K$x3qmV+w-pK6tuUrh$@ zfaznycaRy4DXp{{x}NKJ1aS+zr#X){7b`khH=eSHr>o+eoi<7kg#6{M@M?K3h{Q>D zLG8V|7l`w}4w>sZW;U6$-`jLgk`m}5@&O8@V_~uX!SlvzV}63m!QlGV*=3O^24Rr2 z0y5u_7atlw)>$?;UVw6>N7C?qzX(>tm}OX z#Ul~aiyRQTm8bA0o_bjYNuJqNC~5U8BB9#ktrwqh)3n_8lRmJD5sY7QTSkGyn3}{G zYEs){RHC^;P(Lr)2D?s>(ej`X{*VfO?FK7B9}qF?fn06#pPwr7*&%)E@0jBx10f=> zfywECN1qP#^I*sz0{3g6ax=pA#PVsr20Hb}_r|M7`|JG%8FIbB7TBNb{B|C~gZhh1 z6;?Lyy`_B?2pWKJT5Qyd7wmxMw_2KyN8BZ149Yk9!Jx|g#-#pv8REO#tdH|?-#_(`d`B5(LLr~|liVGUxIpt<`QDQ#eGummGgCfT{Ah`a6)W}( zzNM$fDCN1QH<+qB)R`h4BU>eW2dLlD z&H6KA0Uxv`4mgA&IZEuJ9TonuntD^?yHSZ6^G_hl+_%Y_>Z~Jm_hA5C<)6u(e-S6G|IQKJ9%Q>SqX2!;;KC44;x?@-k8AVDRc$ zUD=YzQNQ^+QOt{h)hIJ*fSR;q!k$(2GTR*O&^<{AUFPTr>#RkMc|Cmbll5SvNE00b zSs@uWQiYwRfs`*$k=A2()sqvgt;NFJaPwW>H20rn^AP&^PpXUf_~V9_UD457oaU zdd2pA*Rza#Z?(reQR`JZbAwgfXp=+^LA1f6LghbyA#fZvk9&A4Ydmq-lf@&_Hcw-T zsl)UH{+F1WM{#dadQ-Ia7fFBLmO~zm8h@0)gT-KKgT^`hR~IA>&MZ1wT3V?_f9-ta z?*8EC`2D4^-DjPP^Bo>bOoFJU^;nMAZg6|Ih5mUy8?#R!A%idXcoM``!datSb4q`aH+|Tlu zT=hoc8|KK|SL@P;)CZ3r!&B!{rEsyI#wy~ZT}s5XXfQroY9s=??tTOmQ%FknRmS?R z(^l#TE?EQ@`URPwWX%mWrPGBs;N%-LDKR!h>1Ye(1o5>Dg)y3z6v@(>l)|)jKPMeo z|074aC<%h`-%pR!sqRicGm1f`r_E6nv`6JBn-7lPrJri)RK6UM+?Jw`FXKt+;-h_pG;yLE#4*VKf*R!s) zjZQyON%s$-Yz}WbuFlp%uF4~NnrsV8irQ;(I5cSGty=teW%`e%I-Xd_z+~_wczS8g zwNKMk3GXtw`oh9e^q7k{uqJ>L199e79a0Vcm{F)|=9unka>pVv=m zIB;MLDjie7!zz;-&P;sCWf67C4fIgRiX7Cx0%{SOh1~#o?5_!mT<;m+DH7mNZQbA9 zOkMg|0PN_wOc2vK&-U}ZJKZ(k6iWz3V7pS-)z_Uj=Jn+UF~Q?T<07OWZqY@lH@6o&rxsmOO;w@gO=<{H{d&>D0#s&l2>@(#y-&U)Rp)nOrAjQ?VoOC zX3V>DK8Exh6qDsjm|SgeK+sWFM-W(vA3oW6YHtEc;AdhrAB`qch_Gb`Z&ipYCn*i) z?^pL3Z<4LAr_u|HtiGl@HGL2+YeMHdFHO$8Znik3HJ!k3a}4x3v3hMm@uiE#i;810 zg>K;q@2HzDSF{JkCp@+DrZ{Xu0JJA zYA(3@y_d9cgS#Y_z%g)4H7+3+Q32Q?D6q&36+KEzkZD?9E|;i>d1#iQpT+1|^n7HjRy#g*>ea`L>}eyD7~{Pc7L z&B6(hb6?cO>_YQHm+7%Gk6+kY(5NQi4&M#TZx-y|t6thif;o>1#W+|B3w9frCEw^S zXn8;lcI<7l?9(IS5J{~GPUo}4Cb_(+v&18k;C&8iqER2Z!Q+v9n&|aD>d*vMY7_&A z(zAXp*=ys?>8?4>dapFJ8p!(pme0Hd%W$PtYcqK~^8FyN+IQR^f2_uQ_E$oT z<4D59&RmWDI7L_&)RBSVE8ThsEFf_a}>>?*Vcgvy(2#ci^ z6vTyjAS`itXstecgC>#}yGnO;LxK3oEXKVAQt}=T*9WTa;8`Uz5yI+;fY*DCM7X_%B}BL8B};ag?(b6nr~`_zfAo;P|*oK!tZwT_dK zk%z3dCrH2Gl@-7seh(c_7?3Z!pSqnRwkQEE*5tg5v+=E=QRf_toVI&WRdAPWgK z_$V{TCV!%>iw+>olO;{@dSsk@~8*#lma0~XqC6=+w@vu2`JyT<54?Qi|JQ> z93yil^C_+D;`e2Jv-zf$fSUN4>y2lv8(jA_$X=ht<6YXZYZCXq`@jA!Oha>`P^4pe z3H_$HI2>6MA^WK)bk#A=2XT)OWpOo1ar@wLebWuat=wPC+k!VgPe>Q)cGjOU60S43 z08);|tC&Y5h$B*_sNg-=OR_-JbJkTCRF5Oo_p^U|P94qKu*dzqk0w)*p{LF*!uR>X z7ofU!Ac8;f-eyg5f)=`^)R>KEjS-6Aep8N@Bdoh%7cz(CJJ87A-@gT9uvh>Vb%oi$ zp`g?%9Ncjplu?9hNo%F%25$54@*l+wYJK-)PA`GTj21|^k-U-!zk**$8%dF7FbWmx z91yym&>-72rXJ{y`o?7kNI}x$t*M|v#hwZXMrME0!At=fIRU_7VnCA3eg7ut%((&E zRM}GkA2P_B#C^9xLAeyDnl^Q?HaOus5F6yNbAiguKhl;Jbk32oe>x zw}$#(Ybb!ag&TP2JRA-;Q?^%G1sh}ArHHh?L;jV01IV&wx?~$G38QT(*+(Vx?dKA1 z*Gr9sSU{)P6~Zu3{3i~H#~je`f}CY9^|9b*mJ!*NM_*c0VtGxqIQt=6X#&1vuaApa;M3&BcYNpN z3@U#2TXHM3`<>Z&zqsM^Uc7g>K(u6`(1y2?o?Q zfuqU1BfHYM+i9_-<`e^MlICjWUt8A^K6TGI{P;Q{HG!qfeZ{OXghN#WGJPd^xX8)L zqX9-#8~6Cd+W6f-_Z2=$o-7(X3G})w<;NNw{+>sih|lC99oK4M1-?b-Cgqi!8)(C$ zd?1LWX(WC9tx{70F~8}U8k7}kLFp$aq?h&1AHzO{2;!?1_9GYP7AU^b)5vxB&ru?c z`o29USxl`3MT0YFNg0_sKzo{FK2hbqlCE}GB@Gcfr8R54s-n}M=Ve(gKiP4a{xTq) zfkxuCMteoJzTa(rwg7S3p;dVx>1&f*P$Un&BxiY{WeRDJg`2Ti-(@s%CyaRZc2ZO?H$<;EEG%V6Hc;Xf^KMz6#+Kn@U+FI7N0 zmkaWxb#(3%#Zr^690JJck(UjNZNoSl$wlPWZ+;ONjc8Wv1{Z$c8X8QSyY z2%G>XX-|#cpC4lj_gB{=S5}upJkO`O-gbIRaMAD!aX-xw_LT8>Mmg`8d|P0Agl$H- zk8F!sQkbnapG6Bc`pQ+?uMc(HseIl&U1}@)+LwB|d!ux8y7|ccTMRSu*uj_ z5RHK$TXDh8p-gB{M@6qh1N__h6qdX%=X|@q{&?T&I;Ss(7?&sUq6JQq@JM}8oaN?i zS**v-UQXJJ^>yF0?}z*xTn3&{4?h>*XK228baawdSswfBWR(KKQ-$Q)OW*kLmkyy7 z48hyud7}7-u}f*eIgK}il9Jbn^ZM@zRo5pg``SE)Ht-W}oh3zziW|@~mHsIs@B;MR zrm_TgXB;H_{YG3%IGef#VKLWJ#5nXizjjDjfBmc{_sK@uFME6`JKQ&RbM0<1 zxD4WD-Dl0u9w?6TJ+JZlFk(UnR5qPMJ-WQM4)`K9;eD)y)lARu8p?`aL5zEZQP zQ)ukq-VfbNfDSms&a#T0ff(x8$zEtD*adwJ#hhqPzr9k{y4xHG^Lq| z8B6C!$xoitumKhSiRSlhTM8sg7Qv5}C$u@J>wYb7dUu6_r~mYacb@xiiAf&hr_Krj zCf2teFoXKWRvLKCp#|@s?@$%^;W5M6GQox)nEN;w{jZTNbwv7k5=RX5Gh`8pbcw3z zsezA-ou87Y4n5Ry|pS0n*r-UMX&&zD&l}@T=@GEGk&b zk6=9(S*S)9LfBR;H~Qt)>WAMKR0+O`y-0;ywUU*TJR{sry#7639S1vvsy{ABe zNWU=J)E2j^o5JQTA&;%O{4jRztiGnX>rR!e-jO<|I zh+4NA6jdF}YgS(`Wu))Abu0Jh>vT4yO?vs)eV4mt27gteIBmElDUd%8#MKEQEl~rl zM#>N4m-sm3I3jO-(&y;88CG=n+vkwg=By*ahlNL1`(E6?^fZk;1p7kKcCeHHOK>8| zK@-nHvY^t4)SO;H(AvkErrOfMQ8G*;kvma4(bp%BWufzl*Nb4yF&P4{oEAnB%uV<(iv1&)cP@f zQ4XA&IjA4#rP5fWC6vM$(}Fdnw|~$om{JK-)j}_L=;R5+HW)&15*JHiZky_G`n9kn zsnqlo(MSo$%O={e>Y7>Rqpg8_kb^8_vzf(w!VDyK(LlcHaJE6nACU+1daenDD=7^C zXfSaL8^3kQQI$^z))Eg*YDbq8tSH0o$kv2W8W=D@>@Nj_AOY?s8|_D#lwm5IB2HlH zlImrb;2=J5!#v*MQI<;jt}6W~9;?JN5> zv&l#2-RHxzL5)<(>*nV$Hw8M#Lx9ss6ODRuDuW_6onMGqjiS!1Ht$`8_tZOTH`h4< z^K*rU&E!iM??1m_cujp@FQ3lNY8;b$Fj#mM5raQ$+vn0vP8s}kvNGlvPu%nAhj>-h zCcy&hALs;Smfka+w}-nbL`J8#*1u~=Zy>PcAMy#jhHdt?v?JLZx#78G_7?^E`ycAM zJ=$O|J#jR4x>UE@p`Dy&nE_G%V#1+yt8~;!jEu{tM&sKF8;z=JO*3Pw09=sZ5TB-- zdffV%A?CJUbJFWe|Fov%Vx5qRro25I%acll|-%)Rd#WA zS&GLWhcPU(*06A027;VS$K(JCTjK^|sjprAXL}CzLXJTf*t_o#Sri@3t=c5xbhbkb zYKK%v%60m{2-a5PaVR93HGRhuqwiUpxA>`wOe~Qm#6Iz}Jdo3y0o5cVG&Gl z<#MWbhxSDpZ|@lZ{Ypuv@(C!cMeyu$goX~ro@VkffO0whl1)S)U=jh;rzV+SYH`$Q3a zN&5SmV67q{=|a-?xNQbQL^0K^1IMr11STAtYW;YhV=0$gH5V z*beL^VWSFR4zO9j=>T!stLv%!==dJItg3A0%?kotAJRKpCWGovxScTLG5^_D0=e>X zlMlc}Tb^sgPYkinH?B3%&u`2+IUGzp?Q4Q%fdp|qCBK|*y0do!eW%8DfIsLD<3($N zJrvcniapJLI2gG5xn=w^ zbdE_MyS?pBn{_8K>rrO?$~jCCqSF(sM^o=`J(ppOaUNwS{B2gQdkZiWDNL zuz9=aTGIP8M zEu%v{wJugAK`_^_htHe-P}sI@=iOdkmgl^jb@u-1wO7J1V;+x{(Ki+%-$)c2>lh%4 zBj(G^9FhjwQ0TcDUy`~<99+UBmsM-|EJ|$(x9s{qzx@m-`edCUb4OfM@z z=~G{}y2aks%1uaJ&A~Z?A z!=#D#^WU!uB;p8yxT#kJoPMPKT>Nvt&uvrWi8I$Gw|+6>n3Nuj(i9zT4%E9E5lnw% z%lw)h%t$wg%)N>6+h}xX49pLwMWAVFHPdu20(i;!L|{FNH14>bKh8!i!eMu0AwC>e zKo;WUeUah)&5XT>AGNlA=C?A6g{yyaG3~GNTCfb<*NLHf&vz}t@A~sI-kVoDQ!cSQ zU|G55bxEWAURF_PZ-KjnW_l{}r1VgMR29z|#}uu1ksG1;HWVj?f^{5?Zb-N}_;mXK z^mlD?wYI%vdQGR1L$u&Mgy{NeNwbC`GIp4s!6BBYMbn4ECRq$I z>hD=TJGeh@3i}Bf*XR*gWz|vNO>kzGqA;lsEDYO=ro$-rdm~K;GfJ+L_F%yI*Jm}3 zsJ!LJFTX+n9i=j{o5*_bod9MB0L>Ghl#`E_3*ell;R(+IZIDVuIvg1z9=Hi0E=y_b zlc48eChp!XU%jXBzCV0S2N=PZ3WvFVMxrvCSo$1XYRyH0Kr+|@bKia0jo3sRK2wM}*y%1?kKlc|3k|IR~FKvH(SLEA&!2vUV_$QlIpvJlnEtWs?ki>PyO5;}z$`$g}g&W)pB^w7*@mV>#~}K{5;;yVrAB;*5Ala=eJzbsL?c99K=p z7;jw~JsawewMBb! z+A_URYVEzAVmqB{(b_%y)Ui_{(DzVpra-!X*~? zrz?t6x$L3aQ5-1AbjD*MOBfX;inK}1gfVQkpvv9buRQo>qoc+JZ+Z#z4HweA!-RDK zI`k$euR2xK!GKB9y=ZkL++GC^!nZkHW-!x0925imp=Hdsi}N(uYb5$sWd3a!`?bO- zP0Hc#w{1d1G*g9wMJOF#=B;XH-)o`h<-|(>1E6y24-X!RLjjS?Z2whaqww%0L=~); zuOG7!L!qL%uA0qssr)^+v=MMqYD&L2a^%PpS90kKjvv_+x>Y!R61fNstDJI&WUklP zlAipX*)pZA=+Fq6HT>IePbfp{qTnP?3i`ny#WJQ1&8x??4)wcUW z{(YqI4J-gpe{Rz?RBnYUr1MhIsL2+`gL1Rjx6V|HllW{#-gLY1i^<8r9j{@+Wy47Zq;+Onda8#|J>dOedKDJKp}6Q`?DlgL>8bSLVTL5$<37K zcK)Hh3Er1!tcMCxL5rb$-&)U{MxK*%7bg2mKop(-{8ZzteEpW1Q>mppO(A0=^{d#u zZ~nwc#k0mWGevxe0xA}<$vEE=L4Hq_Pqy4V8kO`sRnnvPC(By_hz~~JJ_KbZe~|rf zQChTG%Lx4f$NATWl?70LrF(Zqbh-uQOKE42&db~^Htch|2!z}xKi$}pWCVW>Ho1t6 z$6uo*1re3ash|@FDBe}DOq?)+;FVYArWZKB$tnj&>A!m*sc(+vkrnjWE7t$Jv7d9JdN6?tNbtp%|$c&*=_BV6(fpm_Hu%>CCQV ztjqrMs-5``0^3n3zd_zxd6QieJN5YYAHHvrsFMq98dm(L9dHoHbjQ%uw@jPm$%UhP|&8U$^?`(l4j0c9CkI5)} zM;5aVY@hwdGfD^fVG@YQ5)0XjnaO96IP^GF$!IU!>{w%(wlDX2xetMli8OD(%B}uj zaqM>-0(*_j3yxpDCo7*$sXQhtDHt|{5XU%5Rd_zj3qvcY4&cHo6F=UQB6u{|W*cgt zuUT<@f!rbtNi0)HnRU}dNq>&!yVxicLQ60)%?f=)9*??^!jJJiR}w+AxL+sx!eYU7 zv)Q{#1(hznHF+fIl3o1XYWq3gd?Q#xb1+-U2y7f3QOog-g7opy9XUVvQJNC?ns+3l zPE-L)rNT3*CnHA1cn);~M|bYJ$eF7E8X6*xQ8K>FEV*=r?WXN_1i1`v@l8q{|MySz zB&|jBPKyd~$@5_Iad*st%+%2tyBaT;6vaIE?<(Sryv21x`jLl?jlT9+zA63cjt4W! z*r*up%B%4|p3@%ZJc56^`jz`p?tB4dki+9(xClW|V&?Q(+c+1iMtm%&$&Wcgd+oMC=p1rT&5*1^3_0!;H=$Y~W&Etd^AR zhSA!|9Bl5*zpd$$`2LHN)J?HF9KRi@(>C(@hcdhh2b-rv$+iSYQ6X327GLvm$-nA~ z4=`*|E|-pmki{JVMB(#OI)hCrpch}b?~yV!HMI&|v=ocmW}oT-iMH8TU!GFXhnPSb z@1O=C!}oR2HQ5$)G&UNh{{jA6=SY!XITS+UIllXFnv#AIC%$0miF7nMh;-OdZPmgo zjFq4IYMaLt5SwUdYa#?Pp64z1loiQ z^M_LUZd7%*{g~Zji|N^#yJJ-xQ2nfH77qUO8JEkD7Au@u-S_+RNW(8OuA;s3-JU8_ ze>A`UJ)bZS$e;&L0n>6}M^EvsQRaG|A?Y!b9sE5CxhST&;o=P9Vok$y@uYAd;Wem` zd){Vx^PZ+*`1g{L4Mz{V*p_xkh;_M4pm=dQiPu_1k{s_WxNi*VZ=1CztnPifKWCO* zc?8yuMl79zD6F&u!MiOW5R6f1r zDi*w+%<%YAY~j1>Zfq0OdsNry^37jU;29?!6YSLyE6*FoDIQq>Pv7QdG)SkP1J z&-q(-`@RK|z&UZa2P3tw_bVWgRAAyyIo$zJWfqM2#49uVOU`Fti*M>|d`{9d#0BPW z7S^nWmb`uYrD;a{1hJes>;HbZY6uO97w#a#v~8K5ugHHiZ7L#gmvAN4N;8Q&X97v^ z@!C+bG}?D^L==b4)sW4MUQQi?>5UvA8v!-oI&l5aC`3JlQM#a!;~|mkzDN}`pQ@U0 zb|7DbAEy)z6*gaxc%3{QHR{%xkhSogu+Fz29cu?p#DywE(WY4T&EUQpG5||U;n`JX zHgg|X!M1PYN(=YKzf|5m2YT;I&SAL%nyeIv=$Qa9n4PiM(ZVv+_n0g zGO~Oi{#pEUy+Aw!?YysbkZMc`7p9vn52Kpa<2n)ctlAbtMk1iJnyK$RofAWMlpxTr?!ZMZ1oqm)zm)1IODm)>spj!dCP=Nxg; z#g{E~h;FYmu#`(=n3z$CBbw&K>oJpFZnbO% z@%6VWKa{q&3r$jN?<}N9@>Z|qZdLea_12TxE_6B2EFVKmZ8lo;$M-ldwMuC=hQKct#>S)Ny-i~>Z32=3&&sIqNjnyz3Fru+^|W^$H`NPmL-u$T51FYV1XS0xBt_ z=yfSm2BC$L`|tGWElp~k3FJj)-4Q!UC6bWiPPM_0Mq3&@b~hX#cRv*V5!WoEkB^Tt z5Lsj=Pe$^WPRKqOgQ4KdsrwVhQB?w1;p;|IM@YnQf47Ze2z;Rf7lz2>%8ul@-amCY z@E8@FAgGu$*cc@^F(1b6DP+S3V|B0k-Ye3va82DDP);$AUt&4(m)MnkjG4^!M%gba zjcJ#>zg6w_iCZhqBv(*~{E}Oa!-m#~1&r}Pm4!U_x~M`Mt<)+QbM|8j#vBlhQ0q=! zfow0r%94H+KL!zJ_|&m=#^KJ7FMf7s<#Itac#*GrIIBYZ<}bpg;0t{^bhZD}h;Ibh zCUd5&7u;c|a88!?11s7kGc9H!1#3X3EXyN~iqK_xw@`czi}yw~%40O4&%_*3|4u4z z!=<5043}jj+j!kGWeMo_>JVMsV@_#^`=bR)x3V(in z*>sN5MwyY81`3{=8+=0>{Ip{jru*sAE@_ePxxf7|?_o|N!|_5WNHp2!MMgzubm;mWJK^lg*fu*2exw^8Z`5HhA8?fpqn7RqkrQMFi1fm`9Th?vUj6Y8 zO59iC4J`({%M#I2bC(lsf~T)^=A=JzQfUrm#+(MDFueBtOLRtHx|Y zdRvO4E>IiXBEEwY(K=SJ9~V=yOW(>1{rCCiL0MaP$#*6J-nLFMao9^xoElTi+bkQbWam_W&2Dd~Ek$(Ln7wVSDxChav zNSn=Dmrx-O*Jh@Q#CyMXJ-e)aRVEQCh=LAW{+lvsoKj`C_VZT%ynkV|)X>{&#G#QY z>6)qe`#Mbu-bR*+Lwfu!>;0W%5&q@y!C9x z)wldK-Ha^B zY`Mmv!Sdn=+jF9d2i;AJ&OvsdLjJbn`8>7tvNWMCyX-V6+d~nUPG}Llx)TL72$2c7 zOAF%pXN$623XbD?V`-IrxI8H1m_hH^y5 z+N4kj+d}CWZqhe~t~~r6u$%^$ThA+E(m*g%u{P-LV~^T&qRyc6dLid1h=ThDo^HXV zsNpE0fII|qlbG#Kp-ji8lb;C7pPXiF_5eo!&Ol2~=`X;D9z_yr*}|m#0|KgDW`Hhj zIozK(WUBZiwE{QW>7AlpFR~lBAN9ZDMS#l+h6*`q>JsQx`zaS#w(GTv)3@tu5n$w*s^@+FyA z=d@`qjGXt+8}e|9x2bBIyDymbmfe8iGFS$|X^I$huOVTzzcaS_v`#=}3bs^t( zHA(x5oz2xm+1(0lU}Sg5 zL|v^c61r~W)4`U{C*Zl8 zi69R4MmzEl!hXLex0gB3=?iB59FbtdXoDR;j?$C}twgVX3MW{@y1d%V?!~wfp#mBP z(8)LtpJRpS3-}B4S1FIxj}|x3KQ-__gr!Bf{;F| z>_dbW`=|Nq!RnyGKz+pOmTg_d_)P!!GvC~Gze^wR9rxe{aNT4&O??3QWt_E?*+8P# z!SZK#&6DA%ulyhRiw;9RNFC*# zSUQw5);rK={wT#qlN}3~t^TPw$86Mfj(vg6m}{*@htIv1fB3MxdvL8_tR73P{sQ$; zVMH@P1zI$j{0mi|(_@_eOsR11ceRzk6zdBRi+bB~%k(*kvCle%v!u z^jJzCj_ioVpWmH5vt{Hr&s=@;*fL8!**Ncu*2sSFuJiocX_2{cdXH7Xn;5naRyxni zJhqZ7LNTe2BO0>aC0OKhKO3q&vw7`At>^eoZ`q{4tH;0p(Jx|z!CM6;nXsIobd12K{YsIdo#J z8lGRGb|hkF#1Fa~EhFgvR_*odVu9m0g+irV3P#ut6$pVF;o^V`_+Qw%YOH4)Tte?d zYY;EgpvX$zZNg~%?$3!yvx6h_BCOYB4=*~;gH!)8ybnreJ&h_st7bEh8;9XU3xaaT zS1gte%IiCsNuTT0Y`{~dVX?uC#)2#8CcLW_ngMz-APx}UV`;d1d@u0)otCxGfYU#r zPGlx>vjvv=t^5YU&Am4t<=M6(eS~RM5s-rCT%Q>Ln+wmrqll0>R(2v;e(ls zryUQ}Wr){$@Fvnp%6CgUc^5fOL_fstnUzI4u?8ygG=M~*U8O=@aF)n3lASma2Q;?| z#22QQ_whH>{scJFTD!R8II3oS&`{W-jV?i1g*vKzW*9Uem^zxON1Fwmou{3|Ak-cN zmYm5z%yNI`lTh3PJa&Gc0O4%OeNFl6Gnt>{!Z)It=; zgJm!cBk}~YW9Wu}ifV^s$xL&?W#*Uu`3fL9Dy2TJ&pwn-cnwCv60m((ZRk0Vm?d=3URf zHnGYl5WR{yeuS2mBH3BEMLu4uV9D@&T>IGouLb>p%v1DcT0rd=B12|7X&s#Q3s0T5 zRl+0Fu*fjW&M2ZCp_J=;<%?2zEK*|5Vp&+V7hV)-{hLm88^16rwND(=F~+nngIn%r zo2cV{zqM7U?aI?>^FzkjfAr?b}6V=5mKT|vcb>XtkT2z$Sv6~}*Xoa`7i?~B?R z7vAkaSb0ks(55&c@=C&$YP)Br$G!%?QxRn}pMDu7Yfp>+Z{Svxak9sjAbCNjX6if`y5Grt<8zoRcq z#Y3gyX!|NJvM^dvnc>-L7VSTuU_4lXETE+JmCk#eBT1fz;K4oI-#oDbCpyGA%7c*_Va$Z^9ac?{-k01m0wor-3r+u*FL2SklJhOly+MOQb`FmtzNGCYF z?E~H8^DW#z*Emhdzu^zEKv6c9TF%YUWhf~Gos1(!a<&AxdaAqxP2MW>93&-w1w%<} zVj!d_@>8UrJbe)_eXwFa&Y5! z_KVZx!LTJb@M7dmf-l`$bBlHCYjzFY5w$*iaa=lEbOKJdE3$nwkZE}f8p79(uMagTi$w~cbe@0TVC*-gLNGa zjVw5?lFx$H?qVNYL)n&6Xr69_U@TCf4)_v(~5cSS3y^vvPerjQ%L$BGcq!7;-pxz^vziO$)E6BZ{4n9 zpDXcVzm+j?SPsVOXW^T$H_t1`k*S#1IA0W@S=s-4D_l^$4KJ{Y6DNY5RX-gUf~3-3 zr$nSfH0(>CrX})rih_M?3{HXwB3I#%zWs1->mHHTv}7d*e4ig4sJ{R6 zMtg74z=-~+>x8nUs;oL5M;aw`#%tof4*nvMUrgw~$0OkNt7&`tjF0AJb$wxkQ1o|( z_eGo(WR%6`Yq|X8&O_1Wa;+|3`M7!&8~<^TpnQOn<=?#7i3(Xe$;iOKgK8=_#;bJc z3YmZ$rp$iiCKikB$9C!>m@08*IjYDuomp#i*|Imr2vDKwJ+Evu80 zrAJTIG?rL(Ir4J(dZWDlY_UCqq>5&L9H52?AQ~4}@&{S;cGIJ%3>XiWr4bLYSo3JV zm)jr@AHQsUj+MG({E@+o-_jz$6)RW9RJ*E68&8AoZ*6H}V#HG8U~&3F=xpF$v)g1n za{eeT@i$C-E@xnK^Bk$Vmk}$d-`k{Y#Mkty+tvzTnv+LyPW6BbXy?s5!(X`m-{?%U ztcLjCp}hx(wy@o9)SxITi|G~Z)t)a; zEk=_Z(ofYq=T@}*ZMB`R#uht97oZ(4eTr4zzAfSUKNt)a7@K%FsNT_!Z9wI{I5!5d z37aY3`$RI@(=zD_617 zd&h$?a}8S8g_PJoz}XY?qxJB_8W|N;0xT|b$Bx0`ph|e(qLKU+Oj~$jXfXYV-oR15 zSDoW)+P^;N5{JdVUrX4AaNM}7wAkq<2wSCe{&U(<4?X5)B}$qK$ zd-RvZ?4phHe%hmNRZw_#wfQD1x6O^4of*J_@h~t%6A!0mR8?{mO3s~VylMaLEsM&# zdm6NDt;o&zH-4z{y{IT&VPWA}&$4)`_W#i(kAoWE%;ts`__ob=`>#dJTV6_1ous5J zD|EJIt90Kh*q{6 zWY%QC{a0$fSaFpwp!Ih>u5fAqs`CQ`q0Wr=Eu@a^F8Cd%QURrAY=AgsoZ`fZakP(BOZp%yH*U>9Mqh zz!S{opld>`ycz!x_<2M1uDSF z6vzT$$1$-{`BbUQE{DEX5!c_Kbew>W;%ro_hQR58<@XmgJ(;P^S^vG4w-`vtLmtmP z{`9Ly8ia8)XH-}qTy>EFHt!V&^aP5f_JP)`J!$P_rWrET7_Nx5+-_CE6MQ=_S8w_U zVd4|A%tBmoVSgo>5UM3nl0}~sZcBc=BrG}RFqoedMe+ZcuRVe+U}P})aoKdTUur}Wn1~l(Xv5b58!j;5)PatSoAY(v6ZiWPs9h`Yw!mf` z4R5kCGe1MTqUD*7E@B2;4R0^#giTa9Jadie6lFNm-H!D?N=Eduj6epU8uMH#u;FC> zctE}fKaKJDSR+~Btvr@Xum&=;ZP!Ss(raA_oaYxO@A@LJyQQC=5Pz`q>J8z+_=Pv{ zeszRqd^o=ndXyV{Tb!^bX(DI!+z~^=TU76<3zVa_Nc4FRw|}uK;_3iy0OTw(Wc>Fx zyT4&*Amwnf8z%c|+u1}s$|jqUa92@UZ8lQLv}7nhrF_!g25Pj|&youVZSGxS6$~I& zm!x^~LMX`UN;CW1B`fj&Mkw#6)YckR0sXB;qy4X!l*Z!z8Uh~aUL&eEB(HiSu#Y=b_xJz% zJRbMse)K5LdB0!d8qe!_J+H_D+GtG)R;^Z;*3kMfwF9XZ0j|A=NPbBb^@);5UbD0K z(eWL38Py*gk^=@<%HWLI4D3bt4r}7i{(DF-*n%=b2Rpz5b*|dbk?QQ8$@{r6F30EK zTmR;gn0e7WZ%wSF>aCui9tYZ74_p9-kbp(Ce+cl2a8Qa&hTf{WBTODWa@wb$k8%`} z`_N%Tor8+p?LEodSN$h7H%k>MLP`m{09vfNNP=|Z1kb8A1}_{q;N74Pvsxa}+xL$g z@bEv5y|t@OQPgoj{xGYe(AdpQqz#MeRRB)rv?LP)8CcB2$ldB-G!~u;FJSApB2@b* z&93Dc$I)mi?s0l*qKQdSHr%nNl7`{<_8SRgBw`paz>Z@6csP@8l&ii8NKYRm2zwAa zyz$=>7Xjf-=1ac!KnuiFEv98{GIjW(b_yrb{_JD8l6f3^REPw`U5ycGIpsLna%SR8 z@4yQtmc7Oh31X!OFM9V8)u6O1J=`VS4X>Tq|3kv8?22aX-Z?-uJN3>@SroXjUR(P5 z2nia=`)=HJPzs=9hxAJag>-*hXw~lZTz9`yskBGxv{f0iS0}emALgVm(%9iJ;$77- zUGd{xQ=ISv#Gi_+K6tOubc~GRoeRi zH3+K_-pzyL3(QB~;3)A$$6(gHLFM+5<=Gbrd5Z0MRwrJ*zSu0v!g34>c8>|s$NCFE zfiY1aq6BFhl+fFIa1@JLXANdi*sVZrql>d7+CV&dUapy0H-Z#vWry zq^y$s863d><2VjME1B{`k+hymxYOUy%)Xd3?Ib`>*%CLw2jk~F{EFW679gr1<`hzX zZINg6Dp?F)M6u>SpU}E@yTEKj(BA1>0sg#+rvJto_+s~I#U##2Q(TAC6x^CbO>G` zJMH6NZ76?bG4_M-#6Ff3*@&wrfFgPPsP50}(}{i{aVZ6zf8jI5!>0tQg-U4ls>TsU zktvx$Mv>n!CuWLdqNhk5CT=BKY8#YaEl4`~eR^89Jj4!o?Ih;jUpuL9;#fgaoP{+} z@N5X6vl5gIzVFsA96AVLFivwQzKS15^ zfm%-Uq($06gi`~ZZ7el33akXyBnTy}_VPTmLQC~%&xn1C?HKFqx-Cuad3(Z`fPld8 zBXpB*Kt$e%te+C}3sPjcS{exg#aq=4I8s*7!69n(0pPPk92!8)9(I$1nW4FfzJ_O6 zga~{E5NzN+79Nbj&l8g1F>(#Cf$UI5-n;6tJj%(QNUl5jJe@v}P#$-t5>U_GJ`ADB zKdXXpDr5<)fiF))sC@d^qUWJy*(2`|v?`leJS+tFy(qy48EHcK8gU;YHc(Z_8MoHP zkMFRQY!JbUIATSb<($$m2dr2`_LAsVTDPK_V9Ol=KQ_t**IGcS3V81TjHLI6iFv35tL<4#FpFP$-5f7&NDld-QtOEwR_?%-kGt7s+L7gpRS<`<~ zc=?YlKSTg_#!_G-D&x<^9l?c8QjfRH% zdWVxRut_A-8XBv9IumTeMm1eY7!3>_7QX!?&mF*7n$VzOp;Too^E)7MQ{uf;RHgMC zHx+nuQn|{A1R!}OU`&5*{v?4$Gm8?+PMu}E0FB3)`nku*uj5z=T#1WW*r5CKUeM7s zeKf~q8Dr{W35d@J*R4v%G-FJKjy$HYVFWhP6hTg}2|sdjY60U;3s&dV^ahLLr2pDfLDGXaMiEpx3s#a{}Z@vzeA<^+Y=w_<&-Y6uvhg>-cSXjasO z`y?-rpxJ_9&{i#sT_rlUmyYDhjUBh-`3>_AeWdnShoKrLAQiPM3AkqgfOj++{psR3 ze2PfJLb5Z%y`MGCR|g4PZ@+gGb7G7nH2218XaqOJNP#VxsAU!RI5k>vskqWCy<|eGL&JoX!gcg;J64pwn zij&wA$Ym9bYhDstkfB|qQ!6?5Trc|F4t;_A%reb{@-vmGWvfepwo;{Un;H#~pJnFR zu)ba=2+dF7=70=X2bkpLH(-T$U}Al?z0Afjg_8=j_N3z!j(zn6 zT&~UD)->*@r-1O;h9}&Ed!c`$ft(mJV&MLZPcV?Sdd#=!-SAI@-sVt1?MQE|H9TNt z)&z{p5@xBRX1onxphi?C6lf}z21tv9svgKNt`6)YARfc0U8+XCwS!VLwk+|0*E}2y#Og)#4i732MZogiwS{w-mL9lF*wVh#KF714&{=9r%OcYOO(3;pGCC+rREUMvT!zpF)Q9sw6pLWI-OvrtJ)=z@ctU!&q zJS%}Z^fV&+{{qgV+{~KbWMk@Z`F1^`cRXJTsQLu_G_ulaI}R5X_l`Cv?ow!Cd|bcR z{kB(0JkmylVAh9)Z2f%933;WE8i*K*oP0FvYtp;6lcFq3G=iqa&y;WZA3ICN`~LcD zEho|mP$YaHQifxrxUzA~%HrU9LG>a6xV{oG1kZn1zo7t|yhIP=$%j-n2~gfV8Qs#C z^5**zHy+W*0yM4UY5hZ%3@mOay&UAahE(r&Jo#R*t7B+l@~O9M>Mf+SbLYXxM%$18 z<=3QO;^!5_hvXgdVwp)po@Pjn&%bs;F5t$0Uq~>gcO5v|knI&v#mGuPp{M~}n+Ewd zA@6V2hI5Bu#pA8uXon8h-@l-Pczjs=wWYy*$W+cf*XV^TeflMjvazu}WLjHb7HxoJ zD_=4TMeN&q{hR8?Ol~kf!HAXyh@x^J1J%l)LHZQT9y|y9^SQ|$JqleI25o>)g20D0 zOA^-Os;p4J2XZ!mCdyVVxCZ_H{_^Z9;Tomw*A=eQ2;G!3R{CiUzLKHH@2Wi%QKqmN ztl*Z9v~rD@p&7; zdtcgpS^H9T@%I~1`B#cBRKq+UPW`O2a177~4y1Jv@~V9D-lv=NA^=0Tc~LeKALNXK zP8M+`lK@lB5BWu}4H{88Sxc6f7KO)p`W~aBCu1wGWRLfP-dI}H<3EK9eI@1=8Ai_8`KQ`@q?RXmV($cD$#*SjG$>Ub(5W zw#0xkW5AgPfZ}dJ&cIJV3cH8g%Vrr00?k(y3#(B?yF0@HA~XWL`?Qw#K}#pd$17DO z2wRuda*H6*SEVQ_XIfOQ>LET&fzHZ&0WfzMRL9=bIZ(c?)4W2y;S&BqEzNX8lJWdb z{ypYZY5P6%;NmkR4Gn++8F3dw>t;YHKyrV&ll(MU-A~@rG!sr+4n?_A0+W5 zuh9l5?SSxEf2Tg$eXkcMd%ieS5fgg6&zlwB8k=LD93XfHjut%FAaKH{;Owvpmd}Mk znT~@l91_)9@GootJ2sE$Bft$K9#|&_&XONzs73U!#xQ_fh5!xYAr1O%tc=kptwAss zo6zkCYKP_f!50XfZ{B%6ywsW z-G<3-K5$xQBW>DCP<~S0Cl_F_tm%`tSlRI)kR!ZwXwRJ)Cw6A^?2VKNQ~9YL0~L<2j-cXIi6 z;PK0gz_NSoB4LACYG+Skjgpi2iqE5<$U3J-R%9Qc_-dv9vjquc3D|cqH^XtJJ`ys#OjQtWQaIc}J}$mUC59{v+;*_Sppjl@G-o6TpKjJ$n{< z@NxQ;-?ogBv&A{`AJ?r~Le^pZ~9NC5FBw+!$LL*{-sQ z5urPgTzjORXnQB`7QT##!<>=XP}qTBB@O`zo+j2mIGl*Y7UV17-F_`0^tERb`$9F? z3OYFKNqw}@KwAt23FEX<(Hxj$nov{aP3(%RI)Vb%dk>^qR6ubje9!SOFf?_N3&t(Y zBGSd+im}j7&r5|Kr7(Y1L|$cHGe6#OAGC~>$Vgu30P_tx>DXCAc#z5z3zLtjRuYba z6%vYGq+D^FSrhaM!z*)}nwnA_FWubovQ_s$=c-V;7$`;k)`Z#wA@lk6y=B}`dya5A zzVql=fX}8{$#j&ud=NOsU3`;Yv;C4U9m21Sexnau10R_8sa5eflTw5nftM*C$u>?qlh>7IKBKvv&cp4ix zO}Hr16G#%~1(leZtA>K6Wg7NLqQDD+$b%iJN*GsqeC$@ZL@#zWz3_4o#Hf0Ubyo5GDx0AS5X!eO(%W{Q+^V#xxBvlDR zAZn`TeTYgF_k%-YXF)~<@%&o391E*(k{YQKmng?Ysn7=R`&~|=JIk*XA;H1yT$+c= zWgT4pg${wyj-0qqe2vG+Sjg@wGJt*q@<6P^x~L! zSD<<6EA76f%`yFu1z6!^t8+ZAaeaw;$>EjZ%j_?&{z7tI@e{b-l1EUL>tzkl9)@Ae#Y1O4sMa=dIIOR^BY_dp zT-3dnLuGNIixmpOVHtV>w7$(_ejDt>yC+ck*PlT=Y|inrJznl+5;PcjzjRi>-I4|G zn=wcFya`li!};XfcLDG8S9#~x0dNDAPl-lDh&h6&T^vA(dm1y)t!p=y&X)(_sKZL^l24(1j2JQ@`Zjm>np&a^mQ=Xe^(4TZT!dTG_A*$(4pp% zyrBuTX{0y9akS3~)V^5hU{Lm`{c%Ay*iowD-lTO=J-*(v4iwLaX5POkInMj=St?bn zzI>5sRxv0>UN5i;k1n3+lOZfn8=u!4VvV$=IIJLjw<%q>4wNQXN5h1QjcLh$A~1J} zG4YE4>fMKF2ro6Mfz~5>v6l~Q8l>Hw6u;aF91!!{SP+lt=n^oAM($Ag zP)4CpB0s>Ac}s(q%+tWzus`b*UQ7K29j0Lrhpp<3eAcxk@kM6GA~JAMiB^};K5D0d zNCjou&=G1~c7R{Pz*6ye9@TxlR}6X>MiJRaealXm$sKp556K#!gafSOEoeOsBMEvP z3Bu5m0*g&q71X9K`(6HBtPC$w35J4B&s<&5)%P$E=pGOo6%m>SI4C`jLxa`hfNk(U zfByXHTT2MgN}PXpDQ?|Lw2us`Mmiq^hZUsrf%K1X5Z*p#UOoWuFSa$&dh$em7;sAF z(i7{Df(cSK^RwU`>iTA_IlMp*ElVM}J#T7Xm(osV*e=iyT{!);@!-$TpXO+SV7m(} z92#RA6G4oxfLio@F!?o*wkClk@0Fnl-0a53Vf?VbmkdA2uHa`QD4+>4lC@BX3a@PT zz8cdX7)(rho<-{By-yMnw56>qFNM%g*uOR_G1WrOaMox9U;cmwilHLcmmK!_hnpax zMZo2)>3@FHj&yQ?JPcUkJoh~tC3)HMq{==En7^94Rq&APSEXSiVPuOZkN5GpNC=N! z$p-3hELOwRnI4Y7)jFt7|k$N{3tS;sse5t7M9ODUo`GrIf5l$_=j%cev@=bw) z`heaPJ5&+1432z9R)iiT!F*4!XLE%Fw523Cdz14Mt`xg;(oV6<&}t2nqva+HvyCOR))duh zrtaL9{?jcCtMrc2VdYiNciFCuSg_0w3odgQ8k<9b`d0^WWU~2dKl`A4yy9dBCAE>U z5IqRrl<5ERVvffVp^e$D&y7Tp-VL3RJ=RvBpE3MAY}do7?=4@#K$pg*{T#KayMt;) z-+K8TZJzksC$dJ=J`_Z5O;>=!a1 zWwl>m%}2V53ZxJc!kSV)L>w*9s`Q*CPtn`f4B8)0nIA(WjbQ=qL7khYV^MLkRT6N` z_DpVoZFKIQtYqowgrI}%VsDuy@EiS(JrCHAae!fccV<)()?uhg2jw005SH6LAd}z< zwJ#<0J$KyyBrMo6HY|l^ne=3|2+1pT6c~w?Y!fL2dSsBkqJe;IOK0f9L_u@Y4P?7d zGTzvbM%W&E!l&7gBTztMVc9 zTN?E=@Xf!jd9P|V=Tf8^qC5FZCTsiWz9InEh@>h$UfZhnO-z9N^q{ufs2Wr$roX51efuHW*FalM@JgCdv8d>y;nhmOZbPqbm6*U z?E*s744Quv_;-*it+Yd~zR!Iz2I9sFJ@wtbvdbf^&wyX;L`>{UCuW~%dF)gW356!~ zJ(XPeCTUT<=T4-qEuF(1!T|z2$XeBc7_qtddxC#<)*!0F5H2>&oro6CMF4ET7LyGw znvG-!+dz3s2u$n``)BGXMplQ>7WS9^vLMzL0)v{bOk8O{D2L03Dc0wpb z!X2)SJ6idO>5qqnr}u}b)w1DE0bCppH3SQ20lU)$1kH)=f)faY2B?^?lC=yF<%1U9 zy!-ooH$G$K%IQF3&nq9BxS@weyHQhBHf=tag&`dgy(dw&=&UZuLy8L(@={P-xKyMc zf+u#@tucMRtnr(X{L?BT|A&4VWLg3=&DTI`Yz1JoCJUqW-f6$!RNX8?a8?niFR@97 zpe-xa-4+=3!R*PvloFL4dxr!z5V?&Bm?=Y}&6Sm`x7_@69Aoqfp_+@_3uS^nJU0)u&0IKIShC#BkiR|_~I=1?%Gt%#8)G$j0_B!mc!lP zKyP__mt52TS*hQ6X8aZPs!Qs{gEA^8#0NN|-~qK-N?4_uK~s_4tl~OjWXo7v#xMXG zjH7pBwjR9Sf8I~o>FOBAP<*|riTlJX->gT#VzO$kXehTE$8od7I_Pmu@*MUE<#FU; z71MI|rDVT1HQbAy`z7kP;ZJ_8AA}H#(?)q+Y7a0qg$9Z&O0zU^AG7*W-fd*WrK^9tp{>Ow$3{ai()I&{B9 zf<7*D{Bxym$#XVyDpipSe9Bb07KzGO5wC-}6prk<{KPzdA$vW0OAiQ5_C6Cn`E2;x za)a=q%$Ksq*WZmu_pkP9Iod7~j-Be?=ecyedWwcmpZpG!$CdE4-rCOMdlBsH>><%8 zh#<>ae-wmz*+L8JsY+U?wk;KprbMy03F#bWTFXb-c1%ur~jQzE}mVSS;{==9ORVxEQR63@aQ?ej%;ckBjcj|<*4HJVG; ze*EV{kWU*^It_97OljY$K;cK1p5p!+qyx$KP5qKG2OJ(jHG(Dktx&ngngGDMo@R{I7&TxvA&oF>AX z)8JmX)>axtW&;F!ICRmkbqLLt?t8EB8Q0gv%5|9xEpIv&T=Ti)e5%&#Iri31q zx4w4pa+6$I;#An6tI5CDZFP4;?E2M)_46Lxa)tV?V@==t#03qHg5<5^!%}M zab}H{=~YX_iA2?J?YZ;SMsF6P?3vhA>pVrZdT8thGs_$Oj~B{_$3FOGSyujaU6w*} zQhv=K*D)i&qF?Qw!Qjcg*{#;jjp>{l5Buu@@ZF?r>+6d~eapII$Jw7w4nw`rf9M}J z@L>mG40`QYZVRUQ%$Aha)_cg`KU{QkR+6{&00XE6qVeCr)0cM4TYu6iFY+uTA>- z-q@GKA6Dx=9v)ncJh!XV_T#yuJ$89^-OEYl&-LP7g|C0V)UeY3UBB?WL2_Xiq3378 zNG3s#rGb(|&CyGzO^DA8k423C=t><{42d?)@6f%bkRu?I==Q!l&ZDeCOK|f*Yw4WdOD%2Qr6adtycC@bjo^lLdMOk9`h0R1qA8zyg{jSC_w>pEU;y<~Wx2_$)P>%JN6& z4ih5Z^QcU_^4-Rcuc-})d_$Fi(N^9x}FFWgN$>FO{ZeywFNUJ z*|G5&L@FvO0}m_$mEGAn(d=(}I60}<Z7mH&8vG< z+}R_{vX*#4!vYMCT%hKUS{)BCjbPN?dY%bT^E`(@*Gqim>r0E7f!76$oFwCHkN30d z70M-)h=*`VxR1c7grGcv1k1gEzpLI(Sm?Ca$4SnP5kOfH_FfqbIRB5l@;9h1B(2HN z9rd`Lbwgf_jpyc+RWHd3SV8r-UB2>eMa~>2f4x*{0aiIHZVm&l>Sv6RXkP?CHee_$ z254Sk%k`gc$$O>Ncpl=5`)wnUKhPCyF~ zDXPQ+2mX<_l6vrTD*RDMV}O4$@BMrH*|W~2G?Oe6&v9O#01OIpI#We(ms^xMbu!au*ATnF8Ys@PHWTEjZIBa;J-(Yw zE}>qqQaXbKP=tF1nLPST?t#Muvbn;X@ClFbfvbNC@0AM$WkFPGhN~L;GrK zn|%?Y$y1#N0^5&B%|-lh#(it!s&Ud@pPEACNj(sNDp`(Eo%uCvBQit+2_n3Put z^w2VSeAirAyj%39yI@pZpsrAGa@)0wUn2yuTq!Ejw%-DDwVQA$9HHIhjZQ;qEKJ?eAsNu$ozU{G$Zp_oEANZoB^on2DgR=7K z!g8_si-^OcA0Jx`Ka4mKmytc2rQYlJWo^ya`E4uZPe1a@M6r^vF|9aspL_iJ!?R1{ z*LN0>pxHSo%D=uKb*w&Mtt}O25h%f7>NXr9zSMs+!!Cn>0Hs4ZbUt__JtNx>V!Dzs zWnT6s9O{OA0O3XbUr&eqhg9T3|I8kxU(dPq8+YI(X>EG*-7cT+;ig%$IMZDbR@F34 zYN~Ez*5mi4*F*ZM>-a&{6A#-9NgFA){vuX}#GgSz2#SjucGF4>j`Gphrk*teB>*}f z&U^rqvvv3;;pIL>p$IM-`BsDq}wc;p=OJ|dJXtpTL z{&0ZGU|L@Qq(FDavr7dAr)$`7m%k6+*Au&*UNI-1P}Jukm9aqg`&f%)!}bm?)5mPv ztzX+Ki5~foeQB;I_hQUkq16xm!B-#E{CW44vUpto8f0D{P}tBpZEfcHFxQlQ+X9GW zV$q-7KHa8m*$Z{_`YUtIN)|cg3+Z{PP6;oAJXZ$A=UcThGIP=$j^C8mnNRcIfiIy> zJr`^PiAhK_F8`5S0?cj}%&u4-D>3o!^)v0yD(dxv<18ppI+3SecEz!s5h{5qM7JPr zpssDaQgR}gE5_ex^X_|)5>pH>u0_ghd#Yc7krm<2#r+H)rJMz|PCdQ9UN~C$+O2Qt z%t}(Dr+nYRW%;7LAI=T8;5Pm}OeZVNtHK&F0zY<1gftiw=5K{`fdO0QWF6 z?=6gsNQ63^BWSg~ffKA_6?OUc4f#>aaLSs4_=h`v#|GpRAj$f?*DI3hRu!~NFo2C# zZvaV}_Hjr()fldhJUZ+&RFm&cj80D0l-o3~M&Mh@K1xz<3ub@4R(t~XeQ3(e&DF+$ z7^z9)T%N&Imnd6WTBa+G#!fXs7K;LX%U04~=Nyy$BvCW&212E*gWv^t{X*lu90F#97T{X}po549EY{TfUt zB+4F>?;6tXYJu2nK4<=LxGV`(0rqKvY5D7I?%~(D)Nnv$JuL7$vkQjTHMj|Jyo=eN z(V@F~v@-0r>&M~?4CUXNbKlUE3rUt$F0J~{D<2iuwq-SBc<2UCj==#VZs4AgeVTS9 z5}p6B@hC$0P(YCIR7fEoDipg z-iCZ~i60>Dd_J)M((_UUkbF>QeB5|ld_D>WG+VHl!E=x4RVmBQk7u}Udxc--hfWS7 z5n}UI;7xVgst3(Y7g-LMv0^RT_Onl&&7x9F_kB2rHTD>>nwh?1W?<*V1rs+tRo8ds zCwbg|>#AJw?B~t?b$~Ft2t&pA?uToy-g__<(9vW2RP~vG2UrWoR}@Ox^cWBd&@pyy z)0yeC2vPucL*2Y)+gmu@)Ox0FRysPM;+<-Z2N%e>yf|$(smu@I7!q9_No>JrqNOiW z*x2BQZj~~v^zWJ%1(`UD!Kl8K6iVMQRsA==&LRE-xdU3$e&VLVwzOq))AymGvPsF< zImy`9TNfURxSlG@?GMNgn*MO^%SdOTMfX+e?dSOks+K-pFH@fa{HbmxV2!K&wZ3f7 z0JpaMW9T(NNm`ubO|`$hXDd!pqJ{x&2dgcL&~^ zf{PxbqPX%cZk<6n*aiTj1DqOkY)&kiiX0IEY{QIKVH8>7*j-&D-nv{tIHsJ8N!A0B7$A0!KYebw<%FPW3|701KIgan=|gZVXN-R^}`=b zW2`W2L^`|wbzJW74`ZR;Wwh6kYQFA&n!;!{r{SCFcq*1?2@b3`HGhY?plBh&S-jK30wk<%CQn8`|7!~dvina)f6=XhP~pKgn9nU zJrUArpPql%HnXxz@YUcY#-PUg9QSRxy#jRI~D)sX|u6tHkIrl!aGA`Z>@4j z14ffs=3~8Q$4CfJ1vKO==|^IAZHF>`o)RuXJe&Ajul4k6ByozIZuA$t z?`bfZ_fS4;X{w^nH^9iw*v^P-o0*GuBm(~h>X;@+Ljd@dgx&1Lw!9rq{PD&mT_#wxvvW5!7W2g5XqY1+Qggz=W*K;o6 zq0L$pgl8u6S2-T^7_R%Q#R4V$oDrhZFS% za_;u}79Dkyx|e0BoA^4W@Jo?7827YhVY)w_GbKvRVp9tMz7RV|0^105&CIwefOad_ zoOJ{}7M{i_pxIKVRMdD>)SPjyF<``y{1BtD3)QvLCp7F75^iNGHHhLax9RA;1__WD z=Sn(sY8uw*g+|Ia2uS;bjIq`EQ)vPuZ5*o{ocj^u8ZickZhgvfHwC*L+_Ku~b^zrS zfwW%l@&_ov29ksibzVPtXY=xJyT9`SO(h27S1dl(9?$VuIUj(MuO*T1>;0B5?hy6Q zxO?EvU(WF7HsjNYLf?Dd6Erh*w(@QX4fQNn{S2_vi5?+|v>|X^szzpp8!ilu!MWPy zH!C{AR6Ph#)HZSmJpd965g;MyQMv#@Lb`T%TLCuZ{Zwdf#rL-t+t1g4y?YH>&~&xR zijmp0rdOEHHpa%JDW}7!E{6gvO1@3y+;0PZ9q+k1i5qNuy=U7I+ zdk&zXM3Fgz_59J(*CHEs%LkIqdxf%TI5k6DZ!u`#jO9;;zE>6nm!3b*1Ae+3>%PlJ z#rmEAjt#5LGjz?Jv{;|LhdYapq%?{Wo}Is+i>0nn`QChc)79Uv81lu1AVPExbRb%5x@AmV&$#Z86! z024iGLJPTDC%CHJKZC@goP|il+`tHgutF238%gjnRVSL#G`So{E( zSLo&lU1 zS6MW>Fq$0!rPXJ8nCSXOmIG`ITk>Z(tSz^!2Qk&7D!_EKE=IdSP546oGW0$?R%2J` z-D6@B%tgXrwVT2n=3eKnul;zeCO!tBR6~@QAmg=(T%6j`y2}N&T|$gkN0cbUr=Y z#?7PCIt`)h0Z%2-&ma6%;eDg!!^fp8J^pOnpW7P7rS9d@qU@Bm-if$%wMiH zgsg`ZU%i*S%_fhIGW9tA(mM&xHJBzZWfxRC9Sa#?HMo-dg{q>|rIUq5W#7*ZhjoWp zL$(5AvI~AzQQ{91w#3M{?!R=H1HVjVQxoQ+GIoi1nPb!TY`JJ&*a~7cPV~Vx_xK%} z6}AuDw%kIuOA+&tOC593W>deIMY#Uo`;}+Qu&a2s8!QTI9W!!_PRN@+*czeU%FofRu0MD ze1W>Op7F#_k5$p%r(U2m(~nMpaMmc^bA2uMHI0#_@hh+@r{ogYG_<3}A^5qw{ylD8 z`NxQw)MR*}8qwyJ#jcS6PS6({d3f`0{`0hNY<>J`LU1sQ@T`}we|^5oxg=%mhCF!3 z69~YJ45u>;>Vbr#7*N+i2!pbnnHbrym~yPLvNG`I1)!C(GCu&^e@iOY4m<$1mh)1d z0r*RIesF|jj2&NoxdWQbqq9{cHXjAcxLd^FzHE-kiu69(3w7Jh-{wMZ-EnyIXY5}S znO3<%!>$XNC^vlp*v!M&;W<$=A~Qgr3`LollR=p|QvF{4m_u7^Gf+?wgxsI*2#-M7 z*B7ayMmE6tLN9)}q|N{dpjGL&hdc0B$swQ>9H?Op@(0)V$aoqhKP>)%Diw<^oCE+7 z?rTmrb*yu{K}d9d2PiI`@8KXriVK}Eu*(9pSkCoSf{)CFzU<^Iy`QMYnAT}HI5Pm# zb$lUT<_M-lLG!5(7;VuS<6Ay-x4O1pw*TX0sW)5+!1%TM`@7%^2cg=bPDHE{X9np ziBhC~c}>S9%kLk+Y!-kEQB827 z5E~MGWx&_K4PJtE{`2@{=0^Y|RRaP=gVY(i-_wU`9Sjw7SRWSjRK9(m&?hgU!v`A! zLj_+TNHZKyT9mwVb$X&S#R&8T8(*J!ZSdCRL$MW{h5WtNlgXISPZje$ zMhrkE1PX6I(RZm)X3$^woevyb#XEZsnnRl92#S;l*h>kKZEdHz)0k-?=bF_7?st}i zRYUH0tILBun-}Z<=Z=dL?vy0atZS>*M1&fC){bM zw>fs6xs$Bcn9+F78Ri-y)d^&Nru*K+i<^rC;5fuegqNWc^8Yx(f9|xOK|hSu2|)76 zNp4~z+gt_25kj+XBy|`@Q}^TsUW+9lM*85tQcq8D%8Z04*OX?7jf*p&1}{B(N&5 zJM!~Qp0Nera(E0mKR`d$G3psWI-dapachTW%=@v;D-bMB7eDhDk!))NGPaxg578qPNS}^k+IMySy-IWbHoYv$>I& zMFcjusNV4VZ~pIZ)M!Eh801zx&u>y9V&Pt*^1BWY-$V#GAZ?KBvW-75EFs*kkgFdD zLHvej31Q?|kd3{0`FqEn2|}Xw-S@4xv!|A4=NwgFJSdLC*Yya&dGb#|kzS~NH6 zQn%THS7gg4^6EDzAIJAfBvqf_<>vN9Ou_thps}1^DckisGMQD!`f#l;H2D8lUi_~! z=EnbI_@2?(=yiyk&7tM@K#yg5rfRSabmQj&@OkoM`cH2y!QF&dfzOfF<}kdj8B$%` z3%SVbp`nB@HA!wrl&OJ~?Kh;&O8fhKITDK)luq#kCL8{~WScwjAM1`4AU+8tti94- ztNgW;)f92Pon_1&Fq`BQr!ZpBGVJ#P1oZ$BZ?*p@xmlUO8&fSI92OW!cM4n+>0#jZ zEJ1^mR%H*uk`V_N#zOMW1x^R;V|%sVOFz$tk=JglD*2zzzTgvJvLctZI?OXviz-x$ zI`p)lHJSO=CD1en#*nrfV2JHp*zma{P!U362w~@pz|G&>T-D(F zh#juC6F#?TVm9~W-#-a=$Ah#C9Ct3Xz3Ps$bjNR znu{`5Dn|#nd$WuknnKl}EIHs>`NKrj`~AItKX~vr#AsA1aQwB{|2p6Bh+HS}^!CNf zh9F-wIe-XQ-eGXUwLgl#ko}Bf4N`!V$wm6UCB^QN7Qdq_pY|mSy8m@7sBU4y3dXZ< z==&;cf8+mNSdrqYzO{v-D?maq2fKLKb8SVx;<}q{L7Q$f%*_@5bc@owp1-I;{4ro^ z&}-vwr@{-aZV=e4meFpXBQ;N*`u_BiUX~&CQD7Gg0%?fPJ*j08+?Vi?j+c9-_z-Su zT7|6~~srjfcdk1FR;D4!JSREM~eUVBW`_-_!&YZiCpSx^q@hCHxNvu)cL|p z4n73VM)*gU0hF&3RsQ758M}X<%$!E|vL7`-RTj~ZoglVA`}8?rNE`-EY4KFa_y9=q zrgfHmSY-{8MuWfbMe0UCPL6b$sy*)cz25B9nN+8P#mxV<^FwJ+VvMzqKKEas!M}c( z?sz{;Dp8ABxCGdM)t>(F7$e|g4&rw)`XG?2?aXoq^yKNJ+k=}LuOAy!5L$zvv)$Dl z0V5%X=;+hC9uoaT#G${+@AcGQhSH5&*T>xlCd6w zUW-=cV^DkTjwgVwoCBP(SIoOHnjkbd0EpY&@`dgTH>* zOGtEP_|zDzrY+$9qv;WUKZhDT$8=%Ct^egYIFV)(1?X=Ygyb$GOfG{Iaz-?QUqgnM zPsW%7l-I*R4&D!xi)R&~S|L35A}&0cI$IOW{GV%J2;ZGk)Hw7%eD^%(6F_GW2xS1Q zYR-GPbW$|vXo?~hr`p8zBcjHV+13dzKC`EB$R~*LKVF`@yj$yWxJYI>H69o&X`N6vxrz`zaOB{1|+`6w-Roqt`Ze z>9R_T*Qnmxt^>4PX+}t?#UaQO7F~s|L#@eJh;y~E07l9B0c4F#ATS41Ub9>ET3kTVcm^pdo-*mW0nG5%NLB<#K<=daClLt?f?BO8LhPxin62IvS# zUp7+F54o=HYL{2baoA;|bAy0nE95xvYCnh{^O=<7*DdGW?%L^FC;JqF32j^&9K2?* zvw1oZrh>rKMUEp<4nyj`NSS-^1*u@B{>0zbU=hXcR*540+spm^H>q0qjO-E~3$Ikb zH4)pKPms`3YYPjMEGX<@_RPr&Nf!~*U}dXUm^dO}_%V&0sBO+{un4V??5B5DJ!o0R7$Pbv^!XTgXL)JW!pQ z;jaIejl^K%_Y&Ga8@>mtk@SN%yEvh4M>7QUg9u9zNJORZ+DX$bP!kP4WtRisgxEXT z9}}Hc_f7Kll21a@;7qHQI-p)OA20puFknrI#eKO13v1c_I#K`nNmxWO)+Qj)FMWNv zFN47rINJUQB^L5HgX}f%Yk{B%ATi#g_UukZv9j7fSCOzAsevYlx;I+{$(LzlUmoLBJmC6{5F#O0nrFTVjL-%dH-eLsoQy&I5Cp%P*<}N7 zb&c$(Yq{kF%f22PyCy1^01zN2=XtE&HCth^3r+<-$6<&7mTJ{KPFd;mjLV7quIz7q z$xtK`4B0&x{U1W&T?ex2Co#%MS16{eVDv2)0!X@uP7zM-QeMknTDe zy|5@hC}O>O1dK?e!buGZh1tq_-G6=0?qeHNa=FY`EdPfE-?oNh+Wke9t9A$si*Q-M z&8<nAR$CqScNm=SVjBZ0A;vmrTzEA>KYXb-}hty)A zaLxz=R}EIac&=I7!d>l>P9XdD#g4}iJ)|B==kwe46#xCCr*9I4!i^q>%+L(j3{#%- z8D>^{$k`v$1OQF*+{2k}pcx3YLkqjGg}Z13pv5&Qkx*vcenap#Xd%6MeleHm&suRA zZ-iVR^kP;_nxChF0-(_s91Kz}`D3K89>gbOB#$`Xkn?D0=M&S8M~p4R&193+-;i$! zW<`P0lPv?dx3n%$#1MkX?^FnFBH}4bPjiNTF0sPy^BFwj^)w!frF{WNo7W z2-@J~#*t8`|M$~&1EAIR?yc6Ae;D$rBH@fC-*WH8A^5fw~MHOw(k$X6keZ2IDX^JefxV6@H2n?a z|2`_%x6s&g-u^Smw(qxriQSYOub{9+~6Sz}H+~kdrU#oG% z3sx+#4DNx%BP!Pel&jM!2aR&g6}nxZZ7+s=75+cY139Lt2KWW?kfb@nw@=^P_U*x0NP!C`G3ME2A4Hyf z=t)&}>C{6<7iBCmqjTmJrTQzVw6I7xjv&hpZ2M|30h36s+xsE21>`2pS!;sX__&Gu^ufwJe5F=0}-`%n#hDT+H^8S0bv1_E^ zL+j|wEe9Aj(9Z;+1VVC?3&YRMA3yQf`fEeCu}P9CIOKkljZ8SMsx_koi zXm0FJzJHEVa(Z|gD&5}3Ky-J6{dz-0Yy5=yUU@|J&FWG@<{Qwaj!t!V<*|%?-t=TXY zmV!-uKT-_0{sX3x2q1;9K2ol{uE#w&05b9;j0@;~%s#~iCCQ7X`=wlLk+Ni+=O-{bjU5n zPLUXc4^KPP)ee3CQ3A0vi$HNdiU}32sqz=(8$U&)GFEXyX6sslQL3gz z@+XTs2VHy+z2r5^hV8GIPW?dUn#%-`#o7wrZ~T*!R=ioIN1E1`(6HeJ(228YpD>HN z5Eaem0VS$xplP8Io~7~C(PWhTvu6Qk|Gj2Z#Z{GS)hSi9=iRovJ(S(Aqc*sj)P221 zTkE{vxq%`WPUs7vQbZi-Ap~iodWMMlTR={kmIG3QZ$NxB5jqZ#lCnIS&FMF1{hwmmd?4WGuURHo3;oNb20jlT)1@Lb%ExC^Ei2TE!=!EOo4ZMR*)QK;IuPb(4v zVv8vpPt$7|cca_nbvL~J&v)ClkHMx@Qo}7hsoSj*iW+)0`C)1pR?o&@>(6uX;eqyi zCadoJmUZ9yvDlY@-5$v-YTowm7$w+ECrj3oH@9wr6;dqF{G7dVLM~yJacbLd{8<>R zDiZGSq-^hV7>d9GO|j*j-rsi94+}_L0-ze_-q5hAoJjmHqAjx6+PqDf-836!Ve_ft zYY0P6*A`XGXR#PLdkDHhTiZF>CqOhqjPwQ$m#3Q7XHs(67ea-LY12BQr?z@>HPSMm z208+baCnYEHM^_|5KV)M{y5i-ECT8B0sg})$d*m4qS$b);NpA3DeizcVe;D|%7|0A=)C{+o87u`cF`D{0hY`z`J3z#a!D(ys zoIAYr`2ATNjYjYt^LsL{ZF{yFK?1pim2SbO>|0*Q3lkEz<%73<-v9ADB=9`VXN|UU zmx-9+dH%olzC0Yu?fbh#Nt0PolFX8nA)20wiXuXa(wv!)ib78(6;U!Yh;l?`k|;@> zPAEw-r$Gl1nurSF{cOc^-wxm3@4eo?-s}4Imw2B0-h1t})?VXhalf?Wp?!bwHCWHn z<_ynYeGb3hhH@HJWJZ3JUhOrS*CN~C^|M}jnKxPsRAw)?@_&!e>RBK>(j9sjOYf1L z+v5CGB|}|3HSS!0se6Aq*8=su2uc@J>HX`1`YkOo8=(MqzIKJC9h9H&ynYo-QdN1+ zT#-h$zu(!AASJmbNFb1s1asOL4!q3X=@(Kn4O6`dcv1W~cJG@zODOu6N<<%{@W?fl zb}#7E5R->`AbgQ(oy4P-ocWL{ynHeQ3vf3 z*{MN&QOqiae~hqLIrVp}C+P>_Nm>~n1*t9&+9}7k1D+zT*65O$fvGU9r@~U1i5|td zAFGaOT3HQa?f3KcIVd)PraUuM+P;hg@6-pZCE@8{`QFVy7&uS&3WT-Z!tL-u)v@e< zemoC({6E*t=F=aqP>fbUl*il>GbmrIL$S%k{GHhlhWABz%m#m%#shiBhu5ECLQo-2 zjwXfPG+7kZ4M!Lk-K5tYwo^|8-2oVSe@s)w;ww9CC4+*_|0hJ4$NsJ)Exp0m3&|^7 zYE4_A4cb*R(q}jPE9Cj>urg#2t3I8%la<>h2U`4|G`ZgApzttkEn$dc`Kh(LsB0Zu z61U6>FuwS!{cGu8`hZ*KrgI4`%90@thLT^jLv(oN@jp%2@Q!@L5H_5RZ!Iv}Ax{0) zBOUY-%S-tUPxx?75Z-5Bslp{1;jO{YMhg@Zse~%7B3sTHllQOWZT}WgD8MaVkh@h$ znzs8#>L7XOOI|*f#Q_6%6@KZvSdRL5iZU2sP10D?BDM8YtsI^L;t8*PbBDTPmXM7^ zCwb5*)oj;J>bGJxKwNbMX+7?&C+Qz2;(Dj){JKG%MSd90LSw9)z{#s}>rU(N6d!@r zoy>7ejkh1MQ)!~Fhc!(<`R~wEKhuxEPj`7>7Lf{EyOSur_63}JE_7XK`d}yHuU(;~ z9HY%iOF3;vzexfOkJEhWu0(fyAMr8K#EL+@`CyXYUvhgVjWq{Omp>D_BBhUg(=wVaDZ2!dJj{Sq-9$Dv34&QB zRycM9s!its)z10Nn?!q&%tWyJgR0f>18>A`!w+GTJ{HM|L9BIBUY|P`x$asGKuMEe5PwsMeuYEj!m*u-1)lrBoAH<_KA5%`SQB z;|G@qlocrd?)67I=sGovC_RzHGt}4XD}ot19>k4Mr}&5mnsE9H&Qc0Npgte)ss6I>^+v}D+G;FeiM49!8l;@FD|2T;gVg^OFm%IlL4iSoawik#) zJiDT>#;AUo^m)4Q{a(Td7oCh8P9>t+{xrp^4#EQ7kKF%U#_+OB8Vc%*7{qJI_V7$FE)2P3Fq{6g4riq}o z8z=9(>Y__iD5{6`IUhsB(HDMy9Yr~SLu4T5+P4zt2eOLAmrq#k@IGn5Z{ zF+)LV7VV^D4uE7k`^MA4q;0ym2x|@$9-+N-;8M{KB?6!Ec_ZCyRtF;o)rstOV=W%h zRWS(HXrM9EUOJ$1>O-ORi|o9|Q|$>Tp*{$ATOf<7_|;FuQwx%N<_{m9;J-|+kB@gc zsBC|fVGc2RSAO8q9O~;=_&=I5Lghw%93GSO$=7wrdOV@sI}HX_O_-J8K^|S{acTIS z`Do$PHXW$epb=0knaJU!sq@58-haN*M#Ys%75-z4^yLvVd%v9Yy0OKE`Z5;dG8dzY zy5JAp`C8O(f?qjz^GUe%b~f(%^7gM|njX6c*qfY%{}>`s9_WqBLz=^Bd-`=MWhtcb zA{XBKMYitL6BN_eCtsJ+3zdPJooP>Xv+Gld7P#ziA0ra3s=atc+wB0m_)CLbTyGj& zr#B_D>wtxIB#%%nS!57F)%>NGhWA^!wt}j~2dlcMyJH|l3ITUAQ=nMyOg6;i<=#F` zQ>N4D_r~kJan4t4gQ&I>{>1cw)C*|Q%EH8M6G=PlSxC8j{%4XE<3Su*S%MV29mZ%d zk-%HT*(qOV5xR|Bed|>Vl<72NXh1xFW3vnr^fFOS8H)c3`u1y4<_aNhak=&x=}T!_ zm*FC+v1;#W$~_Z)l&D6_1qxm)4x=p2RlIo4`Ua~I)*=br!{2axLV)TbKvuHO8eSdq z0q_p3$kyf6^!0w1J9!CtpoyZ37Xl(yMElDlYFwImL=fHKA`vLm>AZKmA9n|}*rfBt zB;yR2NZoiT^7?Wu0yH6JEsbdlKj~(03H>Cv%*Do6@c%8j#%N-utsiTxJ}XInK+(sG zi&r35)l7o2G1iBgw}wZ)Sv`;Sj$faG$E@xD{`zJ6f(+M7+_Y~RDfqJ!sEchbQ5$Fk zW(lmn7r0AsO$g;uBh0mepQH?D&3zI=WncXpY`xP>ZkXBZV6BSscS~;EpJR8Za?%z- zfAW9$6EhD=-+J-k*)(%;=ypd?2UrjQ#`aE{@3Wk;BBJ~zj}Ilu@VCry4aL6A2j!4@ z^g%W_-DBKyG!L;h(roY+5CeXaYtNU}ab}cv%tSNdMa;Rf*DbK6KXPD6VxMuwZ5|U8 z2AKVqSOWIeuRi{RaqE5Cu*zKNeW*DWERO(;oy{!V_l|@2ef`y=%kt5~rqb@Kc=vt8 z3DKJd`G5nu&TVk*)6u`^qV@Zg`WK;|yfTtEvRE}-hMmlbdZ)1-h)iql)6FLTMZmgD z@J9A_qxzpHaZD?48o^)fC##FJ{)U5Fn`kkWj{ai%A3dKvXOi~DpPkPxFf+ zmktQrFF7kCM|)y>2t`fk_puSsBGP;lus-Dg%_2f2LgCeA%RJfwuh#c!J{?*G$09s3 z4+z=Z>pag|mzc?~`vWLXNqW!j(e@gCEGOBcBc8NZd2P7;A6O+rLQJ#0?`0-mjC{P4 zr~9Ci>b4UR-Ov?j%g}TpCqT8+GVphWaXL7Jf?1?%1M=*Cx!;| zYlUhVI8WqZ7cf}9T#TppqqE{S-NqwhYWAI|$*kBMn)==2yT>;N&qSB+9qwHU)#)~7aoLM4Zx%IB08Yy)dctD%MTR=(pAw8pNW;tc) zkL~C#jwv~`_WYdK_LoyAA4Dq2`Yo|wfh!Bc*k76uM6MV;VM%jQ|_bf3~s;tK|{=aX8j zShd#!$3lJWZ_TV61yWuwD_5i3aUFu2kebZ;>^O$pnZ+?@Bjp%;%)$X^L~tf+uSCA!L2MQ{^$&wh%%_<-WVu|?l$bd1Vde_H zLja`SS*ok1aO+0y+VJfhq^|G|`uTQ2NzbiP=L{X5T&8;A_uidQrRRH){s>^hlosz~ z^fi#iHm_12QzuDZs!z_mJN^}V!BZYfU4BTaSoWD3ye_;&O#-l9$n4`>Bi?n^%YlA^ z;SwCA9f6>N?F66|DQ*o=o@X_%DZ-!pJ|ufRP3_gbl^7qX*561DbV@GC{f;zSVDMdx z2@}Aq|8UG(OcNRIN8^~J&IE`aJJFcg3h1zRE7$C#aU^p(8|F@&xr+R#BX9>+cYPXu zH$Y8-Mv2p1L$3wkmYKzbp54n!>RgOhq^cUzHj>oe(AM9p4=4+-MdQy6FHVe9(8^kH z?;nHw*Z%|a0S^I)I)YAmUsxqVdd1?Dd-^D2{Dj4*0(L|J&nk^Q6(i}^n^<^()U_eJ z5OgC4mCV95J)aJ)-IP;CwQ}?~v3-AY*df%jx6@1DmL>I1EI|$5%pt*}B7gg@0e1d% z%#43H31R~&Lg&}Zp)c2a0;zItMGMM>JI9(vpoA*)#tXnY(oShKTPrfz%4C=>FO8k_ zN3j7n>onTK5=V&(P?PwSkKH;BEqh*HjgBJ9EyGQQ66AUIefJbvbL#=cjfKTEPV|r% zpyAcIDbJxEPIw5OX)VD;-#u~o(bwK*+!{^4vHTlxW4YdEJfPZu6#gZ*)vQA_FdyRJ z@u1U0x)!C%3PJmFscM87AanlBZ)3-Z=YJjU`?zI$@8-5H(|gR!Z`Vddx#u@LzvooWnZg zZgQy1piy*q0{rXS|9$;`iU0q?dbj4@?7TRc%2qylq)mz7r{|N-+NN$(n?xXyC7eQc z+d{M`@vL9gv!9IK(o%Dv6&Q?SzGA}=vVspnKv(K6_ee=dn3K8U5xM$lg?i9q-ByDpzTz9bN%o`9d3;B@5}O*=8W z#$(!zBI#^f2xsXUI%3rwMA70wAc!nPf+-KC={$xNXT1kkqVmK-TK|-*r2iXX_tspY zd>BK5@7}$06}Y^eCe7h{I7*&Kk!~r|ZK^5r3vT7_A6EbMYm0!R65^iYsB3sMo7ujv zvZHd_OyFW0iE2qw%bnr;jboC|{no!{_RgERf`{&JP&S}{6iSh6-}B>?P!Xe*E7Ywy zmiLtK4%bYe8j-g4qATbf;fFa@^nwnf*{1atlXfp)^zZ3elSfcO`r+gy`~NvkQN4`T z@%w@PQiKlv+RK|J6k5XEJp&*GwZ=ynU4#LEd+Tkl(MZ}UhE{@;q%Nv$7QYf@4^&PV z&BifD-#jN}0u7W~OL88-RWS|2-Qelt-LzxaUd}-(&o`0D8CkQJjQChdg|`wB0p=c5 zU@oz%?4+OF^zTcU4!jt%UkKI)fyE%u7hfF`)y{AF4GRfkz8UJNBlc}@cgJ7HI2_Tm z*>KNWsOLsyQ06Kj%h&Ih3}XHK`dhO?F&d3SzoRc& z*}{FLT;--+e(y0G&=$zE&q+Zq3O5&Ag(iInoIGIyJWlF8%{_ZM*6h)B#6Vhw^fzuT zn*ebzUkOJq)QTYJLsC87)E))Zdq?(!UE9)1DC5F=s;~C_O(3K8+V9!3XIka%%X+~& zU)SdK_gM_s4fVV+cG-8p2U~8d#n^Y0oAg;{U;L&f|NXT5cNL6L@F6YAWXgx~3lAlZ zH|Ull{6|0;FMXCh1K>;2tF{v-PG*H1LKhIhzpyG^{F+|=#$rVsUD%$niFZ0F6fLf0 zBhV3K7E>bsYCDJXZ_trQumEEAug{%H(Bz2737n2|U+=9!h9G=EYg-DsO-Xm>^mp&l zX6koi7I~ig_t!#LuN~>EFYiip_>0^ML}^Y(H{Nr!dWPPP9#>+I;QF105SyD)uOc`~cXho_tgx@A=A@?y^gg53*2Z>I)I3T4 zD3?rJe!Bn;l7h+0atc2wu19zfJ7(idCjmh@-3;85!5$_(O51aehIZ$YOl~U~OOcgW z@)`SBL{NXKpbvLNhaK?2{Lod^jb#U-gqB6#?`yk|{g5Df6pYupY?c;FMFq>tqGX0XCGz|6>#^}znesVTc0x8%$uIsx_7P2rMCuzN>Ma(P8?Tc{aI9o zBwMSwy7zqtoIR;EE{jpRJ}#>lqZulz8cCf;_K#e}`Py?`w1wkR0{i4c0W=m0@Bt-E znBDT!I$`aUKenRdgm~VSo36(1>uh^>Y1{*J!yF@_6?qk1hsa(cgR!>8o}q~O6UgiG zYF)Pp-<9&G^8xljFO2WxO&1Ly#ryy~+cc9cj#`nO4KLG(alyBK@i~Vb-h&9Z;a(iz z|HQ(k>k89XJ)h`FAWbm7r7Y&Fw&FfC?JTnX;2fWr4)fyVBoV5T=!bFrNj75wz?QIpRM@8;#;be z7hhyc%XYe}w7Qh;l_|&PkTy0zvliSla5IK}d)vfJ3R)AO#~b%7SZ{+H<~#`pF@o~6 zQ#@PDYJ4oNxJo&Q9@UAKi7NFi5xHF&s~7L)0-RX{r^3`-tssuu%0IoLh9#MyY-EI1 z0|yVfhN|SGxuclrP;!URB($^s(K+?}MAJ*(mIKt<=Eh*%>h4;tad1h3z0qX)0E2T|k@L z8<2Vc<%g?g%7>M;qX9bQd3X6Ns;-seB7KUO&1jrr8Jrzm>PrTl5ImsfSCs@}urb}m zt_po(r2lXykYQq56skusl$Zg;4CH-c8$dlF%OgxO&I6bx=ThrnFf9w*7bGfSlMtUW z(<$Cz3p(CTpA>bIDaqD#0Sb&G!J|tAhVZ;Zl>u?f2GEm zluJa!b?A0>6ZC(Q{w!Karmr*28wj-{l zbokqcLJvm(=|4v-j$DcR0gR*fn#37X{u&Fk-I&rzn}ywxDkF$o7PZ9x-uvugEdggf zzerB#EP?0*j%I!)`2}yy?q@?4ObZTMBcUrpO6e+>aht8t|CRd#Qr4k{y>E zq8Str4#jyjxw-TL>3kz;RGmG>o<|xN)jVE&YGc~s9uL^iaRSkfHj7+kUk8a=XW}es z35W;jyj==No#ZYZcM^7m`o8hw`B{&kum5B=Ed2OBKIaIfpixYbouCj{cV8x0pN$iQ z399gq@??)-m0n=d>`9E@bk6+CJObqc5Qn|lKajT9l8ZkSbz$d`I+2=F5FmvUlSDSA z#8rPUBf{?o`Aah0nshAaUOT#>6-t&a{Ah+jJ?4q7I%3tHeLZy_QlAxl=!;W{(f8Mz zT@BWc|M<7Oa_dM5ksx10=mIud^HGEpJYE90%;;Jbz=!!Pi-%P(ziCI(33FnF5~vGu z!5E8VT3?loC7^32N8Qs9jCZMq>U{^SEoMqqt29TQKe^_-DUt~gW!UOJ~b?CT7DOk z)NbS*Xc~R5UCg|TSSpTaS}m`dD^St#@y+H%`V>$N#$V$jh2|K!KYjrBG|XAl%Awr9 zr?$Y|uzJk(3t|McBJI<;k|hY>KR!Yn#)ZI{b?}?P3CJRx;s?PC(l{ut!rFkopm#* zIh%l@0iJR0rNDFMhyL-3D=+s@^Rm!b5|iEne4VEu45N-WXy?9WZ4gz{l=zxvehk#eE3>=oJCgp<@If>AJ@nj=`iAXhIN0u2*ny>9}@II~^r#G1u zrZ(l9w!K`r1^v+;(_P98RNh=p`~ppLmdv3s>o9re7j`tTO9WHLOnNHYCBxqA2V8fh zQ53Cc*;U$KZ_R7qsS~&rD}CE0_G|lj^^@XZ17^f6aKW4rv;N8`)F4$>r(Yl2lq)1V zUbZsWt|p{Kbj0e>sT`(4b&*3laC%MNq7*6a9O=R%NL6d5Y#-) z)Dw4*(<_W!*3=$>OrA=~=e)Zc9y|w^%p{ZUK0wbuhmW4H)e{)B{SXnP%m&7d{g?YH zEu-WpJEL6MM;YgkrW-6Aoy_U=mCdCGNj@JXd$4;JpvGZrGP`2e4kCf)^@KX-{glBLTz2-Nqjs3Dq zWA6e~py&v>qzcDtsi+!JPl|fYa~ko=B)31ImoCW2F=1Ke1J`$JBYQ-MR1I9<5FZX@PDH82$?s&&JrW8RQ-={l5R0LH?N;@q*nHpJ*T%@#|4# zV$dOD`L$^F0>dpnCEk(!8w}w)2tr(w)FqQs2_UJ7)ruyGYa|;-d?WN>R?2mh7hf)I zT9=V@;z~tO{CbLrb1e^-{4V14wsfk}`QTucRcgUqK(o4k?nQiJMngz&!R79J%+#(0 z7+RqOo67g9ypa@L6j5~iCa*(T@r(MD9E1RZ^PdaoSvDyYLPOX+FFm}`+8x!t=I=Bk z%1jW6L00O@DFs}Gdn%uPbFiDT3dMWTPX$jiSzKBl$k-LC8MyxI$a-zbUVyFpSmNtDwC(mqu4%0wSIybmsuNuEcv$lWr}+T#ihuLbPFaR+O7@vT_B< z^pngt!Jl-5ZJHa*n-?8$Nn9t*6V(fi+}VXlh%aVm=OQX2*x@?w6G3@NmEv(n zFhM=~qNw@W)=G;REv2fBZz;!q>jtAbUt8Szu9jtC*59yu!(2COCRx@%LofVrsIrz}w}c+w*sy<$@hZd%zLvSHjtW^4u_Ekte*gtacdWpkQTJD%%JA`AEfT$-;0 zB+{|D|4306PH|K9t=W1{>(PU8kDQqVA`+_MVxvLBK~kGyUNq_|V69>lWTh;|>FTSa z&h-v)Wlt-lKMM74$CX>5p<@@VP+q-!iEw1#W$Vn6$9fbiFG_~QtqV_c={SD!QflcX%S|r)W_$@+Lu0g@U0xj)6d(8>>v-*XGYQ=^p_f@1% z=!`_!;|K}(>@(11W#AcqPKea>1v*!BarE<@t(D)3i4NY07>`5S58{E70ibmNX*-L^ zMYeez8SR^v-Ul^yGkr6(U&Y;Efs8jfTg}Z~Gw%Vy=ny2tSk^bjQMF~B)j$^)kt%d+y@gU9~J&rOq2w4=D~=zFVe5vY!QaI-vp=h*iA2h*y6LS z<>!(tuf^^J4eAhb7X2m1hsXeA3j4!~_zhT#yp! z`3%1&?sw$4<^bd>?KY}*H`gHIzbJ5Ghw<|BiilVEVL(AX(Y6G6kp$VuwBRQ87@{>0 zOPoQ{2n6wP?Gzshdt4_rf&g(zQbTteURnr#D5GZ>j7DyI%Z-0i4o#jUEKD z&==(<^G!@huv@r=#6xzu<~{%#jcU@}=D0P{v)|n%pz~GujgyM^-4ABY2f}GdJ<4^$ z@6Grd!Dxv-`vdv9sQhWWP!`1Y4asYEZ*F6 zZN*5nhkz{zup-g9-FhY34&2)i@^p4N7aRXkw?bgi8u#cx?-J>)@KyaVt3ZbML}7~# z7D@O;8M;|#5^$$bT{uU9+MGI%7rjUdib}1Ro3Gs~%leWE{#j9A{`?HF_V!-Ak4# zNs30fo82W-mt;5FUh`A+xn+_3u^@fh5i;@@xs!9>^fHpjC;{Avr~ZL5FL)LB&9_NQ zph=P+Dbm6ZlFl9Hns4SBymW77ogYP!qp&rFl!v4XsLW)svzC||{QC1=1O|GQ#2+^yl@wdt}_?q55;Hg;Sphce^1=mb%op zyvo^hT7Mlm(L*M^g-xP;?xkpxz#JeG^Amj4BZ$_^UAGd* z-SP#0&OMW4@Rx7d;DsMmCeN7-9SLwu%3*oiB z}v728eSm$Ci(+mR0Z;~eRof4pCg_cn1 z7Qut?s`6SZamu~`Rllvztzp)!py{bE_Ffiv8hKe<*80<{3?-n?CrEQ7a+$kv%S)CJ zh)^3fGFapu;L$g?v>2WfUEGZp7*T?rUe4W7Zs-@VK`ytEipo}Wx2(nl9Gy$z4h{F=QB)zKJ3CCLtg7@#tF=8?@+hg4)P4YRxlGk>91%o`{B;XMcDPC;z6Fy6+VwNal<;Yf;-yn$frL=g*X z*%y+M-4kanU5w~QdO=uGh>AQ3`Vx;m((q5GtptXY1Zcm0sY1qd8t?_Pom7%j>@f|h zf8rkwJWQP#vvj;>?B8WevwGYfp5h@z2g3O=u{Y-0m71lNzRW~)@Yz^N>vwLm59%t( zviw5;hryuGC7zYnQojiAWnrU~QFTz*2<|a|=L&H??1&h`?r%)k#GAsp4%DSEzupm?5-YM&NzQ{9Rb!yO983tMShnguyi82p!aw(N1qnH@fB0&^w z#L@S!GY{@Z;<{za8$^Ind8~G`qB2T6>_Cucp$3_=g)8VuXnh$1IWbNAk++Q3c`M6W z$@q1{_0`na{2m$Zgi39OKpla`C&;2HFgEf?ZkHrQ695h?aQR`|yC-!ZQr8=K9Hj~*CkoAq4d<_SGd$q-)y1v&Bbk+k3$*g^qgy8s z%iY(|9-Ww8El1Mlmap%2nDj_I+kHv2XzlooR#zUYR2r97*IU;Fx!_uMhP%n9tA70c zpjOslY)2)x-~O8k@t@e1xV4}1Q>~V1nPipxe5!P3r2D#R#p|VqRpF=Ol?BNf*5U##6t>tZS0ZYSV&_W_uiqM{EzKRBWu|K)ET6S-wxlQtk6v=G zC*vg)vwu42K3#kBLu8W$4RDMI1e3YY@w+5JS~%Zjff#hF5Ts zy&*_@1FQ<3Jee(77Rh&DDQpj8k00^r>QN`3!$S&~mWi?rQqR7wc7yYk;=qPb-U}hM zI_|e^D(42YqDgEg5;wsow5P1EI6w9LM`o7J43*L;+L}+|kr?Mt$toAhp{MA+ zraPBZqip;nRQg8hqflvV%2Sspp%sx+3I4rntd_>R1MlvaXYx8HACri9MF#~M)HwR6 z(sh+|k}Y~e34CCuwQNoQ#J7)aYPb3%zvM#)@VxgdeY)gZL2HN{Q>No;m)?|g+JJBU zQ*4MnD`Z)$wQus`Yg%yd)2kJ`=UluGu{lu4_?H*pXF-We9c!UL#hGIS1*m<$;NPa?pJPp#o(=h_yo z^vzLEQtoH=m<7XLB@8XlQ9y;-?H(S(PHGemVID;P&=iDp1j}EoJHc?CK!yfnoKzMa zaLpLrsEoRhPYM=LFmqrFf(ilNI<`H!w;efaUL6X@X81T-Hw@PG_@87WiUa+p8k5!Q{TKV{ ztzqX{DVD`a@)3T*35MRn!G^>4bz1U}7eBDqr@WYO=0Y|SM8}A$yZhJ#We0Xi&P!*D zm}IR=`8%VC>jCA8)W7r#1^Gybc@7^#*TI&3$U}8Wa+zf0jOCx*?jL`F0CE7eq@(KtZE!U2YnTg;7f=2>kr;(yZZ_PNZ|A`N-?2AAWtuaze*4t{@f+0Pxsq$8szSGAa} z9^_Hl55+&&-ucx;iPD4^HrP(?H4e!bqT%^^j^XAz`*zI1D4vp+30vu3p2tM>$gEYq zQ=i|sEOMx_z|b2L9A~0m+j_gAJR@(uSopkoGMGom{2#UxNFxkR`EUCja-6dhl`{CfN z2Jq)jSczx1^)#C}!nw&qAXDhc1;sw=P+Y0=0Wvd#PioyMVsNUWI-?2^t2%)2cE|ZC z(#WX4c{{>4XC3SEa)GqGAtU0FC*|! znErZ}0gIPRsY}5~?B3`bUfEcYmrxGH)foH|YKO(eyk#c%?xcu}&PrHhlTVR>iONzo z=h>}!-Xoygz#je?#nfrH61H`aI0Na{@3D{jvjZitq>_qE%_!H89|TYeH)7XY+FAep z^5u_`mHbH#8j!+H2YI_ zAD%I@Zz>Q}W!qkah%!Ss3JMBp7u9s?5#&^*Ltoy8h`iHo0_JmV_#cyf5RiSRt@&V( zWi9QQ$?hL*S`k&tBM}*_!rr~^-Dw8mDz$w**?mGJV?^@J+aAOzO^)U*e-tr%8?ypP z7o$}*iDDWsmiDV-lz@@JXO530FK8ke_f>Xr3b*BaW_$4q@Q{eCl5|*GplIHlvicjHx0k9#=%*3_##b2MO&XwGgr4`>-O=#dP|S>vrPv~_>~ zz@lunLS8>Z@0%mQ`!E(vxMknaI+4nd%zFYv80(^!^;k_u^#>`8w069{8-a=H7}E?k zw$8ax+J;H56qLrXxUl{Lqbpm<=B`@PcA-(D z1ovrcE;m91c`9kY)-^8RtWU!X>*?HN_;1?O)Sg5Wn~V7zO-2zYi`w0AAs~XpQx>1u zXh~i1An(b{WwzCZoOwah|G2q2$y}4|%G+D_{ihaI=MC=kec!xkm z$;dK=wjEJwJhI58Ip|+cyh5Jn@KlrPY7fwyu><|5a=tFS^i^;p>O*=0krz!Z$^^C>F>QWa$wyWClsY<2h=FOXn4p1_g zgzpv-(ucNKZ=|#BFIE{rUd8lJGc;T+(d|S6@}UZg4t|Wf;SY)B0qnWy}(_gIZ5 zmH%XV6zcaBbZlz(4kuZom}5yJ_NWlEp~sTPb5YH~{O7mZ*-u}*Ai-Tst~m4Qb!MY& zG+m(}982cLp^uHs{*J&fl&A%c3x@T~bL2R0nR^|6O)&&Uq4=bK7AWu|lKEdE$+My9 z_DqbBIhjKSiTofry|JYjhI$7^8Yz+5{4$1hO&noPn0rSIL6;3y;;_i$exZFN@K=$^ z-XS(g-sllXn$tGC7sOe%9LG6>HYFtd20L7s`)g+6O6XLahcs2fa?~~K5#@^SnrBrZ z!UC-3Pso|1_DcUo%7jqZ`+RGnr))(qxD|**%Sx_1rwhg)vv%-7>n@`M62q8duHq-< z|Eb?pEsMje>~6pQmsTj@+1I7tl#q65I4iJtKifOq%Csy0;-nWG14YHvZ(-sUm`2m_ z`E^!?BO^wRj?7DLN2pg>%I^H&YNe5)dZ`I`5C$Gp60@Lg@fs;xDTGQM(>!s|v1f9&=&t7qRZ&~Prp zV3NuMGOR25QNEvu5SiLyXa?|U8PUANRlAhnl2S3G%Hzm_C8b}RA$tnxeq>1>iH9hg@}bM#pD#B-0#_aJu>q0 z@;}F48a><#+1p5ay69XVf4cZGWI0K!x4#xV%sTEMWj#hBxKUQ zB2c@k3!dJ?9~uW__wm>a9dX_3^S1GFk)d3D_VUq~ct^;h0OTcn(I6 z{~PyX;L8JS5w1)gBHUs-tTN)i0=xWy*#aKQQi?}0C#hD6kzN3e*BK~kArZ!YDIa(y zu@Q7<-#}um+;yfJ(nGM{g+ipb0k@`a!Q9_f46HbU0p^S5RE?VG;mvbS<+FHqgQF@J zWyuP2ZuIqbukI>)7lI0n{TM+yS2vB8&}2&S{(uX|-DG&71^I423@EFNid6;MoI6^2 zGK6#E@JL;jnqYgsQ?YdPa+pD%`X~0j$vSM2g;?W(M?)2R+e)0|Fhcx`Js4X_{6|ZB zC?GqUI}gAy?Z5mejKqJPq2d0XbWDgYapP}b*BrJ4l*!8{qnOeeGM7Ra%0mWtj5FaF zc^bx-okBaIj+iOO>f6KJX^ij;j!@0ASG6OSa{k^6lMBj>A*45a@cjqkBjTPkCnx3_ z8Nz)nAtB*Rq6*DYWu6x#^8BIB)Q!h?n=)Hd`=4aM)~Ykpn>++j*OY{(=10@vv(p(8w~D?`h(bPvL;lj zg)OcBOi4sgmaQcNEh4_f$dHwX9$W+E2ZlSj4z?+M9Cp>f>)9jU>n^bIQ3REUj8ZbL zC!uMa5*t%cPzD}yyCX}P%j{>iU(LLa(#jQAPy85P)(^Cg%QZf2tGfsZW8s{qVWOvH zKyQo4*>A%VQ><7S4p>N@aq{qg9@v2lCvhXSP>nr7eB<(A`THp2Z_-NrswnI~KWgCe zqSCqF-ND$^dtwp%!=tkP4+ljaFbRqIvh5mb!>^92HHTdw!VB7(UMYGJ!^fB@M?UP= z#frD%`;)Fa&;B1jIY3kzC72ILSK~+#i2rVXSfWu#{om97FZ2I@Ec-wD@|&!t*v+}E RF$({*we&QTR%}1^e*oE@xsCt; literal 838585 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

Xyb>-`k_W~yR6`%!IqFPh-A;|JbOi?)X+jj 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%0AW|s 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
") }, + { assert path(process.out.log.get(0).get(1)).getText().contains("total bases: 13683") }, { assert snapshot( + process.out.json, process.out.reads, process.out.reads_fail, - process.out.json, - process.out.versions).match() }, - { assert process.out.reads_merged == [] }, - { assert path(process.out.log.get(0).get(1)).getText().contains("reads passed filter: 99") }, - { assert path(process.out.html.get(0).get(1)).getText().contains("single end (151 cycles)") }, + process.out.reads_merged, + process.out.versions).match() } ) } } - test("test_fastp_paired_end_trim_fail") { + test("test_fastp_single_end_qc_only") { - config './nextflow.save_failed.config' when { process { """ input[0] = Channel.of([ - [ id:'test', single_end:false ], // meta map - [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true)] + [ id:'test', single_end:true ], + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) ] ]) input[1] = [] - input[2] = false - input[3] = true + input[2] = true + input[3] = false input[4] = false """ } @@ -253,19 +265,22 @@ nextflow_process { then { assertAll( { assert process.success }, + { assert path(process.out.html.get(0).get(1)).getText().contains("single end (151 cycles)") }, + { assert path(process.out.log.get(0).get(1)).getText().contains("reads passed filter: 99") }, { assert snapshot( + process.out.json, + process.out.reads, process.out.reads, process.out.reads_fail, - process.out.json, - process.out.versions).match() }, - { assert process.out.reads_merged == [] }, - { assert path(process.out.log.get(0).get(1)).getText().contains("reads passed filter: 162") }, - { assert path(process.out.html.get(0).get(1)).getText().contains("The input has little adapter percentage (~0.000000%), probably it's trimmed before.") } + process.out.reads_fail, + process.out.reads_merged, + process.out.reads_merged, + process.out.versions).match() } ) } } - test("test_fastp_paired_end_merged") { + test("test_fastp_paired_end_qc_only") { when { process { @@ -276,9 +291,9 @@ nextflow_process { file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) ] ]) input[1] = [] - input[2] = false + input[2] = true input[3] = false - input[4] = true + input[4] = false """ } } @@ -286,34 +301,37 @@ nextflow_process { then { assertAll( { assert process.success }, + { assert path(process.out.html.get(0).get(1)).getText().contains("The input has little adapter percentage (~0.000000%), probably it's trimmed before.") }, + { assert path(process.out.log.get(0).get(1)).getText().contains("Q30 bases: 12281(88.3716%)") }, { assert snapshot( + process.out.json, process.out.reads, + process.out.reads, + process.out.reads_fail, + process.out.reads_fail, process.out.reads_merged, - process.out.json, - process.out.versions).match() }, - { assert process.out.reads_fail == [] }, - { assert path(process.out.log.get(0).get(1)).getText().contains("total reads: 75") }, - { assert path(process.out.html.get(0).get(1)).getText().contains("The input has little adapter percentage (~0.000000%), probably it's trimmed before.") } + process.out.reads_merged, + process.out.versions).match() } ) } } - test("test_fastp_paired_end_merged-stub") { + test("test_fastp_single_end - stub") { - options '-stub' + options "-stub" when { + process { """ input[0] = Channel.of([ - [ id:'test', single_end:false ], // meta map - [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) ] + [ id:'test', single_end:true ], + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) ] ]) input[1] = [] input[2] = false input[3] = false - input[4] = true + input[4] = false """ } } @@ -321,25 +339,33 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(process.out).match() }, + { assert snapshot(process.out).match() } ) } } - test("test_fastp_paired_end_merged_adapterlist") { + test("test_fastp_paired_end - stub") { + + options "-stub" when { + process { """ + adapter_fasta = [] + save_trimmed_pass = true + save_trimmed_fail = false + save_merged = false + input[0] = Channel.of([ [ id:'test', single_end:false ], // meta map [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) ] ]) - input[1] = Channel.of([ file(params.modules_testdata_base_path + 'delete_me/fastp/adapters.fasta', checkIfExists: true) ]) + input[1] = [] input[2] = false input[3] = false - input[4] = true + input[4] = false """ } } @@ -347,29 +373,25 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot( - process.out.reads, - process.out.reads_merged, - process.out.json, - process.out.versions).match() }, - { assert process.out.reads_fail == [] }, - { assert path(process.out.log.get(0).get(1)).getText().contains("total bases: 13683") }, - { assert path(process.out.html.get(0).get(1)).getText().contains("
") } + { assert snapshot(process.out).match() } ) } } - test("test_fastp_single_end_qc_only") { + test("fastp - stub test_fastp_interleaved") { + + options "-stub" + config './nextflow.interleaved.config' when { process { """ input[0] = Channel.of([ - [ id:'test', single_end:true ], - [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) ] + [ id:'test', single_end:true ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_interleaved.fastq.gz', checkIfExists: true) ] ]) input[1] = [] - input[2] = true + input[2] = false input[3] = false input[4] = false """ @@ -379,55 +401,101 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot( - process.out.reads, - process.out.reads_fail, - process.out.reads_merged, - process.out.json, - process.out.versions).match() }, - { assert process.out.reads == [] }, - { assert process.out.reads_fail == [] }, - { assert process.out.reads_merged == [] }, - { assert path(process.out.log.get(0).get(1)).getText().contains("reads passed filter: 99") }, - { assert path(process.out.html.get(0).get(1)).getText().contains("single end (151 cycles)") }, + { assert snapshot(process.out).match() } ) } } - test("test_fastp_single_end_qc_only-stub") { + test("test_fastp_single_end_trim_fail - stub") { - options '-stub' + options "-stub" when { + process { """ input[0] = Channel.of([ - [ id:'test', single_end:true ], + [ id:'test', single_end:true ], // meta map [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) ] ]) input[1] = [] - input[2] = true - input[3] = false + input[2] = false + input[3] = true input[4] = false """ } } then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("test_fastp_paired_end_trim_fail - stub") { + options "-stub" + + config './nextflow.save_failed.config' + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true)] + ]) + input[1] = [] + input[2] = false + input[3] = true + input[4] = false + """ + } + } + + then { assertAll( { assert process.success }, - { assert snapshot(process.out).match() }, + { assert snapshot(process.out).match() } ) } } - test("test_fastp_paired_end_qc_only") { + test("test_fastp_paired_end_merged - stub") { + + options "-stub" when { - params { - outdir = "$outputDir" + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) ] + ]) + input[1] = [] + input[2] = false + input[3] = false + input[4] = true + """ } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("test_fastp_paired_end_merged_adapterlist - stub") { + + options "-stub" + + when { process { """ input[0] = Channel.of([ @@ -435,6 +503,33 @@ nextflow_process { [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) ] ]) + input[1] = Channel.of([ file(params.modules_testdata_base_path + 'delete_me/fastp/adapters.fasta', checkIfExists: true) ]) + input[2] = false + input[3] = false + input[4] = true + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("test_fastp_single_end_qc_only - stub") { + + options "-stub" + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:true ], + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) ] + ]) input[1] = [] input[2] = true input[3] = false @@ -446,24 +541,14 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot( - process.out.reads, - process.out.reads_merged, - process.out.reads_fail, - process.out.json, - process.out.versions).match() }, - { assert process.out.reads == [] }, - { assert process.out.reads_fail == [] }, - { assert process.out.reads_merged == [] }, - { assert path(process.out.log.get(0).get(1)).getText().contains("Q30 bases: 12281(88.3716%)") }, - { assert path(process.out.html.get(0).get(1)).getText().contains("The input has little adapter percentage (~0.000000%), probably it's trimmed before.") }, + { assert snapshot(process.out).match() } ) } } - test("test_fastp_paired_end_qc_only-stub") { + test("test_fastp_paired_end_qc_only - stub") { - options '-stub' + options "-stub" when { process { @@ -484,7 +569,7 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(process.out).match() }, + { assert snapshot(process.out).match() } ) } } diff --git a/modules/nf-core/fastp/tests/main.nf.test.snap b/modules/nf-core/fastp/tests/main.nf.test.snap index b609b9a..54be7e4 100644 --- a/modules/nf-core/fastp/tests/main.nf.test.snap +++ b/modules/nf-core/fastp/tests/main.nf.test.snap @@ -1,24 +1,15 @@ { - "test_fastp_paired_end_qc_only-stub": { + "test_fastp_single_end_qc_only - stub": { "content": [ { "0": [ - [ - { - "id": "test", - "single_end": false - }, - [ - "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", - "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" - ] - ] + ], "1": [ [ { "id": "test", - "single_end": false + "single_end": true }, "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" ] @@ -27,7 +18,7 @@ [ { "id": "test", - "single_end": false + "single_end": true }, "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" ] @@ -36,7 +27,7 @@ [ { "id": "test", - "single_end": false + "single_end": true }, "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" ] @@ -54,7 +45,7 @@ [ { "id": "test", - "single_end": false + "single_end": true }, "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" ] @@ -63,7 +54,7 @@ [ { "id": "test", - "single_end": false + "single_end": true }, "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" ] @@ -72,22 +63,13 @@ [ { "id": "test", - "single_end": false + "single_end": true }, "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "reads": [ - [ - { - "id": "test", - "single_end": false - }, - [ - "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", - "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" - ] - ] + ], "reads_fail": [ @@ -104,10 +86,19 @@ "nf-test": "0.8.4", "nextflow": "24.04.2" }, - "timestamp": "2024-06-08T05:42:26.603745039" + "timestamp": "2024-07-05T14:31:10.841098" }, "test_fastp_paired_end": { "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,1e0f8e27e71728e2b63fc64086be95cd" + ] + ], [ [ { @@ -119,6 +110,48 @@ "test_2.fastp.fastq.gz:md5,25cbdca08e2083dbd4f0502de6b62f39" ] ] + ], + [ + + ], + [ + + ], + [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-05T13:43:28.665779" + }, + "test_fastp_paired_end_merged_adapterlist": { + "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,5914ca3f21ce162123a824e33e8564f6" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,54b726a55e992a869fd3fa778afe1672", + "test_2.fastp.fastq.gz:md5,29d3b33b869f7b63417b8ff07bb128ba" + ] + ] + ], + [ + ], [ [ @@ -126,7 +159,95 @@ "id": "test", "single_end": false }, - "test.fastp.json:md5,1e0f8e27e71728e2b63fc64086be95cd" + "test.merged.fastq.gz:md5,c873bb1ab3fa859dcc47306465e749d5" + ] + ], + [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-05T13:44:18.210375" + }, + "test_fastp_single_end_qc_only": { + "content": [ + [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.json:md5,5cc5f01e449309e0e689ed6f51a2294a" + ] + ], + [ + + ], + [ + + ], + [ + + ], + [ + + ], + [ + + ], + [ + + ], + [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-05T13:44:27.380974" + }, + "test_fastp_paired_end_trim_fail": { + "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,6ff32a64c5188b9a9192be1398c262c7", + "test_2.fastp.fastq.gz:md5,db0cb7c9977e94ac2b4b446ebd017a8a" + ] + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.paired.fail.fastq.gz:md5,409b687c734cedd7a1fec14d316e1366", + "test_1.fail.fastq.gz:md5,4f273cf3159c13f79e8ffae12f5661f6", + "test_2.fail.fastq.gz:md5,f97b9edefb5649aab661fbc9e71fc995" + ] + ] + ], + [ + + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,4c3268ddb50ea5b33125984776aa3519" ] ], [ @@ -137,9 +258,9 @@ "nf-test": "0.8.4", "nextflow": "24.04.2" }, - "timestamp": "2024-06-10T13:02:09.747686552" + "timestamp": "2024-07-05T13:43:58.749589" }, - "fastp test_fastp_interleaved - stub": { + "fastp - stub test_fastp_interleaved": { "content": [ { "0": [ @@ -238,97 +359,248 @@ "nf-test": "0.8.4", "nextflow": "24.04.2" }, - "timestamp": "2024-06-10T13:03:09.374379128" + "timestamp": "2024-07-05T13:50:00.270029" }, - "test_fastp_paired_end_merged_adapterlist": { + "test_fastp_single_end - stub": { "content": [ - [ - [ - { - "id": "test", - "single_end": false - }, + { + "0": [ [ - "test_1.fastp.fastq.gz:md5,54b726a55e992a869fd3fa778afe1672", - "test_2.fastp.fastq.gz:md5,29d3b33b869f7b63417b8ff07bb128ba" + { + "id": "test", + "single_end": true + }, + "test.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" ] + ], + "1": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "4": [ + + ], + "5": [ + + ], + "6": [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + ], + "html": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "json": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "log": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "reads": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "reads_fail": [ + + ], + "reads_merged": [ + + ], + "versions": [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" ] - ], - [ - [ - { - "id": "test", - "single_end": false - }, - "test.merged.fastq.gz:md5,c873bb1ab3fa859dcc47306465e749d5" - ] - ], - [ - [ - { - "id": "test", - "single_end": false - }, - "test.fastp.json:md5,5914ca3f21ce162123a824e33e8564f6" - ] - ], - [ - "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" - ] + } ], "meta": { "nf-test": "0.8.4", "nextflow": "24.04.2" }, - "timestamp": "2024-06-10T13:04:47.637461379" + "timestamp": "2024-07-05T13:49:42.502789" }, - "test_fastp_single_end_qc_only": { + "test_fastp_paired_end_merged_adapterlist - stub": { "content": [ - [ - - ], - [ - - ], - [ - - ], - [ - [ - { - "id": "test", - "single_end": true - }, - "test.fastp.json:md5,5cc5f01e449309e0e689ed6f51a2294a" + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "4": [ + + ], + "5": [ + [ + { + "id": "test", + "single_end": false + }, + "test.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "6": [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + ], + "html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "json": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "log": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "reads": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "reads_fail": [ + + ], + "reads_merged": [ + [ + { + "id": "test", + "single_end": false + }, + "test.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "versions": [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" ] - ], - [ - "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" - ] + } ], "meta": { "nf-test": "0.8.4", "nextflow": "24.04.2" }, - "timestamp": "2024-06-10T20:11:50.885505279" + "timestamp": "2024-07-05T13:54:53.458252" }, - "test_fastp_single_end-stub": { + "test_fastp_paired_end_merged - stub": { "content": [ { "0": [ [ { "id": "test", - "single_end": true + "single_end": false }, - "test.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + [ + "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] ] ], "1": [ [ { "id": "test", - "single_end": true + "single_end": false }, "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" ] @@ -337,7 +609,7 @@ [ { "id": "test", - "single_end": true + "single_end": false }, "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" ] @@ -346,7 +618,7 @@ [ { "id": "test", - "single_end": true + "single_end": false }, "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" ] @@ -355,7 +627,13 @@ ], "5": [ - + [ + { + "id": "test", + "single_end": false + }, + "test.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] ], "6": [ "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" @@ -364,7 +642,7 @@ [ { "id": "test", - "single_end": true + "single_end": false }, "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" ] @@ -373,7 +651,7 @@ [ { "id": "test", - "single_end": true + "single_end": false }, "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" ] @@ -382,7 +660,7 @@ [ { "id": "test", - "single_end": true + "single_end": false }, "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" ] @@ -391,16 +669,25 @@ [ { "id": "test", - "single_end": true + "single_end": false }, - "test.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + [ + "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] ] ], "reads_fail": [ ], "reads_merged": [ - + [ + { + "id": "test", + "single_end": false + }, + "test.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] ], "versions": [ "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" @@ -411,9 +698,9 @@ "nf-test": "0.8.4", "nextflow": "24.04.2" }, - "timestamp": "2024-06-10T13:01:55.987280865" + "timestamp": "2024-07-05T13:50:27.689379" }, - "test_fastp_paired_end_trim_fail": { + "test_fastp_paired_end_merged": { "content": [ [ [ @@ -421,10 +708,7 @@ "id": "test", "single_end": false }, - [ - "test_1.fastp.fastq.gz:md5,6ff32a64c5188b9a9192be1398c262c7", - "test_2.fastp.fastq.gz:md5,db0cb7c9977e94ac2b4b446ebd017a8a" - ] + "test.fastp.json:md5,b712fd68ed0322f4bec49ff2a5237fcc" ] ], [ @@ -434,11 +718,13 @@ "single_end": false }, [ - "test.paired.fail.fastq.gz:md5,409b687c734cedd7a1fec14d316e1366", - "test_1.fail.fastq.gz:md5,4f273cf3159c13f79e8ffae12f5661f6", - "test_2.fail.fastq.gz:md5,f97b9edefb5649aab661fbc9e71fc995" + "test_1.fastp.fastq.gz:md5,54b726a55e992a869fd3fa778afe1672", + "test_2.fastp.fastq.gz:md5,29d3b33b869f7b63417b8ff07bb128ba" ] ] + ], + [ + ], [ [ @@ -446,7 +732,7 @@ "id": "test", "single_end": false }, - "test.fastp.json:md5,4c3268ddb50ea5b33125984776aa3519" + "test.merged.fastq.gz:md5,c873bb1ab3fa859dcc47306465e749d5" ] ], [ @@ -457,7 +743,7 @@ "nf-test": "0.8.4", "nextflow": "24.04.2" }, - "timestamp": "2024-06-10T13:03:46.458766801" + "timestamp": "2024-07-05T13:44:08.68476" }, "test_fastp_paired_end - stub": { "content": [ @@ -564,52 +850,19 @@ "nf-test": "0.8.4", "nextflow": "24.04.2" }, - "timestamp": "2024-06-08T05:36:36.446112695" + "timestamp": "2024-07-05T13:49:51.679221" }, - "test_fastp_paired_end_merged": { + "test_fastp_single_end": { "content": [ [ [ { "id": "test", - "single_end": false - }, - [ - "test_1.fastp.fastq.gz:md5,54b726a55e992a869fd3fa778afe1672", - "test_2.fastp.fastq.gz:md5,29d3b33b869f7b63417b8ff07bb128ba" - ] - ] - ], - [ - [ - { - "id": "test", - "single_end": false - }, - "test.merged.fastq.gz:md5,c873bb1ab3fa859dcc47306465e749d5" - ] - ], - [ - [ - { - "id": "test", - "single_end": false + "single_end": true }, - "test.fastp.json:md5,b712fd68ed0322f4bec49ff2a5237fcc" + "test.fastp.json:md5,c852d7a6dba5819e4ac8d9673bedcacc" ] ], - [ - "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" - }, - "timestamp": "2024-06-10T13:04:09.964580373" - }, - "test_fastp_single_end": { - "content": [ [ [ { @@ -620,13 +873,10 @@ ] ], [ - [ - { - "id": "test", - "single_end": true - }, - "test.fastp.json:md5,c852d7a6dba5819e4ac8d9673bedcacc" - ] + + ], + [ + ], [ "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" @@ -636,28 +886,25 @@ "nf-test": "0.8.4", "nextflow": "24.04.2" }, - "timestamp": "2024-06-10T13:01:34.044931225" + "timestamp": "2024-07-05T13:43:18.834322" }, - "test_fastp_paired_end_merged-stub": { + "test_fastp_single_end_trim_fail - stub": { "content": [ { "0": [ [ { "id": "test", - "single_end": false + "single_end": true }, - [ - "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", - "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" - ] + "test.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" ] ], "1": [ [ { "id": "test", - "single_end": false + "single_end": true }, "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" ] @@ -666,7 +913,7 @@ [ { "id": "test", - "single_end": false + "single_end": true }, "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" ] @@ -675,22 +922,22 @@ [ { "id": "test", - "single_end": false + "single_end": true }, "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "4": [ - - ], - "5": [ [ { "id": "test", - "single_end": false + "single_end": true }, - "test.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + "test.fail.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" ] + ], + "5": [ + ], "6": [ "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" @@ -699,7 +946,7 @@ [ { "id": "test", - "single_end": false + "single_end": true }, "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" ] @@ -708,7 +955,7 @@ [ { "id": "test", - "single_end": false + "single_end": true }, "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" ] @@ -717,7 +964,7 @@ [ { "id": "test", - "single_end": false + "single_end": true }, "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" ] @@ -726,25 +973,22 @@ [ { "id": "test", - "single_end": false + "single_end": true }, - [ - "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", - "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" - ] + "test.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" ] ], "reads_fail": [ - - ], - "reads_merged": [ [ { "id": "test", - "single_end": false + "single_end": true }, - "test.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + "test.fail.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" ] + ], + "reads_merged": [ + ], "versions": [ "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" @@ -755,16 +999,16 @@ "nf-test": "0.8.4", "nextflow": "24.04.2" }, - "timestamp": "2024-06-08T05:39:42.022707162" + "timestamp": "2024-07-05T14:05:36.898142" }, - "test_fastp_single_end_qc_only-stub": { + "test_fastp_paired_end_trim_fail - stub": { "content": [ { "0": [ [ { "id": "test", - "single_end": true + "single_end": false }, [ "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", @@ -776,7 +1020,7 @@ [ { "id": "test", - "single_end": true + "single_end": false }, "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" ] @@ -785,7 +1029,7 @@ [ { "id": "test", - "single_end": true + "single_end": false }, "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" ] @@ -794,13 +1038,23 @@ [ { "id": "test", - "single_end": true + "single_end": false }, "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "4": [ - + [ + { + "id": "test", + "single_end": false + }, + [ + "test.paired.fail.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_1.fail.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.fail.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] ], "5": [ @@ -812,7 +1066,7 @@ [ { "id": "test", - "single_end": true + "single_end": false }, "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" ] @@ -821,7 +1075,7 @@ [ { "id": "test", - "single_end": true + "single_end": false }, "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" ] @@ -830,7 +1084,7 @@ [ { "id": "test", - "single_end": true + "single_end": false }, "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" ] @@ -839,7 +1093,7 @@ [ { "id": "test", - "single_end": true + "single_end": false }, [ "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", @@ -848,7 +1102,17 @@ ] ], "reads_fail": [ - + [ + { + "id": "test", + "single_end": false + }, + [ + "test.paired.fail.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_1.fail.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.fail.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] ], "reads_merged": [ @@ -862,7 +1126,7 @@ "nf-test": "0.8.4", "nextflow": "24.04.2" }, - "timestamp": "2024-06-10T13:05:31.722431847" + "timestamp": "2024-07-05T14:05:49.212847" }, "fastp test_fastp_interleaved": { "content": [ @@ -892,7 +1156,7 @@ "nf-test": "0.8.4", "nextflow": "24.04.2" }, - "timestamp": "2024-06-07T22:35:04.608948751" + "timestamp": "2024-07-05T13:43:38.910832" }, "test_fastp_single_end_trim_fail": { "content": [ @@ -902,7 +1166,7 @@ "id": "test", "single_end": true }, - "test.fastp.fastq.gz:md5,67b2bbae47f073e05a97a9c2edce23c7" + "test.fastp.json:md5,9a7ee180f000e8d00c7fb67f06293eb5" ] ], [ @@ -911,7 +1175,7 @@ "id": "test", "single_end": true }, - "test.fail.fastq.gz:md5,3e4aaadb66a5b8fc9b881bf39c227abd" + "test.fastp.fastq.gz:md5,67b2bbae47f073e05a97a9c2edce23c7" ] ], [ @@ -920,8 +1184,11 @@ "id": "test", "single_end": true }, - "test.fastp.json:md5,9a7ee180f000e8d00c7fb67f06293eb5" + "test.fail.fastq.gz:md5,3e4aaadb66a5b8fc9b881bf39c227abd" ] + ], + [ + ], [ "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" @@ -931,10 +1198,19 @@ "nf-test": "0.8.4", "nextflow": "24.04.2" }, - "timestamp": "2024-06-10T13:03:23.130471376" + "timestamp": "2024-07-05T13:43:48.22378" }, "test_fastp_paired_end_qc_only": { "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,623064a45912dac6f2b64e3f2e9901df" + ] + ], [ ], @@ -945,13 +1221,13 @@ ], [ - [ - { - "id": "test", - "single_end": false - }, - "test.fastp.json:md5,623064a45912dac6f2b64e3f2e9901df" - ] + + ], + [ + + ], + [ + ], [ "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" @@ -961,6 +1237,95 @@ "nf-test": "0.8.4", "nextflow": "24.04.2" }, - "timestamp": "2024-06-10T20:12:14.00927619" + "timestamp": "2024-07-05T13:44:36.334938" + }, + "test_fastp_paired_end_qc_only - stub": { + "content": [ + { + "0": [ + + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "4": [ + + ], + "5": [ + + ], + "6": [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + ], + "html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "json": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "log": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "reads": [ + + ], + "reads_fail": [ + + ], + "reads_merged": [ + + ], + "versions": [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-05T14:31:27.096468" } } \ No newline at end of file diff --git a/modules/nf-core/fastqc/main.nf b/modules/nf-core/fastqc/main.nf index 1fd7ac4..d79f1c8 100644 --- a/modules/nf-core/fastqc/main.nf +++ b/modules/nf-core/fastqc/main.nf @@ -38,6 +38,7 @@ process FASTQC { fastqc \\ $args \\ --threads $task.cpus \\ + --memory $fastqc_memory \\ $renamed_files cat <<-END_VERSIONS > versions.yml diff --git a/modules/nf-core/fastqc/tests/main.nf.test b/modules/nf-core/fastqc/tests/main.nf.test index 70edae4..e9d79a0 100644 --- a/modules/nf-core/fastqc/tests/main.nf.test +++ b/modules/nf-core/fastqc/tests/main.nf.test @@ -23,17 +23,14 @@ nextflow_process { then { assertAll ( - { assert process.success }, - - // NOTE The report contains the date inside it, which means that the md5sum is stable per day, but not longer than that. So you can't md5sum it. - // looks like this:
Mon 2 Oct 2023
test.gz
- // https://github.com/nf-core/modules/pull/3903#issuecomment-1743620039 - - { assert process.out.html[0][1] ==~ ".*/test_fastqc.html" }, - { assert process.out.zip[0][1] ==~ ".*/test_fastqc.zip" }, - { assert path(process.out.html[0][1]).text.contains("File typeConventional base calls") }, - - { assert snapshot(process.out.versions).match("fastqc_versions_single") } + { assert process.success }, + // NOTE The report contains the date inside it, which means that the md5sum is stable per day, but not longer than that. So you can't md5sum it. + // looks like this:
Mon 2 Oct 2023
test.gz
+ // https://github.com/nf-core/modules/pull/3903#issuecomment-1743620039 + { assert process.out.html[0][1] ==~ ".*/test_fastqc.html" }, + { assert process.out.zip[0][1] ==~ ".*/test_fastqc.zip" }, + { assert path(process.out.html[0][1]).text.contains("File typeConventional base calls") }, + { assert snapshot(process.out.versions).match() } ) } } @@ -54,16 +51,14 @@ nextflow_process { then { assertAll ( - { assert process.success }, - - { assert process.out.html[0][1][0] ==~ ".*/test_1_fastqc.html" }, - { assert process.out.html[0][1][1] ==~ ".*/test_2_fastqc.html" }, - { assert process.out.zip[0][1][0] ==~ ".*/test_1_fastqc.zip" }, - { assert process.out.zip[0][1][1] ==~ ".*/test_2_fastqc.zip" }, - { assert path(process.out.html[0][1][0]).text.contains("File typeConventional base calls") }, - { assert path(process.out.html[0][1][1]).text.contains("File typeConventional base calls") }, - - { assert snapshot(process.out.versions).match("fastqc_versions_paired") } + { assert process.success }, + { assert process.out.html[0][1][0] ==~ ".*/test_1_fastqc.html" }, + { assert process.out.html[0][1][1] ==~ ".*/test_2_fastqc.html" }, + { assert process.out.zip[0][1][0] ==~ ".*/test_1_fastqc.zip" }, + { assert process.out.zip[0][1][1] ==~ ".*/test_2_fastqc.zip" }, + { assert path(process.out.html[0][1][0]).text.contains("File typeConventional base calls") }, + { assert path(process.out.html[0][1][1]).text.contains("File typeConventional base calls") }, + { assert snapshot(process.out.versions).match() } ) } } @@ -83,13 +78,11 @@ nextflow_process { then { assertAll ( - { assert process.success }, - - { assert process.out.html[0][1] ==~ ".*/test_fastqc.html" }, - { assert process.out.zip[0][1] ==~ ".*/test_fastqc.zip" }, - { assert path(process.out.html[0][1]).text.contains("File typeConventional base calls") }, - - { assert snapshot(process.out.versions).match("fastqc_versions_interleaved") } + { assert process.success }, + { assert process.out.html[0][1] ==~ ".*/test_fastqc.html" }, + { assert process.out.zip[0][1] ==~ ".*/test_fastqc.zip" }, + { assert path(process.out.html[0][1]).text.contains("File typeConventional base calls") }, + { assert snapshot(process.out.versions).match() } ) } } @@ -109,13 +102,11 @@ nextflow_process { then { assertAll ( - { assert process.success }, - - { assert process.out.html[0][1] ==~ ".*/test_fastqc.html" }, - { assert process.out.zip[0][1] ==~ ".*/test_fastqc.zip" }, - { assert path(process.out.html[0][1]).text.contains("File typeConventional base calls") }, - - { assert snapshot(process.out.versions).match("fastqc_versions_bam") } + { assert process.success }, + { assert process.out.html[0][1] ==~ ".*/test_fastqc.html" }, + { assert process.out.zip[0][1] ==~ ".*/test_fastqc.zip" }, + { assert path(process.out.html[0][1]).text.contains("File typeConventional base calls") }, + { assert snapshot(process.out.versions).match() } ) } } @@ -138,22 +129,20 @@ nextflow_process { then { assertAll ( - { assert process.success }, - - { assert process.out.html[0][1][0] ==~ ".*/test_1_fastqc.html" }, - { assert process.out.html[0][1][1] ==~ ".*/test_2_fastqc.html" }, - { assert process.out.html[0][1][2] ==~ ".*/test_3_fastqc.html" }, - { assert process.out.html[0][1][3] ==~ ".*/test_4_fastqc.html" }, - { assert process.out.zip[0][1][0] ==~ ".*/test_1_fastqc.zip" }, - { assert process.out.zip[0][1][1] ==~ ".*/test_2_fastqc.zip" }, - { assert process.out.zip[0][1][2] ==~ ".*/test_3_fastqc.zip" }, - { assert process.out.zip[0][1][3] ==~ ".*/test_4_fastqc.zip" }, - { assert path(process.out.html[0][1][0]).text.contains("File typeConventional base calls") }, - { assert path(process.out.html[0][1][1]).text.contains("File typeConventional base calls") }, - { assert path(process.out.html[0][1][2]).text.contains("File typeConventional base calls") }, - { assert path(process.out.html[0][1][3]).text.contains("File typeConventional base calls") }, - - { assert snapshot(process.out.versions).match("fastqc_versions_multiple") } + { assert process.success }, + { assert process.out.html[0][1][0] ==~ ".*/test_1_fastqc.html" }, + { assert process.out.html[0][1][1] ==~ ".*/test_2_fastqc.html" }, + { assert process.out.html[0][1][2] ==~ ".*/test_3_fastqc.html" }, + { assert process.out.html[0][1][3] ==~ ".*/test_4_fastqc.html" }, + { assert process.out.zip[0][1][0] ==~ ".*/test_1_fastqc.zip" }, + { assert process.out.zip[0][1][1] ==~ ".*/test_2_fastqc.zip" }, + { assert process.out.zip[0][1][2] ==~ ".*/test_3_fastqc.zip" }, + { assert process.out.zip[0][1][3] ==~ ".*/test_4_fastqc.zip" }, + { assert path(process.out.html[0][1][0]).text.contains("File typeConventional base calls") }, + { assert path(process.out.html[0][1][1]).text.contains("File typeConventional base calls") }, + { assert path(process.out.html[0][1][2]).text.contains("File typeConventional base calls") }, + { assert path(process.out.html[0][1][3]).text.contains("File typeConventional base calls") }, + { assert snapshot(process.out.versions).match() } ) } } @@ -173,21 +162,18 @@ nextflow_process { then { assertAll ( - { assert process.success }, - - { assert process.out.html[0][1] ==~ ".*/mysample_fastqc.html" }, - { assert process.out.zip[0][1] ==~ ".*/mysample_fastqc.zip" }, - { assert path(process.out.html[0][1]).text.contains("File typeConventional base calls") }, - - { assert snapshot(process.out.versions).match("fastqc_versions_custom_prefix") } + { assert process.success }, + { assert process.out.html[0][1] ==~ ".*/mysample_fastqc.html" }, + { assert process.out.zip[0][1] ==~ ".*/mysample_fastqc.zip" }, + { assert path(process.out.html[0][1]).text.contains("File typeConventional base calls") }, + { assert snapshot(process.out.versions).match() } ) } } test("sarscov2 single-end [fastq] - stub") { - options "-stub" - + options "-stub" when { process { """ @@ -201,12 +187,123 @@ nextflow_process { then { assertAll ( - { assert process.success }, - { assert snapshot(process.out.html.collect { file(it[1]).getName() } + - process.out.zip.collect { file(it[1]).getName() } + - process.out.versions ).match("fastqc_stub") } + { assert process.success }, + { assert snapshot(process.out).match() } ) } } + test("sarscov2 paired-end [fastq] - stub") { + + options "-stub" + when { + process { + """ + input[0] = Channel.of([ + [id: 'test', single_end: false], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) ] + ]) + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("sarscov2 interleaved [fastq] - stub") { + + options "-stub" + when { + process { + """ + input[0] = Channel.of([ + [id: 'test', single_end: false], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_interleaved.fastq.gz', checkIfExists: true) + ]) + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("sarscov2 paired-end [bam] - stub") { + + options "-stub" + when { + process { + """ + input[0] = Channel.of([ + [id: 'test', single_end: false], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true) + ]) + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("sarscov2 multiple [fastq] - stub") { + + options "-stub" + when { + process { + """ + input[0] = Channel.of([ + [id: 'test', single_end: false], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test2_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test2_2.fastq.gz', checkIfExists: true) ] + ]) + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("sarscov2 custom_prefix - stub") { + + options "-stub" + when { + process { + """ + input[0] = Channel.of([ + [ id:'mysample', single_end:true ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) + ]) + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } } diff --git a/modules/nf-core/fastqc/tests/main.nf.test.snap b/modules/nf-core/fastqc/tests/main.nf.test.snap index 86f7c31..d5db309 100644 --- a/modules/nf-core/fastqc/tests/main.nf.test.snap +++ b/modules/nf-core/fastqc/tests/main.nf.test.snap @@ -1,88 +1,392 @@ { - "fastqc_versions_interleaved": { + "sarscov2 custom_prefix": { "content": [ [ "versions.yml:md5,e1cc25ca8af856014824abd842e93978" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.3" }, - "timestamp": "2024-01-31T17:40:07.293713" + "timestamp": "2024-07-22T11:02:16.374038" }, - "fastqc_stub": { + "sarscov2 single-end [fastq] - stub": { "content": [ - [ - "test.html", - "test.zip", - "versions.yml:md5,e1cc25ca8af856014824abd842e93978" - ] + { + "0": [ + [ + { + "id": "test", + "single_end": true + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": true + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ], + "html": [ + [ + { + "id": "test", + "single_end": true + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ], + "zip": [ + [ + { + "id": "test", + "single_end": true + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T11:02:24.993809" + }, + "sarscov2 custom_prefix - stub": { + "content": [ + { + "0": [ + [ + { + "id": "mysample", + "single_end": true + }, + "mysample.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "mysample", + "single_end": true + }, + "mysample.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ], + "html": [ + [ + { + "id": "mysample", + "single_end": true + }, + "mysample.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ], + "zip": [ + [ + { + "id": "mysample", + "single_end": true + }, + "mysample.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.3" }, - "timestamp": "2024-01-31T17:31:01.425198" + "timestamp": "2024-07-22T11:03:10.93942" }, - "fastqc_versions_multiple": { + "sarscov2 interleaved [fastq]": { "content": [ [ "versions.yml:md5,e1cc25ca8af856014824abd842e93978" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.3" }, - "timestamp": "2024-01-31T17:40:55.797907" + "timestamp": "2024-07-22T11:01:42.355718" }, - "fastqc_versions_bam": { + "sarscov2 paired-end [bam]": { "content": [ [ "versions.yml:md5,e1cc25ca8af856014824abd842e93978" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.3" }, - "timestamp": "2024-01-31T17:40:26.795862" + "timestamp": "2024-07-22T11:01:53.276274" }, - "fastqc_versions_single": { + "sarscov2 multiple [fastq]": { "content": [ [ "versions.yml:md5,e1cc25ca8af856014824abd842e93978" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.3" }, - "timestamp": "2024-01-31T17:39:27.043675" + "timestamp": "2024-07-22T11:02:05.527626" }, - "fastqc_versions_paired": { + "sarscov2 paired-end [fastq]": { "content": [ [ "versions.yml:md5,e1cc25ca8af856014824abd842e93978" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T11:01:31.188871" + }, + "sarscov2 paired-end [fastq] - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ], + "html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ], + "zip": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T11:02:34.273566" + }, + "sarscov2 multiple [fastq] - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ], + "html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ], + "zip": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" }, - "timestamp": "2024-01-31T17:39:47.584191" + "timestamp": "2024-07-22T11:03:02.304411" }, - "fastqc_versions_custom_prefix": { + "sarscov2 single-end [fastq]": { "content": [ [ "versions.yml:md5,e1cc25ca8af856014824abd842e93978" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T11:01:19.095607" + }, + "sarscov2 interleaved [fastq] - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ], + "html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ], + "zip": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T11:02:44.640184" + }, + "sarscov2 paired-end [bam] - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ], + "html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ], + "zip": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" }, - "timestamp": "2024-01-31T17:41:14.576531" + "timestamp": "2024-07-22T11:02:53.550742" } } \ No newline at end of file diff --git a/modules/nf-core/gunzip/environment.yml b/modules/nf-core/gunzip/environment.yml index 25910b3..dfc02a7 100644 --- a/modules/nf-core/gunzip/environment.yml +++ b/modules/nf-core/gunzip/environment.yml @@ -4,4 +4,6 @@ channels: - bioconda - defaults dependencies: - - conda-forge::sed=4.7 + - conda-forge::grep=3.11 + - conda-forge::sed=4.8 + - conda-forge::tar=1.34 diff --git a/modules/nf-core/gunzip/gunzip.diff b/modules/nf-core/gunzip/gunzip.diff deleted file mode 100644 index 286f3d8..0000000 --- a/modules/nf-core/gunzip/gunzip.diff +++ /dev/null @@ -1,259 +0,0 @@ -Changes in module 'nf-core/gunzip' ---- modules/nf-core/gunzip/meta.yml -+++ modules/nf-core/gunzip/meta.yml -@@ -37,3 +37,4 @@ - - "@joseespinosa" - - "@drpatelh" - - "@jfy133" -+ - "@gallvp" - ---- modules/nf-core/gunzip/main.nf -+++ modules/nf-core/gunzip/main.nf -@@ -18,8 +18,11 @@ - task.ext.when == null || task.ext.when - - script: -- def args = task.ext.args ?: '' -- gunzip = archive.toString() - '.gz' -+ def args = task.ext.args ?: '' -+ def extension = ( archive.toString() - '.gz' ).tokenize('.')[-1] -+ def name = archive.toString() - '.gz' - ".$extension" -+ def prefix = task.ext.prefix ?: name -+ gunzip = prefix + ".$extension" - """ - # Not calling gunzip itself because it creates files - # with the original group ownership rather than the -@@ -37,7 +40,11 @@ - """ - - stub: -- gunzip = archive.toString() - '.gz' -+ def args = task.ext.args ?: '' -+ def extension = ( archive.toString() - '.gz' ).tokenize('.')[-1] -+ def name = archive.toString() - '.gz' - ".$extension" -+ def prefix = task.ext.prefix ?: name -+ gunzip = prefix + ".$extension" - """ - touch $gunzip - cat <<-END_VERSIONS > versions.yml - ---- modules/nf-core/gunzip/tests/main.nf.test.snap -+++ modules/nf-core/gunzip/tests/main.nf.test.snap -@@ -1,4 +1,70 @@ - { -+ "Should run without failures - prefix - stub": { -+ "content": [ -+ { -+ "0": [ -+ [ -+ { -+ "id": "test" -+ }, -+ "test.xyz.fastq:md5,d41d8cd98f00b204e9800998ecf8427e" -+ ] -+ ], -+ "1": [ -+ "versions.yml:md5,54376d32aca20e937a4ec26dac228e84" -+ ], -+ "gunzip": [ -+ [ -+ { -+ "id": "test" -+ }, -+ "test.xyz.fastq:md5,d41d8cd98f00b204e9800998ecf8427e" -+ ] -+ ], -+ "versions": [ -+ "versions.yml:md5,54376d32aca20e937a4ec26dac228e84" -+ ] -+ } -+ ], -+ "meta": { -+ "nf-test": "0.8.4", -+ "nextflow": "24.04.2" -+ }, -+ "timestamp": "2024-06-25T11:35:10.861293" -+ }, -+ "Should run without failures - stub": { -+ "content": [ -+ { -+ "0": [ -+ [ -+ [ -+ -+ ], -+ "test_1.fastq:md5,d41d8cd98f00b204e9800998ecf8427e" -+ ] -+ ], -+ "1": [ -+ "versions.yml:md5,54376d32aca20e937a4ec26dac228e84" -+ ], -+ "gunzip": [ -+ [ -+ [ -+ -+ ], -+ "test_1.fastq:md5,d41d8cd98f00b204e9800998ecf8427e" -+ ] -+ ], -+ "versions": [ -+ "versions.yml:md5,54376d32aca20e937a4ec26dac228e84" -+ ] -+ } -+ ], -+ "meta": { -+ "nf-test": "0.8.4", -+ "nextflow": "24.04.2" -+ }, -+ "timestamp": "2024-06-25T11:35:05.857145" -+ }, - "Should run without failures": { - "content": [ - { -@@ -26,6 +92,43 @@ - ] - } - ], -+ "meta": { -+ "nf-test": "0.8.4", -+ "nextflow": "24.04.2" -+ }, - "timestamp": "2023-10-17T15:35:37.690477896" -+ }, -+ "Should run without failures - prefix": { -+ "content": [ -+ { -+ "0": [ -+ [ -+ { -+ "id": "test" -+ }, -+ "test.xyz.fastq:md5,4161df271f9bfcd25d5845a1e220dbec" -+ ] -+ ], -+ "1": [ -+ "versions.yml:md5,54376d32aca20e937a4ec26dac228e84" -+ ], -+ "gunzip": [ -+ [ -+ { -+ "id": "test" -+ }, -+ "test.xyz.fastq:md5,4161df271f9bfcd25d5845a1e220dbec" -+ ] -+ ], -+ "versions": [ -+ "versions.yml:md5,54376d32aca20e937a4ec26dac228e84" -+ ] -+ } -+ ], -+ "meta": { -+ "nf-test": "0.8.4", -+ "nextflow": "24.04.2" -+ }, -+ "timestamp": "2024-06-25T11:33:32.921739" - } - } ---- /dev/null -+++ modules/nf-core/gunzip/tests/nextflow.config -@@ -0,0 +1,5 @@ -+process { -+ withName: GUNZIP { -+ ext.prefix = { "${meta.id}.xyz" } -+ } -+} - ---- modules/nf-core/gunzip/tests/main.nf.test -+++ modules/nf-core/gunzip/tests/main.nf.test -@@ -33,4 +33,89 @@ - - } - -+ test("Should run without failures - prefix") { -+ -+ config './nextflow.config' -+ -+ when { -+ params { -+ outdir = "$outputDir" -+ } -+ process { -+ """ -+ input[0] = Channel.of([ -+ [ id: 'test' ], -+ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) -+ ] -+ ) -+ """ -+ } -+ } -+ -+ then { -+ assertAll( -+ { assert process.success }, -+ { assert snapshot(process.out).match() } -+ ) -+ } -+ -+ } -+ -+ test("Should run without failures - stub") { -+ -+ options '-stub' -+ -+ when { -+ params { -+ outdir = "$outputDir" -+ } -+ process { -+ """ -+ input[0] = Channel.of([ -+ [], -+ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) -+ ] -+ ) -+ """ -+ } -+ } -+ -+ then { -+ assertAll( -+ { assert process.success }, -+ { assert snapshot(process.out).match() } -+ ) -+ } -+ -+ } -+ -+ test("Should run without failures - prefix - stub") { -+ -+ options '-stub' -+ config './nextflow.config' -+ -+ when { -+ params { -+ outdir = "$outputDir" -+ } -+ process { -+ """ -+ input[0] = Channel.of([ -+ [ id: 'test' ], -+ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) -+ ] -+ ) -+ """ -+ } -+ } -+ -+ then { -+ assertAll( -+ { assert process.success }, -+ { assert snapshot(process.out).match() } -+ ) -+ } -+ -+ } -+ - } - -************************************************************ diff --git a/modules/nf-core/gunzip/main.nf b/modules/nf-core/gunzip/main.nf index 4ae609f..5e67e3b 100644 --- a/modules/nf-core/gunzip/main.nf +++ b/modules/nf-core/gunzip/main.nf @@ -4,8 +4,8 @@ process GUNZIP { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/ubuntu:20.04' : - 'nf-core/ubuntu:20.04' }" + 'https://depot.galaxyproject.org/singularity/ubuntu:22.04' : + 'nf-core/ubuntu:22.04' }" input: tuple val(meta), path(archive) diff --git a/modules/nf-core/liftoff/environment.yml b/modules/nf-core/liftoff/environment.yml index 8761c9b..7f3eadf 100644 --- a/modules/nf-core/liftoff/environment.yml +++ b/modules/nf-core/liftoff/environment.yml @@ -1,9 +1,9 @@ ---- -# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json -name: "liftoff" +name: liftoff + channels: - conda-forge - bioconda - defaults + dependencies: - - "bioconda::liftoff=1.6.3" + - bioconda::liftoff=1.6.3 diff --git a/modules/nf-core/liftoff/tests/tags.yml b/modules/nf-core/liftoff/tests/tags.yml deleted file mode 100644 index 4d0adb6..0000000 --- a/modules/nf-core/liftoff/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -liftoff: - - "modules/nf-core/liftoff/**" diff --git a/modules/nf-core/star/align/main.nf b/modules/nf-core/star/align/main.nf index 8e9c48b..ae67e00 100644 --- a/modules/nf-core/star/align/main.nf +++ b/modules/nf-core/star/align/main.nf @@ -81,6 +81,8 @@ process STAR_ALIGN { stub: def prefix = task.ext.prefix ?: "${meta.id}" """ + echo "" | gzip > ${prefix}.unmapped_1.fastq.gz + echo "" | gzip > ${prefix}.unmapped_2.fastq.gz touch ${prefix}Xd.out.bam touch ${prefix}.Log.final.out touch ${prefix}.Log.out @@ -89,8 +91,6 @@ process STAR_ALIGN { touch ${prefix}.toTranscriptome.out.bam touch ${prefix}.Aligned.unsort.out.bam touch ${prefix}.Aligned.sortedByCoord.out.bam - touch ${prefix}.unmapped_1.fastq.gz - touch ${prefix}.unmapped_2.fastq.gz touch ${prefix}.tab touch ${prefix}.SJ.out.tab touch ${prefix}.ReadsPerGene.out.tab diff --git a/modules/nf-core/star/align/tests/main.nf.test b/modules/nf-core/star/align/tests/main.nf.test index 6ecd778..2d9f72d 100644 --- a/modules/nf-core/star/align/tests/main.nf.test +++ b/modules/nf-core/star/align/tests/main.nf.test @@ -9,27 +9,367 @@ nextflow_process { tag "star/align" tag "star/genomegenerate" - setup { - run("STAR_GENOMEGENERATE") { - script "../../../star/genomegenerate/main.nf" + test("homo_sapiens - single_end") { + config "./nextflow.config" + + setup { + run("STAR_GENOMEGENERATE") { + script "../../../star/genomegenerate/main.nf" + process { + """ + input[0] = Channel.of([ + [ id:'test_fasta' ], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ] + ]) + input[1] = Channel.of([ + [ id:'test_gtf' ], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] + ]) + """ + } + } + } + + when { process { """ input[0] = Channel.of([ - [ id:'test_fasta' ], - [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ] + [ id:'test', single_end:true ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/fastq/test_rnaseq_1.fastq.gz', checkIfExists: true) ] ]) - input[1] = Channel.of([ + input[1] = STAR_GENOMEGENERATE.out.index + input[2] = Channel.of([ [ id:'test_gtf' ], [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] ]) + input[3] = false + input[4] = 'illumina' + input[5] = false """ } } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + file(process.out.log_final[0][1]).name, + file(process.out.log_out[0][1]).name, + file(process.out.log_progress[0][1]).name, + process.out.bam, + process.out.bam_sorted, + process.out.bam_transcript, + process.out.bam_unsorted, + process.out.bedgraph, + process.out.fastq, + process.out.junction, + process.out.read_per_gene_tab, + process.out.sam, + process.out.spl_junc_tab, + process.out.tab, + process.out.wig, + process.out.versions + ).match() } + ) + } } - test("homo_sapiens - single_end") { + test("homo_sapiens - paired_end") { + config "./nextflow.config" + + setup { + run("STAR_GENOMEGENERATE") { + script "../../../star/genomegenerate/main.nf" + process { + """ + input[0] = Channel.of([ + [ id:'test_fasta' ], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ] + ]) + input[1] = Channel.of([ + [ id:'test_gtf' ], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] + ]) + """ + } + } + } + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/fastq/test_rnaseq_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/fastq/test_rnaseq_2.fastq.gz', checkIfExists: true) + ] + ]) + input[1] = STAR_GENOMEGENERATE.out.index + input[2] = Channel.of([ + [ id:'test_gtf' ], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] + ]) + input[3] = false + input[4] = 'illumina' + input[5] = false + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + file(process.out.log_final[0][1]).name, + file(process.out.log_out[0][1]).name, + file(process.out.log_progress[0][1]).name, + process.out.bam, + process.out.bam_sorted, + process.out.bam_transcript, + process.out.bam_unsorted, + process.out.bedgraph, + process.out.fastq, + process.out.junction, + process.out.read_per_gene_tab, + process.out.sam, + process.out.spl_junc_tab, + process.out.tab, + process.out.wig, + process.out.versions + ).match() } + ) + } + } + + test("homo_sapiens - paired_end - arriba") { + config "./nextflow.arriba.config" + + setup { + run("STAR_GENOMEGENERATE") { + script "../../../star/genomegenerate/main.nf" + process { + """ + input[0] = Channel.of([ + [ id:'test_fasta' ], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ] + ]) + input[1] = Channel.of([ + [ id:'test_gtf' ], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] + ]) + """ + } + } + } + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/fastq/test_rnaseq_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/fastq/test_rnaseq_2.fastq.gz', checkIfExists: true) + ] + ]) + input[1] = STAR_GENOMEGENERATE.out.index + input[2] = Channel.of([ + [ id:'test_gtf' ], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] + ]) + input[3] = false + input[4] = 'illumina' + input[5] = false + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + file(process.out.log_final[0][1]).name, + file(process.out.log_out[0][1]).name, + file(process.out.log_progress[0][1]).name, + process.out.bam, + process.out.bam_sorted, + process.out.bam_transcript, + process.out.bam_unsorted, + process.out.bedgraph, + process.out.fastq, + process.out.junction, + process.out.read_per_gene_tab, + process.out.sam, + process.out.spl_junc_tab, + process.out.tab, + process.out.wig, + process.out.versions + ).match() } + ) + } + } + + test("homo_sapiens - paired_end - starfusion") { + config "./nextflow.starfusion.config" + + setup { + run("STAR_GENOMEGENERATE") { + script "../../../star/genomegenerate/main.nf" + process { + """ + input[0] = Channel.of([ + [ id:'test_fasta' ], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ] + ]) + input[1] = Channel.of([ + [ id:'test_gtf' ], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] + ]) + """ + } + } + } + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/fastq/test_rnaseq_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/fastq/test_rnaseq_2.fastq.gz', checkIfExists: true) + ] + ]) + input[1] = STAR_GENOMEGENERATE.out.index + input[2] = Channel.of([ + [ id:'test_gtf' ], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] + ]) + input[3] = false + input[4] = 'illumina' + input[5] = false + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + file(process.out.log_final[0][1]).name, + file(process.out.log_out[0][1]).name, + file(process.out.log_progress[0][1]).name, + process.out.bam, + process.out.bam_sorted, + process.out.bam_transcript, + process.out.bam_unsorted, + process.out.bedgraph, + process.out.fastq, + process.out.junction, + process.out.read_per_gene_tab, + process.out.sam, + process.out.spl_junc_tab, + process.out.tab, + process.out.wig, + process.out.versions + ).match() } + ) + } + } + + test("homo_sapiens - paired_end - multiple") { config "./nextflow.config" + setup { + run("STAR_GENOMEGENERATE") { + script "../../../star/genomegenerate/main.nf" + process { + """ + input[0] = Channel.of([ + [ id:'test_fasta' ], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ] + ]) + input[1] = Channel.of([ + [ id:'test_gtf' ], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] + ]) + """ + } + } + } + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/fastq/test_rnaseq_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/fastq/test_rnaseq_2.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/fastq/test_rnaseq_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/fastq/test_rnaseq_2.fastq.gz', checkIfExists: true) + ] + ]) + input[1] = STAR_GENOMEGENERATE.out.index + input[2] = Channel.of([ + [ id:'test_gtf' ], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] + ]) + input[3] = false + input[4] = 'illumina' + input[5] = false + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + file(process.out.log_final[0][1]).name, + file(process.out.log_out[0][1]).name, + file(process.out.log_progress[0][1]).name, + process.out.bam, + process.out.bam_sorted, + process.out.bam_transcript, + process.out.bam_unsorted, + process.out.bedgraph, + process.out.fastq, + process.out.junction, + process.out.read_per_gene_tab, + process.out.sam, + process.out.spl_junc_tab, + process.out.tab, + process.out.wig, + process.out.versions + ).match() } + ) + } + } + + test("homo_sapiens - single_end - stub") { + options "-stub" + config "./nextflow.config" + + setup { + run("STAR_GENOMEGENERATE") { + script "../../../star/genomegenerate/main.nf" + process { + """ + input[0] = Channel.of([ + [ id:'test_fasta' ], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ] + ]) + input[1] = Channel.of([ + [ id:'test_gtf' ], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] + ]) + """ + } + } + } + when { process { """ @@ -52,29 +392,33 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(file(process.out.log_final[0][1]).name).match("homo_sapiens - single_end - log_final") }, - { assert snapshot(file(process.out.log_out[0][1]).name).match("homo_sapiens - single_end - log_out") }, - { assert snapshot(process.out.bam).match("homo_sapiens - single_end - bam") }, - { assert snapshot(process.out.bam_sorted).match("homo_sapiens - single_end - bam_sorted") }, - { assert snapshot(process.out.bam_transcript).match("homo_sapiens - single_end - bam_transcript") }, - { assert snapshot(process.out.bam_unsorted).match("homo_sapiens - single_end - bam_unsorted") }, - { assert snapshot(process.out.bedgraph).match("homo_sapiens - single_end - bedgraph") }, - { assert snapshot(process.out.fastq).match("homo_sapiens - single_end - fastq") }, - { assert snapshot(process.out.junction).match("homo_sapiens - single_end - junction") }, - { assert snapshot(process.out.log_progress).match("homo_sapiens - single_end - log_progress") }, - { assert snapshot(process.out.read_per_gene_tab).match("homo_sapiens - single_end - read_per_gene_tab") }, - { assert snapshot(process.out.sam).match("homo_sapiens - single_end - sam") }, - { assert snapshot(process.out.spl_junc_tab).match("homo_sapiens - single_end - spl_junc_tab") }, - { assert snapshot(process.out.tab).match("homo_sapiens - single_end - tab") }, - { assert snapshot(process.out.wig).match("homo_sapiens - single_end - wig") }, - { assert snapshot(process.out.versions).match("homo_sapiens - single_end - versions") } + { assert snapshot(process.out).match() } ) } } - test("homo_sapiens - paired_end") { + test("homo_sapiens - paired_end - stub") { + options "-stub" config "./nextflow.config" + setup { + run("STAR_GENOMEGENERATE") { + script "../../../star/genomegenerate/main.nf" + process { + """ + input[0] = Channel.of([ + [ id:'test_fasta' ], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ] + ]) + input[1] = Channel.of([ + [ id:'test_gtf' ], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] + ]) + """ + } + } + } + when { process { """ @@ -100,29 +444,33 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(file(process.out.log_final[0][1]).name).match("homo_sapiens - paired_end - log_final") }, - { assert snapshot(file(process.out.log_out[0][1]).name).match("homo_sapiens - paired_end - log_out") }, - { assert snapshot(process.out.bam).match("homo_sapiens - paired_end - bam") }, - { assert snapshot(process.out.bam_sorted).match("homo_sapiens - paired_end - bam_sorted") }, - { assert snapshot(process.out.bam_transcript).match("homo_sapiens - paired_end - bam_transcript") }, - { assert snapshot(process.out.bam_unsorted).match("homo_sapiens - paired_end - bam_unsorted") }, - { assert snapshot(process.out.bedgraph).match("homo_sapiens - paired_end - bedgraph") }, - { assert snapshot(process.out.fastq).match("homo_sapiens - paired_end - fastq") }, - { assert snapshot(process.out.junction).match("homo_sapiens - paired_end - junction") }, - { assert snapshot(process.out.log_progress).match("homo_sapiens - paired_end - log_progress") }, - { assert snapshot(process.out.read_per_gene_tab).match("homo_sapiens - paired_end - read_per_gene_tab") }, - { assert snapshot(process.out.sam).match("homo_sapiens - paired_end - sam") }, - { assert snapshot(process.out.spl_junc_tab).match("homo_sapiens - paired_end - spl_junc_tab") }, - { assert snapshot(process.out.tab).match("homo_sapiens - paired_end - tab") }, - { assert snapshot(process.out.wig).match("homo_sapiens - paired_end - wig") }, - { assert snapshot(process.out.versions).match("homo_sapiens - paired_end - versions") } + { assert snapshot(process.out).match() } ) } } - test("homo_sapiens - paired_end - arriba") { + test("homo_sapiens - paired_end - arriba - stub") { + options "-stub" config "./nextflow.arriba.config" + setup { + run("STAR_GENOMEGENERATE") { + script "../../../star/genomegenerate/main.nf" + process { + """ + input[0] = Channel.of([ + [ id:'test_fasta' ], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ] + ]) + input[1] = Channel.of([ + [ id:'test_gtf' ], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] + ]) + """ + } + } + } + when { process { """ @@ -148,29 +496,33 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(file(process.out.log_final[0][1]).name).match("homo_sapiens - paired_end - arriba - log_final") }, - { assert snapshot(file(process.out.log_out[0][1]).name).match("homo_sapiens - paired_end - arriba - log_out") }, - { assert snapshot(file(process.out.log_progress[0][1]).name).match("homo_sapiens - paired_end - arriba - log_progress") }, - { assert snapshot(process.out.bam).match("homo_sapiens - paired_end - arriba - bam") }, - { assert snapshot(process.out.bam_sorted).match("homo_sapiens - paired_end - arriba - bam_sorted") }, - { assert snapshot(process.out.bam_transcript).match("homo_sapiens - paired_end - arriba - bam_transcript") }, - { assert snapshot(process.out.bam_unsorted).match("homo_sapiens - paired_end - arriba - bam_unsorted") }, - { assert snapshot(process.out.bedgraph).match("homo_sapiens - paired_end - arriba - bedgraph") }, - { assert snapshot(process.out.fastq).match("homo_sapiens - paired_end - arriba - fastq") }, - { assert snapshot(process.out.junction).match("homo_sapiens - paired_end - arriba - junction") }, - { assert snapshot(process.out.read_per_gene_tab).match("homo_sapiens - paired_end - arriba - read_per_gene_tab") }, - { assert snapshot(process.out.sam).match("homo_sapiens - paired_end - arriba - sam") }, - { assert snapshot(process.out.spl_junc_tab).match("homo_sapiens - paired_end - arriba - spl_junc_tab") }, - { assert snapshot(process.out.tab).match("homo_sapiens - paired_end - arriba - tab") }, - { assert snapshot(process.out.wig).match("homo_sapiens - paired_end - arriba - wig") }, - { assert snapshot(process.out.versions).match("homo_sapiens - paired_end - arriba - versions") } + { assert snapshot(process.out).match() } ) } } - test("homo_sapiens - paired_end - starfusion") { + test("homo_sapiens - paired_end - starfusion - stub") { + options "-stub" config "./nextflow.starfusion.config" + setup { + run("STAR_GENOMEGENERATE") { + script "../../../star/genomegenerate/main.nf" + process { + """ + input[0] = Channel.of([ + [ id:'test_fasta' ], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ] + ]) + input[1] = Channel.of([ + [ id:'test_gtf' ], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] + ]) + """ + } + } + } + when { process { """ @@ -196,29 +548,33 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(file(process.out.log_final[0][1]).name).match("homo_sapiens - paired_end - starfusion - log_final") }, - { assert snapshot(file(process.out.log_out[0][1]).name).match("homo_sapiens - paired_end - starfusion - log_out") }, - { assert snapshot(file(process.out.log_progress[0][1]).name).match("homo_sapiens - paired_end - starfusion - log_progress") }, - { assert snapshot(process.out.bam).match("homo_sapiens - paired_end - starfusion - bam") }, - { assert snapshot(process.out.bam_sorted).match("homo_sapiens - paired_end - starfusion - bam_sorted") }, - { assert snapshot(process.out.bam_transcript).match("homo_sapiens - paired_end - starfusion - bam_transcript") }, - { assert snapshot(process.out.bam_unsorted).match("homo_sapiens - paired_end - starfusion - bam_unsorted") }, - { assert snapshot(process.out.bedgraph).match("homo_sapiens - paired_end - starfusion - bedgraph") }, - { assert snapshot(process.out.fastq).match("homo_sapiens - paired_end - starfusion - fastq") }, - { assert snapshot(process.out.junction).match("homo_sapiens - paired_end - starfusion - junction") }, - { assert snapshot(process.out.read_per_gene_tab).match("homo_sapiens - paired_end - starfusion - read_per_gene_tab") }, - { assert snapshot(process.out.sam).match("homo_sapiens - paired_end - starfusion - sam") }, - { assert snapshot(process.out.spl_junc_tab).match("homo_sapiens - paired_end - starfusion - spl_junc_tab") }, - { assert snapshot(process.out.tab).match("homo_sapiens - paired_end - starfusion - tab") }, - { assert snapshot(process.out.wig).match("homo_sapiens - paired_end - starfusion - wig") }, - { assert snapshot(process.out.versions).match("homo_sapiens - paired_end - starfusion - versions") } + { assert snapshot(process.out).match() } ) } } - test("homo_sapiens - paired_end - multiple") { + test("homo_sapiens - paired_end - multiple - stub") { + options "-stub" config "./nextflow.config" + setup { + run("STAR_GENOMEGENERATE") { + script "../../../star/genomegenerate/main.nf" + process { + """ + input[0] = Channel.of([ + [ id:'test_fasta' ], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ] + ]) + input[1] = Channel.of([ + [ id:'test_gtf' ], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] + ]) + """ + } + } + } + when { process { """ @@ -246,22 +602,7 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(file(process.out.log_final[0][1]).name).match("homo_sapiens - paired_end - multiple - log_final") }, - { assert snapshot(file(process.out.log_out[0][1]).name).match("homo_sapiens - paired_end - multiple - log_out") }, - { assert snapshot(file(process.out.log_progress[0][1]).name).match("homo_sapiens - paired_end - multiple - log_progress") }, - { assert snapshot(process.out.bam).match("homo_sapiens - paired_end - multiple - bam") }, - { assert snapshot(process.out.bam_sorted).match("homo_sapiens - paired_end - multiple - bam_sorted") }, - { assert snapshot(process.out.bam_transcript).match("homo_sapiens - paired_end - multiple - bam_transcript") }, - { assert snapshot(process.out.bam_unsorted).match("homo_sapiens - paired_end - multiple - bam_unsorted") }, - { assert snapshot(process.out.bedgraph).match("homo_sapiens - paired_end - multiple - bedgraph") }, - { assert snapshot(process.out.fastq).match("homo_sapiens - paired_end - multiple - fastq") }, - { assert snapshot(process.out.junction).match("homo_sapiens - paired_end - multiple - junction") }, - { assert snapshot(process.out.read_per_gene_tab).match("homo_sapiens - paired_end - multiple - read_per_gene_tab") }, - { assert snapshot(process.out.sam).match("homo_sapiens - paired_end - multiple - sam") }, - { assert snapshot(process.out.spl_junc_tab).match("homo_sapiens - paired_end - multiple - spl_junc_tab") }, - { assert snapshot(process.out.tab).match("homo_sapiens - paired_end - multiple - tab") }, - { assert snapshot(process.out.wig).match("homo_sapiens - paired_end - multiple - wig") }, - { assert snapshot(process.out.versions).match("homo_sapiens - paired_end - multiple - versions") } + { assert snapshot(process.out).match() } ) } } diff --git a/modules/nf-core/star/align/tests/main.nf.test.snap b/modules/nf-core/star/align/tests/main.nf.test.snap index 08edb91..c814eb5 100644 --- a/modules/nf-core/star/align/tests/main.nf.test.snap +++ b/modules/nf-core/star/align/tests/main.nf.test.snap @@ -1,382 +1,1170 @@ { - "homo_sapiens - paired_end - multiple - bam_sorted": { + "homo_sapiens - single_end - stub": { "content": [ - [ - [ - { - "id": "test", - "single_end": false - }, - "test.Aligned.sortedByCoord.out.bam:md5,ab07c21d63ab0a6c07d171d213c81d5a" + { + "0": [ + [ + { + "id": "test", + "single_end": true + }, + "test.Log.final.out:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": true + }, + "test.Log.out:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "10": [ + [ + { + "id": "test", + "single_end": true + }, + "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "11": [ + [ + { + "id": "test", + "single_end": true + }, + "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "12": [ + [ + { + "id": "test", + "single_end": true + }, + "test.Chimeric.out.junction:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "13": [ + [ + { + "id": "test", + "single_end": true + }, + "test.out.sam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "14": [ + [ + { + "id": "test", + "single_end": true + }, + "test.Signal.UniqueMultiple.str1.out.wig:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "15": [ + [ + { + "id": "test", + "single_end": true + }, + "test.Signal.UniqueMultiple.str1.out.bg:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + [ + { + "id": "test", + "single_end": true + }, + "test.Log.progress.out:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + "versions.yml:md5,2e6b6d8809f5a17f38f4d27c45dcb22f" + ], + "4": [ + [ + { + "id": "test", + "single_end": true + }, + [ + "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "testXd.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "5": [ + [ + { + "id": "test", + "single_end": true + }, + [ + "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "6": [ + [ + { + "id": "test", + "single_end": true + }, + "test.toTranscriptome.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "7": [ + [ + { + "id": "test", + "single_end": true + }, + "test.Aligned.unsort.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "8": [ + [ + { + "id": "test", + "single_end": true + }, + [ + "test.unmapped_1.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test.unmapped_2.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "9": [ + [ + { + "id": "test", + "single_end": true + }, + [ + "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "bam": [ + [ + { + "id": "test", + "single_end": true + }, + [ + "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "testXd.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "bam_sorted": [ + [ + { + "id": "test", + "single_end": true + }, + [ + "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "bam_transcript": [ + [ + { + "id": "test", + "single_end": true + }, + "test.toTranscriptome.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "bam_unsorted": [ + [ + { + "id": "test", + "single_end": true + }, + "test.Aligned.unsort.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "bedgraph": [ + [ + { + "id": "test", + "single_end": true + }, + "test.Signal.UniqueMultiple.str1.out.bg:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "fastq": [ + [ + { + "id": "test", + "single_end": true + }, + [ + "test.unmapped_1.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test.unmapped_2.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "junction": [ + [ + { + "id": "test", + "single_end": true + }, + "test.Chimeric.out.junction:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "log_final": [ + [ + { + "id": "test", + "single_end": true + }, + "test.Log.final.out:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "log_out": [ + [ + { + "id": "test", + "single_end": true + }, + "test.Log.out:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "log_progress": [ + [ + { + "id": "test", + "single_end": true + }, + "test.Log.progress.out:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "read_per_gene_tab": [ + [ + { + "id": "test", + "single_end": true + }, + "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "sam": [ + [ + { + "id": "test", + "single_end": true + }, + "test.out.sam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "spl_junc_tab": [ + [ + { + "id": "test", + "single_end": true + }, + "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "tab": [ + [ + { + "id": "test", + "single_end": true + }, + [ + "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "versions": [ + "versions.yml:md5,2e6b6d8809f5a17f38f4d27c45dcb22f" + ], + "wig": [ + [ + { + "id": "test", + "single_end": true + }, + "test.Signal.UniqueMultiple.str1.out.wig:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ] - ] + } ], - "timestamp": "2023-12-04T18:01:19.968225733" + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T15:16:04.712114" }, - "homo_sapiens - paired_end - multiple - wig": { + "homo_sapiens - paired_end - arriba - stub": { "content": [ - [ - - ] + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Log.final.out:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Log.out:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "10": [ + [ + { + "id": "test", + "single_end": false + }, + "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "11": [ + [ + { + "id": "test", + "single_end": false + }, + "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "12": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Chimeric.out.junction:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "13": [ + [ + { + "id": "test", + "single_end": false + }, + "test.out.sam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "14": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Signal.UniqueMultiple.str1.out.wig:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "15": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Signal.UniqueMultiple.str1.out.bg:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Log.progress.out:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + "versions.yml:md5,2e6b6d8809f5a17f38f4d27c45dcb22f" + ], + "4": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "testXd.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "5": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "6": [ + [ + { + "id": "test", + "single_end": false + }, + "test.toTranscriptome.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "7": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Aligned.unsort.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "8": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.unmapped_1.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test.unmapped_2.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "9": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "bam": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "testXd.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "bam_sorted": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "bam_transcript": [ + [ + { + "id": "test", + "single_end": false + }, + "test.toTranscriptome.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "bam_unsorted": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Aligned.unsort.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "bedgraph": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Signal.UniqueMultiple.str1.out.bg:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "fastq": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.unmapped_1.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test.unmapped_2.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "junction": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Chimeric.out.junction:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "log_final": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Log.final.out:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "log_out": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Log.out:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "log_progress": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Log.progress.out:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "read_per_gene_tab": [ + [ + { + "id": "test", + "single_end": false + }, + "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "sam": [ + [ + { + "id": "test", + "single_end": false + }, + "test.out.sam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "spl_junc_tab": [ + [ + { + "id": "test", + "single_end": false + }, + "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "tab": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "versions": [ + "versions.yml:md5,2e6b6d8809f5a17f38f4d27c45dcb22f" + ], + "wig": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Signal.UniqueMultiple.str1.out.wig:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + } ], - "timestamp": "2023-11-23T13:29:01.857804" + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T15:16:28.874293" }, - "homo_sapiens - paired_end - arriba - tab": { + "homo_sapiens - single_end": { "content": [ + "test.Log.final.out", + "test.Log.out", + "test.Log.progress.out", [ [ { "id": "test", - "single_end": false + "single_end": true }, - "test.SJ.out.tab:md5,5155c9fd1f787ad6d7d80987fb06219c" + "test.Aligned.sortedByCoord.out.bam:md5,c6cfaccaf91bc7fdabed3cfe236d4535" ] - ] - ], - "timestamp": "2023-12-04T17:56:12.347549723" - }, - "homo_sapiens - single_end - wig": { - "content": [ + ], [ - - ] - ], - "timestamp": "2023-11-23T13:22:55.24701" - }, - "homo_sapiens - paired_end - sam": { - "content": [ + [ + { + "id": "test", + "single_end": true + }, + "test.Aligned.sortedByCoord.out.bam:md5,c6cfaccaf91bc7fdabed3cfe236d4535" + ] + ], [ - ] - ], - "timestamp": "2023-11-23T13:23:33.383818" - }, - "homo_sapiens - paired_end - arriba - versions": { - "content": [ + ], [ - "versions.yml:md5,2e6b6d8809f5a17f38f4d27c45dcb22f" - ] - ], - "timestamp": "2023-12-04T17:56:12.431212643" - }, - "homo_sapiens - paired_end - multiple - bedgraph": { - "content": [ + + ], [ [ { "id": "test", - "single_end": false + "single_end": true }, [ - "test.Signal.Unique.str1.out.bg:md5,d7bf8b70b436ca048a62513e1d0ece3a", - "test.Signal.UniqueMultiple.str1.out.bg:md5,686d58493b9eb445b56ace4d67f76ef6" + "test.Signal.Unique.str1.out.bg:md5,c56fc1472776fb927eaf62d973da5f9a", + "test.Signal.UniqueMultiple.str1.out.bg:md5,e93373cf6f2a2a9506e2efdb260cdd4f" ] ] - ] - ], - "timestamp": "2023-12-04T18:01:20.07119229" - }, - "homo_sapiens - paired_end - read_per_gene_tab": { - "content": [ + ], [ - ] - ], - "timestamp": "2023-11-23T13:23:33.368841" - }, - "homo_sapiens - paired_end - arriba - bedgraph": { - "content": [ + ], [ - ] - ], - "timestamp": "2023-11-23T13:25:07.102537" - }, - "homo_sapiens - single_end - junction": { - "content": [ + ], [ - ] - ], - "timestamp": "2023-11-23T13:22:55.185369" - }, - "homo_sapiens - paired_end - arriba - spl_junc_tab": { - "content": [ + ], + [ + + ], [ [ { "id": "test", - "single_end": false + "single_end": true }, - "test.SJ.out.tab:md5,5155c9fd1f787ad6d7d80987fb06219c" + "test.SJ.out.tab:md5,75a516ab950fb958f40b29996474949c" ] - ] - ], - "timestamp": "2023-12-04T17:56:12.268388251" - }, - "homo_sapiens - single_end - sam": { - "content": [ + ], [ - - ] - ], - "timestamp": "2023-11-23T13:22:55.216183" - }, - "homo_sapiens - paired_end - fastq": { - "content": [ + [ + { + "id": "test", + "single_end": true + }, + "test.SJ.out.tab:md5,75a516ab950fb958f40b29996474949c" + ] + ], [ - ] - ], - "timestamp": "2023-11-23T13:23:33.327236" - }, - "homo_sapiens - single_end - versions": { - "content": [ + ], [ "versions.yml:md5,2e6b6d8809f5a17f38f4d27c45dcb22f" ] ], - "timestamp": "2023-12-04T17:53:26.664210196" - }, - "homo_sapiens - paired_end - multiple - log_out": { - "content": [ - "test.Log.out" - ], - "timestamp": "2023-11-23T13:29:01.022176" - }, - "homo_sapiens - paired_end - arriba - fastq": { - "content": [ - [ - - ] - ], - "timestamp": "2023-11-23T13:25:07.15277" - }, - "homo_sapiens - paired_end - multiple - junction": { - "content": [ - [ - - ] - ], - "timestamp": "2023-11-23T13:29:01.52923" + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T18:02:34.35338" }, - "homo_sapiens - paired_end - multiple - spl_junc_tab": { + "homo_sapiens - paired_end": { "content": [ + "test.Log.final.out", + "test.Log.out", + "test.Log.progress.out", [ [ { "id": "test", "single_end": false }, - "test.SJ.out.tab:md5,069877e053714e23010fe4e1c003b4a2" + "test.Aligned.sortedByCoord.out.bam:md5,b9ee1c607e07323bc1652ef3babb543f" ] - ] - ], - "timestamp": "2023-12-04T18:01:20.189486201" - }, - "homo_sapiens - paired_end - starfusion - log_final": { - "content": [ - "test.Log.final.out" - ], - "timestamp": "2023-11-23T13:27:55.905883" - }, - "homo_sapiens - paired_end - starfusion - fastq": { - "content": [ - [ - - ] - ], - "timestamp": "2023-11-23T13:27:56.192302" - }, - "homo_sapiens - paired_end - multiple - sam": { - "content": [ - [ - - ] - ], - "timestamp": "2023-11-23T13:29:01.661837" - }, - "homo_sapiens - paired_end - multiple - log_final": { - "content": [ - "test.Log.final.out" - ], - "timestamp": "2023-11-23T13:29:00.966417" - }, - "homo_sapiens - paired_end - starfusion - bam": { - "content": [ + ], [ [ { "id": "test", "single_end": false }, - "test.Aligned.out.bam:md5,bcad07b838f6762fc01eea52b5cd3f84" + "test.Aligned.sortedByCoord.out.bam:md5,b9ee1c607e07323bc1652ef3babb543f" ] - ] - ], - "timestamp": "2023-12-04T17:59:58.53235164" - }, - "homo_sapiens - paired_end - arriba - junction": { - "content": [ + ], [ - ] - ], - "timestamp": "2023-11-23T13:25:07.202776" - }, - "homo_sapiens - single_end - bedgraph": { - "content": [ + ], + [ + + ], [ [ { "id": "test", - "single_end": true + "single_end": false }, [ - "test.Signal.Unique.str1.out.bg:md5,c56fc1472776fb927eaf62d973da5f9a", - "test.Signal.UniqueMultiple.str1.out.bg:md5,e93373cf6f2a2a9506e2efdb260cdd4f" + "test.Signal.Unique.str1.out.bg:md5,d7bf8b70b436ca048a62513e1d0ece3a", + "test.Signal.UniqueMultiple.str1.out.bg:md5,686d58493b9eb445b56ace4d67f76ef6" ] ] - ] - ], - "timestamp": "2023-12-04T17:53:26.394863748" - }, - "homo_sapiens - paired_end - arriba - read_per_gene_tab": { - "content": [ + ], [ - ] - ], - "timestamp": "2023-11-23T13:25:07.251962" - }, - "homo_sapiens - paired_end - starfusion - bam_sorted": { - "content": [ + ], [ - ] - ], - "timestamp": "2023-11-23T13:27:56.040843" - }, - "homo_sapiens - single_end - bam_unsorted": { - "content": [ + ], [ - ] - ], - "timestamp": "2023-11-23T13:22:55.154172" - }, - "homo_sapiens - paired_end - bam": { - "content": [ + ], + [ + + ], [ [ { "id": "test", "single_end": false }, - "test.Aligned.sortedByCoord.out.bam:md5,b9ee1c607e07323bc1652ef3babb543f" + "test.SJ.out.tab:md5,844af19ab0fc8cd9a3f75228445aca0d" ] - ] - ], - "timestamp": "2023-12-04T17:54:11.934832258" - }, - "homo_sapiens - paired_end - arriba - bam_transcript": { - "content": [ + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.SJ.out.tab:md5,844af19ab0fc8cd9a3f75228445aca0d" + ] + ], [ - ] - ], - "timestamp": "2023-11-23T13:25:06.998817" - }, - "homo_sapiens - paired_end - log_out": { - "content": [ - "test.Log.out" - ], - "timestamp": "2023-11-23T13:23:33.259699" - }, - "homo_sapiens - paired_end - arriba - log_out": { - "content": [ - "test.Log.out" - ], - "timestamp": "2023-11-23T13:25:06.849451" - }, - "homo_sapiens - paired_end - multiple - versions": { - "content": [ + ], [ "versions.yml:md5,2e6b6d8809f5a17f38f4d27c45dcb22f" ] ], - "timestamp": "2023-12-04T18:01:20.393705142" + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T18:03:16.701923" }, - "homo_sapiens - paired_end - starfusion - bam_transcript": { + "homo_sapiens - paired_end - multiple - stub": { "content": [ - [ - - ] + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Log.final.out:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Log.out:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "10": [ + [ + { + "id": "test", + "single_end": false + }, + "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "11": [ + [ + { + "id": "test", + "single_end": false + }, + "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "12": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Chimeric.out.junction:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "13": [ + [ + { + "id": "test", + "single_end": false + }, + "test.out.sam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "14": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Signal.UniqueMultiple.str1.out.wig:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "15": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Signal.UniqueMultiple.str1.out.bg:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Log.progress.out:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + "versions.yml:md5,2e6b6d8809f5a17f38f4d27c45dcb22f" + ], + "4": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "testXd.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "5": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "6": [ + [ + { + "id": "test", + "single_end": false + }, + "test.toTranscriptome.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "7": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Aligned.unsort.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "8": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.unmapped_1.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test.unmapped_2.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "9": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "bam": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "testXd.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "bam_sorted": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "bam_transcript": [ + [ + { + "id": "test", + "single_end": false + }, + "test.toTranscriptome.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "bam_unsorted": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Aligned.unsort.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "bedgraph": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Signal.UniqueMultiple.str1.out.bg:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "fastq": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.unmapped_1.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test.unmapped_2.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "junction": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Chimeric.out.junction:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "log_final": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Log.final.out:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "log_out": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Log.out:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "log_progress": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Log.progress.out:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "read_per_gene_tab": [ + [ + { + "id": "test", + "single_end": false + }, + "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "sam": [ + [ + { + "id": "test", + "single_end": false + }, + "test.out.sam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "spl_junc_tab": [ + [ + { + "id": "test", + "single_end": false + }, + "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "tab": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "versions": [ + "versions.yml:md5,2e6b6d8809f5a17f38f4d27c45dcb22f" + ], + "wig": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Signal.UniqueMultiple.str1.out.wig:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + } ], - "timestamp": "2023-11-23T13:27:56.082408" + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T15:16:51.360287" }, - "homo_sapiens - paired_end - starfusion - tab": { + "homo_sapiens - paired_end - multiple": { "content": [ + "test.Log.final.out", + "test.Log.out", + "test.Log.progress.out", [ [ { "id": "test", "single_end": false }, - "test.SJ.out.tab:md5,19c3faa1bfa9a0cc5e4c45f17065b53a" + "test.Aligned.sortedByCoord.out.bam:md5,ab07c21d63ab0a6c07d171d213c81d5a" ] - ] - ], - "timestamp": "2023-12-04T17:59:58.818041322" - }, - "homo_sapiens - single_end - fastq": { - "content": [ + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.Aligned.sortedByCoord.out.bam:md5,ab07c21d63ab0a6c07d171d213c81d5a" + ] + ], [ - ] - ], - "timestamp": "2023-11-23T13:22:55.175307" - }, - "homo_sapiens - paired_end - tab": { - "content": [ + ], + [ + + ], [ [ { "id": "test", "single_end": false }, - "test.SJ.out.tab:md5,844af19ab0fc8cd9a3f75228445aca0d" + [ + "test.Signal.Unique.str1.out.bg:md5,d7bf8b70b436ca048a62513e1d0ece3a", + "test.Signal.UniqueMultiple.str1.out.bg:md5,686d58493b9eb445b56ace4d67f76ef6" + ] ] - ] - ], - "timestamp": "2023-12-04T17:54:12.255481058" - }, - "homo_sapiens - paired_end - starfusion - bedgraph": { - "content": [ + ], [ - ] - ], - "timestamp": "2023-11-23T13:27:56.155413" - }, - "homo_sapiens - single_end - bam_transcript": { - "content": [ + ], [ - ] - ], - "timestamp": "2023-11-23T13:22:55.144852" - }, - "homo_sapiens - paired_end - versions": { - "content": [ + ], [ - "versions.yml:md5,2e6b6d8809f5a17f38f4d27c45dcb22f" - ] - ], - "timestamp": "2023-12-04T17:54:12.343840482" - }, - "homo_sapiens - paired_end - multiple - tab": { - "content": [ + + ], + [ + + ], [ [ { @@ -385,385 +1173,801 @@ }, "test.SJ.out.tab:md5,069877e053714e23010fe4e1c003b4a2" ] - ] - ], - "timestamp": "2023-12-04T18:01:20.291692062" - }, - "homo_sapiens - single_end - bam": { - "content": [ + ], [ [ { "id": "test", - "single_end": true + "single_end": false }, - "test.Aligned.sortedByCoord.out.bam:md5,c6cfaccaf91bc7fdabed3cfe236d4535" + "test.SJ.out.tab:md5,069877e053714e23010fe4e1c003b4a2" ] - ] - ], - "timestamp": "2023-12-04T17:53:26.265642675" - }, - "homo_sapiens - paired_end - arriba - wig": { - "content": [ + ], [ + ], + [ + "versions.yml:md5,2e6b6d8809f5a17f38f4d27c45dcb22f" ] ], - "timestamp": "2023-11-23T13:25:07.444214" + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T13:13:28.987438" }, - "homo_sapiens - paired_end - log_progress": { + "homo_sapiens - paired_end - stub": { "content": [ - [ - [ - { - "id": "test", - "single_end": false - }, - "test.Log.progress.out:md5,b2bd061d6cbaaf3d6d3b1fed547f69b8" + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Log.final.out:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Log.out:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "10": [ + [ + { + "id": "test", + "single_end": false + }, + "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "11": [ + [ + { + "id": "test", + "single_end": false + }, + "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "12": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Chimeric.out.junction:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "13": [ + [ + { + "id": "test", + "single_end": false + }, + "test.out.sam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "14": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Signal.UniqueMultiple.str1.out.wig:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "15": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Signal.UniqueMultiple.str1.out.bg:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Log.progress.out:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + "versions.yml:md5,2e6b6d8809f5a17f38f4d27c45dcb22f" + ], + "4": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "testXd.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "5": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "6": [ + [ + { + "id": "test", + "single_end": false + }, + "test.toTranscriptome.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "7": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Aligned.unsort.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "8": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.unmapped_1.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test.unmapped_2.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "9": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "bam": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "testXd.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "bam_sorted": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "bam_transcript": [ + [ + { + "id": "test", + "single_end": false + }, + "test.toTranscriptome.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "bam_unsorted": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Aligned.unsort.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "bedgraph": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Signal.UniqueMultiple.str1.out.bg:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "fastq": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.unmapped_1.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test.unmapped_2.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "junction": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Chimeric.out.junction:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "log_final": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Log.final.out:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "log_out": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Log.out:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "log_progress": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Log.progress.out:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "read_per_gene_tab": [ + [ + { + "id": "test", + "single_end": false + }, + "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "sam": [ + [ + { + "id": "test", + "single_end": false + }, + "test.out.sam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "spl_junc_tab": [ + [ + { + "id": "test", + "single_end": false + }, + "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "tab": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "versions": [ + "versions.yml:md5,2e6b6d8809f5a17f38f4d27c45dcb22f" + ], + "wig": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Signal.UniqueMultiple.str1.out.wig:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ] - ] - ], - "timestamp": "2023-12-04T17:54:12.126063825" - }, - "homo_sapiens - paired_end - arriba - log_final": { - "content": [ - "test.Log.final.out" - ], - "timestamp": "2023-11-23T13:25:06.829799" - }, - "homo_sapiens - paired_end - bam_unsorted": { - "content": [ - [ - - ] - ], - "timestamp": "2023-11-23T13:23:33.300509" - }, - "homo_sapiens - paired_end - arriba - sam": { - "content": [ - [ - - ] + } ], - "timestamp": "2023-11-23T13:25:07.300383" + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T15:16:16.798018" }, - "homo_sapiens - paired_end - multiple - bam": { + "homo_sapiens - paired_end - starfusion": { "content": [ + "test.Log.final.out", + "test.Log.out", + "test.Log.progress.out", [ [ { "id": "test", "single_end": false }, - "test.Aligned.sortedByCoord.out.bam:md5,ab07c21d63ab0a6c07d171d213c81d5a" + "test.Aligned.out.bam:md5,bcad07b838f6762fc01eea52b5cd3f84" ] - ] - ], - "timestamp": "2023-12-04T18:01:19.851247126" - }, - "homo_sapiens - paired_end - multiple - fastq": { - "content": [ + ], [ - ] - ], - "timestamp": "2023-11-23T13:29:01.462257" - }, - "homo_sapiens - single_end - bam_sorted": { - "content": [ - [ - [ - { - "id": "test", - "single_end": true - }, - "test.Aligned.sortedByCoord.out.bam:md5,c6cfaccaf91bc7fdabed3cfe236d4535" - ] - ] - ], - "timestamp": "2023-12-04T17:53:26.335457371" - }, - "homo_sapiens - paired_end - arriba - bam_sorted": { - "content": [ + ], [ - ] - ], - "timestamp": "2023-11-23T13:25:06.94699" - }, - "homo_sapiens - paired_end - starfusion - junction": { - "content": [ - [ - [ - { - "id": "test", - "single_end": false - }, - "test.Chimeric.out.junction:md5,c10ef219f4a30e83711b995bc5e40dba" - ] - ] - ], - "timestamp": "2023-12-04T17:59:58.641115828" - }, - "homo_sapiens - single_end - tab": { - "content": [ + ], [ - [ - { - "id": "test", - "single_end": true - }, - "test.SJ.out.tab:md5,75a516ab950fb958f40b29996474949c" - ] - ] - ], - "timestamp": "2023-12-04T17:53:26.580593434" - }, - "homo_sapiens - paired_end - starfusion - versions": { - "content": [ + + ], [ - "versions.yml:md5,2e6b6d8809f5a17f38f4d27c45dcb22f" - ] - ], - "timestamp": "2023-12-04T17:59:58.907317103" - }, - "homo_sapiens - paired_end - multiple - bam_unsorted": { - "content": [ + + ], [ - ] - ], - "timestamp": "2023-11-23T13:29:01.330463" - }, - "homo_sapiens - paired_end - arriba - log_progress": { - "content": [ - "test.Log.progress.out" - ], - "timestamp": "2023-11-23T13:25:06.86866" - }, - "homo_sapiens - paired_end - bedgraph": { - "content": [ + ], [ [ { "id": "test", "single_end": false }, - [ - "test.Signal.Unique.str1.out.bg:md5,d7bf8b70b436ca048a62513e1d0ece3a", - "test.Signal.UniqueMultiple.str1.out.bg:md5,686d58493b9eb445b56ace4d67f76ef6" - ] + "test.Chimeric.out.junction:md5,c10ef219f4a30e83711b995bc5e40dba" ] - ] - ], - "timestamp": "2023-12-04T17:54:12.064121304" - }, - "homo_sapiens - paired_end - starfusion - bam_unsorted": { - "content": [ - [ - - ] - ], - "timestamp": "2023-11-23T13:27:56.118974" - }, - "homo_sapiens - paired_end - starfusion - read_per_gene_tab": { - "content": [ + ], [ - ] - ], - "timestamp": "2023-11-23T13:27:56.264699" - }, - "homo_sapiens - paired_end - multiple - log_progress": { - "content": [ - "test.Log.progress.out" - ], - "timestamp": "2023-11-23T13:29:01.076947" - }, - "homo_sapiens - paired_end - arriba - bam_unsorted": { - "content": [ + ], [ - ] - ], - "timestamp": "2023-11-23T13:25:07.050409" - }, - "homo_sapiens - paired_end - bam_sorted": { - "content": [ + ], [ [ { "id": "test", "single_end": false }, - "test.Aligned.sortedByCoord.out.bam:md5,b9ee1c607e07323bc1652ef3babb543f" + "test.SJ.out.tab:md5,19c3faa1bfa9a0cc5e4c45f17065b53a" ] - ] - ], - "timestamp": "2023-12-04T17:54:12.002180537" - }, - "homo_sapiens - single_end - spl_junc_tab": { - "content": [ + ], [ [ { "id": "test", - "single_end": true + "single_end": false }, - "test.SJ.out.tab:md5,75a516ab950fb958f40b29996474949c" + "test.SJ.out.tab:md5,19c3faa1bfa9a0cc5e4c45f17065b53a" ] + ], + [ + + ], + [ + "versions.yml:md5,2e6b6d8809f5a17f38f4d27c45dcb22f" ] ], - "timestamp": "2023-12-04T17:53:26.50932751" + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T13:10:55.371956" }, - "homo_sapiens - paired_end - starfusion - spl_junc_tab": { + "homo_sapiens - paired_end - arriba": { "content": [ + "test.Log.final.out", + "test.Log.out", + "test.Log.progress.out", [ [ { "id": "test", "single_end": false }, - "test.SJ.out.tab:md5,19c3faa1bfa9a0cc5e4c45f17065b53a" + "test.Aligned.out.bam:md5,c1b1747f5873f2d17762725636e891d5" ] - ] - ], - "timestamp": "2023-12-04T17:59:58.731699486" - }, - "homo_sapiens - single_end - log_out": { - "content": [ - "test.Log.out" - ], - "timestamp": "2023-11-23T13:22:55.126286" - }, - "homo_sapiens - paired_end - log_final": { - "content": [ - "test.Log.final.out" - ], - "timestamp": "2023-11-23T13:23:33.253884" - }, - "homo_sapiens - single_end - log_final": { - "content": [ - "test.Log.final.out" - ], - "timestamp": "2023-11-23T13:22:55.11799" - }, - "homo_sapiens - paired_end - bam_transcript": { - "content": [ + ], [ - ] - ], - "timestamp": "2023-11-23T13:23:33.287684" - }, - "homo_sapiens - paired_end - starfusion - log_progress": { - "content": [ - "test.Log.progress.out" - ], - "timestamp": "2023-11-23T13:27:55.971484" - }, - "homo_sapiens - paired_end - multiple - bam_transcript": { - "content": [ + ], [ - ] - ], - "timestamp": "2023-11-23T13:29:01.264176" - }, - "homo_sapiens - paired_end - multiple - read_per_gene_tab": { - "content": [ + ], [ - ] - ], - "timestamp": "2023-11-23T13:29:01.596406" - }, - "homo_sapiens - single_end - read_per_gene_tab": { - "content": [ + ], [ - ] - ], - "timestamp": "2023-11-23T13:22:55.205936" - }, - "homo_sapiens - paired_end - junction": { - "content": [ + ], [ - ] - ], - "timestamp": "2023-11-23T13:23:33.340653" - }, - "homo_sapiens - paired_end - spl_junc_tab": { - "content": [ + ], [ - [ - { - "id": "test", - "single_end": false - }, - "test.SJ.out.tab:md5,844af19ab0fc8cd9a3f75228445aca0d" - ] - ] - ], - "timestamp": "2023-12-04T17:54:12.185730856" - }, - "homo_sapiens - paired_end - starfusion - sam": { - "content": [ + + ], [ - ] - ], - "timestamp": "2023-11-23T13:27:56.300637" - }, - "homo_sapiens - paired_end - arriba - bam": { - "content": [ + ], + [ + + ], [ [ { "id": "test", "single_end": false }, - "test.Aligned.out.bam:md5,c1b1747f5873f2d17762725636e891d5" + "test.SJ.out.tab:md5,5155c9fd1f787ad6d7d80987fb06219c" ] - ] - ], - "timestamp": "2023-12-04T17:56:12.190560178" - }, - "homo_sapiens - single_end - log_progress": { - "content": [ + ], [ [ { "id": "test", - "single_end": true + "single_end": false }, - "test.Log.progress.out:md5,b2bd061d6cbaaf3d6d3b1fed547f69b8" + "test.SJ.out.tab:md5,5155c9fd1f787ad6d7d80987fb06219c" ] - ] - ], - "timestamp": "2023-12-04T17:53:26.450352138" - }, - "homo_sapiens - paired_end - starfusion - wig": { - "content": [ + ], [ - ] - ], - "timestamp": "2023-11-23T13:27:56.422018" - }, - "homo_sapiens - paired_end - wig": { - "content": [ + ], [ - + "versions.yml:md5,2e6b6d8809f5a17f38f4d27c45dcb22f" ] ], - "timestamp": "2023-11-23T13:23:33.429457" + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T13:05:10.7534" }, - "homo_sapiens - paired_end - starfusion - log_out": { + "homo_sapiens - paired_end - starfusion - stub": { "content": [ - "test.Log.out" + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Log.final.out:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Log.out:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "10": [ + [ + { + "id": "test", + "single_end": false + }, + "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "11": [ + [ + { + "id": "test", + "single_end": false + }, + "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "12": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Chimeric.out.junction:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "13": [ + [ + { + "id": "test", + "single_end": false + }, + "test.out.sam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "14": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Signal.UniqueMultiple.str1.out.wig:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "15": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Signal.UniqueMultiple.str1.out.bg:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Log.progress.out:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + "versions.yml:md5,2e6b6d8809f5a17f38f4d27c45dcb22f" + ], + "4": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "testXd.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "5": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "6": [ + [ + { + "id": "test", + "single_end": false + }, + "test.toTranscriptome.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "7": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Aligned.unsort.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "8": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.unmapped_1.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test.unmapped_2.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "9": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "bam": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "testXd.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "bam_sorted": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "bam_transcript": [ + [ + { + "id": "test", + "single_end": false + }, + "test.toTranscriptome.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "bam_unsorted": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Aligned.unsort.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "bedgraph": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Signal.UniqueMultiple.str1.out.bg:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "fastq": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.unmapped_1.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test.unmapped_2.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "junction": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Chimeric.out.junction:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "log_final": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Log.final.out:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "log_out": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Log.out:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "log_progress": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Log.progress.out:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "read_per_gene_tab": [ + [ + { + "id": "test", + "single_end": false + }, + "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "sam": [ + [ + { + "id": "test", + "single_end": false + }, + "test.out.sam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "spl_junc_tab": [ + [ + { + "id": "test", + "single_end": false + }, + "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "tab": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "versions": [ + "versions.yml:md5,2e6b6d8809f5a17f38f4d27c45dcb22f" + ], + "wig": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Signal.UniqueMultiple.str1.out.wig:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + } ], - "timestamp": "2023-11-23T13:27:55.93945" + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T15:16:40.64399" } } \ No newline at end of file diff --git a/modules/nf-core/star/genomegenerate/tests/main.nf.test b/modules/nf-core/star/genomegenerate/tests/main.nf.test index c17c8ba..4d619c4 100644 --- a/modules/nf-core/star/genomegenerate/tests/main.nf.test +++ b/modules/nf-core/star/genomegenerate/tests/main.nf.test @@ -28,15 +28,15 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(file(process.out.index[0][1]).listFiles().collect { it.getName() }.sort().toString()).match("fasta_gtf_index") }, - { assert snapshot(process.out.versions).match("fasta_gtf_versions") } + { assert snapshot( + file(process.out.index[0][1]).listFiles().collect { it.getName() }.sort().toString(), + process.out.versions) + .match() } ) } } - test("fasta_gtf_stub") { - - options '-stub' + test("fasta") { when { process { @@ -45,10 +45,7 @@ nextflow_process { [ id:'test_fasta' ], [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ] ]) - input[1] = Channel.of([ - [ id:'test_gtf' ], - [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] - ]) + input[1] = Channel.of([ [], [] ]) """ } } @@ -56,13 +53,17 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(file(process.out.index[0][1]).listFiles().collect { it.getName() }.sort().toString()).match("fasta_gtf_stub_index") }, - { assert snapshot(process.out.versions).match("fasta_gtf_stub_versions") } + { assert snapshot( + file(process.out.index[0][1]).listFiles().collect { it.getName() }.sort().toString(), + process.out.versions + ).match() } ) } } - test("fasta") { + test("fasta_gtf_stub") { + + options '-stub' when { process { @@ -71,7 +72,10 @@ nextflow_process { [ id:'test_fasta' ], [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ] ]) - input[1] = Channel.of([ [], [] ]) + input[1] = Channel.of([ + [ id:'test_gtf' ], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] + ]) """ } } @@ -79,11 +83,9 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(file(process.out.index[0][1]).listFiles().collect { it.getName() }.sort().toString()).match("fasta_index") }, - { assert snapshot(process.out.versions).match("fasta_versions") } + { assert snapshot(process.out).match() } ) } - } test("fasta_stub") { @@ -105,11 +107,8 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(file(process.out.index[0][1]).listFiles().collect { it.getName() }.sort().toString()).match("fasta_stub_index") }, - { assert snapshot(process.out.versions).match("fasta_stub_versions") } + { assert snapshot(process.out).match() } ) } - } - } diff --git a/modules/nf-core/star/genomegenerate/tests/main.nf.test.snap b/modules/nf-core/star/genomegenerate/tests/main.nf.test.snap index 5653d6e..207f4b4 100644 --- a/modules/nf-core/star/genomegenerate/tests/main.nf.test.snap +++ b/modules/nf-core/star/genomegenerate/tests/main.nf.test.snap @@ -1,90 +1,148 @@ { - "fasta_gtf_versions": { + "fasta_gtf": { "content": [ + "[Genome, Log.out, SA, SAindex, chrLength.txt, chrName.txt, chrNameLength.txt, chrStart.txt, exonGeTrInfo.tab, exonInfo.tab, geneInfo.tab, genomeParameters.txt, sjdbInfo.txt, sjdbList.fromGTF.out.tab, sjdbList.out.tab, transcriptInfo.tab]", [ "versions.yml:md5,46b8f1f34bb7f23892cd1eb249ed4d7f" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.04.3" + "nf-test": "0.9.0", + "nextflow": "24.04.3" }, - "timestamp": "2024-02-01T15:54:31.798555" + "timestamp": "2024-07-22T14:55:35.478401" }, - "fasta_stub_versions": { + "fasta_gtf_stub": { "content": [ - [ - "versions.yml:md5,46b8f1f34bb7f23892cd1eb249ed4d7f" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.04.3" - }, - "timestamp": "2024-02-01T15:55:07.521209" - }, - "fasta_gtf_stub_index": { - "content": [ - "[Genome, Log.out, SA, SAindex, chrLength.txt, chrName.txt, chrNameLength.txt, chrStart.txt, exonGeTrInfo.tab, exonInfo.tab, geneInfo.tab, genomeParameters.txt, sjdbInfo.txt, sjdbList.fromGTF.out.tab, sjdbList.out.tab, transcriptInfo.tab]" - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.04.3" - }, - "timestamp": "2024-02-01T15:54:46.478098" - }, - "fasta_gtf_stub_versions": { - "content": [ - [ - "versions.yml:md5,46b8f1f34bb7f23892cd1eb249ed4d7f" - ] + { + "0": [ + [ + { + "id": "test_fasta" + }, + [ + "Genome:md5,d41d8cd98f00b204e9800998ecf8427e", + "Log.out:md5,d41d8cd98f00b204e9800998ecf8427e", + "SA:md5,d41d8cd98f00b204e9800998ecf8427e", + "SAindex:md5,d41d8cd98f00b204e9800998ecf8427e", + "chrLength.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "chrName.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "chrNameLength.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "chrStart.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "exonGeTrInfo.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "exonInfo.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "geneInfo.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "genomeParameters.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "sjdbInfo.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "sjdbList.fromGTF.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "sjdbList.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "transcriptInfo.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "1": [ + "versions.yml:md5,46b8f1f34bb7f23892cd1eb249ed4d7f" + ], + "index": [ + [ + { + "id": "test_fasta" + }, + [ + "Genome:md5,d41d8cd98f00b204e9800998ecf8427e", + "Log.out:md5,d41d8cd98f00b204e9800998ecf8427e", + "SA:md5,d41d8cd98f00b204e9800998ecf8427e", + "SAindex:md5,d41d8cd98f00b204e9800998ecf8427e", + "chrLength.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "chrName.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "chrNameLength.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "chrStart.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "exonGeTrInfo.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "exonInfo.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "geneInfo.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "genomeParameters.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "sjdbInfo.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "sjdbList.fromGTF.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "sjdbList.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "transcriptInfo.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "versions": [ + "versions.yml:md5,46b8f1f34bb7f23892cd1eb249ed4d7f" + ] + } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.04.3" + "nf-test": "0.9.0", + "nextflow": "24.04.3" }, - "timestamp": "2024-02-01T15:54:46.491657" + "timestamp": "2024-07-22T14:55:57.247585" }, - "fasta_index": { + "fasta_stub": { "content": [ - "[Genome, Log.out, SA, SAindex, chrLength.txt, chrName.txt, chrNameLength.txt, chrStart.txt, genomeParameters.txt]" + { + "0": [ + [ + { + "id": "test_fasta" + }, + [ + "Genome:md5,d41d8cd98f00b204e9800998ecf8427e", + "Log.out:md5,d41d8cd98f00b204e9800998ecf8427e", + "SA:md5,d41d8cd98f00b204e9800998ecf8427e", + "SAindex:md5,d41d8cd98f00b204e9800998ecf8427e", + "chrLength.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "chrName.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "chrNameLength.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "chrStart.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "genomeParameters.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "1": [ + "versions.yml:md5,46b8f1f34bb7f23892cd1eb249ed4d7f" + ], + "index": [ + [ + { + "id": "test_fasta" + }, + [ + "Genome:md5,d41d8cd98f00b204e9800998ecf8427e", + "Log.out:md5,d41d8cd98f00b204e9800998ecf8427e", + "SA:md5,d41d8cd98f00b204e9800998ecf8427e", + "SAindex:md5,d41d8cd98f00b204e9800998ecf8427e", + "chrLength.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "chrName.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "chrNameLength.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "chrStart.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "genomeParameters.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "versions": [ + "versions.yml:md5,46b8f1f34bb7f23892cd1eb249ed4d7f" + ] + } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.04.3" + "nf-test": "0.9.0", + "nextflow": "24.04.3" }, - "timestamp": "2024-02-01T15:54:57.552329" + "timestamp": "2024-07-22T14:56:07.01742" }, - "fasta_versions": { + "fasta": { "content": [ + "[Genome, Log.out, SA, SAindex, chrLength.txt, chrName.txt, chrNameLength.txt, chrStart.txt, genomeParameters.txt]", [ "versions.yml:md5,46b8f1f34bb7f23892cd1eb249ed4d7f" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.04.3" - }, - "timestamp": "2024-02-01T15:54:57.560541" - }, - "fasta_gtf_index": { - "content": [ - "[Genome, Log.out, SA, SAindex, chrLength.txt, chrName.txt, chrNameLength.txt, chrStart.txt, exonGeTrInfo.tab, exonInfo.tab, geneInfo.tab, genomeParameters.txt, sjdbInfo.txt, sjdbList.fromGTF.out.tab, sjdbList.out.tab, transcriptInfo.tab]" - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.04.3" - }, - "timestamp": "2024-02-01T15:54:31.786814" - }, - "fasta_stub_index": { - "content": [ - "[Genome, Log.out, SA, SAindex, chrLength.txt, chrName.txt, chrNameLength.txt, chrStart.txt, genomeParameters.txt]" - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.04.3" + "nf-test": "0.9.0", + "nextflow": "24.04.3" }, - "timestamp": "2024-02-01T15:55:07.517472" + "timestamp": "2024-07-22T14:55:45.48784" } } \ No newline at end of file diff --git a/modules/nf-core/umitools/extract/main.nf b/modules/nf-core/umitools/extract/main.nf index 8719e5f..b97900e 100644 --- a/modules/nf-core/umitools/extract/main.nf +++ b/modules/nf-core/umitools/extract/main.nf @@ -53,4 +53,22 @@ process UMITOOLS_EXTRACT { END_VERSIONS """ } + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + if (meta.single_end) { + output_command = "echo '' | gzip > ${prefix}.umi_extract.fastq.gz" + } else { + output_command = "echo '' | gzip > ${prefix}.umi_extract_1.fastq.gz ;" + output_command += "echo '' | gzip > ${prefix}.umi_extract_2.fastq.gz" + } + """ + touch ${prefix}.umi_extract.log + ${output_command} + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + umitools: \$( umi_tools --version | sed '/version:/!d; s/.*: //' ) + END_VERSIONS + """ } diff --git a/modules/nf-core/umitools/extract/tests/main.nf.test b/modules/nf-core/umitools/extract/tests/main.nf.test index 2a8eba1..bb8a065 100644 --- a/modules/nf-core/umitools/extract/tests/main.nf.test +++ b/modules/nf-core/umitools/extract/tests/main.nf.test @@ -9,7 +9,7 @@ nextflow_process { tag "umitools" tag "umitools/extract" - test("Should run without failures") { + test("single end") { when { process { @@ -24,7 +24,82 @@ nextflow_process { then { assertAll ( { assert process.success }, - { assert snapshot(process.out.versions).match("versions") } + { assert snapshot( + process.out.reads.collect { it.collect { it instanceof Map ? it : file(it).name }}, + process.out.log.collect { it.collect { it instanceof Map ? it : file(it).name }}, + process.out.versions + ).match() } + ) + } + } + + test("single end - stub") { + + options "-stub" + + when { + process { + """ + input[0] = [ [ id:'test', single_end:true ], // meta map + [ file(params.modules_testdata_base_path + "genomics/sarscov2/illumina/fastq/test_1.fastq.gz", checkIfExists: true) ] + ] + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("pair end") { + + when { + process { + """ + input[0] = [ [ id:'test', single_end:false ], // meta map + [ file(params.modules_testdata_base_path + "genomics/sarscov2/illumina/fastq/test_1.fastq.gz", checkIfExists: true), + file(params.modules_testdata_base_path + "genomics/sarscov2/illumina/fastq/test_2.fastq.gz", checkIfExists: true) ] + ] + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot( + file(process.out.reads[0][1][0]).name, + file(process.out.reads[0][1][1]).name, + process.out.log.collect { it.collect { it instanceof Map ? it : file(it).name }}, + process.out.versions + ).match() } + ) + } + } + + test("pair end - stub") { + + options "-stub" + + when { + process { + """ + input[0] = [ [ id:'test', single_end:false ], // meta map + [ file(params.modules_testdata_base_path + "genomics/sarscov2/illumina/fastq/test_1.fastq.gz", checkIfExists: true), + file(params.modules_testdata_base_path + "genomics/sarscov2/illumina/fastq/test_2.fastq.gz", checkIfExists: true) ] + ] + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() } ) } } diff --git a/modules/nf-core/umitools/extract/tests/main.nf.test.snap b/modules/nf-core/umitools/extract/tests/main.nf.test.snap index bf82701..b115905 100644 --- a/modules/nf-core/umitools/extract/tests/main.nf.test.snap +++ b/modules/nf-core/umitools/extract/tests/main.nf.test.snap @@ -1,14 +1,167 @@ { - "versions": { + "pair end - stub": { "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.umi_extract_1.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test.umi_extract_2.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.umi_extract.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + "versions.yml:md5,568d243174c081a0301e74ed42e59b48" + ], + "log": [ + [ + { + "id": "test", + "single_end": false + }, + "test.umi_extract.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "reads": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.umi_extract_1.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test.umi_extract_2.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "versions": [ + "versions.yml:md5,568d243174c081a0301e74ed42e59b48" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-02T15:05:20.008312" + }, + "single end - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": true + }, + "test.umi_extract.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": true + }, + "test.umi_extract.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + "versions.yml:md5,568d243174c081a0301e74ed42e59b48" + ], + "log": [ + [ + { + "id": "test", + "single_end": true + }, + "test.umi_extract.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "reads": [ + [ + { + "id": "test", + "single_end": true + }, + "test.umi_extract.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "versions": [ + "versions.yml:md5,568d243174c081a0301e74ed42e59b48" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-02T15:04:12.145999" + }, + "pair end": { + "content": [ + "test.umi_extract_1.fastq.gz", + "test.umi_extract_2.fastq.gz", + [ + [ + { + "id": "test", + "single_end": false + }, + "test.umi_extract.log" + ] + ], + [ + "versions.yml:md5,568d243174c081a0301e74ed42e59b48" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-02T15:21:09.578031" + }, + "single end": { + "content": [ + [ + [ + { + "id": "test", + "single_end": true + }, + "test.umi_extract.fastq.gz" + ] + ], + [ + [ + { + "id": "test", + "single_end": true + }, + "test.umi_extract.log" + ] + ], [ "versions.yml:md5,568d243174c081a0301e74ed42e59b48" ] ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.2" }, - "timestamp": "2024-02-16T10:01:33.326046137" + "timestamp": "2024-07-02T15:03:52.464606" } } \ No newline at end of file diff --git a/subworkflows/nf-core/fastq_fastqc_umitools_fastp/tests/main.nf.test b/subworkflows/nf-core/fastq_fastqc_umitools_fastp/tests/main.nf.test index 70fa164..48ba5f4 100644 --- a/subworkflows/nf-core/fastq_fastqc_umitools_fastp/tests/main.nf.test +++ b/subworkflows/nf-core/fastq_fastqc_umitools_fastp/tests/main.nf.test @@ -52,24 +52,23 @@ nextflow_workflow { then { assertAll( { assert workflow.success }, + { assert workflow.out.fastqc_raw_html }, + { assert workflow.out.fastqc_raw_zip }, + { assert workflow.out.fastqc_trim_html }, + { assert workflow.out.fastqc_trim_zip }, + { assert workflow.out.trim_html }, + { assert workflow.out.trim_log }, { assert snapshot( + workflow.out.adapter_seq, workflow.out.reads, - workflow.out.umi_log, workflow.out.trim_json, + workflow.out.trim_read_count, workflow.out.trim_reads_fail, workflow.out.trim_reads_merged, - workflow.out.adapter_seq, - workflow.out.trim_read_count, + workflow.out.umi_log, workflow.out.versions ).match() - }, - - { assert workflow.out.fastqc_raw_html }, - { assert workflow.out.fastqc_raw_zip }, - { assert workflow.out.trim_html }, - { assert workflow.out.trim_log }, - { assert workflow.out.fastqc_trim_html }, - { assert workflow.out.fastqc_trim_zip } + } ) } } @@ -112,24 +111,23 @@ nextflow_workflow { then { assertAll( { assert workflow.success }, + { assert workflow.out.trim_html }, + { assert workflow.out.trim_log }, + { assert !workflow.out.fastqc_raw_html }, + { assert !workflow.out.fastqc_raw_zip }, + { assert !workflow.out.fastqc_trim_html }, + { assert !workflow.out.fastqc_trim_zip }, { assert snapshot( + workflow.out.adapter_seq, workflow.out.reads, - workflow.out.umi_log, workflow.out.trim_json, + workflow.out.trim_read_count, workflow.out.trim_reads_fail, workflow.out.trim_reads_merged, - workflow.out.adapter_seq, - workflow.out.trim_read_count, + workflow.out.umi_log, workflow.out.versions ).match() - }, - - { assert !workflow.out.fastqc_raw_html }, - { assert !workflow.out.fastqc_raw_zip }, - { assert workflow.out.trim_html }, - { assert workflow.out.trim_log }, - { assert !workflow.out.fastqc_trim_html }, - { assert !workflow.out.fastqc_trim_zip } + } ) } } @@ -172,23 +170,22 @@ nextflow_workflow { then { assertAll( { assert workflow.success }, + { assert workflow.out.fastqc_raw_html }, + { assert workflow.out.fastqc_raw_zip }, + { assert workflow.out.fastqc_trim_html }, + { assert workflow.out.fastqc_trim_zip }, + { assert workflow.out.trim_html }, + { assert workflow.out.trim_log }, { assert snapshot( + workflow.out.adapter_seq, workflow.out.reads, workflow.out.trim_json, + workflow.out.trim_read_count, workflow.out.trim_reads_fail, workflow.out.trim_reads_merged, - workflow.out.adapter_seq, - workflow.out.trim_read_count, workflow.out.versions ).match() - }, - - { assert workflow.out.fastqc_raw_html }, - { assert workflow.out.fastqc_raw_zip }, - { assert workflow.out.trim_html }, - { assert workflow.out.trim_log }, - { assert workflow.out.fastqc_trim_html }, - { assert workflow.out.fastqc_trim_zip } + } ) } } @@ -232,24 +229,23 @@ nextflow_workflow { then { assertAll( { assert workflow.success }, + { assert workflow.out.fastqc_raw_html }, + { assert workflow.out.fastqc_raw_zip }, + { assert workflow.out.fastqc_trim_html }, + { assert workflow.out.fastqc_trim_zip }, + { assert workflow.out.trim_html }, + { assert workflow.out.trim_log }, { assert snapshot( + workflow.out.adapter_seq, workflow.out.reads, - workflow.out.umi_log, workflow.out.trim_json, + workflow.out.trim_read_count, workflow.out.trim_reads_fail, workflow.out.trim_reads_merged, - workflow.out.adapter_seq, - workflow.out.trim_read_count, + workflow.out.umi_log, workflow.out.versions ).match() - }, - - { assert workflow.out.fastqc_raw_html }, - { assert workflow.out.fastqc_raw_zip }, - { assert workflow.out.trim_html }, - { assert workflow.out.trim_log }, - { assert workflow.out.fastqc_trim_html }, - { assert workflow.out.fastqc_trim_zip } + } ) } } @@ -292,24 +288,23 @@ nextflow_workflow { then { assertAll( { assert workflow.success }, + { assert workflow.out.fastqc_raw_html }, + { assert workflow.out.fastqc_raw_zip }, + { assert workflow.out.fastqc_trim_html }, + { assert workflow.out.fastqc_trim_zip }, + { assert workflow.out.trim_html }, + { assert workflow.out.trim_log }, { assert snapshot( + workflow.out.adapter_seq, workflow.out.reads, - workflow.out.umi_log, workflow.out.trim_json, + workflow.out.trim_read_count, workflow.out.trim_reads_fail, workflow.out.trim_reads_merged, - workflow.out.adapter_seq, - workflow.out.trim_read_count, + workflow.out.umi_log, workflow.out.versions ).match() - }, - - { assert workflow.out.fastqc_raw_html }, - { assert workflow.out.fastqc_raw_zip }, - { assert workflow.out.trim_html }, - { assert workflow.out.trim_log }, - { assert workflow.out.fastqc_trim_html }, - { assert workflow.out.fastqc_trim_zip } + } ) } } @@ -352,27 +347,24 @@ nextflow_workflow { then { assertAll( { assert workflow.success }, + { assert workflow.out.fastqc_raw_html }, + { assert workflow.out.fastqc_raw_zip }, + { assert !workflow.out.fastqc_trim_html }, + { assert !workflow.out.fastqc_trim_zip }, + { assert !workflow.out.trim_html }, + { assert !workflow.out.trim_log }, { assert snapshot( + // If we skip trimming then input is output, so not snapshotting + workflow.out.adapter_seq, workflow.out.reads.get(0).get(0), // Reads meta map - // Because the input file is passed to the output file, we have to do check the filename only - file(workflow.out.reads.get(0).get(1).get(0)).name, - file(workflow.out.reads.get(0).get(1).get(1)).name, - workflow.out.umi_log, workflow.out.trim_json, + workflow.out.trim_read_count, workflow.out.trim_reads_fail, workflow.out.trim_reads_merged, - workflow.out.adapter_seq, - workflow.out.trim_read_count, + workflow.out.umi_log, workflow.out.versions ).match() - }, - - { assert workflow.out.fastqc_raw_html }, - { assert workflow.out.fastqc_raw_zip }, - { assert !workflow.out.trim_html }, - { assert !workflow.out.trim_log }, - { assert !workflow.out.fastqc_trim_html }, - { assert !workflow.out.fastqc_trim_zip } + } ) } } @@ -417,24 +409,23 @@ nextflow_workflow { then { assertAll( { assert workflow.success }, + { assert workflow.out.fastqc_raw_html }, + { assert workflow.out.fastqc_raw_zip }, + { assert workflow.out.fastqc_trim_html }, + { assert workflow.out.fastqc_trim_zip }, + { assert workflow.out.trim_html }, + { assert workflow.out.trim_log }, { assert snapshot( + workflow.out.adapter_seq, workflow.out.reads, - workflow.out.umi_log, workflow.out.trim_json, + workflow.out.trim_read_count, workflow.out.trim_reads_fail, workflow.out.trim_reads_merged, - workflow.out.adapter_seq, - workflow.out.trim_read_count, + workflow.out.umi_log, workflow.out.versions ).match() - }, - - { assert workflow.out.fastqc_raw_html }, - { assert workflow.out.fastqc_raw_zip }, - { assert workflow.out.trim_html }, - { assert workflow.out.trim_log }, - { assert workflow.out.fastqc_trim_html }, - { assert workflow.out.fastqc_trim_zip } + } ) } } @@ -477,24 +468,23 @@ nextflow_workflow { then { assertAll( { assert workflow.success }, + { assert workflow.out.fastqc_raw_html }, + { assert workflow.out.fastqc_raw_zip }, + { assert workflow.out.fastqc_trim_html }, + { assert workflow.out.fastqc_trim_zip }, + { assert workflow.out.trim_html }, + { assert workflow.out.trim_log }, { assert snapshot( + workflow.out.adapter_seq, workflow.out.reads, - workflow.out.umi_log, workflow.out.trim_json, + workflow.out.trim_read_count, workflow.out.trim_reads_fail, workflow.out.trim_reads_merged, - workflow.out.adapter_seq, - workflow.out.trim_read_count, + workflow.out.umi_log, workflow.out.versions ).match() - }, - - { assert workflow.out.fastqc_raw_html }, - { assert workflow.out.fastqc_raw_zip }, - { assert workflow.out.trim_html }, - { assert workflow.out.trim_log }, - { assert workflow.out.fastqc_trim_html }, - { assert workflow.out.fastqc_trim_zip } + } ) } } @@ -538,24 +528,23 @@ nextflow_workflow { then { assertAll( { assert workflow.success }, + { assert workflow.out.fastqc_raw_html }, + { assert workflow.out.fastqc_raw_zip }, + { assert workflow.out.fastqc_trim_html }, + { assert workflow.out.fastqc_trim_zip }, + { assert workflow.out.trim_html }, + { assert workflow.out.trim_log }, { assert snapshot( + workflow.out.adapter_seq, workflow.out.reads, - workflow.out.umi_log, workflow.out.trim_json, + workflow.out.trim_read_count, workflow.out.trim_reads_fail, workflow.out.trim_reads_merged, - workflow.out.adapter_seq, - workflow.out.trim_read_count, + workflow.out.umi_log, workflow.out.versions ).match() - }, - - { assert workflow.out.fastqc_raw_html }, - { assert workflow.out.fastqc_raw_zip }, - { assert workflow.out.trim_html }, - { assert workflow.out.trim_log }, - { assert workflow.out.fastqc_trim_html }, - { assert workflow.out.fastqc_trim_zip } + } ) } } @@ -604,4 +593,381 @@ nextflow_workflow { ) } } + + test("skip_fastqc - stub") { + + options "-stub" + + when { + workflow { + """ + skip_fastqc = true + with_umi = false + skip_umi_extract = false + umi_discard_read = 1 + skip_trimming = false + adapter_fasta = [] + save_trimmed_fail = false + save_merged = false + min_trimmed_reads = 1 + + input[0] = Channel.of([ + [ id:'test', single_end: false ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) + ] + ]) + input[1] = skip_fastqc + input[2] = with_umi + input[3] = skip_umi_extract + input[4] = umi_discard_read + input[5] = skip_trimming + input[6] = adapter_fasta + input[7] = save_trimmed_fail + input[8] = save_merged + input[9] = min_trimmed_reads + """ + } + } + + then { + assertAll( + { assert workflow.success }, + { assert snapshot(workflow.out).match() } + ) + } + } + + test("with_umi - stub") { + + options "-stub" + + when { + workflow { + """ + skip_fastqc = false + with_umi = true + skip_umi_extract = false + umi_discard_read = 1 + skip_trimming = false + adapter_fasta = [] + save_trimmed_fail = false + save_merged = false + min_trimmed_reads = 1 + + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) + ] + ]) + input[1] = skip_fastqc + input[2] = with_umi + input[3] = skip_umi_extract + input[4] = umi_discard_read + input[5] = skip_trimming + input[6] = adapter_fasta + input[7] = save_trimmed_fail + input[8] = save_merged + input[9] = min_trimmed_reads + """ + } + } + + then { + assertAll( + { assert workflow.success }, + { assert snapshot(workflow.out).match() } + ) + } + } + + + test("skip_umi_extract - stub") { + + options "-stub" + + when { + workflow { + """ + skip_fastqc = false + with_umi = true + skip_umi_extract = true + umi_discard_read = 1 + skip_trimming = false + adapter_fasta = [] + save_trimmed_fail = false + save_merged = false + min_trimmed_reads = 1 + + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) + ] + ]) + input[1] = skip_fastqc + input[2] = with_umi + input[3] = skip_umi_extract + input[4] = umi_discard_read + input[5] = skip_trimming + input[6] = adapter_fasta + input[7] = save_trimmed_fail + input[8] = save_merged + input[9] = min_trimmed_reads + """ + } + } + + then { + assertAll( + { assert workflow.success }, + { assert snapshot(workflow.out).match() } + ) + } + } + + test("umi_discard_read = 2 - stub") { + + options "-stub" + + when { + workflow { + """ + skip_fastqc = false + with_umi = true + skip_umi_extract = true + umi_discard_read = 2 + skip_trimming = false + adapter_fasta = [] + save_trimmed_fail = false + save_merged = false + min_trimmed_reads = 1 + + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) + ] + ]) + input[1] = skip_fastqc + input[2] = with_umi + input[3] = skip_umi_extract + input[4] = umi_discard_read + input[5] = skip_trimming + input[6] = adapter_fasta + input[7] = save_trimmed_fail + input[8] = save_merged + input[9] = min_trimmed_reads + """ + } + } + + then { + assertAll( + { assert workflow.success }, + { assert snapshot(workflow.out).match() } + ) + } + } + + test("skip_trimming - stub") { + + options "-stub" + + when { + workflow { + """ + skip_fastqc = false + with_umi = false + skip_umi_extract = false + umi_discard_read = 1 + skip_trimming = true + adapter_fasta = [] + save_trimmed_fail = false + save_merged = false + min_trimmed_reads = 1 + + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) + ] + ]) + input[1] = skip_fastqc + input[2] = with_umi + input[3] = skip_umi_extract + input[4] = umi_discard_read + input[5] = skip_trimming + input[6] = adapter_fasta + input[7] = save_trimmed_fail + input[8] = save_merged + input[9] = min_trimmed_reads + """ + } + } + + then { + assertAll( + { assert workflow.success }, + { assert snapshot( + workflow.out.adapter_seq, + workflow.out.fastqc_raw_html, + workflow.out.fastqc_raw_zip, + workflow.out.fastqc_trim_html, + workflow.out.fastqc_trim_zip, + workflow.out.trim_html, + workflow.out.trim_json, + workflow.out.trim_log, + workflow.out.trim_read_count, + workflow.out.trim_reads_fail, + workflow.out.trim_reads_merged, + workflow.out.umi_log, + workflow.out.versions).match() } + ) + } + } + + test("save_trimmed_fail - stub") { + + options "-stub" + + config './nextflow.save_trimmed.config' + + when { + workflow { + """ + skip_fastqc = false + with_umi = false + skip_umi_extract = false + umi_discard_read = 1 + skip_trimming = false + adapter_fasta = [] + save_trimmed_fail = true + save_merged = false + min_trimmed_reads = 1 + + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) + ] + ]) + input[1] = skip_fastqc + input[2] = with_umi + input[3] = skip_umi_extract + input[4] = umi_discard_read + input[5] = skip_trimming + input[6] = adapter_fasta + input[7] = save_trimmed_fail + input[8] = save_merged + input[9] = min_trimmed_reads + """ + } + } + + then { + assertAll( + { assert workflow.success }, + { assert snapshot(workflow.out).match() } + ) + } + } + + test("save_merged - stub") { + + options "-stub" + + when { + workflow { + """ + skip_fastqc = false + with_umi = false + skip_umi_extract = false + umi_discard_read = 1 + skip_trimming = false + adapter_fasta = [] + save_trimmed_fail = false + save_merged = true + min_trimmed_reads = 1 + + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) + ] + ]) + input[1] = skip_fastqc + input[2] = with_umi + input[3] = skip_umi_extract + input[4] = umi_discard_read + input[5] = skip_trimming + input[6] = adapter_fasta + input[7] = save_trimmed_fail + input[8] = save_merged + input[9] = min_trimmed_reads + """ + } + } + + then { + assertAll( + { assert workflow.success }, + { assert snapshot(workflow.out).match() } + ) + } + } + + test("min_trimmed_reads = 26 - stub") { + // Subworkflow should stop after FASTP which trims down to 25 reads + + options "-stub" + + when { + workflow { + """ + skip_fastqc = false + with_umi = false + skip_umi_extract = false + umi_discard_read = 1 + skip_trimming = false + adapter_fasta = [] + save_trimmed_fail = false + save_merged = true + min_trimmed_reads = 26 + + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) + ] + ]) + input[1] = skip_fastqc + input[2] = with_umi + input[3] = skip_umi_extract + input[4] = umi_discard_read + input[5] = skip_trimming + input[6] = adapter_fasta + input[7] = save_trimmed_fail + input[8] = save_merged + input[9] = min_trimmed_reads + """ + } + } + + then { + assertAll( + { assert workflow.success }, + { assert snapshot(workflow.out).match() } + ) + } + } } diff --git a/subworkflows/nf-core/fastq_fastqc_umitools_fastp/tests/main.nf.test.snap b/subworkflows/nf-core/fastq_fastqc_umitools_fastp/tests/main.nf.test.snap index b591fab..e7d1f51 100644 --- a/subworkflows/nf-core/fastq_fastqc_umitools_fastp/tests/main.nf.test.snap +++ b/subworkflows/nf-core/fastq_fastqc_umitools_fastp/tests/main.nf.test.snap @@ -1,36 +1,6 @@ { "skip_fastqc": { "content": [ - [ - [ - { - "id": "test", - "single_end": false - }, - [ - "test_1.fastp.fastq.gz:md5,67b2bbae47f073e05a97a9c2edce23c7", - "test_2.fastp.fastq.gz:md5,25cbdca08e2083dbd4f0502de6b62f39" - ] - ] - ], - [ - - ], - [ - [ - { - "id": "test", - "single_end": false - }, - "test.fastp.json:md5,1e0f8e27e71728e2b63fc64086be95cd" - ] - ], - [ - - ], - [ - - ], [ [ { @@ -40,27 +10,6 @@ "unspecified" ] ], - [ - [ - { - "id": "test", - "single_end": false - }, - 198 - ] - ], - [ - "versions.yml:md5,85bd0117e5778fff18e3920972a296ad" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" - }, - "timestamp": "2024-06-10T15:08:06.209854813" - }, - "save_trimmed_fail": { - "content": [ [ [ { @@ -68,13 +17,10 @@ "single_end": false }, [ - "test_1.fastp.fastq.gz:md5,6ff32a64c5188b9a9192be1398c262c7", - "test_2.fastp.fastq.gz:md5,db0cb7c9977e94ac2b4b446ebd017a8a" + "test_1.fastp.fastq.gz:md5,67b2bbae47f073e05a97a9c2edce23c7", + "test_2.fastp.fastq.gz:md5,25cbdca08e2083dbd4f0502de6b62f39" ] ] - ], - [ - ], [ [ @@ -82,7 +28,7 @@ "id": "test", "single_end": false }, - "test.fastp.json:md5,4c3268ddb50ea5b33125984776aa3519" + "test.fastp.json:md5,1e0f8e27e71728e2b63fc64086be95cd" ] ], [ @@ -91,47 +37,29 @@ "id": "test", "single_end": false }, - [ - "test.paired.fail.fastq.gz:md5,409b687c734cedd7a1fec14d316e1366", - "test_1.fail.fastq.gz:md5,4f273cf3159c13f79e8ffae12f5661f6", - "test_2.fail.fastq.gz:md5,f97b9edefb5649aab661fbc9e71fc995" - ] + 198 ] ], [ ], [ - [ - { - "id": "test", - "single_end": false - }, - "unspecified" - ] + ], [ - [ - { - "id": "test", - "single_end": false - }, - 162 - ] + ], [ - "versions.yml:md5,85bd0117e5778fff18e3920972a296ad", - "versions.yml:md5,c50aa59475ab901bc6f9a2cf7b1a14e0", - "versions.yml:md5,f3dcaae948e8eed92b4a5557b4c6668e" + "versions.yml:md5,85bd0117e5778fff18e3920972a296ad" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" + "nf-test": "0.9.0", + "nextflow": "24.04.3" }, - "timestamp": "2024-06-10T15:09:56.338504908" + "timestamp": "2024-07-22T16:56:01.933832" }, - "skip_umi_extract": { + "save_trimmed_fail": { "content": [ [ [ @@ -139,14 +67,8 @@ "id": "test", "single_end": false }, - [ - "test_1.fastp.fastq.gz:md5,67b2bbae47f073e05a97a9c2edce23c7", - "test_2.fastp.fastq.gz:md5,25cbdca08e2083dbd4f0502de6b62f39" - ] + "unspecified" ] - ], - [ - ], [ [ @@ -154,14 +76,11 @@ "id": "test", "single_end": false }, - "test.fastp.json:md5,1e0f8e27e71728e2b63fc64086be95cd" + [ + "test_1.fastp.fastq.gz:md5,6ff32a64c5188b9a9192be1398c262c7", + "test_2.fastp.fastq.gz:md5,db0cb7c9977e94ac2b4b446ebd017a8a" + ] ] - ], - [ - - ], - [ - ], [ [ @@ -169,7 +88,7 @@ "id": "test", "single_end": false }, - "unspecified" + "test.fastp.json:md5,4c3268ddb50ea5b33125984776aa3519" ] ], [ @@ -178,23 +97,9 @@ "id": "test", "single_end": false }, - 198 + 162 ] ], - [ - "versions.yml:md5,85bd0117e5778fff18e3920972a296ad", - "versions.yml:md5,c50aa59475ab901bc6f9a2cf7b1a14e0", - "versions.yml:md5,f3dcaae948e8eed92b4a5557b4c6668e" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" - }, - "timestamp": "2024-06-10T15:08:51.174735433" - }, - "umi_discard_read = 2": { - "content": [ [ [ { @@ -202,46 +107,17 @@ "single_end": false }, [ - "test_1.fastp.fastq.gz:md5,67b2bbae47f073e05a97a9c2edce23c7", - "test_2.fastp.fastq.gz:md5,25cbdca08e2083dbd4f0502de6b62f39" + "test.paired.fail.fastq.gz:md5,409b687c734cedd7a1fec14d316e1366", + "test_1.fail.fastq.gz:md5,4f273cf3159c13f79e8ffae12f5661f6", + "test_2.fail.fastq.gz:md5,f97b9edefb5649aab661fbc9e71fc995" ] ] ], [ - ], - [ - [ - { - "id": "test", - "single_end": false - }, - "test.fastp.json:md5,1e0f8e27e71728e2b63fc64086be95cd" - ] - ], - [ - ], [ - ], - [ - [ - { - "id": "test", - "single_end": false - }, - "unspecified" - ] - ], - [ - [ - { - "id": "test", - "single_end": false - }, - 198 - ] ], [ "versions.yml:md5,85bd0117e5778fff18e3920972a296ad", @@ -250,12 +126,12 @@ ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" + "nf-test": "0.9.0", + "nextflow": "24.04.3" }, - "timestamp": "2024-06-10T15:09:14.145250471" + "timestamp": "2024-07-22T16:57:38.736" }, - "save_merged": { + "skip_umi_extract": { "content": [ [ [ @@ -263,26 +139,8 @@ "id": "test", "single_end": false }, - [ - "test_1.fastp.fastq.gz:md5,54b726a55e992a869fd3fa778afe1672", - "test_2.fastp.fastq.gz:md5,29d3b33b869f7b63417b8ff07bb128ba" - ] - ] - ], - [ - - ], - [ - [ - { - "id": "test", - "single_end": false - }, - "test.fastp.json:md5,b712fd68ed0322f4bec49ff2a5237fcc" + "unspecified" ] - ], - [ - ], [ [ @@ -290,7 +148,10 @@ "id": "test", "single_end": false }, - "test.merged.fastq.gz:md5,c873bb1ab3fa859dcc47306465e749d5" + [ + "test_1.fastp.fastq.gz:md5,67b2bbae47f073e05a97a9c2edce23c7", + "test_2.fastp.fastq.gz:md5,25cbdca08e2083dbd4f0502de6b62f39" + ] ] ], [ @@ -299,7 +160,7 @@ "id": "test", "single_end": false }, - "unspecified" + "test.fastp.json:md5,1e0f8e27e71728e2b63fc64086be95cd" ] ], [ @@ -308,37 +169,8 @@ "id": "test", "single_end": false }, - 75 + 198 ] - ], - [ - "versions.yml:md5,85bd0117e5778fff18e3920972a296ad", - "versions.yml:md5,c50aa59475ab901bc6f9a2cf7b1a14e0", - "versions.yml:md5,f3dcaae948e8eed92b4a5557b4c6668e" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" - }, - "timestamp": "2024-06-10T15:10:16.25526763" - }, - "skip_trimming": { - "content": [ - { - "id": "test", - "single_end": false - }, - "test_1.fastq.gz", - "test_2.fastq.gz", - [ - - ], - [ - - ], - [ - ], [ @@ -350,16 +182,18 @@ ], [ + "versions.yml:md5,85bd0117e5778fff18e3920972a296ad", + "versions.yml:md5,c50aa59475ab901bc6f9a2cf7b1a14e0", "versions.yml:md5,f3dcaae948e8eed92b4a5557b4c6668e" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.3" }, - "timestamp": "2024-03-19T15:49:26.574759" + "timestamp": "2024-07-22T16:56:47.905105" }, - "sarscov2 paired-end [fastq]": { + "umi_discard_read = 2": { "content": [ [ [ @@ -367,14 +201,8 @@ "id": "test", "single_end": false }, - [ - "test_1.fastp.fastq.gz:md5,67b2bbae47f073e05a97a9c2edce23c7", - "test_2.fastp.fastq.gz:md5,25cbdca08e2083dbd4f0502de6b62f39" - ] + "unspecified" ] - ], - [ - ], [ [ @@ -382,14 +210,11 @@ "id": "test", "single_end": false }, - "test.fastp.json:md5,1e0f8e27e71728e2b63fc64086be95cd" + [ + "test_1.fastp.fastq.gz:md5,67b2bbae47f073e05a97a9c2edce23c7", + "test_2.fastp.fastq.gz:md5,25cbdca08e2083dbd4f0502de6b62f39" + ] ] - ], - [ - - ], - [ - ], [ [ @@ -397,7 +222,7 @@ "id": "test", "single_end": false }, - "unspecified" + "test.fastp.json:md5,1e0f8e27e71728e2b63fc64086be95cd" ] ], [ @@ -408,6 +233,15 @@ }, 198 ] + ], + [ + + ], + [ + + ], + [ + ], [ "versions.yml:md5,85bd0117e5778fff18e3920972a296ad", @@ -416,25 +250,238 @@ ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" + "nf-test": "0.9.0", + "nextflow": "24.04.3" }, - "timestamp": "2024-06-10T15:07:52.031579846" + "timestamp": "2024-07-22T16:57:05.436744" }, - "min_trimmed_reads = 26": { + "umi_discard_read = 2 - stub": { "content": [ - [ - [ - { - "id": "test", - "single_end": false - }, + { + "0": [ [ - "test_1.fastp.fastq.gz:md5,54b726a55e992a869fd3fa778afe1672", - "test_2.fastp.fastq.gz:md5,29d3b33b869f7b63417b8ff07bb128ba" - ] - ] - ], + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "10": [ + [ + { + "id": "test", + "single_end": false + }, + 1 + ] + ], + "11": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "12": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "13": [ + "versions.yml:md5,85bd0117e5778fff18e3920972a296ad", + "versions.yml:md5,c50aa59475ab901bc6f9a2cf7b1a14e0", + "versions.yml:md5,f3dcaae948e8eed92b4a5557b4c6668e" + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + + ], + "4": [ + [ + { + "id": "test", + "single_end": false + }, + "" + ] + ], + "5": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "6": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "7": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "8": [ + + ], + "9": [ + + ], + "adapter_seq": [ + [ + { + "id": "test", + "single_end": false + }, + "" + ] + ], + "fastqc_raw_html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "fastqc_raw_zip": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "fastqc_trim_html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "fastqc_trim_zip": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "reads": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "trim_html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "trim_json": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "trim_log": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "trim_read_count": [ + [ + { + "id": "test", + "single_end": false + }, + 1 + ] + ], + "trim_reads_fail": [ + + ], + "trim_reads_merged": [ + + ], + "umi_log": [ + + ], + "versions": [ + "versions.yml:md5,85bd0117e5778fff18e3920972a296ad", + "versions.yml:md5,c50aa59475ab901bc6f9a2cf7b1a14e0", + "versions.yml:md5,f3dcaae948e8eed92b4a5557b4c6668e" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T16:59:27.273892" + }, + "skip_trimming - stub": { + "content": [ [ ], @@ -444,11 +491,8 @@ "id": "test", "single_end": false }, - "test.fastp.json:md5,b712fd68ed0322f4bec49ff2a5237fcc" + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" ] - ], - [ - ], [ [ @@ -456,65 +500,150 @@ "id": "test", "single_end": false }, - "test.merged.fastq.gz:md5,c873bb1ab3fa859dcc47306465e749d5" + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], [ - [ - { - "id": "test", - "single_end": false - }, - "unspecified" - ] + ], [ - [ - { - "id": "test", - "single_end": false - }, - 75 - ] + ], [ - "versions.yml:md5,85bd0117e5778fff18e3920972a296ad", - "versions.yml:md5,c50aa59475ab901bc6f9a2cf7b1a14e0", - "versions.yml:md5,f3dcaae948e8eed92b4a5557b4c6668e" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" - }, - "timestamp": "2024-06-10T15:10:34.68796644" - }, - "with_umi": { - "content": [ + + ], [ - [ - { - "id": "test", - "single_end": true + + ], + [ + + ], + [ + + ], + [ + + ], + [ + + ], + [ + + ], + [ + "versions.yml:md5,f3dcaae948e8eed92b4a5557b4c6668e" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T16:59:39.247758" + }, + "save_merged": { + "content": [ + [ + [ + { + "id": "test", + "single_end": false }, - "test.fastp.fastq.gz:md5,ba8c6c3a7ce718d9a2c5857e2edf53bc" + "unspecified" ] ], [ [ { "id": "test", - "single_end": true + "single_end": false }, - "test.fastp.json:md5,d39c5c6d9a2e35fb60d26ced46569af6" + [ + "test_1.fastp.fastq.gz:md5,54b726a55e992a869fd3fa778afe1672", + "test_2.fastp.fastq.gz:md5,29d3b33b869f7b63417b8ff07bb128ba" + ] + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,b712fd68ed0322f4bec49ff2a5237fcc" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + 75 + ] + ], + [ + + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.merged.fastq.gz:md5,c873bb1ab3fa859dcc47306465e749d5" ] ], [ + ], + [ + "versions.yml:md5,85bd0117e5778fff18e3920972a296ad", + "versions.yml:md5,c50aa59475ab901bc6f9a2cf7b1a14e0", + "versions.yml:md5,f3dcaae948e8eed92b4a5557b4c6668e" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T16:57:57.472342" + }, + "skip_trimming": { + "content": [ + [ + + ], + { + "id": "test", + "single_end": false + }, + [ + + ], + [ + + ], + [ + + ], + [ + ], [ ], + [ + "versions.yml:md5,f3dcaae948e8eed92b4a5557b4c6668e" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T16:57:19.875543" + }, + "with_umi": { + "content": [ [ [ { @@ -524,6 +653,24 @@ "" ] ], + [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.fastq.gz:md5,ba8c6c3a7ce718d9a2c5857e2edf53bc" + ] + ], + [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.json:md5,d39c5c6d9a2e35fb60d26ced46569af6" + ] + ], [ [ { @@ -532,6 +679,12 @@ }, 99 ] + ], + [ + + ], + [ + ], [ "versions.yml:md5,01f264f78de3c6d893c449cc6d3cd721", @@ -541,12 +694,1492 @@ ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" + "nf-test": "0.9.0", + "nextflow": "24.04.3" }, - "timestamp": "2024-06-10T15:08:32.267769943" + "timestamp": "2024-07-22T16:56:26.778625" }, - "sarscov2 paired-end [fastq] - stub": { + "min_trimmed_reads = 26": { + "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + "unspecified" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,54b726a55e992a869fd3fa778afe1672", + "test_2.fastp.fastq.gz:md5,29d3b33b869f7b63417b8ff07bb128ba" + ] + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,b712fd68ed0322f4bec49ff2a5237fcc" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + 75 + ] + ], + [ + + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.merged.fastq.gz:md5,c873bb1ab3fa859dcc47306465e749d5" + ] + ], + [ + + ], + [ + "versions.yml:md5,85bd0117e5778fff18e3920972a296ad", + "versions.yml:md5,c50aa59475ab901bc6f9a2cf7b1a14e0", + "versions.yml:md5,f3dcaae948e8eed92b4a5557b4c6668e" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T16:58:16.36697" + }, + "min_trimmed_reads = 26 - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "10": [ + [ + { + "id": "test", + "single_end": false + }, + 26 + ] + ], + "11": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "12": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "13": [ + "versions.yml:md5,85bd0117e5778fff18e3920972a296ad", + "versions.yml:md5,c50aa59475ab901bc6f9a2cf7b1a14e0", + "versions.yml:md5,f3dcaae948e8eed92b4a5557b4c6668e" + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + + ], + "4": [ + [ + { + "id": "test", + "single_end": false + }, + "" + ] + ], + "5": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "6": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "7": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "8": [ + + ], + "9": [ + [ + { + "id": "test", + "single_end": false + }, + "test.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "adapter_seq": [ + [ + { + "id": "test", + "single_end": false + }, + "" + ] + ], + "fastqc_raw_html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "fastqc_raw_zip": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "fastqc_trim_html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "fastqc_trim_zip": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "reads": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "trim_html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "trim_json": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "trim_log": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "trim_read_count": [ + [ + { + "id": "test", + "single_end": false + }, + 26 + ] + ], + "trim_reads_fail": [ + + ], + "trim_reads_merged": [ + [ + { + "id": "test", + "single_end": false + }, + "test.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "umi_log": [ + + ], + "versions": [ + "versions.yml:md5,85bd0117e5778fff18e3920972a296ad", + "versions.yml:md5,c50aa59475ab901bc6f9a2cf7b1a14e0", + "versions.yml:md5,f3dcaae948e8eed92b4a5557b4c6668e" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T17:00:16.524361" + }, + "with_umi - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "10": [ + [ + { + "id": "test", + "single_end": true + }, + 1 + ] + ], + "11": [ + [ + { + "id": "test", + "single_end": true + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "12": [ + [ + { + "id": "test", + "single_end": true + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "13": [ + "versions.yml:md5,01f264f78de3c6d893c449cc6d3cd721", + "versions.yml:md5,85bd0117e5778fff18e3920972a296ad", + "versions.yml:md5,c50aa59475ab901bc6f9a2cf7b1a14e0", + "versions.yml:md5,f3dcaae948e8eed92b4a5557b4c6668e" + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + [ + { + "id": "test", + "single_end": false + }, + "test.umi_extract.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "4": [ + [ + { + "id": "test", + "single_end": true + }, + "" + ] + ], + "5": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "6": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "7": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "8": [ + + ], + "9": [ + + ], + "adapter_seq": [ + [ + { + "id": "test", + "single_end": true + }, + "" + ] + ], + "fastqc_raw_html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "fastqc_raw_zip": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "fastqc_trim_html": [ + [ + { + "id": "test", + "single_end": true + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "fastqc_trim_zip": [ + [ + { + "id": "test", + "single_end": true + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "reads": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "trim_html": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "trim_json": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "trim_log": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "trim_read_count": [ + [ + { + "id": "test", + "single_end": true + }, + 1 + ] + ], + "trim_reads_fail": [ + + ], + "trim_reads_merged": [ + + ], + "umi_log": [ + [ + { + "id": "test", + "single_end": false + }, + "test.umi_extract.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,01f264f78de3c6d893c449cc6d3cd721", + "versions.yml:md5,85bd0117e5778fff18e3920972a296ad", + "versions.yml:md5,c50aa59475ab901bc6f9a2cf7b1a14e0", + "versions.yml:md5,f3dcaae948e8eed92b4a5557b4c6668e" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T16:58:56.42517" + }, + "skip_fastqc - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "1": [ + + ], + "10": [ + [ + { + "id": "test", + "single_end": false + }, + 1 + ] + ], + "11": [ + + ], + "12": [ + + ], + "13": [ + "versions.yml:md5,85bd0117e5778fff18e3920972a296ad" + ], + "2": [ + + ], + "3": [ + + ], + "4": [ + [ + { + "id": "test", + "single_end": false + }, + "" + ] + ], + "5": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "6": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "7": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "8": [ + + ], + "9": [ + + ], + "adapter_seq": [ + [ + { + "id": "test", + "single_end": false + }, + "" + ] + ], + "fastqc_raw_html": [ + + ], + "fastqc_raw_zip": [ + + ], + "fastqc_trim_html": [ + + ], + "fastqc_trim_zip": [ + + ], + "reads": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "trim_html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "trim_json": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "trim_log": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "trim_read_count": [ + [ + { + "id": "test", + "single_end": false + }, + 1 + ] + ], + "trim_reads_fail": [ + + ], + "trim_reads_merged": [ + + ], + "umi_log": [ + + ], + "versions": [ + "versions.yml:md5,85bd0117e5778fff18e3920972a296ad" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T16:58:41.207281" + }, + "save_merged - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "10": [ + [ + { + "id": "test", + "single_end": false + }, + 1 + ] + ], + "11": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "12": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "13": [ + "versions.yml:md5,85bd0117e5778fff18e3920972a296ad", + "versions.yml:md5,c50aa59475ab901bc6f9a2cf7b1a14e0", + "versions.yml:md5,f3dcaae948e8eed92b4a5557b4c6668e" + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + + ], + "4": [ + [ + { + "id": "test", + "single_end": false + }, + "" + ] + ], + "5": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "6": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "7": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "8": [ + + ], + "9": [ + [ + { + "id": "test", + "single_end": false + }, + "test.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "adapter_seq": [ + [ + { + "id": "test", + "single_end": false + }, + "" + ] + ], + "fastqc_raw_html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "fastqc_raw_zip": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "fastqc_trim_html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "fastqc_trim_zip": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "reads": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "trim_html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "trim_json": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "trim_log": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "trim_read_count": [ + [ + { + "id": "test", + "single_end": false + }, + 1 + ] + ], + "trim_reads_fail": [ + + ], + "trim_reads_merged": [ + [ + { + "id": "test", + "single_end": false + }, + "test.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "umi_log": [ + + ], + "versions": [ + "versions.yml:md5,85bd0117e5778fff18e3920972a296ad", + "versions.yml:md5,c50aa59475ab901bc6f9a2cf7b1a14e0", + "versions.yml:md5,f3dcaae948e8eed92b4a5557b4c6668e" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T17:00:03.695409" + }, + "sarscov2 paired-end [fastq]": { + "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + "unspecified" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,67b2bbae47f073e05a97a9c2edce23c7", + "test_2.fastp.fastq.gz:md5,25cbdca08e2083dbd4f0502de6b62f39" + ] + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,1e0f8e27e71728e2b63fc64086be95cd" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + 198 + ] + ], + [ + + ], + [ + + ], + [ + + ], + [ + "versions.yml:md5,85bd0117e5778fff18e3920972a296ad", + "versions.yml:md5,c50aa59475ab901bc6f9a2cf7b1a14e0", + "versions.yml:md5,f3dcaae948e8eed92b4a5557b4c6668e" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T16:55:50.614571" + }, + "sarscov2 paired-end [fastq] - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "10": [ + [ + { + "id": "test", + "single_end": false + }, + 1 + ] + ], + "11": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "12": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "13": [ + "versions.yml:md5,85bd0117e5778fff18e3920972a296ad", + "versions.yml:md5,c50aa59475ab901bc6f9a2cf7b1a14e0", + "versions.yml:md5,f3dcaae948e8eed92b4a5557b4c6668e" + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + + ], + "4": [ + [ + { + "id": "test", + "single_end": false + }, + "" + ] + ], + "5": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "6": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "7": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "8": [ + + ], + "9": [ + + ], + "adapter_seq": [ + [ + { + "id": "test", + "single_end": false + }, + "" + ] + ], + "fastqc_raw_html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "fastqc_raw_zip": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "fastqc_trim_html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "fastqc_trim_zip": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "reads": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "trim_html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "trim_json": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "trim_log": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "trim_read_count": [ + [ + { + "id": "test", + "single_end": false + }, + 1 + ] + ], + "trim_reads_fail": [ + + ], + "trim_reads_merged": [ + + ], + "umi_log": [ + + ], + "versions": [ + "versions.yml:md5,85bd0117e5778fff18e3920972a296ad", + "versions.yml:md5,c50aa59475ab901bc6f9a2cf7b1a14e0", + "versions.yml:md5,f3dcaae948e8eed92b4a5557b4c6668e" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T16:58:29.296468" + }, + "save_trimmed_fail - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "10": [ + [ + { + "id": "test", + "single_end": false + }, + 1 + ] + ], + "11": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "12": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "13": [ + "versions.yml:md5,85bd0117e5778fff18e3920972a296ad", + "versions.yml:md5,c50aa59475ab901bc6f9a2cf7b1a14e0", + "versions.yml:md5,f3dcaae948e8eed92b4a5557b4c6668e" + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + + ], + "4": [ + [ + { + "id": "test", + "single_end": false + }, + "" + ] + ], + "5": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "6": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "7": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "8": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.paired.fail.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_1.fail.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.fail.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "9": [ + + ], + "adapter_seq": [ + [ + { + "id": "test", + "single_end": false + }, + "" + ] + ], + "fastqc_raw_html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "fastqc_raw_zip": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "fastqc_trim_html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "fastqc_trim_zip": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "reads": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "trim_html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "trim_json": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "trim_log": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "trim_read_count": [ + [ + { + "id": "test", + "single_end": false + }, + 1 + ] + ], + "trim_reads_fail": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.paired.fail.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_1.fail.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.fail.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "trim_reads_merged": [ + + ], + "umi_log": [ + + ], + "versions": [ + "versions.yml:md5,85bd0117e5778fff18e3920972a296ad", + "versions.yml:md5,c50aa59475ab901bc6f9a2cf7b1a14e0", + "versions.yml:md5,f3dcaae948e8eed92b4a5557b4c6668e" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T16:59:51.615894" + }, + "skip_umi_extract - stub": { "content": [ { "0": [ @@ -766,9 +2399,9 @@ } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" + "nf-test": "0.9.0", + "nextflow": "24.04.3" }, - "timestamp": "2024-06-21T14:46:58.329605" + "timestamp": "2024-07-22T16:59:12.592278" } } \ No newline at end of file From bb6b1c6b513e21573519621ad1e5d878f33fffb5 Mon Sep 17 00:00:00 2001 From: Usman Rashid Date: Fri, 26 Jul 2024 14:00:32 +1200 Subject: [PATCH 32/87] Removed dependency on PlantandFoodResearch/nxf-modules --- .editorconfig | 4 +- CHANGELOG.md | 1 + modules.json | 56 +++++--------- .../agat/spaddintrons/environment.yml | 0 .../{pfr => gallvp}/agat/spaddintrons/main.nf | 0 .../agat/spaddintrons/meta.yml | 0 .../agat/spaddintrons/tests/main.nf.test | 2 +- .../agat/spaddintrons/tests/main.nf.test.snap | 0 .../agat/spextractsequences/environment.yml | 0 .../agat/spextractsequences/main.nf | 0 .../agat/spextractsequences/meta.yml | 0 .../spextractsequences/tests/main.nf.test | 2 +- .../tests/main.nf.test.snap | 0 .../busco/busco/environment.yml | 0 modules/{pfr => gallvp}/busco/busco/main.nf | 0 modules/{pfr => gallvp}/busco/busco/meta.yml | 0 .../busco/busco/tests/main.nf.test | 22 +++--- .../busco/busco/tests/main.nf.test.snap | 0 .../busco/tests/nextflow.augustus.config | 0 .../busco/busco/tests/nextflow.config | 0 .../busco/busco/tests/nextflow.metaeuk.config | 0 .../busco/busco/tests/old_test.yml | 0 .../busco/busco/tests/tags.yml | 0 .../busco/generateplot/environment.yml | 0 .../busco/generateplot/main.nf | 0 .../busco/generateplot/meta.yml | 0 .../busco/generateplot/tests/main.nf.test | 6 +- .../generateplot/tests/main.nf.test.snap | 0 .../busco/generateplot/tests/tags.yml | 0 .../custom/restoregffids/environment.yml | 0 .../custom/restoregffids/main.nf | 0 .../custom/restoregffids/meta.yml | 0 .../templates/restore_gff_ids.py | 0 .../custom/restoregffids/tests/main.nf.test | 6 +- .../restoregffids/tests/main.nf.test.snap | 0 .../custom/shortenfastaids/environment.yml | 0 .../custom/shortenfastaids/main.nf | 0 .../custom/shortenfastaids/meta.yml | 0 .../templates/shorten_fasta_ids.py | 25 ++----- .../custom/shortenfastaids/tests/main.nf.test | 10 +-- .../shortenfastaids/tests/main.nf.test.snap | 0 modules/{pfr => gallvp}/edta/edta/main.nf | 0 modules/{pfr => gallvp}/edta/edta/meta.yml | 0 .../edta/edta/tests/main.nf.test | 6 +- .../edta/edta/tests/main.nf.test.snap | 0 .../edta/edta/tests/nextflow.config | 0 .../{pfr => gallvp}/gffread/environment.yml | 0 modules/{pfr => gallvp}/gffread/main.nf | 0 modules/{pfr => gallvp}/gffread/meta.yml | 0 .../gffread/tests/main.nf.test | 2 +- .../gffread/tests/main.nf.test.snap | 0 .../gffread/tests/nextflow-fasta.config | 0 .../gffread/tests/nextflow-gff3.config | 0 .../gffread/tests/nextflow.config | 0 .../{pfr => gallvp}/gffread/tests/tags.yml | 0 .../ltrretriever/lai/environment.yml | 0 .../{pfr => gallvp}/ltrretriever/lai/main.nf | 0 .../{pfr => gallvp}/ltrretriever/lai/meta.yml | 0 .../ltrretriever/lai/tests/main.nf.test | 10 +-- .../ltrretriever/lai/tests/main.nf.test.snap | 0 .../ltrretriever/lai/tests/nextflow.config | 0 .../ltrretriever/lai/tests/tags.yml | 0 modules/pfr/agat/spaddintrons/tests/tags.yml | 2 - .../agat/spextractsequences/tests/tags.yml | 2 - .../environment.yml | 9 --- .../agat/spfilterfeaturefromkilllist/main.nf | 53 ------------- .../agat/spfilterfeaturefromkilllist/meta.yml | 60 --------------- .../tests/main.nf.test | 74 ------------------- .../tests/main.nf.test.snap | 68 ----------------- .../tests/tags.yml | 2 - .../agat/spmergeannotations/environment.yml | 9 --- modules/pfr/agat/spmergeannotations/main.nf | 53 ------------- modules/pfr/agat/spmergeannotations/meta.yml | 54 -------------- .../spmergeannotations/tests/main.nf.test | 71 ------------------ .../tests/main.nf.test.snap | 47 ------------ .../agat/spmergeannotations/tests/tags.yml | 2 - .../pfr/custom/restoregffids/tests/tags.yml | 2 - .../pfr/custom/shortenfastaids/tests/tags.yml | 2 - modules/pfr/edta/edta/tests/tags.yml | 2 - .../{pfr => gallvp}/fasta_edta_lai/main.nf | 8 +- .../{pfr => gallvp}/fasta_edta_lai/meta.yml | 0 .../fasta_edta_lai/tests/main.nf.test | 4 +- .../fasta_edta_lai/tests/main.nf.test.snap | 0 .../fasta_edta_lai/tests/nextflow.config | 0 .../fasta_gxf_busco_plot/main.nf | 10 +-- .../fasta_gxf_busco_plot/meta.yml | 0 .../fasta_gxf_busco_plot/tests/main.nf.test | 14 ++-- .../tests/main.nf.test.snap | 0 .../tests/nextflow.config | 0 .../main.nf | 4 +- .../meta.yml | 0 .../tests/main.nf.test | 2 +- .../tests/main.nf.test.snap | 0 .../tests/nextflow.config | 0 subworkflows/local/fasta_liftoff.nf | 4 +- subworkflows/local/gff_merge_cleanup.nf | 2 +- .../gff_tsebra_spfilterfeaturefromkilllist.nf | 2 +- subworkflows/local/prepare_assembly.nf | 2 +- subworkflows/local/purge_braker_models.nf | 4 +- subworkflows/local/purge_nohit_models.nf | 2 +- .../pfr/fasta_edta_lai/tests/tags.yml | 2 - .../pfr/fasta_gxf_busco_plot/tests/tags.yml | 2 - .../tests/tags.yml | 2 - workflows/pangene.nf | 4 +- 104 files changed, 90 insertions(+), 642 deletions(-) rename modules/{pfr => gallvp}/agat/spaddintrons/environment.yml (100%) rename modules/{pfr => gallvp}/agat/spaddintrons/main.nf (100%) rename modules/{pfr => gallvp}/agat/spaddintrons/meta.yml (100%) rename modules/{pfr => gallvp}/agat/spaddintrons/tests/main.nf.test (98%) rename modules/{pfr => gallvp}/agat/spaddintrons/tests/main.nf.test.snap (100%) rename modules/{pfr => gallvp}/agat/spextractsequences/environment.yml (100%) rename modules/{pfr => gallvp}/agat/spextractsequences/main.nf (100%) rename modules/{pfr => gallvp}/agat/spextractsequences/meta.yml (100%) rename modules/{pfr => gallvp}/agat/spextractsequences/tests/main.nf.test (98%) rename modules/{pfr => gallvp}/agat/spextractsequences/tests/main.nf.test.snap (100%) rename modules/{pfr => gallvp}/busco/busco/environment.yml (100%) rename modules/{pfr => gallvp}/busco/busco/main.nf (100%) rename modules/{pfr => gallvp}/busco/busco/meta.yml (100%) rename modules/{pfr => gallvp}/busco/busco/tests/main.nf.test (91%) rename modules/{pfr => gallvp}/busco/busco/tests/main.nf.test.snap (100%) rename modules/{pfr => gallvp}/busco/busco/tests/nextflow.augustus.config (100%) rename modules/{pfr => gallvp}/busco/busco/tests/nextflow.config (100%) rename modules/{pfr => gallvp}/busco/busco/tests/nextflow.metaeuk.config (100%) rename modules/{pfr => gallvp}/busco/busco/tests/old_test.yml (100%) rename modules/{pfr => gallvp}/busco/busco/tests/tags.yml (100%) rename modules/{pfr => gallvp}/busco/generateplot/environment.yml (100%) rename modules/{pfr => gallvp}/busco/generateplot/main.nf (100%) rename modules/{pfr => gallvp}/busco/generateplot/meta.yml (100%) rename modules/{pfr => gallvp}/busco/generateplot/tests/main.nf.test (82%) rename modules/{pfr => gallvp}/busco/generateplot/tests/main.nf.test.snap (100%) rename modules/{pfr => gallvp}/busco/generateplot/tests/tags.yml (100%) rename modules/{pfr => gallvp}/custom/restoregffids/environment.yml (100%) rename modules/{pfr => gallvp}/custom/restoregffids/main.nf (100%) rename modules/{pfr => gallvp}/custom/restoregffids/meta.yml (100%) rename modules/{pfr => gallvp}/custom/restoregffids/templates/restore_gff_ids.py (100%) rename modules/{pfr => gallvp}/custom/restoregffids/tests/main.nf.test (85%) rename modules/{pfr => gallvp}/custom/restoregffids/tests/main.nf.test.snap (100%) rename modules/{pfr => gallvp}/custom/shortenfastaids/environment.yml (100%) rename modules/{pfr => gallvp}/custom/shortenfastaids/main.nf (100%) rename modules/{pfr => gallvp}/custom/shortenfastaids/meta.yml (100%) rename modules/{pfr => gallvp}/custom/shortenfastaids/templates/shorten_fasta_ids.py (88%) rename modules/{pfr => gallvp}/custom/shortenfastaids/tests/main.nf.test (81%) rename modules/{pfr => gallvp}/custom/shortenfastaids/tests/main.nf.test.snap (100%) rename modules/{pfr => gallvp}/edta/edta/main.nf (100%) rename modules/{pfr => gallvp}/edta/edta/meta.yml (100%) rename modules/{pfr => gallvp}/edta/edta/tests/main.nf.test (85%) rename modules/{pfr => gallvp}/edta/edta/tests/main.nf.test.snap (100%) rename modules/{pfr => gallvp}/edta/edta/tests/nextflow.config (100%) rename modules/{pfr => gallvp}/gffread/environment.yml (100%) rename modules/{pfr => gallvp}/gffread/main.nf (100%) rename modules/{pfr => gallvp}/gffread/meta.yml (100%) rename modules/{pfr => gallvp}/gffread/tests/main.nf.test (99%) rename modules/{pfr => gallvp}/gffread/tests/main.nf.test.snap (100%) rename modules/{pfr => gallvp}/gffread/tests/nextflow-fasta.config (100%) rename modules/{pfr => gallvp}/gffread/tests/nextflow-gff3.config (100%) rename modules/{pfr => gallvp}/gffread/tests/nextflow.config (100%) rename modules/{pfr => gallvp}/gffread/tests/tags.yml (100%) rename modules/{pfr => gallvp}/ltrretriever/lai/environment.yml (100%) rename modules/{pfr => gallvp}/ltrretriever/lai/main.nf (100%) rename modules/{pfr => gallvp}/ltrretriever/lai/meta.yml (100%) rename modules/{pfr => gallvp}/ltrretriever/lai/tests/main.nf.test (89%) rename modules/{pfr => gallvp}/ltrretriever/lai/tests/main.nf.test.snap (100%) rename modules/{pfr => gallvp}/ltrretriever/lai/tests/nextflow.config (100%) rename modules/{pfr => gallvp}/ltrretriever/lai/tests/tags.yml (100%) delete mode 100644 modules/pfr/agat/spaddintrons/tests/tags.yml delete mode 100644 modules/pfr/agat/spextractsequences/tests/tags.yml delete mode 100644 modules/pfr/agat/spfilterfeaturefromkilllist/environment.yml delete mode 100644 modules/pfr/agat/spfilterfeaturefromkilllist/main.nf delete mode 100644 modules/pfr/agat/spfilterfeaturefromkilllist/meta.yml delete mode 100644 modules/pfr/agat/spfilterfeaturefromkilllist/tests/main.nf.test delete mode 100644 modules/pfr/agat/spfilterfeaturefromkilllist/tests/main.nf.test.snap delete mode 100644 modules/pfr/agat/spfilterfeaturefromkilllist/tests/tags.yml delete mode 100644 modules/pfr/agat/spmergeannotations/environment.yml delete mode 100644 modules/pfr/agat/spmergeannotations/main.nf delete mode 100644 modules/pfr/agat/spmergeannotations/meta.yml delete mode 100644 modules/pfr/agat/spmergeannotations/tests/main.nf.test delete mode 100644 modules/pfr/agat/spmergeannotations/tests/main.nf.test.snap delete mode 100644 modules/pfr/agat/spmergeannotations/tests/tags.yml delete mode 100644 modules/pfr/custom/restoregffids/tests/tags.yml delete mode 100644 modules/pfr/custom/shortenfastaids/tests/tags.yml delete mode 100644 modules/pfr/edta/edta/tests/tags.yml rename subworkflows/{pfr => gallvp}/fasta_edta_lai/main.nf (95%) rename subworkflows/{pfr => gallvp}/fasta_edta_lai/meta.yml (100%) rename subworkflows/{pfr => gallvp}/fasta_edta_lai/tests/main.nf.test (91%) rename subworkflows/{pfr => gallvp}/fasta_edta_lai/tests/main.nf.test.snap (100%) rename subworkflows/{pfr => gallvp}/fasta_edta_lai/tests/nextflow.config (100%) rename subworkflows/{pfr => gallvp}/fasta_gxf_busco_plot/main.nf (98%) rename subworkflows/{pfr => gallvp}/fasta_gxf_busco_plot/meta.yml (100%) rename subworkflows/{pfr => gallvp}/fasta_gxf_busco_plot/tests/main.nf.test (73%) rename subworkflows/{pfr => gallvp}/fasta_gxf_busco_plot/tests/main.nf.test.snap (100%) rename subworkflows/{pfr => gallvp}/fasta_gxf_busco_plot/tests/nextflow.config (100%) rename subworkflows/{pfr => gallvp}/gxf_fasta_agat_spaddintrons_spextractsequences/main.nf (98%) rename subworkflows/{pfr => gallvp}/gxf_fasta_agat_spaddintrons_spextractsequences/meta.yml (100%) rename subworkflows/{pfr => gallvp}/gxf_fasta_agat_spaddintrons_spextractsequences/tests/main.nf.test (98%) rename subworkflows/{pfr => gallvp}/gxf_fasta_agat_spaddintrons_spextractsequences/tests/main.nf.test.snap (100%) rename subworkflows/{pfr => gallvp}/gxf_fasta_agat_spaddintrons_spextractsequences/tests/nextflow.config (100%) delete mode 100644 subworkflows/pfr/fasta_edta_lai/tests/tags.yml delete mode 100644 subworkflows/pfr/fasta_gxf_busco_plot/tests/tags.yml delete mode 100644 subworkflows/pfr/gxf_fasta_agat_spaddintrons_spextractsequences/tests/tags.yml diff --git a/.editorconfig b/.editorconfig index 2813def..e1c9da2 100644 --- a/.editorconfig +++ b/.editorconfig @@ -29,7 +29,7 @@ indent_style = unset indent_size = unset # These files are edited and tested upstream in pfr/modules -[/modules/pfr/**] +[/modules/gallvp/**] charset = unset end_of_line = unset insert_final_newline = unset @@ -37,7 +37,7 @@ trim_trailing_whitespace = unset indent_style = unset indent_size = unset -[/subworkflows/pfr/**] +[/subworkflows/gallvp/**] charset = unset end_of_line = unset insert_final_newline = unset diff --git a/CHANGELOG.md b/CHANGELOG.md index cec5140..0baeab3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -41,6 +41,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 4. Moved liftoffID from gene level to mRNA/transcript level 5. Moved `version_check.sh` to `.github/version_checks.sh` 6. Removed dependency on for `BRAKER3` and `REPEATMASKER` modules which are now installed from +7. Removed dependency on ## 0.3.3 - [18-Jun-2024] diff --git a/modules.json b/modules.json index 948c8ec..7cc6286 100644 --- a/modules.json +++ b/modules.json @@ -5,94 +5,78 @@ "https://github.com/GallVp/nxf-components.git": { "modules": { "gallvp": { - "braker3": { - "branch": "main", - "git_sha": "be636e1e7d50b12ee1f50ed0bb9b21b0fade7cfd", - "installed_by": ["modules"] - }, - "repeatmasker": { - "branch": "main", - "git_sha": "76c4ba86319c935f4003e7d18e5dfdd967d9af95", - "installed_by": ["modules"] - } - } - } - }, - "https://github.com/PlantandFoodResearch/nxf-modules.git": { - "modules": { - "pfr": { "agat/spaddintrons": { "branch": "main", - "git_sha": "f373339d099de4e7330cd8f3c400ad9a080358c9", + "git_sha": "7bf6fbca23edc94490ffa6709f52b2f71c6fb130", "installed_by": ["gxf_fasta_agat_spaddintrons_spextractsequences"] }, "agat/spextractsequences": { "branch": "main", - "git_sha": "e2a6ed64cb035a16da154f738f65639ace7e0c74", + "git_sha": "7bf6fbca23edc94490ffa6709f52b2f71c6fb130", "installed_by": ["gxf_fasta_agat_spaddintrons_spextractsequences"] }, - "agat/spfilterfeaturefromkilllist": { - "branch": "main", - "git_sha": "10b046eaac396f279c08e7e2bb067482ccd9c74e", - "installed_by": ["modules"] - }, - "agat/spmergeannotations": { + "braker3": { "branch": "main", - "git_sha": "10b046eaac396f279c08e7e2bb067482ccd9c74e", + "git_sha": "be636e1e7d50b12ee1f50ed0bb9b21b0fade7cfd", "installed_by": ["modules"] }, "busco/busco": { "branch": "main", - "git_sha": "c3ef9317fe867609f5927588fbf17e3c3ebf389c", + "git_sha": "ab92c438688c1f4a3753b65914bfd2e6319cebb2", "installed_by": ["fasta_gxf_busco_plot"] }, "busco/generateplot": { "branch": "main", - "git_sha": "c3ef9317fe867609f5927588fbf17e3c3ebf389c", + "git_sha": "ab92c438688c1f4a3753b65914bfd2e6319cebb2", "installed_by": ["fasta_gxf_busco_plot"] }, "custom/restoregffids": { "branch": "main", - "git_sha": "da7a50af5eaac9601e23f33e00bf24e61f9c27ab", + "git_sha": "490f8ab54c632d84f99edd6f208305ac5e283ab3", "installed_by": ["fasta_edta_lai"] }, "custom/shortenfastaids": { "branch": "main", - "git_sha": "e9ec2e4c48ead3d760c8e13950c568c19ae86b8b", + "git_sha": "490f8ab54c632d84f99edd6f208305ac5e283ab3", "installed_by": ["fasta_edta_lai"] }, "edta/edta": { "branch": "main", - "git_sha": "651ee91ac838eaf11a5866cc022bd4be54c53e55", + "git_sha": "7bf6fbca23edc94490ffa6709f52b2f71c6fb130", "installed_by": ["fasta_edta_lai"] }, "gffread": { "branch": "main", - "git_sha": "c3ef9317fe867609f5927588fbf17e3c3ebf389c", + "git_sha": "c04bf39d67027e044a6eaed0b7b0439fd8866fc7", "installed_by": ["fasta_gxf_busco_plot"] }, "ltrretriever/lai": { "branch": "main", - "git_sha": "10b046eaac396f279c08e7e2bb067482ccd9c74e", + "git_sha": "490f8ab54c632d84f99edd6f208305ac5e283ab3", "installed_by": ["fasta_edta_lai"] + }, + "repeatmasker": { + "branch": "main", + "git_sha": "76c4ba86319c935f4003e7d18e5dfdd967d9af95", + "installed_by": ["modules"] } } }, "subworkflows": { - "pfr": { + "gallvp": { "fasta_edta_lai": { "branch": "main", - "git_sha": "e9ec2e4c48ead3d760c8e13950c568c19ae86b8b", + "git_sha": "7bf6fbca23edc94490ffa6709f52b2f71c6fb130", "installed_by": ["subworkflows"] }, "fasta_gxf_busco_plot": { "branch": "main", - "git_sha": "0e4afaff4964485d2d93f1115c5254a99765b9c1", + "git_sha": "7bf6fbca23edc94490ffa6709f52b2f71c6fb130", "installed_by": ["subworkflows"] }, "gxf_fasta_agat_spaddintrons_spextractsequences": { "branch": "main", - "git_sha": "d67a48075392ac63ce680780dd87415244a66b3a", + "git_sha": "7bf6fbca23edc94490ffa6709f52b2f71c6fb130", "installed_by": ["subworkflows"] } } diff --git a/modules/pfr/agat/spaddintrons/environment.yml b/modules/gallvp/agat/spaddintrons/environment.yml similarity index 100% rename from modules/pfr/agat/spaddintrons/environment.yml rename to modules/gallvp/agat/spaddintrons/environment.yml diff --git a/modules/pfr/agat/spaddintrons/main.nf b/modules/gallvp/agat/spaddintrons/main.nf similarity index 100% rename from modules/pfr/agat/spaddintrons/main.nf rename to modules/gallvp/agat/spaddintrons/main.nf diff --git a/modules/pfr/agat/spaddintrons/meta.yml b/modules/gallvp/agat/spaddintrons/meta.yml similarity index 100% rename from modules/pfr/agat/spaddintrons/meta.yml rename to modules/gallvp/agat/spaddintrons/meta.yml diff --git a/modules/pfr/agat/spaddintrons/tests/main.nf.test b/modules/gallvp/agat/spaddintrons/tests/main.nf.test similarity index 98% rename from modules/pfr/agat/spaddintrons/tests/main.nf.test rename to modules/gallvp/agat/spaddintrons/tests/main.nf.test index e7bf26a..6c4bd03 100644 --- a/modules/pfr/agat/spaddintrons/tests/main.nf.test +++ b/modules/gallvp/agat/spaddintrons/tests/main.nf.test @@ -5,7 +5,7 @@ nextflow_process { process "AGAT_SPADDINTRONS" tag "modules" - tag "modules_pfr" + tag "modules_gallvp" tag "agat" tag "agat/spaddintrons" diff --git a/modules/pfr/agat/spaddintrons/tests/main.nf.test.snap b/modules/gallvp/agat/spaddintrons/tests/main.nf.test.snap similarity index 100% rename from modules/pfr/agat/spaddintrons/tests/main.nf.test.snap rename to modules/gallvp/agat/spaddintrons/tests/main.nf.test.snap diff --git a/modules/pfr/agat/spextractsequences/environment.yml b/modules/gallvp/agat/spextractsequences/environment.yml similarity index 100% rename from modules/pfr/agat/spextractsequences/environment.yml rename to modules/gallvp/agat/spextractsequences/environment.yml diff --git a/modules/pfr/agat/spextractsequences/main.nf b/modules/gallvp/agat/spextractsequences/main.nf similarity index 100% rename from modules/pfr/agat/spextractsequences/main.nf rename to modules/gallvp/agat/spextractsequences/main.nf diff --git a/modules/pfr/agat/spextractsequences/meta.yml b/modules/gallvp/agat/spextractsequences/meta.yml similarity index 100% rename from modules/pfr/agat/spextractsequences/meta.yml rename to modules/gallvp/agat/spextractsequences/meta.yml diff --git a/modules/pfr/agat/spextractsequences/tests/main.nf.test b/modules/gallvp/agat/spextractsequences/tests/main.nf.test similarity index 98% rename from modules/pfr/agat/spextractsequences/tests/main.nf.test rename to modules/gallvp/agat/spextractsequences/tests/main.nf.test index 44b7986..72b5f99 100644 --- a/modules/pfr/agat/spextractsequences/tests/main.nf.test +++ b/modules/gallvp/agat/spextractsequences/tests/main.nf.test @@ -5,7 +5,7 @@ nextflow_process { process "AGAT_SPEXTRACTSEQUENCES" tag "modules" - tag "modules_pfr" + tag "modules_gallvp" tag "agat" tag "agat/spextractsequences" diff --git a/modules/pfr/agat/spextractsequences/tests/main.nf.test.snap b/modules/gallvp/agat/spextractsequences/tests/main.nf.test.snap similarity index 100% rename from modules/pfr/agat/spextractsequences/tests/main.nf.test.snap rename to modules/gallvp/agat/spextractsequences/tests/main.nf.test.snap diff --git a/modules/pfr/busco/busco/environment.yml b/modules/gallvp/busco/busco/environment.yml similarity index 100% rename from modules/pfr/busco/busco/environment.yml rename to modules/gallvp/busco/busco/environment.yml diff --git a/modules/pfr/busco/busco/main.nf b/modules/gallvp/busco/busco/main.nf similarity index 100% rename from modules/pfr/busco/busco/main.nf rename to modules/gallvp/busco/busco/main.nf diff --git a/modules/pfr/busco/busco/meta.yml b/modules/gallvp/busco/busco/meta.yml similarity index 100% rename from modules/pfr/busco/busco/meta.yml rename to modules/gallvp/busco/busco/meta.yml diff --git a/modules/pfr/busco/busco/tests/main.nf.test b/modules/gallvp/busco/busco/tests/main.nf.test similarity index 91% rename from modules/pfr/busco/busco/tests/main.nf.test rename to modules/gallvp/busco/busco/tests/main.nf.test index 16b708b..829bd28 100644 --- a/modules/pfr/busco/busco/tests/main.nf.test +++ b/modules/gallvp/busco/busco/tests/main.nf.test @@ -5,7 +5,7 @@ nextflow_process { process "BUSCO_BUSCO" tag "modules" - tag "modules_nfcore" + tag "modules_gallvp" tag "busco" tag "busco/busco" @@ -18,7 +18,7 @@ nextflow_process { """ input[0] = [ [ id:'test' ], // meta map - file( params.test_data['bacteroides_fragilis']['genome']['genome_fna_gz'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/prokaryotes/bacteroides_fragilis/genome/genome.fna.gz', checkIfExists: true) ] input[1] = 'genome' input[2] = 'bacteria_odb10' // Launch with 'auto' to use --auto-lineage, and specified lineages // 'auto' removed from test due to memory issues @@ -80,8 +80,8 @@ nextflow_process { input[0] = [ [ id:'test' ], // meta map [ - file( params.test_data['bacteroides_fragilis']['genome']['genome_fna_gz'], checkIfExists: true), - file( params.test_data['candidatus_portiera_aleyrodidarum']['genome']['genome_fasta'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/prokaryotes/bacteroides_fragilis/genome/genome.fna.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/prokaryotes/candidatus_portiera_aleyrodidarum/genome/genome.fasta', checkIfExists: true) ] ] input[1] = 'genome' @@ -165,7 +165,7 @@ nextflow_process { """ input[0] = [ [ id:'test' ], // meta map - file( params.test_data['homo_sapiens']['genome']['genome_fasta'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ] input[1] = 'genome' input[2] = 'eukaryota_odb10' @@ -208,8 +208,6 @@ nextflow_process { with(path("${process.out.busco_dir[0][1]}/logs/busco.log").text) { assert contains('DEBUG:busco.run_BUSCO') - assert contains("'use_augustus', 'False'") - assert contains("'use_metaeuk', 'True'") // METAEUK assert contains('Results from dataset') assert contains('how to cite BUSCO') @@ -230,7 +228,7 @@ nextflow_process { """ input[0] = [ [ id:'test' ], // meta map - file( params.test_data['homo_sapiens']['genome']['genome_fasta'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ] input[1] = 'genome' input[2] = 'eukaryota_odb10' @@ -250,8 +248,6 @@ nextflow_process { with(path("${process.out.busco_dir[0][1]}/logs/busco.log").text) { assert contains('DEBUG:busco.run_BUSCO') - assert contains("'use_augustus', 'True'") - assert contains("'use_metaeuk', 'False'") // AUGUSTUS assert contains('Augustus did not recognize any genes') } @@ -275,7 +271,7 @@ nextflow_process { """ input[0] = [ [ id:'test' ], // meta map - file( params.test_data['candidatus_portiera_aleyrodidarum']['genome']['proteome_fasta'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/prokaryotes/candidatus_portiera_aleyrodidarum/genome/proteome.fasta', checkIfExists: true) ] input[1] = 'proteins' input[2] = 'bacteria_odb10' @@ -337,7 +333,7 @@ nextflow_process { """ input[0] = [ [ id:'test' ], // meta map - file( params.test_data['bacteroides_fragilis']['illumina']['test1_contigs_fa_gz'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/prokaryotes/bacteroides_fragilis/illumina/fasta/test1.contigs.fa.gz', checkIfExists: true) ] input[1] = 'transcriptome' input[2] = 'bacteria_odb10' @@ -398,7 +394,7 @@ nextflow_process { """ input[0] = [ [ id:'test' ], // meta map - file( params.test_data['bacteroides_fragilis']['genome']['genome_fna_gz'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/prokaryotes/bacteroides_fragilis/genome/genome.fna.gz', checkIfExists: true) ] input[1] = 'genome' input[2] = 'bacteria_odb10' diff --git a/modules/pfr/busco/busco/tests/main.nf.test.snap b/modules/gallvp/busco/busco/tests/main.nf.test.snap similarity index 100% rename from modules/pfr/busco/busco/tests/main.nf.test.snap rename to modules/gallvp/busco/busco/tests/main.nf.test.snap diff --git a/modules/pfr/busco/busco/tests/nextflow.augustus.config b/modules/gallvp/busco/busco/tests/nextflow.augustus.config similarity index 100% rename from modules/pfr/busco/busco/tests/nextflow.augustus.config rename to modules/gallvp/busco/busco/tests/nextflow.augustus.config diff --git a/modules/pfr/busco/busco/tests/nextflow.config b/modules/gallvp/busco/busco/tests/nextflow.config similarity index 100% rename from modules/pfr/busco/busco/tests/nextflow.config rename to modules/gallvp/busco/busco/tests/nextflow.config diff --git a/modules/pfr/busco/busco/tests/nextflow.metaeuk.config b/modules/gallvp/busco/busco/tests/nextflow.metaeuk.config similarity index 100% rename from modules/pfr/busco/busco/tests/nextflow.metaeuk.config rename to modules/gallvp/busco/busco/tests/nextflow.metaeuk.config diff --git a/modules/pfr/busco/busco/tests/old_test.yml b/modules/gallvp/busco/busco/tests/old_test.yml similarity index 100% rename from modules/pfr/busco/busco/tests/old_test.yml rename to modules/gallvp/busco/busco/tests/old_test.yml diff --git a/modules/pfr/busco/busco/tests/tags.yml b/modules/gallvp/busco/busco/tests/tags.yml similarity index 100% rename from modules/pfr/busco/busco/tests/tags.yml rename to modules/gallvp/busco/busco/tests/tags.yml diff --git a/modules/pfr/busco/generateplot/environment.yml b/modules/gallvp/busco/generateplot/environment.yml similarity index 100% rename from modules/pfr/busco/generateplot/environment.yml rename to modules/gallvp/busco/generateplot/environment.yml diff --git a/modules/pfr/busco/generateplot/main.nf b/modules/gallvp/busco/generateplot/main.nf similarity index 100% rename from modules/pfr/busco/generateplot/main.nf rename to modules/gallvp/busco/generateplot/main.nf diff --git a/modules/pfr/busco/generateplot/meta.yml b/modules/gallvp/busco/generateplot/meta.yml similarity index 100% rename from modules/pfr/busco/generateplot/meta.yml rename to modules/gallvp/busco/generateplot/meta.yml diff --git a/modules/pfr/busco/generateplot/tests/main.nf.test b/modules/gallvp/busco/generateplot/tests/main.nf.test similarity index 82% rename from modules/pfr/busco/generateplot/tests/main.nf.test rename to modules/gallvp/busco/generateplot/tests/main.nf.test index 853dc5e..6a43fa7 100644 --- a/modules/pfr/busco/generateplot/tests/main.nf.test +++ b/modules/gallvp/busco/generateplot/tests/main.nf.test @@ -5,7 +5,7 @@ nextflow_process { process "BUSCO_GENERATEPLOT" tag "modules" - tag "modules_nfcore" + tag "modules_gallvp" tag "busco" tag "busco/busco" tag "busco/generateplot" @@ -19,7 +19,7 @@ nextflow_process { """ input[0] = [ [ id:'test' ], // meta map - file(params.test_data['bacteroides_fragilis']['genome']['genome_fna_gz'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/prokaryotes/bacteroides_fragilis/genome/genome.fna.gz', checkIfExists: true) ] input[1] = 'genome' input[2] = 'bacteria_odb10' @@ -55,7 +55,7 @@ nextflow_process { when { process { """ - input[0] = file(params.test_data['bacteroides_fragilis']['genome']['genome_fna_gz'], checkIfExists: true) + input[0] = file(params.modules_testdata_base_path + 'genomics/prokaryotes/bacteroides_fragilis/genome/genome.fna.gz', checkIfExists: true) """ } } diff --git a/modules/pfr/busco/generateplot/tests/main.nf.test.snap b/modules/gallvp/busco/generateplot/tests/main.nf.test.snap similarity index 100% rename from modules/pfr/busco/generateplot/tests/main.nf.test.snap rename to modules/gallvp/busco/generateplot/tests/main.nf.test.snap diff --git a/modules/pfr/busco/generateplot/tests/tags.yml b/modules/gallvp/busco/generateplot/tests/tags.yml similarity index 100% rename from modules/pfr/busco/generateplot/tests/tags.yml rename to modules/gallvp/busco/generateplot/tests/tags.yml diff --git a/modules/pfr/custom/restoregffids/environment.yml b/modules/gallvp/custom/restoregffids/environment.yml similarity index 100% rename from modules/pfr/custom/restoregffids/environment.yml rename to modules/gallvp/custom/restoregffids/environment.yml diff --git a/modules/pfr/custom/restoregffids/main.nf b/modules/gallvp/custom/restoregffids/main.nf similarity index 100% rename from modules/pfr/custom/restoregffids/main.nf rename to modules/gallvp/custom/restoregffids/main.nf diff --git a/modules/pfr/custom/restoregffids/meta.yml b/modules/gallvp/custom/restoregffids/meta.yml similarity index 100% rename from modules/pfr/custom/restoregffids/meta.yml rename to modules/gallvp/custom/restoregffids/meta.yml diff --git a/modules/pfr/custom/restoregffids/templates/restore_gff_ids.py b/modules/gallvp/custom/restoregffids/templates/restore_gff_ids.py similarity index 100% rename from modules/pfr/custom/restoregffids/templates/restore_gff_ids.py rename to modules/gallvp/custom/restoregffids/templates/restore_gff_ids.py diff --git a/modules/pfr/custom/restoregffids/tests/main.nf.test b/modules/gallvp/custom/restoregffids/tests/main.nf.test similarity index 85% rename from modules/pfr/custom/restoregffids/tests/main.nf.test rename to modules/gallvp/custom/restoregffids/tests/main.nf.test index 20aa85c..2c248c9 100644 --- a/modules/pfr/custom/restoregffids/tests/main.nf.test +++ b/modules/gallvp/custom/restoregffids/tests/main.nf.test @@ -5,7 +5,7 @@ nextflow_process { process "CUSTOM_RESTOREGFFIDS" tag "modules" - tag "modules_nfcore" + tag "modules_gallvp" tag "custom" tag "custom/restoregffids" @@ -15,7 +15,7 @@ nextflow_process { """ input[0] = [ [ id:'test', single_end:false ], // meta map - file(params.test_data['sarscov2']['genome']['genome_gff3'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.gff3', checkIfExists: true) ] input[1] = Channel.of('Chr1\tMT192765.1').collectFile(name: 'id_map.tsv', newLine: true) """ @@ -43,7 +43,7 @@ nextflow_process { """ input[0] = [ [ id:'test', single_end:false ], // meta map - file(params.test_data['sarscov2']['genome']['genome_gff3'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.gff3', checkIfExists: true) ] input[1] = Channel.of('Chr1\tMT192765.1').collectFile(name: 'id_map.tsv', newLine: true) """ diff --git a/modules/pfr/custom/restoregffids/tests/main.nf.test.snap b/modules/gallvp/custom/restoregffids/tests/main.nf.test.snap similarity index 100% rename from modules/pfr/custom/restoregffids/tests/main.nf.test.snap rename to modules/gallvp/custom/restoregffids/tests/main.nf.test.snap diff --git a/modules/pfr/custom/shortenfastaids/environment.yml b/modules/gallvp/custom/shortenfastaids/environment.yml similarity index 100% rename from modules/pfr/custom/shortenfastaids/environment.yml rename to modules/gallvp/custom/shortenfastaids/environment.yml diff --git a/modules/pfr/custom/shortenfastaids/main.nf b/modules/gallvp/custom/shortenfastaids/main.nf similarity index 100% rename from modules/pfr/custom/shortenfastaids/main.nf rename to modules/gallvp/custom/shortenfastaids/main.nf diff --git a/modules/pfr/custom/shortenfastaids/meta.yml b/modules/gallvp/custom/shortenfastaids/meta.yml similarity index 100% rename from modules/pfr/custom/shortenfastaids/meta.yml rename to modules/gallvp/custom/shortenfastaids/meta.yml diff --git a/modules/pfr/custom/shortenfastaids/templates/shorten_fasta_ids.py b/modules/gallvp/custom/shortenfastaids/templates/shorten_fasta_ids.py similarity index 88% rename from modules/pfr/custom/shortenfastaids/templates/shorten_fasta_ids.py rename to modules/gallvp/custom/shortenfastaids/templates/shorten_fasta_ids.py index 0ce4390..9d9c6e1 100755 --- a/modules/pfr/custom/shortenfastaids/templates/shorten_fasta_ids.py +++ b/modules/gallvp/custom/shortenfastaids/templates/shorten_fasta_ids.py @@ -61,12 +61,7 @@ def do_id_need_to_change(id_and_description, silent=False): def do_ids_need_to_change(ids_and_descriptions, silent=False): - return any( - [ - do_id_need_to_change(id_and_description, silent) - for id_and_description in ids_and_descriptions - ] - ) + return any([do_id_need_to_change(id_and_description, silent) for id_and_description in ids_and_descriptions]) def extract_common_patterns(ids): @@ -76,9 +71,7 @@ def extract_common_patterns(ids): for pattern in set(patterns): pattern_counts[pattern] = pattern_counts.get(pattern, 0) + 1 - common_patterns = [ - pattern for pattern, count in pattern_counts.items() if count >= 2 - ] + common_patterns = [pattern for pattern, count in pattern_counts.items() if count >= 2] if len(common_patterns) < 1: return {} @@ -126,11 +119,7 @@ def shorten_id_by_pattern_replacement(patterns_dict, id): patterns_dict[pattern], shortened_id, ) - return ( - shortened_id - if shortened_id[len(shortened_id) - 1] != "_" - else shortened_id[0 : (len(shortened_id) - 1)] - ) + return shortened_id if shortened_id[len(shortened_id) - 1] != "_" else shortened_id[0 : (len(shortened_id) - 1)] def match_substrings(substrings, target_string): @@ -169,15 +158,11 @@ def fail_if_new_ids_not_valid(ids): f.write("IDs have acceptable length and character. No change required.") exit(0) - new_ids = shorten_ids( - input_ids_and_descriptions, extract_common_patterns(input_ids) - ) + new_ids = shorten_ids(input_ids_and_descriptions, extract_common_patterns(input_ids)) fail_if_new_ids_not_valid(new_ids) with open(f"{output_files_prefix}.short.ids.tsv", "w") as f: for input_id, new_id in zip(input_ids, new_ids): f.write(f"{input_id}\\t{new_id}\\n") - write_fasta_with_new_ids( - fasta_file_path, zip(input_ids, new_ids), output_files_prefix - ) + write_fasta_with_new_ids(fasta_file_path, zip(input_ids, new_ids), output_files_prefix) diff --git a/modules/pfr/custom/shortenfastaids/tests/main.nf.test b/modules/gallvp/custom/shortenfastaids/tests/main.nf.test similarity index 81% rename from modules/pfr/custom/shortenfastaids/tests/main.nf.test rename to modules/gallvp/custom/shortenfastaids/tests/main.nf.test index c87e8eb..8eb2099 100644 --- a/modules/pfr/custom/shortenfastaids/tests/main.nf.test +++ b/modules/gallvp/custom/shortenfastaids/tests/main.nf.test @@ -5,7 +5,7 @@ nextflow_process { process "CUSTOM_SHORTENFASTAIDS" tag "modules" - tag "modules_pfr" + tag "modules_gallvp" tag "custom" tag "custom/shortenfastaids" @@ -16,7 +16,7 @@ nextflow_process { """ input[0] = [ [ id:'test' ], - file(params.test_data['homo_sapiens']['genome']['genome_fasta'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ] """ } @@ -38,7 +38,7 @@ nextflow_process { """ input[0] = [ [ id:'test' ], - file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) ] """ } @@ -60,7 +60,7 @@ nextflow_process { """ input[0] = [ [ id:'test' ], - file(params.test_data['homo_sapiens']['genome']['genome2_fasta'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome2.fasta', checkIfExists: true) ] """ } @@ -105,7 +105,7 @@ nextflow_process { """ input[0] = [ [ id:'test' ], - file(params.test_data['homo_sapiens']['genome']['genome_fasta'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ] """ } diff --git a/modules/pfr/custom/shortenfastaids/tests/main.nf.test.snap b/modules/gallvp/custom/shortenfastaids/tests/main.nf.test.snap similarity index 100% rename from modules/pfr/custom/shortenfastaids/tests/main.nf.test.snap rename to modules/gallvp/custom/shortenfastaids/tests/main.nf.test.snap diff --git a/modules/pfr/edta/edta/main.nf b/modules/gallvp/edta/edta/main.nf similarity index 100% rename from modules/pfr/edta/edta/main.nf rename to modules/gallvp/edta/edta/main.nf diff --git a/modules/pfr/edta/edta/meta.yml b/modules/gallvp/edta/edta/meta.yml similarity index 100% rename from modules/pfr/edta/edta/meta.yml rename to modules/gallvp/edta/edta/meta.yml diff --git a/modules/pfr/edta/edta/tests/main.nf.test b/modules/gallvp/edta/edta/tests/main.nf.test similarity index 85% rename from modules/pfr/edta/edta/tests/main.nf.test rename to modules/gallvp/edta/edta/tests/main.nf.test index 4963741..b3ec30c 100644 --- a/modules/pfr/edta/edta/tests/main.nf.test +++ b/modules/gallvp/edta/edta/tests/main.nf.test @@ -6,7 +6,7 @@ nextflow_process { config "./nextflow.config" tag "modules" - tag "modules_pfr" + tag "modules_gallvp" tag "edta" tag "edta/edta" tag "modules/nf-core/gunzip" @@ -21,7 +21,7 @@ nextflow_process { """ input[0] = [ [ id:'test' ], - file(params.test_data['actinidia_chinensis']['genome']['genome_1_fasta_gz'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/eukaryotes/actinidia_chinensis/genome/chr1/genome.fasta.gz', checkIfExists: true) ] """ } @@ -62,7 +62,7 @@ nextflow_process { """ input[0] = [ [ id:'test' ], // meta map - file(params.test_data['homo_sapiens']['genome']['genome_fasta'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ] input[1] = [] input[2] = [] diff --git a/modules/pfr/edta/edta/tests/main.nf.test.snap b/modules/gallvp/edta/edta/tests/main.nf.test.snap similarity index 100% rename from modules/pfr/edta/edta/tests/main.nf.test.snap rename to modules/gallvp/edta/edta/tests/main.nf.test.snap diff --git a/modules/pfr/edta/edta/tests/nextflow.config b/modules/gallvp/edta/edta/tests/nextflow.config similarity index 100% rename from modules/pfr/edta/edta/tests/nextflow.config rename to modules/gallvp/edta/edta/tests/nextflow.config diff --git a/modules/pfr/gffread/environment.yml b/modules/gallvp/gffread/environment.yml similarity index 100% rename from modules/pfr/gffread/environment.yml rename to modules/gallvp/gffread/environment.yml diff --git a/modules/pfr/gffread/main.nf b/modules/gallvp/gffread/main.nf similarity index 100% rename from modules/pfr/gffread/main.nf rename to modules/gallvp/gffread/main.nf diff --git a/modules/pfr/gffread/meta.yml b/modules/gallvp/gffread/meta.yml similarity index 100% rename from modules/pfr/gffread/meta.yml rename to modules/gallvp/gffread/meta.yml diff --git a/modules/pfr/gffread/tests/main.nf.test b/modules/gallvp/gffread/tests/main.nf.test similarity index 99% rename from modules/pfr/gffread/tests/main.nf.test rename to modules/gallvp/gffread/tests/main.nf.test index 4cd13dc..17b2ee6 100644 --- a/modules/pfr/gffread/tests/main.nf.test +++ b/modules/gallvp/gffread/tests/main.nf.test @@ -5,7 +5,7 @@ nextflow_process { process "GFFREAD" tag "gffread" - tag "modules_nfcore" + tag "modules_gallvp" tag "modules" test("sarscov2-gff3-gtf") { diff --git a/modules/pfr/gffread/tests/main.nf.test.snap b/modules/gallvp/gffread/tests/main.nf.test.snap similarity index 100% rename from modules/pfr/gffread/tests/main.nf.test.snap rename to modules/gallvp/gffread/tests/main.nf.test.snap diff --git a/modules/pfr/gffread/tests/nextflow-fasta.config b/modules/gallvp/gffread/tests/nextflow-fasta.config similarity index 100% rename from modules/pfr/gffread/tests/nextflow-fasta.config rename to modules/gallvp/gffread/tests/nextflow-fasta.config diff --git a/modules/pfr/gffread/tests/nextflow-gff3.config b/modules/gallvp/gffread/tests/nextflow-gff3.config similarity index 100% rename from modules/pfr/gffread/tests/nextflow-gff3.config rename to modules/gallvp/gffread/tests/nextflow-gff3.config diff --git a/modules/pfr/gffread/tests/nextflow.config b/modules/gallvp/gffread/tests/nextflow.config similarity index 100% rename from modules/pfr/gffread/tests/nextflow.config rename to modules/gallvp/gffread/tests/nextflow.config diff --git a/modules/pfr/gffread/tests/tags.yml b/modules/gallvp/gffread/tests/tags.yml similarity index 100% rename from modules/pfr/gffread/tests/tags.yml rename to modules/gallvp/gffread/tests/tags.yml diff --git a/modules/pfr/ltrretriever/lai/environment.yml b/modules/gallvp/ltrretriever/lai/environment.yml similarity index 100% rename from modules/pfr/ltrretriever/lai/environment.yml rename to modules/gallvp/ltrretriever/lai/environment.yml diff --git a/modules/pfr/ltrretriever/lai/main.nf b/modules/gallvp/ltrretriever/lai/main.nf similarity index 100% rename from modules/pfr/ltrretriever/lai/main.nf rename to modules/gallvp/ltrretriever/lai/main.nf diff --git a/modules/pfr/ltrretriever/lai/meta.yml b/modules/gallvp/ltrretriever/lai/meta.yml similarity index 100% rename from modules/pfr/ltrretriever/lai/meta.yml rename to modules/gallvp/ltrretriever/lai/meta.yml diff --git a/modules/pfr/ltrretriever/lai/tests/main.nf.test b/modules/gallvp/ltrretriever/lai/tests/main.nf.test similarity index 89% rename from modules/pfr/ltrretriever/lai/tests/main.nf.test rename to modules/gallvp/ltrretriever/lai/tests/main.nf.test index a617811..e428918 100644 --- a/modules/pfr/ltrretriever/lai/tests/main.nf.test +++ b/modules/gallvp/ltrretriever/lai/tests/main.nf.test @@ -6,7 +6,7 @@ nextflow_process { config "./nextflow.config" tag "modules" - tag "modules_nfcore" + tag "modules_gallvp" tag "gunzip" tag "ltrretriever" tag "ltrretriever/ltrretriever" @@ -26,7 +26,7 @@ nextflow_process { """ input[0] = [ [ id:'test' ], - file(params.test_data['actinidia_chinensis']['genome']['genome_21_fasta_gz'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/eukaryotes/actinidia_chinensis/genome/chr1/genome.fasta.gz', checkIfExists: true) ] """ } @@ -114,7 +114,7 @@ nextflow_process { input[0] = [ [ id:'test' ], - file(params.test_data['actinidia_chinensis']['genome']['genome_21_fasta_gz'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/eukaryotes/actinidia_chinensis/genome/chr1/genome.fasta.gz', checkIfExists: true) ] input[1] = pass_list.toPath() input[2] = out_file.toPath() @@ -145,7 +145,7 @@ nextflow_process { input[0] = [ [ id:'test' ], - file(params.test_data['actinidia_chinensis']['genome']['genome_21_fasta_gz'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/eukaryotes/actinidia_chinensis/genome/chr1/genome.fasta.gz', checkIfExists: true) ] input[1] = pass_list.toPath() input[2] = out_file.toPath() @@ -163,4 +163,4 @@ nextflow_process { } -} \ No newline at end of file +} diff --git a/modules/pfr/ltrretriever/lai/tests/main.nf.test.snap b/modules/gallvp/ltrretriever/lai/tests/main.nf.test.snap similarity index 100% rename from modules/pfr/ltrretriever/lai/tests/main.nf.test.snap rename to modules/gallvp/ltrretriever/lai/tests/main.nf.test.snap diff --git a/modules/pfr/ltrretriever/lai/tests/nextflow.config b/modules/gallvp/ltrretriever/lai/tests/nextflow.config similarity index 100% rename from modules/pfr/ltrretriever/lai/tests/nextflow.config rename to modules/gallvp/ltrretriever/lai/tests/nextflow.config diff --git a/modules/pfr/ltrretriever/lai/tests/tags.yml b/modules/gallvp/ltrretriever/lai/tests/tags.yml similarity index 100% rename from modules/pfr/ltrretriever/lai/tests/tags.yml rename to modules/gallvp/ltrretriever/lai/tests/tags.yml diff --git a/modules/pfr/agat/spaddintrons/tests/tags.yml b/modules/pfr/agat/spaddintrons/tests/tags.yml deleted file mode 100644 index c407b01..0000000 --- a/modules/pfr/agat/spaddintrons/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -agat/spaddintrons: - - "modules/pfr/agat/spaddintrons/**" diff --git a/modules/pfr/agat/spextractsequences/tests/tags.yml b/modules/pfr/agat/spextractsequences/tests/tags.yml deleted file mode 100644 index 31ec6c0..0000000 --- a/modules/pfr/agat/spextractsequences/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -agat/spextractsequences: - - "modules/pfr/agat/spextractsequences/**" diff --git a/modules/pfr/agat/spfilterfeaturefromkilllist/environment.yml b/modules/pfr/agat/spfilterfeaturefromkilllist/environment.yml deleted file mode 100644 index b0811b4..0000000 --- a/modules/pfr/agat/spfilterfeaturefromkilllist/environment.yml +++ /dev/null @@ -1,9 +0,0 @@ ---- -# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json -name: "agat_spfilterfeaturefromkilllist" -channels: - - conda-forge - - bioconda - - defaults -dependencies: - - "bioconda::agat=1.3.3" diff --git a/modules/pfr/agat/spfilterfeaturefromkilllist/main.nf b/modules/pfr/agat/spfilterfeaturefromkilllist/main.nf deleted file mode 100644 index ffb91d1..0000000 --- a/modules/pfr/agat/spfilterfeaturefromkilllist/main.nf +++ /dev/null @@ -1,53 +0,0 @@ -process AGAT_SPFILTERFEATUREFROMKILLLIST { - tag "$meta.id" - label 'process_single' - - conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/agat:1.3.3--pl5321hdfd78af_0': - 'biocontainers/agat:1.3.3--pl5321hdfd78af_0' }" - - input: - tuple val(meta), path(gff) - path kill_list - path config - - output: - tuple val(meta), path("*.gff"), emit: gff - path "versions.yml" , emit: versions - - when: - task.ext.when == null || task.ext.when - - script: - def args = task.ext.args ?: '' - def prefix = task.ext.prefix ?: "${meta.id}" - def config_param = config ? "--config $config" : '' - if( "$gff" == "${prefix}.gff" ) error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!" - """ - agat_sp_filter_feature_from_kill_list.pl \\ - --gff $gff \\ - --kill_list $kill_list \\ - $config_param \\ - $args \\ - --output "${prefix}.gff" - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - agat: \$(agat_sp_filter_feature_from_kill_list.pl -h | sed -n 's/.*(AGAT) - Version: \\(.*\\) .*/\\1/p') - END_VERSIONS - """ - - stub: - def args = task.ext.args ?: '' - def prefix = task.ext.prefix ?: "${meta.id}" - if( "$gff" == "${prefix}.gff" ) error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!" - """ - touch "${prefix}.gff" - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - agat: \$(agat_sp_filter_feature_from_kill_list.pl -h | sed -n 's/.*(AGAT) - Version: \\(.*\\) .*/\\1/p') - END_VERSIONS - """ -} diff --git a/modules/pfr/agat/spfilterfeaturefromkilllist/meta.yml b/modules/pfr/agat/spfilterfeaturefromkilllist/meta.yml deleted file mode 100644 index d408fe7..0000000 --- a/modules/pfr/agat/spfilterfeaturefromkilllist/meta.yml +++ /dev/null @@ -1,60 +0,0 @@ ---- -# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/meta-schema.json -name: "agat_spfilterfeaturefromkilllist" -description: | - The script aims to remove features based on a kill list. The default behaviour is to look at the features's ID. - If the feature has an ID (case insensitive) listed among the kill list it will be removed. /!\ Removing a level1 - or level2 feature will automatically remove all linked subfeatures, and removing all children of a feature will - automatically remove this feature too. -keywords: - - genomics - - gff - - remove - - feature -tools: - - "agat": - description: "Another Gff Analysis Toolkit (AGAT). Suite of tools to handle gene annotations in any GTF/GFF format." - homepage: "https://agat.readthedocs.io/en/latest/" - documentation: "https://agat.readthedocs.io/en/latest/tools/agat_sp_filter_feature_from_kill_list.html" - tool_dev_url: "https://github.com/NBISweden/AGAT" - doi: "10.5281/zenodo.3552717" - licence: ["GPL v3"] -input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. `[ id:'sample1', single_end:false ]` - - gff: - type: file - description: Input GFF3 file that will be read - pattern: "*.{gff,gff3}" - - kill_list: - type: file - description: Kill list. One value per line. - pattern: "*.txt" - - config: - type: file - description: | - Input agat config file. By default AGAT takes as input agat_config.yaml file from the working directory if any, otherwise it takes the orignal agat_config.yaml shipped with AGAT. To get the agat_config.yaml locally type: "agat config --expose". The --config option gives you the possibility to use your own AGAT config file (located elsewhere or named differently). - pattern: "*.yaml" - -output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. `[ id:'sample1', single_end:false ] - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - - gff: - type: file - description: Output GFF file. - pattern: "*.gff" - -authors: - - "@GallVp" -maintainers: - - "@GallVp" diff --git a/modules/pfr/agat/spfilterfeaturefromkilllist/tests/main.nf.test b/modules/pfr/agat/spfilterfeaturefromkilllist/tests/main.nf.test deleted file mode 100644 index 891e0a7..0000000 --- a/modules/pfr/agat/spfilterfeaturefromkilllist/tests/main.nf.test +++ /dev/null @@ -1,74 +0,0 @@ -nextflow_process { - - name "Test Process AGAT_SPFILTERFEATUREFROMKILLLIST" - script "../main.nf" - process "AGAT_SPFILTERFEATUREFROMKILLLIST" - - tag "modules" - tag "modules_nfcore" - tag "agat" - tag "agat/spfilterfeaturefromkilllist" - - test("sarscov2-genome_gff3") { - - when { - process { - """ - input[0] = [ - [ id:'test' ], // meta map - file(params.test_data['sarscov2']['genome']['genome_gff3'], checkIfExists: true) - ] - - def kill_list = "unknown_transcript_1" - def kill_list_file = new File('kill.list.txt') - kill_list_file.text = kill_list - - input[1] = kill_list_file.toPath() - - input[2] = [] - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(process.out).match() } - ) - } - - } - - test("sarscov2-genome_gff3-stub") { - - options "-stub" - - when { - process { - """ - input[0] = [ - [ id:'test' ], // meta map - file(params.test_data['sarscov2']['genome']['genome_gff3'], checkIfExists: true) - ] - - def kill_list = "unknown_transcript_1" - def kill_list_file = new File('kill.list.txt') - kill_list_file.text = kill_list - - input[1] = kill_list_file.toPath() - - input[2] = [] - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(process.out).match() } - ) - } - - } - -} \ No newline at end of file diff --git a/modules/pfr/agat/spfilterfeaturefromkilllist/tests/main.nf.test.snap b/modules/pfr/agat/spfilterfeaturefromkilllist/tests/main.nf.test.snap deleted file mode 100644 index bbc8cea..0000000 --- a/modules/pfr/agat/spfilterfeaturefromkilllist/tests/main.nf.test.snap +++ /dev/null @@ -1,68 +0,0 @@ -{ - "sarscov2-genome_gff3-stub": { - "content": [ - { - "0": [ - [ - { - "id": "test" - }, - "test.gff:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "1": [ - "versions.yml:md5,ace24108f514da465e068372b18d4651" - ], - "gff": [ - [ - { - "id": "test" - }, - "test.gff:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "versions": [ - "versions.yml:md5,ace24108f514da465e068372b18d4651" - ] - } - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-04-02T13:29:56.638311" - }, - "sarscov2-genome_gff3": { - "content": [ - { - "0": [ - [ - { - "id": "test" - }, - "test.gff:md5,df19e1b84ba6f691d20c72b397c88abf" - ] - ], - "1": [ - "versions.yml:md5,ace24108f514da465e068372b18d4651" - ], - "gff": [ - [ - { - "id": "test" - }, - "test.gff:md5,df19e1b84ba6f691d20c72b397c88abf" - ] - ], - "versions": [ - "versions.yml:md5,ace24108f514da465e068372b18d4651" - ] - } - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-04-02T13:11:42.236263" - } -} \ No newline at end of file diff --git a/modules/pfr/agat/spfilterfeaturefromkilllist/tests/tags.yml b/modules/pfr/agat/spfilterfeaturefromkilllist/tests/tags.yml deleted file mode 100644 index 2ab17b0..0000000 --- a/modules/pfr/agat/spfilterfeaturefromkilllist/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -agat/spfilterfeaturefromkilllist: - - "modules/pfr/agat/spfilterfeaturefromkilllist/**" diff --git a/modules/pfr/agat/spmergeannotations/environment.yml b/modules/pfr/agat/spmergeannotations/environment.yml deleted file mode 100644 index 6df7aea..0000000 --- a/modules/pfr/agat/spmergeannotations/environment.yml +++ /dev/null @@ -1,9 +0,0 @@ ---- -# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json -name: "agat_spmergeannotations" -channels: - - conda-forge - - bioconda - - defaults -dependencies: - - "bioconda::agat=1.3.3" diff --git a/modules/pfr/agat/spmergeannotations/main.nf b/modules/pfr/agat/spmergeannotations/main.nf deleted file mode 100644 index 7738ac5..0000000 --- a/modules/pfr/agat/spmergeannotations/main.nf +++ /dev/null @@ -1,53 +0,0 @@ -process AGAT_SPMERGEANNOTATIONS { - tag "$meta.id" - label 'process_single' - - conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/agat:1.3.3--pl5321hdfd78af_0': - 'biocontainers/agat:1.3.3--pl5321hdfd78af_0' }" - - input: - tuple val(meta), path(gffs) - path config - - output: - tuple val(meta), path("*.gff") , emit: gff - path "versions.yml" , emit: versions - - when: - task.ext.when == null || task.ext.when - - script: - def args = task.ext.args ?: '' - def prefix = task.ext.prefix ?: "${meta.id}" - def config_param = config ? "--config $config" : '' - def gff_param = "$gffs".split(' ').collect { "--gff $it" }.join(' ') - def file_names = gffs.collect { "$it" } - if ( file_names.contains ( "${prefix}.gff" ) ) error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!" - """ - agat_sp_merge_annotations.pl \\ - $gff_param \\ - $config_param \\ - $args \\ - --output ${prefix}.gff - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - agat: \$(agat_sp_merge_annotations.pl -h | sed -n 's/.*(AGAT) - Version: \\(.*\\) .*/\\1/p') - END_VERSIONS - """ - - stub: - def prefix = task.ext.prefix ?: "${meta.id}" - def file_names = gffs.collect { "$it" } - if ( file_names.contains ( "${prefix}.gff" ) ) error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!" - """ - touch ${prefix}.gff - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - agat: \$(agat_sp_merge_annotations.pl -h | sed -n 's/.*(AGAT) - Version: \\(.*\\) .*/\\1/p') - END_VERSIONS - """ -} diff --git a/modules/pfr/agat/spmergeannotations/meta.yml b/modules/pfr/agat/spmergeannotations/meta.yml deleted file mode 100644 index afa9ddd..0000000 --- a/modules/pfr/agat/spmergeannotations/meta.yml +++ /dev/null @@ -1,54 +0,0 @@ ---- -# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/meta-schema.json -name: "agat_spmergeannotations" -description: | - This script merge different gff annotation files in one. It uses the AGAT parser that takes care of duplicated names and fixes other oddities met in those files. -keywords: - - genomics - - gff - - merge - - combine -tools: - - "agat": - description: "Another Gff Analysis Toolkit (AGAT). Suite of tools to handle gene annotations in any GTF/GFF format." - homepage: "https://agat.readthedocs.io/en/latest/" - documentation: "https://agat.readthedocs.io/en/latest/tools/agat_sp_merge_annotations.html" - tool_dev_url: "https://github.com/NBISweden/AGAT" - doi: "10.5281/zenodo.3552717" - licence: ["GPL v3"] -input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. `[ id:'sample1' ]` - - gffs: - type: list - description: A list of GFFs to merge - pattern: "[ *.{gff,gff3} ]" - - config: - type: file - description: | - Input agat config file. By default AGAT takes as input agat_config.yaml file from the working directory if any, - otherwise it takes the orignal agat_config.yaml shipped with AGAT. To get the agat_config.yaml - locally type: "agat config --expose". The --config option gives you the possibility to use your - own AGAT config file (located elsewhere or named differently). - pattern: "*.yaml" -output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. `[ id:'sample1' ]` - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - - gff: - type: file - description: Output GFF file. - pattern: "*.gff" -authors: - - "@GallVp" -maintainers: - - "@GallVp" diff --git a/modules/pfr/agat/spmergeannotations/tests/main.nf.test b/modules/pfr/agat/spmergeannotations/tests/main.nf.test deleted file mode 100644 index 5e25599..0000000 --- a/modules/pfr/agat/spmergeannotations/tests/main.nf.test +++ /dev/null @@ -1,71 +0,0 @@ -nextflow_process { - - name "Test Process AGAT_SPMERGEANNOTATIONS" - script "../main.nf" - process "AGAT_SPMERGEANNOTATIONS" - - tag "modules" - tag "modules_nfcore" - tag "agat" - tag "agat/spmergeannotations" - - test("candidatus_portiera_aleyrodidarum-multi_gffs") { - - when { - process { - """ - input[0] = [ - [ id:'test' ], // meta map - [ - file(params.test_data['candidatus_portiera_aleyrodidarum']['genome']['test1_gff'], checkIfExists: true), - file(params.test_data['candidatus_portiera_aleyrodidarum']['genome']['test2_gff'], checkIfExists: true), - file(params.test_data['candidatus_portiera_aleyrodidarum']['genome']['test3_gff'], checkIfExists: true), - ] - ] - - input[1] = [] - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert path(process.out.gff[0][1]).text.contains('AGAT gene') }, - { assert snapshot(process.out.versions).match("versions") } - ) - } - - } - - test("candidatus_portiera_aleyrodidarum-multi_gffs-stub") { - - options '-stub' - - when { - process { - """ - input[0] = [ - [ id:'test' ], // meta map - [ - file(params.test_data['candidatus_portiera_aleyrodidarum']['genome']['test1_gff'], checkIfExists: true), - file(params.test_data['candidatus_portiera_aleyrodidarum']['genome']['test2_gff'], checkIfExists: true), - file(params.test_data['candidatus_portiera_aleyrodidarum']['genome']['test3_gff'], checkIfExists: true), - ] - ] - - input[1] = [] - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(process.out).match() } - ) - } - - } - -} \ No newline at end of file diff --git a/modules/pfr/agat/spmergeannotations/tests/main.nf.test.snap b/modules/pfr/agat/spmergeannotations/tests/main.nf.test.snap deleted file mode 100644 index c7e2154..0000000 --- a/modules/pfr/agat/spmergeannotations/tests/main.nf.test.snap +++ /dev/null @@ -1,47 +0,0 @@ -{ - "versions": { - "content": [ - [ - "versions.yml:md5,0ae449590befbaac9269ad8a7a84b66d" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-04-02T17:08:15.459625" - }, - "candidatus_portiera_aleyrodidarum-multi_gffs-stub": { - "content": [ - { - "0": [ - [ - { - "id": "test" - }, - "test.gff:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "1": [ - "versions.yml:md5,0ae449590befbaac9269ad8a7a84b66d" - ], - "gff": [ - [ - { - "id": "test" - }, - "test.gff:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "versions": [ - "versions.yml:md5,0ae449590befbaac9269ad8a7a84b66d" - ] - } - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-04-02T17:08:20.581403" - } -} \ No newline at end of file diff --git a/modules/pfr/agat/spmergeannotations/tests/tags.yml b/modules/pfr/agat/spmergeannotations/tests/tags.yml deleted file mode 100644 index 7d9b839..0000000 --- a/modules/pfr/agat/spmergeannotations/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -agat/spmergeannotations: - - "modules/pfr/agat/spmergeannotations/**" diff --git a/modules/pfr/custom/restoregffids/tests/tags.yml b/modules/pfr/custom/restoregffids/tests/tags.yml deleted file mode 100644 index 1d4b9a8..0000000 --- a/modules/pfr/custom/restoregffids/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -custom/restoregffids: - - "modules/pfr/custom/restoregffids/**" diff --git a/modules/pfr/custom/shortenfastaids/tests/tags.yml b/modules/pfr/custom/shortenfastaids/tests/tags.yml deleted file mode 100644 index 4715b64..0000000 --- a/modules/pfr/custom/shortenfastaids/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -custom/shortenfastaids: - - "modules/pfr/custom/shortenfastaids/**" diff --git a/modules/pfr/edta/edta/tests/tags.yml b/modules/pfr/edta/edta/tests/tags.yml deleted file mode 100644 index 180ae6d..0000000 --- a/modules/pfr/edta/edta/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -edta/edta: - - "modules/pfr/edta/edta/**" diff --git a/subworkflows/pfr/fasta_edta_lai/main.nf b/subworkflows/gallvp/fasta_edta_lai/main.nf similarity index 95% rename from subworkflows/pfr/fasta_edta_lai/main.nf rename to subworkflows/gallvp/fasta_edta_lai/main.nf index ab1eefd..1d4dd85 100644 --- a/subworkflows/pfr/fasta_edta_lai/main.nf +++ b/subworkflows/gallvp/fasta_edta_lai/main.nf @@ -1,7 +1,7 @@ -include { CUSTOM_SHORTENFASTAIDS } from '../../../modules/pfr/custom/shortenfastaids/main' -include { EDTA_EDTA } from '../../../modules/pfr/edta/edta/main' -include { LTRRETRIEVER_LAI } from '../../../modules/pfr/ltrretriever/lai/main' -include { CUSTOM_RESTOREGFFIDS } from '../../../modules/pfr/custom/restoregffids/main' +include { CUSTOM_SHORTENFASTAIDS } from '../../../modules/gallvp/custom/shortenfastaids/main' +include { EDTA_EDTA } from '../../../modules/gallvp/edta/edta/main' +include { LTRRETRIEVER_LAI } from '../../../modules/gallvp/ltrretriever/lai/main' +include { CUSTOM_RESTOREGFFIDS } from '../../../modules/gallvp/custom/restoregffids/main' workflow FASTA_EDTA_LAI { diff --git a/subworkflows/pfr/fasta_edta_lai/meta.yml b/subworkflows/gallvp/fasta_edta_lai/meta.yml similarity index 100% rename from subworkflows/pfr/fasta_edta_lai/meta.yml rename to subworkflows/gallvp/fasta_edta_lai/meta.yml diff --git a/subworkflows/pfr/fasta_edta_lai/tests/main.nf.test b/subworkflows/gallvp/fasta_edta_lai/tests/main.nf.test similarity index 91% rename from subworkflows/pfr/fasta_edta_lai/tests/main.nf.test rename to subworkflows/gallvp/fasta_edta_lai/tests/main.nf.test index fe9fd12..0b56ee5 100644 --- a/subworkflows/pfr/fasta_edta_lai/tests/main.nf.test +++ b/subworkflows/gallvp/fasta_edta_lai/tests/main.nf.test @@ -6,7 +6,7 @@ nextflow_workflow { config "./nextflow.config" tag "subworkflows" - tag "subworkflows_pfr" + tag "subworkflows_gallvp" tag "subworkflows/fasta_edta_lai" tag "fasta_edta_lai" tag "modules/nf-core/gunzip" @@ -23,7 +23,7 @@ nextflow_workflow { """ input[0] = [ [ id:'test' ], - file(params.test_data['actinidia_chinensis']['genome']['genome_1_fasta_gz'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/eukaryotes/actinidia_chinensis/genome/chr1/genome.fasta.gz', checkIfExists: true) ] """ } diff --git a/subworkflows/pfr/fasta_edta_lai/tests/main.nf.test.snap b/subworkflows/gallvp/fasta_edta_lai/tests/main.nf.test.snap similarity index 100% rename from subworkflows/pfr/fasta_edta_lai/tests/main.nf.test.snap rename to subworkflows/gallvp/fasta_edta_lai/tests/main.nf.test.snap diff --git a/subworkflows/pfr/fasta_edta_lai/tests/nextflow.config b/subworkflows/gallvp/fasta_edta_lai/tests/nextflow.config similarity index 100% rename from subworkflows/pfr/fasta_edta_lai/tests/nextflow.config rename to subworkflows/gallvp/fasta_edta_lai/tests/nextflow.config diff --git a/subworkflows/pfr/fasta_gxf_busco_plot/main.nf b/subworkflows/gallvp/fasta_gxf_busco_plot/main.nf similarity index 98% rename from subworkflows/pfr/fasta_gxf_busco_plot/main.nf rename to subworkflows/gallvp/fasta_gxf_busco_plot/main.nf index 2af0a89..3e8ad28 100644 --- a/subworkflows/pfr/fasta_gxf_busco_plot/main.nf +++ b/subworkflows/gallvp/fasta_gxf_busco_plot/main.nf @@ -1,8 +1,8 @@ -include { BUSCO_BUSCO as BUSCO_ASSEMBLY } from '../../../modules/pfr/busco/busco/main' -include { BUSCO_GENERATEPLOT as PLOT_ASSEMBLY } from '../../../modules/pfr/busco/generateplot/main' -include { GFFREAD as EXTRACT_PROTEINS } from '../../../modules/pfr/gffread/main' -include { BUSCO_BUSCO as BUSCO_ANNOTATION } from '../../../modules/pfr/busco/busco/main' -include { BUSCO_GENERATEPLOT as PLOT_ANNOTATION } from '../../../modules/pfr/busco/generateplot/main' +include { BUSCO_BUSCO as BUSCO_ASSEMBLY } from '../../../modules/gallvp/busco/busco/main' +include { BUSCO_GENERATEPLOT as PLOT_ASSEMBLY } from '../../../modules/gallvp/busco/generateplot/main' +include { GFFREAD as EXTRACT_PROTEINS } from '../../../modules/gallvp/gffread/main' +include { BUSCO_BUSCO as BUSCO_ANNOTATION } from '../../../modules/gallvp/busco/busco/main' +include { BUSCO_GENERATEPLOT as PLOT_ANNOTATION } from '../../../modules/gallvp/busco/generateplot/main' workflow FASTA_GXF_BUSCO_PLOT { diff --git a/subworkflows/pfr/fasta_gxf_busco_plot/meta.yml b/subworkflows/gallvp/fasta_gxf_busco_plot/meta.yml similarity index 100% rename from subworkflows/pfr/fasta_gxf_busco_plot/meta.yml rename to subworkflows/gallvp/fasta_gxf_busco_plot/meta.yml diff --git a/subworkflows/pfr/fasta_gxf_busco_plot/tests/main.nf.test b/subworkflows/gallvp/fasta_gxf_busco_plot/tests/main.nf.test similarity index 73% rename from subworkflows/pfr/fasta_gxf_busco_plot/tests/main.nf.test rename to subworkflows/gallvp/fasta_gxf_busco_plot/tests/main.nf.test index 8c8ac7b..783be86 100644 --- a/subworkflows/pfr/fasta_gxf_busco_plot/tests/main.nf.test +++ b/subworkflows/gallvp/fasta_gxf_busco_plot/tests/main.nf.test @@ -6,7 +6,7 @@ nextflow_workflow { config './nextflow.config' tag "subworkflows" - tag "subworkflows_nfcore" + tag "subworkflows_gallvp" tag "subworkflows/fasta_gxf_busco_plot" tag "busco" tag "busco/busco" @@ -21,17 +21,17 @@ nextflow_workflow { input[0] = Channel.of( [ [ id:'test' ], // meta map - file( params.test_data['candidatus_portiera_aleyrodidarum']['genome']['genome_fasta'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/prokaryotes/candidatus_portiera_aleyrodidarum/genome/genome.fasta', checkIfExists: true) ], [ [ id:'test2' ], // meta map - file( params.test_data['bacteroides_fragilis']['genome']['genome_fna_gz'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/prokaryotes/bacteroides_fragilis/genome/genome.fna.gz', checkIfExists: true) ] ) input[1] = Channel.of( [ [ id:'test' ], // meta map - file( params.test_data['candidatus_portiera_aleyrodidarum']['genome']['test1_gff'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/prokaryotes/candidatus_portiera_aleyrodidarum/genome/gff/test1.gff', checkIfExists: true) ] ) input[2] = 'genome' @@ -73,17 +73,17 @@ nextflow_workflow { input[0] = Channel.of( [ [ id:'test' ], // meta map - file( params.test_data['candidatus_portiera_aleyrodidarum']['genome']['genome_fasta'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/prokaryotes/candidatus_portiera_aleyrodidarum/genome/genome.fasta', checkIfExists: true) ], [ [ id:'test2' ], // meta map - file( params.test_data['bacteroides_fragilis']['genome']['genome_fna_gz'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/prokaryotes/bacteroides_fragilis/genome/genome.fna.gz', checkIfExists: true) ] ) input[1] = Channel.of( [ [ id:'test' ], // meta map - file( params.test_data['candidatus_portiera_aleyrodidarum']['genome']['test1_gff'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/prokaryotes/candidatus_portiera_aleyrodidarum/genome/gff/test1.gff', checkIfExists: true) ] ) input[2] = 'genome' diff --git a/subworkflows/pfr/fasta_gxf_busco_plot/tests/main.nf.test.snap b/subworkflows/gallvp/fasta_gxf_busco_plot/tests/main.nf.test.snap similarity index 100% rename from subworkflows/pfr/fasta_gxf_busco_plot/tests/main.nf.test.snap rename to subworkflows/gallvp/fasta_gxf_busco_plot/tests/main.nf.test.snap diff --git a/subworkflows/pfr/fasta_gxf_busco_plot/tests/nextflow.config b/subworkflows/gallvp/fasta_gxf_busco_plot/tests/nextflow.config similarity index 100% rename from subworkflows/pfr/fasta_gxf_busco_plot/tests/nextflow.config rename to subworkflows/gallvp/fasta_gxf_busco_plot/tests/nextflow.config diff --git a/subworkflows/pfr/gxf_fasta_agat_spaddintrons_spextractsequences/main.nf b/subworkflows/gallvp/gxf_fasta_agat_spaddintrons_spextractsequences/main.nf similarity index 98% rename from subworkflows/pfr/gxf_fasta_agat_spaddintrons_spextractsequences/main.nf rename to subworkflows/gallvp/gxf_fasta_agat_spaddintrons_spextractsequences/main.nf index 6380ca4..57c9297 100644 --- a/subworkflows/pfr/gxf_fasta_agat_spaddintrons_spextractsequences/main.nf +++ b/subworkflows/gallvp/gxf_fasta_agat_spaddintrons_spextractsequences/main.nf @@ -1,5 +1,5 @@ -include { AGAT_SPADDINTRONS } from '../../../modules/pfr/agat/spaddintrons/main' -include { AGAT_SPEXTRACTSEQUENCES } from '../../../modules/pfr/agat/spextractsequences/main' +include { AGAT_SPADDINTRONS } from '../../../modules/gallvp/agat/spaddintrons/main' +include { AGAT_SPEXTRACTSEQUENCES } from '../../../modules/gallvp/agat/spextractsequences/main' workflow GXF_FASTA_AGAT_SPADDINTRONS_SPEXTRACTSEQUENCES { diff --git a/subworkflows/pfr/gxf_fasta_agat_spaddintrons_spextractsequences/meta.yml b/subworkflows/gallvp/gxf_fasta_agat_spaddintrons_spextractsequences/meta.yml similarity index 100% rename from subworkflows/pfr/gxf_fasta_agat_spaddintrons_spextractsequences/meta.yml rename to subworkflows/gallvp/gxf_fasta_agat_spaddintrons_spextractsequences/meta.yml diff --git a/subworkflows/pfr/gxf_fasta_agat_spaddintrons_spextractsequences/tests/main.nf.test b/subworkflows/gallvp/gxf_fasta_agat_spaddintrons_spextractsequences/tests/main.nf.test similarity index 98% rename from subworkflows/pfr/gxf_fasta_agat_spaddintrons_spextractsequences/tests/main.nf.test rename to subworkflows/gallvp/gxf_fasta_agat_spaddintrons_spextractsequences/tests/main.nf.test index 0d00c7a..f5242c9 100644 --- a/subworkflows/pfr/gxf_fasta_agat_spaddintrons_spextractsequences/tests/main.nf.test +++ b/subworkflows/gallvp/gxf_fasta_agat_spaddintrons_spextractsequences/tests/main.nf.test @@ -6,7 +6,7 @@ nextflow_workflow { config './nextflow.config' tag "subworkflows" - tag "subworkflows_pfr" + tag "subworkflows_gallvp" tag "subworkflows/gxf_fasta_agat_spaddintrons_spextractsequences" tag "modules/nf-core/gunzip" tag "agat/spextractsequences" diff --git a/subworkflows/pfr/gxf_fasta_agat_spaddintrons_spextractsequences/tests/main.nf.test.snap b/subworkflows/gallvp/gxf_fasta_agat_spaddintrons_spextractsequences/tests/main.nf.test.snap similarity index 100% rename from subworkflows/pfr/gxf_fasta_agat_spaddintrons_spextractsequences/tests/main.nf.test.snap rename to subworkflows/gallvp/gxf_fasta_agat_spaddintrons_spextractsequences/tests/main.nf.test.snap diff --git a/subworkflows/pfr/gxf_fasta_agat_spaddintrons_spextractsequences/tests/nextflow.config b/subworkflows/gallvp/gxf_fasta_agat_spaddintrons_spextractsequences/tests/nextflow.config similarity index 100% rename from subworkflows/pfr/gxf_fasta_agat_spaddintrons_spextractsequences/tests/nextflow.config rename to subworkflows/gallvp/gxf_fasta_agat_spaddintrons_spextractsequences/tests/nextflow.config diff --git a/subworkflows/local/fasta_liftoff.nf b/subworkflows/local/fasta_liftoff.nf index 79a2b93..d134ec3 100644 --- a/subworkflows/local/fasta_liftoff.nf +++ b/subworkflows/local/fasta_liftoff.nf @@ -2,8 +2,8 @@ include { GUNZIP as GUNZIP_FASTA } from '../../mo include { GUNZIP as GUNZIP_GFF } from '../../modules/nf-core/gunzip/main' include { GFFREAD as GFFREAD_BEFORE_LIFTOFF } from '../../modules/nf-core/gffread/main' include { LIFTOFF } from '../../modules/nf-core/liftoff/main' -include { AGAT_SPMERGEANNOTATIONS as MERGE_LIFTOFF_ANNOTATIONS } from '../../modules/pfr/agat/spmergeannotations/main' -include { AGAT_SPFILTERFEATUREFROMKILLLIST } from '../../modules/pfr/agat/spfilterfeaturefromkilllist/main' +include { AGAT_SPMERGEANNOTATIONS as MERGE_LIFTOFF_ANNOTATIONS } from '../../modules/nf-core/agat/spmergeannotations/main' +include { AGAT_SPFILTERFEATUREFROMKILLLIST } from '../../modules/nf-core/agat/spfilterfeaturefromkilllist/main' include { GFFREAD as GFFREAD_AFTER_LIFTOFF } from '../../modules/nf-core/gffread/main' include { GFF_TSEBRA_SPFILTERFEATUREFROMKILLLIST } from '../../subworkflows/local/gff_tsebra_spfilterfeaturefromkilllist' diff --git a/subworkflows/local/gff_merge_cleanup.nf b/subworkflows/local/gff_merge_cleanup.nf index da64e3a..fc6c75e 100644 --- a/subworkflows/local/gff_merge_cleanup.nf +++ b/subworkflows/local/gff_merge_cleanup.nf @@ -1,4 +1,4 @@ -include { AGAT_SPMERGEANNOTATIONS } from '../../modules/pfr/agat/spmergeannotations/main' +include { AGAT_SPMERGEANNOTATIONS } from '../../modules/nf-core/agat/spmergeannotations/main' include { GT_GFF3 } from '../../modules/nf-core/gt/gff3/main' include { AGAT_CONVERTSPGXF2GXF } from '../../modules/nf-core/agat/convertspgxf2gxf/main' diff --git a/subworkflows/local/gff_tsebra_spfilterfeaturefromkilllist.nf b/subworkflows/local/gff_tsebra_spfilterfeaturefromkilllist.nf index e816277..c4e4fb6 100644 --- a/subworkflows/local/gff_tsebra_spfilterfeaturefromkilllist.nf +++ b/subworkflows/local/gff_tsebra_spfilterfeaturefromkilllist.nf @@ -1,7 +1,7 @@ include { AGAT_CONVERTSPGFF2GTF } from '../../modules/nf-core/agat/convertspgff2gtf/main' include { TSEBRA } from '../../modules/nf-core/tsebra/main' include { AGAT_CONVERTSPGXF2GXF } from '../../modules/nf-core/agat/convertspgxf2gxf/main' -include { AGAT_SPFILTERFEATUREFROMKILLLIST as KILL_TSEBRA_ISOFORMS } from '../../modules/pfr/agat/spfilterfeaturefromkilllist/main' +include { AGAT_SPFILTERFEATUREFROMKILLLIST as KILL_TSEBRA_ISOFORMS } from '../../modules/nf-core/agat/spfilterfeaturefromkilllist/main' workflow GFF_TSEBRA_SPFILTERFEATUREFROMKILLLIST { diff --git a/subworkflows/local/prepare_assembly.nf b/subworkflows/local/prepare_assembly.nf index 3b5d08c..9cfd35b 100644 --- a/subworkflows/local/prepare_assembly.nf +++ b/subworkflows/local/prepare_assembly.nf @@ -6,7 +6,7 @@ include { REPEATMODELER_REPEATMODELER } from '../../modules/nf-core/re include { REPEATMASKER } from '../../modules/gallvp/repeatmasker' include { STAR_GENOMEGENERATE } from '../../modules/nf-core/star/genomegenerate' -include { FASTA_EDTA_LAI } from '../../subworkflows/pfr/fasta_edta_lai' +include { FASTA_EDTA_LAI } from '../../subworkflows/gallvp/fasta_edta_lai' workflow PREPARE_ASSEMBLY { take: diff --git a/subworkflows/local/purge_braker_models.nf b/subworkflows/local/purge_braker_models.nf index 26d72d3..bda8ce1 100644 --- a/subworkflows/local/purge_braker_models.nf +++ b/subworkflows/local/purge_braker_models.nf @@ -1,8 +1,8 @@ include { GFF_TSEBRA_SPFILTERFEATUREFROMKILLLIST } from '../../subworkflows/local/gff_tsebra_spfilterfeaturefromkilllist' include { GFFCOMPARE as COMPARE_BRAKER_TO_LIFTOFF } from '../../modules/nf-core/gffcompare/main' -include { AGAT_SPFILTERFEATUREFROMKILLLIST } from '../../modules/pfr/agat/spfilterfeaturefromkilllist/main' +include { AGAT_SPFILTERFEATUREFROMKILLLIST } from '../../modules/nf-core/agat/spfilterfeaturefromkilllist/main' include { GFFCOMPARE as VALIDATE_PURGING_BY_AGAT } from '../../modules/nf-core/gffcompare/main' -include { AGAT_SPMERGEANNOTATIONS as MERGE_BRAKER_LIFTOFF } from '../../modules/pfr/agat/spmergeannotations/main' +include { AGAT_SPMERGEANNOTATIONS as MERGE_BRAKER_LIFTOFF } from '../../modules/nf-core/agat/spmergeannotations/main' workflow PURGE_BRAKER_MODELS { take: diff --git a/subworkflows/local/purge_nohit_models.nf b/subworkflows/local/purge_nohit_models.nf index d213dc2..e9f8fbb 100644 --- a/subworkflows/local/purge_nohit_models.nf +++ b/subworkflows/local/purge_nohit_models.nf @@ -1,4 +1,4 @@ -include { AGAT_SPFILTERFEATUREFROMKILLLIST } from '../../modules/pfr/agat/spfilterfeaturefromkilllist/main' +include { AGAT_SPFILTERFEATUREFROMKILLLIST } from '../../modules/nf-core/agat/spfilterfeaturefromkilllist/main' workflow PURGE_NOHIT_MODELS { take: diff --git a/subworkflows/pfr/fasta_edta_lai/tests/tags.yml b/subworkflows/pfr/fasta_edta_lai/tests/tags.yml deleted file mode 100644 index b114c58..0000000 --- a/subworkflows/pfr/fasta_edta_lai/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -subworkflows/fasta_edta_lai: - - subworkflows/pfr/fasta_edta_lai/** diff --git a/subworkflows/pfr/fasta_gxf_busco_plot/tests/tags.yml b/subworkflows/pfr/fasta_gxf_busco_plot/tests/tags.yml deleted file mode 100644 index b8786a5..0000000 --- a/subworkflows/pfr/fasta_gxf_busco_plot/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -subworkflows/fasta_gxf_busco_plot: - - subworkflows/pfr/fasta_gxf_busco_plot/** diff --git a/subworkflows/pfr/gxf_fasta_agat_spaddintrons_spextractsequences/tests/tags.yml b/subworkflows/pfr/gxf_fasta_agat_spaddintrons_spextractsequences/tests/tags.yml deleted file mode 100644 index a27b632..0000000 --- a/subworkflows/pfr/gxf_fasta_agat_spaddintrons_spextractsequences/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -subworkflows/gxf_fasta_agat_spaddintrons_spextractsequences: - - subworkflows/pfr/gxf_fasta_agat_spaddintrons_spextractsequences/** diff --git a/workflows/pangene.nf b/workflows/pangene.nf index 19f069f..01e4d6a 100644 --- a/workflows/pangene.nf +++ b/workflows/pangene.nf @@ -13,11 +13,11 @@ include { GFF_EGGNOGMAPPER } from '../subworkflows/local/gf include { PURGE_NOHIT_MODELS } from '../subworkflows/local/purge_nohit_models' include { GFF_STORE } from '../subworkflows/local/gff_store' include { FASTA_ORTHOFINDER } from '../subworkflows/local/fasta_orthofinder' -include { FASTA_GXF_BUSCO_PLOT } from '../subworkflows/pfr/fasta_gxf_busco_plot/main' +include { FASTA_GXF_BUSCO_PLOT } from '../subworkflows/gallvp/fasta_gxf_busco_plot/main' include { CAT_CAT as SAVE_MARKED_GFF3 } from '../modules/nf-core/cat/cat/main' include { CUSTOM_DUMPSOFTWAREVERSIONS } from '../modules/nf-core/custom/dumpsoftwareversions' -include { GXF_FASTA_AGAT_SPADDINTRONS_SPEXTRACTSEQUENCES } from '../subworkflows/pfr/gxf_fasta_agat_spaddintrons_spextractsequences/main' +include { GXF_FASTA_AGAT_SPADDINTRONS_SPEXTRACTSEQUENCES } from '../subworkflows/gallvp/gxf_fasta_agat_spaddintrons_spextractsequences/main' log.info paramsSummaryLog(workflow) From 3ec77a3f76587f6b267fd399814e03ceda8303c7 Mon Sep 17 00:00:00 2001 From: Usman Rashid Date: Fri, 26 Jul 2024 17:35:38 +1200 Subject: [PATCH 33/87] Added missing nf-core moduels --- modules.json | 10 ++ .../environment.yml | 9 ++ .../agat/spfilterfeaturefromkilllist/main.nf | 53 +++++++ .../agat/spfilterfeaturefromkilllist/meta.yml | 60 ++++++++ .../tests/main.nf.test | 104 ++++++++++++++ .../tests/main.nf.test.snap | 101 ++++++++++++++ .../agat/spmergeannotations/environment.yml | 9 ++ .../nf-core/agat/spmergeannotations/main.nf | 53 +++++++ .../nf-core/agat/spmergeannotations/meta.yml | 54 ++++++++ .../spmergeannotations/tests/main.nf.test | 130 ++++++++++++++++++ .../tests/main.nf.test.snap | 92 +++++++++++++ .../agat/spmergeannotations/tests/tags.yml | 2 + subworkflows/local/fasta_liftoff.nf | 2 +- subworkflows/local/prepare_assembly.nf | 2 +- 14 files changed, 679 insertions(+), 2 deletions(-) create mode 100644 modules/nf-core/agat/spfilterfeaturefromkilllist/environment.yml create mode 100644 modules/nf-core/agat/spfilterfeaturefromkilllist/main.nf create mode 100644 modules/nf-core/agat/spfilterfeaturefromkilllist/meta.yml create mode 100644 modules/nf-core/agat/spfilterfeaturefromkilllist/tests/main.nf.test create mode 100644 modules/nf-core/agat/spfilterfeaturefromkilllist/tests/main.nf.test.snap create mode 100644 modules/nf-core/agat/spmergeannotations/environment.yml create mode 100644 modules/nf-core/agat/spmergeannotations/main.nf create mode 100644 modules/nf-core/agat/spmergeannotations/meta.yml create mode 100644 modules/nf-core/agat/spmergeannotations/tests/main.nf.test create mode 100644 modules/nf-core/agat/spmergeannotations/tests/main.nf.test.snap create mode 100644 modules/nf-core/agat/spmergeannotations/tests/tags.yml diff --git a/modules.json b/modules.json index 7cc6286..7b756b1 100644 --- a/modules.json +++ b/modules.json @@ -95,6 +95,16 @@ "git_sha": "b7d09fae1f4fd5880138af68a68c9587528f0de8", "installed_by": ["modules"] }, + "agat/spfilterfeaturefromkilllist": { + "branch": "master", + "git_sha": "d1535889747781d919bc81da2344952f4bfa2be4", + "installed_by": ["modules"] + }, + "agat/spmergeannotations": { + "branch": "master", + "git_sha": "8e30f5d09155b45ddafc2d1357fc5f447f1aaa03", + "installed_by": ["modules"] + }, "cat/cat": { "branch": "master", "git_sha": "5bb8ca085e17549e185e1823495ab8d20727a805", diff --git a/modules/nf-core/agat/spfilterfeaturefromkilllist/environment.yml b/modules/nf-core/agat/spfilterfeaturefromkilllist/environment.yml new file mode 100644 index 0000000..fb2df48 --- /dev/null +++ b/modules/nf-core/agat/spfilterfeaturefromkilllist/environment.yml @@ -0,0 +1,9 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json +name: "agat_spfilterfeaturefromkilllist" +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - "bioconda::agat=1.4.0" diff --git a/modules/nf-core/agat/spfilterfeaturefromkilllist/main.nf b/modules/nf-core/agat/spfilterfeaturefromkilllist/main.nf new file mode 100644 index 0000000..4918ed7 --- /dev/null +++ b/modules/nf-core/agat/spfilterfeaturefromkilllist/main.nf @@ -0,0 +1,53 @@ +process AGAT_SPFILTERFEATUREFROMKILLLIST { + tag "$meta.id" + label 'process_single' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/agat:1.4.0--pl5321hdfd78af_0': + 'biocontainers/agat:1.4.0--pl5321hdfd78af_0' }" + + input: + tuple val(meta), path(gff) + path kill_list + path config + + output: + tuple val(meta), path("*.gff"), emit: gff + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def config_param = config ? "--config $config" : '' + if( "$gff" == "${prefix}.gff" ) error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!" + """ + agat_sp_filter_feature_from_kill_list.pl \\ + --gff $gff \\ + --kill_list $kill_list \\ + $config_param \\ + $args \\ + --output "${prefix}.gff" + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + agat: \$(agat_sp_filter_feature_from_kill_list.pl -h | sed -n 's/.*(AGAT) - Version: \\(.*\\) .*/\\1/p') + END_VERSIONS + """ + + stub: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + if( "$gff" == "${prefix}.gff" ) error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!" + """ + touch "${prefix}.gff" + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + agat: \$(agat_sp_filter_feature_from_kill_list.pl -h | sed -n 's/.*(AGAT) - Version: \\(.*\\) .*/\\1/p') + END_VERSIONS + """ +} diff --git a/modules/nf-core/agat/spfilterfeaturefromkilllist/meta.yml b/modules/nf-core/agat/spfilterfeaturefromkilllist/meta.yml new file mode 100644 index 0000000..d408fe7 --- /dev/null +++ b/modules/nf-core/agat/spfilterfeaturefromkilllist/meta.yml @@ -0,0 +1,60 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/meta-schema.json +name: "agat_spfilterfeaturefromkilllist" +description: | + The script aims to remove features based on a kill list. The default behaviour is to look at the features's ID. + If the feature has an ID (case insensitive) listed among the kill list it will be removed. /!\ Removing a level1 + or level2 feature will automatically remove all linked subfeatures, and removing all children of a feature will + automatically remove this feature too. +keywords: + - genomics + - gff + - remove + - feature +tools: + - "agat": + description: "Another Gff Analysis Toolkit (AGAT). Suite of tools to handle gene annotations in any GTF/GFF format." + homepage: "https://agat.readthedocs.io/en/latest/" + documentation: "https://agat.readthedocs.io/en/latest/tools/agat_sp_filter_feature_from_kill_list.html" + tool_dev_url: "https://github.com/NBISweden/AGAT" + doi: "10.5281/zenodo.3552717" + licence: ["GPL v3"] +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1', single_end:false ]` + - gff: + type: file + description: Input GFF3 file that will be read + pattern: "*.{gff,gff3}" + - kill_list: + type: file + description: Kill list. One value per line. + pattern: "*.txt" + - config: + type: file + description: | + Input agat config file. By default AGAT takes as input agat_config.yaml file from the working directory if any, otherwise it takes the orignal agat_config.yaml shipped with AGAT. To get the agat_config.yaml locally type: "agat config --expose". The --config option gives you the possibility to use your own AGAT config file (located elsewhere or named differently). + pattern: "*.yaml" + +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1', single_end:false ] + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" + - gff: + type: file + description: Output GFF file. + pattern: "*.gff" + +authors: + - "@GallVp" +maintainers: + - "@GallVp" diff --git a/modules/nf-core/agat/spfilterfeaturefromkilllist/tests/main.nf.test b/modules/nf-core/agat/spfilterfeaturefromkilllist/tests/main.nf.test new file mode 100644 index 0000000..82a3c30 --- /dev/null +++ b/modules/nf-core/agat/spfilterfeaturefromkilllist/tests/main.nf.test @@ -0,0 +1,104 @@ +nextflow_process { + + name "Test Process AGAT_SPFILTERFEATUREFROMKILLLIST" + script "../main.nf" + process "AGAT_SPFILTERFEATUREFROMKILLLIST" + + tag "modules" + tag "modules_nfcore" + tag "agat" + tag "agat/spfilterfeaturefromkilllist" + + test("sarscov2 - gff3") { + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.gff3', checkIfExists: true) + ] + + def kill_list = "unknown_transcript_1" + def kill_list_file = new File('kill.list.txt') + kill_list_file.text = kill_list + + input[1] = kill_list_file.toPath() + + input[2] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("sarscov2 - gff3 - config") { + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.gff3', checkIfExists: true) + ] + + def kill_list = "unknown_transcript_1" + def kill_list_file = new File('kill.list.txt') + kill_list_file.text = kill_list + + input[1] = kill_list_file.toPath() + + input[2] = file(params.modules_testdata_base_path + 'generic/config/agat_config.yaml', checkIfExists: true) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("sarscov2 - gff3 - stub") { + + options "-stub" + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.gff3', checkIfExists: true) + ] + + def kill_list = "unknown_transcript_1" + def kill_list_file = new File('kill.list.txt') + kill_list_file.text = kill_list + + input[1] = kill_list_file.toPath() + + input[2] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + +} \ No newline at end of file diff --git a/modules/nf-core/agat/spfilterfeaturefromkilllist/tests/main.nf.test.snap b/modules/nf-core/agat/spfilterfeaturefromkilllist/tests/main.nf.test.snap new file mode 100644 index 0000000..8322d0f --- /dev/null +++ b/modules/nf-core/agat/spfilterfeaturefromkilllist/tests/main.nf.test.snap @@ -0,0 +1,101 @@ +{ + "sarscov2 - gff3 - config": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.gff:md5,df19e1b84ba6f691d20c72b397c88abf" + ] + ], + "1": [ + "versions.yml:md5,e2962240799182aee69421c746be183a" + ], + "gff": [ + [ + { + "id": "test" + }, + "test.gff:md5,df19e1b84ba6f691d20c72b397c88abf" + ] + ], + "versions": [ + "versions.yml:md5,e2962240799182aee69421c746be183a" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-03T15:32:54.707393" + }, + "sarscov2 - gff3 - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.gff:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + "versions.yml:md5,e2962240799182aee69421c746be183a" + ], + "gff": [ + [ + { + "id": "test" + }, + "test.gff:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,e2962240799182aee69421c746be183a" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-03T15:32:59.888053" + }, + "sarscov2 - gff3": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.gff:md5,df19e1b84ba6f691d20c72b397c88abf" + ] + ], + "1": [ + "versions.yml:md5,e2962240799182aee69421c746be183a" + ], + "gff": [ + [ + { + "id": "test" + }, + "test.gff:md5,df19e1b84ba6f691d20c72b397c88abf" + ] + ], + "versions": [ + "versions.yml:md5,e2962240799182aee69421c746be183a" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-03T15:32:47.772624" + } +} \ No newline at end of file diff --git a/modules/nf-core/agat/spmergeannotations/environment.yml b/modules/nf-core/agat/spmergeannotations/environment.yml new file mode 100644 index 0000000..5644e08 --- /dev/null +++ b/modules/nf-core/agat/spmergeannotations/environment.yml @@ -0,0 +1,9 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json +name: "agat_spmergeannotations" +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - "bioconda::agat=1.4.0" diff --git a/modules/nf-core/agat/spmergeannotations/main.nf b/modules/nf-core/agat/spmergeannotations/main.nf new file mode 100644 index 0000000..e0861c0 --- /dev/null +++ b/modules/nf-core/agat/spmergeannotations/main.nf @@ -0,0 +1,53 @@ +process AGAT_SPMERGEANNOTATIONS { + tag "$meta.id" + label 'process_single' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/agat:1.4.0--pl5321hdfd78af_0': + 'biocontainers/agat:1.4.0--pl5321hdfd78af_0' }" + + input: + tuple val(meta), path(gffs) + path config + + output: + tuple val(meta), path("*.gff") , emit: gff + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def config_param = config ? "--config $config" : '' + def file_names = "$gffs".split(' ') + def gff_param = file_names.collect { "--gff $it" }.join(' ') + if ( file_names.contains ( "${prefix}.gff" ) ) error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!" + """ + agat_sp_merge_annotations.pl \\ + $gff_param \\ + $config_param \\ + $args \\ + --output ${prefix}.gff + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + agat: \$(agat_sp_merge_annotations.pl -h | sed -n 's/.*(AGAT) - Version: \\(.*\\) .*/\\1/p') + END_VERSIONS + """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + def file_names = "$gffs".split(' ') + if ( file_names.contains ( "${prefix}.gff" ) ) error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!" + """ + touch ${prefix}.gff + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + agat: \$(agat_sp_merge_annotations.pl -h | sed -n 's/.*(AGAT) - Version: \\(.*\\) .*/\\1/p') + END_VERSIONS + """ +} diff --git a/modules/nf-core/agat/spmergeannotations/meta.yml b/modules/nf-core/agat/spmergeannotations/meta.yml new file mode 100644 index 0000000..afa9ddd --- /dev/null +++ b/modules/nf-core/agat/spmergeannotations/meta.yml @@ -0,0 +1,54 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/meta-schema.json +name: "agat_spmergeannotations" +description: | + This script merge different gff annotation files in one. It uses the AGAT parser that takes care of duplicated names and fixes other oddities met in those files. +keywords: + - genomics + - gff + - merge + - combine +tools: + - "agat": + description: "Another Gff Analysis Toolkit (AGAT). Suite of tools to handle gene annotations in any GTF/GFF format." + homepage: "https://agat.readthedocs.io/en/latest/" + documentation: "https://agat.readthedocs.io/en/latest/tools/agat_sp_merge_annotations.html" + tool_dev_url: "https://github.com/NBISweden/AGAT" + doi: "10.5281/zenodo.3552717" + licence: ["GPL v3"] +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1' ]` + - gffs: + type: list + description: A list of GFFs to merge + pattern: "[ *.{gff,gff3} ]" + - config: + type: file + description: | + Input agat config file. By default AGAT takes as input agat_config.yaml file from the working directory if any, + otherwise it takes the orignal agat_config.yaml shipped with AGAT. To get the agat_config.yaml + locally type: "agat config --expose". The --config option gives you the possibility to use your + own AGAT config file (located elsewhere or named differently). + pattern: "*.yaml" +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1' ]` + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" + - gff: + type: file + description: Output GFF file. + pattern: "*.gff" +authors: + - "@GallVp" +maintainers: + - "@GallVp" diff --git a/modules/nf-core/agat/spmergeannotations/tests/main.nf.test b/modules/nf-core/agat/spmergeannotations/tests/main.nf.test new file mode 100644 index 0000000..3f500fa --- /dev/null +++ b/modules/nf-core/agat/spmergeannotations/tests/main.nf.test @@ -0,0 +1,130 @@ +nextflow_process { + + name "Test Process AGAT_SPMERGEANNOTATIONS" + script "../main.nf" + process "AGAT_SPMERGEANNOTATIONS" + + tag "modules" + tag "modules_nfcore" + tag "agat" + tag "agat/spmergeannotations" + + test("candidatus_portiera_aleyrodidarum - multi_gffs") { + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/prokaryotes/candidatus_portiera_aleyrodidarum/genome/gff/test1.gff', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/prokaryotes/candidatus_portiera_aleyrodidarum/genome/gff/test2.gff', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/prokaryotes/candidatus_portiera_aleyrodidarum/genome/gff/test3.gff', checkIfExists: true) + ] + ] + + input[1] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert path(process.out.gff[0][1]).text.contains('AGAT gene') }, + { assert snapshot(process.out.versions).match("versions") } + ) + } + + } + + test("candidatus_portiera_aleyrodidarum - multi_gffs - stub") { + + options '-stub' + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/prokaryotes/candidatus_portiera_aleyrodidarum/genome/gff/test1.gff', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/prokaryotes/candidatus_portiera_aleyrodidarum/genome/gff/test2.gff', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/prokaryotes/candidatus_portiera_aleyrodidarum/genome/gff/test3.gff', checkIfExists: true) + ] + ] + + input[1] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("candidatus_portiera_aleyrodidarum - multi_gffs - config") { + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/prokaryotes/candidatus_portiera_aleyrodidarum/genome/gff/test1.gff', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/prokaryotes/candidatus_portiera_aleyrodidarum/genome/gff/test2.gff', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/prokaryotes/candidatus_portiera_aleyrodidarum/genome/gff/test3.gff', checkIfExists: true) + ] + ] + + input[1] = file(params.modules_testdata_base_path + 'generic/config/agat_config.yaml', checkIfExists: true) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert path(process.out.gff[0][1]).text.contains('AGAT gene') }, + { assert snapshot(process.out.versions).match("versions_config") } + ) + } + + } + + test("candidatus_portiera_aleyrodidarum - multi_gffs - stub - config") { + + options '-stub' + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/prokaryotes/candidatus_portiera_aleyrodidarum/genome/gff/test1.gff', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/prokaryotes/candidatus_portiera_aleyrodidarum/genome/gff/test2.gff', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/prokaryotes/candidatus_portiera_aleyrodidarum/genome/gff/test3.gff', checkIfExists: true) + ] + ] + + input[1] = file(params.modules_testdata_base_path + 'generic/config/agat_config.yaml', checkIfExists: true) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + +} \ No newline at end of file diff --git a/modules/nf-core/agat/spmergeannotations/tests/main.nf.test.snap b/modules/nf-core/agat/spmergeannotations/tests/main.nf.test.snap new file mode 100644 index 0000000..5b56cd9 --- /dev/null +++ b/modules/nf-core/agat/spmergeannotations/tests/main.nf.test.snap @@ -0,0 +1,92 @@ +{ + "candidatus_portiera_aleyrodidarum - multi_gffs - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.gff:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + "versions.yml:md5,bb159018d6a64ae51339f7c886ad28d7" + ], + "gff": [ + [ + { + "id": "test" + }, + "test.gff:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,bb159018d6a64ae51339f7c886ad28d7" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-15T13:23:28.495387" + }, + "versions": { + "content": [ + [ + "versions.yml:md5,bb159018d6a64ae51339f7c886ad28d7" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-15T13:23:23.220341" + }, + "versions_config": { + "content": [ + [ + "versions.yml:md5,bb159018d6a64ae51339f7c886ad28d7" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-15T13:25:34.519378" + }, + "candidatus_portiera_aleyrodidarum - multi_gffs - stub - config": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.gff:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + "versions.yml:md5,bb159018d6a64ae51339f7c886ad28d7" + ], + "gff": [ + [ + { + "id": "test" + }, + "test.gff:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,bb159018d6a64ae51339f7c886ad28d7" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-15T13:23:43.811463" + } +} \ No newline at end of file diff --git a/modules/nf-core/agat/spmergeannotations/tests/tags.yml b/modules/nf-core/agat/spmergeannotations/tests/tags.yml new file mode 100644 index 0000000..de92188 --- /dev/null +++ b/modules/nf-core/agat/spmergeannotations/tests/tags.yml @@ -0,0 +1,2 @@ +agat/spmergeannotations: + - "modules/nf-core/agat/spmergeannotations/**" diff --git a/subworkflows/local/fasta_liftoff.nf b/subworkflows/local/fasta_liftoff.nf index d134ec3..a46beb3 100644 --- a/subworkflows/local/fasta_liftoff.nf +++ b/subworkflows/local/fasta_liftoff.nf @@ -5,7 +5,7 @@ include { LIFTOFF } from '../../mo include { AGAT_SPMERGEANNOTATIONS as MERGE_LIFTOFF_ANNOTATIONS } from '../../modules/nf-core/agat/spmergeannotations/main' include { AGAT_SPFILTERFEATUREFROMKILLLIST } from '../../modules/nf-core/agat/spfilterfeaturefromkilllist/main' include { GFFREAD as GFFREAD_AFTER_LIFTOFF } from '../../modules/nf-core/gffread/main' -include { GFF_TSEBRA_SPFILTERFEATUREFROMKILLLIST } from '../../subworkflows/local/gff_tsebra_spfilterfeaturefromkilllist' +include { GFF_TSEBRA_SPFILTERFEATUREFROMKILLLIST } from '../../subworkflows/local/gff_tsebra_spfilterfeaturefromkilllist' workflow FASTA_LIFTOFF { take: diff --git a/subworkflows/local/prepare_assembly.nf b/subworkflows/local/prepare_assembly.nf index 9cfd35b..514cb74 100644 --- a/subworkflows/local/prepare_assembly.nf +++ b/subworkflows/local/prepare_assembly.nf @@ -130,7 +130,7 @@ workflow PREPARE_ASSEMBLY { ) ch_masked_assembly = ch_unmasked_masked_branch.masked - | mix(REPEATMASKER.out.fasta_masked) + | mix(REPEATMASKER.out.masked) ch_versions = ch_versions.mix(REPEATMASKER.out.versions.first()) // MODULE: STAR_GENOMEGENERATE From 4e3004f594c50db0d01ab4ccbb03f7a6b2aac1ef Mon Sep 17 00:00:00 2001 From: Usman Rashid Date: Wed, 7 Aug 2024 11:46:52 +1200 Subject: [PATCH 34/87] Reduced BRAKER3 threads to 8 --- CHANGELOG.md | 3 ++- conf/base.config | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0baeab3..450d3c0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## 0.4.0 - [26-Jul-2024] +## 0.4.0 - [07-Aug-2024] ### `Added` @@ -21,6 +21,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 12. Added a script to automatically check module version updates 13. Updated modules: `AGAT/CONVERTSPGFF2GTF`, `CAT_FASTQ`, `CUSTOM/DUMPSOFTWAREVERSIONS`, `EGGNOGMAPPER`, `FASTP`, `GFFREAD`, `SAMTOOLS/CAT`, `CUSTOM/RESTOREGFFIDS`, `CUSTOM/SHORTENFASTAIDS`, `EDTA/EDTA`, `CAT/CAT`, `FASTQC`, `GUNZIP`, `LIFTOFF`, `STAR/ALIGN`, `STAR/GENOMEGENERATE`, `UMITOOLS/EXTRACT`, 14. Updated sub-workflows: `FASTQ_FASTQC_UMITOOLS_FASTP` and `FASTA_EDTA_LAI` +15. Reduced `BRAKER3` threads to 8 [#55](https://github.com/PlantandFoodResearch/pangene/issues/55) ### `Fixed` diff --git a/conf/base.config b/conf/base.config index 16824cd..4c6edec 100644 --- a/conf/base.config +++ b/conf/base.config @@ -79,6 +79,7 @@ process { time = { check_max( 7.days * task.attempt, 'time' ) } } withName:BRAKER3 { + cpus = { check_max( 8 * task.attempt, 'cpus' ) } time = { check_max( 7.days * task.attempt, 'time' ) } } withName:CUSTOM_DUMPSOFTWAREVERSIONS { From ac4c14f2f2ba37effbe064b6f517cf519b55decc Mon Sep 17 00:00:00 2001 From: Usman Rashid Date: Wed, 7 Aug 2024 11:55:49 +1200 Subject: [PATCH 35/87] Now the final annotations are stored in the annotations folder --- CHANGELOG.md | 3 +++ conf/modules.config | 7 ++++--- nextflow.config | 1 + nextflow_schema.json | 5 +++++ 4 files changed, 13 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 450d3c0..9e20b8b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,6 +22,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 13. Updated modules: `AGAT/CONVERTSPGFF2GTF`, `CAT_FASTQ`, `CUSTOM/DUMPSOFTWAREVERSIONS`, `EGGNOGMAPPER`, `FASTP`, `GFFREAD`, `SAMTOOLS/CAT`, `CUSTOM/RESTOREGFFIDS`, `CUSTOM/SHORTENFASTAIDS`, `EDTA/EDTA`, `CAT/CAT`, `FASTQC`, `GUNZIP`, `LIFTOFF`, `STAR/ALIGN`, `STAR/GENOMEGENERATE`, `UMITOOLS/EXTRACT`, 14. Updated sub-workflows: `FASTQ_FASTQC_UMITOOLS_FASTP` and `FASTA_EDTA_LAI` 15. Reduced `BRAKER3` threads to 8 [#55](https://github.com/PlantandFoodResearch/pangene/issues/55) +16. Now the final annotations are stored in the `annotations` folder [#53](https://github.com/PlantandFoodResearch/pangene/issues/53) ### `Fixed` @@ -43,6 +44,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 5. Moved `version_check.sh` to `.github/version_checks.sh` 6. Removed dependency on for `BRAKER3` and `REPEATMASKER` modules which are now installed from 7. Removed dependency on +8. Now the final annotations are not stored in the `final` folder +9. Now BRAKER3 outputs are not saved by default [#53](https://github.com/PlantandFoodResearch/pangene/issues/53) ## 0.3.3 - [18-Jun-2024] diff --git a/conf/modules.config b/conf/modules.config index 5505751..3b2b4ef 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -148,6 +148,7 @@ process { // SUBWORKFLOW: FASTA_BRAKER3 path: { "${params.outdir}/braker/" }, mode: "copy", saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + enabled: params.braker_save_outputs ] } } @@ -226,7 +227,7 @@ process { // SUBWORKFLOW: GFF_EGGNOGMAPPER ].join(' ').trim() publishDir = [ - path: { "${params.outdir}/final/$meta.id" }, + path: { "${params.outdir}/annotations/$meta.id" }, mode: "copy", saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, ] @@ -244,7 +245,7 @@ process { // SUBWORKFLOW: GFF_STORE ext.args = '-tidy -retainids -sort' publishDir = [ - path: { "${params.outdir}/final/$meta.id" }, + path: { "${params.outdir}/annotations/$meta.id" }, mode: "copy", saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, ] @@ -255,7 +256,7 @@ process { // SUBWORKFLOW: GFF_STORE ext.prefix = { "${meta.id}.pep" } publishDir = [ - path: { "${params.outdir}/final/$meta.id" }, + path: { "${params.outdir}/annotations/$meta.id" }, mode: "copy", saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, ] diff --git a/nextflow.config b/nextflow.config index 286996c..84459c7 100644 --- a/nextflow.config +++ b/nextflow.config @@ -35,6 +35,7 @@ params { // Annotation options braker_extra_args = "" + braker_save_outputs = false liftoff_coverage = 0.9 liftoff_identity = 0.9 allow_isoforms = true diff --git a/nextflow_schema.json b/nextflow_schema.json index e2b3edd..17f9c04 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -181,6 +181,11 @@ "type": "string", "description": "Extra arguments for BRAKER" }, + "braker_save_outputs": { + "type": "boolean", + "description": "Save BRAKER files", + "fa_icon": "fas fa-question-circle" + }, "liftoff_coverage": { "type": "number", "default": 0.9, From c85852a991c0cb36032aa28b3ef0402abfe6fd70 Mon Sep 17 00:00:00 2001 From: Usman Rashid Date: Wed, 7 Aug 2024 15:31:56 +1200 Subject: [PATCH 36/87] Updated test data paths --- modules.json | 12 ++++++------ .../nf-core/agat/convertspgff2gtf/tests/main.nf.test | 4 ++-- .../nf-core/agat/convertspgxf2gxf/tests/main.nf.test | 4 ++-- modules/nf-core/eggnogmapper/meta.yml | 5 +++++ modules/nf-core/eggnogmapper/tests/main.nf.test | 6 +++--- modules/nf-core/fastavalidator/tests/main.nf.test | 4 ++-- modules/nf-core/gt/gff3/tests/main.nf.test | 2 +- modules/nf-core/liftoff/tests/main.nf.test | 12 ++++++------ 8 files changed, 27 insertions(+), 22 deletions(-) diff --git a/modules.json b/modules.json index 7b756b1..1bbf8ee 100644 --- a/modules.json +++ b/modules.json @@ -87,12 +87,12 @@ "nf-core": { "agat/convertspgff2gtf": { "branch": "master", - "git_sha": "b1d41826971b91f9649b46a8f3ccb226ee150c85", + "git_sha": "0a0b723d114e502207072603479b635dfbc2bf59", "installed_by": ["modules"] }, "agat/convertspgxf2gxf": { "branch": "master", - "git_sha": "b7d09fae1f4fd5880138af68a68c9587528f0de8", + "git_sha": "0a0b723d114e502207072603479b635dfbc2bf59", "installed_by": ["modules"] }, "agat/spfilterfeaturefromkilllist": { @@ -122,12 +122,12 @@ }, "eggnogmapper": { "branch": "master", - "git_sha": "c0707299f4c5afbadc157ef49d49efaa2484a768", + "git_sha": "b34fb117e397e72a070cde8adf21b758670c90f5", "installed_by": ["modules"] }, "fastavalidator": { "branch": "master", - "git_sha": "89ff95427f695086369d7927a3c17cea2a37a382", + "git_sha": "90dad5491658049282ceb287a3d7732c1ce39837", "installed_by": ["modules"] }, "fastp": { @@ -152,7 +152,7 @@ }, "gt/gff3": { "branch": "master", - "git_sha": "3c77ca9aac783e76c3614a06db3bfe4fef619bde", + "git_sha": "9a8bba5910982ae637dedb8664e3121db77e173f", "installed_by": ["modules"] }, "gunzip": { @@ -163,7 +163,7 @@ }, "liftoff": { "branch": "master", - "git_sha": "fb8d53f339dc130223367ca7fde3695946f5da64", + "git_sha": "b34fb117e397e72a070cde8adf21b758670c90f5", "installed_by": ["modules"] }, "orthofinder": { diff --git a/modules/nf-core/agat/convertspgff2gtf/tests/main.nf.test b/modules/nf-core/agat/convertspgff2gtf/tests/main.nf.test index 9accfec..401f455 100644 --- a/modules/nf-core/agat/convertspgff2gtf/tests/main.nf.test +++ b/modules/nf-core/agat/convertspgff2gtf/tests/main.nf.test @@ -16,7 +16,7 @@ nextflow_process { """ input[0] = [ [ id: 'test' ], // meta map - file(params.test_data['sarscov2']['genome']['genome_gff3'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.gff3', checkIfExists: true) ] """ } @@ -42,7 +42,7 @@ nextflow_process { """ input[0] = [ [ id: 'test' ], // meta map - file(params.test_data['sarscov2']['genome']['genome_gff3'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.gff3', checkIfExists: true) ] """ } diff --git a/modules/nf-core/agat/convertspgxf2gxf/tests/main.nf.test b/modules/nf-core/agat/convertspgxf2gxf/tests/main.nf.test index db85991..d8d7bc2 100644 --- a/modules/nf-core/agat/convertspgxf2gxf/tests/main.nf.test +++ b/modules/nf-core/agat/convertspgxf2gxf/tests/main.nf.test @@ -16,7 +16,7 @@ nextflow_process { """ input[0] = [ [ id: 'test' ], // meta map - file(params.test_data['sarscov2']['genome']['genome_gtf'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.gtf', checkIfExists: true) ] """ } @@ -42,7 +42,7 @@ nextflow_process { """ input[0] = [ [ id: 'test' ], // meta map - file(params.test_data['sarscov2']['genome']['genome_gtf'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.gtf', checkIfExists: true) ] """ } diff --git a/modules/nf-core/eggnogmapper/meta.yml b/modules/nf-core/eggnogmapper/meta.yml index b07c27e..95090a1 100644 --- a/modules/nf-core/eggnogmapper/meta.yml +++ b/modules/nf-core/eggnogmapper/meta.yml @@ -32,6 +32,11 @@ input: type: directory description: Directory containing eggnog database files (e.g. eggnog-mapper/data) pattern: "*" + - meta2: + type: map + description: | + Groovy Map containing database information + e.g. `[ id:'test' ]` - eggnog_diamond_db: type: file description: The eggnog Diamond protein database file (e.g. eggnog-mapper/data/eggnog_proteins.dmnd) diff --git a/modules/nf-core/eggnogmapper/tests/main.nf.test b/modules/nf-core/eggnogmapper/tests/main.nf.test index 6f06ca9..5f36b44 100644 --- a/modules/nf-core/eggnogmapper/tests/main.nf.test +++ b/modules/nf-core/eggnogmapper/tests/main.nf.test @@ -13,7 +13,7 @@ nextflow_process { script "../../diamond/makedb/main.nf" process { """ - input[0] = [ [id:'test2'], file(params.test_data['sarscov2']['genome']['proteome_fasta'], checkIfExists: true) ] + input[0] = [ [id:'test2'], file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/proteome.fasta', checkIfExists: true) ] input[1] = [] input[2] = [] input[3] = [] @@ -30,7 +30,7 @@ nextflow_process { } process { """ - input[0] = [ [id:'test'], file(params.test_data['sarscov2']['genome']['proteome_fasta'], checkIfExists: true) ] + input[0] = [ [id:'test'], file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/proteome.fasta', checkIfExists: true) ] eggnog_db = file("https://github.com/nf-core/test-datasets/raw/eddf5b0e3336e0f93c81d4b4843b07257f9efaec/data/delete_me/eggnogmapper/eggnog.db", checkIfExists: true) eggnog_db.copyTo("${workDir}/tmp/eggnog.db") eggnog_data_dir = "${workDir}/tmp/" @@ -72,7 +72,7 @@ nextflow_process { | combine ( Channel.fromPath( "${workDir}/tmp/" ) ) eggnog_data_dir = ch_synced_inputs.map { sync_status, data_dir -> data_dir } - input[0] = [ [id:'test'], file(params.test_data['sarscov2']['genome']['proteome_fasta'], checkIfExists: true) ] + input[0] = [ [id:'test'], file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/proteome.fasta', checkIfExists: true) ] input[1] = [] input[2] = eggnog_data_dir input[3] = [[], []] diff --git a/modules/nf-core/fastavalidator/tests/main.nf.test b/modules/nf-core/fastavalidator/tests/main.nf.test index bb8c22c..39b00d8 100644 --- a/modules/nf-core/fastavalidator/tests/main.nf.test +++ b/modules/nf-core/fastavalidator/tests/main.nf.test @@ -15,7 +15,7 @@ nextflow_process { """ input[0] = [ [ id:'test', single_end:false ], // meta map - file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) ] """ } @@ -40,7 +40,7 @@ nextflow_process { """ input[0] = [ [ id:'test', single_end:false ], // meta map - file(params.test_data['sarscov2']['genome']['genome_gff3'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.gff3', checkIfExists: true) ] """ } diff --git a/modules/nf-core/gt/gff3/tests/main.nf.test b/modules/nf-core/gt/gff3/tests/main.nf.test index cb44bc8..46c7da3 100644 --- a/modules/nf-core/gt/gff3/tests/main.nf.test +++ b/modules/nf-core/gt/gff3/tests/main.nf.test @@ -16,7 +16,7 @@ nextflow_process { """ input[0] = [ [ id:'test' ], // meta map - file(params.test_data['sarscov2']['genome']['genome_gff3'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.gff3', checkIfExists: true) ] """ } diff --git a/modules/nf-core/liftoff/tests/main.nf.test b/modules/nf-core/liftoff/tests/main.nf.test index fc0f567..c8ebf26 100644 --- a/modules/nf-core/liftoff/tests/main.nf.test +++ b/modules/nf-core/liftoff/tests/main.nf.test @@ -21,7 +21,7 @@ nextflow_process { """ input[0] = [ [ id:'test' ], - file(params.test_data['homo_sapiens']['genome']['genome_1_fasta'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr1/genome.fasta.gz', checkIfExists: true) ] """ } @@ -33,11 +33,11 @@ nextflow_process { """ input[0] = [ [ id:'test' ], - file(params.test_data['homo_sapiens']['genome']['genome_21_fasta'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/genome.fasta', checkIfExists: true) ] input[1] = GUNZIP.out.gunzip.map { meta, file -> file } input[2] = [ - file(params.test_data['homo_sapiens']['genome']['genome_1_gtf'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr1/genome.gtf', checkIfExists: true) ] input[3] = [] """ @@ -67,7 +67,7 @@ nextflow_process { """ input[0] = [ [ id:'test' ], - file(params.test_data['homo_sapiens']['genome']['genome_1_fasta'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr1/genome.fasta.gz', checkIfExists: true) ] """ } @@ -79,11 +79,11 @@ nextflow_process { """ input[0] = [ [ id:'test' ], - file(params.test_data['homo_sapiens']['genome']['genome_21_fasta'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/genome.fasta', checkIfExists: true) ] input[1] = GUNZIP.out.gunzip.map { meta, file -> file } input[2] = [ - file(params.test_data['homo_sapiens']['genome']['genome_1_gtf'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr1/genome.gtf', checkIfExists: true) ] input[3] = [] """ From 230448fa03accae8083a499b01c2e67038001ceb Mon Sep 17 00:00:00 2001 From: Usman Rashid Date: Wed, 7 Aug 2024 16:53:41 +1200 Subject: [PATCH 37/87] Added -gff flag to REPEATMASKER to save the gff file --- CHANGELOG.md | 1 + conf/base.config | 2 +- conf/modules.config | 3 ++- docs/parameters.md | 1 + modules.json | 4 +-- .../{ => repeatmasker}/environment.yml | 2 +- .../repeatmasker/{ => repeatmasker}/main.nf | 9 +++++-- .../repeatmasker/{ => repeatmasker}/meta.yml | 6 ++++- .../{ => repeatmasker}/tests/main.nf.test | 9 ++++--- .../tests/main.nf.test.snap | 25 +++++++++++++++---- .../repeatmasker/tests/nextflow.config | 5 ++++ .../gallvp/repeatmasker/tests/nextflow.config | 5 ---- subworkflows/local/prepare_assembly.nf | 10 ++++---- 13 files changed, 56 insertions(+), 26 deletions(-) rename modules/gallvp/repeatmasker/{ => repeatmasker}/environment.yml (86%) rename modules/gallvp/repeatmasker/{ => repeatmasker}/main.nf (79%) rename modules/gallvp/repeatmasker/{ => repeatmasker}/meta.yml (92%) rename modules/gallvp/repeatmasker/{ => repeatmasker}/tests/main.nf.test (88%) rename modules/gallvp/repeatmasker/{ => repeatmasker}/tests/main.nf.test.snap (80%) create mode 100644 modules/gallvp/repeatmasker/repeatmasker/tests/nextflow.config delete mode 100644 modules/gallvp/repeatmasker/tests/nextflow.config diff --git a/CHANGELOG.md b/CHANGELOG.md index 9e20b8b..5c94585 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -23,6 +23,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 14. Updated sub-workflows: `FASTQ_FASTQC_UMITOOLS_FASTP` and `FASTA_EDTA_LAI` 15. Reduced `BRAKER3` threads to 8 [#55](https://github.com/PlantandFoodResearch/pangene/issues/55) 16. Now the final annotations are stored in the `annotations` folder [#53](https://github.com/PlantandFoodResearch/pangene/issues/53) +17. Added `-gff` flag to `REPEATMASKER` to save the gff file [#54](https://github.com/PlantandFoodResearch/pangene/issues/54) ### `Fixed` diff --git a/conf/base.config b/conf/base.config index 4c6edec..c5fe54c 100644 --- a/conf/base.config +++ b/conf/base.config @@ -69,7 +69,7 @@ process { withName:EGGNOGMAPPER { time = { check_max( 1.day * task.attempt, 'time' ) } } - withName:REPEATMASKER { + withName:REPEATMASKER_REPEATMASKER { time = { check_max( 2.days * task.attempt, 'time' ) } } withName:REPEATMODELER_REPEATMODELER { diff --git a/conf/modules.config b/conf/modules.config index 3b2b4ef..a44a293 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -25,10 +25,11 @@ process { // SUBWORKFLOW: PREPARE_ASSEMBLY ] } - withName: '.*:PREPARE_ASSEMBLY:REPEATMASKER' { + withName: '.*:PREPARE_ASSEMBLY:REPEATMASKER_REPEATMASKER' { ext.args = [ "-no_is", "-xsmall", + "-gff", ].join(' ').trim() publishDir = [ diff --git a/docs/parameters.md b/docs/parameters.md index fa5a1fd..b53c98a 100644 --- a/docs/parameters.md +++ b/docs/parameters.md @@ -51,6 +51,7 @@ A NextFlow pipeline for pan-genome annotation | Parameter | Description | Type | Default | Required | Hidden | | ----------------------------- | --------------------------------------------------------------------------------- | --------- | ------- | -------- | ------ | | `braker_extra_args` | Extra arguments for BRAKER | `string` | | | | +| `braker_save_outputs` | Save BRAKER files | `boolean` | | | | | `liftoff_coverage` | Liftoff coverage parameter | `number` | 0.9 | | | | `liftoff_identity` | Liftoff identity parameter | `number` | 0.9 | | | | `allow_isoforms` | Allow multiple isoforms for gene models | `boolean` | True | | | diff --git a/modules.json b/modules.json index 1bbf8ee..9e92540 100644 --- a/modules.json +++ b/modules.json @@ -55,9 +55,9 @@ "git_sha": "490f8ab54c632d84f99edd6f208305ac5e283ab3", "installed_by": ["fasta_edta_lai"] }, - "repeatmasker": { + "repeatmasker/repeatmasker": { "branch": "main", - "git_sha": "76c4ba86319c935f4003e7d18e5dfdd967d9af95", + "git_sha": "07c6fda11aff03d2d7fc68224e7fd96866fc6a8f", "installed_by": ["modules"] } } diff --git a/modules/gallvp/repeatmasker/environment.yml b/modules/gallvp/repeatmasker/repeatmasker/environment.yml similarity index 86% rename from modules/gallvp/repeatmasker/environment.yml rename to modules/gallvp/repeatmasker/repeatmasker/environment.yml index 44ae45b..efc290a 100644 --- a/modules/gallvp/repeatmasker/environment.yml +++ b/modules/gallvp/repeatmasker/repeatmasker/environment.yml @@ -1,6 +1,6 @@ --- # yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json -name: "repeatmasker" +name: "repeatmasker_repeatmasker" channels: - conda-forge - bioconda diff --git a/modules/gallvp/repeatmasker/main.nf b/modules/gallvp/repeatmasker/repeatmasker/main.nf similarity index 79% rename from modules/gallvp/repeatmasker/main.nf rename to modules/gallvp/repeatmasker/repeatmasker/main.nf index 3eff897..4b17414 100644 --- a/modules/gallvp/repeatmasker/main.nf +++ b/modules/gallvp/repeatmasker/repeatmasker/main.nf @@ -1,4 +1,4 @@ -process REPEATMASKER { +process REPEATMASKER_REPEATMASKER { tag "$meta.id" label 'process_high' @@ -15,6 +15,7 @@ process REPEATMASKER { tuple val(meta), path("${prefix}.masked") , emit: masked tuple val(meta), path("${prefix}.out") , emit: out tuple val(meta), path("${prefix}.tbl") , emit: tbl + tuple val(meta), path("${prefix}.gff") , emit: gff , optional: true path "versions.yml" , emit: versions when: @@ -35,6 +36,7 @@ process REPEATMASKER { mv $prefix/${fasta}.masked ${prefix}.masked mv $prefix/${fasta}.out ${prefix}.out mv $prefix/${fasta}.tbl ${prefix}.tbl + mv $prefix/${fasta}.out.gff ${prefix}.gff || echo "GFF is not produced" cat <<-END_VERSIONS > versions.yml "${task.process}": @@ -43,11 +45,14 @@ process REPEATMASKER { """ stub: - prefix = task.ext.prefix ?: "${meta.id}" + prefix = task.ext.prefix ?: "${meta.id}" + def args = task.ext.args ?: '' + def touch_gff = args.contains('-gff') ? "touch ${prefix}.gff" : '' """ touch ${prefix}.masked touch ${prefix}.out touch ${prefix}.tbl + $touch_gff cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/gallvp/repeatmasker/meta.yml b/modules/gallvp/repeatmasker/repeatmasker/meta.yml similarity index 92% rename from modules/gallvp/repeatmasker/meta.yml rename to modules/gallvp/repeatmasker/repeatmasker/meta.yml index df47791..059e225 100644 --- a/modules/gallvp/repeatmasker/meta.yml +++ b/modules/gallvp/repeatmasker/repeatmasker/meta.yml @@ -1,4 +1,4 @@ -name: repeatmasker +name: repeatmasker_repeatmasker description: | Screening DNA sequences for interspersed repeats and low complexity DNA sequences @@ -46,6 +46,10 @@ output: type: file description: tbl file pattern: "*.tbl" + - gff: + type: file + description: GFF file + pattern: "*.gff" - versions: type: file description: File containing software versions diff --git a/modules/gallvp/repeatmasker/tests/main.nf.test b/modules/gallvp/repeatmasker/repeatmasker/tests/main.nf.test similarity index 88% rename from modules/gallvp/repeatmasker/tests/main.nf.test rename to modules/gallvp/repeatmasker/repeatmasker/tests/main.nf.test index 5aed861..d55e5f4 100644 --- a/modules/gallvp/repeatmasker/tests/main.nf.test +++ b/modules/gallvp/repeatmasker/repeatmasker/tests/main.nf.test @@ -1,16 +1,18 @@ nextflow_process { - name "Test Process REPEATMASKER" + name "Test Process REPEATMASKER_REPEATMASKER" script "../main.nf" - process "REPEATMASKER" - config "./nextflow.config" + process "REPEATMASKER_REPEATMASKER" tag "modules" tag "modules_gallvp" tag "repeatmasker" + tag "repeatmasker/repeatmasker" test("sarscov2 - genome - fasta") { + config "./nextflow.config" + when { process { """ @@ -29,6 +31,7 @@ nextflow_process { { assert snapshot( process.out.masked, process.out.out, + process.out.gff, process.out.versions ).match() }, { assert file(process.out.tbl[0][1]).text.contains('run with rmblastn') } diff --git a/modules/gallvp/repeatmasker/tests/main.nf.test.snap b/modules/gallvp/repeatmasker/repeatmasker/tests/main.nf.test.snap similarity index 80% rename from modules/gallvp/repeatmasker/tests/main.nf.test.snap rename to modules/gallvp/repeatmasker/repeatmasker/tests/main.nf.test.snap index ca7dda1..2e584de 100644 --- a/modules/gallvp/repeatmasker/tests/main.nf.test.snap +++ b/modules/gallvp/repeatmasker/repeatmasker/tests/main.nf.test.snap @@ -20,14 +20,23 @@ ] ], [ - "versions.yml:md5,f22d471f5aed51b369cc4295ad1f7bc0" + [ + { + "id": "test", + "single_end": false + }, + "test.gff:md5,289cdcae609a8c450a20080107ea6351" + ] + ], + [ + "versions.yml:md5,1386abb5112b809c321da8ddc598c573" ] ], "meta": { "nf-test": "0.8.4", "nextflow": "24.04.3" }, - "timestamp": "2024-07-25T12:17:18.863465" + "timestamp": "2024-08-07T14:25:15.979032" }, "sarscov2 - genome - fasta - stub": { "content": [ @@ -60,7 +69,13 @@ ] ], "3": [ - "versions.yml:md5,f22d471f5aed51b369cc4295ad1f7bc0" + + ], + "4": [ + "versions.yml:md5,1386abb5112b809c321da8ddc598c573" + ], + "gff": [ + ], "masked": [ [ @@ -90,7 +105,7 @@ ] ], "versions": [ - "versions.yml:md5,f22d471f5aed51b369cc4295ad1f7bc0" + "versions.yml:md5,1386abb5112b809c321da8ddc598c573" ] } ], @@ -98,6 +113,6 @@ "nf-test": "0.8.4", "nextflow": "24.04.3" }, - "timestamp": "2024-07-25T11:01:52.492661" + "timestamp": "2024-08-07T13:39:51.365612" } } \ No newline at end of file diff --git a/modules/gallvp/repeatmasker/repeatmasker/tests/nextflow.config b/modules/gallvp/repeatmasker/repeatmasker/tests/nextflow.config new file mode 100644 index 0000000..6e4b600 --- /dev/null +++ b/modules/gallvp/repeatmasker/repeatmasker/tests/nextflow.config @@ -0,0 +1,5 @@ +process { + withName: REPEATMASKER_REPEATMASKER { + ext.args = '-no_is -gff' // Not required but significantly cuts the runtime + } +} diff --git a/modules/gallvp/repeatmasker/tests/nextflow.config b/modules/gallvp/repeatmasker/tests/nextflow.config deleted file mode 100644 index 4be4879..0000000 --- a/modules/gallvp/repeatmasker/tests/nextflow.config +++ /dev/null @@ -1,5 +0,0 @@ -process { - withName: REPEATMASKER { - ext.args = '-no_is' // Not required but significantly cuts the runtime - } -} diff --git a/subworkflows/local/prepare_assembly.nf b/subworkflows/local/prepare_assembly.nf index 514cb74..c05faf5 100644 --- a/subworkflows/local/prepare_assembly.nf +++ b/subworkflows/local/prepare_assembly.nf @@ -3,7 +3,7 @@ include { GUNZIP as GUNZIP_TE_LIBRARY } from '../../modules/nf-core/gu include { FASTAVALIDATOR } from '../../modules/nf-core/fastavalidator' include { REPEATMODELER_BUILDDATABASE } from '../../modules/nf-core/repeatmodeler/builddatabase' include { REPEATMODELER_REPEATMODELER } from '../../modules/nf-core/repeatmodeler/repeatmodeler' -include { REPEATMASKER } from '../../modules/gallvp/repeatmasker' +include { REPEATMASKER_REPEATMASKER } from '../../modules/gallvp/repeatmasker/repeatmasker' include { STAR_GENOMEGENERATE } from '../../modules/nf-core/star/genomegenerate' include { FASTA_EDTA_LAI } from '../../subworkflows/gallvp/fasta_edta_lai' @@ -123,15 +123,15 @@ workflow PREPARE_ASSEMBLY { ch_versions = ch_versions.mix(REPEATMODELER_REPEATMODELER.out.versions.first()) - // MODULE: REPEATMASKER - REPEATMASKER( + // MODULE: REPEATMASKER_REPEATMASKER + REPEATMASKER_REPEATMASKER( ch_assembly_and_te_lib.map { meta, assembly, teLib -> [ meta, assembly ] }, ch_assembly_and_te_lib.map { meta, assembly, teLib -> teLib }, ) ch_masked_assembly = ch_unmasked_masked_branch.masked - | mix(REPEATMASKER.out.masked) - ch_versions = ch_versions.mix(REPEATMASKER.out.versions.first()) + | mix(REPEATMASKER_REPEATMASKER.out.masked) + ch_versions = ch_versions.mix(REPEATMASKER_REPEATMASKER.out.versions.first()) // MODULE: STAR_GENOMEGENERATE ch_genomegenerate_inputs = ch_validated_assembly From b5c422909a343c4ab0f6dfcc682197b8a9266b25 Mon Sep 17 00:00:00 2001 From: Usman Rashid Date: Thu, 15 Aug 2024 16:15:35 +1200 Subject: [PATCH 38/87] Added a test profile based on public data --- .github/workflows/test.yml | 4 +-- CHANGELOG.md | 9 ++++-- conf/base.config | 31 ------------------ conf/modules.config | 4 +-- conf/test.config | 15 +++++++++ local_pangene | 7 ++-- modules/local/utils.nf | 2 +- nextflow.config | 41 ++++++++++++++++-------- nextflow_schema.json | 9 +++--- subworkflows/local/gff_eggnogmapper.nf | 4 ++- subworkflows/local/gff_store.nf | 11 +++++-- subworkflows/local/purge_nohit_models.nf | 7 +++- tests/minimal/assemblysheet.csv | 2 ++ tests/minimal/params.json | 5 +++ workflows/pangene.nf | 29 +++++++++++------ 15 files changed, 109 insertions(+), 71 deletions(-) create mode 100644 conf/test.config create mode 100644 tests/minimal/assemblysheet.csv create mode 100644 tests/minimal/params.json diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 04497a0..7d6ef1f 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -3,9 +3,9 @@ name: Lint and -stub on Linux/Docker on: push: - branches: [main] + branches: + - dev pull_request: - branches: [main] # Cancel if a newer run is started concurrency: diff --git a/CHANGELOG.md b/CHANGELOG.md index 5c94585..bfb3c8d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## 0.4.0 - [07-Aug-2024] +## 0.4.0+dev - [15-Aug-2024] ### `Added` @@ -24,6 +24,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 15. Reduced `BRAKER3` threads to 8 [#55](https://github.com/PlantandFoodResearch/pangene/issues/55) 16. Now the final annotations are stored in the `annotations` folder [#53](https://github.com/PlantandFoodResearch/pangene/issues/53) 17. Added `-gff` flag to `REPEATMASKER` to save the gff file [#54](https://github.com/PlantandFoodResearch/pangene/issues/54) +18. Now a single `fasta` file can be directly specified for `protein_evidence` +19. `eggnogmapper_db_dir` is not a required parameter anymore +20. `eggnogmapper_tax_scope` is now set to 1 (root div) by default +21. Added a `test` profile based on public data ### `Fixed` @@ -46,7 +50,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 6. Removed dependency on for `BRAKER3` and `REPEATMASKER` modules which are now installed from 7. Removed dependency on 8. Now the final annotations are not stored in the `final` folder -9. Now BRAKER3 outputs are not saved by default [#53](https://github.com/PlantandFoodResearch/pangene/issues/53) +9. Now BRAKER3 outputs are not saved by default [#53](https://github.com/PlantandFoodResearch/pangene/issues/53) and saved under `etc` folder when enabled +10. Removed `local` profile. Local executor is the default when no executor is specified. Therefore, the `local` profile was not needed. ## 0.3.3 - [18-Jun-2024] diff --git a/conf/base.config b/conf/base.config index c5fe54c..bfc2d88 100644 --- a/conf/base.config +++ b/conf/base.config @@ -1,34 +1,3 @@ -profiles { - pfr { - process { - executor = 'slurm' - } - - apptainer { - envWhitelist = 'APPTAINER_BINDPATH,APPTAINER_BIND' - cacheDir = "/workspace/pangene/singularity" - } - } - - local { - process { - executor = 'local' - } - } - - apptainer { - apptainer.enabled = true - apptainer.autoMounts= true - apptainer.registry = 'quay.io' - } - - docker { - docker.enabled = true - docker.runOptions = '-u $(id -u):$(id -g) --platform=linux/amd64' - docker.registry = 'quay.io' - } -} - process { cpus = { check_max( 1 * task.attempt, 'cpus' ) } diff --git a/conf/modules.config b/conf/modules.config index a44a293..1f9f08b 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -146,7 +146,7 @@ process { // SUBWORKFLOW: FASTA_BRAKER3 ].flatten().unique(false).join(' ').trim() ext.prefix = { "${meta.id}" } publishDir = [ - path: { "${params.outdir}/braker/" }, + path: { "${params.outdir}/etc/braker/" }, mode: "copy", saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, enabled: params.braker_save_outputs @@ -335,7 +335,7 @@ process { // Universal withName: SAVE_MARKED_GFF3 { publishDir = [ - path: { "${params.outdir}/splicing_marked" }, + path: { "${params.outdir}/etc/splicing_marked" }, mode: "copy", saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, ] diff --git a/conf/test.config b/conf/test.config new file mode 100644 index 0000000..5b23043 --- /dev/null +++ b/conf/test.config @@ -0,0 +1,15 @@ +params { + input = 'tests/minimal/assemblysheet.csv' + protein_evidence = 'https://raw.githubusercontent.com/Gaius-Augustus/BRAKER/f58479fe5bb13a9e51c3ca09cb9e137cab3b8471/example/proteins.fa' +} + +// Additional args to BRAKER should be passed through braker_extra_args +// The config below is only for test purposes +process { + withName: '.*:FASTA_BRAKER3:BRAKER3' { + ext.args = [ + '-gff3', + '--gm_max_intergenic 10000 --skipOptimize' // Not recommended! Used here to make the test execute faster + ].join(' ').trim() + } +} diff --git a/local_pangene b/local_pangene index 8a1aa8a..2808b48 100755 --- a/local_pangene +++ b/local_pangene @@ -14,8 +14,9 @@ F_BOLD="\033[1m" nextflow run \ main.nf \ - -profile local,docker \ + -profile docker,test \ -resume \ $stub \ - -params-file pangene-test/params.json \ - --eggnogmapper_db_dir ../dbs/emapperdb/5.0.2 + --max_cpus 8 \ + --max_memory '32.GB' + # --eggnogmapper_db_dir ../dbs/emapperdb/5.0.2 diff --git a/modules/local/utils.nf b/modules/local/utils.nf index 2878afc..f6fc82e 100644 --- a/modules/local/utils.nf +++ b/modules/local/utils.nf @@ -4,7 +4,7 @@ def idFromFileName(fileName) { ).replaceFirst( /\.f(ast)?q$/, '' ).replaceFirst( - /\.f(asta|sa|a|as|aa)?$/, '' + /\.f(asta|sa|a|as|aa|na)?$/, '' ).replaceFirst( /\.gff(3)?$/, '' ).replaceFirst( diff --git a/nextflow.config b/nextflow.config index 84459c7..ce227c4 100644 --- a/nextflow.config +++ b/nextflow.config @@ -1,11 +1,9 @@ -includeConfig './conf/base.config' - params { // Input/output options input = null protein_evidence = null eggnogmapper_db_dir = null - eggnogmapper_tax_scope = null + eggnogmapper_tax_scope = 1 rna_evidence = null liftoff_annotations = null orthofinder_annotations = null @@ -21,7 +19,7 @@ params { skip_fastqc = false skip_fastp = false min_trimmed_reads = 10000 - extra_fastp_args = "" + extra_fastp_args = null save_trimmed = false remove_ribo_rna = false save_non_ribo_reads = false @@ -29,12 +27,12 @@ params { // RNAseq alignment options star_max_intron_length = 16000 - star_align_extra_args = "" + star_align_extra_args = null star_save_outputs = false save_cat_bam = false // Annotation options - braker_extra_args = "" + braker_extra_args = null braker_save_outputs = false liftoff_coverage = 0.9 liftoff_identity = 0.9 @@ -66,10 +64,33 @@ manifest { description = """A NextFlow pipeline for pan-genome annotation""" mainScript = 'main.nf' nextflowVersion = '!>=23.04.4' - version = '0.4.0' + version = '0.4.0+dev' doi = '' } +includeConfig './conf/base.config' +includeConfig './conf/modules.config' + +profiles { + apptainer { + apptainer.enabled = true + apptainer.autoMounts = true + apptainer.registry = 'quay.io' + } + + docker { + docker.enabled = true + docker.runOptions = '-u $(id -u):$(id -g) --platform=linux/amd64' + docker.registry = 'quay.io' + } + + test { includeConfig 'conf/test.config' } +} + +plugins { + id 'nf-validation@1.1.3' +} + def trace_timestamp = new java.util.Date().format( 'yyyy-MM-dd_HH-mm-ss') timeline { enabled = true @@ -83,9 +104,3 @@ trace { enabled = true file = "${params.outdir}/pipeline_info/execution_trace_${trace_timestamp}.txt" } - -plugins { - id 'nf-validation@1.1.3' -} - -includeConfig './conf/modules.config' diff --git a/nextflow_schema.json b/nextflow_schema.json index 17f9c04..584ff6e 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -10,7 +10,7 @@ "type": "object", "fa_icon": "fas fa-terminal", "description": "", - "required": ["input", "protein_evidence", "eggnogmapper_db_dir", "eggnogmapper_tax_scope", "outdir"], + "required": ["input", "protein_evidence", "outdir"], "properties": { "input": { "type": "string", @@ -23,9 +23,9 @@ }, "protein_evidence": { "type": "string", - "description": "Protein evidence provided as fasta files listed in a text sheet", + "description": "Protein evidence provided as a fasta file or multiple fasta files listed in a plain txt file", "format": "file-path", - "mimetype": "text/txt", + "pattern": "^\\S+\\.(txt|fa|faa|fna|fsa|fas|fasta)(\\.gz)?$", "fa_icon": "far fa-file-alt" }, "eggnogmapper_db_dir": { @@ -36,7 +36,8 @@ "eggnogmapper_tax_scope": { "type": "integer", "description": "Eggnogmapper taxonomy scopre. Eukaryota: 2759, Viridiplantae: 33090, Archaea: 2157, Bacteria: 2, root: 1", - "minimum": 0 + "minimum": 1, + "default": 1 }, "rna_evidence": { "type": "string", diff --git a/subworkflows/local/gff_eggnogmapper.nf b/subworkflows/local/gff_eggnogmapper.nf index 7ea0d19..841a243 100644 --- a/subworkflows/local/gff_eggnogmapper.nf +++ b/subworkflows/local/gff_eggnogmapper.nf @@ -24,7 +24,9 @@ workflow GFF_EGGNOGMAPPER { ch_versions = ch_versions.mix(GFF2FASTA_FOR_EGGNOGMAPPER.out.versions.first()) - ch_eggnogmapper_inputs = ch_gffread_fasta + ch_eggnogmapper_inputs = ! db_folder + ? Channel.empty() + : ch_gffread_fasta | combine(Channel.fromPath(db_folder)) EGGNOGMAPPER( diff --git a/subworkflows/local/gff_store.nf b/subworkflows/local/gff_store.nf index 217cb6d..00ca00b 100644 --- a/subworkflows/local/gff_store.nf +++ b/subworkflows/local/gff_store.nf @@ -8,12 +8,15 @@ workflow GFF_STORE { ch_target_gff // [ meta, gff ] ch_eggnogmapper_annotations // [ meta, annotations ] ch_fasta // [ meta, fasta ] + val_describe_gff // val(true|false) main: ch_versions = Channel.empty() // COLLECTFILE: Add eggnogmapper hits to gff - ch_described_gff = ch_target_gff + ch_described_gff = ! val_describe_gff + ? Channel.empty() + : ch_target_gff | join(ch_eggnogmapper_annotations) | map { meta, gff, annotations -> def tx_annotations = annotations.readLines() @@ -109,7 +112,11 @@ workflow GFF_STORE { } // MODULE: GT_GFF3 as FINAL_GFF_CHECK - FINAL_GFF_CHECK ( ch_described_gff ) + ch_final_check_input = val_describe_gff + ? ch_described_gff + : ch_target_gff + + FINAL_GFF_CHECK ( ch_final_check_input ) ch_final_gff = FINAL_GFF_CHECK.out.gt_gff3 ch_versions = ch_versions.mix(FINAL_GFF_CHECK.out.versions.first()) diff --git a/subworkflows/local/purge_nohit_models.nf b/subworkflows/local/purge_nohit_models.nf index e9f8fbb..55b970e 100644 --- a/subworkflows/local/purge_nohit_models.nf +++ b/subworkflows/local/purge_nohit_models.nf @@ -60,6 +60,11 @@ workflow PURGE_NOHIT_MODELS { ch_versions = ch_versions.mix(AGAT_SPFILTERFEATUREFROMKILLLIST.out.versions.first()) emit: - purged_gff = ch_target_purged_gff.mix(val_purge_nohits ? Channel.empty() : ch_target_gff) + purged_gff = ch_target_purged_gff + | mix( + val_purge_nohits + ? Channel.empty() + : ch_target_gff + ) versions = ch_versions // [ versions.yml ] } diff --git a/tests/minimal/assemblysheet.csv b/tests/minimal/assemblysheet.csv new file mode 100644 index 0000000..20b65b1 --- /dev/null +++ b/tests/minimal/assemblysheet.csv @@ -0,0 +1,2 @@ +tag,fasta,is_masked +test,https://raw.githubusercontent.com/Gaius-Augustus/BRAKER/f58479fe5bb13a9e51c3ca09cb9e137cab3b8471/example/genome.fa,yes diff --git a/tests/minimal/params.json b/tests/minimal/params.json new file mode 100644 index 0000000..703a6a4 --- /dev/null +++ b/tests/minimal/params.json @@ -0,0 +1,5 @@ +{ + "input": "tests/minimal/assemblysheet.csv", + "protein_evidence": "https://raw.githubusercontent.com/Gaius-Augustus/BRAKER/f58479fe5bb13a9e51c3ca09cb9e137cab3b8471/example/proteins.fa", + "braker_extra_args": "--gm_max_intergenic 10000 --skipOptimize" +} diff --git a/workflows/pangene.nf b/workflows/pangene.nf index 01e4d6a..010bc14 100644 --- a/workflows/pangene.nf +++ b/workflows/pangene.nf @@ -103,7 +103,9 @@ workflow PANGENE { bam: files.first().extension == 'bam' } - ch_rna_fq = ch_rna_branch.fq + ch_rna_fq = ! params.rna_evidence + ? Channel.empty() + : ch_rna_branch.fq | map { meta, files -> [ meta.id, meta, files ] } | groupTuple | combine(ch_tar_assm_str) @@ -111,7 +113,9 @@ workflow PANGENE { validateFastqMetadata(metas, files, tar_assm_str) } - ch_rna_bam = ch_rna_branch.bam + ch_rna_bam = ! params.rna_evidence + ? Channel.empty() + : ch_rna_branch.bam | map { meta, files -> [ meta.id, meta, files ] } | groupTuple | combine(ch_tar_assm_str) @@ -149,15 +153,21 @@ workflow PANGENE { | collect : Channel.empty() - ch_ext_prot_fastas = ! params.protein_evidence - ? Channel.empty() - : Channel.fromPath(params.protein_evidence) - | splitText + ch_ext_prot_fastas = ( params.protein_evidence.endsWith('txt') + ? Channel.fromPath(params.protein_evidence) + | splitText + : Channel.fromPath(params.protein_evidence) + ) | map { file_path -> - def file_handle = file(file_path.strip(), checkIfExists: true) + + def file_handle = ( file_path instanceof String ) + ? file(file_path.strip(), checkIfExists: true) + : file_path + [ [ id: idFromFileName( file_handle.baseName ) ], file_handle ] } + ch_liftoff_mm = ! params.liftoff_annotations ? Channel.empty() : Channel.fromSamplesheet('liftoff_annotations') @@ -319,7 +329,7 @@ workflow PANGENE { PURGE_NOHIT_MODELS( ch_merged_gff, ch_eggnogmapper_hits, - params.eggnogmapper_purge_nohits + params.eggnogmapper_purge_nohits && params.eggnogmapper_db_dir ) ch_purged_gff = PURGE_NOHIT_MODELS.out.purged_gff @@ -329,7 +339,8 @@ workflow PANGENE { GFF_STORE( ch_purged_gff, ch_eggnogmapper_annotations, - ch_valid_target_assembly + ch_valid_target_assembly, + params.eggnogmapper_db_dir ) ch_final_gff = GFF_STORE.out.final_gff From 60aba33dc6bdf015ac4c2f3fc60bd0a81e24ad83 Mon Sep 17 00:00:00 2001 From: Usman Rashid Date: Thu, 15 Aug 2024 16:23:04 +1200 Subject: [PATCH 39/87] Fixed CI --- .github/workflows/test.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 7d6ef1f..f085a4a 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -1,6 +1,6 @@ # Adopted from https://github.com/nf-core/modules/blob/master/.github/workflows/test.yml -name: Lint and -stub on Linux/Docker +name: CI tests on: push: branches: @@ -30,7 +30,7 @@ jobs: - name: Run pre-commit run: pre-commit run --all-files - stub-test: + test: runs-on: ubuntu-latest name: Run stub test with docker env: @@ -48,13 +48,13 @@ jobs: run: | nextflow run \ main.nf \ - -profile local,docker \ + -profile docker \ -stub \ -params-file tests/stub/params.json confirm-pass: runs-on: ubuntu-latest - needs: [pre-commit, stub-test] + needs: [pre-commit, test] if: always() steps: - name: All tests ok From 10fc01cab11279032c5e40991c384fd346693339 Mon Sep 17 00:00:00 2001 From: Usman Rashid Date: Fri, 16 Aug 2024 10:10:30 +1200 Subject: [PATCH 40/87] Renamed the pipeline --- .github/check_module_versions.py | 2 +- .gitignore | 2 -- .prettierignore | 2 -- CHANGELOG.md | 38 ++++++++++---------- README.md | 12 +++---- assets/schema_input.json | 4 +-- assets/schema_liftoff.json | 4 +-- assets/schema_orthofinder.json | 4 +-- assets/schema_rna.json | 4 +-- docs/img/{pangene.drawio => genepal.drawio} | 0 docs/img/{pangene.png => genepal.png} | Bin docs/parameters.md | 8 ++--- local_pangene => local_genepal | 0 main.nf | 8 ++--- modules.json | 4 +-- nextflow.config | 4 +-- nextflow_schema.json | 4 +-- pfr/params.json | 8 ++--- pfr/profile.config | 2 +- pfr_pangene => pfr_genepal | 6 ++-- subworkflows/local/fasta_orthofinder.nf | 2 +- workflows/{pangene.nf => genepal.nf} | 2 +- 22 files changed, 58 insertions(+), 62 deletions(-) rename docs/img/{pangene.drawio => genepal.drawio} (100%) rename docs/img/{pangene.png => genepal.png} (100%) rename local_pangene => local_genepal (100%) rename pfr_pangene => pfr_genepal (89%) rename workflows/{pangene.nf => genepal.nf} (99%) diff --git a/.github/check_module_versions.py b/.github/check_module_versions.py index ac8ce59..f1266a2 100755 --- a/.github/check_module_versions.py +++ b/.github/check_module_versions.py @@ -14,7 +14,7 @@ import re import os -PIPELINE_REPO = "PlantandFoodResearch/pangene" +PIPELINE_REPO = "PlantandFoodResearch/genepal" def get_logger(): formatter = colorlog.ColoredFormatter( diff --git a/.gitignore b/.gitignore index 8bdcb04..e141945 100644 --- a/.gitignore +++ b/.gitignore @@ -11,5 +11,3 @@ __pycache__ *.stdout *.stderr - -pangene-test/ diff --git a/.prettierignore b/.prettierignore index 543341f..8d22eff 100644 --- a/.prettierignore +++ b/.prettierignore @@ -14,5 +14,3 @@ __pycache__ *.stdout *.stderr - -pangene-test/ diff --git a/CHANGELOG.md b/CHANGELOG.md index bfb3c8d..b2fbbfe 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,4 @@ -# PlantandFoodResearch/pangene: Changelog +# PlantandFoodResearch/genepal: Changelog The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). @@ -9,21 +9,21 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 1. Added `orthofinder_annotations` param 2. Added `FASTA_GFF_ORTHOFINDER` sub-workflow -3. Added evaluation by BUSCO [#41](https://github.com/PlantandFoodResearch/pangene/issues/41) -4. Included common tax ids for eggnog mapper [#27](https://github.com/PlantandFoodResearch/pangene/issues/27) -5. Implemented hierarchical naming scheme: geneI.tJ, geneI.tJ.exonK, geneI.tJ.cdsK [#19](https://github.com/PlantandFoodResearch/pangene/issues/19), [#34](https://github.com/PlantandFoodResearch/pangene/issues/34) +3. Added evaluation by BUSCO [#41](https://github.com/PlantandFoodResearch/genepal/issues/41) +4. Included common tax ids for eggnog mapper [#27](https://github.com/PlantandFoodResearch/genepal/issues/27) +5. Implemented hierarchical naming scheme: geneI.tJ, geneI.tJ.exonK, geneI.tJ.cdsK [#19](https://github.com/PlantandFoodResearch/genepal/issues/19), [#34](https://github.com/PlantandFoodResearch/genepal/issues/34) 6. Now sorting list of bam and list of fastq before cat to avoid resume cache misses -7. Allowed BAM files for RNA evidence [#3](https://github.com/PlantandFoodResearch/pangene/issues/3) -8. Added `GXF_FASTA_AGAT_SPADDINTRONS_SPEXTRACTSEQUENCES` sub-workflow for splice type statistics [#11](https://github.com/PlantandFoodResearch/pangene/issues/11) -9. Changed `orthofinder_annotations` from FASTA/GFF to protein FASTA [#43](https://github.com/PlantandFoodResearch/pangene/issues/43) -10. Added param `enforce_full_intron_support` to turn on/off strict model purging by TSEBRA [#21](https://github.com/PlantandFoodResearch/pangene/issues/21) -11. Added param `filter_liftoff_by_hints` to evaluate liftoff models with TSEBRA to make sure they have the same level of evidence as BRAKER [#28](ttps://github.com/PlantandFoodResearch/pangene/issues/28) +7. Allowed BAM files for RNA evidence [#3](https://github.com/PlantandFoodResearch/genepal/issues/3) +8. Added `GXF_FASTA_AGAT_SPADDINTRONS_SPEXTRACTSEQUENCES` sub-workflow for splice type statistics [#11](https://github.com/PlantandFoodResearch/genepal/issues/11) +9. Changed `orthofinder_annotations` from FASTA/GFF to protein FASTA [#43](https://github.com/PlantandFoodResearch/genepal/issues/43) +10. Added param `enforce_full_intron_support` to turn on/off strict model purging by TSEBRA [#21](https://github.com/PlantandFoodResearch/genepal/issues/21) +11. Added param `filter_liftoff_by_hints` to evaluate liftoff models with TSEBRA to make sure they have the same level of evidence as BRAKER [#28](ttps://github.com/PlantandFoodResearch/genepal/issues/28) 12. Added a script to automatically check module version updates 13. Updated modules: `AGAT/CONVERTSPGFF2GTF`, `CAT_FASTQ`, `CUSTOM/DUMPSOFTWAREVERSIONS`, `EGGNOGMAPPER`, `FASTP`, `GFFREAD`, `SAMTOOLS/CAT`, `CUSTOM/RESTOREGFFIDS`, `CUSTOM/SHORTENFASTAIDS`, `EDTA/EDTA`, `CAT/CAT`, `FASTQC`, `GUNZIP`, `LIFTOFF`, `STAR/ALIGN`, `STAR/GENOMEGENERATE`, `UMITOOLS/EXTRACT`, 14. Updated sub-workflows: `FASTQ_FASTQC_UMITOOLS_FASTP` and `FASTA_EDTA_LAI` -15. Reduced `BRAKER3` threads to 8 [#55](https://github.com/PlantandFoodResearch/pangene/issues/55) -16. Now the final annotations are stored in the `annotations` folder [#53](https://github.com/PlantandFoodResearch/pangene/issues/53) -17. Added `-gff` flag to `REPEATMASKER` to save the gff file [#54](https://github.com/PlantandFoodResearch/pangene/issues/54) +15. Reduced `BRAKER3` threads to 8 [#55](https://github.com/PlantandFoodResearch/genepal/issues/55) +16. Now the final annotations are stored in the `annotations` folder [#53](https://github.com/PlantandFoodResearch/genepal/issues/53) +17. Added `-gff` flag to `REPEATMASKER` to save the gff file [#54](https://github.com/PlantandFoodResearch/genepal/issues/54) 18. Now a single `fasta` file can be directly specified for `protein_evidence` 19. `eggnogmapper_db_dir` is not a required parameter anymore 20. `eggnogmapper_tax_scope` is now set to 1 (root div) by default @@ -31,9 +31,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### `Fixed` -1. Fixed BRAKER spellings [#36](https://github.com/PlantandFoodResearch/pangene/issues/36) -2. Fixed liftoff failure when lifting off from a single reference [#40](https://github.com/PlantandFoodResearch/pangene/issues/40) -3. Added versions from GFF_STORE sub-workflows [#33](https://github.com/PlantandFoodResearch/pangene/issues/33) +1. Fixed BRAKER spellings [#36](https://github.com/PlantandFoodResearch/genepal/issues/36) +2. Fixed liftoff failure when lifting off from a single reference [#40](https://github.com/PlantandFoodResearch/genepal/issues/40) +3. Added versions from GFF_STORE sub-workflows [#33](https://github.com/PlantandFoodResearch/genepal/issues/33) ### `Dependencies` @@ -50,7 +50,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 6. Removed dependency on for `BRAKER3` and `REPEATMASKER` modules which are now installed from 7. Removed dependency on 8. Now the final annotations are not stored in the `final` folder -9. Now BRAKER3 outputs are not saved by default [#53](https://github.com/PlantandFoodResearch/pangene/issues/53) and saved under `etc` folder when enabled +9. Now BRAKER3 outputs are not saved by default [#53](https://github.com/PlantandFoodResearch/genepal/issues/53) and saved under `etc` folder when enabled 10. Removed `local` profile. Local executor is the default when no executor is specified. Therefore, the `local` profile was not needed. ## 0.3.3 - [18-Jun-2024] @@ -112,8 +112,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 2. Changed license to MIT 3. Updated `.editorconfig` 4. Moved .literature to test/ branch -5. Renamed `pangene_local` to `local_pangene` -6. Renamed `pangene_pfr` to `pfr_pangene` +5. Renamed `genepal_local` to `local_genepal` +6. Renamed `genepal_pfr` to `pfr_genepal` 7. Added versioning checking 8. Updated github workflow to use pre-commit instead of prettier and editorconfig check 9. Added central singularity cache dir for pfr config @@ -145,7 +145,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 35. `external_protein_fastas` and `eggnogmapper_db_dir` are not mandatory parameters 36. Added contributors 37. Add a document for the pipeline parameters -38. Updated `pfr_pangene` and `pfr/profile.config` +38. Updated `pfr_genepal` and `pfr/profile.config` 39. Now using local tests/stub files for GitHub CI 40. Now removing iso-forms left by TSEBRA using `AGAT_SPFILTERFEATUREFROMKILLLIST` 41. Added `pyproject.toml` diff --git a/README.md b/README.md index 24edfeb..b29bac5 100644 --- a/README.md +++ b/README.md @@ -1,28 +1,28 @@ -# PANGENE +# GENEPAL -[![Lint/stub on Linux/Docker](https://github.com/PlantandFoodResearch/pangene/actions/workflows/test.yml/badge.svg)](https://github.com/PlantandFoodResearch/pangene/actions/workflows/test.yml) +[![Lint/stub on Linux/Docker](https://github.com/PlantandFoodResearch/genepal/actions/workflows/test.yml/badge.svg)](https://github.com/PlantandFoodResearch/genepal/actions/workflows/test.yml) A NextFlow pipeline for pan-genome annotation. It can also be used for annotation of a single genome. ## Flowchart -

+

## Alpha Release -This release is not fully documented and under alpha testing by the Bioinformatics Team. There are several [outstanding issues](https://github.com/PlantandFoodResearch/pangene/issues) which will be addressed before a general release. +This release is not fully documented and under alpha testing by the Bioinformatics Team. There are several [outstanding issues](https://github.com/PlantandFoodResearch/genepal/issues) which will be addressed before a general release. ## Plant&Food Users Download the pipeline to your `/workspace/$USER` folder. Change the parameters defined in the [pfr/params.json](./pfr/params.json) file. Submit the pipeline to SLURM for execution. For a description of the parameters, see [parameters.md](./docs/parameters.md). ```bash -sbatch ./pfr_pangene +sbatch ./pfr_genepal ``` ## Credits -plantandfoodresearch/pangene workflows were originally scripted by Jason Shiller ([@jasonshiller](https://github.com/jasonshiller)). Usman Rashid ([@gallvp](https://github.com/gallvp)) wrote the NextFLow pipeline. +plantandfoodresearch/genepal workflows were originally scripted by Jason Shiller ([@jasonshiller](https://github.com/jasonshiller)). Usman Rashid ([@gallvp](https://github.com/gallvp)) wrote the NextFLow pipeline. We thank the following people for their extensive assistance in the development of this pipeline: diff --git a/assets/schema_input.json b/assets/schema_input.json index 287b222..1da6b87 100644 --- a/assets/schema_input.json +++ b/assets/schema_input.json @@ -1,7 +1,7 @@ { "$schema": "http://json-schema.org/draft-07/schema", - "$id": "https://raw.githubusercontent.com/plantandfoodresearch/pangene/master/assets/schema_input.json", - "title": "plantandfoodresearch/pangene pipeline - params.input schema", + "$id": "https://raw.githubusercontent.com/plantandfoodresearch/genepal/master/assets/schema_input.json", + "title": "plantandfoodresearch/genepal pipeline - params.input schema", "description": "Schema for the file provided with params.input", "type": "array", "items": { diff --git a/assets/schema_liftoff.json b/assets/schema_liftoff.json index d32f5f0..fc7046f 100644 --- a/assets/schema_liftoff.json +++ b/assets/schema_liftoff.json @@ -1,7 +1,7 @@ { "$schema": "http://json-schema.org/draft-07/schema", - "$id": "https://raw.githubusercontent.com/plantandfoodresearch/pangene/master/assets/schema_liftoff.json", - "title": "plantandfoodresearch/pangene pipeline - params.liftoff_annotations schema", + "$id": "https://raw.githubusercontent.com/plantandfoodresearch/genepal/master/assets/schema_liftoff.json", + "title": "plantandfoodresearch/genepal pipeline - params.liftoff_annotations schema", "description": "Schema for the file provided with params.liftoff_annotations", "type": "array", "items": { diff --git a/assets/schema_orthofinder.json b/assets/schema_orthofinder.json index 49301fe..68486bd 100644 --- a/assets/schema_orthofinder.json +++ b/assets/schema_orthofinder.json @@ -1,7 +1,7 @@ { "$schema": "http://json-schema.org/draft-07/schema", - "$id": "https://raw.githubusercontent.com/plantandfoodresearch/pangene/master/assets/schema_orthofinder.json", - "title": "plantandfoodresearch/pangene pipeline - params.orthofinder_annotations schema", + "$id": "https://raw.githubusercontent.com/plantandfoodresearch/genepal/master/assets/schema_orthofinder.json", + "title": "plantandfoodresearch/genepal pipeline - params.orthofinder_annotations schema", "description": "Schema for the file provided with params.orthofinder_annotations", "type": "array", "items": { diff --git a/assets/schema_rna.json b/assets/schema_rna.json index da9b273..89c646d 100644 --- a/assets/schema_rna.json +++ b/assets/schema_rna.json @@ -1,7 +1,7 @@ { "$schema": "http://json-schema.org/draft-07/schema", - "$id": "https://raw.githubusercontent.com/plantandfoodresearch/pangene/master/assets/schema_rna.json", - "title": "plantandfoodresearch/pangene pipeline - params.rna_evidence schema", + "$id": "https://raw.githubusercontent.com/plantandfoodresearch/genepal/master/assets/schema_rna.json", + "title": "plantandfoodresearch/genepal pipeline - params.rna_evidence schema", "description": "Schema for the file provided with params.rna_evidence", "type": "array", "items": { diff --git a/docs/img/pangene.drawio b/docs/img/genepal.drawio similarity index 100% rename from docs/img/pangene.drawio rename to docs/img/genepal.drawio diff --git a/docs/img/pangene.png b/docs/img/genepal.png similarity index 100% rename from docs/img/pangene.png rename to docs/img/genepal.png diff --git a/docs/parameters.md b/docs/parameters.md index b53c98a..e25939e 100644 --- a/docs/parameters.md +++ b/docs/parameters.md @@ -1,4 +1,4 @@ -# plantandfoodresearch/pangene pipeline parameters +# plantandfoodresearch/genepal pipeline parameters A NextFlow pipeline for pan-genome annotation @@ -7,9 +7,9 @@ A NextFlow pipeline for pan-genome annotation | Parameter | Description | Type | Default | Required | Hidden | | ------------------------- | -------------------------------------------------------------------------------------------------------- | --------- | --------- | -------- | ------ | | `input` | Target assemblies listed in a CSV sheet | `string` | | True | | -| `protein_evidence` | Protein evidence provided as fasta files listed in a text sheet | `string` | | True | | -| `eggnogmapper_db_dir` | Eggnogmapper database directory | `string` | | True | | -| `eggnogmapper_tax_scope` | Eggnogmapper taxonomy scopre. Eukaryota: 2759, Viridiplantae: 33090, Archaea: 2157, Bacteria: 2, root: 1 | `integer` | | True | | +| `protein_evidence` | Protein evidence provided as a fasta file or multiple fasta files listed in a plain txt file | `string` | | True | | +| `eggnogmapper_db_dir` | Eggnogmapper database directory | `string` | | | | +| `eggnogmapper_tax_scope` | Eggnogmapper taxonomy scopre. Eukaryota: 2759, Viridiplantae: 33090, Archaea: 2157, Bacteria: 2, root: 1 | `integer` | 1 | | | | `rna_evidence` | FASTQ/BAM samples listed in a CSV sheet | `string` | | | | | `liftoff_annotations` | Reference annotations listed in a CSV sheet | `string` | | | | | `orthofinder_annotations` | Additional annotations for orthology listed in a CSV sheet | `string` | | | | diff --git a/local_pangene b/local_genepal similarity index 100% rename from local_pangene rename to local_genepal diff --git a/main.nf b/main.nf index 067425b..5e4d042 100755 --- a/main.nf +++ b/main.nf @@ -6,12 +6,12 @@ include { validateParameters } from 'plugin/nf-validation' validateParameters() -include { PANGENE } from './workflows/pangene.nf' +include { GENEPAL } from './workflows/genepal.nf' workflow { - PFR_PANGENE() + PFR_GENEPAL() } -workflow PFR_PANGENE { - PANGENE() +workflow PFR_GENEPAL { + GENEPAL() } diff --git a/modules.json b/modules.json index 9e92540..9736949 100644 --- a/modules.json +++ b/modules.json @@ -1,6 +1,6 @@ { - "name": "PlantandFoodResearch/pangene", - "homePage": "https://github.com/PlantandFoodResearch/pangene", + "name": "PlantandFoodResearch/genepal", + "homePage": "https://github.com/PlantandFoodResearch/genepal", "repos": { "https://github.com/GallVp/nxf-components.git": { "modules": { diff --git a/nextflow.config b/nextflow.config index ce227c4..1757323 100644 --- a/nextflow.config +++ b/nextflow.config @@ -58,9 +58,9 @@ params { } manifest { - name = 'pangene' + name = 'genepal' author = """Usman Rashid, Jason Shiller""" - homePage = 'https://github.com/PlantandFoodResearch/pangene' + homePage = 'https://github.com/PlantandFoodResearch/genepal' description = """A NextFlow pipeline for pan-genome annotation""" mainScript = 'main.nf' nextflowVersion = '!>=23.04.4' diff --git a/nextflow_schema.json b/nextflow_schema.json index 584ff6e..3d44e01 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -1,7 +1,7 @@ { "$schema": "http://json-schema.org/draft-07/schema", - "$id": "https://raw.githubusercontent.com/plantandfoodresearch/pangene/master/nextflow_schema.json", - "title": "plantandfoodresearch/pangene pipeline parameters", + "$id": "https://raw.githubusercontent.com/plantandfoodresearch/genepal/master/nextflow_schema.json", + "title": "plantandfoodresearch/genepal pipeline parameters", "description": "A NextFlow pipeline for pan-genome annotation", "type": "object", "definitions": { diff --git a/pfr/params.json b/pfr/params.json index c0a1200..e547f98 100644 --- a/pfr/params.json +++ b/pfr/params.json @@ -1,8 +1,8 @@ { - "input": "/workspace/pangene/test_data/assemblysheet.csv", - "protein_evidence": "/workspace/pangene/test_data/external-protein-fastas.txt", + "input": "/workspace/genepal/test_data/assemblysheet.csv", + "protein_evidence": "/workspace/genepal/test_data/external-protein-fastas.txt", "eggnogmapper_db_dir": "/workspace/ComparativeDataSources/emapperdb/5.0.2", "eggnogmapper_tax_scope": 33090, - "rna_evidence": "/workspace/pangene/test_data/fastqsheet.csv", - "liftoff_annotations": "/workspace/pangene/test_data/liftoffannotations.csv" + "rna_evidence": "/workspace/genepal/test_data/fastqsheet.csv", + "liftoff_annotations": "/workspace/genepal/test_data/liftoffannotations.csv" } diff --git a/pfr/profile.config b/pfr/profile.config index b0eba29..0d40c25 100644 --- a/pfr/profile.config +++ b/pfr/profile.config @@ -6,7 +6,7 @@ profiles { apptainer { envWhitelist = "APPTAINER_BINDPATH,APPTAINER_BIND" - cacheDir = "/workspace/pangene/singularity" + cacheDir = "/workspace/genepal/singularity" } } } diff --git a/pfr_pangene b/pfr_genepal similarity index 89% rename from pfr_pangene rename to pfr_genepal index 9b31b44..3da5a74 100644 --- a/pfr_pangene +++ b/pfr_genepal @@ -1,13 +1,13 @@ #!/bin/bash -e -#SBATCH --job-name PANGENE +#SBATCH --job-name GENEPAL #SBATCH --time=14-00:00:00 #SBATCH --nodes=1 #SBATCH --ntasks=1 #SBATCH --cpus-per-task=1 -#SBATCH --output pfr_pangene.stdout -#SBATCH --error pfr_pangene.stderr +#SBATCH --output pfr_genepal.stdout +#SBATCH --error pfr_genepal.stderr #SBATCH --mem=4G full_test_flag=0 diff --git a/subworkflows/local/fasta_orthofinder.nf b/subworkflows/local/fasta_orthofinder.nf index 4170ddc..715d78e 100644 --- a/subworkflows/local/fasta_orthofinder.nf +++ b/subworkflows/local/fasta_orthofinder.nf @@ -24,7 +24,7 @@ workflow FASTA_ORTHOFINDER { | collect | filter { it.size() > 1 } - ORTHOFINDER ( ch_orthofinder_peps.map { fastas -> [ [ id: 'pangene' ], fastas ] } ) + ORTHOFINDER ( ch_orthofinder_peps.map { fastas -> [ [ id: 'genepal' ], fastas ] } ) ch_versions = ch_versions.mix(ORTHOFINDER.out.versions) diff --git a/workflows/pangene.nf b/workflows/genepal.nf similarity index 99% rename from workflows/pangene.nf rename to workflows/genepal.nf index 010bc14..9543981 100644 --- a/workflows/pangene.nf +++ b/workflows/genepal.nf @@ -21,7 +21,7 @@ include { GXF_FASTA_AGAT_SPADDINTRONS_SPEXTRACTSEQUENCES } from '../subworkflows log.info paramsSummaryLog(workflow) -workflow PANGENE { +workflow GENEPAL { // Versions channel ch_versions = Channel.empty() From 22304ecd0d6cf7ca32259fc2b01b3d9b84972b16 Mon Sep 17 00:00:00 2001 From: Usman Rashid Date: Fri, 16 Aug 2024 10:13:30 +1200 Subject: [PATCH 41/87] Added disk clean-up before ci test --- .github/workflows/test.yml | 3 +++ docs/parameters.md | 6 +++--- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index f085a4a..66e6122 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -44,6 +44,9 @@ jobs: with: version: "23.04.4" + - name: Disk space cleanup + uses: jlumbroso/free-disk-space@54081f138730dfa15788a46383842cd2f914a1be # v1.3.1 + - name: Run stub-test run: | nextflow run \ diff --git a/docs/parameters.md b/docs/parameters.md index b53c98a..ee94077 100644 --- a/docs/parameters.md +++ b/docs/parameters.md @@ -7,9 +7,9 @@ A NextFlow pipeline for pan-genome annotation | Parameter | Description | Type | Default | Required | Hidden | | ------------------------- | -------------------------------------------------------------------------------------------------------- | --------- | --------- | -------- | ------ | | `input` | Target assemblies listed in a CSV sheet | `string` | | True | | -| `protein_evidence` | Protein evidence provided as fasta files listed in a text sheet | `string` | | True | | -| `eggnogmapper_db_dir` | Eggnogmapper database directory | `string` | | True | | -| `eggnogmapper_tax_scope` | Eggnogmapper taxonomy scopre. Eukaryota: 2759, Viridiplantae: 33090, Archaea: 2157, Bacteria: 2, root: 1 | `integer` | | True | | +| `protein_evidence` | Protein evidence provided as a fasta file or multiple fasta files listed in a plain txt file | `string` | | True | | +| `eggnogmapper_db_dir` | Eggnogmapper database directory | `string` | | | | +| `eggnogmapper_tax_scope` | Eggnogmapper taxonomy scopre. Eukaryota: 2759, Viridiplantae: 33090, Archaea: 2157, Bacteria: 2, root: 1 | `integer` | 1 | | | | `rna_evidence` | FASTQ/BAM samples listed in a CSV sheet | `string` | | | | | `liftoff_annotations` | Reference annotations listed in a CSV sheet | `string` | | | | | `orthofinder_annotations` | Additional annotations for orthology listed in a CSV sheet | `string` | | | | From 2dc213b17037eca2aa4d9d9bc9b306d18e90f0d8 Mon Sep 17 00:00:00 2001 From: Usman Rashid Date: Fri, 16 Aug 2024 12:11:38 +1200 Subject: [PATCH 42/87] Simplified test file --- conf/test.config | 12 +----------- nextflow.config | 25 +++++++++++++------------ 2 files changed, 14 insertions(+), 23 deletions(-) diff --git a/conf/test.config b/conf/test.config index 5b23043..2ad145b 100644 --- a/conf/test.config +++ b/conf/test.config @@ -1,15 +1,5 @@ params { input = 'tests/minimal/assemblysheet.csv' protein_evidence = 'https://raw.githubusercontent.com/Gaius-Augustus/BRAKER/f58479fe5bb13a9e51c3ca09cb9e137cab3b8471/example/proteins.fa' -} - -// Additional args to BRAKER should be passed through braker_extra_args -// The config below is only for test purposes -process { - withName: '.*:FASTA_BRAKER3:BRAKER3' { - ext.args = [ - '-gff3', - '--gm_max_intergenic 10000 --skipOptimize' // Not recommended! Used here to make the test execute faster - ].join(' ').trim() - } + braker_extra_args = '--gm_max_intergenic 10000 --skipOptimize' } diff --git a/nextflow.config b/nextflow.config index ce227c4..df016c3 100644 --- a/nextflow.config +++ b/nextflow.config @@ -57,19 +57,7 @@ params { validationS3PathCheck = true } -manifest { - name = 'pangene' - author = """Usman Rashid, Jason Shiller""" - homePage = 'https://github.com/PlantandFoodResearch/pangene' - description = """A NextFlow pipeline for pan-genome annotation""" - mainScript = 'main.nf' - nextflowVersion = '!>=23.04.4' - version = '0.4.0+dev' - doi = '' -} - includeConfig './conf/base.config' -includeConfig './conf/modules.config' profiles { apptainer { @@ -104,3 +92,16 @@ trace { enabled = true file = "${params.outdir}/pipeline_info/execution_trace_${trace_timestamp}.txt" } + +manifest { + name = 'pangene' + author = """Usman Rashid, Jason Shiller""" + homePage = 'https://github.com/PlantandFoodResearch/pangene' + description = """A NextFlow pipeline for pan-genome annotation""" + mainScript = 'main.nf' + nextflowVersion = '!>=23.04.4' + version = '0.4.0+dev' + doi = '' +} + +includeConfig './conf/modules.config' From 3e1e801ca02d241bdae55a2aea963453b4dc3864 Mon Sep 17 00:00:00 2001 From: Usman Rashid Date: Mon, 19 Aug 2024 13:06:46 +1200 Subject: [PATCH 43/87] Updated test params --- CHANGELOG.md | 2 +- conf/test.config | 8 +++++--- local_pangene | 5 +++-- tests/minimal/assemblysheet.csv | 2 +- tests/minimal/params.json | 3 ++- 5 files changed, 12 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bfb3c8d..13c2478 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## 0.4.0+dev - [15-Aug-2024] +## 0.4.0+dev - [19-Aug-2024] ### `Added` diff --git a/conf/test.config b/conf/test.config index 2ad145b..98293d9 100644 --- a/conf/test.config +++ b/conf/test.config @@ -1,5 +1,7 @@ params { - input = 'tests/minimal/assemblysheet.csv' - protein_evidence = 'https://raw.githubusercontent.com/Gaius-Augustus/BRAKER/f58479fe5bb13a9e51c3ca09cb9e137cab3b8471/example/proteins.fa' - braker_extra_args = '--gm_max_intergenic 10000 --skipOptimize' + input = "${projectDir}/tests/minimal/assemblysheet.csv" + protein_evidence = 'https://raw.githubusercontent.com/Gaius-Augustus/BRAKER/f58479fe5bb13a9e51c3ca09cb9e137cab3b8471/example/proteins.fa' + + braker_extra_args = '--gm_max_intergenic 10000 --skipOptimize' // Added for faster test execution! Do not use with actual data! + busco_lineage_datasets = 'eudicots_odb10' } diff --git a/local_pangene b/local_pangene index 2808b48..6f287b1 100755 --- a/local_pangene +++ b/local_pangene @@ -18,5 +18,6 @@ nextflow run \ -resume \ $stub \ --max_cpus 8 \ - --max_memory '32.GB' - # --eggnogmapper_db_dir ../dbs/emapperdb/5.0.2 + --max_memory '32.GB' \ + --eggnogmapper_tax_scope 33090 \ + --eggnogmapper_db_dir ../dbs/emapperdb/5.0.2 diff --git a/tests/minimal/assemblysheet.csv b/tests/minimal/assemblysheet.csv index 20b65b1..a77d36a 100644 --- a/tests/minimal/assemblysheet.csv +++ b/tests/minimal/assemblysheet.csv @@ -1,2 +1,2 @@ tag,fasta,is_masked -test,https://raw.githubusercontent.com/Gaius-Augustus/BRAKER/f58479fe5bb13a9e51c3ca09cb9e137cab3b8471/example/genome.fa,yes +a_thaliana,https://raw.githubusercontent.com/Gaius-Augustus/BRAKER/f58479fe5bb13a9e51c3ca09cb9e137cab3b8471/example/genome.fa,yes diff --git a/tests/minimal/params.json b/tests/minimal/params.json index 703a6a4..c3e9566 100644 --- a/tests/minimal/params.json +++ b/tests/minimal/params.json @@ -1,5 +1,6 @@ { "input": "tests/minimal/assemblysheet.csv", "protein_evidence": "https://raw.githubusercontent.com/Gaius-Augustus/BRAKER/f58479fe5bb13a9e51c3ca09cb9e137cab3b8471/example/proteins.fa", - "braker_extra_args": "--gm_max_intergenic 10000 --skipOptimize" + "braker_extra_args": "--gm_max_intergenic 10000 --skipOptimize", + "busco_lineage_datasets": "eudicots_odb10" } From 402063d4e24dc0de109a0dca944da7382c1de74d Mon Sep 17 00:00:00 2001 From: Usman Rashid Date: Mon, 19 Aug 2024 14:05:41 +1200 Subject: [PATCH 44/87] More renaming --- README.md | 2 +- docs/parameters.md | 2 +- nextflow.config | 6 +++--- nextflow_schema.json | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index b29bac5..712a5d1 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ [![Lint/stub on Linux/Docker](https://github.com/PlantandFoodResearch/genepal/actions/workflows/test.yml/badge.svg)](https://github.com/PlantandFoodResearch/genepal/actions/workflows/test.yml) -A NextFlow pipeline for pan-genome annotation. It can also be used for annotation of a single genome. +A NextFlow pipeline for single genome and pan-genome annotation. ## Flowchart diff --git a/docs/parameters.md b/docs/parameters.md index e25939e..a4638c5 100644 --- a/docs/parameters.md +++ b/docs/parameters.md @@ -1,6 +1,6 @@ # plantandfoodresearch/genepal pipeline parameters -A NextFlow pipeline for pan-genome annotation +A NextFlow pipeline for single genome and pan-genome annotation ## Input/output options diff --git a/nextflow.config b/nextflow.config index df016c3..57d8d4e 100644 --- a/nextflow.config +++ b/nextflow.config @@ -94,10 +94,10 @@ trace { } manifest { - name = 'pangene' + name = 'genepal' author = """Usman Rashid, Jason Shiller""" - homePage = 'https://github.com/PlantandFoodResearch/pangene' - description = """A NextFlow pipeline for pan-genome annotation""" + homePage = 'https://github.com/PlantandFoodResearch/genepal' + description = """A NextFlow pipeline for single genome and pan-genome annotation""" mainScript = 'main.nf' nextflowVersion = '!>=23.04.4' version = '0.4.0+dev' diff --git a/nextflow_schema.json b/nextflow_schema.json index 3d44e01..13706a9 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -2,7 +2,7 @@ "$schema": "http://json-schema.org/draft-07/schema", "$id": "https://raw.githubusercontent.com/plantandfoodresearch/genepal/master/nextflow_schema.json", "title": "plantandfoodresearch/genepal pipeline parameters", - "description": "A NextFlow pipeline for pan-genome annotation", + "description": "A NextFlow pipeline for single genome and pan-genome annotation", "type": "object", "definitions": { "input_output_options": { From 50ed8e84355133bb8cc2a1102bba29d719b5df82 Mon Sep 17 00:00:00 2001 From: Usman Rashid Date: Mon, 19 Aug 2024 14:45:36 +1200 Subject: [PATCH 45/87] initial template build from nf-core/tools, version 2.14.1 --- .devcontainer/devcontainer.json | 20 + .editorconfig | 42 +- .gitattributes | 4 + .github/.dockstore.yml | 6 + .github/CONTRIBUTING.md | 118 + .github/ISSUE_TEMPLATE/bug_report.yml | 54 + .github/ISSUE_TEMPLATE/feature_request.yml | 11 + .github/PULL_REQUEST_TEMPLATE.md | 25 + .github/check_module_versions.py | 320 --- .github/contributors.sh | 5 - .github/version_checks.sh | 8 - .github/workflows/branch.yml | 44 + .github/workflows/ci.yml | 46 + .github/workflows/clean-up.yml | 24 + .github/workflows/download_pipeline.yml | 86 + .github/workflows/fix-linting.yml | 89 + .github/workflows/linting.yml | 68 + .github/workflows/linting_comment.yml | 28 + .github/workflows/release-announcements.yml | 75 + .github/workflows/test.yml | 74 - .gitignore | 11 +- .gitpod.yml | 20 + .nf-core.yml | 26 + .pre-commit-config.yaml | 13 +- .prettierignore | 18 +- CHANGELOG.md | 152 +- CITATIONS.md | 41 + LICENSE | 2 +- README.md | 109 +- assets/adaptivecard.json | 67 + assets/email_template.html | 53 + assets/email_template.txt | 31 + assets/methods_description_template.yml | 29 + assets/multiqc_config.yml | 14 + assets/rrna-db-defaults.txt | 8 - assets/rrna-db-test.txt | 1 - assets/samplesheet.csv | 3 + assets/schema_input.json | 71 +- assets/schema_liftoff.json | 25 - assets/schema_orthofinder.json | 25 - assets/schema_rna.json | 46 - assets/sendmail_template.txt | 53 + assets/slackreport.json | 34 + assets/tsebra-template.cfg | 16 - cleanNXF.sh | 11 - conf/base.config | 112 +- conf/modules.config | 366 +-- conf/test.config | 29 +- conf/test_full.config | 24 + docs/README.md | 8 + docs/images/mqc_fastqc_adapter.png | Bin 0 -> 23458 bytes docs/images/mqc_fastqc_counts.png | Bin 0 -> 33918 bytes docs/images/mqc_fastqc_quality.png | Bin 0 -> 55769 bytes docs/img/genepal.drawio | 385 --- docs/img/genepal.png | Bin 334096 -> 0 bytes docs/output.md | 71 + docs/parameters.md | 86 - docs/usage.md | 224 ++ local_genepal | 23 - main.nf | 96 +- modules.json | 216 +- .../gallvp/agat/spaddintrons/environment.yml | 9 - modules/gallvp/agat/spaddintrons/main.nf | 50 - modules/gallvp/agat/spaddintrons/meta.yml | 55 - .../agat/spaddintrons/tests/main.nf.test | 61 - .../agat/spaddintrons/tests/main.nf.test.snap | 72 - .../agat/spextractsequences/environment.yml | 9 - .../gallvp/agat/spextractsequences/main.nf | 52 - .../gallvp/agat/spextractsequences/meta.yml | 60 - .../spextractsequences/tests/main.nf.test | 62 - .../tests/main.nf.test.snap | 72 - modules/gallvp/braker3/main.nf | 93 - modules/gallvp/braker3/meta.yml | 87 - modules/gallvp/braker3/tests/main.nf.test | 77 - .../gallvp/braker3/tests/main.nf.test.snap | 181 -- modules/gallvp/braker3/tests/nextflow.config | 5 - modules/gallvp/busco/busco/environment.yml | 7 - modules/gallvp/busco/busco/main.nf | 107 - modules/gallvp/busco/busco/meta.yml | 98 - modules/gallvp/busco/busco/tests/main.nf.test | 415 --- .../busco/busco/tests/main.nf.test.snap | 230 -- .../busco/tests/nextflow.augustus.config | 5 - .../gallvp/busco/busco/tests/nextflow.config | 5 - .../busco/busco/tests/nextflow.metaeuk.config | 5 - modules/gallvp/busco/busco/tests/old_test.yml | 624 ----- modules/gallvp/busco/busco/tests/tags.yml | 2 - .../gallvp/busco/generateplot/environment.yml | 9 - modules/gallvp/busco/generateplot/main.nf | 45 - modules/gallvp/busco/generateplot/meta.yml | 35 - .../busco/generateplot/tests/main.nf.test | 72 - .../generateplot/tests/main.nf.test.snap | 37 - .../gallvp/busco/generateplot/tests/tags.yml | 2 - .../custom/restoregffids/environment.yml | 9 - modules/gallvp/custom/restoregffids/main.nf | 35 - modules/gallvp/custom/restoregffids/meta.yml | 58 - .../templates/restore_gff_ids.py | 47 - .../custom/restoregffids/tests/main.nf.test | 63 - .../restoregffids/tests/main.nf.test.snap | 61 - .../custom/shortenfastaids/environment.yml | 11 - modules/gallvp/custom/shortenfastaids/main.nf | 38 - .../gallvp/custom/shortenfastaids/meta.yml | 58 - .../templates/shorten_fasta_ids.py | 168 -- .../custom/shortenfastaids/tests/main.nf.test | 123 - .../shortenfastaids/tests/main.nf.test.snap | 227 -- modules/gallvp/edta/edta/main.nf | 92 - modules/gallvp/edta/edta/meta.yml | 82 - modules/gallvp/edta/edta/tests/main.nf.test | 84 - .../gallvp/edta/edta/tests/main.nf.test.snap | 81 - .../gallvp/edta/edta/tests/nextflow.config | 5 - modules/gallvp/gffread/environment.yml | 7 - modules/gallvp/gffread/main.nf | 60 - modules/gallvp/gffread/meta.yml | 55 - modules/gallvp/gffread/tests/main.nf.test | 223 -- .../gallvp/gffread/tests/main.nf.test.snap | 272 -- .../gffread/tests/nextflow-fasta.config | 5 - .../gallvp/gffread/tests/nextflow-gff3.config | 5 - modules/gallvp/gffread/tests/nextflow.config | 5 - modules/gallvp/gffread/tests/tags.yml | 2 - .../gallvp/ltrretriever/lai/environment.yml | 9 - modules/gallvp/ltrretriever/lai/main.nf | 71 - modules/gallvp/ltrretriever/lai/meta.yml | 70 - .../ltrretriever/lai/tests/main.nf.test | 166 -- .../ltrretriever/lai/tests/main.nf.test.snap | 100 - .../ltrretriever/lai/tests/nextflow.config | 15 - .../gallvp/ltrretriever/lai/tests/tags.yml | 2 - .../repeatmasker/repeatmasker/environment.yml | 9 - .../gallvp/repeatmasker/repeatmasker/main.nf | 62 - .../gallvp/repeatmasker/repeatmasker/meta.yml | 64 - .../repeatmasker/tests/main.nf.test | 68 - .../repeatmasker/tests/main.nf.test.snap | 118 - .../repeatmasker/tests/nextflow.config | 5 - modules/local/utils.nf | 69 - .../agat/convertspgff2gtf/environment.yml | 7 - modules/nf-core/agat/convertspgff2gtf/main.nf | 48 - .../nf-core/agat/convertspgff2gtf/meta.yml | 44 - .../agat/convertspgff2gtf/tests/main.nf.test | 62 - .../convertspgff2gtf/tests/main.nf.test.snap | 36 - .../agat/convertspgff2gtf/tests/tags.yml | 2 - .../agat/convertspgxf2gxf/environment.yml | 7 - modules/nf-core/agat/convertspgxf2gxf/main.nf | 48 - .../nf-core/agat/convertspgxf2gxf/meta.yml | 43 - .../agat/convertspgxf2gxf/tests/main.nf.test | 60 - .../convertspgxf2gxf/tests/main.nf.test.snap | 71 - .../agat/convertspgxf2gxf/tests/tags.yml | 2 - .../environment.yml | 9 - .../agat/spfilterfeaturefromkilllist/main.nf | 53 - .../agat/spfilterfeaturefromkilllist/meta.yml | 60 - .../tests/main.nf.test | 104 - .../tests/main.nf.test.snap | 101 - .../agat/spmergeannotations/environment.yml | 9 - .../nf-core/agat/spmergeannotations/main.nf | 53 - .../nf-core/agat/spmergeannotations/meta.yml | 54 - .../spmergeannotations/tests/main.nf.test | 130 - .../tests/main.nf.test.snap | 92 - .../agat/spmergeannotations/tests/tags.yml | 2 - modules/nf-core/cat/cat/environment.yml | 7 - modules/nf-core/cat/cat/main.nf | 78 - modules/nf-core/cat/cat/meta.yml | 36 - modules/nf-core/cat/cat/tests/main.nf.test | 191 -- .../nf-core/cat/cat/tests/main.nf.test.snap | 147 - .../cat/tests/nextflow_unzipped_zipped.config | 6 - .../cat/tests/nextflow_zipped_unzipped.config | 8 - modules/nf-core/cat/cat/tests/tags.yml | 2 - modules/nf-core/cat/fastq/environment.yml | 7 - modules/nf-core/cat/fastq/main.nf | 79 - modules/nf-core/cat/fastq/meta.yml | 42 - modules/nf-core/cat/fastq/tests/main.nf.test | 248 -- .../nf-core/cat/fastq/tests/main.nf.test.snap | 376 --- modules/nf-core/cat/fastq/tests/tags.yml | 2 - .../dumpsoftwareversions/environment.yml | 7 - .../custom/dumpsoftwareversions/main.nf | 24 - .../custom/dumpsoftwareversions/meta.yml | 37 - .../templates/dumpsoftwareversions.py | 100 - .../dumpsoftwareversions/tests/main.nf.test | 43 - .../tests/main.nf.test.snap | 33 - .../dumpsoftwareversions/tests/tags.yml | 2 - modules/nf-core/eggnogmapper/environment.yml | 7 - modules/nf-core/eggnogmapper/main.nf | 68 - modules/nf-core/eggnogmapper/meta.yml | 70 - .../nf-core/eggnogmapper/tests/main.nf.test | 95 - .../eggnogmapper/tests/main.nf.test.snap | 60 - modules/nf-core/eggnogmapper/tests/tags.yml | 2 - .../nf-core/fastavalidator/environment.yml | 9 - modules/nf-core/fastavalidator/main.nf | 62 - modules/nf-core/fastavalidator/meta.yml | 53 - .../nf-core/fastavalidator/tests/main.nf.test | 60 - .../fastavalidator/tests/main.nf.test.snap | 76 - modules/nf-core/fastavalidator/tests/tags.yml | 2 - modules/nf-core/fastp/main.nf | 125 - modules/nf-core/fastp/meta.yml | 79 - modules/nf-core/fastp/tests/main.nf.test | 576 ---- modules/nf-core/fastp/tests/main.nf.test.snap | 1331 --------- .../fastp/tests/nextflow.interleaved.config | 5 - .../fastp/tests/nextflow.save_failed.config | 5 - modules/nf-core/fastp/tests/tags.yml | 2 - modules/nf-core/fastqc/tests/main.nf.test | 225 +- .../nf-core/fastqc/tests/main.nf.test.snap | 370 +-- modules/nf-core/gffcompare/environment.yml | 7 - modules/nf-core/gffcompare/main.nf | 63 - modules/nf-core/gffcompare/meta.yml | 91 - modules/nf-core/gffread/environment.yml | 7 - modules/nf-core/gffread/main.nf | 60 - modules/nf-core/gffread/meta.yml | 55 - modules/nf-core/gffread/tests/main.nf.test | 223 -- .../nf-core/gffread/tests/main.nf.test.snap | 272 -- .../gffread/tests/nextflow-fasta.config | 5 - .../gffread/tests/nextflow-gff3.config | 5 - modules/nf-core/gffread/tests/nextflow.config | 5 - modules/nf-core/gffread/tests/tags.yml | 2 - modules/nf-core/gt/gff3/environment.yml | 9 - modules/nf-core/gt/gff3/main.nf | 51 - modules/nf-core/gt/gff3/meta.yml | 48 - modules/nf-core/gt/gff3/tests/main.nf.test | 61 - .../nf-core/gt/gff3/tests/main.nf.test.snap | 72 - modules/nf-core/gt/gff3/tests/nextflow.config | 3 - modules/nf-core/gt/gff3/tests/tags.yml | 2 - modules/nf-core/gunzip/environment.yml | 9 - modules/nf-core/gunzip/main.nf | 55 - modules/nf-core/gunzip/meta.yml | 40 - modules/nf-core/gunzip/tests/main.nf.test | 121 - .../nf-core/gunzip/tests/main.nf.test.snap | 134 - modules/nf-core/gunzip/tests/nextflow.config | 5 - modules/nf-core/gunzip/tests/tags.yml | 2 - modules/nf-core/liftoff/environment.yml | 9 - modules/nf-core/liftoff/main.nf | 66 - modules/nf-core/liftoff/meta.yml | 71 - modules/nf-core/liftoff/tests/main.nf.test | 102 - .../nf-core/liftoff/tests/main.nf.test.snap | 96 - modules/nf-core/liftoff/tests/nextflow.config | 5 - .../{fastp => multiqc}/environment.yml | 4 +- modules/nf-core/multiqc/main.nf | 55 + modules/nf-core/multiqc/meta.yml | 58 + modules/nf-core/multiqc/tests/main.nf.test | 84 + .../nf-core/multiqc/tests/main.nf.test.snap | 41 + modules/nf-core/multiqc/tests/tags.yml | 2 + modules/nf-core/orthofinder/environment.yml | 9 - modules/nf-core/orthofinder/main.nf | 69 - modules/nf-core/orthofinder/meta.yml | 50 - .../nf-core/orthofinder/tests/main.nf.test | 96 - .../orthofinder/tests/main.nf.test.snap | 438 --- modules/nf-core/orthofinder/tests/tags.yml | 2 - .../builddatabase/environment.yml | 9 - .../repeatmodeler/builddatabase/main.nf | 50 - .../repeatmodeler/builddatabase/meta.yml | 44 - .../builddatabase/tests/main.nf.test | 60 - .../builddatabase/tests/main.nf.test.snap | 92 - .../builddatabase/tests/tags.yml | 2 - .../repeatmodeler/environment.yml | 9 - .../repeatmodeler/repeatmodeler/main.nf | 54 - .../repeatmodeler/repeatmodeler/meta.yml | 52 - .../repeatmodeler/tests/main.nf.test | 74 - .../repeatmodeler/tests/main.nf.test.snap | 113 - .../repeatmodeler/tests/tags.yml | 2 - modules/nf-core/samtools/cat/environment.yml | 8 - modules/nf-core/samtools/cat/main.nf | 51 - modules/nf-core/samtools/cat/meta.yml | 51 - .../nf-core/samtools/cat/tests/main.nf.test | 61 - .../samtools/cat/tests/main.nf.test.snap | 70 - modules/nf-core/samtools/cat/tests/tags.yml | 2 - modules/nf-core/sortmerna/environment.yml | 7 - modules/nf-core/sortmerna/main.nf | 110 - modules/nf-core/sortmerna/meta.yml | 77 - .../sortmerna/tests/indexing_only.config | 5 - modules/nf-core/sortmerna/tests/main.nf.test | 327 --- .../nf-core/sortmerna/tests/main.nf.test.snap | 352 --- .../sortmerna/tests/premade_index.config | 8 - modules/nf-core/sortmerna/tests/tags.yml | 2 - modules/nf-core/star/align/environment.yml | 10 - modules/nf-core/star/align/main.nf | 109 - modules/nf-core/star/align/meta.yml | 115 - modules/nf-core/star/align/tests/main.nf.test | 609 ----- .../star/align/tests/main.nf.test.snap | 1973 -------------- .../star/align/tests/nextflow.arriba.config | 14 - .../nf-core/star/align/tests/nextflow.config | 14 - .../align/tests/nextflow.starfusion.config | 14 - modules/nf-core/star/align/tests/tags.yml | 2 - .../star/genomegenerate/environment.yml | 10 - modules/nf-core/star/genomegenerate/main.nf | 119 - modules/nf-core/star/genomegenerate/meta.yml | 53 - .../star/genomegenerate/tests/main.nf.test | 114 - .../genomegenerate/tests/main.nf.test.snap | 148 - .../star/genomegenerate/tests/tags.yml | 2 - modules/nf-core/tsebra/environment.yml | 9 - modules/nf-core/tsebra/main.nf | 62 - modules/nf-core/tsebra/meta.yml | 66 - modules/nf-core/tsebra/tests/main.nf.test | 91 - .../nf-core/tsebra/tests/main.nf.test.snap | 100 - modules/nf-core/tsebra/tests/tags.yml | 2 - .../nf-core/umitools/extract/environment.yml | 7 - modules/nf-core/umitools/extract/main.nf | 74 - modules/nf-core/umitools/extract/meta.yml | 48 - .../umitools/extract/tests/main.nf.test | 106 - .../umitools/extract/tests/main.nf.test.snap | 167 -- .../umitools/extract/tests/nextflow.config | 9 - .../nf-core/umitools/extract/tests/tags.yml | 2 - nextflow.config | 327 ++- nextflow_schema.json | 416 ++- pfr/params.json | 8 - pfr/profile.config | 17 - pfr_genepal | 49 - pyproject.toml | 15 - subworkflows/gallvp/fasta_edta_lai/main.nf | 170 -- subworkflows/gallvp/fasta_edta_lai/meta.yml | 69 - .../gallvp/fasta_edta_lai/tests/main.nf.test | 79 - .../fasta_edta_lai/tests/main.nf.test.snap | 101 - .../fasta_edta_lai/tests/nextflow.config | 5 - .../gallvp/fasta_gxf_busco_plot/main.nf | 169 -- .../gallvp/fasta_gxf_busco_plot/meta.yml | 106 - .../fasta_gxf_busco_plot/tests/main.nf.test | 104 - .../tests/main.nf.test.snap | 231 -- .../tests/nextflow.config | 5 - .../main.nf | 117 - .../meta.yml | 54 - .../tests/main.nf.test | 83 - .../tests/main.nf.test.snap | 104 - .../tests/nextflow.config | 6 - subworkflows/local/align_rnaseq.nf | 81 - subworkflows/local/fasta_braker3.nf | 65 - subworkflows/local/fasta_liftoff.nf | 186 -- subworkflows/local/fasta_orthofinder.nf | 33 - subworkflows/local/file_gunzip.nf | 20 - subworkflows/local/gff_eggnogmapper.nf | 49 - subworkflows/local/gff_merge_cleanup.nf | 183 -- subworkflows/local/gff_store.nf | 141 - .../gff_tsebra_spfilterfeaturefromkilllist.nf | 186 -- subworkflows/local/prepare_assembly.nf | 159 -- subworkflows/local/prepare_ext_prots.nf | 42 - subworkflows/local/preprocess_rnaseq.nf | 123 - subworkflows/local/purge_braker_models.nf | 96 - subworkflows/local/purge_nohit_models.nf | 70 - .../utils_nfcore_genepal_pipeline/main.nf | 228 ++ .../fastq_fastqc_umitools_fastp/main.nf | 164 -- .../fastq_fastqc_umitools_fastp/meta.yml | 129 - .../tests/main.nf.test | 973 ------- .../tests/main.nf.test.snap | 2407 ----------------- .../tests/nextflow.config | 11 - .../tests/nextflow.save_trimmed.config | 6 - .../tests/tags.yml | 2 - .../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 | 446 +++ .../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 + tests/minimal/assemblysheet.csv | 2 - tests/minimal/params.json | 6 - tests/stub/assemblysheet.csv | 4 - tests/stub/bam/1505KHS-0090_Root3.red5_v3.bam | 0 tests/stub/bam/1505KHS-0092_Root3.red5_v3.bam | 0 tests/stub/braker/donghong.gff3.gz | 0 tests/stub/braker/donghong.hints.gff.gz | 0 tests/stub/braker/red5_v2p1.gff3.gz | 0 tests/stub/braker/red5_v2p1.hints.gff.gz | 0 tests/stub/emapperdb/5.0.2/eggnog.db | 0 .../stub/emapperdb/5.0.2/eggnog_proteins.dmnd | 0 .../RU01.20221115150135.chr1.pep.fasta.gz | 0 .../RU01.20221115150135.chr2.pep.fasta.gz | 0 tests/stub/external-protein-fastas.txt | 2 - ...Root1_162bp_C728RACXX_Lane1_R1.1k.fastq.gz | 0 ...Root1_162bp_C728RACXX_Lane1_R2.1k.fastq.gz | 0 ...Root2_156bp_C728RACXX_Lane1_R1.1k.fastq.gz | 0 ...Root2_156bp_C728RACXX_Lane1_R2.1k.fastq.gz | 0 ...cane3_165bp_C728RACXX_Lane1_R1.1k.fastq.gz | 0 ...cane3_165bp_C728RACXX_Lane1_R2.1k.fastq.gz | 0 .../liftoff/RU01.20221115150135.chr1.gff3.gz | 0 .../liftoff/RU01.20221115150135.chr2.gff3.gz | 0 tests/stub/liftoff/Russell_V2a.chr1.fsa.gz | 0 tests/stub/liftoff/Russell_V2a.chr2.fsa.gz | 0 tests/stub/liftoffannotations.csv | 3 - tests/stub/params.json | 10 - tests/stub/rnasheet.csv | 6 - tests/stub/target/donghong.chr1.fsa.gz | 0 tests/stub/target/red5_v2p1_chr1.fasta.gz | 0 tests/stub/target/red5_v3_chr1.fasta | 0 tests/stub/te_lib/donghong.TElib.fa.gz | 0 tower.yml | 5 + workflows/genepal.nf | 484 +--- 391 files changed, 4365 insertions(+), 28611 deletions(-) create mode 100644 .devcontainer/devcontainer.json create mode 100644 .gitattributes create mode 100644 .github/.dockstore.yml create mode 100644 .github/CONTRIBUTING.md create mode 100644 .github/ISSUE_TEMPLATE/bug_report.yml create mode 100644 .github/ISSUE_TEMPLATE/feature_request.yml create mode 100644 .github/PULL_REQUEST_TEMPLATE.md delete mode 100755 .github/check_module_versions.py delete mode 100755 .github/contributors.sh delete mode 100755 .github/version_checks.sh create mode 100644 .github/workflows/branch.yml create mode 100644 .github/workflows/ci.yml create mode 100644 .github/workflows/clean-up.yml create mode 100644 .github/workflows/download_pipeline.yml create mode 100644 .github/workflows/fix-linting.yml create mode 100644 .github/workflows/linting.yml create mode 100644 .github/workflows/linting_comment.yml create mode 100644 .github/workflows/release-announcements.yml delete mode 100644 .github/workflows/test.yml create mode 100644 .gitpod.yml create mode 100644 CITATIONS.md create mode 100644 assets/adaptivecard.json create mode 100644 assets/email_template.html create mode 100644 assets/email_template.txt create mode 100644 assets/methods_description_template.yml create mode 100644 assets/multiqc_config.yml delete mode 100644 assets/rrna-db-defaults.txt delete mode 100644 assets/rrna-db-test.txt create mode 100644 assets/samplesheet.csv delete mode 100644 assets/schema_liftoff.json delete mode 100644 assets/schema_orthofinder.json delete mode 100644 assets/schema_rna.json create mode 100644 assets/sendmail_template.txt create mode 100644 assets/slackreport.json delete mode 100644 assets/tsebra-template.cfg delete mode 100755 cleanNXF.sh create mode 100644 conf/test_full.config create mode 100644 docs/README.md create mode 100755 docs/images/mqc_fastqc_adapter.png create mode 100755 docs/images/mqc_fastqc_counts.png create mode 100755 docs/images/mqc_fastqc_quality.png delete mode 100644 docs/img/genepal.drawio delete mode 100644 docs/img/genepal.png create mode 100644 docs/output.md delete mode 100644 docs/parameters.md create mode 100644 docs/usage.md delete mode 100755 local_genepal mode change 100755 => 100644 main.nf delete mode 100644 modules/gallvp/agat/spaddintrons/environment.yml delete mode 100644 modules/gallvp/agat/spaddintrons/main.nf delete mode 100644 modules/gallvp/agat/spaddintrons/meta.yml delete mode 100644 modules/gallvp/agat/spaddintrons/tests/main.nf.test delete mode 100644 modules/gallvp/agat/spaddintrons/tests/main.nf.test.snap delete mode 100644 modules/gallvp/agat/spextractsequences/environment.yml delete mode 100644 modules/gallvp/agat/spextractsequences/main.nf delete mode 100644 modules/gallvp/agat/spextractsequences/meta.yml delete mode 100644 modules/gallvp/agat/spextractsequences/tests/main.nf.test delete mode 100644 modules/gallvp/agat/spextractsequences/tests/main.nf.test.snap delete mode 100644 modules/gallvp/braker3/main.nf delete mode 100644 modules/gallvp/braker3/meta.yml delete mode 100644 modules/gallvp/braker3/tests/main.nf.test delete mode 100644 modules/gallvp/braker3/tests/main.nf.test.snap delete mode 100644 modules/gallvp/braker3/tests/nextflow.config delete mode 100644 modules/gallvp/busco/busco/environment.yml delete mode 100644 modules/gallvp/busco/busco/main.nf delete mode 100644 modules/gallvp/busco/busco/meta.yml delete mode 100644 modules/gallvp/busco/busco/tests/main.nf.test delete mode 100644 modules/gallvp/busco/busco/tests/main.nf.test.snap delete mode 100644 modules/gallvp/busco/busco/tests/nextflow.augustus.config delete mode 100644 modules/gallvp/busco/busco/tests/nextflow.config delete mode 100644 modules/gallvp/busco/busco/tests/nextflow.metaeuk.config delete mode 100644 modules/gallvp/busco/busco/tests/old_test.yml delete mode 100644 modules/gallvp/busco/busco/tests/tags.yml delete mode 100644 modules/gallvp/busco/generateplot/environment.yml delete mode 100644 modules/gallvp/busco/generateplot/main.nf delete mode 100644 modules/gallvp/busco/generateplot/meta.yml delete mode 100644 modules/gallvp/busco/generateplot/tests/main.nf.test delete mode 100644 modules/gallvp/busco/generateplot/tests/main.nf.test.snap delete mode 100644 modules/gallvp/busco/generateplot/tests/tags.yml delete mode 100644 modules/gallvp/custom/restoregffids/environment.yml delete mode 100644 modules/gallvp/custom/restoregffids/main.nf delete mode 100644 modules/gallvp/custom/restoregffids/meta.yml delete mode 100755 modules/gallvp/custom/restoregffids/templates/restore_gff_ids.py delete mode 100644 modules/gallvp/custom/restoregffids/tests/main.nf.test delete mode 100644 modules/gallvp/custom/restoregffids/tests/main.nf.test.snap delete mode 100644 modules/gallvp/custom/shortenfastaids/environment.yml delete mode 100644 modules/gallvp/custom/shortenfastaids/main.nf delete mode 100644 modules/gallvp/custom/shortenfastaids/meta.yml delete mode 100755 modules/gallvp/custom/shortenfastaids/templates/shorten_fasta_ids.py delete mode 100644 modules/gallvp/custom/shortenfastaids/tests/main.nf.test delete mode 100644 modules/gallvp/custom/shortenfastaids/tests/main.nf.test.snap delete mode 100644 modules/gallvp/edta/edta/main.nf delete mode 100644 modules/gallvp/edta/edta/meta.yml delete mode 100644 modules/gallvp/edta/edta/tests/main.nf.test delete mode 100644 modules/gallvp/edta/edta/tests/main.nf.test.snap delete mode 100644 modules/gallvp/edta/edta/tests/nextflow.config delete mode 100644 modules/gallvp/gffread/environment.yml delete mode 100644 modules/gallvp/gffread/main.nf delete mode 100644 modules/gallvp/gffread/meta.yml delete mode 100644 modules/gallvp/gffread/tests/main.nf.test delete mode 100644 modules/gallvp/gffread/tests/main.nf.test.snap delete mode 100644 modules/gallvp/gffread/tests/nextflow-fasta.config delete mode 100644 modules/gallvp/gffread/tests/nextflow-gff3.config delete mode 100644 modules/gallvp/gffread/tests/nextflow.config delete mode 100644 modules/gallvp/gffread/tests/tags.yml delete mode 100644 modules/gallvp/ltrretriever/lai/environment.yml delete mode 100644 modules/gallvp/ltrretriever/lai/main.nf delete mode 100644 modules/gallvp/ltrretriever/lai/meta.yml delete mode 100644 modules/gallvp/ltrretriever/lai/tests/main.nf.test delete mode 100644 modules/gallvp/ltrretriever/lai/tests/main.nf.test.snap delete mode 100644 modules/gallvp/ltrretriever/lai/tests/nextflow.config delete mode 100644 modules/gallvp/ltrretriever/lai/tests/tags.yml delete mode 100644 modules/gallvp/repeatmasker/repeatmasker/environment.yml delete mode 100644 modules/gallvp/repeatmasker/repeatmasker/main.nf delete mode 100644 modules/gallvp/repeatmasker/repeatmasker/meta.yml delete mode 100644 modules/gallvp/repeatmasker/repeatmasker/tests/main.nf.test delete mode 100644 modules/gallvp/repeatmasker/repeatmasker/tests/main.nf.test.snap delete mode 100644 modules/gallvp/repeatmasker/repeatmasker/tests/nextflow.config delete mode 100644 modules/local/utils.nf delete mode 100644 modules/nf-core/agat/convertspgff2gtf/environment.yml delete mode 100644 modules/nf-core/agat/convertspgff2gtf/main.nf delete mode 100644 modules/nf-core/agat/convertspgff2gtf/meta.yml delete mode 100644 modules/nf-core/agat/convertspgff2gtf/tests/main.nf.test delete mode 100644 modules/nf-core/agat/convertspgff2gtf/tests/main.nf.test.snap delete mode 100644 modules/nf-core/agat/convertspgff2gtf/tests/tags.yml delete mode 100644 modules/nf-core/agat/convertspgxf2gxf/environment.yml delete mode 100644 modules/nf-core/agat/convertspgxf2gxf/main.nf delete mode 100644 modules/nf-core/agat/convertspgxf2gxf/meta.yml delete mode 100644 modules/nf-core/agat/convertspgxf2gxf/tests/main.nf.test delete mode 100644 modules/nf-core/agat/convertspgxf2gxf/tests/main.nf.test.snap delete mode 100644 modules/nf-core/agat/convertspgxf2gxf/tests/tags.yml delete mode 100644 modules/nf-core/agat/spfilterfeaturefromkilllist/environment.yml delete mode 100644 modules/nf-core/agat/spfilterfeaturefromkilllist/main.nf delete mode 100644 modules/nf-core/agat/spfilterfeaturefromkilllist/meta.yml delete mode 100644 modules/nf-core/agat/spfilterfeaturefromkilllist/tests/main.nf.test delete mode 100644 modules/nf-core/agat/spfilterfeaturefromkilllist/tests/main.nf.test.snap delete mode 100644 modules/nf-core/agat/spmergeannotations/environment.yml delete mode 100644 modules/nf-core/agat/spmergeannotations/main.nf delete mode 100644 modules/nf-core/agat/spmergeannotations/meta.yml delete mode 100644 modules/nf-core/agat/spmergeannotations/tests/main.nf.test delete mode 100644 modules/nf-core/agat/spmergeannotations/tests/main.nf.test.snap delete mode 100644 modules/nf-core/agat/spmergeannotations/tests/tags.yml delete mode 100644 modules/nf-core/cat/cat/environment.yml delete mode 100644 modules/nf-core/cat/cat/main.nf delete mode 100644 modules/nf-core/cat/cat/meta.yml delete mode 100644 modules/nf-core/cat/cat/tests/main.nf.test delete mode 100644 modules/nf-core/cat/cat/tests/main.nf.test.snap delete mode 100644 modules/nf-core/cat/cat/tests/nextflow_unzipped_zipped.config delete mode 100644 modules/nf-core/cat/cat/tests/nextflow_zipped_unzipped.config delete mode 100644 modules/nf-core/cat/cat/tests/tags.yml delete mode 100644 modules/nf-core/cat/fastq/environment.yml delete mode 100644 modules/nf-core/cat/fastq/main.nf delete mode 100644 modules/nf-core/cat/fastq/meta.yml delete mode 100644 modules/nf-core/cat/fastq/tests/main.nf.test delete mode 100644 modules/nf-core/cat/fastq/tests/main.nf.test.snap delete mode 100644 modules/nf-core/cat/fastq/tests/tags.yml delete mode 100644 modules/nf-core/custom/dumpsoftwareversions/environment.yml delete mode 100644 modules/nf-core/custom/dumpsoftwareversions/main.nf delete mode 100644 modules/nf-core/custom/dumpsoftwareversions/meta.yml delete mode 100755 modules/nf-core/custom/dumpsoftwareversions/templates/dumpsoftwareversions.py delete mode 100644 modules/nf-core/custom/dumpsoftwareversions/tests/main.nf.test delete mode 100644 modules/nf-core/custom/dumpsoftwareversions/tests/main.nf.test.snap delete mode 100644 modules/nf-core/custom/dumpsoftwareversions/tests/tags.yml delete mode 100644 modules/nf-core/eggnogmapper/environment.yml delete mode 100644 modules/nf-core/eggnogmapper/main.nf delete mode 100644 modules/nf-core/eggnogmapper/meta.yml delete mode 100644 modules/nf-core/eggnogmapper/tests/main.nf.test delete mode 100644 modules/nf-core/eggnogmapper/tests/main.nf.test.snap delete mode 100644 modules/nf-core/eggnogmapper/tests/tags.yml delete mode 100644 modules/nf-core/fastavalidator/environment.yml delete mode 100644 modules/nf-core/fastavalidator/main.nf delete mode 100644 modules/nf-core/fastavalidator/meta.yml delete mode 100644 modules/nf-core/fastavalidator/tests/main.nf.test delete mode 100644 modules/nf-core/fastavalidator/tests/main.nf.test.snap delete mode 100644 modules/nf-core/fastavalidator/tests/tags.yml delete mode 100644 modules/nf-core/fastp/main.nf delete mode 100644 modules/nf-core/fastp/meta.yml delete mode 100644 modules/nf-core/fastp/tests/main.nf.test delete mode 100644 modules/nf-core/fastp/tests/main.nf.test.snap delete mode 100644 modules/nf-core/fastp/tests/nextflow.interleaved.config delete mode 100644 modules/nf-core/fastp/tests/nextflow.save_failed.config delete mode 100644 modules/nf-core/fastp/tests/tags.yml delete mode 100644 modules/nf-core/gffcompare/environment.yml delete mode 100644 modules/nf-core/gffcompare/main.nf delete mode 100644 modules/nf-core/gffcompare/meta.yml delete mode 100644 modules/nf-core/gffread/environment.yml delete mode 100644 modules/nf-core/gffread/main.nf delete mode 100644 modules/nf-core/gffread/meta.yml delete mode 100644 modules/nf-core/gffread/tests/main.nf.test delete mode 100644 modules/nf-core/gffread/tests/main.nf.test.snap delete mode 100644 modules/nf-core/gffread/tests/nextflow-fasta.config delete mode 100644 modules/nf-core/gffread/tests/nextflow-gff3.config delete mode 100644 modules/nf-core/gffread/tests/nextflow.config delete mode 100644 modules/nf-core/gffread/tests/tags.yml delete mode 100644 modules/nf-core/gt/gff3/environment.yml delete mode 100644 modules/nf-core/gt/gff3/main.nf delete mode 100644 modules/nf-core/gt/gff3/meta.yml delete mode 100644 modules/nf-core/gt/gff3/tests/main.nf.test delete mode 100644 modules/nf-core/gt/gff3/tests/main.nf.test.snap delete mode 100644 modules/nf-core/gt/gff3/tests/nextflow.config delete mode 100644 modules/nf-core/gt/gff3/tests/tags.yml delete mode 100644 modules/nf-core/gunzip/environment.yml delete mode 100644 modules/nf-core/gunzip/main.nf delete mode 100644 modules/nf-core/gunzip/meta.yml delete mode 100644 modules/nf-core/gunzip/tests/main.nf.test delete mode 100644 modules/nf-core/gunzip/tests/main.nf.test.snap delete mode 100644 modules/nf-core/gunzip/tests/nextflow.config delete mode 100644 modules/nf-core/gunzip/tests/tags.yml delete mode 100644 modules/nf-core/liftoff/environment.yml delete mode 100644 modules/nf-core/liftoff/main.nf delete mode 100644 modules/nf-core/liftoff/meta.yml delete mode 100644 modules/nf-core/liftoff/tests/main.nf.test delete mode 100644 modules/nf-core/liftoff/tests/main.nf.test.snap delete mode 100644 modules/nf-core/liftoff/tests/nextflow.config rename modules/nf-core/{fastp => multiqc}/environment.yml (61%) create mode 100644 modules/nf-core/multiqc/main.nf create mode 100644 modules/nf-core/multiqc/meta.yml create mode 100644 modules/nf-core/multiqc/tests/main.nf.test create mode 100644 modules/nf-core/multiqc/tests/main.nf.test.snap create mode 100644 modules/nf-core/multiqc/tests/tags.yml delete mode 100644 modules/nf-core/orthofinder/environment.yml delete mode 100644 modules/nf-core/orthofinder/main.nf delete mode 100644 modules/nf-core/orthofinder/meta.yml delete mode 100644 modules/nf-core/orthofinder/tests/main.nf.test delete mode 100644 modules/nf-core/orthofinder/tests/main.nf.test.snap delete mode 100644 modules/nf-core/orthofinder/tests/tags.yml delete mode 100644 modules/nf-core/repeatmodeler/builddatabase/environment.yml delete mode 100644 modules/nf-core/repeatmodeler/builddatabase/main.nf delete mode 100644 modules/nf-core/repeatmodeler/builddatabase/meta.yml delete mode 100644 modules/nf-core/repeatmodeler/builddatabase/tests/main.nf.test delete mode 100644 modules/nf-core/repeatmodeler/builddatabase/tests/main.nf.test.snap delete mode 100644 modules/nf-core/repeatmodeler/builddatabase/tests/tags.yml delete mode 100644 modules/nf-core/repeatmodeler/repeatmodeler/environment.yml delete mode 100644 modules/nf-core/repeatmodeler/repeatmodeler/main.nf delete mode 100644 modules/nf-core/repeatmodeler/repeatmodeler/meta.yml delete mode 100644 modules/nf-core/repeatmodeler/repeatmodeler/tests/main.nf.test delete mode 100644 modules/nf-core/repeatmodeler/repeatmodeler/tests/main.nf.test.snap delete mode 100644 modules/nf-core/repeatmodeler/repeatmodeler/tests/tags.yml delete mode 100644 modules/nf-core/samtools/cat/environment.yml delete mode 100644 modules/nf-core/samtools/cat/main.nf delete mode 100644 modules/nf-core/samtools/cat/meta.yml delete mode 100644 modules/nf-core/samtools/cat/tests/main.nf.test delete mode 100644 modules/nf-core/samtools/cat/tests/main.nf.test.snap delete mode 100644 modules/nf-core/samtools/cat/tests/tags.yml delete mode 100644 modules/nf-core/sortmerna/environment.yml delete mode 100644 modules/nf-core/sortmerna/main.nf delete mode 100644 modules/nf-core/sortmerna/meta.yml delete mode 100644 modules/nf-core/sortmerna/tests/indexing_only.config delete mode 100644 modules/nf-core/sortmerna/tests/main.nf.test delete mode 100644 modules/nf-core/sortmerna/tests/main.nf.test.snap delete mode 100644 modules/nf-core/sortmerna/tests/premade_index.config delete mode 100644 modules/nf-core/sortmerna/tests/tags.yml delete mode 100644 modules/nf-core/star/align/environment.yml delete mode 100644 modules/nf-core/star/align/main.nf delete mode 100644 modules/nf-core/star/align/meta.yml delete mode 100644 modules/nf-core/star/align/tests/main.nf.test delete mode 100644 modules/nf-core/star/align/tests/main.nf.test.snap delete mode 100644 modules/nf-core/star/align/tests/nextflow.arriba.config delete mode 100644 modules/nf-core/star/align/tests/nextflow.config delete mode 100644 modules/nf-core/star/align/tests/nextflow.starfusion.config delete mode 100644 modules/nf-core/star/align/tests/tags.yml delete mode 100644 modules/nf-core/star/genomegenerate/environment.yml delete mode 100644 modules/nf-core/star/genomegenerate/main.nf delete mode 100644 modules/nf-core/star/genomegenerate/meta.yml delete mode 100644 modules/nf-core/star/genomegenerate/tests/main.nf.test delete mode 100644 modules/nf-core/star/genomegenerate/tests/main.nf.test.snap delete mode 100644 modules/nf-core/star/genomegenerate/tests/tags.yml delete mode 100644 modules/nf-core/tsebra/environment.yml delete mode 100644 modules/nf-core/tsebra/main.nf delete mode 100644 modules/nf-core/tsebra/meta.yml delete mode 100644 modules/nf-core/tsebra/tests/main.nf.test delete mode 100644 modules/nf-core/tsebra/tests/main.nf.test.snap delete mode 100644 modules/nf-core/tsebra/tests/tags.yml delete mode 100644 modules/nf-core/umitools/extract/environment.yml delete mode 100644 modules/nf-core/umitools/extract/main.nf delete mode 100644 modules/nf-core/umitools/extract/meta.yml delete mode 100644 modules/nf-core/umitools/extract/tests/main.nf.test delete mode 100644 modules/nf-core/umitools/extract/tests/main.nf.test.snap delete mode 100644 modules/nf-core/umitools/extract/tests/nextflow.config delete mode 100644 modules/nf-core/umitools/extract/tests/tags.yml delete mode 100644 pfr/params.json delete mode 100644 pfr/profile.config delete mode 100644 pfr_genepal delete mode 100644 pyproject.toml delete mode 100644 subworkflows/gallvp/fasta_edta_lai/main.nf delete mode 100644 subworkflows/gallvp/fasta_edta_lai/meta.yml delete mode 100644 subworkflows/gallvp/fasta_edta_lai/tests/main.nf.test delete mode 100644 subworkflows/gallvp/fasta_edta_lai/tests/main.nf.test.snap delete mode 100644 subworkflows/gallvp/fasta_edta_lai/tests/nextflow.config delete mode 100644 subworkflows/gallvp/fasta_gxf_busco_plot/main.nf delete mode 100644 subworkflows/gallvp/fasta_gxf_busco_plot/meta.yml delete mode 100644 subworkflows/gallvp/fasta_gxf_busco_plot/tests/main.nf.test delete mode 100644 subworkflows/gallvp/fasta_gxf_busco_plot/tests/main.nf.test.snap delete mode 100644 subworkflows/gallvp/fasta_gxf_busco_plot/tests/nextflow.config delete mode 100644 subworkflows/gallvp/gxf_fasta_agat_spaddintrons_spextractsequences/main.nf delete mode 100644 subworkflows/gallvp/gxf_fasta_agat_spaddintrons_spextractsequences/meta.yml delete mode 100644 subworkflows/gallvp/gxf_fasta_agat_spaddintrons_spextractsequences/tests/main.nf.test delete mode 100644 subworkflows/gallvp/gxf_fasta_agat_spaddintrons_spextractsequences/tests/main.nf.test.snap delete mode 100644 subworkflows/gallvp/gxf_fasta_agat_spaddintrons_spextractsequences/tests/nextflow.config delete mode 100644 subworkflows/local/align_rnaseq.nf delete mode 100644 subworkflows/local/fasta_braker3.nf delete mode 100644 subworkflows/local/fasta_liftoff.nf delete mode 100644 subworkflows/local/fasta_orthofinder.nf delete mode 100644 subworkflows/local/file_gunzip.nf delete mode 100644 subworkflows/local/gff_eggnogmapper.nf delete mode 100644 subworkflows/local/gff_merge_cleanup.nf delete mode 100644 subworkflows/local/gff_store.nf delete mode 100644 subworkflows/local/gff_tsebra_spfilterfeaturefromkilllist.nf delete mode 100644 subworkflows/local/prepare_assembly.nf delete mode 100644 subworkflows/local/prepare_ext_prots.nf delete mode 100644 subworkflows/local/preprocess_rnaseq.nf delete mode 100644 subworkflows/local/purge_braker_models.nf delete mode 100644 subworkflows/local/purge_nohit_models.nf create mode 100644 subworkflows/local/utils_nfcore_genepal_pipeline/main.nf delete mode 100644 subworkflows/nf-core/fastq_fastqc_umitools_fastp/main.nf delete mode 100644 subworkflows/nf-core/fastq_fastqc_umitools_fastp/meta.yml delete mode 100644 subworkflows/nf-core/fastq_fastqc_umitools_fastp/tests/main.nf.test delete mode 100644 subworkflows/nf-core/fastq_fastqc_umitools_fastp/tests/main.nf.test.snap delete mode 100644 subworkflows/nf-core/fastq_fastqc_umitools_fastp/tests/nextflow.config delete mode 100644 subworkflows/nf-core/fastq_fastqc_umitools_fastp/tests/nextflow.save_trimmed.config delete mode 100644 subworkflows/nf-core/fastq_fastqc_umitools_fastp/tests/tags.yml 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 delete mode 100644 tests/minimal/assemblysheet.csv delete mode 100644 tests/minimal/params.json delete mode 100644 tests/stub/assemblysheet.csv delete mode 100644 tests/stub/bam/1505KHS-0090_Root3.red5_v3.bam delete mode 100644 tests/stub/bam/1505KHS-0092_Root3.red5_v3.bam delete mode 100644 tests/stub/braker/donghong.gff3.gz delete mode 100644 tests/stub/braker/donghong.hints.gff.gz delete mode 100644 tests/stub/braker/red5_v2p1.gff3.gz delete mode 100644 tests/stub/braker/red5_v2p1.hints.gff.gz delete mode 100644 tests/stub/emapperdb/5.0.2/eggnog.db delete mode 100644 tests/stub/emapperdb/5.0.2/eggnog_proteins.dmnd delete mode 100644 tests/stub/ext_prot/RU01.20221115150135.chr1.pep.fasta.gz delete mode 100644 tests/stub/ext_prot/RU01.20221115150135.chr2.pep.fasta.gz delete mode 100644 tests/stub/external-protein-fastas.txt delete mode 100644 tests/stub/fq/1505KHS-0090_Root1_162bp_C728RACXX_Lane1_R1.1k.fastq.gz delete mode 100644 tests/stub/fq/1505KHS-0090_Root1_162bp_C728RACXX_Lane1_R2.1k.fastq.gz delete mode 100644 tests/stub/fq/1505KHS-0090_Root2_156bp_C728RACXX_Lane1_R1.1k.fastq.gz delete mode 100644 tests/stub/fq/1505KHS-0090_Root2_156bp_C728RACXX_Lane1_R2.1k.fastq.gz delete mode 100644 tests/stub/fq/1505KHS-0090_cane3_165bp_C728RACXX_Lane1_R1.1k.fastq.gz delete mode 100644 tests/stub/fq/1505KHS-0090_cane3_165bp_C728RACXX_Lane1_R2.1k.fastq.gz delete mode 100644 tests/stub/liftoff/RU01.20221115150135.chr1.gff3.gz delete mode 100644 tests/stub/liftoff/RU01.20221115150135.chr2.gff3.gz delete mode 100644 tests/stub/liftoff/Russell_V2a.chr1.fsa.gz delete mode 100644 tests/stub/liftoff/Russell_V2a.chr2.fsa.gz delete mode 100644 tests/stub/liftoffannotations.csv delete mode 100644 tests/stub/params.json delete mode 100644 tests/stub/rnasheet.csv delete mode 100644 tests/stub/target/donghong.chr1.fsa.gz delete mode 100644 tests/stub/target/red5_v2p1_chr1.fasta.gz delete mode 100644 tests/stub/target/red5_v3_chr1.fasta delete mode 100644 tests/stub/te_lib/donghong.TElib.fa.gz create mode 100644 tower.yml diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 0000000..b290e09 --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,20 @@ +{ + "name": "nfcore", + "image": "nfcore/gitpod:latest", + "remoteUser": "gitpod", + "runArgs": ["--privileged"], + + // Configure tool-specific properties. + "customizations": { + // Configure properties specific to VS Code. + "vscode": { + // Set *default* container specific settings.json values on container create. + "settings": { + "python.defaultInterpreterPath": "/opt/conda/bin/python" + }, + + // Add the IDs of extensions you want installed when the container is created. + "extensions": ["ms-python.python", "ms-python.vscode-pylance", "nf-core.nf-core-extensionpack"] + } + } +} diff --git a/.editorconfig b/.editorconfig index e1c9da2..72dda28 100644 --- a/.editorconfig +++ b/.editorconfig @@ -8,7 +8,7 @@ trim_trailing_whitespace = true indent_size = 4 indent_style = space -[*.{md,yml,yaml,html,css,scss,js,cff}] +[*.{md,yml,yaml,html,css,scss,js}] indent_size = 2 # These files are edited and tested upstream in nf-core/modules @@ -18,52 +18,16 @@ end_of_line = unset insert_final_newline = unset trim_trailing_whitespace = unset indent_style = unset -indent_size = unset - [/subworkflows/nf-core/**] charset = unset end_of_line = unset insert_final_newline = unset trim_trailing_whitespace = unset indent_style = unset -indent_size = unset - -# These files are edited and tested upstream in pfr/modules -[/modules/gallvp/**] -charset = unset -end_of_line = unset -insert_final_newline = unset -trim_trailing_whitespace = unset -indent_style = unset -indent_size = unset - -[/subworkflows/gallvp/**] -charset = unset -end_of_line = unset -insert_final_newline = unset -trim_trailing_whitespace = unset -indent_style = unset -indent_size = unset [/assets/email*] indent_size = unset -# ignore Readme -[README.md] -indent_style = unset - -# ignore python -[*.{py}] +# ignore python and markdown +[*.{py,md}] indent_style = unset - -# ignore perl -[*.{pl,pm}] -indent_size = unset - -# ignore drawio -[*.drawio] -indent_size = unset - -# ignore LICENSE -[LICENSE] -indent_size = unset diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..7a2dabc --- /dev/null +++ b/.gitattributes @@ -0,0 +1,4 @@ +*.config linguist-language=nextflow +*.nf.test linguist-language=nextflow +modules/nf-core/** linguist-generated +subworkflows/nf-core/** linguist-generated diff --git a/.github/.dockstore.yml b/.github/.dockstore.yml new file mode 100644 index 0000000..191fabd --- /dev/null +++ b/.github/.dockstore.yml @@ -0,0 +1,6 @@ +# Dockstore config version, not pipeline version +version: 1.2 +workflows: + - subclass: nfl + primaryDescriptorPath: /nextflow.config + publish: True diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md new file mode 100644 index 0000000..e28c02c --- /dev/null +++ b/.github/CONTRIBUTING.md @@ -0,0 +1,118 @@ +# PlantandFoodResearch/genepal: Contributing Guidelines + +Hi there! +Many thanks for taking an interest in improving PlantandFoodResearch/genepal. + +We try to manage the required tasks for PlantandFoodResearch/genepal using GitHub issues, you probably came to this page when creating one. +Please use the pre-filled template to save time. + +However, don't be put off by this template - other more general issues and suggestions are welcome! +Contributions to the code are even more welcome ;) + +## Contribution workflow + +If you'd like to write some code for PlantandFoodResearch/genepal, the standard workflow is as follows: + +1. Check that there isn't already an issue about your idea in the [PlantandFoodResearch/genepal issues](https://github.com/PlantandFoodResearch/genepal/issues) to avoid duplicating work. If there isn't one already, please create one so that others know you're working on this +2. [Fork](https://help.github.com/en/github/getting-started-with-github/fork-a-repo) the [PlantandFoodResearch/genepal repository](https://github.com/PlantandFoodResearch/genepal) to your GitHub account +3. Make the necessary changes / additions within your forked repository following [Pipeline conventions](#pipeline-contribution-conventions) +4. Use `nf-core schema build` and add any new parameters to the pipeline JSON schema (requires [nf-core tools](https://github.com/nf-core/tools) >= 1.10). +5. Submit a Pull Request against the `dev` branch and wait for the code to be reviewed and merged + +If you're not used to this workflow with git, you can start with some [docs from GitHub](https://help.github.com/en/github/collaborating-with-issues-and-pull-requests) or even their [excellent `git` resources](https://try.github.io/). + +## Tests + +You have the option to test your changes locally by running the pipeline. For receiving warnings about process selectors and other `debug` information, it is recommended to use the debug profile. Execute all the tests with the following command: + +```bash +nf-test test --profile debug,test,docker --verbose +``` + +When you create a pull request with changes, [GitHub Actions](https://github.com/features/actions) will run automatic tests. +Typically, pull-requests are only fully reviewed when these tests are passing, though of course we can help out before then. + +There are typically two types of tests that run: + +### Lint tests + +`nf-core` has a [set of guidelines](https://nf-co.re/developers/guidelines) which all pipelines must adhere to. +To enforce these and ensure that all pipelines stay in sync, we have developed a helper tool which runs checks on the pipeline code. This is in the [nf-core/tools repository](https://github.com/nf-core/tools) and once installed can be run locally with the `nf-core lint ` command. + +If any failures or warnings are encountered, please follow the listed URL for more documentation. + +### Pipeline tests + +Each `nf-core` pipeline should be set up with a minimal set of test-data. +`GitHub Actions` then runs the pipeline on this data to ensure that it exits successfully. +If there are any failures then the automated tests fail. +These tests are run both with the latest available version of `Nextflow` and also the minimum required version that is stated in the pipeline code. + +## Patch + +:warning: Only in the unlikely and regretful event of a release happening with a bug. + +- On your own fork, make a new branch `patch` based on `upstream/master`. +- Fix the bug, and bump version (X.Y.Z+1). +- A PR should be made on `master` from patch to directly this particular bug. + +## Pipeline contribution conventions + +To make the PlantandFoodResearch/genepal code and processing logic more understandable for new contributors and to ensure quality, we semi-standardise the way the code and other contributions are written. + +### Adding a new step + +If you wish to contribute a new step, please use the following coding standards: + +1. Define the corresponding input channel into your new process from the expected previous process channel +2. Write the process block (see below). +3. Define the output channel if needed (see below). +4. Add any new parameters to `nextflow.config` with a default (see below). +5. Add any new parameters to `nextflow_schema.json` with help text (via the `nf-core schema build` tool). +6. Add sanity checks and validation for all relevant parameters. +7. Perform local tests to validate that the new code works as expected. +8. If applicable, add a new test command in `.github/workflow/ci.yml`. +9. Update MultiQC config `assets/multiqc_config.yml` so relevant suffixes, file name clean up and module plots are in the appropriate order. If applicable, add a [MultiQC](https://https://multiqc.info/) module. +10. Add a description of the output files and if relevant any appropriate images from the MultiQC report to `docs/output.md`. + +### Default values + +Parameters should be initialised / defined with default values in `nextflow.config` under the `params` scope. + +Once there, use `nf-core schema build` to add to `nextflow_schema.json`. + +### Default processes resource requirements + +Sensible defaults for process resource requirements (CPUs / memory / time) for a process should be defined in `conf/base.config`. These should generally be specified generic with `withLabel:` selectors so they can be shared across multiple processes/steps of the pipeline. A nf-core standard set of labels that should be followed where possible can be seen in the [nf-core pipeline template](https://github.com/nf-core/tools/blob/master/nf_core/pipeline-template/conf/base.config), which has the default process as a single core-process, and then different levels of multi-core configurations for increasingly large memory requirements defined with standardised labels. + +The process resources can be passed on to the tool dynamically within the process with the `${task.cpus}` and `${task.memory}` variables in the `script:` block. + +### Naming schemes + +Please use the following naming schemes, to make it easy to understand what is going where. + +- initial process channel: `ch_output_from_` +- intermediate and terminal channels: `ch__for_` + +### Nextflow version bumping + +If you are using a new feature from core Nextflow, you may bump the minimum required version of nextflow in the pipeline with: `nf-core bump-version --nextflow . [min-nf-version]` + +### Images and figures + +For overview images and other documents we follow the nf-core [style guidelines and examples](https://nf-co.re/developers/design_guidelines). + +## GitHub Codespaces + +This repo includes a devcontainer configuration which will create a GitHub Codespaces for Nextflow development! This is an online developer environment that runs in your browser, complete with VSCode and a terminal. + +To get started: + +- Open the repo in [Codespaces](https://github.com/PlantandFoodResearch/genepal/codespaces) +- Tools installed + - nf-core + - Nextflow + +Devcontainer specs: + +- [DevContainer config](.devcontainer/devcontainer.json) diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml new file mode 100644 index 0000000..5366891 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -0,0 +1,54 @@ +name: Bug report +description: Report something that is broken or incorrect +labels: bug +body: + - type: textarea + id: description + attributes: + label: Description of the bug + description: A clear and concise description of what the bug is. + validations: + required: true + - type: textarea + id: command_used + attributes: + label: Command used and terminal output + description: Steps to reproduce the behaviour. Please paste the command you used + to launch the pipeline and the output from your terminal. + render: console + placeholder: "$ nextflow run ... + + + Some output where something broke + + " + - type: textarea + id: files + attributes: + label: Relevant files + description: "Please drag and drop the relevant files here. Create a `.zip` archive + if the extension is not allowed. + + Your verbose log file `.nextflow.log` is often useful _(this is a hidden file + in the directory where you launched the pipeline)_ as well as custom Nextflow + configuration files. + + " + - type: textarea + id: system + attributes: + label: System information + description: "* Nextflow version _(eg. 23.04.0)_ + + * Hardware _(eg. HPC, Desktop, Cloud)_ + + * Executor _(eg. slurm, local, awsbatch)_ + + * Container engine: _(e.g. Docker, Singularity, Conda, Podman, Shifter, Charliecloud, + or Apptainer)_ + + * OS _(eg. CentOS Linux, macOS, Linux Mint)_ + + * Version of PlantandFoodResearch/genepal _(eg. 1.1, 1.5, 1.8.2)_ + + " diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml new file mode 100644 index 0000000..2f4df30 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.yml @@ -0,0 +1,11 @@ +name: Feature request +description: Suggest an idea for the PlantandFoodResearch/genepal pipeline +labels: enhancement +body: + - type: textarea + id: description + attributes: + label: Description of feature + description: Please describe your suggestion for a new feature. It might help to describe a problem or use case, plus any alternatives that you have considered. + validations: + required: true diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000..9dfdfb4 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,25 @@ + + +## PR checklist + +- [ ] This comment contains a description of changes (with reason). +- [ ] If you've fixed a bug or added code that should be tested, add tests! +- [ ] If you've added a new tool - have you followed the pipeline conventions in the [contribution docs](https://github.com/PlantandFoodResearch/genepal/tree/master/.github/CONTRIBUTING.md) +- [ ] Make sure your code lints (`nf-core lint`). +- [ ] Ensure the test suite passes (`nextflow run . -profile test,docker --outdir `). +- [ ] Check for unexpected warnings in debug mode (`nextflow run . -profile debug,test,docker --outdir `). +- [ ] Usage Documentation in `docs/usage.md` is updated. +- [ ] Output Documentation in `docs/output.md` is updated. +- [ ] `CHANGELOG.md` is updated. +- [ ] `README.md` is updated (including new tool citations and authors/contributors). diff --git a/.github/check_module_versions.py b/.github/check_module_versions.py deleted file mode 100755 index f1266a2..0000000 --- a/.github/check_module_versions.py +++ /dev/null @@ -1,320 +0,0 @@ -#!/usr/bin/env python3 - -import colorlog -from urllib.parse import quote_plus -from functools import cmp_to_key -from pathlib import Path - -import subprocess -import argparse -import requests -import logging -import semver -import json -import re -import os - -PIPELINE_REPO = "PlantandFoodResearch/genepal" - -def get_logger(): - formatter = colorlog.ColoredFormatter( - "%(log_color)s%(levelname)-8s%(reset)s %(blue)s%(message)s", - datefmt=None, - reset=True, - log_colors={ - "DEBUG": "cyan", - "INFO": "green", - "WARNING": "yellow", - "ERROR": "red", - "CRITICAL": "red,bg_white", - }, - secondary_log_colors={}, - style="%", - ) - - handler = colorlog.StreamHandler() - handler.setFormatter(formatter) - - logger = colorlog.getLogger("") - logger.addHandler(handler) - return logger - - -LOGGER = get_logger() - - -def first(from_list): - if from_list == []: - return None - - return from_list[0] - - -def extract_semvar(from_version_str): - version_numbers = first( - re.findall(r"^[vV]?(\d+)\.?(\d*)\.?(\d*)$", from_version_str) - ) - if version_numbers == None: - return None - - major_ver = int(version_numbers[0]) - minor_ver = int(f"{version_numbers[1]}") if version_numbers[1] != "" else 0 - patch_ver = int(f"{version_numbers[2]}") if version_numbers[2] != "" else 0 - - return f"{major_ver}.{minor_ver}.{patch_ver}" - - -def check_version_status(git_repo_from_meta): - - host = git_repo_from_meta["host"] - org = git_repo_from_meta["org"] - repo = git_repo_from_meta["repo"] - current_ver = git_repo_from_meta["semver"] - - sem_versions = [] - if host == "github": - r = subprocess.run( - " ".join( - [ - "gh api", - '-H "Accept: application/vnd.github+json"', - '-H "X-GitHub-Api-Version: 2022-11-28"', - f"/repos/{org}/{repo}/tags", - ] - ), - shell=True, - capture_output=True, - text=True, - ) - - if r.returncode != 0: - LOGGER.warning(f"Failed to get tags for {org}/{repo}: {r.stderr}") - return None - - response_data = json.loads(r.stdout) - - elif host == "gitlab": - encoded = quote_plus(f"{org}/{repo}") - r = requests.get( - f"https://gitlab.com/api/v4/projects/{encoded}/repository/tags" - ) - - if r.status_code != 200: - LOGGER.warning(f"Failed to get tags for {org}/{repo}: {r.json()}") - return None - response_data = r.json() - - else: - raise f"{host} is not supported!" - - available_versions = [x["name"] for x in response_data] - - if available_versions == []: - LOGGER.warning(f"No versions available for {host}/{org}/{repo}") - return None - - LOGGER.debug(f"Available versions for {host}/{org}/{repo}: {available_versions}") - - sem_versions = [extract_semvar(x["name"]) for x in response_data] - sem_versions = [v for v in sem_versions if v != None] - if sem_versions == []: - LOGGER.warning(f"{host}/{org}/{repo} versions do not conform to semver") - return None - - newer_vers = [v for v in sem_versions if semver.compare(v, current_ver) > 0] - - if newer_vers == []: - LOGGER.info( - f"{host}/{org}/{repo} does not have a new version compared to {current_ver}, first/last {available_versions[0]}/{available_versions[-1]}" - ) - return None - - latest_version = max(newer_vers, key=cmp_to_key(semver.compare)) - - LOGGER.info( - f"{host}/{org}/{repo} has a new version {latest_version} compared to {current_ver}" - ) - - return {**git_repo_from_meta, "latest_version": latest_version} - - -def get_new_versions_from_meta_paths(): - - module_meta_paths = ( - subprocess.run( - "find ./modules -name meta.yml", - shell=True, - capture_output=True, - text=True, - ) - .stdout.strip() - .split("\n") - ) - - git_repos_from_meta = [] - for meta_path in module_meta_paths: - meta_text = Path(meta_path).read_text() - main_path = f"{os.path.dirname(meta_path)}/main.nf" - main_text = Path(main_path).read_text() - repo = first( - re.findall( - r"\s+tool_dev_url:\s+\"?https://(github|gitlab).com/([\w-]+)/([\w-]+)\"?", - meta_text, - ) - ) - - if repo == None: - LOGGER.warning(f"No repo found in {meta_path}") - continue - - LOGGER.debug(f"{meta_path} repo: {repo}") - - if "mulled-v2" in main_text: - LOGGER.warning(f"Mulled container found in {main_path}") - continue - - version = first(re.findall(rf".*/([\w-]+):v?([\.0-9]+)", main_text)) - - if version == None: - LOGGER.warning(f"No version found in {main_path}") - continue - - LOGGER.debug(f"{main_path} version: {version}") - - semver_version = extract_semvar(version[1]) - - if semver_version == None: - LOGGER.warning( - f"Version {version} from {main_path} does not conform to semver" - ) - continue - - repo_data = { - "meta.yml": meta_path, - "main.nf": main_path, - "host": repo[0], - "org": repo[1], - "repo": repo[2], - "tool": version[0], - "semver": semver_version, - } - - LOGGER.debug(f"{meta_path} version data: {repo_data}") - - git_repos_from_meta.append(repo_data) - - with_latest = [check_version_status(r) for r in git_repos_from_meta] - filtered = [v for v in with_latest if v != None] - grouped = {} - - for v in filtered: - key = f"{v['host']}/{v['org']}/{v['repo']}" - if key not in grouped.keys(): - grouped[key] = {} - grouped[key]["latest_version"] = v["latest_version"] - grouped[key]["modules"] = [] - grouped[key]["modules"].append(v) - continue - - grouped[key]["modules"].append(v) - grouped[key]["latest_version"] = semver.max_ver( - grouped[key]["latest_version"], v["latest_version"] - ) - - return grouped - - -def get_repo_issue_titles(repo): - r = subprocess.run( - " ".join( - [ - "gh api", - '-H "Accept: application/vnd.github+json"', - '-H "X-GitHub-Api-Version: 2022-11-28"', - f"/repos/{repo}/issues", - ] - ), - shell=True, - capture_output=True, - text=True, - ) - - if r.returncode != 0: - LOGGER.error(f"Failed to get issues for {repo}: {r.stderr}") - exit(1) - - response_data = json.loads(r.stdout) - - update_issues = [ - x["title"] for x in response_data if x["title"].startswith("[UPDATE]") - ] - - return update_issues - - -def register_issue(host_repo_name, issue_title, tool_data): - - first_module = tool_data["modules"][0] - host, org, repo = (first_module["host"], first_module["org"], first_module["repo"]) - - module_paths = "\n".join( - [f"- {module['main.nf']}" for module in tool_data["modules"]] - ) - - issue_data = [ - "gh api", - "--method POST", - '-H "Accept: application/vnd.github+json"', - '-H "X-GitHub-Api-Version: 2022-11-28"', - f"/repos/{host_repo_name}/issues", - f'-f "title={issue_title}"', - f'-f "body=- https://{host}.com/{org}/{repo}\n{module_paths}"', - '-f "labels[]=enhancement"', - ] - - issue_post = subprocess.run( - " ".join(issue_data), - shell=True, - capture_output=True, - text=True, - ) - - if issue_post.returncode == 0: - LOGGER.info(f"Submitted issue: {issue_title}") - else: - LOGGER.warning(f"Failed to submitted issue: {issue_title}: {issue_post.stderr}") - - -if __name__ == "__main__": - - parser = argparse.ArgumentParser() - - parser.add_argument( - "-v", "--verbose", action="store_true", help="Enable verbose mode" - ) - parser.add_argument( - "-d", "--dry-run", action="store_true", help="Enable dry-run mode" - ) - args = parser.parse_args() - - if args.verbose: - LOGGER.setLevel(level=logging.DEBUG) - else: - LOGGER.setLevel(level=logging.INFO) - - git_repos_from_meta = get_new_versions_from_meta_paths() - update_issue_titles = get_repo_issue_titles(PIPELINE_REPO) - - for key, tool_data in git_repos_from_meta.items(): - - new_issue_title = f"[UPDATE] {key.upper()} -> {tool_data['latest_version']}" - - if new_issue_title in update_issue_titles: - LOGGER.info(f"{new_issue_title} has already been raised!") - continue - - if args.dry_run: - LOGGER.info(f"Dry run new issue: {new_issue_title}") - continue - - register_issue(PIPELINE_REPO, new_issue_title, tool_data) diff --git a/.github/contributors.sh b/.github/contributors.sh deleted file mode 100755 index e694e49..0000000 --- a/.github/contributors.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/usr/bin/env bash - -module_authors=$(find ./modules -name meta.yml | xargs -I {} grep -A20 'authors:' {} | grep '\- ' | tr -d '"' | tr '[:upper:]' '[:lower:]' | awk '{print $2}') -workflow_authors=$(find ./subworkflows -name meta.yml | xargs -I {} grep -A20 'authors:' {} | grep '\- ' | tr -d '"' | tr '[:upper:]' '[:lower:]' | awk '{print $2}') -echo -e "${module_authors}\n${workflow_authors}" | sort -V | uniq -c | sort -k1,1 -r | awk '{print $2}' | sed -n 's|@\(.*\)||p' diff --git a/.github/version_checks.sh b/.github/version_checks.sh deleted file mode 100755 index 29b89ad..0000000 --- a/.github/version_checks.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/usr/bin/env bash - -config_version=$(sed -n "s/.*version.*= '\(.*\)'.*/\1/p" nextflow.config) - -# Check CHANGELOG version - -head -n 10 CHANGELOG.md | grep "## $config_version - " >/dev/null \ - || (echo 'Failed to match CHANGELOG version'; exit 1) diff --git a/.github/workflows/branch.yml b/.github/workflows/branch.yml new file mode 100644 index 0000000..07fa928 --- /dev/null +++ b/.github/workflows/branch.yml @@ -0,0 +1,44 @@ +name: nf-core branch protection +# This workflow is triggered on PRs to master branch on the repository +# It fails when someone tries to make a PR against the nf-core `master` branch instead of `dev` +on: + pull_request_target: + branches: [master] + +jobs: + test: + runs-on: ubuntu-latest + steps: + # PRs to the nf-core repo master branch are only ok if coming from the nf-core repo `dev` or any `patch` branches + - name: Check PRs + if: github.repository == 'PlantandFoodResearch/genepal' + run: | + { [[ ${{github.event.pull_request.head.repo.full_name }} == PlantandFoodResearch/genepal ]] && [[ $GITHUB_HEAD_REF == "dev" ]]; } || [[ $GITHUB_HEAD_REF == "patch" ]] + + # If the above check failed, post a comment on the PR explaining the failure + # NOTE - this doesn't currently work if the PR is coming from a fork, due to limitations in GitHub actions secrets + - name: Post PR comment + if: failure() + uses: mshick/add-pr-comment@b8f338c590a895d50bcbfa6c5859251edc8952fc # v2 + with: + message: | + ## This PR is against the `master` branch :x: + + * Do not close this PR + * Click _Edit_ and change the `base` to `dev` + * This CI test will remain failed until you push a new commit + + --- + + Hi @${{ github.event.pull_request.user.login }}, + + It looks like this pull-request is has been made against the [${{github.event.pull_request.head.repo.full_name }}](https://github.com/${{github.event.pull_request.head.repo.full_name }}) `master` branch. + The `master` branch on nf-core repositories should always contain code from the latest release. + Because of this, PRs to `master` are only allowed if they come from the [${{github.event.pull_request.head.repo.full_name }}](https://github.com/${{github.event.pull_request.head.repo.full_name }}) `dev` branch. + + You do not need to close this PR, you can change the target branch to `dev` by clicking the _"Edit"_ button at the top of this page. + Note that even after this, the test will continue to show as failing until you push a new commit. + + Thanks again for your contribution! + repo-token: ${{ secrets.GITHUB_TOKEN }} + allow-repeats: false diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..0d3ab09 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,46 @@ +name: nf-core CI +# This workflow runs the pipeline with the minimal test dataset to check that it completes without any syntax errors +on: + push: + branches: + - dev + pull_request: + release: + types: [published] + +env: + NXF_ANSI_LOG: false + +concurrency: + group: "${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}" + cancel-in-progress: true + +jobs: + test: + name: Run pipeline with test data + # Only run on push if this is the nf-core dev branch (merged PRs) + if: "${{ github.event_name != 'push' || (github.event_name == 'push' && github.repository == 'PlantandFoodResearch/genepal') }}" + runs-on: ubuntu-latest + strategy: + matrix: + NXF_VER: + - "23.04.0" + - "latest-everything" + steps: + - name: Check out pipeline code + uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4 + + - name: Install Nextflow + uses: nf-core/setup-nextflow@v2 + with: + version: "${{ matrix.NXF_VER }}" + + - name: Disk space cleanup + uses: jlumbroso/free-disk-space@54081f138730dfa15788a46383842cd2f914a1be # v1.3.1 + + - name: Run pipeline with test data + # TODO nf-core: You can customise CI pipeline run tests as required + # For example: adding multiple test runs with different parameters + # Remember that you can parallelise this by using strategy.matrix + run: | + nextflow run ${GITHUB_WORKSPACE} -profile test,docker --outdir ./results diff --git a/.github/workflows/clean-up.yml b/.github/workflows/clean-up.yml new file mode 100644 index 0000000..0b6b1f2 --- /dev/null +++ b/.github/workflows/clean-up.yml @@ -0,0 +1,24 @@ +name: "Close user-tagged issues and PRs" +on: + schedule: + - cron: "0 0 * * 0" # Once a week + +jobs: + clean-up: + runs-on: ubuntu-latest + permissions: + issues: write + pull-requests: write + steps: + - uses: actions/stale@28ca1036281a5e5922ead5184a1bbf96e5fc984e # v9 + with: + stale-issue-message: "This issue has been tagged as awaiting-changes or awaiting-feedback by an nf-core contributor. Remove stale label or add a comment otherwise this issue will be closed in 20 days." + stale-pr-message: "This PR has been tagged as awaiting-changes or awaiting-feedback by an nf-core contributor. Remove stale label or add a comment if it is still useful." + close-issue-message: "This issue was closed because it has been tagged as awaiting-changes or awaiting-feedback by an nf-core contributor and then staled for 20 days with no activity." + days-before-stale: 30 + days-before-close: 20 + days-before-pr-close: -1 + any-of-labels: "awaiting-changes,awaiting-feedback" + exempt-issue-labels: "WIP" + exempt-pr-labels: "WIP" + repo-token: "${{ secrets.GITHUB_TOKEN }}" diff --git a/.github/workflows/download_pipeline.yml b/.github/workflows/download_pipeline.yml new file mode 100644 index 0000000..2d20d64 --- /dev/null +++ b/.github/workflows/download_pipeline.yml @@ -0,0 +1,86 @@ +name: Test successful pipeline download with 'nf-core download' + +# Run the workflow when: +# - dispatched manually +# - when a PR is opened or reopened to master branch +# - the head branch of the pull request is updated, i.e. if fixes for a release are pushed last minute to dev. +on: + workflow_dispatch: + inputs: + testbranch: + description: "The specific branch you wish to utilize for the test execution of nf-core download." + required: true + default: "dev" + pull_request: + types: + - opened + - edited + - synchronize + branches: + - master + pull_request_target: + branches: + - master + +env: + NXF_ANSI_LOG: false + +jobs: + download: + runs-on: ubuntu-latest + steps: + - name: Install Nextflow + uses: nf-core/setup-nextflow@v2 + + - name: Disk space cleanup + uses: jlumbroso/free-disk-space@54081f138730dfa15788a46383842cd2f914a1be # v1.3.1 + + - uses: actions/setup-python@82c7e631bb3cdc910f68e0081d67478d79c6982d # v5 + with: + python-version: "3.12" + architecture: "x64" + - uses: eWaterCycle/setup-singularity@931d4e31109e875b13309ae1d07c70ca8fbc8537 # v7 + with: + singularity-version: 3.8.3 + + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install git+https://github.com/nf-core/tools.git@dev + + - name: Get the repository name and current branch set as environment variable + run: | + echo "REPO_LOWERCASE=${GITHUB_REPOSITORY,,}" >> ${GITHUB_ENV} + echo "REPOTITLE_LOWERCASE=$(basename ${GITHUB_REPOSITORY,,})" >> ${GITHUB_ENV} + echo "REPO_BRANCH=${{ github.event.inputs.testbranch || 'dev' }}" >> ${GITHUB_ENV} + + - name: Download the pipeline + env: + NXF_SINGULARITY_CACHEDIR: ./ + run: | + nf-core download ${{ env.REPO_LOWERCASE }} \ + --revision ${{ env.REPO_BRANCH }} \ + --outdir ./${{ env.REPOTITLE_LOWERCASE }} \ + --compress "none" \ + --container-system 'singularity' \ + --container-library "quay.io" -l "docker.io" -l "ghcr.io" \ + --container-cache-utilisation 'amend' \ + --download-configuration + + - name: Inspect download + run: tree ./${{ env.REPOTITLE_LOWERCASE }} + + - name: Run the downloaded pipeline (stub) + id: stub_run_pipeline + continue-on-error: true + env: + NXF_SINGULARITY_CACHEDIR: ./ + NXF_SINGULARITY_HOME_MOUNT: true + run: nextflow run ./${{ env.REPOTITLE_LOWERCASE }}/$( sed 's/\W/_/g' <<< ${{ env.REPO_BRANCH }}) -stub -profile test,singularity --outdir ./results + - name: Run the downloaded pipeline (stub run not supported) + id: run_pipeline + if: ${{ job.steps.stub_run_pipeline.status == failure() }} + env: + NXF_SINGULARITY_CACHEDIR: ./ + NXF_SINGULARITY_HOME_MOUNT: true + run: nextflow run ./${{ env.REPOTITLE_LOWERCASE }}/$( sed 's/\W/_/g' <<< ${{ env.REPO_BRANCH }}) -profile test,singularity --outdir ./results diff --git a/.github/workflows/fix-linting.yml b/.github/workflows/fix-linting.yml new file mode 100644 index 0000000..326861d --- /dev/null +++ b/.github/workflows/fix-linting.yml @@ -0,0 +1,89 @@ +name: Fix linting from a comment +on: + issue_comment: + types: [created] + +jobs: + fix-linting: + # Only run if comment is on a PR with the main repo, and if it contains the magic keywords + if: > + contains(github.event.comment.html_url, '/pull/') && + contains(github.event.comment.body, '@nf-core-bot fix linting') && + github.repository == 'PlantandFoodResearch/genepal' + runs-on: ubuntu-latest + steps: + # Use the @nf-core-bot token to check out so we can push later + - uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4 + with: + token: ${{ secrets.nf_core_bot_auth_token }} + + # indication that the linting is being fixed + - name: React on comment + uses: peter-evans/create-or-update-comment@71345be0265236311c031f5c7866368bd1eff043 # v4 + with: + comment-id: ${{ github.event.comment.id }} + reactions: eyes + + # Action runs on the issue comment, so we don't get the PR by default + # Use the gh cli to check out the PR + - name: Checkout Pull Request + run: gh pr checkout ${{ github.event.issue.number }} + env: + GITHUB_TOKEN: ${{ secrets.nf_core_bot_auth_token }} + + # Install and run pre-commit + - uses: actions/setup-python@82c7e631bb3cdc910f68e0081d67478d79c6982d # v5 + with: + python-version: "3.12" + + - name: Install pre-commit + run: pip install pre-commit + + - name: Run pre-commit + id: pre-commit + run: pre-commit run --all-files + continue-on-error: true + + # indication that the linting has finished + - name: react if linting finished succesfully + if: steps.pre-commit.outcome == 'success' + uses: peter-evans/create-or-update-comment@71345be0265236311c031f5c7866368bd1eff043 # v4 + with: + comment-id: ${{ github.event.comment.id }} + reactions: "+1" + + - name: Commit & push changes + id: commit-and-push + if: steps.pre-commit.outcome == 'failure' + run: | + git config user.email "core@nf-co.re" + git config user.name "nf-core-bot" + git config push.default upstream + git add . + git status + git commit -m "[automated] Fix code linting" + git push + + - name: react if linting errors were fixed + id: react-if-fixed + if: steps.commit-and-push.outcome == 'success' + uses: peter-evans/create-or-update-comment@71345be0265236311c031f5c7866368bd1eff043 # v4 + with: + comment-id: ${{ github.event.comment.id }} + reactions: hooray + + - name: react if linting errors were not fixed + if: steps.commit-and-push.outcome == 'failure' + uses: peter-evans/create-or-update-comment@71345be0265236311c031f5c7866368bd1eff043 # v4 + with: + comment-id: ${{ github.event.comment.id }} + reactions: confused + + - name: react if linting errors were not fixed + if: steps.commit-and-push.outcome == 'failure' + uses: peter-evans/create-or-update-comment@71345be0265236311c031f5c7866368bd1eff043 # v4 + with: + issue-number: ${{ github.event.issue.number }} + body: | + @${{ github.actor }} I tried to fix the linting errors, but it didn't work. Please fix them manually. + See [CI log](https://github.com/PlantandFoodResearch/genepal/actions/runs/${{ github.run_id }}) for more details. diff --git a/.github/workflows/linting.yml b/.github/workflows/linting.yml new file mode 100644 index 0000000..1fcafe8 --- /dev/null +++ b/.github/workflows/linting.yml @@ -0,0 +1,68 @@ +name: nf-core linting +# This workflow is triggered on pushes and PRs to the repository. +# It runs the `nf-core lint` and markdown lint tests to ensure +# that the code meets the nf-core guidelines. +on: + push: + branches: + - dev + pull_request: + release: + types: [published] + +jobs: + pre-commit: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4 + + - name: Set up Python 3.12 + uses: actions/setup-python@82c7e631bb3cdc910f68e0081d67478d79c6982d # v5 + with: + python-version: "3.12" + + - name: Install pre-commit + run: pip install pre-commit + + - name: Run pre-commit + run: pre-commit run --all-files + + nf-core: + runs-on: ubuntu-latest + steps: + - name: Check out pipeline code + uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4 + + - name: Install Nextflow + uses: nf-core/setup-nextflow@v2 + + - uses: actions/setup-python@82c7e631bb3cdc910f68e0081d67478d79c6982d # v5 + with: + python-version: "3.12" + architecture: "x64" + + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install nf-core + + - name: Run nf-core lint + env: + GITHUB_COMMENTS_URL: ${{ github.event.pull_request.comments_url }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + GITHUB_PR_COMMIT: ${{ github.event.pull_request.head.sha }} + run: nf-core -l lint_log.txt lint --dir ${GITHUB_WORKSPACE} --markdown lint_results.md + + - name: Save PR number + if: ${{ always() }} + run: echo ${{ github.event.pull_request.number }} > PR_number.txt + + - name: Upload linting log file artifact + if: ${{ always() }} + uses: actions/upload-artifact@65462800fd760344b1a7b4382951275a0abb4808 # v4 + with: + name: linting-logs + path: | + lint_log.txt + lint_results.md + PR_number.txt diff --git a/.github/workflows/linting_comment.yml b/.github/workflows/linting_comment.yml new file mode 100644 index 0000000..40acc23 --- /dev/null +++ b/.github/workflows/linting_comment.yml @@ -0,0 +1,28 @@ +name: nf-core linting comment +# This workflow is triggered after the linting action is complete +# It posts an automated comment to the PR, even if the PR is coming from a fork + +on: + workflow_run: + workflows: ["nf-core linting"] + +jobs: + test: + runs-on: ubuntu-latest + steps: + - name: Download lint results + uses: dawidd6/action-download-artifact@09f2f74827fd3a8607589e5ad7f9398816f540fe # v3 + with: + workflow: linting.yml + workflow_conclusion: completed + + - name: Get PR number + id: pr_number + run: echo "pr_number=$(cat linting-logs/PR_number.txt)" >> $GITHUB_OUTPUT + + - name: Post PR comment + uses: marocchino/sticky-pull-request-comment@331f8f5b4215f0445d3c07b4967662a32a2d3e31 # v2 + with: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + number: ${{ steps.pr_number.outputs.pr_number }} + path: linting-logs/lint_results.md diff --git a/.github/workflows/release-announcements.yml b/.github/workflows/release-announcements.yml new file mode 100644 index 0000000..03ecfcf --- /dev/null +++ b/.github/workflows/release-announcements.yml @@ -0,0 +1,75 @@ +name: release-announcements +# Automatic release toot and tweet anouncements +on: + release: + types: [published] + workflow_dispatch: + +jobs: + toot: + runs-on: ubuntu-latest + steps: + - name: get topics and convert to hashtags + id: get_topics + run: | + echo "topics=$(curl -s https://nf-co.re/pipelines.json | jq -r '.remote_workflows[] | select(.full_name == "${{ github.repository }}") | .topics[]' | awk '{print "#"$0}' | tr '\n' ' ')" >> $GITHUB_OUTPUT + + - uses: rzr/fediverse-action@master + with: + access-token: ${{ secrets.MASTODON_ACCESS_TOKEN }} + host: "mstdn.science" # custom host if not "mastodon.social" (default) + # GitHub event payload + # https://docs.github.com/en/developers/webhooks-and-events/webhooks/webhook-events-and-payloads#release + message: | + Pipeline release! ${{ github.repository }} v${{ github.event.release.tag_name }} - ${{ github.event.release.name }}! + + Please see the changelog: ${{ github.event.release.html_url }} + + ${{ steps.get_topics.outputs.topics }} #nfcore #openscience #nextflow #bioinformatics + + send-tweet: + runs-on: ubuntu-latest + + steps: + - uses: actions/setup-python@82c7e631bb3cdc910f68e0081d67478d79c6982d # v5 + with: + python-version: "3.10" + - name: Install dependencies + run: pip install tweepy==4.14.0 + - name: Send tweet + shell: python + run: | + import os + import tweepy + + client = tweepy.Client( + access_token=os.getenv("TWITTER_ACCESS_TOKEN"), + access_token_secret=os.getenv("TWITTER_ACCESS_TOKEN_SECRET"), + consumer_key=os.getenv("TWITTER_CONSUMER_KEY"), + consumer_secret=os.getenv("TWITTER_CONSUMER_SECRET"), + ) + tweet = os.getenv("TWEET") + client.create_tweet(text=tweet) + env: + TWEET: | + Pipeline release! ${{ github.repository }} v${{ github.event.release.tag_name }} - ${{ github.event.release.name }}! + + Please see the changelog: ${{ github.event.release.html_url }} + TWITTER_CONSUMER_KEY: ${{ secrets.TWITTER_CONSUMER_KEY }} + TWITTER_CONSUMER_SECRET: ${{ secrets.TWITTER_CONSUMER_SECRET }} + TWITTER_ACCESS_TOKEN: ${{ secrets.TWITTER_ACCESS_TOKEN }} + TWITTER_ACCESS_TOKEN_SECRET: ${{ secrets.TWITTER_ACCESS_TOKEN_SECRET }} + + bsky-post: + runs-on: ubuntu-latest + steps: + - uses: zentered/bluesky-post-action@80dbe0a7697de18c15ad22f4619919ceb5ccf597 # v0.1.0 + with: + post: | + Pipeline release! ${{ github.repository }} v${{ github.event.release.tag_name }} - ${{ github.event.release.name }}! + + Please see the changelog: ${{ github.event.release.html_url }} + env: + BSKY_IDENTIFIER: ${{ secrets.BSKY_IDENTIFIER }} + BSKY_PASSWORD: ${{ secrets.BSKY_PASSWORD }} + # diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml deleted file mode 100644 index 66e6122..0000000 --- a/.github/workflows/test.yml +++ /dev/null @@ -1,74 +0,0 @@ -# Adopted from https://github.com/nf-core/modules/blob/master/.github/workflows/test.yml - -name: CI tests -on: - push: - branches: - - dev - pull_request: - -# Cancel if a newer run is started -concurrency: - group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} - cancel-in-progress: true - -jobs: - pre-commit: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - - name: Set up Python 3.11 - uses: actions/setup-python@v5 - with: - python-version: 3.11 - cache: "pip" - - - name: Install pre-commit - run: pip install pre-commit - - - name: Run pre-commit - run: pre-commit run --all-files - - test: - runs-on: ubuntu-latest - name: Run stub test with docker - env: - NXF_ANSI_LOG: false - - steps: - - uses: actions/checkout@v4 - - - name: Install Nextflow - uses: nf-core/setup-nextflow@v1 - with: - version: "23.04.4" - - - name: Disk space cleanup - uses: jlumbroso/free-disk-space@54081f138730dfa15788a46383842cd2f914a1be # v1.3.1 - - - name: Run stub-test - run: | - nextflow run \ - main.nf \ - -profile docker \ - -stub \ - -params-file tests/stub/params.json - - confirm-pass: - runs-on: ubuntu-latest - needs: [pre-commit, test] - if: always() - steps: - - name: All tests ok - if: ${{ success() || !contains(needs.*.result, 'failure') }} - run: exit 0 - - name: One or more tests failed - if: ${{ contains(needs.*.result, 'failure') }} - run: exit 1 - - - name: debug-print - if: always() - run: | - echo "toJSON(needs) = ${{ toJSON(needs) }}" - echo "toJSON(needs.*.result) = ${{ toJSON(needs.*.result) }}" diff --git a/.gitignore b/.gitignore index e141945..5124c9a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,13 +1,8 @@ .nextflow* work/ +data/ results/ .DS_Store -*.code-workspace -.screenrc -.*.sw? -__pycache__ -*.pyo +testing/ +testing* *.pyc - -*.stdout -*.stderr diff --git a/.gitpod.yml b/.gitpod.yml new file mode 100644 index 0000000..105a182 --- /dev/null +++ b/.gitpod.yml @@ -0,0 +1,20 @@ +image: nfcore/gitpod:latest +tasks: + - name: Update Nextflow and setup pre-commit + command: | + pre-commit install --install-hooks + nextflow self-update + - name: unset JAVA_TOOL_OPTIONS + command: | + unset JAVA_TOOL_OPTIONS + +vscode: + extensions: # based on nf-core.nf-core-extensionpack + - esbenp.prettier-vscode # Markdown/CommonMark linting and style checking for Visual Studio Code + - EditorConfig.EditorConfig # override user/workspace settings with settings found in .editorconfig files + - Gruntfuggly.todo-tree # Display TODO and FIXME in a tree view in the activity bar + - mechatroner.rainbow-csv # Highlight columns in csv files in different colors + # - nextflow.nextflow # Nextflow syntax highlighting + - oderwat.indent-rainbow # Highlight indentation level + - streetsidesoftware.code-spell-checker # Spelling checker for source code + - charliermarsh.ruff # Code linter Ruff diff --git a/.nf-core.yml b/.nf-core.yml index 3805dc8..610776e 100644 --- a/.nf-core.yml +++ b/.nf-core.yml @@ -1 +1,27 @@ +lint: + files_exist: + - CODE_OF_CONDUCT.md + - assets/nf-core-genepal_logo_light.png + - docs/images/nf-core-genepal_logo_light.png + - docs/images/nf-core-genepal_logo_dark.png + - .github/ISSUE_TEMPLATE/config.yml + - .github/workflows/awstest.yml + - .github/workflows/awsfulltest.yml + - conf/igenomes.config + files_unchanged: + - CODE_OF_CONDUCT.md + - assets/nf-core-genepal_logo_light.png + - docs/images/nf-core-genepal_logo_light.png + - docs/images/nf-core-genepal_logo_dark.png + - .github/ISSUE_TEMPLATE/bug_report.yml + multiqc_config: + - report_comment + nextflow_config: + - manifest.name + - manifest.homePage +nf_core_version: 2.14.1 repository_type: pipeline +template: + prefix: PlantandFoodResearch + skip: + - igenomes diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 3c51dd9..4dc0f1d 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,22 +1,13 @@ repos: - repo: https://github.com/pre-commit/mirrors-prettier - rev: "v4.0.0-alpha.8" + rev: "v3.1.0" hooks: - id: prettier additional_dependencies: - prettier@3.2.5 + - repo: https://github.com/editorconfig-checker/editorconfig-checker.python rev: "2.7.3" hooks: - id: editorconfig-checker alias: ec - - repo: local - hooks: - - id: version_checks - name: Version checks - language: system - entry: > - .github/version_checks.sh - always_run: true - fail_fast: true - pass_filenames: false diff --git a/.prettierignore b/.prettierignore index 8d22eff..437d763 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1,16 +1,12 @@ -includes/Maven_Pro/ - -# gitignore +email_template.html +adaptivecard.json +slackreport.json .nextflow* work/ +data/ results/ .DS_Store -*.code-workspace -.screenrc -.*.sw? -__pycache__ -*.pyo +testing/ +testing* *.pyc - -*.stdout -*.stderr +bin/ diff --git a/CHANGELOG.md b/CHANGELOG.md index a83f65e..3ca4ebf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,162 +3,14 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## 0.4.0+dev - [19-Aug-2024] +## v1.0dev - [date] -### `Added` - -1. Added `orthofinder_annotations` param -2. Added `FASTA_GFF_ORTHOFINDER` sub-workflow -3. Added evaluation by BUSCO [#41](https://github.com/PlantandFoodResearch/genepal/issues/41) -4. Included common tax ids for eggnog mapper [#27](https://github.com/PlantandFoodResearch/genepal/issues/27) -5. Implemented hierarchical naming scheme: geneI.tJ, geneI.tJ.exonK, geneI.tJ.cdsK [#19](https://github.com/PlantandFoodResearch/genepal/issues/19), [#34](https://github.com/PlantandFoodResearch/genepal/issues/34) -6. Now sorting list of bam and list of fastq before cat to avoid resume cache misses -7. Allowed BAM files for RNA evidence [#3](https://github.com/PlantandFoodResearch/genepal/issues/3) -8. Added `GXF_FASTA_AGAT_SPADDINTRONS_SPEXTRACTSEQUENCES` sub-workflow for splice type statistics [#11](https://github.com/PlantandFoodResearch/genepal/issues/11) -9. Changed `orthofinder_annotations` from FASTA/GFF to protein FASTA [#43](https://github.com/PlantandFoodResearch/genepal/issues/43) -10. Added param `enforce_full_intron_support` to turn on/off strict model purging by TSEBRA [#21](https://github.com/PlantandFoodResearch/genepal/issues/21) -11. Added param `filter_liftoff_by_hints` to evaluate liftoff models with TSEBRA to make sure they have the same level of evidence as BRAKER [#28](ttps://github.com/PlantandFoodResearch/genepal/issues/28) -12. Added a script to automatically check module version updates -13. Updated modules: `AGAT/CONVERTSPGFF2GTF`, `CAT_FASTQ`, `CUSTOM/DUMPSOFTWAREVERSIONS`, `EGGNOGMAPPER`, `FASTP`, `GFFREAD`, `SAMTOOLS/CAT`, `CUSTOM/RESTOREGFFIDS`, `CUSTOM/SHORTENFASTAIDS`, `EDTA/EDTA`, `CAT/CAT`, `FASTQC`, `GUNZIP`, `LIFTOFF`, `STAR/ALIGN`, `STAR/GENOMEGENERATE`, `UMITOOLS/EXTRACT`, -14. Updated sub-workflows: `FASTQ_FASTQC_UMITOOLS_FASTP` and `FASTA_EDTA_LAI` -15. Reduced `BRAKER3` threads to 8 [#55](https://github.com/PlantandFoodResearch/genepal/issues/55) -16. Now the final annotations are stored in the `annotations` folder [#53](https://github.com/PlantandFoodResearch/genepal/issues/53) -17. Added `-gff` flag to `REPEATMASKER` to save the gff file [#54](https://github.com/PlantandFoodResearch/genepal/issues/54) -18. Now a single `fasta` file can be directly specified for `protein_evidence` -19. `eggnogmapper_db_dir` is not a required parameter anymore -20. `eggnogmapper_tax_scope` is now set to 1 (root div) by default -21. Added a `test` profile based on public data - -### `Fixed` - -1. Fixed BRAKER spellings [#36](https://github.com/PlantandFoodResearch/genepal/issues/36) -2. Fixed liftoff failure when lifting off from a single reference [#40](https://github.com/PlantandFoodResearch/genepal/issues/40) -3. Added versions from GFF_STORE sub-workflows [#33](https://github.com/PlantandFoodResearch/genepal/issues/33) - -### `Dependencies` - -1. NextFlow!>=23.04.4 -2. nf-validation=1.1.3 - -### `Deprecated` - -1. Renamed `external_protein_fastas` param to `protein_evidence` -2. Renamed `fastq` param to `rna_evidence` -3. Renamed `braker_allow_isoforms` param to `allow_isoforms` -4. Moved liftoffID from gene level to mRNA/transcript level -5. Moved `version_check.sh` to `.github/version_checks.sh` -6. Removed dependency on for `BRAKER3` and `REPEATMASKER` modules which are now installed from -7. Removed dependency on -8. Now the final annotations are not stored in the `final` folder -9. Now BRAKER3 outputs are not saved by default [#53](https://github.com/PlantandFoodResearch/genepal/issues/53) and saved under `etc` folder when enabled -10. Removed `local` profile. Local executor is the default when no executor is specified. Therefore, the `local` profile was not needed. - -## 0.3.3 - [18-Jun-2024] +Initial release of PlantandFoodResearch/genepal, created with the [nf-core](https://nf-co.re/) template. ### `Added` -1. Added a stub test to evaluate the case where an assembly is soft masked but has no annotations - ### `Fixed` -1. Fixed a bug where `is_masked` was ignored by the pipeline -2. Fixed a bug in param validation which allowed specification of `braker_hints` without `braker_gff3` - -### `Dependencies` - -1. NextFlow!>=23.04.4 -2. nf-validation=1.1.3 - -### `Deprecated` - -## 0.3.2 - [13-May-2024] - -### `Added` - -### `Fixed` - -1. Increased time limit for REPEATMODELER_REPEATMODELER to 5 days -2. Now removing comments from fasta file before feeding it to BRAKER added tests for the perl one liner -3. Fixed CHANGELOG version check failure in `version_check.sh` -4. Increased the SLURM job time limit to 14 days - ### `Dependencies` -1. NextFlow!>=23.04.4 -2. nf-validation=1.1.3 - -### `Deprecated` - -## 0.3.1 - [10-May-2024] - -### `Added` - -### `Fixed` - -1. Increased time limit for REPEATMODELER_REPEATMODELER to 3 days, REPEATMASKER to 2 days, EDTA_EDTA to 7 days, BRAKER3 to 7 days and EGGNOGMAPPER to 1 day - -### `Dependencies` - -1. NextFlow!>=23.04.4 -2. nf-validation=1.1.3 - -### `Deprecated` - -## 0.3.0 - [30-April-2024] - -### `Added` - -1. Added changelog and semantic versioning -2. Changed license to MIT -3. Updated `.editorconfig` -4. Moved .literature to test/ branch -5. Renamed `genepal_local` to `local_genepal` -6. Renamed `genepal_pfr` to `pfr_genepal` -7. Added versioning checking -8. Updated github workflow to use pre-commit instead of prettier and editorconfig check -9. Added central singularity cache dir for pfr config -10. Added `SORTMERNA_INDEX` before `SORTMERNA` -11. Fixed sample contamination bug introduced by `file.simpleName` -12. Now using empty files for stub testing in CI -13. Now BRAKER can be skipped by including BRAKER outputs from previous runs in the `target_assemblies` param -14. Added `gffcompare` to merge liftoff annotations -15. Renamed `samplesheet` param to `fastq` -16. Now using assemblysheet in combination with nf-validation for assembly input -17. Added nextflow_schema.json -18. Now using nf-validation to validate fastqsheet provided by params.fastq -19. Moved `manifest.config` and `reporting_defaults.config` content to `nextflow.config` -20. Now using a txt file for `params.external_protein_fastas` -21. Now using nf-validation for `params.liftoff_annotations` -22. Now using nf-validation for all the parameters -23. Added `PURGE_BRAKER_MODELS` sub-workflow -24. Added `GFF_EGGNOGMAPPER` sub-workflow -25. Now using a custom version of `GFFREAD` which supports `meta` and `fasta` -26. Now using TSEBRA to purge models which do not have full intron support from BRAKER hints -27. Added params `eggnogmapper_evalue` and `eggnogmapper_pident` -28. Added `PURGE_NOHIT_BRAKER_MODELS` sub-workflow -29. Now merging BRAKER and liftoff models before running eggnogmapper -30. Added `GFF_MERGE_CLEANUP` sub-workflow -31. Now using `description` field to store notes and textual annotations in the gff files -32. Now using `mRNA` in place of `transcript` in gff files -33. Now `eggnogmapper_purge_nohits` is set to `false` by default -34. Added `GFF_STORE` sub workflow -35. `external_protein_fastas` and `eggnogmapper_db_dir` are not mandatory parameters -36. Added contributors -37. Add a document for the pipeline parameters -38. Updated `pfr_genepal` and `pfr/profile.config` -39. Now using local tests/stub files for GitHub CI -40. Now removing iso-forms left by TSEBRA using `AGAT_SPFILTERFEATUREFROMKILLLIST` -41. Added `pyproject.toml` -42. Now using PFAMs from eggnog if description is '-' - -### `Fixed` - -1. Removed liftoff models with `valid_ORF=False` -2. Updated license text to include 'Copyright (c) 2024 The New Zealand Institute for Plant and Food Research Limited' - -### `Dependencies` - -1. NextFlow!>=23.04.4 -2. nf-validation=1.1.3 - ### `Deprecated` diff --git a/CITATIONS.md b/CITATIONS.md new file mode 100644 index 0000000..9e64d35 --- /dev/null +++ b/CITATIONS.md @@ -0,0 +1,41 @@ +# PlantandFoodResearch/genepal: Citations + +## [nf-core](https://pubmed.ncbi.nlm.nih.gov/32055031/) + +> Ewels PA, Peltzer A, Fillinger S, Patel H, Alneberg J, Wilm A, Garcia MU, Di Tommaso P, Nahnsen S. The nf-core framework for community-curated bioinformatics pipelines. Nat Biotechnol. 2020 Mar;38(3):276-278. doi: 10.1038/s41587-020-0439-x. PubMed PMID: 32055031. + +## [Nextflow](https://pubmed.ncbi.nlm.nih.gov/28398311/) + +> Di Tommaso P, Chatzou M, Floden EW, Barja PP, Palumbo E, Notredame C. Nextflow enables reproducible computational workflows. Nat Biotechnol. 2017 Apr 11;35(4):316-319. doi: 10.1038/nbt.3820. PubMed PMID: 28398311. + +## Pipeline tools + +- [FastQC](https://www.bioinformatics.babraham.ac.uk/projects/fastqc/) + + > Andrews, S. (2010). FastQC: A Quality Control Tool for High Throughput Sequence Data [Online]. + +- [MultiQC](https://pubmed.ncbi.nlm.nih.gov/27312411/) + + > Ewels P, Magnusson M, Lundin S, Käller M. MultiQC: summarize analysis results for multiple tools and samples in a single report. Bioinformatics. 2016 Oct 1;32(19):3047-8. doi: 10.1093/bioinformatics/btw354. Epub 2016 Jun 16. PubMed PMID: 27312411; PubMed Central PMCID: PMC5039924. + +## Software packaging/containerisation tools + +- [Anaconda](https://anaconda.com) + + > Anaconda Software Distribution. Computer software. Vers. 2-2.4.0. Anaconda, Nov. 2016. Web. + +- [Bioconda](https://pubmed.ncbi.nlm.nih.gov/29967506/) + + > Grüning B, Dale R, Sjödin A, Chapman BA, Rowe J, Tomkins-Tinch CH, Valieris R, Köster J; Bioconda Team. Bioconda: sustainable and comprehensive software distribution for the life sciences. Nat Methods. 2018 Jul;15(7):475-476. doi: 10.1038/s41592-018-0046-7. PubMed PMID: 29967506. + +- [BioContainers](https://pubmed.ncbi.nlm.nih.gov/28379341/) + + > da Veiga Leprevost F, Grüning B, Aflitos SA, Röst HL, Uszkoreit J, Barsnes H, Vaudel M, Moreno P, Gatto L, Weber J, Bai M, Jimenez RC, Sachsenberg T, Pfeuffer J, Alvarez RV, Griss J, Nesvizhskii AI, Perez-Riverol Y. BioContainers: an open-source and community-driven framework for software standardization. Bioinformatics. 2017 Aug 15;33(16):2580-2582. doi: 10.1093/bioinformatics/btx192. PubMed PMID: 28379341; PubMed Central PMCID: PMC5870671. + +- [Docker](https://dl.acm.org/doi/10.5555/2600239.2600241) + + > Merkel, D. (2014). Docker: lightweight linux containers for consistent development and deployment. Linux Journal, 2014(239), 2. doi: 10.5555/2600239.2600241. + +- [Singularity](https://pubmed.ncbi.nlm.nih.gov/28494014/) + + > Kurtzer GM, Sochat V, Bauer MW. Singularity: Scientific containers for mobility of compute. PLoS One. 2017 May 11;12(5):e0177459. doi: 10.1371/journal.pone.0177459. eCollection 2017. PubMed PMID: 28494014; PubMed Central PMCID: PMC5426675. diff --git a/LICENSE b/LICENSE index 2ef2204..9106c5a 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2024 The New Zealand Institute for Plant and Food Research Limited +Copyright (c) Usman Rashid, Jason Shiller Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/README.md b/README.md index 712a5d1..676f47c 100644 --- a/README.md +++ b/README.md @@ -1,68 +1,87 @@ -# GENEPAL +[![GitHub Actions CI Status](https://github.com/PlantandFoodResearch/genepal/actions/workflows/ci.yml/badge.svg)](https://github.com/PlantandFoodResearch/genepal/actions/workflows/ci.yml) +[![GitHub Actions Linting Status](https://github.com/PlantandFoodResearch/genepal/actions/workflows/linting.yml/badge.svg)](https://github.com/PlantandFoodResearch/genepal/actions/workflows/linting.yml)[![Cite with Zenodo](http://img.shields.io/badge/DOI-10.5281/zenodo.XXXXXXX-1073c8?labelColor=000000)](https://doi.org/10.5281/zenodo.XXXXXXX) +[![nf-test](https://img.shields.io/badge/unit_tests-nf--test-337ab7.svg)](https://www.nf-test.com) -[![Lint/stub on Linux/Docker](https://github.com/PlantandFoodResearch/genepal/actions/workflows/test.yml/badge.svg)](https://github.com/PlantandFoodResearch/genepal/actions/workflows/test.yml) +[![Nextflow](https://img.shields.io/badge/nextflow%20DSL2-%E2%89%A523.04.0-23aa62.svg)](https://www.nextflow.io/) +[![run with conda](http://img.shields.io/badge/run%20with-conda-3EB049?labelColor=000000&logo=anaconda)](https://docs.conda.io/en/latest/) +[![run with docker](https://img.shields.io/badge/run%20with-docker-0db7ed?labelColor=000000&logo=docker)](https://www.docker.com/) +[![run with singularity](https://img.shields.io/badge/run%20with-singularity-1d355c.svg?labelColor=000000)](https://sylabs.io/docs/) +[![Launch on Seqera Platform](https://img.shields.io/badge/Launch%20%F0%9F%9A%80-Seqera%20Platform-%234256e7)](https://cloud.seqera.io/launch?pipeline=https://github.com/PlantandFoodResearch/genepal) -A NextFlow pipeline for single genome and pan-genome annotation. +## Introduction -## Flowchart +**PlantandFoodResearch/genepal** is a bioinformatics pipeline that ... -

+ -## Alpha Release + + -This release is not fully documented and under alpha testing by the Bioinformatics Team. There are several [outstanding issues](https://github.com/PlantandFoodResearch/genepal/issues) which will be addressed before a general release. +1. Read QC ([`FastQC`](https://www.bioinformatics.babraham.ac.uk/projects/fastqc/)) +2. Present QC for raw reads ([`MultiQC`](http://multiqc.info/)) -## Plant&Food Users +## Usage -Download the pipeline to your `/workspace/$USER` folder. Change the parameters defined in the [pfr/params.json](./pfr/params.json) file. Submit the pipeline to SLURM for execution. For a description of the parameters, see [parameters.md](./docs/parameters.md). +> [!NOTE] +> If you are new to Nextflow and nf-core, please refer to [this page](https://nf-co.re/docs/usage/installation) on how to set-up Nextflow. Make sure to [test your setup](https://nf-co.re/docs/usage/introduction#how-to-run-a-pipeline) with `-profile test` before running the workflow on actual data. + + + +Now, you can run the pipeline using: + + ```bash -sbatch ./pfr_genepal +nextflow run PlantandFoodResearch/genepal \ + -profile \ + --input samplesheet.csv \ + --outdir ``` +> [!WARNING] +> Please provide pipeline parameters via the CLI or Nextflow `-params-file` option. Custom config files including those provided by the `-c` Nextflow option can be used to provide any configuration _**except for parameters**_; +> see [docs](https://nf-co.re/usage/configuration#custom-configuration-files). + ## Credits -plantandfoodresearch/genepal workflows were originally scripted by Jason Shiller ([@jasonshiller](https://github.com/jasonshiller)). Usman Rashid ([@gallvp](https://github.com/gallvp)) wrote the NextFLow pipeline. +PlantandFoodResearch/genepal was originally written by Usman Rashid, Jason Shiller. We thank the following people for their extensive assistance in the development of this pipeline: -- Cecilia Deng [@CeciliaDeng](https://github.com/CeciliaDeng) -- Charles David [@charlesdavid](https://github.com/charlesdavid) -- Chen Wu [@christinawu2008](https://github.com/christinawu2008) -- Leonardo Salgado [@leorippel](https://github.com/leorippel) -- Ross Crowhurst [@rosscrowhurst](https://github.com/rosscrowhurst) -- Susan Thomson [@cflsjt](https://github.com/cflsjt) -- Ting-Hsuan Chen [@ting-hsuan-chen](https://github.com/ting-hsuan-chen) - -The pipeline uses nf-core modules contributed by following authors: - - - - - - - - - - - - - - - - - - - - - - - - - + + +## Contributions and Support + +If you would like to contribute to this pipeline, please see the [contributing guidelines](.github/CONTRIBUTING.md). ## Citations + + + + + +An extensive list of references for the tools used by the pipeline can be found in the [`CITATIONS.md`](CITATIONS.md) file. + This pipeline uses code and infrastructure developed and maintained by the [nf-core](https://nf-co.re) community, reused here under the [MIT license](https://github.com/nf-core/tools/blob/master/LICENSE). > **The nf-core framework for community-curated bioinformatics pipelines.** diff --git a/assets/adaptivecard.json b/assets/adaptivecard.json new file mode 100644 index 0000000..b356d9d --- /dev/null +++ b/assets/adaptivecard.json @@ -0,0 +1,67 @@ +{ + "type": "message", + "attachments": [ + { + "contentType": "application/vnd.microsoft.card.adaptive", + "contentUrl": null, + "content": { + "\$schema": "http://adaptivecards.io/schemas/adaptive-card.json", + "msteams": { + "width": "Full" + }, + "type": "AdaptiveCard", + "version": "1.2", + "body": [ + { + "type": "TextBlock", + "size": "Large", + "weight": "Bolder", + "color": "<% if (success) { %>Good<% } else { %>Attention<%} %>", + "text": "PlantandFoodResearch/genepal v${version} - ${runName}", + "wrap": true + }, + { + "type": "TextBlock", + "spacing": "None", + "text": "Completed at ${dateComplete} (duration: ${duration})", + "isSubtle": true, + "wrap": true + }, + { + "type": "TextBlock", + "text": "<% if (success) { %>Pipeline completed successfully!<% } else { %>Pipeline completed with errors. The full error message was: ${errorReport}.<% } %>", + "wrap": true + }, + { + "type": "TextBlock", + "text": "The command used to launch the workflow was as follows:", + "wrap": true + }, + { + "type": "TextBlock", + "text": "${commandLine}", + "isSubtle": true, + "wrap": true + } + ], + "actions": [ + { + "type": "Action.ShowCard", + "title": "Pipeline Configuration", + "card": { + "type": "AdaptiveCard", + "\$schema": "http://adaptivecards.io/schemas/adaptive-card.json", + "body": [ + { + "type": "FactSet", + "facts": [<% out << summary.collect{ k,v -> "{\"title\": \"$k\", \"value\" : \"$v\"}"}.join(",\n") %> + ] + } + ] + } + } + ] + } + } + ] +} diff --git a/assets/email_template.html b/assets/email_template.html new file mode 100644 index 0000000..aa507c5 --- /dev/null +++ b/assets/email_template.html @@ -0,0 +1,53 @@ + + + + + + + + PlantandFoodResearch/genepal Pipeline Report + + +
+ + + +

PlantandFoodResearch/genepal ${version}

+

Run Name: $runName

+ +<% if (!success){ + out << """ +
+

PlantandFoodResearch/genepal execution completed unsuccessfully!

+

The exit status of the task that caused the workflow execution to fail was: $exitStatus.

+

The full error message was:

+
${errorReport}
+
+ """ +} else { + out << """ +
+ PlantandFoodResearch/genepal execution completed successfully! +
+ """ +} +%> + +

The workflow was completed at $dateComplete (duration: $duration)

+

The command used to launch the workflow was as follows:

+
$commandLine
+ +

Pipeline Configuration:

+ + + <% out << summary.collect{ k,v -> "" }.join("\n") %> + +
$k
$v
+ +

PlantandFoodResearch/genepal

+

https://github.com/PlantandFoodResearch/genepal

+ +
+ + + diff --git a/assets/email_template.txt b/assets/email_template.txt new file mode 100644 index 0000000..735bcac --- /dev/null +++ b/assets/email_template.txt @@ -0,0 +1,31 @@ +Run Name: $runName + +<% if (success){ + out << "## PlantandFoodResearch/genepal execution completed successfully! ##" +} else { + out << """#################################################### +## PlantandFoodResearch/genepal execution completed unsuccessfully! ## +#################################################### +The exit status of the task that caused the workflow execution to fail was: $exitStatus. +The full error message was: + +${errorReport} +""" +} %> + + +The workflow was completed at $dateComplete (duration: $duration) + +The command used to launch the workflow was as follows: + + $commandLine + + + +Pipeline Configuration: +----------------------- +<% out << summary.collect{ k,v -> " - $k: $v" }.join("\n") %> + +-- +PlantandFoodResearch/genepal +https://github.com/PlantandFoodResearch/genepal diff --git a/assets/methods_description_template.yml b/assets/methods_description_template.yml new file mode 100644 index 0000000..a456ef1 --- /dev/null +++ b/assets/methods_description_template.yml @@ -0,0 +1,29 @@ +id: "PlantandFoodResearch-genepal-methods-description" +description: "Suggested text and references to use when describing pipeline usage within the methods section of a publication." +section_name: "PlantandFoodResearch/genepal Methods Description" +section_href: "https://github.com/PlantandFoodResearch/genepal" +plot_type: "html" +## TODO nf-core: Update the HTML below to your preferred methods description, e.g. add publication citation for this pipeline +## You inject any metadata in the Nextflow '${workflow}' object +data: | +

Methods

+

Data was processed using PlantandFoodResearch/genepal v${workflow.manifest.version} ${doi_text} of the nf-core collection of workflows (Ewels et al., 2020), utilising reproducible software environments from the Bioconda (Grüning et al., 2018) and Biocontainers (da Veiga Leprevost et al., 2017) projects.

+

The pipeline was executed with Nextflow v${workflow.nextflow.version} (Di Tommaso et al., 2017) with the following command:

+
${workflow.commandLine}
+

${tool_citations}

+

References

+
    +
  • Di Tommaso, P., Chatzou, M., Floden, E. W., Barja, P. P., Palumbo, E., & Notredame, C. (2017). Nextflow enables reproducible computational workflows. Nature Biotechnology, 35(4), 316-319. doi: 10.1038/nbt.3820
  • +
  • Ewels, P. A., Peltzer, A., Fillinger, S., Patel, H., Alneberg, J., Wilm, A., Garcia, M. U., Di Tommaso, P., & Nahnsen, S. (2020). The nf-core framework for community-curated bioinformatics pipelines. Nature Biotechnology, 38(3), 276-278. doi: 10.1038/s41587-020-0439-x
  • +
  • Grüning, B., Dale, R., Sjödin, A., Chapman, B. A., Rowe, J., Tomkins-Tinch, C. H., Valieris, R., Köster, J., & Bioconda Team. (2018). Bioconda: sustainable and comprehensive software distribution for the life sciences. Nature Methods, 15(7), 475–476. doi: 10.1038/s41592-018-0046-7
  • +
  • da Veiga Leprevost, F., Grüning, B. A., Alves Aflitos, S., Röst, H. L., Uszkoreit, J., Barsnes, H., Vaudel, M., Moreno, P., Gatto, L., Weber, J., Bai, M., Jimenez, R. C., Sachsenberg, T., Pfeuffer, J., Vera Alvarez, R., Griss, J., Nesvizhskii, A. I., & Perez-Riverol, Y. (2017). BioContainers: an open-source and community-driven framework for software standardization. Bioinformatics (Oxford, England), 33(16), 2580–2582. doi: 10.1093/bioinformatics/btx192
  • + ${tool_bibliography} +
+
+
Notes:
+
    + ${nodoi_text} +
  • The command above does not include parameters contained in any configs or profiles that may have been used. Ensure the config file is also uploaded with your publication!
  • +
  • You should also cite all software used within this run. Check the "Software Versions" of this report to get version information.
  • +
+
diff --git a/assets/multiqc_config.yml b/assets/multiqc_config.yml new file mode 100644 index 0000000..6165596 --- /dev/null +++ b/assets/multiqc_config.yml @@ -0,0 +1,14 @@ +report_comment: > + This report has been generated by the PlantandFoodResearch/genepal + analysis pipeline. +report_section_order: + "PlantandFoodResearch-genepal-methods-description": + order: -1000 + software_versions: + order: -1001 + "PlantandFoodResearch-genepal-summary": + order: -1002 + +export_plots: true + +disable_version_detection: true diff --git a/assets/rrna-db-defaults.txt b/assets/rrna-db-defaults.txt deleted file mode 100644 index 4223356..0000000 --- a/assets/rrna-db-defaults.txt +++ /dev/null @@ -1,8 +0,0 @@ -https://raw.githubusercontent.com/biocore/sortmerna/v4.3.4/data/rRNA_databases/rfam-5.8s-database-id98.fasta -https://raw.githubusercontent.com/biocore/sortmerna/v4.3.4/data/rRNA_databases/rfam-5s-database-id98.fasta -https://raw.githubusercontent.com/biocore/sortmerna/v4.3.4/data/rRNA_databases/silva-arc-16s-id95.fasta -https://raw.githubusercontent.com/biocore/sortmerna/v4.3.4/data/rRNA_databases/silva-arc-23s-id98.fasta -https://raw.githubusercontent.com/biocore/sortmerna/v4.3.4/data/rRNA_databases/silva-bac-16s-id90.fasta -https://raw.githubusercontent.com/biocore/sortmerna/v4.3.4/data/rRNA_databases/silva-bac-23s-id98.fasta -https://raw.githubusercontent.com/biocore/sortmerna/v4.3.4/data/rRNA_databases/silva-euk-18s-id95.fasta -https://raw.githubusercontent.com/biocore/sortmerna/v4.3.4/data/rRNA_databases/silva-euk-28s-id98.fasta diff --git a/assets/rrna-db-test.txt b/assets/rrna-db-test.txt deleted file mode 100644 index 20116f9..0000000 --- a/assets/rrna-db-test.txt +++ /dev/null @@ -1 +0,0 @@ -https://raw.githubusercontent.com/biocore/sortmerna/v4.3.4/data/rRNA_databases/silva-euk-28s-id98.fasta diff --git a/assets/samplesheet.csv b/assets/samplesheet.csv new file mode 100644 index 0000000..5f653ab --- /dev/null +++ b/assets/samplesheet.csv @@ -0,0 +1,3 @@ +sample,fastq_1,fastq_2 +SAMPLE_PAIRED_END,/path/to/fastq/files/AEG588A1_S1_L002_R1_001.fastq.gz,/path/to/fastq/files/AEG588A1_S1_L002_R2_001.fastq.gz +SAMPLE_SINGLE_END,/path/to/fastq/files/AEG588A4_S4_L003_R1_001.fastq.gz, diff --git a/assets/schema_input.json b/assets/schema_input.json index 1da6b87..34b65a4 100644 --- a/assets/schema_input.json +++ b/assets/schema_input.json @@ -1,70 +1,33 @@ { "$schema": "http://json-schema.org/draft-07/schema", - "$id": "https://raw.githubusercontent.com/plantandfoodresearch/genepal/master/assets/schema_input.json", - "title": "plantandfoodresearch/genepal pipeline - params.input schema", + "$id": "https://raw.githubusercontent.com/PlantandFoodResearch/genepal/master/assets/schema_input.json", + "title": "PlantandFoodResearch/genepal pipeline - params.input schema", "description": "Schema for the file provided with params.input", "type": "array", "items": { "type": "object", "properties": { - "tag": { + "sample": { "type": "string", - "pattern": "^\\w+$", - "errorMessage": "Assembly tags must be provided and can only contain alphanumeric characters including '_'", - "unique": true + "pattern": "^\\S+$", + "errorMessage": "Sample name must be provided and cannot contain spaces", + "meta": ["id"] }, - "fasta": { + "fastq_1": { "type": "string", - "pattern": "^\\S+\\.f(a|asta|as|sa|na)(\\.gz)?$", - "errorMessage": "FASTA file path cannot contain spaces and must have extension '.f(a|asta|as|sa|na)' or '.f(a|asta|as|sa|na).gz'" + "format": "file-path", + "exists": true, + "pattern": "^\\S+\\.f(ast)?q\\.gz$", + "errorMessage": "FastQ file for reads 1 must be provided, cannot contain spaces and must have extension '.fq.gz' or '.fastq.gz'" }, - "is_masked": { + "fastq_2": { "type": "string", - "pattern": "^(yes|no)$", - "errorMessage": "Masking information must be provided as 'yes' or 'no'" - }, - "te_lib": { - "anyOf": [ - { - "type": "string", - "pattern": "^\\S+\\.f(a|asta|as|sa|na)(\\.gz)?$" - }, - { - "type": "string", - "maxLength": 0 - } - ], - "errorMessage": "TE library FASTA file path cannot contain spaces and must have extension '.f(a|asta|as|sa|na)' or '.f(a|asta|as|sa|na).gz'" - }, - "braker_gff3": { - "anyOf": [ - { - "type": "string", - "pattern": "^\\S+\\.gff(3)?(\\.gz)?$" - }, - { - "type": "string", - "maxLength": 0 - } - ], - "errorMessage": "BRAKER GFF3 file path cannot contain spaces and must have extension '.gff.gz', '.gff3.gz', '.gff' or '.gff3'", - "dependentRequired": ["braker_hints"] - }, - "braker_hints": { - "anyOf": [ - { - "type": "string", - "pattern": "^\\S+\\.gff(3)?(\\.gz)?$" - }, - { - "type": "string", - "maxLength": 0 - } - ], - "errorMessage": "BRAKER hints GFF/GFF3 file path cannot contain spaces and must have extension '.gff.gz', '.gff3.gz', '.gff' or '.gff3'", - "dependentRequired": ["braker_gff3"] + "format": "file-path", + "exists": true, + "pattern": "^\\S+\\.f(ast)?q\\.gz$", + "errorMessage": "FastQ file for reads 2 cannot contain spaces and must have extension '.fq.gz' or '.fastq.gz'" } }, - "required": ["tag", "fasta", "is_masked"] + "required": ["sample", "fastq_1"] } } diff --git a/assets/schema_liftoff.json b/assets/schema_liftoff.json deleted file mode 100644 index fc7046f..0000000 --- a/assets/schema_liftoff.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema", - "$id": "https://raw.githubusercontent.com/plantandfoodresearch/genepal/master/assets/schema_liftoff.json", - "title": "plantandfoodresearch/genepal pipeline - params.liftoff_annotations schema", - "description": "Schema for the file provided with params.liftoff_annotations", - "type": "array", - "items": { - "type": "object", - "properties": { - "fasta": { - "type": "string", - "pattern": "^\\S+\\.f(a|asta|as|sa|na)(\\.gz)?$", - "errorMessage": "FASTA file path cannot contain spaces and must have extension '.f(a|asta|as|sa|na)' or '.f(a|asta|as|sa|na).gz'", - "unique": true - }, - "gff3": { - "type": "string", - "pattern": "^\\S+\\.gff(3)?(\\.gz)?$", - "errorMessage": "Annotation GFF3 file path cannot contain spaces and must have extension '.gff.gz', '.gff3.gz', '.gff' or '.gff3'", - "unique": true - } - }, - "required": ["fasta", "gff3"] - } -} diff --git a/assets/schema_orthofinder.json b/assets/schema_orthofinder.json deleted file mode 100644 index 68486bd..0000000 --- a/assets/schema_orthofinder.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema", - "$id": "https://raw.githubusercontent.com/plantandfoodresearch/genepal/master/assets/schema_orthofinder.json", - "title": "plantandfoodresearch/genepal pipeline - params.orthofinder_annotations schema", - "description": "Schema for the file provided with params.orthofinder_annotations", - "type": "array", - "items": { - "type": "object", - "properties": { - "tag": { - "type": "string", - "pattern": "^\\w+$", - "errorMessage": "Annotation tags must be provided and can only contain alphanumeric characters including '_'", - "unique": true - }, - "fasta": { - "type": "string", - "pattern": "^\\S+\\.(fa|fas|pep|faa|fasta)(\\.gz)?$", - "errorMessage": "Proteins FASTA file path cannot contain spaces and must have extension '.(fa|fas|pep|faa|fasta)' or '.(fa|fas|pep|faa|fasta).gz'. Orthofinder does not allow 'fna' extension", - "unique": true - } - }, - "required": ["tag", "fasta"] - } -} diff --git a/assets/schema_rna.json b/assets/schema_rna.json deleted file mode 100644 index 89c646d..0000000 --- a/assets/schema_rna.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema", - "$id": "https://raw.githubusercontent.com/plantandfoodresearch/genepal/master/assets/schema_rna.json", - "title": "plantandfoodresearch/genepal pipeline - params.rna_evidence schema", - "description": "Schema for the file provided with params.rna_evidence", - "type": "array", - "items": { - "type": "object", - "properties": { - "sample": { - "type": "string", - "pattern": "^\\S+$", - "errorMessage": "Sample name must be provided and cannot contain spaces", - "meta": ["id"] - }, - "file_1": { - "type": "string", - "pattern": "^\\S+\\.(f(ast)?q\\.gz|bam)$", - "errorMessage": "FASTQ file for reads 1 or BAM file containing mapped reads must be provided, cannot contain spaces and must have extension '.fq.gz', '.fastq.gz' or '.bam'", - "unique": true - }, - "file_2": { - "errorMessage": "FASTQ file for reads 2 cannot contain spaces and must have extension '.fq.gz' or '.fastq.gz'", - "anyOf": [ - { - "type": "string", - "pattern": "^\\S+\\.f(ast)?q\\.gz$" - }, - { - "type": "string", - "maxLength": 0 - } - ], - "dependentRequired": ["file_1"], - "unique": true - }, - "target_assemblies": { - "type": "string", - "pattern": "^(\\w+;)*\\w+$", - "errorMessage": "One or more target assemblies must be specified by their tags from params.input sheet. Multiple tags should be separated by ';'", - "meta": ["target_assemblies"] - } - }, - "required": ["sample", "file_1", "target_assemblies"] - } -} diff --git a/assets/sendmail_template.txt b/assets/sendmail_template.txt new file mode 100644 index 0000000..402fcfb --- /dev/null +++ b/assets/sendmail_template.txt @@ -0,0 +1,53 @@ +To: $email +Subject: $subject +Mime-Version: 1.0 +Content-Type: multipart/related;boundary="nfcoremimeboundary" + +--nfcoremimeboundary +Content-Type: text/html; charset=utf-8 + +$email_html + +--nfcoremimeboundary +Content-Type: image/png;name="PlantandFoodResearch-genepal_logo.png" +Content-Transfer-Encoding: base64 +Content-ID: +Content-Disposition: inline; filename="PlantandFoodResearch-genepal_logo_light.png" + +<% out << new File("$projectDir/assets/PlantandFoodResearch-genepal_logo_light.png"). + bytes. + encodeBase64(). + toString(). + tokenize( '\n' )*. + toList()*. + collate( 76 )*. + collect { it.join() }. + flatten(). + join( '\n' ) %> + +<% +if (mqcFile){ +def mqcFileObj = new File("$mqcFile") +if (mqcFileObj.length() < mqcMaxSize){ +out << """ +--nfcoremimeboundary +Content-Type: text/html; name=\"multiqc_report\" +Content-Transfer-Encoding: base64 +Content-ID: +Content-Disposition: attachment; filename=\"${mqcFileObj.getName()}\" + +${mqcFileObj. + bytes. + encodeBase64(). + toString(). + tokenize( '\n' )*. + toList()*. + collate( 76 )*. + collect { it.join() }. + flatten(). + join( '\n' )} +""" +}} +%> + +--nfcoremimeboundary-- diff --git a/assets/slackreport.json b/assets/slackreport.json new file mode 100644 index 0000000..00aa237 --- /dev/null +++ b/assets/slackreport.json @@ -0,0 +1,34 @@ +{ + "attachments": [ + { + "fallback": "Plain-text summary of the attachment.", + "color": "<% if (success) { %>good<% } else { %>danger<%} %>", + "author_name": "PlantandFoodResearch/genepal ${version} - ${runName}", + "author_icon": "https://www.nextflow.io/docs/latest/_static/favicon.ico", + "text": "<% if (success) { %>Pipeline completed successfully!<% } else { %>Pipeline completed with errors<% } %>", + "fields": [ + { + "title": "Command used to launch the workflow", + "value": "```${commandLine}```", + "short": false + } + <% + if (!success) { %> + , + { + "title": "Full error message", + "value": "```${errorReport}```", + "short": false + }, + { + "title": "Pipeline configuration", + "value": "<% out << summary.collect{ k,v -> k == "hook_url" ? "_${k}_: (_hidden_)" : ( ( v.class.toString().contains('Path') || ( v.class.toString().contains('String') && v.contains('/') ) ) ? "_${k}_: `${v}`" : (v.class.toString().contains('DateTime') ? ("_${k}_: " + v.format(java.time.format.DateTimeFormatter.ofLocalizedDateTime(java.time.format.FormatStyle.MEDIUM))) : "_${k}_: ${v}") ) }.join(",\n") %>", + "short": false + } + <% } + %> + ], + "footer": "Completed at <% out << dateComplete.format(java.time.format.DateTimeFormatter.ofLocalizedDateTime(java.time.format.FormatStyle.MEDIUM)) %> (duration: ${duration})" + } + ] +} diff --git a/assets/tsebra-template.cfg b/assets/tsebra-template.cfg deleted file mode 100644 index fa06c50..0000000 --- a/assets/tsebra-template.cfg +++ /dev/null @@ -1,16 +0,0 @@ -# Weight for each hint source -# Values have to be >= 0 -P 1 -E 20 -C 1 -M 1 -# Required fraction of supported introns or supported start/stop-codons for a transcript -# Values have to be in [0,1] -intron_support PARAM_INTRON_SUPPORT -stasto_support 2 -# Allowed difference for each feature -# Values have to be in [0,1] -e_1 PARAM_E1 -e_2 PARAM_E2 -e_3 PARAM_E3 -e_4 PARAM_E4 diff --git a/cleanNXF.sh b/cleanNXF.sh deleted file mode 100755 index 8c64a3e..0000000 --- a/cleanNXF.sh +++ /dev/null @@ -1,11 +0,0 @@ -#!/usr/bin/env bash - -rm -rf .nextflow* -echo "Cleaned .nextflow..." -rm -rf .nextflow.pid -echo "Cleaned .nextflow.pid..." -for i in $(ls work | grep -v "conda"); -do - rm -rf "work/$i" -done -echo "Cleaned work..." diff --git a/conf/base.config b/conf/base.config index bfc2d88..f7e395a 100644 --- a/conf/base.config +++ b/conf/base.config @@ -1,88 +1,62 @@ +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + PlantandFoodResearch/genepal Nextflow base config file +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + A 'blank slate' config file, appropriate for general use on most high performance + compute environments. Assumes that all software is installed and available on + the PATH. Runs in `local` mode - all jobs will be run on the logged in environment. +---------------------------------------------------------------------------------------- +*/ + process { - cpus = { check_max( 1 * task.attempt, 'cpus' ) } - memory = { check_max( 6.GB * task.attempt, 'memory' ) } - time = { check_max( 4.h * task.attempt, 'time' ) } + // TODO nf-core: Check the defaults for all processes + cpus = { check_max( 1 * task.attempt, 'cpus' ) } + memory = { check_max( 6.GB * task.attempt, 'memory' ) } + time = { check_max( 4.h * task.attempt, 'time' ) } - errorStrategy = { task.exitStatus in [140,143,137,104,134,139] ? 'retry' : 'finish' } - maxRetries = 1 - maxErrors = '-1' + errorStrategy = { task.exitStatus in ((130..145) + 104) ? 'retry' : 'finish' } + maxRetries = 1 + maxErrors = '-1' + // Process-specific resource requirements + // NOTE - Please try and re-use the labels below as much as possible. + // These labels are used and recognised by default in DSL2 files hosted on nf-core/modules. + // If possible, it would be nice to keep the same label naming convention when + // adding in your local modules too. + // TODO nf-core: Customise requirements for specific processes. + // See https://www.nextflow.io/docs/latest/config.html#config-process-selectors withLabel:process_single { - cpus = { check_max( 1 , 'cpus' ) } - memory = { check_max( 6.GB * task.attempt, 'memory' ) } - time = { check_max( 4.h * task.attempt, 'time' ) } + cpus = { check_max( 1 , 'cpus' ) } + memory = { check_max( 6.GB * task.attempt, 'memory' ) } + time = { check_max( 4.h * task.attempt, 'time' ) } } withLabel:process_low { - cpus = { check_max( 2 * task.attempt, 'cpus' ) } - memory = { check_max( 12.GB * task.attempt, 'memory' ) } - time = { check_max( 4.h * task.attempt, 'time' ) } + cpus = { check_max( 2 * task.attempt, 'cpus' ) } + memory = { check_max( 12.GB * task.attempt, 'memory' ) } + time = { check_max( 4.h * task.attempt, 'time' ) } } withLabel:process_medium { - cpus = { check_max( 6 * task.attempt, 'cpus' ) } - memory = { check_max( 36.GB * task.attempt, 'memory' ) } - time = { check_max( 8.h * task.attempt, 'time' ) } + cpus = { check_max( 6 * task.attempt, 'cpus' ) } + memory = { check_max( 36.GB * task.attempt, 'memory' ) } + time = { check_max( 8.h * task.attempt, 'time' ) } } withLabel:process_high { - cpus = { check_max( 12 * task.attempt, 'cpus' ) } - memory = { check_max( 72.GB * task.attempt, 'memory' ) } - time = { check_max( 16.h * task.attempt, 'time' ) } + cpus = { check_max( 12 * task.attempt, 'cpus' ) } + memory = { check_max( 72.GB * task.attempt, 'memory' ) } + time = { check_max( 16.h * task.attempt, 'time' ) } } withLabel:process_long { - time = { check_max( 20.h * task.attempt, 'time' ) } + time = { check_max( 20.h * task.attempt, 'time' ) } } withLabel:process_high_memory { - memory = { check_max( 200.GB * task.attempt, 'memory' ) } - } - - withName:EGGNOGMAPPER { - time = { check_max( 1.day * task.attempt, 'time' ) } - } - withName:REPEATMASKER_REPEATMASKER { - time = { check_max( 2.days * task.attempt, 'time' ) } - } - withName:REPEATMODELER_REPEATMODELER { - time = { check_max( 5.days * task.attempt, 'time' ) } + memory = { check_max( 200.GB * task.attempt, 'memory' ) } } - withName:EDTA_EDTA { - time = { check_max( 7.days * task.attempt, 'time' ) } + withLabel:error_ignore { + errorStrategy = 'ignore' } - withName:BRAKER3 { - cpus = { check_max( 8 * task.attempt, 'cpus' ) } - time = { check_max( 7.days * task.attempt, 'time' ) } - } - withName:CUSTOM_DUMPSOFTWAREVERSIONS { - cache = false - } -} - -def check_max(obj, type) { - if (type == 'memory') { - try { - if (obj.compareTo(params.max_memory as nextflow.util.MemoryUnit) == 1) - return params.max_memory as nextflow.util.MemoryUnit - else - return obj - } catch (all) { - println " ### ERROR ### Max memory '${params.max_memory}' is not valid! Using default value: $obj" - return obj - } - } else if (type == 'time') { - try { - if (obj.compareTo(params.max_time as nextflow.util.Duration) == 1) - return params.max_time as nextflow.util.Duration - else - return obj - } catch (all) { - println " ### ERROR ### Max time '${params.max_time}' is not valid! Using default value: $obj" - return obj - } - } else if (type == 'cpus') { - try { - return Math.min( obj, params.max_cpus as int ) - } catch (all) { - println " ### ERROR ### Max cpus '${params.max_cpus}' is not valid! Using default value: $obj" - return obj - } + withLabel:error_retry { + errorStrategy = 'retry' + maxRetries = 2 } } diff --git a/conf/modules.config b/conf/modules.config index 1f9f08b..d203d2b 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -1,352 +1,34 @@ -process { // SUBWORKFLOW: PREPARE_ASSEMBLY - withName: '.*:PREPARE_ASSEMBLY:FASTA_EDTA_LAI:EDTA_EDTA' { - ext.args = [ - params.edta_is_sensitive ? "--sensitive 1" : "--sensitive 0", - "--anno 0", - "--force 1" - ].join(' ').trim() +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Config file for defining DSL2 per module options and publishing paths +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Available keys to override module options: + ext.args = Additional arguments appended to command in module. + ext.args2 = Second set of arguments appended to command in module (multi-tool modules). + ext.args3 = Third set of arguments appended to command in module (multi-tool modules). + ext.prefix = File name prefix for output files. +---------------------------------------------------------------------------------------- +*/ - publishDir = [ - path: { "${params.outdir}/edta" }, - mode: "copy", - pattern: '*.EDTA.TElib.fa', - enabled: params.save_annotated_te_lib - ] - } - - withName: '.*:PREPARE_ASSEMBLY:REPEATMODELER_REPEATMODELER' { - ext.args = '-LTRStruct' - - publishDir = [ - path: { "${params.outdir}/repeatmodeler" }, - mode: "copy", - pattern: '*.fa', - enabled: params.save_annotated_te_lib - ] - } - - withName: '.*:PREPARE_ASSEMBLY:REPEATMASKER_REPEATMASKER' { - ext.args = [ - "-no_is", - "-xsmall", - "-gff", - ].join(' ').trim() - - publishDir = [ - path: { "${params.outdir}/repeatmasker" }, - mode: "copy", - saveAs: { filename -> filename.equals("versions.yml") ? null : filename }, - enabled: params.repeatmasker_save_outputs - ] - } -} - -process { // SUBWORKFLOW: PREPROCESS_RNASEQ - if(!params.skip_fastqc) { - withName: '.*:PREPROCESS_RNASEQ:FASTQ_FASTQC_UMITOOLS_FASTP:FASTQC_RAW' { - ext.args = '--quiet' - } - - withName: '.*:PREPROCESS_RNASEQ:FASTQ_FASTQC_UMITOOLS_FASTP:FASTQC_TRIM' { - ext.args = '--quiet' - publishDir = [ - path: { "${params.outdir}/fastp/fastqc" }, - mode: "copy", - saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, - ] - } - } - - if(!params.skip_fastp) { - withName: '.*:PREPROCESS_RNASEQ:FASTQ_FASTQC_UMITOOLS_FASTP:FASTP' { - ext.args = params.extra_fastp_args ?: '' - publishDir = [ - [ - path: { "${params.outdir}/fastp/html" }, - mode: "copy", - pattern: "*.{html}" - ], - [ - path: { "${params.outdir}/fastp/json" }, - mode: "copy", - pattern: "*.{json}" - ], - [ - path: { "${params.outdir}/fastp/log" }, - mode: "copy", - pattern: "*.log" - ], - [ - path: { "${params.outdir}/fastp" }, - mode: "copy", - pattern: "*.fastq.gz", - enabled: params.save_trimmed - ] - ] - } - } - - if (params.remove_ribo_rna) { - withName: '.*:PREPROCESS_RNASEQ:SORTMERNA_INDEX' { - ext.args = '--index 1' - } - - withName: '.*:PREPROCESS_RNASEQ:SORTMERNA_READS' { - ext.args = '--index 0 --num_alignments 1 -v' - publishDir = [ - [ - path: { "${params.outdir}/sortmerna" }, - mode: "copy", - pattern: "*.log" - ], - [ - path: { "${params.outdir}/sortmerna" }, - mode: "copy", - pattern: "*.fastq.gz", - enabled: params.save_non_ribo_reads - ] - ] - } - } -} - -process { // SUBWORKFLOW: ALIGN_RNASEQ - withName: '.*:ALIGN_RNASEQ:STAR_ALIGN' { - ext.args = [ - "--outSAMstrandField intronMotif", - "--outSAMtype BAM SortedByCoordinate", - "--readFilesCommand gunzip -c", - "--alignIntronMax ${params.star_max_intron_length}", - params.star_align_extra_args ? params.star_align_extra_args.split("\\s(?=--)") : '' - ].flatten().unique(false).join(' ').trim() - ext.prefix = { "${meta.id}" } - publishDir = [ - path: { "${params.outdir}/star/alignment" }, - mode: "copy", - saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, - enabled: params.star_save_outputs - ] - } - - withName: '.*:ALIGN_RNASEQ:SAMTOOLS_CAT' { - publishDir = [ - path: { "${params.outdir}/star/cat_bam" }, - mode: "copy", - saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, - enabled: params.save_cat_bam - ] - } -} - -process { // SUBWORKFLOW: FASTA_BRAKER3 - withName: '.*:FASTA_BRAKER3:BRAKER3' { - ext.args = [ - "--gff3", - params.braker_extra_args ? params.braker_extra_args.split("\\s(?=--)") : '' - ].flatten().unique(false).join(' ').trim() - ext.prefix = { "${meta.id}" } - publishDir = [ - path: { "${params.outdir}/etc/braker/" }, - mode: "copy", - saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, - enabled: params.braker_save_outputs - ] - } -} - -process { // SUBWORKFLOW: FASTA_LIFTOFF - withName: '.*:FASTA_LIFTOFF:LIFTOFF' { - ext.args = [ - '-exclude_partial', - '-copies', - '-polish', - "-a $params.liftoff_coverage", - "-s $params.liftoff_identity" - ].join(' ').trim() - } - - withName: '.*:FASTA_LIFTOFF:GFFREAD_BEFORE_LIFTOFF' { - ext.args = '--no-pseudo --keep-genes' - } - - withName: '.*:FASTA_LIFTOFF:MERGE_LIFTOFF_ANNOTATIONS' { - ext.prefix = { "${meta.id}.merged.liftoffs" } - } - - withName: '.*:FASTA_LIFTOFF:AGAT_SPFILTERFEATUREFROMKILLLIST' { - ext.prefix = { "${meta.id}.invalid.orf.purged" } - } - - withName: '.*:FASTA_LIFTOFF:GFFREAD_AFTER_LIFTOFF' { - ext.prefix = { "${meta.id}.liftoff" } - ext.args = '--keep-genes' - } - - withName: '.*:FASTA_LIFTOFF:GFF_TSEBRA_SPFILTERFEATUREFROMKILLLIST:AGAT_CONVERTSPGFF2GTF' { - ext.args = '--gtf_version relax' - } - - withName: '.*:FASTA_LIFTOFF:GFF_TSEBRA_SPFILTERFEATUREFROMKILLLIST:KILL_TSEBRA_ISOFORMS' { - ext.prefix = { "${meta.id}.liftoff.1form" } - } -} - -process { // SUBWORKFLOW: PURGE_BRAKER_MODELS - - withName: '.*:PURGE_BRAKER_MODELS:GFF_TSEBRA_SPFILTERFEATUREFROMKILLLIST:AGAT_CONVERTSPGFF2GTF' { - ext.args = '--gtf_version relax' - } - - withName: '.*:PURGE_BRAKER_MODELS:GFF_TSEBRA_SPFILTERFEATUREFROMKILLLIST:KILL_TSEBRA_ISOFORMS' { - ext.prefix = { "${meta.id}.1form" } - } -} +process { -process { // SUBWORKFLOW: GFF_MERGE_CLEANUP - withName: '.*:GFF_MERGE_CLEANUP:AGAT_SPMERGEANNOTATIONS' { - ext.prefix = { "${meta.id}.liftoff.braker" } - } - - withName: '.*:GFF_MERGE_CLEANUP:GT_GFF3' { - ext.args = '-tidy -retainids -sort' - } -} - -process { // SUBWORKFLOW: GFF_EGGNOGMAPPER - withName: '.*:GFF_EGGNOGMAPPER:GFF2FASTA_FOR_EGGNOGMAPPER' { - ext.args = '-y' - } - - withName: '.*:GFF_EGGNOGMAPPER:EGGNOGMAPPER' { - ext.args = [ - "--evalue $params.eggnogmapper_evalue", - "--pident $params.eggnogmapper_pident", - params.eggnogmapper_tax_scope ? "--tax_scope $params.eggnogmapper_tax_scope" : '', - '--mp_start_method fork', - "--itype proteins", - '--go_evidence all' - ].join(' ').trim() - - publishDir = [ - path: { "${params.outdir}/annotations/$meta.id" }, - mode: "copy", - saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, - ] - } -} - -process { // SUBWORKFLOW: PURGE_NOHIT_MODELS - withName: '.*:PURGE_NOHIT_MODELS:AGAT_SPFILTERFEATUREFROMKILLLIST' { - ext.prefix = { "${meta.id}.nohits.purged" } - } -} - -process { // SUBWORKFLOW: GFF_STORE - withName: '.*:GFF_STORE:FINAL_GFF_CHECK' { - ext.args = '-tidy -retainids -sort' - - publishDir = [ - path: { "${params.outdir}/annotations/$meta.id" }, - mode: "copy", - saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, - ] - } - - withName: '.*:GFF_STORE:EXTRACT_PROTEINS' { - ext.args = '-y' - ext.prefix = { "${meta.id}.pep" } - - publishDir = [ - path: { "${params.outdir}/annotations/$meta.id" }, - mode: "copy", - saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, - ] - } -} - -process { // SUBWORKFLOW: FASTA_ORTHOFINDER - withName: '.*:FASTA_ORTHOFINDER:FASTA_GUNZIP:GUNZIP' { - ext.prefix = { "${meta.id}.pep" } - } - - withName: '.*:FASTA_ORTHOFINDER:ORTHOFINDER' { - publishDir = [ - path: { "${params.outdir}/orthofinder" }, - mode: "copy", - saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, - ] - } -} + publishDir = [ + path: { "${params.outdir}/${task.process.tokenize(':')[-1].tokenize('_')[0].toLowerCase()}" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] -process { // SUBWORKFLOW: FASTA_GXF_BUSCO_PLOT - withName: '.*:FASTA_GXF_BUSCO_PLOT:BUSCO_ASSEMBLY' { - ext.args = '--metaeuk' - publishDir = [ - path: { "${params.outdir}/busco/fasta" }, - mode: "copy", - pattern: 'short_summary.*.txt', - saveAs: { filename -> "short_summary.specific.${meta.id}.${lineage}.txt" } - ] + withName: FASTQC { + ext.args = '--quiet' } - withName: '.*:FASTA_GXF_BUSCO_PLOT:PLOT_ASSEMBLY' { - ext.prefix = 'busco_figure' + withName: 'MULTIQC' { + ext.args = { params.multiqc_title ? "--title \"$params.multiqc_title\"" : '' } publishDir = [ - path: { "${params.outdir}/busco/fasta" }, - mode: "copy", - saveAs: { filename -> filename.equals("versions.yml") ? null : filename } + path: { "${params.outdir}/multiqc" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] } - withName: '.*:FASTA_GXF_BUSCO_PLOT:EXTRACT_PROTEINS' { - ext.args = '-y' - } - - withName: '.*:FASTA_GXF_BUSCO_PLOT:BUSCO_ANNOTATION' { - ext.args = '--metaeuk' - publishDir = [ - path: { "${params.outdir}/busco/gff" }, - mode: "copy", - pattern: 'short_summary.*.txt', - saveAs: { filename -> "short_summary.specific.${meta.id}.${lineage}.txt" } - ] - } - - withName: '.*:FASTA_GXF_BUSCO_PLOT:PLOT_ANNOTATION' { - ext.prefix = 'busco_figure' - publishDir = [ - path: { "${params.outdir}/busco/gff" }, - mode: "copy", - saveAs: { filename -> filename.equals("versions.yml") ? null : filename } - ] - } -} - -process { // SUBWORKFLOW: GXF_FASTA_AGAT_SPADDINTRONS_SPEXTRACTSEQUENCES - withName: '.*:GXF_FASTA_AGAT_SPADDINTRONS_SPEXTRACTSEQUENCES:AGAT_SPEXTRACTSEQUENCES' { - ext.args = '-t intron' - } -} - -process { // Universal - withName: AGAT_SPFILTERFEATUREFROMKILLLIST { - ext.prefix = { "${meta.id}.purged" } - } - - withName: SAVE_MARKED_GFF3 { - publishDir = [ - path: { "${params.outdir}/etc/splicing_marked" }, - mode: "copy", - saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, - ] - } - - withName: CUSTOM_DUMPSOFTWAREVERSIONS { - publishDir = [ - path: "$params.outdir/pipeline_info", - pattern: "software_versions.yml", - mode: "copy", - enabled: true - ] - } } diff --git a/conf/test.config b/conf/test.config index 98293d9..2c4fabb 100644 --- a/conf/test.config +++ b/conf/test.config @@ -1,7 +1,28 @@ +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Nextflow config file for running minimal tests +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Defines input files and everything required to run a fast and simple pipeline test. + + Use as follows: + nextflow run PlantandFoodResearch/genepal -profile test, --outdir + +---------------------------------------------------------------------------------------- +*/ + params { - input = "${projectDir}/tests/minimal/assemblysheet.csv" - protein_evidence = 'https://raw.githubusercontent.com/Gaius-Augustus/BRAKER/f58479fe5bb13a9e51c3ca09cb9e137cab3b8471/example/proteins.fa' + config_profile_name = 'Test profile' + config_profile_description = 'Minimal test dataset to check pipeline function' + + // Limit resources so that this can run on GitHub Actions + max_cpus = 2 + max_memory = '6.GB' + max_time = '6.h' + + // Input data + // TODO nf-core: Specify the paths to your test data on nf-core/test-datasets + // TODO nf-core: Give any required params for the test so that command line flags are not needed + input = params.pipelines_testdata_base_path + 'viralrecon/samplesheet/samplesheet_test_illumina_amplicon.csv' - braker_extra_args = '--gm_max_intergenic 10000 --skipOptimize' // Added for faster test execution! Do not use with actual data! - busco_lineage_datasets = 'eudicots_odb10' + } diff --git a/conf/test_full.config b/conf/test_full.config new file mode 100644 index 0000000..1df9d55 --- /dev/null +++ b/conf/test_full.config @@ -0,0 +1,24 @@ +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Nextflow config file for running full-size tests +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Defines input files and everything required to run a full size pipeline test. + + Use as follows: + nextflow run PlantandFoodResearch/genepal -profile test_full, --outdir + +---------------------------------------------------------------------------------------- +*/ + +params { + config_profile_name = 'Full test profile' + config_profile_description = 'Full test dataset to check pipeline function' + + // Input data for full size test + // TODO nf-core: Specify the paths to your full test data ( on nf-core/test-datasets or directly in repositories, e.g. SRA) + // TODO nf-core: Give any required params for the test so that command line flags are not needed + input = params.pipelines_testdata_base_path + 'viralrecon/samplesheet/samplesheet_full_illumina_amplicon.csv' + + // Fasta references + fasta = params.pipelines_testdata_base_path + 'viralrecon/genome/NC_045512.2/GCF_009858895.2_ASM985889v3_genomic.200409.fna.gz' +} diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 0000000..5114ee0 --- /dev/null +++ b/docs/README.md @@ -0,0 +1,8 @@ +# PlantandFoodResearch/genepal: Documentation + +The PlantandFoodResearch/genepal documentation is split into the following pages: + +- [Usage](usage.md) + - An overview of how the pipeline works, how to run it and a description of all of the different command-line flags. +- [Output](output.md) + - An overview of the different results produced by the pipeline and how to interpret them. diff --git a/docs/images/mqc_fastqc_adapter.png b/docs/images/mqc_fastqc_adapter.png new file mode 100755 index 0000000000000000000000000000000000000000..361d0e47acfb424dea1f326590d1eb2f6dfa26b5 GIT binary patch literal 23458 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 literal 0 HcmV?d00001 diff --git a/docs/images/mqc_fastqc_quality.png b/docs/images/mqc_fastqc_quality.png new file mode 100755 index 0000000000000000000000000000000000000000..a4b89bf56ab2ba88cab87841916eb680a816deae GIT binary patch literal 55769 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�)v~C(0C)c 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 M)78&qol`;+0Fu7JivR!s literal 0 HcmV?d00001 diff --git a/docs/img/genepal.drawio b/docs/img/genepal.drawio deleted file mode 100644 index 38446e4..0000000 --- a/docs/img/genepal.drawio +++ /dev/null @@ -1,385 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/img/genepal.png b/docs/img/genepal.png deleted file mode 100644 index 679f214ab340f750ed6a4b3fd8c7710e541665df..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 334096 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

$iblrI_)s+ka`Wa*U@#qCO^(V6_P%}l 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

xksV|DXl#5b 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

I$FJs;sXa;|IuhV$z2Dfzq2X@vB?%?RLL~> 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�_ls!nm3cHDR8wFBPx2_gj#xaJ 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 RF$({*we&QTR%}1^e*oE@xsCt; diff --git a/docs/output.md b/docs/output.md new file mode 100644 index 0000000..0e53212 --- /dev/null +++ b/docs/output.md @@ -0,0 +1,71 @@ +# PlantandFoodResearch/genepal: Output + +## Introduction + +This document describes the output produced by the pipeline. Most of the plots are taken from the MultiQC report, which summarises results at the end of the pipeline. + +The directories listed below will be created in the results directory after the pipeline has finished. All paths are relative to the top-level results directory. + + + +## Pipeline overview + +The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes data using the following steps: + +- [FastQC](#fastqc) - Raw read QC +- [MultiQC](#multiqc) - Aggregate report describing results and QC from the whole pipeline +- [Pipeline information](#pipeline-information) - Report metrics generated during the workflow execution + +### FastQC + +

+Output files + +- `fastqc/` + - `*_fastqc.html`: FastQC report containing quality metrics. + - `*_fastqc.zip`: Zip archive containing the FastQC report, tab-delimited data file and plot images. + +
+ +[FastQC](http://www.bioinformatics.babraham.ac.uk/projects/fastqc/) gives general quality metrics about your sequenced reads. It provides information about the quality score distribution across your reads, per base sequence content (%A/T/G/C), adapter contamination and overrepresented sequences. For further reading and documentation see the [FastQC help pages](http://www.bioinformatics.babraham.ac.uk/projects/fastqc/Help/). + +![MultiQC - FastQC sequence counts plot](images/mqc_fastqc_counts.png) + +![MultiQC - FastQC mean quality scores plot](images/mqc_fastqc_quality.png) + +![MultiQC - FastQC adapter content plot](images/mqc_fastqc_adapter.png) + +:::note +The FastQC plots displayed in the MultiQC report shows _untrimmed_ reads. They may contain adapter sequence and potentially regions with low quality. +::: + +### MultiQC + +
+Output files + +- `multiqc/` + - `multiqc_report.html`: a standalone HTML file that can be viewed in your web browser. + - `multiqc_data/`: directory containing parsed statistics from the different tools used in the pipeline. + - `multiqc_plots/`: directory containing static images from the report in various formats. + +
+ +[MultiQC](http://multiqc.info) is a visualization tool that generates a single HTML report summarising all samples in your project. Most of the pipeline QC results are visualised in the report and further statistics are available in the report data directory. + +Results generated by MultiQC collate pipeline QC from supported tools e.g. FastQC. The pipeline has special steps which also allow the software versions to be reported in the MultiQC output for future traceability. For more information about how to use MultiQC reports, see . + +### Pipeline information + +
+Output files + +- `pipeline_info/` + - Reports generated by Nextflow: `execution_report.html`, `execution_timeline.html`, `execution_trace.txt` and `pipeline_dag.dot`/`pipeline_dag.svg`. + - Reports generated by the pipeline: `pipeline_report.html`, `pipeline_report.txt` and `software_versions.yml`. The `pipeline_report*` files will only be present if the `--email` / `--email_on_fail` parameter's are used when running the pipeline. + - Reformatted samplesheet files used as input to the pipeline: `samplesheet.valid.csv`. + - Parameters used by the pipeline run: `params.json`. + +
+ +[Nextflow](https://www.nextflow.io/docs/latest/tracing.html) provides excellent functionality for generating various reports relevant to the running and execution of the pipeline. This will allow you to troubleshoot errors with the running of the pipeline, and also provide you with other information such as launch commands, run times and resource usage. diff --git a/docs/parameters.md b/docs/parameters.md deleted file mode 100644 index a4638c5..0000000 --- a/docs/parameters.md +++ /dev/null @@ -1,86 +0,0 @@ -# plantandfoodresearch/genepal pipeline parameters - -A NextFlow pipeline for single genome and pan-genome annotation - -## Input/output options - -| Parameter | Description | Type | Default | Required | Hidden | -| ------------------------- | -------------------------------------------------------------------------------------------------------- | --------- | --------- | -------- | ------ | -| `input` | Target assemblies listed in a CSV sheet | `string` | | True | | -| `protein_evidence` | Protein evidence provided as a fasta file or multiple fasta files listed in a plain txt file | `string` | | True | | -| `eggnogmapper_db_dir` | Eggnogmapper database directory | `string` | | | | -| `eggnogmapper_tax_scope` | Eggnogmapper taxonomy scopre. Eukaryota: 2759, Viridiplantae: 33090, Archaea: 2157, Bacteria: 2, root: 1 | `integer` | 1 | | | -| `rna_evidence` | FASTQ/BAM samples listed in a CSV sheet | `string` | | | | -| `liftoff_annotations` | Reference annotations listed in a CSV sheet | `string` | | | | -| `orthofinder_annotations` | Additional annotations for orthology listed in a CSV sheet | `string` | | | | -| `outdir` | The output directory where the results will be saved | `string` | ./results | True | | - -## Repeat annotation options - -| Parameter | Description | Type | Default | Required | Hidden | -| --------------------------- | ------------------------------------------ | --------- | ------------- | -------- | ------ | -| `repeat_annotator` | 'edta' or 'repeatmodeler' | `string` | repeatmodeler | | | -| `save_annotated_te_lib` | Save annotated TE library or not? | `boolean` | | | | -| `edta_is_sensitive` | Use '--sensitive 1' flag with EDTA or not? | `boolean` | | | | -| `repeatmasker_save_outputs` | Save the repeat-masked genome or not? | `boolean` | | | | - -## RNASeq pre-processing options - -| Parameter | Description | Type | Default | Required | Hidden | -| ------------------------ | ------------------------------------------------------------------ | --------- | ----------------------------------------- | -------- | ------ | -| `skip_fastqc` | Skip FASTQC or not? | `boolean` | | | | -| `skip_fastp` | Skip trimming by FASTQP or not? | `boolean` | | | | -| `min_trimmed_reads` | Exclude a sample if its reads after trimming are below this number | `integer` | 10000 | | | -| `extra_fastp_args` | Extra FASTP arguments | `string` | | | | -| `save_trimmed` | Save FASTQ files after trimming or not? | `boolean` | | | | -| `remove_ribo_rna` | Remove Ribosomal RNA or not? | `boolean` | | | | -| `save_non_ribo_reads` | Save FASTQ files after Ribosomal RNA removal or not? | `boolean` | | | | -| `ribo_database_manifest` | Ribosomal RNA fastas listed in a text sheet | `string` | ${projectDir}/assets/rrna-db-defaults.txt | | | - -## RNAseq alignment options - -| Parameter | Description | Type | Default | Required | Hidden | -| ------------------------ | ------------------------------------------------- | --------- | ------- | -------- | ------ | -| `star_max_intron_length` | Maximum intron length for STAR alignment | `integer` | 16000 | | | -| `star_align_extra_args` | EXTRA arguments for STAR | `string` | | | | -| `star_save_outputs` | Save BAM files from STAR or not? | `boolean` | | | | -| `save_cat_bam` | SAVE a concatenated BAM file per assembly or not? | `boolean` | | | | - -## Annotation options - -| Parameter | Description | Type | Default | Required | Hidden | -| ----------------------------- | --------------------------------------------------------------------------------- | --------- | ------- | -------- | ------ | -| `braker_extra_args` | Extra arguments for BRAKER | `string` | | | | -| `braker_save_outputs` | Save BRAKER files | `boolean` | | | | -| `liftoff_coverage` | Liftoff coverage parameter | `number` | 0.9 | | | -| `liftoff_identity` | Liftoff identity parameter | `number` | 0.9 | | | -| `allow_isoforms` | Allow multiple isoforms for gene models | `boolean` | True | | | -| `enforce_full_intron_support` | Require every model to have external evidence for all its introns | `boolean` | True | | | -| `filter_liftoff_by_hints` | Use BRAKER hints to filter Liftoff models | `boolean` | True | | | -| `eggnogmapper_evalue` | Only report alignments below or equal the e-value threshold | `number` | 1e-05 | | | -| `eggnogmapper_pident` | Only report alignments above or equal to the given percentage of identity (0-100) | `integer` | 35 | | | -| `eggnogmapper_purge_nohits` | Purge transcripts which do not have a hit against eggnog | `boolean` | | | | - -## Evaluation options - -| Parameter | Description | Type | Default | Required | Hidden | -| ------------------------ | --------------------------------------------------------------------------- | --------- | --------------- | -------- | ------ | -| `busco_skip` | Skip evaluation by BUSCO | `boolean` | | | | -| `busco_lineage_datasets` | BUSCO lineages as a space-separated list: 'fungi_odb10 microsporidia_odb10' | `string` | eukaryota_odb10 | | | - -## Max job request options - -Set the top limit for requested resources for any single job. - -| Parameter | Description | Type | Default | Required | Hidden | -| ------------ | ------------------------------------------------------------------ | --------- | ------- | -------- | ------ | -| `max_cpus` | Maximum number of CPUs that can be requested for any single job. | `integer` | 12 | | True | -| `max_memory` | Maximum amount of memory that can be requested for any single job. | `string` | 72.GB | | True | -| `max_time` | Maximum amount of time that can be requested for any single job. | `string` | 7.day | | True | - -## Infrastructure options - -| Parameter | Description | Type | Default | Required | Hidden | -| ------------------------------ | ----------- | --------- | ------- | -------- | ------ | -| `validationSkipDuplicateCheck` | | `boolean` | True | | True | -| `validationS3PathCheck` | | `boolean` | True | | True | diff --git a/docs/usage.md b/docs/usage.md new file mode 100644 index 0000000..03d9ed6 --- /dev/null +++ b/docs/usage.md @@ -0,0 +1,224 @@ +# PlantandFoodResearch/genepal: Usage + +> _Documentation of pipeline parameters is generated automatically from the pipeline schema and can no longer be found in markdown files._ + +## Introduction + + + +## Samplesheet input + +You will need to create a samplesheet with information about the samples you would like to analyse before running the pipeline. Use this parameter to specify its location. It has to be a comma-separated file with 3 columns, and a header row as shown in the examples below. + +```bash +--input '[path to samplesheet file]' +``` + +### Multiple runs of the same sample + +The `sample` identifiers have to be the same when you have re-sequenced the same sample more than once e.g. to increase sequencing depth. The pipeline will concatenate the raw reads before performing any downstream analysis. Below is an example for the same sample sequenced across 3 lanes: + +```csv title="samplesheet.csv" +sample,fastq_1,fastq_2 +CONTROL_REP1,AEG588A1_S1_L002_R1_001.fastq.gz,AEG588A1_S1_L002_R2_001.fastq.gz +CONTROL_REP1,AEG588A1_S1_L003_R1_001.fastq.gz,AEG588A1_S1_L003_R2_001.fastq.gz +CONTROL_REP1,AEG588A1_S1_L004_R1_001.fastq.gz,AEG588A1_S1_L004_R2_001.fastq.gz +``` + +### Full samplesheet + +The pipeline will auto-detect whether a sample is single- or paired-end using the information provided in the samplesheet. The samplesheet can have as many columns as you desire, however, there is a strict requirement for the first 3 columns to match those defined in the table below. + +A final samplesheet file consisting of both single- and paired-end data may look something like the one below. This is for 6 samples, where `TREATMENT_REP3` has been sequenced twice. + +```csv title="samplesheet.csv" +sample,fastq_1,fastq_2 +CONTROL_REP1,AEG588A1_S1_L002_R1_001.fastq.gz,AEG588A1_S1_L002_R2_001.fastq.gz +CONTROL_REP2,AEG588A2_S2_L002_R1_001.fastq.gz,AEG588A2_S2_L002_R2_001.fastq.gz +CONTROL_REP3,AEG588A3_S3_L002_R1_001.fastq.gz,AEG588A3_S3_L002_R2_001.fastq.gz +TREATMENT_REP1,AEG588A4_S4_L003_R1_001.fastq.gz, +TREATMENT_REP2,AEG588A5_S5_L003_R1_001.fastq.gz, +TREATMENT_REP3,AEG588A6_S6_L003_R1_001.fastq.gz, +TREATMENT_REP3,AEG588A6_S6_L004_R1_001.fastq.gz, +``` + +| Column | Description | +| --------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `sample` | Custom sample name. This entry will be identical for multiple sequencing libraries/runs from the same sample. Spaces in sample names are automatically converted to underscores (`_`). | +| `fastq_1` | Full path to FastQ file for Illumina short reads 1. File has to be gzipped and have the extension ".fastq.gz" or ".fq.gz". | +| `fastq_2` | Full path to FastQ file for Illumina short reads 2. File has to be gzipped and have the extension ".fastq.gz" or ".fq.gz". | + +An [example samplesheet](../assets/samplesheet.csv) has been provided with the pipeline. + +## Running the pipeline + +The typical command for running the pipeline is as follows: + +```bash +nextflow run PlantandFoodResearch/genepal --input ./samplesheet.csv --outdir ./results --genome GRCh37 -profile docker +``` + +This will launch the pipeline with the `docker` configuration profile. See below for more information about profiles. + +Note that the pipeline will create the following files in your working directory: + +```bash +work # Directory containing the nextflow working files + # Finished results in specified location (defined with --outdir) +.nextflow_log # Log file from Nextflow +# Other nextflow hidden files, eg. history of pipeline runs and old logs. +``` + +If you wish to repeatedly use the same parameters for multiple runs, rather than specifying each flag in the command, you can specify these in a params file. + +Pipeline settings can be provided in a `yaml` or `json` file via `-params-file `. + +:::warning +Do not use `-c ` to specify parameters as this will result in errors. Custom config files specified with `-c` must only be used for [tuning process resource specifications](https://nf-co.re/docs/usage/configuration#tuning-workflow-resources), other infrastructural tweaks (such as output directories), or module arguments (args). +::: + +The above pipeline run specified with a params file in yaml format: + +```bash +nextflow run PlantandFoodResearch/genepal -profile docker -params-file params.yaml +``` + +with `params.yaml` containing: + +```yaml +input: './samplesheet.csv' +outdir: './results/' +genome: 'GRCh37' +<...> +``` + +You can also generate such `YAML`/`JSON` files via [nf-core/launch](https://nf-co.re/launch). + +### Updating the pipeline + +When you run the above command, Nextflow automatically pulls the pipeline code from GitHub and stores it as a cached version. When running the pipeline after this, it will always use the cached version if available - even if the pipeline has been updated since. To make sure that you're running the latest version of the pipeline, make sure that you regularly update the cached version of the pipeline: + +```bash +nextflow pull PlantandFoodResearch/genepal +``` + +### Reproducibility + +It is a good idea to specify a pipeline version when running the pipeline on your data. This ensures that a specific version of the pipeline code and software are used when you run your pipeline. If you keep using the same tag, you'll be running the same version of the pipeline, even if there have been changes to the code since. + +First, go to the [PlantandFoodResearch/genepal releases page](https://github.com/PlantandFoodResearch/genepal/releases) and find the latest pipeline version - numeric only (eg. `1.3.1`). Then specify this when running the pipeline with `-r` (one hyphen) - eg. `-r 1.3.1`. Of course, you can switch to another version by changing the number after the `-r` flag. + +This version number will be logged in reports when you run the pipeline, so that you'll know what you used when you look back in the future. For example, at the bottom of the MultiQC reports. + +To further assist in reproducbility, you can use share and re-use [parameter files](#running-the-pipeline) to repeat pipeline runs with the same settings without having to write out a command with every single parameter. + +:::tip +If you wish to share such profile (such as upload as supplementary material for academic publications), make sure to NOT include cluster specific paths to files, nor institutional specific profiles. +::: + +## Core Nextflow arguments + +:::note +These options are part of Nextflow and use a _single_ hyphen (pipeline parameters use a double-hyphen). +::: + +### `-profile` + +Use this parameter to choose a configuration profile. Profiles can give configuration presets for different compute environments. + +Several generic profiles are bundled with the pipeline which instruct the pipeline to use software packaged using different methods (Docker, Singularity, Podman, Shifter, Charliecloud, Apptainer, Conda) - see below. + +:::info +We highly recommend the use of Docker or Singularity containers for full pipeline reproducibility, however when this is not possible, Conda is also supported. +::: + +The pipeline also dynamically loads configurations from [https://github.com/nf-core/configs](https://github.com/nf-core/configs) when it runs, making multiple config profiles for various institutional clusters available at run time. For more information and to see if your system is available in these configs please see the [nf-core/configs documentation](https://github.com/nf-core/configs#documentation). + +Note that multiple profiles can be loaded, for example: `-profile test,docker` - the order of arguments is important! +They are loaded in sequence, so later profiles can overwrite earlier profiles. + +If `-profile` is not specified, the pipeline will run locally and expect all software to be installed and available on the `PATH`. This is _not_ recommended, since it can lead to different results on different machines dependent on the computer enviroment. + +- `test` + - A profile with a complete configuration for automated testing + - Includes links to test data so needs no other parameters +- `docker` + - A generic configuration profile to be used with [Docker](https://docker.com/) +- `singularity` + - A generic configuration profile to be used with [Singularity](https://sylabs.io/docs/) +- `podman` + - A generic configuration profile to be used with [Podman](https://podman.io/) +- `shifter` + - A generic configuration profile to be used with [Shifter](https://nersc.gitlab.io/development/shifter/how-to-use/) +- `charliecloud` + - A generic configuration profile to be used with [Charliecloud](https://hpc.github.io/charliecloud/) +- `apptainer` + - A generic configuration profile to be used with [Apptainer](https://apptainer.org/) +- `wave` + - A generic configuration profile to enable [Wave](https://seqera.io/wave/) containers. Use together with one of the above (requires Nextflow ` 24.03.0-edge` or later). +- `conda` + - A generic configuration profile to be used with [Conda](https://conda.io/docs/). Please only use Conda as a last resort i.e. when it's not possible to run the pipeline with Docker, Singularity, Podman, Shifter, Charliecloud, or Apptainer. + +### `-resume` + +Specify this when restarting a pipeline. Nextflow will use cached results from any pipeline steps where the inputs are the same, continuing from where it got to previously. For input to be considered the same, not only the names must be identical but the files' contents as well. For more info about this parameter, see [this blog post](https://www.nextflow.io/blog/2019/demystifying-nextflow-resume.html). + +You can also supply a run name to resume a specific run: `-resume [run-name]`. Use the `nextflow log` command to show previous run names. + +### `-c` + +Specify the path to a specific config file (this is a core Nextflow command). See the [nf-core website documentation](https://nf-co.re/usage/configuration) for more information. + +## Custom configuration + +### Resource requests + +Whilst the default requirements set within the pipeline will hopefully work for most people and with most input data, you may find that you want to customise the compute resources that the pipeline requests. Each step in the pipeline has a default set of requirements for number of CPUs, memory and time. For most of the steps in the pipeline, if the job exits with any of the error codes specified [here](https://github.com/nf-core/rnaseq/blob/4c27ef5610c87db00c3c5a3eed10b1d161abf575/conf/base.config#L18) it will automatically be resubmitted with higher requests (2 x original, then 3 x original). If it still fails after the third attempt then the pipeline execution is stopped. + +To change the resource requests, please see the [max resources](https://nf-co.re/docs/usage/configuration#max-resources) and [tuning workflow resources](https://nf-co.re/docs/usage/configuration#tuning-workflow-resources) section of the nf-core website. + +### Custom Containers + +In some cases you may wish to change which container or conda environment a step of the pipeline uses for a particular tool. By default nf-core pipelines use containers and software from the [biocontainers](https://biocontainers.pro/) or [bioconda](https://bioconda.github.io/) projects. However in some cases the pipeline specified version maybe out of date. + +To use a different container from the default container or conda environment specified in a pipeline, please see the [updating tool versions](https://nf-co.re/docs/usage/configuration#updating-tool-versions) section of the nf-core website. + +### Custom Tool Arguments + +A pipeline might not always support every possible argument or option of a particular tool used in pipeline. Fortunately, nf-core pipelines provide some freedom to users to insert additional parameters that the pipeline does not include by default. + +To learn how to provide additional arguments to a particular tool of the pipeline, please see the [customising tool arguments](https://nf-co.re/docs/usage/configuration#customising-tool-arguments) section of the nf-core website. + +### nf-core/configs + +In most cases, you will only need to create a custom config as a one-off but if you and others within your organisation are likely to be running nf-core pipelines regularly and need to use the same settings regularly it may be a good idea to request that your custom config file is uploaded to the `nf-core/configs` git repository. Before you do this please can you test that the config file works with your pipeline of choice using the `-c` parameter. You can then create a pull request to the `nf-core/configs` repository with the addition of your config file, associated documentation file (see examples in [`nf-core/configs/docs`](https://github.com/nf-core/configs/tree/master/docs)), and amending [`nfcore_custom.config`](https://github.com/nf-core/configs/blob/master/nfcore_custom.config) to include your custom profile. + +See the main [Nextflow documentation](https://www.nextflow.io/docs/latest/config.html) for more information about creating your own configuration files. + +If you have any questions or issues please send us a message on [Slack](https://nf-co.re/join/slack) on the [`#configs` channel](https://nfcore.slack.com/channels/configs). + +## Azure Resource Requests + +To be used with the `azurebatch` profile by specifying the `-profile azurebatch`. +We recommend providing a compute `params.vm_type` of `Standard_D16_v3` VMs by default but these options can be changed if required. + +Note that the choice of VM size depends on your quota and the overall workload during the analysis. +For a thorough list, please refer the [Azure Sizes for virtual machines in Azure](https://docs.microsoft.com/en-us/azure/virtual-machines/sizes). + +## Running in the background + +Nextflow handles job submissions and supervises the running jobs. The Nextflow process must run until the pipeline is finished. + +The Nextflow `-bg` flag launches Nextflow in the background, detached from your terminal so that the workflow does not stop if you log out of your session. The logs are saved to a file. + +Alternatively, you can use `screen` / `tmux` or similar tool to create a detached session which you can log back into at a later time. +Some HPC setups also allow you to run nextflow within a cluster job submitted your job scheduler (from where it submits more jobs). + +## Nextflow memory requirements + +In some cases, the Nextflow Java virtual machines can start to request a large amount of memory. +We recommend adding the following line to your environment to limit this (typically in `~/.bashrc` or `~./bash_profile`): + +```bash +NXF_OPTS='-Xms1g -Xmx4g' +``` diff --git a/local_genepal b/local_genepal deleted file mode 100755 index 6f287b1..0000000 --- a/local_genepal +++ /dev/null @@ -1,23 +0,0 @@ -#!/usr/bin/env bash - -NO_FORMAT="\033[0m" -C_RED="\033[38;5;9m" -F_BOLD="\033[1m" - -[[ $1 == '-stub' ]] \ - && stub='-stub' \ - || stub='' - -[[ $1 == '-stub' ]] \ - && echo 'Executing with -stub' \ - || echo -e "${C_RED}${F_BOLD}Executing without -stub${NO_FORMAT}" - -nextflow run \ - main.nf \ - -profile docker,test \ - -resume \ - $stub \ - --max_cpus 8 \ - --max_memory '32.GB' \ - --eggnogmapper_tax_scope 33090 \ - --eggnogmapper_db_dir ../dbs/emapperdb/5.0.2 diff --git a/main.nf b/main.nf old mode 100755 new mode 100644 index 5e4d042..c075551 --- a/main.nf +++ b/main.nf @@ -1,17 +1,97 @@ #!/usr/bin/env nextflow +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + PlantandFoodResearch/genepal +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Github : https://github.com/PlantandFoodResearch/genepal +---------------------------------------------------------------------------------------- +*/ -nextflow.enable.dsl=2 +nextflow.enable.dsl = 2 -include { validateParameters } from 'plugin/nf-validation' +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + IMPORT FUNCTIONS / MODULES / SUBWORKFLOWS / WORKFLOWS +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +*/ -validateParameters() +include { GENEPAL } from './workflows/genepal' +include { PIPELINE_INITIALISATION } from './subworkflows/local/utils_nfcore_genepal_pipeline' +include { PIPELINE_COMPLETION } from './subworkflows/local/utils_nfcore_genepal_pipeline' -include { GENEPAL } from './workflows/genepal.nf' +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + NAMED WORKFLOWS FOR PIPELINE +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +*/ + +// +// WORKFLOW: Run main analysis pipeline depending on type of input +// +workflow PLANTANDFOODRESEARCH_GENEPAL { + + take: + samplesheet // channel: samplesheet read in from --input + + main: + + // + // WORKFLOW: Run pipeline + // + GENEPAL ( + samplesheet + ) + + emit: + multiqc_report = GENEPAL.out.multiqc_report // channel: /path/to/multiqc_report.html -workflow { - PFR_GENEPAL() } +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + RUN MAIN WORKFLOW +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +*/ -workflow PFR_GENEPAL { - GENEPAL() +workflow { + + main: + + // + // SUBWORKFLOW: Run initialisation tasks + // + PIPELINE_INITIALISATION ( + params.version, + params.help, + params.validate_params, + params.monochrome_logs, + args, + params.outdir, + params.input + ) + + // + // WORKFLOW: Run main workflow + // + PLANTANDFOODRESEARCH_GENEPAL ( + PIPELINE_INITIALISATION.out.samplesheet + ) + + // + // SUBWORKFLOW: Run completion tasks + // + PIPELINE_COMPLETION ( + params.email, + params.email_on_fail, + params.plaintext_email, + params.outdir, + params.monochrome_logs, + params.hook_url, + PLANTANDFOODRESEARCH_GENEPAL.out.multiqc_report + ) } + +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + THE END +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +*/ diff --git a/modules.json b/modules.json index 9736949..6f8944f 100644 --- a/modules.json +++ b/modules.json @@ -2,222 +2,36 @@ "name": "PlantandFoodResearch/genepal", "homePage": "https://github.com/PlantandFoodResearch/genepal", "repos": { - "https://github.com/GallVp/nxf-components.git": { - "modules": { - "gallvp": { - "agat/spaddintrons": { - "branch": "main", - "git_sha": "7bf6fbca23edc94490ffa6709f52b2f71c6fb130", - "installed_by": ["gxf_fasta_agat_spaddintrons_spextractsequences"] - }, - "agat/spextractsequences": { - "branch": "main", - "git_sha": "7bf6fbca23edc94490ffa6709f52b2f71c6fb130", - "installed_by": ["gxf_fasta_agat_spaddintrons_spextractsequences"] - }, - "braker3": { - "branch": "main", - "git_sha": "be636e1e7d50b12ee1f50ed0bb9b21b0fade7cfd", - "installed_by": ["modules"] - }, - "busco/busco": { - "branch": "main", - "git_sha": "ab92c438688c1f4a3753b65914bfd2e6319cebb2", - "installed_by": ["fasta_gxf_busco_plot"] - }, - "busco/generateplot": { - "branch": "main", - "git_sha": "ab92c438688c1f4a3753b65914bfd2e6319cebb2", - "installed_by": ["fasta_gxf_busco_plot"] - }, - "custom/restoregffids": { - "branch": "main", - "git_sha": "490f8ab54c632d84f99edd6f208305ac5e283ab3", - "installed_by": ["fasta_edta_lai"] - }, - "custom/shortenfastaids": { - "branch": "main", - "git_sha": "490f8ab54c632d84f99edd6f208305ac5e283ab3", - "installed_by": ["fasta_edta_lai"] - }, - "edta/edta": { - "branch": "main", - "git_sha": "7bf6fbca23edc94490ffa6709f52b2f71c6fb130", - "installed_by": ["fasta_edta_lai"] - }, - "gffread": { - "branch": "main", - "git_sha": "c04bf39d67027e044a6eaed0b7b0439fd8866fc7", - "installed_by": ["fasta_gxf_busco_plot"] - }, - "ltrretriever/lai": { - "branch": "main", - "git_sha": "490f8ab54c632d84f99edd6f208305ac5e283ab3", - "installed_by": ["fasta_edta_lai"] - }, - "repeatmasker/repeatmasker": { - "branch": "main", - "git_sha": "07c6fda11aff03d2d7fc68224e7fd96866fc6a8f", - "installed_by": ["modules"] - } - } - }, - "subworkflows": { - "gallvp": { - "fasta_edta_lai": { - "branch": "main", - "git_sha": "7bf6fbca23edc94490ffa6709f52b2f71c6fb130", - "installed_by": ["subworkflows"] - }, - "fasta_gxf_busco_plot": { - "branch": "main", - "git_sha": "7bf6fbca23edc94490ffa6709f52b2f71c6fb130", - "installed_by": ["subworkflows"] - }, - "gxf_fasta_agat_spaddintrons_spextractsequences": { - "branch": "main", - "git_sha": "7bf6fbca23edc94490ffa6709f52b2f71c6fb130", - "installed_by": ["subworkflows"] - } - } - } - }, "https://github.com/nf-core/modules.git": { "modules": { "nf-core": { - "agat/convertspgff2gtf": { - "branch": "master", - "git_sha": "0a0b723d114e502207072603479b635dfbc2bf59", - "installed_by": ["modules"] - }, - "agat/convertspgxf2gxf": { - "branch": "master", - "git_sha": "0a0b723d114e502207072603479b635dfbc2bf59", - "installed_by": ["modules"] - }, - "agat/spfilterfeaturefromkilllist": { - "branch": "master", - "git_sha": "d1535889747781d919bc81da2344952f4bfa2be4", - "installed_by": ["modules"] - }, - "agat/spmergeannotations": { - "branch": "master", - "git_sha": "8e30f5d09155b45ddafc2d1357fc5f447f1aaa03", - "installed_by": ["modules"] - }, - "cat/cat": { - "branch": "master", - "git_sha": "5bb8ca085e17549e185e1823495ab8d20727a805", - "installed_by": ["modules"] - }, - "cat/fastq": { - "branch": "master", - "git_sha": "1ceaa8ba4d0fd886dbca0e545815d905b7407de7", - "installed_by": ["modules"] - }, - "custom/dumpsoftwareversions": { - "branch": "master", - "git_sha": "82024cf6325d2ee194e7f056d841ecad2f6856e9", - "installed_by": ["modules"] - }, - "eggnogmapper": { - "branch": "master", - "git_sha": "b34fb117e397e72a070cde8adf21b758670c90f5", - "installed_by": ["modules"] - }, - "fastavalidator": { - "branch": "master", - "git_sha": "90dad5491658049282ceb287a3d7732c1ce39837", - "installed_by": ["modules"] - }, - "fastp": { - "branch": "master", - "git_sha": "1ceaa8ba4d0fd886dbca0e545815d905b7407de7", - "installed_by": ["fastq_fastqc_umitools_fastp"] - }, "fastqc": { "branch": "master", - "git_sha": "46eca555142d6e597729fcb682adcc791796f514", - "installed_by": ["fastq_fastqc_umitools_fastp", "modules"] - }, - "gffcompare": { - "branch": "master", - "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", - "installed_by": ["modules"] - }, - "gffread": { - "branch": "master", - "git_sha": "6c996d7fbe0816dcbb68ce587ad5f873313682a1", - "installed_by": ["modules"] - }, - "gt/gff3": { - "branch": "master", - "git_sha": "9a8bba5910982ae637dedb8664e3121db77e173f", - "installed_by": ["modules"] - }, - "gunzip": { - "branch": "master", - "git_sha": "4e5f4687318f24ba944a13609d3ea6ebd890737d", - "installed_by": ["modules"], - "patch": "modules/nf-core/gunzip/gunzip.diff" - }, - "liftoff": { - "branch": "master", - "git_sha": "b34fb117e397e72a070cde8adf21b758670c90f5", - "installed_by": ["modules"] - }, - "orthofinder": { - "branch": "master", - "git_sha": "07f10f34d88408af7c71f13227d11f23b7f53b50", - "installed_by": ["modules"] - }, - "repeatmodeler/builddatabase": { - "branch": "master", - "git_sha": "1cbb5551b917aa423e414dcd69898d01520a309d", - "installed_by": ["modules"] - }, - "repeatmodeler/repeatmodeler": { - "branch": "master", - "git_sha": "84efd2f87d07deb22ee9378f065a9aa5f1434161", - "installed_by": ["modules"] - }, - "samtools/cat": { - "branch": "master", - "git_sha": "04fbbc7c43cebc0b95d5b126f6d9fe4effa33519", - "installed_by": ["modules"] - }, - "sortmerna": { - "branch": "master", - "git_sha": "df05c8db5195867c0bc7b92c1788115b66f0d17d", - "installed_by": ["modules"] - }, - "star/align": { - "branch": "master", - "git_sha": "46eca555142d6e597729fcb682adcc791796f514", - "installed_by": ["modules"] - }, - "star/genomegenerate": { - "branch": "master", - "git_sha": "46eca555142d6e597729fcb682adcc791796f514", + "git_sha": "285a50500f9e02578d90b3ce6382ea3c30216acd", "installed_by": ["modules"] }, - "tsebra": { + "multiqc": { "branch": "master", - "git_sha": "0995f9cd0cc5e4eb60f7870280b75ecdb5ab0db2", + "git_sha": "b7ebe95761cd389603f9cc0e0dc384c0f663815a", "installed_by": ["modules"] - }, - "umitools/extract": { - "branch": "master", - "git_sha": "b4919e9a2b4d8b71061e601633db4600a3858fa1", - "installed_by": ["fastq_fastqc_umitools_fastp"] } } }, "subworkflows": { "nf-core": { - "fastq_fastqc_umitools_fastp": { + "utils_nextflow_pipeline": { + "branch": "master", + "git_sha": "5caf7640a9ef1d18d765d55339be751bb0969dfa", + "installed_by": ["subworkflows"] + }, + "utils_nfcore_pipeline": { + "branch": "master", + "git_sha": "92de218a329bfc9a9033116eb5f65fd270e72ba3", + "installed_by": ["subworkflows"] + }, + "utils_nfvalidation_plugin": { "branch": "master", - "git_sha": "46eca555142d6e597729fcb682adcc791796f514", + "git_sha": "5caf7640a9ef1d18d765d55339be751bb0969dfa", "installed_by": ["subworkflows"] } } diff --git a/modules/gallvp/agat/spaddintrons/environment.yml b/modules/gallvp/agat/spaddintrons/environment.yml deleted file mode 100644 index 854ee35..0000000 --- a/modules/gallvp/agat/spaddintrons/environment.yml +++ /dev/null @@ -1,9 +0,0 @@ ---- -# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json -name: "agat_spaddintrons" -channels: - - conda-forge - - bioconda - - defaults -dependencies: - - "bioconda::agat=1.4.0" diff --git a/modules/gallvp/agat/spaddintrons/main.nf b/modules/gallvp/agat/spaddintrons/main.nf deleted file mode 100644 index 164b3d3..0000000 --- a/modules/gallvp/agat/spaddintrons/main.nf +++ /dev/null @@ -1,50 +0,0 @@ -process AGAT_SPADDINTRONS { - tag "$meta.id" - label 'process_single' - - conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/agat:1.4.0--pl5321hdfd78af_0' : - 'biocontainers/agat:1.4.0--pl5321hdfd78af_0' }" - - input: - tuple val(meta), path(gxf) - path config - - output: - tuple val(meta), path("*.gff") , emit: gff - path "versions.yml" , emit: versions - - when: - task.ext.when == null || task.ext.when - - script: - def args = task.ext.args ?: '' - def prefix = task.ext.prefix ?: "${meta.id}" - def config_arg = config ? "-c $config" : '' - if( "$gxf" == "${prefix}.gff" ) error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!" - """ - agat_sp_add_introns.pl \\ - $args \\ - -g $gxf \\ - $config_arg \\ - -o ${prefix}.gff - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - agat: \$(agat_sp_add_introns.pl -h | sed -n 's/.*(AGAT) - Version: \\(.*\\) .*/\\1/p') - END_VERSIONS - """ - - stub: - def prefix = task.ext.prefix ?: "${meta.id}" - if( "$gxf" == "${prefix}.gff" ) error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!" - """ - touch ${prefix}.gff - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - agat: \$(agat_sp_add_introns.pl -h | sed -n 's/.*(AGAT) - Version: \\(.*\\) .*/\\1/p') - END_VERSIONS - """ -} diff --git a/modules/gallvp/agat/spaddintrons/meta.yml b/modules/gallvp/agat/spaddintrons/meta.yml deleted file mode 100644 index c05c924..0000000 --- a/modules/gallvp/agat/spaddintrons/meta.yml +++ /dev/null @@ -1,55 +0,0 @@ ---- -# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/meta-schema.json -name: "agat_spaddintrons" -description: | - The script aims to add intron features to gtf/gff file without intron features. -keywords: - - genomics - - gff - - gtf - - add - - intron - - feature -tools: - - "agat": - description: "Another Gff Analysis Toolkit (AGAT). Suite of tools to handle gene annotations in any GTF/GFF format." - homepage: "https://agat.readthedocs.io/en/latest/" - documentation: "https://agat.readthedocs.io/en/latest/tools/agat_sp_add_introns.html" - tool_dev_url: "https://github.com/NBISweden/AGAT" - doi: "10.5281/zenodo.3552717" - licence: ["GPL v3"] -input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. `[ id:'sample1', single_end:false ]` - - gxf: - type: file - description: Input GFF3/GTF file - pattern: "*.{gff,gff3,gtf}" - - config: - type: file - description: | - Input agat config file. By default AGAT takes as input agat_config.yaml file from the working directory if any, otherwise it takes the orignal agat_config.yaml shipped with AGAT. To get the agat_config.yaml locally type: "agat config --expose". The --config option gives you the possibility to use your own AGAT config file (located elsewhere or named differently). - pattern: "*.yaml" - -output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. `[ id:'sample1', single_end:false ] - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - - gff: - type: file - description: Output GFF file. - pattern: "*.gff" - -authors: - - "@GallVp" -maintainers: - - "@GallVp" diff --git a/modules/gallvp/agat/spaddintrons/tests/main.nf.test b/modules/gallvp/agat/spaddintrons/tests/main.nf.test deleted file mode 100644 index 6c4bd03..0000000 --- a/modules/gallvp/agat/spaddintrons/tests/main.nf.test +++ /dev/null @@ -1,61 +0,0 @@ -nextflow_process { - - name "Test Process AGAT_SPADDINTRONS" - script "../main.nf" - process "AGAT_SPADDINTRONS" - - tag "modules" - tag "modules_gallvp" - tag "agat" - tag "agat/spaddintrons" - - test("homo_sapiens - genome - gtf") { - - - when { - process { - """ - input[0] = [ - [ id:'test', single_end:false ], // meta map - file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr1/genome.gtf', checkIfExists: true) - ] - input[1] = [] - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(process.out).match() } - ) - } - - } - - test("homo_sapiens - genome - gtf - stub") { - - options '-stub' - - when { - process { - """ - input[0] = [ - [ id:'test', single_end:false ], // meta map - file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr1/genome.gtf', checkIfExists: true) - ] - input[1] = [] - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(process.out).match() } - ) - } - - } - -} diff --git a/modules/gallvp/agat/spaddintrons/tests/main.nf.test.snap b/modules/gallvp/agat/spaddintrons/tests/main.nf.test.snap deleted file mode 100644 index 6947711..0000000 --- a/modules/gallvp/agat/spaddintrons/tests/main.nf.test.snap +++ /dev/null @@ -1,72 +0,0 @@ -{ - "homo_sapiens - genome - gtf - stub": { - "content": [ - { - "0": [ - [ - { - "id": "test", - "single_end": false - }, - "test.gff:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "1": [ - "versions.yml:md5,480dfe983a8b4469c1dff8b7a08d855d" - ], - "gff": [ - [ - { - "id": "test", - "single_end": false - }, - "test.gff:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "versions": [ - "versions.yml:md5,480dfe983a8b4469c1dff8b7a08d855d" - ] - } - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" - }, - "timestamp": "2024-06-24T16:22:13.888389" - }, - "homo_sapiens - genome - gtf": { - "content": [ - { - "0": [ - [ - { - "id": "test", - "single_end": false - }, - "test.gff:md5,a798830c6ad0a27b1564b98e1a1fc3aa" - ] - ], - "1": [ - "versions.yml:md5,480dfe983a8b4469c1dff8b7a08d855d" - ], - "gff": [ - [ - { - "id": "test", - "single_end": false - }, - "test.gff:md5,a798830c6ad0a27b1564b98e1a1fc3aa" - ] - ], - "versions": [ - "versions.yml:md5,480dfe983a8b4469c1dff8b7a08d855d" - ] - } - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" - }, - "timestamp": "2024-06-24T15:21:51.693488" - } -} \ No newline at end of file diff --git a/modules/gallvp/agat/spextractsequences/environment.yml b/modules/gallvp/agat/spextractsequences/environment.yml deleted file mode 100644 index be40401..0000000 --- a/modules/gallvp/agat/spextractsequences/environment.yml +++ /dev/null @@ -1,9 +0,0 @@ ---- -# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json -name: "agat_spextractsequences" -channels: - - conda-forge - - bioconda - - defaults -dependencies: - - bioconda::agat=1.4.0 diff --git a/modules/gallvp/agat/spextractsequences/main.nf b/modules/gallvp/agat/spextractsequences/main.nf deleted file mode 100644 index ccf4b4d..0000000 --- a/modules/gallvp/agat/spextractsequences/main.nf +++ /dev/null @@ -1,52 +0,0 @@ -process AGAT_SPEXTRACTSEQUENCES { - tag "$meta.id" - label 'process_single' - - conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/agat:1.4.0--pl5321hdfd78af_0' : - 'biocontainers/agat:1.4.0--pl5321hdfd78af_0' }" - - input: - tuple val(meta), path(gxf) - path fasta - path config - - output: - tuple val(meta), path("*.fasta") , emit: fasta - path "versions.yml" , emit: versions - - when: - task.ext.when == null || task.ext.when - - script: - def args = task.ext.args ?: '' - def prefix = task.ext.prefix ?: "${meta.id}" - def config_arg = config ? "-c $config" : '' - if( "$fasta" == "${prefix}.fasta" ) error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!" - """ - agat_sp_extract_sequences.pl \\ - $args \\ - -g $gxf \\ - -f $fasta \\ - $config_arg \\ - -o ${prefix}.fasta - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - agat: \$(agat_sp_extract_sequences.pl -h | sed -n 's/.*(AGAT) - Version: \\(.*\\) .*/\\1/p') - END_VERSIONS - """ - - stub: - def prefix = task.ext.prefix ?: "${meta.id}" - if( "$fasta" == "${prefix}.fasta" ) error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!" - """ - touch ${prefix}.fasta - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - agat: \$(agat_sp_extract_sequences.pl -h | sed -n 's/.*(AGAT) - Version: \\(.*\\) .*/\\1/p') - END_VERSIONS - """ -} diff --git a/modules/gallvp/agat/spextractsequences/meta.yml b/modules/gallvp/agat/spextractsequences/meta.yml deleted file mode 100644 index 611af62..0000000 --- a/modules/gallvp/agat/spextractsequences/meta.yml +++ /dev/null @@ -1,60 +0,0 @@ ---- -# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/meta-schema.json -name: "agat_spextractsequences" -description: | - This script extracts sequences in fasta format according to features described - in a gff file. -keywords: - - genomics - - gff - - extract - - fasta - - sequence - - feature -tools: - - "agat": - description: "Another Gff Analysis Toolkit (AGAT). Suite of tools to handle gene annotations in any GTF/GFF format." - homepage: "https://agat.readthedocs.io/en/latest/" - documentation: "https://agat.readthedocs.io/en/latest/tools/agat_sp_extract_sequences.html" - tool_dev_url: "https://github.com/NBISweden/AGAT" - doi: "10.5281/zenodo.3552717" - licence: ["GPL v3"] -input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. `[ id:'sample1', single_end:false ]` - - gxf: - type: file - description: Input GFF3/GTF file - pattern: "*.{gff,gff3,gtf}" - - fasta: - type: file - description: Input FASTA file - pattern: "*.{fa,fsa,faa,fasta}" - - config: - type: file - description: | - Input agat config file. By default AGAT takes as input agat_config.yaml file from the working directory if any, otherwise it takes the orignal agat_config.yaml shipped with AGAT. To get the agat_config.yaml locally type: "agat config --expose". The --config option gives you the possibility to use your own AGAT config file (located elsewhere or named differently). - pattern: "*.yaml" - -output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. `[ id:'sample1', single_end:false ] - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - - fasta: - type: file - description: Output FASTA file. - pattern: "*.fasta" - -authors: - - "@GallVp" -maintainers: - - "@GallVp" diff --git a/modules/gallvp/agat/spextractsequences/tests/main.nf.test b/modules/gallvp/agat/spextractsequences/tests/main.nf.test deleted file mode 100644 index 72b5f99..0000000 --- a/modules/gallvp/agat/spextractsequences/tests/main.nf.test +++ /dev/null @@ -1,62 +0,0 @@ -nextflow_process { - - name "Test Process AGAT_SPEXTRACTSEQUENCES" - script "../main.nf" - process "AGAT_SPEXTRACTSEQUENCES" - - tag "modules" - tag "modules_gallvp" - tag "agat" - tag "agat/spextractsequences" - - test("sarscov2 - gff - fasta") { - - when { - process { - """ - input[0] = [ - [ id:'test', single_end:false ], // meta map - file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.gff3', checkIfExists: true) - ] - input[1] = file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) - input[2] = [] - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(process.out).match() } - ) - } - - } - - test("sarscov2 - gff - fasta - stub") { - - options '-stub' - - when { - process { - """ - input[0] = [ - [ id:'test', single_end:false ], // meta map - file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.gff3', checkIfExists: true) - ] - input[1] = file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) - input[2] = [] - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(process.out).match() } - ) - } - - } - -} diff --git a/modules/gallvp/agat/spextractsequences/tests/main.nf.test.snap b/modules/gallvp/agat/spextractsequences/tests/main.nf.test.snap deleted file mode 100644 index 4ee76fe..0000000 --- a/modules/gallvp/agat/spextractsequences/tests/main.nf.test.snap +++ /dev/null @@ -1,72 +0,0 @@ -{ - "sarscov2 - gff - fasta": { - "content": [ - { - "0": [ - [ - { - "id": "test", - "single_end": false - }, - "test.fasta:md5,e4a8c6c1d2b33c92240e9d2ba07aecc2" - ] - ], - "1": [ - "versions.yml:md5,b31a3d3961871a1e453919bc3b45bf2f" - ], - "fasta": [ - [ - { - "id": "test", - "single_end": false - }, - "test.fasta:md5,e4a8c6c1d2b33c92240e9d2ba07aecc2" - ] - ], - "versions": [ - "versions.yml:md5,b31a3d3961871a1e453919bc3b45bf2f" - ] - } - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" - }, - "timestamp": "2024-06-21T16:20:58.856035" - }, - "sarscov2 - gff - fasta - stub": { - "content": [ - { - "0": [ - [ - { - "id": "test", - "single_end": false - }, - "test.fasta:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "1": [ - "versions.yml:md5,b31a3d3961871a1e453919bc3b45bf2f" - ], - "fasta": [ - [ - { - "id": "test", - "single_end": false - }, - "test.fasta:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "versions": [ - "versions.yml:md5,b31a3d3961871a1e453919bc3b45bf2f" - ] - } - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" - }, - "timestamp": "2024-06-21T16:21:04.022292" - } -} \ No newline at end of file diff --git a/modules/gallvp/braker3/main.nf b/modules/gallvp/braker3/main.nf deleted file mode 100644 index c856216..0000000 --- a/modules/gallvp/braker3/main.nf +++ /dev/null @@ -1,93 +0,0 @@ -process BRAKER3 { - tag "${meta.id}" - label 'process_high' - - container "docker.io/teambraker/braker3:v3.0.7.5" - - input: - tuple val(meta), path(fasta) - path bam - path rnaseq_sets_dirs - path rnaseq_sets_ids - path proteins - path hintsfile - - output: - tuple val(meta), path("$prefix/braker.gtf") , emit: gtf - tuple val(meta), path("$prefix/braker.codingseq") , emit: cds - tuple val(meta), path("$prefix/braker.aa") , emit: aa - tuple val(meta), path("$prefix/braker.log") , emit: log - tuple val(meta), path("$prefix/hintsfile.gff") , emit: hintsfile , optional: true - tuple val(meta), path("$prefix/braker.gff3") , emit: gff3 , optional: true - tuple val(meta), path("$prefix/what-to-cite.txt") , emit: citations - path "versions.yml" , emit: versions - - when: - task.ext.when == null || task.ext.when - - script: - def args = task.ext.args ?: '' - prefix = task.ext.prefix ?: "${meta.id}" - def rna_ids = rnaseq_sets_ids ? "--rnaseq_sets_ids=$rnaseq_sets_ids" : '' - def rna_dirs = rnaseq_sets_dirs ? "--rnaseq_sets_dirs=$rnaseq_sets_dirs" : '' - def bam = bam ? "--bam=$bam" : '' - def proteins = proteins ? "--prot_seq=$proteins" : '' - def hints = hintsfile ? "--hints=$hintsfile" : '' - def new_species = args.contains('--species')? '' : '--species new_species' - """ - cp -r \$AUGUSTUS_CONFIG_PATH \\ - augustus_config - - perl -p -e 's/^(>\\S+).*\$/\$1/' \\ - $fasta \\ - > ${prefix}.name.only.genome.masked.fasta - - braker.pl \\ - --genome ${prefix}.name.only.genome.masked.fasta \\ - $new_species \\ - --workingdir $prefix \\ - --AUGUSTUS_CONFIG_PATH "\$(pwd)/augustus_config" \\ - --threads $task.cpus \\ - $rna_ids \\ - $rna_dirs \\ - $bam \\ - $proteins \\ - $hints \\ - $args - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - braker3: \$(braker.pl --version 2>/dev/null | sed 's/braker.pl version //') - augustus: \$(augustus --version |& sed -n 's/AUGUSTUS (\\(.*\\)) is a gene .*/\\1/p') - genemark-etp: \$(echo "\$(gmetp.pl || echo '')" | sed -n 's/ETP version \\(.*\\)/\\1/p') - prothint: \$(prothint.py --version | sed 's/prothint.py //1') - END_VERSIONS - """ - - stub: - def args = task.ext.args ?: '' - prefix = task.ext.prefix ?: "${meta.id}" - def rna_ids = rnaseq_sets_ids ? "--rnaseq_sets_ids=$rnaseq_sets_ids" : '' - def hints = hintsfile ? "--hints=$hintsfile" : '' - def touch_hints = (rna_ids || bam || proteins || hints) ? "touch $prefix/hintsfile.gff" : '' - def touch_gff = args.contains('--gff3') ? "touch $prefix/braker.gff3" : '' - """ - mkdir "$prefix" - - touch "$prefix/braker.gtf" - touch "$prefix/braker.codingseq" - touch "$prefix/braker.aa" - $touch_hints - touch "$prefix/braker.log" - touch "$prefix/what-to-cite.txt" - $touch_gff - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - braker3: \$(braker.pl --version 2>/dev/null | sed 's/braker.pl version //') - augustus: \$(augustus --version |& sed -n 's/AUGUSTUS (\\(.*\\)) is a gene .*/\\1/p') - genemark-etp: \$(echo "\$(gmetp.pl || echo '')" | sed -n 's/ETP version \\(.*\\)/\\1/p') - prothint: \$(prothint.py --version | sed 's/prothint.py //1') - END_VERSIONS - """ -} diff --git a/modules/gallvp/braker3/meta.yml b/modules/gallvp/braker3/meta.yml deleted file mode 100644 index bfb8211..0000000 --- a/modules/gallvp/braker3/meta.yml +++ /dev/null @@ -1,87 +0,0 @@ -name: braker3 -description: | - Gene prediction in novel genomes using RNA-seq and protein homology information -keywords: - - genome - - annotation - - braker - - gff - - gtf -tools: - - braker3: - description: "BRAKER3 is a pipeline for fully automated prediction of - protein coding gene structures using protein and RNA-seq and protein homology - information" - homepage: https://github.com/Gaius-Augustus/BRAKER - documentation: https://github.com/Gaius-Augustus/BRAKER - tool_dev_url: https://github.com/Gaius-Augustus/BRAKER - doi: "10.13140/RG.2.2.20047.36004" - licence: ["Artistic-1.0"] - -input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test' ] - - fasta: - type: file - description: Genome assembly fasta - pattern: "*.{fasta,fa,fas,faa,fna}" - - bam: - type: file - description: BAM file of RNA-seq data to be passed to --bam - pattern: "*.bam" - - rnaseq_sets_dirs: - type: file - description: Directories of RNA-seq data sets to be passed to --rnaseq_sets_dirs - - rnaseq_sets_ids: - type: file - description: IDs of RNA-seq data sets to be passed to --rnaseq_sets_ids - - proteins: - type: file - description: Protein evidence to be passed to --proteins - pattern: "*.{fasta,fa,fas,faa}" - - hintsfile: - type: file - description: Hintsfile to be passed to --hintsfile - pattern: "*.{gff, gtf, gff3}" -output: - - gtf: - type: file - description: Gene transfer format file as output by BRAKER3 - pattern: "*.{gtf}" - - cds: - type: file - description: Coding sequence file as output by BRAKER3 - pattern: "*.{codingseq}" - - aa: - type: file - description: Protein sequence file as output by BRAKER3 - pattern: "*.{aa}" - - log: - type: file - description: BRAKER3 log file - pattern: "*.log" - - hintsfile: - type: file - description: Hints file as output by BRAKER3 - pattern: "*hintsfile.{gff}" - - gff3: - type: file - description: GFF3 file as output by BRAKER3 - pattern: "*.{gff3}" - - citations: - type: file - description: BRAKER3 citations - pattern: "what-to-cite.txt" - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - -authors: - - "@kherronism" - - "@GallVp" -maintainers: - - "@GallVp" diff --git a/modules/gallvp/braker3/tests/main.nf.test b/modules/gallvp/braker3/tests/main.nf.test deleted file mode 100644 index 6302ea2..0000000 --- a/modules/gallvp/braker3/tests/main.nf.test +++ /dev/null @@ -1,77 +0,0 @@ -nextflow_process { - - name "Test Process BRAKER3" - script "../main.nf" - config "./nextflow.config" - process "BRAKER3" - - tag "modules" - tag "modules_gallvp" - tag "braker3" - - test("braker3 - test - 4") { - - when { - process { - """ - input[0] = [ - [ id:'test', single_end:false ], // meta map - file('https://raw.githubusercontent.com/Gaius-Augustus/BRAKER/f58479fe5bb13a9e51c3ca09cb9e137cab3b8471/example/genome.fa', checkIfExists: true) - ] - input[1] = file('http://topaz.gatech.edu/GeneMark/Braker/RNAseq.bam', checkIfExists: true) - input[2] = [] - input[3] = [] - input[4] = [] - input[5] = [] - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot( - process.out.aa, - process.out.cds, - process.out.citations, - process.out.gff3, - process.out.gtf, - process.out.hintsfile, - process.out.versions, - ).match() }, - { assert file(process.out.log[0][1]).text.contains('BRAKER RUN FINISHED') } - ) - } - - } - - test("sarscov2 - fasta - stub") { - - options '-stub' - - when { - process { - """ - input[0] = [ - [ id:'test', single_end:false ], // meta map - file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true), - ] - input[1] = [] - input[2] = [] - input[3] = [] - input[4] = [] - input[5] = [] - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(process.out).match() } - ) - } - - } - -} diff --git a/modules/gallvp/braker3/tests/main.nf.test.snap b/modules/gallvp/braker3/tests/main.nf.test.snap deleted file mode 100644 index e9dc283..0000000 --- a/modules/gallvp/braker3/tests/main.nf.test.snap +++ /dev/null @@ -1,181 +0,0 @@ -{ - "sarscov2 - fasta - stub": { - "content": [ - { - "0": [ - [ - { - "id": "test", - "single_end": false - }, - "braker.gtf:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "1": [ - [ - { - "id": "test", - "single_end": false - }, - "braker.codingseq:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "2": [ - [ - { - "id": "test", - "single_end": false - }, - "braker.aa:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "3": [ - [ - { - "id": "test", - "single_end": false - }, - "braker.log:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "4": [ - - ], - "5": [ - - ], - "6": [ - [ - { - "id": "test", - "single_end": false - }, - "what-to-cite.txt:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "7": [ - "versions.yml:md5,465227c41b8b4aae2dea6ec249676935" - ], - "aa": [ - [ - { - "id": "test", - "single_end": false - }, - "braker.aa:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "cds": [ - [ - { - "id": "test", - "single_end": false - }, - "braker.codingseq:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "citations": [ - [ - { - "id": "test", - "single_end": false - }, - "what-to-cite.txt:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "gff3": [ - - ], - "gtf": [ - [ - { - "id": "test", - "single_end": false - }, - "braker.gtf:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "hintsfile": [ - - ], - "log": [ - [ - { - "id": "test", - "single_end": false - }, - "braker.log:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "versions": [ - "versions.yml:md5,465227c41b8b4aae2dea6ec249676935" - ] - } - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.3" - }, - "timestamp": "2024-07-25T16:01:15.128244" - }, - "braker3 - test - 4": { - "content": [ - [ - [ - { - "id": "test", - "single_end": false - }, - "braker.aa:md5,56ec6600d2843fe4a7fc9913e6b1448a" - ] - ], - [ - [ - { - "id": "test", - "single_end": false - }, - "braker.codingseq:md5,47f7f312e4f5b3854b960a373717a0f7" - ] - ], - [ - [ - { - "id": "test", - "single_end": false - }, - "what-to-cite.txt:md5,2ab67eaf09994751a09f5de8de7160a7" - ] - ], - [ - - ], - [ - [ - { - "id": "test", - "single_end": false - }, - "braker.gtf:md5,22a968505188b7aa57c37fa85f570295" - ] - ], - [ - [ - { - "id": "test", - "single_end": false - }, - "hintsfile.gff:md5,d42b89e12af7ba66ae25fd977146640a" - ] - ], - [ - "versions.yml:md5,465227c41b8b4aae2dea6ec249676935" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.3" - }, - "timestamp": "2024-07-25T16:03:42.343716" - } -} \ No newline at end of file diff --git a/modules/gallvp/braker3/tests/nextflow.config b/modules/gallvp/braker3/tests/nextflow.config deleted file mode 100644 index bf8441b..0000000 --- a/modules/gallvp/braker3/tests/nextflow.config +++ /dev/null @@ -1,5 +0,0 @@ -process { - withName: BRAKER3 { - ext.args = '--species=arabidopsis --skipAllTraining' // Not required, but significantly cuts the runtime - } -} diff --git a/modules/gallvp/busco/busco/environment.yml b/modules/gallvp/busco/busco/environment.yml deleted file mode 100644 index 06a5d93..0000000 --- a/modules/gallvp/busco/busco/environment.yml +++ /dev/null @@ -1,7 +0,0 @@ -name: busco_busco -channels: - - conda-forge - - bioconda - - defaults -dependencies: - - bioconda::busco=5.7.1 diff --git a/modules/gallvp/busco/busco/main.nf b/modules/gallvp/busco/busco/main.nf deleted file mode 100644 index f7c1a66..0000000 --- a/modules/gallvp/busco/busco/main.nf +++ /dev/null @@ -1,107 +0,0 @@ -process BUSCO_BUSCO { - tag "$meta.id" - label 'process_medium' - - conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/busco:5.7.1--pyhdfd78af_0': - 'biocontainers/busco:5.7.1--pyhdfd78af_0' }" - - input: - tuple val(meta), path(fasta, stageAs:'tmp_input/*') - val mode // Required: One of genome, proteins, or transcriptome - val lineage // Required: lineage to check against, "auto" enables --auto-lineage instead - path busco_lineages_path // Recommended: path to busco lineages - downloads if not set - path config_file // Optional: busco configuration file - - output: - tuple val(meta), path("*-busco.batch_summary.txt") , emit: batch_summary - tuple val(meta), path("short_summary.*.txt") , emit: short_summaries_txt , optional: true - tuple val(meta), path("short_summary.*.json") , emit: short_summaries_json , optional: true - tuple val(meta), path("*-busco/*/run_*/full_table.tsv") , emit: full_table , optional: true - tuple val(meta), path("*-busco/*/run_*/missing_busco_list.tsv") , emit: missing_busco_list , optional: true - tuple val(meta), path("*-busco/*/run_*/single_copy_proteins.faa") , emit: single_copy_proteins , optional: true - tuple val(meta), path("*-busco/*/run_*/busco_sequences") , emit: seq_dir - tuple val(meta), path("*-busco/*/translated_proteins") , emit: translated_dir , optional: true - tuple val(meta), path("*-busco") , emit: busco_dir - path "versions.yml" , emit: versions - - when: - task.ext.when == null || task.ext.when - - script: - if ( mode !in [ 'genome', 'proteins', 'transcriptome' ] ) { - error "Mode must be one of 'genome', 'proteins', or 'transcriptome'." - } - def args = task.ext.args ?: '' - def prefix = task.ext.prefix ?: "${meta.id}-${lineage}" - def busco_config = config_file ? "--config $config_file" : '' - def busco_lineage = lineage.equals('auto') ? '--auto-lineage' : "--lineage_dataset ${lineage}" - def busco_lineage_dir = busco_lineages_path ? "--download_path ${busco_lineages_path}" : '' - """ - # Nextflow changes the container --entrypoint to /bin/bash (container default entrypoint: /usr/local/env-execute) - # Check for container variable initialisation script and source it. - if [ -f "/usr/local/env-activate.sh" ]; then - set +u # Otherwise, errors out because of various unbound variables - . "/usr/local/env-activate.sh" - set -u - fi - - # If the augustus config directory is not writable, then copy to writeable area - if [ ! -w "\${AUGUSTUS_CONFIG_PATH}" ]; then - # Create writable tmp directory for augustus - AUG_CONF_DIR=\$( mktemp -d -p \$PWD ) - cp -r \$AUGUSTUS_CONFIG_PATH/* \$AUG_CONF_DIR - export AUGUSTUS_CONFIG_PATH=\$AUG_CONF_DIR - echo "New AUGUSTUS_CONFIG_PATH=\${AUGUSTUS_CONFIG_PATH}" - fi - - # Ensure the input is uncompressed - INPUT_SEQS=input_seqs - mkdir "\$INPUT_SEQS" - cd "\$INPUT_SEQS" - for FASTA in ../tmp_input/*; do - if [ "\${FASTA##*.}" == 'gz' ]; then - gzip -cdf "\$FASTA" > \$( basename "\$FASTA" .gz ) - else - ln -s "\$FASTA" . - fi - done - cd .. - - busco \\ - --cpu $task.cpus \\ - --in "\$INPUT_SEQS" \\ - --out ${prefix}-busco \\ - --mode $mode \\ - $busco_lineage \\ - $busco_lineage_dir \\ - $busco_config \\ - $args - - # clean up - rm -rf "\$INPUT_SEQS" - - # Move files to avoid staging/publishing issues - mv ${prefix}-busco/batch_summary.txt ${prefix}-busco.batch_summary.txt - mv ${prefix}-busco/*/short_summary.*.{json,txt} . || echo "Short summaries were not available: No genes were found." - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - busco: \$( busco --version 2>&1 | sed 's/^BUSCO //' ) - END_VERSIONS - """ - - stub: - def prefix = task.ext.prefix ?: "${meta.id}-${lineage}" - def fasta_name = files(fasta).first().name - '.gz' - """ - touch ${prefix}-busco.batch_summary.txt - mkdir -p ${prefix}-busco/$fasta_name/run_${lineage}/busco_sequences - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - busco: \$( busco --version 2>&1 | sed 's/^BUSCO //' ) - END_VERSIONS - """ -} diff --git a/modules/gallvp/busco/busco/meta.yml b/modules/gallvp/busco/busco/meta.yml deleted file mode 100644 index 29745d2..0000000 --- a/modules/gallvp/busco/busco/meta.yml +++ /dev/null @@ -1,98 +0,0 @@ -name: busco_busco -description: Benchmarking Universal Single Copy Orthologs -keywords: - - quality control - - genome - - transcriptome - - proteome -tools: - - busco: - description: BUSCO provides measures for quantitative assessment of genome assembly, gene set, and transcriptome completeness based on evolutionarily informed expectations of gene content from near-universal single-copy orthologs selected from OrthoDB. - homepage: https://busco.ezlab.org/ - documentation: https://busco.ezlab.org/busco_userguide.html - tool_dev_url: https://gitlab.com/ezlab/busco - doi: "10.1007/978-1-4939-9173-0_14" - licence: ["MIT"] -input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - fasta: - type: file - description: Nucleic or amino acid sequence file in FASTA format. - pattern: "*.{fasta,fna,fa,fasta.gz,fna.gz,fa.gz}" - - mode: - type: string - description: The mode to run Busco in. One of genome, proteins, or transcriptome - pattern: "{genome,proteins,transcriptome}" - - lineage: - type: string - description: The BUSCO lineage to use, or "auto" to automatically select lineage - - busco_lineages_path: - type: directory - description: Path to local BUSCO lineages directory. - - config_file: - type: file - description: Path to BUSCO config file. -output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - batch_summary: - type: file - description: Summary of all sequence files analyzed - pattern: "*-busco.batch_summary.txt" - - short_summaries_txt: - type: file - description: Short Busco summary in plain text format - pattern: "short_summary.*.txt" - - short_summaries_json: - type: file - description: Short Busco summary in JSON format - pattern: "short_summary.*.json" - - busco_dir: - type: directory - description: BUSCO lineage specific output - pattern: "*-busco" - - full_table: - type: file - description: Full BUSCO results table - pattern: "full_table.tsv" - - missing_busco_list: - type: file - description: List of missing BUSCOs - pattern: "missing_busco_list.tsv" - - single_copy_proteins: - type: file - description: Fasta file of single copy proteins (transcriptome mode) - pattern: "single_copy_proteins.faa" - - seq_dir: - type: directory - description: BUSCO sequence directory - pattern: "busco_sequences" - - translated_dir: - type: directory - description: Six frame translations of each transcript made by the transcriptome mode - pattern: "translated_dir" - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" -authors: - - "@priyanka-surana" - - "@charles-plessy" - - "@mahesh-panchal" - - "@muffato" - - "@jvhagey" - - "@gallvp" -maintainers: - - "@priyanka-surana" - - "@charles-plessy" - - "@mahesh-panchal" - - "@muffato" - - "@jvhagey" - - "@gallvp" diff --git a/modules/gallvp/busco/busco/tests/main.nf.test b/modules/gallvp/busco/busco/tests/main.nf.test deleted file mode 100644 index 829bd28..0000000 --- a/modules/gallvp/busco/busco/tests/main.nf.test +++ /dev/null @@ -1,415 +0,0 @@ -nextflow_process { - - name "Test Process BUSCO_BUSCO" - script "../main.nf" - process "BUSCO_BUSCO" - - tag "modules" - tag "modules_gallvp" - tag "busco" - tag "busco/busco" - - test("test_busco_genome_single_fasta") { - - config './nextflow.config' - - when { - process { - """ - input[0] = [ - [ id:'test' ], // meta map - file(params.modules_testdata_base_path + 'genomics/prokaryotes/bacteroides_fragilis/genome/genome.fna.gz', checkIfExists: true) - ] - input[1] = 'genome' - input[2] = 'bacteria_odb10' // Launch with 'auto' to use --auto-lineage, and specified lineages // 'auto' removed from test due to memory issues - input[3] = [] // Download busco lineage - input[4] = [] // No config - """ - } - } - - then { - assert process.success - - with(path(process.out.short_summaries_txt[0][1]).text) { - assert contains('BUSCO version') - assert contains('The lineage dataset is') - assert contains('BUSCO was run in mode') - assert contains('Complete BUSCOs') - assert contains('Missing BUSCOs') - assert contains('Dependencies and versions') - } - - with(path(process.out.short_summaries_json[0][1]).text) { - assert contains('one_line_summary') - assert contains('mode') - assert contains('dataset') - } - - assert snapshot( - process.out.batch_summary[0][1], - process.out.full_table[0][1], - process.out.missing_busco_list[0][1], - process.out.versions[0] - ).match() - - with(file(process.out.seq_dir[0][1]).listFiles().collect { it.name }) { - assert contains('single_copy_busco_sequences.tar.gz') - assert contains('multi_copy_busco_sequences.tar.gz') - assert contains('fragmented_busco_sequences.tar.gz') - } - - with(path("${process.out.busco_dir[0][1]}/logs/busco.log").text) { - assert contains('DEBUG:busco.run_BUSCO') - assert contains('Results from dataset') - assert contains('how to cite BUSCO') - } - - assert process.out.single_copy_proteins == [] - assert process.out.translated_dir == [] - } - } - - test("test_busco_genome_multi_fasta") { - - config './nextflow.config' - - when { - process { - """ - input[0] = [ - [ id:'test' ], // meta map - [ - file(params.modules_testdata_base_path + 'genomics/prokaryotes/bacteroides_fragilis/genome/genome.fna.gz', checkIfExists: true), - file(params.modules_testdata_base_path + 'genomics/prokaryotes/candidatus_portiera_aleyrodidarum/genome/genome.fasta', checkIfExists: true) - ] - ] - input[1] = 'genome' - input[2] = 'bacteria_odb10' - input[3] = [] - input[4] = [] - """ - } - } - - then { - assert process.success - - with(path(process.out.short_summaries_txt[0][1][0]).text) { - assert contains('BUSCO version') - assert contains('The lineage dataset is') - assert contains('BUSCO was run in mode') - assert contains('Complete BUSCOs') - assert contains('Missing BUSCOs') - assert contains('Dependencies and versions') - } - - with(path(process.out.short_summaries_txt[0][1][1]).text) { - assert contains('BUSCO version') - assert contains('The lineage dataset is') - assert contains('BUSCO was run in mode') - assert contains('Complete BUSCOs') - assert contains('Missing BUSCOs') - assert contains('Dependencies and versions') - } - - with(path(process.out.short_summaries_json[0][1][0]).text) { - assert contains('one_line_summary') - assert contains('mode') - assert contains('dataset') - } - - with(path(process.out.short_summaries_json[0][1][1]).text) { - assert contains('one_line_summary') - assert contains('mode') - assert contains('dataset') - } - - assert snapshot( - process.out.batch_summary[0][1], - process.out.full_table[0][1], - process.out.missing_busco_list[0][1], - process.out.versions[0] - ).match() - - with(file(process.out.seq_dir[0][1][0]).listFiles().collect { it.name }) { - assert contains('single_copy_busco_sequences.tar.gz') - assert contains('multi_copy_busco_sequences.tar.gz') - assert contains('fragmented_busco_sequences.tar.gz') - } - - with(file(process.out.seq_dir[0][1][1]).listFiles().collect { it.name }) { - assert contains('single_copy_busco_sequences.tar.gz') - assert contains('multi_copy_busco_sequences.tar.gz') - assert contains('fragmented_busco_sequences.tar.gz') - } - - with(path("${process.out.busco_dir[0][1]}/logs/busco.log").text) { - assert contains('DEBUG:busco.run_BUSCO') - assert contains('Results from dataset') - assert contains('how to cite BUSCO') - } - - assert process.out.single_copy_proteins == [] - assert process.out.translated_dir == [] - } - - } - - test("test_busco_eukaryote_metaeuk") { - - config './nextflow.metaeuk.config' - - when { - process { - """ - input[0] = [ - [ id:'test' ], // meta map - file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) - ] - input[1] = 'genome' - input[2] = 'eukaryota_odb10' - input[3] = [] - input[4] = [] - """ - } - } - - then { - assert process.success - - with(path(process.out.short_summaries_txt[0][1]).text) { - assert contains('BUSCO version') - assert contains('The lineage dataset is') - assert contains('BUSCO was run in mode') - assert contains('Complete BUSCOs') - assert contains('Missing BUSCOs') - assert contains('Dependencies and versions') - } - - with(path(process.out.short_summaries_json[0][1]).text) { - assert contains('one_line_summary') - assert contains('mode') - assert contains('dataset') - } - - assert snapshot( - process.out.batch_summary[0][1], - process.out.full_table[0][1], - process.out.missing_busco_list[0][1], - process.out.versions[0] - ).match() - - with(file(process.out.seq_dir[0][1]).listFiles().collect { it.name }) { - assert contains('single_copy_busco_sequences.tar.gz') - assert contains('multi_copy_busco_sequences.tar.gz') - assert contains('fragmented_busco_sequences.tar.gz') - } - - with(path("${process.out.busco_dir[0][1]}/logs/busco.log").text) { - assert contains('DEBUG:busco.run_BUSCO') - assert contains('Results from dataset') - assert contains('how to cite BUSCO') - - } - - assert process.out.single_copy_proteins == [] - assert process.out.translated_dir == [] - } - - } - - test("test_busco_eukaryote_augustus") { - - config './nextflow.augustus.config' - - when { - process { - """ - input[0] = [ - [ id:'test' ], // meta map - file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) - ] - input[1] = 'genome' - input[2] = 'eukaryota_odb10' - input[3] = [] - input[4] = [] - """ - } - } - - then { - assert process.success - - assert snapshot( - process.out.batch_summary[0][1], - process.out.versions[0] - ).match() - - with(path("${process.out.busco_dir[0][1]}/logs/busco.log").text) { - assert contains('DEBUG:busco.run_BUSCO') - assert contains('Augustus did not recognize any genes') - - } - - assert process.out.short_summaries_json == [] - assert process.out.short_summaries_txt == [] - assert process.out.missing_busco_list == [] - assert process.out.full_table == [] - assert process.out.single_copy_proteins == [] - assert process.out.translated_dir == [] - } - - } - - test("test_busco_protein") { - - config './nextflow.config' - - when { - process { - """ - input[0] = [ - [ id:'test' ], // meta map - file(params.modules_testdata_base_path + 'genomics/prokaryotes/candidatus_portiera_aleyrodidarum/genome/proteome.fasta', checkIfExists: true) - ] - input[1] = 'proteins' - input[2] = 'bacteria_odb10' - input[3] = [] - input[4] = [] - """ - } - } - - then { - assert process.success - - with(path(process.out.short_summaries_txt[0][1]).text) { - assert contains('BUSCO version') - assert contains('The lineage dataset is') - assert contains('BUSCO was run in mode') - assert contains('Complete BUSCOs') - assert contains('Missing BUSCOs') - assert contains('Dependencies and versions') - } - - with(path(process.out.short_summaries_json[0][1]).text) { - assert contains('one_line_summary') - assert contains('mode') - assert contains('dataset') - } - - assert snapshot( - process.out.batch_summary[0][1], - process.out.full_table[0][1], - process.out.missing_busco_list[0][1], - process.out.versions[0] - ).match() - - with(file(process.out.seq_dir[0][1]).listFiles().collect { it.name }) { - assert contains('single_copy_busco_sequences.tar.gz') - assert contains('multi_copy_busco_sequences.tar.gz') - assert contains('fragmented_busco_sequences.tar.gz') - } - - with(path("${process.out.busco_dir[0][1]}/logs/busco.log").text) { - assert contains('DEBUG:busco.run_BUSCO') - assert contains('Results from dataset') - assert contains('how to cite BUSCO') - } - - assert process.out.single_copy_proteins == [] - assert process.out.translated_dir == [] - } - - } - - test("test_busco_transcriptome") { - - config './nextflow.config' - - when { - process { - """ - input[0] = [ - [ id:'test' ], // meta map - file(params.modules_testdata_base_path + 'genomics/prokaryotes/bacteroides_fragilis/illumina/fasta/test1.contigs.fa.gz', checkIfExists: true) - ] - input[1] = 'transcriptome' - input[2] = 'bacteria_odb10' - input[3] = [] - input[4] = [] - """ - } - } - - then { - assert process.success - - with(path(process.out.short_summaries_txt[0][1]).text) { - assert contains('BUSCO version') - assert contains('The lineage dataset is') - assert contains('BUSCO was run in mode') - assert contains('Complete BUSCOs') - assert contains('Missing BUSCOs') - assert contains('Dependencies and versions') - } - - with(path(process.out.short_summaries_json[0][1]).text) { - assert contains('one_line_summary') - assert contains('mode') - assert contains('dataset') - } - - assert snapshot( - process.out.batch_summary[0][1], - process.out.full_table[0][1], - process.out.missing_busco_list[0][1], - process.out.translated_dir[0][1], - process.out.single_copy_proteins[0][1], - process.out.versions[0] - ).match() - - with(file(process.out.seq_dir[0][1]).listFiles().collect { it.name }) { - assert contains('single_copy_busco_sequences.tar.gz') - assert contains('multi_copy_busco_sequences.tar.gz') - assert contains('fragmented_busco_sequences.tar.gz') - } - - with(path("${process.out.busco_dir[0][1]}/logs/busco.log").text) { - assert contains('DEBUG:busco.run_BUSCO') - assert contains('Results from dataset') - assert contains('how to cite BUSCO') - } - } - - } - - test("minimal-stub") { - - options '-stub' - - when { - process { - """ - input[0] = [ - [ id:'test' ], // meta map - file(params.modules_testdata_base_path + 'genomics/prokaryotes/bacteroides_fragilis/genome/genome.fna.gz', checkIfExists: true) - ] - input[1] = 'genome' - input[2] = 'bacteria_odb10' - input[3] = [] - input[4] = [] - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(process.out).match() } - ) - } - } - -} diff --git a/modules/gallvp/busco/busco/tests/main.nf.test.snap b/modules/gallvp/busco/busco/tests/main.nf.test.snap deleted file mode 100644 index 1b6411b..0000000 --- a/modules/gallvp/busco/busco/tests/main.nf.test.snap +++ /dev/null @@ -1,230 +0,0 @@ -{ - "minimal-stub": { - "content": [ - { - "0": [ - [ - { - "id": "test" - }, - "test-bacteria_odb10-busco.batch_summary.txt:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "1": [ - - ], - "2": [ - - ], - "3": [ - - ], - "4": [ - - ], - "5": [ - - ], - "6": [ - [ - { - "id": "test" - }, - [ - - ] - ] - ], - "7": [ - - ], - "8": [ - [ - { - "id": "test" - }, - [ - [ - [ - [ - - ] - ] - ] - ] - ] - ], - "9": [ - "versions.yml:md5,3fc94714b95c2dc15399a4229d9dd1d9" - ], - "batch_summary": [ - [ - { - "id": "test" - }, - "test-bacteria_odb10-busco.batch_summary.txt:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "busco_dir": [ - [ - { - "id": "test" - }, - [ - [ - [ - [ - - ] - ] - ] - ] - ] - ], - "full_table": [ - - ], - "missing_busco_list": [ - - ], - "seq_dir": [ - [ - { - "id": "test" - }, - [ - - ] - ] - ], - "short_summaries_json": [ - - ], - "short_summaries_txt": [ - - ], - "single_copy_proteins": [ - - ], - "translated_dir": [ - - ], - "versions": [ - "versions.yml:md5,3fc94714b95c2dc15399a4229d9dd1d9" - ] - } - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-05-03T13:28:04.451297" - }, - "test_busco_eukaryote_augustus": { - "content": [ - "test-eukaryota_odb10-busco.batch_summary.txt:md5,3ea3bdc423a461dae514d816bdc61c89", - "versions.yml:md5,3fc94714b95c2dc15399a4229d9dd1d9" - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-05-03T13:26:36.974986" - }, - "test_busco_genome_single_fasta": { - "content": [ - "test-bacteria_odb10-busco.batch_summary.txt:md5,21b3fb771cf36be917cc451540d999be", - "full_table.tsv:md5,638fe7590f442c57361554dae330eca1", - "missing_busco_list.tsv:md5,1530af4fe7673a6d001349537bcd410a", - "versions.yml:md5,3fc94714b95c2dc15399a4229d9dd1d9" - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-05-03T13:22:45.07816" - }, - "test_busco_genome_multi_fasta": { - "content": [ - "test-bacteria_odb10-busco.batch_summary.txt:md5,fcd3c208913e8abda3d6742c43fec5fa", - [ - "full_table.tsv:md5,c657edcc7d0de0175869717551df6e83", - "full_table.tsv:md5,638fe7590f442c57361554dae330eca1" - ], - [ - "missing_busco_list.tsv:md5,aceb66e347a353cb7fca8e2a725f9112", - "missing_busco_list.tsv:md5,1530af4fe7673a6d001349537bcd410a" - ], - "versions.yml:md5,3fc94714b95c2dc15399a4229d9dd1d9" - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-05-03T13:23:50.255602" - }, - "test_busco_eukaryote_metaeuk": { - "content": [ - "test-eukaryota_odb10-busco.batch_summary.txt:md5,ff6d8277e452a83ce9456bbee666feb6", - "full_table.tsv:md5,92b1b1d5cb5ea0e2093d16f00187e8c7", - "missing_busco_list.tsv:md5,0352e563de290bf804c708323c35a9e3", - "versions.yml:md5,3fc94714b95c2dc15399a4229d9dd1d9" - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-05-03T13:25:38.159041" - }, - "test_busco_transcriptome": { - "content": [ - "test-bacteria_odb10-busco.batch_summary.txt:md5,8734b3f379c4c0928e5dd4ea1873dc64", - "full_table.tsv:md5,1b2ce808fdafa744c56b5f781551272d", - "missing_busco_list.tsv:md5,a6931b6470262b997b8b99ea0f1d14a4", - [ - "1024388at2.faa:md5,797d603d262a6595a112e25b73e878b0", - "1054741at2.faa:md5,cd4b928cba6b19b4437746ba507e7195", - "1093223at2.faa:md5,df9549708e5ffcfaee6a74dd70a0e5dc", - "1151822at2.faa:md5,12726afc1cdc40c13392e1596e93df3a", - "143460at2.faa:md5,d887431fd988a5556a523440f02d9594", - "1491686at2.faa:md5,d03362d19979b27306c192f1c74a84e5", - "1504821at2.faa:md5,4f5f6e5c57bac0092c1d85ded73d7e67", - "1574817at2.faa:md5,1153e55998c2929eacad2aed7d08d248", - "1592033at2.faa:md5,bb7a59e5f3a57ba12d10dabf4c77ab57", - "1623045at2.faa:md5,8fe38155feb1802beb97ef7714837bf5", - "1661836at2.faa:md5,6c6d592c2fbb0d7a4e5e1f47a15644f0", - "1674344at2.faa:md5,bb41b44e53565a54cadf0b780532fe08", - "1698718at2.faa:md5,f233860000028eb00329aa85236c71e5", - "1990650at2.faa:md5,34a2d29c5f8b6253159ddb7a43fa1829", - "223233at2.faa:md5,dec6705c7846c989296e73942f953cbc", - "402899at2.faa:md5,acc0f271f9a586d2ce1ee41669b22999", - "505485at2.faa:md5,aa0391f8fa5d9bd19b30d844d5a99845", - "665824at2.faa:md5,47f8ad43b6a6078206feb48c2e552793", - "776861at2.faa:md5,f8b90c13f7c6be828dea3bb920195e3d", - "874197at2.faa:md5,8d22a35a768debe6f376fc695d233a69", - "932854at2.faa:md5,2eff2de1ab83b22f3234a529a44e22bb", - "95696at2.faa:md5,247bfd1aef432f7b5456307768e9149c" - ], - "single_copy_proteins.faa:md5,73e2c5d6a9b0f01f2deea3cc5f21b764", - "versions.yml:md5,3fc94714b95c2dc15399a4229d9dd1d9" - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-05-03T13:27:53.992893" - }, - "test_busco_protein": { - "content": [ - "test-bacteria_odb10-busco.batch_summary.txt:md5,f5a782378f9f94a748aa907381fdef91", - "full_table.tsv:md5,812ab6a0496fccab774643cf40c4f2a8", - "missing_busco_list.tsv:md5,aceb66e347a353cb7fca8e2a725f9112", - "versions.yml:md5,3fc94714b95c2dc15399a4229d9dd1d9" - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-05-03T13:27:12.724862" - } -} \ No newline at end of file diff --git a/modules/gallvp/busco/busco/tests/nextflow.augustus.config b/modules/gallvp/busco/busco/tests/nextflow.augustus.config deleted file mode 100644 index 84daa69..0000000 --- a/modules/gallvp/busco/busco/tests/nextflow.augustus.config +++ /dev/null @@ -1,5 +0,0 @@ -process { - withName: 'BUSCO_BUSCO' { - ext.args = '--tar --augustus' - } -} diff --git a/modules/gallvp/busco/busco/tests/nextflow.config b/modules/gallvp/busco/busco/tests/nextflow.config deleted file mode 100644 index 1ec3fec..0000000 --- a/modules/gallvp/busco/busco/tests/nextflow.config +++ /dev/null @@ -1,5 +0,0 @@ -process { - withName: 'BUSCO_BUSCO' { - ext.args = '--tar' - } -} diff --git a/modules/gallvp/busco/busco/tests/nextflow.metaeuk.config b/modules/gallvp/busco/busco/tests/nextflow.metaeuk.config deleted file mode 100644 index c141844..0000000 --- a/modules/gallvp/busco/busco/tests/nextflow.metaeuk.config +++ /dev/null @@ -1,5 +0,0 @@ -process { - withName: 'BUSCO_BUSCO' { - ext.args = '--tar --metaeuk' - } -} diff --git a/modules/gallvp/busco/busco/tests/old_test.yml b/modules/gallvp/busco/busco/tests/old_test.yml deleted file mode 100644 index 75177f5..0000000 --- a/modules/gallvp/busco/busco/tests/old_test.yml +++ /dev/null @@ -1,624 +0,0 @@ -- name: busco test_busco_genome_single_fasta - command: nextflow run ./tests/modules/nf-core/busco -entry test_busco_genome_single_fasta -c ./tests/config/nextflow.config - tags: - - busco - files: - - path: output/busco/short_summary.specific.bacteria_odb10.genome.fna.json - contains: - - "one_line_summary" - - "mode" - - "dataset" - - path: output/busco/short_summary.specific.bacteria_odb10.genome.fna.txt - contains: - - "BUSCO version" - - "The lineage dataset is" - - "BUSCO was run in mode" - - "Complete BUSCOs" - - "Missing BUSCOs" - - "Dependencies and versions" - - path: output/busco/test-bacteria_odb10-busco.batch_summary.txt - md5sum: bc2440f8a68d7fbf931ff911c1c3fdfa - - path: output/busco/test-bacteria_odb10-busco/genome.fna/logs/bbtools_err.log - - path: output/busco/test-bacteria_odb10-busco/genome.fna/logs/bbtools_out.log - md5sum: 9caf1a1434414c78562eb0bbb9c0e53f - - path: output/busco/test-bacteria_odb10-busco/genome.fna/logs/hmmsearch_err.log - - path: output/busco/test-bacteria_odb10-busco/genome.fna/logs/hmmsearch_out.log - contains: - - "# hmmsearch :: search profile(s) against a sequence database" - - "# target sequence database:" - - "Internal pipeline statistics summary:" - - "[ok]" - - path: output/busco/test-bacteria_odb10-busco/genome.fna/logs/prodigal_err.log - md5sum: 538510cfc7483498210f01e53fe035ad - - path: output/busco/test-bacteria_odb10-busco/genome.fna/logs/prodigal_out.log - md5sum: 61050b0706addc9498b2088a2d6efa9a - - path: output/busco/test-bacteria_odb10-busco/genome.fna/prodigal_output/.checkpoint - contains: - - "Tool: prodigal" - - "Completed" - - "jobs" - - path: output/busco/test-bacteria_odb10-busco/genome.fna/prodigal_output/predicted_genes/predicted.faa - md5sum: 836e9a80d33d8b89168f07ddc13ee991 - - path: output/busco/test-bacteria_odb10-busco/genome.fna/prodigal_output/predicted_genes/predicted.fna - md5sum: 20eeb75f86842e6e136f02bca8b73a9f - - path: output/busco/test-bacteria_odb10-busco/genome.fna/prodigal_output/predicted_genes/tmp/prodigal_mode_single_code_11.faa - md5sum: 836e9a80d33d8b89168f07ddc13ee991 - - path: output/busco/test-bacteria_odb10-busco/genome.fna/prodigal_output/predicted_genes/tmp/prodigal_mode_single_code_11.fna - md5sum: 20eeb75f86842e6e136f02bca8b73a9f - - path: output/busco/test-bacteria_odb10-busco/genome.fna/prodigal_output/predicted_genes/tmp/prodigal_mode_single_code_11_err.log - md5sum: 538510cfc7483498210f01e53fe035ad - - path: output/busco/test-bacteria_odb10-busco/genome.fna/prodigal_output/predicted_genes/tmp/prodigal_mode_single_code_11_out.log - md5sum: 61050b0706addc9498b2088a2d6efa9a - - path: output/busco/test-bacteria_odb10-busco/genome.fna/run_bacteria_odb10/.bbtools_output/.checkpoint - contains: - - "Tool: bbtools" - - "Completed" - - "jobs" - - path: output/busco/test-bacteria_odb10-busco/genome.fna/run_bacteria_odb10/busco_sequences/fragmented_busco_sequences.tar.gz - - path: output/busco/test-bacteria_odb10-busco/genome.fna/run_bacteria_odb10/busco_sequences/multi_copy_busco_sequences.tar.gz - - path: output/busco/test-bacteria_odb10-busco/genome.fna/run_bacteria_odb10/busco_sequences/single_copy_busco_sequences.tar.gz - - path: output/busco/test-bacteria_odb10-busco/genome.fna/run_bacteria_odb10/full_table.tsv - md5sum: c56edab1dc1522e993c25ae2b730799f - - path: output/busco/test-bacteria_odb10-busco/genome.fna/run_bacteria_odb10/hmmer_output.tar.gz - - path: output/busco/test-bacteria_odb10-busco/genome.fna/run_bacteria_odb10/missing_busco_list.tsv - md5sum: b533ef30270f27160acce85a22d01bf5 - - path: output/busco/test-bacteria_odb10-busco/genome.fna/run_bacteria_odb10/short_summary.json - contains: - - "one_line_summary" - - "mode" - - "lineage_dataset" - - path: output/busco/test-bacteria_odb10-busco/genome.fna/run_bacteria_odb10/short_summary.txt - contains: - - "# BUSCO version is:" - - "Results:" - - "busco:" - - path: output/busco/test-bacteria_odb10-busco/logs/busco.log - contains: - - "DEBUG:busco.run_BUSCO" - - "Results from dataset" - - "how to cite BUSCO" - - path: output/busco/versions.yml - -- name: busco test_busco_genome_multi_fasta - command: nextflow run ./tests/modules/nf-core/busco -entry test_busco_genome_multi_fasta -c ./tests/config/nextflow.config - tags: - - busco - files: - - path: output/busco/short_summary.specific.bacteria_odb10.genome.fasta.json - contains: - - "one_line_summary" - - "mode" - - "dataset" - - path: output/busco/short_summary.specific.bacteria_odb10.genome.fasta.txt - contains: - - "BUSCO version" - - "The lineage dataset is" - - "BUSCO was run in mode" - - "Complete BUSCOs" - - "Missing BUSCOs" - - "Dependencies and versions" - - path: output/busco/short_summary.specific.bacteria_odb10.genome.fna.json - contains: - - "one_line_summary" - - "mode" - - "dataset" - - path: output/busco/short_summary.specific.bacteria_odb10.genome.fna.txt - contains: - - "BUSCO version" - - "The lineage dataset is" - - "BUSCO was run in mode" - - "Complete BUSCOs" - - "Missing BUSCOs" - - "Dependencies and versions" - - path: output/busco/test-bacteria_odb10-busco.batch_summary.txt - md5sum: 8c64c1a28b086ef2ee444f99cbed5f7d - - path: output/busco/test-bacteria_odb10-busco/genome.fasta/logs/bbtools_err.log - - path: output/busco/test-bacteria_odb10-busco/genome.fasta/logs/bbtools_out.log - md5sum: 8f047bdb33264d22a83920bc2c63f29a - - path: output/busco/test-bacteria_odb10-busco/genome.fasta/logs/hmmsearch_err.log - - path: output/busco/test-bacteria_odb10-busco/genome.fasta/logs/hmmsearch_out.log - contains: - - "# hmmsearch :: search profile(s) against a sequence database" - - "# target sequence database:" - - "Internal pipeline statistics summary:" - - "[ok]" - - path: output/busco/test-bacteria_odb10-busco/genome.fasta/logs/prodigal_err.log - md5sum: c1fdc6977332f53dfe7f632733bb4585 - - path: output/busco/test-bacteria_odb10-busco/genome.fasta/logs/prodigal_out.log - md5sum: 50752acb1c5a20be886bfdfc06635bcb - - path: output/busco/test-bacteria_odb10-busco/genome.fasta/prodigal_output/.checkpoint - contains: - - "Tool: prodigal" - - "Completed" - - "jobs" - - path: output/busco/test-bacteria_odb10-busco/genome.fasta/prodigal_output/predicted_genes/predicted.faa - md5sum: 8166471fc5f08c82fd5643ab42327f9d - - path: output/busco/test-bacteria_odb10-busco/genome.fasta/prodigal_output/predicted_genes/predicted.fna - md5sum: ddc508a18f60e7f3314534df50cdf8ca - - path: output/busco/test-bacteria_odb10-busco/genome.fasta/prodigal_output/predicted_genes/tmp/prodigal_mode_single_code_11.faa - md5sum: 8166471fc5f08c82fd5643ab42327f9d - - path: output/busco/test-bacteria_odb10-busco/genome.fasta/prodigal_output/predicted_genes/tmp/prodigal_mode_single_code_11.fna - md5sum: ddc508a18f60e7f3314534df50cdf8ca - - path: output/busco/test-bacteria_odb10-busco/genome.fasta/prodigal_output/predicted_genes/tmp/prodigal_mode_single_code_11_err.log - md5sum: c1fdc6977332f53dfe7f632733bb4585 - - path: output/busco/test-bacteria_odb10-busco/genome.fasta/prodigal_output/predicted_genes/tmp/prodigal_mode_single_code_11_out.log - md5sum: 50752acb1c5a20be886bfdfc06635bcb - - path: output/busco/test-bacteria_odb10-busco/genome.fasta/prodigal_output/predicted_genes/tmp/prodigal_mode_single_code_4.faa - md5sum: e56fd59c38248dc21ac94355dca98121 - - path: output/busco/test-bacteria_odb10-busco/genome.fasta/prodigal_output/predicted_genes/tmp/prodigal_mode_single_code_4.fna - md5sum: b365f84bf99c68357952e0b98ed7ce42 - - path: output/busco/test-bacteria_odb10-busco/genome.fasta/prodigal_output/predicted_genes/tmp/prodigal_mode_single_code_4_err.log - md5sum: e5f14d7925ba14a0f9850542f3739894 - - path: output/busco/test-bacteria_odb10-busco/genome.fasta/prodigal_output/predicted_genes/tmp/prodigal_mode_single_code_4_out.log - md5sum: d41971bfc1b621d4ffd2633bc47017ea - - path: output/busco/test-bacteria_odb10-busco/genome.fasta/run_bacteria_odb10/.bbtools_output/.checkpoint - contains: - - "Tool: bbtools" - - "Completed" - - "jobs" - - path: output/busco/test-bacteria_odb10-busco/genome.fasta/run_bacteria_odb10/busco_sequences/fragmented_busco_sequences.tar.gz - - path: output/busco/test-bacteria_odb10-busco/genome.fasta/run_bacteria_odb10/busco_sequences/multi_copy_busco_sequences.tar.gz - - path: output/busco/test-bacteria_odb10-busco/genome.fasta/run_bacteria_odb10/busco_sequences/single_copy_busco_sequences.tar.gz - - path: output/busco/test-bacteria_odb10-busco/genome.fasta/run_bacteria_odb10/full_table.tsv - md5sum: c9651b88b10871abc260ee655898e828 - - path: output/busco/test-bacteria_odb10-busco/genome.fasta/run_bacteria_odb10/hmmer_output.tar.gz - - path: output/busco/test-bacteria_odb10-busco/genome.fasta/run_bacteria_odb10/missing_busco_list.tsv - md5sum: 9939309df2da5419de88c32d1435c779 - - path: output/busco/test-bacteria_odb10-busco/genome.fasta/run_bacteria_odb10/short_summary.json - contains: - - "one_line_summary" - - "mode" - - "dataset" - - path: output/busco/test-bacteria_odb10-busco/genome.fasta/run_bacteria_odb10/short_summary.txt - contains: - - "# BUSCO version is:" - - "Results:" - - "busco:" - - path: output/busco/test-bacteria_odb10-busco/genome.fna/logs/bbtools_err.log - - path: output/busco/test-bacteria_odb10-busco/genome.fna/logs/bbtools_out.log - md5sum: 9caf1a1434414c78562eb0bbb9c0e53f - - path: output/busco/test-bacteria_odb10-busco/genome.fna/logs/hmmsearch_err.log - - path: output/busco/test-bacteria_odb10-busco/genome.fna/logs/hmmsearch_out.log - contains: - - "# hmmsearch :: search profile(s) against a sequence database" - - "# target sequence database:" - - "Internal pipeline statistics summary:" - - "[ok]" - - path: output/busco/test-bacteria_odb10-busco/genome.fna/logs/prodigal_err.log - md5sum: 538510cfc7483498210f01e53fe035ad - - path: output/busco/test-bacteria_odb10-busco/genome.fna/logs/prodigal_out.log - md5sum: 61050b0706addc9498b2088a2d6efa9a - - path: output/busco/test-bacteria_odb10-busco/genome.fna/prodigal_output/.checkpoint - contains: - - "Tool: prodigal" - - "Completed" - - "jobs" - - path: output/busco/test-bacteria_odb10-busco/genome.fna/prodigal_output/predicted_genes/predicted.faa - md5sum: 836e9a80d33d8b89168f07ddc13ee991 - - path: output/busco/test-bacteria_odb10-busco/genome.fna/prodigal_output/predicted_genes/predicted.fna - md5sum: 20eeb75f86842e6e136f02bca8b73a9f - - path: output/busco/test-bacteria_odb10-busco/genome.fna/prodigal_output/predicted_genes/tmp/prodigal_mode_single_code_11.faa - md5sum: 836e9a80d33d8b89168f07ddc13ee991 - - path: output/busco/test-bacteria_odb10-busco/genome.fna/prodigal_output/predicted_genes/tmp/prodigal_mode_single_code_11.fna - md5sum: 20eeb75f86842e6e136f02bca8b73a9f - - path: output/busco/test-bacteria_odb10-busco/genome.fna/prodigal_output/predicted_genes/tmp/prodigal_mode_single_code_11_err.log - md5sum: 538510cfc7483498210f01e53fe035ad - - path: output/busco/test-bacteria_odb10-busco/genome.fna/prodigal_output/predicted_genes/tmp/prodigal_mode_single_code_11_out.log - md5sum: 61050b0706addc9498b2088a2d6efa9a - - path: output/busco/test-bacteria_odb10-busco/genome.fna/run_bacteria_odb10/.bbtools_output/.checkpoint - contains: - - "Tool: bbtools" - - "Completed" - - "jobs" - - path: output/busco/test-bacteria_odb10-busco/genome.fna/run_bacteria_odb10/busco_sequences/fragmented_busco_sequences.tar.gz - - path: output/busco/test-bacteria_odb10-busco/genome.fna/run_bacteria_odb10/busco_sequences/multi_copy_busco_sequences.tar.gz - - path: output/busco/test-bacteria_odb10-busco/genome.fna/run_bacteria_odb10/busco_sequences/single_copy_busco_sequences.tar.gz - - path: output/busco/test-bacteria_odb10-busco/genome.fna/run_bacteria_odb10/full_table.tsv - md5sum: c56edab1dc1522e993c25ae2b730799f - - path: output/busco/test-bacteria_odb10-busco/genome.fna/run_bacteria_odb10/hmmer_output.tar.gz - - path: output/busco/test-bacteria_odb10-busco/genome.fna/run_bacteria_odb10/missing_busco_list.tsv - md5sum: b533ef30270f27160acce85a22d01bf5 - - path: output/busco/test-bacteria_odb10-busco/genome.fna/run_bacteria_odb10/short_summary.json - contains: - - "one_line_summary" - - "mode" - - "dataset" - - path: output/busco/test-bacteria_odb10-busco/genome.fna/run_bacteria_odb10/short_summary.txt - contains: - - "# BUSCO version is:" - - "Results:" - - "busco:" - - path: output/busco/test-bacteria_odb10-busco/logs/busco.log - contains: - - "DEBUG:busco.run_BUSCO" - - "Results from dataset" - - "how to cite BUSCO" - - path: output/busco/versions.yml - -- name: busco test_busco_eukaryote_metaeuk - command: nextflow run ./tests/modules/nf-core/busco -entry test_busco_eukaryote_metaeuk -c ./tests/config/nextflow.config - tags: - - busco - files: - - path: output/busco/short_summary.specific.eukaryota_odb10.genome.fasta.json - contains: - - "one_line_summary" - - "mode" - - "dataset" - - path: output/busco/short_summary.specific.eukaryota_odb10.genome.fasta.txt - contains: - - "BUSCO version" - - "The lineage dataset is" - - "BUSCO was run in mode" - - "Complete BUSCOs" - - "Missing BUSCOs" - - "Dependencies and versions" - - path: output/busco/test-eukaryota_odb10-busco.batch_summary.txt - md5sum: ff6d8277e452a83ce9456bbee666feb6 - - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/logs/bbtools_err.log - - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/logs/bbtools_out.log - md5sum: e63debaa653f18f7405d936050abc093 - - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/logs/hmmsearch_err.log - - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/logs/hmmsearch_out.log - - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/logs/metaeuk_run1_err.log - - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/logs/metaeuk_run1_out.log - - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/logs/metaeuk_run2_err.log - - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/logs/metaeuk_run2_out.log - - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/.bbtools_output/.checkpoint - contains: - - "Tool: bbtools" - - "Completed" - - "jobs" - - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/busco_sequences/fragmented_busco_sequences.tar.gz - - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/busco_sequences/multi_copy_busco_sequences.tar.gz - - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/busco_sequences/single_copy_busco_sequences.tar.gz - - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/full_table.tsv - md5sum: bd880e90b9e5620a58943a3e0f9ff16b - - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/hmmer_output.tar.gz - - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/metaeuk_output/.checkpoint - contains: - - "Tool: metaeuk" - - "Completed" - - "jobs" - - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/metaeuk_output/combined_pred_proteins.fas - - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/metaeuk_output/initial_results/genome.fasta.codon.fas - - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/metaeuk_output/initial_results/genome.fasta.fas - - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/metaeuk_output/initial_results/genome.fasta.gff - - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/metaeuk_output/initial_results/genome.fasta.headersMap.tsv - - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/metaeuk_output/refseq_db_rerun.faa - md5sum: d80b8fa4cb5ed0d47d63d6aa93635bc2 - - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/metaeuk_output/rerun_results/genome.fasta.codon.fas - - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/metaeuk_output/rerun_results/genome.fasta.fas - - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/metaeuk_output/rerun_results/genome.fasta.gff - - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/metaeuk_output/rerun_results/genome.fasta.headersMap.tsv - - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/missing_busco_list.tsv - md5sum: 1e8e79c540fd2e69ba0d2659d9eb2988 - - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/short_summary.json - contains: - - "one_line_summary" - - "mode" - - "dataset" - - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/short_summary.txt - contains: - - "# BUSCO version is:" - - "Results:" - - "busco:" - - path: output/busco/test-eukaryota_odb10-busco/logs/busco.log - contains: - - "DEBUG:busco.run_BUSCO" - - "Results from dataset" - - "how to cite BUSCO" - - path: output/busco/versions.yml - -- name: busco test_busco_eukaryote_augustus - command: nextflow run ./tests/modules/nf-core/busco -entry test_busco_eukaryote_augustus -c ./tests/config/nextflow.config - tags: - - busco - files: - - path: output/busco/short_summary.specific.eukaryota_odb10.genome.fasta.json - contains: - - "one_line_summary" - - "mode" - - "dataset" - - path: output/busco/short_summary.specific.eukaryota_odb10.genome.fasta.txt - contains: - - "BUSCO version" - - "The lineage dataset is" - - "BUSCO was run in mode" - - "Complete BUSCOs" - - "Missing BUSCOs" - - "Dependencies and versions" - - path: output/busco/test-eukaryota_odb10-busco.batch_summary.txt - md5sum: ff6d8277e452a83ce9456bbee666feb6 - - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/logs/bbtools_err.log - - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/logs/bbtools_out.log - md5sum: e63debaa653f18f7405d936050abc093 - - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/logs/hmmsearch_err.log - - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/logs/hmmsearch_out.log - - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/logs/metaeuk_run1_err.log - - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/logs/metaeuk_run1_out.log - contains: - - "metaeuk" - - "easy-predict" - - "Compute score and coverage" - - "Time for processing:" - - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/logs/metaeuk_run2_err.log - - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/logs/metaeuk_run2_out.log - contains: - - "metaeuk" - - "easy-predict" - - "Compute score and coverage" - - "Time for processing:" - - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/.bbtools_output/.checkpoint - contains: - - "Tool: bbtools" - - "Completed" - - "jobs" - - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/busco_sequences/fragmented_busco_sequences.tar.gz - - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/busco_sequences/multi_copy_busco_sequences.tar.gz - - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/busco_sequences/single_copy_busco_sequences.tar.gz - - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/full_table.tsv - md5sum: bd880e90b9e5620a58943a3e0f9ff16b - - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/hmmer_output.tar.gz - - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/metaeuk_output/.checkpoint - contains: - - "Tool: metaeuk" - - "Completed" - - "jobs" - - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/metaeuk_output/combined_pred_proteins.fas - - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/metaeuk_output/initial_results/genome.fasta.codon.fas - - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/metaeuk_output/initial_results/genome.fasta.fas - - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/metaeuk_output/initial_results/genome.fasta.gff - - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/metaeuk_output/initial_results/genome.fasta.headersMap.tsv - - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/metaeuk_output/refseq_db_rerun.faa - md5sum: d80b8fa4cb5ed0d47d63d6aa93635bc2 - - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/metaeuk_output/rerun_results/genome.fasta.codon.fas - - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/metaeuk_output/rerun_results/genome.fasta.fas - - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/metaeuk_output/rerun_results/genome.fasta.gff - - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/metaeuk_output/rerun_results/genome.fasta.headersMap.tsv - - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/missing_busco_list.tsv - md5sum: 1e8e79c540fd2e69ba0d2659d9eb2988 - - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/short_summary.json - contains: - - "one_line_summary" - - "mode" - - "dataset" - - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/short_summary.txt - contains: - - "# BUSCO version is:" - - "Results:" - - "busco:" - - path: output/busco/test-eukaryota_odb10-busco/logs/busco.log - contains: - - "DEBUG:busco.run_BUSCO" - - "Results from dataset" - - "how to cite BUSCO" - - path: output/busco/versions.yml - -- name: busco test_busco_protein - command: nextflow run ./tests/modules/nf-core/busco -entry test_busco_protein -c ./tests/config/nextflow.config - tags: - - busco - files: - - path: output/busco/short_summary.specific.bacteria_odb10.proteome.fasta.json - contains: - - "one_line_summary" - - "mode" - - "dataset" - - path: output/busco/short_summary.specific.bacteria_odb10.proteome.fasta.txt - contains: - - "BUSCO version" - - "The lineage dataset is" - - "BUSCO was run in mode" - - "Complete BUSCOs" - - "Missing BUSCOs" - - "Dependencies and versions" - - path: output/busco/test-bacteria_odb10-busco.batch_summary.txt - md5sum: 7a65e6cbb6c56a2ea4e739ae0aa3297d - - path: output/busco/test-bacteria_odb10-busco/logs/busco.log - contains: - - "DEBUG:busco.run_BUSCO" - - "Results from dataset" - - "how to cite BUSCO" - - path: output/busco/test-bacteria_odb10-busco/proteome.fasta/logs/hmmsearch_err.log - - path: output/busco/test-bacteria_odb10-busco/proteome.fasta/logs/hmmsearch_out.log - contains: - - "# hmmsearch :: search profile(s) against a sequence database" - - "# target sequence database:" - - "Internal pipeline statistics summary:" - - "[ok]" - - path: output/busco/test-bacteria_odb10-busco/proteome.fasta/run_bacteria_odb10/busco_sequences/fragmented_busco_sequences.tar.gz - - path: output/busco/test-bacteria_odb10-busco/proteome.fasta/run_bacteria_odb10/busco_sequences/multi_copy_busco_sequences.tar.gz - - path: output/busco/test-bacteria_odb10-busco/proteome.fasta/run_bacteria_odb10/busco_sequences/single_copy_busco_sequences.tar.gz - - path: output/busco/test-bacteria_odb10-busco/proteome.fasta/run_bacteria_odb10/full_table.tsv - md5sum: 0e34f1011cd83ea1d5d5103ec62b8922 - - path: output/busco/test-bacteria_odb10-busco/proteome.fasta/run_bacteria_odb10/hmmer_output.tar.gz - - path: output/busco/test-bacteria_odb10-busco/proteome.fasta/run_bacteria_odb10/missing_busco_list.tsv - md5sum: 9939309df2da5419de88c32d1435c779 - - path: output/busco/test-bacteria_odb10-busco/proteome.fasta/run_bacteria_odb10/short_summary.json - contains: - - "one_line_summary" - - "mode" - - "dataset" - - path: output/busco/test-bacteria_odb10-busco/proteome.fasta/run_bacteria_odb10/short_summary.txt - contains: - - "# BUSCO version is:" - - "Results:" - - "busco:" - - path: output/busco/versions.yml - -- name: busco test_busco_transcriptome - command: nextflow run ./tests/modules/nf-core/busco -entry test_busco_transcriptome -c ./tests/config/nextflow.config - tags: - - busco - files: - - path: output/busco/short_summary.specific.bacteria_odb10.test1.contigs.fa.json - contains: - - "one_line_summary" - - "mode" - - "dataset" - - path: output/busco/short_summary.specific.bacteria_odb10.test1.contigs.fa.txt - contains: - - "BUSCO version" - - "The lineage dataset is" - - "BUSCO was run in mode" - - "Complete BUSCOs" - - "Missing BUSCOs" - - "Dependencies and versions" - - path: output/busco/test-bacteria_odb10-busco.batch_summary.txt - md5sum: 46118ecf60d1b87d22b96d80f4f03632 - - path: output/busco/test-bacteria_odb10-busco/logs/busco.log - contains: - - "DEBUG:busco.run_BUSCO" - - "Results from dataset" - - "how to cite BUSCO" - - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/blast_db/.checkpoint - contains: - - "Tool: makeblastdb" - - "Completed" - - "jobs" - - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/blast_db/test1.contigs.fa.ndb - md5sum: 3788c017fe5e6f0f58224e9cdd21822b - - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/blast_db/test1.contigs.fa.nhr - md5sum: 8ecd2ce392bb5e25ddbe1d85f879582e - - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/blast_db/test1.contigs.fa.nin - - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/blast_db/test1.contigs.fa.njs - - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/blast_db/test1.contigs.fa.not - md5sum: 0c340e376c7e85d19f82ec1a833e6a6e - - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/blast_db/test1.contigs.fa.nsq - md5sum: 532d5c0a7ea00fe95ca3c97cb3be6198 - - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/blast_db/test1.contigs.fa.ntf - md5sum: de1250813f0c7affc6d12dac9d0fb6bb - - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/blast_db/test1.contigs.fa.nto - md5sum: ff74bd41f9cc9b011c63a32c4f7693bf - - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/logs/hmmsearch_err.log - - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/logs/hmmsearch_out.log - contains: - - "# hmmsearch :: search profile(s) against a sequence database" - - "# target sequence database:" - - "Internal pipeline statistics summary:" - - "[ok]" - - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/logs/makeblastdb_err.log - - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/logs/makeblastdb_out.log - contains: - - "Building a new DB" - - "Adding sequences from FASTA" - - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/logs/tblastn_err.log - - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/logs/tblastn_out.log - - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/blast_output/.checkpoint - contains: - - "Tool: tblastn" - - "Completed" - - "jobs" - - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/blast_output/coordinates.tsv - md5sum: cc30eed321944af293452bdbcfc24292 - - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/blast_output/sequences/k141_101.temp - md5sum: 73e9c65fc83fedc58f57f09b08f08238 - - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/blast_output/sequences/k141_119.temp - md5sum: 7fa4cc7955ec0cc36330a221c579b975 - - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/blast_output/sequences/k141_129.temp - md5sum: 6f1601c875d019e3f6f1f98ed8e988d4 - - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/blast_output/sequences/k141_138.temp - md5sum: 3f8e034686cd240c2330650d791bcae2 - - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/blast_output/sequences/k141_143.temp - md5sum: df3dfa8e9ba30ed70cf75b5e7abf2179 - - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/blast_output/sequences/k141_172.temp - md5sum: 7d463e0e6cf7169bc9077d8dc776dda1 - - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/blast_output/sequences/k141_178.temp - md5sum: 2288edf7fa4f88f51b4cf4d94086f77e - - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/blast_output/sequences/k141_188.temp - md5sum: 029906abbad6d87fc57830dd548cac24 - - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/blast_output/sequences/k141_195.temp - md5sum: 4937f3b348774a31b1160a00297c29cc - - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/blast_output/sequences/k141_210.temp - md5sum: afcb20ba4c466479d6b91c8c62251e1f - - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/blast_output/sequences/k141_232.temp - md5sum: 2e1e823ce017345bd998191a39fa9924 - - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/blast_output/sequences/k141_268.temp - md5sum: 08c2d82c34ecffbe1c638b410349412e - - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/blast_output/sequences/k141_29.temp - md5sum: cd9b63cf93524284781535c888313764 - - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/blast_output/sequences/k141_44.temp - md5sum: d1929b742b24ebe379bf4801ca882dca - - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/blast_output/sequences/k141_58.temp - md5sum: 69215765b010c05336538cb322c900b3 - - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/blast_output/sequences/k141_72.temp - md5sum: 6feaa1cc3b0899a147ea9d466878f3e3 - - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/blast_output/sequences/k141_80.temp - md5sum: 13625eae14e860a96ce17cd4e37e9d01 - - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/blast_output/sequences/k141_81.temp - md5sum: e14b2484649b0dbc8926815c207b806d - - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/blast_output/sequences/k141_93.temp - md5sum: 6902c93691df00e690faea914c71839e - - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/blast_output/sequences/k141_97.temp - md5sum: 0a0d9d38a83acbd5ad43c29cdf429988 - - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/blast_output/tblastn.tsv - contains: - - "TBLASTN" - - "BLAST processed" - - "queries" - - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/busco_sequences/fragmented_busco_sequences.tar.gz - - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/busco_sequences/multi_copy_busco_sequences.tar.gz - - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/busco_sequences/single_copy_busco_sequences.tar.gz - - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/full_table.tsv - md5sum: 24df25199e13c88bd892fc3e7b541ca0 - - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/hmmer_output.tar.gz - - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/missing_busco_list.tsv - md5sum: e7232e2b8cca4fdfdd9e363b39ebbc81 - - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/short_summary.json - contains: - - "one_line_summary" - - "mode" - - "dataset" - - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/short_summary.txt - contains: - - "# BUSCO version is:" - - "Results:" - - "busco:" - - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/single_copy_proteins.faa - md5sum: e04b9465733577ae6e4bccb7aa01e720 - - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/translated_proteins/1024388at2.faa - md5sum: 7333c39a20258f20c7019ea0cd83157c - - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/translated_proteins/1054741at2.faa - md5sum: ebb481e77a824685fbe04d8a2f3a0d7d - - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/translated_proteins/1093223at2.faa - md5sum: 34621c7d499034e8f8e6b92fd4020a93 - - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/translated_proteins/1151822at2.faa - md5sum: aa89ca381c1c70c9c4e1380351ca7c2a - - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/translated_proteins/143460at2.faa - md5sum: f2e91d78b8dd3722840378789f29e8c8 - - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/translated_proteins/1491686at2.faa - md5sum: 73c25aef5c9cba7f4151804941b146ea - - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/translated_proteins/1504821at2.faa - md5sum: cda556018d1f84ebe517e89f6fc107d0 - - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/translated_proteins/1574817at2.faa - md5sum: a9096c9fb8b25c78a72871ab0463acdc - - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/translated_proteins/1592033at2.faa - md5sum: e463d25ce186c0cebfd749474f3a4c64 - - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/translated_proteins/1623045at2.faa - md5sum: f2cfd241590c6d8377286d6135480937 - - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/translated_proteins/1661836at2.faa - md5sum: 586569546fb9861502468e3d9ba2775c - - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/translated_proteins/1674344at2.faa - md5sum: 24c658bee14ad84b062d81ad96642eb8 - - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/translated_proteins/1698718at2.faa - md5sum: 0b8e26ddf5149bbd8805be7af125208d - - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/translated_proteins/1990650at2.faa - md5sum: 159320712ee01fb2ccb31a25df44eead - - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/translated_proteins/223233at2.faa - md5sum: 812629c0b06ac3d18661c2ca78de0c08 - - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/translated_proteins/402899at2.faa - md5sum: f7ff4e1591342d30b77392a2e84b57d9 - - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/translated_proteins/505485at2.faa - md5sum: 7b34a24fc49c540d46fcf96ff5129564 - - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/translated_proteins/665824at2.faa - md5sum: 4cff2df64f6bcaff8bc19c234c8bcccd - - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/translated_proteins/776861at2.faa - md5sum: 613af7a3fea30ea2bece66f603b9284a - - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/translated_proteins/874197at2.faa - md5sum: a7cd1b13c9ef91c7ef4e31614166f197 - - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/translated_proteins/932854at2.faa - md5sum: fe313ffd5efdb0fed887a04fba352552 - - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/translated_proteins/95696at2.faa - md5sum: 4e1f30a2fea4dfbf9bb7fae2700622a0 - - path: output/busco/versions.yml diff --git a/modules/gallvp/busco/busco/tests/tags.yml b/modules/gallvp/busco/busco/tests/tags.yml deleted file mode 100644 index 7c4d283..0000000 --- a/modules/gallvp/busco/busco/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -busco/busco: - - "modules/nf-core/busco/busco/**" diff --git a/modules/gallvp/busco/generateplot/environment.yml b/modules/gallvp/busco/generateplot/environment.yml deleted file mode 100644 index 1ca5bab..0000000 --- a/modules/gallvp/busco/generateplot/environment.yml +++ /dev/null @@ -1,9 +0,0 @@ ---- -# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json -name: "busco_generateplot" -channels: - - conda-forge - - bioconda - - defaults -dependencies: - - bioconda::busco=5.7.1 diff --git a/modules/gallvp/busco/generateplot/main.nf b/modules/gallvp/busco/generateplot/main.nf deleted file mode 100644 index 6a4b339..0000000 --- a/modules/gallvp/busco/generateplot/main.nf +++ /dev/null @@ -1,45 +0,0 @@ -process BUSCO_GENERATEPLOT { - label 'process_single' - - conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/busco:5.7.1--pyhdfd78af_0': - 'biocontainers/busco:5.7.1--pyhdfd78af_0' }" - - input: - path short_summary_txt, stageAs: 'busco/*' - - output: - path '*.png' , emit: png - path "versions.yml" , emit: versions - - when: - task.ext.when == null || task.ext.when - - script: - def args = task.ext.args ?: '' - def prefix = task.ext.prefix ?: 'busco_figure' - """ - generate_plot.py \\ - $args \\ - -wd busco - - mv ./busco/busco_figure.png ${prefix}.png - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - busco: \$( busco --version 2>&1 | sed 's/^BUSCO //' ) - END_VERSIONS - """ - - stub: - def prefix = task.ext.prefix ?: 'busco_figure' - """ - touch ${prefix}.png - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - busco: \$( busco --version 2>&1 | sed 's/^BUSCO //' ) - END_VERSIONS - """ -} diff --git a/modules/gallvp/busco/generateplot/meta.yml b/modules/gallvp/busco/generateplot/meta.yml deleted file mode 100644 index 796f32b..0000000 --- a/modules/gallvp/busco/generateplot/meta.yml +++ /dev/null @@ -1,35 +0,0 @@ -name: "busco_generateplot" -description: BUSCO plot generation tool -keywords: - - genome - - fasta - - annotation - - busco - - transcriptome - - quality control -tools: - - busco: - description: BUSCO provides measures for quantitative assessment of genome assembly, gene set, and transcriptome completeness based on evolutionarily informed expectations of gene content from near-universal single-copy orthologs selected from OrthoDB. - homepage: https://busco.ezlab.org/ - documentation: https://busco.ezlab.org/busco_userguide.html - tool_dev_url: https://gitlab.com/ezlab/busco - doi: "10.1007/978-1-4939-9173-0_14" - licence: ["MIT"] -input: - - short_summary_txt: - type: file - description: One or more short summary txt files from BUSCO - pattern: "short_summary.*.txt" -output: - - png: - type: file - description: A summary plot in png format - pattern: "*.png" - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" -authors: - - "@GallVp" -maintainers: - - "@GallVp" diff --git a/modules/gallvp/busco/generateplot/tests/main.nf.test b/modules/gallvp/busco/generateplot/tests/main.nf.test deleted file mode 100644 index 6a43fa7..0000000 --- a/modules/gallvp/busco/generateplot/tests/main.nf.test +++ /dev/null @@ -1,72 +0,0 @@ -nextflow_process { - - name "Test Process BUSCO_GENERATEPLOT" - script "../main.nf" - process "BUSCO_GENERATEPLOT" - - tag "modules" - tag "modules_gallvp" - tag "busco" - tag "busco/busco" - tag "busco/generateplot" - - test("bacteroides_fragilis-genome_fna_gz") { - - setup { - run("BUSCO_BUSCO") { - script "../../busco" - process { - """ - input[0] = [ - [ id:'test' ], // meta map - file(params.modules_testdata_base_path + 'genomics/prokaryotes/bacteroides_fragilis/genome/genome.fna.gz', checkIfExists: true) - ] - input[1] = 'genome' - input[2] = 'bacteria_odb10' - input[3] = [] - input[4] = [] - """ - } - } - } - - when { - process { - """ - input[0] = BUSCO_BUSCO.out.short_summaries_txt.map { meta, summary -> summary } - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(process.out.versions).match("versions") }, - { assert process.out.png != null } // PNGs with same data but different meta-data. Not sure how to get around this, yet! - ) - } - - } - - test("stub") { - - options "-stub" - - when { - process { - """ - input[0] = file(params.modules_testdata_base_path + 'genomics/prokaryotes/bacteroides_fragilis/genome/genome.fna.gz', checkIfExists: true) - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(process.out).match() } - ) - } - - } - -} \ No newline at end of file diff --git a/modules/gallvp/busco/generateplot/tests/main.nf.test.snap b/modules/gallvp/busco/generateplot/tests/main.nf.test.snap deleted file mode 100644 index d9773ec..0000000 --- a/modules/gallvp/busco/generateplot/tests/main.nf.test.snap +++ /dev/null @@ -1,37 +0,0 @@ -{ - "versions": { - "content": [ - [ - "versions.yml:md5,726fa3440ea3a0b2e9d032d7e4d25e74" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-05-03T15:40:01.523993" - }, - "stub": { - "content": [ - { - "0": [ - "busco_figure.png:md5,d41d8cd98f00b204e9800998ecf8427e" - ], - "1": [ - "versions.yml:md5,726fa3440ea3a0b2e9d032d7e4d25e74" - ], - "png": [ - "busco_figure.png:md5,d41d8cd98f00b204e9800998ecf8427e" - ], - "versions": [ - "versions.yml:md5,726fa3440ea3a0b2e9d032d7e4d25e74" - ] - } - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-05-03T15:40:11.864276" - } -} \ No newline at end of file diff --git a/modules/gallvp/busco/generateplot/tests/tags.yml b/modules/gallvp/busco/generateplot/tests/tags.yml deleted file mode 100644 index b6548a6..0000000 --- a/modules/gallvp/busco/generateplot/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -busco/generateplot: - - "modules/nf-core/busco/generateplot/**" diff --git a/modules/gallvp/custom/restoregffids/environment.yml b/modules/gallvp/custom/restoregffids/environment.yml deleted file mode 100644 index 2450c45..0000000 --- a/modules/gallvp/custom/restoregffids/environment.yml +++ /dev/null @@ -1,9 +0,0 @@ ---- -# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json -name: "custom_restoregffids" -channels: - - conda-forge - - bioconda - - defaults -dependencies: - - "python=3.10.2" diff --git a/modules/gallvp/custom/restoregffids/main.nf b/modules/gallvp/custom/restoregffids/main.nf deleted file mode 100644 index 14e2c07..0000000 --- a/modules/gallvp/custom/restoregffids/main.nf +++ /dev/null @@ -1,35 +0,0 @@ -process CUSTOM_RESTOREGFFIDS { - tag "$meta.id" - label 'process_single' - - conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/python:3.10.2': - 'biocontainers/python:3.10.2' }" - - input: - tuple val(meta), path(gff3) - path(ids_tsv) - - output: - tuple val(meta), path("*.restored.ids.gff3") , emit: restored_ids_gff3 - path "versions.yml" , emit: versions - - when: - task.ext.when == null || task.ext.when - - script: - prefix = task.ext.prefix ?: "${meta.id}" - template 'restore_gff_ids.py' - - stub: - def prefix = task.ext.prefix ?: "${meta.id}" - """ - touch "${prefix}.restored.ids.gff3" - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - python: \$(python --version | cut -d' ' -f2) - END_VERSIONS - """ -} diff --git a/modules/gallvp/custom/restoregffids/meta.yml b/modules/gallvp/custom/restoregffids/meta.yml deleted file mode 100644 index 4e42b82..0000000 --- a/modules/gallvp/custom/restoregffids/meta.yml +++ /dev/null @@ -1,58 +0,0 @@ ---- -# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/meta-schema.json -name: "custom_restoregffids" -description: | - Restores IDs in a gff3 file based on a TSV table - consisting of original (first column) and new IDs (second column). - This module is helpful when some tools like EDTA implicitly shorten - the IDs without producing the ID map, leading to downstream mismatch - in IDs across files. -keywords: - - genome - - gff - - ID - - shorten - - restore -tools: - - "python": - description: | - Python is a programming language that lets you work quickly - and integrate systems more effectively - homepage: "https://www.python.org" - documentation: "https://docs.python.org/3/" - tool_dev_url: "https://github.com/python/cpython" - licence: ["MIT"] -input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. `[ id:'test' ]` - - gff3: - type: file - description: Input gff3 file - pattern: "*.{gff,gff3}" - - ids_tsv: - type: file - description: | - A TSV file with original (first column) and new ids (second column) - if id change was required - pattern: "*.tsv" -output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. `[ id:'test' ]` - - restored_ids_gff3: - type: file - description: GFF3 file with restored ids - pattern: "*.restored.ids.gff3" - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" -authors: - - "@GallVp" -maintainers: - - "@GallVp" diff --git a/modules/gallvp/custom/restoregffids/templates/restore_gff_ids.py b/modules/gallvp/custom/restoregffids/templates/restore_gff_ids.py deleted file mode 100755 index 2bde7ab..0000000 --- a/modules/gallvp/custom/restoregffids/templates/restore_gff_ids.py +++ /dev/null @@ -1,47 +0,0 @@ -#!/usr/bin/env python3 - -from platform import python_version - -ids_tsv = "$ids_tsv" -input_gff3 = "$gff3" -output_prefix = "$prefix" - - -def create_name_mapping_from_tsv(file_path): - dictionary = {} - - with open(file_path) as tsv_file: - for line in tsv_file: - columns = line.strip().split("\\t") - if len(columns) != 2: - raise ValueError(f"{file_path} should be a two column TSV file") - - orig_id, new_id = columns[0], columns[1] - dictionary[new_id] = orig_id - - return dictionary - - -def restore_gff3_ids(new_to_orig_ids, file_path, output_file_name): - # Write versions - with open("versions.yml", "w") as f_versions: - f_versions.write('"${task.process}":\\n') - f_versions.write(f" python: {python_version()}\\n") - - with open(file_path) as input_gff3_file: - input_lines = input_gff3_file.readlines() - - with open(output_file_name, "w") as output_gff_file: - for line in input_lines: - if line.startswith("##"): - output_gff_file.write(line) - continue - - new_id = line.split("\\t")[0] - orig_id = new_to_orig_ids[new_id] - output_gff_file.write("\\t".join([orig_id] + line.split("\\t")[1:])) - - -if __name__ == "__main__": - new_to_orig_ids = create_name_mapping_from_tsv(ids_tsv) - restore_gff3_ids(new_to_orig_ids, input_gff3, f"{output_prefix}.restored.ids.gff3") diff --git a/modules/gallvp/custom/restoregffids/tests/main.nf.test b/modules/gallvp/custom/restoregffids/tests/main.nf.test deleted file mode 100644 index 2c248c9..0000000 --- a/modules/gallvp/custom/restoregffids/tests/main.nf.test +++ /dev/null @@ -1,63 +0,0 @@ -nextflow_process { - - name "Test Process CUSTOM_RESTOREGFFIDS" - script "../main.nf" - process "CUSTOM_RESTOREGFFIDS" - - tag "modules" - tag "modules_gallvp" - tag "custom" - tag "custom/restoregffids" - - test("sarscov2-genome_gff3-success") { - when { - process { - """ - input[0] = [ - [ id:'test', single_end:false ], // meta map - file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.gff3', checkIfExists: true) - ] - input[1] = Channel.of('Chr1\tMT192765.1').collectFile(name: 'id_map.tsv', newLine: true) - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(process.out).match() }, - { assert path(process.out.restored_ids_gff3.get(0).get(1)).getText().contains("Chr1") }, - { assert !path(process.out.restored_ids_gff3.get(0).get(1)).getText().contains("MT192765.1") }, - { assert snapshot(process.out.versions).match("versions") } - ) - } - - } - - test("stub") { - - options '-stub' - - when { - process { - """ - input[0] = [ - [ id:'test', single_end:false ], // meta map - file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.gff3', checkIfExists: true) - ] - input[1] = Channel.of('Chr1\tMT192765.1').collectFile(name: 'id_map.tsv', newLine: true) - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert process.out.restored_ids_gff3 != null }, - { assert snapshot(process.out.versions).match("versions_stub") } - ) - } - - } - -} \ No newline at end of file diff --git a/modules/gallvp/custom/restoregffids/tests/main.nf.test.snap b/modules/gallvp/custom/restoregffids/tests/main.nf.test.snap deleted file mode 100644 index ebe850a..0000000 --- a/modules/gallvp/custom/restoregffids/tests/main.nf.test.snap +++ /dev/null @@ -1,61 +0,0 @@ -{ - "sarscov2-genome_gff3-success": { - "content": [ - { - "0": [ - [ - { - "id": "test", - "single_end": false - }, - "test.restored.ids.gff3:md5,2c294938b9eb4e52d19e14725c1d92a9" - ] - ], - "1": [ - "versions.yml:md5,32d31c4f1da9a3d1be013fd163e5867e" - ], - "restored_ids_gff3": [ - [ - { - "id": "test", - "single_end": false - }, - "test.restored.ids.gff3:md5,2c294938b9eb4e52d19e14725c1d92a9" - ] - ], - "versions": [ - "versions.yml:md5,32d31c4f1da9a3d1be013fd163e5867e" - ] - } - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2023-12-07T13:49:30.047425" - }, - "versions_stub": { - "content": [ - [ - "versions.yml:md5,32d31c4f1da9a3d1be013fd163e5867e" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-05-10T15:26:11.66528" - }, - "versions": { - "content": [ - [ - "versions.yml:md5,32d31c4f1da9a3d1be013fd163e5867e" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2023-12-07T13:49:30.071175" - } -} \ No newline at end of file diff --git a/modules/gallvp/custom/shortenfastaids/environment.yml b/modules/gallvp/custom/shortenfastaids/environment.yml deleted file mode 100644 index a64758c..0000000 --- a/modules/gallvp/custom/shortenfastaids/environment.yml +++ /dev/null @@ -1,11 +0,0 @@ ---- -# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json -name: "custom_shortenfastaids" -channels: - - conda-forge - - bioconda - - defaults - -dependencies: - - biopython==1.75 - - python==3.8.13 diff --git a/modules/gallvp/custom/shortenfastaids/main.nf b/modules/gallvp/custom/shortenfastaids/main.nf deleted file mode 100644 index 3cdaa07..0000000 --- a/modules/gallvp/custom/shortenfastaids/main.nf +++ /dev/null @@ -1,38 +0,0 @@ -process CUSTOM_SHORTENFASTAIDS { - tag "$meta.id" - label 'process_single' - - conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/biopython:1.75': - 'biocontainers/biopython:1.75' }" - - input: - tuple val(meta), path(fasta) - - output: - tuple val(meta), path("*.short.ids.fasta") , emit: short_ids_fasta , optional: true - tuple val(meta), path("*.short.ids.tsv") , emit: short_ids_tsv - path "versions.yml" , emit: versions - - when: - task.ext.when == null || task.ext.when - - script: - prefix = task.ext.prefix ?: "${meta.id}" - template 'shorten_fasta_ids.py' - - stub: - def prefix = task.ext.prefix ?: "${meta.id}" - """ - echo \\ - 'IDs have acceptable length and character. No change required.' \\ - > ${meta.id}.short.ids.tsv - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - python: \$(python --version | cut -d' ' -f2) - biopython: \$(pip list | grep "biopython" | cut -d' ' -f3) - END_VERSIONS - """ -} diff --git a/modules/gallvp/custom/shortenfastaids/meta.yml b/modules/gallvp/custom/shortenfastaids/meta.yml deleted file mode 100644 index 2425810..0000000 --- a/modules/gallvp/custom/shortenfastaids/meta.yml +++ /dev/null @@ -1,58 +0,0 @@ ---- -# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/meta-schema.json -name: "custom_shortenfastaids" -description: | - Shortens fasta IDs and produces a new fasta along with a TSV table - consisting of original (first column) and new IDs (second column). - This module is helpful when some tools like EDTA implicitly shorten - the IDs without producing the ID map, leading to downstream mismatch - in IDs across files. -keywords: - - genome - - fasta - - ID - - shorten -tools: - - "biopython": - description: | - Biopython is a set of freely available tools for biological computation written in Python by - an international team of developers. - homepage: "https://biopython.org" - documentation: "https://biopython.org/wiki/Documentation" - tool_dev_url: "https://github.com/biopython/biopython" - doi: "10.1093/bioinformatics/btp163" - licence: ["MIT"] -input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. `[ id:'test' ]` - - fasta: - type: file - description: Input fasta file - pattern: "*.{fsa,fa,fasta}" -output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. `[ id:'test' ]` - - short_ids_fasta: - type: file - description: Fasta file with shortened ids if id change is required - pattern: "*.{fsa,fa,fasta}" - - short_ids_tsv: - type: file - description: | - A TSV file with original (first column) and new ids (second column) - if id change is required - pattern: "*.tsv" - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" -authors: - - "@GallVp" -maintainers: - - "@GallVp" diff --git a/modules/gallvp/custom/shortenfastaids/templates/shorten_fasta_ids.py b/modules/gallvp/custom/shortenfastaids/templates/shorten_fasta_ids.py deleted file mode 100755 index 9d9c6e1..0000000 --- a/modules/gallvp/custom/shortenfastaids/templates/shorten_fasta_ids.py +++ /dev/null @@ -1,168 +0,0 @@ -#!/usr/bin/env python3 - -import re -from importlib.metadata import version -from platform import python_version - -from Bio import SeqIO - -# The input fasta file path -fasta_file_path = "$fasta" -output_files_prefix = "$prefix" - - -def extract_fasta_ids_and_descriptions(fasta_file_path): - fasta_file_obj = SeqIO.parse(fasta_file_path, "fasta") - - ids = [] - for record in fasta_file_obj: - ids.append((record.id, record.description)) - return ids - - -def write_fasta_with_new_ids(fasta_file_path, id_mapping, file_prefix): - old_fasta_file_obj = SeqIO.parse(fasta_file_path, "fasta") - id_map = dict(id_mapping) - - replaced_records = [] - for record in old_fasta_file_obj: - old_id = record.id - - new_id = id_map[old_id] - record.id = new_id - record.description = "" - - replaced_records.append(record) - - SeqIO.write(replaced_records, f"{file_prefix}.short.ids.fasta", "fasta") - - -def do_id_need_to_change(id_and_description, silent=False): - id = id_and_description[0] - description = id_and_description[1] - if len(id) > 13: - if not silent: - print(f"{id} has length greater than 13") - return True - - if not re.match(r"^[a-zA-Z0-9_]+\$", id): - if not silent: - print(f"{id} does not match '^[a-zA-Z0-9_]+\$'") - return True - - if description != id and description != "": - if not silent: - print(f"{id} contains a comment: {description.replace(id, '')}") - return True - - if not silent: - print(f"{id} is acceptable") - return False - - -def do_ids_need_to_change(ids_and_descriptions, silent=False): - return any([do_id_need_to_change(id_and_description, silent) for id_and_description in ids_and_descriptions]) - - -def extract_common_patterns(ids): - pattern_counts = {} - for id in ids: - patterns = re.findall(r"[A-Za-z0_]{4,}", id) - for pattern in set(patterns): - pattern_counts[pattern] = pattern_counts.get(pattern, 0) + 1 - - common_patterns = [pattern for pattern, count in pattern_counts.items() if count >= 2] - - if len(common_patterns) < 1: - return {} - - return {pattern: pattern[:3] for pattern in common_patterns} - - -def shorten_ids(input_ids_and_descriptions, patterns_dict): - shortened_ids = [] - - for id_and_description in input_ids_and_descriptions: - id = id_and_description[0] - description = "" # Treat description as absent as it will be removed by write_fasta_with_new_ids - if not do_id_need_to_change((id, description), silent=True): - shortened_ids.append(id) - continue - - shortened_id = shorten_id_by_pattern_replacement(patterns_dict, id) - - if not do_id_need_to_change((shortened_id, description), silent=True): - shortened_ids.append(shortened_id) - continue - - shortened_id = f"Ctg{generate_hash(id)}" - - if not do_id_need_to_change((shortened_id, description), silent=True): - shortened_ids.append(shortened_id) - continue - - raise ValueError(f"Failed to shorten id: {id} ({shortened_id})") - - return shortened_ids - - -def shorten_id_by_pattern_replacement(patterns_dict, id): - if patterns_dict == {}: - return id - - shortened_id = id - matches_for_id = match_substrings(patterns_dict.keys(), shortened_id) - - for pattern in matches_for_id: - shortened_id = re.sub( - rf"({re.escape(pattern)})", - patterns_dict[pattern], - shortened_id, - ) - return shortened_id if shortened_id[len(shortened_id) - 1] != "_" else shortened_id[0 : (len(shortened_id) - 1)] - - -def match_substrings(substrings, target_string): - pattern = "|".join(map(re.escape, substrings)) - matches = re.findall(pattern, target_string) - return matches - - -def generate_hash(string): - import hashlib - - hash_object = hashlib.sha1(string.encode()) - full_hash = hash_object.hexdigest() - short_hash = full_hash[:10] - return short_hash - - -def fail_if_new_ids_not_valid(ids): - if len(ids) != len(set(ids)): - raise ValueError("Th new IDs are not unique") - - -if __name__ == "__main__": - input_ids_and_descriptions = extract_fasta_ids_and_descriptions(fasta_file_path) - input_ids = [x[0] for x in input_ids_and_descriptions] - - # Write versions - with open("versions.yml", "w") as f_versions: - f_versions.write('"${task.process}":\\n') - f_versions.write(f" python: {python_version()}\\n") - f_versions.write(f" biopython: {version('biopython')}\\n") - - if not do_ids_need_to_change(input_ids_and_descriptions): - print("IDs have acceptable length and character. No change required.") - with open(f"{output_files_prefix}.short.ids.tsv", "w") as f: - f.write("IDs have acceptable length and character. No change required.") - exit(0) - - new_ids = shorten_ids(input_ids_and_descriptions, extract_common_patterns(input_ids)) - fail_if_new_ids_not_valid(new_ids) - - with open(f"{output_files_prefix}.short.ids.tsv", "w") as f: - for input_id, new_id in zip(input_ids, new_ids): - f.write(f"{input_id}\\t{new_id}\\n") - - write_fasta_with_new_ids(fasta_file_path, zip(input_ids, new_ids), output_files_prefix) diff --git a/modules/gallvp/custom/shortenfastaids/tests/main.nf.test b/modules/gallvp/custom/shortenfastaids/tests/main.nf.test deleted file mode 100644 index 8eb2099..0000000 --- a/modules/gallvp/custom/shortenfastaids/tests/main.nf.test +++ /dev/null @@ -1,123 +0,0 @@ -nextflow_process { - - name "Test Process CUSTOM_SHORTENFASTAIDS" - script "../main.nf" - process "CUSTOM_SHORTENFASTAIDS" - - tag "modules" - tag "modules_gallvp" - tag "custom" - tag "custom/shortenfastaids" - - test("homo_sapiens-genome_fasta-no_change") { - - when { - process { - """ - input[0] = [ - [ id:'test' ], - file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) - ] - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(process.out).match() } - ) - } - - } - - test("sarscov2-genome_fasta-pattern_change") { - - when { - process { - """ - input[0] = [ - [ id:'test' ], - file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) - ] - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(process.out).match() } - ) - } - - } - - test("homo_sapiens-genome2_fasta-length_change") { - - when { - process { - """ - input[0] = [ - [ id:'test' ], - file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome2.fasta', checkIfExists: true) - ] - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(process.out).match() } - ) - } - - } - - test("custom_fasta-comment_change") { - - when { - process { - """ - input[0] = Channel.of('>Chr1 This is a test comment', 'AGCTAGCT') - | collectFile(name: 'sample.fasta', newLine: true) - | map { file -> [ [ id:'test' ], file ] } - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(process.out).match() } - ) - } - - } - - test("stub") { - - options "-stub" - - when { - process { - """ - input[0] = [ - [ id:'test' ], - file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) - ] - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(process.out).match() } - ) - } - - } - -} \ No newline at end of file diff --git a/modules/gallvp/custom/shortenfastaids/tests/main.nf.test.snap b/modules/gallvp/custom/shortenfastaids/tests/main.nf.test.snap deleted file mode 100644 index 2506ebd..0000000 --- a/modules/gallvp/custom/shortenfastaids/tests/main.nf.test.snap +++ /dev/null @@ -1,227 +0,0 @@ -{ - "custom_fasta-comment_change": { - "content": [ - { - "0": [ - [ - { - "id": "test" - }, - "test.short.ids.fasta:md5,c861b9d46a4d9bdba66953cff572fc5d" - ] - ], - "1": [ - [ - { - "id": "test" - }, - "test.short.ids.tsv:md5,8762f2bffbdff75c2812bad72ba52bba" - ] - ], - "2": [ - "versions.yml:md5,e5704a53ebea373dac3a93ae800d48ba" - ], - "short_ids_fasta": [ - [ - { - "id": "test" - }, - "test.short.ids.fasta:md5,c861b9d46a4d9bdba66953cff572fc5d" - ] - ], - "short_ids_tsv": [ - [ - { - "id": "test" - }, - "test.short.ids.tsv:md5,8762f2bffbdff75c2812bad72ba52bba" - ] - ], - "versions": [ - "versions.yml:md5,e5704a53ebea373dac3a93ae800d48ba" - ] - } - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2023-12-07T13:33:05.523745" - }, - "stub": { - "content": [ - { - "0": [ - - ], - "1": [ - [ - { - "id": "test" - }, - "test.short.ids.tsv:md5,fcf920d9a7b57a1e3c29a9e88673330f" - ] - ], - "2": [ - "versions.yml:md5,e5704a53ebea373dac3a93ae800d48ba" - ], - "short_ids_fasta": [ - - ], - "short_ids_tsv": [ - [ - { - "id": "test" - }, - "test.short.ids.tsv:md5,fcf920d9a7b57a1e3c29a9e88673330f" - ] - ], - "versions": [ - "versions.yml:md5,e5704a53ebea373dac3a93ae800d48ba" - ] - } - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" - }, - "timestamp": "2024-06-04T13:58:30.161542" - }, - "homo_sapiens-genome_fasta-no_change": { - "content": [ - { - "0": [ - - ], - "1": [ - [ - { - "id": "test" - }, - "test.short.ids.tsv:md5,642382addc4beba37088b1ebe09d38cf" - ] - ], - "2": [ - "versions.yml:md5,e5704a53ebea373dac3a93ae800d48ba" - ], - "short_ids_fasta": [ - - ], - "short_ids_tsv": [ - [ - { - "id": "test" - }, - "test.short.ids.tsv:md5,642382addc4beba37088b1ebe09d38cf" - ] - ], - "versions": [ - "versions.yml:md5,e5704a53ebea373dac3a93ae800d48ba" - ] - } - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.1" - }, - "timestamp": "2024-06-02T20:54:17.945233" - }, - "homo_sapiens-genome2_fasta-length_change": { - "content": [ - { - "0": [ - [ - { - "id": "test" - }, - "test.short.ids.fasta:md5,1382acd98d4cd233a8062ef01b2aaa6d" - ] - ], - "1": [ - [ - { - "id": "test" - }, - "test.short.ids.tsv:md5,99c0f2a529cb595b2d8530024ed2880e" - ] - ], - "2": [ - "versions.yml:md5,e5704a53ebea373dac3a93ae800d48ba" - ], - "short_ids_fasta": [ - [ - { - "id": "test" - }, - "test.short.ids.fasta:md5,1382acd98d4cd233a8062ef01b2aaa6d" - ] - ], - "short_ids_tsv": [ - [ - { - "id": "test" - }, - "test.short.ids.tsv:md5,99c0f2a529cb595b2d8530024ed2880e" - ] - ], - "versions": [ - "versions.yml:md5,e5704a53ebea373dac3a93ae800d48ba" - ] - } - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2023-12-07T13:33:01.924483" - }, - "sarscov2-genome_fasta-pattern_change": { - "content": [ - { - "0": [ - [ - { - "id": "test" - }, - "test.short.ids.fasta:md5,14d6f587b6d28889c5c0f985e78d602f" - ] - ], - "1": [ - [ - { - "id": "test" - }, - "test.short.ids.tsv:md5,d7a2af88e8549586e5616bff6a88bd71" - ] - ], - "2": [ - "versions.yml:md5,e5704a53ebea373dac3a93ae800d48ba" - ], - "short_ids_fasta": [ - [ - { - "id": "test" - }, - "test.short.ids.fasta:md5,14d6f587b6d28889c5c0f985e78d602f" - ] - ], - "short_ids_tsv": [ - [ - { - "id": "test" - }, - "test.short.ids.tsv:md5,d7a2af88e8549586e5616bff6a88bd71" - ] - ], - "versions": [ - "versions.yml:md5,e5704a53ebea373dac3a93ae800d48ba" - ] - } - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2023-12-07T13:32:58.12885" - } -} \ No newline at end of file diff --git a/modules/gallvp/edta/edta/main.nf b/modules/gallvp/edta/edta/main.nf deleted file mode 100644 index cddac07..0000000 --- a/modules/gallvp/edta/edta/main.nf +++ /dev/null @@ -1,92 +0,0 @@ -process EDTA_EDTA { - tag "$meta.id" - label 'process_high' - - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/edta:2.1.0--hdfd78af_1': - 'biocontainers/edta:2.1.0--hdfd78af_1' }" - - input: - tuple val(meta), path(fasta) - path cds - path curatedlib - path rmout - path exclude - - output: - tuple val(meta), path('*.log') , emit: log - tuple val(meta), path('*.EDTA.TElib.fa') , emit: te_lib_fasta - tuple val(meta), path('*.EDTA.pass.list') , emit: pass_list , optional: true - tuple val(meta), path('*.EDTA.out') , emit: out_file , optional: true - tuple val(meta), path('*.EDTA.TEanno.gff3') , emit: te_anno_gff3 , optional: true - path "versions.yml" , emit: versions - - when: - task.ext.when == null || task.ext.when - - script: - def args = task.ext.args ?: '' - def prefix = task.ext.prefix ?: "${meta.id}" - def mod_file_name = "${fasta}.mod" - def cds_file = cds ? "--cds $cds" : '' - def curatedlib_file = curatedlib ? "--curatedlib $curatedlib": '' - def rmout_file = rmout ? "--rmout $rmout" : '' - def exclude_file = exclude ? "--exclude $exclude" : '' - """ - EDTA.pl \\ - --genome $fasta \\ - --threads $task.cpus \\ - $cds_file \\ - $curatedlib_file \\ - $rmout_file \\ - $exclude_file \\ - $args \\ - &> >(tee "${prefix}.log" 2>&1) - - mv \\ - "${mod_file_name}.EDTA.TElib.fa" \\ - "${prefix}.EDTA.TElib.fa" - - [ -f "${mod_file_name}.EDTA.raw/LTR/${mod_file_name}.pass.list" ] \\ - && mv \\ - "${mod_file_name}.EDTA.raw/LTR/${mod_file_name}.pass.list" \\ - "${prefix}.EDTA.pass.list" \\ - || echo "EDTA did not produce a pass.list file" - - [ -f "${mod_file_name}.EDTA.anno/${mod_file_name}.out" ] \\ - && mv \\ - "${mod_file_name}.EDTA.anno/${mod_file_name}.out" \\ - "${prefix}.EDTA.out" \\ - || echo "EDTA did not produce an out file" - - [ -f "${mod_file_name}.EDTA.TEanno.gff3" ] \\ - && mv \\ - "${mod_file_name}.EDTA.TEanno.gff3" \\ - "${prefix}.EDTA.TEanno.gff3" \\ - || echo "EDTA did not produce a TEanno gff3 file" - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - EDTA: \$(EDTA.pl -h | awk ' /##### Extensive/ {print \$7}') - END_VERSIONS - """ - - stub: - def args = task.ext.args ?: '' - def prefix = task.ext.prefix ?: "${meta.id}" - def touch_pass_list = args.contains("--anno 1") ? "touch ${prefix}.EDTA.pass.list" : '' - def touch_out_file = args.contains("--anno 1") ? "touch ${prefix}.EDTA.out" : '' - def touch_te_anno = args.contains("--anno 1") ? "touch ${prefix}.EDTA.TEanno.gff3": '' - """ - touch "${prefix}.log" - touch "${prefix}.EDTA.TElib.fa" - $touch_pass_list - $touch_out_file - $touch_te_anno - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - EDTA: \$(EDTA.pl -h | awk ' /##### Extensive/ {print \$7}') - END_VERSIONS - """ -} diff --git a/modules/gallvp/edta/edta/meta.yml b/modules/gallvp/edta/edta/meta.yml deleted file mode 100644 index 52503b8..0000000 --- a/modules/gallvp/edta/edta/meta.yml +++ /dev/null @@ -1,82 +0,0 @@ ---- -# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/meta-schema.json -name: "edta_edta" -description: Extensive de-novo TE Annotator (EDTA) -keywords: - - genome - - repeat - - annotation - - transposable-elements -tools: - - "edta": - description: Extensive de-novo TE Annotator (EDTA) - homepage: "https://github.com/oushujun/EDTA" - documentation: "https://github.com/oushujun/EDTA" - tool_dev_url: "https://github.com/oushujun/EDTA" - doi: "10.1186/s13059-019-1905-y" - licence: ["GPL v3"] -input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. `[ id:'test' ]` - - fasta: - type: file - description: Genome fasta file - pattern: "*.{fsa,fa,fasta}" - - cds: - type: file - description: | - A FASTA file containing the coding sequence (no introns, UTRs, nor TEs) - of this genome or its close relative - pattern: "*.{fsa,fa,fasta}" - - curatedlib: - type: file - description: | - A curated library to keep consistent naming and classification for known TEs - pattern: "*.liban" - - rmout: - type: file - description: | - Homology-based TE annotation instead of using the EDTA library for masking in - RepeatMasker .out format - pattern: "*.out" - - exclude: - type: file - description: Exclude regions (bed format) from TE masking in the MAKER.masked output - pattern: "*.bed" -output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. `[ id:'test' ]` - - log: - type: file - description: Log emitted by EDTA - pattern: "*.log" - - te_lib_fasta: - type: file - description: A non-redundant TE library in fasta format - pattern: "*.EDTA.TElib.fa" - - pass_list: - type: file - description: A summary table of intact LTR-RTs with coordinate and structural information - pattern: "*.EDTA.pass.list" - - out_file: - type: file - description: RepeatMasker annotation of all LTR sequences in the genome - pattern: "*.EDTA.out" - - te_anno_gff3: - type: file - description: A gff3 file containing both structurally intact and fragmented TE annotations - pattern: "*.EDTA.TEanno.gff3" - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" -authors: - - "@GallVp" -maintainers: - - "@GallVp" diff --git a/modules/gallvp/edta/edta/tests/main.nf.test b/modules/gallvp/edta/edta/tests/main.nf.test deleted file mode 100644 index b3ec30c..0000000 --- a/modules/gallvp/edta/edta/tests/main.nf.test +++ /dev/null @@ -1,84 +0,0 @@ -nextflow_process { - - name "Test Process EDTA_EDTA" - script "../main.nf" - process "EDTA_EDTA" - config "./nextflow.config" - - tag "modules" - tag "modules_gallvp" - tag "edta" - tag "edta/edta" - tag "modules/nf-core/gunzip" - - test("actinidia_chinensis-genome_1_fasta_gz") { - - setup { - run("GUNZIP") { - script "../../../../../modules/nf-core/gunzip" - - process { - """ - input[0] = [ - [ id:'test' ], - file(params.modules_testdata_base_path + 'genomics/eukaryotes/actinidia_chinensis/genome/chr1/genome.fasta.gz', checkIfExists: true) - ] - """ - } - } - } - - when { - process { - """ - input[0] = GUNZIP.out.gunzip - input[1] = [] - input[2] = [] - input[3] = [] - input[4] = [] - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(process.out.versions).match("versions") }, - { assert path(process.out.te_lib_fasta[0][1]).text.contains('LTR/Copia') }, - { assert path(process.out.pass_list[0][1]).text.contains('Copia') }, - { assert process.out.out_file == [] }, - { assert process.out.te_anno_gff3 == [] } - ) - } - - } - - test("stub") { - - options "-stub" - - when { - process { - """ - input[0] = [ - [ id:'test' ], // meta map - file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) - ] - input[1] = [] - input[2] = [] - input[3] = [] - input[4] = [] - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(process.out).match() } - ) - } - - } - -} \ No newline at end of file diff --git a/modules/gallvp/edta/edta/tests/main.nf.test.snap b/modules/gallvp/edta/edta/tests/main.nf.test.snap deleted file mode 100644 index d989e01..0000000 --- a/modules/gallvp/edta/edta/tests/main.nf.test.snap +++ /dev/null @@ -1,81 +0,0 @@ -{ - "versions": { - "content": [ - [ - "versions.yml:md5,f9e6b414c1eb81520a9fdbb15f797405" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-05-10T14:43:10.298103" - }, - "stub": { - "content": [ - { - "0": [ - [ - { - "id": "test" - }, - "test.log:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "1": [ - [ - { - "id": "test" - }, - "test.EDTA.TElib.fa:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "2": [ - - ], - "3": [ - - ], - "4": [ - - ], - "5": [ - "versions.yml:md5,f9e6b414c1eb81520a9fdbb15f797405" - ], - "log": [ - [ - { - "id": "test" - }, - "test.log:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "out_file": [ - - ], - "pass_list": [ - - ], - "te_anno_gff3": [ - - ], - "te_lib_fasta": [ - [ - { - "id": "test" - }, - "test.EDTA.TElib.fa:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "versions": [ - "versions.yml:md5,f9e6b414c1eb81520a9fdbb15f797405" - ] - } - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-05-10T14:43:16.561778" - } -} \ No newline at end of file diff --git a/modules/gallvp/edta/edta/tests/nextflow.config b/modules/gallvp/edta/edta/tests/nextflow.config deleted file mode 100644 index ac46798..0000000 --- a/modules/gallvp/edta/edta/tests/nextflow.config +++ /dev/null @@ -1,5 +0,0 @@ -process { - withName: EDTA_EDTA { - ext.args = '--anno 0' - } -} diff --git a/modules/gallvp/gffread/environment.yml b/modules/gallvp/gffread/environment.yml deleted file mode 100644 index c6df58a..0000000 --- a/modules/gallvp/gffread/environment.yml +++ /dev/null @@ -1,7 +0,0 @@ -name: gffread -channels: - - conda-forge - - bioconda - - defaults -dependencies: - - bioconda::gffread=0.12.7 diff --git a/modules/gallvp/gffread/main.nf b/modules/gallvp/gffread/main.nf deleted file mode 100644 index da55cba..0000000 --- a/modules/gallvp/gffread/main.nf +++ /dev/null @@ -1,60 +0,0 @@ -process GFFREAD { - tag "$meta.id" - label 'process_low' - - conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/gffread:0.12.7--hdcf5f25_4' : - 'biocontainers/gffread:0.12.7--hdcf5f25_4' }" - - input: - tuple val(meta), path(gff) - path fasta - - output: - tuple val(meta), path("*.gtf") , emit: gtf , optional: true - tuple val(meta), path("*.gff3") , emit: gffread_gff , optional: true - tuple val(meta), path("*.fasta"), emit: gffread_fasta , optional: true - path "versions.yml" , emit: versions - - when: - task.ext.when == null || task.ext.when - - script: - def args = task.ext.args ?: '' - def prefix = task.ext.prefix ?: "${meta.id}" - def extension = args.contains("-T") ? 'gtf' : ( ( ['-w', '-x', '-y' ].any { args.contains(it) } ) ? 'fasta' : 'gff3' ) - def fasta_arg = fasta ? "-g $fasta" : '' - def output_name = "${prefix}.${extension}" - def output = extension == "fasta" ? "$output_name" : "-o $output_name" - def args_sorted = args.replaceAll(/(.*)(-[wxy])(.*)/) { all, pre, param, post -> "$pre $post $param" }.trim() - // args_sorted = Move '-w', '-x', and '-y' to the end of the args string as gffread expects the file name after these parameters - if ( "$output_name" in [ "$gff", "$fasta" ] ) error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!" - """ - gffread \\ - $gff \\ - $fasta_arg \\ - $args_sorted \\ - $output - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - gffread: \$(gffread --version 2>&1) - END_VERSIONS - """ - - stub: - def args = task.ext.args ?: '' - def prefix = task.ext.prefix ?: "${meta.id}" - def extension = args.contains("-T") ? 'gtf' : ( ( ['-w', '-x', '-y' ].any { args.contains(it) } ) ? 'fasta' : 'gff3' ) - def output_name = "${prefix}.${extension}" - if ( "$output_name" in [ "$gff", "$fasta" ] ) error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!" - """ - touch $output_name - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - gffread: \$(gffread --version 2>&1) - END_VERSIONS - """ -} diff --git a/modules/gallvp/gffread/meta.yml b/modules/gallvp/gffread/meta.yml deleted file mode 100644 index c060282..0000000 --- a/modules/gallvp/gffread/meta.yml +++ /dev/null @@ -1,55 +0,0 @@ -name: gffread -description: Validate, filter, convert and perform various other operations on GFF files -keywords: - - gff - - conversion - - validation -tools: - - gffread: - description: GFF/GTF utility providing format conversions, region filtering, FASTA sequence extraction and more. - homepage: http://ccb.jhu.edu/software/stringtie/gff.shtml#gffread - documentation: http://ccb.jhu.edu/software/stringtie/gff.shtml#gffread - tool_dev_url: https://github.com/gpertea/gffread - doi: 10.12688/f1000research.23297.1 - licence: ["MIT"] -input: - - meta: - type: map - description: | - Groovy Map containing meta data - e.g. [ id:'test' ] - - gff: - type: file - description: A reference file in either the GFF3, GFF2 or GTF format. - pattern: "*.{gff, gtf}" - - fasta: - type: file - description: A multi-fasta file with the genomic sequences - pattern: "*.{fasta,fa,faa,fas,fsa}" -output: - - meta: - type: map - description: | - Groovy Map containing meta data - e.g. [ id:'test' ] - - gtf: - type: file - description: GTF file resulting from the conversion of the GFF input file if '-T' argument is present - pattern: "*.{gtf}" - - gffread_gff: - type: file - description: GFF3 file resulting from the conversion of the GFF input file if '-T' argument is absent - pattern: "*.gff3" - - gffread_fasta: - type: file - description: Fasta file produced when either of '-w', '-x', '-y' parameters is present - pattern: "*.fasta" - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" -authors: - - "@edmundmiller" -maintainers: - - "@edmundmiller" - - "@gallvp" diff --git a/modules/gallvp/gffread/tests/main.nf.test b/modules/gallvp/gffread/tests/main.nf.test deleted file mode 100644 index 17b2ee6..0000000 --- a/modules/gallvp/gffread/tests/main.nf.test +++ /dev/null @@ -1,223 +0,0 @@ -nextflow_process { - - name "Test Process GFFREAD" - script "../main.nf" - process "GFFREAD" - - tag "gffread" - tag "modules_gallvp" - tag "modules" - - test("sarscov2-gff3-gtf") { - - config "./nextflow.config" - - when { - params { - outdir = "$outputDir" - } - process { - """ - input[0] = [ - [id: 'test'], - file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.gff3", checkIfExists: true) - ] - input[1] = [] - """ - } - } - - then { - assertAll ( - { assert process.success }, - { assert snapshot(process.out).match() }, - { assert process.out.gffread_gff == [] }, - { assert process.out.gffread_fasta == [] } - ) - } - - } - - test("sarscov2-gff3-gtf-stub") { - - options '-stub' - config "./nextflow.config" - - when { - params { - outdir = "$outputDir" - } - process { - """ - input[0] = [ - [id: 'test'], - file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.gff3", checkIfExists: true) - ] - input[1] = [] - """ - } - } - - then { - assertAll ( - { assert process.success }, - { assert snapshot(process.out).match() }, - { assert process.out.gffread_gff == [] }, - { assert process.out.gffread_fasta == [] } - ) - } - - } - - test("sarscov2-gff3-gff3") { - - config "./nextflow-gff3.config" - - when { - params { - outdir = "$outputDir" - } - process { - """ - input[0] = [ - [id: 'test'], - file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.gff3", checkIfExists: true) - ] - input[1] = [] - """ - } - } - - then { - assertAll ( - { assert process.success }, - { assert snapshot(process.out).match() }, - { assert process.out.gtf == [] }, - { assert process.out.gffread_fasta == [] } - ) - } - - } - - test("sarscov2-gff3-gff3-stub") { - - options '-stub' - config "./nextflow-gff3.config" - - when { - params { - outdir = "$outputDir" - } - process { - """ - input[0] = [ - [id: 'test'], - file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.gff3", checkIfExists: true) - ] - input[1] = [] - """ - } - } - - then { - assertAll ( - { assert process.success }, - { assert snapshot(process.out).match() }, - { assert process.out.gtf == [] }, - { assert process.out.gffread_fasta == [] } - ) - } - - } - - test("sarscov2-gff3-fasta") { - - config "./nextflow-fasta.config" - - when { - params { - outdir = "$outputDir" - } - process { - """ - input[0] = [ - [id: 'test'], - file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.gff3", checkIfExists: true) - ] - input[1] = file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.fasta", checkIfExists: true) - """ - } - } - - then { - assertAll ( - { assert process.success }, - { assert snapshot(process.out).match() }, - { assert process.out.gtf == [] }, - { assert process.out.gffread_gff == [] } - ) - } - - } - - test("sarscov2-gff3-fasta-stub") { - - options '-stub' - config "./nextflow-fasta.config" - - when { - params { - outdir = "$outputDir" - } - process { - """ - input[0] = [ - [id: 'test'], - file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.gff3", checkIfExists: true) - ] - input[1] = file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.fasta", checkIfExists: true) - """ - } - } - - then { - assertAll ( - { assert process.success }, - { assert snapshot(process.out).match() }, - { assert process.out.gtf == [] }, - { assert process.out.gffread_gff == [] } - ) - } - - } - - test("sarscov2-gff3-fasta-fail-catch") { - - options '-stub' - config "./nextflow-fasta.config" - - when { - params { - outdir = "$outputDir" - } - process { - """ - input[0] = [ - [id: 'genome'], - file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.gff3", checkIfExists: true) - ] - input[1] = file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.fasta", checkIfExists: true) - """ - } - } - - then { - assertAll ( - { assert ! process.success }, - { assert process.stdout.toString().contains("Input and output names are the same") } - ) - } - - } - -} diff --git a/modules/gallvp/gffread/tests/main.nf.test.snap b/modules/gallvp/gffread/tests/main.nf.test.snap deleted file mode 100644 index 1526232..0000000 --- a/modules/gallvp/gffread/tests/main.nf.test.snap +++ /dev/null @@ -1,272 +0,0 @@ -{ - "sarscov2-gff3-gtf": { - "content": [ - { - "0": [ - [ - { - "id": "test" - }, - "test.gtf:md5,1ea0ae98d3388e0576407dc4a24ef428" - ] - ], - "1": [ - - ], - "2": [ - - ], - "3": [ - "versions.yml:md5,05f671c6c6e530acedad0af0a5948dbd" - ], - "gffread_fasta": [ - - ], - "gffread_gff": [ - - ], - "gtf": [ - [ - { - "id": "test" - }, - "test.gtf:md5,1ea0ae98d3388e0576407dc4a24ef428" - ] - ], - "versions": [ - "versions.yml:md5,05f671c6c6e530acedad0af0a5948dbd" - ] - } - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-04-09T10:48:56.496187" - }, - "sarscov2-gff3-gff3": { - "content": [ - { - "0": [ - - ], - "1": [ - [ - { - "id": "test" - }, - "test.gff3:md5,c4e5da6267c6bee5899a2c204ae1ad91" - ] - ], - "2": [ - - ], - "3": [ - "versions.yml:md5,05f671c6c6e530acedad0af0a5948dbd" - ], - "gffread_fasta": [ - - ], - "gffread_gff": [ - [ - { - "id": "test" - }, - "test.gff3:md5,c4e5da6267c6bee5899a2c204ae1ad91" - ] - ], - "gtf": [ - - ], - "versions": [ - "versions.yml:md5,05f671c6c6e530acedad0af0a5948dbd" - ] - } - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-04-09T10:49:00.892782" - }, - "sarscov2-gff3-gtf-stub": { - "content": [ - { - "0": [ - [ - { - "id": "test" - }, - "test.gtf:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "1": [ - - ], - "2": [ - - ], - "3": [ - "versions.yml:md5,05f671c6c6e530acedad0af0a5948dbd" - ], - "gffread_fasta": [ - - ], - "gffread_gff": [ - - ], - "gtf": [ - [ - { - "id": "test" - }, - "test.gtf:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "versions": [ - "versions.yml:md5,05f671c6c6e530acedad0af0a5948dbd" - ] - } - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-04-09T11:11:26.975666" - }, - "sarscov2-gff3-fasta-stub": { - "content": [ - { - "0": [ - - ], - "1": [ - - ], - "2": [ - [ - { - "id": "test" - }, - "test.fasta:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "3": [ - "versions.yml:md5,05f671c6c6e530acedad0af0a5948dbd" - ], - "gffread_fasta": [ - [ - { - "id": "test" - }, - "test.fasta:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "gffread_gff": [ - - ], - "gtf": [ - - ], - "versions": [ - "versions.yml:md5,05f671c6c6e530acedad0af0a5948dbd" - ] - } - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-04-09T11:11:44.34792" - }, - "sarscov2-gff3-gff3-stub": { - "content": [ - { - "0": [ - - ], - "1": [ - [ - { - "id": "test" - }, - "test.gff3:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "2": [ - - ], - "3": [ - "versions.yml:md5,05f671c6c6e530acedad0af0a5948dbd" - ], - "gffread_fasta": [ - - ], - "gffread_gff": [ - [ - { - "id": "test" - }, - "test.gff3:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "gtf": [ - - ], - "versions": [ - "versions.yml:md5,05f671c6c6e530acedad0af0a5948dbd" - ] - } - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-04-09T11:11:35.221671" - }, - "sarscov2-gff3-fasta": { - "content": [ - { - "0": [ - - ], - "1": [ - - ], - "2": [ - [ - { - "id": "test" - }, - "test.fasta:md5,5f8108fb51739a0588ccf0a251de919a" - ] - ], - "3": [ - "versions.yml:md5,05f671c6c6e530acedad0af0a5948dbd" - ], - "gffread_fasta": [ - [ - { - "id": "test" - }, - "test.fasta:md5,5f8108fb51739a0588ccf0a251de919a" - ] - ], - "gffread_gff": [ - - ], - "gtf": [ - - ], - "versions": [ - "versions.yml:md5,05f671c6c6e530acedad0af0a5948dbd" - ] - } - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-04-09T10:54:02.88143" - } -} \ No newline at end of file diff --git a/modules/gallvp/gffread/tests/nextflow-fasta.config b/modules/gallvp/gffread/tests/nextflow-fasta.config deleted file mode 100644 index ac6cb14..0000000 --- a/modules/gallvp/gffread/tests/nextflow-fasta.config +++ /dev/null @@ -1,5 +0,0 @@ -process { - withName: GFFREAD { - ext.args = '-w -S' - } -} diff --git a/modules/gallvp/gffread/tests/nextflow-gff3.config b/modules/gallvp/gffread/tests/nextflow-gff3.config deleted file mode 100644 index afe0830..0000000 --- a/modules/gallvp/gffread/tests/nextflow-gff3.config +++ /dev/null @@ -1,5 +0,0 @@ -process { - withName: GFFREAD { - ext.args = '' - } -} diff --git a/modules/gallvp/gffread/tests/nextflow.config b/modules/gallvp/gffread/tests/nextflow.config deleted file mode 100644 index 74b2509..0000000 --- a/modules/gallvp/gffread/tests/nextflow.config +++ /dev/null @@ -1,5 +0,0 @@ -process { - withName: GFFREAD { - ext.args = '-T' - } -} diff --git a/modules/gallvp/gffread/tests/tags.yml b/modules/gallvp/gffread/tests/tags.yml deleted file mode 100644 index 0557606..0000000 --- a/modules/gallvp/gffread/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -gffread: - - modules/nf-core/gffread/** diff --git a/modules/gallvp/ltrretriever/lai/environment.yml b/modules/gallvp/ltrretriever/lai/environment.yml deleted file mode 100644 index e0e4968..0000000 --- a/modules/gallvp/ltrretriever/lai/environment.yml +++ /dev/null @@ -1,9 +0,0 @@ ---- -# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json -name: "ltrretriever_lai" -channels: - - conda-forge - - bioconda - - defaults -dependencies: - - "bioconda::LTR_retriever=2.9.9" diff --git a/modules/gallvp/ltrretriever/lai/main.nf b/modules/gallvp/ltrretriever/lai/main.nf deleted file mode 100644 index 464b215..0000000 --- a/modules/gallvp/ltrretriever/lai/main.nf +++ /dev/null @@ -1,71 +0,0 @@ -process LTRRETRIEVER_LAI { - tag "$meta.id" - label 'process_medium' - - conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/ltr_retriever:2.9.9--hdfd78af_0': - 'biocontainers/ltr_retriever:2.9.9--hdfd78af_0' }" - - input: - tuple val(meta), path(fasta) - path pass_list - path annotation_out - path monoploid_seqs - - output: - tuple val(meta), path("*.LAI.log") , emit: log - tuple val(meta), path("*.LAI.out") , emit: lai_out , optional: true - path "versions.yml" , emit: versions - - when: - task.ext.when == null || task.ext.when - - script: - def args = task.ext.args ?: '' - def prefix = task.ext.prefix ?: "${meta.id}" - def monoploid_param = monoploid_seqs ? "-mono $monoploid_seqs" : '' - def lai_output_name = monoploid_seqs ? "${annotation_out}.${monoploid_seqs}.out.LAI" : "${annotation_out}.LAI" - def VERSION = 'beta3.2' // WARN: Version information not provided by tool on CLI. Please update this string when bumping container versions. - """ - LAI \\ - -genome $fasta \\ - -intact $pass_list \\ - -all $annotation_out \\ - -t $task.cpus \\ - $monoploid_param \\ - $args \\ - > >(tee "${prefix}.LAI.log") \\ - || echo "LAI failed! See ${prefix}.LAI.log" - - mv \\ - $lai_output_name \\ - "${prefix}.LAI.out" \\ - || echo "LAI failed to estimate assembly index. See ${prefix}.LAI.log" - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - lai: $VERSION - END_VERSIONS - """ - - stub: - def args = task.ext.args ?: '' - def prefix = task.ext.prefix ?: "${meta.id}" - def monoploid_param = monoploid_seqs ? "-mono $monoploid_seqs" : '' - def lai_output_name = monoploid_seqs ? "${annotation_out}.${monoploid_seqs}.out.LAI" : "${annotation_out}.LAI" - def VERSION = 'beta3.2' // WARN: Version information not provided by tool on CLI. Please update this string when bumping container versions. - """ - touch "${prefix}.LAI.log" - touch "$lai_output_name" - - mv \\ - $lai_output_name \\ - "${prefix}.LAI.out" - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - lai: $VERSION - END_VERSIONS - """ -} diff --git a/modules/gallvp/ltrretriever/lai/meta.yml b/modules/gallvp/ltrretriever/lai/meta.yml deleted file mode 100644 index f84cf6c..0000000 --- a/modules/gallvp/ltrretriever/lai/meta.yml +++ /dev/null @@ -1,70 +0,0 @@ ---- -# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/meta-schema.json -name: "ltrretriever_lai" -description: | - Estimates the mean LTR sequence identity in the genome. The input genome fasta should - have short alphanumeric IDs without comments -keywords: - - genomics - - annotation - - repeat - - long terminal retrotransposon - - retrotransposon - - stats - - qc -tools: - - "lai": - description: Assessing genome assembly quality using the LTR Assembly Index (LAI) - homepage: "https://github.com/oushujun/LTR_retriever" - documentation: "https://github.com/oushujun/LTR_retriever" - tool_dev_url: "https://github.com/oushujun/LTR_retriever" - doi: "10.1093/nar/gky730" - licence: ["GPL v3"] -input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. `[ id:'sample1' ]` - - fasta: - type: file - description: The genome file that is used to generate everything - pattern: "*.{fsa,fa,fasta}" - - pass_list: - type: file - description: A list of intact LTR-RTs generated by LTR_retriever - pattern: "*.pass.list" - - annotation_out: - type: file - description: RepeatMasker annotation of all LTR sequences in the genome - pattern: "*.out" - - monoploid_seqs: - type: file - description: | - This parameter is mainly for ployploid genomes. User provides a list of - sequence names that represent a monoploid (1x). LAI will be calculated only - on these sequences if provided. - pattern: "*.txt" -output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. `[ id:'sample1', single_end:false ]` - - log: - type: file - description: Log from LAI - pattern: "*.LAI.log" - - lai_out: - type: file - description: | - Output file from LAI if LAI is able to estimate the index from the inputs - pattern: "*.LAI.out" - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" -authors: - - "@GallVp" -maintainers: - - "@GallVp" diff --git a/modules/gallvp/ltrretriever/lai/tests/main.nf.test b/modules/gallvp/ltrretriever/lai/tests/main.nf.test deleted file mode 100644 index e428918..0000000 --- a/modules/gallvp/ltrretriever/lai/tests/main.nf.test +++ /dev/null @@ -1,166 +0,0 @@ -nextflow_process { - - name "Test Process LTRRETRIEVER_LAI" - script "../main.nf" - process "LTRRETRIEVER_LAI" - config "./nextflow.config" - - tag "modules" - tag "modules_gallvp" - tag "gunzip" - tag "ltrretriever" - tag "ltrretriever/ltrretriever" - tag "ltrretriever/lai" - tag "ltrharvest" - tag "ltrfinder" - tag "cat/cat" - - test("actinidia_chinensis-genome_21_fasta_gz-success") { - - setup { - - run("GUNZIP") { - script "../../../gunzip" - - process { - """ - input[0] = [ - [ id:'test' ], - file(params.modules_testdata_base_path + 'genomics/eukaryotes/actinidia_chinensis/genome/chr1/genome.fasta.gz', checkIfExists: true) - ] - """ - } - } - - run("LTRHARVEST") { - script "../../../ltrharvest" - - process { - """ - input[0] = GUNZIP.out.gunzip - """ - } - } - - run("LTRFINDER") { - script "../../../ltrfinder" - - process { - """ - input[0] = GUNZIP.out.gunzip - """ - } - } - - run("CAT_CAT") { - script "../../../cat/cat" - - process { - """ - input[0] = LTRHARVEST.out.scn.mix(LTRFINDER.out.scn).groupTuple() - """ - } - } - - run("LTRRETRIEVER_LTRRETRIEVER") { - script "../../ltrretriever" - - process { - """ - input[0] = GUNZIP.out.gunzip - input[1] = CAT_CAT.out.file_out.map { meta, tabout -> tabout } - input[2] = [] - input[3] = [] - input[4] = [] - """ - } - } - } - - when { - process { - """ - input[0] = GUNZIP.out.gunzip - input[1] = LTRRETRIEVER_LTRRETRIEVER.out.pass_list.map { meta, pass_list -> pass_list } - input[2] = LTRRETRIEVER_LTRRETRIEVER.out.annotation_out.map { meta, annotation_out -> annotation_out } - input[3] = [] - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert path(process.out.log[0][1]).text.contains("Dependency checking: Passed!") }, - { assert path(process.out.log[0][1]).text.contains("Calculate LAI:") }, - { assert path(process.out.log[0][1]).text.contains("Done!") }, - { assert path(process.out.log[0][1]).text.contains("Result file:") }, - { assert Math.abs(Float.parseFloat(path(process.out.lai_out[0][1]).text.split("\n")[1].split("\t")[6]) - 31.29) <= 1.0 } - ) - } - - } - - test("stub") { - - options '-stub' - - when { - process { - """ - def pass_list = new File('test.pass.list') - def out_file = new File('test.out') - def monoploid_seqs = new File('some_seqs.list.txt') - - input[0] = [ - [ id:'test' ], - file(params.modules_testdata_base_path + 'genomics/eukaryotes/actinidia_chinensis/genome/chr1/genome.fasta.gz', checkIfExists: true) - ] - input[1] = pass_list.toPath() - input[2] = out_file.toPath() - input[3] = [] - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(process.out).match() } - ) - } - - } - - test("stub_with_monoploid_seqs") { - - options '-stub' - - when { - process { - """ - def pass_list = new File('test.pass.list') - def out_file = new File('test.out') - def monoploid_seqs = new File('some_seqs.list.txt') - - input[0] = [ - [ id:'test' ], - file(params.modules_testdata_base_path + 'genomics/eukaryotes/actinidia_chinensis/genome/chr1/genome.fasta.gz', checkIfExists: true) - ] - input[1] = pass_list.toPath() - input[2] = out_file.toPath() - input[3] = monoploid_seqs.toPath() - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(process.out).match() } - ) - } - - } - -} diff --git a/modules/gallvp/ltrretriever/lai/tests/main.nf.test.snap b/modules/gallvp/ltrretriever/lai/tests/main.nf.test.snap deleted file mode 100644 index e1c8086..0000000 --- a/modules/gallvp/ltrretriever/lai/tests/main.nf.test.snap +++ /dev/null @@ -1,100 +0,0 @@ -{ - "stub": { - "content": [ - { - "0": [ - [ - { - "id": "test" - }, - "test.LAI.log:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "1": [ - [ - { - "id": "test" - }, - "test.LAI.out:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "2": [ - "versions.yml:md5,e04e27f9408e771795cd44d96518b7cd" - ], - "lai_out": [ - [ - { - "id": "test" - }, - "test.LAI.out:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "log": [ - [ - { - "id": "test" - }, - "test.LAI.log:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "versions": [ - "versions.yml:md5,e04e27f9408e771795cd44d96518b7cd" - ] - } - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-02-22T20:09:00.558021" - }, - "stub_with_monoploid_seqs": { - "content": [ - { - "0": [ - [ - { - "id": "test" - }, - "test.LAI.log:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "1": [ - [ - { - "id": "test" - }, - "test.LAI.out:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "2": [ - "versions.yml:md5,e04e27f9408e771795cd44d96518b7cd" - ], - "lai_out": [ - [ - { - "id": "test" - }, - "test.LAI.out:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "log": [ - [ - { - "id": "test" - }, - "test.LAI.log:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "versions": [ - "versions.yml:md5,e04e27f9408e771795cd44d96518b7cd" - ] - } - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-02-22T20:10:08.213842" - } -} \ No newline at end of file diff --git a/modules/gallvp/ltrretriever/lai/tests/nextflow.config b/modules/gallvp/ltrretriever/lai/tests/nextflow.config deleted file mode 100644 index 75edf1a..0000000 --- a/modules/gallvp/ltrretriever/lai/tests/nextflow.config +++ /dev/null @@ -1,15 +0,0 @@ -process { - - withName: LTRHARVEST { - ext.prefix = { "${meta.id}_ltrharvest" } - } - - withName: LTRFINDER { - ext.args = '-harvest_out -size 1000000 -time 300' - // recommended parameters: https://github.com/oushujun/LTR_retriever#usage - } - - withName: CAT_CAT { - ext.prefix = { "${meta.id}_ltrharvest_ltrfinder.tabout" } - } -} diff --git a/modules/gallvp/ltrretriever/lai/tests/tags.yml b/modules/gallvp/ltrretriever/lai/tests/tags.yml deleted file mode 100644 index 470f468..0000000 --- a/modules/gallvp/ltrretriever/lai/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -ltrretriever/lai: - - "modules/nf-core/ltrretriever/lai/**" diff --git a/modules/gallvp/repeatmasker/repeatmasker/environment.yml b/modules/gallvp/repeatmasker/repeatmasker/environment.yml deleted file mode 100644 index efc290a..0000000 --- a/modules/gallvp/repeatmasker/repeatmasker/environment.yml +++ /dev/null @@ -1,9 +0,0 @@ ---- -# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json -name: "repeatmasker_repeatmasker" -channels: - - conda-forge - - bioconda - - defaults -dependencies: - - "bioconda::repeatmasker=4.1.5" diff --git a/modules/gallvp/repeatmasker/repeatmasker/main.nf b/modules/gallvp/repeatmasker/repeatmasker/main.nf deleted file mode 100644 index 4b17414..0000000 --- a/modules/gallvp/repeatmasker/repeatmasker/main.nf +++ /dev/null @@ -1,62 +0,0 @@ -process REPEATMASKER_REPEATMASKER { - tag "$meta.id" - label 'process_high' - - conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/repeatmasker:4.1.5--pl5321hdfd78af_0': - 'biocontainers/repeatmasker:4.1.5--pl5321hdfd78af_0' }" - - input: - tuple val(meta), path(fasta) - path(lib) - - output: - tuple val(meta), path("${prefix}.masked") , emit: masked - tuple val(meta), path("${prefix}.out") , emit: out - tuple val(meta), path("${prefix}.tbl") , emit: tbl - tuple val(meta), path("${prefix}.gff") , emit: gff , optional: true - path "versions.yml" , emit: versions - - when: - task.ext.when == null || task.ext.when - - script: - def args = task.ext.args ?: '' - prefix = task.ext.prefix ?: "${meta.id}" - def lib_arg = lib ? "-lib $lib" : '' - """ - RepeatMasker \\ - $lib_arg \\ - -pa ${task.cpus} \\ - -dir ${prefix} \\ - ${args} \\ - ${fasta} - - mv $prefix/${fasta}.masked ${prefix}.masked - mv $prefix/${fasta}.out ${prefix}.out - mv $prefix/${fasta}.tbl ${prefix}.tbl - mv $prefix/${fasta}.out.gff ${prefix}.gff || echo "GFF is not produced" - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - repeatmasker: \$(RepeatMasker -v | sed 's/RepeatMasker version //1') - END_VERSIONS - """ - - stub: - prefix = task.ext.prefix ?: "${meta.id}" - def args = task.ext.args ?: '' - def touch_gff = args.contains('-gff') ? "touch ${prefix}.gff" : '' - """ - touch ${prefix}.masked - touch ${prefix}.out - touch ${prefix}.tbl - $touch_gff - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - repeatmasker: \$(RepeatMasker -v | sed 's/RepeatMasker version //1') - END_VERSIONS - """ -} diff --git a/modules/gallvp/repeatmasker/repeatmasker/meta.yml b/modules/gallvp/repeatmasker/repeatmasker/meta.yml deleted file mode 100644 index 059e225..0000000 --- a/modules/gallvp/repeatmasker/repeatmasker/meta.yml +++ /dev/null @@ -1,64 +0,0 @@ -name: repeatmasker_repeatmasker -description: | - Screening DNA sequences for interspersed repeats and low complexity DNA sequences - -keywords: - - genome - - annotation - - repeat - - mask - -tools: - - repeatmasker: - description: | - RepeatMasker is a program that screens DNA sequences for interspersed - repeats and low complexity DNA sequences - homepage: "https://www.repeatmasker.org/" - documentation: "https://www.repeatmasker.org/webrepeatmaskerhelp.html" - tool_dev_url: "https://github.com/rmhubley/RepeatMasker" - licence: ["Open Software License v. 2.1"] - -input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test' ] - - fasta: - type: file - description: Genome assembly - pattern: "*.{fasta,fa,fas,fsa,faa,fna}" - - lib: - type: file - description: Custom library (e.g. from another species) - pattern: "*.{fasta,fa,fas,fsa,faa,fna}" - -output: - - masked: - type: file - description: Masked fasta - pattern: "*.masked" - - out: - type: file - description: Out file - pattern: "*.out" - - tbl: - type: file - description: tbl file - pattern: "*.tbl" - - gff: - type: file - description: GFF file - pattern: "*.gff" - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - -authors: - - "@kherronism" - - "@gallvp" - -maintainers: - - "@kherronism" - - "@gallvp" diff --git a/modules/gallvp/repeatmasker/repeatmasker/tests/main.nf.test b/modules/gallvp/repeatmasker/repeatmasker/tests/main.nf.test deleted file mode 100644 index d55e5f4..0000000 --- a/modules/gallvp/repeatmasker/repeatmasker/tests/main.nf.test +++ /dev/null @@ -1,68 +0,0 @@ -nextflow_process { - - name "Test Process REPEATMASKER_REPEATMASKER" - script "../main.nf" - process "REPEATMASKER_REPEATMASKER" - - tag "modules" - tag "modules_gallvp" - tag "repeatmasker" - tag "repeatmasker/repeatmasker" - - test("sarscov2 - genome - fasta") { - - config "./nextflow.config" - - when { - process { - """ - input[0] = [ - [ id:'test', single_end:false ], // meta map - file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) - ] - input[1] = [] - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot( - process.out.masked, - process.out.out, - process.out.gff, - process.out.versions - ).match() }, - { assert file(process.out.tbl[0][1]).text.contains('run with rmblastn') } - ) - } - - } - - test("sarscov2 - genome - fasta - stub") { - - options '-stub' - - when { - process { - """ - input[0] = [ - [ id:'test', single_end:false ], // meta map - file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) - ] - input[1] = [] - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(process.out).match() } - ) - } - - } - -} diff --git a/modules/gallvp/repeatmasker/repeatmasker/tests/main.nf.test.snap b/modules/gallvp/repeatmasker/repeatmasker/tests/main.nf.test.snap deleted file mode 100644 index 2e584de..0000000 --- a/modules/gallvp/repeatmasker/repeatmasker/tests/main.nf.test.snap +++ /dev/null @@ -1,118 +0,0 @@ -{ - "sarscov2 - genome - fasta": { - "content": [ - [ - [ - { - "id": "test", - "single_end": false - }, - "test.masked:md5,c0eb8dd958ce3b4b1fdc7fcb6b0d5161" - ] - ], - [ - [ - { - "id": "test", - "single_end": false - }, - "test.out:md5,8610cb2b8d87356bf2ab0a895c065752" - ] - ], - [ - [ - { - "id": "test", - "single_end": false - }, - "test.gff:md5,289cdcae609a8c450a20080107ea6351" - ] - ], - [ - "versions.yml:md5,1386abb5112b809c321da8ddc598c573" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.3" - }, - "timestamp": "2024-08-07T14:25:15.979032" - }, - "sarscov2 - genome - fasta - stub": { - "content": [ - { - "0": [ - [ - { - "id": "test", - "single_end": false - }, - "test.masked:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "1": [ - [ - { - "id": "test", - "single_end": false - }, - "test.out:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "2": [ - [ - { - "id": "test", - "single_end": false - }, - "test.tbl:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "3": [ - - ], - "4": [ - "versions.yml:md5,1386abb5112b809c321da8ddc598c573" - ], - "gff": [ - - ], - "masked": [ - [ - { - "id": "test", - "single_end": false - }, - "test.masked:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "out": [ - [ - { - "id": "test", - "single_end": false - }, - "test.out:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "tbl": [ - [ - { - "id": "test", - "single_end": false - }, - "test.tbl:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "versions": [ - "versions.yml:md5,1386abb5112b809c321da8ddc598c573" - ] - } - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.3" - }, - "timestamp": "2024-08-07T13:39:51.365612" - } -} \ No newline at end of file diff --git a/modules/gallvp/repeatmasker/repeatmasker/tests/nextflow.config b/modules/gallvp/repeatmasker/repeatmasker/tests/nextflow.config deleted file mode 100644 index 6e4b600..0000000 --- a/modules/gallvp/repeatmasker/repeatmasker/tests/nextflow.config +++ /dev/null @@ -1,5 +0,0 @@ -process { - withName: REPEATMASKER_REPEATMASKER { - ext.args = '-no_is -gff' // Not required but significantly cuts the runtime - } -} diff --git a/modules/local/utils.nf b/modules/local/utils.nf deleted file mode 100644 index f6fc82e..0000000 --- a/modules/local/utils.nf +++ /dev/null @@ -1,69 +0,0 @@ -def idFromFileName(fileName) { - - def trial = ( fileName - ).replaceFirst( - /\.f(ast)?q$/, '' - ).replaceFirst( - /\.f(asta|sa|a|as|aa|na)?$/, '' - ).replaceFirst( - /\.gff(3)?$/, '' - ).replaceFirst( - /\.gz$/, '' - ) - - if ( trial == fileName ) { return fileName } - - return idFromFileName ( trial ) -} - -def validateFastqMetadata(metas, fqs, permAssString) { - def permAssList = permAssString.split(",") - - // Check if each listed assembly is permissible - metas.each { meta -> - if ( meta.target_assemblies.any { !permAssList.contains( it ) } ) { - error "Sample ${meta.id} targets ${meta.target_assemblies} which are not in $permAssList" - } - } - - // Check if multiple runs of a sample have the same target assemblies - if ( metas.collect { meta -> meta.target_assemblies }.unique().size() > 1 ) { - error "Multiple runs of sample ${metas.first().id} must target same assemblies" - } - - // Check if multiple runs of a sample have the same endedness - if ( metas.collect { meta -> meta.single_end }.unique().size() > 1 ) { - error "Multiple runs of sample ${metas.first().id} must have same endedness" - } - - [ metas.first(), fqs ] -} - - -def validateBamMetadata(metas, bams, permAssString) { - def permAssList = permAssString.split(",") - - // Check if each listed assembly is permissible - metas.each { meta -> - if ( meta.target_assemblies.any { !permAssList.contains( it ) } ) { - error "Sample ${meta.id} targets ${meta.target_assemblies} which are not in $permAssList" - } - } - - // Check that when the first file is bam then the second file is absent - bams.findAll { files -> - files.first().extension == 'bam' && files.size() != 1 - } - .each { error "Sample ${metas.first().id} contains both bam and fastq pairs. When a bam file is provided as file_1, a fastq for file_2 is not permitted" } - - // Check that a bam file only targets a single assembly - bams.eachWithIndex { files, index -> - if ( files.first().extension == 'bam' && metas[index].target_assemblies.size() > 1 ) { - error "BAM file for sample ${metas.first().id} can only target one assembly: ${metas[index].target_assemblies}" - } - } - - metas.every { it.target_assemblies == metas.first().target_assemblies } - ? [ [ metas.first(), bams.flatten() ] ] - : metas.withIndex().collect { meta, index -> [ meta, bams[index].flatten() ] } -} diff --git a/modules/nf-core/agat/convertspgff2gtf/environment.yml b/modules/nf-core/agat/convertspgff2gtf/environment.yml deleted file mode 100644 index 6747331..0000000 --- a/modules/nf-core/agat/convertspgff2gtf/environment.yml +++ /dev/null @@ -1,7 +0,0 @@ -name: agat_convertspgff2gtf -channels: - - conda-forge - - bioconda - - defaults -dependencies: - - bioconda::agat=1.4.0 diff --git a/modules/nf-core/agat/convertspgff2gtf/main.nf b/modules/nf-core/agat/convertspgff2gtf/main.nf deleted file mode 100644 index 38af025..0000000 --- a/modules/nf-core/agat/convertspgff2gtf/main.nf +++ /dev/null @@ -1,48 +0,0 @@ -process AGAT_CONVERTSPGFF2GTF { - tag "$meta.id" - label 'process_single' - - conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/agat:1.4.0--pl5321hdfd78af_0' : - 'biocontainers/agat:1.4.0--pl5321hdfd78af_0' }" - - input: - tuple val(meta), path(gff) - - output: - tuple val(meta), path("*.agat.gtf"), emit: output_gtf - tuple val(meta), path("*.log"), emit: log - path "versions.yml" , emit: versions - - when: - task.ext.when == null || task.ext.when - - script: - def args = task.ext.args ?: '' - def prefix = task.ext.prefix ?: "${meta.id}" - """ - agat_convert_sp_gff2gtf.pl \\ - --gff $gff \\ - --output ${prefix}.agat.gtf \\ - $args - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - agat: \$(agat_convert_sp_gff2gtf.pl --help | sed -n 's/.*(AGAT) - Version: \\(.*\\) .*/\\1/p') - END_VERSIONS - """ - - stub: - def args = task.ext.args ?: '' - def prefix = task.ext.prefix ?: "${meta.id}" - """ - touch ${prefix}.agat.gtf - touch ${gff}.agat.log - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - agat: \$(agat_convert_sp_gff2gtf.pl --help | sed -n 's/.*(AGAT) - Version: \\(.*\\) .*/\\1/p') - END_VERSIONS - """ -} diff --git a/modules/nf-core/agat/convertspgff2gtf/meta.yml b/modules/nf-core/agat/convertspgff2gtf/meta.yml deleted file mode 100644 index ab39f01..0000000 --- a/modules/nf-core/agat/convertspgff2gtf/meta.yml +++ /dev/null @@ -1,44 +0,0 @@ -name: agat_convertspgff2gtf -description: | - Converts a GFF/GTF file into a proper GTF file -keywords: - - genome - - gff - - gtf - - conversion -tools: - - agat: - description: "AGAT is a toolkit for manipulation and getting information from GFF/GTF files" - homepage: "https://github.com/NBISweden/AGAT" - documentation: "https://agat.readthedocs.io/" - tool_dev_url: "https://github.com/NBISweden/AGAT" - doi: "10.5281/zenodo.3552717" - licence: ["GPL v3"] -input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - gff: - type: file - description: Annotation file in GFF3/GTF format - pattern: "*.{gff, gtf}" -output: - - output_gtf: - type: file - description: Annotation file in GTF format - pattern: "*.{gtf}" - - log: - type: file - description: Log file of the conversion process - pattern: "*.{log}" - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" -authors: - - "@toniher" -maintainers: - - "@toniher" - - "@gallvp" diff --git a/modules/nf-core/agat/convertspgff2gtf/tests/main.nf.test b/modules/nf-core/agat/convertspgff2gtf/tests/main.nf.test deleted file mode 100644 index 401f455..0000000 --- a/modules/nf-core/agat/convertspgff2gtf/tests/main.nf.test +++ /dev/null @@ -1,62 +0,0 @@ -nextflow_process { - - name "Test Process AGAT_CONVERTSPGFF2GTF" - script "../main.nf" - process "AGAT_CONVERTSPGFF2GTF" - - tag "modules" - tag "modules_nfcore" - tag "agat" - tag "agat/convertspgff2gtf" - - test("sarscov2 - genome [gff3]") { - - when { - process { - """ - input[0] = [ - [ id: 'test' ], // meta map - file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.gff3', checkIfExists: true) - ] - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(process.out.output_gtf, - process.out.versions).match() }, - { assert path(process.out.log[0][1]).exists() } - ) - } - - } - - test("sarscov2 - genome [gff3] - stub") { - - options "-stub" - - when { - process { - """ - input[0] = [ - [ id: 'test' ], // meta map - file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.gff3', checkIfExists: true) - ] - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(process.out.output_gtf.collect { file(it[1]).getName() } + - process.out.log.collect { file(it[1]).getName() } + - process.out.versions ).match() } - ) - } - - } - -} diff --git a/modules/nf-core/agat/convertspgff2gtf/tests/main.nf.test.snap b/modules/nf-core/agat/convertspgff2gtf/tests/main.nf.test.snap deleted file mode 100644 index 4088c71..0000000 --- a/modules/nf-core/agat/convertspgff2gtf/tests/main.nf.test.snap +++ /dev/null @@ -1,36 +0,0 @@ -{ - "sarscov2 - genome [gff3] - stub": { - "content": [ - [ - "test.agat.gtf", - "genome.gff3.agat.log", - "versions.yml:md5,dcc621fac77aa683287f6a0d61e10395" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-05-08T10:05:11.177573" - }, - "sarscov2 - genome [gff3]": { - "content": [ - [ - [ - { - "id": "test" - }, - "test.agat.gtf:md5,be1c396ac00fd5a84dc08a36d84ff8c5" - ] - ], - [ - "versions.yml:md5,dcc621fac77aa683287f6a0d61e10395" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-05-08T10:05:06.695419" - } -} \ No newline at end of file diff --git a/modules/nf-core/agat/convertspgff2gtf/tests/tags.yml b/modules/nf-core/agat/convertspgff2gtf/tests/tags.yml deleted file mode 100644 index 7a59648..0000000 --- a/modules/nf-core/agat/convertspgff2gtf/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -agat/convertspgff2gtf: - - "modules/nf-core/agat/convertspgff2gtf/**" diff --git a/modules/nf-core/agat/convertspgxf2gxf/environment.yml b/modules/nf-core/agat/convertspgxf2gxf/environment.yml deleted file mode 100644 index 6ed34fa..0000000 --- a/modules/nf-core/agat/convertspgxf2gxf/environment.yml +++ /dev/null @@ -1,7 +0,0 @@ -name: agat_convertspgxf2gxf -channels: - - conda-forge - - bioconda - - defaults -dependencies: - - bioconda::agat=1.4.0 diff --git a/modules/nf-core/agat/convertspgxf2gxf/main.nf b/modules/nf-core/agat/convertspgxf2gxf/main.nf deleted file mode 100644 index b9a7668..0000000 --- a/modules/nf-core/agat/convertspgxf2gxf/main.nf +++ /dev/null @@ -1,48 +0,0 @@ -process AGAT_CONVERTSPGXF2GXF { - tag "$meta.id" - label 'process_single' - - conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/agat:1.4.0--pl5321hdfd78af_0' : - 'biocontainers/agat:1.4.0--pl5321hdfd78af_0' }" - - input: - tuple val(meta), path(gxf) - - output: - tuple val(meta), path("*.agat.gff") , emit: output_gff - tuple val(meta), path("*.log") , emit: log - path "versions.yml" , emit: versions - - when: - task.ext.when == null || task.ext.when - - script: - def args = task.ext.args ?: '' - def prefix = task.ext.prefix ?: "${meta.id}" - """ - agat_convert_sp_gxf2gxf.pl \\ - --gxf $gxf \\ - --output ${prefix}.agat.gff \\ - $args - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - agat: \$(agat_convert_sp_gxf2gxf.pl --help | sed -n 's/.*(AGAT) - Version: \\(.*\\) .*/\\1/p') - END_VERSIONS - """ - - stub: - def args = task.ext.args ?: '' - def prefix = task.ext.prefix ?: "${meta.id}" - """ - touch ${prefix}.agat.gff - touch ${gxf}.agat.log - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - agat: \$(agat_convert_sp_gxf2gxf.pl --help | sed -n 's/.*(AGAT) - Version: \\(.*\\) .*/\\1/p') - END_VERSIONS - """ -} diff --git a/modules/nf-core/agat/convertspgxf2gxf/meta.yml b/modules/nf-core/agat/convertspgxf2gxf/meta.yml deleted file mode 100644 index 0ef9881..0000000 --- a/modules/nf-core/agat/convertspgxf2gxf/meta.yml +++ /dev/null @@ -1,43 +0,0 @@ -name: agat_convertspgxf2gxf -description: | - Fixes and standardizes GFF/GTF files and outputs a cleaned GFF/GTF file -keywords: - - genome - - gff - - gtf - - conversion -tools: - - agat: - description: "AGAT is a toolkit for manipulation and getting information from GFF/GTF files" - homepage: "https://github.com/NBISweden/AGAT" - documentation: "https://agat.readthedocs.io/" - tool_dev_url: "https://github.com/NBISweden/AGAT" - doi: "10.5281/zenodo.3552717" - licence: ["GPL v3"] -input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - gxf: - type: file - description: Annotation file in GFF3/GTF format - pattern: "*.{gff, gtf}" -output: - - output_gff: - type: file - description: Cleaned annotation file in GFF3 format - pattern: "*.{gff}" - - log: - type: file - description: Log file of the conversion process - pattern: "*.{log}" - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" -authors: - - "@toniher" -maintainers: - - "@toniher" diff --git a/modules/nf-core/agat/convertspgxf2gxf/tests/main.nf.test b/modules/nf-core/agat/convertspgxf2gxf/tests/main.nf.test deleted file mode 100644 index d8d7bc2..0000000 --- a/modules/nf-core/agat/convertspgxf2gxf/tests/main.nf.test +++ /dev/null @@ -1,60 +0,0 @@ -nextflow_process { - - name "Test Process AGAT_CONVERTSPGXF2GXF" - script "../main.nf" - process "AGAT_CONVERTSPGXF2GXF" - - tag "modules" - tag "modules_nfcore" - tag "agat" - tag "agat/convertspgxf2gxf" - - test("sarscov2 genome [gtf]") { - - when { - process { - """ - input[0] = [ - [ id: 'test' ], // meta map - file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.gtf', checkIfExists: true) - ] - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(process.out.output_gff, - process.out.versions).match() }, - { assert path(process.out.log[0][1]).exists() } - ) - } - - } - - test("sarscov2 genome [gtf] - stub") { - - options "-stub" - - when { - process { - """ - input[0] = [ - [ id: 'test' ], // meta map - file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.gtf', checkIfExists: true) - ] - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(process.out).match() } - ) - } - - } - -} diff --git a/modules/nf-core/agat/convertspgxf2gxf/tests/main.nf.test.snap b/modules/nf-core/agat/convertspgxf2gxf/tests/main.nf.test.snap deleted file mode 100644 index e89073f..0000000 --- a/modules/nf-core/agat/convertspgxf2gxf/tests/main.nf.test.snap +++ /dev/null @@ -1,71 +0,0 @@ -{ - "sarscov2 genome [gtf] - stub": { - "content": [ - { - "0": [ - [ - { - "id": "test" - }, - "test.agat.gff:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "1": [ - [ - { - "id": "test" - }, - "genome.gtf.agat.log:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "2": [ - "versions.yml:md5,5ec6166c5c080ec4bc08a8fe55ada486" - ], - "log": [ - [ - { - "id": "test" - }, - "genome.gtf.agat.log:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "output_gff": [ - [ - { - "id": "test" - }, - "test.agat.gff:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "versions": [ - "versions.yml:md5,5ec6166c5c080ec4bc08a8fe55ada486" - ] - } - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-04-12T12:25:34.583294" - }, - "sarscov2 genome [gtf]": { - "content": [ - [ - [ - { - "id": "test" - }, - "test.agat.gff:md5,7d7e9bcd82a2f0bb7d8a38f85e82f0bc" - ] - ], - [ - "versions.yml:md5,5ec6166c5c080ec4bc08a8fe55ada486" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-04-12T12:21:21.310464" - } -} \ No newline at end of file diff --git a/modules/nf-core/agat/convertspgxf2gxf/tests/tags.yml b/modules/nf-core/agat/convertspgxf2gxf/tests/tags.yml deleted file mode 100644 index 85c7000..0000000 --- a/modules/nf-core/agat/convertspgxf2gxf/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -agat/convertspgxf2gxf: - - "modules/nf-core/agat/convertspgxf2gxf/**" diff --git a/modules/nf-core/agat/spfilterfeaturefromkilllist/environment.yml b/modules/nf-core/agat/spfilterfeaturefromkilllist/environment.yml deleted file mode 100644 index fb2df48..0000000 --- a/modules/nf-core/agat/spfilterfeaturefromkilllist/environment.yml +++ /dev/null @@ -1,9 +0,0 @@ ---- -# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json -name: "agat_spfilterfeaturefromkilllist" -channels: - - conda-forge - - bioconda - - defaults -dependencies: - - "bioconda::agat=1.4.0" diff --git a/modules/nf-core/agat/spfilterfeaturefromkilllist/main.nf b/modules/nf-core/agat/spfilterfeaturefromkilllist/main.nf deleted file mode 100644 index 4918ed7..0000000 --- a/modules/nf-core/agat/spfilterfeaturefromkilllist/main.nf +++ /dev/null @@ -1,53 +0,0 @@ -process AGAT_SPFILTERFEATUREFROMKILLLIST { - tag "$meta.id" - label 'process_single' - - conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/agat:1.4.0--pl5321hdfd78af_0': - 'biocontainers/agat:1.4.0--pl5321hdfd78af_0' }" - - input: - tuple val(meta), path(gff) - path kill_list - path config - - output: - tuple val(meta), path("*.gff"), emit: gff - path "versions.yml" , emit: versions - - when: - task.ext.when == null || task.ext.when - - script: - def args = task.ext.args ?: '' - def prefix = task.ext.prefix ?: "${meta.id}" - def config_param = config ? "--config $config" : '' - if( "$gff" == "${prefix}.gff" ) error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!" - """ - agat_sp_filter_feature_from_kill_list.pl \\ - --gff $gff \\ - --kill_list $kill_list \\ - $config_param \\ - $args \\ - --output "${prefix}.gff" - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - agat: \$(agat_sp_filter_feature_from_kill_list.pl -h | sed -n 's/.*(AGAT) - Version: \\(.*\\) .*/\\1/p') - END_VERSIONS - """ - - stub: - def args = task.ext.args ?: '' - def prefix = task.ext.prefix ?: "${meta.id}" - if( "$gff" == "${prefix}.gff" ) error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!" - """ - touch "${prefix}.gff" - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - agat: \$(agat_sp_filter_feature_from_kill_list.pl -h | sed -n 's/.*(AGAT) - Version: \\(.*\\) .*/\\1/p') - END_VERSIONS - """ -} diff --git a/modules/nf-core/agat/spfilterfeaturefromkilllist/meta.yml b/modules/nf-core/agat/spfilterfeaturefromkilllist/meta.yml deleted file mode 100644 index d408fe7..0000000 --- a/modules/nf-core/agat/spfilterfeaturefromkilllist/meta.yml +++ /dev/null @@ -1,60 +0,0 @@ ---- -# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/meta-schema.json -name: "agat_spfilterfeaturefromkilllist" -description: | - The script aims to remove features based on a kill list. The default behaviour is to look at the features's ID. - If the feature has an ID (case insensitive) listed among the kill list it will be removed. /!\ Removing a level1 - or level2 feature will automatically remove all linked subfeatures, and removing all children of a feature will - automatically remove this feature too. -keywords: - - genomics - - gff - - remove - - feature -tools: - - "agat": - description: "Another Gff Analysis Toolkit (AGAT). Suite of tools to handle gene annotations in any GTF/GFF format." - homepage: "https://agat.readthedocs.io/en/latest/" - documentation: "https://agat.readthedocs.io/en/latest/tools/agat_sp_filter_feature_from_kill_list.html" - tool_dev_url: "https://github.com/NBISweden/AGAT" - doi: "10.5281/zenodo.3552717" - licence: ["GPL v3"] -input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. `[ id:'sample1', single_end:false ]` - - gff: - type: file - description: Input GFF3 file that will be read - pattern: "*.{gff,gff3}" - - kill_list: - type: file - description: Kill list. One value per line. - pattern: "*.txt" - - config: - type: file - description: | - Input agat config file. By default AGAT takes as input agat_config.yaml file from the working directory if any, otherwise it takes the orignal agat_config.yaml shipped with AGAT. To get the agat_config.yaml locally type: "agat config --expose". The --config option gives you the possibility to use your own AGAT config file (located elsewhere or named differently). - pattern: "*.yaml" - -output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. `[ id:'sample1', single_end:false ] - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - - gff: - type: file - description: Output GFF file. - pattern: "*.gff" - -authors: - - "@GallVp" -maintainers: - - "@GallVp" diff --git a/modules/nf-core/agat/spfilterfeaturefromkilllist/tests/main.nf.test b/modules/nf-core/agat/spfilterfeaturefromkilllist/tests/main.nf.test deleted file mode 100644 index 82a3c30..0000000 --- a/modules/nf-core/agat/spfilterfeaturefromkilllist/tests/main.nf.test +++ /dev/null @@ -1,104 +0,0 @@ -nextflow_process { - - name "Test Process AGAT_SPFILTERFEATUREFROMKILLLIST" - script "../main.nf" - process "AGAT_SPFILTERFEATUREFROMKILLLIST" - - tag "modules" - tag "modules_nfcore" - tag "agat" - tag "agat/spfilterfeaturefromkilllist" - - test("sarscov2 - gff3") { - - when { - process { - """ - input[0] = [ - [ id:'test' ], // meta map - file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.gff3', checkIfExists: true) - ] - - def kill_list = "unknown_transcript_1" - def kill_list_file = new File('kill.list.txt') - kill_list_file.text = kill_list - - input[1] = kill_list_file.toPath() - - input[2] = [] - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(process.out).match() } - ) - } - - } - - test("sarscov2 - gff3 - config") { - - when { - process { - """ - input[0] = [ - [ id:'test' ], // meta map - file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.gff3', checkIfExists: true) - ] - - def kill_list = "unknown_transcript_1" - def kill_list_file = new File('kill.list.txt') - kill_list_file.text = kill_list - - input[1] = kill_list_file.toPath() - - input[2] = file(params.modules_testdata_base_path + 'generic/config/agat_config.yaml', checkIfExists: true) - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(process.out).match() } - ) - } - - } - - test("sarscov2 - gff3 - stub") { - - options "-stub" - - when { - process { - """ - input[0] = [ - [ id:'test' ], // meta map - file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.gff3', checkIfExists: true) - ] - - def kill_list = "unknown_transcript_1" - def kill_list_file = new File('kill.list.txt') - kill_list_file.text = kill_list - - input[1] = kill_list_file.toPath() - - input[2] = [] - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(process.out).match() } - ) - } - - } - -} \ No newline at end of file diff --git a/modules/nf-core/agat/spfilterfeaturefromkilllist/tests/main.nf.test.snap b/modules/nf-core/agat/spfilterfeaturefromkilllist/tests/main.nf.test.snap deleted file mode 100644 index 8322d0f..0000000 --- a/modules/nf-core/agat/spfilterfeaturefromkilllist/tests/main.nf.test.snap +++ /dev/null @@ -1,101 +0,0 @@ -{ - "sarscov2 - gff3 - config": { - "content": [ - { - "0": [ - [ - { - "id": "test" - }, - "test.gff:md5,df19e1b84ba6f691d20c72b397c88abf" - ] - ], - "1": [ - "versions.yml:md5,e2962240799182aee69421c746be183a" - ], - "gff": [ - [ - { - "id": "test" - }, - "test.gff:md5,df19e1b84ba6f691d20c72b397c88abf" - ] - ], - "versions": [ - "versions.yml:md5,e2962240799182aee69421c746be183a" - ] - } - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" - }, - "timestamp": "2024-07-03T15:32:54.707393" - }, - "sarscov2 - gff3 - stub": { - "content": [ - { - "0": [ - [ - { - "id": "test" - }, - "test.gff:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "1": [ - "versions.yml:md5,e2962240799182aee69421c746be183a" - ], - "gff": [ - [ - { - "id": "test" - }, - "test.gff:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "versions": [ - "versions.yml:md5,e2962240799182aee69421c746be183a" - ] - } - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" - }, - "timestamp": "2024-07-03T15:32:59.888053" - }, - "sarscov2 - gff3": { - "content": [ - { - "0": [ - [ - { - "id": "test" - }, - "test.gff:md5,df19e1b84ba6f691d20c72b397c88abf" - ] - ], - "1": [ - "versions.yml:md5,e2962240799182aee69421c746be183a" - ], - "gff": [ - [ - { - "id": "test" - }, - "test.gff:md5,df19e1b84ba6f691d20c72b397c88abf" - ] - ], - "versions": [ - "versions.yml:md5,e2962240799182aee69421c746be183a" - ] - } - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" - }, - "timestamp": "2024-07-03T15:32:47.772624" - } -} \ No newline at end of file diff --git a/modules/nf-core/agat/spmergeannotations/environment.yml b/modules/nf-core/agat/spmergeannotations/environment.yml deleted file mode 100644 index 5644e08..0000000 --- a/modules/nf-core/agat/spmergeannotations/environment.yml +++ /dev/null @@ -1,9 +0,0 @@ ---- -# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json -name: "agat_spmergeannotations" -channels: - - conda-forge - - bioconda - - defaults -dependencies: - - "bioconda::agat=1.4.0" diff --git a/modules/nf-core/agat/spmergeannotations/main.nf b/modules/nf-core/agat/spmergeannotations/main.nf deleted file mode 100644 index e0861c0..0000000 --- a/modules/nf-core/agat/spmergeannotations/main.nf +++ /dev/null @@ -1,53 +0,0 @@ -process AGAT_SPMERGEANNOTATIONS { - tag "$meta.id" - label 'process_single' - - conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/agat:1.4.0--pl5321hdfd78af_0': - 'biocontainers/agat:1.4.0--pl5321hdfd78af_0' }" - - input: - tuple val(meta), path(gffs) - path config - - output: - tuple val(meta), path("*.gff") , emit: gff - path "versions.yml" , emit: versions - - when: - task.ext.when == null || task.ext.when - - script: - def args = task.ext.args ?: '' - def prefix = task.ext.prefix ?: "${meta.id}" - def config_param = config ? "--config $config" : '' - def file_names = "$gffs".split(' ') - def gff_param = file_names.collect { "--gff $it" }.join(' ') - if ( file_names.contains ( "${prefix}.gff" ) ) error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!" - """ - agat_sp_merge_annotations.pl \\ - $gff_param \\ - $config_param \\ - $args \\ - --output ${prefix}.gff - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - agat: \$(agat_sp_merge_annotations.pl -h | sed -n 's/.*(AGAT) - Version: \\(.*\\) .*/\\1/p') - END_VERSIONS - """ - - stub: - def prefix = task.ext.prefix ?: "${meta.id}" - def file_names = "$gffs".split(' ') - if ( file_names.contains ( "${prefix}.gff" ) ) error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!" - """ - touch ${prefix}.gff - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - agat: \$(agat_sp_merge_annotations.pl -h | sed -n 's/.*(AGAT) - Version: \\(.*\\) .*/\\1/p') - END_VERSIONS - """ -} diff --git a/modules/nf-core/agat/spmergeannotations/meta.yml b/modules/nf-core/agat/spmergeannotations/meta.yml deleted file mode 100644 index afa9ddd..0000000 --- a/modules/nf-core/agat/spmergeannotations/meta.yml +++ /dev/null @@ -1,54 +0,0 @@ ---- -# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/meta-schema.json -name: "agat_spmergeannotations" -description: | - This script merge different gff annotation files in one. It uses the AGAT parser that takes care of duplicated names and fixes other oddities met in those files. -keywords: - - genomics - - gff - - merge - - combine -tools: - - "agat": - description: "Another Gff Analysis Toolkit (AGAT). Suite of tools to handle gene annotations in any GTF/GFF format." - homepage: "https://agat.readthedocs.io/en/latest/" - documentation: "https://agat.readthedocs.io/en/latest/tools/agat_sp_merge_annotations.html" - tool_dev_url: "https://github.com/NBISweden/AGAT" - doi: "10.5281/zenodo.3552717" - licence: ["GPL v3"] -input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. `[ id:'sample1' ]` - - gffs: - type: list - description: A list of GFFs to merge - pattern: "[ *.{gff,gff3} ]" - - config: - type: file - description: | - Input agat config file. By default AGAT takes as input agat_config.yaml file from the working directory if any, - otherwise it takes the orignal agat_config.yaml shipped with AGAT. To get the agat_config.yaml - locally type: "agat config --expose". The --config option gives you the possibility to use your - own AGAT config file (located elsewhere or named differently). - pattern: "*.yaml" -output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. `[ id:'sample1' ]` - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - - gff: - type: file - description: Output GFF file. - pattern: "*.gff" -authors: - - "@GallVp" -maintainers: - - "@GallVp" diff --git a/modules/nf-core/agat/spmergeannotations/tests/main.nf.test b/modules/nf-core/agat/spmergeannotations/tests/main.nf.test deleted file mode 100644 index 3f500fa..0000000 --- a/modules/nf-core/agat/spmergeannotations/tests/main.nf.test +++ /dev/null @@ -1,130 +0,0 @@ -nextflow_process { - - name "Test Process AGAT_SPMERGEANNOTATIONS" - script "../main.nf" - process "AGAT_SPMERGEANNOTATIONS" - - tag "modules" - tag "modules_nfcore" - tag "agat" - tag "agat/spmergeannotations" - - test("candidatus_portiera_aleyrodidarum - multi_gffs") { - - when { - process { - """ - input[0] = [ - [ id:'test' ], // meta map - [ - file(params.modules_testdata_base_path + 'genomics/prokaryotes/candidatus_portiera_aleyrodidarum/genome/gff/test1.gff', checkIfExists: true), - file(params.modules_testdata_base_path + 'genomics/prokaryotes/candidatus_portiera_aleyrodidarum/genome/gff/test2.gff', checkIfExists: true), - file(params.modules_testdata_base_path + 'genomics/prokaryotes/candidatus_portiera_aleyrodidarum/genome/gff/test3.gff', checkIfExists: true) - ] - ] - - input[1] = [] - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert path(process.out.gff[0][1]).text.contains('AGAT gene') }, - { assert snapshot(process.out.versions).match("versions") } - ) - } - - } - - test("candidatus_portiera_aleyrodidarum - multi_gffs - stub") { - - options '-stub' - - when { - process { - """ - input[0] = [ - [ id:'test' ], // meta map - [ - file(params.modules_testdata_base_path + 'genomics/prokaryotes/candidatus_portiera_aleyrodidarum/genome/gff/test1.gff', checkIfExists: true), - file(params.modules_testdata_base_path + 'genomics/prokaryotes/candidatus_portiera_aleyrodidarum/genome/gff/test2.gff', checkIfExists: true), - file(params.modules_testdata_base_path + 'genomics/prokaryotes/candidatus_portiera_aleyrodidarum/genome/gff/test3.gff', checkIfExists: true) - ] - ] - - input[1] = [] - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(process.out).match() } - ) - } - - } - - test("candidatus_portiera_aleyrodidarum - multi_gffs - config") { - - when { - process { - """ - input[0] = [ - [ id:'test' ], // meta map - [ - file(params.modules_testdata_base_path + 'genomics/prokaryotes/candidatus_portiera_aleyrodidarum/genome/gff/test1.gff', checkIfExists: true), - file(params.modules_testdata_base_path + 'genomics/prokaryotes/candidatus_portiera_aleyrodidarum/genome/gff/test2.gff', checkIfExists: true), - file(params.modules_testdata_base_path + 'genomics/prokaryotes/candidatus_portiera_aleyrodidarum/genome/gff/test3.gff', checkIfExists: true) - ] - ] - - input[1] = file(params.modules_testdata_base_path + 'generic/config/agat_config.yaml', checkIfExists: true) - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert path(process.out.gff[0][1]).text.contains('AGAT gene') }, - { assert snapshot(process.out.versions).match("versions_config") } - ) - } - - } - - test("candidatus_portiera_aleyrodidarum - multi_gffs - stub - config") { - - options '-stub' - - when { - process { - """ - input[0] = [ - [ id:'test' ], // meta map - [ - file(params.modules_testdata_base_path + 'genomics/prokaryotes/candidatus_portiera_aleyrodidarum/genome/gff/test1.gff', checkIfExists: true), - file(params.modules_testdata_base_path + 'genomics/prokaryotes/candidatus_portiera_aleyrodidarum/genome/gff/test2.gff', checkIfExists: true), - file(params.modules_testdata_base_path + 'genomics/prokaryotes/candidatus_portiera_aleyrodidarum/genome/gff/test3.gff', checkIfExists: true) - ] - ] - - input[1] = file(params.modules_testdata_base_path + 'generic/config/agat_config.yaml', checkIfExists: true) - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(process.out).match() } - ) - } - - } - -} \ No newline at end of file diff --git a/modules/nf-core/agat/spmergeannotations/tests/main.nf.test.snap b/modules/nf-core/agat/spmergeannotations/tests/main.nf.test.snap deleted file mode 100644 index 5b56cd9..0000000 --- a/modules/nf-core/agat/spmergeannotations/tests/main.nf.test.snap +++ /dev/null @@ -1,92 +0,0 @@ -{ - "candidatus_portiera_aleyrodidarum - multi_gffs - stub": { - "content": [ - { - "0": [ - [ - { - "id": "test" - }, - "test.gff:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "1": [ - "versions.yml:md5,bb159018d6a64ae51339f7c886ad28d7" - ], - "gff": [ - [ - { - "id": "test" - }, - "test.gff:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "versions": [ - "versions.yml:md5,bb159018d6a64ae51339f7c886ad28d7" - ] - } - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" - }, - "timestamp": "2024-07-15T13:23:28.495387" - }, - "versions": { - "content": [ - [ - "versions.yml:md5,bb159018d6a64ae51339f7c886ad28d7" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" - }, - "timestamp": "2024-07-15T13:23:23.220341" - }, - "versions_config": { - "content": [ - [ - "versions.yml:md5,bb159018d6a64ae51339f7c886ad28d7" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" - }, - "timestamp": "2024-07-15T13:25:34.519378" - }, - "candidatus_portiera_aleyrodidarum - multi_gffs - stub - config": { - "content": [ - { - "0": [ - [ - { - "id": "test" - }, - "test.gff:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "1": [ - "versions.yml:md5,bb159018d6a64ae51339f7c886ad28d7" - ], - "gff": [ - [ - { - "id": "test" - }, - "test.gff:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "versions": [ - "versions.yml:md5,bb159018d6a64ae51339f7c886ad28d7" - ] - } - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" - }, - "timestamp": "2024-07-15T13:23:43.811463" - } -} \ No newline at end of file diff --git a/modules/nf-core/agat/spmergeannotations/tests/tags.yml b/modules/nf-core/agat/spmergeannotations/tests/tags.yml deleted file mode 100644 index de92188..0000000 --- a/modules/nf-core/agat/spmergeannotations/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -agat/spmergeannotations: - - "modules/nf-core/agat/spmergeannotations/**" diff --git a/modules/nf-core/cat/cat/environment.yml b/modules/nf-core/cat/cat/environment.yml deleted file mode 100644 index 17a04ef..0000000 --- a/modules/nf-core/cat/cat/environment.yml +++ /dev/null @@ -1,7 +0,0 @@ -name: cat_cat -channels: - - conda-forge - - bioconda - - defaults -dependencies: - - conda-forge::pigz=2.3.4 diff --git a/modules/nf-core/cat/cat/main.nf b/modules/nf-core/cat/cat/main.nf deleted file mode 100644 index 2862c64..0000000 --- a/modules/nf-core/cat/cat/main.nf +++ /dev/null @@ -1,78 +0,0 @@ -process CAT_CAT { - tag "$meta.id" - label 'process_low' - - conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/pigz:2.3.4' : - 'biocontainers/pigz:2.3.4' }" - - input: - tuple val(meta), path(files_in) - - output: - tuple val(meta), path("${prefix}"), emit: file_out - path "versions.yml" , emit: versions - - when: - task.ext.when == null || task.ext.when - - script: - def args = task.ext.args ?: '' - def args2 = task.ext.args2 ?: '' - def file_list = files_in.collect { it.toString() } - - // choose appropriate concatenation tool depending on input and output format - - // | input | output | command1 | command2 | - // |-----------|------------|----------|----------| - // | gzipped | gzipped | cat | | - // | ungzipped | ungzipped | cat | | - // | gzipped | ungzipped | zcat | | - // | ungzipped | gzipped | cat | pigz | - - // Use input file ending as default - prefix = task.ext.prefix ?: "${meta.id}${getFileSuffix(file_list[0])}" - out_zip = prefix.endsWith('.gz') - in_zip = file_list[0].endsWith('.gz') - command1 = (in_zip && !out_zip) ? 'zcat' : 'cat' - command2 = (!in_zip && out_zip) ? "| pigz -c -p $task.cpus $args2" : '' - if(file_list.contains(prefix.trim())) { - error "The name of the input file can't be the same as for the output prefix in the " + - "module CAT_CAT (currently `$prefix`). Please choose a different one." - } - """ - $command1 \\ - $args \\ - ${file_list.join(' ')} \\ - $command2 \\ - > ${prefix} - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - pigz: \$( pigz --version 2>&1 | sed 's/pigz //g' ) - END_VERSIONS - """ - - stub: - def file_list = files_in.collect { it.toString() } - prefix = task.ext.prefix ?: "${meta.id}${file_list[0].substring(file_list[0].lastIndexOf('.'))}" - if(file_list.contains(prefix.trim())) { - error "The name of the input file can't be the same as for the output prefix in the " + - "module CAT_CAT (currently `$prefix`). Please choose a different one." - } - """ - touch $prefix - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - pigz: \$( pigz --version 2>&1 | sed 's/pigz //g' ) - END_VERSIONS - """ -} - -// for .gz files also include the second to last extension if it is present. E.g., .fasta.gz -def getFileSuffix(filename) { - def match = filename =~ /^.*?((\.\w{1,5})?(\.\w{1,5}\.gz$))/ - return match ? match[0][1] : filename.substring(filename.lastIndexOf('.')) -} diff --git a/modules/nf-core/cat/cat/meta.yml b/modules/nf-core/cat/cat/meta.yml deleted file mode 100644 index 00a8db0..0000000 --- a/modules/nf-core/cat/cat/meta.yml +++ /dev/null @@ -1,36 +0,0 @@ -name: cat_cat -description: A module for concatenation of gzipped or uncompressed files -keywords: - - concatenate - - gzip - - cat -tools: - - cat: - description: Just concatenation - documentation: https://man7.org/linux/man-pages/man1/cat.1.html - licence: ["GPL-3.0-or-later"] -input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - files_in: - type: file - description: List of compressed / uncompressed files - pattern: "*" -output: - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - - file_out: - type: file - description: Concatenated file. Will be gzipped if file_out ends with ".gz" - pattern: "${file_out}" -authors: - - "@erikrikarddaniel" - - "@FriederikeHanssen" -maintainers: - - "@erikrikarddaniel" - - "@FriederikeHanssen" diff --git a/modules/nf-core/cat/cat/tests/main.nf.test b/modules/nf-core/cat/cat/tests/main.nf.test deleted file mode 100644 index 9cb1617..0000000 --- a/modules/nf-core/cat/cat/tests/main.nf.test +++ /dev/null @@ -1,191 +0,0 @@ -nextflow_process { - - name "Test Process CAT_CAT" - script "../main.nf" - process "CAT_CAT" - tag "modules" - tag "modules_nfcore" - tag "cat" - tag "cat/cat" - - test("test_cat_name_conflict") { - when { - params { - outdir = "${outputDir}" - } - process { - """ - input[0] = - [ - [ id:'genome', single_end:true ], - [ - file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true), - file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.sizes', checkIfExists: true) - ] - ] - """ - } - } - then { - assertAll( - { assert !process.success }, - { assert process.stdout.toString().contains("The name of the input file can't be the same as for the output prefix") }, - { assert snapshot(process.out.versions).match() } - ) - } - } - - test("test_cat_unzipped_unzipped") { - when { - params { - outdir = "${outputDir}" - } - process { - """ - input[0] = - [ - [ id:'test', single_end:true ], - [ - file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true), - file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.sizes', checkIfExists: true) - ] - ] - """ - } - } - then { - assertAll( - { assert process.success }, - { assert snapshot(process.out).match() } - ) - } - } - - - test("test_cat_zipped_zipped") { - when { - params { - outdir = "${outputDir}" - } - process { - """ - input[0] = - [ - [ id:'test', single_end:true ], - [ - file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.gff3.gz', checkIfExists: true), - file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/alignment/last/contigs.genome.maf.gz', checkIfExists: true) - ] - ] - """ - } - } - then { - def lines = path(process.out.file_out.get(0).get(1)).linesGzip - assertAll( - { assert process.success }, - { assert snapshot( - lines[0..5], - lines.size(), - process.out.versions - ).match() - } - ) - } - } - - test("test_cat_zipped_unzipped") { - config './nextflow_zipped_unzipped.config' - - when { - params { - outdir = "${outputDir}" - } - process { - """ - input[0] = - [ - [ id:'test', single_end:true ], - [ - file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.gff3.gz', checkIfExists: true), - file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/alignment/last/contigs.genome.maf.gz', checkIfExists: true) - ] - ] - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(process.out).match() } - ) - } - - } - - test("test_cat_unzipped_zipped") { - config './nextflow_unzipped_zipped.config' - when { - params { - outdir = "${outputDir}" - } - process { - """ - input[0] = - [ - [ id:'test', single_end:true ], - [ - file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true), - file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.sizes', checkIfExists: true) - ] - ] - """ - } - } - then { - def lines = path(process.out.file_out.get(0).get(1)).linesGzip - assertAll( - { assert process.success }, - { assert snapshot( - lines[0..5], - lines.size(), - process.out.versions - ).match() - } - ) - } - } - - test("test_cat_one_file_unzipped_zipped") { - config './nextflow_unzipped_zipped.config' - when { - params { - outdir = "${outputDir}" - } - process { - """ - input[0] = - [ - [ id:'test', single_end:true ], - [ - file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) - ] - ] - """ - } - } - then { - def lines = path(process.out.file_out.get(0).get(1)).linesGzip - assertAll( - { assert process.success }, - { assert snapshot( - lines[0..5], - lines.size(), - process.out.versions - ).match() - } - ) - } - } -} diff --git a/modules/nf-core/cat/cat/tests/main.nf.test.snap b/modules/nf-core/cat/cat/tests/main.nf.test.snap deleted file mode 100644 index b7623ee..0000000 --- a/modules/nf-core/cat/cat/tests/main.nf.test.snap +++ /dev/null @@ -1,147 +0,0 @@ -{ - "test_cat_unzipped_unzipped": { - "content": [ - { - "0": [ - [ - { - "id": "test", - "single_end": true - }, - "test.fasta:md5,f44b33a0e441ad58b2d3700270e2dbe2" - ] - ], - "1": [ - "versions.yml:md5,115ed6177ebcff24eb99d503fa5ef894" - ], - "file_out": [ - [ - { - "id": "test", - "single_end": true - }, - "test.fasta:md5,f44b33a0e441ad58b2d3700270e2dbe2" - ] - ], - "versions": [ - "versions.yml:md5,115ed6177ebcff24eb99d503fa5ef894" - ] - } - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.3" - }, - "timestamp": "2023-10-16T14:32:18.500464399" - }, - "test_cat_zipped_unzipped": { - "content": [ - { - "0": [ - [ - { - "id": "test", - "single_end": true - }, - "cat.txt:md5,c439d3b60e7bc03e8802a451a0d9a5d9" - ] - ], - "1": [ - "versions.yml:md5,115ed6177ebcff24eb99d503fa5ef894" - ], - "file_out": [ - [ - { - "id": "test", - "single_end": true - }, - "cat.txt:md5,c439d3b60e7bc03e8802a451a0d9a5d9" - ] - ], - "versions": [ - "versions.yml:md5,115ed6177ebcff24eb99d503fa5ef894" - ] - } - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.3" - }, - "timestamp": "2023-10-16T14:32:49.642741302" - }, - "test_cat_zipped_zipped": { - "content": [ - [ - "MT192765.1\tGenbank\ttranscript\t259\t29667\t.\t+\t.\tID=unknown_transcript_1;geneID=orf1ab;gene_name=orf1ab", - "MT192765.1\tGenbank\tgene\t259\t21548\t.\t+\t.\tParent=unknown_transcript_1", - "MT192765.1\tGenbank\tCDS\t259\t13461\t.\t+\t0\tParent=unknown_transcript_1;exception=\"ribosomal slippage\";gbkey=CDS;gene=orf1ab;note=\"pp1ab;translated=by -1 ribosomal frameshift\";product=\"orf1ab polyprotein\";protein_id=QIK50426.1", - "MT192765.1\tGenbank\tCDS\t13461\t21548\t.\t+\t0\tParent=unknown_transcript_1;exception=\"ribosomal slippage\";gbkey=CDS;gene=orf1ab;note=\"pp1ab;translated=by -1 ribosomal frameshift\";product=\"orf1ab polyprotein\";protein_id=QIK50426.1", - "MT192765.1\tGenbank\tCDS\t21556\t25377\t.\t+\t0\tParent=unknown_transcript_1;gbkey=CDS;gene=S;note=\"structural protein\";product=\"surface glycoprotein\";protein_id=QIK50427.1", - "MT192765.1\tGenbank\tgene\t21556\t25377\t.\t+\t.\tParent=unknown_transcript_1" - ], - 78, - [ - "versions.yml:md5,115ed6177ebcff24eb99d503fa5ef894" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.3" - }, - "timestamp": "2024-07-22T11:51:46.802978" - }, - "test_cat_name_conflict": { - "content": [ - [ - - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.3" - }, - "timestamp": "2024-07-22T11:51:29.45394" - }, - "test_cat_one_file_unzipped_zipped": { - "content": [ - [ - ">MT192765.1 Severe acute respiratory syndrome coronavirus 2 isolate SARS-CoV-2/human/USA/PC00101P/2020, complete genome", - "GTTTATACCTTCCCAGGTAACAAACCAACCAACTTTCGATCTCTTGTAGATCTGTTCTCTAAACGAACTTTAAAATCTGT", - "GTGGCTGTCACTCGGCTGCATGCTTAGTGCACTCACGCAGTATAATTAATAACTAATTACTGTCGTTGACAGGACACGAG", - "TAACTCGTCTATCTTCTGCAGGCTGCTTACGGTTTCGTCCGTGTTGCAGCCGATCATCAGCACATCTAGGTTTTGTCCGG", - "GTGTGACCGAAAGGTAAGATGGAGAGCCTTGTCCCTGGTTTCAACGAGAAAACACACGTCCAACTCAGTTTGCCTGTTTT", - "ACAGGTTCGCGACGTGCTCGTACGTGGCTTTGGAGACTCCGTGGAGGAGGTCTTATCAGAGGCACGTCAACATCTTAAAG" - ], - 374, - [ - "versions.yml:md5,115ed6177ebcff24eb99d503fa5ef894" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.3" - }, - "timestamp": "2024-07-22T11:52:02.774016" - }, - "test_cat_unzipped_zipped": { - "content": [ - [ - ">MT192765.1 Severe acute respiratory syndrome coronavirus 2 isolate SARS-CoV-2/human/USA/PC00101P/2020, complete genome", - "GTTTATACCTTCCCAGGTAACAAACCAACCAACTTTCGATCTCTTGTAGATCTGTTCTCTAAACGAACTTTAAAATCTGT", - "GTGGCTGTCACTCGGCTGCATGCTTAGTGCACTCACGCAGTATAATTAATAACTAATTACTGTCGTTGACAGGACACGAG", - "TAACTCGTCTATCTTCTGCAGGCTGCTTACGGTTTCGTCCGTGTTGCAGCCGATCATCAGCACATCTAGGTTTTGTCCGG", - "GTGTGACCGAAAGGTAAGATGGAGAGCCTTGTCCCTGGTTTCAACGAGAAAACACACGTCCAACTCAGTTTGCCTGTTTT", - "ACAGGTTCGCGACGTGCTCGTACGTGGCTTTGGAGACTCCGTGGAGGAGGTCTTATCAGAGGCACGTCAACATCTTAAAG" - ], - 375, - [ - "versions.yml:md5,115ed6177ebcff24eb99d503fa5ef894" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.3" - }, - "timestamp": "2024-07-22T11:51:57.581523" - } -} \ No newline at end of file diff --git a/modules/nf-core/cat/cat/tests/nextflow_unzipped_zipped.config b/modules/nf-core/cat/cat/tests/nextflow_unzipped_zipped.config deleted file mode 100644 index ec26b0f..0000000 --- a/modules/nf-core/cat/cat/tests/nextflow_unzipped_zipped.config +++ /dev/null @@ -1,6 +0,0 @@ - -process { - withName: CAT_CAT { - ext.prefix = 'cat.txt.gz' - } -} diff --git a/modules/nf-core/cat/cat/tests/nextflow_zipped_unzipped.config b/modules/nf-core/cat/cat/tests/nextflow_zipped_unzipped.config deleted file mode 100644 index fbc7978..0000000 --- a/modules/nf-core/cat/cat/tests/nextflow_zipped_unzipped.config +++ /dev/null @@ -1,8 +0,0 @@ - -process { - - withName: CAT_CAT { - ext.prefix = 'cat.txt' - } - -} diff --git a/modules/nf-core/cat/cat/tests/tags.yml b/modules/nf-core/cat/cat/tests/tags.yml deleted file mode 100644 index 37b578f..0000000 --- a/modules/nf-core/cat/cat/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -cat/cat: - - modules/nf-core/cat/cat/** diff --git a/modules/nf-core/cat/fastq/environment.yml b/modules/nf-core/cat/fastq/environment.yml deleted file mode 100644 index 8c69b12..0000000 --- a/modules/nf-core/cat/fastq/environment.yml +++ /dev/null @@ -1,7 +0,0 @@ -name: cat_fastq -channels: - - conda-forge - - bioconda - - defaults -dependencies: - - conda-forge::coreutils=8.30 diff --git a/modules/nf-core/cat/fastq/main.nf b/modules/nf-core/cat/fastq/main.nf deleted file mode 100644 index b68e5f9..0000000 --- a/modules/nf-core/cat/fastq/main.nf +++ /dev/null @@ -1,79 +0,0 @@ -process CAT_FASTQ { - tag "$meta.id" - label 'process_single' - - conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/ubuntu:20.04' : - 'nf-core/ubuntu:20.04' }" - - input: - tuple val(meta), path(reads, stageAs: "input*/*") - - output: - tuple val(meta), path("*.merged.fastq.gz"), emit: reads - path "versions.yml" , emit: versions - - when: - task.ext.when == null || task.ext.when - - script: - def args = task.ext.args ?: '' - def prefix = task.ext.prefix ?: "${meta.id}" - def readList = reads instanceof List ? reads.collect{ it.toString() } : [reads.toString()] - if (meta.single_end) { - if (readList.size >= 1) { - """ - cat ${readList.join(' ')} > ${prefix}.merged.fastq.gz - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - cat: \$(echo \$(cat --version 2>&1) | sed 's/^.*coreutils) //; s/ .*\$//') - END_VERSIONS - """ - } - } else { - if (readList.size >= 2) { - def read1 = [] - def read2 = [] - readList.eachWithIndex{ v, ix -> ( ix & 1 ? read2 : read1 ) << v } - """ - cat ${read1.join(' ')} > ${prefix}_1.merged.fastq.gz - cat ${read2.join(' ')} > ${prefix}_2.merged.fastq.gz - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - cat: \$(echo \$(cat --version 2>&1) | sed 's/^.*coreutils) //; s/ .*\$//') - END_VERSIONS - """ - } - } - - stub: - def prefix = task.ext.prefix ?: "${meta.id}" - def readList = reads instanceof List ? reads.collect{ it.toString() } : [reads.toString()] - if (meta.single_end) { - if (readList.size >= 1) { - """ - echo '' | gzip > ${prefix}.merged.fastq.gz - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - cat: \$(echo \$(cat --version 2>&1) | sed 's/^.*coreutils) //; s/ .*\$//') - END_VERSIONS - """ - } - } else { - if (readList.size >= 2) { - """ - echo '' | gzip > ${prefix}_1.merged.fastq.gz - echo '' | gzip > ${prefix}_2.merged.fastq.gz - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - cat: \$(echo \$(cat --version 2>&1) | sed 's/^.*coreutils) //; s/ .*\$//') - END_VERSIONS - """ - } - } -} diff --git a/modules/nf-core/cat/fastq/meta.yml b/modules/nf-core/cat/fastq/meta.yml deleted file mode 100644 index db4ac3c..0000000 --- a/modules/nf-core/cat/fastq/meta.yml +++ /dev/null @@ -1,42 +0,0 @@ -name: cat_fastq -description: Concatenates fastq files -keywords: - - cat - - fastq - - concatenate -tools: - - cat: - description: | - The cat utility reads files sequentially, writing them to the standard output. - documentation: https://www.gnu.org/software/coreutils/manual/html_node/cat-invocation.html - licence: ["GPL-3.0-or-later"] -input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - reads: - type: file - description: | - List of input FastQ files to be concatenated. -output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - reads: - type: file - description: Merged fastq file - pattern: "*.{merged.fastq.gz}" - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" -authors: - - "@joseespinosa" - - "@drpatelh" -maintainers: - - "@joseespinosa" - - "@drpatelh" diff --git a/modules/nf-core/cat/fastq/tests/main.nf.test b/modules/nf-core/cat/fastq/tests/main.nf.test deleted file mode 100644 index f88a78b..0000000 --- a/modules/nf-core/cat/fastq/tests/main.nf.test +++ /dev/null @@ -1,248 +0,0 @@ -// NOTE The version snaps may not be consistant -// https://github.com/nf-core/modules/pull/4087#issuecomment-1767948035 -nextflow_process { - - name "Test Process CAT_FASTQ" - script "../main.nf" - process "CAT_FASTQ" - tag "modules" - tag "modules_nfcore" - tag "cat" - tag "cat/fastq" - - test("test_cat_fastq_single_end") { - - when { - process { - """ - input[0] = Channel.of([ - [ id:'test', single_end:true ], // meta map - [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true)] - ]) - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(process.out).match() } - ) - } - } - - test("test_cat_fastq_paired_end") { - - when { - process { - """ - input[0] = Channel.of([ - [ id:'test', single_end:false ], // meta map - [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true), - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test2_1.fastq.gz', checkIfExists: true), - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test2_2.fastq.gz', checkIfExists: true)] - ]) - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(process.out).match() } - ) - } - } - - test("test_cat_fastq_single_end_same_name") { - - when { - process { - """ - input[0] = Channel.of([ - [ id:'test', single_end:true ], // meta map - [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true)] - ]) - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(process.out).match() } - ) - } - } - - test("test_cat_fastq_paired_end_same_name") { - - when { - process { - """ - input[0] = Channel.of([ - [ id:'test', single_end:false ], // meta map - [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true), - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true)] - ]) - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(process.out).match() } - ) - } - } - - test("test_cat_fastq_single_end_single_file") { - - when { - process { - """ - input[0] = Channel.of([ - [ id:'test', single_end:true ], // meta map - [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true)] - ]) - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(process.out).match() } - ) - } - } - - test("test_cat_fastq_single_end - stub") { - - options "-stub" - - when { - process { - """ - input[0] = Channel.of([ - [ id:'test', single_end:true ], // meta map - [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true)] - ]) - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(process.out).match() } - ) - } - } - - test("test_cat_fastq_paired_end - stub") { - - options "-stub" - - when { - process { - """ - input[0] = Channel.of([ - [ id:'test', single_end:false ], // meta map - [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true), - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test2_1.fastq.gz', checkIfExists: true), - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test2_2.fastq.gz', checkIfExists: true)] - ]) - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(process.out).match() } - ) - } - } - - test("test_cat_fastq_single_end_same_name - stub") { - - options "-stub" - - when { - process { - """ - input[0] = Channel.of([ - [ id:'test', single_end:true ], // meta map - [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true)] - ]) - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(process.out).match() } - ) - } - } - - test("test_cat_fastq_paired_end_same_name - stub") { - - options "-stub" - - when { - process { - """ - input[0] = Channel.of([ - [ id:'test', single_end:false ], // meta map - [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true), - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true)] - ]) - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(process.out).match() } - ) - } - } - - test("test_cat_fastq_single_end_single_file - stub") { - - options "-stub" - - when { - process { - """ - input[0] = Channel.of([ - [ id:'test', single_end:true ], // meta map - [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true)] - ]) - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(process.out).match() } - ) - } - } -} diff --git a/modules/nf-core/cat/fastq/tests/main.nf.test.snap b/modules/nf-core/cat/fastq/tests/main.nf.test.snap deleted file mode 100644 index aec119a..0000000 --- a/modules/nf-core/cat/fastq/tests/main.nf.test.snap +++ /dev/null @@ -1,376 +0,0 @@ -{ - "test_cat_fastq_single_end": { - "content": [ - { - "0": [ - [ - { - "id": "test", - "single_end": true - }, - "test.merged.fastq.gz:md5,ee314a9bd568d06617171b0c85f508da" - ] - ], - "1": [ - "versions.yml:md5,d42d6e24d67004608495883e00bd501b" - ], - "reads": [ - [ - { - "id": "test", - "single_end": true - }, - "test.merged.fastq.gz:md5,ee314a9bd568d06617171b0c85f508da" - ] - ], - "versions": [ - "versions.yml:md5,d42d6e24d67004608495883e00bd501b" - ] - } - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" - }, - "timestamp": "2024-01-17T17:30:39.816981" - }, - "test_cat_fastq_single_end_same_name": { - "content": [ - { - "0": [ - [ - { - "id": "test", - "single_end": true - }, - "test.merged.fastq.gz:md5,3ad9406595fafec8172368f9cd0b6a22" - ] - ], - "1": [ - "versions.yml:md5,d42d6e24d67004608495883e00bd501b" - ], - "reads": [ - [ - { - "id": "test", - "single_end": true - }, - "test.merged.fastq.gz:md5,3ad9406595fafec8172368f9cd0b6a22" - ] - ], - "versions": [ - "versions.yml:md5,d42d6e24d67004608495883e00bd501b" - ] - } - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" - }, - "timestamp": "2024-01-17T17:32:35.229332" - }, - "test_cat_fastq_single_end_single_file": { - "content": [ - { - "0": [ - [ - { - "id": "test", - "single_end": true - }, - "test.merged.fastq.gz:md5,4161df271f9bfcd25d5845a1e220dbec" - ] - ], - "1": [ - "versions.yml:md5,d42d6e24d67004608495883e00bd501b" - ], - "reads": [ - [ - { - "id": "test", - "single_end": true - }, - "test.merged.fastq.gz:md5,4161df271f9bfcd25d5845a1e220dbec" - ] - ], - "versions": [ - "versions.yml:md5,d42d6e24d67004608495883e00bd501b" - ] - } - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" - }, - "timestamp": "2024-01-17T17:34:00.058829" - }, - "test_cat_fastq_paired_end_same_name": { - "content": [ - { - "0": [ - [ - { - "id": "test", - "single_end": false - }, - [ - "test_1.merged.fastq.gz:md5,3ad9406595fafec8172368f9cd0b6a22", - "test_2.merged.fastq.gz:md5,a52cab0b840c7178b0ea83df1fdbe8d5" - ] - ] - ], - "1": [ - "versions.yml:md5,d42d6e24d67004608495883e00bd501b" - ], - "reads": [ - [ - { - "id": "test", - "single_end": false - }, - [ - "test_1.merged.fastq.gz:md5,3ad9406595fafec8172368f9cd0b6a22", - "test_2.merged.fastq.gz:md5,a52cab0b840c7178b0ea83df1fdbe8d5" - ] - ] - ], - "versions": [ - "versions.yml:md5,d42d6e24d67004608495883e00bd501b" - ] - } - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" - }, - "timestamp": "2024-01-17T17:33:33.031555" - }, - "test_cat_fastq_single_end - stub": { - "content": [ - { - "0": [ - [ - { - "id": "test", - "single_end": true - }, - "test.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" - ] - ], - "1": [ - "versions.yml:md5,d42d6e24d67004608495883e00bd501b" - ], - "reads": [ - [ - { - "id": "test", - "single_end": true - }, - "test.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" - ] - ], - "versions": [ - "versions.yml:md5,d42d6e24d67004608495883e00bd501b" - ] - } - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" - }, - "timestamp": "2024-07-05T12:07:28.244999" - }, - "test_cat_fastq_paired_end_same_name - stub": { - "content": [ - { - "0": [ - [ - { - "id": "test", - "single_end": false - }, - [ - "test_1.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", - "test_2.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" - ] - ] - ], - "1": [ - "versions.yml:md5,d42d6e24d67004608495883e00bd501b" - ], - "reads": [ - [ - { - "id": "test", - "single_end": false - }, - [ - "test_1.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", - "test_2.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" - ] - ] - ], - "versions": [ - "versions.yml:md5,d42d6e24d67004608495883e00bd501b" - ] - } - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" - }, - "timestamp": "2024-07-05T12:07:57.070911" - }, - "test_cat_fastq_single_end_same_name - stub": { - "content": [ - { - "0": [ - [ - { - "id": "test", - "single_end": true - }, - "test.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" - ] - ], - "1": [ - "versions.yml:md5,d42d6e24d67004608495883e00bd501b" - ], - "reads": [ - [ - { - "id": "test", - "single_end": true - }, - "test.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" - ] - ], - "versions": [ - "versions.yml:md5,d42d6e24d67004608495883e00bd501b" - ] - } - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" - }, - "timestamp": "2024-07-05T12:07:46.796254" - }, - "test_cat_fastq_paired_end": { - "content": [ - { - "0": [ - [ - { - "id": "test", - "single_end": false - }, - [ - "test_1.merged.fastq.gz:md5,3ad9406595fafec8172368f9cd0b6a22", - "test_2.merged.fastq.gz:md5,a52cab0b840c7178b0ea83df1fdbe8d5" - ] - ] - ], - "1": [ - "versions.yml:md5,d42d6e24d67004608495883e00bd501b" - ], - "reads": [ - [ - { - "id": "test", - "single_end": false - }, - [ - "test_1.merged.fastq.gz:md5,3ad9406595fafec8172368f9cd0b6a22", - "test_2.merged.fastq.gz:md5,a52cab0b840c7178b0ea83df1fdbe8d5" - ] - ] - ], - "versions": [ - "versions.yml:md5,d42d6e24d67004608495883e00bd501b" - ] - } - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" - }, - "timestamp": "2024-01-17T17:32:02.270935" - }, - "test_cat_fastq_paired_end - stub": { - "content": [ - { - "0": [ - [ - { - "id": "test", - "single_end": false - }, - [ - "test_1.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", - "test_2.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" - ] - ] - ], - "1": [ - "versions.yml:md5,d42d6e24d67004608495883e00bd501b" - ], - "reads": [ - [ - { - "id": "test", - "single_end": false - }, - [ - "test_1.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", - "test_2.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" - ] - ] - ], - "versions": [ - "versions.yml:md5,d42d6e24d67004608495883e00bd501b" - ] - } - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" - }, - "timestamp": "2024-07-05T12:07:37.807553" - }, - "test_cat_fastq_single_end_single_file - stub": { - "content": [ - { - "0": [ - [ - { - "id": "test", - "single_end": true - }, - "test.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" - ] - ], - "1": [ - "versions.yml:md5,d42d6e24d67004608495883e00bd501b" - ], - "reads": [ - [ - { - "id": "test", - "single_end": true - }, - "test.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" - ] - ], - "versions": [ - "versions.yml:md5,d42d6e24d67004608495883e00bd501b" - ] - } - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" - }, - "timestamp": "2024-07-05T12:14:51.861264" - } -} \ No newline at end of file diff --git a/modules/nf-core/cat/fastq/tests/tags.yml b/modules/nf-core/cat/fastq/tests/tags.yml deleted file mode 100644 index 6ac4361..0000000 --- a/modules/nf-core/cat/fastq/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -cat/fastq: - - modules/nf-core/cat/fastq/** diff --git a/modules/nf-core/custom/dumpsoftwareversions/environment.yml b/modules/nf-core/custom/dumpsoftwareversions/environment.yml deleted file mode 100644 index b48ced2..0000000 --- a/modules/nf-core/custom/dumpsoftwareversions/environment.yml +++ /dev/null @@ -1,7 +0,0 @@ -name: custom_dumpsoftwareversions -channels: - - conda-forge - - bioconda - - defaults -dependencies: - - bioconda::multiqc=1.20 diff --git a/modules/nf-core/custom/dumpsoftwareversions/main.nf b/modules/nf-core/custom/dumpsoftwareversions/main.nf deleted file mode 100644 index 105f926..0000000 --- a/modules/nf-core/custom/dumpsoftwareversions/main.nf +++ /dev/null @@ -1,24 +0,0 @@ -process CUSTOM_DUMPSOFTWAREVERSIONS { - label 'process_single' - - // Requires `pyyaml` which does not have a dedicated container but is in the MultiQC container - conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/multiqc:1.20--pyhdfd78af_0' : - 'biocontainers/multiqc:1.20--pyhdfd78af_0' }" - - input: - path versions - - output: - path "software_versions.yml" , emit: yml - path "software_versions_mqc.yml", emit: mqc_yml - path "versions.yml" , emit: versions - - when: - task.ext.when == null || task.ext.when - - script: - def args = task.ext.args ?: '' - template 'dumpsoftwareversions.py' -} diff --git a/modules/nf-core/custom/dumpsoftwareversions/meta.yml b/modules/nf-core/custom/dumpsoftwareversions/meta.yml deleted file mode 100644 index 5f15a5f..0000000 --- a/modules/nf-core/custom/dumpsoftwareversions/meta.yml +++ /dev/null @@ -1,37 +0,0 @@ -# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/meta-schema.json -name: custom_dumpsoftwareversions -description: Custom module used to dump software versions within the nf-core pipeline template -keywords: - - custom - - dump - - version -tools: - - custom: - description: Custom module used to dump software versions within the nf-core pipeline template - homepage: https://github.com/nf-core/tools - documentation: https://github.com/nf-core/tools - licence: ["MIT"] -input: - - versions: - type: file - description: YML file containing software versions - pattern: "*.yml" -output: - - yml: - type: file - description: Standard YML file containing software versions - pattern: "software_versions.yml" - - mqc_yml: - type: file - description: MultiQC custom content YML file containing software versions - pattern: "software_versions_mqc.yml" - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" -authors: - - "@drpatelh" - - "@grst" -maintainers: - - "@drpatelh" - - "@grst" diff --git a/modules/nf-core/custom/dumpsoftwareversions/templates/dumpsoftwareversions.py b/modules/nf-core/custom/dumpsoftwareversions/templates/dumpsoftwareversions.py deleted file mode 100755 index 9a493ac..0000000 --- a/modules/nf-core/custom/dumpsoftwareversions/templates/dumpsoftwareversions.py +++ /dev/null @@ -1,100 +0,0 @@ -#!/usr/bin/env python - - -"""Provide functions to merge multiple versions.yml files.""" - -import yaml -import platform -from textwrap import dedent - - -def _make_versions_html(versions): - """Generate a tabular HTML output of all versions for MultiQC.""" - html = [ - dedent( - """\\ - - - - - - - - - - """ - ) - ] - for process, tmp_versions in sorted(versions.items()): - html.append("") - for i, (tool, version) in enumerate(sorted(tmp_versions.items())): - html.append( - dedent( - f"""\\ - - - - - - """ - ) - ) - html.append("") - html.append("
Process Name Software Version
{process if (i == 0) else ''}{tool}{version}
") - return "\\n".join(html) - - -def main(): - """Load all version files and generate merged output.""" - versions_this_module = {} - versions_this_module["${task.process}"] = { - "python": platform.python_version(), - "yaml": yaml.__version__, - } - - with open("$versions") as f: - versions_by_process = yaml.load(f, Loader=yaml.BaseLoader) | versions_this_module - - # aggregate versions by the module name (derived from fully-qualified process name) - versions_by_module = {} - for process, process_versions in versions_by_process.items(): - module = process.split(":")[-1] - try: - if versions_by_module[module] != process_versions: - raise AssertionError( - "We assume that software versions are the same between all modules. " - "If you see this error-message it means you discovered an edge-case " - "and should open an issue in nf-core/tools. " - ) - except KeyError: - versions_by_module[module] = process_versions - - versions_by_module["Workflow"] = { - "Nextflow": "$workflow.nextflow.version", - "$workflow.manifest.name": "$workflow.manifest.version", - } - - versions_mqc = { - "id": "software_versions", - "section_name": "${workflow.manifest.name} Software Versions", - "section_href": "https://github.com/${workflow.manifest.name}", - "plot_type": "html", - "description": "are collected at run time from the software output.", - "data": _make_versions_html(versions_by_module), - } - - with open("software_versions.yml", "w") as f: - yaml.dump(versions_by_module, f, default_flow_style=False) - with open("software_versions_mqc.yml", "w") as f: - yaml.dump(versions_mqc, f, default_flow_style=False) - - with open("versions.yml", "w") as f: - yaml.dump(versions_this_module, f, default_flow_style=False) - - -if __name__ == "__main__": - main() diff --git a/modules/nf-core/custom/dumpsoftwareversions/tests/main.nf.test b/modules/nf-core/custom/dumpsoftwareversions/tests/main.nf.test deleted file mode 100644 index b1e1630..0000000 --- a/modules/nf-core/custom/dumpsoftwareversions/tests/main.nf.test +++ /dev/null @@ -1,43 +0,0 @@ -nextflow_process { - - name "Test Process CUSTOM_DUMPSOFTWAREVERSIONS" - script "../main.nf" - process "CUSTOM_DUMPSOFTWAREVERSIONS" - tag "modules" - tag "modules_nfcore" - tag "custom" - tag "dumpsoftwareversions" - tag "custom/dumpsoftwareversions" - - test("Should run without failures") { - when { - process { - """ - def tool1_version = ''' - TOOL1: - tool1: 0.11.9 - '''.stripIndent() - - def tool2_version = ''' - TOOL2: - tool2: 1.9 - '''.stripIndent() - - input[0] = Channel.of(tool1_version, tool2_version).collectFile() - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot( - process.out.versions, - file(process.out.mqc_yml[0]).readLines()[0..10], - file(process.out.yml[0]).readLines()[0..7] - ).match() - } - ) - } - } -} diff --git a/modules/nf-core/custom/dumpsoftwareversions/tests/main.nf.test.snap b/modules/nf-core/custom/dumpsoftwareversions/tests/main.nf.test.snap deleted file mode 100644 index 5f59a93..0000000 --- a/modules/nf-core/custom/dumpsoftwareversions/tests/main.nf.test.snap +++ /dev/null @@ -1,33 +0,0 @@ -{ - "Should run without failures": { - "content": [ - [ - "versions.yml:md5,76d454d92244589d32455833f7c1ba6d" - ], - [ - "data: \"\\n\\n \\n \\n \\n \\n \\n \\n \\n\\", - " \\n\\n\\n \\n \\n\\", - " \\ \\n\\n\\n\\n \\n \\", - " \\ \\n \\n\\n\\n\\n\\", - " \\n\\n \\n \\n\\", - " \\ \\n\\n\\n\\n\\n\\n \\n\\", - " \\ \\n \\n\\n\\n\\n\\", - " \\n\\n \\n \\n\\" - ], - [ - "CUSTOM_DUMPSOFTWAREVERSIONS:", - " python: 3.11.7", - " yaml: 5.4.1", - "TOOL1:", - " tool1: 0.11.9", - "TOOL2:", - " tool2: '1.9'", - "Workflow:" - ] - ], - "timestamp": "2024-01-09T23:01:18.710682" - } -} \ No newline at end of file diff --git a/modules/nf-core/custom/dumpsoftwareversions/tests/tags.yml b/modules/nf-core/custom/dumpsoftwareversions/tests/tags.yml deleted file mode 100644 index 405aa24..0000000 --- a/modules/nf-core/custom/dumpsoftwareversions/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -custom/dumpsoftwareversions: - - modules/nf-core/custom/dumpsoftwareversions/** diff --git a/modules/nf-core/eggnogmapper/environment.yml b/modules/nf-core/eggnogmapper/environment.yml deleted file mode 100644 index f4fb6fd..0000000 --- a/modules/nf-core/eggnogmapper/environment.yml +++ /dev/null @@ -1,7 +0,0 @@ -name: eggnogmapper -channels: - - conda-forge - - bioconda - - defaults -dependencies: - - bioconda::eggnog-mapper=2.1.12 diff --git a/modules/nf-core/eggnogmapper/main.nf b/modules/nf-core/eggnogmapper/main.nf deleted file mode 100644 index 2489b7f..0000000 --- a/modules/nf-core/eggnogmapper/main.nf +++ /dev/null @@ -1,68 +0,0 @@ -process EGGNOGMAPPER { - tag "$meta.id" - label 'process_high' - - conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/eggnog-mapper:2.1.12--pyhdfd78af_0': - 'biocontainers/eggnog-mapper:2.1.12--pyhdfd78af_0' }" - - input: - tuple val(meta), path(fasta) - path(eggnog_db) - path(eggnog_data_dir) - tuple val(meta2), path(eggnog_diamond_db) - - output: - tuple val(meta), path("*.emapper.annotations") , emit: annotations - tuple val(meta), path("*.emapper.seed_orthologs"), emit: orthologs - tuple val(meta), path("*.emapper.hits") , emit: hits - path "versions.yml" , emit: versions - - when: - task.ext.when == null || task.ext.when - - script: - def args = task.ext.args ?: '' - def prefix = task.ext.prefix ?: "${meta.id}" - def is_compressed = fasta.extension == '.gz' ? true : false - def fasta_name = is_compressed ? fasta.baseName : "$fasta" - def dbmem = task.memory.toMega() > 40000 ? '--dbmem' : '' - def database_arg = eggnog_db ? "--database $eggnog_db" : '' - def dmnd_db_arg = eggnog_diamond_db ? "--dmnd_db $eggnog_diamond_db" : '' - """ - if [ "$is_compressed" == "true" ]; then - gzip -c -d $fasta > $fasta_name - fi - - emapper.py \\ - --cpu ${task.cpus} \\ - -i ${fasta_name} \\ - --data_dir ${eggnog_data_dir} \\ - -m diamond \\ - $dmnd_db_arg \\ - $database_arg \\ - --output ${prefix} \\ - ${dbmem} \\ - $args - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - eggnog-mapper: \$(echo \$(emapper.py --version) | grep -o "emapper-[0-9]\\+\\.[0-9]\\+\\.[0-9]\\+" | sed "s/emapper-//") - END_VERSIONS - """ - - stub: - def args = task.ext.args ?: '' - def prefix = task.ext.prefix ?: "${meta.id}" - """ - touch ${prefix}.emapper.annotations - touch ${prefix}.emapper.seed_orthologs - touch ${prefix}.emapper.hits - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - eggnog-mapper: \$(echo \$(emapper.py --version) | grep -o "emapper-[0-9]\\+\\.[0-9]\\+\\.[0-9]\\+" | sed "s/emapper-//") - END_VERSIONS - """ -} diff --git a/modules/nf-core/eggnogmapper/meta.yml b/modules/nf-core/eggnogmapper/meta.yml deleted file mode 100644 index 95090a1..0000000 --- a/modules/nf-core/eggnogmapper/meta.yml +++ /dev/null @@ -1,70 +0,0 @@ ---- -# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/yaml-schema.json -name: "eggnogmapper" -description: Fast genome-wide functional annotation through orthology assignment. -keywords: - - annotation - - orthology - - genomics -tools: - - "eggnogmapper": - description: "Fast genome-wide functional annotation through orthology assignment." - homepage: "https://github.com/eggnogdb/eggnog-mapper" - documentation: "https://github.com/eggnogdb/eggnog-mapper/wiki" - tool_dev_url: "https://github.com/eggnogdb/eggnog-mapper" - doi: "10.1093/molbev/msab293" - licence: ["AGPL v3"] -input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. `[ id:'test', single_end:false ]` - - fasta: - type: file - description: Database of sequences in FASTA format - pattern: "*.{fasta,fa,fasta.gz,fa.gz}" - - eggnog_db: - type: file - description: The eggnog database file (e.g. eggnog-mapper/data/eggnog.db) - pattern: "*.db" - - eggnog_data_dir: - type: directory - description: Directory containing eggnog database files (e.g. eggnog-mapper/data) - pattern: "*" - - meta2: - type: map - description: | - Groovy Map containing database information - e.g. `[ id:'test' ]` - - eggnog_diamond_db: - type: file - description: The eggnog Diamond protein database file (e.g. eggnog-mapper/data/eggnog_proteins.dmnd) - pattern: "*.dmnd" -output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. `[ id:'test', single_end:false ]` - - annotations: - type: file - description: TSV with the results from the annotation phase - pattern: "*.emapper.annotations" - - orthologs: - type: file - description: TSV with the results from parsing the hits, linking queries with seed orthologs (with commented metadata) - pattern: "*.emapper.seed_orthologs" - - hits: - type: file - description: TSV with the results from the Diamond search phase - pattern: "*.emapper.hits" - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" -authors: - - "@vagkaratzas" -maintainers: - - "@vagkaratzas" - - "@gallvp" diff --git a/modules/nf-core/eggnogmapper/tests/main.nf.test b/modules/nf-core/eggnogmapper/tests/main.nf.test deleted file mode 100644 index 5f36b44..0000000 --- a/modules/nf-core/eggnogmapper/tests/main.nf.test +++ /dev/null @@ -1,95 +0,0 @@ -nextflow_process { - - name "Test Process EGGNOGMAPPER" - script "../main.nf" - process "EGGNOGMAPPER" - tag "modules" - tag "modules_nfcore" - tag "eggnogmapper" - tag "diamond/makedb" - - setup { - run("DIAMOND_MAKEDB") { - script "../../diamond/makedb/main.nf" - process { - """ - input[0] = [ [id:'test2'], file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/proteome.fasta', checkIfExists: true) ] - input[1] = [] - input[2] = [] - input[3] = [] - """ - } - } - } - - test("Should search for protein annotations against the eggnogmapper db") { - - when { - params { - outdir = "$outputDir" - } - process { - """ - input[0] = [ [id:'test'], file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/proteome.fasta', checkIfExists: true) ] - eggnog_db = file("https://github.com/nf-core/test-datasets/raw/eddf5b0e3336e0f93c81d4b4843b07257f9efaec/data/delete_me/eggnogmapper/eggnog.db", checkIfExists: true) - eggnog_db.copyTo("${workDir}/tmp/eggnog.db") - eggnog_data_dir = "${workDir}/tmp/" - input[1] = eggnog_db - input[2] = eggnog_data_dir - input[3] = DIAMOND_MAKEDB.out.db - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert path(process.out.annotations.get(0).get(1)).readLines().contains("ENSSASP00005000002.1\tENSSASP00005000002.1\t0.0\t14179.0\tCOG0498@1|root,COG0498@2|Bacteria,1MUWQ@1224|Proteobacteria,2VHR6@28216|Betaproteobacteria,2KUMA@206389|Rhodocyclales\t1224|Proteobacteria\tE\tthreonine synthase\t-\t-\t-\t-\t-\t-\t-\t-\t-\t-\t-\t-\t-") }, - { assert path(process.out.orthologs.get(0).get(1)).readLines().contains("ENSSASP00005000002.1\tENSSASP00005000002.1\t0.0\t14179.0\t1\t7096\t1\t7096\t100.0\t100.0\t100.0") }, - { assert snapshot(process.out.hits).match("hits") }, - { assert snapshot(process.out.versions).match("versions") } - ) - } - - } - - test("Should search for protein annotations against the eggnogmapper db -- empty-params") { - - when { - params { - outdir = "$outputDir" - } - process { - """ - eggnog_db = file("https://github.com/nf-core/test-datasets/raw/eddf5b0e3336e0f93c81d4b4843b07257f9efaec/data/delete_me/eggnogmapper/eggnog.db", checkIfExists: true) - eggnog_db.copyTo("${workDir}/tmp/eggnog.db") - - ch_synced_inputs = DIAMOND_MAKEDB.out.db.map { meta, dmnd -> - dmnd.copyTo("${workDir}/tmp/eggnog_proteins.dmnd") - - return true - } - | combine ( Channel.fromPath( "${workDir}/tmp/" ) ) - eggnog_data_dir = ch_synced_inputs.map { sync_status, data_dir -> data_dir } - - input[0] = [ [id:'test'], file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/proteome.fasta', checkIfExists: true) ] - input[1] = [] - input[2] = eggnog_data_dir - input[3] = [[], []] - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert path(process.out.annotations.get(0).get(1)).readLines().contains("ENSSASP00005000002.1\tENSSASP00005000002.1\t0.0\t14179.0\tCOG0498@1|root,COG0498@2|Bacteria,1MUWQ@1224|Proteobacteria,2VHR6@28216|Betaproteobacteria,2KUMA@206389|Rhodocyclales\t1224|Proteobacteria\tE\tthreonine synthase\t-\t-\t-\t-\t-\t-\t-\t-\t-\t-\t-\t-\t-") }, - { assert path(process.out.orthologs.get(0).get(1)).readLines().contains("ENSSASP00005000002.1\tENSSASP00005000002.1\t0.0\t14179.0\t1\t7096\t1\t7096\t100.0\t100.0\t100.0") }, - { assert snapshot(process.out.hits).match("hits--empty-params") }, - { assert snapshot(process.out.versions).match("versions--empty-params") } - ) - } - - } - -} diff --git a/modules/nf-core/eggnogmapper/tests/main.nf.test.snap b/modules/nf-core/eggnogmapper/tests/main.nf.test.snap deleted file mode 100644 index 170e8c9..0000000 --- a/modules/nf-core/eggnogmapper/tests/main.nf.test.snap +++ /dev/null @@ -1,60 +0,0 @@ -{ - "hits": { - "content": [ - [ - [ - { - "id": "test" - }, - "test.emapper.hits:md5,864b7a1f902893d8aee6621baeab7be8" - ] - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-04-12T13:43:01.751295" - }, - "versions--empty-params": { - "content": [ - [ - "versions.yml:md5,d3e4efad28b5a924585ea3dfcf72c32c" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-04-15T11:42:23.737523" - }, - "versions": { - "content": [ - [ - "versions.yml:md5,d3e4efad28b5a924585ea3dfcf72c32c" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-04-12T13:45:26.555465" - }, - "hits--empty-params": { - "content": [ - [ - [ - { - "id": "test" - }, - "test.emapper.hits:md5,864b7a1f902893d8aee6621baeab7be8" - ] - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-04-15T11:42:23.690105" - } -} \ No newline at end of file diff --git a/modules/nf-core/eggnogmapper/tests/tags.yml b/modules/nf-core/eggnogmapper/tests/tags.yml deleted file mode 100644 index 284ba2e..0000000 --- a/modules/nf-core/eggnogmapper/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -eggnogmapper: - - modules/nf-core/eggnogmapper/** diff --git a/modules/nf-core/fastavalidator/environment.yml b/modules/nf-core/fastavalidator/environment.yml deleted file mode 100644 index 70f346e..0000000 --- a/modules/nf-core/fastavalidator/environment.yml +++ /dev/null @@ -1,9 +0,0 @@ ---- -# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json -name: "fastavalidator" -channels: - - conda-forge - - bioconda - - defaults -dependencies: - - "bioconda::py_fasta_validator=0.6" diff --git a/modules/nf-core/fastavalidator/main.nf b/modules/nf-core/fastavalidator/main.nf deleted file mode 100644 index ac5470f..0000000 --- a/modules/nf-core/fastavalidator/main.nf +++ /dev/null @@ -1,62 +0,0 @@ -process FASTAVALIDATOR { - tag "$meta.id" - label 'process_single' - - conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/py_fasta_validator:0.6--py37h595c7a6_0': - 'biocontainers/py_fasta_validator:0.6--py37h595c7a6_0' }" - - input: - tuple val(meta), path(fasta) - - output: - tuple val(meta), path('*.success.log') , emit: success_log , optional: true - tuple val(meta), path('*.error.log') , emit: error_log , optional: true - path "versions.yml" , emit: versions - - when: - task.ext.when == null || task.ext.when - - script: - def prefix = task.ext.prefix ?: "${meta.id}" - """ - py_fasta_validator \\ - -f $fasta \\ - 2> "${prefix}.error.log" \\ - || echo "Errors from fasta_validate printed to ${prefix}.error.log" - - if [ \$(cat "${prefix}.error.log" | wc -l) -gt 0 ]; then - echo "Validation failed..." - - cat \\ - "${prefix}.error.log" - else - echo "Validation successful..." - - mv \\ - "${prefix}.error.log" \\ - fasta_validate.stderr - - echo "Validation successful..." \\ - > "${prefix}.success.log" - fi - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - py_fasta_validator: \$(py_fasta_validator -v | sed 's/.* version //') - END_VERSIONS - """ - - stub: - def prefix = task.ext.prefix ?: "${meta.id}" - """ - echo "Validation successful..." \\ - > "${prefix}.success.log" - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - py_fasta_validator: \$(py_fasta_validator -v | sed 's/.* version //') - END_VERSIONS - """ -} diff --git a/modules/nf-core/fastavalidator/meta.yml b/modules/nf-core/fastavalidator/meta.yml deleted file mode 100644 index c5c4371..0000000 --- a/modules/nf-core/fastavalidator/meta.yml +++ /dev/null @@ -1,53 +0,0 @@ ---- -# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/meta-schema.json -name: "fastavalidator" -description: | - "Python C-extension for a simple validator for fasta files. The module emits the validated file or an - error log upon validation failure." -keywords: - - fasta - - validation - - genome -tools: - - fasta_validate: - description: | - "Python C-extension for a simple C code to validate a fasta file. It only checks a few things, - and by default only sets its response via the return code, - so you will need to check that!" - homepage: "https://github.com/linsalrob/py_fasta_validator" - documentation: "https://github.com/linsalrob/py_fasta_validator" - tool_dev_url: "https://github.com/linsalrob/py_fasta_validator" - doi: "10.5281/zenodo.5002710" - licence: ["MIT"] -input: - - meta: - type: map - description: | - Groovy Map containing file information - e.g. [ id:'test' ] - - fasta: - type: file - description: Input fasta file - pattern: "*.fasta" -output: - - meta: - type: map - description: | - Groovy Map containing file information - e.g. [ id:'test' ] - - success_log: - type: file - description: Log file for successful validation - pattern: "*.success.log" - - error_log: - type: file - description: Log file for failed validation - pattern: "*.error.log" - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" -authors: - - "@gallvp" -maintainers: - - "@gallvp" diff --git a/modules/nf-core/fastavalidator/tests/main.nf.test b/modules/nf-core/fastavalidator/tests/main.nf.test deleted file mode 100644 index 39b00d8..0000000 --- a/modules/nf-core/fastavalidator/tests/main.nf.test +++ /dev/null @@ -1,60 +0,0 @@ -nextflow_process { - - name "Test Process FASTAVALIDATOR" - script "../main.nf" - process "FASTAVALIDATOR" - - tag "modules" - tag "modules_nfcore" - tag "fastavalidator" - - test("sarscov2-fasta-valid") { - - when { - process { - """ - input[0] = [ - [ id:'test', single_end:false ], // meta map - file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) - ] - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(process.out).match() }, - { assert process.out.success_log != null }, - { assert process.out.error_log == [] }, - { assert path(process.out.success_log.get(0).get(1)).getText().contains("Validation successful...") } - ) - } - - } - - test("sarscov2-gff3-invalid") { - - when { - process { - """ - input[0] = [ - [ id:'test', single_end:false ], // meta map - file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.gff3', checkIfExists: true) - ] - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(process.out).match() }, - { assert process.out.success_log == [] }, - { assert process.out.error_log != null }, - { assert path(process.out.error_log.get(0).get(1)).getText().contains("genome.gff3 does not start with a >") } - ) - } - - } -} diff --git a/modules/nf-core/fastavalidator/tests/main.nf.test.snap b/modules/nf-core/fastavalidator/tests/main.nf.test.snap deleted file mode 100644 index 382dee7..0000000 --- a/modules/nf-core/fastavalidator/tests/main.nf.test.snap +++ /dev/null @@ -1,76 +0,0 @@ -{ - "sarscov2-fasta-valid": { - "content": [ - { - "0": [ - [ - { - "id": "test", - "single_end": false - }, - "test.success.log:md5,b0b859eda1db5cd43915846e00ebc22c" - ] - ], - "1": [ - - ], - "2": [ - "versions.yml:md5,05aa059840b3b4dd6d88bc1e4bf976d7" - ], - "error_log": [ - - ], - "success_log": [ - [ - { - "id": "test", - "single_end": false - }, - "test.success.log:md5,b0b859eda1db5cd43915846e00ebc22c" - ] - ], - "versions": [ - "versions.yml:md5,05aa059840b3b4dd6d88bc1e4bf976d7" - ] - } - ], - "timestamp": "2023-11-28T11:23:25.106872" - }, - "sarscov2-gff3-invalid": { - "content": [ - { - "0": [ - - ], - "1": [ - [ - { - "id": "test", - "single_end": false - }, - "test.error.log:md5,531d520c0e7767176f743f197f1f87b3" - ] - ], - "2": [ - "versions.yml:md5,05aa059840b3b4dd6d88bc1e4bf976d7" - ], - "error_log": [ - [ - { - "id": "test", - "single_end": false - }, - "test.error.log:md5,531d520c0e7767176f743f197f1f87b3" - ] - ], - "success_log": [ - - ], - "versions": [ - "versions.yml:md5,05aa059840b3b4dd6d88bc1e4bf976d7" - ] - } - ], - "timestamp": "2023-11-28T11:23:29.40324" - } -} \ No newline at end of file diff --git a/modules/nf-core/fastavalidator/tests/tags.yml b/modules/nf-core/fastavalidator/tests/tags.yml deleted file mode 100644 index c3c7757..0000000 --- a/modules/nf-core/fastavalidator/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -fastavalidator: - - "modules/nf-core/fastavalidator/**" diff --git a/modules/nf-core/fastp/main.nf b/modules/nf-core/fastp/main.nf deleted file mode 100644 index e1b9f56..0000000 --- a/modules/nf-core/fastp/main.nf +++ /dev/null @@ -1,125 +0,0 @@ -process FASTP { - tag "$meta.id" - label 'process_medium' - - conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/fastp:0.23.4--h5f740d0_0' : - 'biocontainers/fastp:0.23.4--h5f740d0_0' }" - - input: - tuple val(meta), path(reads) - path adapter_fasta - val discard_trimmed_pass - val save_trimmed_fail - val save_merged - - output: - tuple val(meta), path('*.fastp.fastq.gz') , optional:true, emit: reads - tuple val(meta), path('*.json') , emit: json - tuple val(meta), path('*.html') , emit: html - tuple val(meta), path('*.log') , emit: log - tuple val(meta), path('*.fail.fastq.gz') , optional:true, emit: reads_fail - tuple val(meta), path('*.merged.fastq.gz'), optional:true, emit: reads_merged - path "versions.yml" , emit: versions - - when: - task.ext.when == null || task.ext.when - - script: - def args = task.ext.args ?: '' - def prefix = task.ext.prefix ?: "${meta.id}" - def adapter_list = adapter_fasta ? "--adapter_fasta ${adapter_fasta}" : "" - def fail_fastq = save_trimmed_fail && meta.single_end ? "--failed_out ${prefix}.fail.fastq.gz" : save_trimmed_fail && !meta.single_end ? "--failed_out ${prefix}.paired.fail.fastq.gz --unpaired1 ${prefix}_1.fail.fastq.gz --unpaired2 ${prefix}_2.fail.fastq.gz" : '' - def out_fq1 = discard_trimmed_pass ?: ( meta.single_end ? "--out1 ${prefix}.fastp.fastq.gz" : "--out1 ${prefix}_1.fastp.fastq.gz" ) - def out_fq2 = discard_trimmed_pass ?: "--out2 ${prefix}_2.fastp.fastq.gz" - // Added soft-links to original fastqs for consistent naming in MultiQC - // Use single ended for interleaved. Add --interleaved_in in config. - if ( task.ext.args?.contains('--interleaved_in') ) { - """ - [ ! -f ${prefix}.fastq.gz ] && ln -sf $reads ${prefix}.fastq.gz - - fastp \\ - --stdout \\ - --in1 ${prefix}.fastq.gz \\ - --thread $task.cpus \\ - --json ${prefix}.fastp.json \\ - --html ${prefix}.fastp.html \\ - $adapter_list \\ - $fail_fastq \\ - $args \\ - 2> >(tee ${prefix}.fastp.log >&2) \\ - | gzip -c > ${prefix}.fastp.fastq.gz - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - fastp: \$(fastp --version 2>&1 | sed -e "s/fastp //g") - END_VERSIONS - """ - } else if (meta.single_end) { - """ - [ ! -f ${prefix}.fastq.gz ] && ln -sf $reads ${prefix}.fastq.gz - - fastp \\ - --in1 ${prefix}.fastq.gz \\ - $out_fq1 \\ - --thread $task.cpus \\ - --json ${prefix}.fastp.json \\ - --html ${prefix}.fastp.html \\ - $adapter_list \\ - $fail_fastq \\ - $args \\ - 2> >(tee ${prefix}.fastp.log >&2) - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - fastp: \$(fastp --version 2>&1 | sed -e "s/fastp //g") - END_VERSIONS - """ - } else { - def merge_fastq = save_merged ? "-m --merged_out ${prefix}.merged.fastq.gz" : '' - """ - [ ! -f ${prefix}_1.fastq.gz ] && ln -sf ${reads[0]} ${prefix}_1.fastq.gz - [ ! -f ${prefix}_2.fastq.gz ] && ln -sf ${reads[1]} ${prefix}_2.fastq.gz - fastp \\ - --in1 ${prefix}_1.fastq.gz \\ - --in2 ${prefix}_2.fastq.gz \\ - $out_fq1 \\ - $out_fq2 \\ - --json ${prefix}.fastp.json \\ - --html ${prefix}.fastp.html \\ - $adapter_list \\ - $fail_fastq \\ - $merge_fastq \\ - --thread $task.cpus \\ - --detect_adapter_for_pe \\ - $args \\ - 2> >(tee ${prefix}.fastp.log >&2) - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - fastp: \$(fastp --version 2>&1 | sed -e "s/fastp //g") - END_VERSIONS - """ - } - - stub: - def prefix = task.ext.prefix ?: "${meta.id}" - def is_single_output = task.ext.args?.contains('--interleaved_in') || meta.single_end - def touch_reads = (discard_trimmed_pass) ? "" : (is_single_output) ? "echo '' | gzip > ${prefix}.fastp.fastq.gz" : "echo '' | gzip > ${prefix}_1.fastp.fastq.gz ; echo '' | gzip > ${prefix}_2.fastp.fastq.gz" - def touch_merged = (!is_single_output && save_merged) ? "echo '' | gzip > ${prefix}.merged.fastq.gz" : "" - def touch_fail_fastq = (!save_trimmed_fail) ? "" : meta.single_end ? "echo '' | gzip > ${prefix}.fail.fastq.gz" : "echo '' | gzip > ${prefix}.paired.fail.fastq.gz ; echo '' | gzip > ${prefix}_1.fail.fastq.gz ; echo '' | gzip > ${prefix}_2.fail.fastq.gz" - """ - $touch_reads - $touch_fail_fastq - $touch_merged - touch "${prefix}.fastp.json" - touch "${prefix}.fastp.html" - touch "${prefix}.fastp.log" - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - fastp: \$(fastp --version 2>&1 | sed -e "s/fastp //g") - END_VERSIONS - """ -} diff --git a/modules/nf-core/fastp/meta.yml b/modules/nf-core/fastp/meta.yml deleted file mode 100644 index 8dfecc1..0000000 --- a/modules/nf-core/fastp/meta.yml +++ /dev/null @@ -1,79 +0,0 @@ -name: fastp -description: Perform adapter/quality trimming on sequencing reads -keywords: - - trimming - - quality control - - fastq -tools: - - fastp: - description: | - A tool designed to provide fast all-in-one preprocessing for FastQ files. This tool is developed in C++ with multithreading supported to afford high performance. - documentation: https://github.com/OpenGene/fastp - doi: 10.1093/bioinformatics/bty560 - licence: ["MIT"] -input: - - meta: - type: map - description: | - Groovy Map containing sample information. Use 'single_end: true' to specify single ended or interleaved FASTQs. Use 'single_end: false' for paired-end reads. - e.g. [ id:'test', single_end:false ] - - reads: - type: file - description: | - List of input FastQ files of size 1 and 2 for single-end and paired-end data, - respectively. If you wish to run interleaved paired-end data, supply as single-end data - but with `--interleaved_in` in your `modules.conf`'s `ext.args` for the module. - - adapter_fasta: - type: file - description: File in FASTA format containing possible adapters to remove. - pattern: "*.{fasta,fna,fas,fa}" - - discard_trimmed_pass: - type: boolean - description: Specify true to not write any reads that pass trimming thresholds. | - This can be used to use fastp for the output report only. - - save_trimmed_fail: - type: boolean - description: Specify true to save files that failed to pass trimming thresholds ending in `*.fail.fastq.gz` - - save_merged: - type: boolean - description: Specify true to save all merged reads to a file ending in `*.merged.fastq.gz` -output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - reads: - type: file - description: The trimmed/modified/unmerged fastq reads - pattern: "*fastp.fastq.gz" - - json: - type: file - description: Results in JSON format - pattern: "*.json" - - html: - type: file - description: Results in HTML format - pattern: "*.html" - - log: - type: file - description: fastq log file - pattern: "*.log" - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - - reads_fail: - type: file - description: Reads the failed the preprocessing - pattern: "*fail.fastq.gz" - - reads_merged: - type: file - description: Reads that were successfully merged - pattern: "*.{merged.fastq.gz}" -authors: - - "@drpatelh" - - "@kevinmenden" -maintainers: - - "@drpatelh" - - "@kevinmenden" diff --git a/modules/nf-core/fastp/tests/main.nf.test b/modules/nf-core/fastp/tests/main.nf.test deleted file mode 100644 index 30dbb8a..0000000 --- a/modules/nf-core/fastp/tests/main.nf.test +++ /dev/null @@ -1,576 +0,0 @@ -nextflow_process { - - name "Test Process FASTP" - script "../main.nf" - process "FASTP" - tag "modules" - tag "modules_nfcore" - tag "fastp" - - test("test_fastp_single_end") { - - when { - - process { - """ - input[0] = Channel.of([ - [ id:'test', single_end:true ], - [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) ] - ]) - input[1] = [] - input[2] = false - input[3] = false - input[4] = false - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert path(process.out.html.get(0).get(1)).getText().contains("single end (151 cycles)") }, - { assert path(process.out.log.get(0).get(1)).getText().contains("reads passed filter: 99") }, - { assert snapshot( - process.out.json, - process.out.reads, - process.out.reads_fail, - process.out.reads_merged, - process.out.versions).match() } - ) - } - } - - test("test_fastp_paired_end") { - - when { - - process { - """ - adapter_fasta = [] - save_trimmed_pass = true - save_trimmed_fail = false - save_merged = false - - input[0] = Channel.of([ - [ id:'test', single_end:false ], // meta map - [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) ] - ]) - input[1] = [] - input[2] = false - input[3] = false - input[4] = false - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert path(process.out.html.get(0).get(1)).getText().contains("The input has little adapter percentage (~0.000000%), probably it's trimmed before.") }, - { assert path(process.out.log.get(0).get(1)).getText().contains("Q30 bases: 12281(88.3716%)") }, - { assert snapshot( - process.out.json, - process.out.reads, - process.out.reads_fail, - process.out.reads_merged, - process.out.versions).match() } - ) - } - } - - test("fastp test_fastp_interleaved") { - - config './nextflow.interleaved.config' - when { - process { - """ - input[0] = Channel.of([ - [ id:'test', single_end:true ], // meta map - [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_interleaved.fastq.gz', checkIfExists: true) ] - ]) - input[1] = [] - input[2] = false - input[3] = false - input[4] = false - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert path(process.out.html.get(0).get(1)).getText().contains("paired end (151 cycles + 151 cycles)") }, - { assert path(process.out.log.get(0).get(1)).getText().contains("reads passed filter: 162") }, - { assert process.out.reads_fail == [] }, - { assert process.out.reads_merged == [] }, - { assert snapshot( - process.out.reads, - process.out.json, - process.out.versions).match() } - ) - } - } - - test("test_fastp_single_end_trim_fail") { - - when { - - process { - """ - input[0] = Channel.of([ - [ id:'test', single_end:true ], // meta map - [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) ] - ]) - input[1] = [] - input[2] = false - input[3] = true - input[4] = false - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert path(process.out.html.get(0).get(1)).getText().contains("single end (151 cycles)") }, - { assert path(process.out.log.get(0).get(1)).getText().contains("reads passed filter: 99") }, - { assert snapshot( - process.out.json, - process.out.reads, - process.out.reads_fail, - process.out.reads_merged, - process.out.versions).match() } - ) - } - } - - test("test_fastp_paired_end_trim_fail") { - - config './nextflow.save_failed.config' - when { - process { - """ - input[0] = Channel.of([ - [ id:'test', single_end:false ], // meta map - [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true)] - ]) - input[1] = [] - input[2] = false - input[3] = true - input[4] = false - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert path(process.out.html.get(0).get(1)).getText().contains("The input has little adapter percentage (~0.000000%), probably it's trimmed before.") }, - { assert path(process.out.log.get(0).get(1)).getText().contains("reads passed filter: 162") }, - { assert snapshot( - process.out.reads, - process.out.reads_fail, - process.out.reads_merged, - process.out.json, - process.out.versions).match() } - ) - } - } - - test("test_fastp_paired_end_merged") { - - when { - process { - """ - input[0] = Channel.of([ - [ id:'test', single_end:false ], // meta map - [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) ] - ]) - input[1] = [] - input[2] = false - input[3] = false - input[4] = true - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert path(process.out.html.get(0).get(1)).getText().contains("The input has little adapter percentage (~0.000000%), probably it's trimmed before.") }, - { assert path(process.out.log.get(0).get(1)).getText().contains("total reads: 75") }, - { assert snapshot( - process.out.json, - process.out.reads, - process.out.reads_fail, - process.out.reads_merged, - process.out.versions).match() }, - ) - } - } - - test("test_fastp_paired_end_merged_adapterlist") { - - when { - process { - """ - input[0] = Channel.of([ - [ id:'test', single_end:false ], // meta map - [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) ] - ]) - input[1] = Channel.of([ file(params.modules_testdata_base_path + 'delete_me/fastp/adapters.fasta', checkIfExists: true) ]) - input[2] = false - input[3] = false - input[4] = true - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert path(process.out.html.get(0).get(1)).getText().contains("
") }, - { assert path(process.out.log.get(0).get(1)).getText().contains("total bases: 13683") }, - { assert snapshot( - process.out.json, - process.out.reads, - process.out.reads_fail, - process.out.reads_merged, - process.out.versions).match() } - ) - } - } - - test("test_fastp_single_end_qc_only") { - - when { - process { - """ - input[0] = Channel.of([ - [ id:'test', single_end:true ], - [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) ] - ]) - input[1] = [] - input[2] = true - input[3] = false - input[4] = false - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert path(process.out.html.get(0).get(1)).getText().contains("single end (151 cycles)") }, - { assert path(process.out.log.get(0).get(1)).getText().contains("reads passed filter: 99") }, - { assert snapshot( - process.out.json, - process.out.reads, - process.out.reads, - process.out.reads_fail, - process.out.reads_fail, - process.out.reads_merged, - process.out.reads_merged, - process.out.versions).match() } - ) - } - } - - test("test_fastp_paired_end_qc_only") { - - when { - process { - """ - input[0] = Channel.of([ - [ id:'test', single_end:false ], // meta map - [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) ] - ]) - input[1] = [] - input[2] = true - input[3] = false - input[4] = false - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert path(process.out.html.get(0).get(1)).getText().contains("The input has little adapter percentage (~0.000000%), probably it's trimmed before.") }, - { assert path(process.out.log.get(0).get(1)).getText().contains("Q30 bases: 12281(88.3716%)") }, - { assert snapshot( - process.out.json, - process.out.reads, - process.out.reads, - process.out.reads_fail, - process.out.reads_fail, - process.out.reads_merged, - process.out.reads_merged, - process.out.versions).match() } - ) - } - } - - test("test_fastp_single_end - stub") { - - options "-stub" - - when { - - process { - """ - input[0] = Channel.of([ - [ id:'test', single_end:true ], - [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) ] - ]) - input[1] = [] - input[2] = false - input[3] = false - input[4] = false - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(process.out).match() } - ) - } - } - - test("test_fastp_paired_end - stub") { - - options "-stub" - - when { - - process { - """ - adapter_fasta = [] - save_trimmed_pass = true - save_trimmed_fail = false - save_merged = false - - input[0] = Channel.of([ - [ id:'test', single_end:false ], // meta map - [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) ] - ]) - input[1] = [] - input[2] = false - input[3] = false - input[4] = false - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(process.out).match() } - ) - } - } - - test("fastp - stub test_fastp_interleaved") { - - options "-stub" - - config './nextflow.interleaved.config' - when { - process { - """ - input[0] = Channel.of([ - [ id:'test', single_end:true ], // meta map - [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_interleaved.fastq.gz', checkIfExists: true) ] - ]) - input[1] = [] - input[2] = false - input[3] = false - input[4] = false - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(process.out).match() } - ) - } - } - - test("test_fastp_single_end_trim_fail - stub") { - - options "-stub" - - when { - - process { - """ - input[0] = Channel.of([ - [ id:'test', single_end:true ], // meta map - [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) ] - ]) - input[1] = [] - input[2] = false - input[3] = true - input[4] = false - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(process.out).match() } - ) - } - } - - test("test_fastp_paired_end_trim_fail - stub") { - - options "-stub" - - config './nextflow.save_failed.config' - when { - process { - """ - input[0] = Channel.of([ - [ id:'test', single_end:false ], // meta map - [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true)] - ]) - input[1] = [] - input[2] = false - input[3] = true - input[4] = false - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(process.out).match() } - ) - } - } - - test("test_fastp_paired_end_merged - stub") { - - options "-stub" - - when { - process { - """ - input[0] = Channel.of([ - [ id:'test', single_end:false ], // meta map - [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) ] - ]) - input[1] = [] - input[2] = false - input[3] = false - input[4] = true - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(process.out).match() } - ) - } - } - - test("test_fastp_paired_end_merged_adapterlist - stub") { - - options "-stub" - - when { - process { - """ - input[0] = Channel.of([ - [ id:'test', single_end:false ], // meta map - [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) ] - ]) - input[1] = Channel.of([ file(params.modules_testdata_base_path + 'delete_me/fastp/adapters.fasta', checkIfExists: true) ]) - input[2] = false - input[3] = false - input[4] = true - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(process.out).match() } - ) - } - } - - test("test_fastp_single_end_qc_only - stub") { - - options "-stub" - - when { - process { - """ - input[0] = Channel.of([ - [ id:'test', single_end:true ], - [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) ] - ]) - input[1] = [] - input[2] = true - input[3] = false - input[4] = false - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(process.out).match() } - ) - } - } - - test("test_fastp_paired_end_qc_only - stub") { - - options "-stub" - - when { - process { - """ - input[0] = Channel.of([ - [ id:'test', single_end:false ], // meta map - [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) ] - ]) - input[1] = [] - input[2] = true - input[3] = false - input[4] = false - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(process.out).match() } - ) - } - } -} \ No newline at end of file diff --git a/modules/nf-core/fastp/tests/main.nf.test.snap b/modules/nf-core/fastp/tests/main.nf.test.snap deleted file mode 100644 index 54be7e4..0000000 --- a/modules/nf-core/fastp/tests/main.nf.test.snap +++ /dev/null @@ -1,1331 +0,0 @@ -{ - "test_fastp_single_end_qc_only - stub": { - "content": [ - { - "0": [ - - ], - "1": [ - [ - { - "id": "test", - "single_end": true - }, - "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "2": [ - [ - { - "id": "test", - "single_end": true - }, - "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "3": [ - [ - { - "id": "test", - "single_end": true - }, - "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "4": [ - - ], - "5": [ - - ], - "6": [ - "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" - ], - "html": [ - [ - { - "id": "test", - "single_end": true - }, - "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "json": [ - [ - { - "id": "test", - "single_end": true - }, - "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "log": [ - [ - { - "id": "test", - "single_end": true - }, - "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "reads": [ - - ], - "reads_fail": [ - - ], - "reads_merged": [ - - ], - "versions": [ - "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" - ] - } - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" - }, - "timestamp": "2024-07-05T14:31:10.841098" - }, - "test_fastp_paired_end": { - "content": [ - [ - [ - { - "id": "test", - "single_end": false - }, - "test.fastp.json:md5,1e0f8e27e71728e2b63fc64086be95cd" - ] - ], - [ - [ - { - "id": "test", - "single_end": false - }, - [ - "test_1.fastp.fastq.gz:md5,67b2bbae47f073e05a97a9c2edce23c7", - "test_2.fastp.fastq.gz:md5,25cbdca08e2083dbd4f0502de6b62f39" - ] - ] - ], - [ - - ], - [ - - ], - [ - "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" - }, - "timestamp": "2024-07-05T13:43:28.665779" - }, - "test_fastp_paired_end_merged_adapterlist": { - "content": [ - [ - [ - { - "id": "test", - "single_end": false - }, - "test.fastp.json:md5,5914ca3f21ce162123a824e33e8564f6" - ] - ], - [ - [ - { - "id": "test", - "single_end": false - }, - [ - "test_1.fastp.fastq.gz:md5,54b726a55e992a869fd3fa778afe1672", - "test_2.fastp.fastq.gz:md5,29d3b33b869f7b63417b8ff07bb128ba" - ] - ] - ], - [ - - ], - [ - [ - { - "id": "test", - "single_end": false - }, - "test.merged.fastq.gz:md5,c873bb1ab3fa859dcc47306465e749d5" - ] - ], - [ - "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" - }, - "timestamp": "2024-07-05T13:44:18.210375" - }, - "test_fastp_single_end_qc_only": { - "content": [ - [ - [ - { - "id": "test", - "single_end": true - }, - "test.fastp.json:md5,5cc5f01e449309e0e689ed6f51a2294a" - ] - ], - [ - - ], - [ - - ], - [ - - ], - [ - - ], - [ - - ], - [ - - ], - [ - "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" - }, - "timestamp": "2024-07-05T13:44:27.380974" - }, - "test_fastp_paired_end_trim_fail": { - "content": [ - [ - [ - { - "id": "test", - "single_end": false - }, - [ - "test_1.fastp.fastq.gz:md5,6ff32a64c5188b9a9192be1398c262c7", - "test_2.fastp.fastq.gz:md5,db0cb7c9977e94ac2b4b446ebd017a8a" - ] - ] - ], - [ - [ - { - "id": "test", - "single_end": false - }, - [ - "test.paired.fail.fastq.gz:md5,409b687c734cedd7a1fec14d316e1366", - "test_1.fail.fastq.gz:md5,4f273cf3159c13f79e8ffae12f5661f6", - "test_2.fail.fastq.gz:md5,f97b9edefb5649aab661fbc9e71fc995" - ] - ] - ], - [ - - ], - [ - [ - { - "id": "test", - "single_end": false - }, - "test.fastp.json:md5,4c3268ddb50ea5b33125984776aa3519" - ] - ], - [ - "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" - }, - "timestamp": "2024-07-05T13:43:58.749589" - }, - "fastp - stub test_fastp_interleaved": { - "content": [ - { - "0": [ - [ - { - "id": "test", - "single_end": true - }, - "test.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" - ] - ], - "1": [ - [ - { - "id": "test", - "single_end": true - }, - "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "2": [ - [ - { - "id": "test", - "single_end": true - }, - "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "3": [ - [ - { - "id": "test", - "single_end": true - }, - "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "4": [ - - ], - "5": [ - - ], - "6": [ - "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" - ], - "html": [ - [ - { - "id": "test", - "single_end": true - }, - "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "json": [ - [ - { - "id": "test", - "single_end": true - }, - "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "log": [ - [ - { - "id": "test", - "single_end": true - }, - "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "reads": [ - [ - { - "id": "test", - "single_end": true - }, - "test.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" - ] - ], - "reads_fail": [ - - ], - "reads_merged": [ - - ], - "versions": [ - "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" - ] - } - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" - }, - "timestamp": "2024-07-05T13:50:00.270029" - }, - "test_fastp_single_end - stub": { - "content": [ - { - "0": [ - [ - { - "id": "test", - "single_end": true - }, - "test.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" - ] - ], - "1": [ - [ - { - "id": "test", - "single_end": true - }, - "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "2": [ - [ - { - "id": "test", - "single_end": true - }, - "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "3": [ - [ - { - "id": "test", - "single_end": true - }, - "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "4": [ - - ], - "5": [ - - ], - "6": [ - "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" - ], - "html": [ - [ - { - "id": "test", - "single_end": true - }, - "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "json": [ - [ - { - "id": "test", - "single_end": true - }, - "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "log": [ - [ - { - "id": "test", - "single_end": true - }, - "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "reads": [ - [ - { - "id": "test", - "single_end": true - }, - "test.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" - ] - ], - "reads_fail": [ - - ], - "reads_merged": [ - - ], - "versions": [ - "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" - ] - } - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" - }, - "timestamp": "2024-07-05T13:49:42.502789" - }, - "test_fastp_paired_end_merged_adapterlist - stub": { - "content": [ - { - "0": [ - [ - { - "id": "test", - "single_end": false - }, - [ - "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", - "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" - ] - ] - ], - "1": [ - [ - { - "id": "test", - "single_end": false - }, - "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "2": [ - [ - { - "id": "test", - "single_end": false - }, - "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "3": [ - [ - { - "id": "test", - "single_end": false - }, - "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "4": [ - - ], - "5": [ - [ - { - "id": "test", - "single_end": false - }, - "test.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" - ] - ], - "6": [ - "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" - ], - "html": [ - [ - { - "id": "test", - "single_end": false - }, - "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "json": [ - [ - { - "id": "test", - "single_end": false - }, - "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "log": [ - [ - { - "id": "test", - "single_end": false - }, - "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "reads": [ - [ - { - "id": "test", - "single_end": false - }, - [ - "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", - "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" - ] - ] - ], - "reads_fail": [ - - ], - "reads_merged": [ - [ - { - "id": "test", - "single_end": false - }, - "test.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" - ] - ], - "versions": [ - "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" - ] - } - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" - }, - "timestamp": "2024-07-05T13:54:53.458252" - }, - "test_fastp_paired_end_merged - stub": { - "content": [ - { - "0": [ - [ - { - "id": "test", - "single_end": false - }, - [ - "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", - "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" - ] - ] - ], - "1": [ - [ - { - "id": "test", - "single_end": false - }, - "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "2": [ - [ - { - "id": "test", - "single_end": false - }, - "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "3": [ - [ - { - "id": "test", - "single_end": false - }, - "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "4": [ - - ], - "5": [ - [ - { - "id": "test", - "single_end": false - }, - "test.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" - ] - ], - "6": [ - "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" - ], - "html": [ - [ - { - "id": "test", - "single_end": false - }, - "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "json": [ - [ - { - "id": "test", - "single_end": false - }, - "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "log": [ - [ - { - "id": "test", - "single_end": false - }, - "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "reads": [ - [ - { - "id": "test", - "single_end": false - }, - [ - "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", - "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" - ] - ] - ], - "reads_fail": [ - - ], - "reads_merged": [ - [ - { - "id": "test", - "single_end": false - }, - "test.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" - ] - ], - "versions": [ - "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" - ] - } - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" - }, - "timestamp": "2024-07-05T13:50:27.689379" - }, - "test_fastp_paired_end_merged": { - "content": [ - [ - [ - { - "id": "test", - "single_end": false - }, - "test.fastp.json:md5,b712fd68ed0322f4bec49ff2a5237fcc" - ] - ], - [ - [ - { - "id": "test", - "single_end": false - }, - [ - "test_1.fastp.fastq.gz:md5,54b726a55e992a869fd3fa778afe1672", - "test_2.fastp.fastq.gz:md5,29d3b33b869f7b63417b8ff07bb128ba" - ] - ] - ], - [ - - ], - [ - [ - { - "id": "test", - "single_end": false - }, - "test.merged.fastq.gz:md5,c873bb1ab3fa859dcc47306465e749d5" - ] - ], - [ - "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" - }, - "timestamp": "2024-07-05T13:44:08.68476" - }, - "test_fastp_paired_end - stub": { - "content": [ - { - "0": [ - [ - { - "id": "test", - "single_end": false - }, - [ - "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", - "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" - ] - ] - ], - "1": [ - [ - { - "id": "test", - "single_end": false - }, - "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "2": [ - [ - { - "id": "test", - "single_end": false - }, - "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "3": [ - [ - { - "id": "test", - "single_end": false - }, - "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "4": [ - - ], - "5": [ - - ], - "6": [ - "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" - ], - "html": [ - [ - { - "id": "test", - "single_end": false - }, - "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "json": [ - [ - { - "id": "test", - "single_end": false - }, - "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "log": [ - [ - { - "id": "test", - "single_end": false - }, - "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "reads": [ - [ - { - "id": "test", - "single_end": false - }, - [ - "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", - "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" - ] - ] - ], - "reads_fail": [ - - ], - "reads_merged": [ - - ], - "versions": [ - "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" - ] - } - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" - }, - "timestamp": "2024-07-05T13:49:51.679221" - }, - "test_fastp_single_end": { - "content": [ - [ - [ - { - "id": "test", - "single_end": true - }, - "test.fastp.json:md5,c852d7a6dba5819e4ac8d9673bedcacc" - ] - ], - [ - [ - { - "id": "test", - "single_end": true - }, - "test.fastp.fastq.gz:md5,67b2bbae47f073e05a97a9c2edce23c7" - ] - ], - [ - - ], - [ - - ], - [ - "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" - }, - "timestamp": "2024-07-05T13:43:18.834322" - }, - "test_fastp_single_end_trim_fail - stub": { - "content": [ - { - "0": [ - [ - { - "id": "test", - "single_end": true - }, - "test.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" - ] - ], - "1": [ - [ - { - "id": "test", - "single_end": true - }, - "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "2": [ - [ - { - "id": "test", - "single_end": true - }, - "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "3": [ - [ - { - "id": "test", - "single_end": true - }, - "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "4": [ - [ - { - "id": "test", - "single_end": true - }, - "test.fail.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" - ] - ], - "5": [ - - ], - "6": [ - "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" - ], - "html": [ - [ - { - "id": "test", - "single_end": true - }, - "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "json": [ - [ - { - "id": "test", - "single_end": true - }, - "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "log": [ - [ - { - "id": "test", - "single_end": true - }, - "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "reads": [ - [ - { - "id": "test", - "single_end": true - }, - "test.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" - ] - ], - "reads_fail": [ - [ - { - "id": "test", - "single_end": true - }, - "test.fail.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" - ] - ], - "reads_merged": [ - - ], - "versions": [ - "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" - ] - } - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" - }, - "timestamp": "2024-07-05T14:05:36.898142" - }, - "test_fastp_paired_end_trim_fail - stub": { - "content": [ - { - "0": [ - [ - { - "id": "test", - "single_end": false - }, - [ - "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", - "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" - ] - ] - ], - "1": [ - [ - { - "id": "test", - "single_end": false - }, - "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "2": [ - [ - { - "id": "test", - "single_end": false - }, - "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "3": [ - [ - { - "id": "test", - "single_end": false - }, - "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "4": [ - [ - { - "id": "test", - "single_end": false - }, - [ - "test.paired.fail.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", - "test_1.fail.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", - "test_2.fail.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" - ] - ] - ], - "5": [ - - ], - "6": [ - "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" - ], - "html": [ - [ - { - "id": "test", - "single_end": false - }, - "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "json": [ - [ - { - "id": "test", - "single_end": false - }, - "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "log": [ - [ - { - "id": "test", - "single_end": false - }, - "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "reads": [ - [ - { - "id": "test", - "single_end": false - }, - [ - "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", - "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" - ] - ] - ], - "reads_fail": [ - [ - { - "id": "test", - "single_end": false - }, - [ - "test.paired.fail.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", - "test_1.fail.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", - "test_2.fail.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" - ] - ] - ], - "reads_merged": [ - - ], - "versions": [ - "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" - ] - } - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" - }, - "timestamp": "2024-07-05T14:05:49.212847" - }, - "fastp test_fastp_interleaved": { - "content": [ - [ - [ - { - "id": "test", - "single_end": true - }, - "test.fastp.fastq.gz:md5,217d62dc13a23e92513a1bd8e1bcea39" - ] - ], - [ - [ - { - "id": "test", - "single_end": true - }, - "test.fastp.json:md5,b24e0624df5cc0b11cd5ba21b726fb22" - ] - ], - [ - "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" - }, - "timestamp": "2024-07-05T13:43:38.910832" - }, - "test_fastp_single_end_trim_fail": { - "content": [ - [ - [ - { - "id": "test", - "single_end": true - }, - "test.fastp.json:md5,9a7ee180f000e8d00c7fb67f06293eb5" - ] - ], - [ - [ - { - "id": "test", - "single_end": true - }, - "test.fastp.fastq.gz:md5,67b2bbae47f073e05a97a9c2edce23c7" - ] - ], - [ - [ - { - "id": "test", - "single_end": true - }, - "test.fail.fastq.gz:md5,3e4aaadb66a5b8fc9b881bf39c227abd" - ] - ], - [ - - ], - [ - "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" - }, - "timestamp": "2024-07-05T13:43:48.22378" - }, - "test_fastp_paired_end_qc_only": { - "content": [ - [ - [ - { - "id": "test", - "single_end": false - }, - "test.fastp.json:md5,623064a45912dac6f2b64e3f2e9901df" - ] - ], - [ - - ], - [ - - ], - [ - - ], - [ - - ], - [ - - ], - [ - - ], - [ - "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" - }, - "timestamp": "2024-07-05T13:44:36.334938" - }, - "test_fastp_paired_end_qc_only - stub": { - "content": [ - { - "0": [ - - ], - "1": [ - [ - { - "id": "test", - "single_end": false - }, - "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "2": [ - [ - { - "id": "test", - "single_end": false - }, - "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "3": [ - [ - { - "id": "test", - "single_end": false - }, - "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "4": [ - - ], - "5": [ - - ], - "6": [ - "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" - ], - "html": [ - [ - { - "id": "test", - "single_end": false - }, - "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "json": [ - [ - { - "id": "test", - "single_end": false - }, - "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "log": [ - [ - { - "id": "test", - "single_end": false - }, - "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "reads": [ - - ], - "reads_fail": [ - - ], - "reads_merged": [ - - ], - "versions": [ - "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" - ] - } - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" - }, - "timestamp": "2024-07-05T14:31:27.096468" - } -} \ No newline at end of file diff --git a/modules/nf-core/fastp/tests/nextflow.interleaved.config b/modules/nf-core/fastp/tests/nextflow.interleaved.config deleted file mode 100644 index 4be8dbd..0000000 --- a/modules/nf-core/fastp/tests/nextflow.interleaved.config +++ /dev/null @@ -1,5 +0,0 @@ -process { - withName: FASTP { - ext.args = "--interleaved_in -e 30" - } -} diff --git a/modules/nf-core/fastp/tests/nextflow.save_failed.config b/modules/nf-core/fastp/tests/nextflow.save_failed.config deleted file mode 100644 index 53b61b0..0000000 --- a/modules/nf-core/fastp/tests/nextflow.save_failed.config +++ /dev/null @@ -1,5 +0,0 @@ -process { - withName: FASTP { - ext.args = "-e 30" - } -} diff --git a/modules/nf-core/fastp/tests/tags.yml b/modules/nf-core/fastp/tests/tags.yml deleted file mode 100644 index c1afcce..0000000 --- a/modules/nf-core/fastp/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -fastp: - - modules/nf-core/fastp/** diff --git a/modules/nf-core/fastqc/tests/main.nf.test b/modules/nf-core/fastqc/tests/main.nf.test index e9d79a0..70edae4 100644 --- a/modules/nf-core/fastqc/tests/main.nf.test +++ b/modules/nf-core/fastqc/tests/main.nf.test @@ -23,14 +23,17 @@ nextflow_process { then { assertAll ( - { assert process.success }, - // NOTE The report contains the date inside it, which means that the md5sum is stable per day, but not longer than that. So you can't md5sum it. - // looks like this:
Mon 2 Oct 2023
test.gz
- // https://github.com/nf-core/modules/pull/3903#issuecomment-1743620039 - { assert process.out.html[0][1] ==~ ".*/test_fastqc.html" }, - { assert process.out.zip[0][1] ==~ ".*/test_fastqc.zip" }, - { assert path(process.out.html[0][1]).text.contains("
") }, - { assert snapshot(process.out.versions).match() } + { assert process.success }, + + // NOTE The report contains the date inside it, which means that the md5sum is stable per day, but not longer than that. So you can't md5sum it. + // looks like this:
Mon 2 Oct 2023
test.gz
+ // https://github.com/nf-core/modules/pull/3903#issuecomment-1743620039 + + { assert process.out.html[0][1] ==~ ".*/test_fastqc.html" }, + { assert process.out.zip[0][1] ==~ ".*/test_fastqc.zip" }, + { assert path(process.out.html[0][1]).text.contains("") }, + + { assert snapshot(process.out.versions).match("fastqc_versions_single") } ) } } @@ -51,14 +54,16 @@ nextflow_process { then { assertAll ( - { assert process.success }, - { assert process.out.html[0][1][0] ==~ ".*/test_1_fastqc.html" }, - { assert process.out.html[0][1][1] ==~ ".*/test_2_fastqc.html" }, - { assert process.out.zip[0][1][0] ==~ ".*/test_1_fastqc.zip" }, - { assert process.out.zip[0][1][1] ==~ ".*/test_2_fastqc.zip" }, - { assert path(process.out.html[0][1][0]).text.contains("") }, - { assert path(process.out.html[0][1][1]).text.contains("") }, - { assert snapshot(process.out.versions).match() } + { assert process.success }, + + { assert process.out.html[0][1][0] ==~ ".*/test_1_fastqc.html" }, + { assert process.out.html[0][1][1] ==~ ".*/test_2_fastqc.html" }, + { assert process.out.zip[0][1][0] ==~ ".*/test_1_fastqc.zip" }, + { assert process.out.zip[0][1][1] ==~ ".*/test_2_fastqc.zip" }, + { assert path(process.out.html[0][1][0]).text.contains("") }, + { assert path(process.out.html[0][1][1]).text.contains("") }, + + { assert snapshot(process.out.versions).match("fastqc_versions_paired") } ) } } @@ -78,11 +83,13 @@ nextflow_process { then { assertAll ( - { assert process.success }, - { assert process.out.html[0][1] ==~ ".*/test_fastqc.html" }, - { assert process.out.zip[0][1] ==~ ".*/test_fastqc.zip" }, - { assert path(process.out.html[0][1]).text.contains("") }, - { assert snapshot(process.out.versions).match() } + { assert process.success }, + + { assert process.out.html[0][1] ==~ ".*/test_fastqc.html" }, + { assert process.out.zip[0][1] ==~ ".*/test_fastqc.zip" }, + { assert path(process.out.html[0][1]).text.contains("") }, + + { assert snapshot(process.out.versions).match("fastqc_versions_interleaved") } ) } } @@ -102,11 +109,13 @@ nextflow_process { then { assertAll ( - { assert process.success }, - { assert process.out.html[0][1] ==~ ".*/test_fastqc.html" }, - { assert process.out.zip[0][1] ==~ ".*/test_fastqc.zip" }, - { assert path(process.out.html[0][1]).text.contains("") }, - { assert snapshot(process.out.versions).match() } + { assert process.success }, + + { assert process.out.html[0][1] ==~ ".*/test_fastqc.html" }, + { assert process.out.zip[0][1] ==~ ".*/test_fastqc.zip" }, + { assert path(process.out.html[0][1]).text.contains("") }, + + { assert snapshot(process.out.versions).match("fastqc_versions_bam") } ) } } @@ -129,20 +138,22 @@ nextflow_process { then { assertAll ( - { assert process.success }, - { assert process.out.html[0][1][0] ==~ ".*/test_1_fastqc.html" }, - { assert process.out.html[0][1][1] ==~ ".*/test_2_fastqc.html" }, - { assert process.out.html[0][1][2] ==~ ".*/test_3_fastqc.html" }, - { assert process.out.html[0][1][3] ==~ ".*/test_4_fastqc.html" }, - { assert process.out.zip[0][1][0] ==~ ".*/test_1_fastqc.zip" }, - { assert process.out.zip[0][1][1] ==~ ".*/test_2_fastqc.zip" }, - { assert process.out.zip[0][1][2] ==~ ".*/test_3_fastqc.zip" }, - { assert process.out.zip[0][1][3] ==~ ".*/test_4_fastqc.zip" }, - { assert path(process.out.html[0][1][0]).text.contains("") }, - { assert path(process.out.html[0][1][1]).text.contains("") }, - { assert path(process.out.html[0][1][2]).text.contains("") }, - { assert path(process.out.html[0][1][3]).text.contains("") }, - { assert snapshot(process.out.versions).match() } + { assert process.success }, + + { assert process.out.html[0][1][0] ==~ ".*/test_1_fastqc.html" }, + { assert process.out.html[0][1][1] ==~ ".*/test_2_fastqc.html" }, + { assert process.out.html[0][1][2] ==~ ".*/test_3_fastqc.html" }, + { assert process.out.html[0][1][3] ==~ ".*/test_4_fastqc.html" }, + { assert process.out.zip[0][1][0] ==~ ".*/test_1_fastqc.zip" }, + { assert process.out.zip[0][1][1] ==~ ".*/test_2_fastqc.zip" }, + { assert process.out.zip[0][1][2] ==~ ".*/test_3_fastqc.zip" }, + { assert process.out.zip[0][1][3] ==~ ".*/test_4_fastqc.zip" }, + { assert path(process.out.html[0][1][0]).text.contains("") }, + { assert path(process.out.html[0][1][1]).text.contains("") }, + { assert path(process.out.html[0][1][2]).text.contains("") }, + { assert path(process.out.html[0][1][3]).text.contains("") }, + + { assert snapshot(process.out.versions).match("fastqc_versions_multiple") } ) } } @@ -162,116 +173,27 @@ nextflow_process { then { assertAll ( - { assert process.success }, - { assert process.out.html[0][1] ==~ ".*/mysample_fastqc.html" }, - { assert process.out.zip[0][1] ==~ ".*/mysample_fastqc.zip" }, - { assert path(process.out.html[0][1]).text.contains("") }, - { assert snapshot(process.out.versions).match() } - ) - } - } + { assert process.success }, - test("sarscov2 single-end [fastq] - stub") { + { assert process.out.html[0][1] ==~ ".*/mysample_fastqc.html" }, + { assert process.out.zip[0][1] ==~ ".*/mysample_fastqc.zip" }, + { assert path(process.out.html[0][1]).text.contains("") }, - options "-stub" - when { - process { - """ - input[0] = Channel.of([ - [ id: 'test', single_end:true ], - [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) ] - ]) - """ - } - } - - then { - assertAll ( - { assert process.success }, - { assert snapshot(process.out).match() } + { assert snapshot(process.out.versions).match("fastqc_versions_custom_prefix") } ) } } - test("sarscov2 paired-end [fastq] - stub") { - - options "-stub" - when { - process { - """ - input[0] = Channel.of([ - [id: 'test', single_end: false], // meta map - [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) ] - ]) - """ - } - } - - then { - assertAll ( - { assert process.success }, - { assert snapshot(process.out).match() } - ) - } - } - - test("sarscov2 interleaved [fastq] - stub") { - - options "-stub" - when { - process { - """ - input[0] = Channel.of([ - [id: 'test', single_end: false], // meta map - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_interleaved.fastq.gz', checkIfExists: true) - ]) - """ - } - } - - then { - assertAll ( - { assert process.success }, - { assert snapshot(process.out).match() } - ) - } - } - - test("sarscov2 paired-end [bam] - stub") { - - options "-stub" - when { - process { - """ - input[0] = Channel.of([ - [id: 'test', single_end: false], // meta map - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true) - ]) - """ - } - } - - then { - assertAll ( - { assert process.success }, - { assert snapshot(process.out).match() } - ) - } - } + test("sarscov2 single-end [fastq] - stub") { - test("sarscov2 multiple [fastq] - stub") { + options "-stub" - options "-stub" when { process { """ input[0] = Channel.of([ - [id: 'test', single_end: false], // meta map - [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true), - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test2_1.fastq.gz', checkIfExists: true), - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test2_2.fastq.gz', checkIfExists: true) ] + [ id: 'test', single_end:true ], + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) ] ]) """ } @@ -279,31 +201,12 @@ nextflow_process { then { assertAll ( - { assert process.success }, - { assert snapshot(process.out).match() } + { assert process.success }, + { assert snapshot(process.out.html.collect { file(it[1]).getName() } + + process.out.zip.collect { file(it[1]).getName() } + + process.out.versions ).match("fastqc_stub") } ) } } - test("sarscov2 custom_prefix - stub") { - - options "-stub" - when { - process { - """ - input[0] = Channel.of([ - [ id:'mysample', single_end:true ], // meta map - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) - ]) - """ - } - } - - then { - assertAll ( - { assert process.success }, - { assert snapshot(process.out).match() } - ) - } - } } diff --git a/modules/nf-core/fastqc/tests/main.nf.test.snap b/modules/nf-core/fastqc/tests/main.nf.test.snap index d5db309..86f7c31 100644 --- a/modules/nf-core/fastqc/tests/main.nf.test.snap +++ b/modules/nf-core/fastqc/tests/main.nf.test.snap @@ -1,392 +1,88 @@ { - "sarscov2 custom_prefix": { + "fastqc_versions_interleaved": { "content": [ [ "versions.yml:md5,e1cc25ca8af856014824abd842e93978" ] ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" + "nf-test": "0.8.4", + "nextflow": "23.10.1" }, - "timestamp": "2024-07-22T11:02:16.374038" + "timestamp": "2024-01-31T17:40:07.293713" }, - "sarscov2 single-end [fastq] - stub": { - "content": [ - { - "0": [ - [ - { - "id": "test", - "single_end": true - }, - "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "1": [ - [ - { - "id": "test", - "single_end": true - }, - "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "2": [ - "versions.yml:md5,e1cc25ca8af856014824abd842e93978" - ], - "html": [ - [ - { - "id": "test", - "single_end": true - }, - "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "versions": [ - "versions.yml:md5,e1cc25ca8af856014824abd842e93978" - ], - "zip": [ - [ - { - "id": "test", - "single_end": true - }, - "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ] - } - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" - }, - "timestamp": "2024-07-22T11:02:24.993809" - }, - "sarscov2 custom_prefix - stub": { - "content": [ - { - "0": [ - [ - { - "id": "mysample", - "single_end": true - }, - "mysample.html:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "1": [ - [ - { - "id": "mysample", - "single_end": true - }, - "mysample.zip:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "2": [ - "versions.yml:md5,e1cc25ca8af856014824abd842e93978" - ], - "html": [ - [ - { - "id": "mysample", - "single_end": true - }, - "mysample.html:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "versions": [ - "versions.yml:md5,e1cc25ca8af856014824abd842e93978" - ], - "zip": [ - [ - { - "id": "mysample", - "single_end": true - }, - "mysample.zip:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ] - } - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" - }, - "timestamp": "2024-07-22T11:03:10.93942" - }, - "sarscov2 interleaved [fastq]": { + "fastqc_stub": { "content": [ [ + "test.html", + "test.zip", "versions.yml:md5,e1cc25ca8af856014824abd842e93978" ] ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" + "nf-test": "0.8.4", + "nextflow": "23.10.1" }, - "timestamp": "2024-07-22T11:01:42.355718" + "timestamp": "2024-01-31T17:31:01.425198" }, - "sarscov2 paired-end [bam]": { + "fastqc_versions_multiple": { "content": [ [ "versions.yml:md5,e1cc25ca8af856014824abd842e93978" ] ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" + "nf-test": "0.8.4", + "nextflow": "23.10.1" }, - "timestamp": "2024-07-22T11:01:53.276274" + "timestamp": "2024-01-31T17:40:55.797907" }, - "sarscov2 multiple [fastq]": { + "fastqc_versions_bam": { "content": [ [ "versions.yml:md5,e1cc25ca8af856014824abd842e93978" ] ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" + "nf-test": "0.8.4", + "nextflow": "23.10.1" }, - "timestamp": "2024-07-22T11:02:05.527626" + "timestamp": "2024-01-31T17:40:26.795862" }, - "sarscov2 paired-end [fastq]": { + "fastqc_versions_single": { "content": [ [ "versions.yml:md5,e1cc25ca8af856014824abd842e93978" ] ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" - }, - "timestamp": "2024-07-22T11:01:31.188871" - }, - "sarscov2 paired-end [fastq] - stub": { - "content": [ - { - "0": [ - [ - { - "id": "test", - "single_end": false - }, - "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "1": [ - [ - { - "id": "test", - "single_end": false - }, - "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "2": [ - "versions.yml:md5,e1cc25ca8af856014824abd842e93978" - ], - "html": [ - [ - { - "id": "test", - "single_end": false - }, - "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "versions": [ - "versions.yml:md5,e1cc25ca8af856014824abd842e93978" - ], - "zip": [ - [ - { - "id": "test", - "single_end": false - }, - "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ] - } - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" + "nf-test": "0.8.4", + "nextflow": "23.10.1" }, - "timestamp": "2024-07-22T11:02:34.273566" + "timestamp": "2024-01-31T17:39:27.043675" }, - "sarscov2 multiple [fastq] - stub": { - "content": [ - { - "0": [ - [ - { - "id": "test", - "single_end": false - }, - "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "1": [ - [ - { - "id": "test", - "single_end": false - }, - "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "2": [ - "versions.yml:md5,e1cc25ca8af856014824abd842e93978" - ], - "html": [ - [ - { - "id": "test", - "single_end": false - }, - "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "versions": [ - "versions.yml:md5,e1cc25ca8af856014824abd842e93978" - ], - "zip": [ - [ - { - "id": "test", - "single_end": false - }, - "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ] - } - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" - }, - "timestamp": "2024-07-22T11:03:02.304411" - }, - "sarscov2 single-end [fastq]": { + "fastqc_versions_paired": { "content": [ [ "versions.yml:md5,e1cc25ca8af856014824abd842e93978" ] ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" - }, - "timestamp": "2024-07-22T11:01:19.095607" - }, - "sarscov2 interleaved [fastq] - stub": { - "content": [ - { - "0": [ - [ - { - "id": "test", - "single_end": false - }, - "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "1": [ - [ - { - "id": "test", - "single_end": false - }, - "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "2": [ - "versions.yml:md5,e1cc25ca8af856014824abd842e93978" - ], - "html": [ - [ - { - "id": "test", - "single_end": false - }, - "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "versions": [ - "versions.yml:md5,e1cc25ca8af856014824abd842e93978" - ], - "zip": [ - [ - { - "id": "test", - "single_end": false - }, - "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ] - } - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" + "nf-test": "0.8.4", + "nextflow": "23.10.1" }, - "timestamp": "2024-07-22T11:02:44.640184" + "timestamp": "2024-01-31T17:39:47.584191" }, - "sarscov2 paired-end [bam] - stub": { + "fastqc_versions_custom_prefix": { "content": [ - { - "0": [ - [ - { - "id": "test", - "single_end": false - }, - "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "1": [ - [ - { - "id": "test", - "single_end": false - }, - "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "2": [ - "versions.yml:md5,e1cc25ca8af856014824abd842e93978" - ], - "html": [ - [ - { - "id": "test", - "single_end": false - }, - "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "versions": [ - "versions.yml:md5,e1cc25ca8af856014824abd842e93978" - ], - "zip": [ - [ - { - "id": "test", - "single_end": false - }, - "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ] - } + [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ] ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" + "nf-test": "0.8.4", + "nextflow": "23.10.1" }, - "timestamp": "2024-07-22T11:02:53.550742" + "timestamp": "2024-01-31T17:41:14.576531" } } \ No newline at end of file diff --git a/modules/nf-core/gffcompare/environment.yml b/modules/nf-core/gffcompare/environment.yml deleted file mode 100644 index bcd633e..0000000 --- a/modules/nf-core/gffcompare/environment.yml +++ /dev/null @@ -1,7 +0,0 @@ -name: gffcompare -channels: - - conda-forge - - bioconda - - defaults -dependencies: - - bioconda::gffcompare=0.12.6 diff --git a/modules/nf-core/gffcompare/main.nf b/modules/nf-core/gffcompare/main.nf deleted file mode 100644 index edca0f2..0000000 --- a/modules/nf-core/gffcompare/main.nf +++ /dev/null @@ -1,63 +0,0 @@ -process GFFCOMPARE { - tag "$meta.id" - label 'process_single' - - conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/gffcompare:0.12.6--h9f5acd7_0' : - 'biocontainers/gffcompare:0.12.6--h9f5acd7_0' }" - - input: - tuple val(meta), path(gtfs) - tuple val(meta2), path(fasta), path(fai) - tuple val(meta3), path(reference_gtf) - - output: - tuple val(meta), path("*.annotated.gtf"), optional: true, emit: annotated_gtf - tuple val(meta), path("*.combined.gtf") , optional: true, emit: combined_gtf - tuple val(meta), path("*.tmap") , optional: true, emit: tmap - tuple val(meta), path("*.refmap") , optional: true, emit: refmap - tuple val(meta), path("*.loci") , emit: loci - tuple val(meta), path("*.stats") , emit: stats - tuple val(meta), path("*.tracking") , emit: tracking - path "versions.yml" , emit: versions - - when: - task.ext.when == null || task.ext.when - - script: - def args = task.ext.args ?: '' - def prefix = task.ext.prefix ?: "${meta.id}" - def ref_fasta = fasta ? "-s ${fasta}" : '' - def ref_gtf = reference_gtf ? "-r ${reference_gtf}" : '' - """ - gffcompare \\ - $args \\ - $ref_fasta \\ - $ref_gtf \\ - -o $prefix \\ - $gtfs - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - gffcompare: \$(echo \$(gffcompare --version 2>&1) | sed 's/^gffcompare v//') - END_VERSIONS - """ - - stub: - def prefix = task.ext.prefix ?: "${meta.id}" - """ - touch ${prefix}.annotated.gtf - touch ${prefix}.combined.gtf - touch ${prefix}.tmap - touch ${prefix}.refmap - touch ${prefix}.loci - touch ${prefix}.stats - touch ${prefix}.tracking - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - gffcompare: \$(echo \$(gffcompare --version 2>&1) | sed 's/^gffcompare v//') - END_VERSIONS - """ -} diff --git a/modules/nf-core/gffcompare/meta.yml b/modules/nf-core/gffcompare/meta.yml deleted file mode 100644 index 674f08c..0000000 --- a/modules/nf-core/gffcompare/meta.yml +++ /dev/null @@ -1,91 +0,0 @@ -name: "gffcompare" -description: Compare, merge, annotate and estimate accuracy of generated gtf files -keywords: - - transcripts - - gtf - - merge - - compare -tools: - - "gffcompare": - description: "GffCompare by Geo Pertea" - homepage: "http://ccb.jhu.edu/software/stringtie/gffcompare.shtml" - documentation: "http://ccb.jhu.edu/software/stringtie/gffcompare.shtml" - tool_dev_url: "https://github.com/gpertea/gffcompare" - doi: "10.12688/f1000research.23297.1" - licence: ["MIT"] -input: - - meta: - type: map - description: | - Groovy Map containing meta data - e.g. [ id:'test', single_end:false ] - - gtfs: - type: file - description: | - GTF/GFF files - e.g. [ 'file_1.gtf', 'file_2.gtf' ] - pattern: "*.{gtf,gff}" - - fasta: - type: file - description: Genome reference fasta file (optional) - pattern: "*.{fasta,fa}" - - fai: - type: file - description: Index for fasta file - pattern: "*.fai" - - reference_gtf: - type: file - description: Reference annotation in gtf/gff format (optional) - pattern: "*.{gtf,gff}" -output: - - meta: - type: map - description: | - Groovy Map containing meta data - e.g. [ id:'test', single_end:false ] - - annotated_gtf: - type: file - description: | - Annotated gtf file when reference gtf is provided (optional) - pattern: "*.annotated.gtf" - - combined_gtf: - type: file - description: | - Combined gtf file when multiple input files are - provided (optional) - pattern: "*.annotated.gtf" - - tmap: - type: file - description: | - File listing the most closely matching reference transcript - for each query transcript (optional) - pattern: "*.tmap" - - refmap: - type: file - description: | - File listing the reference transcripts with overlapping - query transcripts (optional) - pattern: "*.refmap" - - loci: - type: file - description: File with loci - pattern: "*.loci" - - stats: - type: file - description: | - File with stats for input transcripts as compared to - reference alternatively stats for the combined gtf - pattern: "*.stats" - - tracking: - type: file - description: | - This file matches transcripts up between samples - pattern: "*.tracking" - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" -authors: - - "@jemten" -maintainers: - - "@jemten" diff --git a/modules/nf-core/gffread/environment.yml b/modules/nf-core/gffread/environment.yml deleted file mode 100644 index c6df58a..0000000 --- a/modules/nf-core/gffread/environment.yml +++ /dev/null @@ -1,7 +0,0 @@ -name: gffread -channels: - - conda-forge - - bioconda - - defaults -dependencies: - - bioconda::gffread=0.12.7 diff --git a/modules/nf-core/gffread/main.nf b/modules/nf-core/gffread/main.nf deleted file mode 100644 index da55cba..0000000 --- a/modules/nf-core/gffread/main.nf +++ /dev/null @@ -1,60 +0,0 @@ -process GFFREAD { - tag "$meta.id" - label 'process_low' - - conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/gffread:0.12.7--hdcf5f25_4' : - 'biocontainers/gffread:0.12.7--hdcf5f25_4' }" - - input: - tuple val(meta), path(gff) - path fasta - - output: - tuple val(meta), path("*.gtf") , emit: gtf , optional: true - tuple val(meta), path("*.gff3") , emit: gffread_gff , optional: true - tuple val(meta), path("*.fasta"), emit: gffread_fasta , optional: true - path "versions.yml" , emit: versions - - when: - task.ext.when == null || task.ext.when - - script: - def args = task.ext.args ?: '' - def prefix = task.ext.prefix ?: "${meta.id}" - def extension = args.contains("-T") ? 'gtf' : ( ( ['-w', '-x', '-y' ].any { args.contains(it) } ) ? 'fasta' : 'gff3' ) - def fasta_arg = fasta ? "-g $fasta" : '' - def output_name = "${prefix}.${extension}" - def output = extension == "fasta" ? "$output_name" : "-o $output_name" - def args_sorted = args.replaceAll(/(.*)(-[wxy])(.*)/) { all, pre, param, post -> "$pre $post $param" }.trim() - // args_sorted = Move '-w', '-x', and '-y' to the end of the args string as gffread expects the file name after these parameters - if ( "$output_name" in [ "$gff", "$fasta" ] ) error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!" - """ - gffread \\ - $gff \\ - $fasta_arg \\ - $args_sorted \\ - $output - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - gffread: \$(gffread --version 2>&1) - END_VERSIONS - """ - - stub: - def args = task.ext.args ?: '' - def prefix = task.ext.prefix ?: "${meta.id}" - def extension = args.contains("-T") ? 'gtf' : ( ( ['-w', '-x', '-y' ].any { args.contains(it) } ) ? 'fasta' : 'gff3' ) - def output_name = "${prefix}.${extension}" - if ( "$output_name" in [ "$gff", "$fasta" ] ) error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!" - """ - touch $output_name - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - gffread: \$(gffread --version 2>&1) - END_VERSIONS - """ -} diff --git a/modules/nf-core/gffread/meta.yml b/modules/nf-core/gffread/meta.yml deleted file mode 100644 index c060282..0000000 --- a/modules/nf-core/gffread/meta.yml +++ /dev/null @@ -1,55 +0,0 @@ -name: gffread -description: Validate, filter, convert and perform various other operations on GFF files -keywords: - - gff - - conversion - - validation -tools: - - gffread: - description: GFF/GTF utility providing format conversions, region filtering, FASTA sequence extraction and more. - homepage: http://ccb.jhu.edu/software/stringtie/gff.shtml#gffread - documentation: http://ccb.jhu.edu/software/stringtie/gff.shtml#gffread - tool_dev_url: https://github.com/gpertea/gffread - doi: 10.12688/f1000research.23297.1 - licence: ["MIT"] -input: - - meta: - type: map - description: | - Groovy Map containing meta data - e.g. [ id:'test' ] - - gff: - type: file - description: A reference file in either the GFF3, GFF2 or GTF format. - pattern: "*.{gff, gtf}" - - fasta: - type: file - description: A multi-fasta file with the genomic sequences - pattern: "*.{fasta,fa,faa,fas,fsa}" -output: - - meta: - type: map - description: | - Groovy Map containing meta data - e.g. [ id:'test' ] - - gtf: - type: file - description: GTF file resulting from the conversion of the GFF input file if '-T' argument is present - pattern: "*.{gtf}" - - gffread_gff: - type: file - description: GFF3 file resulting from the conversion of the GFF input file if '-T' argument is absent - pattern: "*.gff3" - - gffread_fasta: - type: file - description: Fasta file produced when either of '-w', '-x', '-y' parameters is present - pattern: "*.fasta" - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" -authors: - - "@edmundmiller" -maintainers: - - "@edmundmiller" - - "@gallvp" diff --git a/modules/nf-core/gffread/tests/main.nf.test b/modules/nf-core/gffread/tests/main.nf.test deleted file mode 100644 index 4cd13dc..0000000 --- a/modules/nf-core/gffread/tests/main.nf.test +++ /dev/null @@ -1,223 +0,0 @@ -nextflow_process { - - name "Test Process GFFREAD" - script "../main.nf" - process "GFFREAD" - - tag "gffread" - tag "modules_nfcore" - tag "modules" - - test("sarscov2-gff3-gtf") { - - config "./nextflow.config" - - when { - params { - outdir = "$outputDir" - } - process { - """ - input[0] = [ - [id: 'test'], - file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.gff3", checkIfExists: true) - ] - input[1] = [] - """ - } - } - - then { - assertAll ( - { assert process.success }, - { assert snapshot(process.out).match() }, - { assert process.out.gffread_gff == [] }, - { assert process.out.gffread_fasta == [] } - ) - } - - } - - test("sarscov2-gff3-gtf-stub") { - - options '-stub' - config "./nextflow.config" - - when { - params { - outdir = "$outputDir" - } - process { - """ - input[0] = [ - [id: 'test'], - file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.gff3", checkIfExists: true) - ] - input[1] = [] - """ - } - } - - then { - assertAll ( - { assert process.success }, - { assert snapshot(process.out).match() }, - { assert process.out.gffread_gff == [] }, - { assert process.out.gffread_fasta == [] } - ) - } - - } - - test("sarscov2-gff3-gff3") { - - config "./nextflow-gff3.config" - - when { - params { - outdir = "$outputDir" - } - process { - """ - input[0] = [ - [id: 'test'], - file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.gff3", checkIfExists: true) - ] - input[1] = [] - """ - } - } - - then { - assertAll ( - { assert process.success }, - { assert snapshot(process.out).match() }, - { assert process.out.gtf == [] }, - { assert process.out.gffread_fasta == [] } - ) - } - - } - - test("sarscov2-gff3-gff3-stub") { - - options '-stub' - config "./nextflow-gff3.config" - - when { - params { - outdir = "$outputDir" - } - process { - """ - input[0] = [ - [id: 'test'], - file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.gff3", checkIfExists: true) - ] - input[1] = [] - """ - } - } - - then { - assertAll ( - { assert process.success }, - { assert snapshot(process.out).match() }, - { assert process.out.gtf == [] }, - { assert process.out.gffread_fasta == [] } - ) - } - - } - - test("sarscov2-gff3-fasta") { - - config "./nextflow-fasta.config" - - when { - params { - outdir = "$outputDir" - } - process { - """ - input[0] = [ - [id: 'test'], - file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.gff3", checkIfExists: true) - ] - input[1] = file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.fasta", checkIfExists: true) - """ - } - } - - then { - assertAll ( - { assert process.success }, - { assert snapshot(process.out).match() }, - { assert process.out.gtf == [] }, - { assert process.out.gffread_gff == [] } - ) - } - - } - - test("sarscov2-gff3-fasta-stub") { - - options '-stub' - config "./nextflow-fasta.config" - - when { - params { - outdir = "$outputDir" - } - process { - """ - input[0] = [ - [id: 'test'], - file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.gff3", checkIfExists: true) - ] - input[1] = file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.fasta", checkIfExists: true) - """ - } - } - - then { - assertAll ( - { assert process.success }, - { assert snapshot(process.out).match() }, - { assert process.out.gtf == [] }, - { assert process.out.gffread_gff == [] } - ) - } - - } - - test("sarscov2-gff3-fasta-fail-catch") { - - options '-stub' - config "./nextflow-fasta.config" - - when { - params { - outdir = "$outputDir" - } - process { - """ - input[0] = [ - [id: 'genome'], - file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.gff3", checkIfExists: true) - ] - input[1] = file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.fasta", checkIfExists: true) - """ - } - } - - then { - assertAll ( - { assert ! process.success }, - { assert process.stdout.toString().contains("Input and output names are the same") } - ) - } - - } - -} diff --git a/modules/nf-core/gffread/tests/main.nf.test.snap b/modules/nf-core/gffread/tests/main.nf.test.snap deleted file mode 100644 index 1526232..0000000 --- a/modules/nf-core/gffread/tests/main.nf.test.snap +++ /dev/null @@ -1,272 +0,0 @@ -{ - "sarscov2-gff3-gtf": { - "content": [ - { - "0": [ - [ - { - "id": "test" - }, - "test.gtf:md5,1ea0ae98d3388e0576407dc4a24ef428" - ] - ], - "1": [ - - ], - "2": [ - - ], - "3": [ - "versions.yml:md5,05f671c6c6e530acedad0af0a5948dbd" - ], - "gffread_fasta": [ - - ], - "gffread_gff": [ - - ], - "gtf": [ - [ - { - "id": "test" - }, - "test.gtf:md5,1ea0ae98d3388e0576407dc4a24ef428" - ] - ], - "versions": [ - "versions.yml:md5,05f671c6c6e530acedad0af0a5948dbd" - ] - } - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-04-09T10:48:56.496187" - }, - "sarscov2-gff3-gff3": { - "content": [ - { - "0": [ - - ], - "1": [ - [ - { - "id": "test" - }, - "test.gff3:md5,c4e5da6267c6bee5899a2c204ae1ad91" - ] - ], - "2": [ - - ], - "3": [ - "versions.yml:md5,05f671c6c6e530acedad0af0a5948dbd" - ], - "gffread_fasta": [ - - ], - "gffread_gff": [ - [ - { - "id": "test" - }, - "test.gff3:md5,c4e5da6267c6bee5899a2c204ae1ad91" - ] - ], - "gtf": [ - - ], - "versions": [ - "versions.yml:md5,05f671c6c6e530acedad0af0a5948dbd" - ] - } - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-04-09T10:49:00.892782" - }, - "sarscov2-gff3-gtf-stub": { - "content": [ - { - "0": [ - [ - { - "id": "test" - }, - "test.gtf:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "1": [ - - ], - "2": [ - - ], - "3": [ - "versions.yml:md5,05f671c6c6e530acedad0af0a5948dbd" - ], - "gffread_fasta": [ - - ], - "gffread_gff": [ - - ], - "gtf": [ - [ - { - "id": "test" - }, - "test.gtf:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "versions": [ - "versions.yml:md5,05f671c6c6e530acedad0af0a5948dbd" - ] - } - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-04-09T11:11:26.975666" - }, - "sarscov2-gff3-fasta-stub": { - "content": [ - { - "0": [ - - ], - "1": [ - - ], - "2": [ - [ - { - "id": "test" - }, - "test.fasta:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "3": [ - "versions.yml:md5,05f671c6c6e530acedad0af0a5948dbd" - ], - "gffread_fasta": [ - [ - { - "id": "test" - }, - "test.fasta:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "gffread_gff": [ - - ], - "gtf": [ - - ], - "versions": [ - "versions.yml:md5,05f671c6c6e530acedad0af0a5948dbd" - ] - } - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-04-09T11:11:44.34792" - }, - "sarscov2-gff3-gff3-stub": { - "content": [ - { - "0": [ - - ], - "1": [ - [ - { - "id": "test" - }, - "test.gff3:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "2": [ - - ], - "3": [ - "versions.yml:md5,05f671c6c6e530acedad0af0a5948dbd" - ], - "gffread_fasta": [ - - ], - "gffread_gff": [ - [ - { - "id": "test" - }, - "test.gff3:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "gtf": [ - - ], - "versions": [ - "versions.yml:md5,05f671c6c6e530acedad0af0a5948dbd" - ] - } - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-04-09T11:11:35.221671" - }, - "sarscov2-gff3-fasta": { - "content": [ - { - "0": [ - - ], - "1": [ - - ], - "2": [ - [ - { - "id": "test" - }, - "test.fasta:md5,5f8108fb51739a0588ccf0a251de919a" - ] - ], - "3": [ - "versions.yml:md5,05f671c6c6e530acedad0af0a5948dbd" - ], - "gffread_fasta": [ - [ - { - "id": "test" - }, - "test.fasta:md5,5f8108fb51739a0588ccf0a251de919a" - ] - ], - "gffread_gff": [ - - ], - "gtf": [ - - ], - "versions": [ - "versions.yml:md5,05f671c6c6e530acedad0af0a5948dbd" - ] - } - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-04-09T10:54:02.88143" - } -} \ No newline at end of file diff --git a/modules/nf-core/gffread/tests/nextflow-fasta.config b/modules/nf-core/gffread/tests/nextflow-fasta.config deleted file mode 100644 index ac6cb14..0000000 --- a/modules/nf-core/gffread/tests/nextflow-fasta.config +++ /dev/null @@ -1,5 +0,0 @@ -process { - withName: GFFREAD { - ext.args = '-w -S' - } -} diff --git a/modules/nf-core/gffread/tests/nextflow-gff3.config b/modules/nf-core/gffread/tests/nextflow-gff3.config deleted file mode 100644 index afe0830..0000000 --- a/modules/nf-core/gffread/tests/nextflow-gff3.config +++ /dev/null @@ -1,5 +0,0 @@ -process { - withName: GFFREAD { - ext.args = '' - } -} diff --git a/modules/nf-core/gffread/tests/nextflow.config b/modules/nf-core/gffread/tests/nextflow.config deleted file mode 100644 index 74b2509..0000000 --- a/modules/nf-core/gffread/tests/nextflow.config +++ /dev/null @@ -1,5 +0,0 @@ -process { - withName: GFFREAD { - ext.args = '-T' - } -} diff --git a/modules/nf-core/gffread/tests/tags.yml b/modules/nf-core/gffread/tests/tags.yml deleted file mode 100644 index 0557606..0000000 --- a/modules/nf-core/gffread/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -gffread: - - modules/nf-core/gffread/** diff --git a/modules/nf-core/gt/gff3/environment.yml b/modules/nf-core/gt/gff3/environment.yml deleted file mode 100644 index 8289fb3..0000000 --- a/modules/nf-core/gt/gff3/environment.yml +++ /dev/null @@ -1,9 +0,0 @@ ---- -# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json -name: "gt_gff3" -channels: - - conda-forge - - bioconda - - defaults -dependencies: - - "bioconda::genometools-genometools=1.6.5" diff --git a/modules/nf-core/gt/gff3/main.nf b/modules/nf-core/gt/gff3/main.nf deleted file mode 100644 index 6324a39..0000000 --- a/modules/nf-core/gt/gff3/main.nf +++ /dev/null @@ -1,51 +0,0 @@ -process GT_GFF3 { - tag "$meta.id" - label 'process_single' - - conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/genometools-genometools:1.6.5--py310h3db02ab_0': - 'biocontainers/genometools-genometools:1.6.5--py310h3db02ab_0' }" - - input: - tuple val(meta), path(gff3) - - output: - tuple val(meta), path("*.gt.gff3") , emit: gt_gff3 , optional: true - tuple val(meta), path("*.error.log"), emit: error_log , optional: true - path "versions.yml" , emit: versions - - when: - task.ext.when == null || task.ext.when - - script: - def args = task.ext.args ?: '' - def prefix = task.ext.prefix ?: "${meta.id}" - """ - gt \\ - gff3 \\ - $args \\ - "$gff3" \\ - > "${prefix}.gt.gff3" \\ - 2> >(tee "${prefix}.error.log" >&2) \\ - || echo "Errors from gt-gff3 printed to ${prefix}.error.log" - - if grep -q "gt gff3: error:" "${prefix}.error.log"; then - echo "gt-gff3 failed to parse $gff3" - - rm \\ - "${prefix}.gt.gff3" - else - echo "gt-gff3 successfully parsed $gff3" - - mv \\ - "${prefix}.error.log" \\ - gt_gff3.stderr - fi - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - genometools: \$(gt --version | head -1 | sed 's/gt (GenomeTools) //') - END_VERSIONS - """ -} diff --git a/modules/nf-core/gt/gff3/meta.yml b/modules/nf-core/gt/gff3/meta.yml deleted file mode 100644 index 5cecd8d..0000000 --- a/modules/nf-core/gt/gff3/meta.yml +++ /dev/null @@ -1,48 +0,0 @@ ---- -# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/meta-schema.json -name: "gt_gff3" -description: "GenomeTools gt-gff3 utility to parse, possibly transform, and output GFF3 files" -keywords: - - genome - - gff3 - - annotation -tools: - - "gt": - description: "The GenomeTools genome analysis system" - homepage: "https://genometools.org/index.html" - documentation: "https://genometools.org/documentation.html" - tool_dev_url: "https://github.com/genometools/genometools" - doi: "10.1109/TCBB.2013.68" - licence: ["ISC"] -input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. `[ id:'test' ]` - - gff3: - type: file - description: Input gff3 file - pattern: "*.{gff,gff3}" -output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. `[ id:'test' ]` - - gt_gff3: - type: file - description: Parsed gff3 file produced only if there is no parsing error - pattern: "*.gt.gff3" - - error_log: - type: file - description: Error log if gt-gff3 failed to parse the input gff3 file - pattern: "*.error.log" - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" -authors: - - "@gallvp" -maintainers: - - "@gallvp" diff --git a/modules/nf-core/gt/gff3/tests/main.nf.test b/modules/nf-core/gt/gff3/tests/main.nf.test deleted file mode 100644 index 46c7da3..0000000 --- a/modules/nf-core/gt/gff3/tests/main.nf.test +++ /dev/null @@ -1,61 +0,0 @@ -nextflow_process { - - name "Test Process GT_GFF3" - script "../main.nf" - process "GT_GFF3" - config "./nextflow.config" - - tag "modules" - tag "modules_nfcore" - tag "gt" - tag "gt/gff3" - - test("sarscov2-gff3-valid") { - when { - process { - """ - input[0] = [ - [ id:'test' ], // meta map - file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.gff3', checkIfExists: true) - ] - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(process.out).match() }, - { assert process.out.gt_gff3 != null }, - { assert process.out.error_log == [] } - ) - } - - } - - test("sarscov2-gff3-invalid") { - when { - process { - """ - input[0] = Channel.of( - '##gff-version 3', - 'chr22\tID=gene:ENSG00000233995;Name=AP000547.1' - ) - .collectFile(name: 'sample.gff3', newLine: true) - .map { file -> [ [ id:'test' ], file ] } - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(process.out).match() }, - { assert process.out.gt_gff3 == [] }, - { assert process.out.error_log != null }, - { assert path(process.out.error_log.get(0).get(1)).getText().contains("gt gff3: error:") } - ) - } - } - -} diff --git a/modules/nf-core/gt/gff3/tests/main.nf.test.snap b/modules/nf-core/gt/gff3/tests/main.nf.test.snap deleted file mode 100644 index 6e454f1..0000000 --- a/modules/nf-core/gt/gff3/tests/main.nf.test.snap +++ /dev/null @@ -1,72 +0,0 @@ -{ - "sarscov2-gff3-invalid": { - "content": [ - { - "0": [ - - ], - "1": [ - [ - { - "id": "test" - }, - "test.error.log:md5,31e6117c516f936ec403f792c732bc76" - ] - ], - "2": [ - "versions.yml:md5,9753770dd19a2a306dcf16d4aaf049eb" - ], - "error_log": [ - [ - { - "id": "test" - }, - "test.error.log:md5,31e6117c516f936ec403f792c732bc76" - ] - ], - "gt_gff3": [ - - ], - "versions": [ - "versions.yml:md5,9753770dd19a2a306dcf16d4aaf049eb" - ] - } - ], - "timestamp": "2023-11-29T10:42:11.408352" - }, - "sarscov2-gff3-valid": { - "content": [ - { - "0": [ - [ - { - "id": "test" - }, - "test.gt.gff3:md5,2ae900237ace415557b8735fac088b85" - ] - ], - "1": [ - - ], - "2": [ - "versions.yml:md5,9753770dd19a2a306dcf16d4aaf049eb" - ], - "error_log": [ - - ], - "gt_gff3": [ - [ - { - "id": "test" - }, - "test.gt.gff3:md5,2ae900237ace415557b8735fac088b85" - ] - ], - "versions": [ - "versions.yml:md5,9753770dd19a2a306dcf16d4aaf049eb" - ] - } - ], - "timestamp": "2023-11-29T10:42:07.817894" - } -} \ No newline at end of file diff --git a/modules/nf-core/gt/gff3/tests/nextflow.config b/modules/nf-core/gt/gff3/tests/nextflow.config deleted file mode 100644 index af56226..0000000 --- a/modules/nf-core/gt/gff3/tests/nextflow.config +++ /dev/null @@ -1,3 +0,0 @@ -process { - ext.args = '-tidy -retainids' -} diff --git a/modules/nf-core/gt/gff3/tests/tags.yml b/modules/nf-core/gt/gff3/tests/tags.yml deleted file mode 100644 index 0ce15a9..0000000 --- a/modules/nf-core/gt/gff3/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -gt/gff3: - - "modules/nf-core/gt/gff3/**" diff --git a/modules/nf-core/gunzip/environment.yml b/modules/nf-core/gunzip/environment.yml deleted file mode 100644 index dfc02a7..0000000 --- a/modules/nf-core/gunzip/environment.yml +++ /dev/null @@ -1,9 +0,0 @@ -name: gunzip -channels: - - conda-forge - - bioconda - - defaults -dependencies: - - conda-forge::grep=3.11 - - conda-forge::sed=4.8 - - conda-forge::tar=1.34 diff --git a/modules/nf-core/gunzip/main.nf b/modules/nf-core/gunzip/main.nf deleted file mode 100644 index 5e67e3b..0000000 --- a/modules/nf-core/gunzip/main.nf +++ /dev/null @@ -1,55 +0,0 @@ -process GUNZIP { - tag "$archive" - label 'process_single' - - conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/ubuntu:22.04' : - 'nf-core/ubuntu:22.04' }" - - input: - tuple val(meta), path(archive) - - output: - tuple val(meta), path("$gunzip"), emit: gunzip - path "versions.yml" , emit: versions - - when: - task.ext.when == null || task.ext.when - - script: - def args = task.ext.args ?: '' - def extension = ( archive.toString() - '.gz' ).tokenize('.')[-1] - def name = archive.toString() - '.gz' - ".$extension" - def prefix = task.ext.prefix ?: name - gunzip = prefix + ".$extension" - """ - # Not calling gunzip itself because it creates files - # with the original group ownership rather than the - # default one for that user / the work directory - gzip \\ - -cd \\ - $args \\ - $archive \\ - > $gunzip - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - gunzip: \$(echo \$(gunzip --version 2>&1) | sed 's/^.*(gzip) //; s/ Copyright.*\$//') - END_VERSIONS - """ - - stub: - def args = task.ext.args ?: '' - def extension = ( archive.toString() - '.gz' ).tokenize('.')[-1] - def name = archive.toString() - '.gz' - ".$extension" - def prefix = task.ext.prefix ?: name - gunzip = prefix + ".$extension" - """ - touch $gunzip - cat <<-END_VERSIONS > versions.yml - "${task.process}": - gunzip: \$(echo \$(gunzip --version 2>&1) | sed 's/^.*(gzip) //; s/ Copyright.*\$//') - END_VERSIONS - """ -} diff --git a/modules/nf-core/gunzip/meta.yml b/modules/nf-core/gunzip/meta.yml deleted file mode 100644 index f32973a..0000000 --- a/modules/nf-core/gunzip/meta.yml +++ /dev/null @@ -1,40 +0,0 @@ -name: gunzip -description: Compresses and decompresses files. -keywords: - - gunzip - - compression - - decompression -tools: - - gunzip: - description: | - gzip is a file format and a software application used for file compression and decompression. - documentation: https://www.gnu.org/software/gzip/manual/gzip.html - licence: ["GPL-3.0-or-later"] -input: - - meta: - type: map - description: | - Optional groovy Map containing meta information - e.g. [ id:'test', single_end:false ] - - archive: - type: file - description: File to be compressed/uncompressed - pattern: "*.*" -output: - - gunzip: - type: file - description: Compressed/uncompressed file - pattern: "*.*" - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" -authors: - - "@joseespinosa" - - "@drpatelh" - - "@jfy133" -maintainers: - - "@joseespinosa" - - "@drpatelh" - - "@jfy133" - - "@gallvp" diff --git a/modules/nf-core/gunzip/tests/main.nf.test b/modules/nf-core/gunzip/tests/main.nf.test deleted file mode 100644 index 776211a..0000000 --- a/modules/nf-core/gunzip/tests/main.nf.test +++ /dev/null @@ -1,121 +0,0 @@ -nextflow_process { - - name "Test Process GUNZIP" - script "../main.nf" - process "GUNZIP" - tag "gunzip" - tag "modules_nfcore" - tag "modules" - - test("Should run without failures") { - - when { - params { - outdir = "$outputDir" - } - process { - """ - input[0] = Channel.of([ - [], - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) - ] - ) - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(process.out).match() } - ) - } - - } - - test("Should run without failures - prefix") { - - config './nextflow.config' - - when { - params { - outdir = "$outputDir" - } - process { - """ - input[0] = Channel.of([ - [ id: 'test' ], - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) - ] - ) - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(process.out).match() } - ) - } - - } - - test("Should run without failures - stub") { - - options '-stub' - - when { - params { - outdir = "$outputDir" - } - process { - """ - input[0] = Channel.of([ - [], - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) - ] - ) - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(process.out).match() } - ) - } - - } - - test("Should run without failures - prefix - stub") { - - options '-stub' - config './nextflow.config' - - when { - params { - outdir = "$outputDir" - } - process { - """ - input[0] = Channel.of([ - [ id: 'test' ], - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) - ] - ) - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(process.out).match() } - ) - } - - } - -} diff --git a/modules/nf-core/gunzip/tests/main.nf.test.snap b/modules/nf-core/gunzip/tests/main.nf.test.snap deleted file mode 100644 index 069967e..0000000 --- a/modules/nf-core/gunzip/tests/main.nf.test.snap +++ /dev/null @@ -1,134 +0,0 @@ -{ - "Should run without failures - prefix - stub": { - "content": [ - { - "0": [ - [ - { - "id": "test" - }, - "test.xyz.fastq:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "1": [ - "versions.yml:md5,54376d32aca20e937a4ec26dac228e84" - ], - "gunzip": [ - [ - { - "id": "test" - }, - "test.xyz.fastq:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "versions": [ - "versions.yml:md5,54376d32aca20e937a4ec26dac228e84" - ] - } - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" - }, - "timestamp": "2024-06-25T11:35:10.861293" - }, - "Should run without failures - stub": { - "content": [ - { - "0": [ - [ - [ - - ], - "test_1.fastq:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "1": [ - "versions.yml:md5,54376d32aca20e937a4ec26dac228e84" - ], - "gunzip": [ - [ - [ - - ], - "test_1.fastq:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "versions": [ - "versions.yml:md5,54376d32aca20e937a4ec26dac228e84" - ] - } - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" - }, - "timestamp": "2024-06-25T11:35:05.857145" - }, - "Should run without failures": { - "content": [ - { - "0": [ - [ - [ - - ], - "test_1.fastq:md5,4161df271f9bfcd25d5845a1e220dbec" - ] - ], - "1": [ - "versions.yml:md5,54376d32aca20e937a4ec26dac228e84" - ], - "gunzip": [ - [ - [ - - ], - "test_1.fastq:md5,4161df271f9bfcd25d5845a1e220dbec" - ] - ], - "versions": [ - "versions.yml:md5,54376d32aca20e937a4ec26dac228e84" - ] - } - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" - }, - "timestamp": "2023-10-17T15:35:37.690477896" - }, - "Should run without failures - prefix": { - "content": [ - { - "0": [ - [ - { - "id": "test" - }, - "test.xyz.fastq:md5,4161df271f9bfcd25d5845a1e220dbec" - ] - ], - "1": [ - "versions.yml:md5,54376d32aca20e937a4ec26dac228e84" - ], - "gunzip": [ - [ - { - "id": "test" - }, - "test.xyz.fastq:md5,4161df271f9bfcd25d5845a1e220dbec" - ] - ], - "versions": [ - "versions.yml:md5,54376d32aca20e937a4ec26dac228e84" - ] - } - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" - }, - "timestamp": "2024-06-25T11:33:32.921739" - } -} \ No newline at end of file diff --git a/modules/nf-core/gunzip/tests/nextflow.config b/modules/nf-core/gunzip/tests/nextflow.config deleted file mode 100644 index dec7764..0000000 --- a/modules/nf-core/gunzip/tests/nextflow.config +++ /dev/null @@ -1,5 +0,0 @@ -process { - withName: GUNZIP { - ext.prefix = { "${meta.id}.xyz" } - } -} diff --git a/modules/nf-core/gunzip/tests/tags.yml b/modules/nf-core/gunzip/tests/tags.yml deleted file mode 100644 index fd3f691..0000000 --- a/modules/nf-core/gunzip/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -gunzip: - - modules/nf-core/gunzip/** diff --git a/modules/nf-core/liftoff/environment.yml b/modules/nf-core/liftoff/environment.yml deleted file mode 100644 index 7f3eadf..0000000 --- a/modules/nf-core/liftoff/environment.yml +++ /dev/null @@ -1,9 +0,0 @@ -name: liftoff - -channels: - - conda-forge - - bioconda - - defaults - -dependencies: - - bioconda::liftoff=1.6.3 diff --git a/modules/nf-core/liftoff/main.nf b/modules/nf-core/liftoff/main.nf deleted file mode 100644 index 4db5da2..0000000 --- a/modules/nf-core/liftoff/main.nf +++ /dev/null @@ -1,66 +0,0 @@ -process LIFTOFF { - tag "$meta.id" - label 'process_high' - - conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/liftoff:1.6.3--pyhdfd78af_0': - 'biocontainers/liftoff:1.6.3--pyhdfd78af_0' }" - - input: - tuple val(meta), path(target_fa) - path ref_fa, name: 'ref_assembly.fa' - path ref_annotation - path ref_db - - output: - tuple val(meta), path("${prefix}.gff3") , emit: gff3 - tuple val(meta), path("*.polished.gff3") , emit: polished_gff3, optional: true - tuple val(meta), path("*.unmapped.txt") , emit: unmapped_txt - path "versions.yml" , emit: versions - - when: - task.ext.when == null || task.ext.when - - script: - def args = task.ext.args ?: '' - def arg_g = ref_annotation ? "-g $ref_annotation" : '' - def arg_db = ref_db ? "-db $ref_db" : '' - prefix = task.ext.prefix ?: "${meta.id}" - """ - liftoff \\ - $arg_g \\ - $arg_db \\ - -p $task.cpus \\ - -o "${prefix}.gff3" \\ - -u "${prefix}.unmapped.txt" \\ - $args \\ - $target_fa \\ - ref_assembly.fa - - mv \\ - "${prefix}.gff3_polished" \\ - "${prefix}.polished.gff3" \\ - || echo "-polish is absent" - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - liftoff: \$(liftoff --version 2> /dev/null) - END_VERSIONS - """ - - stub: - def args = task.ext.args ?: '' - prefix = task.ext.prefix ?: "${meta.id}" - def touch_polished = args.contains('-polish') ? "touch ${prefix}.polished.gff3" : '' - """ - touch "${prefix}.gff3" - touch "${prefix}.unmapped.txt" - $touch_polished - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - liftoff: \$(liftoff --version 2> /dev/null) - END_VERSIONS - """ -} diff --git a/modules/nf-core/liftoff/meta.yml b/modules/nf-core/liftoff/meta.yml deleted file mode 100644 index 10e502c..0000000 --- a/modules/nf-core/liftoff/meta.yml +++ /dev/null @@ -1,71 +0,0 @@ ---- -# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/meta-schema.json -name: "liftoff" -description: | - Uses Liftoff to accurately map annotations in GFF or GTF between assemblies of the same, - or closely-related species -keywords: - - genome - - annotation - - gff3 - - gtf - - liftover -tools: - - "liftoff": - description: | - Liftoff is a tool that accurately maps annotations in GFF or GTF between assemblies of the same, - or closely-related species - homepage: "https://github.com/agshumate/Liftoff" - documentation: "https://github.com/agshumate/Liftoff" - tool_dev_url: "https://github.com/agshumate/Liftoff" - doi: "10.1093/bioinformatics/bty191" - licence: ["GPL v3 License"] -input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. `[ id:'test' ]` - - target_fa: - type: file - description: Target assembly in fasta format - pattern: "*.{fsa,fa,fasta}" - - ref_fa: - type: file - description: Reference assembly in fasta format - pattern: "*.{fsa,fa,fasta}" - - ref_annotation: - type: file - description: Reference assembly annotations in gtf or gff3 format - pattern: "*.{gtf,gff3}" - - ref_db: - type: file - description: | - Name of feature database; if not specified, the -g argument must - be provided and a database will be built automatically -output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. `[ id:'test' ]` - - gff3: - type: file - description: Lifted annotations for the target assembly in gff3 format - pattern: "*.gff3" - - polished_gff3: - type: file - description: Polished lifted annotations for the target assembly in gff3 format - pattern: "*.polished.gff3" - - unmapped_txt: - type: file - description: List of unmapped reference annotations - pattern: "*.unmapped.txt" - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" -authors: - - "@GallVp" -maintainers: - - "@GallVp" diff --git a/modules/nf-core/liftoff/tests/main.nf.test b/modules/nf-core/liftoff/tests/main.nf.test deleted file mode 100644 index c8ebf26..0000000 --- a/modules/nf-core/liftoff/tests/main.nf.test +++ /dev/null @@ -1,102 +0,0 @@ -nextflow_process { - - name "Test Process LIFTOFF" - script "../main.nf" - process "LIFTOFF" - config "./nextflow.config" - - tag "modules" - tag "modules_nfcore" - tag "nf-core/gunzip" - tag "liftoff" - tag "gunzip" - - test("homo_sapiens-genome_21_fasta-genome_1_fasta-genome_1_gtf") { - - setup { - run("GUNZIP") { - script "../../../nf-core/gunzip" - - process { - """ - input[0] = [ - [ id:'test' ], - file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr1/genome.fasta.gz', checkIfExists: true) - ] - """ - } - } - } - - when { - process { - """ - input[0] = [ - [ id:'test' ], - file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/genome.fasta', checkIfExists: true) - ] - input[1] = GUNZIP.out.gunzip.map { meta, file -> file } - input[2] = [ - file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr1/genome.gtf', checkIfExists: true) - ] - input[3] = [] - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(process.out.unmapped_txt).match("unmapped_txt") }, - { assert file(process.out.gff3[0][1]).text.contains("chr21\tLiftoff\texon\t34608061\t34608118\t.\t+\t.") }, - { assert file(process.out.polished_gff3[0][1]).text.contains("chr21\tLiftoff\texon\t34608061\t34608118\t.\t+\t.") }, - { assert snapshot(process.out.versions).match("versions") } - ) - } - - } - - test("homo_sapiens-genome_21_fasta-genome_1_fasta-genome_1_gtf-stub") { - options '-stub' - - setup { - run("GUNZIP") { - script "../../../nf-core/gunzip" - - process { - """ - input[0] = [ - [ id:'test' ], - file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr1/genome.fasta.gz', checkIfExists: true) - ] - """ - } - } - } - - when { - process { - """ - input[0] = [ - [ id:'test' ], - file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/genome.fasta', checkIfExists: true) - ] - input[1] = GUNZIP.out.gunzip.map { meta, file -> file } - input[2] = [ - file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr1/genome.gtf', checkIfExists: true) - ] - input[3] = [] - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(process.out).match() } - ) - } - - } - -} diff --git a/modules/nf-core/liftoff/tests/main.nf.test.snap b/modules/nf-core/liftoff/tests/main.nf.test.snap deleted file mode 100644 index f606446..0000000 --- a/modules/nf-core/liftoff/tests/main.nf.test.snap +++ /dev/null @@ -1,96 +0,0 @@ -{ - "unmapped_txt": { - "content": [ - [ - [ - { - "id": "test" - }, - "test.unmapped.txt:md5,7391d10df6e15db356b084c9af5259e4" - ] - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2023-12-01T13:57:40.748507" - }, - "versions": { - "content": [ - [ - "versions.yml:md5,205d9c609e7fe27d8199550d842bdce8" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2023-12-01T13:57:40.752414" - }, - "homo_sapiens-genome_21_fasta-genome_1_fasta-genome_1_gtf-stub": { - "content": [ - { - "0": [ - [ - { - "id": "test" - }, - "test.gff3:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "1": [ - [ - { - "id": "test" - }, - "test.polished.gff3:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "2": [ - [ - { - "id": "test" - }, - "test.unmapped.txt:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "3": [ - "versions.yml:md5,205d9c609e7fe27d8199550d842bdce8" - ], - "gff3": [ - [ - { - "id": "test" - }, - "test.gff3:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "polished_gff3": [ - [ - { - "id": "test" - }, - "test.polished.gff3:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "unmapped_txt": [ - [ - { - "id": "test" - }, - "test.unmapped.txt:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "versions": [ - "versions.yml:md5,205d9c609e7fe27d8199550d842bdce8" - ] - } - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-03-19T09:15:25.661428" - } -} \ No newline at end of file diff --git a/modules/nf-core/liftoff/tests/nextflow.config b/modules/nf-core/liftoff/tests/nextflow.config deleted file mode 100644 index f35ef80..0000000 --- a/modules/nf-core/liftoff/tests/nextflow.config +++ /dev/null @@ -1,5 +0,0 @@ -process { - withName: LIFTOFF { - ext.args = '-polish' - } -} diff --git a/modules/nf-core/fastp/environment.yml b/modules/nf-core/multiqc/environment.yml similarity index 61% rename from modules/nf-core/fastp/environment.yml rename to modules/nf-core/multiqc/environment.yml index 70389e6..ca39fb6 100644 --- a/modules/nf-core/fastp/environment.yml +++ b/modules/nf-core/multiqc/environment.yml @@ -1,7 +1,7 @@ -name: fastp +name: multiqc channels: - conda-forge - bioconda - defaults dependencies: - - bioconda::fastp=0.23.4 + - bioconda::multiqc=1.21 diff --git a/modules/nf-core/multiqc/main.nf b/modules/nf-core/multiqc/main.nf new file mode 100644 index 0000000..47ac352 --- /dev/null +++ b/modules/nf-core/multiqc/main.nf @@ -0,0 +1,55 @@ +process MULTIQC { + label 'process_single' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/multiqc:1.21--pyhdfd78af_0' : + 'biocontainers/multiqc:1.21--pyhdfd78af_0' }" + + input: + path multiqc_files, stageAs: "?/*" + path(multiqc_config) + path(extra_multiqc_config) + path(multiqc_logo) + + output: + path "*multiqc_report.html", emit: report + path "*_data" , emit: data + path "*_plots" , optional:true, emit: plots + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def config = multiqc_config ? "--config $multiqc_config" : '' + def extra_config = extra_multiqc_config ? "--config $extra_multiqc_config" : '' + def logo = multiqc_logo ? /--cl-config 'custom_logo: "${multiqc_logo}"'/ : '' + """ + multiqc \\ + --force \\ + $args \\ + $config \\ + $extra_config \\ + $logo \\ + . + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + multiqc: \$( multiqc --version | sed -e "s/multiqc, version //g" ) + END_VERSIONS + """ + + stub: + """ + mkdir multiqc_data + touch multiqc_plots + touch multiqc_report.html + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + multiqc: \$( multiqc --version | sed -e "s/multiqc, version //g" ) + END_VERSIONS + """ +} diff --git a/modules/nf-core/multiqc/meta.yml b/modules/nf-core/multiqc/meta.yml new file mode 100644 index 0000000..45a9bc3 --- /dev/null +++ b/modules/nf-core/multiqc/meta.yml @@ -0,0 +1,58 @@ +name: multiqc +description: Aggregate results from bioinformatics analyses across many samples into a single report +keywords: + - QC + - bioinformatics tools + - Beautiful stand-alone HTML report +tools: + - multiqc: + description: | + MultiQC searches a given directory for analysis logs and compiles a HTML report. + It's a general use tool, perfect for summarising the output from numerous bioinformatics tools. + homepage: https://multiqc.info/ + documentation: https://multiqc.info/docs/ + licence: ["GPL-3.0-or-later"] +input: + - multiqc_files: + type: file + description: | + List of reports / files recognised by MultiQC, for example the html and zip output of FastQC + - multiqc_config: + type: file + description: Optional config yml for MultiQC + pattern: "*.{yml,yaml}" + - extra_multiqc_config: + type: file + description: Second optional config yml for MultiQC. Will override common sections in multiqc_config. + pattern: "*.{yml,yaml}" + - multiqc_logo: + type: file + description: Optional logo file for MultiQC + pattern: "*.{png}" +output: + - report: + type: file + description: MultiQC report file + pattern: "multiqc_report.html" + - data: + type: directory + description: MultiQC data dir + pattern: "multiqc_data" + - plots: + type: file + description: Plots created by MultiQC + pattern: "*_data" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@abhi18av" + - "@bunop" + - "@drpatelh" + - "@jfy133" +maintainers: + - "@abhi18av" + - "@bunop" + - "@drpatelh" + - "@jfy133" diff --git a/modules/nf-core/multiqc/tests/main.nf.test b/modules/nf-core/multiqc/tests/main.nf.test new file mode 100644 index 0000000..f1c4242 --- /dev/null +++ b/modules/nf-core/multiqc/tests/main.nf.test @@ -0,0 +1,84 @@ +nextflow_process { + + name "Test Process MULTIQC" + script "../main.nf" + process "MULTIQC" + + tag "modules" + tag "modules_nfcore" + tag "multiqc" + + test("sarscov2 single-end [fastqc]") { + + when { + process { + """ + input[0] = Channel.of(file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastqc/test_fastqc.zip', checkIfExists: true)) + input[1] = [] + input[2] = [] + input[3] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert process.out.report[0] ==~ ".*/multiqc_report.html" }, + { assert process.out.data[0] ==~ ".*/multiqc_data" }, + { assert snapshot(process.out.versions).match("multiqc_versions_single") } + ) + } + + } + + test("sarscov2 single-end [fastqc] [config]") { + + when { + process { + """ + input[0] = Channel.of(file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastqc/test_fastqc.zip', checkIfExists: true)) + input[1] = Channel.of(file("https://github.com/nf-core/tools/raw/dev/nf_core/pipeline-template/assets/multiqc_config.yml", checkIfExists: true)) + input[2] = [] + input[3] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert process.out.report[0] ==~ ".*/multiqc_report.html" }, + { assert process.out.data[0] ==~ ".*/multiqc_data" }, + { assert snapshot(process.out.versions).match("multiqc_versions_config") } + ) + } + } + + test("sarscov2 single-end [fastqc] - stub") { + + options "-stub" + + when { + process { + """ + input[0] = Channel.of(file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastqc/test_fastqc.zip', checkIfExists: true)) + input[1] = [] + input[2] = [] + input[3] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out.report.collect { file(it).getName() } + + process.out.data.collect { file(it).getName() } + + process.out.plots.collect { file(it).getName() } + + process.out.versions ).match("multiqc_stub") } + ) + } + + } +} diff --git a/modules/nf-core/multiqc/tests/main.nf.test.snap b/modules/nf-core/multiqc/tests/main.nf.test.snap new file mode 100644 index 0000000..bfebd80 --- /dev/null +++ b/modules/nf-core/multiqc/tests/main.nf.test.snap @@ -0,0 +1,41 @@ +{ + "multiqc_versions_single": { + "content": [ + [ + "versions.yml:md5,21f35ee29416b9b3073c28733efe4b7d" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-02-29T08:48:55.657331" + }, + "multiqc_stub": { + "content": [ + [ + "multiqc_report.html", + "multiqc_data", + "multiqc_plots", + "versions.yml:md5,21f35ee29416b9b3073c28733efe4b7d" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-02-29T08:49:49.071937" + }, + "multiqc_versions_config": { + "content": [ + [ + "versions.yml:md5,21f35ee29416b9b3073c28733efe4b7d" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-02-29T08:49:25.457567" + } +} \ No newline at end of file diff --git a/modules/nf-core/multiqc/tests/tags.yml b/modules/nf-core/multiqc/tests/tags.yml new file mode 100644 index 0000000..bea6c0d --- /dev/null +++ b/modules/nf-core/multiqc/tests/tags.yml @@ -0,0 +1,2 @@ +multiqc: + - modules/nf-core/multiqc/** diff --git a/modules/nf-core/orthofinder/environment.yml b/modules/nf-core/orthofinder/environment.yml deleted file mode 100644 index f93b9bb..0000000 --- a/modules/nf-core/orthofinder/environment.yml +++ /dev/null @@ -1,9 +0,0 @@ ---- -# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json -name: "orthofinder" -channels: - - conda-forge - - bioconda - - defaults -dependencies: - - "bioconda::orthofinder=2.5.5" diff --git a/modules/nf-core/orthofinder/main.nf b/modules/nf-core/orthofinder/main.nf deleted file mode 100644 index 2971fc0..0000000 --- a/modules/nf-core/orthofinder/main.nf +++ /dev/null @@ -1,69 +0,0 @@ -process ORTHOFINDER { - tag "$meta.id" - label 'process_high' - - conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/orthofinder:2.5.5--hdfd78af_2': - 'biocontainers/orthofinder:2.5.5--hdfd78af_2' }" - - input: - tuple val(meta), path(fastas, stageAs: 'input/') - - output: - tuple val(meta), path("$prefix") , emit: orthofinder - path "versions.yml" , emit: versions - - when: - task.ext.when == null || task.ext.when - - script: - def args = task.ext.args ?: '' - prefix = task.ext.prefix ?: "${meta.id}" - """ - mkdir temp_pickle - - orthofinder \\ - $args \\ - -t $task.cpus \\ - -a $task.cpus \\ - -p temp_pickle \\ - -f input \\ - -n $prefix - - mv \\ - input/OrthoFinder/Results_$prefix \\ - $prefix - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - orthofinder: \$(orthofinder -h | sed -n 's/.*version \\(.*\\) Copy.*/\\1/p') - END_VERSIONS - """ - - stub: - def args = task.ext.args ?: '' - prefix = task.ext.prefix ?: "${meta.id}" - """ - mkdir -p $prefix/Comparative_Genomics_Statistics - mkdir $prefix/Gene_Duplication_Events - mkdir $prefix/Gene_Trees - mkdir $prefix/Orthogroup_Sequences - mkdir $prefix/Orthogroups - mkdir $prefix/Orthologues - mkdir $prefix/Phylogenetic_Hierarchical_Orthogroups - mkdir $prefix/Phylogenetically_Misplaced_Genes - mkdir $prefix/Putative_Xenologs - mkdir $prefix/Resolved_Gene_Trees - mkdir $prefix/Single_Copy_Orthologue_Sequences - mkdir $prefix/Species_Tree - mkdir $prefix/WorkingDirectory - - touch $prefix/Log.txt - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - orthofinder: \$(orthofinder -h | sed -n 's/.*version \\(.*\\) Copy.*/\\1/p') - END_VERSIONS - """ -} diff --git a/modules/nf-core/orthofinder/meta.yml b/modules/nf-core/orthofinder/meta.yml deleted file mode 100644 index 23cc532..0000000 --- a/modules/nf-core/orthofinder/meta.yml +++ /dev/null @@ -1,50 +0,0 @@ ---- -# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/meta-schema.json -name: "orthofinder" -description: OrthoFinder is a fast, accurate and comprehensive platform for comparative genomics. -keywords: - - genomics - - orthogroup - - orthologs - - gene - - duplication - - tree - - phylogeny -tools: - - "orthofinder": - description: "Accurate inference of orthogroups, orthologues, gene trees and rooted species tree made easy!" - homepage: "https://github.com/davidemms/OrthoFinder" - documentation: "https://github.com/davidemms/OrthoFinder" - tool_dev_url: "https://github.com/davidemms/OrthoFinder" - doi: "10.1186/s13059-019-1832-y" - licence: ["GPL v3"] - -input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. `[ id:'sample1' ]` - - fastas: - type: list - description: Input fasta files - pattern: "*.{fa,faa,fasta,fas,pep}" - -output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. `[ id:'sample1' ]` - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - - orthofinder: - type: directory - description: Orthofinder output directory - -authors: - - "@GallVp" -maintainers: - - "@GallVp" diff --git a/modules/nf-core/orthofinder/tests/main.nf.test b/modules/nf-core/orthofinder/tests/main.nf.test deleted file mode 100644 index 2d64800..0000000 --- a/modules/nf-core/orthofinder/tests/main.nf.test +++ /dev/null @@ -1,96 +0,0 @@ -import groovy.io.FileType - -nextflow_process { - - name "Test Process ORTHOFINDER" - script "../main.nf" - process "ORTHOFINDER" - - tag "modules" - tag "modules_nfcore" - tag "orthofinder" - - test("sarscov2 - candidatus_portiera_aleyrodidarum - proteome") { - - when { - process { - """ - file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/proteome.fasta', checkIfExists: true) - .copyTo("${workDir}/sarscov2.fasta") - - file(params.modules_testdata_base_path + 'genomics/prokaryotes/candidatus_portiera_aleyrodidarum/genome/proteome.fasta', checkIfExists: true) - .copyTo("${workDir}/candidatus_portiera_aleyrodidarum.fasta") - - def file_a = file("${workDir}/sarscov2.fasta", checkIfExists:true) - def file_b = file("${workDir}/candidatus_portiera_aleyrodidarum.fasta", checkIfExists:true) - - input[0] = [ - [ id:'test', single_end:false ], - [ file_a, file_b ] - ] - """ - } - } - - then { - assert process.success - - def all_files = [] - - file(process.out.orthofinder[0][1]).eachFileRecurse (FileType.FILES) { file -> - all_files << file - } - - def all_file_names = all_files.collect { it.name }.sort(false) - - def stable_file_names = [ - 'Statistics_PerSpecies.tsv', - 'SpeciesTree_Gene_Duplications_0.5_Support.txt', - 'SpeciesTree_rooted.txt' - ] - - def stable_files = all_files.findAll { it.name in stable_file_names } - - assert snapshot( - all_file_names, - stable_files, - process.out.versions[0] - ).match() - } - - } - - test("sarscov2 - candidatus_portiera_aleyrodidarum - proteome - stub") { - - options '-stub' - - when { - process { - """ - file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/proteome.fasta', checkIfExists: true) - .copyTo("${workDir}/sarscov2.fasta") - - file(params.modules_testdata_base_path + 'genomics/prokaryotes/candidatus_portiera_aleyrodidarum/genome/proteome.fasta', checkIfExists: true) - .copyTo("${workDir}/candidatus_portiera_aleyrodidarum.fasta") - - def file_a = file("${workDir}/sarscov2.fasta", checkIfExists:true) - def file_b = file("${workDir}/candidatus_portiera_aleyrodidarum.fasta", checkIfExists:true) - - input[0] = [ - [ id:'test', single_end:false ], - [ file_a, file_b ] - ] - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(process.out).match() } - ) - } - - } - -} diff --git a/modules/nf-core/orthofinder/tests/main.nf.test.snap b/modules/nf-core/orthofinder/tests/main.nf.test.snap deleted file mode 100644 index 8b621c0..0000000 --- a/modules/nf-core/orthofinder/tests/main.nf.test.snap +++ /dev/null @@ -1,438 +0,0 @@ -{ - "sarscov2 - candidatus_portiera_aleyrodidarum - proteome": { - "content": [ - [ - "Blast0_0.txt.gz", - "Blast0_1.txt.gz", - "Blast1_0.txt.gz", - "Blast1_1.txt.gz", - "Citation.txt", - "Duplications.tsv", - "Duplications_per_Orthogroup.tsv", - "Duplications_per_Species_Tree_Node.tsv", - "Log.txt", - "N0.tsv", - "OG0000000.fa", - "OG0000000_tree.txt", - "OG0000000_tree.txt", - "OG0000000_tree_id.txt", - "OG0000001.fa", - "OG0000001_tree.txt", - "OG0000001_tree.txt", - "OG0000001_tree_id.txt", - "OG0000002.fa", - "OG0000003.fa", - "OG0000004.fa", - "OG0000005.fa", - "OG0000006.fa", - "OG0000007.fa", - "OG0000008.fa", - "OG0000009.fa", - "OG0000010.fa", - "OG0000011.fa", - "OG0000012.fa", - "OG0000013.fa", - "OG0000014.fa", - "OG0000015.fa", - "OG0000016.fa", - "OG0000017.fa", - "OG0000018.fa", - "OG0000019.fa", - "OG0000020.fa", - "OG0000021.fa", - "OG0000022.fa", - "OG0000023.fa", - "OG0000024.fa", - "OG0000025.fa", - "OG0000026.fa", - "OG0000027.fa", - "OG0000028.fa", - "OG0000029.fa", - "OG0000030.fa", - "OG0000031.fa", - "OG0000032.fa", - "OG0000033.fa", - "OG0000034.fa", - "OG0000035.fa", - "OG0000036.fa", - "OG0000037.fa", - "OG0000038.fa", - "OG0000039.fa", - "OG0000040.fa", - "OG0000041.fa", - "OG0000042.fa", - "OG0000043.fa", - "OG0000044.fa", - "OG0000045.fa", - "OG0000046.fa", - "OG0000047.fa", - "OG0000048.fa", - "OG0000049.fa", - "OG0000050.fa", - "OG0000051.fa", - "OG0000052.fa", - "OG0000053.fa", - "OG0000054.fa", - "OG0000055.fa", - "OG0000056.fa", - "OG0000057.fa", - "OG0000058.fa", - "OG0000059.fa", - "OG0000060.fa", - "OG0000061.fa", - "OG0000062.fa", - "OG0000063.fa", - "OG0000064.fa", - "OG0000065.fa", - "OG0000066.fa", - "OG0000067.fa", - "OG0000068.fa", - "OG0000069.fa", - "OG0000070.fa", - "OG0000071.fa", - "OG0000072.fa", - "OG0000073.fa", - "OG0000074.fa", - "OG0000075.fa", - "OG0000076.fa", - "OG0000077.fa", - "OG0000078.fa", - "OG0000079.fa", - "OG0000080.fa", - "OG0000081.fa", - "OG0000082.fa", - "OG0000083.fa", - "OG0000084.fa", - "OG0000085.fa", - "OG0000086.fa", - "OG0000087.fa", - "OG0000088.fa", - "OG0000089.fa", - "OG0000090.fa", - "OG0000091.fa", - "OG0000092.fa", - "OG0000093.fa", - "OG0000094.fa", - "OG0000095.fa", - "OG0000096.fa", - "OG0000097.fa", - "OG0000098.fa", - "OG0000099.fa", - "OG0000100.fa", - "OG0000101.fa", - "OG0000102.fa", - "OG0000103.fa", - "OG0000104.fa", - "OG0000105.fa", - "OG0000106.fa", - "OG0000107.fa", - "OG0000108.fa", - "OG0000109.fa", - "OG0000110.fa", - "OG0000111.fa", - "OG0000112.fa", - "OG0000113.fa", - "OG0000114.fa", - "OG0000115.fa", - "OG0000116.fa", - "OG0000117.fa", - "OG0000118.fa", - "OG0000119.fa", - "OG0000120.fa", - "OG0000121.fa", - "OG0000122.fa", - "OG0000123.fa", - "OG0000124.fa", - "OG0000125.fa", - "OG0000126.fa", - "OG0000127.fa", - "OG0000128.fa", - "OG0000129.fa", - "OG0000130.fa", - "OG0000131.fa", - "OG0000132.fa", - "OG0000133.fa", - "OG0000134.fa", - "OG0000135.fa", - "OG0000136.fa", - "OG0000137.fa", - "OG0000138.fa", - "OG0000139.fa", - "OG0000140.fa", - "OG0000141.fa", - "OG0000142.fa", - "OG0000143.fa", - "OG0000144.fa", - "OG0000145.fa", - "OG0000146.fa", - "OG0000147.fa", - "OG0000148.fa", - "OG0000149.fa", - "OG0000150.fa", - "OG0000151.fa", - "OG0000152.fa", - "OG0000153.fa", - "OG0000154.fa", - "OG0000155.fa", - "OG0000156.fa", - "OG0000157.fa", - "OG0000158.fa", - "OG0000159.fa", - "OG0000160.fa", - "OG0000161.fa", - "OG0000162.fa", - "OG0000163.fa", - "OG0000164.fa", - "OG0000165.fa", - "OG0000166.fa", - "OG0000167.fa", - "OG0000168.fa", - "OG0000169.fa", - "OG0000170.fa", - "OG0000171.fa", - "OG0000172.fa", - "OG0000173.fa", - "OG0000174.fa", - "OG0000175.fa", - "OG0000176.fa", - "OG0000177.fa", - "OG0000178.fa", - "OG0000179.fa", - "OG0000180.fa", - "OG0000181.fa", - "OG0000182.fa", - "OG0000183.fa", - "OG0000184.fa", - "OG0000185.fa", - "OG0000186.fa", - "OG0000187.fa", - "OG0000188.fa", - "OG0000189.fa", - "OG0000190.fa", - "OG0000191.fa", - "OG0000192.fa", - "OG0000193.fa", - "OG0000194.fa", - "OG0000195.fa", - "OG0000196.fa", - "OG0000197.fa", - "OG0000198.fa", - "OG0000199.fa", - "OG0000200.fa", - "OG0000201.fa", - "OG0000202.fa", - "OG0000203.fa", - "OG0000204.fa", - "OG0000205.fa", - "OG0000206.fa", - "OG0000207.fa", - "OG0000208.fa", - "OG0000209.fa", - "OG0000210.fa", - "OG0000211.fa", - "OG0000212.fa", - "OG0000213.fa", - "OG0000214.fa", - "OG0000215.fa", - "OG0000216.fa", - "OG0000217.fa", - "OG0000218.fa", - "OG0000219.fa", - "OG0000220.fa", - "OG0000221.fa", - "OG0000222.fa", - "OG0000223.fa", - "OG0000224.fa", - "OG0000225.fa", - "OG0000226.fa", - "OG0000227.fa", - "OG0000228.fa", - "OG0000229.fa", - "OG0000230.fa", - "OG0000231.fa", - "OG0000232.fa", - "OG0000233.fa", - "OG0000234.fa", - "OG0000235.fa", - "OG0000236.fa", - "OG0000237.fa", - "OG0000238.fa", - "OG0000239.fa", - "OG0000240.fa", - "OG0000241.fa", - "OG0000242.fa", - "OG0000243.fa", - "OG0000244.fa", - "OG0000245.fa", - "OrthoFinder_graph.txt", - "Orthogroups.GeneCount.tsv", - "Orthogroups.tsv", - "Orthogroups.txt", - "Orthogroups_SingleCopyOrthologues.txt", - "Orthogroups_SpeciesOverlaps.tsv", - "Orthogroups_UnassignedGenes.tsv", - "OrthologuesStats_Totals.tsv", - "OrthologuesStats_many-to-many.tsv", - "OrthologuesStats_many-to-one.tsv", - "OrthologuesStats_one-to-many.tsv", - "OrthologuesStats_one-to-one.tsv", - "SequenceIDs.txt", - "SimpleTest.phy", - "SimpleTest.phy_fastme_stat.txt", - "SimpleTest.tre", - "Species0.fa", - "Species0.fa", - "Species1.fa", - "SpeciesIDs.txt", - "SpeciesTree_Gene_Duplications_0.5_Support.txt", - "SpeciesTree_rooted.txt", - "SpeciesTree_rooted_ids.txt", - "SpeciesTree_rooted_node_labels.txt", - "SpeciesTree_unrooted.txt", - "SpeciesTree_unrooted_ids.txt", - "Statistics_Overall.tsv", - "Statistics_PerSpecies.tsv", - "candidatus_portiera_aleyrodidarum.tsv", - "candidatus_portiera_aleyrodidarum.tsv", - "candidatus_portiera_aleyrodidarum__v__sarscov2.tsv", - "clusters_OrthoFinder_I1.5.txt", - "clusters_OrthoFinder_I1.5.txt_id_pairs.txt", - "diamondDBSpecies0.dmnd", - "diamondDBSpecies0.dmnd", - "diamondDBSpecies1.dmnd", - "sarscov2.tsv", - "sarscov2.tsv", - "sarscov2__v__candidatus_portiera_aleyrodidarum.tsv", - "test_search_results.txt.gz" - ], - [ - "Statistics_PerSpecies.tsv:md5,984b5011a34d54527fe17896bfa36a2d", - "SpeciesTree_Gene_Duplications_0.5_Support.txt:md5,8b7a673e2e8b6d1aeb697f2bb88afa18", - "SpeciesTree_rooted.txt:md5,4d5ea525feebe479fca0c0768271ba81" - ], - "versions.yml:md5,86b472c85626aac1840eec0769016f5c" - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" - }, - "timestamp": "2024-06-07T21:33:50.902329" - }, - "sarscov2 - candidatus_portiera_aleyrodidarum - proteome - stub": { - "content": [ - { - "0": [ - [ - { - "id": "test", - "single_end": false - }, - [ - [ - - ], - [ - - ], - [ - - ], - "Log.txt:md5,d41d8cd98f00b204e9800998ecf8427e", - [ - - ], - [ - - ], - [ - - ], - [ - - ], - [ - - ], - [ - - ], - [ - - ], - [ - - ], - [ - - ], - [ - - ] - ] - ] - ], - "1": [ - "versions.yml:md5,86b472c85626aac1840eec0769016f5c" - ], - "orthofinder": [ - [ - { - "id": "test", - "single_end": false - }, - [ - [ - - ], - [ - - ], - [ - - ], - "Log.txt:md5,d41d8cd98f00b204e9800998ecf8427e", - [ - - ], - [ - - ], - [ - - ], - [ - - ], - [ - - ], - [ - - ], - [ - - ], - [ - - ], - [ - - ], - [ - - ] - ] - ] - ], - "versions": [ - "versions.yml:md5,86b472c85626aac1840eec0769016f5c" - ] - } - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" - }, - "timestamp": "2024-06-07T16:00:56.530716" - } -} \ No newline at end of file diff --git a/modules/nf-core/orthofinder/tests/tags.yml b/modules/nf-core/orthofinder/tests/tags.yml deleted file mode 100644 index f386e25..0000000 --- a/modules/nf-core/orthofinder/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -orthofinder: - - "modules/nf-core/orthofinder/**" diff --git a/modules/nf-core/repeatmodeler/builddatabase/environment.yml b/modules/nf-core/repeatmodeler/builddatabase/environment.yml deleted file mode 100644 index ecc282e..0000000 --- a/modules/nf-core/repeatmodeler/builddatabase/environment.yml +++ /dev/null @@ -1,9 +0,0 @@ ---- -# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json -name: "repeatmodeler_builddatabase" -channels: - - conda-forge - - bioconda - - defaults -dependencies: - - "bioconda::repeatmodeler=2.0.5" diff --git a/modules/nf-core/repeatmodeler/builddatabase/main.nf b/modules/nf-core/repeatmodeler/builddatabase/main.nf deleted file mode 100644 index 6fe244b..0000000 --- a/modules/nf-core/repeatmodeler/builddatabase/main.nf +++ /dev/null @@ -1,50 +0,0 @@ -process REPEATMODELER_BUILDDATABASE { - tag "$meta.id" - label 'process_single' - - conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/repeatmodeler:2.0.5--pl5321hdfd78af_0': - 'biocontainers/repeatmodeler:2.0.5--pl5321hdfd78af_0' }" - - input: - tuple val(meta), path(fasta) - - output: - tuple val(meta), path("${prefix}.*") , emit: db - path "versions.yml" , emit: versions - - when: - task.ext.when == null || task.ext.when - - script: - prefix = task.ext.prefix ?: "${meta.id}" - """ - BuildDatabase \\ - -name $prefix \\ - $fasta - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - repeatmodeler: \$(RepeatModeler --version | sed 's/RepeatModeler version //') - END_VERSIONS - """ - - stub: - prefix = task.ext.prefix ?: "${meta.id}" - """ - touch ${prefix}.nhr - touch ${prefix}.nin - touch ${prefix}.njs - touch ${prefix}.nnd - touch ${prefix}.nni - touch ${prefix}.nog - touch ${prefix}.nsq - touch ${prefix}.translation - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - repeatmodeler: \$(RepeatModeler --version | sed 's/RepeatModeler version //') - END_VERSIONS - """ -} diff --git a/modules/nf-core/repeatmodeler/builddatabase/meta.yml b/modules/nf-core/repeatmodeler/builddatabase/meta.yml deleted file mode 100644 index d3aa931..0000000 --- a/modules/nf-core/repeatmodeler/builddatabase/meta.yml +++ /dev/null @@ -1,44 +0,0 @@ ---- -# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/meta-schema.json -name: "repeatmodeler_builddatabase" -description: Create a database for RepeatModeler -keywords: - - genomics - - fasta - - repeat -tools: - - "repeatmodeler": - description: "RepeatModeler is a de-novo repeat family identification and modeling package." - homepage: "https://github.com/Dfam-consortium/RepeatModeler" - documentation: "https://github.com/Dfam-consortium/RepeatModeler" - tool_dev_url: "https://github.com/Dfam-consortium/RepeatModeler" - licence: ["Open Software License v2.1"] - -input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. `[ id:'sample1' ]` - - fasta: - type: file - description: Fasta file - pattern: "*.{fasta,fsa,fa}" -output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. `[ id:'sample1' ]` - - db: - type: file - description: Database files for repeatmodeler - pattern: "`${prefix}.*`" - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" -authors: - - "@GallVp" -maintainers: - - "@GallVp" diff --git a/modules/nf-core/repeatmodeler/builddatabase/tests/main.nf.test b/modules/nf-core/repeatmodeler/builddatabase/tests/main.nf.test deleted file mode 100644 index bfe5d78..0000000 --- a/modules/nf-core/repeatmodeler/builddatabase/tests/main.nf.test +++ /dev/null @@ -1,60 +0,0 @@ -nextflow_process { - - name "Test Process REPEATMODELER_BUILDDATABASE" - script "../main.nf" - process "REPEATMODELER_BUILDDATABASE" - - tag "modules" - tag "modules_nfcore" - tag "repeatmodeler" - tag "repeatmodeler/builddatabase" - - test("sarscov2-genome_fasta") { - - when { - process { - """ - input[0] = [ - [ id:'test' ], // meta map - file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true) - ] - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(process.out.versions).match("versions") }, - { assert snapshot(process.out.db[0][1].collect { file(it).name }.sort().toString()).match("db") }, - { assert snapshot(process.out.db[0][1].findAll { ! ( "$it"[-3..-1] in [ 'nin', 'njs' ] ) } ).match("stable_md5") } - ) - } - - } - - test("sarscov2-genome_fasta-stub") { - - options "-stub" - - when { - process { - """ - input[0] = [ - [ id:'test' ], // meta map - file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true) - ] - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(process.out).match() } - ) - } - - } - -} diff --git a/modules/nf-core/repeatmodeler/builddatabase/tests/main.nf.test.snap b/modules/nf-core/repeatmodeler/builddatabase/tests/main.nf.test.snap deleted file mode 100644 index 1f1a551..0000000 --- a/modules/nf-core/repeatmodeler/builddatabase/tests/main.nf.test.snap +++ /dev/null @@ -1,92 +0,0 @@ -{ - "sarscov2-genome_fasta-stub": { - "content": [ - { - "0": [ - [ - { - "id": "test" - }, - [ - "test.nhr:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.nin:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.njs:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.nnd:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.nni:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.nog:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.nsq:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.translation:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ] - ], - "1": [ - "versions.yml:md5,7944637266bc3e2726899eaad5e46c87" - ], - "db": [ - [ - { - "id": "test" - }, - [ - "test.nhr:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.nin:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.njs:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.nnd:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.nni:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.nog:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.nsq:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.translation:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ] - ], - "versions": [ - "versions.yml:md5,7944637266bc3e2726899eaad5e46c87" - ] - } - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-04-02T12:06:44.261566" - }, - "versions": { - "content": [ - [ - "versions.yml:md5,7944637266bc3e2726899eaad5e46c87" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-01-09T15:14:48.807063" - }, - "stable_md5": { - "content": [ - [ - "test.nhr:md5,1a41cb6d0b00c28f62ad60e75ae2f6fc", - "test.nnd:md5,2002e13acf59079a1a5782c918894579", - "test.nni:md5,26a954ba0fd80983b550d8f6b8b35ff8", - "test.nog:md5,30896f123998e926ea2237b89091e7fe", - "test.nsq:md5,982cbc7d9e38743b9b1037588862b9da", - "test.translation:md5,ccbb119522c09daa976a9015ba999329" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-04-23T10:03:41.669433" - }, - "db": { - "content": [ - "[test.nhr, test.nin, test.njs, test.nnd, test.nni, test.nog, test.nsq, test.translation]" - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-04-02T12:08:36.94713" - } -} \ No newline at end of file diff --git a/modules/nf-core/repeatmodeler/builddatabase/tests/tags.yml b/modules/nf-core/repeatmodeler/builddatabase/tests/tags.yml deleted file mode 100644 index c524294..0000000 --- a/modules/nf-core/repeatmodeler/builddatabase/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -repeatmodeler/builddatabase: - - "modules/nf-core/repeatmodeler/builddatabase/**" diff --git a/modules/nf-core/repeatmodeler/repeatmodeler/environment.yml b/modules/nf-core/repeatmodeler/repeatmodeler/environment.yml deleted file mode 100644 index 2422071..0000000 --- a/modules/nf-core/repeatmodeler/repeatmodeler/environment.yml +++ /dev/null @@ -1,9 +0,0 @@ ---- -# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json -name: "repeatmodeler_repeatmodeler" -channels: - - conda-forge - - bioconda - - defaults -dependencies: - - "bioconda::repeatmodeler=2.0.5" diff --git a/modules/nf-core/repeatmodeler/repeatmodeler/main.nf b/modules/nf-core/repeatmodeler/repeatmodeler/main.nf deleted file mode 100644 index 9d0449f..0000000 --- a/modules/nf-core/repeatmodeler/repeatmodeler/main.nf +++ /dev/null @@ -1,54 +0,0 @@ -process REPEATMODELER_REPEATMODELER { - tag "$meta.id" - label 'process_medium' - - conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/repeatmodeler:2.0.5--pl5321hdfd78af_0': - 'biocontainers/repeatmodeler:2.0.5--pl5321hdfd78af_0' }" - - input: - tuple val(meta), path(db) - - output: - tuple val(meta), path("*.fa") , emit: fasta - tuple val(meta), path("*.stk"), emit: stk - tuple val(meta), path("*.log"), emit: log - path "versions.yml" , emit: versions - - when: - task.ext.when == null || task.ext.when - - script: - def args = task.ext.args ?: '' - def prefix = task.ext.prefix ?: "${meta.id}" - def db_name = file(db[0]).getBaseName() - """ - RepeatModeler \\ - -database $db_name \\ - $args \\ - -threads $task.cpus - - mv ${db_name}-families.fa ${prefix}.fa - mv ${db_name}-families.stk ${prefix}.stk - mv ${db_name}-rmod.log ${prefix}.log - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - repeatmodeler: \$(RepeatModeler --version | sed 's/RepeatModeler version //') - END_VERSIONS - """ - - stub: - def prefix = task.ext.prefix ?: "${meta.id}" - """ - touch ${prefix}.fa - touch ${prefix}.stk - touch ${prefix}.log - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - repeatmodeler: \$(RepeatModeler --version | sed 's/RepeatModeler version //') - END_VERSIONS - """ -} diff --git a/modules/nf-core/repeatmodeler/repeatmodeler/meta.yml b/modules/nf-core/repeatmodeler/repeatmodeler/meta.yml deleted file mode 100644 index 29bb795..0000000 --- a/modules/nf-core/repeatmodeler/repeatmodeler/meta.yml +++ /dev/null @@ -1,52 +0,0 @@ ---- -# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/meta-schema.json -name: "repeatmodeler_repeatmodeler" -description: Performs de novo transposable element (TE) family identification with RepeatModeler -keywords: - - genomics - - fasta - - repeat - - transposable element -tools: - - "repeatmodeler": - description: "RepeatModeler is a de-novo repeat family identification and modeling package." - homepage: "https://github.com/Dfam-consortium/RepeatModeler" - documentation: "https://github.com/Dfam-consortium/RepeatModeler" - tool_dev_url: "https://github.com/Dfam-consortium/RepeatModeler" - licence: ["Open Software License v2.1"] -input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. `[ id:'sample1' ]` - - db: - type: file - description: RepeatModeler database files generated with REPEATMODELER_BUILDDATABASE - pattern: "*" -output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. `[ id:'sample1' ]` - - fasta: - type: file - description: Consensus repeat sequences - pattern: "*.fa" - - stk: - type: file - description: Seed alignments - pattern: "*.stk" - - log: - type: file - description: A summarized log of the run - pattern: "*.log" - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" -authors: - - "@GallVp" -maintainers: - - "@GallVp" diff --git a/modules/nf-core/repeatmodeler/repeatmodeler/tests/main.nf.test b/modules/nf-core/repeatmodeler/repeatmodeler/tests/main.nf.test deleted file mode 100644 index 65edd7e..0000000 --- a/modules/nf-core/repeatmodeler/repeatmodeler/tests/main.nf.test +++ /dev/null @@ -1,74 +0,0 @@ -nextflow_process { - - name "Test Process REPEATMODELER_REPEATMODELER" - script "../main.nf" - process "REPEATMODELER_REPEATMODELER" - - tag "modules" - tag "modules_nfcore" - tag "repeatmodeler" - tag "repeatmodeler/repeatmodeler" - tag "repeatmodeler/builddatabase" - - test("homo_sapiens-genome_fasta") { - - setup { - run("REPEATMODELER_BUILDDATABASE") { - script "../../../../nf-core/repeatmodeler/builddatabase" - - process { - """ - input[0] = [ - [ id:'test' ], // meta map - file(params.test_data['homo_sapiens']['genome']['genome_fasta'], checkIfExists: true) - ] - """ - } - } - } - - when { - process { - """ - input[0] = REPEATMODELER_BUILDDATABASE.out.db - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(process.out.fasta).match("fasta") }, - { assert snapshot(process.out.stk).match("stk") }, - { assert file(process.out.log[0][1]).text.contains('1 families discovered.') }, - { assert snapshot(process.out.versions).match("versions") } - ) - } - - } - - test("homo_sapiens-genome_fasta-stub") { - - options "-stub" - - when { - process { - """ - input[0] = [ - [ id:'test' ], // meta map - file(params.test_data['homo_sapiens']['genome']['genome_fasta'], checkIfExists: true) - ] - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(process.out).match() } - ) - } - - } - -} \ No newline at end of file diff --git a/modules/nf-core/repeatmodeler/repeatmodeler/tests/main.nf.test.snap b/modules/nf-core/repeatmodeler/repeatmodeler/tests/main.nf.test.snap deleted file mode 100644 index e923952..0000000 --- a/modules/nf-core/repeatmodeler/repeatmodeler/tests/main.nf.test.snap +++ /dev/null @@ -1,113 +0,0 @@ -{ - "versions": { - "content": [ - [ - "versions.yml:md5,1bb6846ecf1304c262eaef4d3de60cf9" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-01-09T15:06:55.753492" - }, - "homo_sapiens-genome_fasta-stub": { - "content": [ - { - "0": [ - [ - { - "id": "test" - }, - "test.fa:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "1": [ - [ - { - "id": "test" - }, - "test.stk:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "2": [ - [ - { - "id": "test" - }, - "test.log:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "3": [ - "versions.yml:md5,1bb6846ecf1304c262eaef4d3de60cf9" - ], - "fasta": [ - [ - { - "id": "test" - }, - "test.fa:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "log": [ - [ - { - "id": "test" - }, - "test.log:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "stk": [ - [ - { - "id": "test" - }, - "test.stk:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "versions": [ - "versions.yml:md5,1bb6846ecf1304c262eaef4d3de60cf9" - ] - } - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-04-29T13:16:41.45166" - }, - "stk": { - "content": [ - [ - [ - { - "id": "test" - }, - "test.stk:md5,acd01ad35763c11315e2297a4f051d57" - ] - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-01-09T15:06:55.740963" - }, - "fasta": { - "content": [ - [ - [ - { - "id": "test" - }, - "test.fa:md5,e25326771341204e1f8054d9529411e5" - ] - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-01-09T15:06:55.737658" - } -} \ No newline at end of file diff --git a/modules/nf-core/repeatmodeler/repeatmodeler/tests/tags.yml b/modules/nf-core/repeatmodeler/repeatmodeler/tests/tags.yml deleted file mode 100644 index df65110..0000000 --- a/modules/nf-core/repeatmodeler/repeatmodeler/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -repeatmodeler/repeatmodeler: - - "modules/nf-core/repeatmodeler/repeatmodeler/**" diff --git a/modules/nf-core/samtools/cat/environment.yml b/modules/nf-core/samtools/cat/environment.yml deleted file mode 100644 index a368198..0000000 --- a/modules/nf-core/samtools/cat/environment.yml +++ /dev/null @@ -1,8 +0,0 @@ -name: samtools_cat -channels: - - conda-forge - - bioconda - - defaults -dependencies: - - bioconda::samtools=1.20 - - bioconda::htslib=1.20 diff --git a/modules/nf-core/samtools/cat/main.nf b/modules/nf-core/samtools/cat/main.nf deleted file mode 100644 index 9447b65..0000000 --- a/modules/nf-core/samtools/cat/main.nf +++ /dev/null @@ -1,51 +0,0 @@ -process SAMTOOLS_CAT { - tag "$meta.id" - label 'process_low' - - conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/samtools:1.20--h50ea8bc_0' : - 'biocontainers/samtools:1.20--h50ea8bc_0' }" - - input: - tuple val(meta), path(input_files, stageAs: "?/*") - - output: - tuple val(meta), path("${prefix}.bam") , optional:true, emit: bam - tuple val(meta), path("${prefix}.cram"), optional:true, emit: cram - path "versions.yml" , emit: versions - - - when: - task.ext.when == null || task.ext.when - - script: - def args = task.ext.args ?: '' - prefix = task.ext.prefix ?: "${meta.id}" - def file_type = input_files instanceof List ? input_files[0].getExtension() : input_files.getExtension() - """ - samtools \\ - cat \\ - --threads ${task.cpus-1} \\ - $args \\ - -o ${prefix}.${file_type} \\ - $input_files - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') - END_VERSIONS - """ - - stub: - prefix = task.ext.suffix ? "${meta.id}${task.ext.suffix}" : "${meta.id}" - def file_type = input_files instanceof List ? input_files[0].getExtension() : input_files.getExtension() - """ - touch ${prefix}.${file_type} - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') - END_VERSIONS - """ -} diff --git a/modules/nf-core/samtools/cat/meta.yml b/modules/nf-core/samtools/cat/meta.yml deleted file mode 100644 index 3541e0c..0000000 --- a/modules/nf-core/samtools/cat/meta.yml +++ /dev/null @@ -1,51 +0,0 @@ ---- -# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/yaml-schema.json -name: samtools_cat -description: Concatenate BAM or CRAM file -keywords: - - merge - - bam - - sam - - cram -tools: - - samtools: - description: | - SAMtools is a set of utilities for interacting with and post-processing - short DNA sequence read alignments in the SAM, BAM and CRAM formats, written by Heng Li. - These files are generated as output by short read aligners like BWA. - homepage: http://www.htslib.org/ - documentation: http://www.htslib.org/doc/samtools.html - doi: 10.1093/bioinformatics/btp352 - licence: ["MIT"] -input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - input_files: - type: file - description: BAM/CRAM files - pattern: "*.{bam,cram}" -output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - bam: - type: file - description: Concatenated BAM file - pattern: "*.{bam}" - - cram: - type: file - description: Concatenated CRAM file - pattern: "*.{cram}" - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" -authors: - - "@matthdsm" -maintainers: - - "@matthdsm" diff --git a/modules/nf-core/samtools/cat/tests/main.nf.test b/modules/nf-core/samtools/cat/tests/main.nf.test deleted file mode 100644 index dad80b8..0000000 --- a/modules/nf-core/samtools/cat/tests/main.nf.test +++ /dev/null @@ -1,61 +0,0 @@ -nextflow_process { - - name "Test Process SAMTOOLS_CAT" - script "../main.nf" - process "SAMTOOLS_CAT" - - tag "modules" - tag "modules_nfcore" - tag "samtools" - tag "samtools/cat" - - test("bams") { - - when { - process { - """ - input[0] = Channel.of([ - [id: 'test', single_end: false], // meta map - [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.bam', checkIfExists: true), - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.unaligned.bam', checkIfExists: true) ] - ]) - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(file(process.out.bam[0][1]).name).match("bams_bam") }, - { assert snapshot(process.out.cram).match("bams_cram") }, - { assert snapshot(process.out.versions).match("bams_versions") } - ) - } - } - - test("bams_stub") { - - options "-stub" - - when { - process { - """ - input[0] = Channel.of([ - [id: 'test', single_end: false], // meta map - [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.bam', checkIfExists: true), - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.unaligned.bam', checkIfExists: true) ] - ]) - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(file(process.out.bam[0][1]).name).match("bams_stub_bam") }, - { assert snapshot(process.out.cram).match("bams_stub_cram") }, - { assert snapshot(process.out.versions).match("bams_stub_versions") } - ) - } - } -} diff --git a/modules/nf-core/samtools/cat/tests/main.nf.test.snap b/modules/nf-core/samtools/cat/tests/main.nf.test.snap deleted file mode 100644 index ae9344d..0000000 --- a/modules/nf-core/samtools/cat/tests/main.nf.test.snap +++ /dev/null @@ -1,70 +0,0 @@ -{ - "bams_stub_cram": { - "content": [ - [ - - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.04.3" - }, - "timestamp": "2024-02-02T16:45:42.587418" - }, - "bams_stub_versions": { - "content": [ - [ - "versions.yml:md5,9b9451947b5de303ed028cf6513be3e8" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-05-28T15:45:35.044644556" - }, - "bams_bam": { - "content": [ - "test.bam" - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.04.3" - }, - "timestamp": "2024-02-02T16:45:37.965199" - }, - "bams_cram": { - "content": [ - [ - - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.04.3" - }, - "timestamp": "2024-02-02T16:45:37.96805" - }, - "bams_stub_bam": { - "content": [ - "test.bam" - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.04.3" - }, - "timestamp": "2024-02-02T16:45:42.583881" - }, - "bams_versions": { - "content": [ - [ - "versions.yml:md5,9b9451947b5de303ed028cf6513be3e8" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-05-28T15:45:29.652817652" - } -} \ No newline at end of file diff --git a/modules/nf-core/samtools/cat/tests/tags.yml b/modules/nf-core/samtools/cat/tests/tags.yml deleted file mode 100644 index 9760557..0000000 --- a/modules/nf-core/samtools/cat/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -samtools/cat: - - "modules/nf-core/samtools/cat/**" diff --git a/modules/nf-core/sortmerna/environment.yml b/modules/nf-core/sortmerna/environment.yml deleted file mode 100644 index f40f995..0000000 --- a/modules/nf-core/sortmerna/environment.yml +++ /dev/null @@ -1,7 +0,0 @@ -name: sortmerna -channels: - - conda-forge - - bioconda - - defaults -dependencies: - - bioconda::sortmerna=4.3.6 diff --git a/modules/nf-core/sortmerna/main.nf b/modules/nf-core/sortmerna/main.nf deleted file mode 100644 index 7c17e50..0000000 --- a/modules/nf-core/sortmerna/main.nf +++ /dev/null @@ -1,110 +0,0 @@ -process SORTMERNA { - tag "$meta.id" - label 'process_high' - - conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/sortmerna:4.3.6--h9ee0642_0' : - 'biocontainers/sortmerna:4.3.6--h9ee0642_0' }" - - input: - tuple val(meta), path(reads) - tuple val(meta2), path(fastas) - tuple val(meta3), path(index) - - output: - tuple val(meta), path("*non_rRNA.fastq.gz"), emit: reads, optional: true - tuple val(meta), path("*.log") , emit: log, optional: true - tuple val(meta2), path("idx") , emit: index, optional: true - path "versions.yml" , emit: versions - - when: - task.ext.when == null || task.ext.when - - script: - def args = task.ext.args ?: '' - def prefix = task.ext.prefix ?: "${meta.id}" - - def index_only = args.contains('--index 1')? true : false - def skip_index = args.contains('--index 0')? true : false - def paired_end = reads instanceof List - def paired_cmd = '' - def reads_args = '' - def out2_cmd = '' - def mv_cmd = '' - def reads_input = '' - def refs_input = '' - - if (! index_only){ - reads_args = '--aligned rRNA_reads --fastx --other non_rRNA_reads' - reads_input = paired_end ? reads.collect{"--reads $it"}.join(' ') : "--reads $reads" - def n_fastq = paired_end ? reads.size() : 1 - if ( n_fastq == 1 ) { - mv_cmd = """ - mv non_rRNA_reads.f*q.gz ${prefix}.non_rRNA.fastq.gz - mv rRNA_reads.log ${prefix}.sortmerna.log - """ - } else { - mv_cmd = """ - mv non_rRNA_reads_fwd.f*q.gz ${prefix}_1.non_rRNA.fastq.gz - mv non_rRNA_reads_rev.f*q.gz ${prefix}_2.non_rRNA.fastq.gz - mv rRNA_reads.log ${prefix}.sortmerna.log - """ - paired_cmd = "--paired_in" - out2_cmd = "--out2" - } - } - """ - sortmerna \\ - ${'--ref '+fastas.join(' --ref ')} \\ - $refs_input \\ - $reads_input \\ - --threads $task.cpus \\ - --workdir . \\ - $reads_args \\ - $paired_cmd \\ - $out2_cmd \\ - $args - - $mv_cmd - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - sortmerna: \$(echo \$(sortmerna --version 2>&1) | sed 's/^.*SortMeRNA version //; s/ Build Date.*\$//') - END_VERSIONS - """ - - stub: - def args = task.ext.args ?: '' - def prefix = task.ext.prefix ?: "${meta.id}" - - def index_only = args.contains('--index 1')? true : false - def paired_end = reads instanceof List - def paired_cmd = '' - def out2_cmd = '' - def mv_cmd = '' - def reads_input = '' - - if (! index_only){ - reads_input = paired_end ? reads.collect{"--reads $it"}.join(' ') : "--reads $reads" - def n_fastq = paired_end ? reads.size() : 1 - if ( n_fastq == 1 ) { - mv_cmd = "touch ${prefix}.non_rRNA.fastq.gz" - } else { - mv_cmd = """ - touch ${prefix}_1.non_rRNA.fastq.gz - touch ${prefix}_2.non_rRNA.fastq.gz - """ - } - } - """ - $mv_cmd - mkdir -p idx - touch ${prefix}.sortmerna.log - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - sortmerna: \$(echo \$(sortmerna --version 2>&1) | sed 's/^.*SortMeRNA version //; s/ Build Date.*\$//') - END_VERSIONS - """ -} diff --git a/modules/nf-core/sortmerna/meta.yml b/modules/nf-core/sortmerna/meta.yml deleted file mode 100644 index c0a2a58..0000000 --- a/modules/nf-core/sortmerna/meta.yml +++ /dev/null @@ -1,77 +0,0 @@ -name: sortmerna -description: Local sequence alignment tool for filtering, mapping and clustering. -keywords: - - filtering - - mapping - - clustering - - rRNA - - ribosomal RNA -tools: - - SortMeRNA: - description: The core algorithm is based on approximate seeds and allows for sensitive analysis of NGS reads. The main application of SortMeRNA is filtering rRNA from metatranscriptomic data. SortMeRNA takes as input files of reads (fasta, fastq, fasta.gz, fastq.gz) and one or multiple rRNA database file(s), and sorts apart aligned and rejected reads into two files. Additional applications include clustering and taxonomy assignation available through QIIME v1.9.1. SortMeRNA works with Illumina, Ion Torrent and PacBio data, and can produce SAM and BLAST-like alignments. - homepage: https://hpc.nih.gov/apps/sortmeRNA.html - documentation: https://github.com/biocore/sortmerna/wiki/ - licence: ["GPL-3.0-or-later"] -input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - reads: - type: file - description: | - List of input FastQ files of size 1 and 2 for single-end and paired-end data, - respectively. - - meta2: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'test' ] - - fastas: - type: file - description: | - Path to reference file(s) - - meta3: - type: map - description: | - Groovy Map containing index information - e.g. [ id:'test' ] - - index: - type: directory - description: | - Path to index directory of a previous sortmerna run -output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ], or reference information from an - indexing-only run - - reads: - type: file - description: The filtered fastq reads - pattern: "*fastq.gz" - - log: - type: file - description: SortMeRNA log file - pattern: "*sortmerna.log" - - meta2: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'test' ] - - index: - type: directory - description: | - Path to index directory generated by sortmern - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" -authors: - - "@drpatelh" - - "@mashehu" -maintainers: - - "@drpatelh" - - "@mashehu" diff --git a/modules/nf-core/sortmerna/tests/indexing_only.config b/modules/nf-core/sortmerna/tests/indexing_only.config deleted file mode 100644 index 3e74a32..0000000 --- a/modules/nf-core/sortmerna/tests/indexing_only.config +++ /dev/null @@ -1,5 +0,0 @@ -process { - withName: 'SORTMERNA' { - ext.args = '--index 1' - } -} diff --git a/modules/nf-core/sortmerna/tests/main.nf.test b/modules/nf-core/sortmerna/tests/main.nf.test deleted file mode 100644 index 73bc119..0000000 --- a/modules/nf-core/sortmerna/tests/main.nf.test +++ /dev/null @@ -1,327 +0,0 @@ -nextflow_process { - - name "Test Process SORTMERNA" - script "../main.nf" - process "SORTMERNA" - tag "modules" - tag "modules_nfcore" - tag "sortmerna" - - test("sarscov2 indexing only") { - - config './indexing_only.config' - - when { - process { - """ - input[0] = Channel.of([[],[]]) - input[1] = [ [id:'test2'], // meta map - [ file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.fasta", checkIfExists: true) ] - ] - input[2] = Channel.of([[],[]]) - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert ! process.out.reads }, - { assert snapshot(process.out.index).match("index_index_only") }, - { assert snapshot(process.out.versions).match("versions_index_only") } - ) - } - - } - - test("sarscov2 indexing only stub") { - - options '-stub' - config './indexing_only.config' - - when { - process { - """ - input[0] = Channel.of([[],[]]) - input[1] = [ [id:'test2'], // meta map - [ file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.fasta", checkIfExists: true) ] - ] - input[2] = Channel.of([[],[]]) - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert ! process.out.reads }, - { assert snapshot(process.out.index).match("index_only_stub") }, - { assert snapshot(process.out.versions).match("versions_index_only_stub") } - ) - } - - } - - test("sarscov2 single_end") { - - when { - process { - """ - input[0] = [ [ id:'test' ], // meta map - [ file(params.modules_testdata_base_path + "genomics/sarscov2/illumina/fastq/test_1.fastq.gz", checkIfExists: true) ] - ] - input[1] = [ [id:'test2'], // meta map - [ file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.fasta", checkIfExists: true) ] - ] - input[2] = Channel.of([[],[]]) - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert process.out.reads }, - { assert file(process.out.log[0][1]).text.contains("Total reads passing E-value threshold = 100 (100.00)") }, - { - assert snapshot( - ( - [process.out.reads[0][0].toString()] + // meta - process.out.reads.collect { file(it[1]).getName() } + - process.out.log.collect { file(it[1]).getName() } - ).sort() - ).match("sarscov2 single_end_match") - }, - { assert snapshot(process.out.index).match("index_single_end") }, - { assert snapshot(process.out.versions).match("versions_single_end") } - ) - } - - } - - test("sarscov2 single_end stub") { - - options '-stub' - - when { - process { - """ - input[0] = [ [ id:'test' ], // meta map - [ file(params.modules_testdata_base_path + "genomics/sarscov2/illumina/fastq/test_1.fastq.gz", checkIfExists: true) ] - ] - input[1] = [ [id:'test2'], // meta map - [ file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.fasta", checkIfExists: true) ] - ] - input[2] = Channel.of([[],[]]) - """ - } - } - - then { - assertAll( - { assert process.success }, - { - assert snapshot( - ( - [process.out.reads[0][0].toString()] + // meta - process.out.reads.collect { file(it[1]).getName() } + - process.out.log.collect { file(it[1]).getName() } - ).sort() - ).match("sarscov2 single_end-for_stub_match") - }, - { assert snapshot(process.out.index).match("index_single_end_stub") }, - { assert snapshot(process.out.versions).match("versions_single_end_stub") } - ) - } - - } - - test("sarscov2 paired_end") { - - when { - process { - """ - input[0] = [ - [ id:'test' ], // meta map - [ - file(params.modules_testdata_base_path + "genomics/sarscov2/illumina/fastq/test_1.fastq.gz", checkIfExists: true), - file(params.modules_testdata_base_path + "genomics/sarscov2/illumina/fastq/test_2.fastq.gz", checkIfExists: true) - ] - ] - input[1] = [ [id:'test2'], // meta map - [ file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.fasta", checkIfExists: true) ] - ] - input[2] = Channel.of([[],[]]) - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert process.out.reads }, - { assert file(process.out.log[0][1]).text.contains("Total reads passing E-value threshold = 200 (100.00)") }, - { - assert snapshot( - ( - [process.out.reads[0][0].toString()] + // meta - process.out.reads.collect { it[1].collect { item -> file(item).getName() } } + - process.out.log.collect { file(it[1]).getName() } - ).sort() - ).match("sarscov2 paired_end_match") - }, - { assert snapshot(process.out.index).match("index_paired_end") }, - { assert snapshot(process.out.versions).match("versions_paired_end") } - ) - } - - } - - test("sarscov2 paired_end stub") { - - options '-stub' - - when { - process { - """ - input[0] = [ [ id:'test' ], // meta map - [ - file(params.modules_testdata_base_path + "genomics/sarscov2/illumina/fastq/test_1.fastq.gz", checkIfExists: true), - file(params.modules_testdata_base_path + "genomics/sarscov2/illumina/fastq/test_2.fastq.gz", checkIfExists: true) - ] - ] - input[1] = [ [id:'test2'], // meta map - [ file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.fasta", checkIfExists: true) ] - ] - input[2] = Channel.of([[],[]]) - """ - } - } - - then { - assertAll( - { assert process.success }, - { - assert snapshot( - ( - [process.out.reads[0][0].toString()] + // meta - process.out.reads.collect { it[1].collect { item -> file(item).getName() } } + - process.out.log.collect { file(it[1]).getName() } - ).sort() - ).match("sarscov2 paired_end-for_stub_match") - }, - { assert snapshot(process.out.index).match("index_paired_end_stub") }, - { assert snapshot(process.out.versions).match("versions_paired_end_stub") } - ) - } - - } - - test("sarscov2 single_end premade_index") { - - config './premade_index.config' - - setup { - - run("SORTMERNA", alias: "SORTMERNA_INDEX") { - script "../main.nf" - process { - """ - input[0] = Channel.of([[],[]]) - input[1] = [ [id:'test2'], // meta map - [ file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.fasta", checkIfExists: true) ] - ] - input[2] = Channel.of([[],[]]) - """ - } - } - } - - when { - process { - """ - input[0] = [ [ id:'test' ], // meta map - [ file(params.modules_testdata_base_path + "genomics/sarscov2/illumina/fastq/test_1.fastq.gz", checkIfExists: true) ] - ] - input[1] = [ [id:'test2'], // meta map - [ file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.fasta", checkIfExists: true) ] - ] - input[2] = SORTMERNA_INDEX.out.index - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert process.out.reads }, - { assert file(process.out.log[0][1]).text.contains("Total reads passing E-value threshold = 100 (100.00)") }, - { - assert snapshot( - ( - [process.out.reads[0][0].toString()] + // meta - process.out.reads.collect { file(it[1]).getName() } + - process.out.log.collect { file(it[1]).getName() } - ).sort() - ).match("sarscov2 single_end_premade_index_match") - }, - { assert snapshot(process.out.index).match("index_single_end_premade_index") }, - { assert snapshot(process.out.versions).match("versions_single_end_premade_index") } - ) - } - } - - test("sarscov2 single_end premade_index stub") { - - config './premade_index.config' - options '-stub' - - setup { - - run("SORTMERNA", alias: "SORTMERNA_INDEX") { - script "../main.nf" - process { - """ - input[0] = Channel.of([[],[]]) - input[1] = [ [id:'test2'], // meta map - [ file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.fasta", checkIfExists: true) ] - ] - input[2] = Channel.of([[],[]]) - """ - } - } - } - - when { - process { - """ - input[0] = [ [ id:'test' ], // meta map - [ file(params.modules_testdata_base_path + "genomics/sarscov2/illumina/fastq/test_1.fastq.gz", checkIfExists: true) ] - ] - input[1] = [ [id:'test2'], // meta map - [ file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.fasta", checkIfExists: true) ] - ] - input[2] = SORTMERNA_INDEX.out.index - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert process.out.reads }, - { - assert snapshot( - ( - [process.out.reads[0][0].toString()] + // meta - process.out.reads.collect { file(it[1]).getName() } + - process.out.log.collect { file(it[1]).getName() } - ).sort() - ).match("sarscov2 single_end_premade_index_match_stub") - }, - { assert snapshot(process.out.index).match("index_single_end_premade_index_stub") }, - { assert snapshot(process.out.versions).match("versions_single_end_premade_index_stub") } - ) - } - } -} diff --git a/modules/nf-core/sortmerna/tests/main.nf.test.snap b/modules/nf-core/sortmerna/tests/main.nf.test.snap deleted file mode 100644 index 86e8473..0000000 --- a/modules/nf-core/sortmerna/tests/main.nf.test.snap +++ /dev/null @@ -1,352 +0,0 @@ -{ - "versions_paired_end_stub": { - "content": [ - [ - "versions.yml:md5,7df9d50209f351e1f75e05a1fad6ba4b" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-02-07T12:27:11.223149" - }, - "index_paired_end_stub": { - "content": [ - [ - [ - { - "id": "test2" - }, - [ - - ] - ] - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-02-26T14:24:25.384097178" - }, - "versions_paired_end": { - "content": [ - [ - "versions.yml:md5,7df9d50209f351e1f75e05a1fad6ba4b" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-02-07T12:27:04.517155" - }, - "versions_single_end_stub": { - "content": [ - [ - "versions.yml:md5,7df9d50209f351e1f75e05a1fad6ba4b" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-02-01T12:10:35.228450189" - }, - "sarscov2 single_end_match": { - "content": [ - [ - "test.non_rRNA.fastq.gz", - "test.sortmerna.log", - "{id=test}" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-02-07T12:28:23.20327" - }, - "index_only_stub": { - "content": [ - [ - [ - { - "id": "test2" - }, - [ - - ] - ] - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-02-26T15:00:47.128504164" - }, - "index_single_end_premade_index": { - "content": [ - [ - [ - { - "id": "test2" - }, - [ - "2415186086593376314.bursttrie_0.dat:md5,74f7f020e8d46e24a8a2e9c5fbcd564a", - "2415186086593376314.kmer_0.dat:md5,4a0bcb71b120f6a6949b7969292ef2e7", - "2415186086593376314.pos_0.dat:md5,bc2875e4cc4017707306565e396839ef", - "2415186086593376314.stats:md5,67c9d4c768f28a450fc82a2b5d43db5c" - ] - ] - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-02-26T15:01:53.832643452" - }, - "versions_single_end_premade_index": { - "content": [ - [ - "versions.yml:md5,7df9d50209f351e1f75e05a1fad6ba4b" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-02-26T15:01:53.902154982" - }, - "sarscov2 paired_end-for_stub_match": { - "content": [ - [ - "{id=test}", - [ - "test_1.non_rRNA.fastq.gz", - "test_2.non_rRNA.fastq.gz" - ], - "test.sortmerna.log" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-02-07T12:28:56.063579" - }, - "index_paired_end": { - "content": [ - [ - [ - { - "id": "test2" - }, - [ - "2415186086593376314.bursttrie_0.dat:md5,74f7f020e8d46e24a8a2e9c5fbcd564a", - "2415186086593376314.kmer_0.dat:md5,4a0bcb71b120f6a6949b7969292ef2e7", - "2415186086593376314.pos_0.dat:md5,bc2875e4cc4017707306565e396839ef", - "2415186086593376314.stats:md5,67c9d4c768f28a450fc82a2b5d43db5c" - ] - ] - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-02-26T14:24:14.272659781" - }, - "sarscov2 single_end_premade_index_match_stub": { - "content": [ - [ - "test.non_rRNA.fastq.gz", - "test.sortmerna.log", - "{id=test}" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-02-26T15:05:01.913287272" - }, - "sarscov2 single_end-for_stub_match": { - "content": [ - [ - "test.non_rRNA.fastq.gz", - "test.sortmerna.log", - "{id=test}" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-02-07T12:28:29.197913" - }, - "sarscov2 paired_end_match": { - "content": [ - [ - "{id=test}", - [ - "test_1.non_rRNA.fastq.gz", - "test_2.non_rRNA.fastq.gz" - ], - "test.sortmerna.log" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-02-07T12:28:49.914992" - }, - "versions_single_end": { - "content": [ - [ - "versions.yml:md5,7df9d50209f351e1f75e05a1fad6ba4b" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-02-26T14:36:27.14244294" - }, - "versions_index_only": { - "content": [ - [ - "versions.yml:md5,7df9d50209f351e1f75e05a1fad6ba4b" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-02-26T15:00:35.609161481" - }, - "versions_single_end_premade_index_stub": { - "content": [ - [ - "versions.yml:md5,7df9d50209f351e1f75e05a1fad6ba4b" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-02-26T15:05:02.059858431" - }, - "index_single_end_stub": { - "content": [ - [ - [ - { - "id": "test2" - }, - [ - - ] - ] - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-02-26T14:23:58.068772508" - }, - "versions_index_only_stub": { - "content": [ - [ - "versions.yml:md5,7df9d50209f351e1f75e05a1fad6ba4b" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-02-26T15:00:47.169402699" - }, - "index_single_end_premade_index_stub": { - "content": [ - [ - [ - { - "id": "test2" - }, - [ - - ] - ] - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-02-26T15:05:01.953316205" - }, - "index_single_end": { - "content": [ - [ - [ - { - "id": "test2" - }, - [ - "2415186086593376314.bursttrie_0.dat:md5,74f7f020e8d46e24a8a2e9c5fbcd564a", - "2415186086593376314.kmer_0.dat:md5,4a0bcb71b120f6a6949b7969292ef2e7", - "2415186086593376314.pos_0.dat:md5,bc2875e4cc4017707306565e396839ef", - "2415186086593376314.stats:md5,67c9d4c768f28a450fc82a2b5d43db5c" - ] - ] - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-02-26T14:36:26.88061978" - }, - "index_index_only": { - "content": [ - [ - [ - { - "id": "test2" - }, - [ - "2415186086593376314.bursttrie_0.dat:md5,74f7f020e8d46e24a8a2e9c5fbcd564a", - "2415186086593376314.kmer_0.dat:md5,4a0bcb71b120f6a6949b7969292ef2e7", - "2415186086593376314.pos_0.dat:md5,bc2875e4cc4017707306565e396839ef", - "2415186086593376314.stats:md5,67c9d4c768f28a450fc82a2b5d43db5c" - ] - ] - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-02-26T15:00:35.34089252" - }, - "sarscov2 single_end_premade_index_match": { - "content": [ - [ - "test.non_rRNA.fastq.gz", - "test.sortmerna.log", - "{id=test}" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-02-26T15:01:53.797737296" - } -} \ No newline at end of file diff --git a/modules/nf-core/sortmerna/tests/premade_index.config b/modules/nf-core/sortmerna/tests/premade_index.config deleted file mode 100644 index ab86d2e..0000000 --- a/modules/nf-core/sortmerna/tests/premade_index.config +++ /dev/null @@ -1,8 +0,0 @@ -process { - withName: 'SORTMERNA_INDEX' { - ext.args = '--index 1' - } - withName: 'SORTMERNA' { - ext.args = '--index 0' - } -} diff --git a/modules/nf-core/sortmerna/tests/tags.yml b/modules/nf-core/sortmerna/tests/tags.yml deleted file mode 100644 index e088480..0000000 --- a/modules/nf-core/sortmerna/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -sortmerna: - - modules/nf-core/sortmerna/** diff --git a/modules/nf-core/star/align/environment.yml b/modules/nf-core/star/align/environment.yml deleted file mode 100644 index 8bd58cf..0000000 --- a/modules/nf-core/star/align/environment.yml +++ /dev/null @@ -1,10 +0,0 @@ -name: star_align -channels: - - conda-forge - - bioconda - - defaults -dependencies: - - bioconda::star=2.7.10a - - bioconda::samtools=1.18 - - bioconda::htslib=1.18 - - conda-forge::gawk=5.1.0 diff --git a/modules/nf-core/star/align/main.nf b/modules/nf-core/star/align/main.nf deleted file mode 100644 index ae67e00..0000000 --- a/modules/nf-core/star/align/main.nf +++ /dev/null @@ -1,109 +0,0 @@ -process STAR_ALIGN { - tag "$meta.id" - label 'process_high' - - conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/mulled-v2-1fa26d1ce03c295fe2fdcf85831a92fbcbd7e8c2:ded3841da0194af2701c780e9b3d653a85d27489-0' : - 'biocontainers/mulled-v2-1fa26d1ce03c295fe2fdcf85831a92fbcbd7e8c2:ded3841da0194af2701c780e9b3d653a85d27489-0' }" - - input: - tuple val(meta), path(reads, stageAs: "input*/*") - tuple val(meta2), path(index) - tuple val(meta3), path(gtf) - val star_ignore_sjdbgtf - val seq_platform - val seq_center - - output: - tuple val(meta), path('*Log.final.out') , emit: log_final - tuple val(meta), path('*Log.out') , emit: log_out - tuple val(meta), path('*Log.progress.out'), emit: log_progress - path "versions.yml" , emit: versions - - tuple val(meta), path('*d.out.bam') , optional:true, emit: bam - tuple val(meta), path('*sortedByCoord.out.bam') , optional:true, emit: bam_sorted - tuple val(meta), path('*toTranscriptome.out.bam'), optional:true, emit: bam_transcript - tuple val(meta), path('*Aligned.unsort.out.bam') , optional:true, emit: bam_unsorted - tuple val(meta), path('*fastq.gz') , optional:true, emit: fastq - tuple val(meta), path('*.tab') , optional:true, emit: tab - tuple val(meta), path('*.SJ.out.tab') , optional:true, emit: spl_junc_tab - tuple val(meta), path('*.ReadsPerGene.out.tab') , optional:true, emit: read_per_gene_tab - tuple val(meta), path('*.out.junction') , optional:true, emit: junction - tuple val(meta), path('*.out.sam') , optional:true, emit: sam - tuple val(meta), path('*.wig') , optional:true, emit: wig - tuple val(meta), path('*.bg') , optional:true, emit: bedgraph - - when: - task.ext.when == null || task.ext.when - - script: - def args = task.ext.args ?: '' - def prefix = task.ext.prefix ?: "${meta.id}" - def reads1 = [], reads2 = [] - meta.single_end ? [reads].flatten().each{reads1 << it} : reads.eachWithIndex{ v, ix -> ( ix & 1 ? reads2 : reads1) << v } - def ignore_gtf = star_ignore_sjdbgtf ? '' : "--sjdbGTFfile $gtf" - def seq_platform = seq_platform ? "'PL:$seq_platform'" : "" - def seq_center = seq_center ? "'CN:$seq_center'" : "" - def attrRG = args.contains("--outSAMattrRGline") ? "" : "--outSAMattrRGline 'ID:$prefix' $seq_center 'SM:$prefix' $seq_platform" - def out_sam_type = (args.contains('--outSAMtype')) ? '' : '--outSAMtype BAM Unsorted' - def mv_unsorted_bam = (args.contains('--outSAMtype BAM Unsorted SortedByCoordinate')) ? "mv ${prefix}.Aligned.out.bam ${prefix}.Aligned.unsort.out.bam" : '' - """ - STAR \\ - --genomeDir $index \\ - --readFilesIn ${reads1.join(",")} ${reads2.join(",")} \\ - --runThreadN $task.cpus \\ - --outFileNamePrefix $prefix. \\ - $out_sam_type \\ - $ignore_gtf \\ - $attrRG \\ - $args - - $mv_unsorted_bam - - if [ -f ${prefix}.Unmapped.out.mate1 ]; then - mv ${prefix}.Unmapped.out.mate1 ${prefix}.unmapped_1.fastq - gzip ${prefix}.unmapped_1.fastq - fi - if [ -f ${prefix}.Unmapped.out.mate2 ]; then - mv ${prefix}.Unmapped.out.mate2 ${prefix}.unmapped_2.fastq - gzip ${prefix}.unmapped_2.fastq - fi - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - star: \$(STAR --version | sed -e "s/STAR_//g") - samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') - gawk: \$(echo \$(gawk --version 2>&1) | sed 's/^.*GNU Awk //; s/, .*\$//') - END_VERSIONS - """ - - stub: - def prefix = task.ext.prefix ?: "${meta.id}" - """ - echo "" | gzip > ${prefix}.unmapped_1.fastq.gz - echo "" | gzip > ${prefix}.unmapped_2.fastq.gz - touch ${prefix}Xd.out.bam - touch ${prefix}.Log.final.out - touch ${prefix}.Log.out - touch ${prefix}.Log.progress.out - touch ${prefix}.sortedByCoord.out.bam - touch ${prefix}.toTranscriptome.out.bam - touch ${prefix}.Aligned.unsort.out.bam - touch ${prefix}.Aligned.sortedByCoord.out.bam - touch ${prefix}.tab - touch ${prefix}.SJ.out.tab - touch ${prefix}.ReadsPerGene.out.tab - touch ${prefix}.Chimeric.out.junction - touch ${prefix}.out.sam - touch ${prefix}.Signal.UniqueMultiple.str1.out.wig - touch ${prefix}.Signal.UniqueMultiple.str1.out.bg - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - star: \$(STAR --version | sed -e "s/STAR_//g") - samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') - gawk: \$(echo \$(gawk --version 2>&1) | sed 's/^.*GNU Awk //; s/, .*\$//') - END_VERSIONS - """ -} diff --git a/modules/nf-core/star/align/meta.yml b/modules/nf-core/star/align/meta.yml deleted file mode 100644 index e80dbb7..0000000 --- a/modules/nf-core/star/align/meta.yml +++ /dev/null @@ -1,115 +0,0 @@ -name: star_align -description: Align reads to a reference genome using STAR -keywords: - - align - - fasta - - genome - - reference -tools: - - star: - description: | - STAR is a software package for mapping DNA sequences against - a large reference genome, such as the human genome. - homepage: https://github.com/alexdobin/STAR - manual: https://github.com/alexdobin/STAR/blob/master/doc/STARmanual.pdf - doi: 10.1093/bioinformatics/bts635 - licence: ["MIT"] -input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - reads: - type: file - description: | - List of input FastQ files of size 1 and 2 for single-end and paired-end data, - respectively. - - meta2: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'test' ] - - index: - type: directory - description: STAR genome index - pattern: "star" - - meta3: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'test' ] - - gtf: - type: file - description: Annotation GTF file - pattern: "*.{gtf}" - - star_ignore_sjdbgtf: - type: boolean - description: Ignore annotation GTF file - - seq_platform: - type: string - description: Sequencing platform - - seq_center: - type: string - description: Sequencing center -output: - - bam: - type: file - description: Output BAM file containing read alignments - pattern: "*.{bam}" - - log_final: - type: file - description: STAR final log file - pattern: "*Log.final.out" - - log_out: - type: file - description: STAR lot out file - pattern: "*Log.out" - - log_progress: - type: file - description: STAR log progress file - pattern: "*Log.progress.out" - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - - bam_sorted: - type: file - description: Sorted BAM file of read alignments (optional) - pattern: "*sortedByCoord.out.bam" - - bam_transcript: - type: file - description: Output BAM file of transcriptome alignment (optional) - pattern: "*toTranscriptome.out.bam" - - bam_unsorted: - type: file - description: Unsorted BAM file of read alignments (optional) - pattern: "*Aligned.unsort.out.bam" - - fastq: - type: file - description: Unmapped FastQ files (optional) - pattern: "*fastq.gz" - - tab: - type: file - description: STAR output tab file(s) (optional) - pattern: "*.tab" - - junction: - type: file - description: STAR chimeric junction output file (optional) - pattern: "*.out.junction" - - wig: - type: file - description: STAR output wiggle format file(s) (optional) - pattern: "*.wig" - - bedgraph: - type: file - description: STAR output bedGraph format file(s) (optional) - pattern: "*.bg" -authors: - - "@kevinmenden" - - "@drpatelh" - - "@praveenraj2018" -maintainers: - - "@kevinmenden" - - "@drpatelh" - - "@praveenraj2018" diff --git a/modules/nf-core/star/align/tests/main.nf.test b/modules/nf-core/star/align/tests/main.nf.test deleted file mode 100644 index 2d9f72d..0000000 --- a/modules/nf-core/star/align/tests/main.nf.test +++ /dev/null @@ -1,609 +0,0 @@ -nextflow_process { - - name "Test Process STAR_ALIGN" - script "../main.nf" - process "STAR_ALIGN" - tag "modules" - tag "modules_nfcore" - tag "star" - tag "star/align" - tag "star/genomegenerate" - - test("homo_sapiens - single_end") { - config "./nextflow.config" - - setup { - run("STAR_GENOMEGENERATE") { - script "../../../star/genomegenerate/main.nf" - process { - """ - input[0] = Channel.of([ - [ id:'test_fasta' ], - [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ] - ]) - input[1] = Channel.of([ - [ id:'test_gtf' ], - [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] - ]) - """ - } - } - } - - when { - process { - """ - input[0] = Channel.of([ - [ id:'test', single_end:true ], // meta map - [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/fastq/test_rnaseq_1.fastq.gz', checkIfExists: true) ] - ]) - input[1] = STAR_GENOMEGENERATE.out.index - input[2] = Channel.of([ - [ id:'test_gtf' ], - [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] - ]) - input[3] = false - input[4] = 'illumina' - input[5] = false - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot( - file(process.out.log_final[0][1]).name, - file(process.out.log_out[0][1]).name, - file(process.out.log_progress[0][1]).name, - process.out.bam, - process.out.bam_sorted, - process.out.bam_transcript, - process.out.bam_unsorted, - process.out.bedgraph, - process.out.fastq, - process.out.junction, - process.out.read_per_gene_tab, - process.out.sam, - process.out.spl_junc_tab, - process.out.tab, - process.out.wig, - process.out.versions - ).match() } - ) - } - } - - test("homo_sapiens - paired_end") { - config "./nextflow.config" - - setup { - run("STAR_GENOMEGENERATE") { - script "../../../star/genomegenerate/main.nf" - process { - """ - input[0] = Channel.of([ - [ id:'test_fasta' ], - [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ] - ]) - input[1] = Channel.of([ - [ id:'test_gtf' ], - [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] - ]) - """ - } - } - } - - when { - process { - """ - input[0] = Channel.of([ - [ id:'test', single_end:false ], // meta map - [ - file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/fastq/test_rnaseq_1.fastq.gz', checkIfExists: true), - file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/fastq/test_rnaseq_2.fastq.gz', checkIfExists: true) - ] - ]) - input[1] = STAR_GENOMEGENERATE.out.index - input[2] = Channel.of([ - [ id:'test_gtf' ], - [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] - ]) - input[3] = false - input[4] = 'illumina' - input[5] = false - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot( - file(process.out.log_final[0][1]).name, - file(process.out.log_out[0][1]).name, - file(process.out.log_progress[0][1]).name, - process.out.bam, - process.out.bam_sorted, - process.out.bam_transcript, - process.out.bam_unsorted, - process.out.bedgraph, - process.out.fastq, - process.out.junction, - process.out.read_per_gene_tab, - process.out.sam, - process.out.spl_junc_tab, - process.out.tab, - process.out.wig, - process.out.versions - ).match() } - ) - } - } - - test("homo_sapiens - paired_end - arriba") { - config "./nextflow.arriba.config" - - setup { - run("STAR_GENOMEGENERATE") { - script "../../../star/genomegenerate/main.nf" - process { - """ - input[0] = Channel.of([ - [ id:'test_fasta' ], - [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ] - ]) - input[1] = Channel.of([ - [ id:'test_gtf' ], - [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] - ]) - """ - } - } - } - - when { - process { - """ - input[0] = Channel.of([ - [ id:'test', single_end:false ], // meta map - [ - file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/fastq/test_rnaseq_1.fastq.gz', checkIfExists: true), - file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/fastq/test_rnaseq_2.fastq.gz', checkIfExists: true) - ] - ]) - input[1] = STAR_GENOMEGENERATE.out.index - input[2] = Channel.of([ - [ id:'test_gtf' ], - [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] - ]) - input[3] = false - input[4] = 'illumina' - input[5] = false - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot( - file(process.out.log_final[0][1]).name, - file(process.out.log_out[0][1]).name, - file(process.out.log_progress[0][1]).name, - process.out.bam, - process.out.bam_sorted, - process.out.bam_transcript, - process.out.bam_unsorted, - process.out.bedgraph, - process.out.fastq, - process.out.junction, - process.out.read_per_gene_tab, - process.out.sam, - process.out.spl_junc_tab, - process.out.tab, - process.out.wig, - process.out.versions - ).match() } - ) - } - } - - test("homo_sapiens - paired_end - starfusion") { - config "./nextflow.starfusion.config" - - setup { - run("STAR_GENOMEGENERATE") { - script "../../../star/genomegenerate/main.nf" - process { - """ - input[0] = Channel.of([ - [ id:'test_fasta' ], - [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ] - ]) - input[1] = Channel.of([ - [ id:'test_gtf' ], - [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] - ]) - """ - } - } - } - - when { - process { - """ - input[0] = Channel.of([ - [ id:'test', single_end:false ], // meta map - [ - file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/fastq/test_rnaseq_1.fastq.gz', checkIfExists: true), - file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/fastq/test_rnaseq_2.fastq.gz', checkIfExists: true) - ] - ]) - input[1] = STAR_GENOMEGENERATE.out.index - input[2] = Channel.of([ - [ id:'test_gtf' ], - [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] - ]) - input[3] = false - input[4] = 'illumina' - input[5] = false - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot( - file(process.out.log_final[0][1]).name, - file(process.out.log_out[0][1]).name, - file(process.out.log_progress[0][1]).name, - process.out.bam, - process.out.bam_sorted, - process.out.bam_transcript, - process.out.bam_unsorted, - process.out.bedgraph, - process.out.fastq, - process.out.junction, - process.out.read_per_gene_tab, - process.out.sam, - process.out.spl_junc_tab, - process.out.tab, - process.out.wig, - process.out.versions - ).match() } - ) - } - } - - test("homo_sapiens - paired_end - multiple") { - config "./nextflow.config" - - setup { - run("STAR_GENOMEGENERATE") { - script "../../../star/genomegenerate/main.nf" - process { - """ - input[0] = Channel.of([ - [ id:'test_fasta' ], - [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ] - ]) - input[1] = Channel.of([ - [ id:'test_gtf' ], - [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] - ]) - """ - } - } - } - - when { - process { - """ - input[0] = Channel.of([ - [ id:'test', single_end:false ], // meta map - [ - file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/fastq/test_rnaseq_1.fastq.gz', checkIfExists: true), - file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/fastq/test_rnaseq_2.fastq.gz', checkIfExists: true), - file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/fastq/test_rnaseq_1.fastq.gz', checkIfExists: true), - file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/fastq/test_rnaseq_2.fastq.gz', checkIfExists: true) - ] - ]) - input[1] = STAR_GENOMEGENERATE.out.index - input[2] = Channel.of([ - [ id:'test_gtf' ], - [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] - ]) - input[3] = false - input[4] = 'illumina' - input[5] = false - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot( - file(process.out.log_final[0][1]).name, - file(process.out.log_out[0][1]).name, - file(process.out.log_progress[0][1]).name, - process.out.bam, - process.out.bam_sorted, - process.out.bam_transcript, - process.out.bam_unsorted, - process.out.bedgraph, - process.out.fastq, - process.out.junction, - process.out.read_per_gene_tab, - process.out.sam, - process.out.spl_junc_tab, - process.out.tab, - process.out.wig, - process.out.versions - ).match() } - ) - } - } - - test("homo_sapiens - single_end - stub") { - options "-stub" - config "./nextflow.config" - - setup { - run("STAR_GENOMEGENERATE") { - script "../../../star/genomegenerate/main.nf" - process { - """ - input[0] = Channel.of([ - [ id:'test_fasta' ], - [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ] - ]) - input[1] = Channel.of([ - [ id:'test_gtf' ], - [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] - ]) - """ - } - } - } - - when { - process { - """ - input[0] = Channel.of([ - [ id:'test', single_end:true ], // meta map - [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/fastq/test_rnaseq_1.fastq.gz', checkIfExists: true) ] - ]) - input[1] = STAR_GENOMEGENERATE.out.index - input[2] = Channel.of([ - [ id:'test_gtf' ], - [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] - ]) - input[3] = false - input[4] = 'illumina' - input[5] = false - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(process.out).match() } - ) - } - } - - test("homo_sapiens - paired_end - stub") { - options "-stub" - config "./nextflow.config" - - setup { - run("STAR_GENOMEGENERATE") { - script "../../../star/genomegenerate/main.nf" - process { - """ - input[0] = Channel.of([ - [ id:'test_fasta' ], - [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ] - ]) - input[1] = Channel.of([ - [ id:'test_gtf' ], - [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] - ]) - """ - } - } - } - - when { - process { - """ - input[0] = Channel.of([ - [ id:'test', single_end:false ], // meta map - [ - file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/fastq/test_rnaseq_1.fastq.gz', checkIfExists: true), - file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/fastq/test_rnaseq_2.fastq.gz', checkIfExists: true) - ] - ]) - input[1] = STAR_GENOMEGENERATE.out.index - input[2] = Channel.of([ - [ id:'test_gtf' ], - [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] - ]) - input[3] = false - input[4] = 'illumina' - input[5] = false - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(process.out).match() } - ) - } - } - - test("homo_sapiens - paired_end - arriba - stub") { - options "-stub" - config "./nextflow.arriba.config" - - setup { - run("STAR_GENOMEGENERATE") { - script "../../../star/genomegenerate/main.nf" - process { - """ - input[0] = Channel.of([ - [ id:'test_fasta' ], - [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ] - ]) - input[1] = Channel.of([ - [ id:'test_gtf' ], - [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] - ]) - """ - } - } - } - - when { - process { - """ - input[0] = Channel.of([ - [ id:'test', single_end:false ], // meta map - [ - file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/fastq/test_rnaseq_1.fastq.gz', checkIfExists: true), - file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/fastq/test_rnaseq_2.fastq.gz', checkIfExists: true) - ] - ]) - input[1] = STAR_GENOMEGENERATE.out.index - input[2] = Channel.of([ - [ id:'test_gtf' ], - [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] - ]) - input[3] = false - input[4] = 'illumina' - input[5] = false - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(process.out).match() } - ) - } - } - - test("homo_sapiens - paired_end - starfusion - stub") { - options "-stub" - config "./nextflow.starfusion.config" - - setup { - run("STAR_GENOMEGENERATE") { - script "../../../star/genomegenerate/main.nf" - process { - """ - input[0] = Channel.of([ - [ id:'test_fasta' ], - [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ] - ]) - input[1] = Channel.of([ - [ id:'test_gtf' ], - [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] - ]) - """ - } - } - } - - when { - process { - """ - input[0] = Channel.of([ - [ id:'test', single_end:false ], // meta map - [ - file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/fastq/test_rnaseq_1.fastq.gz', checkIfExists: true), - file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/fastq/test_rnaseq_2.fastq.gz', checkIfExists: true) - ] - ]) - input[1] = STAR_GENOMEGENERATE.out.index - input[2] = Channel.of([ - [ id:'test_gtf' ], - [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] - ]) - input[3] = false - input[4] = 'illumina' - input[5] = false - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(process.out).match() } - ) - } - } - - test("homo_sapiens - paired_end - multiple - stub") { - options "-stub" - config "./nextflow.config" - - setup { - run("STAR_GENOMEGENERATE") { - script "../../../star/genomegenerate/main.nf" - process { - """ - input[0] = Channel.of([ - [ id:'test_fasta' ], - [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ] - ]) - input[1] = Channel.of([ - [ id:'test_gtf' ], - [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] - ]) - """ - } - } - } - - when { - process { - """ - input[0] = Channel.of([ - [ id:'test', single_end:false ], // meta map - [ - file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/fastq/test_rnaseq_1.fastq.gz', checkIfExists: true), - file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/fastq/test_rnaseq_2.fastq.gz', checkIfExists: true), - file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/fastq/test_rnaseq_1.fastq.gz', checkIfExists: true), - file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/fastq/test_rnaseq_2.fastq.gz', checkIfExists: true) - ] - ]) - input[1] = STAR_GENOMEGENERATE.out.index - input[2] = Channel.of([ - [ id:'test_gtf' ], - [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] - ]) - input[3] = false - input[4] = 'illumina' - input[5] = false - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(process.out).match() } - ) - } - } -} \ No newline at end of file diff --git a/modules/nf-core/star/align/tests/main.nf.test.snap b/modules/nf-core/star/align/tests/main.nf.test.snap deleted file mode 100644 index c814eb5..0000000 --- a/modules/nf-core/star/align/tests/main.nf.test.snap +++ /dev/null @@ -1,1973 +0,0 @@ -{ - "homo_sapiens - single_end - stub": { - "content": [ - { - "0": [ - [ - { - "id": "test", - "single_end": true - }, - "test.Log.final.out:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "1": [ - [ - { - "id": "test", - "single_end": true - }, - "test.Log.out:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "10": [ - [ - { - "id": "test", - "single_end": true - }, - "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "11": [ - [ - { - "id": "test", - "single_end": true - }, - "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "12": [ - [ - { - "id": "test", - "single_end": true - }, - "test.Chimeric.out.junction:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "13": [ - [ - { - "id": "test", - "single_end": true - }, - "test.out.sam:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "14": [ - [ - { - "id": "test", - "single_end": true - }, - "test.Signal.UniqueMultiple.str1.out.wig:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "15": [ - [ - { - "id": "test", - "single_end": true - }, - "test.Signal.UniqueMultiple.str1.out.bg:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "2": [ - [ - { - "id": "test", - "single_end": true - }, - "test.Log.progress.out:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "3": [ - "versions.yml:md5,2e6b6d8809f5a17f38f4d27c45dcb22f" - ], - "4": [ - [ - { - "id": "test", - "single_end": true - }, - [ - "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", - "testXd.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ] - ], - "5": [ - [ - { - "id": "test", - "single_end": true - }, - [ - "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ] - ], - "6": [ - [ - { - "id": "test", - "single_end": true - }, - "test.toTranscriptome.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "7": [ - [ - { - "id": "test", - "single_end": true - }, - "test.Aligned.unsort.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "8": [ - [ - { - "id": "test", - "single_end": true - }, - [ - "test.unmapped_1.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", - "test.unmapped_2.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" - ] - ] - ], - "9": [ - [ - { - "id": "test", - "single_end": true - }, - [ - "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.tab:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ] - ], - "bam": [ - [ - { - "id": "test", - "single_end": true - }, - [ - "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", - "testXd.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ] - ], - "bam_sorted": [ - [ - { - "id": "test", - "single_end": true - }, - [ - "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ] - ], - "bam_transcript": [ - [ - { - "id": "test", - "single_end": true - }, - "test.toTranscriptome.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "bam_unsorted": [ - [ - { - "id": "test", - "single_end": true - }, - "test.Aligned.unsort.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "bedgraph": [ - [ - { - "id": "test", - "single_end": true - }, - "test.Signal.UniqueMultiple.str1.out.bg:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "fastq": [ - [ - { - "id": "test", - "single_end": true - }, - [ - "test.unmapped_1.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", - "test.unmapped_2.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" - ] - ] - ], - "junction": [ - [ - { - "id": "test", - "single_end": true - }, - "test.Chimeric.out.junction:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "log_final": [ - [ - { - "id": "test", - "single_end": true - }, - "test.Log.final.out:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "log_out": [ - [ - { - "id": "test", - "single_end": true - }, - "test.Log.out:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "log_progress": [ - [ - { - "id": "test", - "single_end": true - }, - "test.Log.progress.out:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "read_per_gene_tab": [ - [ - { - "id": "test", - "single_end": true - }, - "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "sam": [ - [ - { - "id": "test", - "single_end": true - }, - "test.out.sam:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "spl_junc_tab": [ - [ - { - "id": "test", - "single_end": true - }, - "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "tab": [ - [ - { - "id": "test", - "single_end": true - }, - [ - "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.tab:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ] - ], - "versions": [ - "versions.yml:md5,2e6b6d8809f5a17f38f4d27c45dcb22f" - ], - "wig": [ - [ - { - "id": "test", - "single_end": true - }, - "test.Signal.UniqueMultiple.str1.out.wig:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ] - } - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" - }, - "timestamp": "2024-07-22T15:16:04.712114" - }, - "homo_sapiens - paired_end - arriba - stub": { - "content": [ - { - "0": [ - [ - { - "id": "test", - "single_end": false - }, - "test.Log.final.out:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "1": [ - [ - { - "id": "test", - "single_end": false - }, - "test.Log.out:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "10": [ - [ - { - "id": "test", - "single_end": false - }, - "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "11": [ - [ - { - "id": "test", - "single_end": false - }, - "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "12": [ - [ - { - "id": "test", - "single_end": false - }, - "test.Chimeric.out.junction:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "13": [ - [ - { - "id": "test", - "single_end": false - }, - "test.out.sam:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "14": [ - [ - { - "id": "test", - "single_end": false - }, - "test.Signal.UniqueMultiple.str1.out.wig:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "15": [ - [ - { - "id": "test", - "single_end": false - }, - "test.Signal.UniqueMultiple.str1.out.bg:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "2": [ - [ - { - "id": "test", - "single_end": false - }, - "test.Log.progress.out:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "3": [ - "versions.yml:md5,2e6b6d8809f5a17f38f4d27c45dcb22f" - ], - "4": [ - [ - { - "id": "test", - "single_end": false - }, - [ - "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", - "testXd.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ] - ], - "5": [ - [ - { - "id": "test", - "single_end": false - }, - [ - "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ] - ], - "6": [ - [ - { - "id": "test", - "single_end": false - }, - "test.toTranscriptome.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "7": [ - [ - { - "id": "test", - "single_end": false - }, - "test.Aligned.unsort.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "8": [ - [ - { - "id": "test", - "single_end": false - }, - [ - "test.unmapped_1.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", - "test.unmapped_2.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" - ] - ] - ], - "9": [ - [ - { - "id": "test", - "single_end": false - }, - [ - "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.tab:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ] - ], - "bam": [ - [ - { - "id": "test", - "single_end": false - }, - [ - "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", - "testXd.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ] - ], - "bam_sorted": [ - [ - { - "id": "test", - "single_end": false - }, - [ - "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ] - ], - "bam_transcript": [ - [ - { - "id": "test", - "single_end": false - }, - "test.toTranscriptome.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "bam_unsorted": [ - [ - { - "id": "test", - "single_end": false - }, - "test.Aligned.unsort.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "bedgraph": [ - [ - { - "id": "test", - "single_end": false - }, - "test.Signal.UniqueMultiple.str1.out.bg:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "fastq": [ - [ - { - "id": "test", - "single_end": false - }, - [ - "test.unmapped_1.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", - "test.unmapped_2.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" - ] - ] - ], - "junction": [ - [ - { - "id": "test", - "single_end": false - }, - "test.Chimeric.out.junction:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "log_final": [ - [ - { - "id": "test", - "single_end": false - }, - "test.Log.final.out:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "log_out": [ - [ - { - "id": "test", - "single_end": false - }, - "test.Log.out:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "log_progress": [ - [ - { - "id": "test", - "single_end": false - }, - "test.Log.progress.out:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "read_per_gene_tab": [ - [ - { - "id": "test", - "single_end": false - }, - "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "sam": [ - [ - { - "id": "test", - "single_end": false - }, - "test.out.sam:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "spl_junc_tab": [ - [ - { - "id": "test", - "single_end": false - }, - "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "tab": [ - [ - { - "id": "test", - "single_end": false - }, - [ - "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.tab:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ] - ], - "versions": [ - "versions.yml:md5,2e6b6d8809f5a17f38f4d27c45dcb22f" - ], - "wig": [ - [ - { - "id": "test", - "single_end": false - }, - "test.Signal.UniqueMultiple.str1.out.wig:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ] - } - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" - }, - "timestamp": "2024-07-22T15:16:28.874293" - }, - "homo_sapiens - single_end": { - "content": [ - "test.Log.final.out", - "test.Log.out", - "test.Log.progress.out", - [ - [ - { - "id": "test", - "single_end": true - }, - "test.Aligned.sortedByCoord.out.bam:md5,c6cfaccaf91bc7fdabed3cfe236d4535" - ] - ], - [ - [ - { - "id": "test", - "single_end": true - }, - "test.Aligned.sortedByCoord.out.bam:md5,c6cfaccaf91bc7fdabed3cfe236d4535" - ] - ], - [ - - ], - [ - - ], - [ - [ - { - "id": "test", - "single_end": true - }, - [ - "test.Signal.Unique.str1.out.bg:md5,c56fc1472776fb927eaf62d973da5f9a", - "test.Signal.UniqueMultiple.str1.out.bg:md5,e93373cf6f2a2a9506e2efdb260cdd4f" - ] - ] - ], - [ - - ], - [ - - ], - [ - - ], - [ - - ], - [ - [ - { - "id": "test", - "single_end": true - }, - "test.SJ.out.tab:md5,75a516ab950fb958f40b29996474949c" - ] - ], - [ - [ - { - "id": "test", - "single_end": true - }, - "test.SJ.out.tab:md5,75a516ab950fb958f40b29996474949c" - ] - ], - [ - - ], - [ - "versions.yml:md5,2e6b6d8809f5a17f38f4d27c45dcb22f" - ] - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" - }, - "timestamp": "2024-07-22T18:02:34.35338" - }, - "homo_sapiens - paired_end": { - "content": [ - "test.Log.final.out", - "test.Log.out", - "test.Log.progress.out", - [ - [ - { - "id": "test", - "single_end": false - }, - "test.Aligned.sortedByCoord.out.bam:md5,b9ee1c607e07323bc1652ef3babb543f" - ] - ], - [ - [ - { - "id": "test", - "single_end": false - }, - "test.Aligned.sortedByCoord.out.bam:md5,b9ee1c607e07323bc1652ef3babb543f" - ] - ], - [ - - ], - [ - - ], - [ - [ - { - "id": "test", - "single_end": false - }, - [ - "test.Signal.Unique.str1.out.bg:md5,d7bf8b70b436ca048a62513e1d0ece3a", - "test.Signal.UniqueMultiple.str1.out.bg:md5,686d58493b9eb445b56ace4d67f76ef6" - ] - ] - ], - [ - - ], - [ - - ], - [ - - ], - [ - - ], - [ - [ - { - "id": "test", - "single_end": false - }, - "test.SJ.out.tab:md5,844af19ab0fc8cd9a3f75228445aca0d" - ] - ], - [ - [ - { - "id": "test", - "single_end": false - }, - "test.SJ.out.tab:md5,844af19ab0fc8cd9a3f75228445aca0d" - ] - ], - [ - - ], - [ - "versions.yml:md5,2e6b6d8809f5a17f38f4d27c45dcb22f" - ] - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" - }, - "timestamp": "2024-07-22T18:03:16.701923" - }, - "homo_sapiens - paired_end - multiple - stub": { - "content": [ - { - "0": [ - [ - { - "id": "test", - "single_end": false - }, - "test.Log.final.out:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "1": [ - [ - { - "id": "test", - "single_end": false - }, - "test.Log.out:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "10": [ - [ - { - "id": "test", - "single_end": false - }, - "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "11": [ - [ - { - "id": "test", - "single_end": false - }, - "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "12": [ - [ - { - "id": "test", - "single_end": false - }, - "test.Chimeric.out.junction:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "13": [ - [ - { - "id": "test", - "single_end": false - }, - "test.out.sam:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "14": [ - [ - { - "id": "test", - "single_end": false - }, - "test.Signal.UniqueMultiple.str1.out.wig:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "15": [ - [ - { - "id": "test", - "single_end": false - }, - "test.Signal.UniqueMultiple.str1.out.bg:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "2": [ - [ - { - "id": "test", - "single_end": false - }, - "test.Log.progress.out:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "3": [ - "versions.yml:md5,2e6b6d8809f5a17f38f4d27c45dcb22f" - ], - "4": [ - [ - { - "id": "test", - "single_end": false - }, - [ - "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", - "testXd.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ] - ], - "5": [ - [ - { - "id": "test", - "single_end": false - }, - [ - "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ] - ], - "6": [ - [ - { - "id": "test", - "single_end": false - }, - "test.toTranscriptome.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "7": [ - [ - { - "id": "test", - "single_end": false - }, - "test.Aligned.unsort.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "8": [ - [ - { - "id": "test", - "single_end": false - }, - [ - "test.unmapped_1.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", - "test.unmapped_2.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" - ] - ] - ], - "9": [ - [ - { - "id": "test", - "single_end": false - }, - [ - "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.tab:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ] - ], - "bam": [ - [ - { - "id": "test", - "single_end": false - }, - [ - "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", - "testXd.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ] - ], - "bam_sorted": [ - [ - { - "id": "test", - "single_end": false - }, - [ - "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ] - ], - "bam_transcript": [ - [ - { - "id": "test", - "single_end": false - }, - "test.toTranscriptome.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "bam_unsorted": [ - [ - { - "id": "test", - "single_end": false - }, - "test.Aligned.unsort.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "bedgraph": [ - [ - { - "id": "test", - "single_end": false - }, - "test.Signal.UniqueMultiple.str1.out.bg:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "fastq": [ - [ - { - "id": "test", - "single_end": false - }, - [ - "test.unmapped_1.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", - "test.unmapped_2.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" - ] - ] - ], - "junction": [ - [ - { - "id": "test", - "single_end": false - }, - "test.Chimeric.out.junction:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "log_final": [ - [ - { - "id": "test", - "single_end": false - }, - "test.Log.final.out:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "log_out": [ - [ - { - "id": "test", - "single_end": false - }, - "test.Log.out:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "log_progress": [ - [ - { - "id": "test", - "single_end": false - }, - "test.Log.progress.out:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "read_per_gene_tab": [ - [ - { - "id": "test", - "single_end": false - }, - "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "sam": [ - [ - { - "id": "test", - "single_end": false - }, - "test.out.sam:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "spl_junc_tab": [ - [ - { - "id": "test", - "single_end": false - }, - "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "tab": [ - [ - { - "id": "test", - "single_end": false - }, - [ - "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.tab:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ] - ], - "versions": [ - "versions.yml:md5,2e6b6d8809f5a17f38f4d27c45dcb22f" - ], - "wig": [ - [ - { - "id": "test", - "single_end": false - }, - "test.Signal.UniqueMultiple.str1.out.wig:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ] - } - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" - }, - "timestamp": "2024-07-22T15:16:51.360287" - }, - "homo_sapiens - paired_end - multiple": { - "content": [ - "test.Log.final.out", - "test.Log.out", - "test.Log.progress.out", - [ - [ - { - "id": "test", - "single_end": false - }, - "test.Aligned.sortedByCoord.out.bam:md5,ab07c21d63ab0a6c07d171d213c81d5a" - ] - ], - [ - [ - { - "id": "test", - "single_end": false - }, - "test.Aligned.sortedByCoord.out.bam:md5,ab07c21d63ab0a6c07d171d213c81d5a" - ] - ], - [ - - ], - [ - - ], - [ - [ - { - "id": "test", - "single_end": false - }, - [ - "test.Signal.Unique.str1.out.bg:md5,d7bf8b70b436ca048a62513e1d0ece3a", - "test.Signal.UniqueMultiple.str1.out.bg:md5,686d58493b9eb445b56ace4d67f76ef6" - ] - ] - ], - [ - - ], - [ - - ], - [ - - ], - [ - - ], - [ - [ - { - "id": "test", - "single_end": false - }, - "test.SJ.out.tab:md5,069877e053714e23010fe4e1c003b4a2" - ] - ], - [ - [ - { - "id": "test", - "single_end": false - }, - "test.SJ.out.tab:md5,069877e053714e23010fe4e1c003b4a2" - ] - ], - [ - - ], - [ - "versions.yml:md5,2e6b6d8809f5a17f38f4d27c45dcb22f" - ] - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" - }, - "timestamp": "2024-07-22T13:13:28.987438" - }, - "homo_sapiens - paired_end - stub": { - "content": [ - { - "0": [ - [ - { - "id": "test", - "single_end": false - }, - "test.Log.final.out:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "1": [ - [ - { - "id": "test", - "single_end": false - }, - "test.Log.out:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "10": [ - [ - { - "id": "test", - "single_end": false - }, - "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "11": [ - [ - { - "id": "test", - "single_end": false - }, - "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "12": [ - [ - { - "id": "test", - "single_end": false - }, - "test.Chimeric.out.junction:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "13": [ - [ - { - "id": "test", - "single_end": false - }, - "test.out.sam:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "14": [ - [ - { - "id": "test", - "single_end": false - }, - "test.Signal.UniqueMultiple.str1.out.wig:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "15": [ - [ - { - "id": "test", - "single_end": false - }, - "test.Signal.UniqueMultiple.str1.out.bg:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "2": [ - [ - { - "id": "test", - "single_end": false - }, - "test.Log.progress.out:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "3": [ - "versions.yml:md5,2e6b6d8809f5a17f38f4d27c45dcb22f" - ], - "4": [ - [ - { - "id": "test", - "single_end": false - }, - [ - "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", - "testXd.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ] - ], - "5": [ - [ - { - "id": "test", - "single_end": false - }, - [ - "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ] - ], - "6": [ - [ - { - "id": "test", - "single_end": false - }, - "test.toTranscriptome.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "7": [ - [ - { - "id": "test", - "single_end": false - }, - "test.Aligned.unsort.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "8": [ - [ - { - "id": "test", - "single_end": false - }, - [ - "test.unmapped_1.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", - "test.unmapped_2.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" - ] - ] - ], - "9": [ - [ - { - "id": "test", - "single_end": false - }, - [ - "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.tab:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ] - ], - "bam": [ - [ - { - "id": "test", - "single_end": false - }, - [ - "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", - "testXd.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ] - ], - "bam_sorted": [ - [ - { - "id": "test", - "single_end": false - }, - [ - "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ] - ], - "bam_transcript": [ - [ - { - "id": "test", - "single_end": false - }, - "test.toTranscriptome.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "bam_unsorted": [ - [ - { - "id": "test", - "single_end": false - }, - "test.Aligned.unsort.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "bedgraph": [ - [ - { - "id": "test", - "single_end": false - }, - "test.Signal.UniqueMultiple.str1.out.bg:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "fastq": [ - [ - { - "id": "test", - "single_end": false - }, - [ - "test.unmapped_1.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", - "test.unmapped_2.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" - ] - ] - ], - "junction": [ - [ - { - "id": "test", - "single_end": false - }, - "test.Chimeric.out.junction:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "log_final": [ - [ - { - "id": "test", - "single_end": false - }, - "test.Log.final.out:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "log_out": [ - [ - { - "id": "test", - "single_end": false - }, - "test.Log.out:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "log_progress": [ - [ - { - "id": "test", - "single_end": false - }, - "test.Log.progress.out:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "read_per_gene_tab": [ - [ - { - "id": "test", - "single_end": false - }, - "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "sam": [ - [ - { - "id": "test", - "single_end": false - }, - "test.out.sam:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "spl_junc_tab": [ - [ - { - "id": "test", - "single_end": false - }, - "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "tab": [ - [ - { - "id": "test", - "single_end": false - }, - [ - "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.tab:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ] - ], - "versions": [ - "versions.yml:md5,2e6b6d8809f5a17f38f4d27c45dcb22f" - ], - "wig": [ - [ - { - "id": "test", - "single_end": false - }, - "test.Signal.UniqueMultiple.str1.out.wig:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ] - } - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" - }, - "timestamp": "2024-07-22T15:16:16.798018" - }, - "homo_sapiens - paired_end - starfusion": { - "content": [ - "test.Log.final.out", - "test.Log.out", - "test.Log.progress.out", - [ - [ - { - "id": "test", - "single_end": false - }, - "test.Aligned.out.bam:md5,bcad07b838f6762fc01eea52b5cd3f84" - ] - ], - [ - - ], - [ - - ], - [ - - ], - [ - - ], - [ - - ], - [ - [ - { - "id": "test", - "single_end": false - }, - "test.Chimeric.out.junction:md5,c10ef219f4a30e83711b995bc5e40dba" - ] - ], - [ - - ], - [ - - ], - [ - [ - { - "id": "test", - "single_end": false - }, - "test.SJ.out.tab:md5,19c3faa1bfa9a0cc5e4c45f17065b53a" - ] - ], - [ - [ - { - "id": "test", - "single_end": false - }, - "test.SJ.out.tab:md5,19c3faa1bfa9a0cc5e4c45f17065b53a" - ] - ], - [ - - ], - [ - "versions.yml:md5,2e6b6d8809f5a17f38f4d27c45dcb22f" - ] - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" - }, - "timestamp": "2024-07-22T13:10:55.371956" - }, - "homo_sapiens - paired_end - arriba": { - "content": [ - "test.Log.final.out", - "test.Log.out", - "test.Log.progress.out", - [ - [ - { - "id": "test", - "single_end": false - }, - "test.Aligned.out.bam:md5,c1b1747f5873f2d17762725636e891d5" - ] - ], - [ - - ], - [ - - ], - [ - - ], - [ - - ], - [ - - ], - [ - - ], - [ - - ], - [ - - ], - [ - [ - { - "id": "test", - "single_end": false - }, - "test.SJ.out.tab:md5,5155c9fd1f787ad6d7d80987fb06219c" - ] - ], - [ - [ - { - "id": "test", - "single_end": false - }, - "test.SJ.out.tab:md5,5155c9fd1f787ad6d7d80987fb06219c" - ] - ], - [ - - ], - [ - "versions.yml:md5,2e6b6d8809f5a17f38f4d27c45dcb22f" - ] - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" - }, - "timestamp": "2024-07-22T13:05:10.7534" - }, - "homo_sapiens - paired_end - starfusion - stub": { - "content": [ - { - "0": [ - [ - { - "id": "test", - "single_end": false - }, - "test.Log.final.out:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "1": [ - [ - { - "id": "test", - "single_end": false - }, - "test.Log.out:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "10": [ - [ - { - "id": "test", - "single_end": false - }, - "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "11": [ - [ - { - "id": "test", - "single_end": false - }, - "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "12": [ - [ - { - "id": "test", - "single_end": false - }, - "test.Chimeric.out.junction:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "13": [ - [ - { - "id": "test", - "single_end": false - }, - "test.out.sam:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "14": [ - [ - { - "id": "test", - "single_end": false - }, - "test.Signal.UniqueMultiple.str1.out.wig:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "15": [ - [ - { - "id": "test", - "single_end": false - }, - "test.Signal.UniqueMultiple.str1.out.bg:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "2": [ - [ - { - "id": "test", - "single_end": false - }, - "test.Log.progress.out:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "3": [ - "versions.yml:md5,2e6b6d8809f5a17f38f4d27c45dcb22f" - ], - "4": [ - [ - { - "id": "test", - "single_end": false - }, - [ - "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", - "testXd.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ] - ], - "5": [ - [ - { - "id": "test", - "single_end": false - }, - [ - "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ] - ], - "6": [ - [ - { - "id": "test", - "single_end": false - }, - "test.toTranscriptome.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "7": [ - [ - { - "id": "test", - "single_end": false - }, - "test.Aligned.unsort.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "8": [ - [ - { - "id": "test", - "single_end": false - }, - [ - "test.unmapped_1.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", - "test.unmapped_2.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" - ] - ] - ], - "9": [ - [ - { - "id": "test", - "single_end": false - }, - [ - "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.tab:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ] - ], - "bam": [ - [ - { - "id": "test", - "single_end": false - }, - [ - "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", - "testXd.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ] - ], - "bam_sorted": [ - [ - { - "id": "test", - "single_end": false - }, - [ - "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ] - ], - "bam_transcript": [ - [ - { - "id": "test", - "single_end": false - }, - "test.toTranscriptome.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "bam_unsorted": [ - [ - { - "id": "test", - "single_end": false - }, - "test.Aligned.unsort.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "bedgraph": [ - [ - { - "id": "test", - "single_end": false - }, - "test.Signal.UniqueMultiple.str1.out.bg:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "fastq": [ - [ - { - "id": "test", - "single_end": false - }, - [ - "test.unmapped_1.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", - "test.unmapped_2.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" - ] - ] - ], - "junction": [ - [ - { - "id": "test", - "single_end": false - }, - "test.Chimeric.out.junction:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "log_final": [ - [ - { - "id": "test", - "single_end": false - }, - "test.Log.final.out:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "log_out": [ - [ - { - "id": "test", - "single_end": false - }, - "test.Log.out:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "log_progress": [ - [ - { - "id": "test", - "single_end": false - }, - "test.Log.progress.out:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "read_per_gene_tab": [ - [ - { - "id": "test", - "single_end": false - }, - "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "sam": [ - [ - { - "id": "test", - "single_end": false - }, - "test.out.sam:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "spl_junc_tab": [ - [ - { - "id": "test", - "single_end": false - }, - "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "tab": [ - [ - { - "id": "test", - "single_end": false - }, - [ - "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.tab:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ] - ], - "versions": [ - "versions.yml:md5,2e6b6d8809f5a17f38f4d27c45dcb22f" - ], - "wig": [ - [ - { - "id": "test", - "single_end": false - }, - "test.Signal.UniqueMultiple.str1.out.wig:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ] - } - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" - }, - "timestamp": "2024-07-22T15:16:40.64399" - } -} \ No newline at end of file diff --git a/modules/nf-core/star/align/tests/nextflow.arriba.config b/modules/nf-core/star/align/tests/nextflow.arriba.config deleted file mode 100644 index 2324b9e..0000000 --- a/modules/nf-core/star/align/tests/nextflow.arriba.config +++ /dev/null @@ -1,14 +0,0 @@ -process { - - withName: STAR_GENOMEGENERATE { - ext.args = '--genomeSAindexNbases 9' - } - - withName: STAR_ALIGN { - ext.args = '--readFilesCommand zcat --outSAMtype BAM Unsorted --outSAMunmapped Within --outBAMcompression 0 --outFilterMultimapNmax 50 --peOverlapNbasesMin 10 --alignSplicedMateMapLminOverLmate 0.5 --alignSJstitchMismatchNmax 5 -1 5 5 --chimSegmentMin 10 --chimOutType WithinBAM HardClip --chimJunctionOverhangMin 10 --chimScoreDropMax 30 --chimScoreJunctionNonGTAG 0 --chimScoreSeparation 1 --chimSegmentReadGapMax 3 --chimMultimapNmax 50' - } - -} - -// Fix chown issue for the output star folder -docker.runOptions = '--platform=linux/amd64 -u $(id -u):$(id -g)' diff --git a/modules/nf-core/star/align/tests/nextflow.config b/modules/nf-core/star/align/tests/nextflow.config deleted file mode 100644 index c4ac580..0000000 --- a/modules/nf-core/star/align/tests/nextflow.config +++ /dev/null @@ -1,14 +0,0 @@ -process { - - withName: STAR_GENOMEGENERATE { - ext.args = '--genomeSAindexNbases 9' - } - - withName: STAR_ALIGN { - ext.args = '--readFilesCommand zcat --outSAMtype BAM SortedByCoordinate --outWigType bedGraph --outWigStrand Unstranded' - } - -} - -// Fix chown issue for the output star folder -docker.runOptions = '--platform=linux/amd64 -u $(id -u):$(id -g)' diff --git a/modules/nf-core/star/align/tests/nextflow.starfusion.config b/modules/nf-core/star/align/tests/nextflow.starfusion.config deleted file mode 100644 index 467b649..0000000 --- a/modules/nf-core/star/align/tests/nextflow.starfusion.config +++ /dev/null @@ -1,14 +0,0 @@ -process { - - withName: STAR_GENOMEGENERATE { - ext.args = '--genomeSAindexNbases 9' - } - - withName: STAR_ALIGN { - ext.args = '--readFilesCommand zcat --outSAMtype BAM Unsorted --outReadsUnmapped None --twopassMode Basic --outSAMstrandField intronMotif --outSAMunmapped Within --chimSegmentMin 12 --chimJunctionOverhangMin 8 --chimOutJunctionFormat 1 --alignSJDBoverhangMin 10 --alignMatesGapMax 100000 --alignIntronMax 100000 --alignSJstitchMismatchNmax 5 -1 5 5 --chimMultimapScoreRange 3 --chimScoreJunctionNonGTAG -4 --chimMultimapNmax 20 --chimNonchimScoreDropMin 10 --peOverlapNbasesMin 12 --peOverlapMMp 0.1 --alignInsertionFlush Right --alignSplicedMateMapLminOverLmate 0 --alignSplicedMateMapLmin 30' - } - -} - -// Fix chown issue for the output star folder -docker.runOptions = '--platform=linux/amd64 -u $(id -u):$(id -g)' diff --git a/modules/nf-core/star/align/tests/tags.yml b/modules/nf-core/star/align/tests/tags.yml deleted file mode 100644 index 8beace1..0000000 --- a/modules/nf-core/star/align/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -star/align: - - modules/nf-core/star/align/** diff --git a/modules/nf-core/star/genomegenerate/environment.yml b/modules/nf-core/star/genomegenerate/environment.yml deleted file mode 100644 index 791f255..0000000 --- a/modules/nf-core/star/genomegenerate/environment.yml +++ /dev/null @@ -1,10 +0,0 @@ -name: star_genomegenerate -channels: - - conda-forge - - bioconda - - defaults -dependencies: - - bioconda::samtools=1.18 - - bioconda::htslib=1.18 - - bioconda::star=2.7.10a - - conda-forge::gawk=5.1.0 diff --git a/modules/nf-core/star/genomegenerate/main.nf b/modules/nf-core/star/genomegenerate/main.nf deleted file mode 100644 index b885571..0000000 --- a/modules/nf-core/star/genomegenerate/main.nf +++ /dev/null @@ -1,119 +0,0 @@ -process STAR_GENOMEGENERATE { - tag "$fasta" - label 'process_high' - - conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/mulled-v2-1fa26d1ce03c295fe2fdcf85831a92fbcbd7e8c2:ded3841da0194af2701c780e9b3d653a85d27489-0' : - 'biocontainers/mulled-v2-1fa26d1ce03c295fe2fdcf85831a92fbcbd7e8c2:ded3841da0194af2701c780e9b3d653a85d27489-0' }" - - input: - tuple val(meta), path(fasta) - tuple val(meta2), path(gtf) - - output: - tuple val(meta), path("star") , emit: index - path "versions.yml" , emit: versions - - when: - task.ext.when == null || task.ext.when - - script: - def args = task.ext.args ?: '' - def args_list = args.tokenize() - def memory = task.memory ? "--limitGenomeGenerateRAM ${task.memory.toBytes() - 100000000}" : '' - def include_gtf = gtf ? "--sjdbGTFfile $gtf" : '' - if (args_list.contains('--genomeSAindexNbases')) { - """ - mkdir star - STAR \\ - --runMode genomeGenerate \\ - --genomeDir star/ \\ - --genomeFastaFiles $fasta \\ - $include_gtf \\ - --runThreadN $task.cpus \\ - $memory \\ - $args - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - star: \$(STAR --version | sed -e "s/STAR_//g") - samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') - gawk: \$(echo \$(gawk --version 2>&1) | sed 's/^.*GNU Awk //; s/, .*\$//') - END_VERSIONS - """ - } else { - """ - samtools faidx $fasta - NUM_BASES=`gawk '{sum = sum + \$2}END{if ((log(sum)/log(2))/2 - 1 > 14) {printf "%.0f", 14} else {printf "%.0f", (log(sum)/log(2))/2 - 1}}' ${fasta}.fai` - - mkdir star - STAR \\ - --runMode genomeGenerate \\ - --genomeDir star/ \\ - --genomeFastaFiles $fasta \\ - $include_gtf \\ - --runThreadN $task.cpus \\ - --genomeSAindexNbases \$NUM_BASES \\ - $memory \\ - $args - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - star: \$(STAR --version | sed -e "s/STAR_//g") - samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') - gawk: \$(echo \$(gawk --version 2>&1) | sed 's/^.*GNU Awk //; s/, .*\$//') - END_VERSIONS - """ - } - - stub: - if (gtf) { - """ - mkdir star - touch star/Genome - touch star/Log.out - touch star/SA - touch star/SAindex - touch star/chrLength.txt - touch star/chrName.txt - touch star/chrNameLength.txt - touch star/chrStart.txt - touch star/exonGeTrInfo.tab - touch star/exonInfo.tab - touch star/geneInfo.tab - touch star/genomeParameters.txt - touch star/sjdbInfo.txt - touch star/sjdbList.fromGTF.out.tab - touch star/sjdbList.out.tab - touch star/transcriptInfo.tab - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - star: \$(STAR --version | sed -e "s/STAR_//g") - samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') - gawk: \$(echo \$(gawk --version 2>&1) | sed 's/^.*GNU Awk //; s/, .*\$//') - END_VERSIONS - """ - } else { - """ - mkdir star - touch star/Genome - touch star/Log.out - touch star/SA - touch star/SAindex - touch star/chrLength.txt - touch star/chrName.txt - touch star/chrNameLength.txt - touch star/chrStart.txt - touch star/genomeParameters.txt - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - star: \$(STAR --version | sed -e "s/STAR_//g") - samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') - gawk: \$(echo \$(gawk --version 2>&1) | sed 's/^.*GNU Awk //; s/, .*\$//') - END_VERSIONS - """ - } -} diff --git a/modules/nf-core/star/genomegenerate/meta.yml b/modules/nf-core/star/genomegenerate/meta.yml deleted file mode 100644 index 1061e1b..0000000 --- a/modules/nf-core/star/genomegenerate/meta.yml +++ /dev/null @@ -1,53 +0,0 @@ -name: star_genomegenerate -description: Create index for STAR -keywords: - - index - - fasta - - genome - - reference -tools: - - star: - description: | - STAR is a software package for mapping DNA sequences against - a large reference genome, such as the human genome. - homepage: https://github.com/alexdobin/STAR - manual: https://github.com/alexdobin/STAR/blob/master/doc/STARmanual.pdf - doi: 10.1093/bioinformatics/bts635 - licence: ["MIT"] -input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - fasta: - type: file - description: Fasta file of the reference genome - - meta2: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'test' ] - - gtf: - type: file - description: GTF file of the reference genome -output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - index: - type: directory - description: Folder containing the star index files - pattern: "star" - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" -authors: - - "@kevinmenden" - - "@drpatelh" -maintainers: - - "@kevinmenden" - - "@drpatelh" diff --git a/modules/nf-core/star/genomegenerate/tests/main.nf.test b/modules/nf-core/star/genomegenerate/tests/main.nf.test deleted file mode 100644 index 4d619c4..0000000 --- a/modules/nf-core/star/genomegenerate/tests/main.nf.test +++ /dev/null @@ -1,114 +0,0 @@ -nextflow_process { - - name "Test Process STAR_GENOMEGENERATE" - script "../main.nf" - process "STAR_GENOMEGENERATE" - tag "modules" - tag "modules_nfcore" - tag "star" - tag "star/genomegenerate" - - test("fasta_gtf") { - - when { - process { - """ - input[0] = Channel.of([ - [ id:'test_fasta' ], - [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ] - ]) - input[1] = Channel.of([ - [ id:'test_gtf' ], - [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] - ]) - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot( - file(process.out.index[0][1]).listFiles().collect { it.getName() }.sort().toString(), - process.out.versions) - .match() } - ) - } - } - - test("fasta") { - - when { - process { - """ - input[0] = Channel.of([ - [ id:'test_fasta' ], - [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ] - ]) - input[1] = Channel.of([ [], [] ]) - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot( - file(process.out.index[0][1]).listFiles().collect { it.getName() }.sort().toString(), - process.out.versions - ).match() } - ) - } - } - - test("fasta_gtf_stub") { - - options '-stub' - - when { - process { - """ - input[0] = Channel.of([ - [ id:'test_fasta' ], - [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ] - ]) - input[1] = Channel.of([ - [ id:'test_gtf' ], - [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] - ]) - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(process.out).match() } - ) - } - } - - test("fasta_stub") { - - options '-stub' - - when { - process { - """ - input[0] = Channel.of([ - [ id:'test_fasta' ], - [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ] - ]) - input[1] = Channel.of([ [], [] ]) - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(process.out).match() } - ) - } - } -} diff --git a/modules/nf-core/star/genomegenerate/tests/main.nf.test.snap b/modules/nf-core/star/genomegenerate/tests/main.nf.test.snap deleted file mode 100644 index 207f4b4..0000000 --- a/modules/nf-core/star/genomegenerate/tests/main.nf.test.snap +++ /dev/null @@ -1,148 +0,0 @@ -{ - "fasta_gtf": { - "content": [ - "[Genome, Log.out, SA, SAindex, chrLength.txt, chrName.txt, chrNameLength.txt, chrStart.txt, exonGeTrInfo.tab, exonInfo.tab, geneInfo.tab, genomeParameters.txt, sjdbInfo.txt, sjdbList.fromGTF.out.tab, sjdbList.out.tab, transcriptInfo.tab]", - [ - "versions.yml:md5,46b8f1f34bb7f23892cd1eb249ed4d7f" - ] - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" - }, - "timestamp": "2024-07-22T14:55:35.478401" - }, - "fasta_gtf_stub": { - "content": [ - { - "0": [ - [ - { - "id": "test_fasta" - }, - [ - "Genome:md5,d41d8cd98f00b204e9800998ecf8427e", - "Log.out:md5,d41d8cd98f00b204e9800998ecf8427e", - "SA:md5,d41d8cd98f00b204e9800998ecf8427e", - "SAindex:md5,d41d8cd98f00b204e9800998ecf8427e", - "chrLength.txt:md5,d41d8cd98f00b204e9800998ecf8427e", - "chrName.txt:md5,d41d8cd98f00b204e9800998ecf8427e", - "chrNameLength.txt:md5,d41d8cd98f00b204e9800998ecf8427e", - "chrStart.txt:md5,d41d8cd98f00b204e9800998ecf8427e", - "exonGeTrInfo.tab:md5,d41d8cd98f00b204e9800998ecf8427e", - "exonInfo.tab:md5,d41d8cd98f00b204e9800998ecf8427e", - "geneInfo.tab:md5,d41d8cd98f00b204e9800998ecf8427e", - "genomeParameters.txt:md5,d41d8cd98f00b204e9800998ecf8427e", - "sjdbInfo.txt:md5,d41d8cd98f00b204e9800998ecf8427e", - "sjdbList.fromGTF.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", - "sjdbList.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", - "transcriptInfo.tab:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ] - ], - "1": [ - "versions.yml:md5,46b8f1f34bb7f23892cd1eb249ed4d7f" - ], - "index": [ - [ - { - "id": "test_fasta" - }, - [ - "Genome:md5,d41d8cd98f00b204e9800998ecf8427e", - "Log.out:md5,d41d8cd98f00b204e9800998ecf8427e", - "SA:md5,d41d8cd98f00b204e9800998ecf8427e", - "SAindex:md5,d41d8cd98f00b204e9800998ecf8427e", - "chrLength.txt:md5,d41d8cd98f00b204e9800998ecf8427e", - "chrName.txt:md5,d41d8cd98f00b204e9800998ecf8427e", - "chrNameLength.txt:md5,d41d8cd98f00b204e9800998ecf8427e", - "chrStart.txt:md5,d41d8cd98f00b204e9800998ecf8427e", - "exonGeTrInfo.tab:md5,d41d8cd98f00b204e9800998ecf8427e", - "exonInfo.tab:md5,d41d8cd98f00b204e9800998ecf8427e", - "geneInfo.tab:md5,d41d8cd98f00b204e9800998ecf8427e", - "genomeParameters.txt:md5,d41d8cd98f00b204e9800998ecf8427e", - "sjdbInfo.txt:md5,d41d8cd98f00b204e9800998ecf8427e", - "sjdbList.fromGTF.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", - "sjdbList.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", - "transcriptInfo.tab:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ] - ], - "versions": [ - "versions.yml:md5,46b8f1f34bb7f23892cd1eb249ed4d7f" - ] - } - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" - }, - "timestamp": "2024-07-22T14:55:57.247585" - }, - "fasta_stub": { - "content": [ - { - "0": [ - [ - { - "id": "test_fasta" - }, - [ - "Genome:md5,d41d8cd98f00b204e9800998ecf8427e", - "Log.out:md5,d41d8cd98f00b204e9800998ecf8427e", - "SA:md5,d41d8cd98f00b204e9800998ecf8427e", - "SAindex:md5,d41d8cd98f00b204e9800998ecf8427e", - "chrLength.txt:md5,d41d8cd98f00b204e9800998ecf8427e", - "chrName.txt:md5,d41d8cd98f00b204e9800998ecf8427e", - "chrNameLength.txt:md5,d41d8cd98f00b204e9800998ecf8427e", - "chrStart.txt:md5,d41d8cd98f00b204e9800998ecf8427e", - "genomeParameters.txt:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ] - ], - "1": [ - "versions.yml:md5,46b8f1f34bb7f23892cd1eb249ed4d7f" - ], - "index": [ - [ - { - "id": "test_fasta" - }, - [ - "Genome:md5,d41d8cd98f00b204e9800998ecf8427e", - "Log.out:md5,d41d8cd98f00b204e9800998ecf8427e", - "SA:md5,d41d8cd98f00b204e9800998ecf8427e", - "SAindex:md5,d41d8cd98f00b204e9800998ecf8427e", - "chrLength.txt:md5,d41d8cd98f00b204e9800998ecf8427e", - "chrName.txt:md5,d41d8cd98f00b204e9800998ecf8427e", - "chrNameLength.txt:md5,d41d8cd98f00b204e9800998ecf8427e", - "chrStart.txt:md5,d41d8cd98f00b204e9800998ecf8427e", - "genomeParameters.txt:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ] - ], - "versions": [ - "versions.yml:md5,46b8f1f34bb7f23892cd1eb249ed4d7f" - ] - } - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" - }, - "timestamp": "2024-07-22T14:56:07.01742" - }, - "fasta": { - "content": [ - "[Genome, Log.out, SA, SAindex, chrLength.txt, chrName.txt, chrNameLength.txt, chrStart.txt, genomeParameters.txt]", - [ - "versions.yml:md5,46b8f1f34bb7f23892cd1eb249ed4d7f" - ] - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" - }, - "timestamp": "2024-07-22T14:55:45.48784" - } -} \ No newline at end of file diff --git a/modules/nf-core/star/genomegenerate/tests/tags.yml b/modules/nf-core/star/genomegenerate/tests/tags.yml deleted file mode 100644 index 79f619b..0000000 --- a/modules/nf-core/star/genomegenerate/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -star/genomegenerate: - - modules/nf-core/star/genomegenerate/** diff --git a/modules/nf-core/tsebra/environment.yml b/modules/nf-core/tsebra/environment.yml deleted file mode 100644 index 657cd82..0000000 --- a/modules/nf-core/tsebra/environment.yml +++ /dev/null @@ -1,9 +0,0 @@ ---- -# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json -name: "tsebra" -channels: - - conda-forge - - bioconda - - defaults -dependencies: - - "bioconda::tsebra=1.1.2.5" diff --git a/modules/nf-core/tsebra/main.nf b/modules/nf-core/tsebra/main.nf deleted file mode 100644 index 2b0673a..0000000 --- a/modules/nf-core/tsebra/main.nf +++ /dev/null @@ -1,62 +0,0 @@ -process TSEBRA { - tag "$meta.id" - label 'process_single' - - // WARN: Version information not provided by tool on CLI. Please update this string when bumping container versions. - conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/tsebra:1.1.2.5--pyhca03a8a_0': - 'biocontainers/tsebra:1.1.2.5--pyhca03a8a_0' }" - - input: - tuple val(meta), path(gtfs) - path hints_files - path keep_gtfs - path config - - output: - tuple val(meta), path("*.gtf"), emit: tsebra_gtf - tuple val(meta), path("*.tsv"), emit: tsebra_scores - path "versions.yml" , emit: versions - - when: - task.ext.when == null || task.ext.when - - script: - def args = task.ext.args ?: '' - def prefix = task.ext.prefix ?: "${meta.id}" - def gtf_arg = '-g ' + gtfs.collect { "$it" }.join(',') - def hints_arg = '-e ' + hints_files.collect { "$it" }.join(',') - def keep_arg = keep_gtfs ? ( '-k ' + keep_gtfs.collect { "$it" }.join(',') ) : '' - def config_arg = config ? "-c $config" : '' - def VERSION = '1.1.2.5' // WARN: Version information not provided by tool on CLI. Please update this string when bumping container versions. - """ - tsebra.py \\ - $gtf_arg \\ - $hints_arg \\ - $keep_arg \\ - $config_arg \\ - $args \\ - -o ${prefix}.gtf \\ - -s ${prefix}.tsv - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - tsebra: $VERSION - END_VERSIONS - """ - - stub: - def args = task.ext.args ?: '' - def prefix = task.ext.prefix ?: "${meta.id}" - def VERSION = '1.1.2.5' // WARN: Version information not provided by tool on CLI. Please update this string when bumping container versions. - """ - touch ${prefix}.gtf - touch ${prefix}.tsv - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - tsebra: $VERSION - END_VERSIONS - """ -} diff --git a/modules/nf-core/tsebra/meta.yml b/modules/nf-core/tsebra/meta.yml deleted file mode 100644 index 18660d4..0000000 --- a/modules/nf-core/tsebra/meta.yml +++ /dev/null @@ -1,66 +0,0 @@ ---- -# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/meta-schema.json -name: "tsebra" -description: Transcript Selector for BRAKER TSEBRA combines gene predictions by selecing transcripts based on their extrisic evidence support -keywords: - - genomics - - transcript - - selector - - gene - - prediction - - evidence -tools: - - "tsebra": - description: TSEBRA is a combiner tool that selects transcripts from gene predictions based on the support by extrisic evidence in form of introns and start/stop codons - homepage: "https://github.com/Gaius-Augustus/TSEBRA" - documentation: "https://github.com/Gaius-Augustus/TSEBRA" - tool_dev_url: "https://github.com/Gaius-Augustus/TSEBRA" - doi: "10.1186/s12859-021-04482-0" - licence: ["Artistic-2.0"] - -input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. `[ id:'sample1' ]` - - gtfs: - type: list - description: List of gene prediction files in gtf - pattern: "*.gtf" - - hints_files: - type: list - description: List of files containing extrinsic evidence in gff - pattern: "*.gff" - - keep_gtfs: - type: list - description: | - List of gene prediction files in gtf. These gene sets are used the same way as other inputs, but TSEBRA ensures that all - transcripts from these gene sets are included in the output - pattern: "*.gtf" - - config: - type: file - description: Configuration file that sets the parameter for TSEBRA - pattern: "*.cfg" -output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. `[ id:'sample1' ]` - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - - tsebra_gtf: - type: file - description: Output file for the combined gene predictions in gtf - pattern: "*.gtf" - - tsebra_scores: - type: file - description: Transcript scores as a table - pattern: "*.tsv" -authors: - - "@GallVp" -maintainers: - - "@GallVp" diff --git a/modules/nf-core/tsebra/tests/main.nf.test b/modules/nf-core/tsebra/tests/main.nf.test deleted file mode 100644 index 6e45110..0000000 --- a/modules/nf-core/tsebra/tests/main.nf.test +++ /dev/null @@ -1,91 +0,0 @@ -nextflow_process { - - name "Test Process TSEBRA" - script "../main.nf" - process "TSEBRA" - - tag "modules" - tag "modules_nfcore" - tag "tsebra" - tag "gunzip" - - test("actinidia_chinensis-genome") { - - setup { - run('GUNZIP', alias: 'GUNZIP_GTF') { - script "../../../nf-core/gunzip" - - process { - """ - input[0] = [ - [ id:'test' ], // meta map - file(params.modules_testdata_base_path + 'genomics/eukaryotes/actinidia_chinensis/genome/chr1/genome.gtf.gz', checkIfExists: true) - ] - """ - } - } - - run('GUNZIP', alias: 'GUNZIP_HINTS') { - script "../../../nf-core/gunzip" - - process { - """ - input[0] = [ - [ id:'test' ], // meta map - file(params.modules_testdata_base_path + 'genomics/eukaryotes/actinidia_chinensis/genome/chr1/genome.hints.gff.gz', checkIfExists: true) - ] - """ - } - } - } - - when { - process { - """ - input[0] = GUNZIP_GTF.out.gunzip.map { meta, gtf -> [ meta, [ gtf ] ] } - input[1] = GUNZIP_HINTS.out.gunzip.map { meta, gff -> [ gff ] } - input[2] = [] - input[3] = [] - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(process.out).match() } - ) - } - - } - - test("actinidia_chinensis-genome-stub") { - - options "-stub" - - when { - process { - """ - input[0] = [ - [ id:'test' ], // meta map - [ file(params.modules_testdata_base_path + 'genomics/eukaryotes/actinidia_chinensis/genome/chr1/genome.gtf.gz', checkIfExists: true) ] - ] - input[1] = [ - file(params.modules_testdata_base_path + 'genomics/eukaryotes/actinidia_chinensis/genome/chr1/genome.hints.gff.gz', checkIfExists: true) - ] - input[2] = [] - input[3] = [] - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(process.out).match() } - ) - } - - } - -} diff --git a/modules/nf-core/tsebra/tests/main.nf.test.snap b/modules/nf-core/tsebra/tests/main.nf.test.snap deleted file mode 100644 index bbe880d..0000000 --- a/modules/nf-core/tsebra/tests/main.nf.test.snap +++ /dev/null @@ -1,100 +0,0 @@ -{ - "actinidia_chinensis-genome-stub": { - "content": [ - { - "0": [ - [ - { - "id": "test" - }, - "test.gtf:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "1": [ - [ - { - "id": "test" - }, - "test.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "2": [ - "versions.yml:md5,4e3a44cee65282ac56b08e2bbc4f1d46" - ], - "tsebra_gtf": [ - [ - { - "id": "test" - }, - "test.gtf:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "tsebra_scores": [ - [ - { - "id": "test" - }, - "test.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "versions": [ - "versions.yml:md5,4e3a44cee65282ac56b08e2bbc4f1d46" - ] - } - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.1" - }, - "timestamp": "2024-05-28T16:27:56.639849" - }, - "actinidia_chinensis-genome": { - "content": [ - { - "0": [ - [ - { - "id": "test" - }, - "test.gtf:md5,7c781c919e6aa20561f72dea09474f74" - ] - ], - "1": [ - [ - { - "id": "test" - }, - "test.tsv:md5,ad7bd858c1838b40286609a311f3a891" - ] - ], - "2": [ - "versions.yml:md5,4e3a44cee65282ac56b08e2bbc4f1d46" - ], - "tsebra_gtf": [ - [ - { - "id": "test" - }, - "test.gtf:md5,7c781c919e6aa20561f72dea09474f74" - ] - ], - "tsebra_scores": [ - [ - { - "id": "test" - }, - "test.tsv:md5,ad7bd858c1838b40286609a311f3a891" - ] - ], - "versions": [ - "versions.yml:md5,4e3a44cee65282ac56b08e2bbc4f1d46" - ] - } - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.1" - }, - "timestamp": "2024-05-28T16:27:52.049367" - } -} \ No newline at end of file diff --git a/modules/nf-core/tsebra/tests/tags.yml b/modules/nf-core/tsebra/tests/tags.yml deleted file mode 100644 index c76165b..0000000 --- a/modules/nf-core/tsebra/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -tsebra: - - "modules/nf-core/tsebra/**" diff --git a/modules/nf-core/umitools/extract/environment.yml b/modules/nf-core/umitools/extract/environment.yml deleted file mode 100644 index aab452d..0000000 --- a/modules/nf-core/umitools/extract/environment.yml +++ /dev/null @@ -1,7 +0,0 @@ -name: umitools_extract -channels: - - conda-forge - - bioconda - - defaults -dependencies: - - bioconda::umi_tools=1.1.5 diff --git a/modules/nf-core/umitools/extract/main.nf b/modules/nf-core/umitools/extract/main.nf deleted file mode 100644 index b97900e..0000000 --- a/modules/nf-core/umitools/extract/main.nf +++ /dev/null @@ -1,74 +0,0 @@ -process UMITOOLS_EXTRACT { - tag "$meta.id" - label "process_single" - label "process_long" - - conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/umi_tools:1.1.5--py39hf95cd2a_0' : - 'biocontainers/umi_tools:1.1.5--py39hf95cd2a_0' }" - - input: - tuple val(meta), path(reads) - - output: - tuple val(meta), path("*.fastq.gz"), emit: reads - tuple val(meta), path("*.log") , emit: log - path "versions.yml" , emit: versions - - when: - task.ext.when == null || task.ext.when - - script: - def args = task.ext.args ?: '' - def prefix = task.ext.prefix ?: "${meta.id}" - if (meta.single_end) { - """ - umi_tools \\ - extract \\ - -I $reads \\ - -S ${prefix}.umi_extract.fastq.gz \\ - $args \\ - > ${prefix}.umi_extract.log - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - umitools: \$( umi_tools --version | sed '/version:/!d; s/.*: //' ) - END_VERSIONS - """ - } else { - """ - umi_tools \\ - extract \\ - -I ${reads[0]} \\ - --read2-in=${reads[1]} \\ - -S ${prefix}.umi_extract_1.fastq.gz \\ - --read2-out=${prefix}.umi_extract_2.fastq.gz \\ - $args \\ - > ${prefix}.umi_extract.log - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - umitools: \$( umi_tools --version | sed '/version:/!d; s/.*: //' ) - END_VERSIONS - """ - } - - stub: - def prefix = task.ext.prefix ?: "${meta.id}" - if (meta.single_end) { - output_command = "echo '' | gzip > ${prefix}.umi_extract.fastq.gz" - } else { - output_command = "echo '' | gzip > ${prefix}.umi_extract_1.fastq.gz ;" - output_command += "echo '' | gzip > ${prefix}.umi_extract_2.fastq.gz" - } - """ - touch ${prefix}.umi_extract.log - ${output_command} - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - umitools: \$( umi_tools --version | sed '/version:/!d; s/.*: //' ) - END_VERSIONS - """ -} diff --git a/modules/nf-core/umitools/extract/meta.yml b/modules/nf-core/umitools/extract/meta.yml deleted file mode 100644 index 7695b27..0000000 --- a/modules/nf-core/umitools/extract/meta.yml +++ /dev/null @@ -1,48 +0,0 @@ -name: umitools_extract -description: Extracts UMI barcode from a read and add it to the read name, leaving any sample barcode in place -keywords: - - UMI - - barcode - - extract - - umitools -tools: - - umi_tools: - description: > - UMI-tools contains tools for dealing with Unique Molecular Identifiers (UMIs)/Random Molecular Tags (RMTs) and single cell RNA-Seq cell barcodes - documentation: https://umi-tools.readthedocs.io/en/latest/ - license: "MIT" -input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - reads: - type: list - description: | - List of input FASTQ files whose UMIs will be extracted. -output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - reads: - type: file - description: > - Extracted FASTQ files. | For single-end reads, pattern is \${prefix}.umi_extract.fastq.gz. | For paired-end reads, pattern is \${prefix}.umi_extract_{1,2}.fastq.gz. - pattern: "*.{fastq.gz}" - - log: - type: file - description: Logfile for umi_tools - pattern: "*.{log}" - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" -authors: - - "@drpatelh" - - "@grst" -maintainers: - - "@drpatelh" - - "@grst" diff --git a/modules/nf-core/umitools/extract/tests/main.nf.test b/modules/nf-core/umitools/extract/tests/main.nf.test deleted file mode 100644 index bb8a065..0000000 --- a/modules/nf-core/umitools/extract/tests/main.nf.test +++ /dev/null @@ -1,106 +0,0 @@ -nextflow_process { - - name "Test Process UMITOOLS_EXTRACT" - script "../main.nf" - process "UMITOOLS_EXTRACT" - config "./nextflow.config" - tag "modules_nfcore" - tag "modules" - tag "umitools" - tag "umitools/extract" - - test("single end") { - - when { - process { - """ - input[0] = [ [ id:'test', single_end:true ], // meta map - [ file(params.modules_testdata_base_path + "genomics/sarscov2/illumina/fastq/test_1.fastq.gz", checkIfExists: true) ] - ] - """ - } - } - - then { - assertAll ( - { assert process.success }, - { assert snapshot( - process.out.reads.collect { it.collect { it instanceof Map ? it : file(it).name }}, - process.out.log.collect { it.collect { it instanceof Map ? it : file(it).name }}, - process.out.versions - ).match() } - ) - } - } - - test("single end - stub") { - - options "-stub" - - when { - process { - """ - input[0] = [ [ id:'test', single_end:true ], // meta map - [ file(params.modules_testdata_base_path + "genomics/sarscov2/illumina/fastq/test_1.fastq.gz", checkIfExists: true) ] - ] - """ - } - } - - then { - assertAll ( - { assert process.success }, - { assert snapshot(process.out).match() } - ) - } - } - - test("pair end") { - - when { - process { - """ - input[0] = [ [ id:'test', single_end:false ], // meta map - [ file(params.modules_testdata_base_path + "genomics/sarscov2/illumina/fastq/test_1.fastq.gz", checkIfExists: true), - file(params.modules_testdata_base_path + "genomics/sarscov2/illumina/fastq/test_2.fastq.gz", checkIfExists: true) ] - ] - """ - } - } - - then { - assertAll ( - { assert process.success }, - { assert snapshot( - file(process.out.reads[0][1][0]).name, - file(process.out.reads[0][1][1]).name, - process.out.log.collect { it.collect { it instanceof Map ? it : file(it).name }}, - process.out.versions - ).match() } - ) - } - } - - test("pair end - stub") { - - options "-stub" - - when { - process { - """ - input[0] = [ [ id:'test', single_end:false ], // meta map - [ file(params.modules_testdata_base_path + "genomics/sarscov2/illumina/fastq/test_1.fastq.gz", checkIfExists: true), - file(params.modules_testdata_base_path + "genomics/sarscov2/illumina/fastq/test_2.fastq.gz", checkIfExists: true) ] - ] - """ - } - } - - then { - assertAll ( - { assert process.success }, - { assert snapshot(process.out).match() } - ) - } - } -} \ No newline at end of file diff --git a/modules/nf-core/umitools/extract/tests/main.nf.test.snap b/modules/nf-core/umitools/extract/tests/main.nf.test.snap deleted file mode 100644 index b115905..0000000 --- a/modules/nf-core/umitools/extract/tests/main.nf.test.snap +++ /dev/null @@ -1,167 +0,0 @@ -{ - "pair end - stub": { - "content": [ - { - "0": [ - [ - { - "id": "test", - "single_end": false - }, - [ - "test.umi_extract_1.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", - "test.umi_extract_2.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" - ] - ] - ], - "1": [ - [ - { - "id": "test", - "single_end": false - }, - "test.umi_extract.log:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "2": [ - "versions.yml:md5,568d243174c081a0301e74ed42e59b48" - ], - "log": [ - [ - { - "id": "test", - "single_end": false - }, - "test.umi_extract.log:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "reads": [ - [ - { - "id": "test", - "single_end": false - }, - [ - "test.umi_extract_1.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", - "test.umi_extract_2.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" - ] - ] - ], - "versions": [ - "versions.yml:md5,568d243174c081a0301e74ed42e59b48" - ] - } - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" - }, - "timestamp": "2024-07-02T15:05:20.008312" - }, - "single end - stub": { - "content": [ - { - "0": [ - [ - { - "id": "test", - "single_end": true - }, - "test.umi_extract.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" - ] - ], - "1": [ - [ - { - "id": "test", - "single_end": true - }, - "test.umi_extract.log:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "2": [ - "versions.yml:md5,568d243174c081a0301e74ed42e59b48" - ], - "log": [ - [ - { - "id": "test", - "single_end": true - }, - "test.umi_extract.log:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "reads": [ - [ - { - "id": "test", - "single_end": true - }, - "test.umi_extract.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" - ] - ], - "versions": [ - "versions.yml:md5,568d243174c081a0301e74ed42e59b48" - ] - } - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" - }, - "timestamp": "2024-07-02T15:04:12.145999" - }, - "pair end": { - "content": [ - "test.umi_extract_1.fastq.gz", - "test.umi_extract_2.fastq.gz", - [ - [ - { - "id": "test", - "single_end": false - }, - "test.umi_extract.log" - ] - ], - [ - "versions.yml:md5,568d243174c081a0301e74ed42e59b48" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" - }, - "timestamp": "2024-07-02T15:21:09.578031" - }, - "single end": { - "content": [ - [ - [ - { - "id": "test", - "single_end": true - }, - "test.umi_extract.fastq.gz" - ] - ], - [ - [ - { - "id": "test", - "single_end": true - }, - "test.umi_extract.log" - ] - ], - [ - "versions.yml:md5,568d243174c081a0301e74ed42e59b48" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" - }, - "timestamp": "2024-07-02T15:03:52.464606" - } -} \ No newline at end of file diff --git a/modules/nf-core/umitools/extract/tests/nextflow.config b/modules/nf-core/umitools/extract/tests/nextflow.config deleted file mode 100644 index c866f5a..0000000 --- a/modules/nf-core/umitools/extract/tests/nextflow.config +++ /dev/null @@ -1,9 +0,0 @@ -process { - - publishDir = { "${params.outdir}/${task.process.tokenize(':')[-1].tokenize('_')[0].toLowerCase()}" } - - withName: UMITOOLS_EXTRACT { - ext.args = '--bc-pattern="NNNN"' - } - -} diff --git a/modules/nf-core/umitools/extract/tests/tags.yml b/modules/nf-core/umitools/extract/tests/tags.yml deleted file mode 100644 index c3fb23d..0000000 --- a/modules/nf-core/umitools/extract/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -umitools/extract: - - modules/nf-core/umitools/extract/** diff --git a/nextflow.config b/nextflow.config index 57d8d4e..49104dd 100644 --- a/nextflow.config +++ b/nextflow.config @@ -1,107 +1,270 @@ +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + PlantandFoodResearch/genepal Nextflow config file +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Default config options for all compute environments +---------------------------------------------------------------------------------------- +*/ + +// Global default params, used in configs params { - // Input/output options - input = null - protein_evidence = null - eggnogmapper_db_dir = null - eggnogmapper_tax_scope = 1 - rna_evidence = null - liftoff_annotations = null - orthofinder_annotations = null - outdir = "./results" - - // Repeat annotation options - repeat_annotator = 'repeatmodeler' - save_annotated_te_lib = false - edta_is_sensitive = false - repeatmasker_save_outputs = false - - // RNASeq pre-processing options - skip_fastqc = false - skip_fastp = false - min_trimmed_reads = 10000 - extra_fastp_args = null - save_trimmed = false - remove_ribo_rna = false - save_non_ribo_reads = false - ribo_database_manifest = "${projectDir}/assets/rrna-db-defaults.txt" - - // RNAseq alignment options - star_max_intron_length = 16000 - star_align_extra_args = null - star_save_outputs = false - save_cat_bam = false - - // Annotation options - braker_extra_args = null - braker_save_outputs = false - liftoff_coverage = 0.9 - liftoff_identity = 0.9 - allow_isoforms = true - enforce_full_intron_support = true - filter_liftoff_by_hints = true - eggnogmapper_evalue = 0.00001 - eggnogmapper_pident = 35 - eggnogmapper_purge_nohits = false - - // Evaluation options - busco_skip = false - busco_lineage_datasets = 'eukaryota_odb10' - - // Max job request options - max_cpus = 12 - max_memory = '72.GB' - max_time = '7.day' - - // Infrastructure options - validationSkipDuplicateCheck= true - validationS3PathCheck = true + + // TODO nf-core: Specify your pipeline's command line flags + // Input options + input = null + + // MultiQC options + multiqc_config = null + multiqc_title = null + multiqc_logo = null + max_multiqc_email_size = '25.MB' + multiqc_methods_description = null + + // Boilerplate options + outdir = null + publish_dir_mode = 'copy' + email = null + email_on_fail = null + plaintext_email = false + monochrome_logs = false + hook_url = null + help = false + version = false + pipelines_testdata_base_path = 'https://raw.githubusercontent.com/nf-core/test-datasets/' + + // Config options + config_profile_name = null + config_profile_description = null + custom_config_version = 'master' + custom_config_base = "https://raw.githubusercontent.com/nf-core/configs/${params.custom_config_version}" + config_profile_contact = null + config_profile_url = null + + // Max resource options + // Defaults only, expecting to be overwritten + max_memory = '128.GB' + max_cpus = 16 + max_time = '240.h' + + // Schema validation default options + validationFailUnrecognisedParams = false + validationLenientMode = false + validationSchemaIgnoreParams = 'genomes,igenomes_base' + validationShowHiddenParams = false + validate_params = true + } -includeConfig './conf/base.config' +// Load base.config by default for all pipelines +includeConfig 'conf/base.config' + +// Load nf-core custom profiles from different Institutions +try { + includeConfig "${params.custom_config_base}/nfcore_custom.config" +} catch (Exception e) { + System.err.println("WARNING: Could not load nf-core/config profiles: ${params.custom_config_base}/nfcore_custom.config") +} +// Load PlantandFoodResearch/genepal custom profiles from different institutions. +try { + includeConfig "${params.custom_config_base}/pipeline/genepal.config" +} catch (Exception e) { + System.err.println("WARNING: Could not load nf-core/config/genepal profiles: ${params.custom_config_base}/pipeline/genepal.config") +} profiles { - apptainer { - apptainer.enabled = true - apptainer.autoMounts = true - apptainer.registry = 'quay.io' + debug { + dumpHashes = true + process.beforeScript = 'echo $HOSTNAME' + cleanup = false + nextflow.enable.configProcessNamesValidation = true + } + conda { + conda.enabled = true + docker.enabled = false + singularity.enabled = false + podman.enabled = false + shifter.enabled = false + charliecloud.enabled = false + conda.channels = ['conda-forge', 'bioconda', 'defaults'] + apptainer.enabled = false + } + mamba { + conda.enabled = true + conda.useMamba = true + docker.enabled = false + singularity.enabled = false + podman.enabled = false + shifter.enabled = false + charliecloud.enabled = false + apptainer.enabled = false } - docker { docker.enabled = true + conda.enabled = false + singularity.enabled = false + podman.enabled = false + shifter.enabled = false + charliecloud.enabled = false + apptainer.enabled = false + docker.runOptions = '-u $(id -u):$(id -g)' + } + arm { docker.runOptions = '-u $(id -u):$(id -g) --platform=linux/amd64' - docker.registry = 'quay.io' } - - test { includeConfig 'conf/test.config' } + singularity { + singularity.enabled = true + singularity.autoMounts = true + conda.enabled = false + docker.enabled = false + podman.enabled = false + shifter.enabled = false + charliecloud.enabled = false + apptainer.enabled = false + } + podman { + podman.enabled = true + conda.enabled = false + docker.enabled = false + singularity.enabled = false + shifter.enabled = false + charliecloud.enabled = false + apptainer.enabled = false + } + shifter { + shifter.enabled = true + conda.enabled = false + docker.enabled = false + singularity.enabled = false + podman.enabled = false + charliecloud.enabled = false + apptainer.enabled = false + } + charliecloud { + charliecloud.enabled = true + conda.enabled = false + docker.enabled = false + singularity.enabled = false + podman.enabled = false + shifter.enabled = false + apptainer.enabled = false + } + apptainer { + apptainer.enabled = true + apptainer.autoMounts = true + conda.enabled = false + docker.enabled = false + singularity.enabled = false + podman.enabled = false + shifter.enabled = false + charliecloud.enabled = false + } + wave { + apptainer.ociAutoPull = true + singularity.ociAutoPull = true + wave.enabled = true + wave.freeze = true + wave.strategy = 'conda,container' + } + gitpod { + executor.name = 'local' + executor.cpus = 4 + executor.memory = 8.GB + } + test { includeConfig 'conf/test.config' } + test_full { includeConfig 'conf/test_full.config' } } +// Set default registry for Apptainer, Docker, Podman and Singularity independent of -profile +// Will not be used unless Apptainer / Docker / Podman / Singularity are enabled +// Set to your registry if you have a mirror of containers +apptainer.registry = 'quay.io' +docker.registry = 'quay.io' +podman.registry = 'quay.io' +singularity.registry = 'quay.io' + +// Nextflow plugins plugins { - id 'nf-validation@1.1.3' + id 'nf-validation@1.1.3' // Validation of pipeline parameters and creation of an input channel from a sample sheet } -def trace_timestamp = new java.util.Date().format( 'yyyy-MM-dd_HH-mm-ss') +// Export these variables to prevent local Python/R libraries from conflicting with those in the container +// The JULIA depot path has been adjusted to a fixed path `/usr/local/share/julia` that needs to be used for packages in the container. +// See https://apeltzer.github.io/post/03-julia-lang-nextflow/ for details on that. Once we have a common agreement on where to keep Julia packages, this is adjustable. + +env { + PYTHONNOUSERSITE = 1 + R_PROFILE_USER = "/.Rprofile" + R_ENVIRON_USER = "/.Renviron" + JULIA_DEPOT_PATH = "/usr/local/share/julia" +} + +// Capture exit codes from upstream processes when piping +process.shell = ['/bin/bash', '-euo', 'pipefail'] + +// Disable process selector warnings by default. Use debug profile to enable warnings. +nextflow.enable.configProcessNamesValidation = false + +def trace_timestamp = new java.util.Date().format( 'yyyy-MM-dd_HH-mm-ss') timeline { - enabled = true - file = "${params.outdir}/pipeline_info/execution_timeline_${trace_timestamp}.html" + enabled = true + file = "${params.outdir}/pipeline_info/execution_timeline_${trace_timestamp}.html" } report { - enabled = true - file = "${params.outdir}/pipeline_info/execution_report_${trace_timestamp}.html" + enabled = true + file = "${params.outdir}/pipeline_info/execution_report_${trace_timestamp}.html" } trace { - enabled = true - file = "${params.outdir}/pipeline_info/execution_trace_${trace_timestamp}.txt" + enabled = true + file = "${params.outdir}/pipeline_info/execution_trace_${trace_timestamp}.txt" +} +dag { + enabled = true + file = "${params.outdir}/pipeline_info/pipeline_dag_${trace_timestamp}.html" } manifest { - name = 'genepal' - author = """Usman Rashid, Jason Shiller""" - homePage = 'https://github.com/PlantandFoodResearch/genepal' - description = """A NextFlow pipeline for single genome and pan-genome annotation""" - mainScript = 'main.nf' - nextflowVersion = '!>=23.04.4' - version = '0.4.0+dev' - doi = '' + name = 'PlantandFoodResearch/genepal' + author = """Usman Rashid, Jason Shiller""" + homePage = 'https://github.com/PlantandFoodResearch/genepal' + description = """A Nextflow pipeline for single genome and pan-genome annotation""" + mainScript = 'main.nf' + nextflowVersion = '!>=23.04.0' + version = '1.0dev' + doi = '' } -includeConfig './conf/modules.config' +// Load modules.config for DSL2 module specific options +includeConfig 'conf/modules.config' + +// Function to ensure that resource requirements don't go beyond +// a maximum limit +def check_max(obj, type) { + if (type == 'memory') { + try { + if (obj.compareTo(params.max_memory as nextflow.util.MemoryUnit) == 1) + return params.max_memory as nextflow.util.MemoryUnit + else + return obj + } catch (all) { + println " ### ERROR ### Max memory '${params.max_memory}' is not valid! Using default value: $obj" + return obj + } + } else if (type == 'time') { + try { + if (obj.compareTo(params.max_time as nextflow.util.Duration) == 1) + return params.max_time as nextflow.util.Duration + else + return obj + } catch (all) { + println " ### ERROR ### Max time '${params.max_time}' is not valid! Using default value: $obj" + return obj + } + } else if (type == 'cpus') { + try { + return Math.min( obj, params.max_cpus as int ) + } catch (all) { + println " ### ERROR ### Max cpus '${params.max_cpus}' is not valid! Using default value: $obj" + return obj + } + } +} diff --git a/nextflow_schema.json b/nextflow_schema.json index 13706a9..e3e0f04 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -1,258 +1,93 @@ { "$schema": "http://json-schema.org/draft-07/schema", - "$id": "https://raw.githubusercontent.com/plantandfoodresearch/genepal/master/nextflow_schema.json", - "title": "plantandfoodresearch/genepal pipeline parameters", - "description": "A NextFlow pipeline for single genome and pan-genome annotation", + "$id": "https://raw.githubusercontent.com/PlantandFoodResearch/genepal/master/nextflow_schema.json", + "title": "PlantandFoodResearch/genepal pipeline parameters", + "description": "A Nextflow pipeline for single genome and pan-genome annotation", "type": "object", "definitions": { "input_output_options": { "title": "Input/output options", "type": "object", "fa_icon": "fas fa-terminal", - "description": "", - "required": ["input", "protein_evidence", "outdir"], + "description": "Define where the pipeline should find input data and save output data.", + "required": ["input", "outdir"], "properties": { "input": { "type": "string", "format": "file-path", - "mimetype": "text/csv", + "exists": true, "schema": "assets/schema_input.json", - "pattern": "^\\S+\\.csv$", - "description": "Target assemblies listed in a CSV sheet", - "fa_icon": "fas fa-file-csv" - }, - "protein_evidence": { - "type": "string", - "description": "Protein evidence provided as a fasta file or multiple fasta files listed in a plain txt file", - "format": "file-path", - "pattern": "^\\S+\\.(txt|fa|faa|fna|fsa|fas|fasta)(\\.gz)?$", - "fa_icon": "far fa-file-alt" - }, - "eggnogmapper_db_dir": { - "type": "string", - "description": "Eggnogmapper database directory", - "format": "directory-path" - }, - "eggnogmapper_tax_scope": { - "type": "integer", - "description": "Eggnogmapper taxonomy scopre. Eukaryota: 2759, Viridiplantae: 33090, Archaea: 2157, Bacteria: 2, root: 1", - "minimum": 1, - "default": 1 - }, - "rna_evidence": { - "type": "string", - "format": "file-path", - "mimetype": "text/csv", - "schema": "assets/schema_rna.json", - "pattern": "^\\S+\\.csv$", - "fa_icon": "fas fa-file-csv", - "description": "FASTQ/BAM samples listed in a CSV sheet" - }, - "liftoff_annotations": { - "type": "string", - "format": "file-path", "mimetype": "text/csv", - "schema": "assets/schema_liftoff.json", "pattern": "^\\S+\\.csv$", - "description": "Reference annotations listed in a CSV sheet", - "fa_icon": "fas fa-file-csv" - }, - "orthofinder_annotations": { - "type": "string", - "format": "file-path", - "mimetype": "text/csv", - "schema": "/assets/schema_orthofinder.json", - "pattern": "^\\S+\\.csv$", - "description": "Additional annotations for orthology listed in a CSV sheet", + "description": "Path to comma-separated file containing information about the samples in the experiment.", + "help_text": "You will need to create a design file with information about the samples in your experiment before running the pipeline. Use this parameter to specify its location. It has to be a comma-separated file with 3 columns, and a header row.", "fa_icon": "fas fa-file-csv" }, "outdir": { "type": "string", "format": "directory-path", - "description": "The output directory where the results will be saved", - "fa_icon": "fas fa-folder-open", - "default": "./results" - } - } - }, - "repeat_annotation_options": { - "title": "Repeat annotation options", - "type": "object", - "description": "", - "default": "", - "properties": { - "repeat_annotator": { - "type": "string", - "default": "repeatmodeler", - "enum": ["edta", "repeatmodeler"], - "description": "'edta' or 'repeatmodeler'" - }, - "save_annotated_te_lib": { - "type": "boolean", - "description": "Save annotated TE library or not?" - }, - "edta_is_sensitive": { - "type": "boolean", - "description": "Use '--sensitive 1' flag with EDTA or not?" - }, - "repeatmasker_save_outputs": { - "type": "boolean", - "description": "Save the repeat-masked genome or not?" - } - } - }, - "rnaseq_pre_processing_options": { - "title": "RNASeq pre-processing options", - "type": "object", - "description": "", - "default": "", - "properties": { - "skip_fastqc": { - "type": "boolean", - "description": "Skip FASTQC or not?" - }, - "skip_fastp": { - "type": "boolean", - "description": "Skip trimming by FASTQP or not?" - }, - "min_trimmed_reads": { - "type": "integer", - "default": 10000, - "description": "Exclude a sample if its reads after trimming are below this number", - "minimum": 0 + "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" }, - "extra_fastp_args": { + "email": { "type": "string", - "description": "Extra FASTP arguments" - }, - "save_trimmed": { - "type": "boolean", - "description": "Save FASTQ files after trimming or not?" - }, - "remove_ribo_rna": { - "type": "boolean", - "description": "Remove Ribosomal RNA or not?" + "description": "Email address for completion summary.", + "fa_icon": "fas fa-envelope", + "help_text": "Set this parameter to your e-mail address to get a summary e-mail with details of the run sent to you when the workflow exits. If set in your user config file (`~/.nextflow/config`) then you don't need to specify this on the command line for every run.", + "pattern": "^([a-zA-Z0-9_\\-\\.]+)@([a-zA-Z0-9_\\-\\.]+)\\.([a-zA-Z]{2,5})$" }, - "save_non_ribo_reads": { - "type": "boolean", - "description": "Save FASTQ files after Ribosomal RNA removal or not?" - }, - "ribo_database_manifest": { + "multiqc_title": { "type": "string", - "default": "${projectDir}/assets/rrna-db-defaults.txt", - "description": "Ribosomal RNA fastas listed in a text sheet", - "format": "file-path", - "mimetype": "text/txt" + "description": "MultiQC report title. Printed as page header, used for filename if not otherwise specified.", + "fa_icon": "fas fa-file-signature" } } }, - "rnaseq_alignment_options": { - "title": "RNAseq alignment options", + "institutional_config_options": { + "title": "Institutional config options", "type": "object", - "description": "", - "default": "", + "fa_icon": "fas fa-university", + "description": "Parameters used to describe centralised config profiles. These should not be edited.", + "help_text": "The centralised nf-core configuration profiles use a handful of pipeline parameters to describe themselves. This information is then printed to the Nextflow log when you run a pipeline. You should not need to change these values when you run a pipeline.", "properties": { - "star_max_intron_length": { - "type": "integer", - "default": 16000, - "minimum": 0, - "description": "Maximum intron length for STAR alignment" - }, - "star_align_extra_args": { + "custom_config_version": { "type": "string", - "description": "EXTRA arguments for STAR" - }, - "star_save_outputs": { - "type": "boolean", - "description": "Save BAM files from STAR or not?" + "description": "Git commit id for Institutional configs.", + "default": "master", + "hidden": true, + "fa_icon": "fas fa-users-cog" }, - "save_cat_bam": { - "type": "boolean", - "description": "SAVE a concatenated BAM file per assembly or not?" - } - } - }, - "annotation_options": { - "title": "Annotation options", - "type": "object", - "description": "", - "default": "", - "properties": { - "braker_extra_args": { + "custom_config_base": { "type": "string", - "description": "Extra arguments for BRAKER" + "description": "Base directory for Institutional configs.", + "default": "https://raw.githubusercontent.com/nf-core/configs/master", + "hidden": true, + "help_text": "If you're running offline, Nextflow will not be able to fetch the institutional config files from the internet. If you don't need them, then this is not a problem. If you do need them, you should download the files from the repo and tell Nextflow where to find them with this parameter.", + "fa_icon": "fas fa-users-cog" }, - "braker_save_outputs": { - "type": "boolean", - "description": "Save BRAKER files", - "fa_icon": "fas fa-question-circle" - }, - "liftoff_coverage": { - "type": "number", - "default": 0.9, - "minimum": 0, - "maximum": 1, - "description": "Liftoff coverage parameter" - }, - "liftoff_identity": { - "type": "number", - "default": 0.9, - "description": "Liftoff identity parameter" - }, - "allow_isoforms": { - "type": "boolean", - "default": true, - "description": "Allow multiple isoforms for gene models", - "fa_icon": "fas fa-question-circle" - }, - "enforce_full_intron_support": { - "type": "boolean", - "default": true, - "fa_icon": "fas fa-question-circle", - "description": "Require every model to have external evidence for all its introns" - }, - "filter_liftoff_by_hints": { - "type": "boolean", - "default": true, - "fa_icon": "fas fa-question-circle", - "description": "Use BRAKER hints to filter Liftoff models" - }, - "eggnogmapper_evalue": { - "type": "number", - "default": 1e-5, - "description": "Only report alignments below or equal the e-value threshold" + "config_profile_name": { + "type": "string", + "description": "Institutional config name.", + "hidden": true, + "fa_icon": "fas fa-users-cog" }, - "eggnogmapper_pident": { - "type": "integer", - "default": 35, - "description": "Only report alignments above or equal to the given percentage of identity (0-100)", - "minimum": 0, - "maximum": 100 + "config_profile_description": { + "type": "string", + "description": "Institutional config description.", + "hidden": true, + "fa_icon": "fas fa-users-cog" }, - "eggnogmapper_purge_nohits": { - "type": "boolean", - "description": "Purge transcripts which do not have a hit against eggnog" - } - } - }, - "evaluation_options": { - "title": "Evaluation options", - "type": "object", - "description": "", - "default": "", - "fa_icon": "fas fa-balance-scale-right", - "properties": { - "busco_skip": { - "type": "boolean", - "fa_icon": "fas fa-fast-forward", - "description": "Skip evaluation by BUSCO" + "config_profile_contact": { + "type": "string", + "description": "Institutional config contact information.", + "hidden": true, + "fa_icon": "fas fa-users-cog" }, - "busco_lineage_datasets": { + "config_profile_url": { "type": "string", - "pattern": "^(\\w+_odb10\\s)*\\w+_odb10$", - "fa_icon": "fas fa-tree", - "description": "BUSCO lineages as a space-separated list: 'fungi_odb10 microsporidia_odb10'", - "default": "eukaryota_odb10" + "description": "Institutional config URL link.", + "hidden": true, + "fa_icon": "fas fa-users-cog" } } }, @@ -261,47 +96,150 @@ "type": "object", "fa_icon": "fab fa-acquisitions-incorporated", "description": "Set the top limit for requested resources for any single job.", + "help_text": "If you are running on a smaller system, a pipeline step requesting more resources than are available may cause the Nextflow to stop the run with an error. These options allow you to cap the maximum resources requested by any single job so that the pipeline will run on your system.\n\nNote that you can not _increase_ the resources requested by any job using these options. For that you will need your own configuration file. See [the nf-core website](https://nf-co.re/usage/configuration) for details.", "properties": { "max_cpus": { "type": "integer", "description": "Maximum number of CPUs that can be requested for any single job.", - "default": 12, + "default": 16, "fa_icon": "fas fa-microchip", - "hidden": true + "hidden": true, + "help_text": "Use to set an upper-limit for the CPU requirement for each process. Should be an integer e.g. `--max_cpus 1`" }, "max_memory": { "type": "string", "description": "Maximum amount of memory that can be requested for any single job.", - "default": "72.GB", + "default": "128.GB", "fa_icon": "fas fa-memory", "pattern": "^\\d+(\\.\\d+)?\\.?\\s*(K|M|G|T)?B$", - "hidden": true + "hidden": true, + "help_text": "Use to set an upper-limit for the memory requirement for each process. Should be a string in the format integer-unit e.g. `--max_memory '8.GB'`" }, "max_time": { "type": "string", "description": "Maximum amount of time that can be requested for any single job.", - "default": "7.day", + "default": "240.h", "fa_icon": "far fa-clock", "pattern": "^(\\d+\\.?\\s*(s|m|h|d|day)\\s*)+$", - "hidden": true + "hidden": true, + "help_text": "Use to set an upper-limit for the time requirement for each process. Should be a string in the format integer-unit e.g. `--max_time '2.h'`" } } }, - "infrastructure_options": { - "title": "Infrastructure options", + "generic_options": { + "title": "Generic options", "type": "object", "fa_icon": "fas fa-file-import", - "description": "", - "help_text": "", + "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": { - "validationSkipDuplicateCheck": { + "help": { "type": "boolean", - "default": true, + "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 + }, + "publish_dir_mode": { + "type": "string", + "default": "copy", + "description": "Method used to save pipeline results to output directory.", + "help_text": "The Nextflow `publishDir` option specifies which intermediate files should be saved to the output directory. This option tells the pipeline what method should be used to move these files. See [Nextflow docs](https://www.nextflow.io/docs/latest/process.html#publishdir) for details.", + "fa_icon": "fas fa-copy", + "enum": ["symlink", "rellink", "link", "copy", "copyNoFollow", "move"], + "hidden": true + }, + "email_on_fail": { + "type": "string", + "description": "Email address for completion summary, only when pipeline fails.", + "fa_icon": "fas fa-exclamation-triangle", + "pattern": "^([a-zA-Z0-9_\\-\\.]+)@([a-zA-Z0-9_\\-\\.]+)\\.([a-zA-Z]{2,5})$", + "help_text": "An email address to send a summary email to when the pipeline is completed - ONLY sent if the pipeline does not exit successfully.", "hidden": true }, - "validationS3PathCheck": { + "plaintext_email": { "type": "boolean", + "description": "Send plain-text email instead of HTML.", + "fa_icon": "fas fa-remove-format", + "hidden": true + }, + "max_multiqc_email_size": { + "type": "string", + "description": "File size limit when attaching MultiQC reports to summary emails.", + "pattern": "^\\d+(\\.\\d+)?\\.?\\s*(K|M|G|T)?B$", + "default": "25.MB", + "fa_icon": "fas fa-file-upload", + "hidden": true + }, + "monochrome_logs": { + "type": "boolean", + "description": "Do not use coloured log outputs.", + "fa_icon": "fas fa-palette", + "hidden": true + }, + "hook_url": { + "type": "string", + "description": "Incoming hook URL for messaging service", + "fa_icon": "fas fa-people-group", + "help_text": "Incoming hook URL for messaging service. Currently, MS Teams and Slack are supported.", + "hidden": true + }, + "multiqc_config": { + "type": "string", + "format": "file-path", + "description": "Custom config file to supply to MultiQC.", + "fa_icon": "fas fa-cog", + "hidden": true + }, + "multiqc_logo": { + "type": "string", + "description": "Custom logo file to supply to MultiQC. File name must also be set in the MultiQC config file", + "fa_icon": "fas fa-image", + "hidden": true + }, + "multiqc_methods_description": { + "type": "string", + "description": "Custom MultiQC yaml file containing HTML including a methods description.", + "fa_icon": "fas fa-cog" + }, + "validate_params": { + "type": "boolean", + "description": "Boolean whether to validate parameters against the schema at runtime", "default": true, + "fa_icon": "fas fa-check-square", + "hidden": true + }, + "validationShowHiddenParams": { + "type": "boolean", + "fa_icon": "far fa-eye-slash", + "description": "Show all params when using `--help`", + "hidden": true, + "help_text": "By default, parameters set as _hidden_ in the schema are not shown on the command line when a user runs with `--help`. Specifying this option will tell the pipeline to show all parameters." + }, + "validationFailUnrecognisedParams": { + "type": "boolean", + "fa_icon": "far fa-check-circle", + "description": "Validation of parameters fails when an unrecognised parameter is found.", + "hidden": true, + "help_text": "By default, when an unrecognised parameter is found, it returns a warinig." + }, + "validationLenientMode": { + "type": "boolean", + "fa_icon": "far fa-check-circle", + "description": "Validation of parameters in lenient more.", + "hidden": true, + "help_text": "Allows string values that are parseable as numbers or booleans. For further information see [JSONSchema docs](https://github.com/everit-org/json-schema#lenient-mode)." + }, + "pipelines_testdata_base_path": { + "type": "string", + "fa_icon": "far fa-check-circle", + "description": "Base URL or local path to location of pipeline test dataset files", + "default": "https://raw.githubusercontent.com/nf-core/test-datasets/", "hidden": true } } @@ -312,25 +250,13 @@ "$ref": "#/definitions/input_output_options" }, { - "$ref": "#/definitions/repeat_annotation_options" - }, - { - "$ref": "#/definitions/rnaseq_pre_processing_options" - }, - { - "$ref": "#/definitions/rnaseq_alignment_options" - }, - { - "$ref": "#/definitions/annotation_options" - }, - { - "$ref": "#/definitions/evaluation_options" + "$ref": "#/definitions/institutional_config_options" }, { "$ref": "#/definitions/max_job_request_options" }, { - "$ref": "#/definitions/infrastructure_options" + "$ref": "#/definitions/generic_options" } ] } diff --git a/pfr/params.json b/pfr/params.json deleted file mode 100644 index e547f98..0000000 --- a/pfr/params.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "input": "/workspace/genepal/test_data/assemblysheet.csv", - "protein_evidence": "/workspace/genepal/test_data/external-protein-fastas.txt", - "eggnogmapper_db_dir": "/workspace/ComparativeDataSources/emapperdb/5.0.2", - "eggnogmapper_tax_scope": 33090, - "rna_evidence": "/workspace/genepal/test_data/fastqsheet.csv", - "liftoff_annotations": "/workspace/genepal/test_data/liftoffannotations.csv" -} diff --git a/pfr/profile.config b/pfr/profile.config deleted file mode 100644 index 0d40c25..0000000 --- a/pfr/profile.config +++ /dev/null @@ -1,17 +0,0 @@ -profiles { - pfr { - process { - executor = 'slurm' - } - - apptainer { - envWhitelist = "APPTAINER_BINDPATH,APPTAINER_BIND" - cacheDir = "/workspace/genepal/singularity" - } - } -} - -// params { -// config_profile_name = 'Plant&Food profile' -// config_profile_description = 'Plant&Food profile using SLURM in combination with Apptainer' -// } diff --git a/pfr_genepal b/pfr_genepal deleted file mode 100644 index 3da5a74..0000000 --- a/pfr_genepal +++ /dev/null @@ -1,49 +0,0 @@ -#!/bin/bash -e - - -#SBATCH --job-name GENEPAL -#SBATCH --time=14-00:00:00 -#SBATCH --nodes=1 -#SBATCH --ntasks=1 -#SBATCH --cpus-per-task=1 -#SBATCH --output pfr_genepal.stdout -#SBATCH --error pfr_genepal.stderr -#SBATCH --mem=4G - -full_test_flag=0 - -# Parse command line options -while getopts "t" opt; do - case ${opt} in - t ) - full_test_flag=1 - ;; - \? ) - echo "Invalid option: $OPTARG" 1>&2 - exit 1 - ;; - esac -done -shift $((OPTIND -1)) - -ml unload perl -ml apptainer/1.1 -ml nextflow/23.04.4 - -export TMPDIR="/workspace/$USER/tmp" -export APPTAINER_BINDPATH="$APPTAINER_BINDPATH,$TMPDIR:$TMPDIR,$TMPDIR:/tmp" - -if [ $full_test_flag -eq 1 ]; then - nextflow \ - main.nf \ - -c pfr/profile.config \ - -profile pfr,apptainer,test_full \ - -resume -else - nextflow \ - main.nf \ - -c pfr/profile.config \ - -profile pfr,apptainer \ - -params-file pfr/params.json \ - -resume -fi diff --git a/pyproject.toml b/pyproject.toml deleted file mode 100644 index 5611062..0000000 --- a/pyproject.toml +++ /dev/null @@ -1,15 +0,0 @@ -# Config file for Python. Mostly used to configure linting of bin/*.py with Ruff. -# Should be kept the same as nf-core/tools to avoid fighting with template synchronisation. -[tool.ruff] -line-length = 120 -target-version = "py38" -cache-dir = "~/.cache/ruff" - -[tool.ruff.lint] -select = ["I", "E1", "E4", "E7", "E9", "F", "UP", "N"] - -[tool.ruff.lint.isort] -known-first-party = ["nf_core"] - -[tool.ruff.lint.per-file-ignores] -"__init__.py" = ["E402", "F401"] diff --git a/subworkflows/gallvp/fasta_edta_lai/main.nf b/subworkflows/gallvp/fasta_edta_lai/main.nf deleted file mode 100644 index 1d4dd85..0000000 --- a/subworkflows/gallvp/fasta_edta_lai/main.nf +++ /dev/null @@ -1,170 +0,0 @@ -include { CUSTOM_SHORTENFASTAIDS } from '../../../modules/gallvp/custom/shortenfastaids/main' -include { EDTA_EDTA } from '../../../modules/gallvp/edta/edta/main' -include { LTRRETRIEVER_LAI } from '../../../modules/gallvp/ltrretriever/lai/main' -include { CUSTOM_RESTOREGFFIDS } from '../../../modules/gallvp/custom/restoregffids/main' - -workflow FASTA_EDTA_LAI { - - take: - ch_fasta // channel: [ val(meta), fasta ] - ch_monoploid_seqs // channel: [ val(meta2), txt ]; Optional: Set to [] if not needed - // val(meta) from ch_fasta and val(meta2) from ch_monoploid_seqs are - // only required to have the same `id` - skip_lai // val(true|false) - - main: - ch_versions = Channel.empty() - - // Prapre input channels - ch_monoploid_seqs_plain = ( ch_monoploid_seqs ?: Channel.empty() ) - | filter { meta2, seqs -> seqs } - // Cater to channel: [ meta2, [] ] - | map { meta2, seqs -> [ meta2.id, seqs ] } - - // MOUDLE: CUSTOM_SHORTENFASTAIDS - CUSTOM_SHORTENFASTAIDS ( ch_fasta ) - - ch_short_ids_tsv = CUSTOM_SHORTENFASTAIDS.out.short_ids_tsv - ch_shortenfastaids_branch = ch_short_ids_tsv - | branch { meta, tsv -> - change: ! tsv.text.contains('IDs have acceptable length and character') - nonchange: tsv.text.contains('IDs have acceptable length and character') - } - - ch_short_ids_fasta = ch_shortenfastaids_branch.nonchange - | join( - ch_fasta - ) - | map { meta, tsv, fasta -> [ meta, fasta ] } - | mix( - ch_shortenfastaids_branch.change - | join( - CUSTOM_SHORTENFASTAIDS.out.short_ids_fasta - ) - | map { meta, tsv, fasta -> [ meta, fasta ] } - ) - - ch_versions = ch_versions.mix(CUSTOM_SHORTENFASTAIDS.out.versions.first()) - - // collectFile: Map monoploid seqs to short IDs - ch_short_monoploid_seqs = ch_short_ids_tsv - | map { meta, tsv -> [ meta.id, tsv ] } - | join(ch_monoploid_seqs_plain) - | map { id, tsv, seqs -> - map_monoploid_seqs_to_new_ids(id, tsv, seqs) - } - | collectFile(newLine:true) - | map { seqs -> - def id = seqs.name.split('.mapped.monoploid.seqs.txt')[0] - - [ id, seqs ] - } - | join( - ch_short_ids_tsv - | map { meta, tsv -> [ meta.id, meta, tsv ] } - ) - | map { id, seqs, meta, tsv -> [ meta, seqs ] } - - // MODULE: EDTA_EDTA - EDTA_EDTA( - ch_short_ids_fasta, - [], - [], - [], - [] - ) - - ch_pass_list = EDTA_EDTA.out.pass_list - ch_out_file = EDTA_EDTA.out.out_file - ch_pass_out = ch_pass_list.join(ch_out_file) - ch_te_lib_fasta = EDTA_EDTA.out.te_lib_fasta - ch_te_anno_gff3 = EDTA_EDTA.out.te_anno_gff3 - ch_versions = ch_versions.mix(EDTA_EDTA.out.versions.first()) - - ch_short_ids_fasta_mono = ch_short_ids_fasta - | join( - ch_short_monoploid_seqs, - by:0, - remainder: true - ) - // Danger! This partial join can fail - | filter { meta, fasta, seqs -> fasta } - // This filter safeguards against fail on upstream - // process failure: https://github.com/nextflow-io/nextflow/issues/5043 - // fasta may come from upstream processes - // seqs also comes from upstream processes, it is optional - // and may not be present for some of the combinations - | map { meta, fasta, seqs -> [ meta, fasta, seqs ?: [] ] } - - ch_lai_inputs = skip_lai - ? Channel.empty() - : ch_short_ids_fasta_mono - | join( - ch_pass_out - ) - | map { meta, fasta, seqs, pass, out -> - [ meta, fasta, pass, out, seqs ] - } - LTRRETRIEVER_LAI( - ch_lai_inputs.map { meta, fasta, pass, out, seqs -> [ meta, fasta ] }, - ch_lai_inputs.map { meta, fasta, pass, out, seqs -> pass }, - ch_lai_inputs.map { meta, fasta, pass, out, seqs -> out }, - ch_lai_inputs.map { meta, fasta, pass, out, seqs -> seqs } - ) - - ch_lai_log = LTRRETRIEVER_LAI.out.log - ch_lai_out = LTRRETRIEVER_LAI.out.lai_out - ch_versions = ch_versions.mix(LTRRETRIEVER_LAI.out.versions.first()) - - // MODULE: CUSTOM_RESTOREGFFIDS - ch_gff_tsv_branch = ch_te_anno_gff3.join(ch_short_ids_tsv) - | branch { meta, gff, tsv -> - change: ! tsv.text.contains('IDs have acceptable length and character') - nochange: tsv.text.contains('IDs have acceptable length and character') - } - - CUSTOM_RESTOREGFFIDS ( - ch_gff_tsv_branch.change.map { meta, gff, tsv -> [ meta, gff ] }, - ch_gff_tsv_branch.change.map { meta, gff, tsv -> tsv } - ) - - ch_restored_gff = ch_gff_tsv_branch.nochange - | map { meta, gff, tsv -> [ meta, gff ] } - | mix(CUSTOM_RESTOREGFFIDS.out.restored_ids_gff3) - - ch_versions = ch_versions.mix(CUSTOM_RESTOREGFFIDS.out.versions.first()) - - emit: - te_lib_fasta = ch_te_lib_fasta // channel: [ val(meta), fasta ] - te_anno_gff3 = ch_restored_gff // channel: [ val(meta), gff ] - lai_log = ch_lai_log // channel: [ val(meta), log ] - lai_out = ch_lai_out // channel: [ val(meta), out ] - versions = ch_versions // channel: [ versions.yml ] -} - -def map_monoploid_seqs_to_new_ids(id, short_ids_tsv, monoploid_seqs) { - - def short_ids_head = short_ids_tsv.text.tokenize('\n')[0] - - if (short_ids_head == "IDs have acceptable length and character. No change required.") { - return [ "${id}.mapped.monoploid.seqs.txt" ] + monoploid_seqs.text.tokenize('\n') - } - - def orig_to_new_ids = [:] - short_ids_tsv.text.eachLine { line -> - def (original_id, renamed_id) = line.tokenize('\t') - orig_to_new_ids[original_id] = renamed_id - } - - def mapped_ids = [] - monoploid_seqs.text.eachLine { original_id -> - if (!orig_to_new_ids[original_id]) { - error "Faild to find $original_id in ${short_ids_tsv}" + - "\nThe short_ids_tsv file is malformed!" - } - - mapped_ids.add(orig_to_new_ids[original_id]) - } - - return [ "${id}.mapped.monoploid.seqs.txt" ] + mapped_ids -} diff --git a/subworkflows/gallvp/fasta_edta_lai/meta.yml b/subworkflows/gallvp/fasta_edta_lai/meta.yml deleted file mode 100644 index c356ce7..0000000 --- a/subworkflows/gallvp/fasta_edta_lai/meta.yml +++ /dev/null @@ -1,69 +0,0 @@ -# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/subworkflows/yaml-schema.json -name: "fasta_edta_lai" -description: | - Performs extensive de-novo transposable element annotation with EDTA and optionally estimates repeat-space completeness with LAI -keywords: - - genomics - - genome - - annotation - - repeat - - transposons - - stats - - qc -components: - - edta/edta - - custom/restoregffids - - ltrretriever/lai - - custom/shortenfastaids -input: - - ch_fasta: - type: file - description: | - Channel for the assembly fasta file - Structure: [ val(meta), path(fasta) ] - pattern: "*.{fsa/fa/fasta}" - - ch_monoploid_seqs: - type: file - description: | - Channel for providing a list of monoploid sequences - for correct estimation of LAI for polyploid genomes. - This parameter is useful when all the haplotypes are - stored in a single fasta file. - Structure: [ val(meta), path(txt) ] - pattern: "*.txt" - - skip_lai: - type: boolean - description: | - Skip LAI estimation - Structure: [ val(boolean) ] -output: - - te_lib_fasta: - type: file - description: A non-redundant TE library in fasta format - pattern: "*.EDTA.TElib.fa" - - te_anno_gff3: - type: file - description: A gff3 file containing both structurally intact and fragmented TE annotations - pattern: "*.EDTA.TEanno.gff3" - - lai_log: - type: file - description: | - Log from LAI - Structure: [ val(meta), path(log) ] - pattern: "*.LAI.log" - - lai_out: - type: file - description: | - LAI output - Structure: [ val(meta), path(out) ] - pattern: "*.LAI.out" - - versions: - type: file - description: | - File containing software versions - Structure: [ path(versions.yml) ] - pattern: "versions.yml" -authors: - - "@GallVp" -maintainers: - - "@GallVp" diff --git a/subworkflows/gallvp/fasta_edta_lai/tests/main.nf.test b/subworkflows/gallvp/fasta_edta_lai/tests/main.nf.test deleted file mode 100644 index 0b56ee5..0000000 --- a/subworkflows/gallvp/fasta_edta_lai/tests/main.nf.test +++ /dev/null @@ -1,79 +0,0 @@ -nextflow_workflow { - - name "Test Workflow FASTA_EDTA_LAI" - script "../main.nf" - workflow "FASTA_EDTA_LAI" - config "./nextflow.config" - - tag "subworkflows" - tag "subworkflows_gallvp" - tag "subworkflows/fasta_edta_lai" - tag "fasta_edta_lai" - tag "modules/nf-core/gunzip" - tag "custom/shortenfastaids" - tag "edta/edta" - tag "ltrretriever/lai" - tag "custom/restoregffids" - - setup { - run("GUNZIP") { - script "../../../../modules/nf-core/gunzip" - - process { - """ - input[0] = [ - [ id:'test' ], - file(params.modules_testdata_base_path + 'genomics/eukaryotes/actinidia_chinensis/genome/chr1/genome.fasta.gz', checkIfExists: true) - ] - """ - } - } - } - - test("actinidia_chinensis-genome_1_fasta_gz") { - - when { - workflow { - """ - input[0] = GUNZIP.out.gunzip - input[1] = [] - input[2] = false - """ - } - } - - then { - assertAll( - { assert workflow.success }, - { assert file(workflow.out.te_anno_gff3[0][1]).text.contains('Copia_LTR_retrotransposon') }, - { assert file(workflow.out.lai_log[0][1]).text.contains('Calculate LAI:') }, - { assert file(workflow.out.lai_log[0][1]).text.contains('Done!') }, - { assert Math.abs(Float.parseFloat(path(workflow.out.lai_out[0][1]).text.split("\n")[1].split("\t")[6]) - 31.87) <= 2.0 }, - { assert file(workflow.out.te_lib_fasta[0][1]).text.contains('#LTR/Copia') }, - { assert snapshot(workflow.out.versions).match() } - ) - } - } - - test("actinidia_chinensis-genome_1_fasta_gz-stub") { - - options '-stub' - - when { - workflow { - """ - input[0] = GUNZIP.out.gunzip - input[1] = [] - input[2] = false - """ - } - } - - then { - assertAll( - { assert workflow.success }, - { assert snapshot(workflow.out).match() } - ) - } - } -} \ No newline at end of file diff --git a/subworkflows/gallvp/fasta_edta_lai/tests/main.nf.test.snap b/subworkflows/gallvp/fasta_edta_lai/tests/main.nf.test.snap deleted file mode 100644 index 532ddd5..0000000 --- a/subworkflows/gallvp/fasta_edta_lai/tests/main.nf.test.snap +++ /dev/null @@ -1,101 +0,0 @@ -{ - "actinidia_chinensis-genome_1_fasta_gz-stub": { - "content": [ - { - "0": [ - [ - { - "id": "test" - }, - "test.EDTA.TElib.fa:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "1": [ - [ - { - "id": "test" - }, - "test.EDTA.TEanno.gff3:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "2": [ - [ - { - "id": "test" - }, - "test.LAI.log:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "3": [ - [ - { - "id": "test" - }, - "test.LAI.out:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "4": [ - "versions.yml:md5,0d4bc49e94acb8995ca552d4e666e3ce", - "versions.yml:md5,65666e975bdfd71978843ca963e84d0c", - "versions.yml:md5,754bb19f86be761d90c002a0af2faf1c" - ], - "lai_log": [ - [ - { - "id": "test" - }, - "test.LAI.log:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "lai_out": [ - [ - { - "id": "test" - }, - "test.LAI.out:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "te_anno_gff3": [ - [ - { - "id": "test" - }, - "test.EDTA.TEanno.gff3:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "te_lib_fasta": [ - [ - { - "id": "test" - }, - "test.EDTA.TElib.fa:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "versions": [ - "versions.yml:md5,0d4bc49e94acb8995ca552d4e666e3ce", - "versions.yml:md5,65666e975bdfd71978843ca963e84d0c", - "versions.yml:md5,754bb19f86be761d90c002a0af2faf1c" - ] - } - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" - }, - "timestamp": "2024-06-04T14:00:09.252745" - }, - "actinidia_chinensis-genome_1_fasta_gz": { - "content": [ - [ - "versions.yml:md5,0d4bc49e94acb8995ca552d4e666e3ce", - "versions.yml:md5,65666e975bdfd71978843ca963e84d0c", - "versions.yml:md5,754bb19f86be761d90c002a0af2faf1c" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-05-10T13:22:28.063183" - } -} \ No newline at end of file diff --git a/subworkflows/gallvp/fasta_edta_lai/tests/nextflow.config b/subworkflows/gallvp/fasta_edta_lai/tests/nextflow.config deleted file mode 100644 index 1fa6315..0000000 --- a/subworkflows/gallvp/fasta_edta_lai/tests/nextflow.config +++ /dev/null @@ -1,5 +0,0 @@ -process { - withName: EDTA_EDTA { - ext.args = '--anno 1' - } -} diff --git a/subworkflows/gallvp/fasta_gxf_busco_plot/main.nf b/subworkflows/gallvp/fasta_gxf_busco_plot/main.nf deleted file mode 100644 index 3e8ad28..0000000 --- a/subworkflows/gallvp/fasta_gxf_busco_plot/main.nf +++ /dev/null @@ -1,169 +0,0 @@ -include { BUSCO_BUSCO as BUSCO_ASSEMBLY } from '../../../modules/gallvp/busco/busco/main' -include { BUSCO_GENERATEPLOT as PLOT_ASSEMBLY } from '../../../modules/gallvp/busco/generateplot/main' -include { GFFREAD as EXTRACT_PROTEINS } from '../../../modules/gallvp/gffread/main' -include { BUSCO_BUSCO as BUSCO_ANNOTATION } from '../../../modules/gallvp/busco/busco/main' -include { BUSCO_GENERATEPLOT as PLOT_ANNOTATION } from '../../../modules/gallvp/busco/generateplot/main' - -workflow FASTA_GXF_BUSCO_PLOT { - - take: - ch_fasta // channel: [ val(meta), fasta ] - ch_gxf // channel: [ val(meta2), gxf ]; gxf ~ gff | gff3 | gtf - // - // Meta and meta2 should have same id - - val_mode // val(mode); BUSCO mode to apply to ch_fasta - // - genome, for genome assemblies (DNA) - // - transcriptome, for transcriptome assemblies (DNA) - // - proteins, for annotated gene sets (protein) - // - // If mode is genome, annotations from ch_gxf are evaluated with - // mode proteins, otherwise, evaluation of the annotations is skipped - // - val_lineages // [ val(lineage) ] - val_busco_lineages_path // val(path); Optional; Set to [] if not needed - val_busco_config // val(path); Optional; Set to [] if not needed - - main: - ch_versions = Channel.empty() - ch_db_path = val_busco_lineages_path - ? Channel.of(file(val_busco_lineages_path, checkIfExists: true)) - : Channel.of(null) - ch_config_path = val_busco_config - ? Channel.of(file(val_busco_config, checkIfExists: true)) - : Channel.of(null) - - // MODULE: BUSCO_BUSCO as BUSCO_ASSEMBLY - ch_busco_assembly_inputs = ch_fasta - | combine( - Channel.of(val_mode) - ) - | combine( - Channel.fromList(val_lineages) - ) - | map { meta, fasta, mode, lineage -> - [ - meta + [ mode:mode, lineage:lineage ], - fasta, mode, lineage - ] - } - | combine( - ch_db_path - ) - | combine( - ch_config_path - ) - - BUSCO_ASSEMBLY( - ch_busco_assembly_inputs.map { meta, fasta, mode, lineage, db, config -> [ meta, fasta ] }, - ch_busco_assembly_inputs.map { meta, fasta, mode, lineage, db, config -> mode }, - ch_busco_assembly_inputs.map { meta, fasta, mode, lineage, db, config -> lineage }, - ch_busco_assembly_inputs.map { meta, fasta, mode, lineage, db, config -> db ?: [] }, - ch_busco_assembly_inputs.map { meta, fasta, mode, lineage, db, config -> config ?: [] } - ) - - ch_assembly_batch_summary = BUSCO_ASSEMBLY.out.batch_summary - ch_assembly_short_summaries_txt = BUSCO_ASSEMBLY.out.short_summaries_txt - ch_assembly_short_summaries_json = BUSCO_ASSEMBLY.out.short_summaries_json - ch_versions = ch_versions.mix(BUSCO_ASSEMBLY.out.versions.first()) - - // MODULE: BUSCO_GENERATEPLOT as PLOT_ASSEMBLY - ch_assembly_plot_inputs = ch_assembly_short_summaries_txt - | map { meta, txt -> - def lineage_name = meta.lineage.split('_odb')[0] - [ - "short_summary.specific.${meta.lineage}.${meta.id}_${lineage_name}.txt", - txt.text - ] - } - | collectFile - | collect - - PLOT_ASSEMBLY( ch_assembly_plot_inputs ) - - ch_assembly_png = PLOT_ASSEMBLY.out.png - ch_versions = ch_versions.mix(PLOT_ASSEMBLY.out.versions) - - // MODULE: GFFREAD as EXTRACT_PROTEINS - ch_gffread_inputs = ! ( val_mode == 'geno' || val_mode == 'genome' ) - ? Channel.empty() - : ch_fasta - | map { meta, fasta -> [ meta.id, meta, fasta ] } - | join( - ch_gxf.map { meta2, gxf -> [ meta2.id, gxf ] } - // Join with matching annotation - // to allow one annotations per fasta - ) - | map { id, meta, fasta, gxf -> [ meta, gxf, fasta ] } - EXTRACT_PROTEINS( - ch_gffread_inputs.map { meta, gxf, fasta -> [ meta, gxf ] }, - ch_gffread_inputs.map { meta, gxf, fasta -> fasta } - ) - - ch_proteins = EXTRACT_PROTEINS.out.gffread_fasta - ch_versions = ch_versions.mix(EXTRACT_PROTEINS.out.versions.first()) - - // MODULE: BUSCO_BUSCO as BUSCO_ANNOTATION - ch_busco_annotation_inputs = ch_proteins - | combine( - Channel.of('proteins') - ) - | combine( - Channel.fromList(val_lineages) - ) - | map { meta, fasta, mode, lineage -> - [ - meta + [ mode:mode, lineage:lineage ], - fasta, mode, lineage - ] - } - | combine( - ch_db_path - ) - | combine( - ch_config_path - ) - - BUSCO_ANNOTATION( - ch_busco_annotation_inputs.map { meta, fasta, mode, lineage, db, config -> [ meta, fasta ] }, - ch_busco_annotation_inputs.map { meta, fasta, mode, lineage, db, config -> mode }, - ch_busco_annotation_inputs.map { meta, fasta, mode, lineage, db, config -> lineage }, - ch_busco_annotation_inputs.map { meta, fasta, mode, lineage, db, config -> db ?: [] }, - ch_busco_annotation_inputs.map { meta, fasta, mode, lineage, db, config -> config ?: [] } - ) - - ch_annotation_batch_summary = BUSCO_ANNOTATION.out.batch_summary - ch_annotation_short_summaries_txt = BUSCO_ANNOTATION.out.short_summaries_txt - ch_annotation_short_summaries_json = BUSCO_ANNOTATION.out.short_summaries_json - ch_versions = ch_versions.mix(BUSCO_ANNOTATION.out.versions.first()) - - // MODULE: BUSCO_GENERATEPLOT as PLOT_ANNOTATION - ch_annotation_plot_inputs = ch_annotation_short_summaries_txt - | map { meta, txt -> - def lineage_name = meta.lineage.split('_odb')[0] - [ - "short_summary.specific.${meta.lineage}.${meta.id}_${lineage_name}.txt", - txt.text - ] - } - | collectFile - | collect - - PLOT_ANNOTATION( ch_annotation_plot_inputs ) - - ch_annotation_png = PLOT_ANNOTATION.out.png - ch_versions = ch_versions.mix(PLOT_ANNOTATION.out.versions) - - - emit: - assembly_batch_summary = ch_assembly_batch_summary // channel: [ meta3, txt ]; meta3 ~ meta + [ val(mode), val(lineage) ] - assembly_short_summaries_txt = ch_assembly_short_summaries_txt // channel: [ meta3, txt ] - assembly_short_summaries_json = ch_assembly_short_summaries_json // channel: [ meta3, json ] - assembly_png = ch_assembly_png // channel: [ png ] - annotation_batch_summary = ch_annotation_batch_summary // channel: [ meta3, txt ] - annotation_short_summaries_txt = ch_annotation_short_summaries_txt // channel: [ meta3, txt ] - annotation_short_summaries_json = ch_annotation_short_summaries_json // channel: [ meta3, json ] - annotation_png = ch_annotation_png // channel: [ png ] - versions = ch_versions // channel: [ versions.yml ] -} - diff --git a/subworkflows/gallvp/fasta_gxf_busco_plot/meta.yml b/subworkflows/gallvp/fasta_gxf_busco_plot/meta.yml deleted file mode 100644 index 9226357..0000000 --- a/subworkflows/gallvp/fasta_gxf_busco_plot/meta.yml +++ /dev/null @@ -1,106 +0,0 @@ -# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/subworkflows/yaml-schema.json -name: "fasta_gxf_busco_plot" -description: | - Runs BUSCO for input assemblies and their annotations in GFF/GFF3/GTF format, and creates summary plots using `BUSCO/generate_plot.py` script -keywords: - - genome - - annotation - - busco - - plot -components: - - busco/busco - - busco/generateplot - - gffread -input: - - ch_fasta: - type: file - description: | - Channel containing FASTA files - Structure:[ val(meta), fasta ] - pattern: "*.{fa,faa,fsa,fas,fasta}(.gz)?" - - ch_gxf: - type: file - description: | - Channel containing GFF/GFF3/GTF files - Structure:[ val(meta2), gxf ] - pattern: "*.{gff,gff3,gtf}" - - val_mode: - type: string - description: | - String containing BUSCO mode to apply to ch_fasta files - Structure:val(mode) - - val_lineages: - type: array - description: | - Array of strings representing BUSCO lineage datasets - Structure:[ val(lineage) ] - - val_busco_lineages_path: - type: path - description: | - Path where BUSCO lineages are located or downloaded if not already there. If this input is `[]`, - BUSCO will download the datasets in the task work directory - Structure:val(busco_lineages_path) - - val_busco_config: - type: path - description: | - Path to BUSCO config. It is optional and can be set to `[]` - Structure:val(busco_config) -output: - - assembly_batch_summary: - type: file - description: | - Channel containing BUSCO batch summaries corresponding to fasta files - Structure: [ val(meta), txt ] - pattern: "*.txt" - - assembly_short_summaries_txt: - type: file - description: | - Channel containing BUSCO short summaries corresponding to fasta files - Structure: [ val(meta), txt ] - pattern: "*.txt" - - assembly_short_summaries_json: - type: file - description: | - Channel containing BUSCO short summaries corresponding to fasta files - Structure: [ val(meta), json ] - pattern: "*.json" - - assembly_png: - type: file - description: | - Channel containing summary plot for assemblies - Structure: png - pattern: "*.png" - - annotation_batch_summary: - type: file - description: | - Channel containing BUSCO batch summaries corresponding to annotation files - Structure: [ val(meta), txt ] - pattern: "*.txt" - - annotation_short_summaries_txt: - type: file - description: | - Channel containing BUSCO short summaries corresponding to annotation files - Structure: [ val(meta), txt ] - pattern: "*.txt" - - annotation_short_summaries_json: - type: file - description: | - Channel containing BUSCO short summaries corresponding to annotation files - Structure: [ val(meta), json ] - pattern: "*.json" - - annotation_png: - type: file - description: | - Channel containing summary plot for annotations - Structure: png - pattern: "*.png" - - versions: - type: file - description: | - File containing software versions - Structure: [ path(versions.yml) ] - pattern: "versions.yml" -authors: - - "@GallVp" -maintainers: - - "@GallVp" diff --git a/subworkflows/gallvp/fasta_gxf_busco_plot/tests/main.nf.test b/subworkflows/gallvp/fasta_gxf_busco_plot/tests/main.nf.test deleted file mode 100644 index 783be86..0000000 --- a/subworkflows/gallvp/fasta_gxf_busco_plot/tests/main.nf.test +++ /dev/null @@ -1,104 +0,0 @@ -nextflow_workflow { - - name "Test Subworkflow FASTA_GXF_BUSCO_PLOT" - script "../main.nf" - workflow "FASTA_GXF_BUSCO_PLOT" - config './nextflow.config' - - tag "subworkflows" - tag "subworkflows_gallvp" - tag "subworkflows/fasta_gxf_busco_plot" - tag "busco" - tag "busco/busco" - tag "busco/generateplot" - tag "gffread" - - test("candidatus_portiera_aleyrodidarum - bacteroides_fragilis - genome") { - - when { - workflow { - """ - input[0] = Channel.of( - [ - [ id:'test' ], // meta map - file(params.modules_testdata_base_path + 'genomics/prokaryotes/candidatus_portiera_aleyrodidarum/genome/genome.fasta', checkIfExists: true) - ], - [ - [ id:'test2' ], // meta map - file(params.modules_testdata_base_path + 'genomics/prokaryotes/bacteroides_fragilis/genome/genome.fna.gz', checkIfExists: true) - ] - ) - input[1] = Channel.of( - [ - [ id:'test' ], // meta map - file(params.modules_testdata_base_path + 'genomics/prokaryotes/candidatus_portiera_aleyrodidarum/genome/gff/test1.gff', checkIfExists: true) - ] - ) - input[2] = 'genome' - input[3] = [ 'bacteria_odb10', 'archaea_odb10' ] - input[4] = [] - input[5] = [] - """ - } - } - - then { - assertAll( - { assert workflow.success}, - { assert snapshot( - workflow.out.assembly_batch_summary, - workflow.out.annotation_batch_summary, - workflow.out.versions, - ).match() - }, - - { assert workflow.out.assembly_png != null }, - { assert workflow.out.annotation_png != null }, - - { assert workflow.out.assembly_short_summaries_json != null }, - { assert workflow.out.assembly_short_summaries_txt != null }, - { assert workflow.out.annotation_short_summaries_json != null }, - { assert workflow.out.annotation_short_summaries_txt != null } - ) - } - } - - test("candidatus_portiera_aleyrodidarum - bacteroides_fragilis - genome - stub") { - - options '-stub' - - when { - workflow { - """ - input[0] = Channel.of( - [ - [ id:'test' ], // meta map - file(params.modules_testdata_base_path + 'genomics/prokaryotes/candidatus_portiera_aleyrodidarum/genome/genome.fasta', checkIfExists: true) - ], - [ - [ id:'test2' ], // meta map - file(params.modules_testdata_base_path + 'genomics/prokaryotes/bacteroides_fragilis/genome/genome.fna.gz', checkIfExists: true) - ] - ) - input[1] = Channel.of( - [ - [ id:'test' ], // meta map - file(params.modules_testdata_base_path + 'genomics/prokaryotes/candidatus_portiera_aleyrodidarum/genome/gff/test1.gff', checkIfExists: true) - ] - ) - input[2] = 'genome' - input[3] = [ 'bacteria_odb10', 'archaea_odb10' ] - input[4] = [] - input[5] = [] - """ - } - } - - then { - assertAll( - { assert workflow.success}, - { assert snapshot(workflow.out).match()} - ) - } - } -} diff --git a/subworkflows/gallvp/fasta_gxf_busco_plot/tests/main.nf.test.snap b/subworkflows/gallvp/fasta_gxf_busco_plot/tests/main.nf.test.snap deleted file mode 100644 index 118ad7e..0000000 --- a/subworkflows/gallvp/fasta_gxf_busco_plot/tests/main.nf.test.snap +++ /dev/null @@ -1,231 +0,0 @@ -{ - "candidatus_portiera_aleyrodidarum - bacteroides_fragilis - genome - stub": { - "content": [ - { - "0": [ - [ - { - "id": "test", - "mode": "genome", - "lineage": "archaea_odb10" - }, - "test-archaea_odb10-busco.batch_summary.txt:md5,d41d8cd98f00b204e9800998ecf8427e" - ], - [ - { - "id": "test", - "mode": "genome", - "lineage": "bacteria_odb10" - }, - "test-bacteria_odb10-busco.batch_summary.txt:md5,d41d8cd98f00b204e9800998ecf8427e" - ], - [ - { - "id": "test2", - "mode": "genome", - "lineage": "archaea_odb10" - }, - "test2-archaea_odb10-busco.batch_summary.txt:md5,d41d8cd98f00b204e9800998ecf8427e" - ], - [ - { - "id": "test2", - "mode": "genome", - "lineage": "bacteria_odb10" - }, - "test2-bacteria_odb10-busco.batch_summary.txt:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "1": [ - - ], - "2": [ - - ], - "3": [ - - ], - "4": [ - [ - { - "id": "test", - "mode": "proteins", - "lineage": "archaea_odb10" - }, - "test-archaea_odb10-busco.batch_summary.txt:md5,d41d8cd98f00b204e9800998ecf8427e" - ], - [ - { - "id": "test", - "mode": "proteins", - "lineage": "bacteria_odb10" - }, - "test-bacteria_odb10-busco.batch_summary.txt:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "5": [ - - ], - "6": [ - - ], - "7": [ - - ], - "8": [ - "versions.yml:md5,36b11c442943567e471af0abd474a10b", - "versions.yml:md5,9435355f913e283f60b4fb7ef77dd52a", - "versions.yml:md5,e9d65e2f2f13175e99c5b7f4ae1013b9" - ], - "annotation_batch_summary": [ - [ - { - "id": "test", - "mode": "proteins", - "lineage": "archaea_odb10" - }, - "test-archaea_odb10-busco.batch_summary.txt:md5,d41d8cd98f00b204e9800998ecf8427e" - ], - [ - { - "id": "test", - "mode": "proteins", - "lineage": "bacteria_odb10" - }, - "test-bacteria_odb10-busco.batch_summary.txt:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "annotation_png": [ - - ], - "annotation_short_summaries_json": [ - - ], - "annotation_short_summaries_txt": [ - - ], - "assembly_batch_summary": [ - [ - { - "id": "test", - "mode": "genome", - "lineage": "archaea_odb10" - }, - "test-archaea_odb10-busco.batch_summary.txt:md5,d41d8cd98f00b204e9800998ecf8427e" - ], - [ - { - "id": "test", - "mode": "genome", - "lineage": "bacteria_odb10" - }, - "test-bacteria_odb10-busco.batch_summary.txt:md5,d41d8cd98f00b204e9800998ecf8427e" - ], - [ - { - "id": "test2", - "mode": "genome", - "lineage": "archaea_odb10" - }, - "test2-archaea_odb10-busco.batch_summary.txt:md5,d41d8cd98f00b204e9800998ecf8427e" - ], - [ - { - "id": "test2", - "mode": "genome", - "lineage": "bacteria_odb10" - }, - "test2-bacteria_odb10-busco.batch_summary.txt:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "assembly_png": [ - - ], - "assembly_short_summaries_json": [ - - ], - "assembly_short_summaries_txt": [ - - ], - "versions": [ - "versions.yml:md5,36b11c442943567e471af0abd474a10b", - "versions.yml:md5,9435355f913e283f60b4fb7ef77dd52a", - "versions.yml:md5,e9d65e2f2f13175e99c5b7f4ae1013b9" - ] - } - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-05-13T16:39:45.021811" - }, - "candidatus_portiera_aleyrodidarum - bacteroides_fragilis - genome": { - "content": [ - [ - [ - { - "id": "test", - "mode": "genome", - "lineage": "archaea_odb10" - }, - "test-archaea_odb10-busco.batch_summary.txt:md5,1397d74518a776ad75b16a843bc5b6c1" - ], - [ - { - "id": "test", - "mode": "genome", - "lineage": "bacteria_odb10" - }, - "test-bacteria_odb10-busco.batch_summary.txt:md5,a1186bc25448ac1949bf7790810f7161" - ], - [ - { - "id": "test2", - "mode": "genome", - "lineage": "archaea_odb10" - }, - "test2-archaea_odb10-busco.batch_summary.txt:md5,946582b353a8dba7d6452a71856eca06" - ], - [ - { - "id": "test2", - "mode": "genome", - "lineage": "bacteria_odb10" - }, - "test2-bacteria_odb10-busco.batch_summary.txt:md5,21b3fb771cf36be917cc451540d999be" - ] - ], - [ - [ - { - "id": "test", - "mode": "proteins", - "lineage": "archaea_odb10" - }, - "test-archaea_odb10-busco.batch_summary.txt:md5,95172bd5b1a30e632fc79084ea0ca585" - ], - [ - { - "id": "test", - "mode": "proteins", - "lineage": "bacteria_odb10" - }, - "test-bacteria_odb10-busco.batch_summary.txt:md5,995127c0caecb36205dbf21aa2f9f8a8" - ] - ], - [ - "versions.yml:md5,05d8022e3afb0d5642ed17147b991730", - "versions.yml:md5,36b11c442943567e471af0abd474a10b", - "versions.yml:md5,53987b35fc275297efdaf525937fdca3", - "versions.yml:md5,9435355f913e283f60b4fb7ef77dd52a", - "versions.yml:md5,e9d65e2f2f13175e99c5b7f4ae1013b9" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-05-13T16:39:04.376704" - } -} \ No newline at end of file diff --git a/subworkflows/gallvp/fasta_gxf_busco_plot/tests/nextflow.config b/subworkflows/gallvp/fasta_gxf_busco_plot/tests/nextflow.config deleted file mode 100644 index ddbc644..0000000 --- a/subworkflows/gallvp/fasta_gxf_busco_plot/tests/nextflow.config +++ /dev/null @@ -1,5 +0,0 @@ -process { - withName: EXTRACT_PROTEINS { - ext.args = '-y' - } -} diff --git a/subworkflows/gallvp/gxf_fasta_agat_spaddintrons_spextractsequences/main.nf b/subworkflows/gallvp/gxf_fasta_agat_spaddintrons_spextractsequences/main.nf deleted file mode 100644 index 57c9297..0000000 --- a/subworkflows/gallvp/gxf_fasta_agat_spaddintrons_spextractsequences/main.nf +++ /dev/null @@ -1,117 +0,0 @@ -include { AGAT_SPADDINTRONS } from '../../../modules/gallvp/agat/spaddintrons/main' -include { AGAT_SPEXTRACTSEQUENCES } from '../../../modules/gallvp/agat/spextractsequences/main' - -workflow GXF_FASTA_AGAT_SPADDINTRONS_SPEXTRACTSEQUENCES { - - take: - ch_gxf // channel: [ val(meta), gxf ] - ch_fasta // channel: [ val(meta2), fasta ] - - main: - ch_versions = Channel.empty() - - // collectFile: Remove all/partial introns - ch_gxf_purged = ch_gxf - | map { meta, gxf -> - def gxf_lines = gxf.readLines().findAll { line -> - - if ( line.startsWith('#') ) { return true } - - def cols = line.tokenize('\t') - def feat = cols[2].trim().toLowerCase() - - if ( feat == 'intron' ) { return false } - - return true - } - - [ "${meta.id}.nointrons.${gxf.extension}", gxf_lines.join('\n') ] - } - | collectFile - | map { gxf -> [ gxf.baseName.replace('.nointrons', ''), gxf ] } - | join( - ch_gxf.map { meta, gxf -> [ meta.id, meta ] } - ) - | map { id, gxf, meta -> [ meta, gxf ] } - - // MODULE: AGAT_SPADDINTRONS - AGAT_SPADDINTRONS ( ch_gxf_purged, [] ) - - ch_introns_gff = AGAT_SPADDINTRONS.out.gff - ch_versions = ch_versions.mix(AGAT_SPADDINTRONS.out.versions.first()) - - // MODULE: AGAT_SPEXTRACTSEQUENCES - ch_gxf_fasta = ch_introns_gff - | map { meta, gff3 -> [ meta.id, meta, gff3 ] } - | join( - ch_fasta.map { meta2, fasta -> [ meta2.id, fasta ] } - ) - | map { id, meta, gff3, fasta -> [ meta, gff3, fasta ] } - - AGAT_SPEXTRACTSEQUENCES( - ch_gxf_fasta.map { meta, gff3, fasta -> [ meta, gff3 ] }, - ch_gxf_fasta.map { meta, gff3, fasta -> fasta }, - [] // config - ) - - ch_intron_sequences = AGAT_SPEXTRACTSEQUENCES.out.fasta - ch_versions = ch_versions.mix(AGAT_SPEXTRACTSEQUENCES.out.versions.first()) - - // collectFile: splice motifs - ch_splice_motifs = ch_intron_sequences - | map { meta, fasta -> - def splice_motifs = fasta.splitFasta ( record: [id: true, seqString: true] ) - .collect { el -> [ el.id, "${el.seqString[0..1]}${el.seqString[-2..-1]}" ].join('\t') } - - [ "${meta.id}.motifs.tsv", splice_motifs.join('\n') ] - } - | collectFile - | map { tsv -> [ tsv.baseName.replace('.motifs', ''), tsv ] } - | join( - ch_gxf_purged.map { meta, gxf -> [ meta.id, meta ] } - ) - | map { id, tsv, meta -> [ meta, tsv ] } - - // collectFile: Mark gff3 - ch_marked_gff3 = ch_introns_gff - | join ( ch_splice_motifs ) - | map { meta, gff3, tsv -> - def motif_map = [:] - tsv.eachLine { line -> - def cols = line.tokenize('\t') - def id = cols[0] - def motif = cols[1] - - motif_map [ ( id ) ] = motif - } - - def marked_gff3 = gff3.readLines().collect{ line -> - if ( line.startsWith('#') ) { return line } - - def cols = line.tokenize('\t') - def feat = cols[2].trim() - - if ( feat != 'intron' ) { return line } - - def atts = cols[8].trim() - def id = ( atts =~ /ID=([^;]*)/ )[0][1] - - def atts_r = "$atts;splice_motif=${motif_map[id]};canonical_splicing=${motif_map[id]=='GTAG'}" - - return ( cols[0..7] + [ atts_r ] ).join('\t') - } - - [ "${meta.id}.marked.gff3", marked_gff3.join('\n') ] - } - | collectFile - | map { gff3 -> [ gff3.baseName.replace('.marked', ''), gff3 ] } - | join( - ch_gxf_purged.map { meta, gxf -> [ meta.id, meta ] } - ) - | map { id, gff3, meta -> [ meta, gff3 ] } - - emit: - motifs_tsv = ch_splice_motifs // channel: [ val(meta), tsv ] - marked_gff3 = ch_marked_gff3 // channel: [ val(meta), gff3 ] - versions = ch_versions // channel: [ versions.yml ] -} diff --git a/subworkflows/gallvp/gxf_fasta_agat_spaddintrons_spextractsequences/meta.yml b/subworkflows/gallvp/gxf_fasta_agat_spaddintrons_spextractsequences/meta.yml deleted file mode 100644 index 1863d97..0000000 --- a/subworkflows/gallvp/gxf_fasta_agat_spaddintrons_spextractsequences/meta.yml +++ /dev/null @@ -1,54 +0,0 @@ -# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/subworkflows/yaml-schema.json -name: "gxf_fasta_agat_spaddintrons_spextractsequences" -description: Add introns, extract intron sequences and mark introns with splice motifs -keywords: - - genomics - - gtf - - gff - - fasta - - intron - - extract - - sequence - - mark - - splice - - motif -components: - - agat/spaddintrons - - agat/spextractsequences -input: - - ch_gxf: - type: file - description: | - The input channel containing the GTF/GFF file - Structure: [ val(meta), path(gxf) ] - pattern: "*.{gtf,gff,gff3}" - - ch_fasta: - type: file - description: | - The input channel containing the fasta file - Structure: [ val(meta), path(fasta) ] - pattern: "*.{fa,fas,fsa,faa,fasta}" -output: - - motifs_tsv: - type: file - description: | - The output channel containing the motifs TSV file with first column containing intron ID and - the second column containing the splice motif - Structure: [ val(meta), path(tsv) ] - pattern: "*.motifs.tsv" - - marked_gff3: - type: file - description: | - The output channel containing the GFF3 file with splicing annotation added to it - Structure: [ val(meta), path(gff3) ] - pattern: "*.marked.gff3" - - versions: - type: file - description: | - File containing software versions - Structure: [ path(versions.yml) ] - pattern: "versions.yml" -authors: - - "@GallVp" -maintainers: - - "@GallVp" diff --git a/subworkflows/gallvp/gxf_fasta_agat_spaddintrons_spextractsequences/tests/main.nf.test b/subworkflows/gallvp/gxf_fasta_agat_spaddintrons_spextractsequences/tests/main.nf.test deleted file mode 100644 index f5242c9..0000000 --- a/subworkflows/gallvp/gxf_fasta_agat_spaddintrons_spextractsequences/tests/main.nf.test +++ /dev/null @@ -1,83 +0,0 @@ -nextflow_workflow { - - name "Test Subworkflow GXF_FASTA_AGAT_SPADDINTRONS_SPEXTRACTSEQUENCES" - script "../main.nf" - workflow "GXF_FASTA_AGAT_SPADDINTRONS_SPEXTRACTSEQUENCES" - config './nextflow.config' - - tag "subworkflows" - tag "subworkflows_gallvp" - tag "subworkflows/gxf_fasta_agat_spaddintrons_spextractsequences" - tag "modules/nf-core/gunzip" - tag "agat/spextractsequences" - tag "agat/spaddintrons" - - setup { - run("GUNZIP", alias: 'GUNZIP_FASTA') { - script "../../../../modules/nf-core/gunzip" - - process { - """ - input[0] = [ - [ id:'test' ], - file(params.modules_testdata_base_path + 'genomics/eukaryotes/actinidia_chinensis/genome/chr1/genome.fasta.gz' , checkIfExists: true) - ] - """ - } - } - - run("GUNZIP", alias: 'GUNZIP_GFF3') { - script "../../../../modules/nf-core/gunzip" - - process { - """ - input[0] = [ - [ id:'test' ], - file(params.modules_testdata_base_path + 'genomics/eukaryotes/actinidia_chinensis/genome/chr1/genome.gff3.gz' , checkIfExists: true) - ] - """ - } - } - } - - - test("actinidia_chinensis - fasta - gff3") { - - when { - workflow { - """ - input[0] = GUNZIP_GFF3.out.gunzip - input[1] = GUNZIP_FASTA.out.gunzip - """ - } - } - - then { - assertAll( - { assert workflow.success}, - { assert snapshot(workflow.out).match()} - ) - } - } - - test("actinidia_chinensis - fasta - gff3 - stub") { - - options '-stub' - - when { - workflow { - """ - input[0] = GUNZIP_GFF3.out.gunzip - input[1] = GUNZIP_FASTA.out.gunzip - """ - } - } - - then { - assertAll( - { assert workflow.success}, - { assert snapshot(workflow.out).match()} - ) - } - } -} diff --git a/subworkflows/gallvp/gxf_fasta_agat_spaddintrons_spextractsequences/tests/main.nf.test.snap b/subworkflows/gallvp/gxf_fasta_agat_spaddintrons_spextractsequences/tests/main.nf.test.snap deleted file mode 100644 index a52bebe..0000000 --- a/subworkflows/gallvp/gxf_fasta_agat_spaddintrons_spextractsequences/tests/main.nf.test.snap +++ /dev/null @@ -1,104 +0,0 @@ -{ - "actinidia_chinensis - fasta - gff3": { - "content": [ - { - "0": [ - [ - { - "id": "test" - }, - "test.motifs.tsv:md5,feb30ceeb2662125a80539929f2908c5" - ] - ], - "1": [ - [ - { - "id": "test" - }, - "test.marked.gff3:md5,ae8800dc42d5da4a94c93cf09d319fc5" - ] - ], - "2": [ - "versions.yml:md5,1befbe41bc7abbf49767b8dc68877bc7", - "versions.yml:md5,65042e008b2466984150cb219a05291c" - ], - "marked_gff3": [ - [ - { - "id": "test" - }, - "test.marked.gff3:md5,ae8800dc42d5da4a94c93cf09d319fc5" - ] - ], - "motifs_tsv": [ - [ - { - "id": "test" - }, - "test.motifs.tsv:md5,feb30ceeb2662125a80539929f2908c5" - ] - ], - "versions": [ - "versions.yml:md5,1befbe41bc7abbf49767b8dc68877bc7", - "versions.yml:md5,65042e008b2466984150cb219a05291c" - ] - } - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" - }, - "timestamp": "2024-06-24T16:20:01.32929" - }, - "actinidia_chinensis - fasta - gff3 - stub": { - "content": [ - { - "0": [ - [ - { - "id": "test" - }, - "test.motifs.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "1": [ - [ - { - "id": "test" - }, - "test.marked.gff3:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "2": [ - "versions.yml:md5,1befbe41bc7abbf49767b8dc68877bc7", - "versions.yml:md5,65042e008b2466984150cb219a05291c" - ], - "marked_gff3": [ - [ - { - "id": "test" - }, - "test.marked.gff3:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "motifs_tsv": [ - [ - { - "id": "test" - }, - "test.motifs.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "versions": [ - "versions.yml:md5,1befbe41bc7abbf49767b8dc68877bc7", - "versions.yml:md5,65042e008b2466984150cb219a05291c" - ] - } - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" - }, - "timestamp": "2024-06-24T16:22:01.840388" - } -} \ No newline at end of file diff --git a/subworkflows/gallvp/gxf_fasta_agat_spaddintrons_spextractsequences/tests/nextflow.config b/subworkflows/gallvp/gxf_fasta_agat_spaddintrons_spextractsequences/tests/nextflow.config deleted file mode 100644 index 456093c..0000000 --- a/subworkflows/gallvp/gxf_fasta_agat_spaddintrons_spextractsequences/tests/nextflow.config +++ /dev/null @@ -1,6 +0,0 @@ -process { - - withName: AGAT_SPEXTRACTSEQUENCES { - ext.args = '-t intron' - } -} diff --git a/subworkflows/local/align_rnaseq.nf b/subworkflows/local/align_rnaseq.nf deleted file mode 100644 index 0ad3b59..0000000 --- a/subworkflows/local/align_rnaseq.nf +++ /dev/null @@ -1,81 +0,0 @@ -include { STAR_ALIGN } from '../../modules/nf-core/star/align' -include { SAMTOOLS_CAT } from '../../modules/nf-core/samtools/cat' - -workflow ALIGN_RNASEQ { - take: - reads_target // channel: [ meta, assembly_id ] - trim_reads // channel: [ meta, [ fq ] ] - rna_bam_by_assembly // channel: [ meta, [ bam ] ] - assembly_index // channel: [ meta2, star_index ] - - main: - ch_versions = Channel.empty() - - // MODULE: STAR_ALIGN - ch_star_inputs = reads_target - | combine(trim_reads, by:0) - | map { meta, assembly, fastq -> - [ - assembly, - [ - id: "${meta.id}.on.${assembly}", - single_end: meta.single_end, - target_assembly: assembly - ], - fastq - ] - } - | combine( - assembly_index.map { meta, index -> [ meta.id, index ] }, - by:0 - ) - | map { assembly, meta, fastq, index -> [ meta, fastq, index ] } - - def star_ignore_sjdbgtf = true - def seq_platform = false - def seq_center = false - - STAR_ALIGN( - ch_star_inputs.map { meta, fastq, index -> [ meta, fastq ] }, - ch_star_inputs.map { meta, fastq, index -> [ [ id: meta.target_assembly ], index ] }, - ch_star_inputs.map { meta, fastq, index -> [ [ id: meta.target_assembly ], [] ] }, - star_ignore_sjdbgtf, - seq_platform, - seq_center - ) - - ch_star_bam = STAR_ALIGN.out.bam_sorted - ch_versions = ch_versions.mix(STAR_ALIGN.out.versions.first()) - - // MODULE: SAMTOOLS_CAT - ch_star_bam_branch = ch_star_bam - | map { meta, bam -> - [ - [ id: meta.target_assembly ], - bam instanceof List ? bam.find { it =~ /Aligned/ } : bam - ] - } - | mix ( rna_bam_by_assembly ) - | groupTuple - | map { meta, bams -> [ meta, bams.flatten() ] } - | branch { meta, bamList -> - bams: bamList.size() > 1 - bam: bamList.size() <= 1 - } - - SAMTOOLS_CAT( - ch_star_bam_branch.bams.map { meta, bams -> [ meta, bams.toSorted() ] } - ) - - ch_samtools_bam = SAMTOOLS_CAT.out.bam - | map { meta, bam -> [ meta, [ bam ] ] } - | mix( - ch_star_bam_branch.bam - ) - - ch_versions = ch_versions.mix(SAMTOOLS_CAT.out.versions.first()) - - emit: - bam = ch_samtools_bam // channel: [ [ id: target_assembly, single_end ], [ bam ] ] - versions = ch_versions // channel: [ versions.yml ] -} diff --git a/subworkflows/local/fasta_braker3.nf b/subworkflows/local/fasta_braker3.nf deleted file mode 100644 index dcb0e5d..0000000 --- a/subworkflows/local/fasta_braker3.nf +++ /dev/null @@ -1,65 +0,0 @@ -include { BRAKER3 } from '../../modules/gallvp/braker3' -include { FILE_GUNZIP as BRAKER_GFF3_GUNZIP } from '../../subworkflows/local/file_gunzip' -include { FILE_GUNZIP as BRAKER_HINTS_GUNZIP } from '../../subworkflows/local/file_gunzip' - -workflow FASTA_BRAKER3 { - take: - ch_masked_target_assembly // channel: [ meta, fasta ]; meta ~ [ id: traget_assembly ] - ch_braker_ex_asm_str // channel: val(assembly_x,assembly_y) - ch_rnaseq_bam // channel: [ meta, bam ] - ch_ext_prots_fasta // channel: [ meta2, fasta ]; meta2 ~ [ id: ext_protein_seqs ] - ch_braker_annotation // channel: [ meta, gff3, hints.gff ] - - main: - ch_versions = Channel.empty() - - - ch_braker_inputs = ch_masked_target_assembly - | combine( ch_braker_ex_asm_str ) - | filter { meta, fasta, ex_str -> !( ex_str.split(",").contains( meta.id ) ) } - | map { meta, fasta, ex_str -> - [ meta, fasta ] - } - | join(ch_rnaseq_bam, remainder: true) - | combine( - ch_ext_prots_fasta.map { meta, fasta -> fasta }.ifEmpty(null) - ) - | map { meta, fasta, bam, prots -> [ meta, fasta, bam ?: [], prots ?: [] ] } - - def rnaseq_sets_dirs = [] - def rnaseq_sets_ids = [] - def hintsfile = [] - - // MODULE: BRAKER3 - BRAKER3( - ch_braker_inputs.map { meta, fasta, bam, prots -> [meta, fasta] }, - ch_braker_inputs.map { meta, fasta, bam, prots -> bam }, - rnaseq_sets_dirs, - rnaseq_sets_ids, - ch_braker_inputs.map { meta, fasta, bam, prots -> prots }, - hintsfile - ) - - ch_braker_gff3 = BRAKER3.out.gff3 - | mix( ch_braker_annotation.map { meta, gff3, hints -> [ meta, gff3 ] } ) - ch_braker_hints = BRAKER3.out.hintsfile - | mix( ch_braker_annotation.map { meta, gff3, hints -> [ meta, hints ] } ) - ch_versions = ch_versions.mix(BRAKER3.out.versions.first()) - - // WORKFLOW: FILE_GUNZIP as BRAKER_GFF3_GUNZIP - BRAKER_GFF3_GUNZIP ( ch_braker_gff3 ) - - ch_braker_gff3 = BRAKER_GFF3_GUNZIP.out.gunzip - ch_versions = ch_versions.mix(BRAKER_GFF3_GUNZIP.out.versions) - - // WORKFLOW: FILE_GUNZIP as BRAKER_HINTS_GUNZIP - BRAKER_HINTS_GUNZIP ( ch_braker_hints ) - - ch_braker_hints = BRAKER_HINTS_GUNZIP.out.gunzip - ch_versions = ch_versions.mix(BRAKER_HINTS_GUNZIP.out.versions) - - emit: - braker_gff3 = ch_braker_gff3 // [ meta, gff3 ] - braker_hints = ch_braker_hints // [ meta, hints.gff ] - versions = ch_versions // [ versions.yml ] -} diff --git a/subworkflows/local/fasta_liftoff.nf b/subworkflows/local/fasta_liftoff.nf deleted file mode 100644 index a46beb3..0000000 --- a/subworkflows/local/fasta_liftoff.nf +++ /dev/null @@ -1,186 +0,0 @@ -include { GUNZIP as GUNZIP_FASTA } from '../../modules/nf-core/gunzip/main' -include { GUNZIP as GUNZIP_GFF } from '../../modules/nf-core/gunzip/main' -include { GFFREAD as GFFREAD_BEFORE_LIFTOFF } from '../../modules/nf-core/gffread/main' -include { LIFTOFF } from '../../modules/nf-core/liftoff/main' -include { AGAT_SPMERGEANNOTATIONS as MERGE_LIFTOFF_ANNOTATIONS } from '../../modules/nf-core/agat/spmergeannotations/main' -include { AGAT_SPFILTERFEATUREFROMKILLLIST } from '../../modules/nf-core/agat/spfilterfeaturefromkilllist/main' -include { GFFREAD as GFFREAD_AFTER_LIFTOFF } from '../../modules/nf-core/gffread/main' -include { GFF_TSEBRA_SPFILTERFEATUREFROMKILLLIST } from '../../subworkflows/local/gff_tsebra_spfilterfeaturefromkilllist' - -workflow FASTA_LIFTOFF { - take: - target_assemby // Channel: [ meta, fasta ] - xref_fasta // Channel: [ meta2, fasta ] - xref_gff // Channel: [ meta2, gff3 ] - val_filter_liftoff_by_hints // val(true|false) - braker_hints // [ meta, gff ] - tsebra_config // Channel: [ cfg ] - allow_isoforms // val(true|false) - - - main: - ch_versions = Channel.empty() - - // MODULE: GUNZIP as GUNZIP_FASTA - ch_xref_fasta_branch = xref_fasta - | branch { meta, file -> - gz: "$file".endsWith(".gz") - rest: !"$file".endsWith(".gz") - } - - GUNZIP_FASTA ( ch_xref_fasta_branch.gz ) - - ch_xref_gunzip_fasta = GUNZIP_FASTA.out.gunzip - | mix( - ch_xref_fasta_branch.rest - ) - - ch_versions = ch_versions.mix(GUNZIP_FASTA.out.versions.first()) - - // MODULE: GUNZIP as GUNZIP_GFF - ch_xref_gff_branch = xref_gff - | branch { meta, file -> - gz: "$file".endsWith(".gz") - rest: !"$file".endsWith(".gz") - } - - GUNZIP_GFF ( ch_xref_gff_branch.gz ) - - ch_xref_gunzip_gff = GUNZIP_GFF.out.gunzip - | mix( - ch_xref_gff_branch.rest - ) - - ch_versions = ch_versions.mix(GUNZIP_GFF.out.versions.first()) - - // MODULE: GFFREAD as GFFREAD_BEFORE_LIFTOFF - GFFREAD_BEFORE_LIFTOFF ( ch_xref_gunzip_gff, [] ) - - ch_gffread_gff = GFFREAD_BEFORE_LIFTOFF.out.gffread_gff - ch_versions = ch_versions.mix(GFFREAD_BEFORE_LIFTOFF.out.versions.first()) - - // MODULE: LIFTOFF - ch_liftoff_inputs = target_assemby - | combine( - ch_xref_gunzip_fasta - | join( - ch_gffread_gff - ) - ) - | map { meta, target_fa, ref_meta, ref_fa, ref_gff -> - [ - [ - id: "${meta.id}.from.${ref_meta.id}", - target_assemby: meta.id - ], - target_fa, - ref_fa, - ref_gff - ] - } - - LIFTOFF( - ch_liftoff_inputs.map { meta, target_fa, ref_fa, ref_gff -> [ meta, target_fa ] }, - ch_liftoff_inputs.map { meta, target_fa, ref_fa, ref_gff -> ref_fa }, - ch_liftoff_inputs.map { meta, target_fa, ref_fa, ref_gff -> ref_gff }, - [] - ) - - ch_liftoff_gff3 = LIFTOFF.out.polished_gff3 - | map { meta, gff -> [ [ id: meta.target_assemby ], gff ] } - | groupTuple - - ch_versions = ch_versions.mix(LIFTOFF.out.versions.first()) - - // MODULE: AGAT_SPMERGEANNOTATIONS as MERGE_LIFTOFF_ANNOTATIONS - ch_merge_inputs = ch_liftoff_gff3 - | branch { meta, list_polished -> - one: list_polished.size() == 1 - many: list_polished.size() > 1 - } - - MERGE_LIFTOFF_ANNOTATIONS( - ch_merge_inputs.many, - [] - ) - - ch_merged_gff = MERGE_LIFTOFF_ANNOTATIONS.out.gff - | mix( - ch_merge_inputs.one - | map { meta, gffs -> [ meta, gffs[0] ] } - // Unlist the upstream groupTuple - ) - ch_versions = ch_versions.mix(MERGE_LIFTOFF_ANNOTATIONS.out.versions.first()) - - // COLLECTFILE: Kill list for valid_ORF=False transcripts - ch_kill_list = ch_merged_gff - | map { meta, gff -> - - def tx_from_gff = gff.readLines() - .findAll { it -> - if ( it.startsWith('#') ) { return false } - - def cols = it.split('\t') - def feat = cols[2] - if ( ! ( feat == 'transcript' || feat == 'mRNA' ) ) { return false } - - def attrs = cols[8] - attrs.contains('valid_ORF=False') - } - .collect { - def cols = it.split('\t') - def attrs = cols[8] - - def matches = attrs =~ /ID=([^;]*)/ - - return matches[0][1] - } - - [ "${meta.id}.kill.list.txt" ] + tx_from_gff.join('\n') - } - | collectFile(newLine: true) - | map { file -> - [ [ id: file.baseName.replace('.kill.list', '') ], file ] - } - - // MODULE: AGAT_SPFILTERFEATUREFROMKILLLIST - ch_agat_kill_inputs = ch_merged_gff - | join(ch_kill_list) - - - AGAT_SPFILTERFEATUREFROMKILLLIST( - ch_agat_kill_inputs.map { meta, gff, kill -> [ meta, gff ] }, - ch_agat_kill_inputs.map { meta, gff, kill -> kill }, - [] // default config - ) - - ch_liftoff_purged_gff = AGAT_SPFILTERFEATUREFROMKILLLIST.out.gff - ch_versions = ch_versions.mix(AGAT_SPFILTERFEATUREFROMKILLLIST.out.versions.first()) - - // MODULE: GFFREAD as GFFREAD_AFTER_LIFTOFF - GFFREAD_AFTER_LIFTOFF ( ch_liftoff_purged_gff, [] ) - - ch_attr_trimmed_gff = GFFREAD_AFTER_LIFTOFF.out.gffread_gff - ch_versions = ch_versions.mix(GFFREAD_AFTER_LIFTOFF.out.versions.first()) - - // SUBWORKFLOW: GFF_TSEBRA_SPFILTERFEATUREFROMKILLLIST - GFF_TSEBRA_SPFILTERFEATUREFROMKILLLIST( - val_filter_liftoff_by_hints ? ch_attr_trimmed_gff : Channel.empty(), - braker_hints, - tsebra_config, - allow_isoforms, - 'liftoff' - ) - - ch_tsebra_killed_gff = GFF_TSEBRA_SPFILTERFEATUREFROMKILLLIST.out.tsebra_killed_gff - ch_versions = ch_versions.mix(GFF_TSEBRA_SPFILTERFEATUREFROMKILLLIST.out.versions) - - // Prepare output channel - ch_output_gff = val_filter_liftoff_by_hints - ? ch_tsebra_killed_gff - : ch_attr_trimmed_gff - - emit: - gff3 = ch_output_gff // [ meta, gff3 ] - versions = ch_versions // [ versions.yml ] -} diff --git a/subworkflows/local/fasta_orthofinder.nf b/subworkflows/local/fasta_orthofinder.nf deleted file mode 100644 index 715d78e..0000000 --- a/subworkflows/local/fasta_orthofinder.nf +++ /dev/null @@ -1,33 +0,0 @@ -include { FILE_GUNZIP as FASTA_GUNZIP } from '../../subworkflows/local/file_gunzip' -include { ORTHOFINDER } from '../../modules/nf-core/orthofinder/main' - -workflow FASTA_ORTHOFINDER { - take: - ch_pep_fasta // [ meta, fasta ] - ch_external_pep_fasta // [ meta, fasta ] - - main: - ch_versions = Channel.empty() - - // SUBWORKFLOW: FILE_GUNZIP as FASTA_GUNZIP - FASTA_GUNZIP ( ch_external_pep_fasta ) - - ch_fasta_unzipped = FASTA_GUNZIP.out.gunzip - ch_versions = ch_versions.mix(FASTA_GUNZIP.out.versions) - - // MODULE: ORTHOFINDER - ch_orthofinder_peps = ch_fasta_unzipped - | map { meta, fasta -> fasta } - | mix( - ch_pep_fasta.map { meta, fasta -> fasta } - ) - | collect - | filter { it.size() > 1 } - - ORTHOFINDER ( ch_orthofinder_peps.map { fastas -> [ [ id: 'genepal' ], fastas ] } ) - - ch_versions = ch_versions.mix(ORTHOFINDER.out.versions) - - emit: - versions = ch_versions // [ versions.yml ] -} diff --git a/subworkflows/local/file_gunzip.nf b/subworkflows/local/file_gunzip.nf deleted file mode 100644 index 30f3368..0000000 --- a/subworkflows/local/file_gunzip.nf +++ /dev/null @@ -1,20 +0,0 @@ -include { GUNZIP } from '../../modules/nf-core/gunzip' - -workflow FILE_GUNZIP { - take: - ch_input // channel [ meta, archive ] - - main: - ch_input_branch = ch_input - | branch { meta, archive -> - gz: "$archive".endsWith('.gz') - rest: ! "$archive".endsWith('.gz') - } - - // MODULE: GUNZIP - GUNZIP ( ch_input_branch.gz ) - - emit: - versions = GUNZIP.out.versions.first() - gunzip = GUNZIP.out.gunzip.mix( ch_input_branch.rest ) -} diff --git a/subworkflows/local/gff_eggnogmapper.nf b/subworkflows/local/gff_eggnogmapper.nf deleted file mode 100644 index 841a243..0000000 --- a/subworkflows/local/gff_eggnogmapper.nf +++ /dev/null @@ -1,49 +0,0 @@ -include { GFFREAD as GFF2FASTA_FOR_EGGNOGMAPPER } from '../../modules/nf-core/gffread/main' -include { EGGNOGMAPPER } from '../../modules/nf-core/eggnogmapper/main' - -workflow GFF_EGGNOGMAPPER { - take: - ch_gff // Channel: [ meta, gff ] - ch_fasta // Channel: [ meta, fasta ] - db_folder // val(db_folder) - - main: - // Versions - ch_versions = Channel.empty() - - // MODULE: GFFREAD as GFF2FASTA_FOR_EGGNOGMAPPER - ch_gffread_inputs = ch_gff - | join(ch_fasta) - - GFF2FASTA_FOR_EGGNOGMAPPER( - ch_gffread_inputs.map { meta, gff, fasta -> [ meta, gff ] }, - ch_gffread_inputs.map { meta, gff, fasta -> fasta } - ) - - ch_gffread_fasta = GFF2FASTA_FOR_EGGNOGMAPPER.out.gffread_fasta - ch_versions = ch_versions.mix(GFF2FASTA_FOR_EGGNOGMAPPER.out.versions.first()) - - - ch_eggnogmapper_inputs = ! db_folder - ? Channel.empty() - : ch_gffread_fasta - | combine(Channel.fromPath(db_folder)) - - EGGNOGMAPPER( - ch_eggnogmapper_inputs.map { meta, fasta, db -> [ meta, fasta ] }, - [], - ch_eggnogmapper_inputs.map { meta, fasta, db -> db }, - [ [], [] ] - ) - - ch_eggnogmapper_annotations = EGGNOGMAPPER.out.annotations - ch_eggnogmapper_orthologs = EGGNOGMAPPER.out.orthologs - ch_eggnogmapper_hits = EGGNOGMAPPER.out.hits - ch_versions = ch_versions.mix(EGGNOGMAPPER.out.versions.first()) - - emit: - eggnogmapper_annotations = ch_eggnogmapper_annotations - eggnogmapper_orthologs = ch_eggnogmapper_orthologs - eggnogmapper_hits = ch_eggnogmapper_hits - versions = ch_versions -} diff --git a/subworkflows/local/gff_merge_cleanup.nf b/subworkflows/local/gff_merge_cleanup.nf deleted file mode 100644 index fc6c75e..0000000 --- a/subworkflows/local/gff_merge_cleanup.nf +++ /dev/null @@ -1,183 +0,0 @@ -include { AGAT_SPMERGEANNOTATIONS } from '../../modules/nf-core/agat/spmergeannotations/main' -include { GT_GFF3 } from '../../modules/nf-core/gt/gff3/main' -include { AGAT_CONVERTSPGXF2GXF } from '../../modules/nf-core/agat/convertspgxf2gxf/main' - -workflow GFF_MERGE_CLEANUP { - take: - ch_braker_gff // Channel: [ meta, gff ] - ch_liftoff_gff // Channel: [ meta, gff ] - - main: - ch_versions = Channel.empty() - - ch_gff_branch = ch_braker_gff - | join(ch_liftoff_gff, remainder:true) - | branch { meta, braker_gff, liftoff_gff -> - both : ( braker_gff && liftoff_gff ) - braker_only : ( braker_gff && ( ! liftoff_gff ) ) - liftoff_only: ( ( ! braker_gff ) && liftoff_gff ) - } - - // MODULE: AGAT_SPMERGEANNOTATIONS - AGAT_SPMERGEANNOTATIONS( - ch_gff_branch.both.map { meta, bg, lg -> [ meta, [ bg, lg ] ] }, - [] - ) - - ch_merged_gff = AGAT_SPMERGEANNOTATIONS.out.gff - | mix ( ch_gff_branch.liftoff_only.map { meta, braker_gff, liftoff_gff -> [ meta, liftoff_gff ] } ) - | mix ( ch_gff_branch.braker_only.map { meta, braker_gff, liftoff_gff -> [ meta, braker_gff ] } ) - ch_versions = ch_versions.mix(AGAT_SPMERGEANNOTATIONS.out.versions.first()) - - // MODULE: GT_GFF3 - GT_GFF3 ( ch_merged_gff ) - - ch_gt_gff = GT_GFF3.out.gt_gff3 - ch_versions = ch_versions.mix(GT_GFF3.out.versions.first()) - - // COLLECTFILE: Format GT_GFF3 output - ch_gt_formatted_gff = ch_gt_gff - | map { meta, gff -> - - def lines = gff.readLines() - .collect { line -> - if ( line.startsWith('##') ) { return line } - if ( line.startsWith('#') ) { return '' } - - def cols = line.split('\t') - def program = cols[1] - def feat = cols[2] - def atts = cols[8] - - def atts_r = '' - // Remove attributes and use AGAT_CONVERTSPGXF2GXF - // to create attributes based on sequential layout - - def feat_r = feat == 'transcript' ? 'mRNA' : feat - // Use mRNA inplace of transcript - - if ( feat_r != 'mRNA' || program != 'Liftoff' ) { - return ( cols[0..1] + [ feat_r ] + cols[3..7] + [ atts_r ] ).join('\t') - } - - def tx_id = ( atts =~ /ID=([^;]*)/ )[0][1] - def matches = ( atts =~ /liftoffID=([^;]*)/ ) - - def liftoffID = matches ? matches[0][1] : tx_id - - def atts_g = "liftoffID=$liftoffID" - - return ( cols[0..1] + [ feat_r ] + cols[3..7] + [ atts_g ] ).join('\t') - - }.join('\n') - - [ "${meta.id}.bare.gff" ] + [ lines ] - } - | collectFile(newLine: true) - | map { file -> - [ [ id: file.baseName.replace('.bare', '') ], file ] - } - - // MODULE: AGAT_CONVERTSPGXF2GXF - AGAT_CONVERTSPGXF2GXF ( ch_gt_formatted_gff ) - - ch_agat_gff = AGAT_CONVERTSPGXF2GXF.out.output_gff - ch_versions = ch_versions.mix(AGAT_CONVERTSPGXF2GXF.out.versions.first()) - - // COLLECTFILE: Format AGAT_CONVERTSPGXF2GXF output and only allow: [ 'gene', 'mRNA', 'exon', 'CDS' ] - ch_agat_formatted_gff = ch_agat_gff - | map { meta, gff -> - - def filtered_lines = gff.readLines() - .findAll { line -> - if ( line.startsWith('#') ) { return true } - - def cols = line.split('\t') - def feat = cols[2].trim() - - ( feat in [ 'gene', 'mRNA', 'exon', 'CDS' ] ) - ? true - : false - } - .collect { line -> - if ( line.startsWith('#') ) { return line } - - def cols = line.split('\t') - def program = cols[1] - def feat = cols[2] - def atts = cols[8] - def atts_r = atts.replace('-', '').replace('agat', '') - - if ( feat != 'mRNA' || program != 'Liftoff' ) { - return ( cols[0..7] + [ atts_r ] ).join('\t') - } - - def oldID = ( atts =~ /liftoffID=([^;]*)/ )[0][1] - def newID = ( atts =~ /ID=([^;]*)/ )[0][1].replace('-', '').replace('agat', '') - def pID = ( atts =~ /Parent=([^;]*)/ )[0][1].replace('-', '').replace('agat', '') - def atts_g = "ID=${newID};Parent=${pID};liftoffID=${oldID}" - - return ( cols[0..7] + [ atts_g ] ).join('\t') - } - - def tx_formatted_lines = [] - def current_gene_id = '' - def current_mrna_id = -1 - def current_exon_id = -1 - def current_cds_id = -1 - - filtered_lines.each { line -> - if ( line.startsWith('#') ) { - tx_formatted_lines << line - return - } - - def cols = line.split('\t') - def feat = cols[2] - def atts = cols[8] - def id = ( atts =~ /ID=([^;]*)/ )[0][1] - - if ( feat == 'gene' ) { - tx_formatted_lines << line - current_gene_id = id - current_mrna_id = 0 - return - } - - if ( feat == 'mRNA' ) { - current_mrna_id += 1 - current_exon_id = 0 - current_cds_id = 0 - - def matches = ( atts =~ /liftoffID=([^;]*)/ ) - def liftoffIDStr = matches ? ";liftoffID=${matches[0][1]}" : '' - - tx_formatted_lines << ( ( cols[0..7] + [ "ID=${current_gene_id}.t${current_mrna_id};Parent=${current_gene_id}${liftoffIDStr}" ] ).join('\t') ) - return - } - - if ( feat == 'exon' ) { - current_exon_id += 1 - tx_formatted_lines << ( ( cols[0..7] + [ "ID=${current_gene_id}.t${current_mrna_id}.exon${current_exon_id};Parent=${current_gene_id}.t${current_mrna_id}" ] ).join('\t') ) - return - } - - if ( feat == 'CDS' ) { - current_cds_id += 1 - tx_formatted_lines << ( ( cols[0..7] + [ "ID=${current_gene_id}.t${current_mrna_id}.cds${current_cds_id};Parent=${current_gene_id}.t${current_mrna_id}" ] ).join('\t') ) - return - } - - } - - [ "${meta.id}.agat.cleanup.gff" ] + [ tx_formatted_lines.join('\n') ] - } - | collectFile(newLine: true) - | map { file -> - [ [ id: file.baseName.replace('.agat.cleanup', '') ], file ] - } - - emit: - gff = ch_agat_formatted_gff // [ meta, gff ] - versions = ch_versions // [ versions.yml ] -} diff --git a/subworkflows/local/gff_store.nf b/subworkflows/local/gff_store.nf deleted file mode 100644 index 00ca00b..0000000 --- a/subworkflows/local/gff_store.nf +++ /dev/null @@ -1,141 +0,0 @@ -import java.net.URLEncoder - -include { GT_GFF3 as FINAL_GFF_CHECK } from '../../modules/nf-core/gt/gff3/main' -include { GFFREAD as EXTRACT_PROTEINS } from '../../modules/nf-core/gffread/main' - -workflow GFF_STORE { - take: - ch_target_gff // [ meta, gff ] - ch_eggnogmapper_annotations // [ meta, annotations ] - ch_fasta // [ meta, fasta ] - val_describe_gff // val(true|false) - - main: - ch_versions = Channel.empty() - - // COLLECTFILE: Add eggnogmapper hits to gff - ch_described_gff = ! val_describe_gff - ? Channel.empty() - : ch_target_gff - | join(ch_eggnogmapper_annotations) - | map { meta, gff, annotations -> - def tx_annotations = annotations.readLines() - .findAll { ! it.startsWith('#') } - .collect { line -> - def cols = line.split('\t') - def id = cols[0] - def txt = cols[7] - def pfams = cols[20] - - [ id, txt, pfams ] - } - .collect { id, txt, pfams -> - if ( txt != '-' ) { return [ id, txt ] } - if ( pfams != '-' ) { return [ id, "PFAMs: $pfams" ] } - - [ id, 'No eggnog description and PFAMs' ] - } - .collectEntries { id, txt -> - [ id, txt ] - } - - def gene_tx_annotations = [:] - gff.readLines() - .findAll { line -> - if ( line.startsWith('#') || line == '' ) { return false } - - def cols = line.split('\t') - def feat = cols[2] - - if ( ! ( feat == 'transcript' || feat == 'mRNA' ) ) { return false } - - return true - } - .each { line -> - def cols = line.split('\t') - def atts = cols[8] - - def matches = atts =~ /ID=([^;]*)/ - def tx_id = matches[0][1] - - def matches_p= atts =~ /Parent=([^;]*)/ - def gene_id = matches_p[0][1] - - if ( ! gene_tx_annotations.containsKey(gene_id) ) { - gene_tx_annotations[gene_id] = [:] - } - - def anno = tx_annotations.containsKey(tx_id) - ? URLEncoder.encode(tx_annotations[tx_id], "UTF-8").replace('+', '%20') - : URLEncoder.encode('Hypothetical protein | no eggnog hit', "UTF-8").replace('+', '%20') - - gene_tx_annotations[gene_id] += [ ( tx_id ): anno ] - } - - gene_tx_annotations = gene_tx_annotations - .collectEntries { gene_id, tx_annos -> - def default_anno = tx_annos.values().first() - - if ( tx_annos.values().findAll { it != default_anno }.size() > 0 ) { - return [ gene_id, ( tx_annos + [ 'default': 'Differing%20isoform%20descriptions' ] ) ] - } - - [ gene_id, ( tx_annos + [ 'default': default_anno ] ) ] - } - - def gff_lines = gff.readLines() - .collect { line -> - - if ( line.startsWith('#') || line == '' ) { return line } - - def cols = line.split('\t') - def feat = cols[2] - def atts = cols[8] - - if ( ! ( feat == 'gene' || feat == 'transcript' || feat == 'mRNA' ) ) { return line } - - def id = feat == 'gene' ? ( atts =~ /ID=([^;]*)/ )[0][1] : ( atts =~ /Parent=([^;]*)/ )[0][1] - - if ( ! gene_tx_annotations.containsKey(id) ) { return line } - - def tx_id = feat == 'gene' ? null : ( atts =~ /ID=([^;]*)/ )[0][1] - def desc = feat == 'gene' ? gene_tx_annotations[id]['default'] : gene_tx_annotations[id][tx_id] - - return ( line + ";description=$desc" ) - } - - [ "${meta.id}.described.gff" ] + gff_lines.join('\n') - } - | collectFile(newLine: true) - | map { file -> - [ [ id: file.baseName.replace('.described', '') ], file ] - } - - // MODULE: GT_GFF3 as FINAL_GFF_CHECK - ch_final_check_input = val_describe_gff - ? ch_described_gff - : ch_target_gff - - FINAL_GFF_CHECK ( ch_final_check_input ) - - ch_final_gff = FINAL_GFF_CHECK.out.gt_gff3 - ch_versions = ch_versions.mix(FINAL_GFF_CHECK.out.versions.first()) - - // MODULE: GFFREAD as EXTRACT_PROTEINS - ch_extraction_inputs = ch_final_gff - | join(ch_fasta) - - EXTRACT_PROTEINS( - ch_extraction_inputs.map { meta, gff, fasta -> [ meta, gff ] }, - ch_extraction_inputs.map { meta, gff, fasta -> fasta } - ) - - ch_final_proteins = EXTRACT_PROTEINS.out.gffread_fasta - ch_versions = ch_versions.mix(FINAL_GFF_CHECK.out.versions.first()) - - - emit: - final_gff = ch_final_gff // [ meta, gff ] - final_proteins = ch_final_proteins // [ meta, fasta ] - versions = ch_versions // [ versions.yml ] -} diff --git a/subworkflows/local/gff_tsebra_spfilterfeaturefromkilllist.nf b/subworkflows/local/gff_tsebra_spfilterfeaturefromkilllist.nf deleted file mode 100644 index c4e4fb6..0000000 --- a/subworkflows/local/gff_tsebra_spfilterfeaturefromkilllist.nf +++ /dev/null @@ -1,186 +0,0 @@ -include { AGAT_CONVERTSPGFF2GTF } from '../../modules/nf-core/agat/convertspgff2gtf/main' -include { TSEBRA } from '../../modules/nf-core/tsebra/main' -include { AGAT_CONVERTSPGXF2GXF } from '../../modules/nf-core/agat/convertspgxf2gxf/main' -include { AGAT_SPFILTERFEATUREFROMKILLLIST as KILL_TSEBRA_ISOFORMS } from '../../modules/nf-core/agat/spfilterfeaturefromkilllist/main' - -workflow GFF_TSEBRA_SPFILTERFEATUREFROMKILLLIST { - - take: - input_gff3 // [ meta, gff3 ] - braker_hints // [ meta, gff ] - tsebra_config // Channel: [ cfg ] - allow_isoforms // val(true|false) - val_prefix // val(String) - - main: - ch_versions = Channel.empty() - - // MODULE: AGAT_CONVERTSPGFF2GTF - AGAT_CONVERTSPGFF2GTF ( input_gff3 ) - - ch_input_gtf = AGAT_CONVERTSPGFF2GTF.out.output_gtf - ch_versions = ch_versions.mix(AGAT_CONVERTSPGFF2GTF.out.versions.first()) - - // COLLECTFILE: Prepare for TSEBRA - ch_tsebra_input_gtf = ch_input_gtf - | map { meta, gtf -> - - def lines = gtf.readLines() - .collect { line -> - if ( line.startsWith('#') ) { return line } - - def cols = line.split('\t') - def feat = cols[2] - - if ( ! ( feat in [ 'gene', 'transcript', 'mRNA' ] ) ) { return line } - - def atts = cols[8] - def matches = atts =~ /ID ([^;]*)/ - def id = matches[0][1] - - def feat_format = ( feat == 'mRNA' ) ? 'transcript' : feat - - return ( cols[0..1] + [ feat_format ] + cols[3..7] + [ id ] ).join('\t') - }.join('\n') - - [ "${meta.id}.clean.gtf" ] + [ lines ] - } - | collectFile(newLine: true) - | map { file -> - [ [ id: file.baseName.replace(".clean", "") ], file ] - } - - // MODULE: TSEBRA - ch_tsebra_inputs = ch_tsebra_input_gtf - | join(braker_hints) - | combine(tsebra_config) - TSEBRA( - ch_tsebra_inputs.map { meta, gtf, gff, cfg -> [ meta, [ gtf ] ] }, - ch_tsebra_inputs.map { meta, gtf, gff, cfg -> [ gff ] }, - [], - ch_tsebra_inputs.map { meta, gtf, gff, cfg -> cfg } - ) - - ch_tsebra_gtf = TSEBRA.out.tsebra_gtf - ch_versions = ch_versions.mix(TSEBRA.out.versions.first()) - - // COLLECTFILE: Format TSEBRA output - ch_tsebra_formatted_gtf = ch_tsebra_gtf - | map { meta, gtf -> - - def lines = gtf.readLines() - .collect { line -> - if ( line.startsWith('#') ) { return line } - - def cols = line.split('\t') - def program = cols[1] - def feat = cols[2] - def atts = cols[8] - - def atts_r = '' - // Remove attributes and use AGAT_CONVERTSPGXF2GXF - // to create attributes based on sequential layout - - if ( feat != 'transcript' || program != 'Liftoff' ) { - return ( cols[0..7] + [ atts_r ] ).join('\t') - } - - def tx_id = atts.trim().replaceFirst('anno1.', '') - def atts_g = "liftoffID $tx_id" - - return ( cols[0..7] + [ atts_g ] ).join('\t') - }.join('\n') - - [ "${meta.id}.gtf" ] + [ lines ] - } - | collectFile(newLine: true) - | map { file -> - [ [ id: file.baseName ], file ] - } - - // MODULE: AGAT_CONVERTSPGXF2GXF - AGAT_CONVERTSPGXF2GXF ( ch_tsebra_formatted_gtf ) - - ch_tsebra_formatted_gff = AGAT_CONVERTSPGXF2GXF.out.output_gff - ch_versions = ch_versions.mix(AGAT_CONVERTSPGXF2GXF.out.versions.first()) - - // COLLECTFILE: Format AGAT_CONVERTSPGXF2GXF output - ch_tsebra_gff = ch_tsebra_formatted_gff - | map { meta, gff -> - - def lines = gff.readLines() - .collect { line -> - if ( line.startsWith('#') ) { return line } - - def cols = line.split('\t') - def atts_r = cols[8].replaceAll('-', '').replaceAll('agat', '') - - return ( cols[0..7] + [ atts_r ] ).join('\t') - }.join('\n') - - [ "${meta.id}.${val_prefix}.gff3" ] + [ lines ] - } - | collectFile(newLine: true) - | map { file -> - [ [ id: file.baseName.replace(".${val_prefix}", '') ], file ] - } - - // COLLECTFILE: Iso-form kill list if allow_isoforms=true - ch_post_tsebra_kill_list = allow_isoforms - ? Channel.empty() - : ch_tsebra_gff - | map { meta, gff -> - def kill_list = gff.readLines() - .findAll { line -> - if ( line.startsWith('#') ) { return false } - - def cols = line.split('\t') - def feat = cols[2] - - ( feat == 'mRNA' || feat == 'transcript' ) - } - .collect { line -> - def cols = line.split('\t') - def atts = cols[8] - def tx_id = ( atts =~ /ID=([^;]*)/ )[0][1] - def g_id = ( atts =~ /Parent=([^;]*)/ )[0][1] - - [ g_id, tx_id ] - } - .groupBy { g_id, tx_id -> g_id } - .findAll { key, value -> value.size() > 1 } - .collect { key, value -> - value.collect { it[1] }[1..-1] - } - .flatten() - .join('\n') - - [ "${meta.id}.kill.list.txt" ] + [ kill_list ] - } - | collectFile(newLine: true) - | map { file -> - [ [ id: file.baseName.replace('.kill.list', '') ], file ] - } - - // MODULE: AGAT_SPFILTERFEATUREFROMKILLLIST as KILL_TSEBRA_ISOFORMS - ch_tsebra_kill_inputs = ch_tsebra_gff - | join(ch_post_tsebra_kill_list) - - - KILL_TSEBRA_ISOFORMS( - ch_tsebra_kill_inputs.map { meta, gff, kill -> [ meta, gff ] }, - ch_tsebra_kill_inputs.map { meta, gff, kill -> kill }, - [] // default config - ) - - ch_tsebra_killed_gff = ch_tsebra_gff - | join(KILL_TSEBRA_ISOFORMS.out.gff, remainder: true) - | map { meta, tsebra, killed -> - if ( tsebra ) { [ meta, killed ?: tsebra ] } - } - ch_versions = ch_versions.mix(KILL_TSEBRA_ISOFORMS.out.versions.first()) - - emit: - tsebra_killed_gff = ch_tsebra_killed_gff // [ val(meta), gff ] - versions = ch_versions // [ versions.yml ] -} diff --git a/subworkflows/local/prepare_assembly.nf b/subworkflows/local/prepare_assembly.nf deleted file mode 100644 index c05faf5..0000000 --- a/subworkflows/local/prepare_assembly.nf +++ /dev/null @@ -1,159 +0,0 @@ -include { GUNZIP as GUNZIP_TARGET_ASSEMBLY } from '../../modules/nf-core/gunzip' -include { GUNZIP as GUNZIP_TE_LIBRARY } from '../../modules/nf-core/gunzip' -include { FASTAVALIDATOR } from '../../modules/nf-core/fastavalidator' -include { REPEATMODELER_BUILDDATABASE } from '../../modules/nf-core/repeatmodeler/builddatabase' -include { REPEATMODELER_REPEATMODELER } from '../../modules/nf-core/repeatmodeler/repeatmodeler' -include { REPEATMASKER_REPEATMASKER } from '../../modules/gallvp/repeatmasker/repeatmasker' -include { STAR_GENOMEGENERATE } from '../../modules/nf-core/star/genomegenerate' - -include { FASTA_EDTA_LAI } from '../../subworkflows/gallvp/fasta_edta_lai' - -workflow PREPARE_ASSEMBLY { - take: - target_assembly // channel: [ meta, fasta ] - te_library // channel: [ meta, fasta ] - repeat_annotator // val(String), 'repeatmodeler' or 'edta' - exclude_assemblies // channel: val(assembly_x,assembly_y) - ch_is_masked // channel: [ meta, val(true|false) ] - - main: - ch_versions = Channel.empty() - - // MODULE: GUNZIP_TARGET_ASSEMBLY - target_assembly_branch = target_assembly - | branch { meta, file -> - gz: "$file".endsWith(".gz") - rest: !"$file".endsWith(".gz") - } - - GUNZIP_TARGET_ASSEMBLY ( target_assembly_branch.gz ) - - ch_gunzip_assembly = GUNZIP_TARGET_ASSEMBLY.out.gunzip - | mix( - target_assembly_branch.rest - ) - ch_versions = ch_versions.mix(GUNZIP_TARGET_ASSEMBLY.out.versions.first()) - - - // MODULE: FASTAVALIDATOR - FASTAVALIDATOR ( ch_gunzip_assembly ) - - ch_validated_assembly = ch_gunzip_assembly - | join(FASTAVALIDATOR.out.success_log) - | map { meta, fasta, log -> [ meta, fasta ] } - ch_versions = ch_versions.mix(FASTAVALIDATOR.out.versions.first()) - - FASTAVALIDATOR.out.error_log - | map { meta, log -> - System.err.println("WARNING: FASTAVALIDATOR failed for ${meta.id} with error: ${log}. ${meta.id} is excluded from further analysis.") - } - - // MODULE: GUNZIP_TE_LIBRARY - ch_te_library_branch = te_library - | branch { meta, file -> - gz: "$file".endsWith(".gz") - rest: !"$file".endsWith(".gz") - } - - GUNZIP_TE_LIBRARY ( ch_te_library_branch.gz ) - - ch_gunzip_te_library = GUNZIP_TE_LIBRARY.out.gunzip - | mix( - ch_te_library_branch.rest - ) - ch_versions = ch_versions.mix(GUNZIP_TE_LIBRARY.out.versions.first()) - - // SUBWORKFLOW: FASTA_EDTA_LAI - ch_unmasked_masked_branch = ch_validated_assembly - | combine( exclude_assemblies ) - | map { meta, fasta, ex_assemblies -> - ex_assemblies.tokenize(",").contains( meta.id ) - ? null - : [ meta, fasta ] - } - | join( - ch_is_masked - ) - | branch { meta, fasta, is_masked -> - unmasked: ! is_masked - return [ meta, fasta ] - masked: is_masked - return [ meta, fasta ] - } - - ch_annotator_inputs = ch_unmasked_masked_branch.unmasked - | join( - ch_gunzip_te_library, remainder: true - ) - | filter { meta, assembly, teLib -> - teLib == null && ( assembly != null ) - } - | map { meta, assembly, teLib -> [ meta, assembly ] } - - ch_edta_inputs = repeat_annotator != 'edta' - ? Channel.empty() - : ch_annotator_inputs - - FASTA_EDTA_LAI( - ch_edta_inputs, - [], - true // Skip LAI - ) - - ch_versions = ch_versions.mix(FASTA_EDTA_LAI.out.versions.first()) - - // MODULE: REPEATMODELER_BUILDDATABASE - ch_repeatmodeler_inputs = repeat_annotator != 'repeatmodeler' - ? Channel.empty() - : ch_annotator_inputs - - REPEATMODELER_BUILDDATABASE ( ch_repeatmodeler_inputs ) - - ch_versions = ch_versions.mix(REPEATMODELER_BUILDDATABASE.out.versions.first()) - - // MODULE: REPEATMODELER_REPEATMODELER - REPEATMODELER_REPEATMODELER ( REPEATMODELER_BUILDDATABASE.out.db ) - - ch_assembly_and_te_lib = ch_unmasked_masked_branch.unmasked - | join( - repeat_annotator == 'edta' - ? FASTA_EDTA_LAI.out.te_lib_fasta.mix(ch_gunzip_te_library) - : REPEATMODELER_REPEATMODELER.out.fasta.mix(ch_gunzip_te_library) - ) - - ch_versions = ch_versions.mix(REPEATMODELER_REPEATMODELER.out.versions.first()) - - // MODULE: REPEATMASKER_REPEATMASKER - REPEATMASKER_REPEATMASKER( - ch_assembly_and_te_lib.map { meta, assembly, teLib -> [ meta, assembly ] }, - ch_assembly_and_te_lib.map { meta, assembly, teLib -> teLib }, - ) - - ch_masked_assembly = ch_unmasked_masked_branch.masked - | mix(REPEATMASKER_REPEATMASKER.out.masked) - ch_versions = ch_versions.mix(REPEATMASKER_REPEATMASKER.out.versions.first()) - - // MODULE: STAR_GENOMEGENERATE - ch_genomegenerate_inputs = ch_validated_assembly - | combine( exclude_assemblies ) - | map { meta, fasta, ex_assemblies -> - ex_assemblies.tokenize(",").contains( meta.id ) - ? null - : [ meta, fasta ] - } - - - STAR_GENOMEGENERATE( - ch_genomegenerate_inputs, - ch_genomegenerate_inputs.map { meta, fasta -> [ [], [] ] } - ) - - ch_assembly_index = STAR_GENOMEGENERATE.out.index - ch_versions = ch_versions.mix(STAR_GENOMEGENERATE.out.versions.first()) - - emit: - target_assemby = ch_validated_assembly // channel: [ meta, fasta ] - masked_target_assembly = ch_masked_assembly // channel: [ meta, fasta ] - target_assemby_index = ch_assembly_index // channel: [ meta, star_index ] - versions = ch_versions // channel: [ versions.yml ] -} diff --git a/subworkflows/local/prepare_ext_prots.nf b/subworkflows/local/prepare_ext_prots.nf deleted file mode 100644 index 92c245d..0000000 --- a/subworkflows/local/prepare_ext_prots.nf +++ /dev/null @@ -1,42 +0,0 @@ -include { GUNZIP } from '../../modules/nf-core/gunzip' -include { CAT_CAT as CAT_PROTEIN_FASTAS } from '../../modules/nf-core/cat/cat' - -workflow PREPARE_EXT_PROTS { - take: - ch_ext_prot_fastas // Channel: [ meta, fasta ] - - main: - ch_versions = Channel.empty() - - // MODULE: GUNZIP - ch_ext_prot_seqs_branch = ch_ext_prot_fastas - | branch { meta, file -> - gz: "$file".endsWith(".gz") - rest: !"$file".endsWith(".gz") - } - - GUNZIP ( ch_ext_prot_seqs_branch.gz ) - - ch_ext_prot_gunzip_fastas = GUNZIP.out.gunzip.mix(ch_ext_prot_seqs_branch.rest) - | map { meta, filePath -> filePath } - | collect - | map { fileList -> - [ - [ id: "ext_protein_seqs" ], - ( fileList instanceof List ) - ? fileList.toSorted() - : fileList - ] - } - - ch_versions = ch_versions.mix(GUNZIP.out.versions.first()) - - // MODULE: CAT_CAT as CAT_PROTEIN_FASTAS - CAT_PROTEIN_FASTAS ( ch_ext_prot_gunzip_fastas ) - - ch_versions = ch_versions.mix(CAT_PROTEIN_FASTAS.out.versions) - - emit: - ext_prots_fasta = CAT_PROTEIN_FASTAS.out.file_out // Channel: [ meta, fasta ] - versions = ch_versions // Channel: [ versions.yml ] -} diff --git a/subworkflows/local/preprocess_rnaseq.nf b/subworkflows/local/preprocess_rnaseq.nf deleted file mode 100644 index 72fa176..0000000 --- a/subworkflows/local/preprocess_rnaseq.nf +++ /dev/null @@ -1,123 +0,0 @@ -include { CAT_FASTQ } from '../../modules/nf-core/cat/fastq' -include { SORTMERNA as SORTMERNA_INDEX } from '../../modules/nf-core/sortmerna' -include { SORTMERNA as SORTMERNA_READS } from '../../modules/nf-core/sortmerna' -include { FASTQ_FASTQC_UMITOOLS_FASTP } from '../../subworkflows/nf-core/fastq_fastqc_umitools_fastp' - -workflow PREPROCESS_RNASEQ { - take: - ch_reads // channel: [ [ id, single_end, target_assemblies ], [ [ fq ] ] ] - permissible_assemblies // val: assembly_a,assembly_b - exclude_assemblies // channel: val(assembly_x,assembly_y) - skip_fastqc // val: true|false - skip_fastp // val: true|false - save_trimmed // val: true|false - min_trimmed_reads // val: Integer - remove_ribo_rna // val: true|false - sortmerna_fastas // channel: [ [ fasta ] ] - - main: - ch_versions = Channel.empty() - - ch_fastq = ch_reads - | combine( exclude_assemblies ) - | map { meta, fqs, ex_assemblies -> - def ex_list = ex_assemblies.split(",") - - if ( !( meta.target_assemblies.every { ex_list.contains( it ) } ) ) { - [ [ id:meta.id, single_end:meta.single_end ], fqs ] - } - } - | branch { meta, fqs -> - single : fqs.size() == 1 - return [ meta, fqs.flatten() ] - multiple: fqs.size() > 1 - return [ meta, fqs.flatten() ] - } - - - ch_reads_target = ch_reads - | combine( exclude_assemblies ) - | flatMap { meta, fqs, ex_assemblies -> - def ex_list = ex_assemblies.split(",") - - meta - .target_assemblies - .collect { assembly -> [ [ id:meta.id, single_end:meta.single_end ], assembly ] } - .findAll { _meta, assembly -> !( ex_list.contains( assembly ) ) } - } - | unique - - // MODULES: CAT_FASTQ - CAT_FASTQ ( ch_fastq.multiple ) - - ch_cat_fastq = CAT_FASTQ.out.reads.mix(ch_fastq.single) - ch_versions = ch_versions.mix(CAT_FASTQ.out.versions.first()) - - // SUBWORKFLOW: FASTQ_FASTQC_UMITOOLS_FASTP - def with_umi = false - def skip_umi_extract = true - def umi_discard_read = false - - FASTQ_FASTQC_UMITOOLS_FASTP ( - ch_cat_fastq, - skip_fastqc, - with_umi, - skip_umi_extract, - umi_discard_read, - skip_fastp, - [], - save_trimmed, - save_trimmed, - min_trimmed_reads - ) - - ch_trim_reads = FASTQ_FASTQC_UMITOOLS_FASTP.out.reads - - ch_cat_fastq - | join(ch_trim_reads, remainder:true) - | map { meta, reads, trimmed -> - if (!trimmed) { - System.err.println("WARNING: Dropping ${reads.collect { it.getName() }} as read count after trimming is less than $min_trimmed_reads") - } - } - - ch_versions = ch_versions.mix(FASTQ_FASTQC_UMITOOLS_FASTP.out.versions.first()) - - - // MODULE: SORTMERNA as SORTMERNA_INDEX - SORTMERNA_INDEX( - [ [ id: 'idx' ], [] ], - sortmerna_fastas.map { fastas -> [ [ id: 'fastas' ], fastas ] }, - [ [], [] ] - ) - - ch_versions = ch_versions.mix(SORTMERNA_INDEX.out.versions) - - // MODULE: SORTMERNA as SORTMERNA_READS - ch_sortmerna_inputs = remove_ribo_rna - ? ch_trim_reads - | combine( - sortmerna_fastas - | map { fastas -> [ [ id: 'fastas' ], fastas ] } - | join(SORTMERNA_INDEX.out.index) - ) - : Channel.empty() - - SORTMERNA_READS( - ch_sortmerna_inputs.map { meta, reads, meta2, fastas, idx -> [ meta, reads ] }, - ch_sortmerna_inputs.map { meta, reads, meta2, fastas, idx -> [ meta2, fastas ] }, - ch_sortmerna_inputs.map { meta, reads, meta2, fastas, idx -> [ meta2, idx ] } - ) - - ch_emitted_reads = remove_ribo_rna - ? SORTMERNA_READS.out.reads - : ch_trim_reads - ch_versions = ch_versions.mix(SORTMERNA_READS.out.versions.first()) - - - - emit: - trim_reads = ch_emitted_reads // channel: [ [ id, single_end ], [ fq ] ] - reads_target = ch_reads_target // channel: [ [ id, single_end ], assembly_id ] - versions = ch_versions // channel: [ versions.yml ] -} diff --git a/subworkflows/local/purge_braker_models.nf b/subworkflows/local/purge_braker_models.nf deleted file mode 100644 index bda8ce1..0000000 --- a/subworkflows/local/purge_braker_models.nf +++ /dev/null @@ -1,96 +0,0 @@ -include { GFF_TSEBRA_SPFILTERFEATUREFROMKILLLIST } from '../../subworkflows/local/gff_tsebra_spfilterfeaturefromkilllist' -include { GFFCOMPARE as COMPARE_BRAKER_TO_LIFTOFF } from '../../modules/nf-core/gffcompare/main' -include { AGAT_SPFILTERFEATUREFROMKILLLIST } from '../../modules/nf-core/agat/spfilterfeaturefromkilllist/main' -include { GFFCOMPARE as VALIDATE_PURGING_BY_AGAT } from '../../modules/nf-core/gffcompare/main' -include { AGAT_SPMERGEANNOTATIONS as MERGE_BRAKER_LIFTOFF } from '../../modules/nf-core/agat/spmergeannotations/main' - -workflow PURGE_BRAKER_MODELS { - take: - braker_gff3 // [ meta, gff3 ] - braker_hints // [ meta, gff ] - liftoff_gff3 // [ meta, gff3 ] - tsebra_config // Channel: [ cfg ] - allow_isoforms // val(true|false) - - main: - ch_versions = Channel.empty() - - // SUBWORKFLOW: GFF_TSEBRA_SPFILTERFEATUREFROMKILLLIST - GFF_TSEBRA_SPFILTERFEATUREFROMKILLLIST( - braker_gff3, - braker_hints, - tsebra_config, - allow_isoforms, - 'braker' - ) - - ch_tsebra_killed_gff = GFF_TSEBRA_SPFILTERFEATUREFROMKILLLIST.out.tsebra_killed_gff - ch_versions = ch_versions.mix(GFF_TSEBRA_SPFILTERFEATUREFROMKILLLIST.out.versions) - - // MODULE: GFFCOMPARE as COMPARE_BRAKER_TO_LIFTOFF - ch_comparison_inputs = ch_tsebra_killed_gff - | join(liftoff_gff3) - - - COMPARE_BRAKER_TO_LIFTOFF ( - ch_comparison_inputs.map { meta, braker, liftoff -> [ meta, braker ] }, - [ [], [], [] ], - ch_comparison_inputs.map { meta, braker, liftoff -> [ meta, liftoff ] }, - ) - - ch_tracking = COMPARE_BRAKER_TO_LIFTOFF.out.tracking - ch_versions = ch_versions.mix(COMPARE_BRAKER_TO_LIFTOFF.out.versions.first()) - - // COLLECTFILE: Transcript level kill list - ch_kill_list = ch_tracking - | map { meta, tracking -> - - def kept_lines = tracking.readLines() - .findAll { line -> - def cols = line.split('\t') - - ( cols[3] != 'u' ) && ( cols[3] != 'p' ) - } - - def tx_kill_list = kept_lines - .collect { line -> - def cols = line.split('\t') - - def matched = cols[4] =~ /q1:([^\|]+)\|([^\|]+)/ - - matched[0][2].trim() - }.join('\n') - - [ "${meta.id}.kill.list.txt" ] + tx_kill_list - } - | collectFile(newLine: true) - | map { file -> - [ [ id: file.baseName.replace('.kill.list', '') ], file ] - } - - // MODULE: AGAT_SPFILTERFEATUREFROMKILLLIST - ch_agat_kill_inputs = ch_tsebra_killed_gff - | join(ch_kill_list) - - - AGAT_SPFILTERFEATUREFROMKILLLIST( - ch_agat_kill_inputs.map { meta, gff, kill -> [ meta, gff ] }, - ch_agat_kill_inputs.map { meta, gff, kill -> kill }, - [] // default config - ) - - ch_braker_purged_gff = AGAT_SPFILTERFEATUREFROMKILLLIST.out.gff - ch_versions = ch_versions.mix(AGAT_SPFILTERFEATUREFROMKILLLIST.out.versions.first()) - - // Handle case where liftoff is not present - ch_all_braker_gff = ch_tsebra_killed_gff - | join(ch_braker_purged_gff, remainder:true) - | map { meta, tsebra_gff, purged_gff -> - if ( purged_gff ) { return [ meta, purged_gff ] } - if ( tsebra_gff ) { return [ meta, tsebra_gff ] } - } - - emit: - braker_purged_gff = ch_all_braker_gff // [ meta, gff3 ] - versions = ch_versions // [ versions.yml ] -} diff --git a/subworkflows/local/purge_nohit_models.nf b/subworkflows/local/purge_nohit_models.nf deleted file mode 100644 index 55b970e..0000000 --- a/subworkflows/local/purge_nohit_models.nf +++ /dev/null @@ -1,70 +0,0 @@ -include { AGAT_SPFILTERFEATUREFROMKILLLIST } from '../../modules/nf-core/agat/spfilterfeaturefromkilllist/main' - -workflow PURGE_NOHIT_MODELS { - take: - ch_target_gff // [ meta, gff ] - ch_eggnogmapper_hits // [ meta, hits ] - val_purge_nohits // val(true|false) - - main: - ch_versions = Channel.empty() - - // COLLECTFILE: Transcript level kill list - ch_kill_list = ch_target_gff - | join(ch_eggnogmapper_hits) - | map { meta, gff, hits -> - - def tx_with_hits = hits.readLines() - .collect { it.split('\t')[0] } - .sort(false) - .unique() - - def tx_in_gff = gff.readLines() - .findAll { line -> - if ( line.startsWith('#') || line == '' ) { return false } - - def feat = line.split('\t')[2] - ( feat == 'transcript' || feat == 'mRNA' ) - } - .collect { it -> - def attrs = it.split('\t')[8] - - ( attrs =~ /ID=([^;]*)/ )[0][1] - } - .sort(false) - .unique() - - def tx_without_hits = tx_in_gff - tx_with_hits - - [ "${meta.id}.kill.list.txt" ] + tx_without_hits.join('\n') - } - | collectFile(newLine: true) - | map { file -> - [ [ id: file.baseName.replace('.kill.list', '') ], file ] - } - - // MODULE: AGAT_SPFILTERFEATUREFROMKILLLIST - ch_agat_kill_inputs = ! val_purge_nohits - ? Channel.empty() - : ch_target_gff - | join(ch_kill_list) - - - AGAT_SPFILTERFEATUREFROMKILLLIST( - ch_agat_kill_inputs.map { meta, gff, kill -> [ meta, gff ] }, - ch_agat_kill_inputs.map { meta, gff, kill -> kill }, - [] // default config - ) - - ch_target_purged_gff = AGAT_SPFILTERFEATUREFROMKILLLIST.out.gff - ch_versions = ch_versions.mix(AGAT_SPFILTERFEATUREFROMKILLLIST.out.versions.first()) - - emit: - purged_gff = ch_target_purged_gff - | mix( - val_purge_nohits - ? Channel.empty() - : ch_target_gff - ) - versions = ch_versions // [ versions.yml ] -} diff --git a/subworkflows/local/utils_nfcore_genepal_pipeline/main.nf b/subworkflows/local/utils_nfcore_genepal_pipeline/main.nf new file mode 100644 index 0000000..d991642 --- /dev/null +++ b/subworkflows/local/utils_nfcore_genepal_pipeline/main.nf @@ -0,0 +1,228 @@ +// +// Subworkflow with functionality specific to the PlantandFoodResearch/genepal pipeline +// + +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + IMPORT FUNCTIONS / MODULES / SUBWORKFLOWS +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +*/ + +include { UTILS_NFVALIDATION_PLUGIN } from '../../nf-core/utils_nfvalidation_plugin' +include { paramsSummaryMap } from 'plugin/nf-validation' +include { fromSamplesheet } 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 + input // string: Path to input samplesheet + + main: + + ch_versions = Channel.empty() + + // + // 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 --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 + ) + + // + // Create channel from input file provided through params.input + // + Channel + .fromSamplesheet("input") + .map { + meta, fastq_1, fastq_2 -> + if (!fastq_2) { + return [ meta.id, meta + [ single_end:true ], [ fastq_1 ] ] + } else { + return [ meta.id, meta + [ single_end:false ], [ fastq_1, fastq_2 ] ] + } + } + .groupTuple() + .map { + validateInputSamplesheet(it) + } + .map { + meta, fastqs -> + return [ meta, fastqs.flatten() ] + } + .set { ch_samplesheet } + + emit: + samplesheet = ch_samplesheet + versions = ch_versions +} + +/* +======================================================================================== + 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) + } + } + + workflow.onError { + log.error "Pipeline failed. Please refer to troubleshooting docs: https://nf-co.re/docs/usage/troubleshooting" + } +} + +/* +======================================================================================== + FUNCTIONS +======================================================================================== +*/ + +// +// 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 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 ] +} + +// +// 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 + if (meta.manifest_map.doi) { + // Using a loop to handle multiple DOIs + // Removing `https://doi.org/` to handle pipelines using DOIs vs DOI resolvers + // Removing ` ` since the manifest.doi is a string and not a proper list + def temp_doi_ref = "" + String[] manifest_doi = meta.manifest_map.doi.tokenize(",") + for (String doi_ref: manifest_doi) temp_doi_ref += "(doi: ${doi_ref.replace("https://doi.org/", "").replace(" ", "")}), " + meta["doi_text"] = temp_doi_ref.substring(0, temp_doi_ref.length() - 2) + } else meta["doi_text"] = "" + 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() +} diff --git a/subworkflows/nf-core/fastq_fastqc_umitools_fastp/main.nf b/subworkflows/nf-core/fastq_fastqc_umitools_fastp/main.nf deleted file mode 100644 index ab6cbb3..0000000 --- a/subworkflows/nf-core/fastq_fastqc_umitools_fastp/main.nf +++ /dev/null @@ -1,164 +0,0 @@ -// -// Read QC, UMI extraction and trimming -// - -include { FASTQC as FASTQC_RAW } from '../../../modules/nf-core/fastqc/main' -include { FASTQC as FASTQC_TRIM } from '../../../modules/nf-core/fastqc/main' -include { UMITOOLS_EXTRACT } from '../../../modules/nf-core/umitools/extract/main' -include { FASTP } from '../../../modules/nf-core/fastp/main' - -// -// Function that parses fastp json output file to get total number of reads after trimming -// -import groovy.json.JsonSlurper - -def getFastpReadsAfterFiltering(json_file, min_num_reads) { - - if ( workflow.stubRun ) { return min_num_reads } - - def Map json = (Map) new JsonSlurper().parseText(json_file.text).get('summary') - return json['after_filtering']['total_reads'].toLong() -} - -def getFastpAdapterSequence(json_file){ - - if ( workflow.stubRun ) { return "" } - - def Map json = (Map) new JsonSlurper().parseText(json_file.text) - try{ - adapter = json['adapter_cutting']['read1_adapter_sequence'] - } catch(Exception ex){ - adapter = "" - } - return adapter -} - -workflow FASTQ_FASTQC_UMITOOLS_FASTP { - take: - reads // channel: [ val(meta), [ reads ] ] - skip_fastqc // boolean: true/false - with_umi // boolean: true/false - skip_umi_extract // boolean: true/false - umi_discard_read // integer: 0, 1 or 2 - skip_trimming // boolean: true/false - adapter_fasta // file: adapter.fasta - save_trimmed_fail // boolean: true/false - save_merged // boolean: true/false - min_trimmed_reads // integer: > 0 - - main: - ch_versions = Channel.empty() - fastqc_raw_html = Channel.empty() - fastqc_raw_zip = Channel.empty() - if (!skip_fastqc) { - FASTQC_RAW ( - reads - ) - fastqc_raw_html = FASTQC_RAW.out.html - fastqc_raw_zip = FASTQC_RAW.out.zip - ch_versions = ch_versions.mix(FASTQC_RAW.out.versions.first()) - } - - umi_reads = reads - umi_log = Channel.empty() - if (with_umi && !skip_umi_extract) { - UMITOOLS_EXTRACT ( - reads - ) - umi_reads = UMITOOLS_EXTRACT.out.reads - umi_log = UMITOOLS_EXTRACT.out.log - ch_versions = ch_versions.mix(UMITOOLS_EXTRACT.out.versions.first()) - - // Discard R1 / R2 if required - if (umi_discard_read in [1,2]) { - UMITOOLS_EXTRACT - .out - .reads - .map { - meta, reads -> - meta.single_end ? [ meta, reads ] : [ meta + [single_end: true], reads[umi_discard_read % 2] ] - } - .set { umi_reads } - } - } - - trim_reads = umi_reads - trim_json = Channel.empty() - trim_html = Channel.empty() - trim_log = Channel.empty() - trim_reads_fail = Channel.empty() - trim_reads_merged = Channel.empty() - fastqc_trim_html = Channel.empty() - fastqc_trim_zip = Channel.empty() - trim_read_count = Channel.empty() - adapter_seq = Channel.empty() - - if (!skip_trimming) { - FASTP ( - umi_reads, - adapter_fasta, - false, // don't want to set discard_trimmed_pass, else there will be no reads output - save_trimmed_fail, - save_merged - ) - trim_json = FASTP.out.json - trim_html = FASTP.out.html - trim_log = FASTP.out.log - trim_reads_fail = FASTP.out.reads_fail - trim_reads_merged = FASTP.out.reads_merged - ch_versions = ch_versions.mix(FASTP.out.versions.first()) - - // - // Filter FastQ files based on minimum trimmed read count after adapter trimming - // - FASTP - .out - .reads - .join(trim_json) - .map { meta, reads, json -> [ meta, reads, getFastpReadsAfterFiltering(json, min_trimmed_reads.toLong()) ] } - .set { ch_num_trimmed_reads } - - ch_num_trimmed_reads - .filter { meta, reads, num_reads -> num_reads >= min_trimmed_reads.toLong() } - .map { meta, reads, num_reads -> [ meta, reads ] } - .set { trim_reads } - - ch_num_trimmed_reads - .map { meta, reads, num_reads -> [ meta, num_reads ] } - .set { trim_read_count } - - trim_json - .map { meta, json -> [meta, getFastpAdapterSequence(json)] } - .set { adapter_seq } - - if (!skip_fastqc) { - FASTQC_TRIM ( - trim_reads - ) - fastqc_trim_html = FASTQC_TRIM.out.html - fastqc_trim_zip = FASTQC_TRIM.out.zip - ch_versions = ch_versions.mix(FASTQC_TRIM.out.versions.first()) - } - } - - emit: - reads = trim_reads // channel: [ val(meta), [ reads ] ] - - fastqc_raw_html // channel: [ val(meta), [ html ] ] - fastqc_raw_zip // channel: [ val(meta), [ zip ] ] - - umi_log // channel: [ val(meta), [ log ] ] - adapter_seq // channel: [ val(meta), [ adapter_seq] ] - - trim_json // channel: [ val(meta), [ json ] ] - trim_html // channel: [ val(meta), [ html ] ] - trim_log // channel: [ val(meta), [ log ] ] - trim_reads_fail // channel: [ val(meta), [ fastq.gz ] ] - trim_reads_merged // channel: [ val(meta), [ fastq.gz ] ] - trim_read_count // channel: [ val(meta), val(count) ] - - fastqc_trim_html // channel: [ val(meta), [ html ] ] - fastqc_trim_zip // channel: [ val(meta), [ zip ] ] - - versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] -} diff --git a/subworkflows/nf-core/fastq_fastqc_umitools_fastp/meta.yml b/subworkflows/nf-core/fastq_fastqc_umitools_fastp/meta.yml deleted file mode 100644 index 9308fe9..0000000 --- a/subworkflows/nf-core/fastq_fastqc_umitools_fastp/meta.yml +++ /dev/null @@ -1,129 +0,0 @@ -# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/subworkflows/yaml-schema.json -# yaml-language-server: $schema=yaml-schema.json -name: "fastq_fastqc_umitools_fastp" -description: Read QC, UMI extraction and trimming -keywords: - - fastq - - fastqc - - qc - - UMI - - trimming - - fastp -components: - - fastqc - - umitools/extract - - fastp -input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test' ] - - reads: - type: file - description: | - List of input FastQ files of size 1 and 2 for single-end and paired-end data, - respectively. - - skip_fastqc: - type: boolean - description: | - Skip fastqc process - - with_umi: - type: boolean - description: | - With or without umi detection - - skip_umi_extract: - type: boolean - description: | - With or without umi extrection - - umi_discard_read: - type: integer - description: | - Discard R1 / R2 if required - - skip_trimming: - type: boolean - description: | - Allows to skip FastP execution - - adapter_fasta: - type: file - description: | - Fasta file of adapter sequences - - save_trimmed_fail: - type: boolean - description: | - Save trimmed fastqs of failed samples - - save_merged: - type: boolean - description: | - Save merged fastqs - - min_trimmed_reads: - type: integer - description: | - Inputs with fewer than this reads will be filtered out of the "reads" output channel -output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test' ] - - reads: - type: file - description: > - Extracted FASTQ files. | For single-end reads, pattern is \${prefix}.umi_extract.fastq.gz. | - For paired-end reads, pattern is \${prefix}.umi_extract_{1,2}.fastq.gz. - pattern: "*.{fastq.gz}" - - fastqc_html: - type: file - description: FastQC report - pattern: "*_{fastqc.html}" - - fastqc_zip: - type: file - description: FastQC report archive - pattern: "*_{fastqc.zip}" - - log: - type: file - description: Logfile for umi_tools - pattern: "*.{log}" - - trim_json: - type: file - description: FastP Trimming report - pattern: "*.{fastp.json}" - - trim_html: - type: file - description: FastP Trimming report - pattern: "*.{fastp.html}" - - log: - type: file - description: Logfile FastP - pattern: "*.{fastp.log}" - - trim_reads_fail: - type: file - description: Trimmed fastq files failing QC - pattern: "*.{fastq.gz}" - - trim_reads_merged: - type: file - description: Trimmed and merged fastq files - pattern: "*.{fastq.gz}" - - trim_read_count: - type: integer - description: Number of reads after trimming - - fastqc_trim_html: - type: file - description: FastQC report - pattern: "*_{fastqc.html}" - - fastqc_trim_zip: - type: file - description: FastQC report archive - pattern: "*_{fastqc.zip}" - - adapter_seq: - type: string - description: | - Adapter Sequence found in read1 - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" -authors: - - "@robsyme" -maintainers: - - "@robsyme" diff --git a/subworkflows/nf-core/fastq_fastqc_umitools_fastp/tests/main.nf.test b/subworkflows/nf-core/fastq_fastqc_umitools_fastp/tests/main.nf.test deleted file mode 100644 index 48ba5f4..0000000 --- a/subworkflows/nf-core/fastq_fastqc_umitools_fastp/tests/main.nf.test +++ /dev/null @@ -1,973 +0,0 @@ -nextflow_workflow { - - name "Test Workflow FASTQ_FASTQC_UMITOOLS_FASTP" - script "../main.nf" - workflow "FASTQ_FASTQC_UMITOOLS_FASTP" - config './nextflow.config' - - tag "subworkflows" - tag "subworkflows_nfcore" - tag "subworkflows/fastq_fastqc_umitools_fastp" - tag "fastq_fastqc_umitools_fastp" - tag "fastqc" - tag "umitools/extract" - tag "fastp" - - - test("sarscov2 paired-end [fastq]") { - - when { - workflow { - """ - skip_fastqc = false - with_umi = false - skip_umi_extract = false - umi_discard_read = 1 - skip_trimming = false - adapter_fasta = [] - save_trimmed_fail = false - save_merged = false - min_trimmed_reads = 1 - - input[0] = Channel.of([ - [ id:'test', single_end:false ], // meta map - [ - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) - ] - ]) - input[1] = skip_fastqc - input[2] = with_umi - input[3] = skip_umi_extract - input[4] = umi_discard_read - input[5] = skip_trimming - input[6] = adapter_fasta - input[7] = save_trimmed_fail - input[8] = save_merged - input[9] = min_trimmed_reads - """ - } - } - - then { - assertAll( - { assert workflow.success }, - { assert workflow.out.fastqc_raw_html }, - { assert workflow.out.fastqc_raw_zip }, - { assert workflow.out.fastqc_trim_html }, - { assert workflow.out.fastqc_trim_zip }, - { assert workflow.out.trim_html }, - { assert workflow.out.trim_log }, - { assert snapshot( - workflow.out.adapter_seq, - workflow.out.reads, - workflow.out.trim_json, - workflow.out.trim_read_count, - workflow.out.trim_reads_fail, - workflow.out.trim_reads_merged, - workflow.out.umi_log, - workflow.out.versions - ).match() - } - ) - } - } - - test("skip_fastqc") { - - when { - workflow { - """ - skip_fastqc = true - with_umi = false - skip_umi_extract = false - umi_discard_read = 1 - skip_trimming = false - adapter_fasta = [] - save_trimmed_fail = false - save_merged = false - min_trimmed_reads = 1 - - input[0] = Channel.of([ - [ id:'test', single_end: false ], // meta map - [ - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) - ] - ]) - input[1] = skip_fastqc - input[2] = with_umi - input[3] = skip_umi_extract - input[4] = umi_discard_read - input[5] = skip_trimming - input[6] = adapter_fasta - input[7] = save_trimmed_fail - input[8] = save_merged - input[9] = min_trimmed_reads - """ - } - } - - then { - assertAll( - { assert workflow.success }, - { assert workflow.out.trim_html }, - { assert workflow.out.trim_log }, - { assert !workflow.out.fastqc_raw_html }, - { assert !workflow.out.fastqc_raw_zip }, - { assert !workflow.out.fastqc_trim_html }, - { assert !workflow.out.fastqc_trim_zip }, - { assert snapshot( - workflow.out.adapter_seq, - workflow.out.reads, - workflow.out.trim_json, - workflow.out.trim_read_count, - workflow.out.trim_reads_fail, - workflow.out.trim_reads_merged, - workflow.out.umi_log, - workflow.out.versions - ).match() - } - ) - } - } - - test("with_umi") { - - when { - workflow { - """ - skip_fastqc = false - with_umi = true - skip_umi_extract = false - umi_discard_read = 1 - skip_trimming = false - adapter_fasta = [] - save_trimmed_fail = false - save_merged = false - min_trimmed_reads = 1 - - input[0] = Channel.of([ - [ id:'test', single_end:false ], // meta map - [ - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) - ] - ]) - input[1] = skip_fastqc - input[2] = with_umi - input[3] = skip_umi_extract - input[4] = umi_discard_read - input[5] = skip_trimming - input[6] = adapter_fasta - input[7] = save_trimmed_fail - input[8] = save_merged - input[9] = min_trimmed_reads - """ - } - } - - then { - assertAll( - { assert workflow.success }, - { assert workflow.out.fastqc_raw_html }, - { assert workflow.out.fastqc_raw_zip }, - { assert workflow.out.fastqc_trim_html }, - { assert workflow.out.fastqc_trim_zip }, - { assert workflow.out.trim_html }, - { assert workflow.out.trim_log }, - { assert snapshot( - workflow.out.adapter_seq, - workflow.out.reads, - workflow.out.trim_json, - workflow.out.trim_read_count, - workflow.out.trim_reads_fail, - workflow.out.trim_reads_merged, - workflow.out.versions - ).match() - } - ) - } - } - - - test("skip_umi_extract") { - - when { - workflow { - """ - skip_fastqc = false - with_umi = true - skip_umi_extract = true - umi_discard_read = 1 - skip_trimming = false - adapter_fasta = [] - save_trimmed_fail = false - save_merged = false - min_trimmed_reads = 1 - - input[0] = Channel.of([ - [ id:'test', single_end:false ], // meta map - [ - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) - ] - ]) - input[1] = skip_fastqc - input[2] = with_umi - input[3] = skip_umi_extract - input[4] = umi_discard_read - input[5] = skip_trimming - input[6] = adapter_fasta - input[7] = save_trimmed_fail - input[8] = save_merged - input[9] = min_trimmed_reads - """ - } - } - - then { - assertAll( - { assert workflow.success }, - { assert workflow.out.fastqc_raw_html }, - { assert workflow.out.fastqc_raw_zip }, - { assert workflow.out.fastqc_trim_html }, - { assert workflow.out.fastqc_trim_zip }, - { assert workflow.out.trim_html }, - { assert workflow.out.trim_log }, - { assert snapshot( - workflow.out.adapter_seq, - workflow.out.reads, - workflow.out.trim_json, - workflow.out.trim_read_count, - workflow.out.trim_reads_fail, - workflow.out.trim_reads_merged, - workflow.out.umi_log, - workflow.out.versions - ).match() - } - ) - } - } - - test("umi_discard_read = 2") { - - when { - workflow { - """ - skip_fastqc = false - with_umi = true - skip_umi_extract = true - umi_discard_read = 2 - skip_trimming = false - adapter_fasta = [] - save_trimmed_fail = false - save_merged = false - min_trimmed_reads = 1 - - input[0] = Channel.of([ - [ id:'test', single_end:false ], // meta map - [ - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) - ] - ]) - input[1] = skip_fastqc - input[2] = with_umi - input[3] = skip_umi_extract - input[4] = umi_discard_read - input[5] = skip_trimming - input[6] = adapter_fasta - input[7] = save_trimmed_fail - input[8] = save_merged - input[9] = min_trimmed_reads - """ - } - } - - then { - assertAll( - { assert workflow.success }, - { assert workflow.out.fastqc_raw_html }, - { assert workflow.out.fastqc_raw_zip }, - { assert workflow.out.fastqc_trim_html }, - { assert workflow.out.fastqc_trim_zip }, - { assert workflow.out.trim_html }, - { assert workflow.out.trim_log }, - { assert snapshot( - workflow.out.adapter_seq, - workflow.out.reads, - workflow.out.trim_json, - workflow.out.trim_read_count, - workflow.out.trim_reads_fail, - workflow.out.trim_reads_merged, - workflow.out.umi_log, - workflow.out.versions - ).match() - } - ) - } - } - - test("skip_trimming") { - - when { - workflow { - """ - skip_fastqc = false - with_umi = false - skip_umi_extract = false - umi_discard_read = 1 - skip_trimming = true - adapter_fasta = [] - save_trimmed_fail = false - save_merged = false - min_trimmed_reads = 1 - - input[0] = Channel.of([ - [ id:'test', single_end:false ], // meta map - [ - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) - ] - ]) - input[1] = skip_fastqc - input[2] = with_umi - input[3] = skip_umi_extract - input[4] = umi_discard_read - input[5] = skip_trimming - input[6] = adapter_fasta - input[7] = save_trimmed_fail - input[8] = save_merged - input[9] = min_trimmed_reads - """ - } - } - - then { - assertAll( - { assert workflow.success }, - { assert workflow.out.fastqc_raw_html }, - { assert workflow.out.fastqc_raw_zip }, - { assert !workflow.out.fastqc_trim_html }, - { assert !workflow.out.fastqc_trim_zip }, - { assert !workflow.out.trim_html }, - { assert !workflow.out.trim_log }, - { assert snapshot( - // If we skip trimming then input is output, so not snapshotting - workflow.out.adapter_seq, - workflow.out.reads.get(0).get(0), // Reads meta map - workflow.out.trim_json, - workflow.out.trim_read_count, - workflow.out.trim_reads_fail, - workflow.out.trim_reads_merged, - workflow.out.umi_log, - workflow.out.versions - ).match() - } - ) - } - } - - test("save_trimmed_fail") { - - config './nextflow.save_trimmed.config' - - when { - workflow { - """ - skip_fastqc = false - with_umi = false - skip_umi_extract = false - umi_discard_read = 1 - skip_trimming = false - adapter_fasta = [] - save_trimmed_fail = true - save_merged = false - min_trimmed_reads = 1 - - input[0] = Channel.of([ - [ id:'test', single_end:false ], // meta map - [ - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) - ] - ]) - input[1] = skip_fastqc - input[2] = with_umi - input[3] = skip_umi_extract - input[4] = umi_discard_read - input[5] = skip_trimming - input[6] = adapter_fasta - input[7] = save_trimmed_fail - input[8] = save_merged - input[9] = min_trimmed_reads - """ - } - } - - then { - assertAll( - { assert workflow.success }, - { assert workflow.out.fastqc_raw_html }, - { assert workflow.out.fastqc_raw_zip }, - { assert workflow.out.fastqc_trim_html }, - { assert workflow.out.fastqc_trim_zip }, - { assert workflow.out.trim_html }, - { assert workflow.out.trim_log }, - { assert snapshot( - workflow.out.adapter_seq, - workflow.out.reads, - workflow.out.trim_json, - workflow.out.trim_read_count, - workflow.out.trim_reads_fail, - workflow.out.trim_reads_merged, - workflow.out.umi_log, - workflow.out.versions - ).match() - } - ) - } - } - - test("save_merged") { - - when { - workflow { - """ - skip_fastqc = false - with_umi = false - skip_umi_extract = false - umi_discard_read = 1 - skip_trimming = false - adapter_fasta = [] - save_trimmed_fail = false - save_merged = true - min_trimmed_reads = 1 - - input[0] = Channel.of([ - [ id:'test', single_end:false ], // meta map - [ - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) - ] - ]) - input[1] = skip_fastqc - input[2] = with_umi - input[3] = skip_umi_extract - input[4] = umi_discard_read - input[5] = skip_trimming - input[6] = adapter_fasta - input[7] = save_trimmed_fail - input[8] = save_merged - input[9] = min_trimmed_reads - """ - } - } - - then { - assertAll( - { assert workflow.success }, - { assert workflow.out.fastqc_raw_html }, - { assert workflow.out.fastqc_raw_zip }, - { assert workflow.out.fastqc_trim_html }, - { assert workflow.out.fastqc_trim_zip }, - { assert workflow.out.trim_html }, - { assert workflow.out.trim_log }, - { assert snapshot( - workflow.out.adapter_seq, - workflow.out.reads, - workflow.out.trim_json, - workflow.out.trim_read_count, - workflow.out.trim_reads_fail, - workflow.out.trim_reads_merged, - workflow.out.umi_log, - workflow.out.versions - ).match() - } - ) - } - } - - test("min_trimmed_reads = 26") { - // Subworkflow should stop after FASTP which trims down to 25 reads - - when { - workflow { - """ - skip_fastqc = false - with_umi = false - skip_umi_extract = false - umi_discard_read = 1 - skip_trimming = false - adapter_fasta = [] - save_trimmed_fail = false - save_merged = true - min_trimmed_reads = 26 - - input[0] = Channel.of([ - [ id:'test', single_end:false ], // meta map - [ - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) - ] - ]) - input[1] = skip_fastqc - input[2] = with_umi - input[3] = skip_umi_extract - input[4] = umi_discard_read - input[5] = skip_trimming - input[6] = adapter_fasta - input[7] = save_trimmed_fail - input[8] = save_merged - input[9] = min_trimmed_reads - """ - } - } - - then { - assertAll( - { assert workflow.success }, - { assert workflow.out.fastqc_raw_html }, - { assert workflow.out.fastqc_raw_zip }, - { assert workflow.out.fastqc_trim_html }, - { assert workflow.out.fastqc_trim_zip }, - { assert workflow.out.trim_html }, - { assert workflow.out.trim_log }, - { assert snapshot( - workflow.out.adapter_seq, - workflow.out.reads, - workflow.out.trim_json, - workflow.out.trim_read_count, - workflow.out.trim_reads_fail, - workflow.out.trim_reads_merged, - workflow.out.umi_log, - workflow.out.versions - ).match() - } - ) - } - } - - test("sarscov2 paired-end [fastq] - stub") { - - options '-stub' - - when { - workflow { - """ - skip_fastqc = false - with_umi = false - skip_umi_extract = false - umi_discard_read = 1 - skip_trimming = false - adapter_fasta = [] - save_trimmed_fail = false - save_merged = false - min_trimmed_reads = 1 - - input[0] = Channel.of([ - [ id:'test', single_end:false ], // meta map - [ - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) - ] - ]) - input[1] = skip_fastqc - input[2] = with_umi - input[3] = skip_umi_extract - input[4] = umi_discard_read - input[5] = skip_trimming - input[6] = adapter_fasta - input[7] = save_trimmed_fail - input[8] = save_merged - input[9] = min_trimmed_reads - """ - } - } - - then { - assertAll( - { assert workflow.success }, - { assert snapshot(workflow.out).match() } - ) - } - } - - test("skip_fastqc - stub") { - - options "-stub" - - when { - workflow { - """ - skip_fastqc = true - with_umi = false - skip_umi_extract = false - umi_discard_read = 1 - skip_trimming = false - adapter_fasta = [] - save_trimmed_fail = false - save_merged = false - min_trimmed_reads = 1 - - input[0] = Channel.of([ - [ id:'test', single_end: false ], // meta map - [ - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) - ] - ]) - input[1] = skip_fastqc - input[2] = with_umi - input[3] = skip_umi_extract - input[4] = umi_discard_read - input[5] = skip_trimming - input[6] = adapter_fasta - input[7] = save_trimmed_fail - input[8] = save_merged - input[9] = min_trimmed_reads - """ - } - } - - then { - assertAll( - { assert workflow.success }, - { assert snapshot(workflow.out).match() } - ) - } - } - - test("with_umi - stub") { - - options "-stub" - - when { - workflow { - """ - skip_fastqc = false - with_umi = true - skip_umi_extract = false - umi_discard_read = 1 - skip_trimming = false - adapter_fasta = [] - save_trimmed_fail = false - save_merged = false - min_trimmed_reads = 1 - - input[0] = Channel.of([ - [ id:'test', single_end:false ], // meta map - [ - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) - ] - ]) - input[1] = skip_fastqc - input[2] = with_umi - input[3] = skip_umi_extract - input[4] = umi_discard_read - input[5] = skip_trimming - input[6] = adapter_fasta - input[7] = save_trimmed_fail - input[8] = save_merged - input[9] = min_trimmed_reads - """ - } - } - - then { - assertAll( - { assert workflow.success }, - { assert snapshot(workflow.out).match() } - ) - } - } - - - test("skip_umi_extract - stub") { - - options "-stub" - - when { - workflow { - """ - skip_fastqc = false - with_umi = true - skip_umi_extract = true - umi_discard_read = 1 - skip_trimming = false - adapter_fasta = [] - save_trimmed_fail = false - save_merged = false - min_trimmed_reads = 1 - - input[0] = Channel.of([ - [ id:'test', single_end:false ], // meta map - [ - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) - ] - ]) - input[1] = skip_fastqc - input[2] = with_umi - input[3] = skip_umi_extract - input[4] = umi_discard_read - input[5] = skip_trimming - input[6] = adapter_fasta - input[7] = save_trimmed_fail - input[8] = save_merged - input[9] = min_trimmed_reads - """ - } - } - - then { - assertAll( - { assert workflow.success }, - { assert snapshot(workflow.out).match() } - ) - } - } - - test("umi_discard_read = 2 - stub") { - - options "-stub" - - when { - workflow { - """ - skip_fastqc = false - with_umi = true - skip_umi_extract = true - umi_discard_read = 2 - skip_trimming = false - adapter_fasta = [] - save_trimmed_fail = false - save_merged = false - min_trimmed_reads = 1 - - input[0] = Channel.of([ - [ id:'test', single_end:false ], // meta map - [ - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) - ] - ]) - input[1] = skip_fastqc - input[2] = with_umi - input[3] = skip_umi_extract - input[4] = umi_discard_read - input[5] = skip_trimming - input[6] = adapter_fasta - input[7] = save_trimmed_fail - input[8] = save_merged - input[9] = min_trimmed_reads - """ - } - } - - then { - assertAll( - { assert workflow.success }, - { assert snapshot(workflow.out).match() } - ) - } - } - - test("skip_trimming - stub") { - - options "-stub" - - when { - workflow { - """ - skip_fastqc = false - with_umi = false - skip_umi_extract = false - umi_discard_read = 1 - skip_trimming = true - adapter_fasta = [] - save_trimmed_fail = false - save_merged = false - min_trimmed_reads = 1 - - input[0] = Channel.of([ - [ id:'test', single_end:false ], // meta map - [ - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) - ] - ]) - input[1] = skip_fastqc - input[2] = with_umi - input[3] = skip_umi_extract - input[4] = umi_discard_read - input[5] = skip_trimming - input[6] = adapter_fasta - input[7] = save_trimmed_fail - input[8] = save_merged - input[9] = min_trimmed_reads - """ - } - } - - then { - assertAll( - { assert workflow.success }, - { assert snapshot( - workflow.out.adapter_seq, - workflow.out.fastqc_raw_html, - workflow.out.fastqc_raw_zip, - workflow.out.fastqc_trim_html, - workflow.out.fastqc_trim_zip, - workflow.out.trim_html, - workflow.out.trim_json, - workflow.out.trim_log, - workflow.out.trim_read_count, - workflow.out.trim_reads_fail, - workflow.out.trim_reads_merged, - workflow.out.umi_log, - workflow.out.versions).match() } - ) - } - } - - test("save_trimmed_fail - stub") { - - options "-stub" - - config './nextflow.save_trimmed.config' - - when { - workflow { - """ - skip_fastqc = false - with_umi = false - skip_umi_extract = false - umi_discard_read = 1 - skip_trimming = false - adapter_fasta = [] - save_trimmed_fail = true - save_merged = false - min_trimmed_reads = 1 - - input[0] = Channel.of([ - [ id:'test', single_end:false ], // meta map - [ - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) - ] - ]) - input[1] = skip_fastqc - input[2] = with_umi - input[3] = skip_umi_extract - input[4] = umi_discard_read - input[5] = skip_trimming - input[6] = adapter_fasta - input[7] = save_trimmed_fail - input[8] = save_merged - input[9] = min_trimmed_reads - """ - } - } - - then { - assertAll( - { assert workflow.success }, - { assert snapshot(workflow.out).match() } - ) - } - } - - test("save_merged - stub") { - - options "-stub" - - when { - workflow { - """ - skip_fastqc = false - with_umi = false - skip_umi_extract = false - umi_discard_read = 1 - skip_trimming = false - adapter_fasta = [] - save_trimmed_fail = false - save_merged = true - min_trimmed_reads = 1 - - input[0] = Channel.of([ - [ id:'test', single_end:false ], // meta map - [ - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) - ] - ]) - input[1] = skip_fastqc - input[2] = with_umi - input[3] = skip_umi_extract - input[4] = umi_discard_read - input[5] = skip_trimming - input[6] = adapter_fasta - input[7] = save_trimmed_fail - input[8] = save_merged - input[9] = min_trimmed_reads - """ - } - } - - then { - assertAll( - { assert workflow.success }, - { assert snapshot(workflow.out).match() } - ) - } - } - - test("min_trimmed_reads = 26 - stub") { - // Subworkflow should stop after FASTP which trims down to 25 reads - - options "-stub" - - when { - workflow { - """ - skip_fastqc = false - with_umi = false - skip_umi_extract = false - umi_discard_read = 1 - skip_trimming = false - adapter_fasta = [] - save_trimmed_fail = false - save_merged = true - min_trimmed_reads = 26 - - input[0] = Channel.of([ - [ id:'test', single_end:false ], // meta map - [ - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) - ] - ]) - input[1] = skip_fastqc - input[2] = with_umi - input[3] = skip_umi_extract - input[4] = umi_discard_read - input[5] = skip_trimming - input[6] = adapter_fasta - input[7] = save_trimmed_fail - input[8] = save_merged - input[9] = min_trimmed_reads - """ - } - } - - then { - assertAll( - { assert workflow.success }, - { assert snapshot(workflow.out).match() } - ) - } - } -} diff --git a/subworkflows/nf-core/fastq_fastqc_umitools_fastp/tests/main.nf.test.snap b/subworkflows/nf-core/fastq_fastqc_umitools_fastp/tests/main.nf.test.snap deleted file mode 100644 index e7d1f51..0000000 --- a/subworkflows/nf-core/fastq_fastqc_umitools_fastp/tests/main.nf.test.snap +++ /dev/null @@ -1,2407 +0,0 @@ -{ - "skip_fastqc": { - "content": [ - [ - [ - { - "id": "test", - "single_end": false - }, - "unspecified" - ] - ], - [ - [ - { - "id": "test", - "single_end": false - }, - [ - "test_1.fastp.fastq.gz:md5,67b2bbae47f073e05a97a9c2edce23c7", - "test_2.fastp.fastq.gz:md5,25cbdca08e2083dbd4f0502de6b62f39" - ] - ] - ], - [ - [ - { - "id": "test", - "single_end": false - }, - "test.fastp.json:md5,1e0f8e27e71728e2b63fc64086be95cd" - ] - ], - [ - [ - { - "id": "test", - "single_end": false - }, - 198 - ] - ], - [ - - ], - [ - - ], - [ - - ], - [ - "versions.yml:md5,85bd0117e5778fff18e3920972a296ad" - ] - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" - }, - "timestamp": "2024-07-22T16:56:01.933832" - }, - "save_trimmed_fail": { - "content": [ - [ - [ - { - "id": "test", - "single_end": false - }, - "unspecified" - ] - ], - [ - [ - { - "id": "test", - "single_end": false - }, - [ - "test_1.fastp.fastq.gz:md5,6ff32a64c5188b9a9192be1398c262c7", - "test_2.fastp.fastq.gz:md5,db0cb7c9977e94ac2b4b446ebd017a8a" - ] - ] - ], - [ - [ - { - "id": "test", - "single_end": false - }, - "test.fastp.json:md5,4c3268ddb50ea5b33125984776aa3519" - ] - ], - [ - [ - { - "id": "test", - "single_end": false - }, - 162 - ] - ], - [ - [ - { - "id": "test", - "single_end": false - }, - [ - "test.paired.fail.fastq.gz:md5,409b687c734cedd7a1fec14d316e1366", - "test_1.fail.fastq.gz:md5,4f273cf3159c13f79e8ffae12f5661f6", - "test_2.fail.fastq.gz:md5,f97b9edefb5649aab661fbc9e71fc995" - ] - ] - ], - [ - - ], - [ - - ], - [ - "versions.yml:md5,85bd0117e5778fff18e3920972a296ad", - "versions.yml:md5,c50aa59475ab901bc6f9a2cf7b1a14e0", - "versions.yml:md5,f3dcaae948e8eed92b4a5557b4c6668e" - ] - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" - }, - "timestamp": "2024-07-22T16:57:38.736" - }, - "skip_umi_extract": { - "content": [ - [ - [ - { - "id": "test", - "single_end": false - }, - "unspecified" - ] - ], - [ - [ - { - "id": "test", - "single_end": false - }, - [ - "test_1.fastp.fastq.gz:md5,67b2bbae47f073e05a97a9c2edce23c7", - "test_2.fastp.fastq.gz:md5,25cbdca08e2083dbd4f0502de6b62f39" - ] - ] - ], - [ - [ - { - "id": "test", - "single_end": false - }, - "test.fastp.json:md5,1e0f8e27e71728e2b63fc64086be95cd" - ] - ], - [ - [ - { - "id": "test", - "single_end": false - }, - 198 - ] - ], - [ - - ], - [ - - ], - [ - - ], - [ - "versions.yml:md5,85bd0117e5778fff18e3920972a296ad", - "versions.yml:md5,c50aa59475ab901bc6f9a2cf7b1a14e0", - "versions.yml:md5,f3dcaae948e8eed92b4a5557b4c6668e" - ] - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" - }, - "timestamp": "2024-07-22T16:56:47.905105" - }, - "umi_discard_read = 2": { - "content": [ - [ - [ - { - "id": "test", - "single_end": false - }, - "unspecified" - ] - ], - [ - [ - { - "id": "test", - "single_end": false - }, - [ - "test_1.fastp.fastq.gz:md5,67b2bbae47f073e05a97a9c2edce23c7", - "test_2.fastp.fastq.gz:md5,25cbdca08e2083dbd4f0502de6b62f39" - ] - ] - ], - [ - [ - { - "id": "test", - "single_end": false - }, - "test.fastp.json:md5,1e0f8e27e71728e2b63fc64086be95cd" - ] - ], - [ - [ - { - "id": "test", - "single_end": false - }, - 198 - ] - ], - [ - - ], - [ - - ], - [ - - ], - [ - "versions.yml:md5,85bd0117e5778fff18e3920972a296ad", - "versions.yml:md5,c50aa59475ab901bc6f9a2cf7b1a14e0", - "versions.yml:md5,f3dcaae948e8eed92b4a5557b4c6668e" - ] - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" - }, - "timestamp": "2024-07-22T16:57:05.436744" - }, - "umi_discard_read = 2 - stub": { - "content": [ - { - "0": [ - [ - { - "id": "test", - "single_end": false - }, - [ - "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", - "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" - ] - ] - ], - "1": [ - [ - { - "id": "test", - "single_end": false - }, - "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "10": [ - [ - { - "id": "test", - "single_end": false - }, - 1 - ] - ], - "11": [ - [ - { - "id": "test", - "single_end": false - }, - "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "12": [ - [ - { - "id": "test", - "single_end": false - }, - "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "13": [ - "versions.yml:md5,85bd0117e5778fff18e3920972a296ad", - "versions.yml:md5,c50aa59475ab901bc6f9a2cf7b1a14e0", - "versions.yml:md5,f3dcaae948e8eed92b4a5557b4c6668e" - ], - "2": [ - [ - { - "id": "test", - "single_end": false - }, - "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "3": [ - - ], - "4": [ - [ - { - "id": "test", - "single_end": false - }, - "" - ] - ], - "5": [ - [ - { - "id": "test", - "single_end": false - }, - "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "6": [ - [ - { - "id": "test", - "single_end": false - }, - "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "7": [ - [ - { - "id": "test", - "single_end": false - }, - "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "8": [ - - ], - "9": [ - - ], - "adapter_seq": [ - [ - { - "id": "test", - "single_end": false - }, - "" - ] - ], - "fastqc_raw_html": [ - [ - { - "id": "test", - "single_end": false - }, - "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "fastqc_raw_zip": [ - [ - { - "id": "test", - "single_end": false - }, - "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "fastqc_trim_html": [ - [ - { - "id": "test", - "single_end": false - }, - "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "fastqc_trim_zip": [ - [ - { - "id": "test", - "single_end": false - }, - "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "reads": [ - [ - { - "id": "test", - "single_end": false - }, - [ - "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", - "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" - ] - ] - ], - "trim_html": [ - [ - { - "id": "test", - "single_end": false - }, - "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "trim_json": [ - [ - { - "id": "test", - "single_end": false - }, - "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "trim_log": [ - [ - { - "id": "test", - "single_end": false - }, - "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "trim_read_count": [ - [ - { - "id": "test", - "single_end": false - }, - 1 - ] - ], - "trim_reads_fail": [ - - ], - "trim_reads_merged": [ - - ], - "umi_log": [ - - ], - "versions": [ - "versions.yml:md5,85bd0117e5778fff18e3920972a296ad", - "versions.yml:md5,c50aa59475ab901bc6f9a2cf7b1a14e0", - "versions.yml:md5,f3dcaae948e8eed92b4a5557b4c6668e" - ] - } - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" - }, - "timestamp": "2024-07-22T16:59:27.273892" - }, - "skip_trimming - stub": { - "content": [ - [ - - ], - [ - [ - { - "id": "test", - "single_end": false - }, - "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - [ - [ - { - "id": "test", - "single_end": false - }, - "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - [ - - ], - [ - - ], - [ - - ], - [ - - ], - [ - - ], - [ - - ], - [ - - ], - [ - - ], - [ - - ], - [ - "versions.yml:md5,f3dcaae948e8eed92b4a5557b4c6668e" - ] - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" - }, - "timestamp": "2024-07-22T16:59:39.247758" - }, - "save_merged": { - "content": [ - [ - [ - { - "id": "test", - "single_end": false - }, - "unspecified" - ] - ], - [ - [ - { - "id": "test", - "single_end": false - }, - [ - "test_1.fastp.fastq.gz:md5,54b726a55e992a869fd3fa778afe1672", - "test_2.fastp.fastq.gz:md5,29d3b33b869f7b63417b8ff07bb128ba" - ] - ] - ], - [ - [ - { - "id": "test", - "single_end": false - }, - "test.fastp.json:md5,b712fd68ed0322f4bec49ff2a5237fcc" - ] - ], - [ - [ - { - "id": "test", - "single_end": false - }, - 75 - ] - ], - [ - - ], - [ - [ - { - "id": "test", - "single_end": false - }, - "test.merged.fastq.gz:md5,c873bb1ab3fa859dcc47306465e749d5" - ] - ], - [ - - ], - [ - "versions.yml:md5,85bd0117e5778fff18e3920972a296ad", - "versions.yml:md5,c50aa59475ab901bc6f9a2cf7b1a14e0", - "versions.yml:md5,f3dcaae948e8eed92b4a5557b4c6668e" - ] - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" - }, - "timestamp": "2024-07-22T16:57:57.472342" - }, - "skip_trimming": { - "content": [ - [ - - ], - { - "id": "test", - "single_end": false - }, - [ - - ], - [ - - ], - [ - - ], - [ - - ], - [ - - ], - [ - "versions.yml:md5,f3dcaae948e8eed92b4a5557b4c6668e" - ] - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" - }, - "timestamp": "2024-07-22T16:57:19.875543" - }, - "with_umi": { - "content": [ - [ - [ - { - "id": "test", - "single_end": true - }, - "" - ] - ], - [ - [ - { - "id": "test", - "single_end": true - }, - "test.fastp.fastq.gz:md5,ba8c6c3a7ce718d9a2c5857e2edf53bc" - ] - ], - [ - [ - { - "id": "test", - "single_end": true - }, - "test.fastp.json:md5,d39c5c6d9a2e35fb60d26ced46569af6" - ] - ], - [ - [ - { - "id": "test", - "single_end": true - }, - 99 - ] - ], - [ - - ], - [ - - ], - [ - "versions.yml:md5,01f264f78de3c6d893c449cc6d3cd721", - "versions.yml:md5,85bd0117e5778fff18e3920972a296ad", - "versions.yml:md5,c50aa59475ab901bc6f9a2cf7b1a14e0", - "versions.yml:md5,f3dcaae948e8eed92b4a5557b4c6668e" - ] - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" - }, - "timestamp": "2024-07-22T16:56:26.778625" - }, - "min_trimmed_reads = 26": { - "content": [ - [ - [ - { - "id": "test", - "single_end": false - }, - "unspecified" - ] - ], - [ - [ - { - "id": "test", - "single_end": false - }, - [ - "test_1.fastp.fastq.gz:md5,54b726a55e992a869fd3fa778afe1672", - "test_2.fastp.fastq.gz:md5,29d3b33b869f7b63417b8ff07bb128ba" - ] - ] - ], - [ - [ - { - "id": "test", - "single_end": false - }, - "test.fastp.json:md5,b712fd68ed0322f4bec49ff2a5237fcc" - ] - ], - [ - [ - { - "id": "test", - "single_end": false - }, - 75 - ] - ], - [ - - ], - [ - [ - { - "id": "test", - "single_end": false - }, - "test.merged.fastq.gz:md5,c873bb1ab3fa859dcc47306465e749d5" - ] - ], - [ - - ], - [ - "versions.yml:md5,85bd0117e5778fff18e3920972a296ad", - "versions.yml:md5,c50aa59475ab901bc6f9a2cf7b1a14e0", - "versions.yml:md5,f3dcaae948e8eed92b4a5557b4c6668e" - ] - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" - }, - "timestamp": "2024-07-22T16:58:16.36697" - }, - "min_trimmed_reads = 26 - stub": { - "content": [ - { - "0": [ - [ - { - "id": "test", - "single_end": false - }, - [ - "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", - "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" - ] - ] - ], - "1": [ - [ - { - "id": "test", - "single_end": false - }, - "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "10": [ - [ - { - "id": "test", - "single_end": false - }, - 26 - ] - ], - "11": [ - [ - { - "id": "test", - "single_end": false - }, - "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "12": [ - [ - { - "id": "test", - "single_end": false - }, - "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "13": [ - "versions.yml:md5,85bd0117e5778fff18e3920972a296ad", - "versions.yml:md5,c50aa59475ab901bc6f9a2cf7b1a14e0", - "versions.yml:md5,f3dcaae948e8eed92b4a5557b4c6668e" - ], - "2": [ - [ - { - "id": "test", - "single_end": false - }, - "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "3": [ - - ], - "4": [ - [ - { - "id": "test", - "single_end": false - }, - "" - ] - ], - "5": [ - [ - { - "id": "test", - "single_end": false - }, - "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "6": [ - [ - { - "id": "test", - "single_end": false - }, - "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "7": [ - [ - { - "id": "test", - "single_end": false - }, - "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "8": [ - - ], - "9": [ - [ - { - "id": "test", - "single_end": false - }, - "test.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" - ] - ], - "adapter_seq": [ - [ - { - "id": "test", - "single_end": false - }, - "" - ] - ], - "fastqc_raw_html": [ - [ - { - "id": "test", - "single_end": false - }, - "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "fastqc_raw_zip": [ - [ - { - "id": "test", - "single_end": false - }, - "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "fastqc_trim_html": [ - [ - { - "id": "test", - "single_end": false - }, - "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "fastqc_trim_zip": [ - [ - { - "id": "test", - "single_end": false - }, - "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "reads": [ - [ - { - "id": "test", - "single_end": false - }, - [ - "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", - "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" - ] - ] - ], - "trim_html": [ - [ - { - "id": "test", - "single_end": false - }, - "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "trim_json": [ - [ - { - "id": "test", - "single_end": false - }, - "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "trim_log": [ - [ - { - "id": "test", - "single_end": false - }, - "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "trim_read_count": [ - [ - { - "id": "test", - "single_end": false - }, - 26 - ] - ], - "trim_reads_fail": [ - - ], - "trim_reads_merged": [ - [ - { - "id": "test", - "single_end": false - }, - "test.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" - ] - ], - "umi_log": [ - - ], - "versions": [ - "versions.yml:md5,85bd0117e5778fff18e3920972a296ad", - "versions.yml:md5,c50aa59475ab901bc6f9a2cf7b1a14e0", - "versions.yml:md5,f3dcaae948e8eed92b4a5557b4c6668e" - ] - } - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" - }, - "timestamp": "2024-07-22T17:00:16.524361" - }, - "with_umi - stub": { - "content": [ - { - "0": [ - [ - { - "id": "test", - "single_end": true - }, - "test.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" - ] - ], - "1": [ - [ - { - "id": "test", - "single_end": false - }, - "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "10": [ - [ - { - "id": "test", - "single_end": true - }, - 1 - ] - ], - "11": [ - [ - { - "id": "test", - "single_end": true - }, - "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "12": [ - [ - { - "id": "test", - "single_end": true - }, - "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "13": [ - "versions.yml:md5,01f264f78de3c6d893c449cc6d3cd721", - "versions.yml:md5,85bd0117e5778fff18e3920972a296ad", - "versions.yml:md5,c50aa59475ab901bc6f9a2cf7b1a14e0", - "versions.yml:md5,f3dcaae948e8eed92b4a5557b4c6668e" - ], - "2": [ - [ - { - "id": "test", - "single_end": false - }, - "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "3": [ - [ - { - "id": "test", - "single_end": false - }, - "test.umi_extract.log:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "4": [ - [ - { - "id": "test", - "single_end": true - }, - "" - ] - ], - "5": [ - [ - { - "id": "test", - "single_end": true - }, - "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "6": [ - [ - { - "id": "test", - "single_end": true - }, - "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "7": [ - [ - { - "id": "test", - "single_end": true - }, - "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "8": [ - - ], - "9": [ - - ], - "adapter_seq": [ - [ - { - "id": "test", - "single_end": true - }, - "" - ] - ], - "fastqc_raw_html": [ - [ - { - "id": "test", - "single_end": false - }, - "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "fastqc_raw_zip": [ - [ - { - "id": "test", - "single_end": false - }, - "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "fastqc_trim_html": [ - [ - { - "id": "test", - "single_end": true - }, - "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "fastqc_trim_zip": [ - [ - { - "id": "test", - "single_end": true - }, - "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "reads": [ - [ - { - "id": "test", - "single_end": true - }, - "test.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" - ] - ], - "trim_html": [ - [ - { - "id": "test", - "single_end": true - }, - "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "trim_json": [ - [ - { - "id": "test", - "single_end": true - }, - "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "trim_log": [ - [ - { - "id": "test", - "single_end": true - }, - "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "trim_read_count": [ - [ - { - "id": "test", - "single_end": true - }, - 1 - ] - ], - "trim_reads_fail": [ - - ], - "trim_reads_merged": [ - - ], - "umi_log": [ - [ - { - "id": "test", - "single_end": false - }, - "test.umi_extract.log:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "versions": [ - "versions.yml:md5,01f264f78de3c6d893c449cc6d3cd721", - "versions.yml:md5,85bd0117e5778fff18e3920972a296ad", - "versions.yml:md5,c50aa59475ab901bc6f9a2cf7b1a14e0", - "versions.yml:md5,f3dcaae948e8eed92b4a5557b4c6668e" - ] - } - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" - }, - "timestamp": "2024-07-22T16:58:56.42517" - }, - "skip_fastqc - stub": { - "content": [ - { - "0": [ - [ - { - "id": "test", - "single_end": false - }, - [ - "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", - "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" - ] - ] - ], - "1": [ - - ], - "10": [ - [ - { - "id": "test", - "single_end": false - }, - 1 - ] - ], - "11": [ - - ], - "12": [ - - ], - "13": [ - "versions.yml:md5,85bd0117e5778fff18e3920972a296ad" - ], - "2": [ - - ], - "3": [ - - ], - "4": [ - [ - { - "id": "test", - "single_end": false - }, - "" - ] - ], - "5": [ - [ - { - "id": "test", - "single_end": false - }, - "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "6": [ - [ - { - "id": "test", - "single_end": false - }, - "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "7": [ - [ - { - "id": "test", - "single_end": false - }, - "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "8": [ - - ], - "9": [ - - ], - "adapter_seq": [ - [ - { - "id": "test", - "single_end": false - }, - "" - ] - ], - "fastqc_raw_html": [ - - ], - "fastqc_raw_zip": [ - - ], - "fastqc_trim_html": [ - - ], - "fastqc_trim_zip": [ - - ], - "reads": [ - [ - { - "id": "test", - "single_end": false - }, - [ - "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", - "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" - ] - ] - ], - "trim_html": [ - [ - { - "id": "test", - "single_end": false - }, - "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "trim_json": [ - [ - { - "id": "test", - "single_end": false - }, - "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "trim_log": [ - [ - { - "id": "test", - "single_end": false - }, - "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "trim_read_count": [ - [ - { - "id": "test", - "single_end": false - }, - 1 - ] - ], - "trim_reads_fail": [ - - ], - "trim_reads_merged": [ - - ], - "umi_log": [ - - ], - "versions": [ - "versions.yml:md5,85bd0117e5778fff18e3920972a296ad" - ] - } - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" - }, - "timestamp": "2024-07-22T16:58:41.207281" - }, - "save_merged - stub": { - "content": [ - { - "0": [ - [ - { - "id": "test", - "single_end": false - }, - [ - "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", - "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" - ] - ] - ], - "1": [ - [ - { - "id": "test", - "single_end": false - }, - "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "10": [ - [ - { - "id": "test", - "single_end": false - }, - 1 - ] - ], - "11": [ - [ - { - "id": "test", - "single_end": false - }, - "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "12": [ - [ - { - "id": "test", - "single_end": false - }, - "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "13": [ - "versions.yml:md5,85bd0117e5778fff18e3920972a296ad", - "versions.yml:md5,c50aa59475ab901bc6f9a2cf7b1a14e0", - "versions.yml:md5,f3dcaae948e8eed92b4a5557b4c6668e" - ], - "2": [ - [ - { - "id": "test", - "single_end": false - }, - "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "3": [ - - ], - "4": [ - [ - { - "id": "test", - "single_end": false - }, - "" - ] - ], - "5": [ - [ - { - "id": "test", - "single_end": false - }, - "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "6": [ - [ - { - "id": "test", - "single_end": false - }, - "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "7": [ - [ - { - "id": "test", - "single_end": false - }, - "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "8": [ - - ], - "9": [ - [ - { - "id": "test", - "single_end": false - }, - "test.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" - ] - ], - "adapter_seq": [ - [ - { - "id": "test", - "single_end": false - }, - "" - ] - ], - "fastqc_raw_html": [ - [ - { - "id": "test", - "single_end": false - }, - "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "fastqc_raw_zip": [ - [ - { - "id": "test", - "single_end": false - }, - "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "fastqc_trim_html": [ - [ - { - "id": "test", - "single_end": false - }, - "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "fastqc_trim_zip": [ - [ - { - "id": "test", - "single_end": false - }, - "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "reads": [ - [ - { - "id": "test", - "single_end": false - }, - [ - "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", - "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" - ] - ] - ], - "trim_html": [ - [ - { - "id": "test", - "single_end": false - }, - "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "trim_json": [ - [ - { - "id": "test", - "single_end": false - }, - "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "trim_log": [ - [ - { - "id": "test", - "single_end": false - }, - "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "trim_read_count": [ - [ - { - "id": "test", - "single_end": false - }, - 1 - ] - ], - "trim_reads_fail": [ - - ], - "trim_reads_merged": [ - [ - { - "id": "test", - "single_end": false - }, - "test.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" - ] - ], - "umi_log": [ - - ], - "versions": [ - "versions.yml:md5,85bd0117e5778fff18e3920972a296ad", - "versions.yml:md5,c50aa59475ab901bc6f9a2cf7b1a14e0", - "versions.yml:md5,f3dcaae948e8eed92b4a5557b4c6668e" - ] - } - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" - }, - "timestamp": "2024-07-22T17:00:03.695409" - }, - "sarscov2 paired-end [fastq]": { - "content": [ - [ - [ - { - "id": "test", - "single_end": false - }, - "unspecified" - ] - ], - [ - [ - { - "id": "test", - "single_end": false - }, - [ - "test_1.fastp.fastq.gz:md5,67b2bbae47f073e05a97a9c2edce23c7", - "test_2.fastp.fastq.gz:md5,25cbdca08e2083dbd4f0502de6b62f39" - ] - ] - ], - [ - [ - { - "id": "test", - "single_end": false - }, - "test.fastp.json:md5,1e0f8e27e71728e2b63fc64086be95cd" - ] - ], - [ - [ - { - "id": "test", - "single_end": false - }, - 198 - ] - ], - [ - - ], - [ - - ], - [ - - ], - [ - "versions.yml:md5,85bd0117e5778fff18e3920972a296ad", - "versions.yml:md5,c50aa59475ab901bc6f9a2cf7b1a14e0", - "versions.yml:md5,f3dcaae948e8eed92b4a5557b4c6668e" - ] - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" - }, - "timestamp": "2024-07-22T16:55:50.614571" - }, - "sarscov2 paired-end [fastq] - stub": { - "content": [ - { - "0": [ - [ - { - "id": "test", - "single_end": false - }, - [ - "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", - "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" - ] - ] - ], - "1": [ - [ - { - "id": "test", - "single_end": false - }, - "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "10": [ - [ - { - "id": "test", - "single_end": false - }, - 1 - ] - ], - "11": [ - [ - { - "id": "test", - "single_end": false - }, - "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "12": [ - [ - { - "id": "test", - "single_end": false - }, - "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "13": [ - "versions.yml:md5,85bd0117e5778fff18e3920972a296ad", - "versions.yml:md5,c50aa59475ab901bc6f9a2cf7b1a14e0", - "versions.yml:md5,f3dcaae948e8eed92b4a5557b4c6668e" - ], - "2": [ - [ - { - "id": "test", - "single_end": false - }, - "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "3": [ - - ], - "4": [ - [ - { - "id": "test", - "single_end": false - }, - "" - ] - ], - "5": [ - [ - { - "id": "test", - "single_end": false - }, - "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "6": [ - [ - { - "id": "test", - "single_end": false - }, - "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "7": [ - [ - { - "id": "test", - "single_end": false - }, - "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "8": [ - - ], - "9": [ - - ], - "adapter_seq": [ - [ - { - "id": "test", - "single_end": false - }, - "" - ] - ], - "fastqc_raw_html": [ - [ - { - "id": "test", - "single_end": false - }, - "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "fastqc_raw_zip": [ - [ - { - "id": "test", - "single_end": false - }, - "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "fastqc_trim_html": [ - [ - { - "id": "test", - "single_end": false - }, - "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "fastqc_trim_zip": [ - [ - { - "id": "test", - "single_end": false - }, - "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "reads": [ - [ - { - "id": "test", - "single_end": false - }, - [ - "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", - "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" - ] - ] - ], - "trim_html": [ - [ - { - "id": "test", - "single_end": false - }, - "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "trim_json": [ - [ - { - "id": "test", - "single_end": false - }, - "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "trim_log": [ - [ - { - "id": "test", - "single_end": false - }, - "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "trim_read_count": [ - [ - { - "id": "test", - "single_end": false - }, - 1 - ] - ], - "trim_reads_fail": [ - - ], - "trim_reads_merged": [ - - ], - "umi_log": [ - - ], - "versions": [ - "versions.yml:md5,85bd0117e5778fff18e3920972a296ad", - "versions.yml:md5,c50aa59475ab901bc6f9a2cf7b1a14e0", - "versions.yml:md5,f3dcaae948e8eed92b4a5557b4c6668e" - ] - } - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" - }, - "timestamp": "2024-07-22T16:58:29.296468" - }, - "save_trimmed_fail - stub": { - "content": [ - { - "0": [ - [ - { - "id": "test", - "single_end": false - }, - [ - "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", - "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" - ] - ] - ], - "1": [ - [ - { - "id": "test", - "single_end": false - }, - "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "10": [ - [ - { - "id": "test", - "single_end": false - }, - 1 - ] - ], - "11": [ - [ - { - "id": "test", - "single_end": false - }, - "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "12": [ - [ - { - "id": "test", - "single_end": false - }, - "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "13": [ - "versions.yml:md5,85bd0117e5778fff18e3920972a296ad", - "versions.yml:md5,c50aa59475ab901bc6f9a2cf7b1a14e0", - "versions.yml:md5,f3dcaae948e8eed92b4a5557b4c6668e" - ], - "2": [ - [ - { - "id": "test", - "single_end": false - }, - "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "3": [ - - ], - "4": [ - [ - { - "id": "test", - "single_end": false - }, - "" - ] - ], - "5": [ - [ - { - "id": "test", - "single_end": false - }, - "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "6": [ - [ - { - "id": "test", - "single_end": false - }, - "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "7": [ - [ - { - "id": "test", - "single_end": false - }, - "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "8": [ - [ - { - "id": "test", - "single_end": false - }, - [ - "test.paired.fail.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", - "test_1.fail.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", - "test_2.fail.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" - ] - ] - ], - "9": [ - - ], - "adapter_seq": [ - [ - { - "id": "test", - "single_end": false - }, - "" - ] - ], - "fastqc_raw_html": [ - [ - { - "id": "test", - "single_end": false - }, - "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "fastqc_raw_zip": [ - [ - { - "id": "test", - "single_end": false - }, - "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "fastqc_trim_html": [ - [ - { - "id": "test", - "single_end": false - }, - "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "fastqc_trim_zip": [ - [ - { - "id": "test", - "single_end": false - }, - "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "reads": [ - [ - { - "id": "test", - "single_end": false - }, - [ - "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", - "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" - ] - ] - ], - "trim_html": [ - [ - { - "id": "test", - "single_end": false - }, - "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "trim_json": [ - [ - { - "id": "test", - "single_end": false - }, - "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "trim_log": [ - [ - { - "id": "test", - "single_end": false - }, - "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "trim_read_count": [ - [ - { - "id": "test", - "single_end": false - }, - 1 - ] - ], - "trim_reads_fail": [ - [ - { - "id": "test", - "single_end": false - }, - [ - "test.paired.fail.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", - "test_1.fail.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", - "test_2.fail.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" - ] - ] - ], - "trim_reads_merged": [ - - ], - "umi_log": [ - - ], - "versions": [ - "versions.yml:md5,85bd0117e5778fff18e3920972a296ad", - "versions.yml:md5,c50aa59475ab901bc6f9a2cf7b1a14e0", - "versions.yml:md5,f3dcaae948e8eed92b4a5557b4c6668e" - ] - } - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" - }, - "timestamp": "2024-07-22T16:59:51.615894" - }, - "skip_umi_extract - stub": { - "content": [ - { - "0": [ - [ - { - "id": "test", - "single_end": false - }, - [ - "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", - "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" - ] - ] - ], - "1": [ - [ - { - "id": "test", - "single_end": false - }, - "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "10": [ - [ - { - "id": "test", - "single_end": false - }, - 1 - ] - ], - "11": [ - [ - { - "id": "test", - "single_end": false - }, - "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "12": [ - [ - { - "id": "test", - "single_end": false - }, - "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "13": [ - "versions.yml:md5,85bd0117e5778fff18e3920972a296ad", - "versions.yml:md5,c50aa59475ab901bc6f9a2cf7b1a14e0", - "versions.yml:md5,f3dcaae948e8eed92b4a5557b4c6668e" - ], - "2": [ - [ - { - "id": "test", - "single_end": false - }, - "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "3": [ - - ], - "4": [ - [ - { - "id": "test", - "single_end": false - }, - "" - ] - ], - "5": [ - [ - { - "id": "test", - "single_end": false - }, - "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "6": [ - [ - { - "id": "test", - "single_end": false - }, - "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "7": [ - [ - { - "id": "test", - "single_end": false - }, - "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "8": [ - - ], - "9": [ - - ], - "adapter_seq": [ - [ - { - "id": "test", - "single_end": false - }, - "" - ] - ], - "fastqc_raw_html": [ - [ - { - "id": "test", - "single_end": false - }, - "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "fastqc_raw_zip": [ - [ - { - "id": "test", - "single_end": false - }, - "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "fastqc_trim_html": [ - [ - { - "id": "test", - "single_end": false - }, - "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "fastqc_trim_zip": [ - [ - { - "id": "test", - "single_end": false - }, - "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "reads": [ - [ - { - "id": "test", - "single_end": false - }, - [ - "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", - "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" - ] - ] - ], - "trim_html": [ - [ - { - "id": "test", - "single_end": false - }, - "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "trim_json": [ - [ - { - "id": "test", - "single_end": false - }, - "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "trim_log": [ - [ - { - "id": "test", - "single_end": false - }, - "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "trim_read_count": [ - [ - { - "id": "test", - "single_end": false - }, - 1 - ] - ], - "trim_reads_fail": [ - - ], - "trim_reads_merged": [ - - ], - "umi_log": [ - - ], - "versions": [ - "versions.yml:md5,85bd0117e5778fff18e3920972a296ad", - "versions.yml:md5,c50aa59475ab901bc6f9a2cf7b1a14e0", - "versions.yml:md5,f3dcaae948e8eed92b4a5557b4c6668e" - ] - } - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" - }, - "timestamp": "2024-07-22T16:59:12.592278" - } -} \ No newline at end of file diff --git a/subworkflows/nf-core/fastq_fastqc_umitools_fastp/tests/nextflow.config b/subworkflows/nf-core/fastq_fastqc_umitools_fastp/tests/nextflow.config deleted file mode 100644 index 0174cae..0000000 --- a/subworkflows/nf-core/fastq_fastqc_umitools_fastp/tests/nextflow.config +++ /dev/null @@ -1,11 +0,0 @@ -process { - - withName: UMITOOLS_EXTRACT { - ext.args = '--bc-pattern="NNNN" --bc-pattern2="NNNN"' - } - - withName: UMICOLLAPSE { - ext.prefix = { "${meta.id}.dedup" } - } - -} diff --git a/subworkflows/nf-core/fastq_fastqc_umitools_fastp/tests/nextflow.save_trimmed.config b/subworkflows/nf-core/fastq_fastqc_umitools_fastp/tests/nextflow.save_trimmed.config deleted file mode 100644 index 21207ad..0000000 --- a/subworkflows/nf-core/fastq_fastqc_umitools_fastp/tests/nextflow.save_trimmed.config +++ /dev/null @@ -1,6 +0,0 @@ -process { - // Make filtering more aggressive to make more reads fail - withName: FASTP { - ext.args = "-e 30" - } -} diff --git a/subworkflows/nf-core/fastq_fastqc_umitools_fastp/tests/tags.yml b/subworkflows/nf-core/fastq_fastqc_umitools_fastp/tests/tags.yml deleted file mode 100644 index 84a4b56..0000000 --- a/subworkflows/nf-core/fastq_fastqc_umitools_fastp/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -subworkflows/fastq_fastqc_umitools_fastp: - - subworkflows/nf-core/fastq_fastqc_umitools_fastp/** 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 0000000..ac31f28 --- /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 0000000..e5c3a0a --- /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 0000000..68718e4 --- /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 0000000..e3f0baf --- /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 0000000..ca964ce --- /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 0000000..d0a926b --- /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 0000000..f847611 --- /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 0000000..14558c3 --- /dev/null +++ b/subworkflows/nf-core/utils_nfcore_pipeline/main.nf @@ -0,0 +1,446 @@ +// +// 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() { + def temp_doi_ref = "" + String[] manifest_doi = workflow.manifest.doi.tokenize(",") + // Using a loop to handle multiple DOIs + // Removing `https://doi.org/` to handle pipelines using DOIs vs DOI resolvers + // Removing ` ` since the manifest.doi is a string and not a proper list + for (String doi_ref: manifest_doi) temp_doi_ref += " https://doi.org/${doi_ref.replace('https://doi.org/', '').replace(' ', '')}\n" + return "If you use ${workflow.manifest.name} for your analysis please cite:\n\n" + + "* The pipeline\n" + + temp_doi_ref + "\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 0000000..d08d243 --- /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 0000000..1dc317f --- /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 0000000..1037232 --- /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 0000000..8940d32 --- /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 0000000..859d103 --- /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 0000000..d0a926b --- /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 0000000..ac8523c --- /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 0000000..2585b65 --- /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 0000000..3d4a6b0 --- /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 0000000..5784a33 --- /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 0000000..7626c1c --- /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 0000000..60b1cff --- /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/** diff --git a/tests/minimal/assemblysheet.csv b/tests/minimal/assemblysheet.csv deleted file mode 100644 index a77d36a..0000000 --- a/tests/minimal/assemblysheet.csv +++ /dev/null @@ -1,2 +0,0 @@ -tag,fasta,is_masked -a_thaliana,https://raw.githubusercontent.com/Gaius-Augustus/BRAKER/f58479fe5bb13a9e51c3ca09cb9e137cab3b8471/example/genome.fa,yes diff --git a/tests/minimal/params.json b/tests/minimal/params.json deleted file mode 100644 index c3e9566..0000000 --- a/tests/minimal/params.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "input": "tests/minimal/assemblysheet.csv", - "protein_evidence": "https://raw.githubusercontent.com/Gaius-Augustus/BRAKER/f58479fe5bb13a9e51c3ca09cb9e137cab3b8471/example/proteins.fa", - "braker_extra_args": "--gm_max_intergenic 10000 --skipOptimize", - "busco_lineage_datasets": "eudicots_odb10" -} diff --git a/tests/stub/assemblysheet.csv b/tests/stub/assemblysheet.csv deleted file mode 100644 index 7fdff29..0000000 --- a/tests/stub/assemblysheet.csv +++ /dev/null @@ -1,4 +0,0 @@ -tag,fasta,is_masked,te_lib,braker_gff3,braker_hints -red5_v2p1,tests/stub/target/red5_v2p1_chr1.fasta.gz,no,,tests/stub/braker/red5_v2p1.gff3.gz,tests/stub/braker/red5_v2p1.hints.gff.gz -donghong,tests/stub/target/donghong.chr1.fsa.gz,no,tests/stub/te_lib/donghong.TElib.fa.gz,tests/stub/braker/red5_v2p1.gff3.gz,tests/stub/braker/red5_v2p1.hints.gff.gz -red5_v3,tests/stub/target/red5_v3_chr1.fasta,yes diff --git a/tests/stub/bam/1505KHS-0090_Root3.red5_v3.bam b/tests/stub/bam/1505KHS-0090_Root3.red5_v3.bam deleted file mode 100644 index e69de29..0000000 diff --git a/tests/stub/bam/1505KHS-0092_Root3.red5_v3.bam b/tests/stub/bam/1505KHS-0092_Root3.red5_v3.bam deleted file mode 100644 index e69de29..0000000 diff --git a/tests/stub/braker/donghong.gff3.gz b/tests/stub/braker/donghong.gff3.gz deleted file mode 100644 index e69de29..0000000 diff --git a/tests/stub/braker/donghong.hints.gff.gz b/tests/stub/braker/donghong.hints.gff.gz deleted file mode 100644 index e69de29..0000000 diff --git a/tests/stub/braker/red5_v2p1.gff3.gz b/tests/stub/braker/red5_v2p1.gff3.gz deleted file mode 100644 index e69de29..0000000 diff --git a/tests/stub/braker/red5_v2p1.hints.gff.gz b/tests/stub/braker/red5_v2p1.hints.gff.gz deleted file mode 100644 index e69de29..0000000 diff --git a/tests/stub/emapperdb/5.0.2/eggnog.db b/tests/stub/emapperdb/5.0.2/eggnog.db deleted file mode 100644 index e69de29..0000000 diff --git a/tests/stub/emapperdb/5.0.2/eggnog_proteins.dmnd b/tests/stub/emapperdb/5.0.2/eggnog_proteins.dmnd deleted file mode 100644 index e69de29..0000000 diff --git a/tests/stub/ext_prot/RU01.20221115150135.chr1.pep.fasta.gz b/tests/stub/ext_prot/RU01.20221115150135.chr1.pep.fasta.gz deleted file mode 100644 index e69de29..0000000 diff --git a/tests/stub/ext_prot/RU01.20221115150135.chr2.pep.fasta.gz b/tests/stub/ext_prot/RU01.20221115150135.chr2.pep.fasta.gz deleted file mode 100644 index e69de29..0000000 diff --git a/tests/stub/external-protein-fastas.txt b/tests/stub/external-protein-fastas.txt deleted file mode 100644 index d510c4c..0000000 --- a/tests/stub/external-protein-fastas.txt +++ /dev/null @@ -1,2 +0,0 @@ -tests/stub/ext_prot/RU01.20221115150135.chr1.pep.fasta.gz -tests/stub/ext_prot/RU01.20221115150135.chr2.pep.fasta.gz diff --git a/tests/stub/fq/1505KHS-0090_Root1_162bp_C728RACXX_Lane1_R1.1k.fastq.gz b/tests/stub/fq/1505KHS-0090_Root1_162bp_C728RACXX_Lane1_R1.1k.fastq.gz deleted file mode 100644 index e69de29..0000000 diff --git a/tests/stub/fq/1505KHS-0090_Root1_162bp_C728RACXX_Lane1_R2.1k.fastq.gz b/tests/stub/fq/1505KHS-0090_Root1_162bp_C728RACXX_Lane1_R2.1k.fastq.gz deleted file mode 100644 index e69de29..0000000 diff --git a/tests/stub/fq/1505KHS-0090_Root2_156bp_C728RACXX_Lane1_R1.1k.fastq.gz b/tests/stub/fq/1505KHS-0090_Root2_156bp_C728RACXX_Lane1_R1.1k.fastq.gz deleted file mode 100644 index e69de29..0000000 diff --git a/tests/stub/fq/1505KHS-0090_Root2_156bp_C728RACXX_Lane1_R2.1k.fastq.gz b/tests/stub/fq/1505KHS-0090_Root2_156bp_C728RACXX_Lane1_R2.1k.fastq.gz deleted file mode 100644 index e69de29..0000000 diff --git a/tests/stub/fq/1505KHS-0090_cane3_165bp_C728RACXX_Lane1_R1.1k.fastq.gz b/tests/stub/fq/1505KHS-0090_cane3_165bp_C728RACXX_Lane1_R1.1k.fastq.gz deleted file mode 100644 index e69de29..0000000 diff --git a/tests/stub/fq/1505KHS-0090_cane3_165bp_C728RACXX_Lane1_R2.1k.fastq.gz b/tests/stub/fq/1505KHS-0090_cane3_165bp_C728RACXX_Lane1_R2.1k.fastq.gz deleted file mode 100644 index e69de29..0000000 diff --git a/tests/stub/liftoff/RU01.20221115150135.chr1.gff3.gz b/tests/stub/liftoff/RU01.20221115150135.chr1.gff3.gz deleted file mode 100644 index e69de29..0000000 diff --git a/tests/stub/liftoff/RU01.20221115150135.chr2.gff3.gz b/tests/stub/liftoff/RU01.20221115150135.chr2.gff3.gz deleted file mode 100644 index e69de29..0000000 diff --git a/tests/stub/liftoff/Russell_V2a.chr1.fsa.gz b/tests/stub/liftoff/Russell_V2a.chr1.fsa.gz deleted file mode 100644 index e69de29..0000000 diff --git a/tests/stub/liftoff/Russell_V2a.chr2.fsa.gz b/tests/stub/liftoff/Russell_V2a.chr2.fsa.gz deleted file mode 100644 index e69de29..0000000 diff --git a/tests/stub/liftoffannotations.csv b/tests/stub/liftoffannotations.csv deleted file mode 100644 index 5215d2c..0000000 --- a/tests/stub/liftoffannotations.csv +++ /dev/null @@ -1,3 +0,0 @@ -fasta,gff3 -tests/stub/liftoff/Russell_V2a.chr1.fsa.gz,tests/stub/liftoff/RU01.20221115150135.chr1.gff3.gz -tests/stub/liftoff/Russell_V2a.chr2.fsa.gz,tests/stub/liftoff/RU01.20221115150135.chr2.gff3.gz diff --git a/tests/stub/params.json b/tests/stub/params.json deleted file mode 100644 index dbaa4fb..0000000 --- a/tests/stub/params.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "input": "tests/stub/assemblysheet.csv", - "protein_evidence": "tests/stub/external-protein-fastas.txt", - "eggnogmapper_db_dir": "tests/stub/emapperdb/5.0.2", - "eggnogmapper_tax_scope": 33090, - "rna_evidence": "tests/stub/rnasheet.csv", - "liftoff_annotations": "tests/stub/liftoffannotations.csv", - "max_cpus": 2, - "max_memory": "3.GB" -} diff --git a/tests/stub/rnasheet.csv b/tests/stub/rnasheet.csv deleted file mode 100644 index 610bfbc..0000000 --- a/tests/stub/rnasheet.csv +++ /dev/null @@ -1,6 +0,0 @@ -sample,file_1,file_2,target_assemblies -Root1,tests/stub/fq/1505KHS-0090_Root1_162bp_C728RACXX_Lane1_R1.1k.fastq.gz,tests/stub/fq/1505KHS-0090_Root1_162bp_C728RACXX_Lane1_R2.1k.fastq.gz,red5_v2p1;red5_v3 -Root1,tests/stub/fq/1505KHS-0090_Root2_156bp_C728RACXX_Lane1_R1.1k.fastq.gz,tests/stub/fq/1505KHS-0090_Root2_156bp_C728RACXX_Lane1_R2.1k.fastq.gz,red5_v2p1;red5_v3 -Root3,tests/stub/bam/1505KHS-0090_Root3.red5_v3.bam,,red5_v3 -Root3,tests/stub/bam/1505KHS-0092_Root3.red5_v3.bam,,red5_v3 -cane3,tests/stub/fq/1505KHS-0090_cane3_165bp_C728RACXX_Lane1_R1.1k.fastq.gz,tests/stub/fq/1505KHS-0090_cane3_165bp_C728RACXX_Lane1_R2.1k.fastq.gz,red5_v2p1;donghong;red5_v3 diff --git a/tests/stub/target/donghong.chr1.fsa.gz b/tests/stub/target/donghong.chr1.fsa.gz deleted file mode 100644 index e69de29..0000000 diff --git a/tests/stub/target/red5_v2p1_chr1.fasta.gz b/tests/stub/target/red5_v2p1_chr1.fasta.gz deleted file mode 100644 index e69de29..0000000 diff --git a/tests/stub/target/red5_v3_chr1.fasta b/tests/stub/target/red5_v3_chr1.fasta deleted file mode 100644 index e69de29..0000000 diff --git a/tests/stub/te_lib/donghong.TElib.fa.gz b/tests/stub/te_lib/donghong.TElib.fa.gz deleted file mode 100644 index e69de29..0000000 diff --git a/tower.yml b/tower.yml new file mode 100644 index 0000000..787aedf --- /dev/null +++ b/tower.yml @@ -0,0 +1,5 @@ +reports: + multiqc_report.html: + display: "MultiQC HTML report" + samplesheet.csv: + display: "Auto-created samplesheet with collated metadata and FASTQ paths" diff --git a/workflows/genepal.nf b/workflows/genepal.nf index 9543981..1fb6a59 100644 --- a/workflows/genepal.nf +++ b/workflows/genepal.nf @@ -1,394 +1,98 @@ -include { fromSamplesheet; paramsSummaryLog } from 'plugin/nf-validation' -include { idFromFileName; validateFastqMetadata } from '../modules/local/utils' -include { validateBamMetadata } from '../modules/local/utils' -include { PREPARE_ASSEMBLY } from '../subworkflows/local/prepare_assembly' -include { PREPROCESS_RNASEQ } from '../subworkflows/local/preprocess_rnaseq' -include { ALIGN_RNASEQ } from '../subworkflows/local/align_rnaseq' -include { PREPARE_EXT_PROTS } from '../subworkflows/local/prepare_ext_prots' -include { FASTA_BRAKER3 } from '../subworkflows/local/fasta_braker3' -include { FASTA_LIFTOFF } from '../subworkflows/local/fasta_liftoff' -include { PURGE_BRAKER_MODELS } from '../subworkflows/local/purge_braker_models' -include { GFF_MERGE_CLEANUP } from '../subworkflows/local/gff_merge_cleanup' -include { GFF_EGGNOGMAPPER } from '../subworkflows/local/gff_eggnogmapper' -include { PURGE_NOHIT_MODELS } from '../subworkflows/local/purge_nohit_models' -include { GFF_STORE } from '../subworkflows/local/gff_store' -include { FASTA_ORTHOFINDER } from '../subworkflows/local/fasta_orthofinder' -include { FASTA_GXF_BUSCO_PLOT } from '../subworkflows/gallvp/fasta_gxf_busco_plot/main' -include { CAT_CAT as SAVE_MARKED_GFF3 } from '../modules/nf-core/cat/cat/main' -include { CUSTOM_DUMPSOFTWAREVERSIONS } from '../modules/nf-core/custom/dumpsoftwareversions' - -include { GXF_FASTA_AGAT_SPADDINTRONS_SPEXTRACTSEQUENCES } from '../subworkflows/gallvp/gxf_fasta_agat_spaddintrons_spextractsequences/main' - -log.info paramsSummaryLog(workflow) +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + IMPORT MODULES / SUBWORKFLOWS / FUNCTIONS +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +*/ + +include { FASTQC } from '../modules/nf-core/fastqc/main' +include { MULTIQC } from '../modules/nf-core/multiqc/main' +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 { methodsDescriptionText } from '../subworkflows/local/utils_nfcore_genepal_pipeline' + +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + RUN MAIN WORKFLOW +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +*/ workflow GENEPAL { - // Versions channel - ch_versions = Channel.empty() - - // Input channels - ch_input = Channel.fromSamplesheet('input') - - ch_target_assembly = ch_input - | map { it -> - def tag = it[0] - def fasta = it[1] - - [ [ id: tag ], file(fasta, checkIfExists: true) ] - } - - ch_tar_assm_str = ch_input - | map { it -> - def tag = it[0].strip() - - tag - } - | collect - | map { it -> - it.join(",") - } - - ch_is_masked = ch_input - | map { it -> - def tag = it[0] - def is_masked = it[2] - - [ [ id: tag ], is_masked == "yes" ] - } - - ch_te_library = ch_input - | map { it -> - def tag = it[0] - def te_fasta = it[3] - - if ( te_fasta ) { - [ [ id:tag ], file(te_fasta, checkIfExists: true) ] - } - } - - ch_braker_annotation = ch_input - | map { it -> - def tag = it[0] - def braker_gff3 = it[4] - def hints_gff = it[5] - - if ( braker_gff3 ) { - [ - [ id: tag ], - file(braker_gff3, checkIfExists: true), - file(hints_gff, checkIfExists: true) - ] - } - } - - ch_braker_ex_asm_str = ch_braker_annotation - | map { meta, braker_gff3, hints_gff -> meta.id } - | collect - | map { it.join(",") } - | ifEmpty( "" ) - - ch_rna_branch = ! params.rna_evidence - ? Channel.empty() - : Channel.fromSamplesheet('rna_evidence') - | map { meta, f1, f2 -> - f2 - ? [ meta + [ single_end: false ], [ file(f1, checkIfExists:true), file(f2, checkIfExists:true) ] ] - : [ meta + [ single_end: true ], [ file(f1, checkIfExists:true) ] ] - } - | map { meta, files -> - [ meta + [ target_assemblies: meta.target_assemblies.split(';').sort() ], files ] - } - | branch { meta, files -> - fq: files.first().extension != 'bam' - bam: files.first().extension == 'bam' - } - - ch_rna_fq = ! params.rna_evidence - ? Channel.empty() - : ch_rna_branch.fq - | map { meta, files -> [ meta.id, meta, files ] } - | groupTuple - | combine(ch_tar_assm_str) - | map { id, metas, files, tar_assm_str -> - validateFastqMetadata(metas, files, tar_assm_str) - } - - ch_rna_bam = ! params.rna_evidence - ? Channel.empty() - : ch_rna_branch.bam - | map { meta, files -> [ meta.id, meta, files ] } - | groupTuple - | combine(ch_tar_assm_str) - | flatMap { id, metas, files, tar_assm_str -> - validateBamMetadata(metas, files, tar_assm_str) - } - - // Check if each sample for a given assembly has either bam or fastq files - ch_rna_bam - | flatMap { meta, bams -> - meta.target_assemblies.collect { [ [ meta.id, it ], 'bam' ] } - } - | join( - ch_rna_fq - | flatMap { meta, fqs -> - meta.target_assemblies.collect { [ [ meta.id, it ], 'fq' ] } - } - ) - | map { combination, bam, fq -> - error "Sample ${combination[0]} for assembly ${combination[1]} can not have both fastq and bam files" - } - - ch_rna_bam_by_assembly = ch_rna_bam - | map { meta, bams -> [ [ id: meta.target_assemblies.first() ], bams ] } - | groupTuple - | map { meta, bams -> [ meta, bams.flatten() ] } - - ch_ribo_db = params.remove_ribo_rna - ? file(params.ribo_database_manifest, checkIfExists: true) - : null - - ch_sortmerna_fastas = ch_ribo_db - ? Channel.from(ch_ribo_db ? ch_ribo_db.readLines() : null) - | map { row -> file(row, checkIfExists: true) } - | collect - : Channel.empty() - - ch_ext_prot_fastas = ( params.protein_evidence.endsWith('txt') - ? Channel.fromPath(params.protein_evidence) - | splitText - : Channel.fromPath(params.protein_evidence) - ) - | map { file_path -> - - def file_handle = ( file_path instanceof String ) - ? file(file_path.strip(), checkIfExists: true) - : file_path - - [ [ id: idFromFileName( file_handle.baseName ) ], file_handle ] - } - - - ch_liftoff_mm = ! params.liftoff_annotations - ? Channel.empty() - : Channel.fromSamplesheet('liftoff_annotations') - | multiMap { fasta, gff -> - def fastaFile = file(fasta, checkIfExists:true) - - fasta: [ [ id: idFromFileName( fastaFile.baseName ) ], fastaFile ] - gff: [ [ id: idFromFileName( fastaFile.baseName ) ], file(gff, checkIfExists:true) ] - } - - ch_liftoff_fasta = params.liftoff_annotations - ? ch_liftoff_mm.fasta - : Channel.empty() - - ch_liftoff_gff = params.liftoff_annotations - ? ch_liftoff_mm.gff - : Channel.empty() - - ch_tsebra_config = Channel.of ( file("${projectDir}/assets/tsebra-template.cfg", checkIfExists: true) ) - | map { cfg -> - def param_intron_support = params.enforce_full_intron_support ? '1.0' : '0.0' - - def param_e1 = params.allow_isoforms ? '0.1' : '0.0' - def param_e2 = params.allow_isoforms ? '0.5' : '0.0' - def param_e3 = params.allow_isoforms ? '0.05' : '0.0' - def param_e4 = params.allow_isoforms ? '0.2' : '0.0' - - [ - 'tsebra-config.cfg', - cfg - .text - .replace('PARAM_INTRON_SUPPORT', param_intron_support) - .replace('PARAM_E1', param_e1) - .replace('PARAM_E2', param_e2) - .replace('PARAM_E3', param_e3) - .replace('PARAM_E4', param_e4) - ] - } - | collectFile - - - ch_orthofinder_pep = ! params.orthofinder_annotations - ? Channel.empty() - : Channel.fromSamplesheet('orthofinder_annotations') - | map { tag, fasta -> - [ [ id: tag ], file(fasta, checkIfExists:true) ] - } - - // SUBWORKFLOW: PREPARE_ASSEMBLY - PREPARE_ASSEMBLY( - ch_target_assembly, - ch_te_library, - params.repeat_annotator, - ch_braker_ex_asm_str, - ch_is_masked - ) - - ch_valid_target_assembly = PREPARE_ASSEMBLY.out.target_assemby - ch_masked_target_assembly = PREPARE_ASSEMBLY.out.masked_target_assembly - ch_target_assemby_index = PREPARE_ASSEMBLY.out.target_assemby_index - ch_versions = ch_versions.mix(PREPARE_ASSEMBLY.out.versions) - - // SUBWORKFLOW: PREPROCESS_RNASEQ - PREPROCESS_RNASEQ( - ch_rna_fq, - ch_tar_assm_str, - ch_braker_ex_asm_str, - params.skip_fastqc, - params.skip_fastp, - params.save_trimmed, - params.min_trimmed_reads, - params.remove_ribo_rna, - ch_sortmerna_fastas - ) - - ch_trim_reads = PREPROCESS_RNASEQ.out.trim_reads - ch_reads_target = PREPROCESS_RNASEQ.out.reads_target - ch_versions = ch_versions.mix(PREPROCESS_RNASEQ.out.versions) - - // SUBWORKFLOW: ALIGN_RNASEQ - ALIGN_RNASEQ( - ch_reads_target, - ch_trim_reads, - ch_rna_bam_by_assembly, - ch_target_assemby_index, - ) - - ch_rnaseq_bam = ALIGN_RNASEQ.out.bam - ch_versions = ch_versions.mix(ALIGN_RNASEQ.out.versions) - - // MODULE: PREPARE_EXT_PROTS - PREPARE_EXT_PROTS( - ch_ext_prot_fastas - ) - - ch_ext_prots_fasta = PREPARE_EXT_PROTS.out.ext_prots_fasta - ch_versions = ch_versions.mix(PREPARE_EXT_PROTS.out.versions) - - // SUBWORKFLOW: FASTA_BRAKER3 - FASTA_BRAKER3( - ch_masked_target_assembly, - ch_braker_ex_asm_str, - ch_rnaseq_bam, - ch_ext_prots_fasta, - ch_braker_annotation - ) - - ch_braker_gff3 = FASTA_BRAKER3.out.braker_gff3 - ch_braker_hints = FASTA_BRAKER3.out.braker_hints - ch_versions = ch_versions.mix(FASTA_BRAKER3.out.versions) - - // SUBWORKFLOW: FASTA_LIFTOFF - FASTA_LIFTOFF( - ch_valid_target_assembly, - ch_liftoff_fasta, - ch_liftoff_gff, - params.filter_liftoff_by_hints, - ch_braker_hints, - ch_tsebra_config, - params.allow_isoforms - ) - - ch_liftoff_gff3 = FASTA_LIFTOFF.out.gff3 - ch_versions = ch_versions.mix(FASTA_LIFTOFF.out.versions) - - // SUBWORKFLOW: PURGE_BRAKER_MODELS - PURGE_BRAKER_MODELS( - ch_braker_gff3, - ch_braker_hints, - ch_liftoff_gff3, - ch_tsebra_config, - params.allow_isoforms - ) - - ch_braker_purged_gff = PURGE_BRAKER_MODELS.out.braker_purged_gff - ch_versions = ch_versions.mix(PURGE_BRAKER_MODELS.out.versions) - - // SUBWORKFLOW: GFF_MERGE_CLEANUP - GFF_MERGE_CLEANUP( - ch_braker_purged_gff, - ch_liftoff_gff3 - ) - - ch_merged_gff = GFF_MERGE_CLEANUP.out.gff - ch_versions = ch_versions.mix(GFF_MERGE_CLEANUP.out.versions) - - // SUBWORKFLOW: GFF_EGGNOGMAPPER - GFF_EGGNOGMAPPER( - ch_merged_gff, - ch_valid_target_assembly, - params.eggnogmapper_db_dir, - ) - - ch_eggnogmapper_hits = GFF_EGGNOGMAPPER.out.eggnogmapper_hits - ch_eggnogmapper_annotations = GFF_EGGNOGMAPPER.out.eggnogmapper_annotations - ch_versions = ch_versions.mix(GFF_EGGNOGMAPPER.out.versions) - - // SUBWORKFLOW: PURGE_NOHIT_MODELS - PURGE_NOHIT_MODELS( - ch_merged_gff, - ch_eggnogmapper_hits, - params.eggnogmapper_purge_nohits && params.eggnogmapper_db_dir - ) - - ch_purged_gff = PURGE_NOHIT_MODELS.out.purged_gff - ch_versions = ch_versions.mix(PURGE_NOHIT_MODELS.out.versions) - - // SUBWORKFLOW: GFF_STORE - GFF_STORE( - ch_purged_gff, - ch_eggnogmapper_annotations, - ch_valid_target_assembly, - params.eggnogmapper_db_dir - ) - - ch_final_gff = GFF_STORE.out.final_gff - ch_final_proteins = GFF_STORE.out.final_proteins - ch_versions = ch_versions.mix(GFF_STORE.out.versions) - - // SUBWORKFLOW: FASTA_ORTHOFINDER - FASTA_ORTHOFINDER( - ch_final_proteins, - ch_orthofinder_pep - ) - - ch_versions = ch_versions.mix(FASTA_ORTHOFINDER.out.versions) - - // SUBWORKFLOW: FASTA_GXF_BUSCO_PLOT - ch_busco_fasta = params.busco_skip - ? Channel.empty() - : ch_valid_target_assembly - - ch_busco_gff = params.busco_skip - ? Channel.empty() - : ch_final_gff - - FASTA_GXF_BUSCO_PLOT( - ch_busco_fasta, - ch_busco_gff, - 'genome', - params.busco_lineage_datasets?.tokenize(' '), - [], // val_busco_lineages_path - [] // val_busco_config - ) - - ch_versions = ch_versions.mix(FASTA_GXF_BUSCO_PLOT.out.versions) - - // SUBWORKFLOW: GXF_FASTA_AGAT_SPADDINTRONS_SPEXTRACTSEQUENCES - GXF_FASTA_AGAT_SPADDINTRONS_SPEXTRACTSEQUENCES( - ch_final_gff, - ch_valid_target_assembly - ) - - ch_splicing_marked_gff3 = GXF_FASTA_AGAT_SPADDINTRONS_SPEXTRACTSEQUENCES.out.marked_gff3 - ch_versions = ch_versions.mix(GXF_FASTA_AGAT_SPADDINTRONS_SPEXTRACTSEQUENCES.out.versions) - - // MODULE: CAT_CAT as SAVE_MARKED_GFF3 - SAVE_MARKED_GFF3 ( ch_splicing_marked_gff3 ) - - // MODULE: CUSTOM_DUMPSOFTWAREVERSIONS - CUSTOM_DUMPSOFTWAREVERSIONS ( - ch_versions.unique().collectFile(name: 'collated_versions.yml') - ) + take: + ch_samplesheet // channel: samplesheet read in from --input + + main: + + ch_versions = Channel.empty() + ch_multiqc_files = Channel.empty() + + // + // MODULE: Run FastQC + // + FASTQC ( + ch_samplesheet + ) + ch_multiqc_files = ch_multiqc_files.mix(FASTQC.out.zip.collect{it[1]}) + ch_versions = ch_versions.mix(FASTQC.out.versions.first()) + + // + // Collate and save software versions + // + softwareVersionsToYAML(ch_versions) + .collectFile( + storeDir: "${params.outdir}/pipeline_info", + name: 'nf_core_pipeline_software_mqc_versions.yml', + sort: true, + newLine: true + ).set { ch_collated_versions } + + // + // MODULE: MultiQC + // + ch_multiqc_config = Channel.fromPath( + "$projectDir/assets/multiqc_config.yml", checkIfExists: true) + ch_multiqc_custom_config = params.multiqc_config ? + Channel.fromPath(params.multiqc_config, checkIfExists: true) : + Channel.empty() + ch_multiqc_logo = params.multiqc_logo ? + Channel.fromPath(params.multiqc_logo, checkIfExists: true) : + Channel.empty() + + summary_params = paramsSummaryMap( + workflow, parameters_schema: "nextflow_schema.json") + ch_workflow_summary = Channel.value(paramsSummaryMultiqc(summary_params)) + + ch_multiqc_custom_methods_description = params.multiqc_methods_description ? + file(params.multiqc_methods_description, checkIfExists: true) : + file("$projectDir/assets/methods_description_template.yml", checkIfExists: true) + ch_methods_description = Channel.value( + methodsDescriptionText(ch_multiqc_custom_methods_description)) + + 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) + ch_multiqc_files = ch_multiqc_files.mix( + ch_methods_description.collectFile( + name: 'methods_description_mqc.yaml', + sort: true + ) + ) + + MULTIQC ( + ch_multiqc_files.collect(), + ch_multiqc_config.toList(), + ch_multiqc_custom_config.toList(), + ch_multiqc_logo.toList() + ) + + emit: + multiqc_report = MULTIQC.out.report.toList() // channel: /path/to/multiqc_report.html + versions = ch_versions // channel: [ path(versions.yml) ] } + +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + THE END +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +*/ From 7c32d497c8731173313c06bf6984bc0ddf60954d Mon Sep 17 00:00:00 2001 From: Usman Rashid Date: Mon, 19 Aug 2024 17:11:45 +1200 Subject: [PATCH 46/87] Added nf-core template --- .editorconfig | 27 + .github/CONTRIBUTING.md | 16 +- .github/ISSUE_TEMPLATE/bug_report.yml | 2 +- .github/ISSUE_TEMPLATE/feature_request.yml | 2 +- .github/PULL_REQUEST_TEMPLATE.md | 8 +- .github/version_checks.sh | 8 + .github/workflows/branch.yml | 4 +- .github/workflows/ci.yml | 14 +- .github/workflows/fix-linting.yml | 4 +- .github/workflows/release-announcements.yml | 75 - .gitignore | 3 + .nf-core.yml | 2 +- .pre-commit-config.yaml | 10 + CHANGELOG.md | 154 +- CITATIONS.md | 92 +- LICENSE | 2 +- README.md | 14 +- assets/adaptivecard.json | 2 +- assets/email_template.html | 14 +- assets/email_template.txt | 8 +- assets/methods_description_template.yml | 29 - assets/multiqc_config.yml | 14 - assets/rrna-db-defaults.txt | 8 + assets/rrna-db-test.txt | 1 + assets/samplesheet.csv | 3 - assets/schema_input.json | 71 +- assets/schema_liftoff.json | 25 + assets/schema_orthofinder.json | 25 + assets/schema_rna.json | 46 + assets/sendmail_template.txt | 6 +- assets/slackreport.json | 2 +- assets/tsebra-template.cfg | 16 + cleanNXF.sh | 11 + conf/base.config | 24 +- conf/modules.config | 354 ++- conf/test.config | 16 +- conf/test_full.config | 24 - docs/README.md | 6 +- docs/images/mqc_fastqc_adapter.png | Bin 23458 -> 0 bytes docs/images/mqc_fastqc_counts.png | Bin 33918 -> 0 bytes docs/images/mqc_fastqc_quality.png | Bin 55769 -> 0 bytes docs/img/genepal.drawio | 385 +++ docs/img/genepal.png | Bin 0 -> 334096 bytes docs/output.md | 2 +- docs/parameters.md | 86 + docs/usage.md | 10 +- local_genepal | 23 + main.nf | 71 +- modules.json | 211 +- .../gallvp/agat/spaddintrons/environment.yml | 9 + modules/gallvp/agat/spaddintrons/main.nf | 50 + modules/gallvp/agat/spaddintrons/meta.yml | 55 + .../agat/spaddintrons/tests/main.nf.test | 61 + .../agat/spaddintrons/tests/main.nf.test.snap | 72 + .../agat/spextractsequences/environment.yml | 9 + .../gallvp/agat/spextractsequences/main.nf | 52 + .../gallvp/agat/spextractsequences/meta.yml | 60 + .../spextractsequences/tests/main.nf.test | 62 + .../tests/main.nf.test.snap | 72 + modules/gallvp/braker3/main.nf | 93 + modules/gallvp/braker3/meta.yml | 87 + modules/gallvp/braker3/tests/main.nf.test | 77 + .../gallvp/braker3/tests/main.nf.test.snap | 181 ++ modules/gallvp/braker3/tests/nextflow.config | 5 + modules/gallvp/busco/busco/environment.yml | 7 + modules/gallvp/busco/busco/main.nf | 107 + modules/gallvp/busco/busco/meta.yml | 98 + modules/gallvp/busco/busco/tests/main.nf.test | 415 +++ .../busco/busco/tests/main.nf.test.snap | 230 ++ .../busco/tests/nextflow.augustus.config | 5 + .../gallvp/busco/busco/tests/nextflow.config | 5 + .../busco/busco/tests/nextflow.metaeuk.config | 5 + modules/gallvp/busco/busco/tests/old_test.yml | 624 +++++ modules/gallvp/busco/busco/tests/tags.yml | 2 + .../gallvp/busco/generateplot/environment.yml | 9 + modules/gallvp/busco/generateplot/main.nf | 45 + modules/gallvp/busco/generateplot/meta.yml | 35 + .../busco/generateplot/tests/main.nf.test | 72 + .../generateplot/tests/main.nf.test.snap | 37 + .../gallvp/busco/generateplot/tests/tags.yml | 2 + .../custom/restoregffids/environment.yml | 9 + modules/gallvp/custom/restoregffids/main.nf | 35 + modules/gallvp/custom/restoregffids/meta.yml | 58 + .../templates/restore_gff_ids.py | 47 + .../custom/restoregffids/tests/main.nf.test | 63 + .../restoregffids/tests/main.nf.test.snap | 61 + .../custom/shortenfastaids/environment.yml | 11 + modules/gallvp/custom/shortenfastaids/main.nf | 38 + .../gallvp/custom/shortenfastaids/meta.yml | 58 + .../templates/shorten_fasta_ids.py | 168 ++ .../custom/shortenfastaids/tests/main.nf.test | 123 + .../shortenfastaids/tests/main.nf.test.snap | 227 ++ modules/gallvp/edta/edta/main.nf | 92 + modules/gallvp/edta/edta/meta.yml | 82 + modules/gallvp/edta/edta/tests/main.nf.test | 84 + .../gallvp/edta/edta/tests/main.nf.test.snap | 81 + .../gallvp/edta/edta/tests/nextflow.config | 5 + modules/gallvp/gffread/environment.yml | 7 + modules/gallvp/gffread/main.nf | 60 + modules/gallvp/gffread/meta.yml | 55 + modules/gallvp/gffread/tests/main.nf.test | 223 ++ .../gallvp/gffread/tests/main.nf.test.snap | 272 ++ .../gffread/tests/nextflow-fasta.config | 5 + .../gallvp/gffread/tests/nextflow-gff3.config | 5 + modules/gallvp/gffread/tests/nextflow.config | 5 + modules/gallvp/gffread/tests/tags.yml | 2 + .../gallvp/ltrretriever/lai/environment.yml | 9 + modules/gallvp/ltrretriever/lai/main.nf | 71 + modules/gallvp/ltrretriever/lai/meta.yml | 70 + .../ltrretriever/lai/tests/main.nf.test | 166 ++ .../ltrretriever/lai/tests/main.nf.test.snap | 100 + .../ltrretriever/lai/tests/nextflow.config | 15 + .../gallvp/ltrretriever/lai/tests/tags.yml | 2 + .../repeatmasker/repeatmasker/environment.yml | 9 + .../gallvp/repeatmasker/repeatmasker/main.nf | 62 + .../gallvp/repeatmasker/repeatmasker/meta.yml | 64 + .../repeatmasker/tests/main.nf.test | 68 + .../repeatmasker/tests/main.nf.test.snap | 118 + .../repeatmasker/tests/nextflow.config | 5 + .../agat/convertspgff2gtf/environment.yml | 7 + modules/nf-core/agat/convertspgff2gtf/main.nf | 48 + .../nf-core/agat/convertspgff2gtf/meta.yml | 44 + .../agat/convertspgff2gtf/tests/main.nf.test | 62 + .../convertspgff2gtf/tests/main.nf.test.snap | 36 + .../agat/convertspgff2gtf/tests/tags.yml | 2 + .../agat/convertspgxf2gxf/environment.yml | 7 + modules/nf-core/agat/convertspgxf2gxf/main.nf | 48 + .../nf-core/agat/convertspgxf2gxf/meta.yml | 43 + .../agat/convertspgxf2gxf/tests/main.nf.test | 60 + .../convertspgxf2gxf/tests/main.nf.test.snap | 71 + .../agat/convertspgxf2gxf/tests/tags.yml | 2 + .../environment.yml | 9 + .../agat/spfilterfeaturefromkilllist/main.nf | 53 + .../agat/spfilterfeaturefromkilllist/meta.yml | 60 + .../tests/main.nf.test | 104 + .../tests/main.nf.test.snap | 101 + .../agat/spmergeannotations/environment.yml | 9 + .../nf-core/agat/spmergeannotations/main.nf | 53 + .../nf-core/agat/spmergeannotations/meta.yml | 54 + .../spmergeannotations/tests/main.nf.test | 130 + .../tests/main.nf.test.snap | 92 + .../agat/spmergeannotations/tests/tags.yml | 2 + modules/nf-core/cat/cat/environment.yml | 7 + modules/nf-core/cat/cat/main.nf | 78 + modules/nf-core/cat/cat/meta.yml | 36 + modules/nf-core/cat/cat/tests/main.nf.test | 191 ++ .../nf-core/cat/cat/tests/main.nf.test.snap | 147 + .../cat/tests/nextflow_unzipped_zipped.config | 6 + .../cat/tests/nextflow_zipped_unzipped.config | 8 + modules/nf-core/cat/cat/tests/tags.yml | 2 + modules/nf-core/cat/fastq/environment.yml | 7 + modules/nf-core/cat/fastq/main.nf | 79 + modules/nf-core/cat/fastq/meta.yml | 42 + modules/nf-core/cat/fastq/tests/main.nf.test | 248 ++ .../nf-core/cat/fastq/tests/main.nf.test.snap | 376 +++ modules/nf-core/cat/fastq/tests/tags.yml | 2 + .../dumpsoftwareversions/environment.yml | 7 + .../custom/dumpsoftwareversions/main.nf | 24 + .../custom/dumpsoftwareversions/meta.yml | 37 + .../templates/dumpsoftwareversions.py | 100 + .../dumpsoftwareversions/tests/main.nf.test | 43 + .../tests/main.nf.test.snap | 33 + .../dumpsoftwareversions/tests/tags.yml | 2 + modules/nf-core/eggnogmapper/environment.yml | 7 + modules/nf-core/eggnogmapper/main.nf | 68 + modules/nf-core/eggnogmapper/meta.yml | 70 + .../nf-core/eggnogmapper/tests/main.nf.test | 95 + .../eggnogmapper/tests/main.nf.test.snap | 60 + modules/nf-core/eggnogmapper/tests/tags.yml | 2 + .../nf-core/fastavalidator/environment.yml | 9 + modules/nf-core/fastavalidator/main.nf | 62 + modules/nf-core/fastavalidator/meta.yml | 53 + .../nf-core/fastavalidator/tests/main.nf.test | 60 + .../fastavalidator/tests/main.nf.test.snap | 76 + modules/nf-core/fastavalidator/tests/tags.yml | 2 + .../{multiqc => fastp}/environment.yml | 4 +- modules/nf-core/fastp/main.nf | 125 + modules/nf-core/fastp/meta.yml | 79 + modules/nf-core/fastp/tests/main.nf.test | 576 ++++ modules/nf-core/fastp/tests/main.nf.test.snap | 1331 +++++++++ .../fastp/tests/nextflow.interleaved.config | 5 + .../fastp/tests/nextflow.save_failed.config | 5 + modules/nf-core/fastp/tests/tags.yml | 2 + modules/nf-core/fastqc/tests/main.nf.test | 225 +- .../nf-core/fastqc/tests/main.nf.test.snap | 370 ++- modules/nf-core/gffcompare/environment.yml | 7 + modules/nf-core/gffcompare/main.nf | 63 + modules/nf-core/gffcompare/meta.yml | 91 + modules/nf-core/gffread/environment.yml | 7 + modules/nf-core/gffread/main.nf | 60 + modules/nf-core/gffread/meta.yml | 55 + modules/nf-core/gffread/tests/main.nf.test | 223 ++ .../nf-core/gffread/tests/main.nf.test.snap | 272 ++ .../gffread/tests/nextflow-fasta.config | 5 + .../gffread/tests/nextflow-gff3.config | 5 + modules/nf-core/gffread/tests/nextflow.config | 5 + modules/nf-core/gffread/tests/tags.yml | 2 + modules/nf-core/gt/gff3/environment.yml | 9 + modules/nf-core/gt/gff3/main.nf | 51 + modules/nf-core/gt/gff3/meta.yml | 48 + modules/nf-core/gt/gff3/tests/main.nf.test | 61 + .../nf-core/gt/gff3/tests/main.nf.test.snap | 72 + modules/nf-core/gt/gff3/tests/nextflow.config | 3 + modules/nf-core/gt/gff3/tests/tags.yml | 2 + modules/nf-core/gunzip/environment.yml | 9 + modules/nf-core/gunzip/main.nf | 55 + modules/nf-core/gunzip/meta.yml | 40 + modules/nf-core/gunzip/tests/main.nf.test | 121 + .../nf-core/gunzip/tests/main.nf.test.snap | 134 + modules/nf-core/gunzip/tests/nextflow.config | 5 + modules/nf-core/gunzip/tests/tags.yml | 2 + modules/nf-core/liftoff/environment.yml | 9 + modules/nf-core/liftoff/main.nf | 66 + modules/nf-core/liftoff/meta.yml | 71 + modules/nf-core/liftoff/tests/main.nf.test | 102 + .../nf-core/liftoff/tests/main.nf.test.snap | 96 + modules/nf-core/liftoff/tests/nextflow.config | 5 + modules/nf-core/multiqc/main.nf | 55 - modules/nf-core/multiqc/meta.yml | 58 - modules/nf-core/multiqc/tests/main.nf.test | 84 - .../nf-core/multiqc/tests/main.nf.test.snap | 41 - modules/nf-core/multiqc/tests/tags.yml | 2 - modules/nf-core/orthofinder/environment.yml | 9 + modules/nf-core/orthofinder/main.nf | 69 + modules/nf-core/orthofinder/meta.yml | 50 + .../nf-core/orthofinder/tests/main.nf.test | 96 + .../orthofinder/tests/main.nf.test.snap | 438 +++ modules/nf-core/orthofinder/tests/tags.yml | 2 + .../builddatabase/environment.yml | 9 + .../repeatmodeler/builddatabase/main.nf | 50 + .../repeatmodeler/builddatabase/meta.yml | 44 + .../builddatabase/tests/main.nf.test | 60 + .../builddatabase/tests/main.nf.test.snap | 92 + .../builddatabase/tests/tags.yml | 2 + .../repeatmodeler/environment.yml | 9 + .../repeatmodeler/repeatmodeler/main.nf | 54 + .../repeatmodeler/repeatmodeler/meta.yml | 52 + .../repeatmodeler/tests/main.nf.test | 74 + .../repeatmodeler/tests/main.nf.test.snap | 113 + .../repeatmodeler/tests/tags.yml | 2 + modules/nf-core/samtools/cat/environment.yml | 8 + modules/nf-core/samtools/cat/main.nf | 51 + modules/nf-core/samtools/cat/meta.yml | 51 + .../nf-core/samtools/cat/tests/main.nf.test | 61 + .../samtools/cat/tests/main.nf.test.snap | 70 + modules/nf-core/samtools/cat/tests/tags.yml | 2 + modules/nf-core/sortmerna/environment.yml | 7 + modules/nf-core/sortmerna/main.nf | 110 + modules/nf-core/sortmerna/meta.yml | 77 + .../sortmerna/tests/indexing_only.config | 5 + modules/nf-core/sortmerna/tests/main.nf.test | 327 +++ .../nf-core/sortmerna/tests/main.nf.test.snap | 352 +++ .../sortmerna/tests/premade_index.config | 8 + modules/nf-core/sortmerna/tests/tags.yml | 2 + modules/nf-core/star/align/environment.yml | 10 + modules/nf-core/star/align/main.nf | 109 + modules/nf-core/star/align/meta.yml | 115 + modules/nf-core/star/align/tests/main.nf.test | 609 +++++ .../star/align/tests/main.nf.test.snap | 1973 ++++++++++++++ .../star/align/tests/nextflow.arriba.config | 14 + .../nf-core/star/align/tests/nextflow.config | 14 + .../align/tests/nextflow.starfusion.config | 14 + modules/nf-core/star/align/tests/tags.yml | 2 + .../star/genomegenerate/environment.yml | 10 + modules/nf-core/star/genomegenerate/main.nf | 119 + modules/nf-core/star/genomegenerate/meta.yml | 53 + .../star/genomegenerate/tests/main.nf.test | 114 + .../genomegenerate/tests/main.nf.test.snap | 148 + .../star/genomegenerate/tests/tags.yml | 2 + modules/nf-core/tsebra/environment.yml | 9 + modules/nf-core/tsebra/main.nf | 62 + modules/nf-core/tsebra/meta.yml | 66 + modules/nf-core/tsebra/tests/main.nf.test | 91 + .../nf-core/tsebra/tests/main.nf.test.snap | 100 + modules/nf-core/tsebra/tests/tags.yml | 2 + .../nf-core/umitools/extract/environment.yml | 7 + modules/nf-core/umitools/extract/main.nf | 74 + modules/nf-core/umitools/extract/meta.yml | 48 + .../umitools/extract/tests/main.nf.test | 106 + .../umitools/extract/tests/main.nf.test.snap | 167 ++ .../umitools/extract/tests/nextflow.config | 9 + .../nf-core/umitools/extract/tests/tags.yml | 2 + nextflow.config | 68 +- nextflow_schema.json | 381 ++- pfr/params.json | 8 + pfr/profile.config | 17 + pfr_genepal | 49 + pyproject.toml | 15 + subworkflows/gallvp/fasta_edta_lai/main.nf | 170 ++ subworkflows/gallvp/fasta_edta_lai/meta.yml | 69 + .../gallvp/fasta_edta_lai/tests/main.nf.test | 79 + .../fasta_edta_lai/tests/main.nf.test.snap | 101 + .../fasta_edta_lai/tests/nextflow.config | 5 + .../gallvp/fasta_gxf_busco_plot/main.nf | 169 ++ .../gallvp/fasta_gxf_busco_plot/meta.yml | 106 + .../fasta_gxf_busco_plot/tests/main.nf.test | 104 + .../tests/main.nf.test.snap | 231 ++ .../tests/nextflow.config | 5 + .../main.nf | 117 + .../meta.yml | 54 + .../tests/main.nf.test | 83 + .../tests/main.nf.test.snap | 104 + .../tests/nextflow.config | 6 + subworkflows/local/align_rnaseq.nf | 81 + subworkflows/local/fasta_braker3.nf | 65 + subworkflows/local/fasta_liftoff.nf | 186 ++ subworkflows/local/fasta_orthofinder.nf | 33 + subworkflows/local/file_gunzip.nf | 20 + subworkflows/local/gff_eggnogmapper.nf | 49 + subworkflows/local/gff_merge_cleanup.nf | 183 ++ subworkflows/local/gff_store.nf | 141 + .../gff_tsebra_spfilterfeaturefromkilllist.nf | 186 ++ subworkflows/local/prepare_assembly.nf | 159 ++ subworkflows/local/prepare_ext_prots.nf | 42 + subworkflows/local/preprocess_rnaseq.nf | 123 + subworkflows/local/purge_braker_models.nf | 96 + subworkflows/local/purge_nohit_models.nf | 70 + .../utils_nfcore_genepal_pipeline/main.nf | 348 ++- .../fastq_fastqc_umitools_fastp/main.nf | 164 ++ .../fastq_fastqc_umitools_fastp/meta.yml | 129 + .../tests/main.nf.test | 973 +++++++ .../tests/main.nf.test.snap | 2407 +++++++++++++++++ .../tests/nextflow.config | 11 + .../tests/nextflow.save_trimmed.config | 6 + .../tests/tags.yml | 2 + tests/minimal/assemblysheet.csv | 2 + tests/minimal/params.json | 6 + tests/stub/assemblysheet.csv | 4 + tests/stub/bam/1505KHS-0090_Root3.red5_v3.bam | 0 tests/stub/bam/1505KHS-0092_Root3.red5_v3.bam | 0 tests/stub/braker/donghong.gff3.gz | 0 tests/stub/braker/donghong.hints.gff.gz | 0 tests/stub/braker/red5_v2p1.gff3.gz | 0 tests/stub/braker/red5_v2p1.hints.gff.gz | 0 tests/stub/emapperdb/5.0.2/eggnog.db | 0 .../stub/emapperdb/5.0.2/eggnog_proteins.dmnd | 0 .../RU01.20221115150135.chr1.pep.fasta.gz | 0 .../RU01.20221115150135.chr2.pep.fasta.gz | 0 tests/stub/external-protein-fastas.txt | 2 + ...Root1_162bp_C728RACXX_Lane1_R1.1k.fastq.gz | 0 ...Root1_162bp_C728RACXX_Lane1_R2.1k.fastq.gz | 0 ...Root2_156bp_C728RACXX_Lane1_R1.1k.fastq.gz | 0 ...Root2_156bp_C728RACXX_Lane1_R2.1k.fastq.gz | 0 ...cane3_165bp_C728RACXX_Lane1_R1.1k.fastq.gz | 0 ...cane3_165bp_C728RACXX_Lane1_R2.1k.fastq.gz | 0 .../liftoff/RU01.20221115150135.chr1.gff3.gz | 0 .../liftoff/RU01.20221115150135.chr2.gff3.gz | 0 tests/stub/liftoff/Russell_V2a.chr1.fsa.gz | 0 tests/stub/liftoff/Russell_V2a.chr2.fsa.gz | 0 tests/stub/liftoffannotations.csv | 3 + tests/stub/params.json | 10 + tests/stub/rnasheet.csv | 6 + tests/stub/target/donghong.chr1.fsa.gz | 0 tests/stub/target/red5_v2p1_chr1.fasta.gz | 0 tests/stub/target/red5_v3_chr1.fasta | 0 tests/stub/te_lib/donghong.TElib.fa.gz | 0 tower.yml | 5 - workflows/genepal.nf | 280 +- 358 files changed, 28319 insertions(+), 881 deletions(-) create mode 100755 .github/version_checks.sh delete mode 100644 .github/workflows/release-announcements.yml delete mode 100644 assets/methods_description_template.yml delete mode 100644 assets/multiqc_config.yml create mode 100644 assets/rrna-db-defaults.txt create mode 100644 assets/rrna-db-test.txt delete mode 100644 assets/samplesheet.csv create mode 100644 assets/schema_liftoff.json create mode 100644 assets/schema_orthofinder.json create mode 100644 assets/schema_rna.json create mode 100644 assets/tsebra-template.cfg create mode 100755 cleanNXF.sh delete mode 100644 conf/test_full.config delete mode 100755 docs/images/mqc_fastqc_adapter.png delete mode 100755 docs/images/mqc_fastqc_counts.png delete mode 100755 docs/images/mqc_fastqc_quality.png create mode 100644 docs/img/genepal.drawio create mode 100644 docs/img/genepal.png create mode 100644 docs/parameters.md create mode 100755 local_genepal create mode 100644 modules/gallvp/agat/spaddintrons/environment.yml create mode 100644 modules/gallvp/agat/spaddintrons/main.nf create mode 100644 modules/gallvp/agat/spaddintrons/meta.yml create mode 100644 modules/gallvp/agat/spaddintrons/tests/main.nf.test create mode 100644 modules/gallvp/agat/spaddintrons/tests/main.nf.test.snap create mode 100644 modules/gallvp/agat/spextractsequences/environment.yml create mode 100644 modules/gallvp/agat/spextractsequences/main.nf create mode 100644 modules/gallvp/agat/spextractsequences/meta.yml create mode 100644 modules/gallvp/agat/spextractsequences/tests/main.nf.test create mode 100644 modules/gallvp/agat/spextractsequences/tests/main.nf.test.snap create mode 100644 modules/gallvp/braker3/main.nf create mode 100644 modules/gallvp/braker3/meta.yml create mode 100644 modules/gallvp/braker3/tests/main.nf.test create mode 100644 modules/gallvp/braker3/tests/main.nf.test.snap create mode 100644 modules/gallvp/braker3/tests/nextflow.config create mode 100644 modules/gallvp/busco/busco/environment.yml create mode 100644 modules/gallvp/busco/busco/main.nf create mode 100644 modules/gallvp/busco/busco/meta.yml create mode 100644 modules/gallvp/busco/busco/tests/main.nf.test create mode 100644 modules/gallvp/busco/busco/tests/main.nf.test.snap create mode 100644 modules/gallvp/busco/busco/tests/nextflow.augustus.config create mode 100644 modules/gallvp/busco/busco/tests/nextflow.config create mode 100644 modules/gallvp/busco/busco/tests/nextflow.metaeuk.config create mode 100644 modules/gallvp/busco/busco/tests/old_test.yml create mode 100644 modules/gallvp/busco/busco/tests/tags.yml create mode 100644 modules/gallvp/busco/generateplot/environment.yml create mode 100644 modules/gallvp/busco/generateplot/main.nf create mode 100644 modules/gallvp/busco/generateplot/meta.yml create mode 100644 modules/gallvp/busco/generateplot/tests/main.nf.test create mode 100644 modules/gallvp/busco/generateplot/tests/main.nf.test.snap create mode 100644 modules/gallvp/busco/generateplot/tests/tags.yml create mode 100644 modules/gallvp/custom/restoregffids/environment.yml create mode 100644 modules/gallvp/custom/restoregffids/main.nf create mode 100644 modules/gallvp/custom/restoregffids/meta.yml create mode 100755 modules/gallvp/custom/restoregffids/templates/restore_gff_ids.py create mode 100644 modules/gallvp/custom/restoregffids/tests/main.nf.test create mode 100644 modules/gallvp/custom/restoregffids/tests/main.nf.test.snap create mode 100644 modules/gallvp/custom/shortenfastaids/environment.yml create mode 100644 modules/gallvp/custom/shortenfastaids/main.nf create mode 100644 modules/gallvp/custom/shortenfastaids/meta.yml create mode 100755 modules/gallvp/custom/shortenfastaids/templates/shorten_fasta_ids.py create mode 100644 modules/gallvp/custom/shortenfastaids/tests/main.nf.test create mode 100644 modules/gallvp/custom/shortenfastaids/tests/main.nf.test.snap create mode 100644 modules/gallvp/edta/edta/main.nf create mode 100644 modules/gallvp/edta/edta/meta.yml create mode 100644 modules/gallvp/edta/edta/tests/main.nf.test create mode 100644 modules/gallvp/edta/edta/tests/main.nf.test.snap create mode 100644 modules/gallvp/edta/edta/tests/nextflow.config create mode 100644 modules/gallvp/gffread/environment.yml create mode 100644 modules/gallvp/gffread/main.nf create mode 100644 modules/gallvp/gffread/meta.yml create mode 100644 modules/gallvp/gffread/tests/main.nf.test create mode 100644 modules/gallvp/gffread/tests/main.nf.test.snap create mode 100644 modules/gallvp/gffread/tests/nextflow-fasta.config create mode 100644 modules/gallvp/gffread/tests/nextflow-gff3.config create mode 100644 modules/gallvp/gffread/tests/nextflow.config create mode 100644 modules/gallvp/gffread/tests/tags.yml create mode 100644 modules/gallvp/ltrretriever/lai/environment.yml create mode 100644 modules/gallvp/ltrretriever/lai/main.nf create mode 100644 modules/gallvp/ltrretriever/lai/meta.yml create mode 100644 modules/gallvp/ltrretriever/lai/tests/main.nf.test create mode 100644 modules/gallvp/ltrretriever/lai/tests/main.nf.test.snap create mode 100644 modules/gallvp/ltrretriever/lai/tests/nextflow.config create mode 100644 modules/gallvp/ltrretriever/lai/tests/tags.yml create mode 100644 modules/gallvp/repeatmasker/repeatmasker/environment.yml create mode 100644 modules/gallvp/repeatmasker/repeatmasker/main.nf create mode 100644 modules/gallvp/repeatmasker/repeatmasker/meta.yml create mode 100644 modules/gallvp/repeatmasker/repeatmasker/tests/main.nf.test create mode 100644 modules/gallvp/repeatmasker/repeatmasker/tests/main.nf.test.snap create mode 100644 modules/gallvp/repeatmasker/repeatmasker/tests/nextflow.config create mode 100644 modules/nf-core/agat/convertspgff2gtf/environment.yml create mode 100644 modules/nf-core/agat/convertspgff2gtf/main.nf create mode 100644 modules/nf-core/agat/convertspgff2gtf/meta.yml create mode 100644 modules/nf-core/agat/convertspgff2gtf/tests/main.nf.test create mode 100644 modules/nf-core/agat/convertspgff2gtf/tests/main.nf.test.snap create mode 100644 modules/nf-core/agat/convertspgff2gtf/tests/tags.yml create mode 100644 modules/nf-core/agat/convertspgxf2gxf/environment.yml create mode 100644 modules/nf-core/agat/convertspgxf2gxf/main.nf create mode 100644 modules/nf-core/agat/convertspgxf2gxf/meta.yml create mode 100644 modules/nf-core/agat/convertspgxf2gxf/tests/main.nf.test create mode 100644 modules/nf-core/agat/convertspgxf2gxf/tests/main.nf.test.snap create mode 100644 modules/nf-core/agat/convertspgxf2gxf/tests/tags.yml create mode 100644 modules/nf-core/agat/spfilterfeaturefromkilllist/environment.yml create mode 100644 modules/nf-core/agat/spfilterfeaturefromkilllist/main.nf create mode 100644 modules/nf-core/agat/spfilterfeaturefromkilllist/meta.yml create mode 100644 modules/nf-core/agat/spfilterfeaturefromkilllist/tests/main.nf.test create mode 100644 modules/nf-core/agat/spfilterfeaturefromkilllist/tests/main.nf.test.snap create mode 100644 modules/nf-core/agat/spmergeannotations/environment.yml create mode 100644 modules/nf-core/agat/spmergeannotations/main.nf create mode 100644 modules/nf-core/agat/spmergeannotations/meta.yml create mode 100644 modules/nf-core/agat/spmergeannotations/tests/main.nf.test create mode 100644 modules/nf-core/agat/spmergeannotations/tests/main.nf.test.snap create mode 100644 modules/nf-core/agat/spmergeannotations/tests/tags.yml create mode 100644 modules/nf-core/cat/cat/environment.yml create mode 100644 modules/nf-core/cat/cat/main.nf create mode 100644 modules/nf-core/cat/cat/meta.yml create mode 100644 modules/nf-core/cat/cat/tests/main.nf.test create mode 100644 modules/nf-core/cat/cat/tests/main.nf.test.snap create mode 100644 modules/nf-core/cat/cat/tests/nextflow_unzipped_zipped.config create mode 100644 modules/nf-core/cat/cat/tests/nextflow_zipped_unzipped.config create mode 100644 modules/nf-core/cat/cat/tests/tags.yml create mode 100644 modules/nf-core/cat/fastq/environment.yml create mode 100644 modules/nf-core/cat/fastq/main.nf create mode 100644 modules/nf-core/cat/fastq/meta.yml create mode 100644 modules/nf-core/cat/fastq/tests/main.nf.test create mode 100644 modules/nf-core/cat/fastq/tests/main.nf.test.snap create mode 100644 modules/nf-core/cat/fastq/tests/tags.yml create mode 100644 modules/nf-core/custom/dumpsoftwareversions/environment.yml create mode 100644 modules/nf-core/custom/dumpsoftwareversions/main.nf create mode 100644 modules/nf-core/custom/dumpsoftwareversions/meta.yml create mode 100755 modules/nf-core/custom/dumpsoftwareversions/templates/dumpsoftwareversions.py create mode 100644 modules/nf-core/custom/dumpsoftwareversions/tests/main.nf.test create mode 100644 modules/nf-core/custom/dumpsoftwareversions/tests/main.nf.test.snap create mode 100644 modules/nf-core/custom/dumpsoftwareversions/tests/tags.yml create mode 100644 modules/nf-core/eggnogmapper/environment.yml create mode 100644 modules/nf-core/eggnogmapper/main.nf create mode 100644 modules/nf-core/eggnogmapper/meta.yml create mode 100644 modules/nf-core/eggnogmapper/tests/main.nf.test create mode 100644 modules/nf-core/eggnogmapper/tests/main.nf.test.snap create mode 100644 modules/nf-core/eggnogmapper/tests/tags.yml create mode 100644 modules/nf-core/fastavalidator/environment.yml create mode 100644 modules/nf-core/fastavalidator/main.nf create mode 100644 modules/nf-core/fastavalidator/meta.yml create mode 100644 modules/nf-core/fastavalidator/tests/main.nf.test create mode 100644 modules/nf-core/fastavalidator/tests/main.nf.test.snap create mode 100644 modules/nf-core/fastavalidator/tests/tags.yml rename modules/nf-core/{multiqc => fastp}/environment.yml (61%) create mode 100644 modules/nf-core/fastp/main.nf create mode 100644 modules/nf-core/fastp/meta.yml create mode 100644 modules/nf-core/fastp/tests/main.nf.test create mode 100644 modules/nf-core/fastp/tests/main.nf.test.snap create mode 100644 modules/nf-core/fastp/tests/nextflow.interleaved.config create mode 100644 modules/nf-core/fastp/tests/nextflow.save_failed.config create mode 100644 modules/nf-core/fastp/tests/tags.yml create mode 100644 modules/nf-core/gffcompare/environment.yml create mode 100644 modules/nf-core/gffcompare/main.nf create mode 100644 modules/nf-core/gffcompare/meta.yml create mode 100644 modules/nf-core/gffread/environment.yml create mode 100644 modules/nf-core/gffread/main.nf create mode 100644 modules/nf-core/gffread/meta.yml create mode 100644 modules/nf-core/gffread/tests/main.nf.test create mode 100644 modules/nf-core/gffread/tests/main.nf.test.snap create mode 100644 modules/nf-core/gffread/tests/nextflow-fasta.config create mode 100644 modules/nf-core/gffread/tests/nextflow-gff3.config create mode 100644 modules/nf-core/gffread/tests/nextflow.config create mode 100644 modules/nf-core/gffread/tests/tags.yml create mode 100644 modules/nf-core/gt/gff3/environment.yml create mode 100644 modules/nf-core/gt/gff3/main.nf create mode 100644 modules/nf-core/gt/gff3/meta.yml create mode 100644 modules/nf-core/gt/gff3/tests/main.nf.test create mode 100644 modules/nf-core/gt/gff3/tests/main.nf.test.snap create mode 100644 modules/nf-core/gt/gff3/tests/nextflow.config create mode 100644 modules/nf-core/gt/gff3/tests/tags.yml create mode 100644 modules/nf-core/gunzip/environment.yml create mode 100644 modules/nf-core/gunzip/main.nf create mode 100644 modules/nf-core/gunzip/meta.yml create mode 100644 modules/nf-core/gunzip/tests/main.nf.test create mode 100644 modules/nf-core/gunzip/tests/main.nf.test.snap create mode 100644 modules/nf-core/gunzip/tests/nextflow.config create mode 100644 modules/nf-core/gunzip/tests/tags.yml create mode 100644 modules/nf-core/liftoff/environment.yml create mode 100644 modules/nf-core/liftoff/main.nf create mode 100644 modules/nf-core/liftoff/meta.yml create mode 100644 modules/nf-core/liftoff/tests/main.nf.test create mode 100644 modules/nf-core/liftoff/tests/main.nf.test.snap create mode 100644 modules/nf-core/liftoff/tests/nextflow.config delete mode 100644 modules/nf-core/multiqc/main.nf delete mode 100644 modules/nf-core/multiqc/meta.yml delete mode 100644 modules/nf-core/multiqc/tests/main.nf.test delete mode 100644 modules/nf-core/multiqc/tests/main.nf.test.snap delete mode 100644 modules/nf-core/multiqc/tests/tags.yml create mode 100644 modules/nf-core/orthofinder/environment.yml create mode 100644 modules/nf-core/orthofinder/main.nf create mode 100644 modules/nf-core/orthofinder/meta.yml create mode 100644 modules/nf-core/orthofinder/tests/main.nf.test create mode 100644 modules/nf-core/orthofinder/tests/main.nf.test.snap create mode 100644 modules/nf-core/orthofinder/tests/tags.yml create mode 100644 modules/nf-core/repeatmodeler/builddatabase/environment.yml create mode 100644 modules/nf-core/repeatmodeler/builddatabase/main.nf create mode 100644 modules/nf-core/repeatmodeler/builddatabase/meta.yml create mode 100644 modules/nf-core/repeatmodeler/builddatabase/tests/main.nf.test create mode 100644 modules/nf-core/repeatmodeler/builddatabase/tests/main.nf.test.snap create mode 100644 modules/nf-core/repeatmodeler/builddatabase/tests/tags.yml create mode 100644 modules/nf-core/repeatmodeler/repeatmodeler/environment.yml create mode 100644 modules/nf-core/repeatmodeler/repeatmodeler/main.nf create mode 100644 modules/nf-core/repeatmodeler/repeatmodeler/meta.yml create mode 100644 modules/nf-core/repeatmodeler/repeatmodeler/tests/main.nf.test create mode 100644 modules/nf-core/repeatmodeler/repeatmodeler/tests/main.nf.test.snap create mode 100644 modules/nf-core/repeatmodeler/repeatmodeler/tests/tags.yml create mode 100644 modules/nf-core/samtools/cat/environment.yml create mode 100644 modules/nf-core/samtools/cat/main.nf create mode 100644 modules/nf-core/samtools/cat/meta.yml create mode 100644 modules/nf-core/samtools/cat/tests/main.nf.test create mode 100644 modules/nf-core/samtools/cat/tests/main.nf.test.snap create mode 100644 modules/nf-core/samtools/cat/tests/tags.yml create mode 100644 modules/nf-core/sortmerna/environment.yml create mode 100644 modules/nf-core/sortmerna/main.nf create mode 100644 modules/nf-core/sortmerna/meta.yml create mode 100644 modules/nf-core/sortmerna/tests/indexing_only.config create mode 100644 modules/nf-core/sortmerna/tests/main.nf.test create mode 100644 modules/nf-core/sortmerna/tests/main.nf.test.snap create mode 100644 modules/nf-core/sortmerna/tests/premade_index.config create mode 100644 modules/nf-core/sortmerna/tests/tags.yml create mode 100644 modules/nf-core/star/align/environment.yml create mode 100644 modules/nf-core/star/align/main.nf create mode 100644 modules/nf-core/star/align/meta.yml create mode 100644 modules/nf-core/star/align/tests/main.nf.test create mode 100644 modules/nf-core/star/align/tests/main.nf.test.snap create mode 100644 modules/nf-core/star/align/tests/nextflow.arriba.config create mode 100644 modules/nf-core/star/align/tests/nextflow.config create mode 100644 modules/nf-core/star/align/tests/nextflow.starfusion.config create mode 100644 modules/nf-core/star/align/tests/tags.yml create mode 100644 modules/nf-core/star/genomegenerate/environment.yml create mode 100644 modules/nf-core/star/genomegenerate/main.nf create mode 100644 modules/nf-core/star/genomegenerate/meta.yml create mode 100644 modules/nf-core/star/genomegenerate/tests/main.nf.test create mode 100644 modules/nf-core/star/genomegenerate/tests/main.nf.test.snap create mode 100644 modules/nf-core/star/genomegenerate/tests/tags.yml create mode 100644 modules/nf-core/tsebra/environment.yml create mode 100644 modules/nf-core/tsebra/main.nf create mode 100644 modules/nf-core/tsebra/meta.yml create mode 100644 modules/nf-core/tsebra/tests/main.nf.test create mode 100644 modules/nf-core/tsebra/tests/main.nf.test.snap create mode 100644 modules/nf-core/tsebra/tests/tags.yml create mode 100644 modules/nf-core/umitools/extract/environment.yml create mode 100644 modules/nf-core/umitools/extract/main.nf create mode 100644 modules/nf-core/umitools/extract/meta.yml create mode 100644 modules/nf-core/umitools/extract/tests/main.nf.test create mode 100644 modules/nf-core/umitools/extract/tests/main.nf.test.snap create mode 100644 modules/nf-core/umitools/extract/tests/nextflow.config create mode 100644 modules/nf-core/umitools/extract/tests/tags.yml create mode 100644 pfr/params.json create mode 100644 pfr/profile.config create mode 100644 pfr_genepal create mode 100644 pyproject.toml create mode 100644 subworkflows/gallvp/fasta_edta_lai/main.nf create mode 100644 subworkflows/gallvp/fasta_edta_lai/meta.yml create mode 100644 subworkflows/gallvp/fasta_edta_lai/tests/main.nf.test create mode 100644 subworkflows/gallvp/fasta_edta_lai/tests/main.nf.test.snap create mode 100644 subworkflows/gallvp/fasta_edta_lai/tests/nextflow.config create mode 100644 subworkflows/gallvp/fasta_gxf_busco_plot/main.nf create mode 100644 subworkflows/gallvp/fasta_gxf_busco_plot/meta.yml create mode 100644 subworkflows/gallvp/fasta_gxf_busco_plot/tests/main.nf.test create mode 100644 subworkflows/gallvp/fasta_gxf_busco_plot/tests/main.nf.test.snap create mode 100644 subworkflows/gallvp/fasta_gxf_busco_plot/tests/nextflow.config create mode 100644 subworkflows/gallvp/gxf_fasta_agat_spaddintrons_spextractsequences/main.nf create mode 100644 subworkflows/gallvp/gxf_fasta_agat_spaddintrons_spextractsequences/meta.yml create mode 100644 subworkflows/gallvp/gxf_fasta_agat_spaddintrons_spextractsequences/tests/main.nf.test create mode 100644 subworkflows/gallvp/gxf_fasta_agat_spaddintrons_spextractsequences/tests/main.nf.test.snap create mode 100644 subworkflows/gallvp/gxf_fasta_agat_spaddintrons_spextractsequences/tests/nextflow.config create mode 100644 subworkflows/local/align_rnaseq.nf create mode 100644 subworkflows/local/fasta_braker3.nf create mode 100644 subworkflows/local/fasta_liftoff.nf create mode 100644 subworkflows/local/fasta_orthofinder.nf create mode 100644 subworkflows/local/file_gunzip.nf create mode 100644 subworkflows/local/gff_eggnogmapper.nf create mode 100644 subworkflows/local/gff_merge_cleanup.nf create mode 100644 subworkflows/local/gff_store.nf create mode 100644 subworkflows/local/gff_tsebra_spfilterfeaturefromkilllist.nf create mode 100644 subworkflows/local/prepare_assembly.nf create mode 100644 subworkflows/local/prepare_ext_prots.nf create mode 100644 subworkflows/local/preprocess_rnaseq.nf create mode 100644 subworkflows/local/purge_braker_models.nf create mode 100644 subworkflows/local/purge_nohit_models.nf create mode 100644 subworkflows/nf-core/fastq_fastqc_umitools_fastp/main.nf create mode 100644 subworkflows/nf-core/fastq_fastqc_umitools_fastp/meta.yml create mode 100644 subworkflows/nf-core/fastq_fastqc_umitools_fastp/tests/main.nf.test create mode 100644 subworkflows/nf-core/fastq_fastqc_umitools_fastp/tests/main.nf.test.snap create mode 100644 subworkflows/nf-core/fastq_fastqc_umitools_fastp/tests/nextflow.config create mode 100644 subworkflows/nf-core/fastq_fastqc_umitools_fastp/tests/nextflow.save_trimmed.config create mode 100644 subworkflows/nf-core/fastq_fastqc_umitools_fastp/tests/tags.yml create mode 100644 tests/minimal/assemblysheet.csv create mode 100644 tests/minimal/params.json create mode 100644 tests/stub/assemblysheet.csv create mode 100644 tests/stub/bam/1505KHS-0090_Root3.red5_v3.bam create mode 100644 tests/stub/bam/1505KHS-0092_Root3.red5_v3.bam create mode 100644 tests/stub/braker/donghong.gff3.gz create mode 100644 tests/stub/braker/donghong.hints.gff.gz create mode 100644 tests/stub/braker/red5_v2p1.gff3.gz create mode 100644 tests/stub/braker/red5_v2p1.hints.gff.gz create mode 100644 tests/stub/emapperdb/5.0.2/eggnog.db create mode 100644 tests/stub/emapperdb/5.0.2/eggnog_proteins.dmnd create mode 100644 tests/stub/ext_prot/RU01.20221115150135.chr1.pep.fasta.gz create mode 100644 tests/stub/ext_prot/RU01.20221115150135.chr2.pep.fasta.gz create mode 100644 tests/stub/external-protein-fastas.txt create mode 100644 tests/stub/fq/1505KHS-0090_Root1_162bp_C728RACXX_Lane1_R1.1k.fastq.gz create mode 100644 tests/stub/fq/1505KHS-0090_Root1_162bp_C728RACXX_Lane1_R2.1k.fastq.gz create mode 100644 tests/stub/fq/1505KHS-0090_Root2_156bp_C728RACXX_Lane1_R1.1k.fastq.gz create mode 100644 tests/stub/fq/1505KHS-0090_Root2_156bp_C728RACXX_Lane1_R2.1k.fastq.gz create mode 100644 tests/stub/fq/1505KHS-0090_cane3_165bp_C728RACXX_Lane1_R1.1k.fastq.gz create mode 100644 tests/stub/fq/1505KHS-0090_cane3_165bp_C728RACXX_Lane1_R2.1k.fastq.gz create mode 100644 tests/stub/liftoff/RU01.20221115150135.chr1.gff3.gz create mode 100644 tests/stub/liftoff/RU01.20221115150135.chr2.gff3.gz create mode 100644 tests/stub/liftoff/Russell_V2a.chr1.fsa.gz create mode 100644 tests/stub/liftoff/Russell_V2a.chr2.fsa.gz create mode 100644 tests/stub/liftoffannotations.csv create mode 100644 tests/stub/params.json create mode 100644 tests/stub/rnasheet.csv create mode 100644 tests/stub/target/donghong.chr1.fsa.gz create mode 100644 tests/stub/target/red5_v2p1_chr1.fasta.gz create mode 100644 tests/stub/target/red5_v3_chr1.fasta create mode 100644 tests/stub/te_lib/donghong.TElib.fa.gz delete mode 100644 tower.yml diff --git a/.editorconfig b/.editorconfig index 72dda28..b06688a 100644 --- a/.editorconfig +++ b/.editorconfig @@ -31,3 +31,30 @@ indent_size = unset # ignore python and markdown [*.{py,md}] indent_style = unset + +# These files are edited and tested upstream in gallvp/modules,subworkflows +[/modules/gallvp/**] +charset = unset +end_of_line = unset +insert_final_newline = unset +trim_trailing_whitespace = unset +indent_style = unset + +[/subworkflows/gallvp/**] +charset = unset +end_of_line = unset +insert_final_newline = unset +trim_trailing_whitespace = unset +indent_style = unset + +# ignore perl +[*.{pl,pm}] +indent_size = unset + +# ignore drawio +[*.drawio] +indent_size = unset + +# ignore LICENSE +[LICENSE] +indent_size = unset diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index e28c02c..ba376bf 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -1,9 +1,9 @@ -# PlantandFoodResearch/genepal: Contributing Guidelines +# plant-food-research-open/genepal: Contributing Guidelines Hi there! -Many thanks for taking an interest in improving PlantandFoodResearch/genepal. +Many thanks for taking an interest in improving plant-food-research-open/genepal. -We try to manage the required tasks for PlantandFoodResearch/genepal using GitHub issues, you probably came to this page when creating one. +We try to manage the required tasks for plant-food-research-open/genepal using GitHub issues, you probably came to this page when creating one. Please use the pre-filled template to save time. However, don't be put off by this template - other more general issues and suggestions are welcome! @@ -11,10 +11,10 @@ Contributions to the code are even more welcome ;) ## Contribution workflow -If you'd like to write some code for PlantandFoodResearch/genepal, the standard workflow is as follows: +If you'd like to write some code for plant-food-research-open/genepal, the standard workflow is as follows: -1. Check that there isn't already an issue about your idea in the [PlantandFoodResearch/genepal issues](https://github.com/PlantandFoodResearch/genepal/issues) to avoid duplicating work. If there isn't one already, please create one so that others know you're working on this -2. [Fork](https://help.github.com/en/github/getting-started-with-github/fork-a-repo) the [PlantandFoodResearch/genepal repository](https://github.com/PlantandFoodResearch/genepal) to your GitHub account +1. Check that there isn't already an issue about your idea in the [plant-food-research-open/genepal issues](https://github.com/plant-food-research-open/genepal/issues) to avoid duplicating work. If there isn't one already, please create one so that others know you're working on this +2. [Fork](https://help.github.com/en/github/getting-started-with-github/fork-a-repo) the [plant-food-research-open/genepal repository](https://github.com/plant-food-research-open/genepal) to your GitHub account 3. Make the necessary changes / additions within your forked repository following [Pipeline conventions](#pipeline-contribution-conventions) 4. Use `nf-core schema build` and add any new parameters to the pipeline JSON schema (requires [nf-core tools](https://github.com/nf-core/tools) >= 1.10). 5. Submit a Pull Request against the `dev` branch and wait for the code to be reviewed and merged @@ -58,7 +58,7 @@ These tests are run both with the latest available version of `Nextflow` and als ## Pipeline contribution conventions -To make the PlantandFoodResearch/genepal code and processing logic more understandable for new contributors and to ensure quality, we semi-standardise the way the code and other contributions are written. +To make the plant-food-research-open/genepal code and processing logic more understandable for new contributors and to ensure quality, we semi-standardise the way the code and other contributions are written. ### Adding a new step @@ -108,7 +108,7 @@ This repo includes a devcontainer configuration which will create a GitHub Codes To get started: -- Open the repo in [Codespaces](https://github.com/PlantandFoodResearch/genepal/codespaces) +- Open the repo in [Codespaces](https://github.com/plant-food-research-open/genepal/codespaces) - Tools installed - nf-core - Nextflow diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index 5366891..0e3b51d 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -49,6 +49,6 @@ body: * OS _(eg. CentOS Linux, macOS, Linux Mint)_ - * Version of PlantandFoodResearch/genepal _(eg. 1.1, 1.5, 1.8.2)_ + * Version of plant-food-research-open/genepal _(eg. 1.1, 1.5, 1.8.2)_ " diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml index 2f4df30..15a0288 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.yml +++ b/.github/ISSUE_TEMPLATE/feature_request.yml @@ -1,5 +1,5 @@ name: Feature request -description: Suggest an idea for the PlantandFoodResearch/genepal pipeline +description: Suggest an idea for the plant-food-research-open/genepal pipeline labels: enhancement body: - type: textarea diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 9dfdfb4..9687358 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -1,21 +1,21 @@ ## PR checklist - [ ] This comment contains a description of changes (with reason). - [ ] If you've fixed a bug or added code that should be tested, add tests! -- [ ] If you've added a new tool - have you followed the pipeline conventions in the [contribution docs](https://github.com/PlantandFoodResearch/genepal/tree/master/.github/CONTRIBUTING.md) +- [ ] If you've added a new tool - have you followed the pipeline conventions in the [contribution docs](https://github.com/plant-food-research-open/genepal/tree/master/.github/CONTRIBUTING.md) - [ ] Make sure your code lints (`nf-core lint`). - [ ] Ensure the test suite passes (`nextflow run . -profile test,docker --outdir `). - [ ] Check for unexpected warnings in debug mode (`nextflow run . -profile debug,test,docker --outdir `). diff --git a/.github/version_checks.sh b/.github/version_checks.sh new file mode 100755 index 0000000..29b89ad --- /dev/null +++ b/.github/version_checks.sh @@ -0,0 +1,8 @@ +#!/usr/bin/env bash + +config_version=$(sed -n "s/.*version.*= '\(.*\)'.*/\1/p" nextflow.config) + +# Check CHANGELOG version + +head -n 10 CHANGELOG.md | grep "## $config_version - " >/dev/null \ + || (echo 'Failed to match CHANGELOG version'; exit 1) diff --git a/.github/workflows/branch.yml b/.github/workflows/branch.yml index 07fa928..0efe7a1 100644 --- a/.github/workflows/branch.yml +++ b/.github/workflows/branch.yml @@ -11,9 +11,9 @@ jobs: steps: # PRs to the nf-core repo master branch are only ok if coming from the nf-core repo `dev` or any `patch` branches - name: Check PRs - if: github.repository == 'PlantandFoodResearch/genepal' + if: github.repository == 'plant-food-research-open/genepal' run: | - { [[ ${{github.event.pull_request.head.repo.full_name }} == PlantandFoodResearch/genepal ]] && [[ $GITHUB_HEAD_REF == "dev" ]]; } || [[ $GITHUB_HEAD_REF == "patch" ]] + { [[ ${{github.event.pull_request.head.repo.full_name }} == plant-food-research-open/genepal ]] && [[ $GITHUB_HEAD_REF == "dev" ]]; } || [[ $GITHUB_HEAD_REF == "patch" ]] # If the above check failed, post a comment on the PR explaining the failure # NOTE - this doesn't currently work if the PR is coming from a fork, due to limitations in GitHub actions secrets diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 0d3ab09..c8d303a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -18,14 +18,13 @@ concurrency: jobs: test: name: Run pipeline with test data - # Only run on push if this is the nf-core dev branch (merged PRs) - if: "${{ github.event_name != 'push' || (github.event_name == 'push' && github.repository == 'PlantandFoodResearch/genepal') }}" + if: "${{ github.event_name != 'push' || (github.event_name == 'push' && github.repository == 'plant-food-research-open/genepal') }}" runs-on: ubuntu-latest strategy: matrix: NXF_VER: - "23.04.0" - - "latest-everything" + steps: - name: Check out pipeline code uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4 @@ -39,8 +38,9 @@ jobs: uses: jlumbroso/free-disk-space@54081f138730dfa15788a46383842cd2f914a1be # v1.3.1 - name: Run pipeline with test data - # TODO nf-core: You can customise CI pipeline run tests as required - # For example: adding multiple test runs with different parameters - # Remember that you can parallelise this by using strategy.matrix run: | - nextflow run ${GITHUB_WORKSPACE} -profile test,docker --outdir ./results + nextflow run \ + main.nf \ + -profile docker \ + -stub \ + -params-file tests/stub/params.json diff --git a/.github/workflows/fix-linting.yml b/.github/workflows/fix-linting.yml index 326861d..dfbacb4 100644 --- a/.github/workflows/fix-linting.yml +++ b/.github/workflows/fix-linting.yml @@ -9,7 +9,7 @@ jobs: if: > contains(github.event.comment.html_url, '/pull/') && contains(github.event.comment.body, '@nf-core-bot fix linting') && - github.repository == 'PlantandFoodResearch/genepal' + github.repository == 'plant-food-research-open/genepal' runs-on: ubuntu-latest steps: # Use the @nf-core-bot token to check out so we can push later @@ -86,4 +86,4 @@ jobs: issue-number: ${{ github.event.issue.number }} body: | @${{ github.actor }} I tried to fix the linting errors, but it didn't work. Please fix them manually. - See [CI log](https://github.com/PlantandFoodResearch/genepal/actions/runs/${{ github.run_id }}) for more details. + See [CI log](https://github.com/plant-food-research-open/genepal/actions/runs/${{ github.run_id }}) for more details. diff --git a/.github/workflows/release-announcements.yml b/.github/workflows/release-announcements.yml deleted file mode 100644 index 03ecfcf..0000000 --- a/.github/workflows/release-announcements.yml +++ /dev/null @@ -1,75 +0,0 @@ -name: release-announcements -# Automatic release toot and tweet anouncements -on: - release: - types: [published] - workflow_dispatch: - -jobs: - toot: - runs-on: ubuntu-latest - steps: - - name: get topics and convert to hashtags - id: get_topics - run: | - echo "topics=$(curl -s https://nf-co.re/pipelines.json | jq -r '.remote_workflows[] | select(.full_name == "${{ github.repository }}") | .topics[]' | awk '{print "#"$0}' | tr '\n' ' ')" >> $GITHUB_OUTPUT - - - uses: rzr/fediverse-action@master - with: - access-token: ${{ secrets.MASTODON_ACCESS_TOKEN }} - host: "mstdn.science" # custom host if not "mastodon.social" (default) - # GitHub event payload - # https://docs.github.com/en/developers/webhooks-and-events/webhooks/webhook-events-and-payloads#release - message: | - Pipeline release! ${{ github.repository }} v${{ github.event.release.tag_name }} - ${{ github.event.release.name }}! - - Please see the changelog: ${{ github.event.release.html_url }} - - ${{ steps.get_topics.outputs.topics }} #nfcore #openscience #nextflow #bioinformatics - - send-tweet: - runs-on: ubuntu-latest - - steps: - - uses: actions/setup-python@82c7e631bb3cdc910f68e0081d67478d79c6982d # v5 - with: - python-version: "3.10" - - name: Install dependencies - run: pip install tweepy==4.14.0 - - name: Send tweet - shell: python - run: | - import os - import tweepy - - client = tweepy.Client( - access_token=os.getenv("TWITTER_ACCESS_TOKEN"), - access_token_secret=os.getenv("TWITTER_ACCESS_TOKEN_SECRET"), - consumer_key=os.getenv("TWITTER_CONSUMER_KEY"), - consumer_secret=os.getenv("TWITTER_CONSUMER_SECRET"), - ) - tweet = os.getenv("TWEET") - client.create_tweet(text=tweet) - env: - TWEET: | - Pipeline release! ${{ github.repository }} v${{ github.event.release.tag_name }} - ${{ github.event.release.name }}! - - Please see the changelog: ${{ github.event.release.html_url }} - TWITTER_CONSUMER_KEY: ${{ secrets.TWITTER_CONSUMER_KEY }} - TWITTER_CONSUMER_SECRET: ${{ secrets.TWITTER_CONSUMER_SECRET }} - TWITTER_ACCESS_TOKEN: ${{ secrets.TWITTER_ACCESS_TOKEN }} - TWITTER_ACCESS_TOKEN_SECRET: ${{ secrets.TWITTER_ACCESS_TOKEN_SECRET }} - - bsky-post: - runs-on: ubuntu-latest - steps: - - uses: zentered/bluesky-post-action@80dbe0a7697de18c15ad22f4619919ceb5ccf597 # v0.1.0 - with: - post: | - Pipeline release! ${{ github.repository }} v${{ github.event.release.tag_name }} - ${{ github.event.release.name }}! - - Please see the changelog: ${{ github.event.release.html_url }} - env: - BSKY_IDENTIFIER: ${{ secrets.BSKY_IDENTIFIER }} - BSKY_PASSWORD: ${{ secrets.BSKY_PASSWORD }} - # diff --git a/.gitignore b/.gitignore index 5124c9a..dfb706c 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,6 @@ results/ testing/ testing* *.pyc + +*.stdout +*.stderr diff --git a/.nf-core.yml b/.nf-core.yml index 610776e..7278b0a 100644 --- a/.nf-core.yml +++ b/.nf-core.yml @@ -22,6 +22,6 @@ lint: nf_core_version: 2.14.1 repository_type: pipeline template: - prefix: PlantandFoodResearch + prefix: plant-food-research-open skip: - igenomes diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 4dc0f1d..1168e07 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -11,3 +11,13 @@ repos: hooks: - id: editorconfig-checker alias: ec + - repo: local + hooks: + - id: version_checks + name: Version checks + language: system + entry: > + .github/version_checks.sh + always_run: true + fail_fast: true + pass_filenames: false diff --git a/CHANGELOG.md b/CHANGELOG.md index 3ca4ebf..03935c8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,16 +1,164 @@ -# PlantandFoodResearch/genepal: Changelog +# plant-food-research-open/genepal: Changelog The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## v1.0dev - [date] +## 0.4.0+dev - [19-Aug-2024] -Initial release of PlantandFoodResearch/genepal, created with the [nf-core](https://nf-co.re/) template. +### `Added` + +1. Added `orthofinder_annotations` param +2. Added `FASTA_GFF_ORTHOFINDER` sub-workflow +3. Added evaluation by BUSCO [#41](https://github.com/plant-food-research-open/genepal/issues/41) +4. Included common tax ids for eggnog mapper [#27](https://github.com/plant-food-research-open/genepal/issues/27) +5. Implemented hierarchical naming scheme: geneI.tJ, geneI.tJ.exonK, geneI.tJ.cdsK [#19](https://github.com/plant-food-research-open/genepal/issues/19), [#34](https://github.com/plant-food-research-open/genepal/issues/34) +6. Now sorting list of bam and list of fastq before cat to avoid resume cache misses +7. Allowed BAM files for RNA evidence [#3](https://github.com/plant-food-research-open/genepal/issues/3) +8. Added `GXF_FASTA_AGAT_SPADDINTRONS_SPEXTRACTSEQUENCES` sub-workflow for splice type statistics [#11](https://github.com/plant-food-research-open/genepal/issues/11) +9. Changed `orthofinder_annotations` from FASTA/GFF to protein FASTA [#43](https://github.com/plant-food-research-open/genepal/issues/43) +10. Added param `enforce_full_intron_support` to turn on/off strict model purging by TSEBRA [#21](https://github.com/plant-food-research-open/genepal/issues/21) +11. Added param `filter_liftoff_by_hints` to evaluate liftoff models with TSEBRA to make sure they have the same level of evidence as BRAKER [#28](ttps://github.com/plant-food-research-open/genepal/issues/28) +12. Added a script to automatically check module version updates +13. Updated modules: `AGAT/CONVERTSPGFF2GTF`, `CAT_FASTQ`, `CUSTOM/DUMPSOFTWAREVERSIONS`, `EGGNOGMAPPER`, `FASTP`, `GFFREAD`, `SAMTOOLS/CAT`, `CUSTOM/RESTOREGFFIDS`, `CUSTOM/SHORTENFASTAIDS`, `EDTA/EDTA`, `CAT/CAT`, `FASTQC`, `GUNZIP`, `LIFTOFF`, `STAR/ALIGN`, `STAR/GENOMEGENERATE`, `UMITOOLS/EXTRACT`, +14. Updated sub-workflows: `FASTQ_FASTQC_UMITOOLS_FASTP` and `FASTA_EDTA_LAI` +15. Reduced `BRAKER3` threads to 8 [#55](https://github.com/plant-food-research-open/genepal/issues/55) +16. Now the final annotations are stored in the `annotations` folder [#53](https://github.com/plant-food-research-open/genepal/issues/53) +17. Added `-gff` flag to `REPEATMASKER` to save the gff file [#54](https://github.com/plant-food-research-open/genepal/issues/54) +18. Now a single `fasta` file can be directly specified for `protein_evidence` +19. `eggnogmapper_db_dir` is not a required parameter anymore +20. `eggnogmapper_tax_scope` is now set to 1 (root div) by default +21. Added a `test` profile based on public data + +### `Fixed` + +1. Fixed BRAKER spellings [#36](https://github.com/plant-food-research-open/genepal/issues/36) +2. Fixed liftoff failure when lifting off from a single reference [#40](https://github.com/plant-food-research-open/genepal/issues/40) +3. Added versions from GFF_STORE sub-workflows [#33](https://github.com/plant-food-research-open/genepal/issues/33) + +### `Dependencies` + +1. NextFlow!>=23.04.4 +2. nf-validation=1.1.3 + +### `Deprecated` + +1. Renamed `external_protein_fastas` param to `protein_evidence` +2. Renamed `fastq` param to `rna_evidence` +3. Renamed `braker_allow_isoforms` param to `allow_isoforms` +4. Moved liftoffID from gene level to mRNA/transcript level +5. Moved `version_check.sh` to `.github/version_checks.sh` +6. Removed dependency on for `BRAKER3` and `REPEATMASKER` modules which are now installed from +7. Removed dependency on +8. Now the final annotations are not stored in the `final` folder +9. Now BRAKER3 outputs are not saved by default [#53](https://github.com/plant-food-research-open/genepal/issues/53) and saved under `etc` folder when enabled +10. Removed `local` profile. Local executor is the default when no executor is specified. Therefore, the `local` profile was not needed. + +## 0.3.3 - [18-Jun-2024] ### `Added` +1. Added a stub test to evaluate the case where an assembly is soft masked but has no annotations + ### `Fixed` +1. Fixed a bug where `is_masked` was ignored by the pipeline +2. Fixed a bug in param validation which allowed specification of `braker_hints` without `braker_gff3` + +### `Dependencies` + +1. NextFlow!>=23.04.4 +2. nf-validation=1.1.3 + +### `Deprecated` + +## 0.3.2 - [13-May-2024] + +### `Added` + +### `Fixed` + +1. Increased time limit for REPEATMODELER_REPEATMODELER to 5 days +2. Now removing comments from fasta file before feeding it to BRAKER added tests for the perl one liner +3. Fixed CHANGELOG version check failure in `version_check.sh` +4. Increased the SLURM job time limit to 14 days + ### `Dependencies` +1. NextFlow!>=23.04.4 +2. nf-validation=1.1.3 + +### `Deprecated` + +## 0.3.1 - [10-May-2024] + +### `Added` + +### `Fixed` + +1. Increased time limit for REPEATMODELER_REPEATMODELER to 3 days, REPEATMASKER to 2 days, EDTA_EDTA to 7 days, BRAKER3 to 7 days and EGGNOGMAPPER to 1 day + +### `Dependencies` + +1. NextFlow!>=23.04.4 +2. nf-validation=1.1.3 + +### `Deprecated` + +## 0.3.0 - [30-April-2024] + +### `Added` + +1. Added changelog and semantic versioning +2. Changed license to MIT +3. Updated `.editorconfig` +4. Moved .literature to test/ branch +5. Renamed `genepal_local` to `local_genepal` +6. Renamed `genepal_pfr` to `pfr_genepal` +7. Added versioning checking +8. Updated github workflow to use pre-commit instead of prettier and editorconfig check +9. Added central singularity cache dir for pfr config +10. Added `SORTMERNA_INDEX` before `SORTMERNA` +11. Fixed sample contamination bug introduced by `file.simpleName` +12. Now using empty files for stub testing in CI +13. Now BRAKER can be skipped by including BRAKER outputs from previous runs in the `target_assemblies` param +14. Added `gffcompare` to merge liftoff annotations +15. Renamed `samplesheet` param to `fastq` +16. Now using assemblysheet in combination with nf-validation for assembly input +17. Added nextflow_schema.json +18. Now using nf-validation to validate fastqsheet provided by params.fastq +19. Moved `manifest.config` and `reporting_defaults.config` content to `nextflow.config` +20. Now using a txt file for `params.external_protein_fastas` +21. Now using nf-validation for `params.liftoff_annotations` +22. Now using nf-validation for all the parameters +23. Added `PURGE_BRAKER_MODELS` sub-workflow +24. Added `GFF_EGGNOGMAPPER` sub-workflow +25. Now using a custom version of `GFFREAD` which supports `meta` and `fasta` +26. Now using TSEBRA to purge models which do not have full intron support from BRAKER hints +27. Added params `eggnogmapper_evalue` and `eggnogmapper_pident` +28. Added `PURGE_NOHIT_BRAKER_MODELS` sub-workflow +29. Now merging BRAKER and liftoff models before running eggnogmapper +30. Added `GFF_MERGE_CLEANUP` sub-workflow +31. Now using `description` field to store notes and textual annotations in the gff files +32. Now using `mRNA` in place of `transcript` in gff files +33. Now `eggnogmapper_purge_nohits` is set to `false` by default +34. Added `GFF_STORE` sub workflow +35. `external_protein_fastas` and `eggnogmapper_db_dir` are not mandatory parameters +36. Added contributors +37. Add a document for the pipeline parameters +38. Updated `pfr_genepal` and `pfr/profile.config` +39. Now using local tests/stub files for GitHub CI +40. Now removing iso-forms left by TSEBRA using `AGAT_SPFILTERFEATUREFROMKILLLIST` +41. Added `pyproject.toml` +42. Now using PFAMs from eggnog if description is '-' + +### `Fixed` + +1. Removed liftoff models with `valid_ORF=False` +2. Updated license text to include 'Copyright (c) 2024 The New Zealand Institute for Plant and Food Research Limited' + +### `Dependencies` + +1. NextFlow!>=23.04.4 +2. nf-validation=1.1.3 + ### `Deprecated` diff --git a/CITATIONS.md b/CITATIONS.md index 9e64d35..a76afa2 100644 --- a/CITATIONS.md +++ b/CITATIONS.md @@ -1,4 +1,4 @@ -# PlantandFoodResearch/genepal: Citations +# plant-food-research-open/genepal: Citations ## [nf-core](https://pubmed.ncbi.nlm.nih.gov/32055031/) @@ -10,13 +10,95 @@ ## Pipeline tools -- [FastQC](https://www.bioinformatics.babraham.ac.uk/projects/fastqc/) +- py_fasta_validator, [MIT](https://github.com/linsalrob/py_fasta_validator/blob/master/LICENSE) - > Andrews, S. (2010). FastQC: A Quality Control Tool for High Throughput Sequence Data [Online]. + > Edwards, R.A. 2019. fasta_validate: a fast and efficient fasta validator written in pure C. doi: -- [MultiQC](https://pubmed.ncbi.nlm.nih.gov/27312411/) +- GenomeTools, [ISC](http://genometools.org/license.html) - > Ewels P, Magnusson M, Lundin S, Käller M. MultiQC: summarize analysis results for multiple tools and samples in a single report. Bioinformatics. 2016 Oct 1;32(19):3047-8. doi: 10.1093/bioinformatics/btw354. Epub 2016 Jun 16. PubMed PMID: 27312411; PubMed Central PMCID: PMC5039924. + > Gremme G, Steinbiss S, Kurtz S. 2013. "GenomeTools: A Comprehensive Software Library for Efficient Processing of Structured Genome Annotations," in IEEE/ACM Transactions on Computational Biology and Bioinformatics, vol. 10, no. 3, pp. 645-656, May 2013, doi: + +- SAMTOOLS, [MIT/Expat](https://github.com/samtools/samtools/blob/develop/LICENSE) + + > Danecek P, Bonfield JK, Liddle J, Marshall J, Ohan V, Pollard MO, Whitwham A, Keane T, McCarthy SA, Davies RM, Li H. 2021. Twelve years of SAMtools and BCFtools, GigaScience, Volume 10, Issue 2, February 2021, giab008, + +- BUSCO, [MIT](https://gitlab.com/ezlab/busco/-/blob/master/LICENSE) + + > Manni M, Berkeley MR, Seppey M, Simão FA, Zdobnov EM. 2021. BUSCO Update: Novel and Streamlined Workflows along with Broader and Deeper Phylogenetic Coverage for Scoring of Eukaryotic, Prokaryotic, and Viral Genomes, Molecular Biology and Evolution, Volume 38, Issue 10, October 2021, Pages 4647–4654, + +- GFFREAD, [MIT](https://github.com/gpertea/gffread/blob/master/LICENSE) + + > Pertea G, Pertea M. GFF Utilities: GffRead and GffCompare. F1000Res. 2020 Apr 28;9:ISCB Comm J-304. doi: . PMID: 32489650; PMCID: PMC7222033. + +- SEQKIT, [MIT](https://github.com/shenwei356/seqkit/blob/master/LICENSE) + + > Shen W, Le S, Li Y, Hu F. 2016. SeqKit: A Cross-Platform and Ultrafast Toolkit for FASTA/Q File Manipulation. PLoS ONE 11(10): e0163962. + +- FASTP, [MIT](https://github.com/OpenGene/fastp/blob/master/LICENSE) + + > Chen S, Zhou Y, Chen Y, Gu J. 2018. fastp: an ultra-fast all-in-one FASTQ preprocessor, Bioinformatics, Volume 34, Issue 17, 01 September 2018, Pages i884–i890, + +- FASTQC, [GPL v3](https://github.com/s-andrews/FastQC/blob/master/LICENSE.txt) + + > + +- AGAT, [GPL v3](https://github.com/NBISweden/AGAT/blob/master/LICENSE) + + > Dainat J. AGAT: Another Gff Analysis Toolkit to handle annotations in any GTF/GFF format. (Version v0.8.0). Zenodo. https://www.doi.org/10.5281/zenodo.3552717 + +- BRAKER, [Artistic license-1.0](https://github.com/Gaius-Augustus/BRAKER/blob/master/LICENSE.TXT) + + > Stanke, M., Diekhans, M., Baertsch, R. and Haussler, D. (2008). Using native and syntenically mapped cDNA alignments to improve de novo gene finding. Bioinformatics, doi: 10.1093/bioinformatics/btn013. + + > Stanke. M., Schöffmann, O., Morgenstern, B. and Waack, S. (2006). Gene prediction in eukaryotes with a generalized hidden Markov model that uses hints from external sources. BMC Bioinformatics 7, 62. + + > Gabriel, L., Bruna, T., Hoff, K. J., Ebel, M., Lomsadze, A., Borodovsky, M., Stanke, M. (2023). BRAKER3: Fully Automated Genome Annotation Using RNA-Seq and Protein Evidence with GeneMark-ETP, AUGUSTUS and TSEBRA. bioRxiV, doi: 10.1101/2023.06.10.54444910.1101/2023.01.01.474747. + + > Bruna, T., Lomsadze, A., Borodovsky, M. (2023). GeneMark-ETP: Automatic Gene Finding in Eukaryotic Genomes in Consistence with Extrinsic Data. bioRxiv, doi: 10.1101/2023.01.13.524024. + + > Kovaka, S., Zimin, A. V., Pertea, G. M., Razaghi, R., Salzberg, S. L., & Pertea, M. (2019). Transcriptome assembly from long-read RNA-seq alignments with StringTie2. Genome biology, 20(1):1-13. + +- EDTA, [GPL v3](https://github.com/oushujun/EDTA/blob/master/LICENSE) + + > Ou S., Su W., Liao Y., Chougule K., Agda J. R. A., Hellinga A. J., Lugo C. S. B., Elliott T. A., Ware D., Peterson T., Jiang N., Hirsch C. N. and Hufford M. B. (2019). Benchmarking Transposable Element Annotation Methods for Creation of a Streamlined, Comprehensive Pipeline. Genome Biol. 20(1): 275. doi: + +- RepeatMasker, [Open Software License v. 2.1](https://github.com/rmhubley/RepeatMasker/blob/master/LICENSE) + + > + +- eggnog-mapper, [GPL v3](https://github.com/eggnogdb/eggnog-mapper/blob/master/LICENSE.txt) + + > eggNOG-mapper v2: functional annotation, orthology assignments, and domain prediction at the metagenomic scale. Carlos P. Cantalapiedra, Ana Hernandez-Plaza, Ivica Letunic, Peer Bork, Jaime Huerta-Cepas. 2021. Molecular Biology and Evolution, msab293, + + > eggNOG 5.0: a hierarchical, functionally and phylogenetically annotated orthology resource based on 5090 organisms and 2502 viruses. Jaime Huerta-Cepas, Damian Szklarczyk, Davide Heller, Ana Hernández-Plaza, Sofia K Forslund, Helen Cook, Daniel R Mende, Ivica Letunic, Thomas Rattei, Lars J Jensen, Christian von Mering, Peer Bork Nucleic Acids Res. 2019 Jan 8; 47(Database issue): D309–D314. doi: 10.1093/nar/gky1085 + + > Sensitive protein alignments at tree-of-life scale using DIAMOND. Buchfink B, Reuter K, Drost HG. 2021. Nature Methods 18, 366–368 (2021). + +- Liftoff, [GPL v3](https://github.com/agshumate/Liftoff/blob/master/LICENSE.md) + + > Shumate, Alaina, and Steven L. Salzberg. 2020. “Liftoff: Accurate Mapping of Gene Annotations.” Bioinformatics , December. + +- OrthoFinder, [GPL v3](https://github.com/davidemms/OrthoFinder/blob/master/License.md) + + > Emms, D.M. and Kelly, S. (2019) OrthoFinder: phylogenetic orthology inference for comparative genomics. Genome Biology 20:238 + + > Emms, D.M. and Kelly, S. (2015) OrthoFinder: solving fundamental biases in whole genome comparisons dramatically improves orthogroup inference accuracy. Genome Biology 16:157 + +- RepeatModeler, [Open Software License v. 2.1](https://github.com/Dfam-consortium/RepeatModeler/blob/master/LICENSE) + + > + +- sortmerna, [GPL v3](https://github.com/sortmerna/sortmerna/blob/master/LICENSE.txt) + + > Kopylova E., Noé L. and Touzet H., "SortMeRNA: Fast and accurate filtering of ribosomal RNAs in metatranscriptomic data", Bioinformatics (2012), doi: . + +- STAR, [MIT](https://github.com/alexdobin/STAR/blob/master/LICENSE) + + > Dobin A, Davis CA, Schlesinger F, Drenkow J, Zaleski C, Jha S, Batut P, Chaisson M, Gingeras TR. STAR: ultrafast universal RNA-seq aligner. Bioinformatics. 2013 Jan 1;29(1):15-21. doi: . Epub 2012 Oct 25. PMID: 23104886; PMCID: PMC3530905. + +- TSEBRA, [The Artistic License 2.0](https://github.com/Gaius-Augustus/TSEBRA/blob/main/bin/LICENSE.txt) + + > Gabriel, L., Hoff, K.J., Brůna, T. et al. TSEBRA: transcript selector for BRAKER. BMC Bioinformatics 22, 566 (2021). ## Software packaging/containerisation tools diff --git a/LICENSE b/LICENSE index 9106c5a..2ef2204 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) Usman Rashid, Jason Shiller +Copyright (c) 2024 The New Zealand Institute for Plant and Food Research Limited Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/README.md b/README.md index 676f47c..34eb434 100644 --- a/README.md +++ b/README.md @@ -1,16 +1,16 @@ -[![GitHub Actions CI Status](https://github.com/PlantandFoodResearch/genepal/actions/workflows/ci.yml/badge.svg)](https://github.com/PlantandFoodResearch/genepal/actions/workflows/ci.yml) -[![GitHub Actions Linting Status](https://github.com/PlantandFoodResearch/genepal/actions/workflows/linting.yml/badge.svg)](https://github.com/PlantandFoodResearch/genepal/actions/workflows/linting.yml)[![Cite with Zenodo](http://img.shields.io/badge/DOI-10.5281/zenodo.XXXXXXX-1073c8?labelColor=000000)](https://doi.org/10.5281/zenodo.XXXXXXX) +[![GitHub Actions CI Status](https://github.com/plant-food-research-open/genepal/actions/workflows/ci.yml/badge.svg)](https://github.com/plant-food-research-open/genepal/actions/workflows/ci.yml) +[![GitHub Actions Linting Status](https://github.com/plant-food-research-open/genepal/actions/workflows/linting.yml/badge.svg)](https://github.com/plant-food-research-open/genepal/actions/workflows/linting.yml)[![Cite with Zenodo](http://img.shields.io/badge/DOI-10.5281/zenodo.XXXXXXX-1073c8?labelColor=000000)](https://doi.org/10.5281/zenodo.XXXXXXX) [![nf-test](https://img.shields.io/badge/unit_tests-nf--test-337ab7.svg)](https://www.nf-test.com) [![Nextflow](https://img.shields.io/badge/nextflow%20DSL2-%E2%89%A523.04.0-23aa62.svg)](https://www.nextflow.io/) [![run with conda](http://img.shields.io/badge/run%20with-conda-3EB049?labelColor=000000&logo=anaconda)](https://docs.conda.io/en/latest/) [![run with docker](https://img.shields.io/badge/run%20with-docker-0db7ed?labelColor=000000&logo=docker)](https://www.docker.com/) [![run with singularity](https://img.shields.io/badge/run%20with-singularity-1d355c.svg?labelColor=000000)](https://sylabs.io/docs/) -[![Launch on Seqera Platform](https://img.shields.io/badge/Launch%20%F0%9F%9A%80-Seqera%20Platform-%234256e7)](https://cloud.seqera.io/launch?pipeline=https://github.com/PlantandFoodResearch/genepal) +[![Launch on Seqera Platform](https://img.shields.io/badge/Launch%20%F0%9F%9A%80-Seqera%20Platform-%234256e7)](https://cloud.seqera.io/launch?pipeline=https://github.com/plant-food-research-open/genepal) ## Introduction -**PlantandFoodResearch/genepal** is a bioinformatics pipeline that ... +**plant-food-research-open/genepal** is a bioinformatics pipeline that ... ```bash -nextflow run PlantandFoodResearch/genepal \ +nextflow run plant-food-research-open/genepal \ -profile \ --input samplesheet.csv \ --outdir @@ -63,7 +63,7 @@ nextflow run PlantandFoodResearch/genepal \ ## Credits -PlantandFoodResearch/genepal was originally written by Usman Rashid, Jason Shiller. +plant-food-research-open/genepal was originally written by Usman Rashid, Jason Shiller. We thank the following people for their extensive assistance in the development of this pipeline: @@ -76,7 +76,7 @@ If you would like to contribute to this pipeline, please see the [contributing g ## Citations - + diff --git a/assets/adaptivecard.json b/assets/adaptivecard.json index b356d9d..24315fd 100644 --- a/assets/adaptivecard.json +++ b/assets/adaptivecard.json @@ -17,7 +17,7 @@ "size": "Large", "weight": "Bolder", "color": "<% if (success) { %>Good<% } else { %>Attention<%} %>", - "text": "PlantandFoodResearch/genepal v${version} - ${runName}", + "text": "plant-food-research-open/genepal v${version} - ${runName}", "wrap": true }, { diff --git a/assets/email_template.html b/assets/email_template.html index aa507c5..218a088 100644 --- a/assets/email_template.html +++ b/assets/email_template.html @@ -4,21 +4,21 @@ - - PlantandFoodResearch/genepal Pipeline Report + + plant-food-research-open/genepal Pipeline Report
    -

    PlantandFoodResearch/genepal ${version}

    +

    plant-food-research-open/genepal ${version}

    Run Name: $runName

    <% if (!success){ out << """
    -

    PlantandFoodResearch/genepal execution completed unsuccessfully!

    +

    plant-food-research-open/genepal execution completed unsuccessfully!

    The exit status of the task that caused the workflow execution to fail was: $exitStatus.

    The full error message was:

    ${errorReport}
    @@ -27,7 +27,7 @@

    PlantandFoodResearch/genepal execution } else { out << """
    - PlantandFoodResearch/genepal execution completed successfully! + plant-food-research-open/genepal execution completed successfully!
    """ } @@ -44,8 +44,8 @@

    Pipeline Configuration:

    Process Name \\", - " \\ Software Version
    CUSTOM_DUMPSOFTWAREVERSIONSpython3.11.7
    yaml5.4.1
    TOOL1tool10.11.9
    TOOL2tool21.9
    WorkflowNextflow
    File typeConventional base calls
    File typeConventional base calls
    File typeConventional base calls
    File typeConventional base calls
    File typeConventional base calls
    File typeConventional base calls
    File typeConventional base calls
    File typeConventional base calls
    File typeConventional base calls
    File typeConventional base calls
    File typeConventional base calls
    File typeConventional base calls
    File typeConventional base calls
    File typeConventional base calls
    File typeConventional base calls
    File typeConventional base calls
    File typeConventional base calls
    File typeConventional base calls
    File typeConventional base calls
    File typeConventional base calls
    -

    PlantandFoodResearch/genepal

    -

    https://github.com/PlantandFoodResearch/genepal

    +

    plant-food-research-open/genepal

    +

    https://github.com/plant-food-research-open/genepal

    diff --git a/assets/email_template.txt b/assets/email_template.txt index 735bcac..2bc5fc1 100644 --- a/assets/email_template.txt +++ b/assets/email_template.txt @@ -1,10 +1,10 @@ Run Name: $runName <% if (success){ - out << "## PlantandFoodResearch/genepal execution completed successfully! ##" + out << "## plant-food-research-open/genepal execution completed successfully! ##" } else { out << """#################################################### -## PlantandFoodResearch/genepal execution completed unsuccessfully! ## +## plant-food-research-open/genepal execution completed unsuccessfully! ## #################################################### The exit status of the task that caused the workflow execution to fail was: $exitStatus. The full error message was: @@ -27,5 +27,5 @@ Pipeline Configuration: <% out << summary.collect{ k,v -> " - $k: $v" }.join("\n") %> -- -PlantandFoodResearch/genepal -https://github.com/PlantandFoodResearch/genepal +plant-food-research-open/genepal +https://github.com/plant-food-research-open/genepal diff --git a/assets/methods_description_template.yml b/assets/methods_description_template.yml deleted file mode 100644 index a456ef1..0000000 --- a/assets/methods_description_template.yml +++ /dev/null @@ -1,29 +0,0 @@ -id: "PlantandFoodResearch-genepal-methods-description" -description: "Suggested text and references to use when describing pipeline usage within the methods section of a publication." -section_name: "PlantandFoodResearch/genepal Methods Description" -section_href: "https://github.com/PlantandFoodResearch/genepal" -plot_type: "html" -## TODO nf-core: Update the HTML below to your preferred methods description, e.g. add publication citation for this pipeline -## You inject any metadata in the Nextflow '${workflow}' object -data: | -

    Methods

    -

    Data was processed using PlantandFoodResearch/genepal v${workflow.manifest.version} ${doi_text} of the nf-core collection of workflows (Ewels et al., 2020), utilising reproducible software environments from the Bioconda (Grüning et al., 2018) and Biocontainers (da Veiga Leprevost et al., 2017) projects.

    -

    The pipeline was executed with Nextflow v${workflow.nextflow.version} (Di Tommaso et al., 2017) with the following command:

    -
    ${workflow.commandLine}
    -

    ${tool_citations}

    -

    References

    -
      -
    • Di Tommaso, P., Chatzou, M., Floden, E. W., Barja, P. P., Palumbo, E., & Notredame, C. (2017). Nextflow enables reproducible computational workflows. Nature Biotechnology, 35(4), 316-319. doi: 10.1038/nbt.3820
    • -
    • Ewels, P. A., Peltzer, A., Fillinger, S., Patel, H., Alneberg, J., Wilm, A., Garcia, M. U., Di Tommaso, P., & Nahnsen, S. (2020). The nf-core framework for community-curated bioinformatics pipelines. Nature Biotechnology, 38(3), 276-278. doi: 10.1038/s41587-020-0439-x
    • -
    • Grüning, B., Dale, R., Sjödin, A., Chapman, B. A., Rowe, J., Tomkins-Tinch, C. H., Valieris, R., Köster, J., & Bioconda Team. (2018). Bioconda: sustainable and comprehensive software distribution for the life sciences. Nature Methods, 15(7), 475–476. doi: 10.1038/s41592-018-0046-7
    • -
    • da Veiga Leprevost, F., Grüning, B. A., Alves Aflitos, S., Röst, H. L., Uszkoreit, J., Barsnes, H., Vaudel, M., Moreno, P., Gatto, L., Weber, J., Bai, M., Jimenez, R. C., Sachsenberg, T., Pfeuffer, J., Vera Alvarez, R., Griss, J., Nesvizhskii, A. I., & Perez-Riverol, Y. (2017). BioContainers: an open-source and community-driven framework for software standardization. Bioinformatics (Oxford, England), 33(16), 2580–2582. doi: 10.1093/bioinformatics/btx192
    • - ${tool_bibliography} -
    -
    -
    Notes:
    -
      - ${nodoi_text} -
    • The command above does not include parameters contained in any configs or profiles that may have been used. Ensure the config file is also uploaded with your publication!
    • -
    • You should also cite all software used within this run. Check the "Software Versions" of this report to get version information.
    • -
    -
    diff --git a/assets/multiqc_config.yml b/assets/multiqc_config.yml deleted file mode 100644 index 6165596..0000000 --- a/assets/multiqc_config.yml +++ /dev/null @@ -1,14 +0,0 @@ -report_comment: > - This report has been generated by the PlantandFoodResearch/genepal - analysis pipeline. -report_section_order: - "PlantandFoodResearch-genepal-methods-description": - order: -1000 - software_versions: - order: -1001 - "PlantandFoodResearch-genepal-summary": - order: -1002 - -export_plots: true - -disable_version_detection: true diff --git a/assets/rrna-db-defaults.txt b/assets/rrna-db-defaults.txt new file mode 100644 index 0000000..4223356 --- /dev/null +++ b/assets/rrna-db-defaults.txt @@ -0,0 +1,8 @@ +https://raw.githubusercontent.com/biocore/sortmerna/v4.3.4/data/rRNA_databases/rfam-5.8s-database-id98.fasta +https://raw.githubusercontent.com/biocore/sortmerna/v4.3.4/data/rRNA_databases/rfam-5s-database-id98.fasta +https://raw.githubusercontent.com/biocore/sortmerna/v4.3.4/data/rRNA_databases/silva-arc-16s-id95.fasta +https://raw.githubusercontent.com/biocore/sortmerna/v4.3.4/data/rRNA_databases/silva-arc-23s-id98.fasta +https://raw.githubusercontent.com/biocore/sortmerna/v4.3.4/data/rRNA_databases/silva-bac-16s-id90.fasta +https://raw.githubusercontent.com/biocore/sortmerna/v4.3.4/data/rRNA_databases/silva-bac-23s-id98.fasta +https://raw.githubusercontent.com/biocore/sortmerna/v4.3.4/data/rRNA_databases/silva-euk-18s-id95.fasta +https://raw.githubusercontent.com/biocore/sortmerna/v4.3.4/data/rRNA_databases/silva-euk-28s-id98.fasta diff --git a/assets/rrna-db-test.txt b/assets/rrna-db-test.txt new file mode 100644 index 0000000..20116f9 --- /dev/null +++ b/assets/rrna-db-test.txt @@ -0,0 +1 @@ +https://raw.githubusercontent.com/biocore/sortmerna/v4.3.4/data/rRNA_databases/silva-euk-28s-id98.fasta diff --git a/assets/samplesheet.csv b/assets/samplesheet.csv deleted file mode 100644 index 5f653ab..0000000 --- a/assets/samplesheet.csv +++ /dev/null @@ -1,3 +0,0 @@ -sample,fastq_1,fastq_2 -SAMPLE_PAIRED_END,/path/to/fastq/files/AEG588A1_S1_L002_R1_001.fastq.gz,/path/to/fastq/files/AEG588A1_S1_L002_R2_001.fastq.gz -SAMPLE_SINGLE_END,/path/to/fastq/files/AEG588A4_S4_L003_R1_001.fastq.gz, diff --git a/assets/schema_input.json b/assets/schema_input.json index 34b65a4..ba11e7d 100644 --- a/assets/schema_input.json +++ b/assets/schema_input.json @@ -1,33 +1,70 @@ { "$schema": "http://json-schema.org/draft-07/schema", - "$id": "https://raw.githubusercontent.com/PlantandFoodResearch/genepal/master/assets/schema_input.json", - "title": "PlantandFoodResearch/genepal pipeline - params.input schema", + "$id": "https://raw.githubusercontent.com/plant-food-research-open/genepal/master/assets/schema_input.json", + "title": "plant-food-research-open/genepal pipeline - params.input schema", "description": "Schema for the file provided with params.input", "type": "array", "items": { "type": "object", "properties": { - "sample": { + "tag": { "type": "string", - "pattern": "^\\S+$", - "errorMessage": "Sample name must be provided and cannot contain spaces", - "meta": ["id"] + "pattern": "^\\w+$", + "errorMessage": "Assembly tags must be provided and can only contain alphanumeric characters including '_'", + "unique": true }, - "fastq_1": { + "fasta": { "type": "string", - "format": "file-path", - "exists": true, - "pattern": "^\\S+\\.f(ast)?q\\.gz$", - "errorMessage": "FastQ file for reads 1 must be provided, cannot contain spaces and must have extension '.fq.gz' or '.fastq.gz'" + "pattern": "^\\S+\\.f(a|asta|as|sa|na)(\\.gz)?$", + "errorMessage": "FASTA file path cannot contain spaces and must have extension '.f(a|asta|as|sa|na)' or '.f(a|asta|as|sa|na).gz'" }, - "fastq_2": { + "is_masked": { "type": "string", - "format": "file-path", - "exists": true, - "pattern": "^\\S+\\.f(ast)?q\\.gz$", - "errorMessage": "FastQ file for reads 2 cannot contain spaces and must have extension '.fq.gz' or '.fastq.gz'" + "pattern": "^(yes|no)$", + "errorMessage": "Masking information must be provided as 'yes' or 'no'" + }, + "te_lib": { + "anyOf": [ + { + "type": "string", + "pattern": "^\\S+\\.f(a|asta|as|sa|na)(\\.gz)?$" + }, + { + "type": "string", + "maxLength": 0 + } + ], + "errorMessage": "TE library FASTA file path cannot contain spaces and must have extension '.f(a|asta|as|sa|na)' or '.f(a|asta|as|sa|na).gz'" + }, + "braker_gff3": { + "anyOf": [ + { + "type": "string", + "pattern": "^\\S+\\.gff(3)?(\\.gz)?$" + }, + { + "type": "string", + "maxLength": 0 + } + ], + "errorMessage": "BRAKER GFF3 file path cannot contain spaces and must have extension '.gff.gz', '.gff3.gz', '.gff' or '.gff3'", + "dependentRequired": ["braker_hints"] + }, + "braker_hints": { + "anyOf": [ + { + "type": "string", + "pattern": "^\\S+\\.gff(3)?(\\.gz)?$" + }, + { + "type": "string", + "maxLength": 0 + } + ], + "errorMessage": "BRAKER hints GFF/GFF3 file path cannot contain spaces and must have extension '.gff.gz', '.gff3.gz', '.gff' or '.gff3'", + "dependentRequired": ["braker_gff3"] } }, - "required": ["sample", "fastq_1"] + "required": ["tag", "fasta", "is_masked"] } } diff --git a/assets/schema_liftoff.json b/assets/schema_liftoff.json new file mode 100644 index 0000000..3f925b1 --- /dev/null +++ b/assets/schema_liftoff.json @@ -0,0 +1,25 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema", + "$id": "https://raw.githubusercontent.com/plant-food-research-open/genepal/master/assets/schema_liftoff.json", + "title": "plant-food-research-open/genepal pipeline - params.liftoff_annotations schema", + "description": "Schema for the file provided with params.liftoff_annotations", + "type": "array", + "items": { + "type": "object", + "properties": { + "fasta": { + "type": "string", + "pattern": "^\\S+\\.f(a|asta|as|sa|na)(\\.gz)?$", + "errorMessage": "FASTA file path cannot contain spaces and must have extension '.f(a|asta|as|sa|na)' or '.f(a|asta|as|sa|na).gz'", + "unique": true + }, + "gff3": { + "type": "string", + "pattern": "^\\S+\\.gff(3)?(\\.gz)?$", + "errorMessage": "Annotation GFF3 file path cannot contain spaces and must have extension '.gff.gz', '.gff3.gz', '.gff' or '.gff3'", + "unique": true + } + }, + "required": ["fasta", "gff3"] + } +} diff --git a/assets/schema_orthofinder.json b/assets/schema_orthofinder.json new file mode 100644 index 0000000..c568143 --- /dev/null +++ b/assets/schema_orthofinder.json @@ -0,0 +1,25 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema", + "$id": "https://raw.githubusercontent.com/plant-food-research-open/genepal/master/assets/schema_orthofinder.json", + "title": "plant-food-research-open/genepal pipeline - params.orthofinder_annotations schema", + "description": "Schema for the file provided with params.orthofinder_annotations", + "type": "array", + "items": { + "type": "object", + "properties": { + "tag": { + "type": "string", + "pattern": "^\\w+$", + "errorMessage": "Annotation tags must be provided and can only contain alphanumeric characters including '_'", + "unique": true + }, + "fasta": { + "type": "string", + "pattern": "^\\S+\\.(fa|fas|pep|faa|fasta)(\\.gz)?$", + "errorMessage": "Proteins FASTA file path cannot contain spaces and must have extension '.(fa|fas|pep|faa|fasta)' or '.(fa|fas|pep|faa|fasta).gz'. Orthofinder does not allow 'fna' extension", + "unique": true + } + }, + "required": ["tag", "fasta"] + } +} diff --git a/assets/schema_rna.json b/assets/schema_rna.json new file mode 100644 index 0000000..6cc681c --- /dev/null +++ b/assets/schema_rna.json @@ -0,0 +1,46 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema", + "$id": "https://raw.githubusercontent.com/plant-food-research-open/genepal/master/assets/schema_rna.json", + "title": "plant-food-research-open/genepal pipeline - params.rna_evidence schema", + "description": "Schema for the file provided with params.rna_evidence", + "type": "array", + "items": { + "type": "object", + "properties": { + "sample": { + "type": "string", + "pattern": "^\\S+$", + "errorMessage": "Sample name must be provided and cannot contain spaces", + "meta": ["id"] + }, + "file_1": { + "type": "string", + "pattern": "^\\S+\\.(f(ast)?q\\.gz|bam)$", + "errorMessage": "FASTQ file for reads 1 or BAM file containing mapped reads must be provided, cannot contain spaces and must have extension '.fq.gz', '.fastq.gz' or '.bam'", + "unique": true + }, + "file_2": { + "errorMessage": "FASTQ file for reads 2 cannot contain spaces and must have extension '.fq.gz' or '.fastq.gz'", + "anyOf": [ + { + "type": "string", + "pattern": "^\\S+\\.f(ast)?q\\.gz$" + }, + { + "type": "string", + "maxLength": 0 + } + ], + "dependentRequired": ["file_1"], + "unique": true + }, + "target_assemblies": { + "type": "string", + "pattern": "^(\\w+;)*\\w+$", + "errorMessage": "One or more target assemblies must be specified by their tags from params.input sheet. Multiple tags should be separated by ';'", + "meta": ["target_assemblies"] + } + }, + "required": ["sample", "file_1", "target_assemblies"] + } +} diff --git a/assets/sendmail_template.txt b/assets/sendmail_template.txt index 402fcfb..8611aca 100644 --- a/assets/sendmail_template.txt +++ b/assets/sendmail_template.txt @@ -9,12 +9,12 @@ Content-Type: text/html; charset=utf-8 $email_html --nfcoremimeboundary -Content-Type: image/png;name="PlantandFoodResearch-genepal_logo.png" +Content-Type: image/png;name="plant-food-research-open-genepal_logo.png" Content-Transfer-Encoding: base64 Content-ID: -Content-Disposition: inline; filename="PlantandFoodResearch-genepal_logo_light.png" +Content-Disposition: inline; filename="plant-food-research-open-genepal_logo_light.png" -<% out << new File("$projectDir/assets/PlantandFoodResearch-genepal_logo_light.png"). +<% out << new File("$projectDir/assets/plant-food-research-open-genepal_logo_light.png"). bytes. encodeBase64(). toString(). diff --git a/assets/slackreport.json b/assets/slackreport.json index 00aa237..6c2ea45 100644 --- a/assets/slackreport.json +++ b/assets/slackreport.json @@ -3,7 +3,7 @@ { "fallback": "Plain-text summary of the attachment.", "color": "<% if (success) { %>good<% } else { %>danger<%} %>", - "author_name": "PlantandFoodResearch/genepal ${version} - ${runName}", + "author_name": "plant-food-research-open/genepal ${version} - ${runName}", "author_icon": "https://www.nextflow.io/docs/latest/_static/favicon.ico", "text": "<% if (success) { %>Pipeline completed successfully!<% } else { %>Pipeline completed with errors<% } %>", "fields": [ diff --git a/assets/tsebra-template.cfg b/assets/tsebra-template.cfg new file mode 100644 index 0000000..fa06c50 --- /dev/null +++ b/assets/tsebra-template.cfg @@ -0,0 +1,16 @@ +# Weight for each hint source +# Values have to be >= 0 +P 1 +E 20 +C 1 +M 1 +# Required fraction of supported introns or supported start/stop-codons for a transcript +# Values have to be in [0,1] +intron_support PARAM_INTRON_SUPPORT +stasto_support 2 +# Allowed difference for each feature +# Values have to be in [0,1] +e_1 PARAM_E1 +e_2 PARAM_E2 +e_3 PARAM_E3 +e_4 PARAM_E4 diff --git a/cleanNXF.sh b/cleanNXF.sh new file mode 100755 index 0000000..8c64a3e --- /dev/null +++ b/cleanNXF.sh @@ -0,0 +1,11 @@ +#!/usr/bin/env bash + +rm -rf .nextflow* +echo "Cleaned .nextflow..." +rm -rf .nextflow.pid +echo "Cleaned .nextflow.pid..." +for i in $(ls work | grep -v "conda"); +do + rm -rf "work/$i" +done +echo "Cleaned work..." diff --git a/conf/base.config b/conf/base.config index f7e395a..4accf0a 100644 --- a/conf/base.config +++ b/conf/base.config @@ -1,6 +1,6 @@ /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - PlantandFoodResearch/genepal Nextflow base config file + plant-food-research-open/genepal Nextflow base config file ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ A 'blank slate' config file, appropriate for general use on most high performance compute environments. Assumes that all software is installed and available on @@ -10,7 +10,6 @@ process { - // TODO nf-core: Check the defaults for all processes cpus = { check_max( 1 * task.attempt, 'cpus' ) } memory = { check_max( 6.GB * task.attempt, 'memory' ) } time = { check_max( 4.h * task.attempt, 'time' ) } @@ -24,7 +23,6 @@ process { // These labels are used and recognised by default in DSL2 files hosted on nf-core/modules. // If possible, it would be nice to keep the same label naming convention when // adding in your local modules too. - // TODO nf-core: Customise requirements for specific processes. // See https://www.nextflow.io/docs/latest/config.html#config-process-selectors withLabel:process_single { cpus = { check_max( 1 , 'cpus' ) } @@ -59,4 +57,24 @@ process { errorStrategy = 'retry' maxRetries = 2 } + + withName:EGGNOGMAPPER { + time = { check_max( 1.day * task.attempt, 'time' ) } + } + withName:REPEATMASKER_REPEATMASKER { + time = { check_max( 2.days * task.attempt, 'time' ) } + } + withName:REPEATMODELER_REPEATMODELER { + time = { check_max( 5.days * task.attempt, 'time' ) } + } + withName:EDTA_EDTA { + time = { check_max( 7.days * task.attempt, 'time' ) } + } + withName:BRAKER3 { + cpus = { check_max( 8 * task.attempt, 'cpus' ) } + time = { check_max( 7.days * task.attempt, 'time' ) } + } + withName:CUSTOM_DUMPSOFTWAREVERSIONS { + cache = false + } } diff --git a/conf/modules.config b/conf/modules.config index d203d2b..4199673 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -10,25 +10,355 @@ ---------------------------------------------------------------------------------------- */ -process { +process { // SUBWORKFLOW: PREPARE_ASSEMBLY + withName: '.*:PREPARE_ASSEMBLY:FASTA_EDTA_LAI:EDTA_EDTA' { + ext.args = [ + params.edta_is_sensitive ? "--sensitive 1" : "--sensitive 0", + "--anno 0", + "--force 1" + ].join(' ').trim() - publishDir = [ - path: { "${params.outdir}/${task.process.tokenize(':')[-1].tokenize('_')[0].toLowerCase()}" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] + publishDir = [ + path: { "${params.outdir}/edta" }, + mode: params.publish_dir_mode, + pattern: '*.EDTA.TElib.fa', + enabled: params.save_annotated_te_lib + ] + } + + withName: '.*:PREPARE_ASSEMBLY:REPEATMODELER_REPEATMODELER' { + ext.args = '-LTRStruct' + + publishDir = [ + path: { "${params.outdir}/repeatmodeler" }, + mode: params.publish_dir_mode, + pattern: '*.fa', + enabled: params.save_annotated_te_lib + ] + } + + withName: '.*:PREPARE_ASSEMBLY:REPEATMASKER_REPEATMASKER' { + ext.args = [ + "-no_is", + "-xsmall", + "-gff", + ].join(' ').trim() + + publishDir = [ + path: { "${params.outdir}/repeatmasker" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals("versions.yml") ? null : filename }, + enabled: params.repeatmasker_save_outputs + ] + } +} + +process { // SUBWORKFLOW: PREPROCESS_RNASEQ + if(!params.skip_fastqc) { + withName: '.*:PREPROCESS_RNASEQ:FASTQ_FASTQC_UMITOOLS_FASTP:FASTQC_RAW' { + ext.args = '--quiet' + } + + withName: '.*:PREPROCESS_RNASEQ:FASTQ_FASTQC_UMITOOLS_FASTP:FASTQC_TRIM' { + ext.args = '--quiet' + publishDir = [ + path: { "${params.outdir}/fastp/fastqc" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + ] + } + } + + if(!params.skip_fastp) { + withName: '.*:PREPROCESS_RNASEQ:FASTQ_FASTQC_UMITOOLS_FASTP:FASTP' { + ext.args = params.extra_fastp_args ?: '' + publishDir = [ + [ + path: { "${params.outdir}/fastp/html" }, + mode: params.publish_dir_mode, + pattern: "*.{html}" + ], + [ + path: { "${params.outdir}/fastp/json" }, + mode: params.publish_dir_mode, + pattern: "*.{json}" + ], + [ + path: { "${params.outdir}/fastp/log" }, + mode: params.publish_dir_mode, + pattern: "*.log" + ], + [ + path: { "${params.outdir}/fastp" }, + mode: params.publish_dir_mode, + pattern: "*.fastq.gz", + enabled: params.save_trimmed + ] + ] + } + } + + if (params.remove_ribo_rna) { + withName: '.*:PREPROCESS_RNASEQ:SORTMERNA_INDEX' { + ext.args = '--index 1' + } + + withName: '.*:PREPROCESS_RNASEQ:SORTMERNA_READS' { + ext.args = '--index 0 --num_alignments 1 -v' + publishDir = [ + [ + path: { "${params.outdir}/sortmerna" }, + mode: params.publish_dir_mode, + pattern: "*.log" + ], + [ + path: { "${params.outdir}/sortmerna" }, + mode: params.publish_dir_mode, + pattern: "*.fastq.gz", + enabled: params.save_non_ribo_reads + ] + ] + } + } +} + +process { // SUBWORKFLOW: ALIGN_RNASEQ + withName: '.*:ALIGN_RNASEQ:STAR_ALIGN' { + ext.args = [ + "--outSAMstrandField intronMotif", + "--outSAMtype BAM SortedByCoordinate", + "--readFilesCommand gunzip -c", + "--alignIntronMax ${params.star_max_intron_length}", + params.star_align_extra_args ? params.star_align_extra_args.split("\\s(?=--)") : '' + ].flatten().unique(false).join(' ').trim() + ext.prefix = { "${meta.id}" } + publishDir = [ + path: { "${params.outdir}/star/alignment" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + enabled: params.star_save_outputs + ] + } + + withName: '.*:ALIGN_RNASEQ:SAMTOOLS_CAT' { + publishDir = [ + path: { "${params.outdir}/star/cat_bam" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + enabled: params.save_cat_bam + ] + } +} + +process { // SUBWORKFLOW: FASTA_BRAKER3 + withName: '.*:FASTA_BRAKER3:BRAKER3' { + ext.args = [ + "--gff3", + params.braker_extra_args ? params.braker_extra_args.split("\\s(?=--)") : '' + ].flatten().unique(false).join(' ').trim() + ext.prefix = { "${meta.id}" } + publishDir = [ + path: { "${params.outdir}/etc/braker/" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + enabled: params.braker_save_outputs + ] + } +} + +process { // SUBWORKFLOW: FASTA_LIFTOFF + withName: '.*:FASTA_LIFTOFF:LIFTOFF' { + ext.args = [ + '-exclude_partial', + '-copies', + '-polish', + "-a $params.liftoff_coverage", + "-s $params.liftoff_identity" + ].join(' ').trim() + } + + withName: '.*:FASTA_LIFTOFF:GFFREAD_BEFORE_LIFTOFF' { + ext.args = '--no-pseudo --keep-genes' + } + + withName: '.*:FASTA_LIFTOFF:MERGE_LIFTOFF_ANNOTATIONS' { + ext.prefix = { "${meta.id}.merged.liftoffs" } + } + + withName: '.*:FASTA_LIFTOFF:AGAT_SPFILTERFEATUREFROMKILLLIST' { + ext.prefix = { "${meta.id}.invalid.orf.purged" } + } + + withName: '.*:FASTA_LIFTOFF:GFFREAD_AFTER_LIFTOFF' { + ext.prefix = { "${meta.id}.liftoff" } + ext.args = '--keep-genes' + } + + withName: '.*:FASTA_LIFTOFF:GFF_TSEBRA_SPFILTERFEATUREFROMKILLLIST:AGAT_CONVERTSPGFF2GTF' { + ext.args = '--gtf_version relax' + } + + withName: '.*:FASTA_LIFTOFF:GFF_TSEBRA_SPFILTERFEATUREFROMKILLLIST:KILL_TSEBRA_ISOFORMS' { + ext.prefix = { "${meta.id}.liftoff.1form" } + } +} + +process { // SUBWORKFLOW: PURGE_BRAKER_MODELS + + withName: '.*:PURGE_BRAKER_MODELS:GFF_TSEBRA_SPFILTERFEATUREFROMKILLLIST:AGAT_CONVERTSPGFF2GTF' { + ext.args = '--gtf_version relax' + } + + withName: '.*:PURGE_BRAKER_MODELS:GFF_TSEBRA_SPFILTERFEATUREFROMKILLLIST:KILL_TSEBRA_ISOFORMS' { + ext.prefix = { "${meta.id}.1form" } + } +} + +process { // SUBWORKFLOW: GFF_MERGE_CLEANUP + withName: '.*:GFF_MERGE_CLEANUP:AGAT_SPMERGEANNOTATIONS' { + ext.prefix = { "${meta.id}.liftoff.braker" } + } - withName: FASTQC { - ext.args = '--quiet' + withName: '.*:GFF_MERGE_CLEANUP:GT_GFF3' { + ext.args = '-tidy -retainids -sort' } +} + +process { // SUBWORKFLOW: GFF_EGGNOGMAPPER + withName: '.*:GFF_EGGNOGMAPPER:GFF2FASTA_FOR_EGGNOGMAPPER' { + ext.args = '-y' + } + + withName: '.*:GFF_EGGNOGMAPPER:EGGNOGMAPPER' { + ext.args = [ + "--evalue $params.eggnogmapper_evalue", + "--pident $params.eggnogmapper_pident", + params.eggnogmapper_tax_scope ? "--tax_scope $params.eggnogmapper_tax_scope" : '', + '--mp_start_method fork', + "--itype proteins", + '--go_evidence all' + ].join(' ').trim() + + publishDir = [ + path: { "${params.outdir}/annotations/$meta.id" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + ] + } +} + +process { // SUBWORKFLOW: PURGE_NOHIT_MODELS + withName: '.*:PURGE_NOHIT_MODELS:AGAT_SPFILTERFEATUREFROMKILLLIST' { + ext.prefix = { "${meta.id}.nohits.purged" } + } +} + +process { // SUBWORKFLOW: GFF_STORE + withName: '.*:GFF_STORE:FINAL_GFF_CHECK' { + ext.args = '-tidy -retainids -sort' + + publishDir = [ + path: { "${params.outdir}/annotations/$meta.id" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + ] + } + + withName: '.*:GFF_STORE:EXTRACT_PROTEINS' { + ext.args = '-y' + ext.prefix = { "${meta.id}.pep" } + + publishDir = [ + path: { "${params.outdir}/annotations/$meta.id" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + ] + } +} + +process { // SUBWORKFLOW: FASTA_ORTHOFINDER + withName: '.*:FASTA_ORTHOFINDER:FASTA_GUNZIP:GUNZIP' { + ext.prefix = { "${meta.id}.pep" } + } + + withName: '.*:FASTA_ORTHOFINDER:ORTHOFINDER' { + publishDir = [ + path: { "${params.outdir}/orthofinder" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + ] + } +} - withName: 'MULTIQC' { - ext.args = { params.multiqc_title ? "--title \"$params.multiqc_title\"" : '' } +process { // SUBWORKFLOW: FASTA_GXF_BUSCO_PLOT + withName: '.*:FASTA_GXF_BUSCO_PLOT:BUSCO_ASSEMBLY' { + ext.args = '--metaeuk' publishDir = [ - path: { "${params.outdir}/multiqc" }, + path: { "${params.outdir}/busco/fasta" }, mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + pattern: 'short_summary.*.txt', + saveAs: { filename -> "short_summary.specific.${meta.id}.${lineage}.txt" } ] } + withName: '.*:FASTA_GXF_BUSCO_PLOT:PLOT_ASSEMBLY' { + ext.prefix = 'busco_figure' + publishDir = [ + path: { "${params.outdir}/busco/fasta" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals("versions.yml") ? null : filename } + ] + } + + withName: '.*:FASTA_GXF_BUSCO_PLOT:EXTRACT_PROTEINS' { + ext.args = '-y' + } + + withName: '.*:FASTA_GXF_BUSCO_PLOT:BUSCO_ANNOTATION' { + ext.args = '--metaeuk' + publishDir = [ + path: { "${params.outdir}/busco/gff" }, + mode: params.publish_dir_mode, + pattern: 'short_summary.*.txt', + saveAs: { filename -> "short_summary.specific.${meta.id}.${lineage}.txt" } + ] + } + + withName: '.*:FASTA_GXF_BUSCO_PLOT:PLOT_ANNOTATION' { + ext.prefix = 'busco_figure' + publishDir = [ + path: { "${params.outdir}/busco/gff" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals("versions.yml") ? null : filename } + ] + } +} + +process { // SUBWORKFLOW: GXF_FASTA_AGAT_SPADDINTRONS_SPEXTRACTSEQUENCES + withName: '.*:GXF_FASTA_AGAT_SPADDINTRONS_SPEXTRACTSEQUENCES:AGAT_SPEXTRACTSEQUENCES' { + ext.args = '-t intron' + } +} + +process { // Universal + withName: AGAT_SPFILTERFEATUREFROMKILLLIST { + ext.prefix = { "${meta.id}.purged" } + } + + withName: SAVE_MARKED_GFF3 { + publishDir = [ + path: { "${params.outdir}/etc/splicing_marked" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + ] + } + + withName: CUSTOM_DUMPSOFTWAREVERSIONS { + publishDir = [ + path: "$params.outdir/pipeline_info", + pattern: "software_versions.yml", + mode: params.publish_dir_mode, + enabled: true + ] + } } diff --git a/conf/test.config b/conf/test.config index 2c4fabb..d4c9cc0 100644 --- a/conf/test.config +++ b/conf/test.config @@ -5,7 +5,7 @@ Defines input files and everything required to run a fast and simple pipeline test. Use as follows: - nextflow run PlantandFoodResearch/genepal -profile test, --outdir + nextflow run plant-food-research-open/genepal -profile test, --outdir ---------------------------------------------------------------------------------------- */ @@ -14,15 +14,15 @@ params { config_profile_name = 'Test profile' config_profile_description = 'Minimal test dataset to check pipeline function' - // Limit resources so that this can run on GitHub Actions - max_cpus = 2 - max_memory = '6.GB' + // Tested with these minimal resources + max_cpus = 8 + max_memory = '32.GB' max_time = '6.h' // Input data - // TODO nf-core: Specify the paths to your test data on nf-core/test-datasets - // TODO nf-core: Give any required params for the test so that command line flags are not needed - input = params.pipelines_testdata_base_path + 'viralrecon/samplesheet/samplesheet_test_illumina_amplicon.csv' + input = "${projectDir}/tests/minimal/assemblysheet.csv" + protein_evidence = 'https://raw.githubusercontent.com/Gaius-Augustus/BRAKER/f58479fe5bb13a9e51c3ca09cb9e137cab3b8471/example/proteins.fa' - + braker_extra_args = '--gm_max_intergenic 10000 --skipOptimize' // Added for faster test execution! Do not use with actual data! + busco_lineage_datasets = 'eudicots_odb10' } diff --git a/conf/test_full.config b/conf/test_full.config deleted file mode 100644 index 1df9d55..0000000 --- a/conf/test_full.config +++ /dev/null @@ -1,24 +0,0 @@ -/* -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Nextflow config file for running full-size tests -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Defines input files and everything required to run a full size pipeline test. - - Use as follows: - nextflow run PlantandFoodResearch/genepal -profile test_full, --outdir - ----------------------------------------------------------------------------------------- -*/ - -params { - config_profile_name = 'Full test profile' - config_profile_description = 'Full test dataset to check pipeline function' - - // Input data for full size test - // TODO nf-core: Specify the paths to your full test data ( on nf-core/test-datasets or directly in repositories, e.g. SRA) - // TODO nf-core: Give any required params for the test so that command line flags are not needed - input = params.pipelines_testdata_base_path + 'viralrecon/samplesheet/samplesheet_full_illumina_amplicon.csv' - - // Fasta references - fasta = params.pipelines_testdata_base_path + 'viralrecon/genome/NC_045512.2/GCF_009858895.2_ASM985889v3_genomic.200409.fna.gz' -} diff --git a/docs/README.md b/docs/README.md index 5114ee0..b019955 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,8 +1,10 @@ -# PlantandFoodResearch/genepal: Documentation +# plant-food-research-open/genepal: Documentation -The PlantandFoodResearch/genepal documentation is split into the following pages: +The plant-food-research-open/genepal documentation is split into the following pages: - [Usage](usage.md) - An overview of how the pipeline works, how to run it and a description of all of the different command-line flags. +- [Parameters](parameters.md) + - An exhaustive list of pipeline parameters with their descriptions. - [Output](output.md) - An overview of the different results produced by the pipeline and how to interpret them. diff --git a/docs/images/mqc_fastqc_adapter.png b/docs/images/mqc_fastqc_adapter.png deleted file mode 100755 index 361d0e47acfb424dea1f326590d1eb2f6dfa26b5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23458 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 diff --git a/docs/images/mqc_fastqc_quality.png b/docs/images/mqc_fastqc_quality.png deleted file mode 100755 index a4b89bf56ab2ba88cab87841916eb680a816deae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 55769 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�)v~C(0C)c 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 M)78&qol`;+0Fu7JivR!s diff --git a/docs/img/genepal.drawio b/docs/img/genepal.drawio new file mode 100644 index 0000000..38446e4 --- /dev/null +++ b/docs/img/genepal.drawio @@ -0,0 +1,385 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/img/genepal.png b/docs/img/genepal.png new file mode 100644 index 0000000000000000000000000000000000000000..679f214ab340f750ed6a4b3fd8c7710e541665df GIT binary patch literal 334096 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

    $iblrI_)s+ka`Wa*U@#qCO^(V6_P%}l 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

    xksV|DXl#5b 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

    I$FJs;sXa;|IuhV$z2Dfzq2X@vB?%?RLL~> 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�_ls!nm3cHDR8wFBPx2_gj#xaJ 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 RF$({*we&QTR%}1^e*oE@xsCt; literal 0 HcmV?d00001 diff --git a/docs/output.md b/docs/output.md index 0e53212..4e5c251 100644 --- a/docs/output.md +++ b/docs/output.md @@ -1,4 +1,4 @@ -# PlantandFoodResearch/genepal: Output +# plant-food-research-open/genepal: Output ## Introduction diff --git a/docs/parameters.md b/docs/parameters.md new file mode 100644 index 0000000..3199382 --- /dev/null +++ b/docs/parameters.md @@ -0,0 +1,86 @@ +# plant-food-research-open/genepal pipeline parameters + +A NextFlow pipeline for single genome and pan-genome annotation + +## Input/output options + +| Parameter | Description | Type | Default | Required | Hidden | +| ------------------------- | -------------------------------------------------------------------------------------------------------- | --------- | --------- | -------- | ------ | +| `input` | Target assemblies listed in a CSV sheet | `string` | | True | | +| `protein_evidence` | Protein evidence provided as a fasta file or multiple fasta files listed in a plain txt file | `string` | | True | | +| `eggnogmapper_db_dir` | Eggnogmapper database directory | `string` | | | | +| `eggnogmapper_tax_scope` | Eggnogmapper taxonomy scopre. Eukaryota: 2759, Viridiplantae: 33090, Archaea: 2157, Bacteria: 2, root: 1 | `integer` | 1 | | | +| `rna_evidence` | FASTQ/BAM samples listed in a CSV sheet | `string` | | | | +| `liftoff_annotations` | Reference annotations listed in a CSV sheet | `string` | | | | +| `orthofinder_annotations` | Additional annotations for orthology listed in a CSV sheet | `string` | | | | +| `outdir` | The output directory where the results will be saved | `string` | ./results | True | | + +## Repeat annotation options + +| Parameter | Description | Type | Default | Required | Hidden | +| --------------------------- | ------------------------------------------ | --------- | ------------- | -------- | ------ | +| `repeat_annotator` | 'edta' or 'repeatmodeler' | `string` | repeatmodeler | | | +| `save_annotated_te_lib` | Save annotated TE library or not? | `boolean` | | | | +| `edta_is_sensitive` | Use '--sensitive 1' flag with EDTA or not? | `boolean` | | | | +| `repeatmasker_save_outputs` | Save the repeat-masked genome or not? | `boolean` | | | | + +## RNASeq pre-processing options + +| Parameter | Description | Type | Default | Required | Hidden | +| ------------------------ | ------------------------------------------------------------------ | --------- | ----------------------------------------- | -------- | ------ | +| `skip_fastqc` | Skip FASTQC or not? | `boolean` | | | | +| `skip_fastp` | Skip trimming by FASTQP or not? | `boolean` | | | | +| `min_trimmed_reads` | Exclude a sample if its reads after trimming are below this number | `integer` | 10000 | | | +| `extra_fastp_args` | Extra FASTP arguments | `string` | | | | +| `save_trimmed` | Save FASTQ files after trimming or not? | `boolean` | | | | +| `remove_ribo_rna` | Remove Ribosomal RNA or not? | `boolean` | | | | +| `save_non_ribo_reads` | Save FASTQ files after Ribosomal RNA removal or not? | `boolean` | | | | +| `ribo_database_manifest` | Ribosomal RNA fastas listed in a text sheet | `string` | ${projectDir}/assets/rrna-db-defaults.txt | | | + +## RNAseq alignment options + +| Parameter | Description | Type | Default | Required | Hidden | +| ------------------------ | ------------------------------------------------- | --------- | ------- | -------- | ------ | +| `star_max_intron_length` | Maximum intron length for STAR alignment | `integer` | 16000 | | | +| `star_align_extra_args` | EXTRA arguments for STAR | `string` | | | | +| `star_save_outputs` | Save BAM files from STAR or not? | `boolean` | | | | +| `save_cat_bam` | SAVE a concatenated BAM file per assembly or not? | `boolean` | | | | + +## Annotation options + +| Parameter | Description | Type | Default | Required | Hidden | +| ----------------------------- | --------------------------------------------------------------------------------- | --------- | ------- | -------- | ------ | +| `braker_extra_args` | Extra arguments for BRAKER | `string` | | | | +| `braker_save_outputs` | Save BRAKER files | `boolean` | | | | +| `liftoff_coverage` | Liftoff coverage parameter | `number` | 0.9 | | | +| `liftoff_identity` | Liftoff identity parameter | `number` | 0.9 | | | +| `allow_isoforms` | Allow multiple isoforms for gene models | `boolean` | True | | | +| `enforce_full_intron_support` | Require every model to have external evidence for all its introns | `boolean` | True | | | +| `filter_liftoff_by_hints` | Use BRAKER hints to filter Liftoff models | `boolean` | True | | | +| `eggnogmapper_evalue` | Only report alignments below or equal the e-value threshold | `number` | 1e-05 | | | +| `eggnogmapper_pident` | Only report alignments above or equal to the given percentage of identity (0-100) | `integer` | 35 | | | +| `eggnogmapper_purge_nohits` | Purge transcripts which do not have a hit against eggnog | `boolean` | | | | + +## Evaluation options + +| Parameter | Description | Type | Default | Required | Hidden | +| ------------------------ | --------------------------------------------------------------------------- | --------- | --------------- | -------- | ------ | +| `busco_skip` | Skip evaluation by BUSCO | `boolean` | | | | +| `busco_lineage_datasets` | BUSCO lineages as a space-separated list: 'fungi_odb10 microsporidia_odb10' | `string` | eukaryota_odb10 | | | + +## Max job request options + +Set the top limit for requested resources for any single job. + +| Parameter | Description | Type | Default | Required | Hidden | +| ------------ | ------------------------------------------------------------------ | --------- | ------- | -------- | ------ | +| `max_cpus` | Maximum number of CPUs that can be requested for any single job. | `integer` | 12 | | True | +| `max_memory` | Maximum amount of memory that can be requested for any single job. | `string` | 72.GB | | True | +| `max_time` | Maximum amount of time that can be requested for any single job. | `string` | 7.day | | True | + +## Infrastructure options + +| Parameter | Description | Type | Default | Required | Hidden | +| ------------------------------ | ----------- | --------- | ------- | -------- | ------ | +| `validationSkipDuplicateCheck` | | `boolean` | True | | True | +| `validationS3PathCheck` | | `boolean` | True | | True | diff --git a/docs/usage.md b/docs/usage.md index 03d9ed6..7b9653b 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -1,4 +1,4 @@ -# PlantandFoodResearch/genepal: Usage +# plant-food-research-open/genepal: Usage > _Documentation of pipeline parameters is generated automatically from the pipeline schema and can no longer be found in markdown files._ @@ -55,7 +55,7 @@ An [example samplesheet](../assets/samplesheet.csv) has been provided with the p The typical command for running the pipeline is as follows: ```bash -nextflow run PlantandFoodResearch/genepal --input ./samplesheet.csv --outdir ./results --genome GRCh37 -profile docker +nextflow run plant-food-research-open/genepal --input ./samplesheet.csv --outdir ./results --genome GRCh37 -profile docker ``` This will launch the pipeline with the `docker` configuration profile. See below for more information about profiles. @@ -80,7 +80,7 @@ Do not use `-c ` to specify parameters as this will result in errors. Cust The above pipeline run specified with a params file in yaml format: ```bash -nextflow run PlantandFoodResearch/genepal -profile docker -params-file params.yaml +nextflow run plant-food-research-open/genepal -profile docker -params-file params.yaml ``` with `params.yaml` containing: @@ -99,14 +99,14 @@ You can also generate such `YAML`/`JSON` files via [nf-core/launch](https://nf-c When you run the above command, Nextflow automatically pulls the pipeline code from GitHub and stores it as a cached version. When running the pipeline after this, it will always use the cached version if available - even if the pipeline has been updated since. To make sure that you're running the latest version of the pipeline, make sure that you regularly update the cached version of the pipeline: ```bash -nextflow pull PlantandFoodResearch/genepal +nextflow pull plant-food-research-open/genepal ``` ### Reproducibility It is a good idea to specify a pipeline version when running the pipeline on your data. This ensures that a specific version of the pipeline code and software are used when you run your pipeline. If you keep using the same tag, you'll be running the same version of the pipeline, even if there have been changes to the code since. -First, go to the [PlantandFoodResearch/genepal releases page](https://github.com/PlantandFoodResearch/genepal/releases) and find the latest pipeline version - numeric only (eg. `1.3.1`). Then specify this when running the pipeline with `-r` (one hyphen) - eg. `-r 1.3.1`. Of course, you can switch to another version by changing the number after the `-r` flag. +First, go to the [plant-food-research-open/genepal releases page](https://github.com/plant-food-research-open/genepal/releases) and find the latest pipeline version - numeric only (eg. `1.3.1`). Then specify this when running the pipeline with `-r` (one hyphen) - eg. `-r 1.3.1`. Of course, you can switch to another version by changing the number after the `-r` flag. This version number will be logged in reports when you run the pipeline, so that you'll know what you used when you look back in the future. For example, at the bottom of the MultiQC reports. diff --git a/local_genepal b/local_genepal new file mode 100755 index 0000000..6f287b1 --- /dev/null +++ b/local_genepal @@ -0,0 +1,23 @@ +#!/usr/bin/env bash + +NO_FORMAT="\033[0m" +C_RED="\033[38;5;9m" +F_BOLD="\033[1m" + +[[ $1 == '-stub' ]] \ + && stub='-stub' \ + || stub='' + +[[ $1 == '-stub' ]] \ + && echo 'Executing with -stub' \ + || echo -e "${C_RED}${F_BOLD}Executing without -stub${NO_FORMAT}" + +nextflow run \ + main.nf \ + -profile docker,test \ + -resume \ + $stub \ + --max_cpus 8 \ + --max_memory '32.GB' \ + --eggnogmapper_tax_scope 33090 \ + --eggnogmapper_db_dir ../dbs/emapperdb/5.0.2 diff --git a/main.nf b/main.nf index c075551..f20d37d 100644 --- a/main.nf +++ b/main.nf @@ -1,9 +1,9 @@ #!/usr/bin/env nextflow /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - PlantandFoodResearch/genepal + plant-food-research-open/genepal ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Github : https://github.com/PlantandFoodResearch/genepal + Github : https://github.com/plant-food-research-open/genepal ---------------------------------------------------------------------------------------- */ @@ -15,9 +15,9 @@ nextflow.enable.dsl = 2 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ -include { GENEPAL } from './workflows/genepal' -include { PIPELINE_INITIALISATION } from './subworkflows/local/utils_nfcore_genepal_pipeline' -include { PIPELINE_COMPLETION } from './subworkflows/local/utils_nfcore_genepal_pipeline' +include { GENEPAL } from './workflows/genepal' +include { PIPELINE_INITIALISATION } from './subworkflows/local/utils_nfcore_genepal_pipeline' +include { PIPELINE_COMPLETION } from './subworkflows/local/utils_nfcore_genepal_pipeline' /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -28,23 +28,47 @@ include { PIPELINE_COMPLETION } from './subworkflows/local/utils_nfcore_gene // // WORKFLOW: Run main analysis pipeline depending on type of input // -workflow PLANTANDFOODRESEARCH_GENEPAL { +workflow PLANTFOODRESEARCHOPEN_GENEPAL { take: - samplesheet // channel: samplesheet read in from --input + target_assembly + tar_assm_str + is_masked + te_library + braker_annotation + braker_ex_asm_str + rna_fq + rna_bam + rna_bam_by_assembly + sortmerna_fastas + ext_prot_fastas + liftoff_fasta + liftoff_gff + tsebra_config + orthofinder_pep main: - // // WORKFLOW: Run pipeline // - GENEPAL ( - samplesheet + GENEPAL( + target_assembly + tar_assm_str + is_masked + te_library + braker_annotation + braker_ex_asm_str + rna_fq + rna_bam + rna_bam_by_assembly + sortmerna_fastas + ext_prot_fastas + liftoff_fasta + liftoff_gff + tsebra_config + orthofinder_pep ) - emit: - multiqc_report = GENEPAL.out.multiqc_report // channel: /path/to/multiqc_report.html - } /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -72,8 +96,22 @@ workflow { // // WORKFLOW: Run main workflow // - PLANTANDFOODRESEARCH_GENEPAL ( - PIPELINE_INITIALISATION.out.samplesheet + PLANTFOODRESEARCHOPEN_GENEPAL( + PIPELINE_INITIALISATION.out.target_assembly + PIPELINE_INITIALISATION.out.tar_assm_str + PIPELINE_INITIALISATION.out.is_masked + PIPELINE_INITIALISATION.out.te_library + PIPELINE_INITIALISATION.out.braker_annotation + PIPELINE_INITIALISATION.out.braker_ex_asm_str + PIPELINE_INITIALISATION.out.rna_fq + PIPELINE_INITIALISATION.out.rna_bam + PIPELINE_INITIALISATION.out.rna_bam_by_assembly + PIPELINE_INITIALISATION.out.sortmerna_fastas + PIPELINE_INITIALISATION.out.ext_prot_fastas + PIPELINE_INITIALISATION.out.liftoff_fasta + PIPELINE_INITIALISATION.out.liftoff_gff + PIPELINE_INITIALISATION.out.tsebra_config + PIPELINE_INITIALISATION.out.orthofinder_pep ) // @@ -85,8 +123,7 @@ workflow { params.plaintext_email, params.outdir, params.monochrome_logs, - params.hook_url, - PLANTANDFOODRESEARCH_GENEPAL.out.multiqc_report + params.hook_url ) } diff --git a/modules.json b/modules.json index 6f8944f..9eb2bd6 100644 --- a/modules.json +++ b/modules.json @@ -1,24 +1,225 @@ { - "name": "PlantandFoodResearch/genepal", - "homePage": "https://github.com/PlantandFoodResearch/genepal", + "name": "plant-food-research-open/genepal", + "homePage": "https://github.com/plant-food-research-open/genepal", "repos": { + "https://github.com/GallVp/nxf-components.git": { + "modules": { + "gallvp": { + "agat/spaddintrons": { + "branch": "main", + "git_sha": "7bf6fbca23edc94490ffa6709f52b2f71c6fb130", + "installed_by": ["gxf_fasta_agat_spaddintrons_spextractsequences"] + }, + "agat/spextractsequences": { + "branch": "main", + "git_sha": "7bf6fbca23edc94490ffa6709f52b2f71c6fb130", + "installed_by": ["gxf_fasta_agat_spaddintrons_spextractsequences"] + }, + "braker3": { + "branch": "main", + "git_sha": "be636e1e7d50b12ee1f50ed0bb9b21b0fade7cfd", + "installed_by": ["modules"] + }, + "busco/busco": { + "branch": "main", + "git_sha": "ab92c438688c1f4a3753b65914bfd2e6319cebb2", + "installed_by": ["fasta_gxf_busco_plot"] + }, + "busco/generateplot": { + "branch": "main", + "git_sha": "ab92c438688c1f4a3753b65914bfd2e6319cebb2", + "installed_by": ["fasta_gxf_busco_plot"] + }, + "custom/restoregffids": { + "branch": "main", + "git_sha": "490f8ab54c632d84f99edd6f208305ac5e283ab3", + "installed_by": ["fasta_edta_lai"] + }, + "custom/shortenfastaids": { + "branch": "main", + "git_sha": "490f8ab54c632d84f99edd6f208305ac5e283ab3", + "installed_by": ["fasta_edta_lai"] + }, + "edta/edta": { + "branch": "main", + "git_sha": "7bf6fbca23edc94490ffa6709f52b2f71c6fb130", + "installed_by": ["fasta_edta_lai"] + }, + "gffread": { + "branch": "main", + "git_sha": "c04bf39d67027e044a6eaed0b7b0439fd8866fc7", + "installed_by": ["fasta_gxf_busco_plot"] + }, + "ltrretriever/lai": { + "branch": "main", + "git_sha": "490f8ab54c632d84f99edd6f208305ac5e283ab3", + "installed_by": ["fasta_edta_lai"] + }, + "repeatmasker/repeatmasker": { + "branch": "main", + "git_sha": "07c6fda11aff03d2d7fc68224e7fd96866fc6a8f", + "installed_by": ["modules"] + } + } + }, + "subworkflows": { + "gallvp": { + "fasta_edta_lai": { + "branch": "main", + "git_sha": "7bf6fbca23edc94490ffa6709f52b2f71c6fb130", + "installed_by": ["subworkflows"] + }, + "fasta_gxf_busco_plot": { + "branch": "main", + "git_sha": "7bf6fbca23edc94490ffa6709f52b2f71c6fb130", + "installed_by": ["subworkflows"] + }, + "gxf_fasta_agat_spaddintrons_spextractsequences": { + "branch": "main", + "git_sha": "7bf6fbca23edc94490ffa6709f52b2f71c6fb130", + "installed_by": ["subworkflows"] + } + } + } + }, "https://github.com/nf-core/modules.git": { "modules": { "nf-core": { + "agat/convertspgff2gtf": { + "branch": "master", + "git_sha": "0a0b723d114e502207072603479b635dfbc2bf59", + "installed_by": ["modules"] + }, + "agat/convertspgxf2gxf": { + "branch": "master", + "git_sha": "0a0b723d114e502207072603479b635dfbc2bf59", + "installed_by": ["modules"] + }, + "agat/spfilterfeaturefromkilllist": { + "branch": "master", + "git_sha": "d1535889747781d919bc81da2344952f4bfa2be4", + "installed_by": ["modules"] + }, + "agat/spmergeannotations": { + "branch": "master", + "git_sha": "8e30f5d09155b45ddafc2d1357fc5f447f1aaa03", + "installed_by": ["modules"] + }, + "cat/cat": { + "branch": "master", + "git_sha": "5bb8ca085e17549e185e1823495ab8d20727a805", + "installed_by": ["modules"] + }, + "cat/fastq": { + "branch": "master", + "git_sha": "1ceaa8ba4d0fd886dbca0e545815d905b7407de7", + "installed_by": ["modules"] + }, + "custom/dumpsoftwareversions": { + "branch": "master", + "git_sha": "82024cf6325d2ee194e7f056d841ecad2f6856e9", + "installed_by": ["modules"] + }, + "eggnogmapper": { + "branch": "master", + "git_sha": "b34fb117e397e72a070cde8adf21b758670c90f5", + "installed_by": ["modules"] + }, + "fastavalidator": { + "branch": "master", + "git_sha": "90dad5491658049282ceb287a3d7732c1ce39837", + "installed_by": ["modules"] + }, + "fastp": { + "branch": "master", + "git_sha": "1ceaa8ba4d0fd886dbca0e545815d905b7407de7", + "installed_by": ["fastq_fastqc_umitools_fastp"] + }, "fastqc": { "branch": "master", - "git_sha": "285a50500f9e02578d90b3ce6382ea3c30216acd", + "git_sha": "46eca555142d6e597729fcb682adcc791796f514", + "installed_by": ["fastq_fastqc_umitools_fastp", "modules"] + }, + "gffcompare": { + "branch": "master", + "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", + "installed_by": ["modules"] + }, + "gffread": { + "branch": "master", + "git_sha": "6c996d7fbe0816dcbb68ce587ad5f873313682a1", + "installed_by": ["modules"] + }, + "gt/gff3": { + "branch": "master", + "git_sha": "9a8bba5910982ae637dedb8664e3121db77e173f", + "installed_by": ["modules"] + }, + "gunzip": { + "branch": "master", + "git_sha": "4e5f4687318f24ba944a13609d3ea6ebd890737d", + "installed_by": ["modules"], + "patch": "modules/nf-core/gunzip/gunzip.diff" + }, + "liftoff": { + "branch": "master", + "git_sha": "b34fb117e397e72a070cde8adf21b758670c90f5", + "installed_by": ["modules"] + }, + "orthofinder": { + "branch": "master", + "git_sha": "07f10f34d88408af7c71f13227d11f23b7f53b50", "installed_by": ["modules"] }, - "multiqc": { + "repeatmodeler/builddatabase": { "branch": "master", - "git_sha": "b7ebe95761cd389603f9cc0e0dc384c0f663815a", + "git_sha": "1cbb5551b917aa423e414dcd69898d01520a309d", "installed_by": ["modules"] + }, + "repeatmodeler/repeatmodeler": { + "branch": "master", + "git_sha": "84efd2f87d07deb22ee9378f065a9aa5f1434161", + "installed_by": ["modules"] + }, + "samtools/cat": { + "branch": "master", + "git_sha": "04fbbc7c43cebc0b95d5b126f6d9fe4effa33519", + "installed_by": ["modules"] + }, + "sortmerna": { + "branch": "master", + "git_sha": "df05c8db5195867c0bc7b92c1788115b66f0d17d", + "installed_by": ["modules"] + }, + "star/align": { + "branch": "master", + "git_sha": "46eca555142d6e597729fcb682adcc791796f514", + "installed_by": ["modules"] + }, + "star/genomegenerate": { + "branch": "master", + "git_sha": "46eca555142d6e597729fcb682adcc791796f514", + "installed_by": ["modules"] + }, + "tsebra": { + "branch": "master", + "git_sha": "0995f9cd0cc5e4eb60f7870280b75ecdb5ab0db2", + "installed_by": ["modules"] + }, + "umitools/extract": { + "branch": "master", + "git_sha": "b4919e9a2b4d8b71061e601633db4600a3858fa1", + "installed_by": ["fastq_fastqc_umitools_fastp"] } } }, "subworkflows": { "nf-core": { + "fastq_fastqc_umitools_fastp": { + "branch": "master", + "git_sha": "46eca555142d6e597729fcb682adcc791796f514", + "installed_by": ["subworkflows"] + }, "utils_nextflow_pipeline": { "branch": "master", "git_sha": "5caf7640a9ef1d18d765d55339be751bb0969dfa", diff --git a/modules/gallvp/agat/spaddintrons/environment.yml b/modules/gallvp/agat/spaddintrons/environment.yml new file mode 100644 index 0000000..854ee35 --- /dev/null +++ b/modules/gallvp/agat/spaddintrons/environment.yml @@ -0,0 +1,9 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json +name: "agat_spaddintrons" +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - "bioconda::agat=1.4.0" diff --git a/modules/gallvp/agat/spaddintrons/main.nf b/modules/gallvp/agat/spaddintrons/main.nf new file mode 100644 index 0000000..164b3d3 --- /dev/null +++ b/modules/gallvp/agat/spaddintrons/main.nf @@ -0,0 +1,50 @@ +process AGAT_SPADDINTRONS { + tag "$meta.id" + label 'process_single' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/agat:1.4.0--pl5321hdfd78af_0' : + 'biocontainers/agat:1.4.0--pl5321hdfd78af_0' }" + + input: + tuple val(meta), path(gxf) + path config + + output: + tuple val(meta), path("*.gff") , emit: gff + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def config_arg = config ? "-c $config" : '' + if( "$gxf" == "${prefix}.gff" ) error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!" + """ + agat_sp_add_introns.pl \\ + $args \\ + -g $gxf \\ + $config_arg \\ + -o ${prefix}.gff + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + agat: \$(agat_sp_add_introns.pl -h | sed -n 's/.*(AGAT) - Version: \\(.*\\) .*/\\1/p') + END_VERSIONS + """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + if( "$gxf" == "${prefix}.gff" ) error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!" + """ + touch ${prefix}.gff + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + agat: \$(agat_sp_add_introns.pl -h | sed -n 's/.*(AGAT) - Version: \\(.*\\) .*/\\1/p') + END_VERSIONS + """ +} diff --git a/modules/gallvp/agat/spaddintrons/meta.yml b/modules/gallvp/agat/spaddintrons/meta.yml new file mode 100644 index 0000000..c05c924 --- /dev/null +++ b/modules/gallvp/agat/spaddintrons/meta.yml @@ -0,0 +1,55 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/meta-schema.json +name: "agat_spaddintrons" +description: | + The script aims to add intron features to gtf/gff file without intron features. +keywords: + - genomics + - gff + - gtf + - add + - intron + - feature +tools: + - "agat": + description: "Another Gff Analysis Toolkit (AGAT). Suite of tools to handle gene annotations in any GTF/GFF format." + homepage: "https://agat.readthedocs.io/en/latest/" + documentation: "https://agat.readthedocs.io/en/latest/tools/agat_sp_add_introns.html" + tool_dev_url: "https://github.com/NBISweden/AGAT" + doi: "10.5281/zenodo.3552717" + licence: ["GPL v3"] +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1', single_end:false ]` + - gxf: + type: file + description: Input GFF3/GTF file + pattern: "*.{gff,gff3,gtf}" + - config: + type: file + description: | + Input agat config file. By default AGAT takes as input agat_config.yaml file from the working directory if any, otherwise it takes the orignal agat_config.yaml shipped with AGAT. To get the agat_config.yaml locally type: "agat config --expose". The --config option gives you the possibility to use your own AGAT config file (located elsewhere or named differently). + pattern: "*.yaml" + +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1', single_end:false ] + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" + - gff: + type: file + description: Output GFF file. + pattern: "*.gff" + +authors: + - "@GallVp" +maintainers: + - "@GallVp" diff --git a/modules/gallvp/agat/spaddintrons/tests/main.nf.test b/modules/gallvp/agat/spaddintrons/tests/main.nf.test new file mode 100644 index 0000000..6c4bd03 --- /dev/null +++ b/modules/gallvp/agat/spaddintrons/tests/main.nf.test @@ -0,0 +1,61 @@ +nextflow_process { + + name "Test Process AGAT_SPADDINTRONS" + script "../main.nf" + process "AGAT_SPADDINTRONS" + + tag "modules" + tag "modules_gallvp" + tag "agat" + tag "agat/spaddintrons" + + test("homo_sapiens - genome - gtf") { + + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr1/genome.gtf', checkIfExists: true) + ] + input[1] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("homo_sapiens - genome - gtf - stub") { + + options '-stub' + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr1/genome.gtf', checkIfExists: true) + ] + input[1] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + +} diff --git a/modules/gallvp/agat/spaddintrons/tests/main.nf.test.snap b/modules/gallvp/agat/spaddintrons/tests/main.nf.test.snap new file mode 100644 index 0000000..6947711 --- /dev/null +++ b/modules/gallvp/agat/spaddintrons/tests/main.nf.test.snap @@ -0,0 +1,72 @@ +{ + "homo_sapiens - genome - gtf - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.gff:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + "versions.yml:md5,480dfe983a8b4469c1dff8b7a08d855d" + ], + "gff": [ + [ + { + "id": "test", + "single_end": false + }, + "test.gff:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,480dfe983a8b4469c1dff8b7a08d855d" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-24T16:22:13.888389" + }, + "homo_sapiens - genome - gtf": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.gff:md5,a798830c6ad0a27b1564b98e1a1fc3aa" + ] + ], + "1": [ + "versions.yml:md5,480dfe983a8b4469c1dff8b7a08d855d" + ], + "gff": [ + [ + { + "id": "test", + "single_end": false + }, + "test.gff:md5,a798830c6ad0a27b1564b98e1a1fc3aa" + ] + ], + "versions": [ + "versions.yml:md5,480dfe983a8b4469c1dff8b7a08d855d" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-24T15:21:51.693488" + } +} \ No newline at end of file diff --git a/modules/gallvp/agat/spextractsequences/environment.yml b/modules/gallvp/agat/spextractsequences/environment.yml new file mode 100644 index 0000000..be40401 --- /dev/null +++ b/modules/gallvp/agat/spextractsequences/environment.yml @@ -0,0 +1,9 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json +name: "agat_spextractsequences" +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bioconda::agat=1.4.0 diff --git a/modules/gallvp/agat/spextractsequences/main.nf b/modules/gallvp/agat/spextractsequences/main.nf new file mode 100644 index 0000000..ccf4b4d --- /dev/null +++ b/modules/gallvp/agat/spextractsequences/main.nf @@ -0,0 +1,52 @@ +process AGAT_SPEXTRACTSEQUENCES { + tag "$meta.id" + label 'process_single' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/agat:1.4.0--pl5321hdfd78af_0' : + 'biocontainers/agat:1.4.0--pl5321hdfd78af_0' }" + + input: + tuple val(meta), path(gxf) + path fasta + path config + + output: + tuple val(meta), path("*.fasta") , emit: fasta + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def config_arg = config ? "-c $config" : '' + if( "$fasta" == "${prefix}.fasta" ) error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!" + """ + agat_sp_extract_sequences.pl \\ + $args \\ + -g $gxf \\ + -f $fasta \\ + $config_arg \\ + -o ${prefix}.fasta + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + agat: \$(agat_sp_extract_sequences.pl -h | sed -n 's/.*(AGAT) - Version: \\(.*\\) .*/\\1/p') + END_VERSIONS + """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + if( "$fasta" == "${prefix}.fasta" ) error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!" + """ + touch ${prefix}.fasta + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + agat: \$(agat_sp_extract_sequences.pl -h | sed -n 's/.*(AGAT) - Version: \\(.*\\) .*/\\1/p') + END_VERSIONS + """ +} diff --git a/modules/gallvp/agat/spextractsequences/meta.yml b/modules/gallvp/agat/spextractsequences/meta.yml new file mode 100644 index 0000000..611af62 --- /dev/null +++ b/modules/gallvp/agat/spextractsequences/meta.yml @@ -0,0 +1,60 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/meta-schema.json +name: "agat_spextractsequences" +description: | + This script extracts sequences in fasta format according to features described + in a gff file. +keywords: + - genomics + - gff + - extract + - fasta + - sequence + - feature +tools: + - "agat": + description: "Another Gff Analysis Toolkit (AGAT). Suite of tools to handle gene annotations in any GTF/GFF format." + homepage: "https://agat.readthedocs.io/en/latest/" + documentation: "https://agat.readthedocs.io/en/latest/tools/agat_sp_extract_sequences.html" + tool_dev_url: "https://github.com/NBISweden/AGAT" + doi: "10.5281/zenodo.3552717" + licence: ["GPL v3"] +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1', single_end:false ]` + - gxf: + type: file + description: Input GFF3/GTF file + pattern: "*.{gff,gff3,gtf}" + - fasta: + type: file + description: Input FASTA file + pattern: "*.{fa,fsa,faa,fasta}" + - config: + type: file + description: | + Input agat config file. By default AGAT takes as input agat_config.yaml file from the working directory if any, otherwise it takes the orignal agat_config.yaml shipped with AGAT. To get the agat_config.yaml locally type: "agat config --expose". The --config option gives you the possibility to use your own AGAT config file (located elsewhere or named differently). + pattern: "*.yaml" + +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1', single_end:false ] + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" + - fasta: + type: file + description: Output FASTA file. + pattern: "*.fasta" + +authors: + - "@GallVp" +maintainers: + - "@GallVp" diff --git a/modules/gallvp/agat/spextractsequences/tests/main.nf.test b/modules/gallvp/agat/spextractsequences/tests/main.nf.test new file mode 100644 index 0000000..72b5f99 --- /dev/null +++ b/modules/gallvp/agat/spextractsequences/tests/main.nf.test @@ -0,0 +1,62 @@ +nextflow_process { + + name "Test Process AGAT_SPEXTRACTSEQUENCES" + script "../main.nf" + process "AGAT_SPEXTRACTSEQUENCES" + + tag "modules" + tag "modules_gallvp" + tag "agat" + tag "agat/spextractsequences" + + test("sarscov2 - gff - fasta") { + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.gff3', checkIfExists: true) + ] + input[1] = file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + input[2] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("sarscov2 - gff - fasta - stub") { + + options '-stub' + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.gff3', checkIfExists: true) + ] + input[1] = file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + input[2] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + +} diff --git a/modules/gallvp/agat/spextractsequences/tests/main.nf.test.snap b/modules/gallvp/agat/spextractsequences/tests/main.nf.test.snap new file mode 100644 index 0000000..4ee76fe --- /dev/null +++ b/modules/gallvp/agat/spextractsequences/tests/main.nf.test.snap @@ -0,0 +1,72 @@ +{ + "sarscov2 - gff - fasta": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fasta:md5,e4a8c6c1d2b33c92240e9d2ba07aecc2" + ] + ], + "1": [ + "versions.yml:md5,b31a3d3961871a1e453919bc3b45bf2f" + ], + "fasta": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fasta:md5,e4a8c6c1d2b33c92240e9d2ba07aecc2" + ] + ], + "versions": [ + "versions.yml:md5,b31a3d3961871a1e453919bc3b45bf2f" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-21T16:20:58.856035" + }, + "sarscov2 - gff - fasta - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fasta:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + "versions.yml:md5,b31a3d3961871a1e453919bc3b45bf2f" + ], + "fasta": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fasta:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,b31a3d3961871a1e453919bc3b45bf2f" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-21T16:21:04.022292" + } +} \ No newline at end of file diff --git a/modules/gallvp/braker3/main.nf b/modules/gallvp/braker3/main.nf new file mode 100644 index 0000000..c856216 --- /dev/null +++ b/modules/gallvp/braker3/main.nf @@ -0,0 +1,93 @@ +process BRAKER3 { + tag "${meta.id}" + label 'process_high' + + container "docker.io/teambraker/braker3:v3.0.7.5" + + input: + tuple val(meta), path(fasta) + path bam + path rnaseq_sets_dirs + path rnaseq_sets_ids + path proteins + path hintsfile + + output: + tuple val(meta), path("$prefix/braker.gtf") , emit: gtf + tuple val(meta), path("$prefix/braker.codingseq") , emit: cds + tuple val(meta), path("$prefix/braker.aa") , emit: aa + tuple val(meta), path("$prefix/braker.log") , emit: log + tuple val(meta), path("$prefix/hintsfile.gff") , emit: hintsfile , optional: true + tuple val(meta), path("$prefix/braker.gff3") , emit: gff3 , optional: true + tuple val(meta), path("$prefix/what-to-cite.txt") , emit: citations + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + prefix = task.ext.prefix ?: "${meta.id}" + def rna_ids = rnaseq_sets_ids ? "--rnaseq_sets_ids=$rnaseq_sets_ids" : '' + def rna_dirs = rnaseq_sets_dirs ? "--rnaseq_sets_dirs=$rnaseq_sets_dirs" : '' + def bam = bam ? "--bam=$bam" : '' + def proteins = proteins ? "--prot_seq=$proteins" : '' + def hints = hintsfile ? "--hints=$hintsfile" : '' + def new_species = args.contains('--species')? '' : '--species new_species' + """ + cp -r \$AUGUSTUS_CONFIG_PATH \\ + augustus_config + + perl -p -e 's/^(>\\S+).*\$/\$1/' \\ + $fasta \\ + > ${prefix}.name.only.genome.masked.fasta + + braker.pl \\ + --genome ${prefix}.name.only.genome.masked.fasta \\ + $new_species \\ + --workingdir $prefix \\ + --AUGUSTUS_CONFIG_PATH "\$(pwd)/augustus_config" \\ + --threads $task.cpus \\ + $rna_ids \\ + $rna_dirs \\ + $bam \\ + $proteins \\ + $hints \\ + $args + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + braker3: \$(braker.pl --version 2>/dev/null | sed 's/braker.pl version //') + augustus: \$(augustus --version |& sed -n 's/AUGUSTUS (\\(.*\\)) is a gene .*/\\1/p') + genemark-etp: \$(echo "\$(gmetp.pl || echo '')" | sed -n 's/ETP version \\(.*\\)/\\1/p') + prothint: \$(prothint.py --version | sed 's/prothint.py //1') + END_VERSIONS + """ + + stub: + def args = task.ext.args ?: '' + prefix = task.ext.prefix ?: "${meta.id}" + def rna_ids = rnaseq_sets_ids ? "--rnaseq_sets_ids=$rnaseq_sets_ids" : '' + def hints = hintsfile ? "--hints=$hintsfile" : '' + def touch_hints = (rna_ids || bam || proteins || hints) ? "touch $prefix/hintsfile.gff" : '' + def touch_gff = args.contains('--gff3') ? "touch $prefix/braker.gff3" : '' + """ + mkdir "$prefix" + + touch "$prefix/braker.gtf" + touch "$prefix/braker.codingseq" + touch "$prefix/braker.aa" + $touch_hints + touch "$prefix/braker.log" + touch "$prefix/what-to-cite.txt" + $touch_gff + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + braker3: \$(braker.pl --version 2>/dev/null | sed 's/braker.pl version //') + augustus: \$(augustus --version |& sed -n 's/AUGUSTUS (\\(.*\\)) is a gene .*/\\1/p') + genemark-etp: \$(echo "\$(gmetp.pl || echo '')" | sed -n 's/ETP version \\(.*\\)/\\1/p') + prothint: \$(prothint.py --version | sed 's/prothint.py //1') + END_VERSIONS + """ +} diff --git a/modules/gallvp/braker3/meta.yml b/modules/gallvp/braker3/meta.yml new file mode 100644 index 0000000..bfb8211 --- /dev/null +++ b/modules/gallvp/braker3/meta.yml @@ -0,0 +1,87 @@ +name: braker3 +description: | + Gene prediction in novel genomes using RNA-seq and protein homology information +keywords: + - genome + - annotation + - braker + - gff + - gtf +tools: + - braker3: + description: "BRAKER3 is a pipeline for fully automated prediction of + protein coding gene structures using protein and RNA-seq and protein homology + information" + homepage: https://github.com/Gaius-Augustus/BRAKER + documentation: https://github.com/Gaius-Augustus/BRAKER + tool_dev_url: https://github.com/Gaius-Augustus/BRAKER + doi: "10.13140/RG.2.2.20047.36004" + licence: ["Artistic-1.0"] + +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test' ] + - fasta: + type: file + description: Genome assembly fasta + pattern: "*.{fasta,fa,fas,faa,fna}" + - bam: + type: file + description: BAM file of RNA-seq data to be passed to --bam + pattern: "*.bam" + - rnaseq_sets_dirs: + type: file + description: Directories of RNA-seq data sets to be passed to --rnaseq_sets_dirs + - rnaseq_sets_ids: + type: file + description: IDs of RNA-seq data sets to be passed to --rnaseq_sets_ids + - proteins: + type: file + description: Protein evidence to be passed to --proteins + pattern: "*.{fasta,fa,fas,faa}" + - hintsfile: + type: file + description: Hintsfile to be passed to --hintsfile + pattern: "*.{gff, gtf, gff3}" +output: + - gtf: + type: file + description: Gene transfer format file as output by BRAKER3 + pattern: "*.{gtf}" + - cds: + type: file + description: Coding sequence file as output by BRAKER3 + pattern: "*.{codingseq}" + - aa: + type: file + description: Protein sequence file as output by BRAKER3 + pattern: "*.{aa}" + - log: + type: file + description: BRAKER3 log file + pattern: "*.log" + - hintsfile: + type: file + description: Hints file as output by BRAKER3 + pattern: "*hintsfile.{gff}" + - gff3: + type: file + description: GFF3 file as output by BRAKER3 + pattern: "*.{gff3}" + - citations: + type: file + description: BRAKER3 citations + pattern: "what-to-cite.txt" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" + +authors: + - "@kherronism" + - "@GallVp" +maintainers: + - "@GallVp" diff --git a/modules/gallvp/braker3/tests/main.nf.test b/modules/gallvp/braker3/tests/main.nf.test new file mode 100644 index 0000000..6302ea2 --- /dev/null +++ b/modules/gallvp/braker3/tests/main.nf.test @@ -0,0 +1,77 @@ +nextflow_process { + + name "Test Process BRAKER3" + script "../main.nf" + config "./nextflow.config" + process "BRAKER3" + + tag "modules" + tag "modules_gallvp" + tag "braker3" + + test("braker3 - test - 4") { + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file('https://raw.githubusercontent.com/Gaius-Augustus/BRAKER/f58479fe5bb13a9e51c3ca09cb9e137cab3b8471/example/genome.fa', checkIfExists: true) + ] + input[1] = file('http://topaz.gatech.edu/GeneMark/Braker/RNAseq.bam', checkIfExists: true) + input[2] = [] + input[3] = [] + input[4] = [] + input[5] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.aa, + process.out.cds, + process.out.citations, + process.out.gff3, + process.out.gtf, + process.out.hintsfile, + process.out.versions, + ).match() }, + { assert file(process.out.log[0][1]).text.contains('BRAKER RUN FINISHED') } + ) + } + + } + + test("sarscov2 - fasta - stub") { + + options '-stub' + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true), + ] + input[1] = [] + input[2] = [] + input[3] = [] + input[4] = [] + input[5] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + +} diff --git a/modules/gallvp/braker3/tests/main.nf.test.snap b/modules/gallvp/braker3/tests/main.nf.test.snap new file mode 100644 index 0000000..e9dc283 --- /dev/null +++ b/modules/gallvp/braker3/tests/main.nf.test.snap @@ -0,0 +1,181 @@ +{ + "sarscov2 - fasta - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "braker.gtf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "braker.codingseq:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "braker.aa:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + [ + { + "id": "test", + "single_end": false + }, + "braker.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "4": [ + + ], + "5": [ + + ], + "6": [ + [ + { + "id": "test", + "single_end": false + }, + "what-to-cite.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "7": [ + "versions.yml:md5,465227c41b8b4aae2dea6ec249676935" + ], + "aa": [ + [ + { + "id": "test", + "single_end": false + }, + "braker.aa:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "cds": [ + [ + { + "id": "test", + "single_end": false + }, + "braker.codingseq:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "citations": [ + [ + { + "id": "test", + "single_end": false + }, + "what-to-cite.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "gff3": [ + + ], + "gtf": [ + [ + { + "id": "test", + "single_end": false + }, + "braker.gtf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "hintsfile": [ + + ], + "log": [ + [ + { + "id": "test", + "single_end": false + }, + "braker.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,465227c41b8b4aae2dea6ec249676935" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-25T16:01:15.128244" + }, + "braker3 - test - 4": { + "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + "braker.aa:md5,56ec6600d2843fe4a7fc9913e6b1448a" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "braker.codingseq:md5,47f7f312e4f5b3854b960a373717a0f7" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "what-to-cite.txt:md5,2ab67eaf09994751a09f5de8de7160a7" + ] + ], + [ + + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "braker.gtf:md5,22a968505188b7aa57c37fa85f570295" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "hintsfile.gff:md5,d42b89e12af7ba66ae25fd977146640a" + ] + ], + [ + "versions.yml:md5,465227c41b8b4aae2dea6ec249676935" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-25T16:03:42.343716" + } +} \ No newline at end of file diff --git a/modules/gallvp/braker3/tests/nextflow.config b/modules/gallvp/braker3/tests/nextflow.config new file mode 100644 index 0000000..bf8441b --- /dev/null +++ b/modules/gallvp/braker3/tests/nextflow.config @@ -0,0 +1,5 @@ +process { + withName: BRAKER3 { + ext.args = '--species=arabidopsis --skipAllTraining' // Not required, but significantly cuts the runtime + } +} diff --git a/modules/gallvp/busco/busco/environment.yml b/modules/gallvp/busco/busco/environment.yml new file mode 100644 index 0000000..06a5d93 --- /dev/null +++ b/modules/gallvp/busco/busco/environment.yml @@ -0,0 +1,7 @@ +name: busco_busco +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bioconda::busco=5.7.1 diff --git a/modules/gallvp/busco/busco/main.nf b/modules/gallvp/busco/busco/main.nf new file mode 100644 index 0000000..f7c1a66 --- /dev/null +++ b/modules/gallvp/busco/busco/main.nf @@ -0,0 +1,107 @@ +process BUSCO_BUSCO { + tag "$meta.id" + label 'process_medium' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/busco:5.7.1--pyhdfd78af_0': + 'biocontainers/busco:5.7.1--pyhdfd78af_0' }" + + input: + tuple val(meta), path(fasta, stageAs:'tmp_input/*') + val mode // Required: One of genome, proteins, or transcriptome + val lineage // Required: lineage to check against, "auto" enables --auto-lineage instead + path busco_lineages_path // Recommended: path to busco lineages - downloads if not set + path config_file // Optional: busco configuration file + + output: + tuple val(meta), path("*-busco.batch_summary.txt") , emit: batch_summary + tuple val(meta), path("short_summary.*.txt") , emit: short_summaries_txt , optional: true + tuple val(meta), path("short_summary.*.json") , emit: short_summaries_json , optional: true + tuple val(meta), path("*-busco/*/run_*/full_table.tsv") , emit: full_table , optional: true + tuple val(meta), path("*-busco/*/run_*/missing_busco_list.tsv") , emit: missing_busco_list , optional: true + tuple val(meta), path("*-busco/*/run_*/single_copy_proteins.faa") , emit: single_copy_proteins , optional: true + tuple val(meta), path("*-busco/*/run_*/busco_sequences") , emit: seq_dir + tuple val(meta), path("*-busco/*/translated_proteins") , emit: translated_dir , optional: true + tuple val(meta), path("*-busco") , emit: busco_dir + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + if ( mode !in [ 'genome', 'proteins', 'transcriptome' ] ) { + error "Mode must be one of 'genome', 'proteins', or 'transcriptome'." + } + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}-${lineage}" + def busco_config = config_file ? "--config $config_file" : '' + def busco_lineage = lineage.equals('auto') ? '--auto-lineage' : "--lineage_dataset ${lineage}" + def busco_lineage_dir = busco_lineages_path ? "--download_path ${busco_lineages_path}" : '' + """ + # Nextflow changes the container --entrypoint to /bin/bash (container default entrypoint: /usr/local/env-execute) + # Check for container variable initialisation script and source it. + if [ -f "/usr/local/env-activate.sh" ]; then + set +u # Otherwise, errors out because of various unbound variables + . "/usr/local/env-activate.sh" + set -u + fi + + # If the augustus config directory is not writable, then copy to writeable area + if [ ! -w "\${AUGUSTUS_CONFIG_PATH}" ]; then + # Create writable tmp directory for augustus + AUG_CONF_DIR=\$( mktemp -d -p \$PWD ) + cp -r \$AUGUSTUS_CONFIG_PATH/* \$AUG_CONF_DIR + export AUGUSTUS_CONFIG_PATH=\$AUG_CONF_DIR + echo "New AUGUSTUS_CONFIG_PATH=\${AUGUSTUS_CONFIG_PATH}" + fi + + # Ensure the input is uncompressed + INPUT_SEQS=input_seqs + mkdir "\$INPUT_SEQS" + cd "\$INPUT_SEQS" + for FASTA in ../tmp_input/*; do + if [ "\${FASTA##*.}" == 'gz' ]; then + gzip -cdf "\$FASTA" > \$( basename "\$FASTA" .gz ) + else + ln -s "\$FASTA" . + fi + done + cd .. + + busco \\ + --cpu $task.cpus \\ + --in "\$INPUT_SEQS" \\ + --out ${prefix}-busco \\ + --mode $mode \\ + $busco_lineage \\ + $busco_lineage_dir \\ + $busco_config \\ + $args + + # clean up + rm -rf "\$INPUT_SEQS" + + # Move files to avoid staging/publishing issues + mv ${prefix}-busco/batch_summary.txt ${prefix}-busco.batch_summary.txt + mv ${prefix}-busco/*/short_summary.*.{json,txt} . || echo "Short summaries were not available: No genes were found." + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + busco: \$( busco --version 2>&1 | sed 's/^BUSCO //' ) + END_VERSIONS + """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}-${lineage}" + def fasta_name = files(fasta).first().name - '.gz' + """ + touch ${prefix}-busco.batch_summary.txt + mkdir -p ${prefix}-busco/$fasta_name/run_${lineage}/busco_sequences + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + busco: \$( busco --version 2>&1 | sed 's/^BUSCO //' ) + END_VERSIONS + """ +} diff --git a/modules/gallvp/busco/busco/meta.yml b/modules/gallvp/busco/busco/meta.yml new file mode 100644 index 0000000..29745d2 --- /dev/null +++ b/modules/gallvp/busco/busco/meta.yml @@ -0,0 +1,98 @@ +name: busco_busco +description: Benchmarking Universal Single Copy Orthologs +keywords: + - quality control + - genome + - transcriptome + - proteome +tools: + - busco: + description: BUSCO provides measures for quantitative assessment of genome assembly, gene set, and transcriptome completeness based on evolutionarily informed expectations of gene content from near-universal single-copy orthologs selected from OrthoDB. + homepage: https://busco.ezlab.org/ + documentation: https://busco.ezlab.org/busco_userguide.html + tool_dev_url: https://gitlab.com/ezlab/busco + doi: "10.1007/978-1-4939-9173-0_14" + licence: ["MIT"] +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - fasta: + type: file + description: Nucleic or amino acid sequence file in FASTA format. + pattern: "*.{fasta,fna,fa,fasta.gz,fna.gz,fa.gz}" + - mode: + type: string + description: The mode to run Busco in. One of genome, proteins, or transcriptome + pattern: "{genome,proteins,transcriptome}" + - lineage: + type: string + description: The BUSCO lineage to use, or "auto" to automatically select lineage + - busco_lineages_path: + type: directory + description: Path to local BUSCO lineages directory. + - config_file: + type: file + description: Path to BUSCO config file. +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - batch_summary: + type: file + description: Summary of all sequence files analyzed + pattern: "*-busco.batch_summary.txt" + - short_summaries_txt: + type: file + description: Short Busco summary in plain text format + pattern: "short_summary.*.txt" + - short_summaries_json: + type: file + description: Short Busco summary in JSON format + pattern: "short_summary.*.json" + - busco_dir: + type: directory + description: BUSCO lineage specific output + pattern: "*-busco" + - full_table: + type: file + description: Full BUSCO results table + pattern: "full_table.tsv" + - missing_busco_list: + type: file + description: List of missing BUSCOs + pattern: "missing_busco_list.tsv" + - single_copy_proteins: + type: file + description: Fasta file of single copy proteins (transcriptome mode) + pattern: "single_copy_proteins.faa" + - seq_dir: + type: directory + description: BUSCO sequence directory + pattern: "busco_sequences" + - translated_dir: + type: directory + description: Six frame translations of each transcript made by the transcriptome mode + pattern: "translated_dir" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@priyanka-surana" + - "@charles-plessy" + - "@mahesh-panchal" + - "@muffato" + - "@jvhagey" + - "@gallvp" +maintainers: + - "@priyanka-surana" + - "@charles-plessy" + - "@mahesh-panchal" + - "@muffato" + - "@jvhagey" + - "@gallvp" diff --git a/modules/gallvp/busco/busco/tests/main.nf.test b/modules/gallvp/busco/busco/tests/main.nf.test new file mode 100644 index 0000000..829bd28 --- /dev/null +++ b/modules/gallvp/busco/busco/tests/main.nf.test @@ -0,0 +1,415 @@ +nextflow_process { + + name "Test Process BUSCO_BUSCO" + script "../main.nf" + process "BUSCO_BUSCO" + + tag "modules" + tag "modules_gallvp" + tag "busco" + tag "busco/busco" + + test("test_busco_genome_single_fasta") { + + config './nextflow.config' + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/prokaryotes/bacteroides_fragilis/genome/genome.fna.gz', checkIfExists: true) + ] + input[1] = 'genome' + input[2] = 'bacteria_odb10' // Launch with 'auto' to use --auto-lineage, and specified lineages // 'auto' removed from test due to memory issues + input[3] = [] // Download busco lineage + input[4] = [] // No config + """ + } + } + + then { + assert process.success + + with(path(process.out.short_summaries_txt[0][1]).text) { + assert contains('BUSCO version') + assert contains('The lineage dataset is') + assert contains('BUSCO was run in mode') + assert contains('Complete BUSCOs') + assert contains('Missing BUSCOs') + assert contains('Dependencies and versions') + } + + with(path(process.out.short_summaries_json[0][1]).text) { + assert contains('one_line_summary') + assert contains('mode') + assert contains('dataset') + } + + assert snapshot( + process.out.batch_summary[0][1], + process.out.full_table[0][1], + process.out.missing_busco_list[0][1], + process.out.versions[0] + ).match() + + with(file(process.out.seq_dir[0][1]).listFiles().collect { it.name }) { + assert contains('single_copy_busco_sequences.tar.gz') + assert contains('multi_copy_busco_sequences.tar.gz') + assert contains('fragmented_busco_sequences.tar.gz') + } + + with(path("${process.out.busco_dir[0][1]}/logs/busco.log").text) { + assert contains('DEBUG:busco.run_BUSCO') + assert contains('Results from dataset') + assert contains('how to cite BUSCO') + } + + assert process.out.single_copy_proteins == [] + assert process.out.translated_dir == [] + } + } + + test("test_busco_genome_multi_fasta") { + + config './nextflow.config' + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/prokaryotes/bacteroides_fragilis/genome/genome.fna.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/prokaryotes/candidatus_portiera_aleyrodidarum/genome/genome.fasta', checkIfExists: true) + ] + ] + input[1] = 'genome' + input[2] = 'bacteria_odb10' + input[3] = [] + input[4] = [] + """ + } + } + + then { + assert process.success + + with(path(process.out.short_summaries_txt[0][1][0]).text) { + assert contains('BUSCO version') + assert contains('The lineage dataset is') + assert contains('BUSCO was run in mode') + assert contains('Complete BUSCOs') + assert contains('Missing BUSCOs') + assert contains('Dependencies and versions') + } + + with(path(process.out.short_summaries_txt[0][1][1]).text) { + assert contains('BUSCO version') + assert contains('The lineage dataset is') + assert contains('BUSCO was run in mode') + assert contains('Complete BUSCOs') + assert contains('Missing BUSCOs') + assert contains('Dependencies and versions') + } + + with(path(process.out.short_summaries_json[0][1][0]).text) { + assert contains('one_line_summary') + assert contains('mode') + assert contains('dataset') + } + + with(path(process.out.short_summaries_json[0][1][1]).text) { + assert contains('one_line_summary') + assert contains('mode') + assert contains('dataset') + } + + assert snapshot( + process.out.batch_summary[0][1], + process.out.full_table[0][1], + process.out.missing_busco_list[0][1], + process.out.versions[0] + ).match() + + with(file(process.out.seq_dir[0][1][0]).listFiles().collect { it.name }) { + assert contains('single_copy_busco_sequences.tar.gz') + assert contains('multi_copy_busco_sequences.tar.gz') + assert contains('fragmented_busco_sequences.tar.gz') + } + + with(file(process.out.seq_dir[0][1][1]).listFiles().collect { it.name }) { + assert contains('single_copy_busco_sequences.tar.gz') + assert contains('multi_copy_busco_sequences.tar.gz') + assert contains('fragmented_busco_sequences.tar.gz') + } + + with(path("${process.out.busco_dir[0][1]}/logs/busco.log").text) { + assert contains('DEBUG:busco.run_BUSCO') + assert contains('Results from dataset') + assert contains('how to cite BUSCO') + } + + assert process.out.single_copy_proteins == [] + assert process.out.translated_dir == [] + } + + } + + test("test_busco_eukaryote_metaeuk") { + + config './nextflow.metaeuk.config' + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ] + input[1] = 'genome' + input[2] = 'eukaryota_odb10' + input[3] = [] + input[4] = [] + """ + } + } + + then { + assert process.success + + with(path(process.out.short_summaries_txt[0][1]).text) { + assert contains('BUSCO version') + assert contains('The lineage dataset is') + assert contains('BUSCO was run in mode') + assert contains('Complete BUSCOs') + assert contains('Missing BUSCOs') + assert contains('Dependencies and versions') + } + + with(path(process.out.short_summaries_json[0][1]).text) { + assert contains('one_line_summary') + assert contains('mode') + assert contains('dataset') + } + + assert snapshot( + process.out.batch_summary[0][1], + process.out.full_table[0][1], + process.out.missing_busco_list[0][1], + process.out.versions[0] + ).match() + + with(file(process.out.seq_dir[0][1]).listFiles().collect { it.name }) { + assert contains('single_copy_busco_sequences.tar.gz') + assert contains('multi_copy_busco_sequences.tar.gz') + assert contains('fragmented_busco_sequences.tar.gz') + } + + with(path("${process.out.busco_dir[0][1]}/logs/busco.log").text) { + assert contains('DEBUG:busco.run_BUSCO') + assert contains('Results from dataset') + assert contains('how to cite BUSCO') + + } + + assert process.out.single_copy_proteins == [] + assert process.out.translated_dir == [] + } + + } + + test("test_busco_eukaryote_augustus") { + + config './nextflow.augustus.config' + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ] + input[1] = 'genome' + input[2] = 'eukaryota_odb10' + input[3] = [] + input[4] = [] + """ + } + } + + then { + assert process.success + + assert snapshot( + process.out.batch_summary[0][1], + process.out.versions[0] + ).match() + + with(path("${process.out.busco_dir[0][1]}/logs/busco.log").text) { + assert contains('DEBUG:busco.run_BUSCO') + assert contains('Augustus did not recognize any genes') + + } + + assert process.out.short_summaries_json == [] + assert process.out.short_summaries_txt == [] + assert process.out.missing_busco_list == [] + assert process.out.full_table == [] + assert process.out.single_copy_proteins == [] + assert process.out.translated_dir == [] + } + + } + + test("test_busco_protein") { + + config './nextflow.config' + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/prokaryotes/candidatus_portiera_aleyrodidarum/genome/proteome.fasta', checkIfExists: true) + ] + input[1] = 'proteins' + input[2] = 'bacteria_odb10' + input[3] = [] + input[4] = [] + """ + } + } + + then { + assert process.success + + with(path(process.out.short_summaries_txt[0][1]).text) { + assert contains('BUSCO version') + assert contains('The lineage dataset is') + assert contains('BUSCO was run in mode') + assert contains('Complete BUSCOs') + assert contains('Missing BUSCOs') + assert contains('Dependencies and versions') + } + + with(path(process.out.short_summaries_json[0][1]).text) { + assert contains('one_line_summary') + assert contains('mode') + assert contains('dataset') + } + + assert snapshot( + process.out.batch_summary[0][1], + process.out.full_table[0][1], + process.out.missing_busco_list[0][1], + process.out.versions[0] + ).match() + + with(file(process.out.seq_dir[0][1]).listFiles().collect { it.name }) { + assert contains('single_copy_busco_sequences.tar.gz') + assert contains('multi_copy_busco_sequences.tar.gz') + assert contains('fragmented_busco_sequences.tar.gz') + } + + with(path("${process.out.busco_dir[0][1]}/logs/busco.log").text) { + assert contains('DEBUG:busco.run_BUSCO') + assert contains('Results from dataset') + assert contains('how to cite BUSCO') + } + + assert process.out.single_copy_proteins == [] + assert process.out.translated_dir == [] + } + + } + + test("test_busco_transcriptome") { + + config './nextflow.config' + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/prokaryotes/bacteroides_fragilis/illumina/fasta/test1.contigs.fa.gz', checkIfExists: true) + ] + input[1] = 'transcriptome' + input[2] = 'bacteria_odb10' + input[3] = [] + input[4] = [] + """ + } + } + + then { + assert process.success + + with(path(process.out.short_summaries_txt[0][1]).text) { + assert contains('BUSCO version') + assert contains('The lineage dataset is') + assert contains('BUSCO was run in mode') + assert contains('Complete BUSCOs') + assert contains('Missing BUSCOs') + assert contains('Dependencies and versions') + } + + with(path(process.out.short_summaries_json[0][1]).text) { + assert contains('one_line_summary') + assert contains('mode') + assert contains('dataset') + } + + assert snapshot( + process.out.batch_summary[0][1], + process.out.full_table[0][1], + process.out.missing_busco_list[0][1], + process.out.translated_dir[0][1], + process.out.single_copy_proteins[0][1], + process.out.versions[0] + ).match() + + with(file(process.out.seq_dir[0][1]).listFiles().collect { it.name }) { + assert contains('single_copy_busco_sequences.tar.gz') + assert contains('multi_copy_busco_sequences.tar.gz') + assert contains('fragmented_busco_sequences.tar.gz') + } + + with(path("${process.out.busco_dir[0][1]}/logs/busco.log").text) { + assert contains('DEBUG:busco.run_BUSCO') + assert contains('Results from dataset') + assert contains('how to cite BUSCO') + } + } + + } + + test("minimal-stub") { + + options '-stub' + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/prokaryotes/bacteroides_fragilis/genome/genome.fna.gz', checkIfExists: true) + ] + input[1] = 'genome' + input[2] = 'bacteria_odb10' + input[3] = [] + input[4] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + +} diff --git a/modules/gallvp/busco/busco/tests/main.nf.test.snap b/modules/gallvp/busco/busco/tests/main.nf.test.snap new file mode 100644 index 0000000..1b6411b --- /dev/null +++ b/modules/gallvp/busco/busco/tests/main.nf.test.snap @@ -0,0 +1,230 @@ +{ + "minimal-stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test-bacteria_odb10-busco.batch_summary.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + + ], + "2": [ + + ], + "3": [ + + ], + "4": [ + + ], + "5": [ + + ], + "6": [ + [ + { + "id": "test" + }, + [ + + ] + ] + ], + "7": [ + + ], + "8": [ + [ + { + "id": "test" + }, + [ + [ + [ + [ + + ] + ] + ] + ] + ] + ], + "9": [ + "versions.yml:md5,3fc94714b95c2dc15399a4229d9dd1d9" + ], + "batch_summary": [ + [ + { + "id": "test" + }, + "test-bacteria_odb10-busco.batch_summary.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "busco_dir": [ + [ + { + "id": "test" + }, + [ + [ + [ + [ + + ] + ] + ] + ] + ] + ], + "full_table": [ + + ], + "missing_busco_list": [ + + ], + "seq_dir": [ + [ + { + "id": "test" + }, + [ + + ] + ] + ], + "short_summaries_json": [ + + ], + "short_summaries_txt": [ + + ], + "single_copy_proteins": [ + + ], + "translated_dir": [ + + ], + "versions": [ + "versions.yml:md5,3fc94714b95c2dc15399a4229d9dd1d9" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-05-03T13:28:04.451297" + }, + "test_busco_eukaryote_augustus": { + "content": [ + "test-eukaryota_odb10-busco.batch_summary.txt:md5,3ea3bdc423a461dae514d816bdc61c89", + "versions.yml:md5,3fc94714b95c2dc15399a4229d9dd1d9" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-05-03T13:26:36.974986" + }, + "test_busco_genome_single_fasta": { + "content": [ + "test-bacteria_odb10-busco.batch_summary.txt:md5,21b3fb771cf36be917cc451540d999be", + "full_table.tsv:md5,638fe7590f442c57361554dae330eca1", + "missing_busco_list.tsv:md5,1530af4fe7673a6d001349537bcd410a", + "versions.yml:md5,3fc94714b95c2dc15399a4229d9dd1d9" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-05-03T13:22:45.07816" + }, + "test_busco_genome_multi_fasta": { + "content": [ + "test-bacteria_odb10-busco.batch_summary.txt:md5,fcd3c208913e8abda3d6742c43fec5fa", + [ + "full_table.tsv:md5,c657edcc7d0de0175869717551df6e83", + "full_table.tsv:md5,638fe7590f442c57361554dae330eca1" + ], + [ + "missing_busco_list.tsv:md5,aceb66e347a353cb7fca8e2a725f9112", + "missing_busco_list.tsv:md5,1530af4fe7673a6d001349537bcd410a" + ], + "versions.yml:md5,3fc94714b95c2dc15399a4229d9dd1d9" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-05-03T13:23:50.255602" + }, + "test_busco_eukaryote_metaeuk": { + "content": [ + "test-eukaryota_odb10-busco.batch_summary.txt:md5,ff6d8277e452a83ce9456bbee666feb6", + "full_table.tsv:md5,92b1b1d5cb5ea0e2093d16f00187e8c7", + "missing_busco_list.tsv:md5,0352e563de290bf804c708323c35a9e3", + "versions.yml:md5,3fc94714b95c2dc15399a4229d9dd1d9" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-05-03T13:25:38.159041" + }, + "test_busco_transcriptome": { + "content": [ + "test-bacteria_odb10-busco.batch_summary.txt:md5,8734b3f379c4c0928e5dd4ea1873dc64", + "full_table.tsv:md5,1b2ce808fdafa744c56b5f781551272d", + "missing_busco_list.tsv:md5,a6931b6470262b997b8b99ea0f1d14a4", + [ + "1024388at2.faa:md5,797d603d262a6595a112e25b73e878b0", + "1054741at2.faa:md5,cd4b928cba6b19b4437746ba507e7195", + "1093223at2.faa:md5,df9549708e5ffcfaee6a74dd70a0e5dc", + "1151822at2.faa:md5,12726afc1cdc40c13392e1596e93df3a", + "143460at2.faa:md5,d887431fd988a5556a523440f02d9594", + "1491686at2.faa:md5,d03362d19979b27306c192f1c74a84e5", + "1504821at2.faa:md5,4f5f6e5c57bac0092c1d85ded73d7e67", + "1574817at2.faa:md5,1153e55998c2929eacad2aed7d08d248", + "1592033at2.faa:md5,bb7a59e5f3a57ba12d10dabf4c77ab57", + "1623045at2.faa:md5,8fe38155feb1802beb97ef7714837bf5", + "1661836at2.faa:md5,6c6d592c2fbb0d7a4e5e1f47a15644f0", + "1674344at2.faa:md5,bb41b44e53565a54cadf0b780532fe08", + "1698718at2.faa:md5,f233860000028eb00329aa85236c71e5", + "1990650at2.faa:md5,34a2d29c5f8b6253159ddb7a43fa1829", + "223233at2.faa:md5,dec6705c7846c989296e73942f953cbc", + "402899at2.faa:md5,acc0f271f9a586d2ce1ee41669b22999", + "505485at2.faa:md5,aa0391f8fa5d9bd19b30d844d5a99845", + "665824at2.faa:md5,47f8ad43b6a6078206feb48c2e552793", + "776861at2.faa:md5,f8b90c13f7c6be828dea3bb920195e3d", + "874197at2.faa:md5,8d22a35a768debe6f376fc695d233a69", + "932854at2.faa:md5,2eff2de1ab83b22f3234a529a44e22bb", + "95696at2.faa:md5,247bfd1aef432f7b5456307768e9149c" + ], + "single_copy_proteins.faa:md5,73e2c5d6a9b0f01f2deea3cc5f21b764", + "versions.yml:md5,3fc94714b95c2dc15399a4229d9dd1d9" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-05-03T13:27:53.992893" + }, + "test_busco_protein": { + "content": [ + "test-bacteria_odb10-busco.batch_summary.txt:md5,f5a782378f9f94a748aa907381fdef91", + "full_table.tsv:md5,812ab6a0496fccab774643cf40c4f2a8", + "missing_busco_list.tsv:md5,aceb66e347a353cb7fca8e2a725f9112", + "versions.yml:md5,3fc94714b95c2dc15399a4229d9dd1d9" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-05-03T13:27:12.724862" + } +} \ No newline at end of file diff --git a/modules/gallvp/busco/busco/tests/nextflow.augustus.config b/modules/gallvp/busco/busco/tests/nextflow.augustus.config new file mode 100644 index 0000000..84daa69 --- /dev/null +++ b/modules/gallvp/busco/busco/tests/nextflow.augustus.config @@ -0,0 +1,5 @@ +process { + withName: 'BUSCO_BUSCO' { + ext.args = '--tar --augustus' + } +} diff --git a/modules/gallvp/busco/busco/tests/nextflow.config b/modules/gallvp/busco/busco/tests/nextflow.config new file mode 100644 index 0000000..1ec3fec --- /dev/null +++ b/modules/gallvp/busco/busco/tests/nextflow.config @@ -0,0 +1,5 @@ +process { + withName: 'BUSCO_BUSCO' { + ext.args = '--tar' + } +} diff --git a/modules/gallvp/busco/busco/tests/nextflow.metaeuk.config b/modules/gallvp/busco/busco/tests/nextflow.metaeuk.config new file mode 100644 index 0000000..c141844 --- /dev/null +++ b/modules/gallvp/busco/busco/tests/nextflow.metaeuk.config @@ -0,0 +1,5 @@ +process { + withName: 'BUSCO_BUSCO' { + ext.args = '--tar --metaeuk' + } +} diff --git a/modules/gallvp/busco/busco/tests/old_test.yml b/modules/gallvp/busco/busco/tests/old_test.yml new file mode 100644 index 0000000..75177f5 --- /dev/null +++ b/modules/gallvp/busco/busco/tests/old_test.yml @@ -0,0 +1,624 @@ +- name: busco test_busco_genome_single_fasta + command: nextflow run ./tests/modules/nf-core/busco -entry test_busco_genome_single_fasta -c ./tests/config/nextflow.config + tags: + - busco + files: + - path: output/busco/short_summary.specific.bacteria_odb10.genome.fna.json + contains: + - "one_line_summary" + - "mode" + - "dataset" + - path: output/busco/short_summary.specific.bacteria_odb10.genome.fna.txt + contains: + - "BUSCO version" + - "The lineage dataset is" + - "BUSCO was run in mode" + - "Complete BUSCOs" + - "Missing BUSCOs" + - "Dependencies and versions" + - path: output/busco/test-bacteria_odb10-busco.batch_summary.txt + md5sum: bc2440f8a68d7fbf931ff911c1c3fdfa + - path: output/busco/test-bacteria_odb10-busco/genome.fna/logs/bbtools_err.log + - path: output/busco/test-bacteria_odb10-busco/genome.fna/logs/bbtools_out.log + md5sum: 9caf1a1434414c78562eb0bbb9c0e53f + - path: output/busco/test-bacteria_odb10-busco/genome.fna/logs/hmmsearch_err.log + - path: output/busco/test-bacteria_odb10-busco/genome.fna/logs/hmmsearch_out.log + contains: + - "# hmmsearch :: search profile(s) against a sequence database" + - "# target sequence database:" + - "Internal pipeline statistics summary:" + - "[ok]" + - path: output/busco/test-bacteria_odb10-busco/genome.fna/logs/prodigal_err.log + md5sum: 538510cfc7483498210f01e53fe035ad + - path: output/busco/test-bacteria_odb10-busco/genome.fna/logs/prodigal_out.log + md5sum: 61050b0706addc9498b2088a2d6efa9a + - path: output/busco/test-bacteria_odb10-busco/genome.fna/prodigal_output/.checkpoint + contains: + - "Tool: prodigal" + - "Completed" + - "jobs" + - path: output/busco/test-bacteria_odb10-busco/genome.fna/prodigal_output/predicted_genes/predicted.faa + md5sum: 836e9a80d33d8b89168f07ddc13ee991 + - path: output/busco/test-bacteria_odb10-busco/genome.fna/prodigal_output/predicted_genes/predicted.fna + md5sum: 20eeb75f86842e6e136f02bca8b73a9f + - path: output/busco/test-bacteria_odb10-busco/genome.fna/prodigal_output/predicted_genes/tmp/prodigal_mode_single_code_11.faa + md5sum: 836e9a80d33d8b89168f07ddc13ee991 + - path: output/busco/test-bacteria_odb10-busco/genome.fna/prodigal_output/predicted_genes/tmp/prodigal_mode_single_code_11.fna + md5sum: 20eeb75f86842e6e136f02bca8b73a9f + - path: output/busco/test-bacteria_odb10-busco/genome.fna/prodigal_output/predicted_genes/tmp/prodigal_mode_single_code_11_err.log + md5sum: 538510cfc7483498210f01e53fe035ad + - path: output/busco/test-bacteria_odb10-busco/genome.fna/prodigal_output/predicted_genes/tmp/prodigal_mode_single_code_11_out.log + md5sum: 61050b0706addc9498b2088a2d6efa9a + - path: output/busco/test-bacteria_odb10-busco/genome.fna/run_bacteria_odb10/.bbtools_output/.checkpoint + contains: + - "Tool: bbtools" + - "Completed" + - "jobs" + - path: output/busco/test-bacteria_odb10-busco/genome.fna/run_bacteria_odb10/busco_sequences/fragmented_busco_sequences.tar.gz + - path: output/busco/test-bacteria_odb10-busco/genome.fna/run_bacteria_odb10/busco_sequences/multi_copy_busco_sequences.tar.gz + - path: output/busco/test-bacteria_odb10-busco/genome.fna/run_bacteria_odb10/busco_sequences/single_copy_busco_sequences.tar.gz + - path: output/busco/test-bacteria_odb10-busco/genome.fna/run_bacteria_odb10/full_table.tsv + md5sum: c56edab1dc1522e993c25ae2b730799f + - path: output/busco/test-bacteria_odb10-busco/genome.fna/run_bacteria_odb10/hmmer_output.tar.gz + - path: output/busco/test-bacteria_odb10-busco/genome.fna/run_bacteria_odb10/missing_busco_list.tsv + md5sum: b533ef30270f27160acce85a22d01bf5 + - path: output/busco/test-bacteria_odb10-busco/genome.fna/run_bacteria_odb10/short_summary.json + contains: + - "one_line_summary" + - "mode" + - "lineage_dataset" + - path: output/busco/test-bacteria_odb10-busco/genome.fna/run_bacteria_odb10/short_summary.txt + contains: + - "# BUSCO version is:" + - "Results:" + - "busco:" + - path: output/busco/test-bacteria_odb10-busco/logs/busco.log + contains: + - "DEBUG:busco.run_BUSCO" + - "Results from dataset" + - "how to cite BUSCO" + - path: output/busco/versions.yml + +- name: busco test_busco_genome_multi_fasta + command: nextflow run ./tests/modules/nf-core/busco -entry test_busco_genome_multi_fasta -c ./tests/config/nextflow.config + tags: + - busco + files: + - path: output/busco/short_summary.specific.bacteria_odb10.genome.fasta.json + contains: + - "one_line_summary" + - "mode" + - "dataset" + - path: output/busco/short_summary.specific.bacteria_odb10.genome.fasta.txt + contains: + - "BUSCO version" + - "The lineage dataset is" + - "BUSCO was run in mode" + - "Complete BUSCOs" + - "Missing BUSCOs" + - "Dependencies and versions" + - path: output/busco/short_summary.specific.bacteria_odb10.genome.fna.json + contains: + - "one_line_summary" + - "mode" + - "dataset" + - path: output/busco/short_summary.specific.bacteria_odb10.genome.fna.txt + contains: + - "BUSCO version" + - "The lineage dataset is" + - "BUSCO was run in mode" + - "Complete BUSCOs" + - "Missing BUSCOs" + - "Dependencies and versions" + - path: output/busco/test-bacteria_odb10-busco.batch_summary.txt + md5sum: 8c64c1a28b086ef2ee444f99cbed5f7d + - path: output/busco/test-bacteria_odb10-busco/genome.fasta/logs/bbtools_err.log + - path: output/busco/test-bacteria_odb10-busco/genome.fasta/logs/bbtools_out.log + md5sum: 8f047bdb33264d22a83920bc2c63f29a + - path: output/busco/test-bacteria_odb10-busco/genome.fasta/logs/hmmsearch_err.log + - path: output/busco/test-bacteria_odb10-busco/genome.fasta/logs/hmmsearch_out.log + contains: + - "# hmmsearch :: search profile(s) against a sequence database" + - "# target sequence database:" + - "Internal pipeline statistics summary:" + - "[ok]" + - path: output/busco/test-bacteria_odb10-busco/genome.fasta/logs/prodigal_err.log + md5sum: c1fdc6977332f53dfe7f632733bb4585 + - path: output/busco/test-bacteria_odb10-busco/genome.fasta/logs/prodigal_out.log + md5sum: 50752acb1c5a20be886bfdfc06635bcb + - path: output/busco/test-bacteria_odb10-busco/genome.fasta/prodigal_output/.checkpoint + contains: + - "Tool: prodigal" + - "Completed" + - "jobs" + - path: output/busco/test-bacteria_odb10-busco/genome.fasta/prodigal_output/predicted_genes/predicted.faa + md5sum: 8166471fc5f08c82fd5643ab42327f9d + - path: output/busco/test-bacteria_odb10-busco/genome.fasta/prodigal_output/predicted_genes/predicted.fna + md5sum: ddc508a18f60e7f3314534df50cdf8ca + - path: output/busco/test-bacteria_odb10-busco/genome.fasta/prodigal_output/predicted_genes/tmp/prodigal_mode_single_code_11.faa + md5sum: 8166471fc5f08c82fd5643ab42327f9d + - path: output/busco/test-bacteria_odb10-busco/genome.fasta/prodigal_output/predicted_genes/tmp/prodigal_mode_single_code_11.fna + md5sum: ddc508a18f60e7f3314534df50cdf8ca + - path: output/busco/test-bacteria_odb10-busco/genome.fasta/prodigal_output/predicted_genes/tmp/prodigal_mode_single_code_11_err.log + md5sum: c1fdc6977332f53dfe7f632733bb4585 + - path: output/busco/test-bacteria_odb10-busco/genome.fasta/prodigal_output/predicted_genes/tmp/prodigal_mode_single_code_11_out.log + md5sum: 50752acb1c5a20be886bfdfc06635bcb + - path: output/busco/test-bacteria_odb10-busco/genome.fasta/prodigal_output/predicted_genes/tmp/prodigal_mode_single_code_4.faa + md5sum: e56fd59c38248dc21ac94355dca98121 + - path: output/busco/test-bacteria_odb10-busco/genome.fasta/prodigal_output/predicted_genes/tmp/prodigal_mode_single_code_4.fna + md5sum: b365f84bf99c68357952e0b98ed7ce42 + - path: output/busco/test-bacteria_odb10-busco/genome.fasta/prodigal_output/predicted_genes/tmp/prodigal_mode_single_code_4_err.log + md5sum: e5f14d7925ba14a0f9850542f3739894 + - path: output/busco/test-bacteria_odb10-busco/genome.fasta/prodigal_output/predicted_genes/tmp/prodigal_mode_single_code_4_out.log + md5sum: d41971bfc1b621d4ffd2633bc47017ea + - path: output/busco/test-bacteria_odb10-busco/genome.fasta/run_bacteria_odb10/.bbtools_output/.checkpoint + contains: + - "Tool: bbtools" + - "Completed" + - "jobs" + - path: output/busco/test-bacteria_odb10-busco/genome.fasta/run_bacteria_odb10/busco_sequences/fragmented_busco_sequences.tar.gz + - path: output/busco/test-bacteria_odb10-busco/genome.fasta/run_bacteria_odb10/busco_sequences/multi_copy_busco_sequences.tar.gz + - path: output/busco/test-bacteria_odb10-busco/genome.fasta/run_bacteria_odb10/busco_sequences/single_copy_busco_sequences.tar.gz + - path: output/busco/test-bacteria_odb10-busco/genome.fasta/run_bacteria_odb10/full_table.tsv + md5sum: c9651b88b10871abc260ee655898e828 + - path: output/busco/test-bacteria_odb10-busco/genome.fasta/run_bacteria_odb10/hmmer_output.tar.gz + - path: output/busco/test-bacteria_odb10-busco/genome.fasta/run_bacteria_odb10/missing_busco_list.tsv + md5sum: 9939309df2da5419de88c32d1435c779 + - path: output/busco/test-bacteria_odb10-busco/genome.fasta/run_bacteria_odb10/short_summary.json + contains: + - "one_line_summary" + - "mode" + - "dataset" + - path: output/busco/test-bacteria_odb10-busco/genome.fasta/run_bacteria_odb10/short_summary.txt + contains: + - "# BUSCO version is:" + - "Results:" + - "busco:" + - path: output/busco/test-bacteria_odb10-busco/genome.fna/logs/bbtools_err.log + - path: output/busco/test-bacteria_odb10-busco/genome.fna/logs/bbtools_out.log + md5sum: 9caf1a1434414c78562eb0bbb9c0e53f + - path: output/busco/test-bacteria_odb10-busco/genome.fna/logs/hmmsearch_err.log + - path: output/busco/test-bacteria_odb10-busco/genome.fna/logs/hmmsearch_out.log + contains: + - "# hmmsearch :: search profile(s) against a sequence database" + - "# target sequence database:" + - "Internal pipeline statistics summary:" + - "[ok]" + - path: output/busco/test-bacteria_odb10-busco/genome.fna/logs/prodigal_err.log + md5sum: 538510cfc7483498210f01e53fe035ad + - path: output/busco/test-bacteria_odb10-busco/genome.fna/logs/prodigal_out.log + md5sum: 61050b0706addc9498b2088a2d6efa9a + - path: output/busco/test-bacteria_odb10-busco/genome.fna/prodigal_output/.checkpoint + contains: + - "Tool: prodigal" + - "Completed" + - "jobs" + - path: output/busco/test-bacteria_odb10-busco/genome.fna/prodigal_output/predicted_genes/predicted.faa + md5sum: 836e9a80d33d8b89168f07ddc13ee991 + - path: output/busco/test-bacteria_odb10-busco/genome.fna/prodigal_output/predicted_genes/predicted.fna + md5sum: 20eeb75f86842e6e136f02bca8b73a9f + - path: output/busco/test-bacteria_odb10-busco/genome.fna/prodigal_output/predicted_genes/tmp/prodigal_mode_single_code_11.faa + md5sum: 836e9a80d33d8b89168f07ddc13ee991 + - path: output/busco/test-bacteria_odb10-busco/genome.fna/prodigal_output/predicted_genes/tmp/prodigal_mode_single_code_11.fna + md5sum: 20eeb75f86842e6e136f02bca8b73a9f + - path: output/busco/test-bacteria_odb10-busco/genome.fna/prodigal_output/predicted_genes/tmp/prodigal_mode_single_code_11_err.log + md5sum: 538510cfc7483498210f01e53fe035ad + - path: output/busco/test-bacteria_odb10-busco/genome.fna/prodigal_output/predicted_genes/tmp/prodigal_mode_single_code_11_out.log + md5sum: 61050b0706addc9498b2088a2d6efa9a + - path: output/busco/test-bacteria_odb10-busco/genome.fna/run_bacteria_odb10/.bbtools_output/.checkpoint + contains: + - "Tool: bbtools" + - "Completed" + - "jobs" + - path: output/busco/test-bacteria_odb10-busco/genome.fna/run_bacteria_odb10/busco_sequences/fragmented_busco_sequences.tar.gz + - path: output/busco/test-bacteria_odb10-busco/genome.fna/run_bacteria_odb10/busco_sequences/multi_copy_busco_sequences.tar.gz + - path: output/busco/test-bacteria_odb10-busco/genome.fna/run_bacteria_odb10/busco_sequences/single_copy_busco_sequences.tar.gz + - path: output/busco/test-bacteria_odb10-busco/genome.fna/run_bacteria_odb10/full_table.tsv + md5sum: c56edab1dc1522e993c25ae2b730799f + - path: output/busco/test-bacteria_odb10-busco/genome.fna/run_bacteria_odb10/hmmer_output.tar.gz + - path: output/busco/test-bacteria_odb10-busco/genome.fna/run_bacteria_odb10/missing_busco_list.tsv + md5sum: b533ef30270f27160acce85a22d01bf5 + - path: output/busco/test-bacteria_odb10-busco/genome.fna/run_bacteria_odb10/short_summary.json + contains: + - "one_line_summary" + - "mode" + - "dataset" + - path: output/busco/test-bacteria_odb10-busco/genome.fna/run_bacteria_odb10/short_summary.txt + contains: + - "# BUSCO version is:" + - "Results:" + - "busco:" + - path: output/busco/test-bacteria_odb10-busco/logs/busco.log + contains: + - "DEBUG:busco.run_BUSCO" + - "Results from dataset" + - "how to cite BUSCO" + - path: output/busco/versions.yml + +- name: busco test_busco_eukaryote_metaeuk + command: nextflow run ./tests/modules/nf-core/busco -entry test_busco_eukaryote_metaeuk -c ./tests/config/nextflow.config + tags: + - busco + files: + - path: output/busco/short_summary.specific.eukaryota_odb10.genome.fasta.json + contains: + - "one_line_summary" + - "mode" + - "dataset" + - path: output/busco/short_summary.specific.eukaryota_odb10.genome.fasta.txt + contains: + - "BUSCO version" + - "The lineage dataset is" + - "BUSCO was run in mode" + - "Complete BUSCOs" + - "Missing BUSCOs" + - "Dependencies and versions" + - path: output/busco/test-eukaryota_odb10-busco.batch_summary.txt + md5sum: ff6d8277e452a83ce9456bbee666feb6 + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/logs/bbtools_err.log + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/logs/bbtools_out.log + md5sum: e63debaa653f18f7405d936050abc093 + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/logs/hmmsearch_err.log + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/logs/hmmsearch_out.log + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/logs/metaeuk_run1_err.log + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/logs/metaeuk_run1_out.log + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/logs/metaeuk_run2_err.log + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/logs/metaeuk_run2_out.log + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/.bbtools_output/.checkpoint + contains: + - "Tool: bbtools" + - "Completed" + - "jobs" + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/busco_sequences/fragmented_busco_sequences.tar.gz + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/busco_sequences/multi_copy_busco_sequences.tar.gz + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/busco_sequences/single_copy_busco_sequences.tar.gz + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/full_table.tsv + md5sum: bd880e90b9e5620a58943a3e0f9ff16b + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/hmmer_output.tar.gz + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/metaeuk_output/.checkpoint + contains: + - "Tool: metaeuk" + - "Completed" + - "jobs" + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/metaeuk_output/combined_pred_proteins.fas + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/metaeuk_output/initial_results/genome.fasta.codon.fas + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/metaeuk_output/initial_results/genome.fasta.fas + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/metaeuk_output/initial_results/genome.fasta.gff + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/metaeuk_output/initial_results/genome.fasta.headersMap.tsv + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/metaeuk_output/refseq_db_rerun.faa + md5sum: d80b8fa4cb5ed0d47d63d6aa93635bc2 + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/metaeuk_output/rerun_results/genome.fasta.codon.fas + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/metaeuk_output/rerun_results/genome.fasta.fas + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/metaeuk_output/rerun_results/genome.fasta.gff + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/metaeuk_output/rerun_results/genome.fasta.headersMap.tsv + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/missing_busco_list.tsv + md5sum: 1e8e79c540fd2e69ba0d2659d9eb2988 + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/short_summary.json + contains: + - "one_line_summary" + - "mode" + - "dataset" + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/short_summary.txt + contains: + - "# BUSCO version is:" + - "Results:" + - "busco:" + - path: output/busco/test-eukaryota_odb10-busco/logs/busco.log + contains: + - "DEBUG:busco.run_BUSCO" + - "Results from dataset" + - "how to cite BUSCO" + - path: output/busco/versions.yml + +- name: busco test_busco_eukaryote_augustus + command: nextflow run ./tests/modules/nf-core/busco -entry test_busco_eukaryote_augustus -c ./tests/config/nextflow.config + tags: + - busco + files: + - path: output/busco/short_summary.specific.eukaryota_odb10.genome.fasta.json + contains: + - "one_line_summary" + - "mode" + - "dataset" + - path: output/busco/short_summary.specific.eukaryota_odb10.genome.fasta.txt + contains: + - "BUSCO version" + - "The lineage dataset is" + - "BUSCO was run in mode" + - "Complete BUSCOs" + - "Missing BUSCOs" + - "Dependencies and versions" + - path: output/busco/test-eukaryota_odb10-busco.batch_summary.txt + md5sum: ff6d8277e452a83ce9456bbee666feb6 + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/logs/bbtools_err.log + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/logs/bbtools_out.log + md5sum: e63debaa653f18f7405d936050abc093 + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/logs/hmmsearch_err.log + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/logs/hmmsearch_out.log + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/logs/metaeuk_run1_err.log + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/logs/metaeuk_run1_out.log + contains: + - "metaeuk" + - "easy-predict" + - "Compute score and coverage" + - "Time for processing:" + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/logs/metaeuk_run2_err.log + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/logs/metaeuk_run2_out.log + contains: + - "metaeuk" + - "easy-predict" + - "Compute score and coverage" + - "Time for processing:" + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/.bbtools_output/.checkpoint + contains: + - "Tool: bbtools" + - "Completed" + - "jobs" + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/busco_sequences/fragmented_busco_sequences.tar.gz + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/busco_sequences/multi_copy_busco_sequences.tar.gz + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/busco_sequences/single_copy_busco_sequences.tar.gz + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/full_table.tsv + md5sum: bd880e90b9e5620a58943a3e0f9ff16b + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/hmmer_output.tar.gz + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/metaeuk_output/.checkpoint + contains: + - "Tool: metaeuk" + - "Completed" + - "jobs" + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/metaeuk_output/combined_pred_proteins.fas + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/metaeuk_output/initial_results/genome.fasta.codon.fas + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/metaeuk_output/initial_results/genome.fasta.fas + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/metaeuk_output/initial_results/genome.fasta.gff + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/metaeuk_output/initial_results/genome.fasta.headersMap.tsv + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/metaeuk_output/refseq_db_rerun.faa + md5sum: d80b8fa4cb5ed0d47d63d6aa93635bc2 + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/metaeuk_output/rerun_results/genome.fasta.codon.fas + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/metaeuk_output/rerun_results/genome.fasta.fas + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/metaeuk_output/rerun_results/genome.fasta.gff + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/metaeuk_output/rerun_results/genome.fasta.headersMap.tsv + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/missing_busco_list.tsv + md5sum: 1e8e79c540fd2e69ba0d2659d9eb2988 + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/short_summary.json + contains: + - "one_line_summary" + - "mode" + - "dataset" + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/short_summary.txt + contains: + - "# BUSCO version is:" + - "Results:" + - "busco:" + - path: output/busco/test-eukaryota_odb10-busco/logs/busco.log + contains: + - "DEBUG:busco.run_BUSCO" + - "Results from dataset" + - "how to cite BUSCO" + - path: output/busco/versions.yml + +- name: busco test_busco_protein + command: nextflow run ./tests/modules/nf-core/busco -entry test_busco_protein -c ./tests/config/nextflow.config + tags: + - busco + files: + - path: output/busco/short_summary.specific.bacteria_odb10.proteome.fasta.json + contains: + - "one_line_summary" + - "mode" + - "dataset" + - path: output/busco/short_summary.specific.bacteria_odb10.proteome.fasta.txt + contains: + - "BUSCO version" + - "The lineage dataset is" + - "BUSCO was run in mode" + - "Complete BUSCOs" + - "Missing BUSCOs" + - "Dependencies and versions" + - path: output/busco/test-bacteria_odb10-busco.batch_summary.txt + md5sum: 7a65e6cbb6c56a2ea4e739ae0aa3297d + - path: output/busco/test-bacteria_odb10-busco/logs/busco.log + contains: + - "DEBUG:busco.run_BUSCO" + - "Results from dataset" + - "how to cite BUSCO" + - path: output/busco/test-bacteria_odb10-busco/proteome.fasta/logs/hmmsearch_err.log + - path: output/busco/test-bacteria_odb10-busco/proteome.fasta/logs/hmmsearch_out.log + contains: + - "# hmmsearch :: search profile(s) against a sequence database" + - "# target sequence database:" + - "Internal pipeline statistics summary:" + - "[ok]" + - path: output/busco/test-bacteria_odb10-busco/proteome.fasta/run_bacteria_odb10/busco_sequences/fragmented_busco_sequences.tar.gz + - path: output/busco/test-bacteria_odb10-busco/proteome.fasta/run_bacteria_odb10/busco_sequences/multi_copy_busco_sequences.tar.gz + - path: output/busco/test-bacteria_odb10-busco/proteome.fasta/run_bacteria_odb10/busco_sequences/single_copy_busco_sequences.tar.gz + - path: output/busco/test-bacteria_odb10-busco/proteome.fasta/run_bacteria_odb10/full_table.tsv + md5sum: 0e34f1011cd83ea1d5d5103ec62b8922 + - path: output/busco/test-bacteria_odb10-busco/proteome.fasta/run_bacteria_odb10/hmmer_output.tar.gz + - path: output/busco/test-bacteria_odb10-busco/proteome.fasta/run_bacteria_odb10/missing_busco_list.tsv + md5sum: 9939309df2da5419de88c32d1435c779 + - path: output/busco/test-bacteria_odb10-busco/proteome.fasta/run_bacteria_odb10/short_summary.json + contains: + - "one_line_summary" + - "mode" + - "dataset" + - path: output/busco/test-bacteria_odb10-busco/proteome.fasta/run_bacteria_odb10/short_summary.txt + contains: + - "# BUSCO version is:" + - "Results:" + - "busco:" + - path: output/busco/versions.yml + +- name: busco test_busco_transcriptome + command: nextflow run ./tests/modules/nf-core/busco -entry test_busco_transcriptome -c ./tests/config/nextflow.config + tags: + - busco + files: + - path: output/busco/short_summary.specific.bacteria_odb10.test1.contigs.fa.json + contains: + - "one_line_summary" + - "mode" + - "dataset" + - path: output/busco/short_summary.specific.bacteria_odb10.test1.contigs.fa.txt + contains: + - "BUSCO version" + - "The lineage dataset is" + - "BUSCO was run in mode" + - "Complete BUSCOs" + - "Missing BUSCOs" + - "Dependencies and versions" + - path: output/busco/test-bacteria_odb10-busco.batch_summary.txt + md5sum: 46118ecf60d1b87d22b96d80f4f03632 + - path: output/busco/test-bacteria_odb10-busco/logs/busco.log + contains: + - "DEBUG:busco.run_BUSCO" + - "Results from dataset" + - "how to cite BUSCO" + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/blast_db/.checkpoint + contains: + - "Tool: makeblastdb" + - "Completed" + - "jobs" + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/blast_db/test1.contigs.fa.ndb + md5sum: 3788c017fe5e6f0f58224e9cdd21822b + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/blast_db/test1.contigs.fa.nhr + md5sum: 8ecd2ce392bb5e25ddbe1d85f879582e + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/blast_db/test1.contigs.fa.nin + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/blast_db/test1.contigs.fa.njs + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/blast_db/test1.contigs.fa.not + md5sum: 0c340e376c7e85d19f82ec1a833e6a6e + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/blast_db/test1.contigs.fa.nsq + md5sum: 532d5c0a7ea00fe95ca3c97cb3be6198 + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/blast_db/test1.contigs.fa.ntf + md5sum: de1250813f0c7affc6d12dac9d0fb6bb + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/blast_db/test1.contigs.fa.nto + md5sum: ff74bd41f9cc9b011c63a32c4f7693bf + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/logs/hmmsearch_err.log + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/logs/hmmsearch_out.log + contains: + - "# hmmsearch :: search profile(s) against a sequence database" + - "# target sequence database:" + - "Internal pipeline statistics summary:" + - "[ok]" + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/logs/makeblastdb_err.log + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/logs/makeblastdb_out.log + contains: + - "Building a new DB" + - "Adding sequences from FASTA" + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/logs/tblastn_err.log + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/logs/tblastn_out.log + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/blast_output/.checkpoint + contains: + - "Tool: tblastn" + - "Completed" + - "jobs" + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/blast_output/coordinates.tsv + md5sum: cc30eed321944af293452bdbcfc24292 + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/blast_output/sequences/k141_101.temp + md5sum: 73e9c65fc83fedc58f57f09b08f08238 + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/blast_output/sequences/k141_119.temp + md5sum: 7fa4cc7955ec0cc36330a221c579b975 + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/blast_output/sequences/k141_129.temp + md5sum: 6f1601c875d019e3f6f1f98ed8e988d4 + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/blast_output/sequences/k141_138.temp + md5sum: 3f8e034686cd240c2330650d791bcae2 + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/blast_output/sequences/k141_143.temp + md5sum: df3dfa8e9ba30ed70cf75b5e7abf2179 + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/blast_output/sequences/k141_172.temp + md5sum: 7d463e0e6cf7169bc9077d8dc776dda1 + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/blast_output/sequences/k141_178.temp + md5sum: 2288edf7fa4f88f51b4cf4d94086f77e + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/blast_output/sequences/k141_188.temp + md5sum: 029906abbad6d87fc57830dd548cac24 + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/blast_output/sequences/k141_195.temp + md5sum: 4937f3b348774a31b1160a00297c29cc + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/blast_output/sequences/k141_210.temp + md5sum: afcb20ba4c466479d6b91c8c62251e1f + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/blast_output/sequences/k141_232.temp + md5sum: 2e1e823ce017345bd998191a39fa9924 + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/blast_output/sequences/k141_268.temp + md5sum: 08c2d82c34ecffbe1c638b410349412e + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/blast_output/sequences/k141_29.temp + md5sum: cd9b63cf93524284781535c888313764 + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/blast_output/sequences/k141_44.temp + md5sum: d1929b742b24ebe379bf4801ca882dca + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/blast_output/sequences/k141_58.temp + md5sum: 69215765b010c05336538cb322c900b3 + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/blast_output/sequences/k141_72.temp + md5sum: 6feaa1cc3b0899a147ea9d466878f3e3 + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/blast_output/sequences/k141_80.temp + md5sum: 13625eae14e860a96ce17cd4e37e9d01 + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/blast_output/sequences/k141_81.temp + md5sum: e14b2484649b0dbc8926815c207b806d + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/blast_output/sequences/k141_93.temp + md5sum: 6902c93691df00e690faea914c71839e + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/blast_output/sequences/k141_97.temp + md5sum: 0a0d9d38a83acbd5ad43c29cdf429988 + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/blast_output/tblastn.tsv + contains: + - "TBLASTN" + - "BLAST processed" + - "queries" + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/busco_sequences/fragmented_busco_sequences.tar.gz + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/busco_sequences/multi_copy_busco_sequences.tar.gz + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/busco_sequences/single_copy_busco_sequences.tar.gz + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/full_table.tsv + md5sum: 24df25199e13c88bd892fc3e7b541ca0 + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/hmmer_output.tar.gz + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/missing_busco_list.tsv + md5sum: e7232e2b8cca4fdfdd9e363b39ebbc81 + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/short_summary.json + contains: + - "one_line_summary" + - "mode" + - "dataset" + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/short_summary.txt + contains: + - "# BUSCO version is:" + - "Results:" + - "busco:" + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/single_copy_proteins.faa + md5sum: e04b9465733577ae6e4bccb7aa01e720 + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/translated_proteins/1024388at2.faa + md5sum: 7333c39a20258f20c7019ea0cd83157c + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/translated_proteins/1054741at2.faa + md5sum: ebb481e77a824685fbe04d8a2f3a0d7d + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/translated_proteins/1093223at2.faa + md5sum: 34621c7d499034e8f8e6b92fd4020a93 + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/translated_proteins/1151822at2.faa + md5sum: aa89ca381c1c70c9c4e1380351ca7c2a + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/translated_proteins/143460at2.faa + md5sum: f2e91d78b8dd3722840378789f29e8c8 + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/translated_proteins/1491686at2.faa + md5sum: 73c25aef5c9cba7f4151804941b146ea + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/translated_proteins/1504821at2.faa + md5sum: cda556018d1f84ebe517e89f6fc107d0 + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/translated_proteins/1574817at2.faa + md5sum: a9096c9fb8b25c78a72871ab0463acdc + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/translated_proteins/1592033at2.faa + md5sum: e463d25ce186c0cebfd749474f3a4c64 + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/translated_proteins/1623045at2.faa + md5sum: f2cfd241590c6d8377286d6135480937 + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/translated_proteins/1661836at2.faa + md5sum: 586569546fb9861502468e3d9ba2775c + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/translated_proteins/1674344at2.faa + md5sum: 24c658bee14ad84b062d81ad96642eb8 + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/translated_proteins/1698718at2.faa + md5sum: 0b8e26ddf5149bbd8805be7af125208d + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/translated_proteins/1990650at2.faa + md5sum: 159320712ee01fb2ccb31a25df44eead + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/translated_proteins/223233at2.faa + md5sum: 812629c0b06ac3d18661c2ca78de0c08 + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/translated_proteins/402899at2.faa + md5sum: f7ff4e1591342d30b77392a2e84b57d9 + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/translated_proteins/505485at2.faa + md5sum: 7b34a24fc49c540d46fcf96ff5129564 + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/translated_proteins/665824at2.faa + md5sum: 4cff2df64f6bcaff8bc19c234c8bcccd + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/translated_proteins/776861at2.faa + md5sum: 613af7a3fea30ea2bece66f603b9284a + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/translated_proteins/874197at2.faa + md5sum: a7cd1b13c9ef91c7ef4e31614166f197 + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/translated_proteins/932854at2.faa + md5sum: fe313ffd5efdb0fed887a04fba352552 + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/translated_proteins/95696at2.faa + md5sum: 4e1f30a2fea4dfbf9bb7fae2700622a0 + - path: output/busco/versions.yml diff --git a/modules/gallvp/busco/busco/tests/tags.yml b/modules/gallvp/busco/busco/tests/tags.yml new file mode 100644 index 0000000..7c4d283 --- /dev/null +++ b/modules/gallvp/busco/busco/tests/tags.yml @@ -0,0 +1,2 @@ +busco/busco: + - "modules/nf-core/busco/busco/**" diff --git a/modules/gallvp/busco/generateplot/environment.yml b/modules/gallvp/busco/generateplot/environment.yml new file mode 100644 index 0000000..1ca5bab --- /dev/null +++ b/modules/gallvp/busco/generateplot/environment.yml @@ -0,0 +1,9 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json +name: "busco_generateplot" +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bioconda::busco=5.7.1 diff --git a/modules/gallvp/busco/generateplot/main.nf b/modules/gallvp/busco/generateplot/main.nf new file mode 100644 index 0000000..6a4b339 --- /dev/null +++ b/modules/gallvp/busco/generateplot/main.nf @@ -0,0 +1,45 @@ +process BUSCO_GENERATEPLOT { + label 'process_single' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/busco:5.7.1--pyhdfd78af_0': + 'biocontainers/busco:5.7.1--pyhdfd78af_0' }" + + input: + path short_summary_txt, stageAs: 'busco/*' + + output: + path '*.png' , emit: png + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: 'busco_figure' + """ + generate_plot.py \\ + $args \\ + -wd busco + + mv ./busco/busco_figure.png ${prefix}.png + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + busco: \$( busco --version 2>&1 | sed 's/^BUSCO //' ) + END_VERSIONS + """ + + stub: + def prefix = task.ext.prefix ?: 'busco_figure' + """ + touch ${prefix}.png + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + busco: \$( busco --version 2>&1 | sed 's/^BUSCO //' ) + END_VERSIONS + """ +} diff --git a/modules/gallvp/busco/generateplot/meta.yml b/modules/gallvp/busco/generateplot/meta.yml new file mode 100644 index 0000000..796f32b --- /dev/null +++ b/modules/gallvp/busco/generateplot/meta.yml @@ -0,0 +1,35 @@ +name: "busco_generateplot" +description: BUSCO plot generation tool +keywords: + - genome + - fasta + - annotation + - busco + - transcriptome + - quality control +tools: + - busco: + description: BUSCO provides measures for quantitative assessment of genome assembly, gene set, and transcriptome completeness based on evolutionarily informed expectations of gene content from near-universal single-copy orthologs selected from OrthoDB. + homepage: https://busco.ezlab.org/ + documentation: https://busco.ezlab.org/busco_userguide.html + tool_dev_url: https://gitlab.com/ezlab/busco + doi: "10.1007/978-1-4939-9173-0_14" + licence: ["MIT"] +input: + - short_summary_txt: + type: file + description: One or more short summary txt files from BUSCO + pattern: "short_summary.*.txt" +output: + - png: + type: file + description: A summary plot in png format + pattern: "*.png" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@GallVp" +maintainers: + - "@GallVp" diff --git a/modules/gallvp/busco/generateplot/tests/main.nf.test b/modules/gallvp/busco/generateplot/tests/main.nf.test new file mode 100644 index 0000000..6a43fa7 --- /dev/null +++ b/modules/gallvp/busco/generateplot/tests/main.nf.test @@ -0,0 +1,72 @@ +nextflow_process { + + name "Test Process BUSCO_GENERATEPLOT" + script "../main.nf" + process "BUSCO_GENERATEPLOT" + + tag "modules" + tag "modules_gallvp" + tag "busco" + tag "busco/busco" + tag "busco/generateplot" + + test("bacteroides_fragilis-genome_fna_gz") { + + setup { + run("BUSCO_BUSCO") { + script "../../busco" + process { + """ + input[0] = [ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/prokaryotes/bacteroides_fragilis/genome/genome.fna.gz', checkIfExists: true) + ] + input[1] = 'genome' + input[2] = 'bacteria_odb10' + input[3] = [] + input[4] = [] + """ + } + } + } + + when { + process { + """ + input[0] = BUSCO_BUSCO.out.short_summaries_txt.map { meta, summary -> summary } + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out.versions).match("versions") }, + { assert process.out.png != null } // PNGs with same data but different meta-data. Not sure how to get around this, yet! + ) + } + + } + + test("stub") { + + options "-stub" + + when { + process { + """ + input[0] = file(params.modules_testdata_base_path + 'genomics/prokaryotes/bacteroides_fragilis/genome/genome.fna.gz', checkIfExists: true) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + +} \ No newline at end of file diff --git a/modules/gallvp/busco/generateplot/tests/main.nf.test.snap b/modules/gallvp/busco/generateplot/tests/main.nf.test.snap new file mode 100644 index 0000000..d9773ec --- /dev/null +++ b/modules/gallvp/busco/generateplot/tests/main.nf.test.snap @@ -0,0 +1,37 @@ +{ + "versions": { + "content": [ + [ + "versions.yml:md5,726fa3440ea3a0b2e9d032d7e4d25e74" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-05-03T15:40:01.523993" + }, + "stub": { + "content": [ + { + "0": [ + "busco_figure.png:md5,d41d8cd98f00b204e9800998ecf8427e" + ], + "1": [ + "versions.yml:md5,726fa3440ea3a0b2e9d032d7e4d25e74" + ], + "png": [ + "busco_figure.png:md5,d41d8cd98f00b204e9800998ecf8427e" + ], + "versions": [ + "versions.yml:md5,726fa3440ea3a0b2e9d032d7e4d25e74" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-05-03T15:40:11.864276" + } +} \ No newline at end of file diff --git a/modules/gallvp/busco/generateplot/tests/tags.yml b/modules/gallvp/busco/generateplot/tests/tags.yml new file mode 100644 index 0000000..b6548a6 --- /dev/null +++ b/modules/gallvp/busco/generateplot/tests/tags.yml @@ -0,0 +1,2 @@ +busco/generateplot: + - "modules/nf-core/busco/generateplot/**" diff --git a/modules/gallvp/custom/restoregffids/environment.yml b/modules/gallvp/custom/restoregffids/environment.yml new file mode 100644 index 0000000..2450c45 --- /dev/null +++ b/modules/gallvp/custom/restoregffids/environment.yml @@ -0,0 +1,9 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json +name: "custom_restoregffids" +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - "python=3.10.2" diff --git a/modules/gallvp/custom/restoregffids/main.nf b/modules/gallvp/custom/restoregffids/main.nf new file mode 100644 index 0000000..14e2c07 --- /dev/null +++ b/modules/gallvp/custom/restoregffids/main.nf @@ -0,0 +1,35 @@ +process CUSTOM_RESTOREGFFIDS { + tag "$meta.id" + label 'process_single' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/python:3.10.2': + 'biocontainers/python:3.10.2' }" + + input: + tuple val(meta), path(gff3) + path(ids_tsv) + + output: + tuple val(meta), path("*.restored.ids.gff3") , emit: restored_ids_gff3 + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + prefix = task.ext.prefix ?: "${meta.id}" + template 'restore_gff_ids.py' + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch "${prefix}.restored.ids.gff3" + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + python: \$(python --version | cut -d' ' -f2) + END_VERSIONS + """ +} diff --git a/modules/gallvp/custom/restoregffids/meta.yml b/modules/gallvp/custom/restoregffids/meta.yml new file mode 100644 index 0000000..4e42b82 --- /dev/null +++ b/modules/gallvp/custom/restoregffids/meta.yml @@ -0,0 +1,58 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/meta-schema.json +name: "custom_restoregffids" +description: | + Restores IDs in a gff3 file based on a TSV table + consisting of original (first column) and new IDs (second column). + This module is helpful when some tools like EDTA implicitly shorten + the IDs without producing the ID map, leading to downstream mismatch + in IDs across files. +keywords: + - genome + - gff + - ID + - shorten + - restore +tools: + - "python": + description: | + Python is a programming language that lets you work quickly + and integrate systems more effectively + homepage: "https://www.python.org" + documentation: "https://docs.python.org/3/" + tool_dev_url: "https://github.com/python/cpython" + licence: ["MIT"] +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'test' ]` + - gff3: + type: file + description: Input gff3 file + pattern: "*.{gff,gff3}" + - ids_tsv: + type: file + description: | + A TSV file with original (first column) and new ids (second column) + if id change was required + pattern: "*.tsv" +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'test' ]` + - restored_ids_gff3: + type: file + description: GFF3 file with restored ids + pattern: "*.restored.ids.gff3" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@GallVp" +maintainers: + - "@GallVp" diff --git a/modules/gallvp/custom/restoregffids/templates/restore_gff_ids.py b/modules/gallvp/custom/restoregffids/templates/restore_gff_ids.py new file mode 100755 index 0000000..2bde7ab --- /dev/null +++ b/modules/gallvp/custom/restoregffids/templates/restore_gff_ids.py @@ -0,0 +1,47 @@ +#!/usr/bin/env python3 + +from platform import python_version + +ids_tsv = "$ids_tsv" +input_gff3 = "$gff3" +output_prefix = "$prefix" + + +def create_name_mapping_from_tsv(file_path): + dictionary = {} + + with open(file_path) as tsv_file: + for line in tsv_file: + columns = line.strip().split("\\t") + if len(columns) != 2: + raise ValueError(f"{file_path} should be a two column TSV file") + + orig_id, new_id = columns[0], columns[1] + dictionary[new_id] = orig_id + + return dictionary + + +def restore_gff3_ids(new_to_orig_ids, file_path, output_file_name): + # Write versions + with open("versions.yml", "w") as f_versions: + f_versions.write('"${task.process}":\\n') + f_versions.write(f" python: {python_version()}\\n") + + with open(file_path) as input_gff3_file: + input_lines = input_gff3_file.readlines() + + with open(output_file_name, "w") as output_gff_file: + for line in input_lines: + if line.startswith("##"): + output_gff_file.write(line) + continue + + new_id = line.split("\\t")[0] + orig_id = new_to_orig_ids[new_id] + output_gff_file.write("\\t".join([orig_id] + line.split("\\t")[1:])) + + +if __name__ == "__main__": + new_to_orig_ids = create_name_mapping_from_tsv(ids_tsv) + restore_gff3_ids(new_to_orig_ids, input_gff3, f"{output_prefix}.restored.ids.gff3") diff --git a/modules/gallvp/custom/restoregffids/tests/main.nf.test b/modules/gallvp/custom/restoregffids/tests/main.nf.test new file mode 100644 index 0000000..2c248c9 --- /dev/null +++ b/modules/gallvp/custom/restoregffids/tests/main.nf.test @@ -0,0 +1,63 @@ +nextflow_process { + + name "Test Process CUSTOM_RESTOREGFFIDS" + script "../main.nf" + process "CUSTOM_RESTOREGFFIDS" + + tag "modules" + tag "modules_gallvp" + tag "custom" + tag "custom/restoregffids" + + test("sarscov2-genome_gff3-success") { + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.gff3', checkIfExists: true) + ] + input[1] = Channel.of('Chr1\tMT192765.1').collectFile(name: 'id_map.tsv', newLine: true) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() }, + { assert path(process.out.restored_ids_gff3.get(0).get(1)).getText().contains("Chr1") }, + { assert !path(process.out.restored_ids_gff3.get(0).get(1)).getText().contains("MT192765.1") }, + { assert snapshot(process.out.versions).match("versions") } + ) + } + + } + + test("stub") { + + options '-stub' + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.gff3', checkIfExists: true) + ] + input[1] = Channel.of('Chr1\tMT192765.1').collectFile(name: 'id_map.tsv', newLine: true) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert process.out.restored_ids_gff3 != null }, + { assert snapshot(process.out.versions).match("versions_stub") } + ) + } + + } + +} \ No newline at end of file diff --git a/modules/gallvp/custom/restoregffids/tests/main.nf.test.snap b/modules/gallvp/custom/restoregffids/tests/main.nf.test.snap new file mode 100644 index 0000000..ebe850a --- /dev/null +++ b/modules/gallvp/custom/restoregffids/tests/main.nf.test.snap @@ -0,0 +1,61 @@ +{ + "sarscov2-genome_gff3-success": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.restored.ids.gff3:md5,2c294938b9eb4e52d19e14725c1d92a9" + ] + ], + "1": [ + "versions.yml:md5,32d31c4f1da9a3d1be013fd163e5867e" + ], + "restored_ids_gff3": [ + [ + { + "id": "test", + "single_end": false + }, + "test.restored.ids.gff3:md5,2c294938b9eb4e52d19e14725c1d92a9" + ] + ], + "versions": [ + "versions.yml:md5,32d31c4f1da9a3d1be013fd163e5867e" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2023-12-07T13:49:30.047425" + }, + "versions_stub": { + "content": [ + [ + "versions.yml:md5,32d31c4f1da9a3d1be013fd163e5867e" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-05-10T15:26:11.66528" + }, + "versions": { + "content": [ + [ + "versions.yml:md5,32d31c4f1da9a3d1be013fd163e5867e" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2023-12-07T13:49:30.071175" + } +} \ No newline at end of file diff --git a/modules/gallvp/custom/shortenfastaids/environment.yml b/modules/gallvp/custom/shortenfastaids/environment.yml new file mode 100644 index 0000000..a64758c --- /dev/null +++ b/modules/gallvp/custom/shortenfastaids/environment.yml @@ -0,0 +1,11 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json +name: "custom_shortenfastaids" +channels: + - conda-forge + - bioconda + - defaults + +dependencies: + - biopython==1.75 + - python==3.8.13 diff --git a/modules/gallvp/custom/shortenfastaids/main.nf b/modules/gallvp/custom/shortenfastaids/main.nf new file mode 100644 index 0000000..3cdaa07 --- /dev/null +++ b/modules/gallvp/custom/shortenfastaids/main.nf @@ -0,0 +1,38 @@ +process CUSTOM_SHORTENFASTAIDS { + tag "$meta.id" + label 'process_single' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/biopython:1.75': + 'biocontainers/biopython:1.75' }" + + input: + tuple val(meta), path(fasta) + + output: + tuple val(meta), path("*.short.ids.fasta") , emit: short_ids_fasta , optional: true + tuple val(meta), path("*.short.ids.tsv") , emit: short_ids_tsv + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + prefix = task.ext.prefix ?: "${meta.id}" + template 'shorten_fasta_ids.py' + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + echo \\ + 'IDs have acceptable length and character. No change required.' \\ + > ${meta.id}.short.ids.tsv + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + python: \$(python --version | cut -d' ' -f2) + biopython: \$(pip list | grep "biopython" | cut -d' ' -f3) + END_VERSIONS + """ +} diff --git a/modules/gallvp/custom/shortenfastaids/meta.yml b/modules/gallvp/custom/shortenfastaids/meta.yml new file mode 100644 index 0000000..2425810 --- /dev/null +++ b/modules/gallvp/custom/shortenfastaids/meta.yml @@ -0,0 +1,58 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/meta-schema.json +name: "custom_shortenfastaids" +description: | + Shortens fasta IDs and produces a new fasta along with a TSV table + consisting of original (first column) and new IDs (second column). + This module is helpful when some tools like EDTA implicitly shorten + the IDs without producing the ID map, leading to downstream mismatch + in IDs across files. +keywords: + - genome + - fasta + - ID + - shorten +tools: + - "biopython": + description: | + Biopython is a set of freely available tools for biological computation written in Python by + an international team of developers. + homepage: "https://biopython.org" + documentation: "https://biopython.org/wiki/Documentation" + tool_dev_url: "https://github.com/biopython/biopython" + doi: "10.1093/bioinformatics/btp163" + licence: ["MIT"] +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'test' ]` + - fasta: + type: file + description: Input fasta file + pattern: "*.{fsa,fa,fasta}" +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'test' ]` + - short_ids_fasta: + type: file + description: Fasta file with shortened ids if id change is required + pattern: "*.{fsa,fa,fasta}" + - short_ids_tsv: + type: file + description: | + A TSV file with original (first column) and new ids (second column) + if id change is required + pattern: "*.tsv" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@GallVp" +maintainers: + - "@GallVp" diff --git a/modules/gallvp/custom/shortenfastaids/templates/shorten_fasta_ids.py b/modules/gallvp/custom/shortenfastaids/templates/shorten_fasta_ids.py new file mode 100755 index 0000000..9d9c6e1 --- /dev/null +++ b/modules/gallvp/custom/shortenfastaids/templates/shorten_fasta_ids.py @@ -0,0 +1,168 @@ +#!/usr/bin/env python3 + +import re +from importlib.metadata import version +from platform import python_version + +from Bio import SeqIO + +# The input fasta file path +fasta_file_path = "$fasta" +output_files_prefix = "$prefix" + + +def extract_fasta_ids_and_descriptions(fasta_file_path): + fasta_file_obj = SeqIO.parse(fasta_file_path, "fasta") + + ids = [] + for record in fasta_file_obj: + ids.append((record.id, record.description)) + return ids + + +def write_fasta_with_new_ids(fasta_file_path, id_mapping, file_prefix): + old_fasta_file_obj = SeqIO.parse(fasta_file_path, "fasta") + id_map = dict(id_mapping) + + replaced_records = [] + for record in old_fasta_file_obj: + old_id = record.id + + new_id = id_map[old_id] + record.id = new_id + record.description = "" + + replaced_records.append(record) + + SeqIO.write(replaced_records, f"{file_prefix}.short.ids.fasta", "fasta") + + +def do_id_need_to_change(id_and_description, silent=False): + id = id_and_description[0] + description = id_and_description[1] + if len(id) > 13: + if not silent: + print(f"{id} has length greater than 13") + return True + + if not re.match(r"^[a-zA-Z0-9_]+\$", id): + if not silent: + print(f"{id} does not match '^[a-zA-Z0-9_]+\$'") + return True + + if description != id and description != "": + if not silent: + print(f"{id} contains a comment: {description.replace(id, '')}") + return True + + if not silent: + print(f"{id} is acceptable") + return False + + +def do_ids_need_to_change(ids_and_descriptions, silent=False): + return any([do_id_need_to_change(id_and_description, silent) for id_and_description in ids_and_descriptions]) + + +def extract_common_patterns(ids): + pattern_counts = {} + for id in ids: + patterns = re.findall(r"[A-Za-z0_]{4,}", id) + for pattern in set(patterns): + pattern_counts[pattern] = pattern_counts.get(pattern, 0) + 1 + + common_patterns = [pattern for pattern, count in pattern_counts.items() if count >= 2] + + if len(common_patterns) < 1: + return {} + + return {pattern: pattern[:3] for pattern in common_patterns} + + +def shorten_ids(input_ids_and_descriptions, patterns_dict): + shortened_ids = [] + + for id_and_description in input_ids_and_descriptions: + id = id_and_description[0] + description = "" # Treat description as absent as it will be removed by write_fasta_with_new_ids + if not do_id_need_to_change((id, description), silent=True): + shortened_ids.append(id) + continue + + shortened_id = shorten_id_by_pattern_replacement(patterns_dict, id) + + if not do_id_need_to_change((shortened_id, description), silent=True): + shortened_ids.append(shortened_id) + continue + + shortened_id = f"Ctg{generate_hash(id)}" + + if not do_id_need_to_change((shortened_id, description), silent=True): + shortened_ids.append(shortened_id) + continue + + raise ValueError(f"Failed to shorten id: {id} ({shortened_id})") + + return shortened_ids + + +def shorten_id_by_pattern_replacement(patterns_dict, id): + if patterns_dict == {}: + return id + + shortened_id = id + matches_for_id = match_substrings(patterns_dict.keys(), shortened_id) + + for pattern in matches_for_id: + shortened_id = re.sub( + rf"({re.escape(pattern)})", + patterns_dict[pattern], + shortened_id, + ) + return shortened_id if shortened_id[len(shortened_id) - 1] != "_" else shortened_id[0 : (len(shortened_id) - 1)] + + +def match_substrings(substrings, target_string): + pattern = "|".join(map(re.escape, substrings)) + matches = re.findall(pattern, target_string) + return matches + + +def generate_hash(string): + import hashlib + + hash_object = hashlib.sha1(string.encode()) + full_hash = hash_object.hexdigest() + short_hash = full_hash[:10] + return short_hash + + +def fail_if_new_ids_not_valid(ids): + if len(ids) != len(set(ids)): + raise ValueError("Th new IDs are not unique") + + +if __name__ == "__main__": + input_ids_and_descriptions = extract_fasta_ids_and_descriptions(fasta_file_path) + input_ids = [x[0] for x in input_ids_and_descriptions] + + # Write versions + with open("versions.yml", "w") as f_versions: + f_versions.write('"${task.process}":\\n') + f_versions.write(f" python: {python_version()}\\n") + f_versions.write(f" biopython: {version('biopython')}\\n") + + if not do_ids_need_to_change(input_ids_and_descriptions): + print("IDs have acceptable length and character. No change required.") + with open(f"{output_files_prefix}.short.ids.tsv", "w") as f: + f.write("IDs have acceptable length and character. No change required.") + exit(0) + + new_ids = shorten_ids(input_ids_and_descriptions, extract_common_patterns(input_ids)) + fail_if_new_ids_not_valid(new_ids) + + with open(f"{output_files_prefix}.short.ids.tsv", "w") as f: + for input_id, new_id in zip(input_ids, new_ids): + f.write(f"{input_id}\\t{new_id}\\n") + + write_fasta_with_new_ids(fasta_file_path, zip(input_ids, new_ids), output_files_prefix) diff --git a/modules/gallvp/custom/shortenfastaids/tests/main.nf.test b/modules/gallvp/custom/shortenfastaids/tests/main.nf.test new file mode 100644 index 0000000..8eb2099 --- /dev/null +++ b/modules/gallvp/custom/shortenfastaids/tests/main.nf.test @@ -0,0 +1,123 @@ +nextflow_process { + + name "Test Process CUSTOM_SHORTENFASTAIDS" + script "../main.nf" + process "CUSTOM_SHORTENFASTAIDS" + + tag "modules" + tag "modules_gallvp" + tag "custom" + tag "custom/shortenfastaids" + + test("homo_sapiens-genome_fasta-no_change") { + + when { + process { + """ + input[0] = [ + [ id:'test' ], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("sarscov2-genome_fasta-pattern_change") { + + when { + process { + """ + input[0] = [ + [ id:'test' ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("homo_sapiens-genome2_fasta-length_change") { + + when { + process { + """ + input[0] = [ + [ id:'test' ], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome2.fasta', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("custom_fasta-comment_change") { + + when { + process { + """ + input[0] = Channel.of('>Chr1 This is a test comment', 'AGCTAGCT') + | collectFile(name: 'sample.fasta', newLine: true) + | map { file -> [ [ id:'test' ], file ] } + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("stub") { + + options "-stub" + + when { + process { + """ + input[0] = [ + [ id:'test' ], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + +} \ No newline at end of file diff --git a/modules/gallvp/custom/shortenfastaids/tests/main.nf.test.snap b/modules/gallvp/custom/shortenfastaids/tests/main.nf.test.snap new file mode 100644 index 0000000..2506ebd --- /dev/null +++ b/modules/gallvp/custom/shortenfastaids/tests/main.nf.test.snap @@ -0,0 +1,227 @@ +{ + "custom_fasta-comment_change": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.short.ids.fasta:md5,c861b9d46a4d9bdba66953cff572fc5d" + ] + ], + "1": [ + [ + { + "id": "test" + }, + "test.short.ids.tsv:md5,8762f2bffbdff75c2812bad72ba52bba" + ] + ], + "2": [ + "versions.yml:md5,e5704a53ebea373dac3a93ae800d48ba" + ], + "short_ids_fasta": [ + [ + { + "id": "test" + }, + "test.short.ids.fasta:md5,c861b9d46a4d9bdba66953cff572fc5d" + ] + ], + "short_ids_tsv": [ + [ + { + "id": "test" + }, + "test.short.ids.tsv:md5,8762f2bffbdff75c2812bad72ba52bba" + ] + ], + "versions": [ + "versions.yml:md5,e5704a53ebea373dac3a93ae800d48ba" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2023-12-07T13:33:05.523745" + }, + "stub": { + "content": [ + { + "0": [ + + ], + "1": [ + [ + { + "id": "test" + }, + "test.short.ids.tsv:md5,fcf920d9a7b57a1e3c29a9e88673330f" + ] + ], + "2": [ + "versions.yml:md5,e5704a53ebea373dac3a93ae800d48ba" + ], + "short_ids_fasta": [ + + ], + "short_ids_tsv": [ + [ + { + "id": "test" + }, + "test.short.ids.tsv:md5,fcf920d9a7b57a1e3c29a9e88673330f" + ] + ], + "versions": [ + "versions.yml:md5,e5704a53ebea373dac3a93ae800d48ba" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-04T13:58:30.161542" + }, + "homo_sapiens-genome_fasta-no_change": { + "content": [ + { + "0": [ + + ], + "1": [ + [ + { + "id": "test" + }, + "test.short.ids.tsv:md5,642382addc4beba37088b1ebe09d38cf" + ] + ], + "2": [ + "versions.yml:md5,e5704a53ebea373dac3a93ae800d48ba" + ], + "short_ids_fasta": [ + + ], + "short_ids_tsv": [ + [ + { + "id": "test" + }, + "test.short.ids.tsv:md5,642382addc4beba37088b1ebe09d38cf" + ] + ], + "versions": [ + "versions.yml:md5,e5704a53ebea373dac3a93ae800d48ba" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.1" + }, + "timestamp": "2024-06-02T20:54:17.945233" + }, + "homo_sapiens-genome2_fasta-length_change": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.short.ids.fasta:md5,1382acd98d4cd233a8062ef01b2aaa6d" + ] + ], + "1": [ + [ + { + "id": "test" + }, + "test.short.ids.tsv:md5,99c0f2a529cb595b2d8530024ed2880e" + ] + ], + "2": [ + "versions.yml:md5,e5704a53ebea373dac3a93ae800d48ba" + ], + "short_ids_fasta": [ + [ + { + "id": "test" + }, + "test.short.ids.fasta:md5,1382acd98d4cd233a8062ef01b2aaa6d" + ] + ], + "short_ids_tsv": [ + [ + { + "id": "test" + }, + "test.short.ids.tsv:md5,99c0f2a529cb595b2d8530024ed2880e" + ] + ], + "versions": [ + "versions.yml:md5,e5704a53ebea373dac3a93ae800d48ba" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2023-12-07T13:33:01.924483" + }, + "sarscov2-genome_fasta-pattern_change": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.short.ids.fasta:md5,14d6f587b6d28889c5c0f985e78d602f" + ] + ], + "1": [ + [ + { + "id": "test" + }, + "test.short.ids.tsv:md5,d7a2af88e8549586e5616bff6a88bd71" + ] + ], + "2": [ + "versions.yml:md5,e5704a53ebea373dac3a93ae800d48ba" + ], + "short_ids_fasta": [ + [ + { + "id": "test" + }, + "test.short.ids.fasta:md5,14d6f587b6d28889c5c0f985e78d602f" + ] + ], + "short_ids_tsv": [ + [ + { + "id": "test" + }, + "test.short.ids.tsv:md5,d7a2af88e8549586e5616bff6a88bd71" + ] + ], + "versions": [ + "versions.yml:md5,e5704a53ebea373dac3a93ae800d48ba" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2023-12-07T13:32:58.12885" + } +} \ No newline at end of file diff --git a/modules/gallvp/edta/edta/main.nf b/modules/gallvp/edta/edta/main.nf new file mode 100644 index 0000000..cddac07 --- /dev/null +++ b/modules/gallvp/edta/edta/main.nf @@ -0,0 +1,92 @@ +process EDTA_EDTA { + tag "$meta.id" + label 'process_high' + + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/edta:2.1.0--hdfd78af_1': + 'biocontainers/edta:2.1.0--hdfd78af_1' }" + + input: + tuple val(meta), path(fasta) + path cds + path curatedlib + path rmout + path exclude + + output: + tuple val(meta), path('*.log') , emit: log + tuple val(meta), path('*.EDTA.TElib.fa') , emit: te_lib_fasta + tuple val(meta), path('*.EDTA.pass.list') , emit: pass_list , optional: true + tuple val(meta), path('*.EDTA.out') , emit: out_file , optional: true + tuple val(meta), path('*.EDTA.TEanno.gff3') , emit: te_anno_gff3 , optional: true + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def mod_file_name = "${fasta}.mod" + def cds_file = cds ? "--cds $cds" : '' + def curatedlib_file = curatedlib ? "--curatedlib $curatedlib": '' + def rmout_file = rmout ? "--rmout $rmout" : '' + def exclude_file = exclude ? "--exclude $exclude" : '' + """ + EDTA.pl \\ + --genome $fasta \\ + --threads $task.cpus \\ + $cds_file \\ + $curatedlib_file \\ + $rmout_file \\ + $exclude_file \\ + $args \\ + &> >(tee "${prefix}.log" 2>&1) + + mv \\ + "${mod_file_name}.EDTA.TElib.fa" \\ + "${prefix}.EDTA.TElib.fa" + + [ -f "${mod_file_name}.EDTA.raw/LTR/${mod_file_name}.pass.list" ] \\ + && mv \\ + "${mod_file_name}.EDTA.raw/LTR/${mod_file_name}.pass.list" \\ + "${prefix}.EDTA.pass.list" \\ + || echo "EDTA did not produce a pass.list file" + + [ -f "${mod_file_name}.EDTA.anno/${mod_file_name}.out" ] \\ + && mv \\ + "${mod_file_name}.EDTA.anno/${mod_file_name}.out" \\ + "${prefix}.EDTA.out" \\ + || echo "EDTA did not produce an out file" + + [ -f "${mod_file_name}.EDTA.TEanno.gff3" ] \\ + && mv \\ + "${mod_file_name}.EDTA.TEanno.gff3" \\ + "${prefix}.EDTA.TEanno.gff3" \\ + || echo "EDTA did not produce a TEanno gff3 file" + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + EDTA: \$(EDTA.pl -h | awk ' /##### Extensive/ {print \$7}') + END_VERSIONS + """ + + stub: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def touch_pass_list = args.contains("--anno 1") ? "touch ${prefix}.EDTA.pass.list" : '' + def touch_out_file = args.contains("--anno 1") ? "touch ${prefix}.EDTA.out" : '' + def touch_te_anno = args.contains("--anno 1") ? "touch ${prefix}.EDTA.TEanno.gff3": '' + """ + touch "${prefix}.log" + touch "${prefix}.EDTA.TElib.fa" + $touch_pass_list + $touch_out_file + $touch_te_anno + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + EDTA: \$(EDTA.pl -h | awk ' /##### Extensive/ {print \$7}') + END_VERSIONS + """ +} diff --git a/modules/gallvp/edta/edta/meta.yml b/modules/gallvp/edta/edta/meta.yml new file mode 100644 index 0000000..52503b8 --- /dev/null +++ b/modules/gallvp/edta/edta/meta.yml @@ -0,0 +1,82 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/meta-schema.json +name: "edta_edta" +description: Extensive de-novo TE Annotator (EDTA) +keywords: + - genome + - repeat + - annotation + - transposable-elements +tools: + - "edta": + description: Extensive de-novo TE Annotator (EDTA) + homepage: "https://github.com/oushujun/EDTA" + documentation: "https://github.com/oushujun/EDTA" + tool_dev_url: "https://github.com/oushujun/EDTA" + doi: "10.1186/s13059-019-1905-y" + licence: ["GPL v3"] +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'test' ]` + - fasta: + type: file + description: Genome fasta file + pattern: "*.{fsa,fa,fasta}" + - cds: + type: file + description: | + A FASTA file containing the coding sequence (no introns, UTRs, nor TEs) + of this genome or its close relative + pattern: "*.{fsa,fa,fasta}" + - curatedlib: + type: file + description: | + A curated library to keep consistent naming and classification for known TEs + pattern: "*.liban" + - rmout: + type: file + description: | + Homology-based TE annotation instead of using the EDTA library for masking in + RepeatMasker .out format + pattern: "*.out" + - exclude: + type: file + description: Exclude regions (bed format) from TE masking in the MAKER.masked output + pattern: "*.bed" +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'test' ]` + - log: + type: file + description: Log emitted by EDTA + pattern: "*.log" + - te_lib_fasta: + type: file + description: A non-redundant TE library in fasta format + pattern: "*.EDTA.TElib.fa" + - pass_list: + type: file + description: A summary table of intact LTR-RTs with coordinate and structural information + pattern: "*.EDTA.pass.list" + - out_file: + type: file + description: RepeatMasker annotation of all LTR sequences in the genome + pattern: "*.EDTA.out" + - te_anno_gff3: + type: file + description: A gff3 file containing both structurally intact and fragmented TE annotations + pattern: "*.EDTA.TEanno.gff3" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@GallVp" +maintainers: + - "@GallVp" diff --git a/modules/gallvp/edta/edta/tests/main.nf.test b/modules/gallvp/edta/edta/tests/main.nf.test new file mode 100644 index 0000000..b3ec30c --- /dev/null +++ b/modules/gallvp/edta/edta/tests/main.nf.test @@ -0,0 +1,84 @@ +nextflow_process { + + name "Test Process EDTA_EDTA" + script "../main.nf" + process "EDTA_EDTA" + config "./nextflow.config" + + tag "modules" + tag "modules_gallvp" + tag "edta" + tag "edta/edta" + tag "modules/nf-core/gunzip" + + test("actinidia_chinensis-genome_1_fasta_gz") { + + setup { + run("GUNZIP") { + script "../../../../../modules/nf-core/gunzip" + + process { + """ + input[0] = [ + [ id:'test' ], + file(params.modules_testdata_base_path + 'genomics/eukaryotes/actinidia_chinensis/genome/chr1/genome.fasta.gz', checkIfExists: true) + ] + """ + } + } + } + + when { + process { + """ + input[0] = GUNZIP.out.gunzip + input[1] = [] + input[2] = [] + input[3] = [] + input[4] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out.versions).match("versions") }, + { assert path(process.out.te_lib_fasta[0][1]).text.contains('LTR/Copia') }, + { assert path(process.out.pass_list[0][1]).text.contains('Copia') }, + { assert process.out.out_file == [] }, + { assert process.out.te_anno_gff3 == [] } + ) + } + + } + + test("stub") { + + options "-stub" + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ] + input[1] = [] + input[2] = [] + input[3] = [] + input[4] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + +} \ No newline at end of file diff --git a/modules/gallvp/edta/edta/tests/main.nf.test.snap b/modules/gallvp/edta/edta/tests/main.nf.test.snap new file mode 100644 index 0000000..d989e01 --- /dev/null +++ b/modules/gallvp/edta/edta/tests/main.nf.test.snap @@ -0,0 +1,81 @@ +{ + "versions": { + "content": [ + [ + "versions.yml:md5,f9e6b414c1eb81520a9fdbb15f797405" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-05-10T14:43:10.298103" + }, + "stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test" + }, + "test.EDTA.TElib.fa:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + + ], + "3": [ + + ], + "4": [ + + ], + "5": [ + "versions.yml:md5,f9e6b414c1eb81520a9fdbb15f797405" + ], + "log": [ + [ + { + "id": "test" + }, + "test.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "out_file": [ + + ], + "pass_list": [ + + ], + "te_anno_gff3": [ + + ], + "te_lib_fasta": [ + [ + { + "id": "test" + }, + "test.EDTA.TElib.fa:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,f9e6b414c1eb81520a9fdbb15f797405" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-05-10T14:43:16.561778" + } +} \ No newline at end of file diff --git a/modules/gallvp/edta/edta/tests/nextflow.config b/modules/gallvp/edta/edta/tests/nextflow.config new file mode 100644 index 0000000..ac46798 --- /dev/null +++ b/modules/gallvp/edta/edta/tests/nextflow.config @@ -0,0 +1,5 @@ +process { + withName: EDTA_EDTA { + ext.args = '--anno 0' + } +} diff --git a/modules/gallvp/gffread/environment.yml b/modules/gallvp/gffread/environment.yml new file mode 100644 index 0000000..c6df58a --- /dev/null +++ b/modules/gallvp/gffread/environment.yml @@ -0,0 +1,7 @@ +name: gffread +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bioconda::gffread=0.12.7 diff --git a/modules/gallvp/gffread/main.nf b/modules/gallvp/gffread/main.nf new file mode 100644 index 0000000..da55cba --- /dev/null +++ b/modules/gallvp/gffread/main.nf @@ -0,0 +1,60 @@ +process GFFREAD { + tag "$meta.id" + label 'process_low' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/gffread:0.12.7--hdcf5f25_4' : + 'biocontainers/gffread:0.12.7--hdcf5f25_4' }" + + input: + tuple val(meta), path(gff) + path fasta + + output: + tuple val(meta), path("*.gtf") , emit: gtf , optional: true + tuple val(meta), path("*.gff3") , emit: gffread_gff , optional: true + tuple val(meta), path("*.fasta"), emit: gffread_fasta , optional: true + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def extension = args.contains("-T") ? 'gtf' : ( ( ['-w', '-x', '-y' ].any { args.contains(it) } ) ? 'fasta' : 'gff3' ) + def fasta_arg = fasta ? "-g $fasta" : '' + def output_name = "${prefix}.${extension}" + def output = extension == "fasta" ? "$output_name" : "-o $output_name" + def args_sorted = args.replaceAll(/(.*)(-[wxy])(.*)/) { all, pre, param, post -> "$pre $post $param" }.trim() + // args_sorted = Move '-w', '-x', and '-y' to the end of the args string as gffread expects the file name after these parameters + if ( "$output_name" in [ "$gff", "$fasta" ] ) error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!" + """ + gffread \\ + $gff \\ + $fasta_arg \\ + $args_sorted \\ + $output + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + gffread: \$(gffread --version 2>&1) + END_VERSIONS + """ + + stub: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def extension = args.contains("-T") ? 'gtf' : ( ( ['-w', '-x', '-y' ].any { args.contains(it) } ) ? 'fasta' : 'gff3' ) + def output_name = "${prefix}.${extension}" + if ( "$output_name" in [ "$gff", "$fasta" ] ) error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!" + """ + touch $output_name + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + gffread: \$(gffread --version 2>&1) + END_VERSIONS + """ +} diff --git a/modules/gallvp/gffread/meta.yml b/modules/gallvp/gffread/meta.yml new file mode 100644 index 0000000..c060282 --- /dev/null +++ b/modules/gallvp/gffread/meta.yml @@ -0,0 +1,55 @@ +name: gffread +description: Validate, filter, convert and perform various other operations on GFF files +keywords: + - gff + - conversion + - validation +tools: + - gffread: + description: GFF/GTF utility providing format conversions, region filtering, FASTA sequence extraction and more. + homepage: http://ccb.jhu.edu/software/stringtie/gff.shtml#gffread + documentation: http://ccb.jhu.edu/software/stringtie/gff.shtml#gffread + tool_dev_url: https://github.com/gpertea/gffread + doi: 10.12688/f1000research.23297.1 + licence: ["MIT"] +input: + - meta: + type: map + description: | + Groovy Map containing meta data + e.g. [ id:'test' ] + - gff: + type: file + description: A reference file in either the GFF3, GFF2 or GTF format. + pattern: "*.{gff, gtf}" + - fasta: + type: file + description: A multi-fasta file with the genomic sequences + pattern: "*.{fasta,fa,faa,fas,fsa}" +output: + - meta: + type: map + description: | + Groovy Map containing meta data + e.g. [ id:'test' ] + - gtf: + type: file + description: GTF file resulting from the conversion of the GFF input file if '-T' argument is present + pattern: "*.{gtf}" + - gffread_gff: + type: file + description: GFF3 file resulting from the conversion of the GFF input file if '-T' argument is absent + pattern: "*.gff3" + - gffread_fasta: + type: file + description: Fasta file produced when either of '-w', '-x', '-y' parameters is present + pattern: "*.fasta" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@edmundmiller" +maintainers: + - "@edmundmiller" + - "@gallvp" diff --git a/modules/gallvp/gffread/tests/main.nf.test b/modules/gallvp/gffread/tests/main.nf.test new file mode 100644 index 0000000..17b2ee6 --- /dev/null +++ b/modules/gallvp/gffread/tests/main.nf.test @@ -0,0 +1,223 @@ +nextflow_process { + + name "Test Process GFFREAD" + script "../main.nf" + process "GFFREAD" + + tag "gffread" + tag "modules_gallvp" + tag "modules" + + test("sarscov2-gff3-gtf") { + + config "./nextflow.config" + + when { + params { + outdir = "$outputDir" + } + process { + """ + input[0] = [ + [id: 'test'], + file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.gff3", checkIfExists: true) + ] + input[1] = [] + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() }, + { assert process.out.gffread_gff == [] }, + { assert process.out.gffread_fasta == [] } + ) + } + + } + + test("sarscov2-gff3-gtf-stub") { + + options '-stub' + config "./nextflow.config" + + when { + params { + outdir = "$outputDir" + } + process { + """ + input[0] = [ + [id: 'test'], + file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.gff3", checkIfExists: true) + ] + input[1] = [] + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() }, + { assert process.out.gffread_gff == [] }, + { assert process.out.gffread_fasta == [] } + ) + } + + } + + test("sarscov2-gff3-gff3") { + + config "./nextflow-gff3.config" + + when { + params { + outdir = "$outputDir" + } + process { + """ + input[0] = [ + [id: 'test'], + file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.gff3", checkIfExists: true) + ] + input[1] = [] + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() }, + { assert process.out.gtf == [] }, + { assert process.out.gffread_fasta == [] } + ) + } + + } + + test("sarscov2-gff3-gff3-stub") { + + options '-stub' + config "./nextflow-gff3.config" + + when { + params { + outdir = "$outputDir" + } + process { + """ + input[0] = [ + [id: 'test'], + file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.gff3", checkIfExists: true) + ] + input[1] = [] + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() }, + { assert process.out.gtf == [] }, + { assert process.out.gffread_fasta == [] } + ) + } + + } + + test("sarscov2-gff3-fasta") { + + config "./nextflow-fasta.config" + + when { + params { + outdir = "$outputDir" + } + process { + """ + input[0] = [ + [id: 'test'], + file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.gff3", checkIfExists: true) + ] + input[1] = file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.fasta", checkIfExists: true) + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() }, + { assert process.out.gtf == [] }, + { assert process.out.gffread_gff == [] } + ) + } + + } + + test("sarscov2-gff3-fasta-stub") { + + options '-stub' + config "./nextflow-fasta.config" + + when { + params { + outdir = "$outputDir" + } + process { + """ + input[0] = [ + [id: 'test'], + file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.gff3", checkIfExists: true) + ] + input[1] = file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.fasta", checkIfExists: true) + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() }, + { assert process.out.gtf == [] }, + { assert process.out.gffread_gff == [] } + ) + } + + } + + test("sarscov2-gff3-fasta-fail-catch") { + + options '-stub' + config "./nextflow-fasta.config" + + when { + params { + outdir = "$outputDir" + } + process { + """ + input[0] = [ + [id: 'genome'], + file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.gff3", checkIfExists: true) + ] + input[1] = file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.fasta", checkIfExists: true) + """ + } + } + + then { + assertAll ( + { assert ! process.success }, + { assert process.stdout.toString().contains("Input and output names are the same") } + ) + } + + } + +} diff --git a/modules/gallvp/gffread/tests/main.nf.test.snap b/modules/gallvp/gffread/tests/main.nf.test.snap new file mode 100644 index 0000000..1526232 --- /dev/null +++ b/modules/gallvp/gffread/tests/main.nf.test.snap @@ -0,0 +1,272 @@ +{ + "sarscov2-gff3-gtf": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.gtf:md5,1ea0ae98d3388e0576407dc4a24ef428" + ] + ], + "1": [ + + ], + "2": [ + + ], + "3": [ + "versions.yml:md5,05f671c6c6e530acedad0af0a5948dbd" + ], + "gffread_fasta": [ + + ], + "gffread_gff": [ + + ], + "gtf": [ + [ + { + "id": "test" + }, + "test.gtf:md5,1ea0ae98d3388e0576407dc4a24ef428" + ] + ], + "versions": [ + "versions.yml:md5,05f671c6c6e530acedad0af0a5948dbd" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-04-09T10:48:56.496187" + }, + "sarscov2-gff3-gff3": { + "content": [ + { + "0": [ + + ], + "1": [ + [ + { + "id": "test" + }, + "test.gff3:md5,c4e5da6267c6bee5899a2c204ae1ad91" + ] + ], + "2": [ + + ], + "3": [ + "versions.yml:md5,05f671c6c6e530acedad0af0a5948dbd" + ], + "gffread_fasta": [ + + ], + "gffread_gff": [ + [ + { + "id": "test" + }, + "test.gff3:md5,c4e5da6267c6bee5899a2c204ae1ad91" + ] + ], + "gtf": [ + + ], + "versions": [ + "versions.yml:md5,05f671c6c6e530acedad0af0a5948dbd" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-04-09T10:49:00.892782" + }, + "sarscov2-gff3-gtf-stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.gtf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + + ], + "2": [ + + ], + "3": [ + "versions.yml:md5,05f671c6c6e530acedad0af0a5948dbd" + ], + "gffread_fasta": [ + + ], + "gffread_gff": [ + + ], + "gtf": [ + [ + { + "id": "test" + }, + "test.gtf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,05f671c6c6e530acedad0af0a5948dbd" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-04-09T11:11:26.975666" + }, + "sarscov2-gff3-fasta-stub": { + "content": [ + { + "0": [ + + ], + "1": [ + + ], + "2": [ + [ + { + "id": "test" + }, + "test.fasta:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + "versions.yml:md5,05f671c6c6e530acedad0af0a5948dbd" + ], + "gffread_fasta": [ + [ + { + "id": "test" + }, + "test.fasta:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "gffread_gff": [ + + ], + "gtf": [ + + ], + "versions": [ + "versions.yml:md5,05f671c6c6e530acedad0af0a5948dbd" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-04-09T11:11:44.34792" + }, + "sarscov2-gff3-gff3-stub": { + "content": [ + { + "0": [ + + ], + "1": [ + [ + { + "id": "test" + }, + "test.gff3:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + + ], + "3": [ + "versions.yml:md5,05f671c6c6e530acedad0af0a5948dbd" + ], + "gffread_fasta": [ + + ], + "gffread_gff": [ + [ + { + "id": "test" + }, + "test.gff3:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "gtf": [ + + ], + "versions": [ + "versions.yml:md5,05f671c6c6e530acedad0af0a5948dbd" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-04-09T11:11:35.221671" + }, + "sarscov2-gff3-fasta": { + "content": [ + { + "0": [ + + ], + "1": [ + + ], + "2": [ + [ + { + "id": "test" + }, + "test.fasta:md5,5f8108fb51739a0588ccf0a251de919a" + ] + ], + "3": [ + "versions.yml:md5,05f671c6c6e530acedad0af0a5948dbd" + ], + "gffread_fasta": [ + [ + { + "id": "test" + }, + "test.fasta:md5,5f8108fb51739a0588ccf0a251de919a" + ] + ], + "gffread_gff": [ + + ], + "gtf": [ + + ], + "versions": [ + "versions.yml:md5,05f671c6c6e530acedad0af0a5948dbd" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-04-09T10:54:02.88143" + } +} \ No newline at end of file diff --git a/modules/gallvp/gffread/tests/nextflow-fasta.config b/modules/gallvp/gffread/tests/nextflow-fasta.config new file mode 100644 index 0000000..ac6cb14 --- /dev/null +++ b/modules/gallvp/gffread/tests/nextflow-fasta.config @@ -0,0 +1,5 @@ +process { + withName: GFFREAD { + ext.args = '-w -S' + } +} diff --git a/modules/gallvp/gffread/tests/nextflow-gff3.config b/modules/gallvp/gffread/tests/nextflow-gff3.config new file mode 100644 index 0000000..afe0830 --- /dev/null +++ b/modules/gallvp/gffread/tests/nextflow-gff3.config @@ -0,0 +1,5 @@ +process { + withName: GFFREAD { + ext.args = '' + } +} diff --git a/modules/gallvp/gffread/tests/nextflow.config b/modules/gallvp/gffread/tests/nextflow.config new file mode 100644 index 0000000..74b2509 --- /dev/null +++ b/modules/gallvp/gffread/tests/nextflow.config @@ -0,0 +1,5 @@ +process { + withName: GFFREAD { + ext.args = '-T' + } +} diff --git a/modules/gallvp/gffread/tests/tags.yml b/modules/gallvp/gffread/tests/tags.yml new file mode 100644 index 0000000..0557606 --- /dev/null +++ b/modules/gallvp/gffread/tests/tags.yml @@ -0,0 +1,2 @@ +gffread: + - modules/nf-core/gffread/** diff --git a/modules/gallvp/ltrretriever/lai/environment.yml b/modules/gallvp/ltrretriever/lai/environment.yml new file mode 100644 index 0000000..e0e4968 --- /dev/null +++ b/modules/gallvp/ltrretriever/lai/environment.yml @@ -0,0 +1,9 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json +name: "ltrretriever_lai" +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - "bioconda::LTR_retriever=2.9.9" diff --git a/modules/gallvp/ltrretriever/lai/main.nf b/modules/gallvp/ltrretriever/lai/main.nf new file mode 100644 index 0000000..464b215 --- /dev/null +++ b/modules/gallvp/ltrretriever/lai/main.nf @@ -0,0 +1,71 @@ +process LTRRETRIEVER_LAI { + tag "$meta.id" + label 'process_medium' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/ltr_retriever:2.9.9--hdfd78af_0': + 'biocontainers/ltr_retriever:2.9.9--hdfd78af_0' }" + + input: + tuple val(meta), path(fasta) + path pass_list + path annotation_out + path monoploid_seqs + + output: + tuple val(meta), path("*.LAI.log") , emit: log + tuple val(meta), path("*.LAI.out") , emit: lai_out , optional: true + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def monoploid_param = monoploid_seqs ? "-mono $monoploid_seqs" : '' + def lai_output_name = monoploid_seqs ? "${annotation_out}.${monoploid_seqs}.out.LAI" : "${annotation_out}.LAI" + def VERSION = 'beta3.2' // WARN: Version information not provided by tool on CLI. Please update this string when bumping container versions. + """ + LAI \\ + -genome $fasta \\ + -intact $pass_list \\ + -all $annotation_out \\ + -t $task.cpus \\ + $monoploid_param \\ + $args \\ + > >(tee "${prefix}.LAI.log") \\ + || echo "LAI failed! See ${prefix}.LAI.log" + + mv \\ + $lai_output_name \\ + "${prefix}.LAI.out" \\ + || echo "LAI failed to estimate assembly index. See ${prefix}.LAI.log" + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + lai: $VERSION + END_VERSIONS + """ + + stub: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def monoploid_param = monoploid_seqs ? "-mono $monoploid_seqs" : '' + def lai_output_name = monoploid_seqs ? "${annotation_out}.${monoploid_seqs}.out.LAI" : "${annotation_out}.LAI" + def VERSION = 'beta3.2' // WARN: Version information not provided by tool on CLI. Please update this string when bumping container versions. + """ + touch "${prefix}.LAI.log" + touch "$lai_output_name" + + mv \\ + $lai_output_name \\ + "${prefix}.LAI.out" + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + lai: $VERSION + END_VERSIONS + """ +} diff --git a/modules/gallvp/ltrretriever/lai/meta.yml b/modules/gallvp/ltrretriever/lai/meta.yml new file mode 100644 index 0000000..f84cf6c --- /dev/null +++ b/modules/gallvp/ltrretriever/lai/meta.yml @@ -0,0 +1,70 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/meta-schema.json +name: "ltrretriever_lai" +description: | + Estimates the mean LTR sequence identity in the genome. The input genome fasta should + have short alphanumeric IDs without comments +keywords: + - genomics + - annotation + - repeat + - long terminal retrotransposon + - retrotransposon + - stats + - qc +tools: + - "lai": + description: Assessing genome assembly quality using the LTR Assembly Index (LAI) + homepage: "https://github.com/oushujun/LTR_retriever" + documentation: "https://github.com/oushujun/LTR_retriever" + tool_dev_url: "https://github.com/oushujun/LTR_retriever" + doi: "10.1093/nar/gky730" + licence: ["GPL v3"] +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1' ]` + - fasta: + type: file + description: The genome file that is used to generate everything + pattern: "*.{fsa,fa,fasta}" + - pass_list: + type: file + description: A list of intact LTR-RTs generated by LTR_retriever + pattern: "*.pass.list" + - annotation_out: + type: file + description: RepeatMasker annotation of all LTR sequences in the genome + pattern: "*.out" + - monoploid_seqs: + type: file + description: | + This parameter is mainly for ployploid genomes. User provides a list of + sequence names that represent a monoploid (1x). LAI will be calculated only + on these sequences if provided. + pattern: "*.txt" +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1', single_end:false ]` + - log: + type: file + description: Log from LAI + pattern: "*.LAI.log" + - lai_out: + type: file + description: | + Output file from LAI if LAI is able to estimate the index from the inputs + pattern: "*.LAI.out" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@GallVp" +maintainers: + - "@GallVp" diff --git a/modules/gallvp/ltrretriever/lai/tests/main.nf.test b/modules/gallvp/ltrretriever/lai/tests/main.nf.test new file mode 100644 index 0000000..e428918 --- /dev/null +++ b/modules/gallvp/ltrretriever/lai/tests/main.nf.test @@ -0,0 +1,166 @@ +nextflow_process { + + name "Test Process LTRRETRIEVER_LAI" + script "../main.nf" + process "LTRRETRIEVER_LAI" + config "./nextflow.config" + + tag "modules" + tag "modules_gallvp" + tag "gunzip" + tag "ltrretriever" + tag "ltrretriever/ltrretriever" + tag "ltrretriever/lai" + tag "ltrharvest" + tag "ltrfinder" + tag "cat/cat" + + test("actinidia_chinensis-genome_21_fasta_gz-success") { + + setup { + + run("GUNZIP") { + script "../../../gunzip" + + process { + """ + input[0] = [ + [ id:'test' ], + file(params.modules_testdata_base_path + 'genomics/eukaryotes/actinidia_chinensis/genome/chr1/genome.fasta.gz', checkIfExists: true) + ] + """ + } + } + + run("LTRHARVEST") { + script "../../../ltrharvest" + + process { + """ + input[0] = GUNZIP.out.gunzip + """ + } + } + + run("LTRFINDER") { + script "../../../ltrfinder" + + process { + """ + input[0] = GUNZIP.out.gunzip + """ + } + } + + run("CAT_CAT") { + script "../../../cat/cat" + + process { + """ + input[0] = LTRHARVEST.out.scn.mix(LTRFINDER.out.scn).groupTuple() + """ + } + } + + run("LTRRETRIEVER_LTRRETRIEVER") { + script "../../ltrretriever" + + process { + """ + input[0] = GUNZIP.out.gunzip + input[1] = CAT_CAT.out.file_out.map { meta, tabout -> tabout } + input[2] = [] + input[3] = [] + input[4] = [] + """ + } + } + } + + when { + process { + """ + input[0] = GUNZIP.out.gunzip + input[1] = LTRRETRIEVER_LTRRETRIEVER.out.pass_list.map { meta, pass_list -> pass_list } + input[2] = LTRRETRIEVER_LTRRETRIEVER.out.annotation_out.map { meta, annotation_out -> annotation_out } + input[3] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert path(process.out.log[0][1]).text.contains("Dependency checking: Passed!") }, + { assert path(process.out.log[0][1]).text.contains("Calculate LAI:") }, + { assert path(process.out.log[0][1]).text.contains("Done!") }, + { assert path(process.out.log[0][1]).text.contains("Result file:") }, + { assert Math.abs(Float.parseFloat(path(process.out.lai_out[0][1]).text.split("\n")[1].split("\t")[6]) - 31.29) <= 1.0 } + ) + } + + } + + test("stub") { + + options '-stub' + + when { + process { + """ + def pass_list = new File('test.pass.list') + def out_file = new File('test.out') + def monoploid_seqs = new File('some_seqs.list.txt') + + input[0] = [ + [ id:'test' ], + file(params.modules_testdata_base_path + 'genomics/eukaryotes/actinidia_chinensis/genome/chr1/genome.fasta.gz', checkIfExists: true) + ] + input[1] = pass_list.toPath() + input[2] = out_file.toPath() + input[3] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("stub_with_monoploid_seqs") { + + options '-stub' + + when { + process { + """ + def pass_list = new File('test.pass.list') + def out_file = new File('test.out') + def monoploid_seqs = new File('some_seqs.list.txt') + + input[0] = [ + [ id:'test' ], + file(params.modules_testdata_base_path + 'genomics/eukaryotes/actinidia_chinensis/genome/chr1/genome.fasta.gz', checkIfExists: true) + ] + input[1] = pass_list.toPath() + input[2] = out_file.toPath() + input[3] = monoploid_seqs.toPath() + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + +} diff --git a/modules/gallvp/ltrretriever/lai/tests/main.nf.test.snap b/modules/gallvp/ltrretriever/lai/tests/main.nf.test.snap new file mode 100644 index 0000000..e1c8086 --- /dev/null +++ b/modules/gallvp/ltrretriever/lai/tests/main.nf.test.snap @@ -0,0 +1,100 @@ +{ + "stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.LAI.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test" + }, + "test.LAI.out:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + "versions.yml:md5,e04e27f9408e771795cd44d96518b7cd" + ], + "lai_out": [ + [ + { + "id": "test" + }, + "test.LAI.out:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "log": [ + [ + { + "id": "test" + }, + "test.LAI.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,e04e27f9408e771795cd44d96518b7cd" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-02-22T20:09:00.558021" + }, + "stub_with_monoploid_seqs": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.LAI.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test" + }, + "test.LAI.out:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + "versions.yml:md5,e04e27f9408e771795cd44d96518b7cd" + ], + "lai_out": [ + [ + { + "id": "test" + }, + "test.LAI.out:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "log": [ + [ + { + "id": "test" + }, + "test.LAI.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,e04e27f9408e771795cd44d96518b7cd" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-02-22T20:10:08.213842" + } +} \ No newline at end of file diff --git a/modules/gallvp/ltrretriever/lai/tests/nextflow.config b/modules/gallvp/ltrretriever/lai/tests/nextflow.config new file mode 100644 index 0000000..75edf1a --- /dev/null +++ b/modules/gallvp/ltrretriever/lai/tests/nextflow.config @@ -0,0 +1,15 @@ +process { + + withName: LTRHARVEST { + ext.prefix = { "${meta.id}_ltrharvest" } + } + + withName: LTRFINDER { + ext.args = '-harvest_out -size 1000000 -time 300' + // recommended parameters: https://github.com/oushujun/LTR_retriever#usage + } + + withName: CAT_CAT { + ext.prefix = { "${meta.id}_ltrharvest_ltrfinder.tabout" } + } +} diff --git a/modules/gallvp/ltrretriever/lai/tests/tags.yml b/modules/gallvp/ltrretriever/lai/tests/tags.yml new file mode 100644 index 0000000..470f468 --- /dev/null +++ b/modules/gallvp/ltrretriever/lai/tests/tags.yml @@ -0,0 +1,2 @@ +ltrretriever/lai: + - "modules/nf-core/ltrretriever/lai/**" diff --git a/modules/gallvp/repeatmasker/repeatmasker/environment.yml b/modules/gallvp/repeatmasker/repeatmasker/environment.yml new file mode 100644 index 0000000..efc290a --- /dev/null +++ b/modules/gallvp/repeatmasker/repeatmasker/environment.yml @@ -0,0 +1,9 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json +name: "repeatmasker_repeatmasker" +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - "bioconda::repeatmasker=4.1.5" diff --git a/modules/gallvp/repeatmasker/repeatmasker/main.nf b/modules/gallvp/repeatmasker/repeatmasker/main.nf new file mode 100644 index 0000000..4b17414 --- /dev/null +++ b/modules/gallvp/repeatmasker/repeatmasker/main.nf @@ -0,0 +1,62 @@ +process REPEATMASKER_REPEATMASKER { + tag "$meta.id" + label 'process_high' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/repeatmasker:4.1.5--pl5321hdfd78af_0': + 'biocontainers/repeatmasker:4.1.5--pl5321hdfd78af_0' }" + + input: + tuple val(meta), path(fasta) + path(lib) + + output: + tuple val(meta), path("${prefix}.masked") , emit: masked + tuple val(meta), path("${prefix}.out") , emit: out + tuple val(meta), path("${prefix}.tbl") , emit: tbl + tuple val(meta), path("${prefix}.gff") , emit: gff , optional: true + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + prefix = task.ext.prefix ?: "${meta.id}" + def lib_arg = lib ? "-lib $lib" : '' + """ + RepeatMasker \\ + $lib_arg \\ + -pa ${task.cpus} \\ + -dir ${prefix} \\ + ${args} \\ + ${fasta} + + mv $prefix/${fasta}.masked ${prefix}.masked + mv $prefix/${fasta}.out ${prefix}.out + mv $prefix/${fasta}.tbl ${prefix}.tbl + mv $prefix/${fasta}.out.gff ${prefix}.gff || echo "GFF is not produced" + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + repeatmasker: \$(RepeatMasker -v | sed 's/RepeatMasker version //1') + END_VERSIONS + """ + + stub: + prefix = task.ext.prefix ?: "${meta.id}" + def args = task.ext.args ?: '' + def touch_gff = args.contains('-gff') ? "touch ${prefix}.gff" : '' + """ + touch ${prefix}.masked + touch ${prefix}.out + touch ${prefix}.tbl + $touch_gff + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + repeatmasker: \$(RepeatMasker -v | sed 's/RepeatMasker version //1') + END_VERSIONS + """ +} diff --git a/modules/gallvp/repeatmasker/repeatmasker/meta.yml b/modules/gallvp/repeatmasker/repeatmasker/meta.yml new file mode 100644 index 0000000..059e225 --- /dev/null +++ b/modules/gallvp/repeatmasker/repeatmasker/meta.yml @@ -0,0 +1,64 @@ +name: repeatmasker_repeatmasker +description: | + Screening DNA sequences for interspersed repeats and low complexity DNA sequences + +keywords: + - genome + - annotation + - repeat + - mask + +tools: + - repeatmasker: + description: | + RepeatMasker is a program that screens DNA sequences for interspersed + repeats and low complexity DNA sequences + homepage: "https://www.repeatmasker.org/" + documentation: "https://www.repeatmasker.org/webrepeatmaskerhelp.html" + tool_dev_url: "https://github.com/rmhubley/RepeatMasker" + licence: ["Open Software License v. 2.1"] + +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test' ] + - fasta: + type: file + description: Genome assembly + pattern: "*.{fasta,fa,fas,fsa,faa,fna}" + - lib: + type: file + description: Custom library (e.g. from another species) + pattern: "*.{fasta,fa,fas,fsa,faa,fna}" + +output: + - masked: + type: file + description: Masked fasta + pattern: "*.masked" + - out: + type: file + description: Out file + pattern: "*.out" + - tbl: + type: file + description: tbl file + pattern: "*.tbl" + - gff: + type: file + description: GFF file + pattern: "*.gff" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" + +authors: + - "@kherronism" + - "@gallvp" + +maintainers: + - "@kherronism" + - "@gallvp" diff --git a/modules/gallvp/repeatmasker/repeatmasker/tests/main.nf.test b/modules/gallvp/repeatmasker/repeatmasker/tests/main.nf.test new file mode 100644 index 0000000..d55e5f4 --- /dev/null +++ b/modules/gallvp/repeatmasker/repeatmasker/tests/main.nf.test @@ -0,0 +1,68 @@ +nextflow_process { + + name "Test Process REPEATMASKER_REPEATMASKER" + script "../main.nf" + process "REPEATMASKER_REPEATMASKER" + + tag "modules" + tag "modules_gallvp" + tag "repeatmasker" + tag "repeatmasker/repeatmasker" + + test("sarscov2 - genome - fasta") { + + config "./nextflow.config" + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ] + input[1] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.masked, + process.out.out, + process.out.gff, + process.out.versions + ).match() }, + { assert file(process.out.tbl[0][1]).text.contains('run with rmblastn') } + ) + } + + } + + test("sarscov2 - genome - fasta - stub") { + + options '-stub' + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ] + input[1] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + +} diff --git a/modules/gallvp/repeatmasker/repeatmasker/tests/main.nf.test.snap b/modules/gallvp/repeatmasker/repeatmasker/tests/main.nf.test.snap new file mode 100644 index 0000000..2e584de --- /dev/null +++ b/modules/gallvp/repeatmasker/repeatmasker/tests/main.nf.test.snap @@ -0,0 +1,118 @@ +{ + "sarscov2 - genome - fasta": { + "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + "test.masked:md5,c0eb8dd958ce3b4b1fdc7fcb6b0d5161" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.out:md5,8610cb2b8d87356bf2ab0a895c065752" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.gff:md5,289cdcae609a8c450a20080107ea6351" + ] + ], + [ + "versions.yml:md5,1386abb5112b809c321da8ddc598c573" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.3" + }, + "timestamp": "2024-08-07T14:25:15.979032" + }, + "sarscov2 - genome - fasta - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.masked:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.out:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test.tbl:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + + ], + "4": [ + "versions.yml:md5,1386abb5112b809c321da8ddc598c573" + ], + "gff": [ + + ], + "masked": [ + [ + { + "id": "test", + "single_end": false + }, + "test.masked:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "out": [ + [ + { + "id": "test", + "single_end": false + }, + "test.out:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "tbl": [ + [ + { + "id": "test", + "single_end": false + }, + "test.tbl:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,1386abb5112b809c321da8ddc598c573" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.3" + }, + "timestamp": "2024-08-07T13:39:51.365612" + } +} \ No newline at end of file diff --git a/modules/gallvp/repeatmasker/repeatmasker/tests/nextflow.config b/modules/gallvp/repeatmasker/repeatmasker/tests/nextflow.config new file mode 100644 index 0000000..6e4b600 --- /dev/null +++ b/modules/gallvp/repeatmasker/repeatmasker/tests/nextflow.config @@ -0,0 +1,5 @@ +process { + withName: REPEATMASKER_REPEATMASKER { + ext.args = '-no_is -gff' // Not required but significantly cuts the runtime + } +} diff --git a/modules/nf-core/agat/convertspgff2gtf/environment.yml b/modules/nf-core/agat/convertspgff2gtf/environment.yml new file mode 100644 index 0000000..6747331 --- /dev/null +++ b/modules/nf-core/agat/convertspgff2gtf/environment.yml @@ -0,0 +1,7 @@ +name: agat_convertspgff2gtf +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bioconda::agat=1.4.0 diff --git a/modules/nf-core/agat/convertspgff2gtf/main.nf b/modules/nf-core/agat/convertspgff2gtf/main.nf new file mode 100644 index 0000000..38af025 --- /dev/null +++ b/modules/nf-core/agat/convertspgff2gtf/main.nf @@ -0,0 +1,48 @@ +process AGAT_CONVERTSPGFF2GTF { + tag "$meta.id" + label 'process_single' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/agat:1.4.0--pl5321hdfd78af_0' : + 'biocontainers/agat:1.4.0--pl5321hdfd78af_0' }" + + input: + tuple val(meta), path(gff) + + output: + tuple val(meta), path("*.agat.gtf"), emit: output_gtf + tuple val(meta), path("*.log"), emit: log + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + """ + agat_convert_sp_gff2gtf.pl \\ + --gff $gff \\ + --output ${prefix}.agat.gtf \\ + $args + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + agat: \$(agat_convert_sp_gff2gtf.pl --help | sed -n 's/.*(AGAT) - Version: \\(.*\\) .*/\\1/p') + END_VERSIONS + """ + + stub: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.agat.gtf + touch ${gff}.agat.log + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + agat: \$(agat_convert_sp_gff2gtf.pl --help | sed -n 's/.*(AGAT) - Version: \\(.*\\) .*/\\1/p') + END_VERSIONS + """ +} diff --git a/modules/nf-core/agat/convertspgff2gtf/meta.yml b/modules/nf-core/agat/convertspgff2gtf/meta.yml new file mode 100644 index 0000000..ab39f01 --- /dev/null +++ b/modules/nf-core/agat/convertspgff2gtf/meta.yml @@ -0,0 +1,44 @@ +name: agat_convertspgff2gtf +description: | + Converts a GFF/GTF file into a proper GTF file +keywords: + - genome + - gff + - gtf + - conversion +tools: + - agat: + description: "AGAT is a toolkit for manipulation and getting information from GFF/GTF files" + homepage: "https://github.com/NBISweden/AGAT" + documentation: "https://agat.readthedocs.io/" + tool_dev_url: "https://github.com/NBISweden/AGAT" + doi: "10.5281/zenodo.3552717" + licence: ["GPL v3"] +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - gff: + type: file + description: Annotation file in GFF3/GTF format + pattern: "*.{gff, gtf}" +output: + - output_gtf: + type: file + description: Annotation file in GTF format + pattern: "*.{gtf}" + - log: + type: file + description: Log file of the conversion process + pattern: "*.{log}" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@toniher" +maintainers: + - "@toniher" + - "@gallvp" diff --git a/modules/nf-core/agat/convertspgff2gtf/tests/main.nf.test b/modules/nf-core/agat/convertspgff2gtf/tests/main.nf.test new file mode 100644 index 0000000..401f455 --- /dev/null +++ b/modules/nf-core/agat/convertspgff2gtf/tests/main.nf.test @@ -0,0 +1,62 @@ +nextflow_process { + + name "Test Process AGAT_CONVERTSPGFF2GTF" + script "../main.nf" + process "AGAT_CONVERTSPGFF2GTF" + + tag "modules" + tag "modules_nfcore" + tag "agat" + tag "agat/convertspgff2gtf" + + test("sarscov2 - genome [gff3]") { + + when { + process { + """ + input[0] = [ + [ id: 'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.gff3', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out.output_gtf, + process.out.versions).match() }, + { assert path(process.out.log[0][1]).exists() } + ) + } + + } + + test("sarscov2 - genome [gff3] - stub") { + + options "-stub" + + when { + process { + """ + input[0] = [ + [ id: 'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.gff3', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out.output_gtf.collect { file(it[1]).getName() } + + process.out.log.collect { file(it[1]).getName() } + + process.out.versions ).match() } + ) + } + + } + +} diff --git a/modules/nf-core/agat/convertspgff2gtf/tests/main.nf.test.snap b/modules/nf-core/agat/convertspgff2gtf/tests/main.nf.test.snap new file mode 100644 index 0000000..4088c71 --- /dev/null +++ b/modules/nf-core/agat/convertspgff2gtf/tests/main.nf.test.snap @@ -0,0 +1,36 @@ +{ + "sarscov2 - genome [gff3] - stub": { + "content": [ + [ + "test.agat.gtf", + "genome.gff3.agat.log", + "versions.yml:md5,dcc621fac77aa683287f6a0d61e10395" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-05-08T10:05:11.177573" + }, + "sarscov2 - genome [gff3]": { + "content": [ + [ + [ + { + "id": "test" + }, + "test.agat.gtf:md5,be1c396ac00fd5a84dc08a36d84ff8c5" + ] + ], + [ + "versions.yml:md5,dcc621fac77aa683287f6a0d61e10395" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-05-08T10:05:06.695419" + } +} \ No newline at end of file diff --git a/modules/nf-core/agat/convertspgff2gtf/tests/tags.yml b/modules/nf-core/agat/convertspgff2gtf/tests/tags.yml new file mode 100644 index 0000000..7a59648 --- /dev/null +++ b/modules/nf-core/agat/convertspgff2gtf/tests/tags.yml @@ -0,0 +1,2 @@ +agat/convertspgff2gtf: + - "modules/nf-core/agat/convertspgff2gtf/**" diff --git a/modules/nf-core/agat/convertspgxf2gxf/environment.yml b/modules/nf-core/agat/convertspgxf2gxf/environment.yml new file mode 100644 index 0000000..6ed34fa --- /dev/null +++ b/modules/nf-core/agat/convertspgxf2gxf/environment.yml @@ -0,0 +1,7 @@ +name: agat_convertspgxf2gxf +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bioconda::agat=1.4.0 diff --git a/modules/nf-core/agat/convertspgxf2gxf/main.nf b/modules/nf-core/agat/convertspgxf2gxf/main.nf new file mode 100644 index 0000000..b9a7668 --- /dev/null +++ b/modules/nf-core/agat/convertspgxf2gxf/main.nf @@ -0,0 +1,48 @@ +process AGAT_CONVERTSPGXF2GXF { + tag "$meta.id" + label 'process_single' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/agat:1.4.0--pl5321hdfd78af_0' : + 'biocontainers/agat:1.4.0--pl5321hdfd78af_0' }" + + input: + tuple val(meta), path(gxf) + + output: + tuple val(meta), path("*.agat.gff") , emit: output_gff + tuple val(meta), path("*.log") , emit: log + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + """ + agat_convert_sp_gxf2gxf.pl \\ + --gxf $gxf \\ + --output ${prefix}.agat.gff \\ + $args + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + agat: \$(agat_convert_sp_gxf2gxf.pl --help | sed -n 's/.*(AGAT) - Version: \\(.*\\) .*/\\1/p') + END_VERSIONS + """ + + stub: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.agat.gff + touch ${gxf}.agat.log + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + agat: \$(agat_convert_sp_gxf2gxf.pl --help | sed -n 's/.*(AGAT) - Version: \\(.*\\) .*/\\1/p') + END_VERSIONS + """ +} diff --git a/modules/nf-core/agat/convertspgxf2gxf/meta.yml b/modules/nf-core/agat/convertspgxf2gxf/meta.yml new file mode 100644 index 0000000..0ef9881 --- /dev/null +++ b/modules/nf-core/agat/convertspgxf2gxf/meta.yml @@ -0,0 +1,43 @@ +name: agat_convertspgxf2gxf +description: | + Fixes and standardizes GFF/GTF files and outputs a cleaned GFF/GTF file +keywords: + - genome + - gff + - gtf + - conversion +tools: + - agat: + description: "AGAT is a toolkit for manipulation and getting information from GFF/GTF files" + homepage: "https://github.com/NBISweden/AGAT" + documentation: "https://agat.readthedocs.io/" + tool_dev_url: "https://github.com/NBISweden/AGAT" + doi: "10.5281/zenodo.3552717" + licence: ["GPL v3"] +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - gxf: + type: file + description: Annotation file in GFF3/GTF format + pattern: "*.{gff, gtf}" +output: + - output_gff: + type: file + description: Cleaned annotation file in GFF3 format + pattern: "*.{gff}" + - log: + type: file + description: Log file of the conversion process + pattern: "*.{log}" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@toniher" +maintainers: + - "@toniher" diff --git a/modules/nf-core/agat/convertspgxf2gxf/tests/main.nf.test b/modules/nf-core/agat/convertspgxf2gxf/tests/main.nf.test new file mode 100644 index 0000000..d8d7bc2 --- /dev/null +++ b/modules/nf-core/agat/convertspgxf2gxf/tests/main.nf.test @@ -0,0 +1,60 @@ +nextflow_process { + + name "Test Process AGAT_CONVERTSPGXF2GXF" + script "../main.nf" + process "AGAT_CONVERTSPGXF2GXF" + + tag "modules" + tag "modules_nfcore" + tag "agat" + tag "agat/convertspgxf2gxf" + + test("sarscov2 genome [gtf]") { + + when { + process { + """ + input[0] = [ + [ id: 'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.gtf', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out.output_gff, + process.out.versions).match() }, + { assert path(process.out.log[0][1]).exists() } + ) + } + + } + + test("sarscov2 genome [gtf] - stub") { + + options "-stub" + + when { + process { + """ + input[0] = [ + [ id: 'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.gtf', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + +} diff --git a/modules/nf-core/agat/convertspgxf2gxf/tests/main.nf.test.snap b/modules/nf-core/agat/convertspgxf2gxf/tests/main.nf.test.snap new file mode 100644 index 0000000..e89073f --- /dev/null +++ b/modules/nf-core/agat/convertspgxf2gxf/tests/main.nf.test.snap @@ -0,0 +1,71 @@ +{ + "sarscov2 genome [gtf] - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.agat.gff:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test" + }, + "genome.gtf.agat.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + "versions.yml:md5,5ec6166c5c080ec4bc08a8fe55ada486" + ], + "log": [ + [ + { + "id": "test" + }, + "genome.gtf.agat.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "output_gff": [ + [ + { + "id": "test" + }, + "test.agat.gff:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,5ec6166c5c080ec4bc08a8fe55ada486" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-04-12T12:25:34.583294" + }, + "sarscov2 genome [gtf]": { + "content": [ + [ + [ + { + "id": "test" + }, + "test.agat.gff:md5,7d7e9bcd82a2f0bb7d8a38f85e82f0bc" + ] + ], + [ + "versions.yml:md5,5ec6166c5c080ec4bc08a8fe55ada486" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-04-12T12:21:21.310464" + } +} \ No newline at end of file diff --git a/modules/nf-core/agat/convertspgxf2gxf/tests/tags.yml b/modules/nf-core/agat/convertspgxf2gxf/tests/tags.yml new file mode 100644 index 0000000..85c7000 --- /dev/null +++ b/modules/nf-core/agat/convertspgxf2gxf/tests/tags.yml @@ -0,0 +1,2 @@ +agat/convertspgxf2gxf: + - "modules/nf-core/agat/convertspgxf2gxf/**" diff --git a/modules/nf-core/agat/spfilterfeaturefromkilllist/environment.yml b/modules/nf-core/agat/spfilterfeaturefromkilllist/environment.yml new file mode 100644 index 0000000..fb2df48 --- /dev/null +++ b/modules/nf-core/agat/spfilterfeaturefromkilllist/environment.yml @@ -0,0 +1,9 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json +name: "agat_spfilterfeaturefromkilllist" +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - "bioconda::agat=1.4.0" diff --git a/modules/nf-core/agat/spfilterfeaturefromkilllist/main.nf b/modules/nf-core/agat/spfilterfeaturefromkilllist/main.nf new file mode 100644 index 0000000..4918ed7 --- /dev/null +++ b/modules/nf-core/agat/spfilterfeaturefromkilllist/main.nf @@ -0,0 +1,53 @@ +process AGAT_SPFILTERFEATUREFROMKILLLIST { + tag "$meta.id" + label 'process_single' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/agat:1.4.0--pl5321hdfd78af_0': + 'biocontainers/agat:1.4.0--pl5321hdfd78af_0' }" + + input: + tuple val(meta), path(gff) + path kill_list + path config + + output: + tuple val(meta), path("*.gff"), emit: gff + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def config_param = config ? "--config $config" : '' + if( "$gff" == "${prefix}.gff" ) error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!" + """ + agat_sp_filter_feature_from_kill_list.pl \\ + --gff $gff \\ + --kill_list $kill_list \\ + $config_param \\ + $args \\ + --output "${prefix}.gff" + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + agat: \$(agat_sp_filter_feature_from_kill_list.pl -h | sed -n 's/.*(AGAT) - Version: \\(.*\\) .*/\\1/p') + END_VERSIONS + """ + + stub: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + if( "$gff" == "${prefix}.gff" ) error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!" + """ + touch "${prefix}.gff" + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + agat: \$(agat_sp_filter_feature_from_kill_list.pl -h | sed -n 's/.*(AGAT) - Version: \\(.*\\) .*/\\1/p') + END_VERSIONS + """ +} diff --git a/modules/nf-core/agat/spfilterfeaturefromkilllist/meta.yml b/modules/nf-core/agat/spfilterfeaturefromkilllist/meta.yml new file mode 100644 index 0000000..d408fe7 --- /dev/null +++ b/modules/nf-core/agat/spfilterfeaturefromkilllist/meta.yml @@ -0,0 +1,60 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/meta-schema.json +name: "agat_spfilterfeaturefromkilllist" +description: | + The script aims to remove features based on a kill list. The default behaviour is to look at the features's ID. + If the feature has an ID (case insensitive) listed among the kill list it will be removed. /!\ Removing a level1 + or level2 feature will automatically remove all linked subfeatures, and removing all children of a feature will + automatically remove this feature too. +keywords: + - genomics + - gff + - remove + - feature +tools: + - "agat": + description: "Another Gff Analysis Toolkit (AGAT). Suite of tools to handle gene annotations in any GTF/GFF format." + homepage: "https://agat.readthedocs.io/en/latest/" + documentation: "https://agat.readthedocs.io/en/latest/tools/agat_sp_filter_feature_from_kill_list.html" + tool_dev_url: "https://github.com/NBISweden/AGAT" + doi: "10.5281/zenodo.3552717" + licence: ["GPL v3"] +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1', single_end:false ]` + - gff: + type: file + description: Input GFF3 file that will be read + pattern: "*.{gff,gff3}" + - kill_list: + type: file + description: Kill list. One value per line. + pattern: "*.txt" + - config: + type: file + description: | + Input agat config file. By default AGAT takes as input agat_config.yaml file from the working directory if any, otherwise it takes the orignal agat_config.yaml shipped with AGAT. To get the agat_config.yaml locally type: "agat config --expose". The --config option gives you the possibility to use your own AGAT config file (located elsewhere or named differently). + pattern: "*.yaml" + +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1', single_end:false ] + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" + - gff: + type: file + description: Output GFF file. + pattern: "*.gff" + +authors: + - "@GallVp" +maintainers: + - "@GallVp" diff --git a/modules/nf-core/agat/spfilterfeaturefromkilllist/tests/main.nf.test b/modules/nf-core/agat/spfilterfeaturefromkilllist/tests/main.nf.test new file mode 100644 index 0000000..82a3c30 --- /dev/null +++ b/modules/nf-core/agat/spfilterfeaturefromkilllist/tests/main.nf.test @@ -0,0 +1,104 @@ +nextflow_process { + + name "Test Process AGAT_SPFILTERFEATUREFROMKILLLIST" + script "../main.nf" + process "AGAT_SPFILTERFEATUREFROMKILLLIST" + + tag "modules" + tag "modules_nfcore" + tag "agat" + tag "agat/spfilterfeaturefromkilllist" + + test("sarscov2 - gff3") { + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.gff3', checkIfExists: true) + ] + + def kill_list = "unknown_transcript_1" + def kill_list_file = new File('kill.list.txt') + kill_list_file.text = kill_list + + input[1] = kill_list_file.toPath() + + input[2] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("sarscov2 - gff3 - config") { + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.gff3', checkIfExists: true) + ] + + def kill_list = "unknown_transcript_1" + def kill_list_file = new File('kill.list.txt') + kill_list_file.text = kill_list + + input[1] = kill_list_file.toPath() + + input[2] = file(params.modules_testdata_base_path + 'generic/config/agat_config.yaml', checkIfExists: true) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("sarscov2 - gff3 - stub") { + + options "-stub" + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.gff3', checkIfExists: true) + ] + + def kill_list = "unknown_transcript_1" + def kill_list_file = new File('kill.list.txt') + kill_list_file.text = kill_list + + input[1] = kill_list_file.toPath() + + input[2] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + +} \ No newline at end of file diff --git a/modules/nf-core/agat/spfilterfeaturefromkilllist/tests/main.nf.test.snap b/modules/nf-core/agat/spfilterfeaturefromkilllist/tests/main.nf.test.snap new file mode 100644 index 0000000..8322d0f --- /dev/null +++ b/modules/nf-core/agat/spfilterfeaturefromkilllist/tests/main.nf.test.snap @@ -0,0 +1,101 @@ +{ + "sarscov2 - gff3 - config": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.gff:md5,df19e1b84ba6f691d20c72b397c88abf" + ] + ], + "1": [ + "versions.yml:md5,e2962240799182aee69421c746be183a" + ], + "gff": [ + [ + { + "id": "test" + }, + "test.gff:md5,df19e1b84ba6f691d20c72b397c88abf" + ] + ], + "versions": [ + "versions.yml:md5,e2962240799182aee69421c746be183a" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-03T15:32:54.707393" + }, + "sarscov2 - gff3 - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.gff:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + "versions.yml:md5,e2962240799182aee69421c746be183a" + ], + "gff": [ + [ + { + "id": "test" + }, + "test.gff:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,e2962240799182aee69421c746be183a" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-03T15:32:59.888053" + }, + "sarscov2 - gff3": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.gff:md5,df19e1b84ba6f691d20c72b397c88abf" + ] + ], + "1": [ + "versions.yml:md5,e2962240799182aee69421c746be183a" + ], + "gff": [ + [ + { + "id": "test" + }, + "test.gff:md5,df19e1b84ba6f691d20c72b397c88abf" + ] + ], + "versions": [ + "versions.yml:md5,e2962240799182aee69421c746be183a" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-03T15:32:47.772624" + } +} \ No newline at end of file diff --git a/modules/nf-core/agat/spmergeannotations/environment.yml b/modules/nf-core/agat/spmergeannotations/environment.yml new file mode 100644 index 0000000..5644e08 --- /dev/null +++ b/modules/nf-core/agat/spmergeannotations/environment.yml @@ -0,0 +1,9 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json +name: "agat_spmergeannotations" +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - "bioconda::agat=1.4.0" diff --git a/modules/nf-core/agat/spmergeannotations/main.nf b/modules/nf-core/agat/spmergeannotations/main.nf new file mode 100644 index 0000000..e0861c0 --- /dev/null +++ b/modules/nf-core/agat/spmergeannotations/main.nf @@ -0,0 +1,53 @@ +process AGAT_SPMERGEANNOTATIONS { + tag "$meta.id" + label 'process_single' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/agat:1.4.0--pl5321hdfd78af_0': + 'biocontainers/agat:1.4.0--pl5321hdfd78af_0' }" + + input: + tuple val(meta), path(gffs) + path config + + output: + tuple val(meta), path("*.gff") , emit: gff + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def config_param = config ? "--config $config" : '' + def file_names = "$gffs".split(' ') + def gff_param = file_names.collect { "--gff $it" }.join(' ') + if ( file_names.contains ( "${prefix}.gff" ) ) error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!" + """ + agat_sp_merge_annotations.pl \\ + $gff_param \\ + $config_param \\ + $args \\ + --output ${prefix}.gff + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + agat: \$(agat_sp_merge_annotations.pl -h | sed -n 's/.*(AGAT) - Version: \\(.*\\) .*/\\1/p') + END_VERSIONS + """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + def file_names = "$gffs".split(' ') + if ( file_names.contains ( "${prefix}.gff" ) ) error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!" + """ + touch ${prefix}.gff + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + agat: \$(agat_sp_merge_annotations.pl -h | sed -n 's/.*(AGAT) - Version: \\(.*\\) .*/\\1/p') + END_VERSIONS + """ +} diff --git a/modules/nf-core/agat/spmergeannotations/meta.yml b/modules/nf-core/agat/spmergeannotations/meta.yml new file mode 100644 index 0000000..afa9ddd --- /dev/null +++ b/modules/nf-core/agat/spmergeannotations/meta.yml @@ -0,0 +1,54 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/meta-schema.json +name: "agat_spmergeannotations" +description: | + This script merge different gff annotation files in one. It uses the AGAT parser that takes care of duplicated names and fixes other oddities met in those files. +keywords: + - genomics + - gff + - merge + - combine +tools: + - "agat": + description: "Another Gff Analysis Toolkit (AGAT). Suite of tools to handle gene annotations in any GTF/GFF format." + homepage: "https://agat.readthedocs.io/en/latest/" + documentation: "https://agat.readthedocs.io/en/latest/tools/agat_sp_merge_annotations.html" + tool_dev_url: "https://github.com/NBISweden/AGAT" + doi: "10.5281/zenodo.3552717" + licence: ["GPL v3"] +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1' ]` + - gffs: + type: list + description: A list of GFFs to merge + pattern: "[ *.{gff,gff3} ]" + - config: + type: file + description: | + Input agat config file. By default AGAT takes as input agat_config.yaml file from the working directory if any, + otherwise it takes the orignal agat_config.yaml shipped with AGAT. To get the agat_config.yaml + locally type: "agat config --expose". The --config option gives you the possibility to use your + own AGAT config file (located elsewhere or named differently). + pattern: "*.yaml" +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1' ]` + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" + - gff: + type: file + description: Output GFF file. + pattern: "*.gff" +authors: + - "@GallVp" +maintainers: + - "@GallVp" diff --git a/modules/nf-core/agat/spmergeannotations/tests/main.nf.test b/modules/nf-core/agat/spmergeannotations/tests/main.nf.test new file mode 100644 index 0000000..3f500fa --- /dev/null +++ b/modules/nf-core/agat/spmergeannotations/tests/main.nf.test @@ -0,0 +1,130 @@ +nextflow_process { + + name "Test Process AGAT_SPMERGEANNOTATIONS" + script "../main.nf" + process "AGAT_SPMERGEANNOTATIONS" + + tag "modules" + tag "modules_nfcore" + tag "agat" + tag "agat/spmergeannotations" + + test("candidatus_portiera_aleyrodidarum - multi_gffs") { + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/prokaryotes/candidatus_portiera_aleyrodidarum/genome/gff/test1.gff', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/prokaryotes/candidatus_portiera_aleyrodidarum/genome/gff/test2.gff', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/prokaryotes/candidatus_portiera_aleyrodidarum/genome/gff/test3.gff', checkIfExists: true) + ] + ] + + input[1] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert path(process.out.gff[0][1]).text.contains('AGAT gene') }, + { assert snapshot(process.out.versions).match("versions") } + ) + } + + } + + test("candidatus_portiera_aleyrodidarum - multi_gffs - stub") { + + options '-stub' + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/prokaryotes/candidatus_portiera_aleyrodidarum/genome/gff/test1.gff', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/prokaryotes/candidatus_portiera_aleyrodidarum/genome/gff/test2.gff', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/prokaryotes/candidatus_portiera_aleyrodidarum/genome/gff/test3.gff', checkIfExists: true) + ] + ] + + input[1] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("candidatus_portiera_aleyrodidarum - multi_gffs - config") { + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/prokaryotes/candidatus_portiera_aleyrodidarum/genome/gff/test1.gff', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/prokaryotes/candidatus_portiera_aleyrodidarum/genome/gff/test2.gff', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/prokaryotes/candidatus_portiera_aleyrodidarum/genome/gff/test3.gff', checkIfExists: true) + ] + ] + + input[1] = file(params.modules_testdata_base_path + 'generic/config/agat_config.yaml', checkIfExists: true) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert path(process.out.gff[0][1]).text.contains('AGAT gene') }, + { assert snapshot(process.out.versions).match("versions_config") } + ) + } + + } + + test("candidatus_portiera_aleyrodidarum - multi_gffs - stub - config") { + + options '-stub' + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/prokaryotes/candidatus_portiera_aleyrodidarum/genome/gff/test1.gff', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/prokaryotes/candidatus_portiera_aleyrodidarum/genome/gff/test2.gff', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/prokaryotes/candidatus_portiera_aleyrodidarum/genome/gff/test3.gff', checkIfExists: true) + ] + ] + + input[1] = file(params.modules_testdata_base_path + 'generic/config/agat_config.yaml', checkIfExists: true) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + +} \ No newline at end of file diff --git a/modules/nf-core/agat/spmergeannotations/tests/main.nf.test.snap b/modules/nf-core/agat/spmergeannotations/tests/main.nf.test.snap new file mode 100644 index 0000000..5b56cd9 --- /dev/null +++ b/modules/nf-core/agat/spmergeannotations/tests/main.nf.test.snap @@ -0,0 +1,92 @@ +{ + "candidatus_portiera_aleyrodidarum - multi_gffs - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.gff:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + "versions.yml:md5,bb159018d6a64ae51339f7c886ad28d7" + ], + "gff": [ + [ + { + "id": "test" + }, + "test.gff:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,bb159018d6a64ae51339f7c886ad28d7" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-15T13:23:28.495387" + }, + "versions": { + "content": [ + [ + "versions.yml:md5,bb159018d6a64ae51339f7c886ad28d7" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-15T13:23:23.220341" + }, + "versions_config": { + "content": [ + [ + "versions.yml:md5,bb159018d6a64ae51339f7c886ad28d7" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-15T13:25:34.519378" + }, + "candidatus_portiera_aleyrodidarum - multi_gffs - stub - config": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.gff:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + "versions.yml:md5,bb159018d6a64ae51339f7c886ad28d7" + ], + "gff": [ + [ + { + "id": "test" + }, + "test.gff:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,bb159018d6a64ae51339f7c886ad28d7" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-15T13:23:43.811463" + } +} \ No newline at end of file diff --git a/modules/nf-core/agat/spmergeannotations/tests/tags.yml b/modules/nf-core/agat/spmergeannotations/tests/tags.yml new file mode 100644 index 0000000..de92188 --- /dev/null +++ b/modules/nf-core/agat/spmergeannotations/tests/tags.yml @@ -0,0 +1,2 @@ +agat/spmergeannotations: + - "modules/nf-core/agat/spmergeannotations/**" diff --git a/modules/nf-core/cat/cat/environment.yml b/modules/nf-core/cat/cat/environment.yml new file mode 100644 index 0000000..17a04ef --- /dev/null +++ b/modules/nf-core/cat/cat/environment.yml @@ -0,0 +1,7 @@ +name: cat_cat +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - conda-forge::pigz=2.3.4 diff --git a/modules/nf-core/cat/cat/main.nf b/modules/nf-core/cat/cat/main.nf new file mode 100644 index 0000000..2862c64 --- /dev/null +++ b/modules/nf-core/cat/cat/main.nf @@ -0,0 +1,78 @@ +process CAT_CAT { + tag "$meta.id" + label 'process_low' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/pigz:2.3.4' : + 'biocontainers/pigz:2.3.4' }" + + input: + tuple val(meta), path(files_in) + + output: + tuple val(meta), path("${prefix}"), emit: file_out + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def args2 = task.ext.args2 ?: '' + def file_list = files_in.collect { it.toString() } + + // choose appropriate concatenation tool depending on input and output format + + // | input | output | command1 | command2 | + // |-----------|------------|----------|----------| + // | gzipped | gzipped | cat | | + // | ungzipped | ungzipped | cat | | + // | gzipped | ungzipped | zcat | | + // | ungzipped | gzipped | cat | pigz | + + // Use input file ending as default + prefix = task.ext.prefix ?: "${meta.id}${getFileSuffix(file_list[0])}" + out_zip = prefix.endsWith('.gz') + in_zip = file_list[0].endsWith('.gz') + command1 = (in_zip && !out_zip) ? 'zcat' : 'cat' + command2 = (!in_zip && out_zip) ? "| pigz -c -p $task.cpus $args2" : '' + if(file_list.contains(prefix.trim())) { + error "The name of the input file can't be the same as for the output prefix in the " + + "module CAT_CAT (currently `$prefix`). Please choose a different one." + } + """ + $command1 \\ + $args \\ + ${file_list.join(' ')} \\ + $command2 \\ + > ${prefix} + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + pigz: \$( pigz --version 2>&1 | sed 's/pigz //g' ) + END_VERSIONS + """ + + stub: + def file_list = files_in.collect { it.toString() } + prefix = task.ext.prefix ?: "${meta.id}${file_list[0].substring(file_list[0].lastIndexOf('.'))}" + if(file_list.contains(prefix.trim())) { + error "The name of the input file can't be the same as for the output prefix in the " + + "module CAT_CAT (currently `$prefix`). Please choose a different one." + } + """ + touch $prefix + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + pigz: \$( pigz --version 2>&1 | sed 's/pigz //g' ) + END_VERSIONS + """ +} + +// for .gz files also include the second to last extension if it is present. E.g., .fasta.gz +def getFileSuffix(filename) { + def match = filename =~ /^.*?((\.\w{1,5})?(\.\w{1,5}\.gz$))/ + return match ? match[0][1] : filename.substring(filename.lastIndexOf('.')) +} diff --git a/modules/nf-core/cat/cat/meta.yml b/modules/nf-core/cat/cat/meta.yml new file mode 100644 index 0000000..00a8db0 --- /dev/null +++ b/modules/nf-core/cat/cat/meta.yml @@ -0,0 +1,36 @@ +name: cat_cat +description: A module for concatenation of gzipped or uncompressed files +keywords: + - concatenate + - gzip + - cat +tools: + - cat: + description: Just concatenation + documentation: https://man7.org/linux/man-pages/man1/cat.1.html + licence: ["GPL-3.0-or-later"] +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - files_in: + type: file + description: List of compressed / uncompressed files + pattern: "*" +output: + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" + - file_out: + type: file + description: Concatenated file. Will be gzipped if file_out ends with ".gz" + pattern: "${file_out}" +authors: + - "@erikrikarddaniel" + - "@FriederikeHanssen" +maintainers: + - "@erikrikarddaniel" + - "@FriederikeHanssen" diff --git a/modules/nf-core/cat/cat/tests/main.nf.test b/modules/nf-core/cat/cat/tests/main.nf.test new file mode 100644 index 0000000..9cb1617 --- /dev/null +++ b/modules/nf-core/cat/cat/tests/main.nf.test @@ -0,0 +1,191 @@ +nextflow_process { + + name "Test Process CAT_CAT" + script "../main.nf" + process "CAT_CAT" + tag "modules" + tag "modules_nfcore" + tag "cat" + tag "cat/cat" + + test("test_cat_name_conflict") { + when { + params { + outdir = "${outputDir}" + } + process { + """ + input[0] = + [ + [ id:'genome', single_end:true ], + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.sizes', checkIfExists: true) + ] + ] + """ + } + } + then { + assertAll( + { assert !process.success }, + { assert process.stdout.toString().contains("The name of the input file can't be the same as for the output prefix") }, + { assert snapshot(process.out.versions).match() } + ) + } + } + + test("test_cat_unzipped_unzipped") { + when { + params { + outdir = "${outputDir}" + } + process { + """ + input[0] = + [ + [ id:'test', single_end:true ], + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.sizes', checkIfExists: true) + ] + ] + """ + } + } + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + + test("test_cat_zipped_zipped") { + when { + params { + outdir = "${outputDir}" + } + process { + """ + input[0] = + [ + [ id:'test', single_end:true ], + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.gff3.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/alignment/last/contigs.genome.maf.gz', checkIfExists: true) + ] + ] + """ + } + } + then { + def lines = path(process.out.file_out.get(0).get(1)).linesGzip + assertAll( + { assert process.success }, + { assert snapshot( + lines[0..5], + lines.size(), + process.out.versions + ).match() + } + ) + } + } + + test("test_cat_zipped_unzipped") { + config './nextflow_zipped_unzipped.config' + + when { + params { + outdir = "${outputDir}" + } + process { + """ + input[0] = + [ + [ id:'test', single_end:true ], + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.gff3.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/alignment/last/contigs.genome.maf.gz', checkIfExists: true) + ] + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("test_cat_unzipped_zipped") { + config './nextflow_unzipped_zipped.config' + when { + params { + outdir = "${outputDir}" + } + process { + """ + input[0] = + [ + [ id:'test', single_end:true ], + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.sizes', checkIfExists: true) + ] + ] + """ + } + } + then { + def lines = path(process.out.file_out.get(0).get(1)).linesGzip + assertAll( + { assert process.success }, + { assert snapshot( + lines[0..5], + lines.size(), + process.out.versions + ).match() + } + ) + } + } + + test("test_cat_one_file_unzipped_zipped") { + config './nextflow_unzipped_zipped.config' + when { + params { + outdir = "${outputDir}" + } + process { + """ + input[0] = + [ + [ id:'test', single_end:true ], + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ] + ] + """ + } + } + then { + def lines = path(process.out.file_out.get(0).get(1)).linesGzip + assertAll( + { assert process.success }, + { assert snapshot( + lines[0..5], + lines.size(), + process.out.versions + ).match() + } + ) + } + } +} diff --git a/modules/nf-core/cat/cat/tests/main.nf.test.snap b/modules/nf-core/cat/cat/tests/main.nf.test.snap new file mode 100644 index 0000000..b7623ee --- /dev/null +++ b/modules/nf-core/cat/cat/tests/main.nf.test.snap @@ -0,0 +1,147 @@ +{ + "test_cat_unzipped_unzipped": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fasta:md5,f44b33a0e441ad58b2d3700270e2dbe2" + ] + ], + "1": [ + "versions.yml:md5,115ed6177ebcff24eb99d503fa5ef894" + ], + "file_out": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fasta:md5,f44b33a0e441ad58b2d3700270e2dbe2" + ] + ], + "versions": [ + "versions.yml:md5,115ed6177ebcff24eb99d503fa5ef894" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.3" + }, + "timestamp": "2023-10-16T14:32:18.500464399" + }, + "test_cat_zipped_unzipped": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": true + }, + "cat.txt:md5,c439d3b60e7bc03e8802a451a0d9a5d9" + ] + ], + "1": [ + "versions.yml:md5,115ed6177ebcff24eb99d503fa5ef894" + ], + "file_out": [ + [ + { + "id": "test", + "single_end": true + }, + "cat.txt:md5,c439d3b60e7bc03e8802a451a0d9a5d9" + ] + ], + "versions": [ + "versions.yml:md5,115ed6177ebcff24eb99d503fa5ef894" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.3" + }, + "timestamp": "2023-10-16T14:32:49.642741302" + }, + "test_cat_zipped_zipped": { + "content": [ + [ + "MT192765.1\tGenbank\ttranscript\t259\t29667\t.\t+\t.\tID=unknown_transcript_1;geneID=orf1ab;gene_name=orf1ab", + "MT192765.1\tGenbank\tgene\t259\t21548\t.\t+\t.\tParent=unknown_transcript_1", + "MT192765.1\tGenbank\tCDS\t259\t13461\t.\t+\t0\tParent=unknown_transcript_1;exception=\"ribosomal slippage\";gbkey=CDS;gene=orf1ab;note=\"pp1ab;translated=by -1 ribosomal frameshift\";product=\"orf1ab polyprotein\";protein_id=QIK50426.1", + "MT192765.1\tGenbank\tCDS\t13461\t21548\t.\t+\t0\tParent=unknown_transcript_1;exception=\"ribosomal slippage\";gbkey=CDS;gene=orf1ab;note=\"pp1ab;translated=by -1 ribosomal frameshift\";product=\"orf1ab polyprotein\";protein_id=QIK50426.1", + "MT192765.1\tGenbank\tCDS\t21556\t25377\t.\t+\t0\tParent=unknown_transcript_1;gbkey=CDS;gene=S;note=\"structural protein\";product=\"surface glycoprotein\";protein_id=QIK50427.1", + "MT192765.1\tGenbank\tgene\t21556\t25377\t.\t+\t.\tParent=unknown_transcript_1" + ], + 78, + [ + "versions.yml:md5,115ed6177ebcff24eb99d503fa5ef894" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T11:51:46.802978" + }, + "test_cat_name_conflict": { + "content": [ + [ + + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T11:51:29.45394" + }, + "test_cat_one_file_unzipped_zipped": { + "content": [ + [ + ">MT192765.1 Severe acute respiratory syndrome coronavirus 2 isolate SARS-CoV-2/human/USA/PC00101P/2020, complete genome", + "GTTTATACCTTCCCAGGTAACAAACCAACCAACTTTCGATCTCTTGTAGATCTGTTCTCTAAACGAACTTTAAAATCTGT", + "GTGGCTGTCACTCGGCTGCATGCTTAGTGCACTCACGCAGTATAATTAATAACTAATTACTGTCGTTGACAGGACACGAG", + "TAACTCGTCTATCTTCTGCAGGCTGCTTACGGTTTCGTCCGTGTTGCAGCCGATCATCAGCACATCTAGGTTTTGTCCGG", + "GTGTGACCGAAAGGTAAGATGGAGAGCCTTGTCCCTGGTTTCAACGAGAAAACACACGTCCAACTCAGTTTGCCTGTTTT", + "ACAGGTTCGCGACGTGCTCGTACGTGGCTTTGGAGACTCCGTGGAGGAGGTCTTATCAGAGGCACGTCAACATCTTAAAG" + ], + 374, + [ + "versions.yml:md5,115ed6177ebcff24eb99d503fa5ef894" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T11:52:02.774016" + }, + "test_cat_unzipped_zipped": { + "content": [ + [ + ">MT192765.1 Severe acute respiratory syndrome coronavirus 2 isolate SARS-CoV-2/human/USA/PC00101P/2020, complete genome", + "GTTTATACCTTCCCAGGTAACAAACCAACCAACTTTCGATCTCTTGTAGATCTGTTCTCTAAACGAACTTTAAAATCTGT", + "GTGGCTGTCACTCGGCTGCATGCTTAGTGCACTCACGCAGTATAATTAATAACTAATTACTGTCGTTGACAGGACACGAG", + "TAACTCGTCTATCTTCTGCAGGCTGCTTACGGTTTCGTCCGTGTTGCAGCCGATCATCAGCACATCTAGGTTTTGTCCGG", + "GTGTGACCGAAAGGTAAGATGGAGAGCCTTGTCCCTGGTTTCAACGAGAAAACACACGTCCAACTCAGTTTGCCTGTTTT", + "ACAGGTTCGCGACGTGCTCGTACGTGGCTTTGGAGACTCCGTGGAGGAGGTCTTATCAGAGGCACGTCAACATCTTAAAG" + ], + 375, + [ + "versions.yml:md5,115ed6177ebcff24eb99d503fa5ef894" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T11:51:57.581523" + } +} \ No newline at end of file diff --git a/modules/nf-core/cat/cat/tests/nextflow_unzipped_zipped.config b/modules/nf-core/cat/cat/tests/nextflow_unzipped_zipped.config new file mode 100644 index 0000000..ec26b0f --- /dev/null +++ b/modules/nf-core/cat/cat/tests/nextflow_unzipped_zipped.config @@ -0,0 +1,6 @@ + +process { + withName: CAT_CAT { + ext.prefix = 'cat.txt.gz' + } +} diff --git a/modules/nf-core/cat/cat/tests/nextflow_zipped_unzipped.config b/modules/nf-core/cat/cat/tests/nextflow_zipped_unzipped.config new file mode 100644 index 0000000..fbc7978 --- /dev/null +++ b/modules/nf-core/cat/cat/tests/nextflow_zipped_unzipped.config @@ -0,0 +1,8 @@ + +process { + + withName: CAT_CAT { + ext.prefix = 'cat.txt' + } + +} diff --git a/modules/nf-core/cat/cat/tests/tags.yml b/modules/nf-core/cat/cat/tests/tags.yml new file mode 100644 index 0000000..37b578f --- /dev/null +++ b/modules/nf-core/cat/cat/tests/tags.yml @@ -0,0 +1,2 @@ +cat/cat: + - modules/nf-core/cat/cat/** diff --git a/modules/nf-core/cat/fastq/environment.yml b/modules/nf-core/cat/fastq/environment.yml new file mode 100644 index 0000000..8c69b12 --- /dev/null +++ b/modules/nf-core/cat/fastq/environment.yml @@ -0,0 +1,7 @@ +name: cat_fastq +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - conda-forge::coreutils=8.30 diff --git a/modules/nf-core/cat/fastq/main.nf b/modules/nf-core/cat/fastq/main.nf new file mode 100644 index 0000000..b68e5f9 --- /dev/null +++ b/modules/nf-core/cat/fastq/main.nf @@ -0,0 +1,79 @@ +process CAT_FASTQ { + tag "$meta.id" + label 'process_single' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/ubuntu:20.04' : + 'nf-core/ubuntu:20.04' }" + + input: + tuple val(meta), path(reads, stageAs: "input*/*") + + output: + tuple val(meta), path("*.merged.fastq.gz"), emit: reads + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def readList = reads instanceof List ? reads.collect{ it.toString() } : [reads.toString()] + if (meta.single_end) { + if (readList.size >= 1) { + """ + cat ${readList.join(' ')} > ${prefix}.merged.fastq.gz + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + cat: \$(echo \$(cat --version 2>&1) | sed 's/^.*coreutils) //; s/ .*\$//') + END_VERSIONS + """ + } + } else { + if (readList.size >= 2) { + def read1 = [] + def read2 = [] + readList.eachWithIndex{ v, ix -> ( ix & 1 ? read2 : read1 ) << v } + """ + cat ${read1.join(' ')} > ${prefix}_1.merged.fastq.gz + cat ${read2.join(' ')} > ${prefix}_2.merged.fastq.gz + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + cat: \$(echo \$(cat --version 2>&1) | sed 's/^.*coreutils) //; s/ .*\$//') + END_VERSIONS + """ + } + } + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + def readList = reads instanceof List ? reads.collect{ it.toString() } : [reads.toString()] + if (meta.single_end) { + if (readList.size >= 1) { + """ + echo '' | gzip > ${prefix}.merged.fastq.gz + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + cat: \$(echo \$(cat --version 2>&1) | sed 's/^.*coreutils) //; s/ .*\$//') + END_VERSIONS + """ + } + } else { + if (readList.size >= 2) { + """ + echo '' | gzip > ${prefix}_1.merged.fastq.gz + echo '' | gzip > ${prefix}_2.merged.fastq.gz + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + cat: \$(echo \$(cat --version 2>&1) | sed 's/^.*coreutils) //; s/ .*\$//') + END_VERSIONS + """ + } + } +} diff --git a/modules/nf-core/cat/fastq/meta.yml b/modules/nf-core/cat/fastq/meta.yml new file mode 100644 index 0000000..db4ac3c --- /dev/null +++ b/modules/nf-core/cat/fastq/meta.yml @@ -0,0 +1,42 @@ +name: cat_fastq +description: Concatenates fastq files +keywords: + - cat + - fastq + - concatenate +tools: + - cat: + description: | + The cat utility reads files sequentially, writing them to the standard output. + documentation: https://www.gnu.org/software/coreutils/manual/html_node/cat-invocation.html + licence: ["GPL-3.0-or-later"] +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - reads: + type: file + description: | + List of input FastQ files to be concatenated. +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - reads: + type: file + description: Merged fastq file + pattern: "*.{merged.fastq.gz}" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@joseespinosa" + - "@drpatelh" +maintainers: + - "@joseespinosa" + - "@drpatelh" diff --git a/modules/nf-core/cat/fastq/tests/main.nf.test b/modules/nf-core/cat/fastq/tests/main.nf.test new file mode 100644 index 0000000..f88a78b --- /dev/null +++ b/modules/nf-core/cat/fastq/tests/main.nf.test @@ -0,0 +1,248 @@ +// NOTE The version snaps may not be consistant +// https://github.com/nf-core/modules/pull/4087#issuecomment-1767948035 +nextflow_process { + + name "Test Process CAT_FASTQ" + script "../main.nf" + process "CAT_FASTQ" + tag "modules" + tag "modules_nfcore" + tag "cat" + tag "cat/fastq" + + test("test_cat_fastq_single_end") { + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:true ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true)] + ]) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("test_cat_fastq_paired_end") { + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test2_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test2_2.fastq.gz', checkIfExists: true)] + ]) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("test_cat_fastq_single_end_same_name") { + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:true ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true)] + ]) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("test_cat_fastq_paired_end_same_name") { + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true)] + ]) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("test_cat_fastq_single_end_single_file") { + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:true ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true)] + ]) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("test_cat_fastq_single_end - stub") { + + options "-stub" + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:true ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true)] + ]) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("test_cat_fastq_paired_end - stub") { + + options "-stub" + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test2_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test2_2.fastq.gz', checkIfExists: true)] + ]) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("test_cat_fastq_single_end_same_name - stub") { + + options "-stub" + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:true ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true)] + ]) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("test_cat_fastq_paired_end_same_name - stub") { + + options "-stub" + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true)] + ]) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("test_cat_fastq_single_end_single_file - stub") { + + options "-stub" + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:true ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true)] + ]) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } +} diff --git a/modules/nf-core/cat/fastq/tests/main.nf.test.snap b/modules/nf-core/cat/fastq/tests/main.nf.test.snap new file mode 100644 index 0000000..aec119a --- /dev/null +++ b/modules/nf-core/cat/fastq/tests/main.nf.test.snap @@ -0,0 +1,376 @@ +{ + "test_cat_fastq_single_end": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": true + }, + "test.merged.fastq.gz:md5,ee314a9bd568d06617171b0c85f508da" + ] + ], + "1": [ + "versions.yml:md5,d42d6e24d67004608495883e00bd501b" + ], + "reads": [ + [ + { + "id": "test", + "single_end": true + }, + "test.merged.fastq.gz:md5,ee314a9bd568d06617171b0c85f508da" + ] + ], + "versions": [ + "versions.yml:md5,d42d6e24d67004608495883e00bd501b" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-01-17T17:30:39.816981" + }, + "test_cat_fastq_single_end_same_name": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": true + }, + "test.merged.fastq.gz:md5,3ad9406595fafec8172368f9cd0b6a22" + ] + ], + "1": [ + "versions.yml:md5,d42d6e24d67004608495883e00bd501b" + ], + "reads": [ + [ + { + "id": "test", + "single_end": true + }, + "test.merged.fastq.gz:md5,3ad9406595fafec8172368f9cd0b6a22" + ] + ], + "versions": [ + "versions.yml:md5,d42d6e24d67004608495883e00bd501b" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-01-17T17:32:35.229332" + }, + "test_cat_fastq_single_end_single_file": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": true + }, + "test.merged.fastq.gz:md5,4161df271f9bfcd25d5845a1e220dbec" + ] + ], + "1": [ + "versions.yml:md5,d42d6e24d67004608495883e00bd501b" + ], + "reads": [ + [ + { + "id": "test", + "single_end": true + }, + "test.merged.fastq.gz:md5,4161df271f9bfcd25d5845a1e220dbec" + ] + ], + "versions": [ + "versions.yml:md5,d42d6e24d67004608495883e00bd501b" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-01-17T17:34:00.058829" + }, + "test_cat_fastq_paired_end_same_name": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.merged.fastq.gz:md5,3ad9406595fafec8172368f9cd0b6a22", + "test_2.merged.fastq.gz:md5,a52cab0b840c7178b0ea83df1fdbe8d5" + ] + ] + ], + "1": [ + "versions.yml:md5,d42d6e24d67004608495883e00bd501b" + ], + "reads": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.merged.fastq.gz:md5,3ad9406595fafec8172368f9cd0b6a22", + "test_2.merged.fastq.gz:md5,a52cab0b840c7178b0ea83df1fdbe8d5" + ] + ] + ], + "versions": [ + "versions.yml:md5,d42d6e24d67004608495883e00bd501b" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-01-17T17:33:33.031555" + }, + "test_cat_fastq_single_end - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": true + }, + "test.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + "versions.yml:md5,d42d6e24d67004608495883e00bd501b" + ], + "reads": [ + [ + { + "id": "test", + "single_end": true + }, + "test.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "versions": [ + "versions.yml:md5,d42d6e24d67004608495883e00bd501b" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-05T12:07:28.244999" + }, + "test_cat_fastq_paired_end_same_name - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "1": [ + "versions.yml:md5,d42d6e24d67004608495883e00bd501b" + ], + "reads": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "versions": [ + "versions.yml:md5,d42d6e24d67004608495883e00bd501b" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-05T12:07:57.070911" + }, + "test_cat_fastq_single_end_same_name - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": true + }, + "test.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + "versions.yml:md5,d42d6e24d67004608495883e00bd501b" + ], + "reads": [ + [ + { + "id": "test", + "single_end": true + }, + "test.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "versions": [ + "versions.yml:md5,d42d6e24d67004608495883e00bd501b" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-05T12:07:46.796254" + }, + "test_cat_fastq_paired_end": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.merged.fastq.gz:md5,3ad9406595fafec8172368f9cd0b6a22", + "test_2.merged.fastq.gz:md5,a52cab0b840c7178b0ea83df1fdbe8d5" + ] + ] + ], + "1": [ + "versions.yml:md5,d42d6e24d67004608495883e00bd501b" + ], + "reads": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.merged.fastq.gz:md5,3ad9406595fafec8172368f9cd0b6a22", + "test_2.merged.fastq.gz:md5,a52cab0b840c7178b0ea83df1fdbe8d5" + ] + ] + ], + "versions": [ + "versions.yml:md5,d42d6e24d67004608495883e00bd501b" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-01-17T17:32:02.270935" + }, + "test_cat_fastq_paired_end - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "1": [ + "versions.yml:md5,d42d6e24d67004608495883e00bd501b" + ], + "reads": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "versions": [ + "versions.yml:md5,d42d6e24d67004608495883e00bd501b" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-05T12:07:37.807553" + }, + "test_cat_fastq_single_end_single_file - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": true + }, + "test.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + "versions.yml:md5,d42d6e24d67004608495883e00bd501b" + ], + "reads": [ + [ + { + "id": "test", + "single_end": true + }, + "test.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "versions": [ + "versions.yml:md5,d42d6e24d67004608495883e00bd501b" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-05T12:14:51.861264" + } +} \ No newline at end of file diff --git a/modules/nf-core/cat/fastq/tests/tags.yml b/modules/nf-core/cat/fastq/tests/tags.yml new file mode 100644 index 0000000..6ac4361 --- /dev/null +++ b/modules/nf-core/cat/fastq/tests/tags.yml @@ -0,0 +1,2 @@ +cat/fastq: + - modules/nf-core/cat/fastq/** diff --git a/modules/nf-core/custom/dumpsoftwareversions/environment.yml b/modules/nf-core/custom/dumpsoftwareversions/environment.yml new file mode 100644 index 0000000..b48ced2 --- /dev/null +++ b/modules/nf-core/custom/dumpsoftwareversions/environment.yml @@ -0,0 +1,7 @@ +name: custom_dumpsoftwareversions +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bioconda::multiqc=1.20 diff --git a/modules/nf-core/custom/dumpsoftwareversions/main.nf b/modules/nf-core/custom/dumpsoftwareversions/main.nf new file mode 100644 index 0000000..105f926 --- /dev/null +++ b/modules/nf-core/custom/dumpsoftwareversions/main.nf @@ -0,0 +1,24 @@ +process CUSTOM_DUMPSOFTWAREVERSIONS { + label 'process_single' + + // Requires `pyyaml` which does not have a dedicated container but is in the MultiQC container + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/multiqc:1.20--pyhdfd78af_0' : + 'biocontainers/multiqc:1.20--pyhdfd78af_0' }" + + input: + path versions + + output: + path "software_versions.yml" , emit: yml + path "software_versions_mqc.yml", emit: mqc_yml + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + template 'dumpsoftwareversions.py' +} diff --git a/modules/nf-core/custom/dumpsoftwareversions/meta.yml b/modules/nf-core/custom/dumpsoftwareversions/meta.yml new file mode 100644 index 0000000..5f15a5f --- /dev/null +++ b/modules/nf-core/custom/dumpsoftwareversions/meta.yml @@ -0,0 +1,37 @@ +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/meta-schema.json +name: custom_dumpsoftwareversions +description: Custom module used to dump software versions within the nf-core pipeline template +keywords: + - custom + - dump + - version +tools: + - custom: + description: Custom module used to dump software versions within the nf-core pipeline template + homepage: https://github.com/nf-core/tools + documentation: https://github.com/nf-core/tools + licence: ["MIT"] +input: + - versions: + type: file + description: YML file containing software versions + pattern: "*.yml" +output: + - yml: + type: file + description: Standard YML file containing software versions + pattern: "software_versions.yml" + - mqc_yml: + type: file + description: MultiQC custom content YML file containing software versions + pattern: "software_versions_mqc.yml" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@drpatelh" + - "@grst" +maintainers: + - "@drpatelh" + - "@grst" diff --git a/modules/nf-core/custom/dumpsoftwareversions/templates/dumpsoftwareversions.py b/modules/nf-core/custom/dumpsoftwareversions/templates/dumpsoftwareversions.py new file mode 100755 index 0000000..9a493ac --- /dev/null +++ b/modules/nf-core/custom/dumpsoftwareversions/templates/dumpsoftwareversions.py @@ -0,0 +1,100 @@ +#!/usr/bin/env python + + +"""Provide functions to merge multiple versions.yml files.""" + +import yaml +import platform +from textwrap import dedent + + +def _make_versions_html(versions): + """Generate a tabular HTML output of all versions for MultiQC.""" + html = [ + dedent( + """\\ + + + + + + + + + + """ + ) + ] + for process, tmp_versions in sorted(versions.items()): + html.append("") + for i, (tool, version) in enumerate(sorted(tmp_versions.items())): + html.append( + dedent( + f"""\\ + + + + + + """ + ) + ) + html.append("") + html.append("
    Process Name Software Version
    {process if (i == 0) else ''}{tool}{version}
    ") + return "\\n".join(html) + + +def main(): + """Load all version files and generate merged output.""" + versions_this_module = {} + versions_this_module["${task.process}"] = { + "python": platform.python_version(), + "yaml": yaml.__version__, + } + + with open("$versions") as f: + versions_by_process = yaml.load(f, Loader=yaml.BaseLoader) | versions_this_module + + # aggregate versions by the module name (derived from fully-qualified process name) + versions_by_module = {} + for process, process_versions in versions_by_process.items(): + module = process.split(":")[-1] + try: + if versions_by_module[module] != process_versions: + raise AssertionError( + "We assume that software versions are the same between all modules. " + "If you see this error-message it means you discovered an edge-case " + "and should open an issue in nf-core/tools. " + ) + except KeyError: + versions_by_module[module] = process_versions + + versions_by_module["Workflow"] = { + "Nextflow": "$workflow.nextflow.version", + "$workflow.manifest.name": "$workflow.manifest.version", + } + + versions_mqc = { + "id": "software_versions", + "section_name": "${workflow.manifest.name} Software Versions", + "section_href": "https://github.com/${workflow.manifest.name}", + "plot_type": "html", + "description": "are collected at run time from the software output.", + "data": _make_versions_html(versions_by_module), + } + + with open("software_versions.yml", "w") as f: + yaml.dump(versions_by_module, f, default_flow_style=False) + with open("software_versions_mqc.yml", "w") as f: + yaml.dump(versions_mqc, f, default_flow_style=False) + + with open("versions.yml", "w") as f: + yaml.dump(versions_this_module, f, default_flow_style=False) + + +if __name__ == "__main__": + main() diff --git a/modules/nf-core/custom/dumpsoftwareversions/tests/main.nf.test b/modules/nf-core/custom/dumpsoftwareversions/tests/main.nf.test new file mode 100644 index 0000000..b1e1630 --- /dev/null +++ b/modules/nf-core/custom/dumpsoftwareversions/tests/main.nf.test @@ -0,0 +1,43 @@ +nextflow_process { + + name "Test Process CUSTOM_DUMPSOFTWAREVERSIONS" + script "../main.nf" + process "CUSTOM_DUMPSOFTWAREVERSIONS" + tag "modules" + tag "modules_nfcore" + tag "custom" + tag "dumpsoftwareversions" + tag "custom/dumpsoftwareversions" + + test("Should run without failures") { + when { + process { + """ + def tool1_version = ''' + TOOL1: + tool1: 0.11.9 + '''.stripIndent() + + def tool2_version = ''' + TOOL2: + tool2: 1.9 + '''.stripIndent() + + input[0] = Channel.of(tool1_version, tool2_version).collectFile() + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.versions, + file(process.out.mqc_yml[0]).readLines()[0..10], + file(process.out.yml[0]).readLines()[0..7] + ).match() + } + ) + } + } +} diff --git a/modules/nf-core/custom/dumpsoftwareversions/tests/main.nf.test.snap b/modules/nf-core/custom/dumpsoftwareversions/tests/main.nf.test.snap new file mode 100644 index 0000000..5f59a93 --- /dev/null +++ b/modules/nf-core/custom/dumpsoftwareversions/tests/main.nf.test.snap @@ -0,0 +1,33 @@ +{ + "Should run without failures": { + "content": [ + [ + "versions.yml:md5,76d454d92244589d32455833f7c1ba6d" + ], + [ + "data: \"\\n\\n \\n \\n \\n \\n \\n \\n \\n\\", + " \\n\\n\\n \\n \\n\\", + " \\ \\n\\n\\n\\n \\n \\", + " \\ \\n \\n\\n\\n\\n\\", + " \\n\\n \\n \\n\\", + " \\ \\n\\n\\n\\n\\n\\n \\n\\", + " \\ \\n \\n\\n\\n\\n\\", + " \\n\\n \\n \\n\\" + ], + [ + "CUSTOM_DUMPSOFTWAREVERSIONS:", + " python: 3.11.7", + " yaml: 5.4.1", + "TOOL1:", + " tool1: 0.11.9", + "TOOL2:", + " tool2: '1.9'", + "Workflow:" + ] + ], + "timestamp": "2024-01-09T23:01:18.710682" + } +} \ No newline at end of file diff --git a/modules/nf-core/custom/dumpsoftwareversions/tests/tags.yml b/modules/nf-core/custom/dumpsoftwareversions/tests/tags.yml new file mode 100644 index 0000000..405aa24 --- /dev/null +++ b/modules/nf-core/custom/dumpsoftwareversions/tests/tags.yml @@ -0,0 +1,2 @@ +custom/dumpsoftwareversions: + - modules/nf-core/custom/dumpsoftwareversions/** diff --git a/modules/nf-core/eggnogmapper/environment.yml b/modules/nf-core/eggnogmapper/environment.yml new file mode 100644 index 0000000..f4fb6fd --- /dev/null +++ b/modules/nf-core/eggnogmapper/environment.yml @@ -0,0 +1,7 @@ +name: eggnogmapper +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bioconda::eggnog-mapper=2.1.12 diff --git a/modules/nf-core/eggnogmapper/main.nf b/modules/nf-core/eggnogmapper/main.nf new file mode 100644 index 0000000..2489b7f --- /dev/null +++ b/modules/nf-core/eggnogmapper/main.nf @@ -0,0 +1,68 @@ +process EGGNOGMAPPER { + tag "$meta.id" + label 'process_high' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/eggnog-mapper:2.1.12--pyhdfd78af_0': + 'biocontainers/eggnog-mapper:2.1.12--pyhdfd78af_0' }" + + input: + tuple val(meta), path(fasta) + path(eggnog_db) + path(eggnog_data_dir) + tuple val(meta2), path(eggnog_diamond_db) + + output: + tuple val(meta), path("*.emapper.annotations") , emit: annotations + tuple val(meta), path("*.emapper.seed_orthologs"), emit: orthologs + tuple val(meta), path("*.emapper.hits") , emit: hits + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def is_compressed = fasta.extension == '.gz' ? true : false + def fasta_name = is_compressed ? fasta.baseName : "$fasta" + def dbmem = task.memory.toMega() > 40000 ? '--dbmem' : '' + def database_arg = eggnog_db ? "--database $eggnog_db" : '' + def dmnd_db_arg = eggnog_diamond_db ? "--dmnd_db $eggnog_diamond_db" : '' + """ + if [ "$is_compressed" == "true" ]; then + gzip -c -d $fasta > $fasta_name + fi + + emapper.py \\ + --cpu ${task.cpus} \\ + -i ${fasta_name} \\ + --data_dir ${eggnog_data_dir} \\ + -m diamond \\ + $dmnd_db_arg \\ + $database_arg \\ + --output ${prefix} \\ + ${dbmem} \\ + $args + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + eggnog-mapper: \$(echo \$(emapper.py --version) | grep -o "emapper-[0-9]\\+\\.[0-9]\\+\\.[0-9]\\+" | sed "s/emapper-//") + END_VERSIONS + """ + + stub: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.emapper.annotations + touch ${prefix}.emapper.seed_orthologs + touch ${prefix}.emapper.hits + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + eggnog-mapper: \$(echo \$(emapper.py --version) | grep -o "emapper-[0-9]\\+\\.[0-9]\\+\\.[0-9]\\+" | sed "s/emapper-//") + END_VERSIONS + """ +} diff --git a/modules/nf-core/eggnogmapper/meta.yml b/modules/nf-core/eggnogmapper/meta.yml new file mode 100644 index 0000000..95090a1 --- /dev/null +++ b/modules/nf-core/eggnogmapper/meta.yml @@ -0,0 +1,70 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/yaml-schema.json +name: "eggnogmapper" +description: Fast genome-wide functional annotation through orthology assignment. +keywords: + - annotation + - orthology + - genomics +tools: + - "eggnogmapper": + description: "Fast genome-wide functional annotation through orthology assignment." + homepage: "https://github.com/eggnogdb/eggnog-mapper" + documentation: "https://github.com/eggnogdb/eggnog-mapper/wiki" + tool_dev_url: "https://github.com/eggnogdb/eggnog-mapper" + doi: "10.1093/molbev/msab293" + licence: ["AGPL v3"] +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'test', single_end:false ]` + - fasta: + type: file + description: Database of sequences in FASTA format + pattern: "*.{fasta,fa,fasta.gz,fa.gz}" + - eggnog_db: + type: file + description: The eggnog database file (e.g. eggnog-mapper/data/eggnog.db) + pattern: "*.db" + - eggnog_data_dir: + type: directory + description: Directory containing eggnog database files (e.g. eggnog-mapper/data) + pattern: "*" + - meta2: + type: map + description: | + Groovy Map containing database information + e.g. `[ id:'test' ]` + - eggnog_diamond_db: + type: file + description: The eggnog Diamond protein database file (e.g. eggnog-mapper/data/eggnog_proteins.dmnd) + pattern: "*.dmnd" +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'test', single_end:false ]` + - annotations: + type: file + description: TSV with the results from the annotation phase + pattern: "*.emapper.annotations" + - orthologs: + type: file + description: TSV with the results from parsing the hits, linking queries with seed orthologs (with commented metadata) + pattern: "*.emapper.seed_orthologs" + - hits: + type: file + description: TSV with the results from the Diamond search phase + pattern: "*.emapper.hits" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@vagkaratzas" +maintainers: + - "@vagkaratzas" + - "@gallvp" diff --git a/modules/nf-core/eggnogmapper/tests/main.nf.test b/modules/nf-core/eggnogmapper/tests/main.nf.test new file mode 100644 index 0000000..5f36b44 --- /dev/null +++ b/modules/nf-core/eggnogmapper/tests/main.nf.test @@ -0,0 +1,95 @@ +nextflow_process { + + name "Test Process EGGNOGMAPPER" + script "../main.nf" + process "EGGNOGMAPPER" + tag "modules" + tag "modules_nfcore" + tag "eggnogmapper" + tag "diamond/makedb" + + setup { + run("DIAMOND_MAKEDB") { + script "../../diamond/makedb/main.nf" + process { + """ + input[0] = [ [id:'test2'], file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/proteome.fasta', checkIfExists: true) ] + input[1] = [] + input[2] = [] + input[3] = [] + """ + } + } + } + + test("Should search for protein annotations against the eggnogmapper db") { + + when { + params { + outdir = "$outputDir" + } + process { + """ + input[0] = [ [id:'test'], file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/proteome.fasta', checkIfExists: true) ] + eggnog_db = file("https://github.com/nf-core/test-datasets/raw/eddf5b0e3336e0f93c81d4b4843b07257f9efaec/data/delete_me/eggnogmapper/eggnog.db", checkIfExists: true) + eggnog_db.copyTo("${workDir}/tmp/eggnog.db") + eggnog_data_dir = "${workDir}/tmp/" + input[1] = eggnog_db + input[2] = eggnog_data_dir + input[3] = DIAMOND_MAKEDB.out.db + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert path(process.out.annotations.get(0).get(1)).readLines().contains("ENSSASP00005000002.1\tENSSASP00005000002.1\t0.0\t14179.0\tCOG0498@1|root,COG0498@2|Bacteria,1MUWQ@1224|Proteobacteria,2VHR6@28216|Betaproteobacteria,2KUMA@206389|Rhodocyclales\t1224|Proteobacteria\tE\tthreonine synthase\t-\t-\t-\t-\t-\t-\t-\t-\t-\t-\t-\t-\t-") }, + { assert path(process.out.orthologs.get(0).get(1)).readLines().contains("ENSSASP00005000002.1\tENSSASP00005000002.1\t0.0\t14179.0\t1\t7096\t1\t7096\t100.0\t100.0\t100.0") }, + { assert snapshot(process.out.hits).match("hits") }, + { assert snapshot(process.out.versions).match("versions") } + ) + } + + } + + test("Should search for protein annotations against the eggnogmapper db -- empty-params") { + + when { + params { + outdir = "$outputDir" + } + process { + """ + eggnog_db = file("https://github.com/nf-core/test-datasets/raw/eddf5b0e3336e0f93c81d4b4843b07257f9efaec/data/delete_me/eggnogmapper/eggnog.db", checkIfExists: true) + eggnog_db.copyTo("${workDir}/tmp/eggnog.db") + + ch_synced_inputs = DIAMOND_MAKEDB.out.db.map { meta, dmnd -> + dmnd.copyTo("${workDir}/tmp/eggnog_proteins.dmnd") + + return true + } + | combine ( Channel.fromPath( "${workDir}/tmp/" ) ) + eggnog_data_dir = ch_synced_inputs.map { sync_status, data_dir -> data_dir } + + input[0] = [ [id:'test'], file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/proteome.fasta', checkIfExists: true) ] + input[1] = [] + input[2] = eggnog_data_dir + input[3] = [[], []] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert path(process.out.annotations.get(0).get(1)).readLines().contains("ENSSASP00005000002.1\tENSSASP00005000002.1\t0.0\t14179.0\tCOG0498@1|root,COG0498@2|Bacteria,1MUWQ@1224|Proteobacteria,2VHR6@28216|Betaproteobacteria,2KUMA@206389|Rhodocyclales\t1224|Proteobacteria\tE\tthreonine synthase\t-\t-\t-\t-\t-\t-\t-\t-\t-\t-\t-\t-\t-") }, + { assert path(process.out.orthologs.get(0).get(1)).readLines().contains("ENSSASP00005000002.1\tENSSASP00005000002.1\t0.0\t14179.0\t1\t7096\t1\t7096\t100.0\t100.0\t100.0") }, + { assert snapshot(process.out.hits).match("hits--empty-params") }, + { assert snapshot(process.out.versions).match("versions--empty-params") } + ) + } + + } + +} diff --git a/modules/nf-core/eggnogmapper/tests/main.nf.test.snap b/modules/nf-core/eggnogmapper/tests/main.nf.test.snap new file mode 100644 index 0000000..170e8c9 --- /dev/null +++ b/modules/nf-core/eggnogmapper/tests/main.nf.test.snap @@ -0,0 +1,60 @@ +{ + "hits": { + "content": [ + [ + [ + { + "id": "test" + }, + "test.emapper.hits:md5,864b7a1f902893d8aee6621baeab7be8" + ] + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-04-12T13:43:01.751295" + }, + "versions--empty-params": { + "content": [ + [ + "versions.yml:md5,d3e4efad28b5a924585ea3dfcf72c32c" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-04-15T11:42:23.737523" + }, + "versions": { + "content": [ + [ + "versions.yml:md5,d3e4efad28b5a924585ea3dfcf72c32c" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-04-12T13:45:26.555465" + }, + "hits--empty-params": { + "content": [ + [ + [ + { + "id": "test" + }, + "test.emapper.hits:md5,864b7a1f902893d8aee6621baeab7be8" + ] + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-04-15T11:42:23.690105" + } +} \ No newline at end of file diff --git a/modules/nf-core/eggnogmapper/tests/tags.yml b/modules/nf-core/eggnogmapper/tests/tags.yml new file mode 100644 index 0000000..284ba2e --- /dev/null +++ b/modules/nf-core/eggnogmapper/tests/tags.yml @@ -0,0 +1,2 @@ +eggnogmapper: + - modules/nf-core/eggnogmapper/** diff --git a/modules/nf-core/fastavalidator/environment.yml b/modules/nf-core/fastavalidator/environment.yml new file mode 100644 index 0000000..70f346e --- /dev/null +++ b/modules/nf-core/fastavalidator/environment.yml @@ -0,0 +1,9 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json +name: "fastavalidator" +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - "bioconda::py_fasta_validator=0.6" diff --git a/modules/nf-core/fastavalidator/main.nf b/modules/nf-core/fastavalidator/main.nf new file mode 100644 index 0000000..ac5470f --- /dev/null +++ b/modules/nf-core/fastavalidator/main.nf @@ -0,0 +1,62 @@ +process FASTAVALIDATOR { + tag "$meta.id" + label 'process_single' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/py_fasta_validator:0.6--py37h595c7a6_0': + 'biocontainers/py_fasta_validator:0.6--py37h595c7a6_0' }" + + input: + tuple val(meta), path(fasta) + + output: + tuple val(meta), path('*.success.log') , emit: success_log , optional: true + tuple val(meta), path('*.error.log') , emit: error_log , optional: true + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + py_fasta_validator \\ + -f $fasta \\ + 2> "${prefix}.error.log" \\ + || echo "Errors from fasta_validate printed to ${prefix}.error.log" + + if [ \$(cat "${prefix}.error.log" | wc -l) -gt 0 ]; then + echo "Validation failed..." + + cat \\ + "${prefix}.error.log" + else + echo "Validation successful..." + + mv \\ + "${prefix}.error.log" \\ + fasta_validate.stderr + + echo "Validation successful..." \\ + > "${prefix}.success.log" + fi + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + py_fasta_validator: \$(py_fasta_validator -v | sed 's/.* version //') + END_VERSIONS + """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + echo "Validation successful..." \\ + > "${prefix}.success.log" + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + py_fasta_validator: \$(py_fasta_validator -v | sed 's/.* version //') + END_VERSIONS + """ +} diff --git a/modules/nf-core/fastavalidator/meta.yml b/modules/nf-core/fastavalidator/meta.yml new file mode 100644 index 0000000..c5c4371 --- /dev/null +++ b/modules/nf-core/fastavalidator/meta.yml @@ -0,0 +1,53 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/meta-schema.json +name: "fastavalidator" +description: | + "Python C-extension for a simple validator for fasta files. The module emits the validated file or an + error log upon validation failure." +keywords: + - fasta + - validation + - genome +tools: + - fasta_validate: + description: | + "Python C-extension for a simple C code to validate a fasta file. It only checks a few things, + and by default only sets its response via the return code, + so you will need to check that!" + homepage: "https://github.com/linsalrob/py_fasta_validator" + documentation: "https://github.com/linsalrob/py_fasta_validator" + tool_dev_url: "https://github.com/linsalrob/py_fasta_validator" + doi: "10.5281/zenodo.5002710" + licence: ["MIT"] +input: + - meta: + type: map + description: | + Groovy Map containing file information + e.g. [ id:'test' ] + - fasta: + type: file + description: Input fasta file + pattern: "*.fasta" +output: + - meta: + type: map + description: | + Groovy Map containing file information + e.g. [ id:'test' ] + - success_log: + type: file + description: Log file for successful validation + pattern: "*.success.log" + - error_log: + type: file + description: Log file for failed validation + pattern: "*.error.log" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@gallvp" +maintainers: + - "@gallvp" diff --git a/modules/nf-core/fastavalidator/tests/main.nf.test b/modules/nf-core/fastavalidator/tests/main.nf.test new file mode 100644 index 0000000..39b00d8 --- /dev/null +++ b/modules/nf-core/fastavalidator/tests/main.nf.test @@ -0,0 +1,60 @@ +nextflow_process { + + name "Test Process FASTAVALIDATOR" + script "../main.nf" + process "FASTAVALIDATOR" + + tag "modules" + tag "modules_nfcore" + tag "fastavalidator" + + test("sarscov2-fasta-valid") { + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() }, + { assert process.out.success_log != null }, + { assert process.out.error_log == [] }, + { assert path(process.out.success_log.get(0).get(1)).getText().contains("Validation successful...") } + ) + } + + } + + test("sarscov2-gff3-invalid") { + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.gff3', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() }, + { assert process.out.success_log == [] }, + { assert process.out.error_log != null }, + { assert path(process.out.error_log.get(0).get(1)).getText().contains("genome.gff3 does not start with a >") } + ) + } + + } +} diff --git a/modules/nf-core/fastavalidator/tests/main.nf.test.snap b/modules/nf-core/fastavalidator/tests/main.nf.test.snap new file mode 100644 index 0000000..382dee7 --- /dev/null +++ b/modules/nf-core/fastavalidator/tests/main.nf.test.snap @@ -0,0 +1,76 @@ +{ + "sarscov2-fasta-valid": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.success.log:md5,b0b859eda1db5cd43915846e00ebc22c" + ] + ], + "1": [ + + ], + "2": [ + "versions.yml:md5,05aa059840b3b4dd6d88bc1e4bf976d7" + ], + "error_log": [ + + ], + "success_log": [ + [ + { + "id": "test", + "single_end": false + }, + "test.success.log:md5,b0b859eda1db5cd43915846e00ebc22c" + ] + ], + "versions": [ + "versions.yml:md5,05aa059840b3b4dd6d88bc1e4bf976d7" + ] + } + ], + "timestamp": "2023-11-28T11:23:25.106872" + }, + "sarscov2-gff3-invalid": { + "content": [ + { + "0": [ + + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.error.log:md5,531d520c0e7767176f743f197f1f87b3" + ] + ], + "2": [ + "versions.yml:md5,05aa059840b3b4dd6d88bc1e4bf976d7" + ], + "error_log": [ + [ + { + "id": "test", + "single_end": false + }, + "test.error.log:md5,531d520c0e7767176f743f197f1f87b3" + ] + ], + "success_log": [ + + ], + "versions": [ + "versions.yml:md5,05aa059840b3b4dd6d88bc1e4bf976d7" + ] + } + ], + "timestamp": "2023-11-28T11:23:29.40324" + } +} \ No newline at end of file diff --git a/modules/nf-core/fastavalidator/tests/tags.yml b/modules/nf-core/fastavalidator/tests/tags.yml new file mode 100644 index 0000000..c3c7757 --- /dev/null +++ b/modules/nf-core/fastavalidator/tests/tags.yml @@ -0,0 +1,2 @@ +fastavalidator: + - "modules/nf-core/fastavalidator/**" diff --git a/modules/nf-core/multiqc/environment.yml b/modules/nf-core/fastp/environment.yml similarity index 61% rename from modules/nf-core/multiqc/environment.yml rename to modules/nf-core/fastp/environment.yml index ca39fb6..70389e6 100644 --- a/modules/nf-core/multiqc/environment.yml +++ b/modules/nf-core/fastp/environment.yml @@ -1,7 +1,7 @@ -name: multiqc +name: fastp channels: - conda-forge - bioconda - defaults dependencies: - - bioconda::multiqc=1.21 + - bioconda::fastp=0.23.4 diff --git a/modules/nf-core/fastp/main.nf b/modules/nf-core/fastp/main.nf new file mode 100644 index 0000000..e1b9f56 --- /dev/null +++ b/modules/nf-core/fastp/main.nf @@ -0,0 +1,125 @@ +process FASTP { + tag "$meta.id" + label 'process_medium' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/fastp:0.23.4--h5f740d0_0' : + 'biocontainers/fastp:0.23.4--h5f740d0_0' }" + + input: + tuple val(meta), path(reads) + path adapter_fasta + val discard_trimmed_pass + val save_trimmed_fail + val save_merged + + output: + tuple val(meta), path('*.fastp.fastq.gz') , optional:true, emit: reads + tuple val(meta), path('*.json') , emit: json + tuple val(meta), path('*.html') , emit: html + tuple val(meta), path('*.log') , emit: log + tuple val(meta), path('*.fail.fastq.gz') , optional:true, emit: reads_fail + tuple val(meta), path('*.merged.fastq.gz'), optional:true, emit: reads_merged + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def adapter_list = adapter_fasta ? "--adapter_fasta ${adapter_fasta}" : "" + def fail_fastq = save_trimmed_fail && meta.single_end ? "--failed_out ${prefix}.fail.fastq.gz" : save_trimmed_fail && !meta.single_end ? "--failed_out ${prefix}.paired.fail.fastq.gz --unpaired1 ${prefix}_1.fail.fastq.gz --unpaired2 ${prefix}_2.fail.fastq.gz" : '' + def out_fq1 = discard_trimmed_pass ?: ( meta.single_end ? "--out1 ${prefix}.fastp.fastq.gz" : "--out1 ${prefix}_1.fastp.fastq.gz" ) + def out_fq2 = discard_trimmed_pass ?: "--out2 ${prefix}_2.fastp.fastq.gz" + // Added soft-links to original fastqs for consistent naming in MultiQC + // Use single ended for interleaved. Add --interleaved_in in config. + if ( task.ext.args?.contains('--interleaved_in') ) { + """ + [ ! -f ${prefix}.fastq.gz ] && ln -sf $reads ${prefix}.fastq.gz + + fastp \\ + --stdout \\ + --in1 ${prefix}.fastq.gz \\ + --thread $task.cpus \\ + --json ${prefix}.fastp.json \\ + --html ${prefix}.fastp.html \\ + $adapter_list \\ + $fail_fastq \\ + $args \\ + 2> >(tee ${prefix}.fastp.log >&2) \\ + | gzip -c > ${prefix}.fastp.fastq.gz + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + fastp: \$(fastp --version 2>&1 | sed -e "s/fastp //g") + END_VERSIONS + """ + } else if (meta.single_end) { + """ + [ ! -f ${prefix}.fastq.gz ] && ln -sf $reads ${prefix}.fastq.gz + + fastp \\ + --in1 ${prefix}.fastq.gz \\ + $out_fq1 \\ + --thread $task.cpus \\ + --json ${prefix}.fastp.json \\ + --html ${prefix}.fastp.html \\ + $adapter_list \\ + $fail_fastq \\ + $args \\ + 2> >(tee ${prefix}.fastp.log >&2) + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + fastp: \$(fastp --version 2>&1 | sed -e "s/fastp //g") + END_VERSIONS + """ + } else { + def merge_fastq = save_merged ? "-m --merged_out ${prefix}.merged.fastq.gz" : '' + """ + [ ! -f ${prefix}_1.fastq.gz ] && ln -sf ${reads[0]} ${prefix}_1.fastq.gz + [ ! -f ${prefix}_2.fastq.gz ] && ln -sf ${reads[1]} ${prefix}_2.fastq.gz + fastp \\ + --in1 ${prefix}_1.fastq.gz \\ + --in2 ${prefix}_2.fastq.gz \\ + $out_fq1 \\ + $out_fq2 \\ + --json ${prefix}.fastp.json \\ + --html ${prefix}.fastp.html \\ + $adapter_list \\ + $fail_fastq \\ + $merge_fastq \\ + --thread $task.cpus \\ + --detect_adapter_for_pe \\ + $args \\ + 2> >(tee ${prefix}.fastp.log >&2) + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + fastp: \$(fastp --version 2>&1 | sed -e "s/fastp //g") + END_VERSIONS + """ + } + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + def is_single_output = task.ext.args?.contains('--interleaved_in') || meta.single_end + def touch_reads = (discard_trimmed_pass) ? "" : (is_single_output) ? "echo '' | gzip > ${prefix}.fastp.fastq.gz" : "echo '' | gzip > ${prefix}_1.fastp.fastq.gz ; echo '' | gzip > ${prefix}_2.fastp.fastq.gz" + def touch_merged = (!is_single_output && save_merged) ? "echo '' | gzip > ${prefix}.merged.fastq.gz" : "" + def touch_fail_fastq = (!save_trimmed_fail) ? "" : meta.single_end ? "echo '' | gzip > ${prefix}.fail.fastq.gz" : "echo '' | gzip > ${prefix}.paired.fail.fastq.gz ; echo '' | gzip > ${prefix}_1.fail.fastq.gz ; echo '' | gzip > ${prefix}_2.fail.fastq.gz" + """ + $touch_reads + $touch_fail_fastq + $touch_merged + touch "${prefix}.fastp.json" + touch "${prefix}.fastp.html" + touch "${prefix}.fastp.log" + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + fastp: \$(fastp --version 2>&1 | sed -e "s/fastp //g") + END_VERSIONS + """ +} diff --git a/modules/nf-core/fastp/meta.yml b/modules/nf-core/fastp/meta.yml new file mode 100644 index 0000000..8dfecc1 --- /dev/null +++ b/modules/nf-core/fastp/meta.yml @@ -0,0 +1,79 @@ +name: fastp +description: Perform adapter/quality trimming on sequencing reads +keywords: + - trimming + - quality control + - fastq +tools: + - fastp: + description: | + A tool designed to provide fast all-in-one preprocessing for FastQ files. This tool is developed in C++ with multithreading supported to afford high performance. + documentation: https://github.com/OpenGene/fastp + doi: 10.1093/bioinformatics/bty560 + licence: ["MIT"] +input: + - meta: + type: map + description: | + Groovy Map containing sample information. Use 'single_end: true' to specify single ended or interleaved FASTQs. Use 'single_end: false' for paired-end reads. + e.g. [ id:'test', single_end:false ] + - reads: + type: file + description: | + List of input FastQ files of size 1 and 2 for single-end and paired-end data, + respectively. If you wish to run interleaved paired-end data, supply as single-end data + but with `--interleaved_in` in your `modules.conf`'s `ext.args` for the module. + - adapter_fasta: + type: file + description: File in FASTA format containing possible adapters to remove. + pattern: "*.{fasta,fna,fas,fa}" + - discard_trimmed_pass: + type: boolean + description: Specify true to not write any reads that pass trimming thresholds. | + This can be used to use fastp for the output report only. + - save_trimmed_fail: + type: boolean + description: Specify true to save files that failed to pass trimming thresholds ending in `*.fail.fastq.gz` + - save_merged: + type: boolean + description: Specify true to save all merged reads to a file ending in `*.merged.fastq.gz` +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - reads: + type: file + description: The trimmed/modified/unmerged fastq reads + pattern: "*fastp.fastq.gz" + - json: + type: file + description: Results in JSON format + pattern: "*.json" + - html: + type: file + description: Results in HTML format + pattern: "*.html" + - log: + type: file + description: fastq log file + pattern: "*.log" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" + - reads_fail: + type: file + description: Reads the failed the preprocessing + pattern: "*fail.fastq.gz" + - reads_merged: + type: file + description: Reads that were successfully merged + pattern: "*.{merged.fastq.gz}" +authors: + - "@drpatelh" + - "@kevinmenden" +maintainers: + - "@drpatelh" + - "@kevinmenden" diff --git a/modules/nf-core/fastp/tests/main.nf.test b/modules/nf-core/fastp/tests/main.nf.test new file mode 100644 index 0000000..30dbb8a --- /dev/null +++ b/modules/nf-core/fastp/tests/main.nf.test @@ -0,0 +1,576 @@ +nextflow_process { + + name "Test Process FASTP" + script "../main.nf" + process "FASTP" + tag "modules" + tag "modules_nfcore" + tag "fastp" + + test("test_fastp_single_end") { + + when { + + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:true ], + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) ] + ]) + input[1] = [] + input[2] = false + input[3] = false + input[4] = false + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert path(process.out.html.get(0).get(1)).getText().contains("single end (151 cycles)") }, + { assert path(process.out.log.get(0).get(1)).getText().contains("reads passed filter: 99") }, + { assert snapshot( + process.out.json, + process.out.reads, + process.out.reads_fail, + process.out.reads_merged, + process.out.versions).match() } + ) + } + } + + test("test_fastp_paired_end") { + + when { + + process { + """ + adapter_fasta = [] + save_trimmed_pass = true + save_trimmed_fail = false + save_merged = false + + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) ] + ]) + input[1] = [] + input[2] = false + input[3] = false + input[4] = false + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert path(process.out.html.get(0).get(1)).getText().contains("The input has little adapter percentage (~0.000000%), probably it's trimmed before.") }, + { assert path(process.out.log.get(0).get(1)).getText().contains("Q30 bases: 12281(88.3716%)") }, + { assert snapshot( + process.out.json, + process.out.reads, + process.out.reads_fail, + process.out.reads_merged, + process.out.versions).match() } + ) + } + } + + test("fastp test_fastp_interleaved") { + + config './nextflow.interleaved.config' + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:true ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_interleaved.fastq.gz', checkIfExists: true) ] + ]) + input[1] = [] + input[2] = false + input[3] = false + input[4] = false + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert path(process.out.html.get(0).get(1)).getText().contains("paired end (151 cycles + 151 cycles)") }, + { assert path(process.out.log.get(0).get(1)).getText().contains("reads passed filter: 162") }, + { assert process.out.reads_fail == [] }, + { assert process.out.reads_merged == [] }, + { assert snapshot( + process.out.reads, + process.out.json, + process.out.versions).match() } + ) + } + } + + test("test_fastp_single_end_trim_fail") { + + when { + + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:true ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) ] + ]) + input[1] = [] + input[2] = false + input[3] = true + input[4] = false + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert path(process.out.html.get(0).get(1)).getText().contains("single end (151 cycles)") }, + { assert path(process.out.log.get(0).get(1)).getText().contains("reads passed filter: 99") }, + { assert snapshot( + process.out.json, + process.out.reads, + process.out.reads_fail, + process.out.reads_merged, + process.out.versions).match() } + ) + } + } + + test("test_fastp_paired_end_trim_fail") { + + config './nextflow.save_failed.config' + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true)] + ]) + input[1] = [] + input[2] = false + input[3] = true + input[4] = false + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert path(process.out.html.get(0).get(1)).getText().contains("The input has little adapter percentage (~0.000000%), probably it's trimmed before.") }, + { assert path(process.out.log.get(0).get(1)).getText().contains("reads passed filter: 162") }, + { assert snapshot( + process.out.reads, + process.out.reads_fail, + process.out.reads_merged, + process.out.json, + process.out.versions).match() } + ) + } + } + + test("test_fastp_paired_end_merged") { + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) ] + ]) + input[1] = [] + input[2] = false + input[3] = false + input[4] = true + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert path(process.out.html.get(0).get(1)).getText().contains("The input has little adapter percentage (~0.000000%), probably it's trimmed before.") }, + { assert path(process.out.log.get(0).get(1)).getText().contains("total reads: 75") }, + { assert snapshot( + process.out.json, + process.out.reads, + process.out.reads_fail, + process.out.reads_merged, + process.out.versions).match() }, + ) + } + } + + test("test_fastp_paired_end_merged_adapterlist") { + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) ] + ]) + input[1] = Channel.of([ file(params.modules_testdata_base_path + 'delete_me/fastp/adapters.fasta', checkIfExists: true) ]) + input[2] = false + input[3] = false + input[4] = true + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert path(process.out.html.get(0).get(1)).getText().contains("
    ") }, + { assert path(process.out.log.get(0).get(1)).getText().contains("total bases: 13683") }, + { assert snapshot( + process.out.json, + process.out.reads, + process.out.reads_fail, + process.out.reads_merged, + process.out.versions).match() } + ) + } + } + + test("test_fastp_single_end_qc_only") { + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:true ], + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) ] + ]) + input[1] = [] + input[2] = true + input[3] = false + input[4] = false + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert path(process.out.html.get(0).get(1)).getText().contains("single end (151 cycles)") }, + { assert path(process.out.log.get(0).get(1)).getText().contains("reads passed filter: 99") }, + { assert snapshot( + process.out.json, + process.out.reads, + process.out.reads, + process.out.reads_fail, + process.out.reads_fail, + process.out.reads_merged, + process.out.reads_merged, + process.out.versions).match() } + ) + } + } + + test("test_fastp_paired_end_qc_only") { + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) ] + ]) + input[1] = [] + input[2] = true + input[3] = false + input[4] = false + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert path(process.out.html.get(0).get(1)).getText().contains("The input has little adapter percentage (~0.000000%), probably it's trimmed before.") }, + { assert path(process.out.log.get(0).get(1)).getText().contains("Q30 bases: 12281(88.3716%)") }, + { assert snapshot( + process.out.json, + process.out.reads, + process.out.reads, + process.out.reads_fail, + process.out.reads_fail, + process.out.reads_merged, + process.out.reads_merged, + process.out.versions).match() } + ) + } + } + + test("test_fastp_single_end - stub") { + + options "-stub" + + when { + + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:true ], + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) ] + ]) + input[1] = [] + input[2] = false + input[3] = false + input[4] = false + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("test_fastp_paired_end - stub") { + + options "-stub" + + when { + + process { + """ + adapter_fasta = [] + save_trimmed_pass = true + save_trimmed_fail = false + save_merged = false + + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) ] + ]) + input[1] = [] + input[2] = false + input[3] = false + input[4] = false + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("fastp - stub test_fastp_interleaved") { + + options "-stub" + + config './nextflow.interleaved.config' + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:true ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_interleaved.fastq.gz', checkIfExists: true) ] + ]) + input[1] = [] + input[2] = false + input[3] = false + input[4] = false + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("test_fastp_single_end_trim_fail - stub") { + + options "-stub" + + when { + + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:true ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) ] + ]) + input[1] = [] + input[2] = false + input[3] = true + input[4] = false + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("test_fastp_paired_end_trim_fail - stub") { + + options "-stub" + + config './nextflow.save_failed.config' + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true)] + ]) + input[1] = [] + input[2] = false + input[3] = true + input[4] = false + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("test_fastp_paired_end_merged - stub") { + + options "-stub" + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) ] + ]) + input[1] = [] + input[2] = false + input[3] = false + input[4] = true + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("test_fastp_paired_end_merged_adapterlist - stub") { + + options "-stub" + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) ] + ]) + input[1] = Channel.of([ file(params.modules_testdata_base_path + 'delete_me/fastp/adapters.fasta', checkIfExists: true) ]) + input[2] = false + input[3] = false + input[4] = true + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("test_fastp_single_end_qc_only - stub") { + + options "-stub" + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:true ], + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) ] + ]) + input[1] = [] + input[2] = true + input[3] = false + input[4] = false + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("test_fastp_paired_end_qc_only - stub") { + + options "-stub" + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) ] + ]) + input[1] = [] + input[2] = true + input[3] = false + input[4] = false + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } +} \ No newline at end of file diff --git a/modules/nf-core/fastp/tests/main.nf.test.snap b/modules/nf-core/fastp/tests/main.nf.test.snap new file mode 100644 index 0000000..54be7e4 --- /dev/null +++ b/modules/nf-core/fastp/tests/main.nf.test.snap @@ -0,0 +1,1331 @@ +{ + "test_fastp_single_end_qc_only - stub": { + "content": [ + { + "0": [ + + ], + "1": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "4": [ + + ], + "5": [ + + ], + "6": [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + ], + "html": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "json": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "log": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "reads": [ + + ], + "reads_fail": [ + + ], + "reads_merged": [ + + ], + "versions": [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-05T14:31:10.841098" + }, + "test_fastp_paired_end": { + "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,1e0f8e27e71728e2b63fc64086be95cd" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,67b2bbae47f073e05a97a9c2edce23c7", + "test_2.fastp.fastq.gz:md5,25cbdca08e2083dbd4f0502de6b62f39" + ] + ] + ], + [ + + ], + [ + + ], + [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-05T13:43:28.665779" + }, + "test_fastp_paired_end_merged_adapterlist": { + "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,5914ca3f21ce162123a824e33e8564f6" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,54b726a55e992a869fd3fa778afe1672", + "test_2.fastp.fastq.gz:md5,29d3b33b869f7b63417b8ff07bb128ba" + ] + ] + ], + [ + + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.merged.fastq.gz:md5,c873bb1ab3fa859dcc47306465e749d5" + ] + ], + [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-05T13:44:18.210375" + }, + "test_fastp_single_end_qc_only": { + "content": [ + [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.json:md5,5cc5f01e449309e0e689ed6f51a2294a" + ] + ], + [ + + ], + [ + + ], + [ + + ], + [ + + ], + [ + + ], + [ + + ], + [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-05T13:44:27.380974" + }, + "test_fastp_paired_end_trim_fail": { + "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,6ff32a64c5188b9a9192be1398c262c7", + "test_2.fastp.fastq.gz:md5,db0cb7c9977e94ac2b4b446ebd017a8a" + ] + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.paired.fail.fastq.gz:md5,409b687c734cedd7a1fec14d316e1366", + "test_1.fail.fastq.gz:md5,4f273cf3159c13f79e8ffae12f5661f6", + "test_2.fail.fastq.gz:md5,f97b9edefb5649aab661fbc9e71fc995" + ] + ] + ], + [ + + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,4c3268ddb50ea5b33125984776aa3519" + ] + ], + [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-05T13:43:58.749589" + }, + "fastp - stub test_fastp_interleaved": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "4": [ + + ], + "5": [ + + ], + "6": [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + ], + "html": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "json": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "log": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "reads": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "reads_fail": [ + + ], + "reads_merged": [ + + ], + "versions": [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-05T13:50:00.270029" + }, + "test_fastp_single_end - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "4": [ + + ], + "5": [ + + ], + "6": [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + ], + "html": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "json": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "log": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "reads": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "reads_fail": [ + + ], + "reads_merged": [ + + ], + "versions": [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-05T13:49:42.502789" + }, + "test_fastp_paired_end_merged_adapterlist - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "4": [ + + ], + "5": [ + [ + { + "id": "test", + "single_end": false + }, + "test.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "6": [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + ], + "html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "json": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "log": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "reads": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "reads_fail": [ + + ], + "reads_merged": [ + [ + { + "id": "test", + "single_end": false + }, + "test.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "versions": [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-05T13:54:53.458252" + }, + "test_fastp_paired_end_merged - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "4": [ + + ], + "5": [ + [ + { + "id": "test", + "single_end": false + }, + "test.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "6": [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + ], + "html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "json": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "log": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "reads": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "reads_fail": [ + + ], + "reads_merged": [ + [ + { + "id": "test", + "single_end": false + }, + "test.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "versions": [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-05T13:50:27.689379" + }, + "test_fastp_paired_end_merged": { + "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,b712fd68ed0322f4bec49ff2a5237fcc" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,54b726a55e992a869fd3fa778afe1672", + "test_2.fastp.fastq.gz:md5,29d3b33b869f7b63417b8ff07bb128ba" + ] + ] + ], + [ + + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.merged.fastq.gz:md5,c873bb1ab3fa859dcc47306465e749d5" + ] + ], + [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-05T13:44:08.68476" + }, + "test_fastp_paired_end - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "4": [ + + ], + "5": [ + + ], + "6": [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + ], + "html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "json": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "log": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "reads": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "reads_fail": [ + + ], + "reads_merged": [ + + ], + "versions": [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-05T13:49:51.679221" + }, + "test_fastp_single_end": { + "content": [ + [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.json:md5,c852d7a6dba5819e4ac8d9673bedcacc" + ] + ], + [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.fastq.gz:md5,67b2bbae47f073e05a97a9c2edce23c7" + ] + ], + [ + + ], + [ + + ], + [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-05T13:43:18.834322" + }, + "test_fastp_single_end_trim_fail - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "4": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fail.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "5": [ + + ], + "6": [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + ], + "html": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "json": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "log": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "reads": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "reads_fail": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fail.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "reads_merged": [ + + ], + "versions": [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-05T14:05:36.898142" + }, + "test_fastp_paired_end_trim_fail - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "4": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.paired.fail.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_1.fail.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.fail.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "5": [ + + ], + "6": [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + ], + "html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "json": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "log": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "reads": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "reads_fail": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.paired.fail.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_1.fail.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.fail.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "reads_merged": [ + + ], + "versions": [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-05T14:05:49.212847" + }, + "fastp test_fastp_interleaved": { + "content": [ + [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.fastq.gz:md5,217d62dc13a23e92513a1bd8e1bcea39" + ] + ], + [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.json:md5,b24e0624df5cc0b11cd5ba21b726fb22" + ] + ], + [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-05T13:43:38.910832" + }, + "test_fastp_single_end_trim_fail": { + "content": [ + [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.json:md5,9a7ee180f000e8d00c7fb67f06293eb5" + ] + ], + [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.fastq.gz:md5,67b2bbae47f073e05a97a9c2edce23c7" + ] + ], + [ + [ + { + "id": "test", + "single_end": true + }, + "test.fail.fastq.gz:md5,3e4aaadb66a5b8fc9b881bf39c227abd" + ] + ], + [ + + ], + [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-05T13:43:48.22378" + }, + "test_fastp_paired_end_qc_only": { + "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,623064a45912dac6f2b64e3f2e9901df" + ] + ], + [ + + ], + [ + + ], + [ + + ], + [ + + ], + [ + + ], + [ + + ], + [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-05T13:44:36.334938" + }, + "test_fastp_paired_end_qc_only - stub": { + "content": [ + { + "0": [ + + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "4": [ + + ], + "5": [ + + ], + "6": [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + ], + "html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "json": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "log": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "reads": [ + + ], + "reads_fail": [ + + ], + "reads_merged": [ + + ], + "versions": [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-05T14:31:27.096468" + } +} \ No newline at end of file diff --git a/modules/nf-core/fastp/tests/nextflow.interleaved.config b/modules/nf-core/fastp/tests/nextflow.interleaved.config new file mode 100644 index 0000000..4be8dbd --- /dev/null +++ b/modules/nf-core/fastp/tests/nextflow.interleaved.config @@ -0,0 +1,5 @@ +process { + withName: FASTP { + ext.args = "--interleaved_in -e 30" + } +} diff --git a/modules/nf-core/fastp/tests/nextflow.save_failed.config b/modules/nf-core/fastp/tests/nextflow.save_failed.config new file mode 100644 index 0000000..53b61b0 --- /dev/null +++ b/modules/nf-core/fastp/tests/nextflow.save_failed.config @@ -0,0 +1,5 @@ +process { + withName: FASTP { + ext.args = "-e 30" + } +} diff --git a/modules/nf-core/fastp/tests/tags.yml b/modules/nf-core/fastp/tests/tags.yml new file mode 100644 index 0000000..c1afcce --- /dev/null +++ b/modules/nf-core/fastp/tests/tags.yml @@ -0,0 +1,2 @@ +fastp: + - modules/nf-core/fastp/** diff --git a/modules/nf-core/fastqc/tests/main.nf.test b/modules/nf-core/fastqc/tests/main.nf.test index 70edae4..e9d79a0 100644 --- a/modules/nf-core/fastqc/tests/main.nf.test +++ b/modules/nf-core/fastqc/tests/main.nf.test @@ -23,17 +23,14 @@ nextflow_process { then { assertAll ( - { assert process.success }, - - // NOTE The report contains the date inside it, which means that the md5sum is stable per day, but not longer than that. So you can't md5sum it. - // looks like this:
    Mon 2 Oct 2023
    test.gz
    - // https://github.com/nf-core/modules/pull/3903#issuecomment-1743620039 - - { assert process.out.html[0][1] ==~ ".*/test_fastqc.html" }, - { assert process.out.zip[0][1] ==~ ".*/test_fastqc.zip" }, - { assert path(process.out.html[0][1]).text.contains("
    ") }, - - { assert snapshot(process.out.versions).match("fastqc_versions_single") } + { assert process.success }, + // NOTE The report contains the date inside it, which means that the md5sum is stable per day, but not longer than that. So you can't md5sum it. + // looks like this:
    Mon 2 Oct 2023
    test.gz
    + // https://github.com/nf-core/modules/pull/3903#issuecomment-1743620039 + { assert process.out.html[0][1] ==~ ".*/test_fastqc.html" }, + { assert process.out.zip[0][1] ==~ ".*/test_fastqc.zip" }, + { assert path(process.out.html[0][1]).text.contains("") }, + { assert snapshot(process.out.versions).match() } ) } } @@ -54,16 +51,14 @@ nextflow_process { then { assertAll ( - { assert process.success }, - - { assert process.out.html[0][1][0] ==~ ".*/test_1_fastqc.html" }, - { assert process.out.html[0][1][1] ==~ ".*/test_2_fastqc.html" }, - { assert process.out.zip[0][1][0] ==~ ".*/test_1_fastqc.zip" }, - { assert process.out.zip[0][1][1] ==~ ".*/test_2_fastqc.zip" }, - { assert path(process.out.html[0][1][0]).text.contains("") }, - { assert path(process.out.html[0][1][1]).text.contains("") }, - - { assert snapshot(process.out.versions).match("fastqc_versions_paired") } + { assert process.success }, + { assert process.out.html[0][1][0] ==~ ".*/test_1_fastqc.html" }, + { assert process.out.html[0][1][1] ==~ ".*/test_2_fastqc.html" }, + { assert process.out.zip[0][1][0] ==~ ".*/test_1_fastqc.zip" }, + { assert process.out.zip[0][1][1] ==~ ".*/test_2_fastqc.zip" }, + { assert path(process.out.html[0][1][0]).text.contains("") }, + { assert path(process.out.html[0][1][1]).text.contains("") }, + { assert snapshot(process.out.versions).match() } ) } } @@ -83,13 +78,11 @@ nextflow_process { then { assertAll ( - { assert process.success }, - - { assert process.out.html[0][1] ==~ ".*/test_fastqc.html" }, - { assert process.out.zip[0][1] ==~ ".*/test_fastqc.zip" }, - { assert path(process.out.html[0][1]).text.contains("") }, - - { assert snapshot(process.out.versions).match("fastqc_versions_interleaved") } + { assert process.success }, + { assert process.out.html[0][1] ==~ ".*/test_fastqc.html" }, + { assert process.out.zip[0][1] ==~ ".*/test_fastqc.zip" }, + { assert path(process.out.html[0][1]).text.contains("") }, + { assert snapshot(process.out.versions).match() } ) } } @@ -109,13 +102,11 @@ nextflow_process { then { assertAll ( - { assert process.success }, - - { assert process.out.html[0][1] ==~ ".*/test_fastqc.html" }, - { assert process.out.zip[0][1] ==~ ".*/test_fastqc.zip" }, - { assert path(process.out.html[0][1]).text.contains("") }, - - { assert snapshot(process.out.versions).match("fastqc_versions_bam") } + { assert process.success }, + { assert process.out.html[0][1] ==~ ".*/test_fastqc.html" }, + { assert process.out.zip[0][1] ==~ ".*/test_fastqc.zip" }, + { assert path(process.out.html[0][1]).text.contains("") }, + { assert snapshot(process.out.versions).match() } ) } } @@ -138,22 +129,20 @@ nextflow_process { then { assertAll ( - { assert process.success }, - - { assert process.out.html[0][1][0] ==~ ".*/test_1_fastqc.html" }, - { assert process.out.html[0][1][1] ==~ ".*/test_2_fastqc.html" }, - { assert process.out.html[0][1][2] ==~ ".*/test_3_fastqc.html" }, - { assert process.out.html[0][1][3] ==~ ".*/test_4_fastqc.html" }, - { assert process.out.zip[0][1][0] ==~ ".*/test_1_fastqc.zip" }, - { assert process.out.zip[0][1][1] ==~ ".*/test_2_fastqc.zip" }, - { assert process.out.zip[0][1][2] ==~ ".*/test_3_fastqc.zip" }, - { assert process.out.zip[0][1][3] ==~ ".*/test_4_fastqc.zip" }, - { assert path(process.out.html[0][1][0]).text.contains("") }, - { assert path(process.out.html[0][1][1]).text.contains("") }, - { assert path(process.out.html[0][1][2]).text.contains("") }, - { assert path(process.out.html[0][1][3]).text.contains("") }, - - { assert snapshot(process.out.versions).match("fastqc_versions_multiple") } + { assert process.success }, + { assert process.out.html[0][1][0] ==~ ".*/test_1_fastqc.html" }, + { assert process.out.html[0][1][1] ==~ ".*/test_2_fastqc.html" }, + { assert process.out.html[0][1][2] ==~ ".*/test_3_fastqc.html" }, + { assert process.out.html[0][1][3] ==~ ".*/test_4_fastqc.html" }, + { assert process.out.zip[0][1][0] ==~ ".*/test_1_fastqc.zip" }, + { assert process.out.zip[0][1][1] ==~ ".*/test_2_fastqc.zip" }, + { assert process.out.zip[0][1][2] ==~ ".*/test_3_fastqc.zip" }, + { assert process.out.zip[0][1][3] ==~ ".*/test_4_fastqc.zip" }, + { assert path(process.out.html[0][1][0]).text.contains("") }, + { assert path(process.out.html[0][1][1]).text.contains("") }, + { assert path(process.out.html[0][1][2]).text.contains("") }, + { assert path(process.out.html[0][1][3]).text.contains("") }, + { assert snapshot(process.out.versions).match() } ) } } @@ -173,21 +162,18 @@ nextflow_process { then { assertAll ( - { assert process.success }, - - { assert process.out.html[0][1] ==~ ".*/mysample_fastqc.html" }, - { assert process.out.zip[0][1] ==~ ".*/mysample_fastqc.zip" }, - { assert path(process.out.html[0][1]).text.contains("") }, - - { assert snapshot(process.out.versions).match("fastqc_versions_custom_prefix") } + { assert process.success }, + { assert process.out.html[0][1] ==~ ".*/mysample_fastqc.html" }, + { assert process.out.zip[0][1] ==~ ".*/mysample_fastqc.zip" }, + { assert path(process.out.html[0][1]).text.contains("") }, + { assert snapshot(process.out.versions).match() } ) } } test("sarscov2 single-end [fastq] - stub") { - options "-stub" - + options "-stub" when { process { """ @@ -201,12 +187,123 @@ nextflow_process { then { assertAll ( - { assert process.success }, - { assert snapshot(process.out.html.collect { file(it[1]).getName() } + - process.out.zip.collect { file(it[1]).getName() } + - process.out.versions ).match("fastqc_stub") } + { assert process.success }, + { assert snapshot(process.out).match() } ) } } + test("sarscov2 paired-end [fastq] - stub") { + + options "-stub" + when { + process { + """ + input[0] = Channel.of([ + [id: 'test', single_end: false], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) ] + ]) + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("sarscov2 interleaved [fastq] - stub") { + + options "-stub" + when { + process { + """ + input[0] = Channel.of([ + [id: 'test', single_end: false], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_interleaved.fastq.gz', checkIfExists: true) + ]) + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("sarscov2 paired-end [bam] - stub") { + + options "-stub" + when { + process { + """ + input[0] = Channel.of([ + [id: 'test', single_end: false], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true) + ]) + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("sarscov2 multiple [fastq] - stub") { + + options "-stub" + when { + process { + """ + input[0] = Channel.of([ + [id: 'test', single_end: false], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test2_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test2_2.fastq.gz', checkIfExists: true) ] + ]) + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("sarscov2 custom_prefix - stub") { + + options "-stub" + when { + process { + """ + input[0] = Channel.of([ + [ id:'mysample', single_end:true ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) + ]) + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } } diff --git a/modules/nf-core/fastqc/tests/main.nf.test.snap b/modules/nf-core/fastqc/tests/main.nf.test.snap index 86f7c31..d5db309 100644 --- a/modules/nf-core/fastqc/tests/main.nf.test.snap +++ b/modules/nf-core/fastqc/tests/main.nf.test.snap @@ -1,88 +1,392 @@ { - "fastqc_versions_interleaved": { + "sarscov2 custom_prefix": { "content": [ [ "versions.yml:md5,e1cc25ca8af856014824abd842e93978" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.3" }, - "timestamp": "2024-01-31T17:40:07.293713" + "timestamp": "2024-07-22T11:02:16.374038" }, - "fastqc_stub": { + "sarscov2 single-end [fastq] - stub": { "content": [ - [ - "test.html", - "test.zip", - "versions.yml:md5,e1cc25ca8af856014824abd842e93978" - ] + { + "0": [ + [ + { + "id": "test", + "single_end": true + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": true + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ], + "html": [ + [ + { + "id": "test", + "single_end": true + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ], + "zip": [ + [ + { + "id": "test", + "single_end": true + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T11:02:24.993809" + }, + "sarscov2 custom_prefix - stub": { + "content": [ + { + "0": [ + [ + { + "id": "mysample", + "single_end": true + }, + "mysample.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "mysample", + "single_end": true + }, + "mysample.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ], + "html": [ + [ + { + "id": "mysample", + "single_end": true + }, + "mysample.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ], + "zip": [ + [ + { + "id": "mysample", + "single_end": true + }, + "mysample.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.3" }, - "timestamp": "2024-01-31T17:31:01.425198" + "timestamp": "2024-07-22T11:03:10.93942" }, - "fastqc_versions_multiple": { + "sarscov2 interleaved [fastq]": { "content": [ [ "versions.yml:md5,e1cc25ca8af856014824abd842e93978" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.3" }, - "timestamp": "2024-01-31T17:40:55.797907" + "timestamp": "2024-07-22T11:01:42.355718" }, - "fastqc_versions_bam": { + "sarscov2 paired-end [bam]": { "content": [ [ "versions.yml:md5,e1cc25ca8af856014824abd842e93978" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.3" }, - "timestamp": "2024-01-31T17:40:26.795862" + "timestamp": "2024-07-22T11:01:53.276274" }, - "fastqc_versions_single": { + "sarscov2 multiple [fastq]": { "content": [ [ "versions.yml:md5,e1cc25ca8af856014824abd842e93978" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.3" }, - "timestamp": "2024-01-31T17:39:27.043675" + "timestamp": "2024-07-22T11:02:05.527626" }, - "fastqc_versions_paired": { + "sarscov2 paired-end [fastq]": { "content": [ [ "versions.yml:md5,e1cc25ca8af856014824abd842e93978" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T11:01:31.188871" + }, + "sarscov2 paired-end [fastq] - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ], + "html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ], + "zip": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T11:02:34.273566" + }, + "sarscov2 multiple [fastq] - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ], + "html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ], + "zip": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" }, - "timestamp": "2024-01-31T17:39:47.584191" + "timestamp": "2024-07-22T11:03:02.304411" }, - "fastqc_versions_custom_prefix": { + "sarscov2 single-end [fastq]": { "content": [ [ "versions.yml:md5,e1cc25ca8af856014824abd842e93978" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T11:01:19.095607" + }, + "sarscov2 interleaved [fastq] - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ], + "html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ], + "zip": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T11:02:44.640184" + }, + "sarscov2 paired-end [bam] - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ], + "html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ], + "zip": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" }, - "timestamp": "2024-01-31T17:41:14.576531" + "timestamp": "2024-07-22T11:02:53.550742" } } \ No newline at end of file diff --git a/modules/nf-core/gffcompare/environment.yml b/modules/nf-core/gffcompare/environment.yml new file mode 100644 index 0000000..bcd633e --- /dev/null +++ b/modules/nf-core/gffcompare/environment.yml @@ -0,0 +1,7 @@ +name: gffcompare +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bioconda::gffcompare=0.12.6 diff --git a/modules/nf-core/gffcompare/main.nf b/modules/nf-core/gffcompare/main.nf new file mode 100644 index 0000000..edca0f2 --- /dev/null +++ b/modules/nf-core/gffcompare/main.nf @@ -0,0 +1,63 @@ +process GFFCOMPARE { + tag "$meta.id" + label 'process_single' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/gffcompare:0.12.6--h9f5acd7_0' : + 'biocontainers/gffcompare:0.12.6--h9f5acd7_0' }" + + input: + tuple val(meta), path(gtfs) + tuple val(meta2), path(fasta), path(fai) + tuple val(meta3), path(reference_gtf) + + output: + tuple val(meta), path("*.annotated.gtf"), optional: true, emit: annotated_gtf + tuple val(meta), path("*.combined.gtf") , optional: true, emit: combined_gtf + tuple val(meta), path("*.tmap") , optional: true, emit: tmap + tuple val(meta), path("*.refmap") , optional: true, emit: refmap + tuple val(meta), path("*.loci") , emit: loci + tuple val(meta), path("*.stats") , emit: stats + tuple val(meta), path("*.tracking") , emit: tracking + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def ref_fasta = fasta ? "-s ${fasta}" : '' + def ref_gtf = reference_gtf ? "-r ${reference_gtf}" : '' + """ + gffcompare \\ + $args \\ + $ref_fasta \\ + $ref_gtf \\ + -o $prefix \\ + $gtfs + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + gffcompare: \$(echo \$(gffcompare --version 2>&1) | sed 's/^gffcompare v//') + END_VERSIONS + """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.annotated.gtf + touch ${prefix}.combined.gtf + touch ${prefix}.tmap + touch ${prefix}.refmap + touch ${prefix}.loci + touch ${prefix}.stats + touch ${prefix}.tracking + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + gffcompare: \$(echo \$(gffcompare --version 2>&1) | sed 's/^gffcompare v//') + END_VERSIONS + """ +} diff --git a/modules/nf-core/gffcompare/meta.yml b/modules/nf-core/gffcompare/meta.yml new file mode 100644 index 0000000..674f08c --- /dev/null +++ b/modules/nf-core/gffcompare/meta.yml @@ -0,0 +1,91 @@ +name: "gffcompare" +description: Compare, merge, annotate and estimate accuracy of generated gtf files +keywords: + - transcripts + - gtf + - merge + - compare +tools: + - "gffcompare": + description: "GffCompare by Geo Pertea" + homepage: "http://ccb.jhu.edu/software/stringtie/gffcompare.shtml" + documentation: "http://ccb.jhu.edu/software/stringtie/gffcompare.shtml" + tool_dev_url: "https://github.com/gpertea/gffcompare" + doi: "10.12688/f1000research.23297.1" + licence: ["MIT"] +input: + - meta: + type: map + description: | + Groovy Map containing meta data + e.g. [ id:'test', single_end:false ] + - gtfs: + type: file + description: | + GTF/GFF files + e.g. [ 'file_1.gtf', 'file_2.gtf' ] + pattern: "*.{gtf,gff}" + - fasta: + type: file + description: Genome reference fasta file (optional) + pattern: "*.{fasta,fa}" + - fai: + type: file + description: Index for fasta file + pattern: "*.fai" + - reference_gtf: + type: file + description: Reference annotation in gtf/gff format (optional) + pattern: "*.{gtf,gff}" +output: + - meta: + type: map + description: | + Groovy Map containing meta data + e.g. [ id:'test', single_end:false ] + - annotated_gtf: + type: file + description: | + Annotated gtf file when reference gtf is provided (optional) + pattern: "*.annotated.gtf" + - combined_gtf: + type: file + description: | + Combined gtf file when multiple input files are + provided (optional) + pattern: "*.annotated.gtf" + - tmap: + type: file + description: | + File listing the most closely matching reference transcript + for each query transcript (optional) + pattern: "*.tmap" + - refmap: + type: file + description: | + File listing the reference transcripts with overlapping + query transcripts (optional) + pattern: "*.refmap" + - loci: + type: file + description: File with loci + pattern: "*.loci" + - stats: + type: file + description: | + File with stats for input transcripts as compared to + reference alternatively stats for the combined gtf + pattern: "*.stats" + - tracking: + type: file + description: | + This file matches transcripts up between samples + pattern: "*.tracking" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@jemten" +maintainers: + - "@jemten" diff --git a/modules/nf-core/gffread/environment.yml b/modules/nf-core/gffread/environment.yml new file mode 100644 index 0000000..c6df58a --- /dev/null +++ b/modules/nf-core/gffread/environment.yml @@ -0,0 +1,7 @@ +name: gffread +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bioconda::gffread=0.12.7 diff --git a/modules/nf-core/gffread/main.nf b/modules/nf-core/gffread/main.nf new file mode 100644 index 0000000..da55cba --- /dev/null +++ b/modules/nf-core/gffread/main.nf @@ -0,0 +1,60 @@ +process GFFREAD { + tag "$meta.id" + label 'process_low' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/gffread:0.12.7--hdcf5f25_4' : + 'biocontainers/gffread:0.12.7--hdcf5f25_4' }" + + input: + tuple val(meta), path(gff) + path fasta + + output: + tuple val(meta), path("*.gtf") , emit: gtf , optional: true + tuple val(meta), path("*.gff3") , emit: gffread_gff , optional: true + tuple val(meta), path("*.fasta"), emit: gffread_fasta , optional: true + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def extension = args.contains("-T") ? 'gtf' : ( ( ['-w', '-x', '-y' ].any { args.contains(it) } ) ? 'fasta' : 'gff3' ) + def fasta_arg = fasta ? "-g $fasta" : '' + def output_name = "${prefix}.${extension}" + def output = extension == "fasta" ? "$output_name" : "-o $output_name" + def args_sorted = args.replaceAll(/(.*)(-[wxy])(.*)/) { all, pre, param, post -> "$pre $post $param" }.trim() + // args_sorted = Move '-w', '-x', and '-y' to the end of the args string as gffread expects the file name after these parameters + if ( "$output_name" in [ "$gff", "$fasta" ] ) error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!" + """ + gffread \\ + $gff \\ + $fasta_arg \\ + $args_sorted \\ + $output + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + gffread: \$(gffread --version 2>&1) + END_VERSIONS + """ + + stub: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def extension = args.contains("-T") ? 'gtf' : ( ( ['-w', '-x', '-y' ].any { args.contains(it) } ) ? 'fasta' : 'gff3' ) + def output_name = "${prefix}.${extension}" + if ( "$output_name" in [ "$gff", "$fasta" ] ) error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!" + """ + touch $output_name + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + gffread: \$(gffread --version 2>&1) + END_VERSIONS + """ +} diff --git a/modules/nf-core/gffread/meta.yml b/modules/nf-core/gffread/meta.yml new file mode 100644 index 0000000..c060282 --- /dev/null +++ b/modules/nf-core/gffread/meta.yml @@ -0,0 +1,55 @@ +name: gffread +description: Validate, filter, convert and perform various other operations on GFF files +keywords: + - gff + - conversion + - validation +tools: + - gffread: + description: GFF/GTF utility providing format conversions, region filtering, FASTA sequence extraction and more. + homepage: http://ccb.jhu.edu/software/stringtie/gff.shtml#gffread + documentation: http://ccb.jhu.edu/software/stringtie/gff.shtml#gffread + tool_dev_url: https://github.com/gpertea/gffread + doi: 10.12688/f1000research.23297.1 + licence: ["MIT"] +input: + - meta: + type: map + description: | + Groovy Map containing meta data + e.g. [ id:'test' ] + - gff: + type: file + description: A reference file in either the GFF3, GFF2 or GTF format. + pattern: "*.{gff, gtf}" + - fasta: + type: file + description: A multi-fasta file with the genomic sequences + pattern: "*.{fasta,fa,faa,fas,fsa}" +output: + - meta: + type: map + description: | + Groovy Map containing meta data + e.g. [ id:'test' ] + - gtf: + type: file + description: GTF file resulting from the conversion of the GFF input file if '-T' argument is present + pattern: "*.{gtf}" + - gffread_gff: + type: file + description: GFF3 file resulting from the conversion of the GFF input file if '-T' argument is absent + pattern: "*.gff3" + - gffread_fasta: + type: file + description: Fasta file produced when either of '-w', '-x', '-y' parameters is present + pattern: "*.fasta" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@edmundmiller" +maintainers: + - "@edmundmiller" + - "@gallvp" diff --git a/modules/nf-core/gffread/tests/main.nf.test b/modules/nf-core/gffread/tests/main.nf.test new file mode 100644 index 0000000..4cd13dc --- /dev/null +++ b/modules/nf-core/gffread/tests/main.nf.test @@ -0,0 +1,223 @@ +nextflow_process { + + name "Test Process GFFREAD" + script "../main.nf" + process "GFFREAD" + + tag "gffread" + tag "modules_nfcore" + tag "modules" + + test("sarscov2-gff3-gtf") { + + config "./nextflow.config" + + when { + params { + outdir = "$outputDir" + } + process { + """ + input[0] = [ + [id: 'test'], + file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.gff3", checkIfExists: true) + ] + input[1] = [] + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() }, + { assert process.out.gffread_gff == [] }, + { assert process.out.gffread_fasta == [] } + ) + } + + } + + test("sarscov2-gff3-gtf-stub") { + + options '-stub' + config "./nextflow.config" + + when { + params { + outdir = "$outputDir" + } + process { + """ + input[0] = [ + [id: 'test'], + file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.gff3", checkIfExists: true) + ] + input[1] = [] + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() }, + { assert process.out.gffread_gff == [] }, + { assert process.out.gffread_fasta == [] } + ) + } + + } + + test("sarscov2-gff3-gff3") { + + config "./nextflow-gff3.config" + + when { + params { + outdir = "$outputDir" + } + process { + """ + input[0] = [ + [id: 'test'], + file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.gff3", checkIfExists: true) + ] + input[1] = [] + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() }, + { assert process.out.gtf == [] }, + { assert process.out.gffread_fasta == [] } + ) + } + + } + + test("sarscov2-gff3-gff3-stub") { + + options '-stub' + config "./nextflow-gff3.config" + + when { + params { + outdir = "$outputDir" + } + process { + """ + input[0] = [ + [id: 'test'], + file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.gff3", checkIfExists: true) + ] + input[1] = [] + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() }, + { assert process.out.gtf == [] }, + { assert process.out.gffread_fasta == [] } + ) + } + + } + + test("sarscov2-gff3-fasta") { + + config "./nextflow-fasta.config" + + when { + params { + outdir = "$outputDir" + } + process { + """ + input[0] = [ + [id: 'test'], + file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.gff3", checkIfExists: true) + ] + input[1] = file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.fasta", checkIfExists: true) + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() }, + { assert process.out.gtf == [] }, + { assert process.out.gffread_gff == [] } + ) + } + + } + + test("sarscov2-gff3-fasta-stub") { + + options '-stub' + config "./nextflow-fasta.config" + + when { + params { + outdir = "$outputDir" + } + process { + """ + input[0] = [ + [id: 'test'], + file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.gff3", checkIfExists: true) + ] + input[1] = file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.fasta", checkIfExists: true) + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() }, + { assert process.out.gtf == [] }, + { assert process.out.gffread_gff == [] } + ) + } + + } + + test("sarscov2-gff3-fasta-fail-catch") { + + options '-stub' + config "./nextflow-fasta.config" + + when { + params { + outdir = "$outputDir" + } + process { + """ + input[0] = [ + [id: 'genome'], + file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.gff3", checkIfExists: true) + ] + input[1] = file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.fasta", checkIfExists: true) + """ + } + } + + then { + assertAll ( + { assert ! process.success }, + { assert process.stdout.toString().contains("Input and output names are the same") } + ) + } + + } + +} diff --git a/modules/nf-core/gffread/tests/main.nf.test.snap b/modules/nf-core/gffread/tests/main.nf.test.snap new file mode 100644 index 0000000..1526232 --- /dev/null +++ b/modules/nf-core/gffread/tests/main.nf.test.snap @@ -0,0 +1,272 @@ +{ + "sarscov2-gff3-gtf": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.gtf:md5,1ea0ae98d3388e0576407dc4a24ef428" + ] + ], + "1": [ + + ], + "2": [ + + ], + "3": [ + "versions.yml:md5,05f671c6c6e530acedad0af0a5948dbd" + ], + "gffread_fasta": [ + + ], + "gffread_gff": [ + + ], + "gtf": [ + [ + { + "id": "test" + }, + "test.gtf:md5,1ea0ae98d3388e0576407dc4a24ef428" + ] + ], + "versions": [ + "versions.yml:md5,05f671c6c6e530acedad0af0a5948dbd" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-04-09T10:48:56.496187" + }, + "sarscov2-gff3-gff3": { + "content": [ + { + "0": [ + + ], + "1": [ + [ + { + "id": "test" + }, + "test.gff3:md5,c4e5da6267c6bee5899a2c204ae1ad91" + ] + ], + "2": [ + + ], + "3": [ + "versions.yml:md5,05f671c6c6e530acedad0af0a5948dbd" + ], + "gffread_fasta": [ + + ], + "gffread_gff": [ + [ + { + "id": "test" + }, + "test.gff3:md5,c4e5da6267c6bee5899a2c204ae1ad91" + ] + ], + "gtf": [ + + ], + "versions": [ + "versions.yml:md5,05f671c6c6e530acedad0af0a5948dbd" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-04-09T10:49:00.892782" + }, + "sarscov2-gff3-gtf-stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.gtf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + + ], + "2": [ + + ], + "3": [ + "versions.yml:md5,05f671c6c6e530acedad0af0a5948dbd" + ], + "gffread_fasta": [ + + ], + "gffread_gff": [ + + ], + "gtf": [ + [ + { + "id": "test" + }, + "test.gtf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,05f671c6c6e530acedad0af0a5948dbd" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-04-09T11:11:26.975666" + }, + "sarscov2-gff3-fasta-stub": { + "content": [ + { + "0": [ + + ], + "1": [ + + ], + "2": [ + [ + { + "id": "test" + }, + "test.fasta:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + "versions.yml:md5,05f671c6c6e530acedad0af0a5948dbd" + ], + "gffread_fasta": [ + [ + { + "id": "test" + }, + "test.fasta:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "gffread_gff": [ + + ], + "gtf": [ + + ], + "versions": [ + "versions.yml:md5,05f671c6c6e530acedad0af0a5948dbd" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-04-09T11:11:44.34792" + }, + "sarscov2-gff3-gff3-stub": { + "content": [ + { + "0": [ + + ], + "1": [ + [ + { + "id": "test" + }, + "test.gff3:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + + ], + "3": [ + "versions.yml:md5,05f671c6c6e530acedad0af0a5948dbd" + ], + "gffread_fasta": [ + + ], + "gffread_gff": [ + [ + { + "id": "test" + }, + "test.gff3:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "gtf": [ + + ], + "versions": [ + "versions.yml:md5,05f671c6c6e530acedad0af0a5948dbd" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-04-09T11:11:35.221671" + }, + "sarscov2-gff3-fasta": { + "content": [ + { + "0": [ + + ], + "1": [ + + ], + "2": [ + [ + { + "id": "test" + }, + "test.fasta:md5,5f8108fb51739a0588ccf0a251de919a" + ] + ], + "3": [ + "versions.yml:md5,05f671c6c6e530acedad0af0a5948dbd" + ], + "gffread_fasta": [ + [ + { + "id": "test" + }, + "test.fasta:md5,5f8108fb51739a0588ccf0a251de919a" + ] + ], + "gffread_gff": [ + + ], + "gtf": [ + + ], + "versions": [ + "versions.yml:md5,05f671c6c6e530acedad0af0a5948dbd" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-04-09T10:54:02.88143" + } +} \ No newline at end of file diff --git a/modules/nf-core/gffread/tests/nextflow-fasta.config b/modules/nf-core/gffread/tests/nextflow-fasta.config new file mode 100644 index 0000000..ac6cb14 --- /dev/null +++ b/modules/nf-core/gffread/tests/nextflow-fasta.config @@ -0,0 +1,5 @@ +process { + withName: GFFREAD { + ext.args = '-w -S' + } +} diff --git a/modules/nf-core/gffread/tests/nextflow-gff3.config b/modules/nf-core/gffread/tests/nextflow-gff3.config new file mode 100644 index 0000000..afe0830 --- /dev/null +++ b/modules/nf-core/gffread/tests/nextflow-gff3.config @@ -0,0 +1,5 @@ +process { + withName: GFFREAD { + ext.args = '' + } +} diff --git a/modules/nf-core/gffread/tests/nextflow.config b/modules/nf-core/gffread/tests/nextflow.config new file mode 100644 index 0000000..74b2509 --- /dev/null +++ b/modules/nf-core/gffread/tests/nextflow.config @@ -0,0 +1,5 @@ +process { + withName: GFFREAD { + ext.args = '-T' + } +} diff --git a/modules/nf-core/gffread/tests/tags.yml b/modules/nf-core/gffread/tests/tags.yml new file mode 100644 index 0000000..0557606 --- /dev/null +++ b/modules/nf-core/gffread/tests/tags.yml @@ -0,0 +1,2 @@ +gffread: + - modules/nf-core/gffread/** diff --git a/modules/nf-core/gt/gff3/environment.yml b/modules/nf-core/gt/gff3/environment.yml new file mode 100644 index 0000000..8289fb3 --- /dev/null +++ b/modules/nf-core/gt/gff3/environment.yml @@ -0,0 +1,9 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json +name: "gt_gff3" +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - "bioconda::genometools-genometools=1.6.5" diff --git a/modules/nf-core/gt/gff3/main.nf b/modules/nf-core/gt/gff3/main.nf new file mode 100644 index 0000000..6324a39 --- /dev/null +++ b/modules/nf-core/gt/gff3/main.nf @@ -0,0 +1,51 @@ +process GT_GFF3 { + tag "$meta.id" + label 'process_single' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/genometools-genometools:1.6.5--py310h3db02ab_0': + 'biocontainers/genometools-genometools:1.6.5--py310h3db02ab_0' }" + + input: + tuple val(meta), path(gff3) + + output: + tuple val(meta), path("*.gt.gff3") , emit: gt_gff3 , optional: true + tuple val(meta), path("*.error.log"), emit: error_log , optional: true + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + """ + gt \\ + gff3 \\ + $args \\ + "$gff3" \\ + > "${prefix}.gt.gff3" \\ + 2> >(tee "${prefix}.error.log" >&2) \\ + || echo "Errors from gt-gff3 printed to ${prefix}.error.log" + + if grep -q "gt gff3: error:" "${prefix}.error.log"; then + echo "gt-gff3 failed to parse $gff3" + + rm \\ + "${prefix}.gt.gff3" + else + echo "gt-gff3 successfully parsed $gff3" + + mv \\ + "${prefix}.error.log" \\ + gt_gff3.stderr + fi + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + genometools: \$(gt --version | head -1 | sed 's/gt (GenomeTools) //') + END_VERSIONS + """ +} diff --git a/modules/nf-core/gt/gff3/meta.yml b/modules/nf-core/gt/gff3/meta.yml new file mode 100644 index 0000000..5cecd8d --- /dev/null +++ b/modules/nf-core/gt/gff3/meta.yml @@ -0,0 +1,48 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/meta-schema.json +name: "gt_gff3" +description: "GenomeTools gt-gff3 utility to parse, possibly transform, and output GFF3 files" +keywords: + - genome + - gff3 + - annotation +tools: + - "gt": + description: "The GenomeTools genome analysis system" + homepage: "https://genometools.org/index.html" + documentation: "https://genometools.org/documentation.html" + tool_dev_url: "https://github.com/genometools/genometools" + doi: "10.1109/TCBB.2013.68" + licence: ["ISC"] +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'test' ]` + - gff3: + type: file + description: Input gff3 file + pattern: "*.{gff,gff3}" +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'test' ]` + - gt_gff3: + type: file + description: Parsed gff3 file produced only if there is no parsing error + pattern: "*.gt.gff3" + - error_log: + type: file + description: Error log if gt-gff3 failed to parse the input gff3 file + pattern: "*.error.log" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@gallvp" +maintainers: + - "@gallvp" diff --git a/modules/nf-core/gt/gff3/tests/main.nf.test b/modules/nf-core/gt/gff3/tests/main.nf.test new file mode 100644 index 0000000..46c7da3 --- /dev/null +++ b/modules/nf-core/gt/gff3/tests/main.nf.test @@ -0,0 +1,61 @@ +nextflow_process { + + name "Test Process GT_GFF3" + script "../main.nf" + process "GT_GFF3" + config "./nextflow.config" + + tag "modules" + tag "modules_nfcore" + tag "gt" + tag "gt/gff3" + + test("sarscov2-gff3-valid") { + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.gff3', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() }, + { assert process.out.gt_gff3 != null }, + { assert process.out.error_log == [] } + ) + } + + } + + test("sarscov2-gff3-invalid") { + when { + process { + """ + input[0] = Channel.of( + '##gff-version 3', + 'chr22\tID=gene:ENSG00000233995;Name=AP000547.1' + ) + .collectFile(name: 'sample.gff3', newLine: true) + .map { file -> [ [ id:'test' ], file ] } + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() }, + { assert process.out.gt_gff3 == [] }, + { assert process.out.error_log != null }, + { assert path(process.out.error_log.get(0).get(1)).getText().contains("gt gff3: error:") } + ) + } + } + +} diff --git a/modules/nf-core/gt/gff3/tests/main.nf.test.snap b/modules/nf-core/gt/gff3/tests/main.nf.test.snap new file mode 100644 index 0000000..6e454f1 --- /dev/null +++ b/modules/nf-core/gt/gff3/tests/main.nf.test.snap @@ -0,0 +1,72 @@ +{ + "sarscov2-gff3-invalid": { + "content": [ + { + "0": [ + + ], + "1": [ + [ + { + "id": "test" + }, + "test.error.log:md5,31e6117c516f936ec403f792c732bc76" + ] + ], + "2": [ + "versions.yml:md5,9753770dd19a2a306dcf16d4aaf049eb" + ], + "error_log": [ + [ + { + "id": "test" + }, + "test.error.log:md5,31e6117c516f936ec403f792c732bc76" + ] + ], + "gt_gff3": [ + + ], + "versions": [ + "versions.yml:md5,9753770dd19a2a306dcf16d4aaf049eb" + ] + } + ], + "timestamp": "2023-11-29T10:42:11.408352" + }, + "sarscov2-gff3-valid": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.gt.gff3:md5,2ae900237ace415557b8735fac088b85" + ] + ], + "1": [ + + ], + "2": [ + "versions.yml:md5,9753770dd19a2a306dcf16d4aaf049eb" + ], + "error_log": [ + + ], + "gt_gff3": [ + [ + { + "id": "test" + }, + "test.gt.gff3:md5,2ae900237ace415557b8735fac088b85" + ] + ], + "versions": [ + "versions.yml:md5,9753770dd19a2a306dcf16d4aaf049eb" + ] + } + ], + "timestamp": "2023-11-29T10:42:07.817894" + } +} \ No newline at end of file diff --git a/modules/nf-core/gt/gff3/tests/nextflow.config b/modules/nf-core/gt/gff3/tests/nextflow.config new file mode 100644 index 0000000..af56226 --- /dev/null +++ b/modules/nf-core/gt/gff3/tests/nextflow.config @@ -0,0 +1,3 @@ +process { + ext.args = '-tidy -retainids' +} diff --git a/modules/nf-core/gt/gff3/tests/tags.yml b/modules/nf-core/gt/gff3/tests/tags.yml new file mode 100644 index 0000000..0ce15a9 --- /dev/null +++ b/modules/nf-core/gt/gff3/tests/tags.yml @@ -0,0 +1,2 @@ +gt/gff3: + - "modules/nf-core/gt/gff3/**" diff --git a/modules/nf-core/gunzip/environment.yml b/modules/nf-core/gunzip/environment.yml new file mode 100644 index 0000000..dfc02a7 --- /dev/null +++ b/modules/nf-core/gunzip/environment.yml @@ -0,0 +1,9 @@ +name: gunzip +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - conda-forge::grep=3.11 + - conda-forge::sed=4.8 + - conda-forge::tar=1.34 diff --git a/modules/nf-core/gunzip/main.nf b/modules/nf-core/gunzip/main.nf new file mode 100644 index 0000000..5e67e3b --- /dev/null +++ b/modules/nf-core/gunzip/main.nf @@ -0,0 +1,55 @@ +process GUNZIP { + tag "$archive" + label 'process_single' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/ubuntu:22.04' : + 'nf-core/ubuntu:22.04' }" + + input: + tuple val(meta), path(archive) + + output: + tuple val(meta), path("$gunzip"), emit: gunzip + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def extension = ( archive.toString() - '.gz' ).tokenize('.')[-1] + def name = archive.toString() - '.gz' - ".$extension" + def prefix = task.ext.prefix ?: name + gunzip = prefix + ".$extension" + """ + # Not calling gunzip itself because it creates files + # with the original group ownership rather than the + # default one for that user / the work directory + gzip \\ + -cd \\ + $args \\ + $archive \\ + > $gunzip + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + gunzip: \$(echo \$(gunzip --version 2>&1) | sed 's/^.*(gzip) //; s/ Copyright.*\$//') + END_VERSIONS + """ + + stub: + def args = task.ext.args ?: '' + def extension = ( archive.toString() - '.gz' ).tokenize('.')[-1] + def name = archive.toString() - '.gz' - ".$extension" + def prefix = task.ext.prefix ?: name + gunzip = prefix + ".$extension" + """ + touch $gunzip + cat <<-END_VERSIONS > versions.yml + "${task.process}": + gunzip: \$(echo \$(gunzip --version 2>&1) | sed 's/^.*(gzip) //; s/ Copyright.*\$//') + END_VERSIONS + """ +} diff --git a/modules/nf-core/gunzip/meta.yml b/modules/nf-core/gunzip/meta.yml new file mode 100644 index 0000000..f32973a --- /dev/null +++ b/modules/nf-core/gunzip/meta.yml @@ -0,0 +1,40 @@ +name: gunzip +description: Compresses and decompresses files. +keywords: + - gunzip + - compression + - decompression +tools: + - gunzip: + description: | + gzip is a file format and a software application used for file compression and decompression. + documentation: https://www.gnu.org/software/gzip/manual/gzip.html + licence: ["GPL-3.0-or-later"] +input: + - meta: + type: map + description: | + Optional groovy Map containing meta information + e.g. [ id:'test', single_end:false ] + - archive: + type: file + description: File to be compressed/uncompressed + pattern: "*.*" +output: + - gunzip: + type: file + description: Compressed/uncompressed file + pattern: "*.*" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@joseespinosa" + - "@drpatelh" + - "@jfy133" +maintainers: + - "@joseespinosa" + - "@drpatelh" + - "@jfy133" + - "@gallvp" diff --git a/modules/nf-core/gunzip/tests/main.nf.test b/modules/nf-core/gunzip/tests/main.nf.test new file mode 100644 index 0000000..776211a --- /dev/null +++ b/modules/nf-core/gunzip/tests/main.nf.test @@ -0,0 +1,121 @@ +nextflow_process { + + name "Test Process GUNZIP" + script "../main.nf" + process "GUNZIP" + tag "gunzip" + tag "modules_nfcore" + tag "modules" + + test("Should run without failures") { + + when { + params { + outdir = "$outputDir" + } + process { + """ + input[0] = Channel.of([ + [], + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) + ] + ) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("Should run without failures - prefix") { + + config './nextflow.config' + + when { + params { + outdir = "$outputDir" + } + process { + """ + input[0] = Channel.of([ + [ id: 'test' ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) + ] + ) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("Should run without failures - stub") { + + options '-stub' + + when { + params { + outdir = "$outputDir" + } + process { + """ + input[0] = Channel.of([ + [], + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) + ] + ) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("Should run without failures - prefix - stub") { + + options '-stub' + config './nextflow.config' + + when { + params { + outdir = "$outputDir" + } + process { + """ + input[0] = Channel.of([ + [ id: 'test' ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) + ] + ) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + +} diff --git a/modules/nf-core/gunzip/tests/main.nf.test.snap b/modules/nf-core/gunzip/tests/main.nf.test.snap new file mode 100644 index 0000000..069967e --- /dev/null +++ b/modules/nf-core/gunzip/tests/main.nf.test.snap @@ -0,0 +1,134 @@ +{ + "Should run without failures - prefix - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.xyz.fastq:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + "versions.yml:md5,54376d32aca20e937a4ec26dac228e84" + ], + "gunzip": [ + [ + { + "id": "test" + }, + "test.xyz.fastq:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,54376d32aca20e937a4ec26dac228e84" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-25T11:35:10.861293" + }, + "Should run without failures - stub": { + "content": [ + { + "0": [ + [ + [ + + ], + "test_1.fastq:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + "versions.yml:md5,54376d32aca20e937a4ec26dac228e84" + ], + "gunzip": [ + [ + [ + + ], + "test_1.fastq:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,54376d32aca20e937a4ec26dac228e84" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-25T11:35:05.857145" + }, + "Should run without failures": { + "content": [ + { + "0": [ + [ + [ + + ], + "test_1.fastq:md5,4161df271f9bfcd25d5845a1e220dbec" + ] + ], + "1": [ + "versions.yml:md5,54376d32aca20e937a4ec26dac228e84" + ], + "gunzip": [ + [ + [ + + ], + "test_1.fastq:md5,4161df271f9bfcd25d5845a1e220dbec" + ] + ], + "versions": [ + "versions.yml:md5,54376d32aca20e937a4ec26dac228e84" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2023-10-17T15:35:37.690477896" + }, + "Should run without failures - prefix": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.xyz.fastq:md5,4161df271f9bfcd25d5845a1e220dbec" + ] + ], + "1": [ + "versions.yml:md5,54376d32aca20e937a4ec26dac228e84" + ], + "gunzip": [ + [ + { + "id": "test" + }, + "test.xyz.fastq:md5,4161df271f9bfcd25d5845a1e220dbec" + ] + ], + "versions": [ + "versions.yml:md5,54376d32aca20e937a4ec26dac228e84" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-25T11:33:32.921739" + } +} \ No newline at end of file diff --git a/modules/nf-core/gunzip/tests/nextflow.config b/modules/nf-core/gunzip/tests/nextflow.config new file mode 100644 index 0000000..dec7764 --- /dev/null +++ b/modules/nf-core/gunzip/tests/nextflow.config @@ -0,0 +1,5 @@ +process { + withName: GUNZIP { + ext.prefix = { "${meta.id}.xyz" } + } +} diff --git a/modules/nf-core/gunzip/tests/tags.yml b/modules/nf-core/gunzip/tests/tags.yml new file mode 100644 index 0000000..fd3f691 --- /dev/null +++ b/modules/nf-core/gunzip/tests/tags.yml @@ -0,0 +1,2 @@ +gunzip: + - modules/nf-core/gunzip/** diff --git a/modules/nf-core/liftoff/environment.yml b/modules/nf-core/liftoff/environment.yml new file mode 100644 index 0000000..7f3eadf --- /dev/null +++ b/modules/nf-core/liftoff/environment.yml @@ -0,0 +1,9 @@ +name: liftoff + +channels: + - conda-forge + - bioconda + - defaults + +dependencies: + - bioconda::liftoff=1.6.3 diff --git a/modules/nf-core/liftoff/main.nf b/modules/nf-core/liftoff/main.nf new file mode 100644 index 0000000..4db5da2 --- /dev/null +++ b/modules/nf-core/liftoff/main.nf @@ -0,0 +1,66 @@ +process LIFTOFF { + tag "$meta.id" + label 'process_high' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/liftoff:1.6.3--pyhdfd78af_0': + 'biocontainers/liftoff:1.6.3--pyhdfd78af_0' }" + + input: + tuple val(meta), path(target_fa) + path ref_fa, name: 'ref_assembly.fa' + path ref_annotation + path ref_db + + output: + tuple val(meta), path("${prefix}.gff3") , emit: gff3 + tuple val(meta), path("*.polished.gff3") , emit: polished_gff3, optional: true + tuple val(meta), path("*.unmapped.txt") , emit: unmapped_txt + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def arg_g = ref_annotation ? "-g $ref_annotation" : '' + def arg_db = ref_db ? "-db $ref_db" : '' + prefix = task.ext.prefix ?: "${meta.id}" + """ + liftoff \\ + $arg_g \\ + $arg_db \\ + -p $task.cpus \\ + -o "${prefix}.gff3" \\ + -u "${prefix}.unmapped.txt" \\ + $args \\ + $target_fa \\ + ref_assembly.fa + + mv \\ + "${prefix}.gff3_polished" \\ + "${prefix}.polished.gff3" \\ + || echo "-polish is absent" + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + liftoff: \$(liftoff --version 2> /dev/null) + END_VERSIONS + """ + + stub: + def args = task.ext.args ?: '' + prefix = task.ext.prefix ?: "${meta.id}" + def touch_polished = args.contains('-polish') ? "touch ${prefix}.polished.gff3" : '' + """ + touch "${prefix}.gff3" + touch "${prefix}.unmapped.txt" + $touch_polished + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + liftoff: \$(liftoff --version 2> /dev/null) + END_VERSIONS + """ +} diff --git a/modules/nf-core/liftoff/meta.yml b/modules/nf-core/liftoff/meta.yml new file mode 100644 index 0000000..10e502c --- /dev/null +++ b/modules/nf-core/liftoff/meta.yml @@ -0,0 +1,71 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/meta-schema.json +name: "liftoff" +description: | + Uses Liftoff to accurately map annotations in GFF or GTF between assemblies of the same, + or closely-related species +keywords: + - genome + - annotation + - gff3 + - gtf + - liftover +tools: + - "liftoff": + description: | + Liftoff is a tool that accurately maps annotations in GFF or GTF between assemblies of the same, + or closely-related species + homepage: "https://github.com/agshumate/Liftoff" + documentation: "https://github.com/agshumate/Liftoff" + tool_dev_url: "https://github.com/agshumate/Liftoff" + doi: "10.1093/bioinformatics/bty191" + licence: ["GPL v3 License"] +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'test' ]` + - target_fa: + type: file + description: Target assembly in fasta format + pattern: "*.{fsa,fa,fasta}" + - ref_fa: + type: file + description: Reference assembly in fasta format + pattern: "*.{fsa,fa,fasta}" + - ref_annotation: + type: file + description: Reference assembly annotations in gtf or gff3 format + pattern: "*.{gtf,gff3}" + - ref_db: + type: file + description: | + Name of feature database; if not specified, the -g argument must + be provided and a database will be built automatically +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'test' ]` + - gff3: + type: file + description: Lifted annotations for the target assembly in gff3 format + pattern: "*.gff3" + - polished_gff3: + type: file + description: Polished lifted annotations for the target assembly in gff3 format + pattern: "*.polished.gff3" + - unmapped_txt: + type: file + description: List of unmapped reference annotations + pattern: "*.unmapped.txt" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@GallVp" +maintainers: + - "@GallVp" diff --git a/modules/nf-core/liftoff/tests/main.nf.test b/modules/nf-core/liftoff/tests/main.nf.test new file mode 100644 index 0000000..c8ebf26 --- /dev/null +++ b/modules/nf-core/liftoff/tests/main.nf.test @@ -0,0 +1,102 @@ +nextflow_process { + + name "Test Process LIFTOFF" + script "../main.nf" + process "LIFTOFF" + config "./nextflow.config" + + tag "modules" + tag "modules_nfcore" + tag "nf-core/gunzip" + tag "liftoff" + tag "gunzip" + + test("homo_sapiens-genome_21_fasta-genome_1_fasta-genome_1_gtf") { + + setup { + run("GUNZIP") { + script "../../../nf-core/gunzip" + + process { + """ + input[0] = [ + [ id:'test' ], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr1/genome.fasta.gz', checkIfExists: true) + ] + """ + } + } + } + + when { + process { + """ + input[0] = [ + [ id:'test' ], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/genome.fasta', checkIfExists: true) + ] + input[1] = GUNZIP.out.gunzip.map { meta, file -> file } + input[2] = [ + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr1/genome.gtf', checkIfExists: true) + ] + input[3] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out.unmapped_txt).match("unmapped_txt") }, + { assert file(process.out.gff3[0][1]).text.contains("chr21\tLiftoff\texon\t34608061\t34608118\t.\t+\t.") }, + { assert file(process.out.polished_gff3[0][1]).text.contains("chr21\tLiftoff\texon\t34608061\t34608118\t.\t+\t.") }, + { assert snapshot(process.out.versions).match("versions") } + ) + } + + } + + test("homo_sapiens-genome_21_fasta-genome_1_fasta-genome_1_gtf-stub") { + options '-stub' + + setup { + run("GUNZIP") { + script "../../../nf-core/gunzip" + + process { + """ + input[0] = [ + [ id:'test' ], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr1/genome.fasta.gz', checkIfExists: true) + ] + """ + } + } + } + + when { + process { + """ + input[0] = [ + [ id:'test' ], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/genome.fasta', checkIfExists: true) + ] + input[1] = GUNZIP.out.gunzip.map { meta, file -> file } + input[2] = [ + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr1/genome.gtf', checkIfExists: true) + ] + input[3] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + +} diff --git a/modules/nf-core/liftoff/tests/main.nf.test.snap b/modules/nf-core/liftoff/tests/main.nf.test.snap new file mode 100644 index 0000000..f606446 --- /dev/null +++ b/modules/nf-core/liftoff/tests/main.nf.test.snap @@ -0,0 +1,96 @@ +{ + "unmapped_txt": { + "content": [ + [ + [ + { + "id": "test" + }, + "test.unmapped.txt:md5,7391d10df6e15db356b084c9af5259e4" + ] + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2023-12-01T13:57:40.748507" + }, + "versions": { + "content": [ + [ + "versions.yml:md5,205d9c609e7fe27d8199550d842bdce8" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2023-12-01T13:57:40.752414" + }, + "homo_sapiens-genome_21_fasta-genome_1_fasta-genome_1_gtf-stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.gff3:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test" + }, + "test.polished.gff3:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + [ + { + "id": "test" + }, + "test.unmapped.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + "versions.yml:md5,205d9c609e7fe27d8199550d842bdce8" + ], + "gff3": [ + [ + { + "id": "test" + }, + "test.gff3:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "polished_gff3": [ + [ + { + "id": "test" + }, + "test.polished.gff3:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "unmapped_txt": [ + [ + { + "id": "test" + }, + "test.unmapped.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,205d9c609e7fe27d8199550d842bdce8" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-03-19T09:15:25.661428" + } +} \ No newline at end of file diff --git a/modules/nf-core/liftoff/tests/nextflow.config b/modules/nf-core/liftoff/tests/nextflow.config new file mode 100644 index 0000000..f35ef80 --- /dev/null +++ b/modules/nf-core/liftoff/tests/nextflow.config @@ -0,0 +1,5 @@ +process { + withName: LIFTOFF { + ext.args = '-polish' + } +} diff --git a/modules/nf-core/multiqc/main.nf b/modules/nf-core/multiqc/main.nf deleted file mode 100644 index 47ac352..0000000 --- a/modules/nf-core/multiqc/main.nf +++ /dev/null @@ -1,55 +0,0 @@ -process MULTIQC { - label 'process_single' - - conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/multiqc:1.21--pyhdfd78af_0' : - 'biocontainers/multiqc:1.21--pyhdfd78af_0' }" - - input: - path multiqc_files, stageAs: "?/*" - path(multiqc_config) - path(extra_multiqc_config) - path(multiqc_logo) - - output: - path "*multiqc_report.html", emit: report - path "*_data" , emit: data - path "*_plots" , optional:true, emit: plots - path "versions.yml" , emit: versions - - when: - task.ext.when == null || task.ext.when - - script: - def args = task.ext.args ?: '' - def config = multiqc_config ? "--config $multiqc_config" : '' - def extra_config = extra_multiqc_config ? "--config $extra_multiqc_config" : '' - def logo = multiqc_logo ? /--cl-config 'custom_logo: "${multiqc_logo}"'/ : '' - """ - multiqc \\ - --force \\ - $args \\ - $config \\ - $extra_config \\ - $logo \\ - . - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - multiqc: \$( multiqc --version | sed -e "s/multiqc, version //g" ) - END_VERSIONS - """ - - stub: - """ - mkdir multiqc_data - touch multiqc_plots - touch multiqc_report.html - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - multiqc: \$( multiqc --version | sed -e "s/multiqc, version //g" ) - END_VERSIONS - """ -} diff --git a/modules/nf-core/multiqc/meta.yml b/modules/nf-core/multiqc/meta.yml deleted file mode 100644 index 45a9bc3..0000000 --- a/modules/nf-core/multiqc/meta.yml +++ /dev/null @@ -1,58 +0,0 @@ -name: multiqc -description: Aggregate results from bioinformatics analyses across many samples into a single report -keywords: - - QC - - bioinformatics tools - - Beautiful stand-alone HTML report -tools: - - multiqc: - description: | - MultiQC searches a given directory for analysis logs and compiles a HTML report. - It's a general use tool, perfect for summarising the output from numerous bioinformatics tools. - homepage: https://multiqc.info/ - documentation: https://multiqc.info/docs/ - licence: ["GPL-3.0-or-later"] -input: - - multiqc_files: - type: file - description: | - List of reports / files recognised by MultiQC, for example the html and zip output of FastQC - - multiqc_config: - type: file - description: Optional config yml for MultiQC - pattern: "*.{yml,yaml}" - - extra_multiqc_config: - type: file - description: Second optional config yml for MultiQC. Will override common sections in multiqc_config. - pattern: "*.{yml,yaml}" - - multiqc_logo: - type: file - description: Optional logo file for MultiQC - pattern: "*.{png}" -output: - - report: - type: file - description: MultiQC report file - pattern: "multiqc_report.html" - - data: - type: directory - description: MultiQC data dir - pattern: "multiqc_data" - - plots: - type: file - description: Plots created by MultiQC - pattern: "*_data" - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" -authors: - - "@abhi18av" - - "@bunop" - - "@drpatelh" - - "@jfy133" -maintainers: - - "@abhi18av" - - "@bunop" - - "@drpatelh" - - "@jfy133" diff --git a/modules/nf-core/multiqc/tests/main.nf.test b/modules/nf-core/multiqc/tests/main.nf.test deleted file mode 100644 index f1c4242..0000000 --- a/modules/nf-core/multiqc/tests/main.nf.test +++ /dev/null @@ -1,84 +0,0 @@ -nextflow_process { - - name "Test Process MULTIQC" - script "../main.nf" - process "MULTIQC" - - tag "modules" - tag "modules_nfcore" - tag "multiqc" - - test("sarscov2 single-end [fastqc]") { - - when { - process { - """ - input[0] = Channel.of(file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastqc/test_fastqc.zip', checkIfExists: true)) - input[1] = [] - input[2] = [] - input[3] = [] - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert process.out.report[0] ==~ ".*/multiqc_report.html" }, - { assert process.out.data[0] ==~ ".*/multiqc_data" }, - { assert snapshot(process.out.versions).match("multiqc_versions_single") } - ) - } - - } - - test("sarscov2 single-end [fastqc] [config]") { - - when { - process { - """ - input[0] = Channel.of(file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastqc/test_fastqc.zip', checkIfExists: true)) - input[1] = Channel.of(file("https://github.com/nf-core/tools/raw/dev/nf_core/pipeline-template/assets/multiqc_config.yml", checkIfExists: true)) - input[2] = [] - input[3] = [] - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert process.out.report[0] ==~ ".*/multiqc_report.html" }, - { assert process.out.data[0] ==~ ".*/multiqc_data" }, - { assert snapshot(process.out.versions).match("multiqc_versions_config") } - ) - } - } - - test("sarscov2 single-end [fastqc] - stub") { - - options "-stub" - - when { - process { - """ - input[0] = Channel.of(file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastqc/test_fastqc.zip', checkIfExists: true)) - input[1] = [] - input[2] = [] - input[3] = [] - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(process.out.report.collect { file(it).getName() } + - process.out.data.collect { file(it).getName() } + - process.out.plots.collect { file(it).getName() } + - process.out.versions ).match("multiqc_stub") } - ) - } - - } -} diff --git a/modules/nf-core/multiqc/tests/main.nf.test.snap b/modules/nf-core/multiqc/tests/main.nf.test.snap deleted file mode 100644 index bfebd80..0000000 --- a/modules/nf-core/multiqc/tests/main.nf.test.snap +++ /dev/null @@ -1,41 +0,0 @@ -{ - "multiqc_versions_single": { - "content": [ - [ - "versions.yml:md5,21f35ee29416b9b3073c28733efe4b7d" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-02-29T08:48:55.657331" - }, - "multiqc_stub": { - "content": [ - [ - "multiqc_report.html", - "multiqc_data", - "multiqc_plots", - "versions.yml:md5,21f35ee29416b9b3073c28733efe4b7d" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-02-29T08:49:49.071937" - }, - "multiqc_versions_config": { - "content": [ - [ - "versions.yml:md5,21f35ee29416b9b3073c28733efe4b7d" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-02-29T08:49:25.457567" - } -} \ No newline at end of file diff --git a/modules/nf-core/multiqc/tests/tags.yml b/modules/nf-core/multiqc/tests/tags.yml deleted file mode 100644 index bea6c0d..0000000 --- a/modules/nf-core/multiqc/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -multiqc: - - modules/nf-core/multiqc/** diff --git a/modules/nf-core/orthofinder/environment.yml b/modules/nf-core/orthofinder/environment.yml new file mode 100644 index 0000000..f93b9bb --- /dev/null +++ b/modules/nf-core/orthofinder/environment.yml @@ -0,0 +1,9 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json +name: "orthofinder" +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - "bioconda::orthofinder=2.5.5" diff --git a/modules/nf-core/orthofinder/main.nf b/modules/nf-core/orthofinder/main.nf new file mode 100644 index 0000000..2971fc0 --- /dev/null +++ b/modules/nf-core/orthofinder/main.nf @@ -0,0 +1,69 @@ +process ORTHOFINDER { + tag "$meta.id" + label 'process_high' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/orthofinder:2.5.5--hdfd78af_2': + 'biocontainers/orthofinder:2.5.5--hdfd78af_2' }" + + input: + tuple val(meta), path(fastas, stageAs: 'input/') + + output: + tuple val(meta), path("$prefix") , emit: orthofinder + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + prefix = task.ext.prefix ?: "${meta.id}" + """ + mkdir temp_pickle + + orthofinder \\ + $args \\ + -t $task.cpus \\ + -a $task.cpus \\ + -p temp_pickle \\ + -f input \\ + -n $prefix + + mv \\ + input/OrthoFinder/Results_$prefix \\ + $prefix + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + orthofinder: \$(orthofinder -h | sed -n 's/.*version \\(.*\\) Copy.*/\\1/p') + END_VERSIONS + """ + + stub: + def args = task.ext.args ?: '' + prefix = task.ext.prefix ?: "${meta.id}" + """ + mkdir -p $prefix/Comparative_Genomics_Statistics + mkdir $prefix/Gene_Duplication_Events + mkdir $prefix/Gene_Trees + mkdir $prefix/Orthogroup_Sequences + mkdir $prefix/Orthogroups + mkdir $prefix/Orthologues + mkdir $prefix/Phylogenetic_Hierarchical_Orthogroups + mkdir $prefix/Phylogenetically_Misplaced_Genes + mkdir $prefix/Putative_Xenologs + mkdir $prefix/Resolved_Gene_Trees + mkdir $prefix/Single_Copy_Orthologue_Sequences + mkdir $prefix/Species_Tree + mkdir $prefix/WorkingDirectory + + touch $prefix/Log.txt + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + orthofinder: \$(orthofinder -h | sed -n 's/.*version \\(.*\\) Copy.*/\\1/p') + END_VERSIONS + """ +} diff --git a/modules/nf-core/orthofinder/meta.yml b/modules/nf-core/orthofinder/meta.yml new file mode 100644 index 0000000..23cc532 --- /dev/null +++ b/modules/nf-core/orthofinder/meta.yml @@ -0,0 +1,50 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/meta-schema.json +name: "orthofinder" +description: OrthoFinder is a fast, accurate and comprehensive platform for comparative genomics. +keywords: + - genomics + - orthogroup + - orthologs + - gene + - duplication + - tree + - phylogeny +tools: + - "orthofinder": + description: "Accurate inference of orthogroups, orthologues, gene trees and rooted species tree made easy!" + homepage: "https://github.com/davidemms/OrthoFinder" + documentation: "https://github.com/davidemms/OrthoFinder" + tool_dev_url: "https://github.com/davidemms/OrthoFinder" + doi: "10.1186/s13059-019-1832-y" + licence: ["GPL v3"] + +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1' ]` + - fastas: + type: list + description: Input fasta files + pattern: "*.{fa,faa,fasta,fas,pep}" + +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1' ]` + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" + - orthofinder: + type: directory + description: Orthofinder output directory + +authors: + - "@GallVp" +maintainers: + - "@GallVp" diff --git a/modules/nf-core/orthofinder/tests/main.nf.test b/modules/nf-core/orthofinder/tests/main.nf.test new file mode 100644 index 0000000..2d64800 --- /dev/null +++ b/modules/nf-core/orthofinder/tests/main.nf.test @@ -0,0 +1,96 @@ +import groovy.io.FileType + +nextflow_process { + + name "Test Process ORTHOFINDER" + script "../main.nf" + process "ORTHOFINDER" + + tag "modules" + tag "modules_nfcore" + tag "orthofinder" + + test("sarscov2 - candidatus_portiera_aleyrodidarum - proteome") { + + when { + process { + """ + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/proteome.fasta', checkIfExists: true) + .copyTo("${workDir}/sarscov2.fasta") + + file(params.modules_testdata_base_path + 'genomics/prokaryotes/candidatus_portiera_aleyrodidarum/genome/proteome.fasta', checkIfExists: true) + .copyTo("${workDir}/candidatus_portiera_aleyrodidarum.fasta") + + def file_a = file("${workDir}/sarscov2.fasta", checkIfExists:true) + def file_b = file("${workDir}/candidatus_portiera_aleyrodidarum.fasta", checkIfExists:true) + + input[0] = [ + [ id:'test', single_end:false ], + [ file_a, file_b ] + ] + """ + } + } + + then { + assert process.success + + def all_files = [] + + file(process.out.orthofinder[0][1]).eachFileRecurse (FileType.FILES) { file -> + all_files << file + } + + def all_file_names = all_files.collect { it.name }.sort(false) + + def stable_file_names = [ + 'Statistics_PerSpecies.tsv', + 'SpeciesTree_Gene_Duplications_0.5_Support.txt', + 'SpeciesTree_rooted.txt' + ] + + def stable_files = all_files.findAll { it.name in stable_file_names } + + assert snapshot( + all_file_names, + stable_files, + process.out.versions[0] + ).match() + } + + } + + test("sarscov2 - candidatus_portiera_aleyrodidarum - proteome - stub") { + + options '-stub' + + when { + process { + """ + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/proteome.fasta', checkIfExists: true) + .copyTo("${workDir}/sarscov2.fasta") + + file(params.modules_testdata_base_path + 'genomics/prokaryotes/candidatus_portiera_aleyrodidarum/genome/proteome.fasta', checkIfExists: true) + .copyTo("${workDir}/candidatus_portiera_aleyrodidarum.fasta") + + def file_a = file("${workDir}/sarscov2.fasta", checkIfExists:true) + def file_b = file("${workDir}/candidatus_portiera_aleyrodidarum.fasta", checkIfExists:true) + + input[0] = [ + [ id:'test', single_end:false ], + [ file_a, file_b ] + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + +} diff --git a/modules/nf-core/orthofinder/tests/main.nf.test.snap b/modules/nf-core/orthofinder/tests/main.nf.test.snap new file mode 100644 index 0000000..8b621c0 --- /dev/null +++ b/modules/nf-core/orthofinder/tests/main.nf.test.snap @@ -0,0 +1,438 @@ +{ + "sarscov2 - candidatus_portiera_aleyrodidarum - proteome": { + "content": [ + [ + "Blast0_0.txt.gz", + "Blast0_1.txt.gz", + "Blast1_0.txt.gz", + "Blast1_1.txt.gz", + "Citation.txt", + "Duplications.tsv", + "Duplications_per_Orthogroup.tsv", + "Duplications_per_Species_Tree_Node.tsv", + "Log.txt", + "N0.tsv", + "OG0000000.fa", + "OG0000000_tree.txt", + "OG0000000_tree.txt", + "OG0000000_tree_id.txt", + "OG0000001.fa", + "OG0000001_tree.txt", + "OG0000001_tree.txt", + "OG0000001_tree_id.txt", + "OG0000002.fa", + "OG0000003.fa", + "OG0000004.fa", + "OG0000005.fa", + "OG0000006.fa", + "OG0000007.fa", + "OG0000008.fa", + "OG0000009.fa", + "OG0000010.fa", + "OG0000011.fa", + "OG0000012.fa", + "OG0000013.fa", + "OG0000014.fa", + "OG0000015.fa", + "OG0000016.fa", + "OG0000017.fa", + "OG0000018.fa", + "OG0000019.fa", + "OG0000020.fa", + "OG0000021.fa", + "OG0000022.fa", + "OG0000023.fa", + "OG0000024.fa", + "OG0000025.fa", + "OG0000026.fa", + "OG0000027.fa", + "OG0000028.fa", + "OG0000029.fa", + "OG0000030.fa", + "OG0000031.fa", + "OG0000032.fa", + "OG0000033.fa", + "OG0000034.fa", + "OG0000035.fa", + "OG0000036.fa", + "OG0000037.fa", + "OG0000038.fa", + "OG0000039.fa", + "OG0000040.fa", + "OG0000041.fa", + "OG0000042.fa", + "OG0000043.fa", + "OG0000044.fa", + "OG0000045.fa", + "OG0000046.fa", + "OG0000047.fa", + "OG0000048.fa", + "OG0000049.fa", + "OG0000050.fa", + "OG0000051.fa", + "OG0000052.fa", + "OG0000053.fa", + "OG0000054.fa", + "OG0000055.fa", + "OG0000056.fa", + "OG0000057.fa", + "OG0000058.fa", + "OG0000059.fa", + "OG0000060.fa", + "OG0000061.fa", + "OG0000062.fa", + "OG0000063.fa", + "OG0000064.fa", + "OG0000065.fa", + "OG0000066.fa", + "OG0000067.fa", + "OG0000068.fa", + "OG0000069.fa", + "OG0000070.fa", + "OG0000071.fa", + "OG0000072.fa", + "OG0000073.fa", + "OG0000074.fa", + "OG0000075.fa", + "OG0000076.fa", + "OG0000077.fa", + "OG0000078.fa", + "OG0000079.fa", + "OG0000080.fa", + "OG0000081.fa", + "OG0000082.fa", + "OG0000083.fa", + "OG0000084.fa", + "OG0000085.fa", + "OG0000086.fa", + "OG0000087.fa", + "OG0000088.fa", + "OG0000089.fa", + "OG0000090.fa", + "OG0000091.fa", + "OG0000092.fa", + "OG0000093.fa", + "OG0000094.fa", + "OG0000095.fa", + "OG0000096.fa", + "OG0000097.fa", + "OG0000098.fa", + "OG0000099.fa", + "OG0000100.fa", + "OG0000101.fa", + "OG0000102.fa", + "OG0000103.fa", + "OG0000104.fa", + "OG0000105.fa", + "OG0000106.fa", + "OG0000107.fa", + "OG0000108.fa", + "OG0000109.fa", + "OG0000110.fa", + "OG0000111.fa", + "OG0000112.fa", + "OG0000113.fa", + "OG0000114.fa", + "OG0000115.fa", + "OG0000116.fa", + "OG0000117.fa", + "OG0000118.fa", + "OG0000119.fa", + "OG0000120.fa", + "OG0000121.fa", + "OG0000122.fa", + "OG0000123.fa", + "OG0000124.fa", + "OG0000125.fa", + "OG0000126.fa", + "OG0000127.fa", + "OG0000128.fa", + "OG0000129.fa", + "OG0000130.fa", + "OG0000131.fa", + "OG0000132.fa", + "OG0000133.fa", + "OG0000134.fa", + "OG0000135.fa", + "OG0000136.fa", + "OG0000137.fa", + "OG0000138.fa", + "OG0000139.fa", + "OG0000140.fa", + "OG0000141.fa", + "OG0000142.fa", + "OG0000143.fa", + "OG0000144.fa", + "OG0000145.fa", + "OG0000146.fa", + "OG0000147.fa", + "OG0000148.fa", + "OG0000149.fa", + "OG0000150.fa", + "OG0000151.fa", + "OG0000152.fa", + "OG0000153.fa", + "OG0000154.fa", + "OG0000155.fa", + "OG0000156.fa", + "OG0000157.fa", + "OG0000158.fa", + "OG0000159.fa", + "OG0000160.fa", + "OG0000161.fa", + "OG0000162.fa", + "OG0000163.fa", + "OG0000164.fa", + "OG0000165.fa", + "OG0000166.fa", + "OG0000167.fa", + "OG0000168.fa", + "OG0000169.fa", + "OG0000170.fa", + "OG0000171.fa", + "OG0000172.fa", + "OG0000173.fa", + "OG0000174.fa", + "OG0000175.fa", + "OG0000176.fa", + "OG0000177.fa", + "OG0000178.fa", + "OG0000179.fa", + "OG0000180.fa", + "OG0000181.fa", + "OG0000182.fa", + "OG0000183.fa", + "OG0000184.fa", + "OG0000185.fa", + "OG0000186.fa", + "OG0000187.fa", + "OG0000188.fa", + "OG0000189.fa", + "OG0000190.fa", + "OG0000191.fa", + "OG0000192.fa", + "OG0000193.fa", + "OG0000194.fa", + "OG0000195.fa", + "OG0000196.fa", + "OG0000197.fa", + "OG0000198.fa", + "OG0000199.fa", + "OG0000200.fa", + "OG0000201.fa", + "OG0000202.fa", + "OG0000203.fa", + "OG0000204.fa", + "OG0000205.fa", + "OG0000206.fa", + "OG0000207.fa", + "OG0000208.fa", + "OG0000209.fa", + "OG0000210.fa", + "OG0000211.fa", + "OG0000212.fa", + "OG0000213.fa", + "OG0000214.fa", + "OG0000215.fa", + "OG0000216.fa", + "OG0000217.fa", + "OG0000218.fa", + "OG0000219.fa", + "OG0000220.fa", + "OG0000221.fa", + "OG0000222.fa", + "OG0000223.fa", + "OG0000224.fa", + "OG0000225.fa", + "OG0000226.fa", + "OG0000227.fa", + "OG0000228.fa", + "OG0000229.fa", + "OG0000230.fa", + "OG0000231.fa", + "OG0000232.fa", + "OG0000233.fa", + "OG0000234.fa", + "OG0000235.fa", + "OG0000236.fa", + "OG0000237.fa", + "OG0000238.fa", + "OG0000239.fa", + "OG0000240.fa", + "OG0000241.fa", + "OG0000242.fa", + "OG0000243.fa", + "OG0000244.fa", + "OG0000245.fa", + "OrthoFinder_graph.txt", + "Orthogroups.GeneCount.tsv", + "Orthogroups.tsv", + "Orthogroups.txt", + "Orthogroups_SingleCopyOrthologues.txt", + "Orthogroups_SpeciesOverlaps.tsv", + "Orthogroups_UnassignedGenes.tsv", + "OrthologuesStats_Totals.tsv", + "OrthologuesStats_many-to-many.tsv", + "OrthologuesStats_many-to-one.tsv", + "OrthologuesStats_one-to-many.tsv", + "OrthologuesStats_one-to-one.tsv", + "SequenceIDs.txt", + "SimpleTest.phy", + "SimpleTest.phy_fastme_stat.txt", + "SimpleTest.tre", + "Species0.fa", + "Species0.fa", + "Species1.fa", + "SpeciesIDs.txt", + "SpeciesTree_Gene_Duplications_0.5_Support.txt", + "SpeciesTree_rooted.txt", + "SpeciesTree_rooted_ids.txt", + "SpeciesTree_rooted_node_labels.txt", + "SpeciesTree_unrooted.txt", + "SpeciesTree_unrooted_ids.txt", + "Statistics_Overall.tsv", + "Statistics_PerSpecies.tsv", + "candidatus_portiera_aleyrodidarum.tsv", + "candidatus_portiera_aleyrodidarum.tsv", + "candidatus_portiera_aleyrodidarum__v__sarscov2.tsv", + "clusters_OrthoFinder_I1.5.txt", + "clusters_OrthoFinder_I1.5.txt_id_pairs.txt", + "diamondDBSpecies0.dmnd", + "diamondDBSpecies0.dmnd", + "diamondDBSpecies1.dmnd", + "sarscov2.tsv", + "sarscov2.tsv", + "sarscov2__v__candidatus_portiera_aleyrodidarum.tsv", + "test_search_results.txt.gz" + ], + [ + "Statistics_PerSpecies.tsv:md5,984b5011a34d54527fe17896bfa36a2d", + "SpeciesTree_Gene_Duplications_0.5_Support.txt:md5,8b7a673e2e8b6d1aeb697f2bb88afa18", + "SpeciesTree_rooted.txt:md5,4d5ea525feebe479fca0c0768271ba81" + ], + "versions.yml:md5,86b472c85626aac1840eec0769016f5c" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-07T21:33:50.902329" + }, + "sarscov2 - candidatus_portiera_aleyrodidarum - proteome - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + [ + [ + + ], + [ + + ], + [ + + ], + "Log.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + [ + + ], + [ + + ], + [ + + ], + [ + + ], + [ + + ], + [ + + ], + [ + + ], + [ + + ], + [ + + ], + [ + + ] + ] + ] + ], + "1": [ + "versions.yml:md5,86b472c85626aac1840eec0769016f5c" + ], + "orthofinder": [ + [ + { + "id": "test", + "single_end": false + }, + [ + [ + + ], + [ + + ], + [ + + ], + "Log.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + [ + + ], + [ + + ], + [ + + ], + [ + + ], + [ + + ], + [ + + ], + [ + + ], + [ + + ], + [ + + ], + [ + + ] + ] + ] + ], + "versions": [ + "versions.yml:md5,86b472c85626aac1840eec0769016f5c" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-07T16:00:56.530716" + } +} \ No newline at end of file diff --git a/modules/nf-core/orthofinder/tests/tags.yml b/modules/nf-core/orthofinder/tests/tags.yml new file mode 100644 index 0000000..f386e25 --- /dev/null +++ b/modules/nf-core/orthofinder/tests/tags.yml @@ -0,0 +1,2 @@ +orthofinder: + - "modules/nf-core/orthofinder/**" diff --git a/modules/nf-core/repeatmodeler/builddatabase/environment.yml b/modules/nf-core/repeatmodeler/builddatabase/environment.yml new file mode 100644 index 0000000..ecc282e --- /dev/null +++ b/modules/nf-core/repeatmodeler/builddatabase/environment.yml @@ -0,0 +1,9 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json +name: "repeatmodeler_builddatabase" +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - "bioconda::repeatmodeler=2.0.5" diff --git a/modules/nf-core/repeatmodeler/builddatabase/main.nf b/modules/nf-core/repeatmodeler/builddatabase/main.nf new file mode 100644 index 0000000..6fe244b --- /dev/null +++ b/modules/nf-core/repeatmodeler/builddatabase/main.nf @@ -0,0 +1,50 @@ +process REPEATMODELER_BUILDDATABASE { + tag "$meta.id" + label 'process_single' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/repeatmodeler:2.0.5--pl5321hdfd78af_0': + 'biocontainers/repeatmodeler:2.0.5--pl5321hdfd78af_0' }" + + input: + tuple val(meta), path(fasta) + + output: + tuple val(meta), path("${prefix}.*") , emit: db + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + prefix = task.ext.prefix ?: "${meta.id}" + """ + BuildDatabase \\ + -name $prefix \\ + $fasta + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + repeatmodeler: \$(RepeatModeler --version | sed 's/RepeatModeler version //') + END_VERSIONS + """ + + stub: + prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.nhr + touch ${prefix}.nin + touch ${prefix}.njs + touch ${prefix}.nnd + touch ${prefix}.nni + touch ${prefix}.nog + touch ${prefix}.nsq + touch ${prefix}.translation + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + repeatmodeler: \$(RepeatModeler --version | sed 's/RepeatModeler version //') + END_VERSIONS + """ +} diff --git a/modules/nf-core/repeatmodeler/builddatabase/meta.yml b/modules/nf-core/repeatmodeler/builddatabase/meta.yml new file mode 100644 index 0000000..d3aa931 --- /dev/null +++ b/modules/nf-core/repeatmodeler/builddatabase/meta.yml @@ -0,0 +1,44 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/meta-schema.json +name: "repeatmodeler_builddatabase" +description: Create a database for RepeatModeler +keywords: + - genomics + - fasta + - repeat +tools: + - "repeatmodeler": + description: "RepeatModeler is a de-novo repeat family identification and modeling package." + homepage: "https://github.com/Dfam-consortium/RepeatModeler" + documentation: "https://github.com/Dfam-consortium/RepeatModeler" + tool_dev_url: "https://github.com/Dfam-consortium/RepeatModeler" + licence: ["Open Software License v2.1"] + +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1' ]` + - fasta: + type: file + description: Fasta file + pattern: "*.{fasta,fsa,fa}" +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1' ]` + - db: + type: file + description: Database files for repeatmodeler + pattern: "`${prefix}.*`" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@GallVp" +maintainers: + - "@GallVp" diff --git a/modules/nf-core/repeatmodeler/builddatabase/tests/main.nf.test b/modules/nf-core/repeatmodeler/builddatabase/tests/main.nf.test new file mode 100644 index 0000000..bfe5d78 --- /dev/null +++ b/modules/nf-core/repeatmodeler/builddatabase/tests/main.nf.test @@ -0,0 +1,60 @@ +nextflow_process { + + name "Test Process REPEATMODELER_BUILDDATABASE" + script "../main.nf" + process "REPEATMODELER_BUILDDATABASE" + + tag "modules" + tag "modules_nfcore" + tag "repeatmodeler" + tag "repeatmodeler/builddatabase" + + test("sarscov2-genome_fasta") { + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out.versions).match("versions") }, + { assert snapshot(process.out.db[0][1].collect { file(it).name }.sort().toString()).match("db") }, + { assert snapshot(process.out.db[0][1].findAll { ! ( "$it"[-3..-1] in [ 'nin', 'njs' ] ) } ).match("stable_md5") } + ) + } + + } + + test("sarscov2-genome_fasta-stub") { + + options "-stub" + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + +} diff --git a/modules/nf-core/repeatmodeler/builddatabase/tests/main.nf.test.snap b/modules/nf-core/repeatmodeler/builddatabase/tests/main.nf.test.snap new file mode 100644 index 0000000..1f1a551 --- /dev/null +++ b/modules/nf-core/repeatmodeler/builddatabase/tests/main.nf.test.snap @@ -0,0 +1,92 @@ +{ + "sarscov2-genome_fasta-stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + [ + "test.nhr:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.nin:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.njs:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.nnd:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.nni:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.nog:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.nsq:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.translation:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "1": [ + "versions.yml:md5,7944637266bc3e2726899eaad5e46c87" + ], + "db": [ + [ + { + "id": "test" + }, + [ + "test.nhr:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.nin:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.njs:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.nnd:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.nni:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.nog:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.nsq:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.translation:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "versions": [ + "versions.yml:md5,7944637266bc3e2726899eaad5e46c87" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-04-02T12:06:44.261566" + }, + "versions": { + "content": [ + [ + "versions.yml:md5,7944637266bc3e2726899eaad5e46c87" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-01-09T15:14:48.807063" + }, + "stable_md5": { + "content": [ + [ + "test.nhr:md5,1a41cb6d0b00c28f62ad60e75ae2f6fc", + "test.nnd:md5,2002e13acf59079a1a5782c918894579", + "test.nni:md5,26a954ba0fd80983b550d8f6b8b35ff8", + "test.nog:md5,30896f123998e926ea2237b89091e7fe", + "test.nsq:md5,982cbc7d9e38743b9b1037588862b9da", + "test.translation:md5,ccbb119522c09daa976a9015ba999329" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-04-23T10:03:41.669433" + }, + "db": { + "content": [ + "[test.nhr, test.nin, test.njs, test.nnd, test.nni, test.nog, test.nsq, test.translation]" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-04-02T12:08:36.94713" + } +} \ No newline at end of file diff --git a/modules/nf-core/repeatmodeler/builddatabase/tests/tags.yml b/modules/nf-core/repeatmodeler/builddatabase/tests/tags.yml new file mode 100644 index 0000000..c524294 --- /dev/null +++ b/modules/nf-core/repeatmodeler/builddatabase/tests/tags.yml @@ -0,0 +1,2 @@ +repeatmodeler/builddatabase: + - "modules/nf-core/repeatmodeler/builddatabase/**" diff --git a/modules/nf-core/repeatmodeler/repeatmodeler/environment.yml b/modules/nf-core/repeatmodeler/repeatmodeler/environment.yml new file mode 100644 index 0000000..2422071 --- /dev/null +++ b/modules/nf-core/repeatmodeler/repeatmodeler/environment.yml @@ -0,0 +1,9 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json +name: "repeatmodeler_repeatmodeler" +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - "bioconda::repeatmodeler=2.0.5" diff --git a/modules/nf-core/repeatmodeler/repeatmodeler/main.nf b/modules/nf-core/repeatmodeler/repeatmodeler/main.nf new file mode 100644 index 0000000..9d0449f --- /dev/null +++ b/modules/nf-core/repeatmodeler/repeatmodeler/main.nf @@ -0,0 +1,54 @@ +process REPEATMODELER_REPEATMODELER { + tag "$meta.id" + label 'process_medium' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/repeatmodeler:2.0.5--pl5321hdfd78af_0': + 'biocontainers/repeatmodeler:2.0.5--pl5321hdfd78af_0' }" + + input: + tuple val(meta), path(db) + + output: + tuple val(meta), path("*.fa") , emit: fasta + tuple val(meta), path("*.stk"), emit: stk + tuple val(meta), path("*.log"), emit: log + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def db_name = file(db[0]).getBaseName() + """ + RepeatModeler \\ + -database $db_name \\ + $args \\ + -threads $task.cpus + + mv ${db_name}-families.fa ${prefix}.fa + mv ${db_name}-families.stk ${prefix}.stk + mv ${db_name}-rmod.log ${prefix}.log + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + repeatmodeler: \$(RepeatModeler --version | sed 's/RepeatModeler version //') + END_VERSIONS + """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.fa + touch ${prefix}.stk + touch ${prefix}.log + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + repeatmodeler: \$(RepeatModeler --version | sed 's/RepeatModeler version //') + END_VERSIONS + """ +} diff --git a/modules/nf-core/repeatmodeler/repeatmodeler/meta.yml b/modules/nf-core/repeatmodeler/repeatmodeler/meta.yml new file mode 100644 index 0000000..29bb795 --- /dev/null +++ b/modules/nf-core/repeatmodeler/repeatmodeler/meta.yml @@ -0,0 +1,52 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/meta-schema.json +name: "repeatmodeler_repeatmodeler" +description: Performs de novo transposable element (TE) family identification with RepeatModeler +keywords: + - genomics + - fasta + - repeat + - transposable element +tools: + - "repeatmodeler": + description: "RepeatModeler is a de-novo repeat family identification and modeling package." + homepage: "https://github.com/Dfam-consortium/RepeatModeler" + documentation: "https://github.com/Dfam-consortium/RepeatModeler" + tool_dev_url: "https://github.com/Dfam-consortium/RepeatModeler" + licence: ["Open Software License v2.1"] +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1' ]` + - db: + type: file + description: RepeatModeler database files generated with REPEATMODELER_BUILDDATABASE + pattern: "*" +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1' ]` + - fasta: + type: file + description: Consensus repeat sequences + pattern: "*.fa" + - stk: + type: file + description: Seed alignments + pattern: "*.stk" + - log: + type: file + description: A summarized log of the run + pattern: "*.log" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@GallVp" +maintainers: + - "@GallVp" diff --git a/modules/nf-core/repeatmodeler/repeatmodeler/tests/main.nf.test b/modules/nf-core/repeatmodeler/repeatmodeler/tests/main.nf.test new file mode 100644 index 0000000..65edd7e --- /dev/null +++ b/modules/nf-core/repeatmodeler/repeatmodeler/tests/main.nf.test @@ -0,0 +1,74 @@ +nextflow_process { + + name "Test Process REPEATMODELER_REPEATMODELER" + script "../main.nf" + process "REPEATMODELER_REPEATMODELER" + + tag "modules" + tag "modules_nfcore" + tag "repeatmodeler" + tag "repeatmodeler/repeatmodeler" + tag "repeatmodeler/builddatabase" + + test("homo_sapiens-genome_fasta") { + + setup { + run("REPEATMODELER_BUILDDATABASE") { + script "../../../../nf-core/repeatmodeler/builddatabase" + + process { + """ + input[0] = [ + [ id:'test' ], // meta map + file(params.test_data['homo_sapiens']['genome']['genome_fasta'], checkIfExists: true) + ] + """ + } + } + } + + when { + process { + """ + input[0] = REPEATMODELER_BUILDDATABASE.out.db + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out.fasta).match("fasta") }, + { assert snapshot(process.out.stk).match("stk") }, + { assert file(process.out.log[0][1]).text.contains('1 families discovered.') }, + { assert snapshot(process.out.versions).match("versions") } + ) + } + + } + + test("homo_sapiens-genome_fasta-stub") { + + options "-stub" + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + file(params.test_data['homo_sapiens']['genome']['genome_fasta'], checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + +} \ No newline at end of file diff --git a/modules/nf-core/repeatmodeler/repeatmodeler/tests/main.nf.test.snap b/modules/nf-core/repeatmodeler/repeatmodeler/tests/main.nf.test.snap new file mode 100644 index 0000000..e923952 --- /dev/null +++ b/modules/nf-core/repeatmodeler/repeatmodeler/tests/main.nf.test.snap @@ -0,0 +1,113 @@ +{ + "versions": { + "content": [ + [ + "versions.yml:md5,1bb6846ecf1304c262eaef4d3de60cf9" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-01-09T15:06:55.753492" + }, + "homo_sapiens-genome_fasta-stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.fa:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test" + }, + "test.stk:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + [ + { + "id": "test" + }, + "test.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + "versions.yml:md5,1bb6846ecf1304c262eaef4d3de60cf9" + ], + "fasta": [ + [ + { + "id": "test" + }, + "test.fa:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "log": [ + [ + { + "id": "test" + }, + "test.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "stk": [ + [ + { + "id": "test" + }, + "test.stk:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,1bb6846ecf1304c262eaef4d3de60cf9" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-04-29T13:16:41.45166" + }, + "stk": { + "content": [ + [ + [ + { + "id": "test" + }, + "test.stk:md5,acd01ad35763c11315e2297a4f051d57" + ] + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-01-09T15:06:55.740963" + }, + "fasta": { + "content": [ + [ + [ + { + "id": "test" + }, + "test.fa:md5,e25326771341204e1f8054d9529411e5" + ] + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-01-09T15:06:55.737658" + } +} \ No newline at end of file diff --git a/modules/nf-core/repeatmodeler/repeatmodeler/tests/tags.yml b/modules/nf-core/repeatmodeler/repeatmodeler/tests/tags.yml new file mode 100644 index 0000000..df65110 --- /dev/null +++ b/modules/nf-core/repeatmodeler/repeatmodeler/tests/tags.yml @@ -0,0 +1,2 @@ +repeatmodeler/repeatmodeler: + - "modules/nf-core/repeatmodeler/repeatmodeler/**" diff --git a/modules/nf-core/samtools/cat/environment.yml b/modules/nf-core/samtools/cat/environment.yml new file mode 100644 index 0000000..a368198 --- /dev/null +++ b/modules/nf-core/samtools/cat/environment.yml @@ -0,0 +1,8 @@ +name: samtools_cat +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bioconda::samtools=1.20 + - bioconda::htslib=1.20 diff --git a/modules/nf-core/samtools/cat/main.nf b/modules/nf-core/samtools/cat/main.nf new file mode 100644 index 0000000..9447b65 --- /dev/null +++ b/modules/nf-core/samtools/cat/main.nf @@ -0,0 +1,51 @@ +process SAMTOOLS_CAT { + tag "$meta.id" + label 'process_low' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/samtools:1.20--h50ea8bc_0' : + 'biocontainers/samtools:1.20--h50ea8bc_0' }" + + input: + tuple val(meta), path(input_files, stageAs: "?/*") + + output: + tuple val(meta), path("${prefix}.bam") , optional:true, emit: bam + tuple val(meta), path("${prefix}.cram"), optional:true, emit: cram + path "versions.yml" , emit: versions + + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + prefix = task.ext.prefix ?: "${meta.id}" + def file_type = input_files instanceof List ? input_files[0].getExtension() : input_files.getExtension() + """ + samtools \\ + cat \\ + --threads ${task.cpus-1} \\ + $args \\ + -o ${prefix}.${file_type} \\ + $input_files + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') + END_VERSIONS + """ + + stub: + prefix = task.ext.suffix ? "${meta.id}${task.ext.suffix}" : "${meta.id}" + def file_type = input_files instanceof List ? input_files[0].getExtension() : input_files.getExtension() + """ + touch ${prefix}.${file_type} + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') + END_VERSIONS + """ +} diff --git a/modules/nf-core/samtools/cat/meta.yml b/modules/nf-core/samtools/cat/meta.yml new file mode 100644 index 0000000..3541e0c --- /dev/null +++ b/modules/nf-core/samtools/cat/meta.yml @@ -0,0 +1,51 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/yaml-schema.json +name: samtools_cat +description: Concatenate BAM or CRAM file +keywords: + - merge + - bam + - sam + - cram +tools: + - samtools: + description: | + SAMtools is a set of utilities for interacting with and post-processing + short DNA sequence read alignments in the SAM, BAM and CRAM formats, written by Heng Li. + These files are generated as output by short read aligners like BWA. + homepage: http://www.htslib.org/ + documentation: http://www.htslib.org/doc/samtools.html + doi: 10.1093/bioinformatics/btp352 + licence: ["MIT"] +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - input_files: + type: file + description: BAM/CRAM files + pattern: "*.{bam,cram}" +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bam: + type: file + description: Concatenated BAM file + pattern: "*.{bam}" + - cram: + type: file + description: Concatenated CRAM file + pattern: "*.{cram}" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@matthdsm" +maintainers: + - "@matthdsm" diff --git a/modules/nf-core/samtools/cat/tests/main.nf.test b/modules/nf-core/samtools/cat/tests/main.nf.test new file mode 100644 index 0000000..dad80b8 --- /dev/null +++ b/modules/nf-core/samtools/cat/tests/main.nf.test @@ -0,0 +1,61 @@ +nextflow_process { + + name "Test Process SAMTOOLS_CAT" + script "../main.nf" + process "SAMTOOLS_CAT" + + tag "modules" + tag "modules_nfcore" + tag "samtools" + tag "samtools/cat" + + test("bams") { + + when { + process { + """ + input[0] = Channel.of([ + [id: 'test', single_end: false], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.unaligned.bam', checkIfExists: true) ] + ]) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(file(process.out.bam[0][1]).name).match("bams_bam") }, + { assert snapshot(process.out.cram).match("bams_cram") }, + { assert snapshot(process.out.versions).match("bams_versions") } + ) + } + } + + test("bams_stub") { + + options "-stub" + + when { + process { + """ + input[0] = Channel.of([ + [id: 'test', single_end: false], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.unaligned.bam', checkIfExists: true) ] + ]) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(file(process.out.bam[0][1]).name).match("bams_stub_bam") }, + { assert snapshot(process.out.cram).match("bams_stub_cram") }, + { assert snapshot(process.out.versions).match("bams_stub_versions") } + ) + } + } +} diff --git a/modules/nf-core/samtools/cat/tests/main.nf.test.snap b/modules/nf-core/samtools/cat/tests/main.nf.test.snap new file mode 100644 index 0000000..ae9344d --- /dev/null +++ b/modules/nf-core/samtools/cat/tests/main.nf.test.snap @@ -0,0 +1,70 @@ +{ + "bams_stub_cram": { + "content": [ + [ + + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-02T16:45:42.587418" + }, + "bams_stub_versions": { + "content": [ + [ + "versions.yml:md5,9b9451947b5de303ed028cf6513be3e8" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-05-28T15:45:35.044644556" + }, + "bams_bam": { + "content": [ + "test.bam" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-02T16:45:37.965199" + }, + "bams_cram": { + "content": [ + [ + + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-02T16:45:37.96805" + }, + "bams_stub_bam": { + "content": [ + "test.bam" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-02T16:45:42.583881" + }, + "bams_versions": { + "content": [ + [ + "versions.yml:md5,9b9451947b5de303ed028cf6513be3e8" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-05-28T15:45:29.652817652" + } +} \ No newline at end of file diff --git a/modules/nf-core/samtools/cat/tests/tags.yml b/modules/nf-core/samtools/cat/tests/tags.yml new file mode 100644 index 0000000..9760557 --- /dev/null +++ b/modules/nf-core/samtools/cat/tests/tags.yml @@ -0,0 +1,2 @@ +samtools/cat: + - "modules/nf-core/samtools/cat/**" diff --git a/modules/nf-core/sortmerna/environment.yml b/modules/nf-core/sortmerna/environment.yml new file mode 100644 index 0000000..f40f995 --- /dev/null +++ b/modules/nf-core/sortmerna/environment.yml @@ -0,0 +1,7 @@ +name: sortmerna +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bioconda::sortmerna=4.3.6 diff --git a/modules/nf-core/sortmerna/main.nf b/modules/nf-core/sortmerna/main.nf new file mode 100644 index 0000000..7c17e50 --- /dev/null +++ b/modules/nf-core/sortmerna/main.nf @@ -0,0 +1,110 @@ +process SORTMERNA { + tag "$meta.id" + label 'process_high' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/sortmerna:4.3.6--h9ee0642_0' : + 'biocontainers/sortmerna:4.3.6--h9ee0642_0' }" + + input: + tuple val(meta), path(reads) + tuple val(meta2), path(fastas) + tuple val(meta3), path(index) + + output: + tuple val(meta), path("*non_rRNA.fastq.gz"), emit: reads, optional: true + tuple val(meta), path("*.log") , emit: log, optional: true + tuple val(meta2), path("idx") , emit: index, optional: true + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + + def index_only = args.contains('--index 1')? true : false + def skip_index = args.contains('--index 0')? true : false + def paired_end = reads instanceof List + def paired_cmd = '' + def reads_args = '' + def out2_cmd = '' + def mv_cmd = '' + def reads_input = '' + def refs_input = '' + + if (! index_only){ + reads_args = '--aligned rRNA_reads --fastx --other non_rRNA_reads' + reads_input = paired_end ? reads.collect{"--reads $it"}.join(' ') : "--reads $reads" + def n_fastq = paired_end ? reads.size() : 1 + if ( n_fastq == 1 ) { + mv_cmd = """ + mv non_rRNA_reads.f*q.gz ${prefix}.non_rRNA.fastq.gz + mv rRNA_reads.log ${prefix}.sortmerna.log + """ + } else { + mv_cmd = """ + mv non_rRNA_reads_fwd.f*q.gz ${prefix}_1.non_rRNA.fastq.gz + mv non_rRNA_reads_rev.f*q.gz ${prefix}_2.non_rRNA.fastq.gz + mv rRNA_reads.log ${prefix}.sortmerna.log + """ + paired_cmd = "--paired_in" + out2_cmd = "--out2" + } + } + """ + sortmerna \\ + ${'--ref '+fastas.join(' --ref ')} \\ + $refs_input \\ + $reads_input \\ + --threads $task.cpus \\ + --workdir . \\ + $reads_args \\ + $paired_cmd \\ + $out2_cmd \\ + $args + + $mv_cmd + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + sortmerna: \$(echo \$(sortmerna --version 2>&1) | sed 's/^.*SortMeRNA version //; s/ Build Date.*\$//') + END_VERSIONS + """ + + stub: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + + def index_only = args.contains('--index 1')? true : false + def paired_end = reads instanceof List + def paired_cmd = '' + def out2_cmd = '' + def mv_cmd = '' + def reads_input = '' + + if (! index_only){ + reads_input = paired_end ? reads.collect{"--reads $it"}.join(' ') : "--reads $reads" + def n_fastq = paired_end ? reads.size() : 1 + if ( n_fastq == 1 ) { + mv_cmd = "touch ${prefix}.non_rRNA.fastq.gz" + } else { + mv_cmd = """ + touch ${prefix}_1.non_rRNA.fastq.gz + touch ${prefix}_2.non_rRNA.fastq.gz + """ + } + } + """ + $mv_cmd + mkdir -p idx + touch ${prefix}.sortmerna.log + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + sortmerna: \$(echo \$(sortmerna --version 2>&1) | sed 's/^.*SortMeRNA version //; s/ Build Date.*\$//') + END_VERSIONS + """ +} diff --git a/modules/nf-core/sortmerna/meta.yml b/modules/nf-core/sortmerna/meta.yml new file mode 100644 index 0000000..c0a2a58 --- /dev/null +++ b/modules/nf-core/sortmerna/meta.yml @@ -0,0 +1,77 @@ +name: sortmerna +description: Local sequence alignment tool for filtering, mapping and clustering. +keywords: + - filtering + - mapping + - clustering + - rRNA + - ribosomal RNA +tools: + - SortMeRNA: + description: The core algorithm is based on approximate seeds and allows for sensitive analysis of NGS reads. The main application of SortMeRNA is filtering rRNA from metatranscriptomic data. SortMeRNA takes as input files of reads (fasta, fastq, fasta.gz, fastq.gz) and one or multiple rRNA database file(s), and sorts apart aligned and rejected reads into two files. Additional applications include clustering and taxonomy assignation available through QIIME v1.9.1. SortMeRNA works with Illumina, Ion Torrent and PacBio data, and can produce SAM and BLAST-like alignments. + homepage: https://hpc.nih.gov/apps/sortmeRNA.html + documentation: https://github.com/biocore/sortmerna/wiki/ + licence: ["GPL-3.0-or-later"] +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - reads: + type: file + description: | + List of input FastQ files of size 1 and 2 for single-end and paired-end data, + respectively. + - meta2: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'test' ] + - fastas: + type: file + description: | + Path to reference file(s) + - meta3: + type: map + description: | + Groovy Map containing index information + e.g. [ id:'test' ] + - index: + type: directory + description: | + Path to index directory of a previous sortmerna run +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ], or reference information from an + indexing-only run + - reads: + type: file + description: The filtered fastq reads + pattern: "*fastq.gz" + - log: + type: file + description: SortMeRNA log file + pattern: "*sortmerna.log" + - meta2: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'test' ] + - index: + type: directory + description: | + Path to index directory generated by sortmern + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@drpatelh" + - "@mashehu" +maintainers: + - "@drpatelh" + - "@mashehu" diff --git a/modules/nf-core/sortmerna/tests/indexing_only.config b/modules/nf-core/sortmerna/tests/indexing_only.config new file mode 100644 index 0000000..3e74a32 --- /dev/null +++ b/modules/nf-core/sortmerna/tests/indexing_only.config @@ -0,0 +1,5 @@ +process { + withName: 'SORTMERNA' { + ext.args = '--index 1' + } +} diff --git a/modules/nf-core/sortmerna/tests/main.nf.test b/modules/nf-core/sortmerna/tests/main.nf.test new file mode 100644 index 0000000..73bc119 --- /dev/null +++ b/modules/nf-core/sortmerna/tests/main.nf.test @@ -0,0 +1,327 @@ +nextflow_process { + + name "Test Process SORTMERNA" + script "../main.nf" + process "SORTMERNA" + tag "modules" + tag "modules_nfcore" + tag "sortmerna" + + test("sarscov2 indexing only") { + + config './indexing_only.config' + + when { + process { + """ + input[0] = Channel.of([[],[]]) + input[1] = [ [id:'test2'], // meta map + [ file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.fasta", checkIfExists: true) ] + ] + input[2] = Channel.of([[],[]]) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert ! process.out.reads }, + { assert snapshot(process.out.index).match("index_index_only") }, + { assert snapshot(process.out.versions).match("versions_index_only") } + ) + } + + } + + test("sarscov2 indexing only stub") { + + options '-stub' + config './indexing_only.config' + + when { + process { + """ + input[0] = Channel.of([[],[]]) + input[1] = [ [id:'test2'], // meta map + [ file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.fasta", checkIfExists: true) ] + ] + input[2] = Channel.of([[],[]]) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert ! process.out.reads }, + { assert snapshot(process.out.index).match("index_only_stub") }, + { assert snapshot(process.out.versions).match("versions_index_only_stub") } + ) + } + + } + + test("sarscov2 single_end") { + + when { + process { + """ + input[0] = [ [ id:'test' ], // meta map + [ file(params.modules_testdata_base_path + "genomics/sarscov2/illumina/fastq/test_1.fastq.gz", checkIfExists: true) ] + ] + input[1] = [ [id:'test2'], // meta map + [ file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.fasta", checkIfExists: true) ] + ] + input[2] = Channel.of([[],[]]) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert process.out.reads }, + { assert file(process.out.log[0][1]).text.contains("Total reads passing E-value threshold = 100 (100.00)") }, + { + assert snapshot( + ( + [process.out.reads[0][0].toString()] + // meta + process.out.reads.collect { file(it[1]).getName() } + + process.out.log.collect { file(it[1]).getName() } + ).sort() + ).match("sarscov2 single_end_match") + }, + { assert snapshot(process.out.index).match("index_single_end") }, + { assert snapshot(process.out.versions).match("versions_single_end") } + ) + } + + } + + test("sarscov2 single_end stub") { + + options '-stub' + + when { + process { + """ + input[0] = [ [ id:'test' ], // meta map + [ file(params.modules_testdata_base_path + "genomics/sarscov2/illumina/fastq/test_1.fastq.gz", checkIfExists: true) ] + ] + input[1] = [ [id:'test2'], // meta map + [ file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.fasta", checkIfExists: true) ] + ] + input[2] = Channel.of([[],[]]) + """ + } + } + + then { + assertAll( + { assert process.success }, + { + assert snapshot( + ( + [process.out.reads[0][0].toString()] + // meta + process.out.reads.collect { file(it[1]).getName() } + + process.out.log.collect { file(it[1]).getName() } + ).sort() + ).match("sarscov2 single_end-for_stub_match") + }, + { assert snapshot(process.out.index).match("index_single_end_stub") }, + { assert snapshot(process.out.versions).match("versions_single_end_stub") } + ) + } + + } + + test("sarscov2 paired_end") { + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + [ + file(params.modules_testdata_base_path + "genomics/sarscov2/illumina/fastq/test_1.fastq.gz", checkIfExists: true), + file(params.modules_testdata_base_path + "genomics/sarscov2/illumina/fastq/test_2.fastq.gz", checkIfExists: true) + ] + ] + input[1] = [ [id:'test2'], // meta map + [ file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.fasta", checkIfExists: true) ] + ] + input[2] = Channel.of([[],[]]) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert process.out.reads }, + { assert file(process.out.log[0][1]).text.contains("Total reads passing E-value threshold = 200 (100.00)") }, + { + assert snapshot( + ( + [process.out.reads[0][0].toString()] + // meta + process.out.reads.collect { it[1].collect { item -> file(item).getName() } } + + process.out.log.collect { file(it[1]).getName() } + ).sort() + ).match("sarscov2 paired_end_match") + }, + { assert snapshot(process.out.index).match("index_paired_end") }, + { assert snapshot(process.out.versions).match("versions_paired_end") } + ) + } + + } + + test("sarscov2 paired_end stub") { + + options '-stub' + + when { + process { + """ + input[0] = [ [ id:'test' ], // meta map + [ + file(params.modules_testdata_base_path + "genomics/sarscov2/illumina/fastq/test_1.fastq.gz", checkIfExists: true), + file(params.modules_testdata_base_path + "genomics/sarscov2/illumina/fastq/test_2.fastq.gz", checkIfExists: true) + ] + ] + input[1] = [ [id:'test2'], // meta map + [ file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.fasta", checkIfExists: true) ] + ] + input[2] = Channel.of([[],[]]) + """ + } + } + + then { + assertAll( + { assert process.success }, + { + assert snapshot( + ( + [process.out.reads[0][0].toString()] + // meta + process.out.reads.collect { it[1].collect { item -> file(item).getName() } } + + process.out.log.collect { file(it[1]).getName() } + ).sort() + ).match("sarscov2 paired_end-for_stub_match") + }, + { assert snapshot(process.out.index).match("index_paired_end_stub") }, + { assert snapshot(process.out.versions).match("versions_paired_end_stub") } + ) + } + + } + + test("sarscov2 single_end premade_index") { + + config './premade_index.config' + + setup { + + run("SORTMERNA", alias: "SORTMERNA_INDEX") { + script "../main.nf" + process { + """ + input[0] = Channel.of([[],[]]) + input[1] = [ [id:'test2'], // meta map + [ file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.fasta", checkIfExists: true) ] + ] + input[2] = Channel.of([[],[]]) + """ + } + } + } + + when { + process { + """ + input[0] = [ [ id:'test' ], // meta map + [ file(params.modules_testdata_base_path + "genomics/sarscov2/illumina/fastq/test_1.fastq.gz", checkIfExists: true) ] + ] + input[1] = [ [id:'test2'], // meta map + [ file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.fasta", checkIfExists: true) ] + ] + input[2] = SORTMERNA_INDEX.out.index + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert process.out.reads }, + { assert file(process.out.log[0][1]).text.contains("Total reads passing E-value threshold = 100 (100.00)") }, + { + assert snapshot( + ( + [process.out.reads[0][0].toString()] + // meta + process.out.reads.collect { file(it[1]).getName() } + + process.out.log.collect { file(it[1]).getName() } + ).sort() + ).match("sarscov2 single_end_premade_index_match") + }, + { assert snapshot(process.out.index).match("index_single_end_premade_index") }, + { assert snapshot(process.out.versions).match("versions_single_end_premade_index") } + ) + } + } + + test("sarscov2 single_end premade_index stub") { + + config './premade_index.config' + options '-stub' + + setup { + + run("SORTMERNA", alias: "SORTMERNA_INDEX") { + script "../main.nf" + process { + """ + input[0] = Channel.of([[],[]]) + input[1] = [ [id:'test2'], // meta map + [ file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.fasta", checkIfExists: true) ] + ] + input[2] = Channel.of([[],[]]) + """ + } + } + } + + when { + process { + """ + input[0] = [ [ id:'test' ], // meta map + [ file(params.modules_testdata_base_path + "genomics/sarscov2/illumina/fastq/test_1.fastq.gz", checkIfExists: true) ] + ] + input[1] = [ [id:'test2'], // meta map + [ file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.fasta", checkIfExists: true) ] + ] + input[2] = SORTMERNA_INDEX.out.index + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert process.out.reads }, + { + assert snapshot( + ( + [process.out.reads[0][0].toString()] + // meta + process.out.reads.collect { file(it[1]).getName() } + + process.out.log.collect { file(it[1]).getName() } + ).sort() + ).match("sarscov2 single_end_premade_index_match_stub") + }, + { assert snapshot(process.out.index).match("index_single_end_premade_index_stub") }, + { assert snapshot(process.out.versions).match("versions_single_end_premade_index_stub") } + ) + } + } +} diff --git a/modules/nf-core/sortmerna/tests/main.nf.test.snap b/modules/nf-core/sortmerna/tests/main.nf.test.snap new file mode 100644 index 0000000..86e8473 --- /dev/null +++ b/modules/nf-core/sortmerna/tests/main.nf.test.snap @@ -0,0 +1,352 @@ +{ + "versions_paired_end_stub": { + "content": [ + [ + "versions.yml:md5,7df9d50209f351e1f75e05a1fad6ba4b" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-02-07T12:27:11.223149" + }, + "index_paired_end_stub": { + "content": [ + [ + [ + { + "id": "test2" + }, + [ + + ] + ] + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-02-26T14:24:25.384097178" + }, + "versions_paired_end": { + "content": [ + [ + "versions.yml:md5,7df9d50209f351e1f75e05a1fad6ba4b" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-02-07T12:27:04.517155" + }, + "versions_single_end_stub": { + "content": [ + [ + "versions.yml:md5,7df9d50209f351e1f75e05a1fad6ba4b" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-02-01T12:10:35.228450189" + }, + "sarscov2 single_end_match": { + "content": [ + [ + "test.non_rRNA.fastq.gz", + "test.sortmerna.log", + "{id=test}" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-02-07T12:28:23.20327" + }, + "index_only_stub": { + "content": [ + [ + [ + { + "id": "test2" + }, + [ + + ] + ] + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-02-26T15:00:47.128504164" + }, + "index_single_end_premade_index": { + "content": [ + [ + [ + { + "id": "test2" + }, + [ + "2415186086593376314.bursttrie_0.dat:md5,74f7f020e8d46e24a8a2e9c5fbcd564a", + "2415186086593376314.kmer_0.dat:md5,4a0bcb71b120f6a6949b7969292ef2e7", + "2415186086593376314.pos_0.dat:md5,bc2875e4cc4017707306565e396839ef", + "2415186086593376314.stats:md5,67c9d4c768f28a450fc82a2b5d43db5c" + ] + ] + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-02-26T15:01:53.832643452" + }, + "versions_single_end_premade_index": { + "content": [ + [ + "versions.yml:md5,7df9d50209f351e1f75e05a1fad6ba4b" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-02-26T15:01:53.902154982" + }, + "sarscov2 paired_end-for_stub_match": { + "content": [ + [ + "{id=test}", + [ + "test_1.non_rRNA.fastq.gz", + "test_2.non_rRNA.fastq.gz" + ], + "test.sortmerna.log" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-02-07T12:28:56.063579" + }, + "index_paired_end": { + "content": [ + [ + [ + { + "id": "test2" + }, + [ + "2415186086593376314.bursttrie_0.dat:md5,74f7f020e8d46e24a8a2e9c5fbcd564a", + "2415186086593376314.kmer_0.dat:md5,4a0bcb71b120f6a6949b7969292ef2e7", + "2415186086593376314.pos_0.dat:md5,bc2875e4cc4017707306565e396839ef", + "2415186086593376314.stats:md5,67c9d4c768f28a450fc82a2b5d43db5c" + ] + ] + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-02-26T14:24:14.272659781" + }, + "sarscov2 single_end_premade_index_match_stub": { + "content": [ + [ + "test.non_rRNA.fastq.gz", + "test.sortmerna.log", + "{id=test}" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-02-26T15:05:01.913287272" + }, + "sarscov2 single_end-for_stub_match": { + "content": [ + [ + "test.non_rRNA.fastq.gz", + "test.sortmerna.log", + "{id=test}" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-02-07T12:28:29.197913" + }, + "sarscov2 paired_end_match": { + "content": [ + [ + "{id=test}", + [ + "test_1.non_rRNA.fastq.gz", + "test_2.non_rRNA.fastq.gz" + ], + "test.sortmerna.log" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-02-07T12:28:49.914992" + }, + "versions_single_end": { + "content": [ + [ + "versions.yml:md5,7df9d50209f351e1f75e05a1fad6ba4b" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-02-26T14:36:27.14244294" + }, + "versions_index_only": { + "content": [ + [ + "versions.yml:md5,7df9d50209f351e1f75e05a1fad6ba4b" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-02-26T15:00:35.609161481" + }, + "versions_single_end_premade_index_stub": { + "content": [ + [ + "versions.yml:md5,7df9d50209f351e1f75e05a1fad6ba4b" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-02-26T15:05:02.059858431" + }, + "index_single_end_stub": { + "content": [ + [ + [ + { + "id": "test2" + }, + [ + + ] + ] + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-02-26T14:23:58.068772508" + }, + "versions_index_only_stub": { + "content": [ + [ + "versions.yml:md5,7df9d50209f351e1f75e05a1fad6ba4b" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-02-26T15:00:47.169402699" + }, + "index_single_end_premade_index_stub": { + "content": [ + [ + [ + { + "id": "test2" + }, + [ + + ] + ] + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-02-26T15:05:01.953316205" + }, + "index_single_end": { + "content": [ + [ + [ + { + "id": "test2" + }, + [ + "2415186086593376314.bursttrie_0.dat:md5,74f7f020e8d46e24a8a2e9c5fbcd564a", + "2415186086593376314.kmer_0.dat:md5,4a0bcb71b120f6a6949b7969292ef2e7", + "2415186086593376314.pos_0.dat:md5,bc2875e4cc4017707306565e396839ef", + "2415186086593376314.stats:md5,67c9d4c768f28a450fc82a2b5d43db5c" + ] + ] + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-02-26T14:36:26.88061978" + }, + "index_index_only": { + "content": [ + [ + [ + { + "id": "test2" + }, + [ + "2415186086593376314.bursttrie_0.dat:md5,74f7f020e8d46e24a8a2e9c5fbcd564a", + "2415186086593376314.kmer_0.dat:md5,4a0bcb71b120f6a6949b7969292ef2e7", + "2415186086593376314.pos_0.dat:md5,bc2875e4cc4017707306565e396839ef", + "2415186086593376314.stats:md5,67c9d4c768f28a450fc82a2b5d43db5c" + ] + ] + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-02-26T15:00:35.34089252" + }, + "sarscov2 single_end_premade_index_match": { + "content": [ + [ + "test.non_rRNA.fastq.gz", + "test.sortmerna.log", + "{id=test}" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-02-26T15:01:53.797737296" + } +} \ No newline at end of file diff --git a/modules/nf-core/sortmerna/tests/premade_index.config b/modules/nf-core/sortmerna/tests/premade_index.config new file mode 100644 index 0000000..ab86d2e --- /dev/null +++ b/modules/nf-core/sortmerna/tests/premade_index.config @@ -0,0 +1,8 @@ +process { + withName: 'SORTMERNA_INDEX' { + ext.args = '--index 1' + } + withName: 'SORTMERNA' { + ext.args = '--index 0' + } +} diff --git a/modules/nf-core/sortmerna/tests/tags.yml b/modules/nf-core/sortmerna/tests/tags.yml new file mode 100644 index 0000000..e088480 --- /dev/null +++ b/modules/nf-core/sortmerna/tests/tags.yml @@ -0,0 +1,2 @@ +sortmerna: + - modules/nf-core/sortmerna/** diff --git a/modules/nf-core/star/align/environment.yml b/modules/nf-core/star/align/environment.yml new file mode 100644 index 0000000..8bd58cf --- /dev/null +++ b/modules/nf-core/star/align/environment.yml @@ -0,0 +1,10 @@ +name: star_align +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bioconda::star=2.7.10a + - bioconda::samtools=1.18 + - bioconda::htslib=1.18 + - conda-forge::gawk=5.1.0 diff --git a/modules/nf-core/star/align/main.nf b/modules/nf-core/star/align/main.nf new file mode 100644 index 0000000..ae67e00 --- /dev/null +++ b/modules/nf-core/star/align/main.nf @@ -0,0 +1,109 @@ +process STAR_ALIGN { + tag "$meta.id" + label 'process_high' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/mulled-v2-1fa26d1ce03c295fe2fdcf85831a92fbcbd7e8c2:ded3841da0194af2701c780e9b3d653a85d27489-0' : + 'biocontainers/mulled-v2-1fa26d1ce03c295fe2fdcf85831a92fbcbd7e8c2:ded3841da0194af2701c780e9b3d653a85d27489-0' }" + + input: + tuple val(meta), path(reads, stageAs: "input*/*") + tuple val(meta2), path(index) + tuple val(meta3), path(gtf) + val star_ignore_sjdbgtf + val seq_platform + val seq_center + + output: + tuple val(meta), path('*Log.final.out') , emit: log_final + tuple val(meta), path('*Log.out') , emit: log_out + tuple val(meta), path('*Log.progress.out'), emit: log_progress + path "versions.yml" , emit: versions + + tuple val(meta), path('*d.out.bam') , optional:true, emit: bam + tuple val(meta), path('*sortedByCoord.out.bam') , optional:true, emit: bam_sorted + tuple val(meta), path('*toTranscriptome.out.bam'), optional:true, emit: bam_transcript + tuple val(meta), path('*Aligned.unsort.out.bam') , optional:true, emit: bam_unsorted + tuple val(meta), path('*fastq.gz') , optional:true, emit: fastq + tuple val(meta), path('*.tab') , optional:true, emit: tab + tuple val(meta), path('*.SJ.out.tab') , optional:true, emit: spl_junc_tab + tuple val(meta), path('*.ReadsPerGene.out.tab') , optional:true, emit: read_per_gene_tab + tuple val(meta), path('*.out.junction') , optional:true, emit: junction + tuple val(meta), path('*.out.sam') , optional:true, emit: sam + tuple val(meta), path('*.wig') , optional:true, emit: wig + tuple val(meta), path('*.bg') , optional:true, emit: bedgraph + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def reads1 = [], reads2 = [] + meta.single_end ? [reads].flatten().each{reads1 << it} : reads.eachWithIndex{ v, ix -> ( ix & 1 ? reads2 : reads1) << v } + def ignore_gtf = star_ignore_sjdbgtf ? '' : "--sjdbGTFfile $gtf" + def seq_platform = seq_platform ? "'PL:$seq_platform'" : "" + def seq_center = seq_center ? "'CN:$seq_center'" : "" + def attrRG = args.contains("--outSAMattrRGline") ? "" : "--outSAMattrRGline 'ID:$prefix' $seq_center 'SM:$prefix' $seq_platform" + def out_sam_type = (args.contains('--outSAMtype')) ? '' : '--outSAMtype BAM Unsorted' + def mv_unsorted_bam = (args.contains('--outSAMtype BAM Unsorted SortedByCoordinate')) ? "mv ${prefix}.Aligned.out.bam ${prefix}.Aligned.unsort.out.bam" : '' + """ + STAR \\ + --genomeDir $index \\ + --readFilesIn ${reads1.join(",")} ${reads2.join(",")} \\ + --runThreadN $task.cpus \\ + --outFileNamePrefix $prefix. \\ + $out_sam_type \\ + $ignore_gtf \\ + $attrRG \\ + $args + + $mv_unsorted_bam + + if [ -f ${prefix}.Unmapped.out.mate1 ]; then + mv ${prefix}.Unmapped.out.mate1 ${prefix}.unmapped_1.fastq + gzip ${prefix}.unmapped_1.fastq + fi + if [ -f ${prefix}.Unmapped.out.mate2 ]; then + mv ${prefix}.Unmapped.out.mate2 ${prefix}.unmapped_2.fastq + gzip ${prefix}.unmapped_2.fastq + fi + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + star: \$(STAR --version | sed -e "s/STAR_//g") + samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') + gawk: \$(echo \$(gawk --version 2>&1) | sed 's/^.*GNU Awk //; s/, .*\$//') + END_VERSIONS + """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + echo "" | gzip > ${prefix}.unmapped_1.fastq.gz + echo "" | gzip > ${prefix}.unmapped_2.fastq.gz + touch ${prefix}Xd.out.bam + touch ${prefix}.Log.final.out + touch ${prefix}.Log.out + touch ${prefix}.Log.progress.out + touch ${prefix}.sortedByCoord.out.bam + touch ${prefix}.toTranscriptome.out.bam + touch ${prefix}.Aligned.unsort.out.bam + touch ${prefix}.Aligned.sortedByCoord.out.bam + touch ${prefix}.tab + touch ${prefix}.SJ.out.tab + touch ${prefix}.ReadsPerGene.out.tab + touch ${prefix}.Chimeric.out.junction + touch ${prefix}.out.sam + touch ${prefix}.Signal.UniqueMultiple.str1.out.wig + touch ${prefix}.Signal.UniqueMultiple.str1.out.bg + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + star: \$(STAR --version | sed -e "s/STAR_//g") + samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') + gawk: \$(echo \$(gawk --version 2>&1) | sed 's/^.*GNU Awk //; s/, .*\$//') + END_VERSIONS + """ +} diff --git a/modules/nf-core/star/align/meta.yml b/modules/nf-core/star/align/meta.yml new file mode 100644 index 0000000..e80dbb7 --- /dev/null +++ b/modules/nf-core/star/align/meta.yml @@ -0,0 +1,115 @@ +name: star_align +description: Align reads to a reference genome using STAR +keywords: + - align + - fasta + - genome + - reference +tools: + - star: + description: | + STAR is a software package for mapping DNA sequences against + a large reference genome, such as the human genome. + homepage: https://github.com/alexdobin/STAR + manual: https://github.com/alexdobin/STAR/blob/master/doc/STARmanual.pdf + doi: 10.1093/bioinformatics/bts635 + licence: ["MIT"] +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - reads: + type: file + description: | + List of input FastQ files of size 1 and 2 for single-end and paired-end data, + respectively. + - meta2: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'test' ] + - index: + type: directory + description: STAR genome index + pattern: "star" + - meta3: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'test' ] + - gtf: + type: file + description: Annotation GTF file + pattern: "*.{gtf}" + - star_ignore_sjdbgtf: + type: boolean + description: Ignore annotation GTF file + - seq_platform: + type: string + description: Sequencing platform + - seq_center: + type: string + description: Sequencing center +output: + - bam: + type: file + description: Output BAM file containing read alignments + pattern: "*.{bam}" + - log_final: + type: file + description: STAR final log file + pattern: "*Log.final.out" + - log_out: + type: file + description: STAR lot out file + pattern: "*Log.out" + - log_progress: + type: file + description: STAR log progress file + pattern: "*Log.progress.out" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" + - bam_sorted: + type: file + description: Sorted BAM file of read alignments (optional) + pattern: "*sortedByCoord.out.bam" + - bam_transcript: + type: file + description: Output BAM file of transcriptome alignment (optional) + pattern: "*toTranscriptome.out.bam" + - bam_unsorted: + type: file + description: Unsorted BAM file of read alignments (optional) + pattern: "*Aligned.unsort.out.bam" + - fastq: + type: file + description: Unmapped FastQ files (optional) + pattern: "*fastq.gz" + - tab: + type: file + description: STAR output tab file(s) (optional) + pattern: "*.tab" + - junction: + type: file + description: STAR chimeric junction output file (optional) + pattern: "*.out.junction" + - wig: + type: file + description: STAR output wiggle format file(s) (optional) + pattern: "*.wig" + - bedgraph: + type: file + description: STAR output bedGraph format file(s) (optional) + pattern: "*.bg" +authors: + - "@kevinmenden" + - "@drpatelh" + - "@praveenraj2018" +maintainers: + - "@kevinmenden" + - "@drpatelh" + - "@praveenraj2018" diff --git a/modules/nf-core/star/align/tests/main.nf.test b/modules/nf-core/star/align/tests/main.nf.test new file mode 100644 index 0000000..2d9f72d --- /dev/null +++ b/modules/nf-core/star/align/tests/main.nf.test @@ -0,0 +1,609 @@ +nextflow_process { + + name "Test Process STAR_ALIGN" + script "../main.nf" + process "STAR_ALIGN" + tag "modules" + tag "modules_nfcore" + tag "star" + tag "star/align" + tag "star/genomegenerate" + + test("homo_sapiens - single_end") { + config "./nextflow.config" + + setup { + run("STAR_GENOMEGENERATE") { + script "../../../star/genomegenerate/main.nf" + process { + """ + input[0] = Channel.of([ + [ id:'test_fasta' ], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ] + ]) + input[1] = Channel.of([ + [ id:'test_gtf' ], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] + ]) + """ + } + } + } + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:true ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/fastq/test_rnaseq_1.fastq.gz', checkIfExists: true) ] + ]) + input[1] = STAR_GENOMEGENERATE.out.index + input[2] = Channel.of([ + [ id:'test_gtf' ], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] + ]) + input[3] = false + input[4] = 'illumina' + input[5] = false + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + file(process.out.log_final[0][1]).name, + file(process.out.log_out[0][1]).name, + file(process.out.log_progress[0][1]).name, + process.out.bam, + process.out.bam_sorted, + process.out.bam_transcript, + process.out.bam_unsorted, + process.out.bedgraph, + process.out.fastq, + process.out.junction, + process.out.read_per_gene_tab, + process.out.sam, + process.out.spl_junc_tab, + process.out.tab, + process.out.wig, + process.out.versions + ).match() } + ) + } + } + + test("homo_sapiens - paired_end") { + config "./nextflow.config" + + setup { + run("STAR_GENOMEGENERATE") { + script "../../../star/genomegenerate/main.nf" + process { + """ + input[0] = Channel.of([ + [ id:'test_fasta' ], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ] + ]) + input[1] = Channel.of([ + [ id:'test_gtf' ], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] + ]) + """ + } + } + } + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/fastq/test_rnaseq_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/fastq/test_rnaseq_2.fastq.gz', checkIfExists: true) + ] + ]) + input[1] = STAR_GENOMEGENERATE.out.index + input[2] = Channel.of([ + [ id:'test_gtf' ], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] + ]) + input[3] = false + input[4] = 'illumina' + input[5] = false + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + file(process.out.log_final[0][1]).name, + file(process.out.log_out[0][1]).name, + file(process.out.log_progress[0][1]).name, + process.out.bam, + process.out.bam_sorted, + process.out.bam_transcript, + process.out.bam_unsorted, + process.out.bedgraph, + process.out.fastq, + process.out.junction, + process.out.read_per_gene_tab, + process.out.sam, + process.out.spl_junc_tab, + process.out.tab, + process.out.wig, + process.out.versions + ).match() } + ) + } + } + + test("homo_sapiens - paired_end - arriba") { + config "./nextflow.arriba.config" + + setup { + run("STAR_GENOMEGENERATE") { + script "../../../star/genomegenerate/main.nf" + process { + """ + input[0] = Channel.of([ + [ id:'test_fasta' ], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ] + ]) + input[1] = Channel.of([ + [ id:'test_gtf' ], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] + ]) + """ + } + } + } + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/fastq/test_rnaseq_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/fastq/test_rnaseq_2.fastq.gz', checkIfExists: true) + ] + ]) + input[1] = STAR_GENOMEGENERATE.out.index + input[2] = Channel.of([ + [ id:'test_gtf' ], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] + ]) + input[3] = false + input[4] = 'illumina' + input[5] = false + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + file(process.out.log_final[0][1]).name, + file(process.out.log_out[0][1]).name, + file(process.out.log_progress[0][1]).name, + process.out.bam, + process.out.bam_sorted, + process.out.bam_transcript, + process.out.bam_unsorted, + process.out.bedgraph, + process.out.fastq, + process.out.junction, + process.out.read_per_gene_tab, + process.out.sam, + process.out.spl_junc_tab, + process.out.tab, + process.out.wig, + process.out.versions + ).match() } + ) + } + } + + test("homo_sapiens - paired_end - starfusion") { + config "./nextflow.starfusion.config" + + setup { + run("STAR_GENOMEGENERATE") { + script "../../../star/genomegenerate/main.nf" + process { + """ + input[0] = Channel.of([ + [ id:'test_fasta' ], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ] + ]) + input[1] = Channel.of([ + [ id:'test_gtf' ], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] + ]) + """ + } + } + } + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/fastq/test_rnaseq_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/fastq/test_rnaseq_2.fastq.gz', checkIfExists: true) + ] + ]) + input[1] = STAR_GENOMEGENERATE.out.index + input[2] = Channel.of([ + [ id:'test_gtf' ], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] + ]) + input[3] = false + input[4] = 'illumina' + input[5] = false + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + file(process.out.log_final[0][1]).name, + file(process.out.log_out[0][1]).name, + file(process.out.log_progress[0][1]).name, + process.out.bam, + process.out.bam_sorted, + process.out.bam_transcript, + process.out.bam_unsorted, + process.out.bedgraph, + process.out.fastq, + process.out.junction, + process.out.read_per_gene_tab, + process.out.sam, + process.out.spl_junc_tab, + process.out.tab, + process.out.wig, + process.out.versions + ).match() } + ) + } + } + + test("homo_sapiens - paired_end - multiple") { + config "./nextflow.config" + + setup { + run("STAR_GENOMEGENERATE") { + script "../../../star/genomegenerate/main.nf" + process { + """ + input[0] = Channel.of([ + [ id:'test_fasta' ], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ] + ]) + input[1] = Channel.of([ + [ id:'test_gtf' ], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] + ]) + """ + } + } + } + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/fastq/test_rnaseq_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/fastq/test_rnaseq_2.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/fastq/test_rnaseq_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/fastq/test_rnaseq_2.fastq.gz', checkIfExists: true) + ] + ]) + input[1] = STAR_GENOMEGENERATE.out.index + input[2] = Channel.of([ + [ id:'test_gtf' ], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] + ]) + input[3] = false + input[4] = 'illumina' + input[5] = false + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + file(process.out.log_final[0][1]).name, + file(process.out.log_out[0][1]).name, + file(process.out.log_progress[0][1]).name, + process.out.bam, + process.out.bam_sorted, + process.out.bam_transcript, + process.out.bam_unsorted, + process.out.bedgraph, + process.out.fastq, + process.out.junction, + process.out.read_per_gene_tab, + process.out.sam, + process.out.spl_junc_tab, + process.out.tab, + process.out.wig, + process.out.versions + ).match() } + ) + } + } + + test("homo_sapiens - single_end - stub") { + options "-stub" + config "./nextflow.config" + + setup { + run("STAR_GENOMEGENERATE") { + script "../../../star/genomegenerate/main.nf" + process { + """ + input[0] = Channel.of([ + [ id:'test_fasta' ], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ] + ]) + input[1] = Channel.of([ + [ id:'test_gtf' ], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] + ]) + """ + } + } + } + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:true ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/fastq/test_rnaseq_1.fastq.gz', checkIfExists: true) ] + ]) + input[1] = STAR_GENOMEGENERATE.out.index + input[2] = Channel.of([ + [ id:'test_gtf' ], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] + ]) + input[3] = false + input[4] = 'illumina' + input[5] = false + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("homo_sapiens - paired_end - stub") { + options "-stub" + config "./nextflow.config" + + setup { + run("STAR_GENOMEGENERATE") { + script "../../../star/genomegenerate/main.nf" + process { + """ + input[0] = Channel.of([ + [ id:'test_fasta' ], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ] + ]) + input[1] = Channel.of([ + [ id:'test_gtf' ], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] + ]) + """ + } + } + } + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/fastq/test_rnaseq_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/fastq/test_rnaseq_2.fastq.gz', checkIfExists: true) + ] + ]) + input[1] = STAR_GENOMEGENERATE.out.index + input[2] = Channel.of([ + [ id:'test_gtf' ], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] + ]) + input[3] = false + input[4] = 'illumina' + input[5] = false + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("homo_sapiens - paired_end - arriba - stub") { + options "-stub" + config "./nextflow.arriba.config" + + setup { + run("STAR_GENOMEGENERATE") { + script "../../../star/genomegenerate/main.nf" + process { + """ + input[0] = Channel.of([ + [ id:'test_fasta' ], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ] + ]) + input[1] = Channel.of([ + [ id:'test_gtf' ], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] + ]) + """ + } + } + } + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/fastq/test_rnaseq_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/fastq/test_rnaseq_2.fastq.gz', checkIfExists: true) + ] + ]) + input[1] = STAR_GENOMEGENERATE.out.index + input[2] = Channel.of([ + [ id:'test_gtf' ], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] + ]) + input[3] = false + input[4] = 'illumina' + input[5] = false + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("homo_sapiens - paired_end - starfusion - stub") { + options "-stub" + config "./nextflow.starfusion.config" + + setup { + run("STAR_GENOMEGENERATE") { + script "../../../star/genomegenerate/main.nf" + process { + """ + input[0] = Channel.of([ + [ id:'test_fasta' ], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ] + ]) + input[1] = Channel.of([ + [ id:'test_gtf' ], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] + ]) + """ + } + } + } + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/fastq/test_rnaseq_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/fastq/test_rnaseq_2.fastq.gz', checkIfExists: true) + ] + ]) + input[1] = STAR_GENOMEGENERATE.out.index + input[2] = Channel.of([ + [ id:'test_gtf' ], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] + ]) + input[3] = false + input[4] = 'illumina' + input[5] = false + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("homo_sapiens - paired_end - multiple - stub") { + options "-stub" + config "./nextflow.config" + + setup { + run("STAR_GENOMEGENERATE") { + script "../../../star/genomegenerate/main.nf" + process { + """ + input[0] = Channel.of([ + [ id:'test_fasta' ], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ] + ]) + input[1] = Channel.of([ + [ id:'test_gtf' ], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] + ]) + """ + } + } + } + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/fastq/test_rnaseq_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/fastq/test_rnaseq_2.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/fastq/test_rnaseq_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/fastq/test_rnaseq_2.fastq.gz', checkIfExists: true) + ] + ]) + input[1] = STAR_GENOMEGENERATE.out.index + input[2] = Channel.of([ + [ id:'test_gtf' ], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] + ]) + input[3] = false + input[4] = 'illumina' + input[5] = false + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } +} \ No newline at end of file diff --git a/modules/nf-core/star/align/tests/main.nf.test.snap b/modules/nf-core/star/align/tests/main.nf.test.snap new file mode 100644 index 0000000..c814eb5 --- /dev/null +++ b/modules/nf-core/star/align/tests/main.nf.test.snap @@ -0,0 +1,1973 @@ +{ + "homo_sapiens - single_end - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": true + }, + "test.Log.final.out:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": true + }, + "test.Log.out:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "10": [ + [ + { + "id": "test", + "single_end": true + }, + "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "11": [ + [ + { + "id": "test", + "single_end": true + }, + "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "12": [ + [ + { + "id": "test", + "single_end": true + }, + "test.Chimeric.out.junction:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "13": [ + [ + { + "id": "test", + "single_end": true + }, + "test.out.sam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "14": [ + [ + { + "id": "test", + "single_end": true + }, + "test.Signal.UniqueMultiple.str1.out.wig:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "15": [ + [ + { + "id": "test", + "single_end": true + }, + "test.Signal.UniqueMultiple.str1.out.bg:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + [ + { + "id": "test", + "single_end": true + }, + "test.Log.progress.out:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + "versions.yml:md5,2e6b6d8809f5a17f38f4d27c45dcb22f" + ], + "4": [ + [ + { + "id": "test", + "single_end": true + }, + [ + "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "testXd.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "5": [ + [ + { + "id": "test", + "single_end": true + }, + [ + "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "6": [ + [ + { + "id": "test", + "single_end": true + }, + "test.toTranscriptome.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "7": [ + [ + { + "id": "test", + "single_end": true + }, + "test.Aligned.unsort.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "8": [ + [ + { + "id": "test", + "single_end": true + }, + [ + "test.unmapped_1.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test.unmapped_2.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "9": [ + [ + { + "id": "test", + "single_end": true + }, + [ + "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "bam": [ + [ + { + "id": "test", + "single_end": true + }, + [ + "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "testXd.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "bam_sorted": [ + [ + { + "id": "test", + "single_end": true + }, + [ + "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "bam_transcript": [ + [ + { + "id": "test", + "single_end": true + }, + "test.toTranscriptome.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "bam_unsorted": [ + [ + { + "id": "test", + "single_end": true + }, + "test.Aligned.unsort.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "bedgraph": [ + [ + { + "id": "test", + "single_end": true + }, + "test.Signal.UniqueMultiple.str1.out.bg:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "fastq": [ + [ + { + "id": "test", + "single_end": true + }, + [ + "test.unmapped_1.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test.unmapped_2.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "junction": [ + [ + { + "id": "test", + "single_end": true + }, + "test.Chimeric.out.junction:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "log_final": [ + [ + { + "id": "test", + "single_end": true + }, + "test.Log.final.out:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "log_out": [ + [ + { + "id": "test", + "single_end": true + }, + "test.Log.out:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "log_progress": [ + [ + { + "id": "test", + "single_end": true + }, + "test.Log.progress.out:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "read_per_gene_tab": [ + [ + { + "id": "test", + "single_end": true + }, + "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "sam": [ + [ + { + "id": "test", + "single_end": true + }, + "test.out.sam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "spl_junc_tab": [ + [ + { + "id": "test", + "single_end": true + }, + "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "tab": [ + [ + { + "id": "test", + "single_end": true + }, + [ + "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "versions": [ + "versions.yml:md5,2e6b6d8809f5a17f38f4d27c45dcb22f" + ], + "wig": [ + [ + { + "id": "test", + "single_end": true + }, + "test.Signal.UniqueMultiple.str1.out.wig:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T15:16:04.712114" + }, + "homo_sapiens - paired_end - arriba - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Log.final.out:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Log.out:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "10": [ + [ + { + "id": "test", + "single_end": false + }, + "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "11": [ + [ + { + "id": "test", + "single_end": false + }, + "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "12": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Chimeric.out.junction:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "13": [ + [ + { + "id": "test", + "single_end": false + }, + "test.out.sam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "14": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Signal.UniqueMultiple.str1.out.wig:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "15": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Signal.UniqueMultiple.str1.out.bg:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Log.progress.out:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + "versions.yml:md5,2e6b6d8809f5a17f38f4d27c45dcb22f" + ], + "4": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "testXd.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "5": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "6": [ + [ + { + "id": "test", + "single_end": false + }, + "test.toTranscriptome.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "7": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Aligned.unsort.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "8": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.unmapped_1.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test.unmapped_2.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "9": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "bam": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "testXd.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "bam_sorted": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "bam_transcript": [ + [ + { + "id": "test", + "single_end": false + }, + "test.toTranscriptome.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "bam_unsorted": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Aligned.unsort.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "bedgraph": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Signal.UniqueMultiple.str1.out.bg:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "fastq": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.unmapped_1.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test.unmapped_2.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "junction": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Chimeric.out.junction:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "log_final": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Log.final.out:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "log_out": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Log.out:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "log_progress": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Log.progress.out:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "read_per_gene_tab": [ + [ + { + "id": "test", + "single_end": false + }, + "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "sam": [ + [ + { + "id": "test", + "single_end": false + }, + "test.out.sam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "spl_junc_tab": [ + [ + { + "id": "test", + "single_end": false + }, + "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "tab": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "versions": [ + "versions.yml:md5,2e6b6d8809f5a17f38f4d27c45dcb22f" + ], + "wig": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Signal.UniqueMultiple.str1.out.wig:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T15:16:28.874293" + }, + "homo_sapiens - single_end": { + "content": [ + "test.Log.final.out", + "test.Log.out", + "test.Log.progress.out", + [ + [ + { + "id": "test", + "single_end": true + }, + "test.Aligned.sortedByCoord.out.bam:md5,c6cfaccaf91bc7fdabed3cfe236d4535" + ] + ], + [ + [ + { + "id": "test", + "single_end": true + }, + "test.Aligned.sortedByCoord.out.bam:md5,c6cfaccaf91bc7fdabed3cfe236d4535" + ] + ], + [ + + ], + [ + + ], + [ + [ + { + "id": "test", + "single_end": true + }, + [ + "test.Signal.Unique.str1.out.bg:md5,c56fc1472776fb927eaf62d973da5f9a", + "test.Signal.UniqueMultiple.str1.out.bg:md5,e93373cf6f2a2a9506e2efdb260cdd4f" + ] + ] + ], + [ + + ], + [ + + ], + [ + + ], + [ + + ], + [ + [ + { + "id": "test", + "single_end": true + }, + "test.SJ.out.tab:md5,75a516ab950fb958f40b29996474949c" + ] + ], + [ + [ + { + "id": "test", + "single_end": true + }, + "test.SJ.out.tab:md5,75a516ab950fb958f40b29996474949c" + ] + ], + [ + + ], + [ + "versions.yml:md5,2e6b6d8809f5a17f38f4d27c45dcb22f" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T18:02:34.35338" + }, + "homo_sapiens - paired_end": { + "content": [ + "test.Log.final.out", + "test.Log.out", + "test.Log.progress.out", + [ + [ + { + "id": "test", + "single_end": false + }, + "test.Aligned.sortedByCoord.out.bam:md5,b9ee1c607e07323bc1652ef3babb543f" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.Aligned.sortedByCoord.out.bam:md5,b9ee1c607e07323bc1652ef3babb543f" + ] + ], + [ + + ], + [ + + ], + [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.Signal.Unique.str1.out.bg:md5,d7bf8b70b436ca048a62513e1d0ece3a", + "test.Signal.UniqueMultiple.str1.out.bg:md5,686d58493b9eb445b56ace4d67f76ef6" + ] + ] + ], + [ + + ], + [ + + ], + [ + + ], + [ + + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.SJ.out.tab:md5,844af19ab0fc8cd9a3f75228445aca0d" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.SJ.out.tab:md5,844af19ab0fc8cd9a3f75228445aca0d" + ] + ], + [ + + ], + [ + "versions.yml:md5,2e6b6d8809f5a17f38f4d27c45dcb22f" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T18:03:16.701923" + }, + "homo_sapiens - paired_end - multiple - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Log.final.out:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Log.out:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "10": [ + [ + { + "id": "test", + "single_end": false + }, + "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "11": [ + [ + { + "id": "test", + "single_end": false + }, + "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "12": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Chimeric.out.junction:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "13": [ + [ + { + "id": "test", + "single_end": false + }, + "test.out.sam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "14": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Signal.UniqueMultiple.str1.out.wig:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "15": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Signal.UniqueMultiple.str1.out.bg:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Log.progress.out:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + "versions.yml:md5,2e6b6d8809f5a17f38f4d27c45dcb22f" + ], + "4": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "testXd.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "5": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "6": [ + [ + { + "id": "test", + "single_end": false + }, + "test.toTranscriptome.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "7": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Aligned.unsort.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "8": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.unmapped_1.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test.unmapped_2.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "9": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "bam": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "testXd.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "bam_sorted": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "bam_transcript": [ + [ + { + "id": "test", + "single_end": false + }, + "test.toTranscriptome.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "bam_unsorted": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Aligned.unsort.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "bedgraph": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Signal.UniqueMultiple.str1.out.bg:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "fastq": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.unmapped_1.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test.unmapped_2.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "junction": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Chimeric.out.junction:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "log_final": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Log.final.out:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "log_out": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Log.out:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "log_progress": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Log.progress.out:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "read_per_gene_tab": [ + [ + { + "id": "test", + "single_end": false + }, + "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "sam": [ + [ + { + "id": "test", + "single_end": false + }, + "test.out.sam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "spl_junc_tab": [ + [ + { + "id": "test", + "single_end": false + }, + "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "tab": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "versions": [ + "versions.yml:md5,2e6b6d8809f5a17f38f4d27c45dcb22f" + ], + "wig": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Signal.UniqueMultiple.str1.out.wig:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T15:16:51.360287" + }, + "homo_sapiens - paired_end - multiple": { + "content": [ + "test.Log.final.out", + "test.Log.out", + "test.Log.progress.out", + [ + [ + { + "id": "test", + "single_end": false + }, + "test.Aligned.sortedByCoord.out.bam:md5,ab07c21d63ab0a6c07d171d213c81d5a" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.Aligned.sortedByCoord.out.bam:md5,ab07c21d63ab0a6c07d171d213c81d5a" + ] + ], + [ + + ], + [ + + ], + [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.Signal.Unique.str1.out.bg:md5,d7bf8b70b436ca048a62513e1d0ece3a", + "test.Signal.UniqueMultiple.str1.out.bg:md5,686d58493b9eb445b56ace4d67f76ef6" + ] + ] + ], + [ + + ], + [ + + ], + [ + + ], + [ + + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.SJ.out.tab:md5,069877e053714e23010fe4e1c003b4a2" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.SJ.out.tab:md5,069877e053714e23010fe4e1c003b4a2" + ] + ], + [ + + ], + [ + "versions.yml:md5,2e6b6d8809f5a17f38f4d27c45dcb22f" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T13:13:28.987438" + }, + "homo_sapiens - paired_end - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Log.final.out:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Log.out:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "10": [ + [ + { + "id": "test", + "single_end": false + }, + "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "11": [ + [ + { + "id": "test", + "single_end": false + }, + "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "12": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Chimeric.out.junction:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "13": [ + [ + { + "id": "test", + "single_end": false + }, + "test.out.sam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "14": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Signal.UniqueMultiple.str1.out.wig:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "15": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Signal.UniqueMultiple.str1.out.bg:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Log.progress.out:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + "versions.yml:md5,2e6b6d8809f5a17f38f4d27c45dcb22f" + ], + "4": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "testXd.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "5": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "6": [ + [ + { + "id": "test", + "single_end": false + }, + "test.toTranscriptome.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "7": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Aligned.unsort.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "8": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.unmapped_1.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test.unmapped_2.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "9": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "bam": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "testXd.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "bam_sorted": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "bam_transcript": [ + [ + { + "id": "test", + "single_end": false + }, + "test.toTranscriptome.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "bam_unsorted": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Aligned.unsort.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "bedgraph": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Signal.UniqueMultiple.str1.out.bg:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "fastq": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.unmapped_1.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test.unmapped_2.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "junction": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Chimeric.out.junction:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "log_final": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Log.final.out:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "log_out": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Log.out:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "log_progress": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Log.progress.out:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "read_per_gene_tab": [ + [ + { + "id": "test", + "single_end": false + }, + "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "sam": [ + [ + { + "id": "test", + "single_end": false + }, + "test.out.sam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "spl_junc_tab": [ + [ + { + "id": "test", + "single_end": false + }, + "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "tab": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "versions": [ + "versions.yml:md5,2e6b6d8809f5a17f38f4d27c45dcb22f" + ], + "wig": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Signal.UniqueMultiple.str1.out.wig:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T15:16:16.798018" + }, + "homo_sapiens - paired_end - starfusion": { + "content": [ + "test.Log.final.out", + "test.Log.out", + "test.Log.progress.out", + [ + [ + { + "id": "test", + "single_end": false + }, + "test.Aligned.out.bam:md5,bcad07b838f6762fc01eea52b5cd3f84" + ] + ], + [ + + ], + [ + + ], + [ + + ], + [ + + ], + [ + + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.Chimeric.out.junction:md5,c10ef219f4a30e83711b995bc5e40dba" + ] + ], + [ + + ], + [ + + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.SJ.out.tab:md5,19c3faa1bfa9a0cc5e4c45f17065b53a" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.SJ.out.tab:md5,19c3faa1bfa9a0cc5e4c45f17065b53a" + ] + ], + [ + + ], + [ + "versions.yml:md5,2e6b6d8809f5a17f38f4d27c45dcb22f" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T13:10:55.371956" + }, + "homo_sapiens - paired_end - arriba": { + "content": [ + "test.Log.final.out", + "test.Log.out", + "test.Log.progress.out", + [ + [ + { + "id": "test", + "single_end": false + }, + "test.Aligned.out.bam:md5,c1b1747f5873f2d17762725636e891d5" + ] + ], + [ + + ], + [ + + ], + [ + + ], + [ + + ], + [ + + ], + [ + + ], + [ + + ], + [ + + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.SJ.out.tab:md5,5155c9fd1f787ad6d7d80987fb06219c" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.SJ.out.tab:md5,5155c9fd1f787ad6d7d80987fb06219c" + ] + ], + [ + + ], + [ + "versions.yml:md5,2e6b6d8809f5a17f38f4d27c45dcb22f" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T13:05:10.7534" + }, + "homo_sapiens - paired_end - starfusion - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Log.final.out:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Log.out:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "10": [ + [ + { + "id": "test", + "single_end": false + }, + "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "11": [ + [ + { + "id": "test", + "single_end": false + }, + "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "12": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Chimeric.out.junction:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "13": [ + [ + { + "id": "test", + "single_end": false + }, + "test.out.sam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "14": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Signal.UniqueMultiple.str1.out.wig:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "15": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Signal.UniqueMultiple.str1.out.bg:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Log.progress.out:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + "versions.yml:md5,2e6b6d8809f5a17f38f4d27c45dcb22f" + ], + "4": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "testXd.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "5": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "6": [ + [ + { + "id": "test", + "single_end": false + }, + "test.toTranscriptome.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "7": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Aligned.unsort.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "8": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.unmapped_1.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test.unmapped_2.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "9": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "bam": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "testXd.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "bam_sorted": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "bam_transcript": [ + [ + { + "id": "test", + "single_end": false + }, + "test.toTranscriptome.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "bam_unsorted": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Aligned.unsort.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "bedgraph": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Signal.UniqueMultiple.str1.out.bg:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "fastq": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.unmapped_1.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test.unmapped_2.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "junction": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Chimeric.out.junction:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "log_final": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Log.final.out:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "log_out": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Log.out:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "log_progress": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Log.progress.out:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "read_per_gene_tab": [ + [ + { + "id": "test", + "single_end": false + }, + "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "sam": [ + [ + { + "id": "test", + "single_end": false + }, + "test.out.sam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "spl_junc_tab": [ + [ + { + "id": "test", + "single_end": false + }, + "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "tab": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "versions": [ + "versions.yml:md5,2e6b6d8809f5a17f38f4d27c45dcb22f" + ], + "wig": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Signal.UniqueMultiple.str1.out.wig:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T15:16:40.64399" + } +} \ No newline at end of file diff --git a/modules/nf-core/star/align/tests/nextflow.arriba.config b/modules/nf-core/star/align/tests/nextflow.arriba.config new file mode 100644 index 0000000..2324b9e --- /dev/null +++ b/modules/nf-core/star/align/tests/nextflow.arriba.config @@ -0,0 +1,14 @@ +process { + + withName: STAR_GENOMEGENERATE { + ext.args = '--genomeSAindexNbases 9' + } + + withName: STAR_ALIGN { + ext.args = '--readFilesCommand zcat --outSAMtype BAM Unsorted --outSAMunmapped Within --outBAMcompression 0 --outFilterMultimapNmax 50 --peOverlapNbasesMin 10 --alignSplicedMateMapLminOverLmate 0.5 --alignSJstitchMismatchNmax 5 -1 5 5 --chimSegmentMin 10 --chimOutType WithinBAM HardClip --chimJunctionOverhangMin 10 --chimScoreDropMax 30 --chimScoreJunctionNonGTAG 0 --chimScoreSeparation 1 --chimSegmentReadGapMax 3 --chimMultimapNmax 50' + } + +} + +// Fix chown issue for the output star folder +docker.runOptions = '--platform=linux/amd64 -u $(id -u):$(id -g)' diff --git a/modules/nf-core/star/align/tests/nextflow.config b/modules/nf-core/star/align/tests/nextflow.config new file mode 100644 index 0000000..c4ac580 --- /dev/null +++ b/modules/nf-core/star/align/tests/nextflow.config @@ -0,0 +1,14 @@ +process { + + withName: STAR_GENOMEGENERATE { + ext.args = '--genomeSAindexNbases 9' + } + + withName: STAR_ALIGN { + ext.args = '--readFilesCommand zcat --outSAMtype BAM SortedByCoordinate --outWigType bedGraph --outWigStrand Unstranded' + } + +} + +// Fix chown issue for the output star folder +docker.runOptions = '--platform=linux/amd64 -u $(id -u):$(id -g)' diff --git a/modules/nf-core/star/align/tests/nextflow.starfusion.config b/modules/nf-core/star/align/tests/nextflow.starfusion.config new file mode 100644 index 0000000..467b649 --- /dev/null +++ b/modules/nf-core/star/align/tests/nextflow.starfusion.config @@ -0,0 +1,14 @@ +process { + + withName: STAR_GENOMEGENERATE { + ext.args = '--genomeSAindexNbases 9' + } + + withName: STAR_ALIGN { + ext.args = '--readFilesCommand zcat --outSAMtype BAM Unsorted --outReadsUnmapped None --twopassMode Basic --outSAMstrandField intronMotif --outSAMunmapped Within --chimSegmentMin 12 --chimJunctionOverhangMin 8 --chimOutJunctionFormat 1 --alignSJDBoverhangMin 10 --alignMatesGapMax 100000 --alignIntronMax 100000 --alignSJstitchMismatchNmax 5 -1 5 5 --chimMultimapScoreRange 3 --chimScoreJunctionNonGTAG -4 --chimMultimapNmax 20 --chimNonchimScoreDropMin 10 --peOverlapNbasesMin 12 --peOverlapMMp 0.1 --alignInsertionFlush Right --alignSplicedMateMapLminOverLmate 0 --alignSplicedMateMapLmin 30' + } + +} + +// Fix chown issue for the output star folder +docker.runOptions = '--platform=linux/amd64 -u $(id -u):$(id -g)' diff --git a/modules/nf-core/star/align/tests/tags.yml b/modules/nf-core/star/align/tests/tags.yml new file mode 100644 index 0000000..8beace1 --- /dev/null +++ b/modules/nf-core/star/align/tests/tags.yml @@ -0,0 +1,2 @@ +star/align: + - modules/nf-core/star/align/** diff --git a/modules/nf-core/star/genomegenerate/environment.yml b/modules/nf-core/star/genomegenerate/environment.yml new file mode 100644 index 0000000..791f255 --- /dev/null +++ b/modules/nf-core/star/genomegenerate/environment.yml @@ -0,0 +1,10 @@ +name: star_genomegenerate +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bioconda::samtools=1.18 + - bioconda::htslib=1.18 + - bioconda::star=2.7.10a + - conda-forge::gawk=5.1.0 diff --git a/modules/nf-core/star/genomegenerate/main.nf b/modules/nf-core/star/genomegenerate/main.nf new file mode 100644 index 0000000..b885571 --- /dev/null +++ b/modules/nf-core/star/genomegenerate/main.nf @@ -0,0 +1,119 @@ +process STAR_GENOMEGENERATE { + tag "$fasta" + label 'process_high' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/mulled-v2-1fa26d1ce03c295fe2fdcf85831a92fbcbd7e8c2:ded3841da0194af2701c780e9b3d653a85d27489-0' : + 'biocontainers/mulled-v2-1fa26d1ce03c295fe2fdcf85831a92fbcbd7e8c2:ded3841da0194af2701c780e9b3d653a85d27489-0' }" + + input: + tuple val(meta), path(fasta) + tuple val(meta2), path(gtf) + + output: + tuple val(meta), path("star") , emit: index + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def args_list = args.tokenize() + def memory = task.memory ? "--limitGenomeGenerateRAM ${task.memory.toBytes() - 100000000}" : '' + def include_gtf = gtf ? "--sjdbGTFfile $gtf" : '' + if (args_list.contains('--genomeSAindexNbases')) { + """ + mkdir star + STAR \\ + --runMode genomeGenerate \\ + --genomeDir star/ \\ + --genomeFastaFiles $fasta \\ + $include_gtf \\ + --runThreadN $task.cpus \\ + $memory \\ + $args + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + star: \$(STAR --version | sed -e "s/STAR_//g") + samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') + gawk: \$(echo \$(gawk --version 2>&1) | sed 's/^.*GNU Awk //; s/, .*\$//') + END_VERSIONS + """ + } else { + """ + samtools faidx $fasta + NUM_BASES=`gawk '{sum = sum + \$2}END{if ((log(sum)/log(2))/2 - 1 > 14) {printf "%.0f", 14} else {printf "%.0f", (log(sum)/log(2))/2 - 1}}' ${fasta}.fai` + + mkdir star + STAR \\ + --runMode genomeGenerate \\ + --genomeDir star/ \\ + --genomeFastaFiles $fasta \\ + $include_gtf \\ + --runThreadN $task.cpus \\ + --genomeSAindexNbases \$NUM_BASES \\ + $memory \\ + $args + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + star: \$(STAR --version | sed -e "s/STAR_//g") + samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') + gawk: \$(echo \$(gawk --version 2>&1) | sed 's/^.*GNU Awk //; s/, .*\$//') + END_VERSIONS + """ + } + + stub: + if (gtf) { + """ + mkdir star + touch star/Genome + touch star/Log.out + touch star/SA + touch star/SAindex + touch star/chrLength.txt + touch star/chrName.txt + touch star/chrNameLength.txt + touch star/chrStart.txt + touch star/exonGeTrInfo.tab + touch star/exonInfo.tab + touch star/geneInfo.tab + touch star/genomeParameters.txt + touch star/sjdbInfo.txt + touch star/sjdbList.fromGTF.out.tab + touch star/sjdbList.out.tab + touch star/transcriptInfo.tab + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + star: \$(STAR --version | sed -e "s/STAR_//g") + samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') + gawk: \$(echo \$(gawk --version 2>&1) | sed 's/^.*GNU Awk //; s/, .*\$//') + END_VERSIONS + """ + } else { + """ + mkdir star + touch star/Genome + touch star/Log.out + touch star/SA + touch star/SAindex + touch star/chrLength.txt + touch star/chrName.txt + touch star/chrNameLength.txt + touch star/chrStart.txt + touch star/genomeParameters.txt + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + star: \$(STAR --version | sed -e "s/STAR_//g") + samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') + gawk: \$(echo \$(gawk --version 2>&1) | sed 's/^.*GNU Awk //; s/, .*\$//') + END_VERSIONS + """ + } +} diff --git a/modules/nf-core/star/genomegenerate/meta.yml b/modules/nf-core/star/genomegenerate/meta.yml new file mode 100644 index 0000000..1061e1b --- /dev/null +++ b/modules/nf-core/star/genomegenerate/meta.yml @@ -0,0 +1,53 @@ +name: star_genomegenerate +description: Create index for STAR +keywords: + - index + - fasta + - genome + - reference +tools: + - star: + description: | + STAR is a software package for mapping DNA sequences against + a large reference genome, such as the human genome. + homepage: https://github.com/alexdobin/STAR + manual: https://github.com/alexdobin/STAR/blob/master/doc/STARmanual.pdf + doi: 10.1093/bioinformatics/bts635 + licence: ["MIT"] +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - fasta: + type: file + description: Fasta file of the reference genome + - meta2: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'test' ] + - gtf: + type: file + description: GTF file of the reference genome +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - index: + type: directory + description: Folder containing the star index files + pattern: "star" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@kevinmenden" + - "@drpatelh" +maintainers: + - "@kevinmenden" + - "@drpatelh" diff --git a/modules/nf-core/star/genomegenerate/tests/main.nf.test b/modules/nf-core/star/genomegenerate/tests/main.nf.test new file mode 100644 index 0000000..4d619c4 --- /dev/null +++ b/modules/nf-core/star/genomegenerate/tests/main.nf.test @@ -0,0 +1,114 @@ +nextflow_process { + + name "Test Process STAR_GENOMEGENERATE" + script "../main.nf" + process "STAR_GENOMEGENERATE" + tag "modules" + tag "modules_nfcore" + tag "star" + tag "star/genomegenerate" + + test("fasta_gtf") { + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test_fasta' ], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ] + ]) + input[1] = Channel.of([ + [ id:'test_gtf' ], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] + ]) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + file(process.out.index[0][1]).listFiles().collect { it.getName() }.sort().toString(), + process.out.versions) + .match() } + ) + } + } + + test("fasta") { + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test_fasta' ], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ] + ]) + input[1] = Channel.of([ [], [] ]) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + file(process.out.index[0][1]).listFiles().collect { it.getName() }.sort().toString(), + process.out.versions + ).match() } + ) + } + } + + test("fasta_gtf_stub") { + + options '-stub' + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test_fasta' ], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ] + ]) + input[1] = Channel.of([ + [ id:'test_gtf' ], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] + ]) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("fasta_stub") { + + options '-stub' + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test_fasta' ], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ] + ]) + input[1] = Channel.of([ [], [] ]) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } +} diff --git a/modules/nf-core/star/genomegenerate/tests/main.nf.test.snap b/modules/nf-core/star/genomegenerate/tests/main.nf.test.snap new file mode 100644 index 0000000..207f4b4 --- /dev/null +++ b/modules/nf-core/star/genomegenerate/tests/main.nf.test.snap @@ -0,0 +1,148 @@ +{ + "fasta_gtf": { + "content": [ + "[Genome, Log.out, SA, SAindex, chrLength.txt, chrName.txt, chrNameLength.txt, chrStart.txt, exonGeTrInfo.tab, exonInfo.tab, geneInfo.tab, genomeParameters.txt, sjdbInfo.txt, sjdbList.fromGTF.out.tab, sjdbList.out.tab, transcriptInfo.tab]", + [ + "versions.yml:md5,46b8f1f34bb7f23892cd1eb249ed4d7f" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T14:55:35.478401" + }, + "fasta_gtf_stub": { + "content": [ + { + "0": [ + [ + { + "id": "test_fasta" + }, + [ + "Genome:md5,d41d8cd98f00b204e9800998ecf8427e", + "Log.out:md5,d41d8cd98f00b204e9800998ecf8427e", + "SA:md5,d41d8cd98f00b204e9800998ecf8427e", + "SAindex:md5,d41d8cd98f00b204e9800998ecf8427e", + "chrLength.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "chrName.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "chrNameLength.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "chrStart.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "exonGeTrInfo.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "exonInfo.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "geneInfo.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "genomeParameters.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "sjdbInfo.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "sjdbList.fromGTF.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "sjdbList.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "transcriptInfo.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "1": [ + "versions.yml:md5,46b8f1f34bb7f23892cd1eb249ed4d7f" + ], + "index": [ + [ + { + "id": "test_fasta" + }, + [ + "Genome:md5,d41d8cd98f00b204e9800998ecf8427e", + "Log.out:md5,d41d8cd98f00b204e9800998ecf8427e", + "SA:md5,d41d8cd98f00b204e9800998ecf8427e", + "SAindex:md5,d41d8cd98f00b204e9800998ecf8427e", + "chrLength.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "chrName.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "chrNameLength.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "chrStart.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "exonGeTrInfo.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "exonInfo.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "geneInfo.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "genomeParameters.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "sjdbInfo.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "sjdbList.fromGTF.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "sjdbList.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "transcriptInfo.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "versions": [ + "versions.yml:md5,46b8f1f34bb7f23892cd1eb249ed4d7f" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T14:55:57.247585" + }, + "fasta_stub": { + "content": [ + { + "0": [ + [ + { + "id": "test_fasta" + }, + [ + "Genome:md5,d41d8cd98f00b204e9800998ecf8427e", + "Log.out:md5,d41d8cd98f00b204e9800998ecf8427e", + "SA:md5,d41d8cd98f00b204e9800998ecf8427e", + "SAindex:md5,d41d8cd98f00b204e9800998ecf8427e", + "chrLength.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "chrName.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "chrNameLength.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "chrStart.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "genomeParameters.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "1": [ + "versions.yml:md5,46b8f1f34bb7f23892cd1eb249ed4d7f" + ], + "index": [ + [ + { + "id": "test_fasta" + }, + [ + "Genome:md5,d41d8cd98f00b204e9800998ecf8427e", + "Log.out:md5,d41d8cd98f00b204e9800998ecf8427e", + "SA:md5,d41d8cd98f00b204e9800998ecf8427e", + "SAindex:md5,d41d8cd98f00b204e9800998ecf8427e", + "chrLength.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "chrName.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "chrNameLength.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "chrStart.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "genomeParameters.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "versions": [ + "versions.yml:md5,46b8f1f34bb7f23892cd1eb249ed4d7f" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T14:56:07.01742" + }, + "fasta": { + "content": [ + "[Genome, Log.out, SA, SAindex, chrLength.txt, chrName.txt, chrNameLength.txt, chrStart.txt, genomeParameters.txt]", + [ + "versions.yml:md5,46b8f1f34bb7f23892cd1eb249ed4d7f" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T14:55:45.48784" + } +} \ No newline at end of file diff --git a/modules/nf-core/star/genomegenerate/tests/tags.yml b/modules/nf-core/star/genomegenerate/tests/tags.yml new file mode 100644 index 0000000..79f619b --- /dev/null +++ b/modules/nf-core/star/genomegenerate/tests/tags.yml @@ -0,0 +1,2 @@ +star/genomegenerate: + - modules/nf-core/star/genomegenerate/** diff --git a/modules/nf-core/tsebra/environment.yml b/modules/nf-core/tsebra/environment.yml new file mode 100644 index 0000000..657cd82 --- /dev/null +++ b/modules/nf-core/tsebra/environment.yml @@ -0,0 +1,9 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json +name: "tsebra" +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - "bioconda::tsebra=1.1.2.5" diff --git a/modules/nf-core/tsebra/main.nf b/modules/nf-core/tsebra/main.nf new file mode 100644 index 0000000..2b0673a --- /dev/null +++ b/modules/nf-core/tsebra/main.nf @@ -0,0 +1,62 @@ +process TSEBRA { + tag "$meta.id" + label 'process_single' + + // WARN: Version information not provided by tool on CLI. Please update this string when bumping container versions. + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/tsebra:1.1.2.5--pyhca03a8a_0': + 'biocontainers/tsebra:1.1.2.5--pyhca03a8a_0' }" + + input: + tuple val(meta), path(gtfs) + path hints_files + path keep_gtfs + path config + + output: + tuple val(meta), path("*.gtf"), emit: tsebra_gtf + tuple val(meta), path("*.tsv"), emit: tsebra_scores + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def gtf_arg = '-g ' + gtfs.collect { "$it" }.join(',') + def hints_arg = '-e ' + hints_files.collect { "$it" }.join(',') + def keep_arg = keep_gtfs ? ( '-k ' + keep_gtfs.collect { "$it" }.join(',') ) : '' + def config_arg = config ? "-c $config" : '' + def VERSION = '1.1.2.5' // WARN: Version information not provided by tool on CLI. Please update this string when bumping container versions. + """ + tsebra.py \\ + $gtf_arg \\ + $hints_arg \\ + $keep_arg \\ + $config_arg \\ + $args \\ + -o ${prefix}.gtf \\ + -s ${prefix}.tsv + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + tsebra: $VERSION + END_VERSIONS + """ + + stub: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def VERSION = '1.1.2.5' // WARN: Version information not provided by tool on CLI. Please update this string when bumping container versions. + """ + touch ${prefix}.gtf + touch ${prefix}.tsv + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + tsebra: $VERSION + END_VERSIONS + """ +} diff --git a/modules/nf-core/tsebra/meta.yml b/modules/nf-core/tsebra/meta.yml new file mode 100644 index 0000000..18660d4 --- /dev/null +++ b/modules/nf-core/tsebra/meta.yml @@ -0,0 +1,66 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/meta-schema.json +name: "tsebra" +description: Transcript Selector for BRAKER TSEBRA combines gene predictions by selecing transcripts based on their extrisic evidence support +keywords: + - genomics + - transcript + - selector + - gene + - prediction + - evidence +tools: + - "tsebra": + description: TSEBRA is a combiner tool that selects transcripts from gene predictions based on the support by extrisic evidence in form of introns and start/stop codons + homepage: "https://github.com/Gaius-Augustus/TSEBRA" + documentation: "https://github.com/Gaius-Augustus/TSEBRA" + tool_dev_url: "https://github.com/Gaius-Augustus/TSEBRA" + doi: "10.1186/s12859-021-04482-0" + licence: ["Artistic-2.0"] + +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1' ]` + - gtfs: + type: list + description: List of gene prediction files in gtf + pattern: "*.gtf" + - hints_files: + type: list + description: List of files containing extrinsic evidence in gff + pattern: "*.gff" + - keep_gtfs: + type: list + description: | + List of gene prediction files in gtf. These gene sets are used the same way as other inputs, but TSEBRA ensures that all + transcripts from these gene sets are included in the output + pattern: "*.gtf" + - config: + type: file + description: Configuration file that sets the parameter for TSEBRA + pattern: "*.cfg" +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1' ]` + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" + - tsebra_gtf: + type: file + description: Output file for the combined gene predictions in gtf + pattern: "*.gtf" + - tsebra_scores: + type: file + description: Transcript scores as a table + pattern: "*.tsv" +authors: + - "@GallVp" +maintainers: + - "@GallVp" diff --git a/modules/nf-core/tsebra/tests/main.nf.test b/modules/nf-core/tsebra/tests/main.nf.test new file mode 100644 index 0000000..6e45110 --- /dev/null +++ b/modules/nf-core/tsebra/tests/main.nf.test @@ -0,0 +1,91 @@ +nextflow_process { + + name "Test Process TSEBRA" + script "../main.nf" + process "TSEBRA" + + tag "modules" + tag "modules_nfcore" + tag "tsebra" + tag "gunzip" + + test("actinidia_chinensis-genome") { + + setup { + run('GUNZIP', alias: 'GUNZIP_GTF') { + script "../../../nf-core/gunzip" + + process { + """ + input[0] = [ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/eukaryotes/actinidia_chinensis/genome/chr1/genome.gtf.gz', checkIfExists: true) + ] + """ + } + } + + run('GUNZIP', alias: 'GUNZIP_HINTS') { + script "../../../nf-core/gunzip" + + process { + """ + input[0] = [ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/eukaryotes/actinidia_chinensis/genome/chr1/genome.hints.gff.gz', checkIfExists: true) + ] + """ + } + } + } + + when { + process { + """ + input[0] = GUNZIP_GTF.out.gunzip.map { meta, gtf -> [ meta, [ gtf ] ] } + input[1] = GUNZIP_HINTS.out.gunzip.map { meta, gff -> [ gff ] } + input[2] = [] + input[3] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("actinidia_chinensis-genome-stub") { + + options "-stub" + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/eukaryotes/actinidia_chinensis/genome/chr1/genome.gtf.gz', checkIfExists: true) ] + ] + input[1] = [ + file(params.modules_testdata_base_path + 'genomics/eukaryotes/actinidia_chinensis/genome/chr1/genome.hints.gff.gz', checkIfExists: true) + ] + input[2] = [] + input[3] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + +} diff --git a/modules/nf-core/tsebra/tests/main.nf.test.snap b/modules/nf-core/tsebra/tests/main.nf.test.snap new file mode 100644 index 0000000..bbe880d --- /dev/null +++ b/modules/nf-core/tsebra/tests/main.nf.test.snap @@ -0,0 +1,100 @@ +{ + "actinidia_chinensis-genome-stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.gtf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test" + }, + "test.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + "versions.yml:md5,4e3a44cee65282ac56b08e2bbc4f1d46" + ], + "tsebra_gtf": [ + [ + { + "id": "test" + }, + "test.gtf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "tsebra_scores": [ + [ + { + "id": "test" + }, + "test.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,4e3a44cee65282ac56b08e2bbc4f1d46" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.1" + }, + "timestamp": "2024-05-28T16:27:56.639849" + }, + "actinidia_chinensis-genome": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.gtf:md5,7c781c919e6aa20561f72dea09474f74" + ] + ], + "1": [ + [ + { + "id": "test" + }, + "test.tsv:md5,ad7bd858c1838b40286609a311f3a891" + ] + ], + "2": [ + "versions.yml:md5,4e3a44cee65282ac56b08e2bbc4f1d46" + ], + "tsebra_gtf": [ + [ + { + "id": "test" + }, + "test.gtf:md5,7c781c919e6aa20561f72dea09474f74" + ] + ], + "tsebra_scores": [ + [ + { + "id": "test" + }, + "test.tsv:md5,ad7bd858c1838b40286609a311f3a891" + ] + ], + "versions": [ + "versions.yml:md5,4e3a44cee65282ac56b08e2bbc4f1d46" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.1" + }, + "timestamp": "2024-05-28T16:27:52.049367" + } +} \ No newline at end of file diff --git a/modules/nf-core/tsebra/tests/tags.yml b/modules/nf-core/tsebra/tests/tags.yml new file mode 100644 index 0000000..c76165b --- /dev/null +++ b/modules/nf-core/tsebra/tests/tags.yml @@ -0,0 +1,2 @@ +tsebra: + - "modules/nf-core/tsebra/**" diff --git a/modules/nf-core/umitools/extract/environment.yml b/modules/nf-core/umitools/extract/environment.yml new file mode 100644 index 0000000..aab452d --- /dev/null +++ b/modules/nf-core/umitools/extract/environment.yml @@ -0,0 +1,7 @@ +name: umitools_extract +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bioconda::umi_tools=1.1.5 diff --git a/modules/nf-core/umitools/extract/main.nf b/modules/nf-core/umitools/extract/main.nf new file mode 100644 index 0000000..b97900e --- /dev/null +++ b/modules/nf-core/umitools/extract/main.nf @@ -0,0 +1,74 @@ +process UMITOOLS_EXTRACT { + tag "$meta.id" + label "process_single" + label "process_long" + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/umi_tools:1.1.5--py39hf95cd2a_0' : + 'biocontainers/umi_tools:1.1.5--py39hf95cd2a_0' }" + + input: + tuple val(meta), path(reads) + + output: + tuple val(meta), path("*.fastq.gz"), emit: reads + tuple val(meta), path("*.log") , emit: log + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + if (meta.single_end) { + """ + umi_tools \\ + extract \\ + -I $reads \\ + -S ${prefix}.umi_extract.fastq.gz \\ + $args \\ + > ${prefix}.umi_extract.log + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + umitools: \$( umi_tools --version | sed '/version:/!d; s/.*: //' ) + END_VERSIONS + """ + } else { + """ + umi_tools \\ + extract \\ + -I ${reads[0]} \\ + --read2-in=${reads[1]} \\ + -S ${prefix}.umi_extract_1.fastq.gz \\ + --read2-out=${prefix}.umi_extract_2.fastq.gz \\ + $args \\ + > ${prefix}.umi_extract.log + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + umitools: \$( umi_tools --version | sed '/version:/!d; s/.*: //' ) + END_VERSIONS + """ + } + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + if (meta.single_end) { + output_command = "echo '' | gzip > ${prefix}.umi_extract.fastq.gz" + } else { + output_command = "echo '' | gzip > ${prefix}.umi_extract_1.fastq.gz ;" + output_command += "echo '' | gzip > ${prefix}.umi_extract_2.fastq.gz" + } + """ + touch ${prefix}.umi_extract.log + ${output_command} + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + umitools: \$( umi_tools --version | sed '/version:/!d; s/.*: //' ) + END_VERSIONS + """ +} diff --git a/modules/nf-core/umitools/extract/meta.yml b/modules/nf-core/umitools/extract/meta.yml new file mode 100644 index 0000000..7695b27 --- /dev/null +++ b/modules/nf-core/umitools/extract/meta.yml @@ -0,0 +1,48 @@ +name: umitools_extract +description: Extracts UMI barcode from a read and add it to the read name, leaving any sample barcode in place +keywords: + - UMI + - barcode + - extract + - umitools +tools: + - umi_tools: + description: > + UMI-tools contains tools for dealing with Unique Molecular Identifiers (UMIs)/Random Molecular Tags (RMTs) and single cell RNA-Seq cell barcodes + documentation: https://umi-tools.readthedocs.io/en/latest/ + license: "MIT" +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - reads: + type: list + description: | + List of input FASTQ files whose UMIs will be extracted. +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - reads: + type: file + description: > + Extracted FASTQ files. | For single-end reads, pattern is \${prefix}.umi_extract.fastq.gz. | For paired-end reads, pattern is \${prefix}.umi_extract_{1,2}.fastq.gz. + pattern: "*.{fastq.gz}" + - log: + type: file + description: Logfile for umi_tools + pattern: "*.{log}" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@drpatelh" + - "@grst" +maintainers: + - "@drpatelh" + - "@grst" diff --git a/modules/nf-core/umitools/extract/tests/main.nf.test b/modules/nf-core/umitools/extract/tests/main.nf.test new file mode 100644 index 0000000..bb8a065 --- /dev/null +++ b/modules/nf-core/umitools/extract/tests/main.nf.test @@ -0,0 +1,106 @@ +nextflow_process { + + name "Test Process UMITOOLS_EXTRACT" + script "../main.nf" + process "UMITOOLS_EXTRACT" + config "./nextflow.config" + tag "modules_nfcore" + tag "modules" + tag "umitools" + tag "umitools/extract" + + test("single end") { + + when { + process { + """ + input[0] = [ [ id:'test', single_end:true ], // meta map + [ file(params.modules_testdata_base_path + "genomics/sarscov2/illumina/fastq/test_1.fastq.gz", checkIfExists: true) ] + ] + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot( + process.out.reads.collect { it.collect { it instanceof Map ? it : file(it).name }}, + process.out.log.collect { it.collect { it instanceof Map ? it : file(it).name }}, + process.out.versions + ).match() } + ) + } + } + + test("single end - stub") { + + options "-stub" + + when { + process { + """ + input[0] = [ [ id:'test', single_end:true ], // meta map + [ file(params.modules_testdata_base_path + "genomics/sarscov2/illumina/fastq/test_1.fastq.gz", checkIfExists: true) ] + ] + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("pair end") { + + when { + process { + """ + input[0] = [ [ id:'test', single_end:false ], // meta map + [ file(params.modules_testdata_base_path + "genomics/sarscov2/illumina/fastq/test_1.fastq.gz", checkIfExists: true), + file(params.modules_testdata_base_path + "genomics/sarscov2/illumina/fastq/test_2.fastq.gz", checkIfExists: true) ] + ] + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot( + file(process.out.reads[0][1][0]).name, + file(process.out.reads[0][1][1]).name, + process.out.log.collect { it.collect { it instanceof Map ? it : file(it).name }}, + process.out.versions + ).match() } + ) + } + } + + test("pair end - stub") { + + options "-stub" + + when { + process { + """ + input[0] = [ [ id:'test', single_end:false ], // meta map + [ file(params.modules_testdata_base_path + "genomics/sarscov2/illumina/fastq/test_1.fastq.gz", checkIfExists: true), + file(params.modules_testdata_base_path + "genomics/sarscov2/illumina/fastq/test_2.fastq.gz", checkIfExists: true) ] + ] + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } +} \ No newline at end of file diff --git a/modules/nf-core/umitools/extract/tests/main.nf.test.snap b/modules/nf-core/umitools/extract/tests/main.nf.test.snap new file mode 100644 index 0000000..b115905 --- /dev/null +++ b/modules/nf-core/umitools/extract/tests/main.nf.test.snap @@ -0,0 +1,167 @@ +{ + "pair end - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.umi_extract_1.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test.umi_extract_2.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.umi_extract.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + "versions.yml:md5,568d243174c081a0301e74ed42e59b48" + ], + "log": [ + [ + { + "id": "test", + "single_end": false + }, + "test.umi_extract.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "reads": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.umi_extract_1.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test.umi_extract_2.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "versions": [ + "versions.yml:md5,568d243174c081a0301e74ed42e59b48" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-02T15:05:20.008312" + }, + "single end - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": true + }, + "test.umi_extract.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": true + }, + "test.umi_extract.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + "versions.yml:md5,568d243174c081a0301e74ed42e59b48" + ], + "log": [ + [ + { + "id": "test", + "single_end": true + }, + "test.umi_extract.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "reads": [ + [ + { + "id": "test", + "single_end": true + }, + "test.umi_extract.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "versions": [ + "versions.yml:md5,568d243174c081a0301e74ed42e59b48" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-02T15:04:12.145999" + }, + "pair end": { + "content": [ + "test.umi_extract_1.fastq.gz", + "test.umi_extract_2.fastq.gz", + [ + [ + { + "id": "test", + "single_end": false + }, + "test.umi_extract.log" + ] + ], + [ + "versions.yml:md5,568d243174c081a0301e74ed42e59b48" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-02T15:21:09.578031" + }, + "single end": { + "content": [ + [ + [ + { + "id": "test", + "single_end": true + }, + "test.umi_extract.fastq.gz" + ] + ], + [ + [ + { + "id": "test", + "single_end": true + }, + "test.umi_extract.log" + ] + ], + [ + "versions.yml:md5,568d243174c081a0301e74ed42e59b48" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-02T15:03:52.464606" + } +} \ No newline at end of file diff --git a/modules/nf-core/umitools/extract/tests/nextflow.config b/modules/nf-core/umitools/extract/tests/nextflow.config new file mode 100644 index 0000000..c866f5a --- /dev/null +++ b/modules/nf-core/umitools/extract/tests/nextflow.config @@ -0,0 +1,9 @@ +process { + + publishDir = { "${params.outdir}/${task.process.tokenize(':')[-1].tokenize('_')[0].toLowerCase()}" } + + withName: UMITOOLS_EXTRACT { + ext.args = '--bc-pattern="NNNN"' + } + +} diff --git a/modules/nf-core/umitools/extract/tests/tags.yml b/modules/nf-core/umitools/extract/tests/tags.yml new file mode 100644 index 0000000..c3fb23d --- /dev/null +++ b/modules/nf-core/umitools/extract/tests/tags.yml @@ -0,0 +1,2 @@ +umitools/extract: + - modules/nf-core/umitools/extract/** diff --git a/nextflow.config b/nextflow.config index 49104dd..7065d3c 100644 --- a/nextflow.config +++ b/nextflow.config @@ -1,6 +1,6 @@ /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - PlantandFoodResearch/genepal Nextflow config file + plant-food-research-open/genepal Nextflow config file ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Default config options for all compute environments ---------------------------------------------------------------------------------------- @@ -8,17 +8,53 @@ // Global default params, used in configs params { + // Input/output options + input = null + protein_evidence = null + eggnogmapper_db_dir = null + eggnogmapper_tax_scope = 1 + rna_evidence = null + liftoff_annotations = null + orthofinder_annotations = null + outdir = "./results" - // TODO nf-core: Specify your pipeline's command line flags - // Input options - input = null + // Repeat annotation options + repeat_annotator = 'repeatmodeler' + save_annotated_te_lib = false + edta_is_sensitive = false + repeatmasker_save_outputs = false - // MultiQC options - multiqc_config = null - multiqc_title = null - multiqc_logo = null - max_multiqc_email_size = '25.MB' - multiqc_methods_description = null + // RNASeq pre-processing options + skip_fastqc = false + skip_fastp = false + min_trimmed_reads = 10000 + extra_fastp_args = null + save_trimmed = false + remove_ribo_rna = false + save_non_ribo_reads = false + ribo_database_manifest = "${projectDir}/assets/rrna-db-defaults.txt" + + // RNAseq alignment options + star_max_intron_length = 16000 + star_align_extra_args = null + star_save_outputs = false + save_cat_bam = false + + // Annotation options + braker_extra_args = null + braker_save_outputs = false + liftoff_coverage = 0.9 + liftoff_identity = 0.9 + allow_isoforms = true + enforce_full_intron_support = true + filter_liftoff_by_hints = true + eggnogmapper_evalue = 0.00001 + eggnogmapper_pident = 35 + eggnogmapper_purge_nohits = false + + // Evaluation options + busco_skip = false + busco_lineage_datasets = 'eukaryota_odb10' // Boilerplate options outdir = null @@ -42,9 +78,9 @@ params { // Max resource options // Defaults only, expecting to be overwritten - max_memory = '128.GB' + max_memory = '72.GB' max_cpus = 16 - max_time = '240.h' + max_time = '7.day' // Schema validation default options validationFailUnrecognisedParams = false @@ -65,7 +101,7 @@ try { System.err.println("WARNING: Could not load nf-core/config profiles: ${params.custom_config_base}/nfcore_custom.config") } -// Load PlantandFoodResearch/genepal custom profiles from different institutions. +// Load plant-food-research-open/genepal custom profiles from different institutions. try { includeConfig "${params.custom_config_base}/pipeline/genepal.config" } catch (Exception e) { @@ -223,13 +259,13 @@ dag { } manifest { - name = 'PlantandFoodResearch/genepal' + name = 'plant-food-research-open/genepal' author = """Usman Rashid, Jason Shiller""" - homePage = 'https://github.com/PlantandFoodResearch/genepal' + homePage = 'https://github.com/plant-food-research-open/genepal' description = """A Nextflow pipeline for single genome and pan-genome annotation""" mainScript = 'main.nf' nextflowVersion = '!>=23.04.0' - version = '1.0dev' + version = '0.4.0+dev' doi = '' } diff --git a/nextflow_schema.json b/nextflow_schema.json index e3e0f04..aa7679a 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -1,7 +1,7 @@ { "$schema": "http://json-schema.org/draft-07/schema", - "$id": "https://raw.githubusercontent.com/PlantandFoodResearch/genepal/master/nextflow_schema.json", - "title": "PlantandFoodResearch/genepal pipeline parameters", + "$id": "https://raw.githubusercontent.com/plant-food-research-open/genepal/master/nextflow_schema.json", + "title": "plant-food-research-open/genepal pipeline parameters", "description": "A Nextflow pipeline for single genome and pan-genome annotation", "type": "object", "definitions": { @@ -9,37 +9,282 @@ "title": "Input/output options", "type": "object", "fa_icon": "fas fa-terminal", - "description": "Define where the pipeline should find input data and save output data.", - "required": ["input", "outdir"], + "description": "", + "required": ["input", "protein_evidence", "outdir"], "properties": { "input": { "type": "string", "format": "file-path", - "exists": true, + "mimetype": "text/csv", "schema": "assets/schema_input.json", + "pattern": "^\\S+\\.csv$", + "description": "Target assemblies listed in a CSV sheet", + "fa_icon": "fas fa-file-csv" + }, + "protein_evidence": { + "type": "string", + "description": "Protein evidence provided as a fasta file or multiple fasta files listed in a plain txt file", + "format": "file-path", + "pattern": "^\\S+\\.(txt|fa|faa|fna|fsa|fas|fasta)(\\.gz)?$", + "fa_icon": "far fa-file-alt" + }, + "eggnogmapper_db_dir": { + "type": "string", + "description": "Eggnogmapper database directory", + "format": "directory-path" + }, + "eggnogmapper_tax_scope": { + "type": "integer", + "description": "Eggnogmapper taxonomy scopre. Eukaryota: 2759, Viridiplantae: 33090, Archaea: 2157, Bacteria: 2, root: 1", + "minimum": 1, + "default": 1 + }, + "rna_evidence": { + "type": "string", + "format": "file-path", "mimetype": "text/csv", + "schema": "assets/schema_rna.json", "pattern": "^\\S+\\.csv$", - "description": "Path to comma-separated file containing information about the samples in the experiment.", - "help_text": "You will need to create a design file with information about the samples in your experiment before running the pipeline. Use this parameter to specify its location. It has to be a comma-separated file with 3 columns, and a header row.", + "fa_icon": "fas fa-file-csv", + "description": "FASTQ/BAM samples listed in a CSV sheet" + }, + "liftoff_annotations": { + "type": "string", + "format": "file-path", + "mimetype": "text/csv", + "schema": "assets/schema_liftoff.json", + "pattern": "^\\S+\\.csv$", + "description": "Reference annotations listed in a CSV sheet", + "fa_icon": "fas fa-file-csv" + }, + "orthofinder_annotations": { + "type": "string", + "format": "file-path", + "mimetype": "text/csv", + "schema": "/assets/schema_orthofinder.json", + "pattern": "^\\S+\\.csv$", + "description": "Additional annotations for orthology listed in a CSV sheet", "fa_icon": "fas fa-file-csv" }, "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" + "description": "The output directory where the results will be saved", + "fa_icon": "fas fa-folder-open", + "default": "./results" + } + } + }, + "repeat_annotation_options": { + "title": "Repeat annotation options", + "type": "object", + "description": "", + "default": "", + "properties": { + "repeat_annotator": { + "type": "string", + "default": "repeatmodeler", + "enum": ["edta", "repeatmodeler"], + "description": "'edta' or 'repeatmodeler'" + }, + "save_annotated_te_lib": { + "type": "boolean", + "description": "Save annotated TE library or not?" + }, + "edta_is_sensitive": { + "type": "boolean", + "description": "Use '--sensitive 1' flag with EDTA or not?" + }, + "repeatmasker_save_outputs": { + "type": "boolean", + "description": "Save the repeat-masked genome or not?" + } + } + }, + "rnaseq_pre_processing_options": { + "title": "RNASeq pre-processing options", + "type": "object", + "description": "", + "default": "", + "properties": { + "skip_fastqc": { + "type": "boolean", + "description": "Skip FASTQC or not?" + }, + "skip_fastp": { + "type": "boolean", + "description": "Skip trimming by FASTQP or not?" + }, + "min_trimmed_reads": { + "type": "integer", + "default": 10000, + "description": "Exclude a sample if its reads after trimming are below this number", + "minimum": 0 }, - "email": { + "extra_fastp_args": { "type": "string", - "description": "Email address for completion summary.", - "fa_icon": "fas fa-envelope", - "help_text": "Set this parameter to your e-mail address to get a summary e-mail with details of the run sent to you when the workflow exits. If set in your user config file (`~/.nextflow/config`) then you don't need to specify this on the command line for every run.", - "pattern": "^([a-zA-Z0-9_\\-\\.]+)@([a-zA-Z0-9_\\-\\.]+)\\.([a-zA-Z]{2,5})$" + "description": "Extra FASTP arguments" }, - "multiqc_title": { + "save_trimmed": { + "type": "boolean", + "description": "Save FASTQ files after trimming or not?" + }, + "remove_ribo_rna": { + "type": "boolean", + "description": "Remove Ribosomal RNA or not?" + }, + "save_non_ribo_reads": { + "type": "boolean", + "description": "Save FASTQ files after Ribosomal RNA removal or not?" + }, + "ribo_database_manifest": { + "type": "string", + "default": "${projectDir}/assets/rrna-db-defaults.txt", + "description": "Ribosomal RNA fastas listed in a text sheet", + "format": "file-path", + "mimetype": "text/txt" + } + } + }, + "rnaseq_alignment_options": { + "title": "RNAseq alignment options", + "type": "object", + "description": "", + "default": "", + "properties": { + "star_max_intron_length": { + "type": "integer", + "default": 16000, + "minimum": 0, + "description": "Maximum intron length for STAR alignment" + }, + "star_align_extra_args": { "type": "string", - "description": "MultiQC report title. Printed as page header, used for filename if not otherwise specified.", - "fa_icon": "fas fa-file-signature" + "description": "EXTRA arguments for STAR" + }, + "star_save_outputs": { + "type": "boolean", + "description": "Save BAM files from STAR or not?" + }, + "save_cat_bam": { + "type": "boolean", + "description": "SAVE a concatenated BAM file per assembly or not?" + } + } + }, + "annotation_options": { + "title": "Annotation options", + "type": "object", + "description": "", + "default": "", + "properties": { + "braker_extra_args": { + "type": "string", + "description": "Extra arguments for BRAKER" + }, + "braker_save_outputs": { + "type": "boolean", + "description": "Save BRAKER files", + "fa_icon": "fas fa-question-circle" + }, + "liftoff_coverage": { + "type": "number", + "default": 0.9, + "minimum": 0, + "maximum": 1, + "description": "Liftoff coverage parameter" + }, + "liftoff_identity": { + "type": "number", + "default": 0.9, + "description": "Liftoff identity parameter" + }, + "allow_isoforms": { + "type": "boolean", + "default": true, + "description": "Allow multiple isoforms for gene models", + "fa_icon": "fas fa-question-circle" + }, + "enforce_full_intron_support": { + "type": "boolean", + "default": true, + "fa_icon": "fas fa-question-circle", + "description": "Require every model to have external evidence for all its introns" + }, + "filter_liftoff_by_hints": { + "type": "boolean", + "default": true, + "fa_icon": "fas fa-question-circle", + "description": "Use BRAKER hints to filter Liftoff models" + }, + "eggnogmapper_evalue": { + "type": "number", + "default": 1e-5, + "description": "Only report alignments below or equal the e-value threshold" + }, + "eggnogmapper_pident": { + "type": "integer", + "default": 35, + "description": "Only report alignments above or equal to the given percentage of identity (0-100)", + "minimum": 0, + "maximum": 100 + }, + "eggnogmapper_purge_nohits": { + "type": "boolean", + "description": "Purge transcripts which do not have a hit against eggnog" + } + } + }, + "evaluation_options": { + "title": "Evaluation options", + "type": "object", + "description": "", + "default": "", + "fa_icon": "fas fa-balance-scale-right", + "properties": { + "busco_skip": { + "type": "boolean", + "fa_icon": "fas fa-fast-forward", + "description": "Skip evaluation by BUSCO" + }, + "busco_lineage_datasets": { + "type": "string", + "pattern": "^(\\w+_odb10\\s)*\\w+_odb10$", + "fa_icon": "fas fa-tree", + "description": "BUSCO lineages as a space-separated list: 'fungi_odb10 microsporidia_odb10'", + "default": "eukaryota_odb10" + } + } + }, + "max_job_request_options": { + "title": "Max job request options", + "type": "object", + "fa_icon": "fab fa-acquisitions-incorporated", + "description": "Set the top limit for requested resources for any single job.", + "help_text": "If you are running on a smaller system, a pipeline step requesting more resources than are available may cause the Nextflow to stop the run with an error. These options allow you to cap the maximum resources requested by any single job so that the pipeline will run on your system.\n\nNote that you can not _increase_ the resources requested by any job using these options. For that you will need your own configuration file. See [the nf-core website](https://nf-co.re/usage/configuration) for details.", + "properties": { + "max_cpus": { + "type": "integer", + "description": "Maximum number of CPUs that can be requested for any single job.", + "default": 16, + "fa_icon": "fas fa-microchip", + "hidden": true + }, + "max_memory": { + "type": "string", + "description": "Maximum amount of memory that can be requested for any single job. Example: '8.GB'", + "default": "512.GB", + "fa_icon": "fas fa-memory", + "pattern": "^\\d+(\\.\\d+)?\\.?\\s*(K|M|G|T)?B$", + "hidden": true + }, + "max_time": { + "type": "string", + "description": "Maximum amount of time that can be requested for any single job. Example: '1.day'", + "default": "7.day", + "fa_icon": "far fa-clock", + "pattern": "^(\\d+\\.?\\s*(s|m|h|d|day)\\s*)+$", + "hidden": true } } }, @@ -62,7 +307,6 @@ "description": "Base directory for Institutional configs.", "default": "https://raw.githubusercontent.com/nf-core/configs/master", "hidden": true, - "help_text": "If you're running offline, Nextflow will not be able to fetch the institutional config files from the internet. If you don't need them, then this is not a problem. If you do need them, you should download the files from the repo and tell Nextflow where to find them with this parameter.", "fa_icon": "fas fa-users-cog" }, "config_profile_name": { @@ -91,41 +335,6 @@ } } }, - "max_job_request_options": { - "title": "Max job request options", - "type": "object", - "fa_icon": "fab fa-acquisitions-incorporated", - "description": "Set the top limit for requested resources for any single job.", - "help_text": "If you are running on a smaller system, a pipeline step requesting more resources than are available may cause the Nextflow to stop the run with an error. These options allow you to cap the maximum resources requested by any single job so that the pipeline will run on your system.\n\nNote that you can not _increase_ the resources requested by any job using these options. For that you will need your own configuration file. See [the nf-core website](https://nf-co.re/usage/configuration) for details.", - "properties": { - "max_cpus": { - "type": "integer", - "description": "Maximum number of CPUs that can be requested for any single job.", - "default": 16, - "fa_icon": "fas fa-microchip", - "hidden": true, - "help_text": "Use to set an upper-limit for the CPU requirement for each process. Should be an integer e.g. `--max_cpus 1`" - }, - "max_memory": { - "type": "string", - "description": "Maximum amount of memory that can be requested for any single job.", - "default": "128.GB", - "fa_icon": "fas fa-memory", - "pattern": "^\\d+(\\.\\d+)?\\.?\\s*(K|M|G|T)?B$", - "hidden": true, - "help_text": "Use to set an upper-limit for the memory requirement for each process. Should be a string in the format integer-unit e.g. `--max_memory '8.GB'`" - }, - "max_time": { - "type": "string", - "description": "Maximum amount of time that can be requested for any single job.", - "default": "240.h", - "fa_icon": "far fa-clock", - "pattern": "^(\\d+\\.?\\s*(s|m|h|d|day)\\s*)+$", - "hidden": true, - "help_text": "Use to set an upper-limit for the time requirement for each process. Should be a string in the format integer-unit e.g. `--max_time '2.h'`" - } - } - }, "generic_options": { "title": "Generic options", "type": "object", @@ -149,7 +358,6 @@ "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 @@ -159,7 +367,6 @@ "description": "Email address for completion summary, only when pipeline fails.", "fa_icon": "fas fa-exclamation-triangle", "pattern": "^([a-zA-Z0-9_\\-\\.]+)@([a-zA-Z0-9_\\-\\.]+)\\.([a-zA-Z]{2,5})$", - "help_text": "An email address to send a summary email to when the pipeline is completed - ONLY sent if the pipeline does not exit successfully.", "hidden": true }, "plaintext_email": { @@ -168,45 +375,24 @@ "fa_icon": "fas fa-remove-format", "hidden": true }, - "max_multiqc_email_size": { - "type": "string", - "description": "File size limit when attaching MultiQC reports to summary emails.", - "pattern": "^\\d+(\\.\\d+)?\\.?\\s*(K|M|G|T)?B$", - "default": "25.MB", - "fa_icon": "fas fa-file-upload", - "hidden": true - }, "monochrome_logs": { "type": "boolean", "description": "Do not use coloured log outputs.", "fa_icon": "fas fa-palette", "hidden": true }, + "monochromeLogs": { + "type": "boolean", + "fa_icon": "fas fa-palette", + "description": "Do not use coloured log outputs.", + "hidden": true + }, "hook_url": { "type": "string", "description": "Incoming hook URL for messaging service", "fa_icon": "fas fa-people-group", - "help_text": "Incoming hook URL for messaging service. Currently, MS Teams and Slack are supported.", - "hidden": true - }, - "multiqc_config": { - "type": "string", - "format": "file-path", - "description": "Custom config file to supply to MultiQC.", - "fa_icon": "fas fa-cog", - "hidden": true - }, - "multiqc_logo": { - "type": "string", - "description": "Custom logo file to supply to MultiQC. File name must also be set in the MultiQC config file", - "fa_icon": "fas fa-image", "hidden": true }, - "multiqc_methods_description": { - "type": "string", - "description": "Custom MultiQC yaml file containing HTML including a methods description.", - "fa_icon": "fas fa-cog" - }, "validate_params": { "type": "boolean", "description": "Boolean whether to validate parameters against the schema at runtime", @@ -218,28 +404,18 @@ "type": "boolean", "fa_icon": "far fa-eye-slash", "description": "Show all params when using `--help`", - "hidden": true, - "help_text": "By default, parameters set as _hidden_ in the schema are not shown on the command line when a user runs with `--help`. Specifying this option will tell the pipeline to show all parameters." + "hidden": true }, "validationFailUnrecognisedParams": { "type": "boolean", "fa_icon": "far fa-check-circle", "description": "Validation of parameters fails when an unrecognised parameter is found.", - "hidden": true, - "help_text": "By default, when an unrecognised parameter is found, it returns a warinig." + "hidden": true }, "validationLenientMode": { "type": "boolean", "fa_icon": "far fa-check-circle", "description": "Validation of parameters in lenient more.", - "hidden": true, - "help_text": "Allows string values that are parseable as numbers or booleans. For further information see [JSONSchema docs](https://github.com/everit-org/json-schema#lenient-mode)." - }, - "pipelines_testdata_base_path": { - "type": "string", - "fa_icon": "far fa-check-circle", - "description": "Base URL or local path to location of pipeline test dataset files", - "default": "https://raw.githubusercontent.com/nf-core/test-datasets/", "hidden": true } } @@ -250,11 +426,26 @@ "$ref": "#/definitions/input_output_options" }, { - "$ref": "#/definitions/institutional_config_options" + "$ref": "#/definitions/repeat_annotation_options" + }, + { + "$ref": "#/definitions/rnaseq_pre_processing_options" + }, + { + "$ref": "#/definitions/rnaseq_alignment_options" + }, + { + "$ref": "#/definitions/annotation_options" + }, + { + "$ref": "#/definitions/evaluation_options" }, { "$ref": "#/definitions/max_job_request_options" }, + { + "$ref": "#/definitions/institutional_config_options" + }, { "$ref": "#/definitions/generic_options" } diff --git a/pfr/params.json b/pfr/params.json new file mode 100644 index 0000000..e547f98 --- /dev/null +++ b/pfr/params.json @@ -0,0 +1,8 @@ +{ + "input": "/workspace/genepal/test_data/assemblysheet.csv", + "protein_evidence": "/workspace/genepal/test_data/external-protein-fastas.txt", + "eggnogmapper_db_dir": "/workspace/ComparativeDataSources/emapperdb/5.0.2", + "eggnogmapper_tax_scope": 33090, + "rna_evidence": "/workspace/genepal/test_data/fastqsheet.csv", + "liftoff_annotations": "/workspace/genepal/test_data/liftoffannotations.csv" +} diff --git a/pfr/profile.config b/pfr/profile.config new file mode 100644 index 0000000..ce04c6f --- /dev/null +++ b/pfr/profile.config @@ -0,0 +1,17 @@ +profiles { + pfr { + process { + executor = 'slurm' + } + + apptainer { + envWhitelist = "APPTAINER_BINDPATH,APPTAINER_BIND" + cacheDir = "/workspace/genepal/singularity" + } + } +} + +params { + config_profile_name = 'Plant&Food profile' + config_profile_description = 'Plant&Food profile using SLURM in combination with Apptainer' +} diff --git a/pfr_genepal b/pfr_genepal new file mode 100644 index 0000000..3da5a74 --- /dev/null +++ b/pfr_genepal @@ -0,0 +1,49 @@ +#!/bin/bash -e + + +#SBATCH --job-name GENEPAL +#SBATCH --time=14-00:00:00 +#SBATCH --nodes=1 +#SBATCH --ntasks=1 +#SBATCH --cpus-per-task=1 +#SBATCH --output pfr_genepal.stdout +#SBATCH --error pfr_genepal.stderr +#SBATCH --mem=4G + +full_test_flag=0 + +# Parse command line options +while getopts "t" opt; do + case ${opt} in + t ) + full_test_flag=1 + ;; + \? ) + echo "Invalid option: $OPTARG" 1>&2 + exit 1 + ;; + esac +done +shift $((OPTIND -1)) + +ml unload perl +ml apptainer/1.1 +ml nextflow/23.04.4 + +export TMPDIR="/workspace/$USER/tmp" +export APPTAINER_BINDPATH="$APPTAINER_BINDPATH,$TMPDIR:$TMPDIR,$TMPDIR:/tmp" + +if [ $full_test_flag -eq 1 ]; then + nextflow \ + main.nf \ + -c pfr/profile.config \ + -profile pfr,apptainer,test_full \ + -resume +else + nextflow \ + main.nf \ + -c pfr/profile.config \ + -profile pfr,apptainer \ + -params-file pfr/params.json \ + -resume +fi diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..5611062 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,15 @@ +# Config file for Python. Mostly used to configure linting of bin/*.py with Ruff. +# Should be kept the same as nf-core/tools to avoid fighting with template synchronisation. +[tool.ruff] +line-length = 120 +target-version = "py38" +cache-dir = "~/.cache/ruff" + +[tool.ruff.lint] +select = ["I", "E1", "E4", "E7", "E9", "F", "UP", "N"] + +[tool.ruff.lint.isort] +known-first-party = ["nf_core"] + +[tool.ruff.lint.per-file-ignores] +"__init__.py" = ["E402", "F401"] diff --git a/subworkflows/gallvp/fasta_edta_lai/main.nf b/subworkflows/gallvp/fasta_edta_lai/main.nf new file mode 100644 index 0000000..1d4dd85 --- /dev/null +++ b/subworkflows/gallvp/fasta_edta_lai/main.nf @@ -0,0 +1,170 @@ +include { CUSTOM_SHORTENFASTAIDS } from '../../../modules/gallvp/custom/shortenfastaids/main' +include { EDTA_EDTA } from '../../../modules/gallvp/edta/edta/main' +include { LTRRETRIEVER_LAI } from '../../../modules/gallvp/ltrretriever/lai/main' +include { CUSTOM_RESTOREGFFIDS } from '../../../modules/gallvp/custom/restoregffids/main' + +workflow FASTA_EDTA_LAI { + + take: + ch_fasta // channel: [ val(meta), fasta ] + ch_monoploid_seqs // channel: [ val(meta2), txt ]; Optional: Set to [] if not needed + // val(meta) from ch_fasta and val(meta2) from ch_monoploid_seqs are + // only required to have the same `id` + skip_lai // val(true|false) + + main: + ch_versions = Channel.empty() + + // Prapre input channels + ch_monoploid_seqs_plain = ( ch_monoploid_seqs ?: Channel.empty() ) + | filter { meta2, seqs -> seqs } + // Cater to channel: [ meta2, [] ] + | map { meta2, seqs -> [ meta2.id, seqs ] } + + // MOUDLE: CUSTOM_SHORTENFASTAIDS + CUSTOM_SHORTENFASTAIDS ( ch_fasta ) + + ch_short_ids_tsv = CUSTOM_SHORTENFASTAIDS.out.short_ids_tsv + ch_shortenfastaids_branch = ch_short_ids_tsv + | branch { meta, tsv -> + change: ! tsv.text.contains('IDs have acceptable length and character') + nonchange: tsv.text.contains('IDs have acceptable length and character') + } + + ch_short_ids_fasta = ch_shortenfastaids_branch.nonchange + | join( + ch_fasta + ) + | map { meta, tsv, fasta -> [ meta, fasta ] } + | mix( + ch_shortenfastaids_branch.change + | join( + CUSTOM_SHORTENFASTAIDS.out.short_ids_fasta + ) + | map { meta, tsv, fasta -> [ meta, fasta ] } + ) + + ch_versions = ch_versions.mix(CUSTOM_SHORTENFASTAIDS.out.versions.first()) + + // collectFile: Map monoploid seqs to short IDs + ch_short_monoploid_seqs = ch_short_ids_tsv + | map { meta, tsv -> [ meta.id, tsv ] } + | join(ch_monoploid_seqs_plain) + | map { id, tsv, seqs -> + map_monoploid_seqs_to_new_ids(id, tsv, seqs) + } + | collectFile(newLine:true) + | map { seqs -> + def id = seqs.name.split('.mapped.monoploid.seqs.txt')[0] + + [ id, seqs ] + } + | join( + ch_short_ids_tsv + | map { meta, tsv -> [ meta.id, meta, tsv ] } + ) + | map { id, seqs, meta, tsv -> [ meta, seqs ] } + + // MODULE: EDTA_EDTA + EDTA_EDTA( + ch_short_ids_fasta, + [], + [], + [], + [] + ) + + ch_pass_list = EDTA_EDTA.out.pass_list + ch_out_file = EDTA_EDTA.out.out_file + ch_pass_out = ch_pass_list.join(ch_out_file) + ch_te_lib_fasta = EDTA_EDTA.out.te_lib_fasta + ch_te_anno_gff3 = EDTA_EDTA.out.te_anno_gff3 + ch_versions = ch_versions.mix(EDTA_EDTA.out.versions.first()) + + ch_short_ids_fasta_mono = ch_short_ids_fasta + | join( + ch_short_monoploid_seqs, + by:0, + remainder: true + ) + // Danger! This partial join can fail + | filter { meta, fasta, seqs -> fasta } + // This filter safeguards against fail on upstream + // process failure: https://github.com/nextflow-io/nextflow/issues/5043 + // fasta may come from upstream processes + // seqs also comes from upstream processes, it is optional + // and may not be present for some of the combinations + | map { meta, fasta, seqs -> [ meta, fasta, seqs ?: [] ] } + + ch_lai_inputs = skip_lai + ? Channel.empty() + : ch_short_ids_fasta_mono + | join( + ch_pass_out + ) + | map { meta, fasta, seqs, pass, out -> + [ meta, fasta, pass, out, seqs ] + } + LTRRETRIEVER_LAI( + ch_lai_inputs.map { meta, fasta, pass, out, seqs -> [ meta, fasta ] }, + ch_lai_inputs.map { meta, fasta, pass, out, seqs -> pass }, + ch_lai_inputs.map { meta, fasta, pass, out, seqs -> out }, + ch_lai_inputs.map { meta, fasta, pass, out, seqs -> seqs } + ) + + ch_lai_log = LTRRETRIEVER_LAI.out.log + ch_lai_out = LTRRETRIEVER_LAI.out.lai_out + ch_versions = ch_versions.mix(LTRRETRIEVER_LAI.out.versions.first()) + + // MODULE: CUSTOM_RESTOREGFFIDS + ch_gff_tsv_branch = ch_te_anno_gff3.join(ch_short_ids_tsv) + | branch { meta, gff, tsv -> + change: ! tsv.text.contains('IDs have acceptable length and character') + nochange: tsv.text.contains('IDs have acceptable length and character') + } + + CUSTOM_RESTOREGFFIDS ( + ch_gff_tsv_branch.change.map { meta, gff, tsv -> [ meta, gff ] }, + ch_gff_tsv_branch.change.map { meta, gff, tsv -> tsv } + ) + + ch_restored_gff = ch_gff_tsv_branch.nochange + | map { meta, gff, tsv -> [ meta, gff ] } + | mix(CUSTOM_RESTOREGFFIDS.out.restored_ids_gff3) + + ch_versions = ch_versions.mix(CUSTOM_RESTOREGFFIDS.out.versions.first()) + + emit: + te_lib_fasta = ch_te_lib_fasta // channel: [ val(meta), fasta ] + te_anno_gff3 = ch_restored_gff // channel: [ val(meta), gff ] + lai_log = ch_lai_log // channel: [ val(meta), log ] + lai_out = ch_lai_out // channel: [ val(meta), out ] + versions = ch_versions // channel: [ versions.yml ] +} + +def map_monoploid_seqs_to_new_ids(id, short_ids_tsv, monoploid_seqs) { + + def short_ids_head = short_ids_tsv.text.tokenize('\n')[0] + + if (short_ids_head == "IDs have acceptable length and character. No change required.") { + return [ "${id}.mapped.monoploid.seqs.txt" ] + monoploid_seqs.text.tokenize('\n') + } + + def orig_to_new_ids = [:] + short_ids_tsv.text.eachLine { line -> + def (original_id, renamed_id) = line.tokenize('\t') + orig_to_new_ids[original_id] = renamed_id + } + + def mapped_ids = [] + monoploid_seqs.text.eachLine { original_id -> + if (!orig_to_new_ids[original_id]) { + error "Faild to find $original_id in ${short_ids_tsv}" + + "\nThe short_ids_tsv file is malformed!" + } + + mapped_ids.add(orig_to_new_ids[original_id]) + } + + return [ "${id}.mapped.monoploid.seqs.txt" ] + mapped_ids +} diff --git a/subworkflows/gallvp/fasta_edta_lai/meta.yml b/subworkflows/gallvp/fasta_edta_lai/meta.yml new file mode 100644 index 0000000..c356ce7 --- /dev/null +++ b/subworkflows/gallvp/fasta_edta_lai/meta.yml @@ -0,0 +1,69 @@ +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/subworkflows/yaml-schema.json +name: "fasta_edta_lai" +description: | + Performs extensive de-novo transposable element annotation with EDTA and optionally estimates repeat-space completeness with LAI +keywords: + - genomics + - genome + - annotation + - repeat + - transposons + - stats + - qc +components: + - edta/edta + - custom/restoregffids + - ltrretriever/lai + - custom/shortenfastaids +input: + - ch_fasta: + type: file + description: | + Channel for the assembly fasta file + Structure: [ val(meta), path(fasta) ] + pattern: "*.{fsa/fa/fasta}" + - ch_monoploid_seqs: + type: file + description: | + Channel for providing a list of monoploid sequences + for correct estimation of LAI for polyploid genomes. + This parameter is useful when all the haplotypes are + stored in a single fasta file. + Structure: [ val(meta), path(txt) ] + pattern: "*.txt" + - skip_lai: + type: boolean + description: | + Skip LAI estimation + Structure: [ val(boolean) ] +output: + - te_lib_fasta: + type: file + description: A non-redundant TE library in fasta format + pattern: "*.EDTA.TElib.fa" + - te_anno_gff3: + type: file + description: A gff3 file containing both structurally intact and fragmented TE annotations + pattern: "*.EDTA.TEanno.gff3" + - lai_log: + type: file + description: | + Log from LAI + Structure: [ val(meta), path(log) ] + pattern: "*.LAI.log" + - lai_out: + type: file + description: | + LAI output + Structure: [ val(meta), path(out) ] + pattern: "*.LAI.out" + - versions: + type: file + description: | + File containing software versions + Structure: [ path(versions.yml) ] + pattern: "versions.yml" +authors: + - "@GallVp" +maintainers: + - "@GallVp" diff --git a/subworkflows/gallvp/fasta_edta_lai/tests/main.nf.test b/subworkflows/gallvp/fasta_edta_lai/tests/main.nf.test new file mode 100644 index 0000000..0b56ee5 --- /dev/null +++ b/subworkflows/gallvp/fasta_edta_lai/tests/main.nf.test @@ -0,0 +1,79 @@ +nextflow_workflow { + + name "Test Workflow FASTA_EDTA_LAI" + script "../main.nf" + workflow "FASTA_EDTA_LAI" + config "./nextflow.config" + + tag "subworkflows" + tag "subworkflows_gallvp" + tag "subworkflows/fasta_edta_lai" + tag "fasta_edta_lai" + tag "modules/nf-core/gunzip" + tag "custom/shortenfastaids" + tag "edta/edta" + tag "ltrretriever/lai" + tag "custom/restoregffids" + + setup { + run("GUNZIP") { + script "../../../../modules/nf-core/gunzip" + + process { + """ + input[0] = [ + [ id:'test' ], + file(params.modules_testdata_base_path + 'genomics/eukaryotes/actinidia_chinensis/genome/chr1/genome.fasta.gz', checkIfExists: true) + ] + """ + } + } + } + + test("actinidia_chinensis-genome_1_fasta_gz") { + + when { + workflow { + """ + input[0] = GUNZIP.out.gunzip + input[1] = [] + input[2] = false + """ + } + } + + then { + assertAll( + { assert workflow.success }, + { assert file(workflow.out.te_anno_gff3[0][1]).text.contains('Copia_LTR_retrotransposon') }, + { assert file(workflow.out.lai_log[0][1]).text.contains('Calculate LAI:') }, + { assert file(workflow.out.lai_log[0][1]).text.contains('Done!') }, + { assert Math.abs(Float.parseFloat(path(workflow.out.lai_out[0][1]).text.split("\n")[1].split("\t")[6]) - 31.87) <= 2.0 }, + { assert file(workflow.out.te_lib_fasta[0][1]).text.contains('#LTR/Copia') }, + { assert snapshot(workflow.out.versions).match() } + ) + } + } + + test("actinidia_chinensis-genome_1_fasta_gz-stub") { + + options '-stub' + + when { + workflow { + """ + input[0] = GUNZIP.out.gunzip + input[1] = [] + input[2] = false + """ + } + } + + then { + assertAll( + { assert workflow.success }, + { assert snapshot(workflow.out).match() } + ) + } + } +} \ No newline at end of file diff --git a/subworkflows/gallvp/fasta_edta_lai/tests/main.nf.test.snap b/subworkflows/gallvp/fasta_edta_lai/tests/main.nf.test.snap new file mode 100644 index 0000000..532ddd5 --- /dev/null +++ b/subworkflows/gallvp/fasta_edta_lai/tests/main.nf.test.snap @@ -0,0 +1,101 @@ +{ + "actinidia_chinensis-genome_1_fasta_gz-stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.EDTA.TElib.fa:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test" + }, + "test.EDTA.TEanno.gff3:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + [ + { + "id": "test" + }, + "test.LAI.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + [ + { + "id": "test" + }, + "test.LAI.out:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "4": [ + "versions.yml:md5,0d4bc49e94acb8995ca552d4e666e3ce", + "versions.yml:md5,65666e975bdfd71978843ca963e84d0c", + "versions.yml:md5,754bb19f86be761d90c002a0af2faf1c" + ], + "lai_log": [ + [ + { + "id": "test" + }, + "test.LAI.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "lai_out": [ + [ + { + "id": "test" + }, + "test.LAI.out:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "te_anno_gff3": [ + [ + { + "id": "test" + }, + "test.EDTA.TEanno.gff3:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "te_lib_fasta": [ + [ + { + "id": "test" + }, + "test.EDTA.TElib.fa:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,0d4bc49e94acb8995ca552d4e666e3ce", + "versions.yml:md5,65666e975bdfd71978843ca963e84d0c", + "versions.yml:md5,754bb19f86be761d90c002a0af2faf1c" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-04T14:00:09.252745" + }, + "actinidia_chinensis-genome_1_fasta_gz": { + "content": [ + [ + "versions.yml:md5,0d4bc49e94acb8995ca552d4e666e3ce", + "versions.yml:md5,65666e975bdfd71978843ca963e84d0c", + "versions.yml:md5,754bb19f86be761d90c002a0af2faf1c" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-05-10T13:22:28.063183" + } +} \ No newline at end of file diff --git a/subworkflows/gallvp/fasta_edta_lai/tests/nextflow.config b/subworkflows/gallvp/fasta_edta_lai/tests/nextflow.config new file mode 100644 index 0000000..1fa6315 --- /dev/null +++ b/subworkflows/gallvp/fasta_edta_lai/tests/nextflow.config @@ -0,0 +1,5 @@ +process { + withName: EDTA_EDTA { + ext.args = '--anno 1' + } +} diff --git a/subworkflows/gallvp/fasta_gxf_busco_plot/main.nf b/subworkflows/gallvp/fasta_gxf_busco_plot/main.nf new file mode 100644 index 0000000..3e8ad28 --- /dev/null +++ b/subworkflows/gallvp/fasta_gxf_busco_plot/main.nf @@ -0,0 +1,169 @@ +include { BUSCO_BUSCO as BUSCO_ASSEMBLY } from '../../../modules/gallvp/busco/busco/main' +include { BUSCO_GENERATEPLOT as PLOT_ASSEMBLY } from '../../../modules/gallvp/busco/generateplot/main' +include { GFFREAD as EXTRACT_PROTEINS } from '../../../modules/gallvp/gffread/main' +include { BUSCO_BUSCO as BUSCO_ANNOTATION } from '../../../modules/gallvp/busco/busco/main' +include { BUSCO_GENERATEPLOT as PLOT_ANNOTATION } from '../../../modules/gallvp/busco/generateplot/main' + +workflow FASTA_GXF_BUSCO_PLOT { + + take: + ch_fasta // channel: [ val(meta), fasta ] + ch_gxf // channel: [ val(meta2), gxf ]; gxf ~ gff | gff3 | gtf + // + // Meta and meta2 should have same id + + val_mode // val(mode); BUSCO mode to apply to ch_fasta + // - genome, for genome assemblies (DNA) + // - transcriptome, for transcriptome assemblies (DNA) + // - proteins, for annotated gene sets (protein) + // + // If mode is genome, annotations from ch_gxf are evaluated with + // mode proteins, otherwise, evaluation of the annotations is skipped + // + val_lineages // [ val(lineage) ] + val_busco_lineages_path // val(path); Optional; Set to [] if not needed + val_busco_config // val(path); Optional; Set to [] if not needed + + main: + ch_versions = Channel.empty() + ch_db_path = val_busco_lineages_path + ? Channel.of(file(val_busco_lineages_path, checkIfExists: true)) + : Channel.of(null) + ch_config_path = val_busco_config + ? Channel.of(file(val_busco_config, checkIfExists: true)) + : Channel.of(null) + + // MODULE: BUSCO_BUSCO as BUSCO_ASSEMBLY + ch_busco_assembly_inputs = ch_fasta + | combine( + Channel.of(val_mode) + ) + | combine( + Channel.fromList(val_lineages) + ) + | map { meta, fasta, mode, lineage -> + [ + meta + [ mode:mode, lineage:lineage ], + fasta, mode, lineage + ] + } + | combine( + ch_db_path + ) + | combine( + ch_config_path + ) + + BUSCO_ASSEMBLY( + ch_busco_assembly_inputs.map { meta, fasta, mode, lineage, db, config -> [ meta, fasta ] }, + ch_busco_assembly_inputs.map { meta, fasta, mode, lineage, db, config -> mode }, + ch_busco_assembly_inputs.map { meta, fasta, mode, lineage, db, config -> lineage }, + ch_busco_assembly_inputs.map { meta, fasta, mode, lineage, db, config -> db ?: [] }, + ch_busco_assembly_inputs.map { meta, fasta, mode, lineage, db, config -> config ?: [] } + ) + + ch_assembly_batch_summary = BUSCO_ASSEMBLY.out.batch_summary + ch_assembly_short_summaries_txt = BUSCO_ASSEMBLY.out.short_summaries_txt + ch_assembly_short_summaries_json = BUSCO_ASSEMBLY.out.short_summaries_json + ch_versions = ch_versions.mix(BUSCO_ASSEMBLY.out.versions.first()) + + // MODULE: BUSCO_GENERATEPLOT as PLOT_ASSEMBLY + ch_assembly_plot_inputs = ch_assembly_short_summaries_txt + | map { meta, txt -> + def lineage_name = meta.lineage.split('_odb')[0] + [ + "short_summary.specific.${meta.lineage}.${meta.id}_${lineage_name}.txt", + txt.text + ] + } + | collectFile + | collect + + PLOT_ASSEMBLY( ch_assembly_plot_inputs ) + + ch_assembly_png = PLOT_ASSEMBLY.out.png + ch_versions = ch_versions.mix(PLOT_ASSEMBLY.out.versions) + + // MODULE: GFFREAD as EXTRACT_PROTEINS + ch_gffread_inputs = ! ( val_mode == 'geno' || val_mode == 'genome' ) + ? Channel.empty() + : ch_fasta + | map { meta, fasta -> [ meta.id, meta, fasta ] } + | join( + ch_gxf.map { meta2, gxf -> [ meta2.id, gxf ] } + // Join with matching annotation + // to allow one annotations per fasta + ) + | map { id, meta, fasta, gxf -> [ meta, gxf, fasta ] } + EXTRACT_PROTEINS( + ch_gffread_inputs.map { meta, gxf, fasta -> [ meta, gxf ] }, + ch_gffread_inputs.map { meta, gxf, fasta -> fasta } + ) + + ch_proteins = EXTRACT_PROTEINS.out.gffread_fasta + ch_versions = ch_versions.mix(EXTRACT_PROTEINS.out.versions.first()) + + // MODULE: BUSCO_BUSCO as BUSCO_ANNOTATION + ch_busco_annotation_inputs = ch_proteins + | combine( + Channel.of('proteins') + ) + | combine( + Channel.fromList(val_lineages) + ) + | map { meta, fasta, mode, lineage -> + [ + meta + [ mode:mode, lineage:lineage ], + fasta, mode, lineage + ] + } + | combine( + ch_db_path + ) + | combine( + ch_config_path + ) + + BUSCO_ANNOTATION( + ch_busco_annotation_inputs.map { meta, fasta, mode, lineage, db, config -> [ meta, fasta ] }, + ch_busco_annotation_inputs.map { meta, fasta, mode, lineage, db, config -> mode }, + ch_busco_annotation_inputs.map { meta, fasta, mode, lineage, db, config -> lineage }, + ch_busco_annotation_inputs.map { meta, fasta, mode, lineage, db, config -> db ?: [] }, + ch_busco_annotation_inputs.map { meta, fasta, mode, lineage, db, config -> config ?: [] } + ) + + ch_annotation_batch_summary = BUSCO_ANNOTATION.out.batch_summary + ch_annotation_short_summaries_txt = BUSCO_ANNOTATION.out.short_summaries_txt + ch_annotation_short_summaries_json = BUSCO_ANNOTATION.out.short_summaries_json + ch_versions = ch_versions.mix(BUSCO_ANNOTATION.out.versions.first()) + + // MODULE: BUSCO_GENERATEPLOT as PLOT_ANNOTATION + ch_annotation_plot_inputs = ch_annotation_short_summaries_txt + | map { meta, txt -> + def lineage_name = meta.lineage.split('_odb')[0] + [ + "short_summary.specific.${meta.lineage}.${meta.id}_${lineage_name}.txt", + txt.text + ] + } + | collectFile + | collect + + PLOT_ANNOTATION( ch_annotation_plot_inputs ) + + ch_annotation_png = PLOT_ANNOTATION.out.png + ch_versions = ch_versions.mix(PLOT_ANNOTATION.out.versions) + + + emit: + assembly_batch_summary = ch_assembly_batch_summary // channel: [ meta3, txt ]; meta3 ~ meta + [ val(mode), val(lineage) ] + assembly_short_summaries_txt = ch_assembly_short_summaries_txt // channel: [ meta3, txt ] + assembly_short_summaries_json = ch_assembly_short_summaries_json // channel: [ meta3, json ] + assembly_png = ch_assembly_png // channel: [ png ] + annotation_batch_summary = ch_annotation_batch_summary // channel: [ meta3, txt ] + annotation_short_summaries_txt = ch_annotation_short_summaries_txt // channel: [ meta3, txt ] + annotation_short_summaries_json = ch_annotation_short_summaries_json // channel: [ meta3, json ] + annotation_png = ch_annotation_png // channel: [ png ] + versions = ch_versions // channel: [ versions.yml ] +} + diff --git a/subworkflows/gallvp/fasta_gxf_busco_plot/meta.yml b/subworkflows/gallvp/fasta_gxf_busco_plot/meta.yml new file mode 100644 index 0000000..9226357 --- /dev/null +++ b/subworkflows/gallvp/fasta_gxf_busco_plot/meta.yml @@ -0,0 +1,106 @@ +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/subworkflows/yaml-schema.json +name: "fasta_gxf_busco_plot" +description: | + Runs BUSCO for input assemblies and their annotations in GFF/GFF3/GTF format, and creates summary plots using `BUSCO/generate_plot.py` script +keywords: + - genome + - annotation + - busco + - plot +components: + - busco/busco + - busco/generateplot + - gffread +input: + - ch_fasta: + type: file + description: | + Channel containing FASTA files + Structure:[ val(meta), fasta ] + pattern: "*.{fa,faa,fsa,fas,fasta}(.gz)?" + - ch_gxf: + type: file + description: | + Channel containing GFF/GFF3/GTF files + Structure:[ val(meta2), gxf ] + pattern: "*.{gff,gff3,gtf}" + - val_mode: + type: string + description: | + String containing BUSCO mode to apply to ch_fasta files + Structure:val(mode) + - val_lineages: + type: array + description: | + Array of strings representing BUSCO lineage datasets + Structure:[ val(lineage) ] + - val_busco_lineages_path: + type: path + description: | + Path where BUSCO lineages are located or downloaded if not already there. If this input is `[]`, + BUSCO will download the datasets in the task work directory + Structure:val(busco_lineages_path) + - val_busco_config: + type: path + description: | + Path to BUSCO config. It is optional and can be set to `[]` + Structure:val(busco_config) +output: + - assembly_batch_summary: + type: file + description: | + Channel containing BUSCO batch summaries corresponding to fasta files + Structure: [ val(meta), txt ] + pattern: "*.txt" + - assembly_short_summaries_txt: + type: file + description: | + Channel containing BUSCO short summaries corresponding to fasta files + Structure: [ val(meta), txt ] + pattern: "*.txt" + - assembly_short_summaries_json: + type: file + description: | + Channel containing BUSCO short summaries corresponding to fasta files + Structure: [ val(meta), json ] + pattern: "*.json" + - assembly_png: + type: file + description: | + Channel containing summary plot for assemblies + Structure: png + pattern: "*.png" + - annotation_batch_summary: + type: file + description: | + Channel containing BUSCO batch summaries corresponding to annotation files + Structure: [ val(meta), txt ] + pattern: "*.txt" + - annotation_short_summaries_txt: + type: file + description: | + Channel containing BUSCO short summaries corresponding to annotation files + Structure: [ val(meta), txt ] + pattern: "*.txt" + - annotation_short_summaries_json: + type: file + description: | + Channel containing BUSCO short summaries corresponding to annotation files + Structure: [ val(meta), json ] + pattern: "*.json" + - annotation_png: + type: file + description: | + Channel containing summary plot for annotations + Structure: png + pattern: "*.png" + - versions: + type: file + description: | + File containing software versions + Structure: [ path(versions.yml) ] + pattern: "versions.yml" +authors: + - "@GallVp" +maintainers: + - "@GallVp" diff --git a/subworkflows/gallvp/fasta_gxf_busco_plot/tests/main.nf.test b/subworkflows/gallvp/fasta_gxf_busco_plot/tests/main.nf.test new file mode 100644 index 0000000..783be86 --- /dev/null +++ b/subworkflows/gallvp/fasta_gxf_busco_plot/tests/main.nf.test @@ -0,0 +1,104 @@ +nextflow_workflow { + + name "Test Subworkflow FASTA_GXF_BUSCO_PLOT" + script "../main.nf" + workflow "FASTA_GXF_BUSCO_PLOT" + config './nextflow.config' + + tag "subworkflows" + tag "subworkflows_gallvp" + tag "subworkflows/fasta_gxf_busco_plot" + tag "busco" + tag "busco/busco" + tag "busco/generateplot" + tag "gffread" + + test("candidatus_portiera_aleyrodidarum - bacteroides_fragilis - genome") { + + when { + workflow { + """ + input[0] = Channel.of( + [ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/prokaryotes/candidatus_portiera_aleyrodidarum/genome/genome.fasta', checkIfExists: true) + ], + [ + [ id:'test2' ], // meta map + file(params.modules_testdata_base_path + 'genomics/prokaryotes/bacteroides_fragilis/genome/genome.fna.gz', checkIfExists: true) + ] + ) + input[1] = Channel.of( + [ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/prokaryotes/candidatus_portiera_aleyrodidarum/genome/gff/test1.gff', checkIfExists: true) + ] + ) + input[2] = 'genome' + input[3] = [ 'bacteria_odb10', 'archaea_odb10' ] + input[4] = [] + input[5] = [] + """ + } + } + + then { + assertAll( + { assert workflow.success}, + { assert snapshot( + workflow.out.assembly_batch_summary, + workflow.out.annotation_batch_summary, + workflow.out.versions, + ).match() + }, + + { assert workflow.out.assembly_png != null }, + { assert workflow.out.annotation_png != null }, + + { assert workflow.out.assembly_short_summaries_json != null }, + { assert workflow.out.assembly_short_summaries_txt != null }, + { assert workflow.out.annotation_short_summaries_json != null }, + { assert workflow.out.annotation_short_summaries_txt != null } + ) + } + } + + test("candidatus_portiera_aleyrodidarum - bacteroides_fragilis - genome - stub") { + + options '-stub' + + when { + workflow { + """ + input[0] = Channel.of( + [ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/prokaryotes/candidatus_portiera_aleyrodidarum/genome/genome.fasta', checkIfExists: true) + ], + [ + [ id:'test2' ], // meta map + file(params.modules_testdata_base_path + 'genomics/prokaryotes/bacteroides_fragilis/genome/genome.fna.gz', checkIfExists: true) + ] + ) + input[1] = Channel.of( + [ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/prokaryotes/candidatus_portiera_aleyrodidarum/genome/gff/test1.gff', checkIfExists: true) + ] + ) + input[2] = 'genome' + input[3] = [ 'bacteria_odb10', 'archaea_odb10' ] + input[4] = [] + input[5] = [] + """ + } + } + + then { + assertAll( + { assert workflow.success}, + { assert snapshot(workflow.out).match()} + ) + } + } +} diff --git a/subworkflows/gallvp/fasta_gxf_busco_plot/tests/main.nf.test.snap b/subworkflows/gallvp/fasta_gxf_busco_plot/tests/main.nf.test.snap new file mode 100644 index 0000000..118ad7e --- /dev/null +++ b/subworkflows/gallvp/fasta_gxf_busco_plot/tests/main.nf.test.snap @@ -0,0 +1,231 @@ +{ + "candidatus_portiera_aleyrodidarum - bacteroides_fragilis - genome - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "mode": "genome", + "lineage": "archaea_odb10" + }, + "test-archaea_odb10-busco.batch_summary.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ], + [ + { + "id": "test", + "mode": "genome", + "lineage": "bacteria_odb10" + }, + "test-bacteria_odb10-busco.batch_summary.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ], + [ + { + "id": "test2", + "mode": "genome", + "lineage": "archaea_odb10" + }, + "test2-archaea_odb10-busco.batch_summary.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ], + [ + { + "id": "test2", + "mode": "genome", + "lineage": "bacteria_odb10" + }, + "test2-bacteria_odb10-busco.batch_summary.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + + ], + "2": [ + + ], + "3": [ + + ], + "4": [ + [ + { + "id": "test", + "mode": "proteins", + "lineage": "archaea_odb10" + }, + "test-archaea_odb10-busco.batch_summary.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ], + [ + { + "id": "test", + "mode": "proteins", + "lineage": "bacteria_odb10" + }, + "test-bacteria_odb10-busco.batch_summary.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "5": [ + + ], + "6": [ + + ], + "7": [ + + ], + "8": [ + "versions.yml:md5,36b11c442943567e471af0abd474a10b", + "versions.yml:md5,9435355f913e283f60b4fb7ef77dd52a", + "versions.yml:md5,e9d65e2f2f13175e99c5b7f4ae1013b9" + ], + "annotation_batch_summary": [ + [ + { + "id": "test", + "mode": "proteins", + "lineage": "archaea_odb10" + }, + "test-archaea_odb10-busco.batch_summary.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ], + [ + { + "id": "test", + "mode": "proteins", + "lineage": "bacteria_odb10" + }, + "test-bacteria_odb10-busco.batch_summary.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "annotation_png": [ + + ], + "annotation_short_summaries_json": [ + + ], + "annotation_short_summaries_txt": [ + + ], + "assembly_batch_summary": [ + [ + { + "id": "test", + "mode": "genome", + "lineage": "archaea_odb10" + }, + "test-archaea_odb10-busco.batch_summary.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ], + [ + { + "id": "test", + "mode": "genome", + "lineage": "bacteria_odb10" + }, + "test-bacteria_odb10-busco.batch_summary.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ], + [ + { + "id": "test2", + "mode": "genome", + "lineage": "archaea_odb10" + }, + "test2-archaea_odb10-busco.batch_summary.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ], + [ + { + "id": "test2", + "mode": "genome", + "lineage": "bacteria_odb10" + }, + "test2-bacteria_odb10-busco.batch_summary.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "assembly_png": [ + + ], + "assembly_short_summaries_json": [ + + ], + "assembly_short_summaries_txt": [ + + ], + "versions": [ + "versions.yml:md5,36b11c442943567e471af0abd474a10b", + "versions.yml:md5,9435355f913e283f60b4fb7ef77dd52a", + "versions.yml:md5,e9d65e2f2f13175e99c5b7f4ae1013b9" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-05-13T16:39:45.021811" + }, + "candidatus_portiera_aleyrodidarum - bacteroides_fragilis - genome": { + "content": [ + [ + [ + { + "id": "test", + "mode": "genome", + "lineage": "archaea_odb10" + }, + "test-archaea_odb10-busco.batch_summary.txt:md5,1397d74518a776ad75b16a843bc5b6c1" + ], + [ + { + "id": "test", + "mode": "genome", + "lineage": "bacteria_odb10" + }, + "test-bacteria_odb10-busco.batch_summary.txt:md5,a1186bc25448ac1949bf7790810f7161" + ], + [ + { + "id": "test2", + "mode": "genome", + "lineage": "archaea_odb10" + }, + "test2-archaea_odb10-busco.batch_summary.txt:md5,946582b353a8dba7d6452a71856eca06" + ], + [ + { + "id": "test2", + "mode": "genome", + "lineage": "bacteria_odb10" + }, + "test2-bacteria_odb10-busco.batch_summary.txt:md5,21b3fb771cf36be917cc451540d999be" + ] + ], + [ + [ + { + "id": "test", + "mode": "proteins", + "lineage": "archaea_odb10" + }, + "test-archaea_odb10-busco.batch_summary.txt:md5,95172bd5b1a30e632fc79084ea0ca585" + ], + [ + { + "id": "test", + "mode": "proteins", + "lineage": "bacteria_odb10" + }, + "test-bacteria_odb10-busco.batch_summary.txt:md5,995127c0caecb36205dbf21aa2f9f8a8" + ] + ], + [ + "versions.yml:md5,05d8022e3afb0d5642ed17147b991730", + "versions.yml:md5,36b11c442943567e471af0abd474a10b", + "versions.yml:md5,53987b35fc275297efdaf525937fdca3", + "versions.yml:md5,9435355f913e283f60b4fb7ef77dd52a", + "versions.yml:md5,e9d65e2f2f13175e99c5b7f4ae1013b9" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-05-13T16:39:04.376704" + } +} \ No newline at end of file diff --git a/subworkflows/gallvp/fasta_gxf_busco_plot/tests/nextflow.config b/subworkflows/gallvp/fasta_gxf_busco_plot/tests/nextflow.config new file mode 100644 index 0000000..ddbc644 --- /dev/null +++ b/subworkflows/gallvp/fasta_gxf_busco_plot/tests/nextflow.config @@ -0,0 +1,5 @@ +process { + withName: EXTRACT_PROTEINS { + ext.args = '-y' + } +} diff --git a/subworkflows/gallvp/gxf_fasta_agat_spaddintrons_spextractsequences/main.nf b/subworkflows/gallvp/gxf_fasta_agat_spaddintrons_spextractsequences/main.nf new file mode 100644 index 0000000..57c9297 --- /dev/null +++ b/subworkflows/gallvp/gxf_fasta_agat_spaddintrons_spextractsequences/main.nf @@ -0,0 +1,117 @@ +include { AGAT_SPADDINTRONS } from '../../../modules/gallvp/agat/spaddintrons/main' +include { AGAT_SPEXTRACTSEQUENCES } from '../../../modules/gallvp/agat/spextractsequences/main' + +workflow GXF_FASTA_AGAT_SPADDINTRONS_SPEXTRACTSEQUENCES { + + take: + ch_gxf // channel: [ val(meta), gxf ] + ch_fasta // channel: [ val(meta2), fasta ] + + main: + ch_versions = Channel.empty() + + // collectFile: Remove all/partial introns + ch_gxf_purged = ch_gxf + | map { meta, gxf -> + def gxf_lines = gxf.readLines().findAll { line -> + + if ( line.startsWith('#') ) { return true } + + def cols = line.tokenize('\t') + def feat = cols[2].trim().toLowerCase() + + if ( feat == 'intron' ) { return false } + + return true + } + + [ "${meta.id}.nointrons.${gxf.extension}", gxf_lines.join('\n') ] + } + | collectFile + | map { gxf -> [ gxf.baseName.replace('.nointrons', ''), gxf ] } + | join( + ch_gxf.map { meta, gxf -> [ meta.id, meta ] } + ) + | map { id, gxf, meta -> [ meta, gxf ] } + + // MODULE: AGAT_SPADDINTRONS + AGAT_SPADDINTRONS ( ch_gxf_purged, [] ) + + ch_introns_gff = AGAT_SPADDINTRONS.out.gff + ch_versions = ch_versions.mix(AGAT_SPADDINTRONS.out.versions.first()) + + // MODULE: AGAT_SPEXTRACTSEQUENCES + ch_gxf_fasta = ch_introns_gff + | map { meta, gff3 -> [ meta.id, meta, gff3 ] } + | join( + ch_fasta.map { meta2, fasta -> [ meta2.id, fasta ] } + ) + | map { id, meta, gff3, fasta -> [ meta, gff3, fasta ] } + + AGAT_SPEXTRACTSEQUENCES( + ch_gxf_fasta.map { meta, gff3, fasta -> [ meta, gff3 ] }, + ch_gxf_fasta.map { meta, gff3, fasta -> fasta }, + [] // config + ) + + ch_intron_sequences = AGAT_SPEXTRACTSEQUENCES.out.fasta + ch_versions = ch_versions.mix(AGAT_SPEXTRACTSEQUENCES.out.versions.first()) + + // collectFile: splice motifs + ch_splice_motifs = ch_intron_sequences + | map { meta, fasta -> + def splice_motifs = fasta.splitFasta ( record: [id: true, seqString: true] ) + .collect { el -> [ el.id, "${el.seqString[0..1]}${el.seqString[-2..-1]}" ].join('\t') } + + [ "${meta.id}.motifs.tsv", splice_motifs.join('\n') ] + } + | collectFile + | map { tsv -> [ tsv.baseName.replace('.motifs', ''), tsv ] } + | join( + ch_gxf_purged.map { meta, gxf -> [ meta.id, meta ] } + ) + | map { id, tsv, meta -> [ meta, tsv ] } + + // collectFile: Mark gff3 + ch_marked_gff3 = ch_introns_gff + | join ( ch_splice_motifs ) + | map { meta, gff3, tsv -> + def motif_map = [:] + tsv.eachLine { line -> + def cols = line.tokenize('\t') + def id = cols[0] + def motif = cols[1] + + motif_map [ ( id ) ] = motif + } + + def marked_gff3 = gff3.readLines().collect{ line -> + if ( line.startsWith('#') ) { return line } + + def cols = line.tokenize('\t') + def feat = cols[2].trim() + + if ( feat != 'intron' ) { return line } + + def atts = cols[8].trim() + def id = ( atts =~ /ID=([^;]*)/ )[0][1] + + def atts_r = "$atts;splice_motif=${motif_map[id]};canonical_splicing=${motif_map[id]=='GTAG'}" + + return ( cols[0..7] + [ atts_r ] ).join('\t') + } + + [ "${meta.id}.marked.gff3", marked_gff3.join('\n') ] + } + | collectFile + | map { gff3 -> [ gff3.baseName.replace('.marked', ''), gff3 ] } + | join( + ch_gxf_purged.map { meta, gxf -> [ meta.id, meta ] } + ) + | map { id, gff3, meta -> [ meta, gff3 ] } + + emit: + motifs_tsv = ch_splice_motifs // channel: [ val(meta), tsv ] + marked_gff3 = ch_marked_gff3 // channel: [ val(meta), gff3 ] + versions = ch_versions // channel: [ versions.yml ] +} diff --git a/subworkflows/gallvp/gxf_fasta_agat_spaddintrons_spextractsequences/meta.yml b/subworkflows/gallvp/gxf_fasta_agat_spaddintrons_spextractsequences/meta.yml new file mode 100644 index 0000000..1863d97 --- /dev/null +++ b/subworkflows/gallvp/gxf_fasta_agat_spaddintrons_spextractsequences/meta.yml @@ -0,0 +1,54 @@ +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/subworkflows/yaml-schema.json +name: "gxf_fasta_agat_spaddintrons_spextractsequences" +description: Add introns, extract intron sequences and mark introns with splice motifs +keywords: + - genomics + - gtf + - gff + - fasta + - intron + - extract + - sequence + - mark + - splice + - motif +components: + - agat/spaddintrons + - agat/spextractsequences +input: + - ch_gxf: + type: file + description: | + The input channel containing the GTF/GFF file + Structure: [ val(meta), path(gxf) ] + pattern: "*.{gtf,gff,gff3}" + - ch_fasta: + type: file + description: | + The input channel containing the fasta file + Structure: [ val(meta), path(fasta) ] + pattern: "*.{fa,fas,fsa,faa,fasta}" +output: + - motifs_tsv: + type: file + description: | + The output channel containing the motifs TSV file with first column containing intron ID and + the second column containing the splice motif + Structure: [ val(meta), path(tsv) ] + pattern: "*.motifs.tsv" + - marked_gff3: + type: file + description: | + The output channel containing the GFF3 file with splicing annotation added to it + Structure: [ val(meta), path(gff3) ] + pattern: "*.marked.gff3" + - versions: + type: file + description: | + File containing software versions + Structure: [ path(versions.yml) ] + pattern: "versions.yml" +authors: + - "@GallVp" +maintainers: + - "@GallVp" diff --git a/subworkflows/gallvp/gxf_fasta_agat_spaddintrons_spextractsequences/tests/main.nf.test b/subworkflows/gallvp/gxf_fasta_agat_spaddintrons_spextractsequences/tests/main.nf.test new file mode 100644 index 0000000..f5242c9 --- /dev/null +++ b/subworkflows/gallvp/gxf_fasta_agat_spaddintrons_spextractsequences/tests/main.nf.test @@ -0,0 +1,83 @@ +nextflow_workflow { + + name "Test Subworkflow GXF_FASTA_AGAT_SPADDINTRONS_SPEXTRACTSEQUENCES" + script "../main.nf" + workflow "GXF_FASTA_AGAT_SPADDINTRONS_SPEXTRACTSEQUENCES" + config './nextflow.config' + + tag "subworkflows" + tag "subworkflows_gallvp" + tag "subworkflows/gxf_fasta_agat_spaddintrons_spextractsequences" + tag "modules/nf-core/gunzip" + tag "agat/spextractsequences" + tag "agat/spaddintrons" + + setup { + run("GUNZIP", alias: 'GUNZIP_FASTA') { + script "../../../../modules/nf-core/gunzip" + + process { + """ + input[0] = [ + [ id:'test' ], + file(params.modules_testdata_base_path + 'genomics/eukaryotes/actinidia_chinensis/genome/chr1/genome.fasta.gz' , checkIfExists: true) + ] + """ + } + } + + run("GUNZIP", alias: 'GUNZIP_GFF3') { + script "../../../../modules/nf-core/gunzip" + + process { + """ + input[0] = [ + [ id:'test' ], + file(params.modules_testdata_base_path + 'genomics/eukaryotes/actinidia_chinensis/genome/chr1/genome.gff3.gz' , checkIfExists: true) + ] + """ + } + } + } + + + test("actinidia_chinensis - fasta - gff3") { + + when { + workflow { + """ + input[0] = GUNZIP_GFF3.out.gunzip + input[1] = GUNZIP_FASTA.out.gunzip + """ + } + } + + then { + assertAll( + { assert workflow.success}, + { assert snapshot(workflow.out).match()} + ) + } + } + + test("actinidia_chinensis - fasta - gff3 - stub") { + + options '-stub' + + when { + workflow { + """ + input[0] = GUNZIP_GFF3.out.gunzip + input[1] = GUNZIP_FASTA.out.gunzip + """ + } + } + + then { + assertAll( + { assert workflow.success}, + { assert snapshot(workflow.out).match()} + ) + } + } +} diff --git a/subworkflows/gallvp/gxf_fasta_agat_spaddintrons_spextractsequences/tests/main.nf.test.snap b/subworkflows/gallvp/gxf_fasta_agat_spaddintrons_spextractsequences/tests/main.nf.test.snap new file mode 100644 index 0000000..a52bebe --- /dev/null +++ b/subworkflows/gallvp/gxf_fasta_agat_spaddintrons_spextractsequences/tests/main.nf.test.snap @@ -0,0 +1,104 @@ +{ + "actinidia_chinensis - fasta - gff3": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.motifs.tsv:md5,feb30ceeb2662125a80539929f2908c5" + ] + ], + "1": [ + [ + { + "id": "test" + }, + "test.marked.gff3:md5,ae8800dc42d5da4a94c93cf09d319fc5" + ] + ], + "2": [ + "versions.yml:md5,1befbe41bc7abbf49767b8dc68877bc7", + "versions.yml:md5,65042e008b2466984150cb219a05291c" + ], + "marked_gff3": [ + [ + { + "id": "test" + }, + "test.marked.gff3:md5,ae8800dc42d5da4a94c93cf09d319fc5" + ] + ], + "motifs_tsv": [ + [ + { + "id": "test" + }, + "test.motifs.tsv:md5,feb30ceeb2662125a80539929f2908c5" + ] + ], + "versions": [ + "versions.yml:md5,1befbe41bc7abbf49767b8dc68877bc7", + "versions.yml:md5,65042e008b2466984150cb219a05291c" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-24T16:20:01.32929" + }, + "actinidia_chinensis - fasta - gff3 - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.motifs.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test" + }, + "test.marked.gff3:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + "versions.yml:md5,1befbe41bc7abbf49767b8dc68877bc7", + "versions.yml:md5,65042e008b2466984150cb219a05291c" + ], + "marked_gff3": [ + [ + { + "id": "test" + }, + "test.marked.gff3:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "motifs_tsv": [ + [ + { + "id": "test" + }, + "test.motifs.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,1befbe41bc7abbf49767b8dc68877bc7", + "versions.yml:md5,65042e008b2466984150cb219a05291c" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-24T16:22:01.840388" + } +} \ No newline at end of file diff --git a/subworkflows/gallvp/gxf_fasta_agat_spaddintrons_spextractsequences/tests/nextflow.config b/subworkflows/gallvp/gxf_fasta_agat_spaddintrons_spextractsequences/tests/nextflow.config new file mode 100644 index 0000000..456093c --- /dev/null +++ b/subworkflows/gallvp/gxf_fasta_agat_spaddintrons_spextractsequences/tests/nextflow.config @@ -0,0 +1,6 @@ +process { + + withName: AGAT_SPEXTRACTSEQUENCES { + ext.args = '-t intron' + } +} diff --git a/subworkflows/local/align_rnaseq.nf b/subworkflows/local/align_rnaseq.nf new file mode 100644 index 0000000..0ad3b59 --- /dev/null +++ b/subworkflows/local/align_rnaseq.nf @@ -0,0 +1,81 @@ +include { STAR_ALIGN } from '../../modules/nf-core/star/align' +include { SAMTOOLS_CAT } from '../../modules/nf-core/samtools/cat' + +workflow ALIGN_RNASEQ { + take: + reads_target // channel: [ meta, assembly_id ] + trim_reads // channel: [ meta, [ fq ] ] + rna_bam_by_assembly // channel: [ meta, [ bam ] ] + assembly_index // channel: [ meta2, star_index ] + + main: + ch_versions = Channel.empty() + + // MODULE: STAR_ALIGN + ch_star_inputs = reads_target + | combine(trim_reads, by:0) + | map { meta, assembly, fastq -> + [ + assembly, + [ + id: "${meta.id}.on.${assembly}", + single_end: meta.single_end, + target_assembly: assembly + ], + fastq + ] + } + | combine( + assembly_index.map { meta, index -> [ meta.id, index ] }, + by:0 + ) + | map { assembly, meta, fastq, index -> [ meta, fastq, index ] } + + def star_ignore_sjdbgtf = true + def seq_platform = false + def seq_center = false + + STAR_ALIGN( + ch_star_inputs.map { meta, fastq, index -> [ meta, fastq ] }, + ch_star_inputs.map { meta, fastq, index -> [ [ id: meta.target_assembly ], index ] }, + ch_star_inputs.map { meta, fastq, index -> [ [ id: meta.target_assembly ], [] ] }, + star_ignore_sjdbgtf, + seq_platform, + seq_center + ) + + ch_star_bam = STAR_ALIGN.out.bam_sorted + ch_versions = ch_versions.mix(STAR_ALIGN.out.versions.first()) + + // MODULE: SAMTOOLS_CAT + ch_star_bam_branch = ch_star_bam + | map { meta, bam -> + [ + [ id: meta.target_assembly ], + bam instanceof List ? bam.find { it =~ /Aligned/ } : bam + ] + } + | mix ( rna_bam_by_assembly ) + | groupTuple + | map { meta, bams -> [ meta, bams.flatten() ] } + | branch { meta, bamList -> + bams: bamList.size() > 1 + bam: bamList.size() <= 1 + } + + SAMTOOLS_CAT( + ch_star_bam_branch.bams.map { meta, bams -> [ meta, bams.toSorted() ] } + ) + + ch_samtools_bam = SAMTOOLS_CAT.out.bam + | map { meta, bam -> [ meta, [ bam ] ] } + | mix( + ch_star_bam_branch.bam + ) + + ch_versions = ch_versions.mix(SAMTOOLS_CAT.out.versions.first()) + + emit: + bam = ch_samtools_bam // channel: [ [ id: target_assembly, single_end ], [ bam ] ] + versions = ch_versions // channel: [ versions.yml ] +} diff --git a/subworkflows/local/fasta_braker3.nf b/subworkflows/local/fasta_braker3.nf new file mode 100644 index 0000000..dcb0e5d --- /dev/null +++ b/subworkflows/local/fasta_braker3.nf @@ -0,0 +1,65 @@ +include { BRAKER3 } from '../../modules/gallvp/braker3' +include { FILE_GUNZIP as BRAKER_GFF3_GUNZIP } from '../../subworkflows/local/file_gunzip' +include { FILE_GUNZIP as BRAKER_HINTS_GUNZIP } from '../../subworkflows/local/file_gunzip' + +workflow FASTA_BRAKER3 { + take: + ch_masked_target_assembly // channel: [ meta, fasta ]; meta ~ [ id: traget_assembly ] + ch_braker_ex_asm_str // channel: val(assembly_x,assembly_y) + ch_rnaseq_bam // channel: [ meta, bam ] + ch_ext_prots_fasta // channel: [ meta2, fasta ]; meta2 ~ [ id: ext_protein_seqs ] + ch_braker_annotation // channel: [ meta, gff3, hints.gff ] + + main: + ch_versions = Channel.empty() + + + ch_braker_inputs = ch_masked_target_assembly + | combine( ch_braker_ex_asm_str ) + | filter { meta, fasta, ex_str -> !( ex_str.split(",").contains( meta.id ) ) } + | map { meta, fasta, ex_str -> + [ meta, fasta ] + } + | join(ch_rnaseq_bam, remainder: true) + | combine( + ch_ext_prots_fasta.map { meta, fasta -> fasta }.ifEmpty(null) + ) + | map { meta, fasta, bam, prots -> [ meta, fasta, bam ?: [], prots ?: [] ] } + + def rnaseq_sets_dirs = [] + def rnaseq_sets_ids = [] + def hintsfile = [] + + // MODULE: BRAKER3 + BRAKER3( + ch_braker_inputs.map { meta, fasta, bam, prots -> [meta, fasta] }, + ch_braker_inputs.map { meta, fasta, bam, prots -> bam }, + rnaseq_sets_dirs, + rnaseq_sets_ids, + ch_braker_inputs.map { meta, fasta, bam, prots -> prots }, + hintsfile + ) + + ch_braker_gff3 = BRAKER3.out.gff3 + | mix( ch_braker_annotation.map { meta, gff3, hints -> [ meta, gff3 ] } ) + ch_braker_hints = BRAKER3.out.hintsfile + | mix( ch_braker_annotation.map { meta, gff3, hints -> [ meta, hints ] } ) + ch_versions = ch_versions.mix(BRAKER3.out.versions.first()) + + // WORKFLOW: FILE_GUNZIP as BRAKER_GFF3_GUNZIP + BRAKER_GFF3_GUNZIP ( ch_braker_gff3 ) + + ch_braker_gff3 = BRAKER_GFF3_GUNZIP.out.gunzip + ch_versions = ch_versions.mix(BRAKER_GFF3_GUNZIP.out.versions) + + // WORKFLOW: FILE_GUNZIP as BRAKER_HINTS_GUNZIP + BRAKER_HINTS_GUNZIP ( ch_braker_hints ) + + ch_braker_hints = BRAKER_HINTS_GUNZIP.out.gunzip + ch_versions = ch_versions.mix(BRAKER_HINTS_GUNZIP.out.versions) + + emit: + braker_gff3 = ch_braker_gff3 // [ meta, gff3 ] + braker_hints = ch_braker_hints // [ meta, hints.gff ] + versions = ch_versions // [ versions.yml ] +} diff --git a/subworkflows/local/fasta_liftoff.nf b/subworkflows/local/fasta_liftoff.nf new file mode 100644 index 0000000..a46beb3 --- /dev/null +++ b/subworkflows/local/fasta_liftoff.nf @@ -0,0 +1,186 @@ +include { GUNZIP as GUNZIP_FASTA } from '../../modules/nf-core/gunzip/main' +include { GUNZIP as GUNZIP_GFF } from '../../modules/nf-core/gunzip/main' +include { GFFREAD as GFFREAD_BEFORE_LIFTOFF } from '../../modules/nf-core/gffread/main' +include { LIFTOFF } from '../../modules/nf-core/liftoff/main' +include { AGAT_SPMERGEANNOTATIONS as MERGE_LIFTOFF_ANNOTATIONS } from '../../modules/nf-core/agat/spmergeannotations/main' +include { AGAT_SPFILTERFEATUREFROMKILLLIST } from '../../modules/nf-core/agat/spfilterfeaturefromkilllist/main' +include { GFFREAD as GFFREAD_AFTER_LIFTOFF } from '../../modules/nf-core/gffread/main' +include { GFF_TSEBRA_SPFILTERFEATUREFROMKILLLIST } from '../../subworkflows/local/gff_tsebra_spfilterfeaturefromkilllist' + +workflow FASTA_LIFTOFF { + take: + target_assemby // Channel: [ meta, fasta ] + xref_fasta // Channel: [ meta2, fasta ] + xref_gff // Channel: [ meta2, gff3 ] + val_filter_liftoff_by_hints // val(true|false) + braker_hints // [ meta, gff ] + tsebra_config // Channel: [ cfg ] + allow_isoforms // val(true|false) + + + main: + ch_versions = Channel.empty() + + // MODULE: GUNZIP as GUNZIP_FASTA + ch_xref_fasta_branch = xref_fasta + | branch { meta, file -> + gz: "$file".endsWith(".gz") + rest: !"$file".endsWith(".gz") + } + + GUNZIP_FASTA ( ch_xref_fasta_branch.gz ) + + ch_xref_gunzip_fasta = GUNZIP_FASTA.out.gunzip + | mix( + ch_xref_fasta_branch.rest + ) + + ch_versions = ch_versions.mix(GUNZIP_FASTA.out.versions.first()) + + // MODULE: GUNZIP as GUNZIP_GFF + ch_xref_gff_branch = xref_gff + | branch { meta, file -> + gz: "$file".endsWith(".gz") + rest: !"$file".endsWith(".gz") + } + + GUNZIP_GFF ( ch_xref_gff_branch.gz ) + + ch_xref_gunzip_gff = GUNZIP_GFF.out.gunzip + | mix( + ch_xref_gff_branch.rest + ) + + ch_versions = ch_versions.mix(GUNZIP_GFF.out.versions.first()) + + // MODULE: GFFREAD as GFFREAD_BEFORE_LIFTOFF + GFFREAD_BEFORE_LIFTOFF ( ch_xref_gunzip_gff, [] ) + + ch_gffread_gff = GFFREAD_BEFORE_LIFTOFF.out.gffread_gff + ch_versions = ch_versions.mix(GFFREAD_BEFORE_LIFTOFF.out.versions.first()) + + // MODULE: LIFTOFF + ch_liftoff_inputs = target_assemby + | combine( + ch_xref_gunzip_fasta + | join( + ch_gffread_gff + ) + ) + | map { meta, target_fa, ref_meta, ref_fa, ref_gff -> + [ + [ + id: "${meta.id}.from.${ref_meta.id}", + target_assemby: meta.id + ], + target_fa, + ref_fa, + ref_gff + ] + } + + LIFTOFF( + ch_liftoff_inputs.map { meta, target_fa, ref_fa, ref_gff -> [ meta, target_fa ] }, + ch_liftoff_inputs.map { meta, target_fa, ref_fa, ref_gff -> ref_fa }, + ch_liftoff_inputs.map { meta, target_fa, ref_fa, ref_gff -> ref_gff }, + [] + ) + + ch_liftoff_gff3 = LIFTOFF.out.polished_gff3 + | map { meta, gff -> [ [ id: meta.target_assemby ], gff ] } + | groupTuple + + ch_versions = ch_versions.mix(LIFTOFF.out.versions.first()) + + // MODULE: AGAT_SPMERGEANNOTATIONS as MERGE_LIFTOFF_ANNOTATIONS + ch_merge_inputs = ch_liftoff_gff3 + | branch { meta, list_polished -> + one: list_polished.size() == 1 + many: list_polished.size() > 1 + } + + MERGE_LIFTOFF_ANNOTATIONS( + ch_merge_inputs.many, + [] + ) + + ch_merged_gff = MERGE_LIFTOFF_ANNOTATIONS.out.gff + | mix( + ch_merge_inputs.one + | map { meta, gffs -> [ meta, gffs[0] ] } + // Unlist the upstream groupTuple + ) + ch_versions = ch_versions.mix(MERGE_LIFTOFF_ANNOTATIONS.out.versions.first()) + + // COLLECTFILE: Kill list for valid_ORF=False transcripts + ch_kill_list = ch_merged_gff + | map { meta, gff -> + + def tx_from_gff = gff.readLines() + .findAll { it -> + if ( it.startsWith('#') ) { return false } + + def cols = it.split('\t') + def feat = cols[2] + if ( ! ( feat == 'transcript' || feat == 'mRNA' ) ) { return false } + + def attrs = cols[8] + attrs.contains('valid_ORF=False') + } + .collect { + def cols = it.split('\t') + def attrs = cols[8] + + def matches = attrs =~ /ID=([^;]*)/ + + return matches[0][1] + } + + [ "${meta.id}.kill.list.txt" ] + tx_from_gff.join('\n') + } + | collectFile(newLine: true) + | map { file -> + [ [ id: file.baseName.replace('.kill.list', '') ], file ] + } + + // MODULE: AGAT_SPFILTERFEATUREFROMKILLLIST + ch_agat_kill_inputs = ch_merged_gff + | join(ch_kill_list) + + + AGAT_SPFILTERFEATUREFROMKILLLIST( + ch_agat_kill_inputs.map { meta, gff, kill -> [ meta, gff ] }, + ch_agat_kill_inputs.map { meta, gff, kill -> kill }, + [] // default config + ) + + ch_liftoff_purged_gff = AGAT_SPFILTERFEATUREFROMKILLLIST.out.gff + ch_versions = ch_versions.mix(AGAT_SPFILTERFEATUREFROMKILLLIST.out.versions.first()) + + // MODULE: GFFREAD as GFFREAD_AFTER_LIFTOFF + GFFREAD_AFTER_LIFTOFF ( ch_liftoff_purged_gff, [] ) + + ch_attr_trimmed_gff = GFFREAD_AFTER_LIFTOFF.out.gffread_gff + ch_versions = ch_versions.mix(GFFREAD_AFTER_LIFTOFF.out.versions.first()) + + // SUBWORKFLOW: GFF_TSEBRA_SPFILTERFEATUREFROMKILLLIST + GFF_TSEBRA_SPFILTERFEATUREFROMKILLLIST( + val_filter_liftoff_by_hints ? ch_attr_trimmed_gff : Channel.empty(), + braker_hints, + tsebra_config, + allow_isoforms, + 'liftoff' + ) + + ch_tsebra_killed_gff = GFF_TSEBRA_SPFILTERFEATUREFROMKILLLIST.out.tsebra_killed_gff + ch_versions = ch_versions.mix(GFF_TSEBRA_SPFILTERFEATUREFROMKILLLIST.out.versions) + + // Prepare output channel + ch_output_gff = val_filter_liftoff_by_hints + ? ch_tsebra_killed_gff + : ch_attr_trimmed_gff + + emit: + gff3 = ch_output_gff // [ meta, gff3 ] + versions = ch_versions // [ versions.yml ] +} diff --git a/subworkflows/local/fasta_orthofinder.nf b/subworkflows/local/fasta_orthofinder.nf new file mode 100644 index 0000000..715d78e --- /dev/null +++ b/subworkflows/local/fasta_orthofinder.nf @@ -0,0 +1,33 @@ +include { FILE_GUNZIP as FASTA_GUNZIP } from '../../subworkflows/local/file_gunzip' +include { ORTHOFINDER } from '../../modules/nf-core/orthofinder/main' + +workflow FASTA_ORTHOFINDER { + take: + ch_pep_fasta // [ meta, fasta ] + ch_external_pep_fasta // [ meta, fasta ] + + main: + ch_versions = Channel.empty() + + // SUBWORKFLOW: FILE_GUNZIP as FASTA_GUNZIP + FASTA_GUNZIP ( ch_external_pep_fasta ) + + ch_fasta_unzipped = FASTA_GUNZIP.out.gunzip + ch_versions = ch_versions.mix(FASTA_GUNZIP.out.versions) + + // MODULE: ORTHOFINDER + ch_orthofinder_peps = ch_fasta_unzipped + | map { meta, fasta -> fasta } + | mix( + ch_pep_fasta.map { meta, fasta -> fasta } + ) + | collect + | filter { it.size() > 1 } + + ORTHOFINDER ( ch_orthofinder_peps.map { fastas -> [ [ id: 'genepal' ], fastas ] } ) + + ch_versions = ch_versions.mix(ORTHOFINDER.out.versions) + + emit: + versions = ch_versions // [ versions.yml ] +} diff --git a/subworkflows/local/file_gunzip.nf b/subworkflows/local/file_gunzip.nf new file mode 100644 index 0000000..30f3368 --- /dev/null +++ b/subworkflows/local/file_gunzip.nf @@ -0,0 +1,20 @@ +include { GUNZIP } from '../../modules/nf-core/gunzip' + +workflow FILE_GUNZIP { + take: + ch_input // channel [ meta, archive ] + + main: + ch_input_branch = ch_input + | branch { meta, archive -> + gz: "$archive".endsWith('.gz') + rest: ! "$archive".endsWith('.gz') + } + + // MODULE: GUNZIP + GUNZIP ( ch_input_branch.gz ) + + emit: + versions = GUNZIP.out.versions.first() + gunzip = GUNZIP.out.gunzip.mix( ch_input_branch.rest ) +} diff --git a/subworkflows/local/gff_eggnogmapper.nf b/subworkflows/local/gff_eggnogmapper.nf new file mode 100644 index 0000000..841a243 --- /dev/null +++ b/subworkflows/local/gff_eggnogmapper.nf @@ -0,0 +1,49 @@ +include { GFFREAD as GFF2FASTA_FOR_EGGNOGMAPPER } from '../../modules/nf-core/gffread/main' +include { EGGNOGMAPPER } from '../../modules/nf-core/eggnogmapper/main' + +workflow GFF_EGGNOGMAPPER { + take: + ch_gff // Channel: [ meta, gff ] + ch_fasta // Channel: [ meta, fasta ] + db_folder // val(db_folder) + + main: + // Versions + ch_versions = Channel.empty() + + // MODULE: GFFREAD as GFF2FASTA_FOR_EGGNOGMAPPER + ch_gffread_inputs = ch_gff + | join(ch_fasta) + + GFF2FASTA_FOR_EGGNOGMAPPER( + ch_gffread_inputs.map { meta, gff, fasta -> [ meta, gff ] }, + ch_gffread_inputs.map { meta, gff, fasta -> fasta } + ) + + ch_gffread_fasta = GFF2FASTA_FOR_EGGNOGMAPPER.out.gffread_fasta + ch_versions = ch_versions.mix(GFF2FASTA_FOR_EGGNOGMAPPER.out.versions.first()) + + + ch_eggnogmapper_inputs = ! db_folder + ? Channel.empty() + : ch_gffread_fasta + | combine(Channel.fromPath(db_folder)) + + EGGNOGMAPPER( + ch_eggnogmapper_inputs.map { meta, fasta, db -> [ meta, fasta ] }, + [], + ch_eggnogmapper_inputs.map { meta, fasta, db -> db }, + [ [], [] ] + ) + + ch_eggnogmapper_annotations = EGGNOGMAPPER.out.annotations + ch_eggnogmapper_orthologs = EGGNOGMAPPER.out.orthologs + ch_eggnogmapper_hits = EGGNOGMAPPER.out.hits + ch_versions = ch_versions.mix(EGGNOGMAPPER.out.versions.first()) + + emit: + eggnogmapper_annotations = ch_eggnogmapper_annotations + eggnogmapper_orthologs = ch_eggnogmapper_orthologs + eggnogmapper_hits = ch_eggnogmapper_hits + versions = ch_versions +} diff --git a/subworkflows/local/gff_merge_cleanup.nf b/subworkflows/local/gff_merge_cleanup.nf new file mode 100644 index 0000000..fc6c75e --- /dev/null +++ b/subworkflows/local/gff_merge_cleanup.nf @@ -0,0 +1,183 @@ +include { AGAT_SPMERGEANNOTATIONS } from '../../modules/nf-core/agat/spmergeannotations/main' +include { GT_GFF3 } from '../../modules/nf-core/gt/gff3/main' +include { AGAT_CONVERTSPGXF2GXF } from '../../modules/nf-core/agat/convertspgxf2gxf/main' + +workflow GFF_MERGE_CLEANUP { + take: + ch_braker_gff // Channel: [ meta, gff ] + ch_liftoff_gff // Channel: [ meta, gff ] + + main: + ch_versions = Channel.empty() + + ch_gff_branch = ch_braker_gff + | join(ch_liftoff_gff, remainder:true) + | branch { meta, braker_gff, liftoff_gff -> + both : ( braker_gff && liftoff_gff ) + braker_only : ( braker_gff && ( ! liftoff_gff ) ) + liftoff_only: ( ( ! braker_gff ) && liftoff_gff ) + } + + // MODULE: AGAT_SPMERGEANNOTATIONS + AGAT_SPMERGEANNOTATIONS( + ch_gff_branch.both.map { meta, bg, lg -> [ meta, [ bg, lg ] ] }, + [] + ) + + ch_merged_gff = AGAT_SPMERGEANNOTATIONS.out.gff + | mix ( ch_gff_branch.liftoff_only.map { meta, braker_gff, liftoff_gff -> [ meta, liftoff_gff ] } ) + | mix ( ch_gff_branch.braker_only.map { meta, braker_gff, liftoff_gff -> [ meta, braker_gff ] } ) + ch_versions = ch_versions.mix(AGAT_SPMERGEANNOTATIONS.out.versions.first()) + + // MODULE: GT_GFF3 + GT_GFF3 ( ch_merged_gff ) + + ch_gt_gff = GT_GFF3.out.gt_gff3 + ch_versions = ch_versions.mix(GT_GFF3.out.versions.first()) + + // COLLECTFILE: Format GT_GFF3 output + ch_gt_formatted_gff = ch_gt_gff + | map { meta, gff -> + + def lines = gff.readLines() + .collect { line -> + if ( line.startsWith('##') ) { return line } + if ( line.startsWith('#') ) { return '' } + + def cols = line.split('\t') + def program = cols[1] + def feat = cols[2] + def atts = cols[8] + + def atts_r = '' + // Remove attributes and use AGAT_CONVERTSPGXF2GXF + // to create attributes based on sequential layout + + def feat_r = feat == 'transcript' ? 'mRNA' : feat + // Use mRNA inplace of transcript + + if ( feat_r != 'mRNA' || program != 'Liftoff' ) { + return ( cols[0..1] + [ feat_r ] + cols[3..7] + [ atts_r ] ).join('\t') + } + + def tx_id = ( atts =~ /ID=([^;]*)/ )[0][1] + def matches = ( atts =~ /liftoffID=([^;]*)/ ) + + def liftoffID = matches ? matches[0][1] : tx_id + + def atts_g = "liftoffID=$liftoffID" + + return ( cols[0..1] + [ feat_r ] + cols[3..7] + [ atts_g ] ).join('\t') + + }.join('\n') + + [ "${meta.id}.bare.gff" ] + [ lines ] + } + | collectFile(newLine: true) + | map { file -> + [ [ id: file.baseName.replace('.bare', '') ], file ] + } + + // MODULE: AGAT_CONVERTSPGXF2GXF + AGAT_CONVERTSPGXF2GXF ( ch_gt_formatted_gff ) + + ch_agat_gff = AGAT_CONVERTSPGXF2GXF.out.output_gff + ch_versions = ch_versions.mix(AGAT_CONVERTSPGXF2GXF.out.versions.first()) + + // COLLECTFILE: Format AGAT_CONVERTSPGXF2GXF output and only allow: [ 'gene', 'mRNA', 'exon', 'CDS' ] + ch_agat_formatted_gff = ch_agat_gff + | map { meta, gff -> + + def filtered_lines = gff.readLines() + .findAll { line -> + if ( line.startsWith('#') ) { return true } + + def cols = line.split('\t') + def feat = cols[2].trim() + + ( feat in [ 'gene', 'mRNA', 'exon', 'CDS' ] ) + ? true + : false + } + .collect { line -> + if ( line.startsWith('#') ) { return line } + + def cols = line.split('\t') + def program = cols[1] + def feat = cols[2] + def atts = cols[8] + def atts_r = atts.replace('-', '').replace('agat', '') + + if ( feat != 'mRNA' || program != 'Liftoff' ) { + return ( cols[0..7] + [ atts_r ] ).join('\t') + } + + def oldID = ( atts =~ /liftoffID=([^;]*)/ )[0][1] + def newID = ( atts =~ /ID=([^;]*)/ )[0][1].replace('-', '').replace('agat', '') + def pID = ( atts =~ /Parent=([^;]*)/ )[0][1].replace('-', '').replace('agat', '') + def atts_g = "ID=${newID};Parent=${pID};liftoffID=${oldID}" + + return ( cols[0..7] + [ atts_g ] ).join('\t') + } + + def tx_formatted_lines = [] + def current_gene_id = '' + def current_mrna_id = -1 + def current_exon_id = -1 + def current_cds_id = -1 + + filtered_lines.each { line -> + if ( line.startsWith('#') ) { + tx_formatted_lines << line + return + } + + def cols = line.split('\t') + def feat = cols[2] + def atts = cols[8] + def id = ( atts =~ /ID=([^;]*)/ )[0][1] + + if ( feat == 'gene' ) { + tx_formatted_lines << line + current_gene_id = id + current_mrna_id = 0 + return + } + + if ( feat == 'mRNA' ) { + current_mrna_id += 1 + current_exon_id = 0 + current_cds_id = 0 + + def matches = ( atts =~ /liftoffID=([^;]*)/ ) + def liftoffIDStr = matches ? ";liftoffID=${matches[0][1]}" : '' + + tx_formatted_lines << ( ( cols[0..7] + [ "ID=${current_gene_id}.t${current_mrna_id};Parent=${current_gene_id}${liftoffIDStr}" ] ).join('\t') ) + return + } + + if ( feat == 'exon' ) { + current_exon_id += 1 + tx_formatted_lines << ( ( cols[0..7] + [ "ID=${current_gene_id}.t${current_mrna_id}.exon${current_exon_id};Parent=${current_gene_id}.t${current_mrna_id}" ] ).join('\t') ) + return + } + + if ( feat == 'CDS' ) { + current_cds_id += 1 + tx_formatted_lines << ( ( cols[0..7] + [ "ID=${current_gene_id}.t${current_mrna_id}.cds${current_cds_id};Parent=${current_gene_id}.t${current_mrna_id}" ] ).join('\t') ) + return + } + + } + + [ "${meta.id}.agat.cleanup.gff" ] + [ tx_formatted_lines.join('\n') ] + } + | collectFile(newLine: true) + | map { file -> + [ [ id: file.baseName.replace('.agat.cleanup', '') ], file ] + } + + emit: + gff = ch_agat_formatted_gff // [ meta, gff ] + versions = ch_versions // [ versions.yml ] +} diff --git a/subworkflows/local/gff_store.nf b/subworkflows/local/gff_store.nf new file mode 100644 index 0000000..00ca00b --- /dev/null +++ b/subworkflows/local/gff_store.nf @@ -0,0 +1,141 @@ +import java.net.URLEncoder + +include { GT_GFF3 as FINAL_GFF_CHECK } from '../../modules/nf-core/gt/gff3/main' +include { GFFREAD as EXTRACT_PROTEINS } from '../../modules/nf-core/gffread/main' + +workflow GFF_STORE { + take: + ch_target_gff // [ meta, gff ] + ch_eggnogmapper_annotations // [ meta, annotations ] + ch_fasta // [ meta, fasta ] + val_describe_gff // val(true|false) + + main: + ch_versions = Channel.empty() + + // COLLECTFILE: Add eggnogmapper hits to gff + ch_described_gff = ! val_describe_gff + ? Channel.empty() + : ch_target_gff + | join(ch_eggnogmapper_annotations) + | map { meta, gff, annotations -> + def tx_annotations = annotations.readLines() + .findAll { ! it.startsWith('#') } + .collect { line -> + def cols = line.split('\t') + def id = cols[0] + def txt = cols[7] + def pfams = cols[20] + + [ id, txt, pfams ] + } + .collect { id, txt, pfams -> + if ( txt != '-' ) { return [ id, txt ] } + if ( pfams != '-' ) { return [ id, "PFAMs: $pfams" ] } + + [ id, 'No eggnog description and PFAMs' ] + } + .collectEntries { id, txt -> + [ id, txt ] + } + + def gene_tx_annotations = [:] + gff.readLines() + .findAll { line -> + if ( line.startsWith('#') || line == '' ) { return false } + + def cols = line.split('\t') + def feat = cols[2] + + if ( ! ( feat == 'transcript' || feat == 'mRNA' ) ) { return false } + + return true + } + .each { line -> + def cols = line.split('\t') + def atts = cols[8] + + def matches = atts =~ /ID=([^;]*)/ + def tx_id = matches[0][1] + + def matches_p= atts =~ /Parent=([^;]*)/ + def gene_id = matches_p[0][1] + + if ( ! gene_tx_annotations.containsKey(gene_id) ) { + gene_tx_annotations[gene_id] = [:] + } + + def anno = tx_annotations.containsKey(tx_id) + ? URLEncoder.encode(tx_annotations[tx_id], "UTF-8").replace('+', '%20') + : URLEncoder.encode('Hypothetical protein | no eggnog hit', "UTF-8").replace('+', '%20') + + gene_tx_annotations[gene_id] += [ ( tx_id ): anno ] + } + + gene_tx_annotations = gene_tx_annotations + .collectEntries { gene_id, tx_annos -> + def default_anno = tx_annos.values().first() + + if ( tx_annos.values().findAll { it != default_anno }.size() > 0 ) { + return [ gene_id, ( tx_annos + [ 'default': 'Differing%20isoform%20descriptions' ] ) ] + } + + [ gene_id, ( tx_annos + [ 'default': default_anno ] ) ] + } + + def gff_lines = gff.readLines() + .collect { line -> + + if ( line.startsWith('#') || line == '' ) { return line } + + def cols = line.split('\t') + def feat = cols[2] + def atts = cols[8] + + if ( ! ( feat == 'gene' || feat == 'transcript' || feat == 'mRNA' ) ) { return line } + + def id = feat == 'gene' ? ( atts =~ /ID=([^;]*)/ )[0][1] : ( atts =~ /Parent=([^;]*)/ )[0][1] + + if ( ! gene_tx_annotations.containsKey(id) ) { return line } + + def tx_id = feat == 'gene' ? null : ( atts =~ /ID=([^;]*)/ )[0][1] + def desc = feat == 'gene' ? gene_tx_annotations[id]['default'] : gene_tx_annotations[id][tx_id] + + return ( line + ";description=$desc" ) + } + + [ "${meta.id}.described.gff" ] + gff_lines.join('\n') + } + | collectFile(newLine: true) + | map { file -> + [ [ id: file.baseName.replace('.described', '') ], file ] + } + + // MODULE: GT_GFF3 as FINAL_GFF_CHECK + ch_final_check_input = val_describe_gff + ? ch_described_gff + : ch_target_gff + + FINAL_GFF_CHECK ( ch_final_check_input ) + + ch_final_gff = FINAL_GFF_CHECK.out.gt_gff3 + ch_versions = ch_versions.mix(FINAL_GFF_CHECK.out.versions.first()) + + // MODULE: GFFREAD as EXTRACT_PROTEINS + ch_extraction_inputs = ch_final_gff + | join(ch_fasta) + + EXTRACT_PROTEINS( + ch_extraction_inputs.map { meta, gff, fasta -> [ meta, gff ] }, + ch_extraction_inputs.map { meta, gff, fasta -> fasta } + ) + + ch_final_proteins = EXTRACT_PROTEINS.out.gffread_fasta + ch_versions = ch_versions.mix(FINAL_GFF_CHECK.out.versions.first()) + + + emit: + final_gff = ch_final_gff // [ meta, gff ] + final_proteins = ch_final_proteins // [ meta, fasta ] + versions = ch_versions // [ versions.yml ] +} diff --git a/subworkflows/local/gff_tsebra_spfilterfeaturefromkilllist.nf b/subworkflows/local/gff_tsebra_spfilterfeaturefromkilllist.nf new file mode 100644 index 0000000..c4e4fb6 --- /dev/null +++ b/subworkflows/local/gff_tsebra_spfilterfeaturefromkilllist.nf @@ -0,0 +1,186 @@ +include { AGAT_CONVERTSPGFF2GTF } from '../../modules/nf-core/agat/convertspgff2gtf/main' +include { TSEBRA } from '../../modules/nf-core/tsebra/main' +include { AGAT_CONVERTSPGXF2GXF } from '../../modules/nf-core/agat/convertspgxf2gxf/main' +include { AGAT_SPFILTERFEATUREFROMKILLLIST as KILL_TSEBRA_ISOFORMS } from '../../modules/nf-core/agat/spfilterfeaturefromkilllist/main' + +workflow GFF_TSEBRA_SPFILTERFEATUREFROMKILLLIST { + + take: + input_gff3 // [ meta, gff3 ] + braker_hints // [ meta, gff ] + tsebra_config // Channel: [ cfg ] + allow_isoforms // val(true|false) + val_prefix // val(String) + + main: + ch_versions = Channel.empty() + + // MODULE: AGAT_CONVERTSPGFF2GTF + AGAT_CONVERTSPGFF2GTF ( input_gff3 ) + + ch_input_gtf = AGAT_CONVERTSPGFF2GTF.out.output_gtf + ch_versions = ch_versions.mix(AGAT_CONVERTSPGFF2GTF.out.versions.first()) + + // COLLECTFILE: Prepare for TSEBRA + ch_tsebra_input_gtf = ch_input_gtf + | map { meta, gtf -> + + def lines = gtf.readLines() + .collect { line -> + if ( line.startsWith('#') ) { return line } + + def cols = line.split('\t') + def feat = cols[2] + + if ( ! ( feat in [ 'gene', 'transcript', 'mRNA' ] ) ) { return line } + + def atts = cols[8] + def matches = atts =~ /ID ([^;]*)/ + def id = matches[0][1] + + def feat_format = ( feat == 'mRNA' ) ? 'transcript' : feat + + return ( cols[0..1] + [ feat_format ] + cols[3..7] + [ id ] ).join('\t') + }.join('\n') + + [ "${meta.id}.clean.gtf" ] + [ lines ] + } + | collectFile(newLine: true) + | map { file -> + [ [ id: file.baseName.replace(".clean", "") ], file ] + } + + // MODULE: TSEBRA + ch_tsebra_inputs = ch_tsebra_input_gtf + | join(braker_hints) + | combine(tsebra_config) + TSEBRA( + ch_tsebra_inputs.map { meta, gtf, gff, cfg -> [ meta, [ gtf ] ] }, + ch_tsebra_inputs.map { meta, gtf, gff, cfg -> [ gff ] }, + [], + ch_tsebra_inputs.map { meta, gtf, gff, cfg -> cfg } + ) + + ch_tsebra_gtf = TSEBRA.out.tsebra_gtf + ch_versions = ch_versions.mix(TSEBRA.out.versions.first()) + + // COLLECTFILE: Format TSEBRA output + ch_tsebra_formatted_gtf = ch_tsebra_gtf + | map { meta, gtf -> + + def lines = gtf.readLines() + .collect { line -> + if ( line.startsWith('#') ) { return line } + + def cols = line.split('\t') + def program = cols[1] + def feat = cols[2] + def atts = cols[8] + + def atts_r = '' + // Remove attributes and use AGAT_CONVERTSPGXF2GXF + // to create attributes based on sequential layout + + if ( feat != 'transcript' || program != 'Liftoff' ) { + return ( cols[0..7] + [ atts_r ] ).join('\t') + } + + def tx_id = atts.trim().replaceFirst('anno1.', '') + def atts_g = "liftoffID $tx_id" + + return ( cols[0..7] + [ atts_g ] ).join('\t') + }.join('\n') + + [ "${meta.id}.gtf" ] + [ lines ] + } + | collectFile(newLine: true) + | map { file -> + [ [ id: file.baseName ], file ] + } + + // MODULE: AGAT_CONVERTSPGXF2GXF + AGAT_CONVERTSPGXF2GXF ( ch_tsebra_formatted_gtf ) + + ch_tsebra_formatted_gff = AGAT_CONVERTSPGXF2GXF.out.output_gff + ch_versions = ch_versions.mix(AGAT_CONVERTSPGXF2GXF.out.versions.first()) + + // COLLECTFILE: Format AGAT_CONVERTSPGXF2GXF output + ch_tsebra_gff = ch_tsebra_formatted_gff + | map { meta, gff -> + + def lines = gff.readLines() + .collect { line -> + if ( line.startsWith('#') ) { return line } + + def cols = line.split('\t') + def atts_r = cols[8].replaceAll('-', '').replaceAll('agat', '') + + return ( cols[0..7] + [ atts_r ] ).join('\t') + }.join('\n') + + [ "${meta.id}.${val_prefix}.gff3" ] + [ lines ] + } + | collectFile(newLine: true) + | map { file -> + [ [ id: file.baseName.replace(".${val_prefix}", '') ], file ] + } + + // COLLECTFILE: Iso-form kill list if allow_isoforms=true + ch_post_tsebra_kill_list = allow_isoforms + ? Channel.empty() + : ch_tsebra_gff + | map { meta, gff -> + def kill_list = gff.readLines() + .findAll { line -> + if ( line.startsWith('#') ) { return false } + + def cols = line.split('\t') + def feat = cols[2] + + ( feat == 'mRNA' || feat == 'transcript' ) + } + .collect { line -> + def cols = line.split('\t') + def atts = cols[8] + def tx_id = ( atts =~ /ID=([^;]*)/ )[0][1] + def g_id = ( atts =~ /Parent=([^;]*)/ )[0][1] + + [ g_id, tx_id ] + } + .groupBy { g_id, tx_id -> g_id } + .findAll { key, value -> value.size() > 1 } + .collect { key, value -> + value.collect { it[1] }[1..-1] + } + .flatten() + .join('\n') + + [ "${meta.id}.kill.list.txt" ] + [ kill_list ] + } + | collectFile(newLine: true) + | map { file -> + [ [ id: file.baseName.replace('.kill.list', '') ], file ] + } + + // MODULE: AGAT_SPFILTERFEATUREFROMKILLLIST as KILL_TSEBRA_ISOFORMS + ch_tsebra_kill_inputs = ch_tsebra_gff + | join(ch_post_tsebra_kill_list) + + + KILL_TSEBRA_ISOFORMS( + ch_tsebra_kill_inputs.map { meta, gff, kill -> [ meta, gff ] }, + ch_tsebra_kill_inputs.map { meta, gff, kill -> kill }, + [] // default config + ) + + ch_tsebra_killed_gff = ch_tsebra_gff + | join(KILL_TSEBRA_ISOFORMS.out.gff, remainder: true) + | map { meta, tsebra, killed -> + if ( tsebra ) { [ meta, killed ?: tsebra ] } + } + ch_versions = ch_versions.mix(KILL_TSEBRA_ISOFORMS.out.versions.first()) + + emit: + tsebra_killed_gff = ch_tsebra_killed_gff // [ val(meta), gff ] + versions = ch_versions // [ versions.yml ] +} diff --git a/subworkflows/local/prepare_assembly.nf b/subworkflows/local/prepare_assembly.nf new file mode 100644 index 0000000..c05faf5 --- /dev/null +++ b/subworkflows/local/prepare_assembly.nf @@ -0,0 +1,159 @@ +include { GUNZIP as GUNZIP_TARGET_ASSEMBLY } from '../../modules/nf-core/gunzip' +include { GUNZIP as GUNZIP_TE_LIBRARY } from '../../modules/nf-core/gunzip' +include { FASTAVALIDATOR } from '../../modules/nf-core/fastavalidator' +include { REPEATMODELER_BUILDDATABASE } from '../../modules/nf-core/repeatmodeler/builddatabase' +include { REPEATMODELER_REPEATMODELER } from '../../modules/nf-core/repeatmodeler/repeatmodeler' +include { REPEATMASKER_REPEATMASKER } from '../../modules/gallvp/repeatmasker/repeatmasker' +include { STAR_GENOMEGENERATE } from '../../modules/nf-core/star/genomegenerate' + +include { FASTA_EDTA_LAI } from '../../subworkflows/gallvp/fasta_edta_lai' + +workflow PREPARE_ASSEMBLY { + take: + target_assembly // channel: [ meta, fasta ] + te_library // channel: [ meta, fasta ] + repeat_annotator // val(String), 'repeatmodeler' or 'edta' + exclude_assemblies // channel: val(assembly_x,assembly_y) + ch_is_masked // channel: [ meta, val(true|false) ] + + main: + ch_versions = Channel.empty() + + // MODULE: GUNZIP_TARGET_ASSEMBLY + target_assembly_branch = target_assembly + | branch { meta, file -> + gz: "$file".endsWith(".gz") + rest: !"$file".endsWith(".gz") + } + + GUNZIP_TARGET_ASSEMBLY ( target_assembly_branch.gz ) + + ch_gunzip_assembly = GUNZIP_TARGET_ASSEMBLY.out.gunzip + | mix( + target_assembly_branch.rest + ) + ch_versions = ch_versions.mix(GUNZIP_TARGET_ASSEMBLY.out.versions.first()) + + + // MODULE: FASTAVALIDATOR + FASTAVALIDATOR ( ch_gunzip_assembly ) + + ch_validated_assembly = ch_gunzip_assembly + | join(FASTAVALIDATOR.out.success_log) + | map { meta, fasta, log -> [ meta, fasta ] } + ch_versions = ch_versions.mix(FASTAVALIDATOR.out.versions.first()) + + FASTAVALIDATOR.out.error_log + | map { meta, log -> + System.err.println("WARNING: FASTAVALIDATOR failed for ${meta.id} with error: ${log}. ${meta.id} is excluded from further analysis.") + } + + // MODULE: GUNZIP_TE_LIBRARY + ch_te_library_branch = te_library + | branch { meta, file -> + gz: "$file".endsWith(".gz") + rest: !"$file".endsWith(".gz") + } + + GUNZIP_TE_LIBRARY ( ch_te_library_branch.gz ) + + ch_gunzip_te_library = GUNZIP_TE_LIBRARY.out.gunzip + | mix( + ch_te_library_branch.rest + ) + ch_versions = ch_versions.mix(GUNZIP_TE_LIBRARY.out.versions.first()) + + // SUBWORKFLOW: FASTA_EDTA_LAI + ch_unmasked_masked_branch = ch_validated_assembly + | combine( exclude_assemblies ) + | map { meta, fasta, ex_assemblies -> + ex_assemblies.tokenize(",").contains( meta.id ) + ? null + : [ meta, fasta ] + } + | join( + ch_is_masked + ) + | branch { meta, fasta, is_masked -> + unmasked: ! is_masked + return [ meta, fasta ] + masked: is_masked + return [ meta, fasta ] + } + + ch_annotator_inputs = ch_unmasked_masked_branch.unmasked + | join( + ch_gunzip_te_library, remainder: true + ) + | filter { meta, assembly, teLib -> + teLib == null && ( assembly != null ) + } + | map { meta, assembly, teLib -> [ meta, assembly ] } + + ch_edta_inputs = repeat_annotator != 'edta' + ? Channel.empty() + : ch_annotator_inputs + + FASTA_EDTA_LAI( + ch_edta_inputs, + [], + true // Skip LAI + ) + + ch_versions = ch_versions.mix(FASTA_EDTA_LAI.out.versions.first()) + + // MODULE: REPEATMODELER_BUILDDATABASE + ch_repeatmodeler_inputs = repeat_annotator != 'repeatmodeler' + ? Channel.empty() + : ch_annotator_inputs + + REPEATMODELER_BUILDDATABASE ( ch_repeatmodeler_inputs ) + + ch_versions = ch_versions.mix(REPEATMODELER_BUILDDATABASE.out.versions.first()) + + // MODULE: REPEATMODELER_REPEATMODELER + REPEATMODELER_REPEATMODELER ( REPEATMODELER_BUILDDATABASE.out.db ) + + ch_assembly_and_te_lib = ch_unmasked_masked_branch.unmasked + | join( + repeat_annotator == 'edta' + ? FASTA_EDTA_LAI.out.te_lib_fasta.mix(ch_gunzip_te_library) + : REPEATMODELER_REPEATMODELER.out.fasta.mix(ch_gunzip_te_library) + ) + + ch_versions = ch_versions.mix(REPEATMODELER_REPEATMODELER.out.versions.first()) + + // MODULE: REPEATMASKER_REPEATMASKER + REPEATMASKER_REPEATMASKER( + ch_assembly_and_te_lib.map { meta, assembly, teLib -> [ meta, assembly ] }, + ch_assembly_and_te_lib.map { meta, assembly, teLib -> teLib }, + ) + + ch_masked_assembly = ch_unmasked_masked_branch.masked + | mix(REPEATMASKER_REPEATMASKER.out.masked) + ch_versions = ch_versions.mix(REPEATMASKER_REPEATMASKER.out.versions.first()) + + // MODULE: STAR_GENOMEGENERATE + ch_genomegenerate_inputs = ch_validated_assembly + | combine( exclude_assemblies ) + | map { meta, fasta, ex_assemblies -> + ex_assemblies.tokenize(",").contains( meta.id ) + ? null + : [ meta, fasta ] + } + + + STAR_GENOMEGENERATE( + ch_genomegenerate_inputs, + ch_genomegenerate_inputs.map { meta, fasta -> [ [], [] ] } + ) + + ch_assembly_index = STAR_GENOMEGENERATE.out.index + ch_versions = ch_versions.mix(STAR_GENOMEGENERATE.out.versions.first()) + + emit: + target_assemby = ch_validated_assembly // channel: [ meta, fasta ] + masked_target_assembly = ch_masked_assembly // channel: [ meta, fasta ] + target_assemby_index = ch_assembly_index // channel: [ meta, star_index ] + versions = ch_versions // channel: [ versions.yml ] +} diff --git a/subworkflows/local/prepare_ext_prots.nf b/subworkflows/local/prepare_ext_prots.nf new file mode 100644 index 0000000..92c245d --- /dev/null +++ b/subworkflows/local/prepare_ext_prots.nf @@ -0,0 +1,42 @@ +include { GUNZIP } from '../../modules/nf-core/gunzip' +include { CAT_CAT as CAT_PROTEIN_FASTAS } from '../../modules/nf-core/cat/cat' + +workflow PREPARE_EXT_PROTS { + take: + ch_ext_prot_fastas // Channel: [ meta, fasta ] + + main: + ch_versions = Channel.empty() + + // MODULE: GUNZIP + ch_ext_prot_seqs_branch = ch_ext_prot_fastas + | branch { meta, file -> + gz: "$file".endsWith(".gz") + rest: !"$file".endsWith(".gz") + } + + GUNZIP ( ch_ext_prot_seqs_branch.gz ) + + ch_ext_prot_gunzip_fastas = GUNZIP.out.gunzip.mix(ch_ext_prot_seqs_branch.rest) + | map { meta, filePath -> filePath } + | collect + | map { fileList -> + [ + [ id: "ext_protein_seqs" ], + ( fileList instanceof List ) + ? fileList.toSorted() + : fileList + ] + } + + ch_versions = ch_versions.mix(GUNZIP.out.versions.first()) + + // MODULE: CAT_CAT as CAT_PROTEIN_FASTAS + CAT_PROTEIN_FASTAS ( ch_ext_prot_gunzip_fastas ) + + ch_versions = ch_versions.mix(CAT_PROTEIN_FASTAS.out.versions) + + emit: + ext_prots_fasta = CAT_PROTEIN_FASTAS.out.file_out // Channel: [ meta, fasta ] + versions = ch_versions // Channel: [ versions.yml ] +} diff --git a/subworkflows/local/preprocess_rnaseq.nf b/subworkflows/local/preprocess_rnaseq.nf new file mode 100644 index 0000000..72fa176 --- /dev/null +++ b/subworkflows/local/preprocess_rnaseq.nf @@ -0,0 +1,123 @@ +include { CAT_FASTQ } from '../../modules/nf-core/cat/fastq' +include { SORTMERNA as SORTMERNA_INDEX } from '../../modules/nf-core/sortmerna' +include { SORTMERNA as SORTMERNA_READS } from '../../modules/nf-core/sortmerna' +include { FASTQ_FASTQC_UMITOOLS_FASTP } from '../../subworkflows/nf-core/fastq_fastqc_umitools_fastp' + +workflow PREPROCESS_RNASEQ { + take: + ch_reads // channel: [ [ id, single_end, target_assemblies ], [ [ fq ] ] ] + permissible_assemblies // val: assembly_a,assembly_b + exclude_assemblies // channel: val(assembly_x,assembly_y) + skip_fastqc // val: true|false + skip_fastp // val: true|false + save_trimmed // val: true|false + min_trimmed_reads // val: Integer + remove_ribo_rna // val: true|false + sortmerna_fastas // channel: [ [ fasta ] ] + + main: + ch_versions = Channel.empty() + + ch_fastq = ch_reads + | combine( exclude_assemblies ) + | map { meta, fqs, ex_assemblies -> + def ex_list = ex_assemblies.split(",") + + if ( !( meta.target_assemblies.every { ex_list.contains( it ) } ) ) { + [ [ id:meta.id, single_end:meta.single_end ], fqs ] + } + } + | branch { meta, fqs -> + single : fqs.size() == 1 + return [ meta, fqs.flatten() ] + multiple: fqs.size() > 1 + return [ meta, fqs.flatten() ] + } + + + ch_reads_target = ch_reads + | combine( exclude_assemblies ) + | flatMap { meta, fqs, ex_assemblies -> + def ex_list = ex_assemblies.split(",") + + meta + .target_assemblies + .collect { assembly -> [ [ id:meta.id, single_end:meta.single_end ], assembly ] } + .findAll { _meta, assembly -> !( ex_list.contains( assembly ) ) } + } + | unique + + // MODULES: CAT_FASTQ + CAT_FASTQ ( ch_fastq.multiple ) + + ch_cat_fastq = CAT_FASTQ.out.reads.mix(ch_fastq.single) + ch_versions = ch_versions.mix(CAT_FASTQ.out.versions.first()) + + // SUBWORKFLOW: FASTQ_FASTQC_UMITOOLS_FASTP + def with_umi = false + def skip_umi_extract = true + def umi_discard_read = false + + FASTQ_FASTQC_UMITOOLS_FASTP ( + ch_cat_fastq, + skip_fastqc, + with_umi, + skip_umi_extract, + umi_discard_read, + skip_fastp, + [], + save_trimmed, + save_trimmed, + min_trimmed_reads + ) + + ch_trim_reads = FASTQ_FASTQC_UMITOOLS_FASTP.out.reads + + ch_cat_fastq + | join(ch_trim_reads, remainder:true) + | map { meta, reads, trimmed -> + if (!trimmed) { + System.err.println("WARNING: Dropping ${reads.collect { it.getName() }} as read count after trimming is less than $min_trimmed_reads") + } + } + + ch_versions = ch_versions.mix(FASTQ_FASTQC_UMITOOLS_FASTP.out.versions.first()) + + + // MODULE: SORTMERNA as SORTMERNA_INDEX + SORTMERNA_INDEX( + [ [ id: 'idx' ], [] ], + sortmerna_fastas.map { fastas -> [ [ id: 'fastas' ], fastas ] }, + [ [], [] ] + ) + + ch_versions = ch_versions.mix(SORTMERNA_INDEX.out.versions) + + // MODULE: SORTMERNA as SORTMERNA_READS + ch_sortmerna_inputs = remove_ribo_rna + ? ch_trim_reads + | combine( + sortmerna_fastas + | map { fastas -> [ [ id: 'fastas' ], fastas ] } + | join(SORTMERNA_INDEX.out.index) + ) + : Channel.empty() + + SORTMERNA_READS( + ch_sortmerna_inputs.map { meta, reads, meta2, fastas, idx -> [ meta, reads ] }, + ch_sortmerna_inputs.map { meta, reads, meta2, fastas, idx -> [ meta2, fastas ] }, + ch_sortmerna_inputs.map { meta, reads, meta2, fastas, idx -> [ meta2, idx ] } + ) + + ch_emitted_reads = remove_ribo_rna + ? SORTMERNA_READS.out.reads + : ch_trim_reads + ch_versions = ch_versions.mix(SORTMERNA_READS.out.versions.first()) + + + + emit: + trim_reads = ch_emitted_reads // channel: [ [ id, single_end ], [ fq ] ] + reads_target = ch_reads_target // channel: [ [ id, single_end ], assembly_id ] + versions = ch_versions // channel: [ versions.yml ] +} diff --git a/subworkflows/local/purge_braker_models.nf b/subworkflows/local/purge_braker_models.nf new file mode 100644 index 0000000..bda8ce1 --- /dev/null +++ b/subworkflows/local/purge_braker_models.nf @@ -0,0 +1,96 @@ +include { GFF_TSEBRA_SPFILTERFEATUREFROMKILLLIST } from '../../subworkflows/local/gff_tsebra_spfilterfeaturefromkilllist' +include { GFFCOMPARE as COMPARE_BRAKER_TO_LIFTOFF } from '../../modules/nf-core/gffcompare/main' +include { AGAT_SPFILTERFEATUREFROMKILLLIST } from '../../modules/nf-core/agat/spfilterfeaturefromkilllist/main' +include { GFFCOMPARE as VALIDATE_PURGING_BY_AGAT } from '../../modules/nf-core/gffcompare/main' +include { AGAT_SPMERGEANNOTATIONS as MERGE_BRAKER_LIFTOFF } from '../../modules/nf-core/agat/spmergeannotations/main' + +workflow PURGE_BRAKER_MODELS { + take: + braker_gff3 // [ meta, gff3 ] + braker_hints // [ meta, gff ] + liftoff_gff3 // [ meta, gff3 ] + tsebra_config // Channel: [ cfg ] + allow_isoforms // val(true|false) + + main: + ch_versions = Channel.empty() + + // SUBWORKFLOW: GFF_TSEBRA_SPFILTERFEATUREFROMKILLLIST + GFF_TSEBRA_SPFILTERFEATUREFROMKILLLIST( + braker_gff3, + braker_hints, + tsebra_config, + allow_isoforms, + 'braker' + ) + + ch_tsebra_killed_gff = GFF_TSEBRA_SPFILTERFEATUREFROMKILLLIST.out.tsebra_killed_gff + ch_versions = ch_versions.mix(GFF_TSEBRA_SPFILTERFEATUREFROMKILLLIST.out.versions) + + // MODULE: GFFCOMPARE as COMPARE_BRAKER_TO_LIFTOFF + ch_comparison_inputs = ch_tsebra_killed_gff + | join(liftoff_gff3) + + + COMPARE_BRAKER_TO_LIFTOFF ( + ch_comparison_inputs.map { meta, braker, liftoff -> [ meta, braker ] }, + [ [], [], [] ], + ch_comparison_inputs.map { meta, braker, liftoff -> [ meta, liftoff ] }, + ) + + ch_tracking = COMPARE_BRAKER_TO_LIFTOFF.out.tracking + ch_versions = ch_versions.mix(COMPARE_BRAKER_TO_LIFTOFF.out.versions.first()) + + // COLLECTFILE: Transcript level kill list + ch_kill_list = ch_tracking + | map { meta, tracking -> + + def kept_lines = tracking.readLines() + .findAll { line -> + def cols = line.split('\t') + + ( cols[3] != 'u' ) && ( cols[3] != 'p' ) + } + + def tx_kill_list = kept_lines + .collect { line -> + def cols = line.split('\t') + + def matched = cols[4] =~ /q1:([^\|]+)\|([^\|]+)/ + + matched[0][2].trim() + }.join('\n') + + [ "${meta.id}.kill.list.txt" ] + tx_kill_list + } + | collectFile(newLine: true) + | map { file -> + [ [ id: file.baseName.replace('.kill.list', '') ], file ] + } + + // MODULE: AGAT_SPFILTERFEATUREFROMKILLLIST + ch_agat_kill_inputs = ch_tsebra_killed_gff + | join(ch_kill_list) + + + AGAT_SPFILTERFEATUREFROMKILLLIST( + ch_agat_kill_inputs.map { meta, gff, kill -> [ meta, gff ] }, + ch_agat_kill_inputs.map { meta, gff, kill -> kill }, + [] // default config + ) + + ch_braker_purged_gff = AGAT_SPFILTERFEATUREFROMKILLLIST.out.gff + ch_versions = ch_versions.mix(AGAT_SPFILTERFEATUREFROMKILLLIST.out.versions.first()) + + // Handle case where liftoff is not present + ch_all_braker_gff = ch_tsebra_killed_gff + | join(ch_braker_purged_gff, remainder:true) + | map { meta, tsebra_gff, purged_gff -> + if ( purged_gff ) { return [ meta, purged_gff ] } + if ( tsebra_gff ) { return [ meta, tsebra_gff ] } + } + + emit: + braker_purged_gff = ch_all_braker_gff // [ meta, gff3 ] + versions = ch_versions // [ versions.yml ] +} diff --git a/subworkflows/local/purge_nohit_models.nf b/subworkflows/local/purge_nohit_models.nf new file mode 100644 index 0000000..55b970e --- /dev/null +++ b/subworkflows/local/purge_nohit_models.nf @@ -0,0 +1,70 @@ +include { AGAT_SPFILTERFEATUREFROMKILLLIST } from '../../modules/nf-core/agat/spfilterfeaturefromkilllist/main' + +workflow PURGE_NOHIT_MODELS { + take: + ch_target_gff // [ meta, gff ] + ch_eggnogmapper_hits // [ meta, hits ] + val_purge_nohits // val(true|false) + + main: + ch_versions = Channel.empty() + + // COLLECTFILE: Transcript level kill list + ch_kill_list = ch_target_gff + | join(ch_eggnogmapper_hits) + | map { meta, gff, hits -> + + def tx_with_hits = hits.readLines() + .collect { it.split('\t')[0] } + .sort(false) + .unique() + + def tx_in_gff = gff.readLines() + .findAll { line -> + if ( line.startsWith('#') || line == '' ) { return false } + + def feat = line.split('\t')[2] + ( feat == 'transcript' || feat == 'mRNA' ) + } + .collect { it -> + def attrs = it.split('\t')[8] + + ( attrs =~ /ID=([^;]*)/ )[0][1] + } + .sort(false) + .unique() + + def tx_without_hits = tx_in_gff - tx_with_hits + + [ "${meta.id}.kill.list.txt" ] + tx_without_hits.join('\n') + } + | collectFile(newLine: true) + | map { file -> + [ [ id: file.baseName.replace('.kill.list', '') ], file ] + } + + // MODULE: AGAT_SPFILTERFEATUREFROMKILLLIST + ch_agat_kill_inputs = ! val_purge_nohits + ? Channel.empty() + : ch_target_gff + | join(ch_kill_list) + + + AGAT_SPFILTERFEATUREFROMKILLLIST( + ch_agat_kill_inputs.map { meta, gff, kill -> [ meta, gff ] }, + ch_agat_kill_inputs.map { meta, gff, kill -> kill }, + [] // default config + ) + + ch_target_purged_gff = AGAT_SPFILTERFEATUREFROMKILLLIST.out.gff + ch_versions = ch_versions.mix(AGAT_SPFILTERFEATUREFROMKILLLIST.out.versions.first()) + + emit: + purged_gff = ch_target_purged_gff + | mix( + val_purge_nohits + ? Channel.empty() + : ch_target_gff + ) + versions = ch_versions // [ versions.yml ] +} diff --git a/subworkflows/local/utils_nfcore_genepal_pipeline/main.nf b/subworkflows/local/utils_nfcore_genepal_pipeline/main.nf index d991642..a3932a8 100644 --- a/subworkflows/local/utils_nfcore_genepal_pipeline/main.nf +++ b/subworkflows/local/utils_nfcore_genepal_pipeline/main.nf @@ -1,5 +1,5 @@ // -// Subworkflow with functionality specific to the PlantandFoodResearch/genepal pipeline +// Subworkflow with functionality specific to the plant-food-research-open/genepal pipeline // /* @@ -39,8 +39,6 @@ workflow PIPELINE_INITIALISATION { main: - ch_versions = Channel.empty() - // // Print version and exit if required and dump pipeline parameters to JSON file // @@ -74,31 +72,213 @@ workflow PIPELINE_INITIALISATION { ) // - // Create channel from input file provided through params.input + // Create input channels // - Channel - .fromSamplesheet("input") - .map { - meta, fastq_1, fastq_2 -> - if (!fastq_2) { - return [ meta.id, meta + [ single_end:true ], [ fastq_1 ] ] - } else { - return [ meta.id, meta + [ single_end:false ], [ fastq_1, fastq_2 ] ] - } - } - .groupTuple() - .map { - validateInputSamplesheet(it) - } - .map { - meta, fastqs -> - return [ meta, fastqs.flatten() ] + ch_input = Channel.fromSamplesheet('input') + + ch_target_assembly = ch_input + | map { it -> + def tag = it[0] + def fasta = it[1] + + [ [ id: tag ], file(fasta, checkIfExists: true) ] + } + + ch_tar_assm_str = ch_input + | map { it -> + def tag = it[0].strip() + + tag + } + | collect + | map { it -> + it.join(",") + } + + ch_is_masked = ch_input + | map { it -> + def tag = it[0] + def is_masked = it[2] + + [ [ id: tag ], is_masked == "yes" ] + } + + ch_te_library = ch_input + | map { it -> + def tag = it[0] + def te_fasta = it[3] + + if ( te_fasta ) { + [ [ id:tag ], file(te_fasta, checkIfExists: true) ] + } + } + + ch_braker_annotation = ch_input + | map { it -> + def tag = it[0] + def braker_gff3 = it[4] + def hints_gff = it[5] + + if ( braker_gff3 ) { + [ + [ id: tag ], + file(braker_gff3, checkIfExists: true), + file(hints_gff, checkIfExists: true) + ] + } + } + + ch_braker_ex_asm_str = ch_braker_annotation + | map { meta, braker_gff3, hints_gff -> meta.id } + | collect + | map { it.join(",") } + | ifEmpty( "" ) + + ch_rna_branch = ! params.rna_evidence + ? Channel.empty() + : Channel.fromSamplesheet('rna_evidence') + | map { meta, f1, f2 -> + f2 + ? [ meta + [ single_end: false ], [ file(f1, checkIfExists:true), file(f2, checkIfExists:true) ] ] + : [ meta + [ single_end: true ], [ file(f1, checkIfExists:true) ] ] + } + | map { meta, files -> + [ meta + [ target_assemblies: meta.target_assemblies.split(';').sort() ], files ] + } + | branch { meta, files -> + fq: files.first().extension != 'bam' + bam: files.first().extension == 'bam' + } + + ch_rna_fq = ! params.rna_evidence + ? Channel.empty() + : ch_rna_branch.fq + | map { meta, files -> [ meta.id, meta, files ] } + | groupTuple + | combine(ch_tar_assm_str) + | map { id, metas, files, tar_assm_str -> + validateFastqMetadata(metas, files, tar_assm_str) + } + + ch_rna_bam = ! params.rna_evidence + ? Channel.empty() + : ch_rna_branch.bam + | map { meta, files -> [ meta.id, meta, files ] } + | groupTuple + | combine(ch_tar_assm_str) + | flatMap { id, metas, files, tar_assm_str -> + validateBamMetadata(metas, files, tar_assm_str) + } + + // Check if each sample for a given assembly has either bam or fastq files + ch_rna_bam + | flatMap { meta, bams -> + meta.target_assemblies.collect { [ [ meta.id, it ], 'bam' ] } + } + | join( + ch_rna_fq + | flatMap { meta, fqs -> + meta.target_assemblies.collect { [ [ meta.id, it ], 'fq' ] } } - .set { ch_samplesheet } + ) + | map { combination, bam, fq -> + error "Sample ${combination[0]} for assembly ${combination[1]} can not have both fastq and bam files" + } + + ch_rna_bam_by_assembly = ch_rna_bam + | map { meta, bams -> [ [ id: meta.target_assemblies.first() ], bams ] } + | groupTuple + | map { meta, bams -> [ meta, bams.flatten() ] } + + ch_ribo_db = params.remove_ribo_rna + ? file(params.ribo_database_manifest, checkIfExists: true) + : null + + ch_sortmerna_fastas = ch_ribo_db + ? Channel.from(ch_ribo_db ? ch_ribo_db.readLines() : null) + | map { row -> file(row, checkIfExists: true) } + | collect + : Channel.empty() + + ch_ext_prot_fastas = ( params.protein_evidence.endsWith('txt') + ? Channel.fromPath(params.protein_evidence) + | splitText + : Channel.fromPath(params.protein_evidence) + ) + | map { file_path -> + + def file_handle = ( file_path instanceof String ) + ? file(file_path.strip(), checkIfExists: true) + : file_path + + [ [ id: idFromFileName( file_handle.baseName ) ], file_handle ] + } + + + ch_liftoff_mm = ! params.liftoff_annotations + ? Channel.empty() + : Channel.fromSamplesheet('liftoff_annotations') + | multiMap { fasta, gff -> + def fastaFile = file(fasta, checkIfExists:true) + + fasta: [ [ id: idFromFileName( fastaFile.baseName ) ], fastaFile ] + gff: [ [ id: idFromFileName( fastaFile.baseName ) ], file(gff, checkIfExists:true) ] + } + + ch_liftoff_fasta = params.liftoff_annotations + ? ch_liftoff_mm.fasta + : Channel.empty() + + ch_liftoff_gff = params.liftoff_annotations + ? ch_liftoff_mm.gff + : Channel.empty() + + ch_tsebra_config = Channel.of ( file("${projectDir}/assets/tsebra-template.cfg", checkIfExists: true) ) + | map { cfg -> + def param_intron_support = params.enforce_full_intron_support ? '1.0' : '0.0' + + def param_e1 = params.allow_isoforms ? '0.1' : '0.0' + def param_e2 = params.allow_isoforms ? '0.5' : '0.0' + def param_e3 = params.allow_isoforms ? '0.05' : '0.0' + def param_e4 = params.allow_isoforms ? '0.2' : '0.0' + + [ + 'tsebra-config.cfg', + cfg + .text + .replace('PARAM_INTRON_SUPPORT', param_intron_support) + .replace('PARAM_E1', param_e1) + .replace('PARAM_E2', param_e2) + .replace('PARAM_E3', param_e3) + .replace('PARAM_E4', param_e4) + ] + } + | collectFile + + + ch_orthofinder_pep = ! params.orthofinder_annotations + ? Channel.empty() + : Channel.fromSamplesheet('orthofinder_annotations') + | map { tag, fasta -> + [ [ id: tag ], file(fasta, checkIfExists:true) ] + } emit: - samplesheet = ch_samplesheet - versions = ch_versions + target_assembly = ch_target_assembly + tar_assm_str = ch_tar_assm_str + is_masked = ch_is_masked + te_library = ch_te_library + braker_annotation = ch_braker_annotation + braker_ex_asm_str = ch_braker_ex_asm_str + rna_fq = ch_rna_fq + rna_bam = ch_rna_bam + rna_bam_by_assembly = ch_rna_bam_by_assembly + sortmerna_fastas = ch_sortmerna_fastas + ext_prot_fastas = ch_ext_prot_fastas + liftoff_fasta = ch_liftoff_fasta + liftoff_gff = ch_liftoff_gff + tsebra_config = ch_tsebra_config + orthofinder_pep = ch_orthofinder_pep } /* @@ -149,80 +329,74 @@ workflow PIPELINE_COMPLETION { */ // -// Validate channels from input samplesheet +// Additional validation // -def validateInputSamplesheet(input) { - def (metas, fastqs) = input[1..2] - - // 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 ] +def idFromFileName(fileName) { + + def trial = ( fileName + ).replaceFirst( + /\.f(ast)?q$/, '' + ).replaceFirst( + /\.f(asta|sa|a|as|aa|na)?$/, '' + ).replaceFirst( + /\.gff(3)?$/, '' + ).replaceFirst( + /\.gz$/, '' + ) + + if ( trial == fileName ) { return fileName } + + return idFromFileName ( trial ) } -// -// 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 validateFastqMetadata(metas, fqs, permAssString) { + def permAssList = permAssString.split(",") -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() + // Check if each listed assembly is permissible + metas.each { meta -> + if ( meta.target_assemblies.any { !permAssList.contains( it ) } ) { + error "Sample ${meta.id} targets ${meta.target_assemblies} which are not in $permAssList" + } + } - return reference_text -} + // Check if multiple runs of a sample have the same target assemblies + if ( metas.collect { meta -> meta.target_assemblies }.unique().size() > 1 ) { + error "Multiple runs of sample ${metas.first().id} must target same assemblies" + } -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() + // Check if multiple runs of a sample have the same endedness + if ( metas.collect { meta -> meta.single_end }.unique().size() > 1 ) { + error "Multiple runs of sample ${metas.first().id} must have same endedness" + } - // Pipeline DOI - if (meta.manifest_map.doi) { - // Using a loop to handle multiple DOIs - // Removing `https://doi.org/` to handle pipelines using DOIs vs DOI resolvers - // Removing ` ` since the manifest.doi is a string and not a proper list - def temp_doi_ref = "" - String[] manifest_doi = meta.manifest_map.doi.tokenize(",") - for (String doi_ref: manifest_doi) temp_doi_ref += "(doi: ${doi_ref.replace("https://doi.org/", "").replace(" ", "")}), " - meta["doi_text"] = temp_doi_ref.substring(0, temp_doi_ref.length() - 2) - } else meta["doi_text"] = "" - 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.
  • " + [ metas.first(), fqs ] +} - // 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 validateBamMetadata(metas, bams, permAssString) { + def permAssList = permAssString.split(",") + // Check if each listed assembly is permissible + metas.each { meta -> + if ( meta.target_assemblies.any { !permAssList.contains( it ) } ) { + error "Sample ${meta.id} targets ${meta.target_assemblies} which are not in $permAssList" + } + } - def methods_text = mqc_methods_yaml.text + // Check that when the first file is bam then the second file is absent + bams.findAll { files -> + files.first().extension == 'bam' && files.size() != 1 + } + .each { error "Sample ${metas.first().id} contains both bam and fastq pairs. When a bam file is provided as file_1, a fastq for file_2 is not permitted" } - def engine = new groovy.text.SimpleTemplateEngine() - def description_html = engine.createTemplate(methods_text).make(meta) + // Check that a bam file only targets a single assembly + bams.eachWithIndex { files, index -> + if ( files.first().extension == 'bam' && metas[index].target_assemblies.size() > 1 ) { + error "BAM file for sample ${metas.first().id} can only target one assembly: ${metas[index].target_assemblies}" + } + } - return description_html.toString() + metas.every { it.target_assemblies == metas.first().target_assemblies } + ? [ [ metas.first(), bams.flatten() ] ] + : metas.withIndex().collect { meta, index -> [ meta, bams[index].flatten() ] } } diff --git a/subworkflows/nf-core/fastq_fastqc_umitools_fastp/main.nf b/subworkflows/nf-core/fastq_fastqc_umitools_fastp/main.nf new file mode 100644 index 0000000..ab6cbb3 --- /dev/null +++ b/subworkflows/nf-core/fastq_fastqc_umitools_fastp/main.nf @@ -0,0 +1,164 @@ +// +// Read QC, UMI extraction and trimming +// + +include { FASTQC as FASTQC_RAW } from '../../../modules/nf-core/fastqc/main' +include { FASTQC as FASTQC_TRIM } from '../../../modules/nf-core/fastqc/main' +include { UMITOOLS_EXTRACT } from '../../../modules/nf-core/umitools/extract/main' +include { FASTP } from '../../../modules/nf-core/fastp/main' + +// +// Function that parses fastp json output file to get total number of reads after trimming +// +import groovy.json.JsonSlurper + +def getFastpReadsAfterFiltering(json_file, min_num_reads) { + + if ( workflow.stubRun ) { return min_num_reads } + + def Map json = (Map) new JsonSlurper().parseText(json_file.text).get('summary') + return json['after_filtering']['total_reads'].toLong() +} + +def getFastpAdapterSequence(json_file){ + + if ( workflow.stubRun ) { return "" } + + def Map json = (Map) new JsonSlurper().parseText(json_file.text) + try{ + adapter = json['adapter_cutting']['read1_adapter_sequence'] + } catch(Exception ex){ + adapter = "" + } + return adapter +} + +workflow FASTQ_FASTQC_UMITOOLS_FASTP { + take: + reads // channel: [ val(meta), [ reads ] ] + skip_fastqc // boolean: true/false + with_umi // boolean: true/false + skip_umi_extract // boolean: true/false + umi_discard_read // integer: 0, 1 or 2 + skip_trimming // boolean: true/false + adapter_fasta // file: adapter.fasta + save_trimmed_fail // boolean: true/false + save_merged // boolean: true/false + min_trimmed_reads // integer: > 0 + + main: + ch_versions = Channel.empty() + fastqc_raw_html = Channel.empty() + fastqc_raw_zip = Channel.empty() + if (!skip_fastqc) { + FASTQC_RAW ( + reads + ) + fastqc_raw_html = FASTQC_RAW.out.html + fastqc_raw_zip = FASTQC_RAW.out.zip + ch_versions = ch_versions.mix(FASTQC_RAW.out.versions.first()) + } + + umi_reads = reads + umi_log = Channel.empty() + if (with_umi && !skip_umi_extract) { + UMITOOLS_EXTRACT ( + reads + ) + umi_reads = UMITOOLS_EXTRACT.out.reads + umi_log = UMITOOLS_EXTRACT.out.log + ch_versions = ch_versions.mix(UMITOOLS_EXTRACT.out.versions.first()) + + // Discard R1 / R2 if required + if (umi_discard_read in [1,2]) { + UMITOOLS_EXTRACT + .out + .reads + .map { + meta, reads -> + meta.single_end ? [ meta, reads ] : [ meta + [single_end: true], reads[umi_discard_read % 2] ] + } + .set { umi_reads } + } + } + + trim_reads = umi_reads + trim_json = Channel.empty() + trim_html = Channel.empty() + trim_log = Channel.empty() + trim_reads_fail = Channel.empty() + trim_reads_merged = Channel.empty() + fastqc_trim_html = Channel.empty() + fastqc_trim_zip = Channel.empty() + trim_read_count = Channel.empty() + adapter_seq = Channel.empty() + + if (!skip_trimming) { + FASTP ( + umi_reads, + adapter_fasta, + false, // don't want to set discard_trimmed_pass, else there will be no reads output + save_trimmed_fail, + save_merged + ) + trim_json = FASTP.out.json + trim_html = FASTP.out.html + trim_log = FASTP.out.log + trim_reads_fail = FASTP.out.reads_fail + trim_reads_merged = FASTP.out.reads_merged + ch_versions = ch_versions.mix(FASTP.out.versions.first()) + + // + // Filter FastQ files based on minimum trimmed read count after adapter trimming + // + FASTP + .out + .reads + .join(trim_json) + .map { meta, reads, json -> [ meta, reads, getFastpReadsAfterFiltering(json, min_trimmed_reads.toLong()) ] } + .set { ch_num_trimmed_reads } + + ch_num_trimmed_reads + .filter { meta, reads, num_reads -> num_reads >= min_trimmed_reads.toLong() } + .map { meta, reads, num_reads -> [ meta, reads ] } + .set { trim_reads } + + ch_num_trimmed_reads + .map { meta, reads, num_reads -> [ meta, num_reads ] } + .set { trim_read_count } + + trim_json + .map { meta, json -> [meta, getFastpAdapterSequence(json)] } + .set { adapter_seq } + + if (!skip_fastqc) { + FASTQC_TRIM ( + trim_reads + ) + fastqc_trim_html = FASTQC_TRIM.out.html + fastqc_trim_zip = FASTQC_TRIM.out.zip + ch_versions = ch_versions.mix(FASTQC_TRIM.out.versions.first()) + } + } + + emit: + reads = trim_reads // channel: [ val(meta), [ reads ] ] + + fastqc_raw_html // channel: [ val(meta), [ html ] ] + fastqc_raw_zip // channel: [ val(meta), [ zip ] ] + + umi_log // channel: [ val(meta), [ log ] ] + adapter_seq // channel: [ val(meta), [ adapter_seq] ] + + trim_json // channel: [ val(meta), [ json ] ] + trim_html // channel: [ val(meta), [ html ] ] + trim_log // channel: [ val(meta), [ log ] ] + trim_reads_fail // channel: [ val(meta), [ fastq.gz ] ] + trim_reads_merged // channel: [ val(meta), [ fastq.gz ] ] + trim_read_count // channel: [ val(meta), val(count) ] + + fastqc_trim_html // channel: [ val(meta), [ html ] ] + fastqc_trim_zip // channel: [ val(meta), [ zip ] ] + + versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] +} diff --git a/subworkflows/nf-core/fastq_fastqc_umitools_fastp/meta.yml b/subworkflows/nf-core/fastq_fastqc_umitools_fastp/meta.yml new file mode 100644 index 0000000..9308fe9 --- /dev/null +++ b/subworkflows/nf-core/fastq_fastqc_umitools_fastp/meta.yml @@ -0,0 +1,129 @@ +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/subworkflows/yaml-schema.json +# yaml-language-server: $schema=yaml-schema.json +name: "fastq_fastqc_umitools_fastp" +description: Read QC, UMI extraction and trimming +keywords: + - fastq + - fastqc + - qc + - UMI + - trimming + - fastp +components: + - fastqc + - umitools/extract + - fastp +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test' ] + - reads: + type: file + description: | + List of input FastQ files of size 1 and 2 for single-end and paired-end data, + respectively. + - skip_fastqc: + type: boolean + description: | + Skip fastqc process + - with_umi: + type: boolean + description: | + With or without umi detection + - skip_umi_extract: + type: boolean + description: | + With or without umi extrection + - umi_discard_read: + type: integer + description: | + Discard R1 / R2 if required + - skip_trimming: + type: boolean + description: | + Allows to skip FastP execution + - adapter_fasta: + type: file + description: | + Fasta file of adapter sequences + - save_trimmed_fail: + type: boolean + description: | + Save trimmed fastqs of failed samples + - save_merged: + type: boolean + description: | + Save merged fastqs + - min_trimmed_reads: + type: integer + description: | + Inputs with fewer than this reads will be filtered out of the "reads" output channel +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test' ] + - reads: + type: file + description: > + Extracted FASTQ files. | For single-end reads, pattern is \${prefix}.umi_extract.fastq.gz. | + For paired-end reads, pattern is \${prefix}.umi_extract_{1,2}.fastq.gz. + pattern: "*.{fastq.gz}" + - fastqc_html: + type: file + description: FastQC report + pattern: "*_{fastqc.html}" + - fastqc_zip: + type: file + description: FastQC report archive + pattern: "*_{fastqc.zip}" + - log: + type: file + description: Logfile for umi_tools + pattern: "*.{log}" + - trim_json: + type: file + description: FastP Trimming report + pattern: "*.{fastp.json}" + - trim_html: + type: file + description: FastP Trimming report + pattern: "*.{fastp.html}" + - log: + type: file + description: Logfile FastP + pattern: "*.{fastp.log}" + - trim_reads_fail: + type: file + description: Trimmed fastq files failing QC + pattern: "*.{fastq.gz}" + - trim_reads_merged: + type: file + description: Trimmed and merged fastq files + pattern: "*.{fastq.gz}" + - trim_read_count: + type: integer + description: Number of reads after trimming + - fastqc_trim_html: + type: file + description: FastQC report + pattern: "*_{fastqc.html}" + - fastqc_trim_zip: + type: file + description: FastQC report archive + pattern: "*_{fastqc.zip}" + - adapter_seq: + type: string + description: | + Adapter Sequence found in read1 + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@robsyme" +maintainers: + - "@robsyme" diff --git a/subworkflows/nf-core/fastq_fastqc_umitools_fastp/tests/main.nf.test b/subworkflows/nf-core/fastq_fastqc_umitools_fastp/tests/main.nf.test new file mode 100644 index 0000000..48ba5f4 --- /dev/null +++ b/subworkflows/nf-core/fastq_fastqc_umitools_fastp/tests/main.nf.test @@ -0,0 +1,973 @@ +nextflow_workflow { + + name "Test Workflow FASTQ_FASTQC_UMITOOLS_FASTP" + script "../main.nf" + workflow "FASTQ_FASTQC_UMITOOLS_FASTP" + config './nextflow.config' + + tag "subworkflows" + tag "subworkflows_nfcore" + tag "subworkflows/fastq_fastqc_umitools_fastp" + tag "fastq_fastqc_umitools_fastp" + tag "fastqc" + tag "umitools/extract" + tag "fastp" + + + test("sarscov2 paired-end [fastq]") { + + when { + workflow { + """ + skip_fastqc = false + with_umi = false + skip_umi_extract = false + umi_discard_read = 1 + skip_trimming = false + adapter_fasta = [] + save_trimmed_fail = false + save_merged = false + min_trimmed_reads = 1 + + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) + ] + ]) + input[1] = skip_fastqc + input[2] = with_umi + input[3] = skip_umi_extract + input[4] = umi_discard_read + input[5] = skip_trimming + input[6] = adapter_fasta + input[7] = save_trimmed_fail + input[8] = save_merged + input[9] = min_trimmed_reads + """ + } + } + + then { + assertAll( + { assert workflow.success }, + { assert workflow.out.fastqc_raw_html }, + { assert workflow.out.fastqc_raw_zip }, + { assert workflow.out.fastqc_trim_html }, + { assert workflow.out.fastqc_trim_zip }, + { assert workflow.out.trim_html }, + { assert workflow.out.trim_log }, + { assert snapshot( + workflow.out.adapter_seq, + workflow.out.reads, + workflow.out.trim_json, + workflow.out.trim_read_count, + workflow.out.trim_reads_fail, + workflow.out.trim_reads_merged, + workflow.out.umi_log, + workflow.out.versions + ).match() + } + ) + } + } + + test("skip_fastqc") { + + when { + workflow { + """ + skip_fastqc = true + with_umi = false + skip_umi_extract = false + umi_discard_read = 1 + skip_trimming = false + adapter_fasta = [] + save_trimmed_fail = false + save_merged = false + min_trimmed_reads = 1 + + input[0] = Channel.of([ + [ id:'test', single_end: false ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) + ] + ]) + input[1] = skip_fastqc + input[2] = with_umi + input[3] = skip_umi_extract + input[4] = umi_discard_read + input[5] = skip_trimming + input[6] = adapter_fasta + input[7] = save_trimmed_fail + input[8] = save_merged + input[9] = min_trimmed_reads + """ + } + } + + then { + assertAll( + { assert workflow.success }, + { assert workflow.out.trim_html }, + { assert workflow.out.trim_log }, + { assert !workflow.out.fastqc_raw_html }, + { assert !workflow.out.fastqc_raw_zip }, + { assert !workflow.out.fastqc_trim_html }, + { assert !workflow.out.fastqc_trim_zip }, + { assert snapshot( + workflow.out.adapter_seq, + workflow.out.reads, + workflow.out.trim_json, + workflow.out.trim_read_count, + workflow.out.trim_reads_fail, + workflow.out.trim_reads_merged, + workflow.out.umi_log, + workflow.out.versions + ).match() + } + ) + } + } + + test("with_umi") { + + when { + workflow { + """ + skip_fastqc = false + with_umi = true + skip_umi_extract = false + umi_discard_read = 1 + skip_trimming = false + adapter_fasta = [] + save_trimmed_fail = false + save_merged = false + min_trimmed_reads = 1 + + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) + ] + ]) + input[1] = skip_fastqc + input[2] = with_umi + input[3] = skip_umi_extract + input[4] = umi_discard_read + input[5] = skip_trimming + input[6] = adapter_fasta + input[7] = save_trimmed_fail + input[8] = save_merged + input[9] = min_trimmed_reads + """ + } + } + + then { + assertAll( + { assert workflow.success }, + { assert workflow.out.fastqc_raw_html }, + { assert workflow.out.fastqc_raw_zip }, + { assert workflow.out.fastqc_trim_html }, + { assert workflow.out.fastqc_trim_zip }, + { assert workflow.out.trim_html }, + { assert workflow.out.trim_log }, + { assert snapshot( + workflow.out.adapter_seq, + workflow.out.reads, + workflow.out.trim_json, + workflow.out.trim_read_count, + workflow.out.trim_reads_fail, + workflow.out.trim_reads_merged, + workflow.out.versions + ).match() + } + ) + } + } + + + test("skip_umi_extract") { + + when { + workflow { + """ + skip_fastqc = false + with_umi = true + skip_umi_extract = true + umi_discard_read = 1 + skip_trimming = false + adapter_fasta = [] + save_trimmed_fail = false + save_merged = false + min_trimmed_reads = 1 + + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) + ] + ]) + input[1] = skip_fastqc + input[2] = with_umi + input[3] = skip_umi_extract + input[4] = umi_discard_read + input[5] = skip_trimming + input[6] = adapter_fasta + input[7] = save_trimmed_fail + input[8] = save_merged + input[9] = min_trimmed_reads + """ + } + } + + then { + assertAll( + { assert workflow.success }, + { assert workflow.out.fastqc_raw_html }, + { assert workflow.out.fastqc_raw_zip }, + { assert workflow.out.fastqc_trim_html }, + { assert workflow.out.fastqc_trim_zip }, + { assert workflow.out.trim_html }, + { assert workflow.out.trim_log }, + { assert snapshot( + workflow.out.adapter_seq, + workflow.out.reads, + workflow.out.trim_json, + workflow.out.trim_read_count, + workflow.out.trim_reads_fail, + workflow.out.trim_reads_merged, + workflow.out.umi_log, + workflow.out.versions + ).match() + } + ) + } + } + + test("umi_discard_read = 2") { + + when { + workflow { + """ + skip_fastqc = false + with_umi = true + skip_umi_extract = true + umi_discard_read = 2 + skip_trimming = false + adapter_fasta = [] + save_trimmed_fail = false + save_merged = false + min_trimmed_reads = 1 + + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) + ] + ]) + input[1] = skip_fastqc + input[2] = with_umi + input[3] = skip_umi_extract + input[4] = umi_discard_read + input[5] = skip_trimming + input[6] = adapter_fasta + input[7] = save_trimmed_fail + input[8] = save_merged + input[9] = min_trimmed_reads + """ + } + } + + then { + assertAll( + { assert workflow.success }, + { assert workflow.out.fastqc_raw_html }, + { assert workflow.out.fastqc_raw_zip }, + { assert workflow.out.fastqc_trim_html }, + { assert workflow.out.fastqc_trim_zip }, + { assert workflow.out.trim_html }, + { assert workflow.out.trim_log }, + { assert snapshot( + workflow.out.adapter_seq, + workflow.out.reads, + workflow.out.trim_json, + workflow.out.trim_read_count, + workflow.out.trim_reads_fail, + workflow.out.trim_reads_merged, + workflow.out.umi_log, + workflow.out.versions + ).match() + } + ) + } + } + + test("skip_trimming") { + + when { + workflow { + """ + skip_fastqc = false + with_umi = false + skip_umi_extract = false + umi_discard_read = 1 + skip_trimming = true + adapter_fasta = [] + save_trimmed_fail = false + save_merged = false + min_trimmed_reads = 1 + + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) + ] + ]) + input[1] = skip_fastqc + input[2] = with_umi + input[3] = skip_umi_extract + input[4] = umi_discard_read + input[5] = skip_trimming + input[6] = adapter_fasta + input[7] = save_trimmed_fail + input[8] = save_merged + input[9] = min_trimmed_reads + """ + } + } + + then { + assertAll( + { assert workflow.success }, + { assert workflow.out.fastqc_raw_html }, + { assert workflow.out.fastqc_raw_zip }, + { assert !workflow.out.fastqc_trim_html }, + { assert !workflow.out.fastqc_trim_zip }, + { assert !workflow.out.trim_html }, + { assert !workflow.out.trim_log }, + { assert snapshot( + // If we skip trimming then input is output, so not snapshotting + workflow.out.adapter_seq, + workflow.out.reads.get(0).get(0), // Reads meta map + workflow.out.trim_json, + workflow.out.trim_read_count, + workflow.out.trim_reads_fail, + workflow.out.trim_reads_merged, + workflow.out.umi_log, + workflow.out.versions + ).match() + } + ) + } + } + + test("save_trimmed_fail") { + + config './nextflow.save_trimmed.config' + + when { + workflow { + """ + skip_fastqc = false + with_umi = false + skip_umi_extract = false + umi_discard_read = 1 + skip_trimming = false + adapter_fasta = [] + save_trimmed_fail = true + save_merged = false + min_trimmed_reads = 1 + + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) + ] + ]) + input[1] = skip_fastqc + input[2] = with_umi + input[3] = skip_umi_extract + input[4] = umi_discard_read + input[5] = skip_trimming + input[6] = adapter_fasta + input[7] = save_trimmed_fail + input[8] = save_merged + input[9] = min_trimmed_reads + """ + } + } + + then { + assertAll( + { assert workflow.success }, + { assert workflow.out.fastqc_raw_html }, + { assert workflow.out.fastqc_raw_zip }, + { assert workflow.out.fastqc_trim_html }, + { assert workflow.out.fastqc_trim_zip }, + { assert workflow.out.trim_html }, + { assert workflow.out.trim_log }, + { assert snapshot( + workflow.out.adapter_seq, + workflow.out.reads, + workflow.out.trim_json, + workflow.out.trim_read_count, + workflow.out.trim_reads_fail, + workflow.out.trim_reads_merged, + workflow.out.umi_log, + workflow.out.versions + ).match() + } + ) + } + } + + test("save_merged") { + + when { + workflow { + """ + skip_fastqc = false + with_umi = false + skip_umi_extract = false + umi_discard_read = 1 + skip_trimming = false + adapter_fasta = [] + save_trimmed_fail = false + save_merged = true + min_trimmed_reads = 1 + + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) + ] + ]) + input[1] = skip_fastqc + input[2] = with_umi + input[3] = skip_umi_extract + input[4] = umi_discard_read + input[5] = skip_trimming + input[6] = adapter_fasta + input[7] = save_trimmed_fail + input[8] = save_merged + input[9] = min_trimmed_reads + """ + } + } + + then { + assertAll( + { assert workflow.success }, + { assert workflow.out.fastqc_raw_html }, + { assert workflow.out.fastqc_raw_zip }, + { assert workflow.out.fastqc_trim_html }, + { assert workflow.out.fastqc_trim_zip }, + { assert workflow.out.trim_html }, + { assert workflow.out.trim_log }, + { assert snapshot( + workflow.out.adapter_seq, + workflow.out.reads, + workflow.out.trim_json, + workflow.out.trim_read_count, + workflow.out.trim_reads_fail, + workflow.out.trim_reads_merged, + workflow.out.umi_log, + workflow.out.versions + ).match() + } + ) + } + } + + test("min_trimmed_reads = 26") { + // Subworkflow should stop after FASTP which trims down to 25 reads + + when { + workflow { + """ + skip_fastqc = false + with_umi = false + skip_umi_extract = false + umi_discard_read = 1 + skip_trimming = false + adapter_fasta = [] + save_trimmed_fail = false + save_merged = true + min_trimmed_reads = 26 + + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) + ] + ]) + input[1] = skip_fastqc + input[2] = with_umi + input[3] = skip_umi_extract + input[4] = umi_discard_read + input[5] = skip_trimming + input[6] = adapter_fasta + input[7] = save_trimmed_fail + input[8] = save_merged + input[9] = min_trimmed_reads + """ + } + } + + then { + assertAll( + { assert workflow.success }, + { assert workflow.out.fastqc_raw_html }, + { assert workflow.out.fastqc_raw_zip }, + { assert workflow.out.fastqc_trim_html }, + { assert workflow.out.fastqc_trim_zip }, + { assert workflow.out.trim_html }, + { assert workflow.out.trim_log }, + { assert snapshot( + workflow.out.adapter_seq, + workflow.out.reads, + workflow.out.trim_json, + workflow.out.trim_read_count, + workflow.out.trim_reads_fail, + workflow.out.trim_reads_merged, + workflow.out.umi_log, + workflow.out.versions + ).match() + } + ) + } + } + + test("sarscov2 paired-end [fastq] - stub") { + + options '-stub' + + when { + workflow { + """ + skip_fastqc = false + with_umi = false + skip_umi_extract = false + umi_discard_read = 1 + skip_trimming = false + adapter_fasta = [] + save_trimmed_fail = false + save_merged = false + min_trimmed_reads = 1 + + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) + ] + ]) + input[1] = skip_fastqc + input[2] = with_umi + input[3] = skip_umi_extract + input[4] = umi_discard_read + input[5] = skip_trimming + input[6] = adapter_fasta + input[7] = save_trimmed_fail + input[8] = save_merged + input[9] = min_trimmed_reads + """ + } + } + + then { + assertAll( + { assert workflow.success }, + { assert snapshot(workflow.out).match() } + ) + } + } + + test("skip_fastqc - stub") { + + options "-stub" + + when { + workflow { + """ + skip_fastqc = true + with_umi = false + skip_umi_extract = false + umi_discard_read = 1 + skip_trimming = false + adapter_fasta = [] + save_trimmed_fail = false + save_merged = false + min_trimmed_reads = 1 + + input[0] = Channel.of([ + [ id:'test', single_end: false ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) + ] + ]) + input[1] = skip_fastqc + input[2] = with_umi + input[3] = skip_umi_extract + input[4] = umi_discard_read + input[5] = skip_trimming + input[6] = adapter_fasta + input[7] = save_trimmed_fail + input[8] = save_merged + input[9] = min_trimmed_reads + """ + } + } + + then { + assertAll( + { assert workflow.success }, + { assert snapshot(workflow.out).match() } + ) + } + } + + test("with_umi - stub") { + + options "-stub" + + when { + workflow { + """ + skip_fastqc = false + with_umi = true + skip_umi_extract = false + umi_discard_read = 1 + skip_trimming = false + adapter_fasta = [] + save_trimmed_fail = false + save_merged = false + min_trimmed_reads = 1 + + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) + ] + ]) + input[1] = skip_fastqc + input[2] = with_umi + input[3] = skip_umi_extract + input[4] = umi_discard_read + input[5] = skip_trimming + input[6] = adapter_fasta + input[7] = save_trimmed_fail + input[8] = save_merged + input[9] = min_trimmed_reads + """ + } + } + + then { + assertAll( + { assert workflow.success }, + { assert snapshot(workflow.out).match() } + ) + } + } + + + test("skip_umi_extract - stub") { + + options "-stub" + + when { + workflow { + """ + skip_fastqc = false + with_umi = true + skip_umi_extract = true + umi_discard_read = 1 + skip_trimming = false + adapter_fasta = [] + save_trimmed_fail = false + save_merged = false + min_trimmed_reads = 1 + + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) + ] + ]) + input[1] = skip_fastqc + input[2] = with_umi + input[3] = skip_umi_extract + input[4] = umi_discard_read + input[5] = skip_trimming + input[6] = adapter_fasta + input[7] = save_trimmed_fail + input[8] = save_merged + input[9] = min_trimmed_reads + """ + } + } + + then { + assertAll( + { assert workflow.success }, + { assert snapshot(workflow.out).match() } + ) + } + } + + test("umi_discard_read = 2 - stub") { + + options "-stub" + + when { + workflow { + """ + skip_fastqc = false + with_umi = true + skip_umi_extract = true + umi_discard_read = 2 + skip_trimming = false + adapter_fasta = [] + save_trimmed_fail = false + save_merged = false + min_trimmed_reads = 1 + + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) + ] + ]) + input[1] = skip_fastqc + input[2] = with_umi + input[3] = skip_umi_extract + input[4] = umi_discard_read + input[5] = skip_trimming + input[6] = adapter_fasta + input[7] = save_trimmed_fail + input[8] = save_merged + input[9] = min_trimmed_reads + """ + } + } + + then { + assertAll( + { assert workflow.success }, + { assert snapshot(workflow.out).match() } + ) + } + } + + test("skip_trimming - stub") { + + options "-stub" + + when { + workflow { + """ + skip_fastqc = false + with_umi = false + skip_umi_extract = false + umi_discard_read = 1 + skip_trimming = true + adapter_fasta = [] + save_trimmed_fail = false + save_merged = false + min_trimmed_reads = 1 + + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) + ] + ]) + input[1] = skip_fastqc + input[2] = with_umi + input[3] = skip_umi_extract + input[4] = umi_discard_read + input[5] = skip_trimming + input[6] = adapter_fasta + input[7] = save_trimmed_fail + input[8] = save_merged + input[9] = min_trimmed_reads + """ + } + } + + then { + assertAll( + { assert workflow.success }, + { assert snapshot( + workflow.out.adapter_seq, + workflow.out.fastqc_raw_html, + workflow.out.fastqc_raw_zip, + workflow.out.fastqc_trim_html, + workflow.out.fastqc_trim_zip, + workflow.out.trim_html, + workflow.out.trim_json, + workflow.out.trim_log, + workflow.out.trim_read_count, + workflow.out.trim_reads_fail, + workflow.out.trim_reads_merged, + workflow.out.umi_log, + workflow.out.versions).match() } + ) + } + } + + test("save_trimmed_fail - stub") { + + options "-stub" + + config './nextflow.save_trimmed.config' + + when { + workflow { + """ + skip_fastqc = false + with_umi = false + skip_umi_extract = false + umi_discard_read = 1 + skip_trimming = false + adapter_fasta = [] + save_trimmed_fail = true + save_merged = false + min_trimmed_reads = 1 + + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) + ] + ]) + input[1] = skip_fastqc + input[2] = with_umi + input[3] = skip_umi_extract + input[4] = umi_discard_read + input[5] = skip_trimming + input[6] = adapter_fasta + input[7] = save_trimmed_fail + input[8] = save_merged + input[9] = min_trimmed_reads + """ + } + } + + then { + assertAll( + { assert workflow.success }, + { assert snapshot(workflow.out).match() } + ) + } + } + + test("save_merged - stub") { + + options "-stub" + + when { + workflow { + """ + skip_fastqc = false + with_umi = false + skip_umi_extract = false + umi_discard_read = 1 + skip_trimming = false + adapter_fasta = [] + save_trimmed_fail = false + save_merged = true + min_trimmed_reads = 1 + + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) + ] + ]) + input[1] = skip_fastqc + input[2] = with_umi + input[3] = skip_umi_extract + input[4] = umi_discard_read + input[5] = skip_trimming + input[6] = adapter_fasta + input[7] = save_trimmed_fail + input[8] = save_merged + input[9] = min_trimmed_reads + """ + } + } + + then { + assertAll( + { assert workflow.success }, + { assert snapshot(workflow.out).match() } + ) + } + } + + test("min_trimmed_reads = 26 - stub") { + // Subworkflow should stop after FASTP which trims down to 25 reads + + options "-stub" + + when { + workflow { + """ + skip_fastqc = false + with_umi = false + skip_umi_extract = false + umi_discard_read = 1 + skip_trimming = false + adapter_fasta = [] + save_trimmed_fail = false + save_merged = true + min_trimmed_reads = 26 + + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) + ] + ]) + input[1] = skip_fastqc + input[2] = with_umi + input[3] = skip_umi_extract + input[4] = umi_discard_read + input[5] = skip_trimming + input[6] = adapter_fasta + input[7] = save_trimmed_fail + input[8] = save_merged + input[9] = min_trimmed_reads + """ + } + } + + then { + assertAll( + { assert workflow.success }, + { assert snapshot(workflow.out).match() } + ) + } + } +} diff --git a/subworkflows/nf-core/fastq_fastqc_umitools_fastp/tests/main.nf.test.snap b/subworkflows/nf-core/fastq_fastqc_umitools_fastp/tests/main.nf.test.snap new file mode 100644 index 0000000..e7d1f51 --- /dev/null +++ b/subworkflows/nf-core/fastq_fastqc_umitools_fastp/tests/main.nf.test.snap @@ -0,0 +1,2407 @@ +{ + "skip_fastqc": { + "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + "unspecified" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,67b2bbae47f073e05a97a9c2edce23c7", + "test_2.fastp.fastq.gz:md5,25cbdca08e2083dbd4f0502de6b62f39" + ] + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,1e0f8e27e71728e2b63fc64086be95cd" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + 198 + ] + ], + [ + + ], + [ + + ], + [ + + ], + [ + "versions.yml:md5,85bd0117e5778fff18e3920972a296ad" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T16:56:01.933832" + }, + "save_trimmed_fail": { + "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + "unspecified" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,6ff32a64c5188b9a9192be1398c262c7", + "test_2.fastp.fastq.gz:md5,db0cb7c9977e94ac2b4b446ebd017a8a" + ] + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,4c3268ddb50ea5b33125984776aa3519" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + 162 + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.paired.fail.fastq.gz:md5,409b687c734cedd7a1fec14d316e1366", + "test_1.fail.fastq.gz:md5,4f273cf3159c13f79e8ffae12f5661f6", + "test_2.fail.fastq.gz:md5,f97b9edefb5649aab661fbc9e71fc995" + ] + ] + ], + [ + + ], + [ + + ], + [ + "versions.yml:md5,85bd0117e5778fff18e3920972a296ad", + "versions.yml:md5,c50aa59475ab901bc6f9a2cf7b1a14e0", + "versions.yml:md5,f3dcaae948e8eed92b4a5557b4c6668e" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T16:57:38.736" + }, + "skip_umi_extract": { + "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + "unspecified" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,67b2bbae47f073e05a97a9c2edce23c7", + "test_2.fastp.fastq.gz:md5,25cbdca08e2083dbd4f0502de6b62f39" + ] + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,1e0f8e27e71728e2b63fc64086be95cd" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + 198 + ] + ], + [ + + ], + [ + + ], + [ + + ], + [ + "versions.yml:md5,85bd0117e5778fff18e3920972a296ad", + "versions.yml:md5,c50aa59475ab901bc6f9a2cf7b1a14e0", + "versions.yml:md5,f3dcaae948e8eed92b4a5557b4c6668e" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T16:56:47.905105" + }, + "umi_discard_read = 2": { + "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + "unspecified" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,67b2bbae47f073e05a97a9c2edce23c7", + "test_2.fastp.fastq.gz:md5,25cbdca08e2083dbd4f0502de6b62f39" + ] + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,1e0f8e27e71728e2b63fc64086be95cd" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + 198 + ] + ], + [ + + ], + [ + + ], + [ + + ], + [ + "versions.yml:md5,85bd0117e5778fff18e3920972a296ad", + "versions.yml:md5,c50aa59475ab901bc6f9a2cf7b1a14e0", + "versions.yml:md5,f3dcaae948e8eed92b4a5557b4c6668e" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T16:57:05.436744" + }, + "umi_discard_read = 2 - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "10": [ + [ + { + "id": "test", + "single_end": false + }, + 1 + ] + ], + "11": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "12": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "13": [ + "versions.yml:md5,85bd0117e5778fff18e3920972a296ad", + "versions.yml:md5,c50aa59475ab901bc6f9a2cf7b1a14e0", + "versions.yml:md5,f3dcaae948e8eed92b4a5557b4c6668e" + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + + ], + "4": [ + [ + { + "id": "test", + "single_end": false + }, + "" + ] + ], + "5": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "6": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "7": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "8": [ + + ], + "9": [ + + ], + "adapter_seq": [ + [ + { + "id": "test", + "single_end": false + }, + "" + ] + ], + "fastqc_raw_html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "fastqc_raw_zip": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "fastqc_trim_html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "fastqc_trim_zip": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "reads": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "trim_html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "trim_json": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "trim_log": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "trim_read_count": [ + [ + { + "id": "test", + "single_end": false + }, + 1 + ] + ], + "trim_reads_fail": [ + + ], + "trim_reads_merged": [ + + ], + "umi_log": [ + + ], + "versions": [ + "versions.yml:md5,85bd0117e5778fff18e3920972a296ad", + "versions.yml:md5,c50aa59475ab901bc6f9a2cf7b1a14e0", + "versions.yml:md5,f3dcaae948e8eed92b4a5557b4c6668e" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T16:59:27.273892" + }, + "skip_trimming - stub": { + "content": [ + [ + + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + [ + + ], + [ + + ], + [ + + ], + [ + + ], + [ + + ], + [ + + ], + [ + + ], + [ + + ], + [ + + ], + [ + "versions.yml:md5,f3dcaae948e8eed92b4a5557b4c6668e" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T16:59:39.247758" + }, + "save_merged": { + "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + "unspecified" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,54b726a55e992a869fd3fa778afe1672", + "test_2.fastp.fastq.gz:md5,29d3b33b869f7b63417b8ff07bb128ba" + ] + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,b712fd68ed0322f4bec49ff2a5237fcc" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + 75 + ] + ], + [ + + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.merged.fastq.gz:md5,c873bb1ab3fa859dcc47306465e749d5" + ] + ], + [ + + ], + [ + "versions.yml:md5,85bd0117e5778fff18e3920972a296ad", + "versions.yml:md5,c50aa59475ab901bc6f9a2cf7b1a14e0", + "versions.yml:md5,f3dcaae948e8eed92b4a5557b4c6668e" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T16:57:57.472342" + }, + "skip_trimming": { + "content": [ + [ + + ], + { + "id": "test", + "single_end": false + }, + [ + + ], + [ + + ], + [ + + ], + [ + + ], + [ + + ], + [ + "versions.yml:md5,f3dcaae948e8eed92b4a5557b4c6668e" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T16:57:19.875543" + }, + "with_umi": { + "content": [ + [ + [ + { + "id": "test", + "single_end": true + }, + "" + ] + ], + [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.fastq.gz:md5,ba8c6c3a7ce718d9a2c5857e2edf53bc" + ] + ], + [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.json:md5,d39c5c6d9a2e35fb60d26ced46569af6" + ] + ], + [ + [ + { + "id": "test", + "single_end": true + }, + 99 + ] + ], + [ + + ], + [ + + ], + [ + "versions.yml:md5,01f264f78de3c6d893c449cc6d3cd721", + "versions.yml:md5,85bd0117e5778fff18e3920972a296ad", + "versions.yml:md5,c50aa59475ab901bc6f9a2cf7b1a14e0", + "versions.yml:md5,f3dcaae948e8eed92b4a5557b4c6668e" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T16:56:26.778625" + }, + "min_trimmed_reads = 26": { + "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + "unspecified" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,54b726a55e992a869fd3fa778afe1672", + "test_2.fastp.fastq.gz:md5,29d3b33b869f7b63417b8ff07bb128ba" + ] + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,b712fd68ed0322f4bec49ff2a5237fcc" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + 75 + ] + ], + [ + + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.merged.fastq.gz:md5,c873bb1ab3fa859dcc47306465e749d5" + ] + ], + [ + + ], + [ + "versions.yml:md5,85bd0117e5778fff18e3920972a296ad", + "versions.yml:md5,c50aa59475ab901bc6f9a2cf7b1a14e0", + "versions.yml:md5,f3dcaae948e8eed92b4a5557b4c6668e" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T16:58:16.36697" + }, + "min_trimmed_reads = 26 - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "10": [ + [ + { + "id": "test", + "single_end": false + }, + 26 + ] + ], + "11": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "12": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "13": [ + "versions.yml:md5,85bd0117e5778fff18e3920972a296ad", + "versions.yml:md5,c50aa59475ab901bc6f9a2cf7b1a14e0", + "versions.yml:md5,f3dcaae948e8eed92b4a5557b4c6668e" + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + + ], + "4": [ + [ + { + "id": "test", + "single_end": false + }, + "" + ] + ], + "5": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "6": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "7": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "8": [ + + ], + "9": [ + [ + { + "id": "test", + "single_end": false + }, + "test.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "adapter_seq": [ + [ + { + "id": "test", + "single_end": false + }, + "" + ] + ], + "fastqc_raw_html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "fastqc_raw_zip": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "fastqc_trim_html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "fastqc_trim_zip": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "reads": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "trim_html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "trim_json": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "trim_log": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "trim_read_count": [ + [ + { + "id": "test", + "single_end": false + }, + 26 + ] + ], + "trim_reads_fail": [ + + ], + "trim_reads_merged": [ + [ + { + "id": "test", + "single_end": false + }, + "test.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "umi_log": [ + + ], + "versions": [ + "versions.yml:md5,85bd0117e5778fff18e3920972a296ad", + "versions.yml:md5,c50aa59475ab901bc6f9a2cf7b1a14e0", + "versions.yml:md5,f3dcaae948e8eed92b4a5557b4c6668e" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T17:00:16.524361" + }, + "with_umi - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "10": [ + [ + { + "id": "test", + "single_end": true + }, + 1 + ] + ], + "11": [ + [ + { + "id": "test", + "single_end": true + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "12": [ + [ + { + "id": "test", + "single_end": true + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "13": [ + "versions.yml:md5,01f264f78de3c6d893c449cc6d3cd721", + "versions.yml:md5,85bd0117e5778fff18e3920972a296ad", + "versions.yml:md5,c50aa59475ab901bc6f9a2cf7b1a14e0", + "versions.yml:md5,f3dcaae948e8eed92b4a5557b4c6668e" + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + [ + { + "id": "test", + "single_end": false + }, + "test.umi_extract.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "4": [ + [ + { + "id": "test", + "single_end": true + }, + "" + ] + ], + "5": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "6": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "7": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "8": [ + + ], + "9": [ + + ], + "adapter_seq": [ + [ + { + "id": "test", + "single_end": true + }, + "" + ] + ], + "fastqc_raw_html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "fastqc_raw_zip": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "fastqc_trim_html": [ + [ + { + "id": "test", + "single_end": true + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "fastqc_trim_zip": [ + [ + { + "id": "test", + "single_end": true + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "reads": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "trim_html": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "trim_json": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "trim_log": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "trim_read_count": [ + [ + { + "id": "test", + "single_end": true + }, + 1 + ] + ], + "trim_reads_fail": [ + + ], + "trim_reads_merged": [ + + ], + "umi_log": [ + [ + { + "id": "test", + "single_end": false + }, + "test.umi_extract.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,01f264f78de3c6d893c449cc6d3cd721", + "versions.yml:md5,85bd0117e5778fff18e3920972a296ad", + "versions.yml:md5,c50aa59475ab901bc6f9a2cf7b1a14e0", + "versions.yml:md5,f3dcaae948e8eed92b4a5557b4c6668e" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T16:58:56.42517" + }, + "skip_fastqc - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "1": [ + + ], + "10": [ + [ + { + "id": "test", + "single_end": false + }, + 1 + ] + ], + "11": [ + + ], + "12": [ + + ], + "13": [ + "versions.yml:md5,85bd0117e5778fff18e3920972a296ad" + ], + "2": [ + + ], + "3": [ + + ], + "4": [ + [ + { + "id": "test", + "single_end": false + }, + "" + ] + ], + "5": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "6": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "7": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "8": [ + + ], + "9": [ + + ], + "adapter_seq": [ + [ + { + "id": "test", + "single_end": false + }, + "" + ] + ], + "fastqc_raw_html": [ + + ], + "fastqc_raw_zip": [ + + ], + "fastqc_trim_html": [ + + ], + "fastqc_trim_zip": [ + + ], + "reads": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "trim_html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "trim_json": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "trim_log": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "trim_read_count": [ + [ + { + "id": "test", + "single_end": false + }, + 1 + ] + ], + "trim_reads_fail": [ + + ], + "trim_reads_merged": [ + + ], + "umi_log": [ + + ], + "versions": [ + "versions.yml:md5,85bd0117e5778fff18e3920972a296ad" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T16:58:41.207281" + }, + "save_merged - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "10": [ + [ + { + "id": "test", + "single_end": false + }, + 1 + ] + ], + "11": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "12": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "13": [ + "versions.yml:md5,85bd0117e5778fff18e3920972a296ad", + "versions.yml:md5,c50aa59475ab901bc6f9a2cf7b1a14e0", + "versions.yml:md5,f3dcaae948e8eed92b4a5557b4c6668e" + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + + ], + "4": [ + [ + { + "id": "test", + "single_end": false + }, + "" + ] + ], + "5": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "6": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "7": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "8": [ + + ], + "9": [ + [ + { + "id": "test", + "single_end": false + }, + "test.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "adapter_seq": [ + [ + { + "id": "test", + "single_end": false + }, + "" + ] + ], + "fastqc_raw_html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "fastqc_raw_zip": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "fastqc_trim_html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "fastqc_trim_zip": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "reads": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "trim_html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "trim_json": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "trim_log": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "trim_read_count": [ + [ + { + "id": "test", + "single_end": false + }, + 1 + ] + ], + "trim_reads_fail": [ + + ], + "trim_reads_merged": [ + [ + { + "id": "test", + "single_end": false + }, + "test.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "umi_log": [ + + ], + "versions": [ + "versions.yml:md5,85bd0117e5778fff18e3920972a296ad", + "versions.yml:md5,c50aa59475ab901bc6f9a2cf7b1a14e0", + "versions.yml:md5,f3dcaae948e8eed92b4a5557b4c6668e" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T17:00:03.695409" + }, + "sarscov2 paired-end [fastq]": { + "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + "unspecified" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,67b2bbae47f073e05a97a9c2edce23c7", + "test_2.fastp.fastq.gz:md5,25cbdca08e2083dbd4f0502de6b62f39" + ] + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,1e0f8e27e71728e2b63fc64086be95cd" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + 198 + ] + ], + [ + + ], + [ + + ], + [ + + ], + [ + "versions.yml:md5,85bd0117e5778fff18e3920972a296ad", + "versions.yml:md5,c50aa59475ab901bc6f9a2cf7b1a14e0", + "versions.yml:md5,f3dcaae948e8eed92b4a5557b4c6668e" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T16:55:50.614571" + }, + "sarscov2 paired-end [fastq] - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "10": [ + [ + { + "id": "test", + "single_end": false + }, + 1 + ] + ], + "11": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "12": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "13": [ + "versions.yml:md5,85bd0117e5778fff18e3920972a296ad", + "versions.yml:md5,c50aa59475ab901bc6f9a2cf7b1a14e0", + "versions.yml:md5,f3dcaae948e8eed92b4a5557b4c6668e" + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + + ], + "4": [ + [ + { + "id": "test", + "single_end": false + }, + "" + ] + ], + "5": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "6": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "7": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "8": [ + + ], + "9": [ + + ], + "adapter_seq": [ + [ + { + "id": "test", + "single_end": false + }, + "" + ] + ], + "fastqc_raw_html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "fastqc_raw_zip": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "fastqc_trim_html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "fastqc_trim_zip": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "reads": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "trim_html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "trim_json": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "trim_log": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "trim_read_count": [ + [ + { + "id": "test", + "single_end": false + }, + 1 + ] + ], + "trim_reads_fail": [ + + ], + "trim_reads_merged": [ + + ], + "umi_log": [ + + ], + "versions": [ + "versions.yml:md5,85bd0117e5778fff18e3920972a296ad", + "versions.yml:md5,c50aa59475ab901bc6f9a2cf7b1a14e0", + "versions.yml:md5,f3dcaae948e8eed92b4a5557b4c6668e" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T16:58:29.296468" + }, + "save_trimmed_fail - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "10": [ + [ + { + "id": "test", + "single_end": false + }, + 1 + ] + ], + "11": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "12": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "13": [ + "versions.yml:md5,85bd0117e5778fff18e3920972a296ad", + "versions.yml:md5,c50aa59475ab901bc6f9a2cf7b1a14e0", + "versions.yml:md5,f3dcaae948e8eed92b4a5557b4c6668e" + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + + ], + "4": [ + [ + { + "id": "test", + "single_end": false + }, + "" + ] + ], + "5": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "6": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "7": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "8": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.paired.fail.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_1.fail.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.fail.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "9": [ + + ], + "adapter_seq": [ + [ + { + "id": "test", + "single_end": false + }, + "" + ] + ], + "fastqc_raw_html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "fastqc_raw_zip": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "fastqc_trim_html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "fastqc_trim_zip": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "reads": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "trim_html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "trim_json": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "trim_log": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "trim_read_count": [ + [ + { + "id": "test", + "single_end": false + }, + 1 + ] + ], + "trim_reads_fail": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.paired.fail.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_1.fail.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.fail.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "trim_reads_merged": [ + + ], + "umi_log": [ + + ], + "versions": [ + "versions.yml:md5,85bd0117e5778fff18e3920972a296ad", + "versions.yml:md5,c50aa59475ab901bc6f9a2cf7b1a14e0", + "versions.yml:md5,f3dcaae948e8eed92b4a5557b4c6668e" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T16:59:51.615894" + }, + "skip_umi_extract - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "10": [ + [ + { + "id": "test", + "single_end": false + }, + 1 + ] + ], + "11": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "12": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "13": [ + "versions.yml:md5,85bd0117e5778fff18e3920972a296ad", + "versions.yml:md5,c50aa59475ab901bc6f9a2cf7b1a14e0", + "versions.yml:md5,f3dcaae948e8eed92b4a5557b4c6668e" + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + + ], + "4": [ + [ + { + "id": "test", + "single_end": false + }, + "" + ] + ], + "5": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "6": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "7": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "8": [ + + ], + "9": [ + + ], + "adapter_seq": [ + [ + { + "id": "test", + "single_end": false + }, + "" + ] + ], + "fastqc_raw_html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "fastqc_raw_zip": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "fastqc_trim_html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "fastqc_trim_zip": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "reads": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "trim_html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "trim_json": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "trim_log": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "trim_read_count": [ + [ + { + "id": "test", + "single_end": false + }, + 1 + ] + ], + "trim_reads_fail": [ + + ], + "trim_reads_merged": [ + + ], + "umi_log": [ + + ], + "versions": [ + "versions.yml:md5,85bd0117e5778fff18e3920972a296ad", + "versions.yml:md5,c50aa59475ab901bc6f9a2cf7b1a14e0", + "versions.yml:md5,f3dcaae948e8eed92b4a5557b4c6668e" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T16:59:12.592278" + } +} \ No newline at end of file diff --git a/subworkflows/nf-core/fastq_fastqc_umitools_fastp/tests/nextflow.config b/subworkflows/nf-core/fastq_fastqc_umitools_fastp/tests/nextflow.config new file mode 100644 index 0000000..0174cae --- /dev/null +++ b/subworkflows/nf-core/fastq_fastqc_umitools_fastp/tests/nextflow.config @@ -0,0 +1,11 @@ +process { + + withName: UMITOOLS_EXTRACT { + ext.args = '--bc-pattern="NNNN" --bc-pattern2="NNNN"' + } + + withName: UMICOLLAPSE { + ext.prefix = { "${meta.id}.dedup" } + } + +} diff --git a/subworkflows/nf-core/fastq_fastqc_umitools_fastp/tests/nextflow.save_trimmed.config b/subworkflows/nf-core/fastq_fastqc_umitools_fastp/tests/nextflow.save_trimmed.config new file mode 100644 index 0000000..21207ad --- /dev/null +++ b/subworkflows/nf-core/fastq_fastqc_umitools_fastp/tests/nextflow.save_trimmed.config @@ -0,0 +1,6 @@ +process { + // Make filtering more aggressive to make more reads fail + withName: FASTP { + ext.args = "-e 30" + } +} diff --git a/subworkflows/nf-core/fastq_fastqc_umitools_fastp/tests/tags.yml b/subworkflows/nf-core/fastq_fastqc_umitools_fastp/tests/tags.yml new file mode 100644 index 0000000..84a4b56 --- /dev/null +++ b/subworkflows/nf-core/fastq_fastqc_umitools_fastp/tests/tags.yml @@ -0,0 +1,2 @@ +subworkflows/fastq_fastqc_umitools_fastp: + - subworkflows/nf-core/fastq_fastqc_umitools_fastp/** diff --git a/tests/minimal/assemblysheet.csv b/tests/minimal/assemblysheet.csv new file mode 100644 index 0000000..a77d36a --- /dev/null +++ b/tests/minimal/assemblysheet.csv @@ -0,0 +1,2 @@ +tag,fasta,is_masked +a_thaliana,https://raw.githubusercontent.com/Gaius-Augustus/BRAKER/f58479fe5bb13a9e51c3ca09cb9e137cab3b8471/example/genome.fa,yes diff --git a/tests/minimal/params.json b/tests/minimal/params.json new file mode 100644 index 0000000..c3e9566 --- /dev/null +++ b/tests/minimal/params.json @@ -0,0 +1,6 @@ +{ + "input": "tests/minimal/assemblysheet.csv", + "protein_evidence": "https://raw.githubusercontent.com/Gaius-Augustus/BRAKER/f58479fe5bb13a9e51c3ca09cb9e137cab3b8471/example/proteins.fa", + "braker_extra_args": "--gm_max_intergenic 10000 --skipOptimize", + "busco_lineage_datasets": "eudicots_odb10" +} diff --git a/tests/stub/assemblysheet.csv b/tests/stub/assemblysheet.csv new file mode 100644 index 0000000..7fdff29 --- /dev/null +++ b/tests/stub/assemblysheet.csv @@ -0,0 +1,4 @@ +tag,fasta,is_masked,te_lib,braker_gff3,braker_hints +red5_v2p1,tests/stub/target/red5_v2p1_chr1.fasta.gz,no,,tests/stub/braker/red5_v2p1.gff3.gz,tests/stub/braker/red5_v2p1.hints.gff.gz +donghong,tests/stub/target/donghong.chr1.fsa.gz,no,tests/stub/te_lib/donghong.TElib.fa.gz,tests/stub/braker/red5_v2p1.gff3.gz,tests/stub/braker/red5_v2p1.hints.gff.gz +red5_v3,tests/stub/target/red5_v3_chr1.fasta,yes diff --git a/tests/stub/bam/1505KHS-0090_Root3.red5_v3.bam b/tests/stub/bam/1505KHS-0090_Root3.red5_v3.bam new file mode 100644 index 0000000..e69de29 diff --git a/tests/stub/bam/1505KHS-0092_Root3.red5_v3.bam b/tests/stub/bam/1505KHS-0092_Root3.red5_v3.bam new file mode 100644 index 0000000..e69de29 diff --git a/tests/stub/braker/donghong.gff3.gz b/tests/stub/braker/donghong.gff3.gz new file mode 100644 index 0000000..e69de29 diff --git a/tests/stub/braker/donghong.hints.gff.gz b/tests/stub/braker/donghong.hints.gff.gz new file mode 100644 index 0000000..e69de29 diff --git a/tests/stub/braker/red5_v2p1.gff3.gz b/tests/stub/braker/red5_v2p1.gff3.gz new file mode 100644 index 0000000..e69de29 diff --git a/tests/stub/braker/red5_v2p1.hints.gff.gz b/tests/stub/braker/red5_v2p1.hints.gff.gz new file mode 100644 index 0000000..e69de29 diff --git a/tests/stub/emapperdb/5.0.2/eggnog.db b/tests/stub/emapperdb/5.0.2/eggnog.db new file mode 100644 index 0000000..e69de29 diff --git a/tests/stub/emapperdb/5.0.2/eggnog_proteins.dmnd b/tests/stub/emapperdb/5.0.2/eggnog_proteins.dmnd new file mode 100644 index 0000000..e69de29 diff --git a/tests/stub/ext_prot/RU01.20221115150135.chr1.pep.fasta.gz b/tests/stub/ext_prot/RU01.20221115150135.chr1.pep.fasta.gz new file mode 100644 index 0000000..e69de29 diff --git a/tests/stub/ext_prot/RU01.20221115150135.chr2.pep.fasta.gz b/tests/stub/ext_prot/RU01.20221115150135.chr2.pep.fasta.gz new file mode 100644 index 0000000..e69de29 diff --git a/tests/stub/external-protein-fastas.txt b/tests/stub/external-protein-fastas.txt new file mode 100644 index 0000000..d510c4c --- /dev/null +++ b/tests/stub/external-protein-fastas.txt @@ -0,0 +1,2 @@ +tests/stub/ext_prot/RU01.20221115150135.chr1.pep.fasta.gz +tests/stub/ext_prot/RU01.20221115150135.chr2.pep.fasta.gz diff --git a/tests/stub/fq/1505KHS-0090_Root1_162bp_C728RACXX_Lane1_R1.1k.fastq.gz b/tests/stub/fq/1505KHS-0090_Root1_162bp_C728RACXX_Lane1_R1.1k.fastq.gz new file mode 100644 index 0000000..e69de29 diff --git a/tests/stub/fq/1505KHS-0090_Root1_162bp_C728RACXX_Lane1_R2.1k.fastq.gz b/tests/stub/fq/1505KHS-0090_Root1_162bp_C728RACXX_Lane1_R2.1k.fastq.gz new file mode 100644 index 0000000..e69de29 diff --git a/tests/stub/fq/1505KHS-0090_Root2_156bp_C728RACXX_Lane1_R1.1k.fastq.gz b/tests/stub/fq/1505KHS-0090_Root2_156bp_C728RACXX_Lane1_R1.1k.fastq.gz new file mode 100644 index 0000000..e69de29 diff --git a/tests/stub/fq/1505KHS-0090_Root2_156bp_C728RACXX_Lane1_R2.1k.fastq.gz b/tests/stub/fq/1505KHS-0090_Root2_156bp_C728RACXX_Lane1_R2.1k.fastq.gz new file mode 100644 index 0000000..e69de29 diff --git a/tests/stub/fq/1505KHS-0090_cane3_165bp_C728RACXX_Lane1_R1.1k.fastq.gz b/tests/stub/fq/1505KHS-0090_cane3_165bp_C728RACXX_Lane1_R1.1k.fastq.gz new file mode 100644 index 0000000..e69de29 diff --git a/tests/stub/fq/1505KHS-0090_cane3_165bp_C728RACXX_Lane1_R2.1k.fastq.gz b/tests/stub/fq/1505KHS-0090_cane3_165bp_C728RACXX_Lane1_R2.1k.fastq.gz new file mode 100644 index 0000000..e69de29 diff --git a/tests/stub/liftoff/RU01.20221115150135.chr1.gff3.gz b/tests/stub/liftoff/RU01.20221115150135.chr1.gff3.gz new file mode 100644 index 0000000..e69de29 diff --git a/tests/stub/liftoff/RU01.20221115150135.chr2.gff3.gz b/tests/stub/liftoff/RU01.20221115150135.chr2.gff3.gz new file mode 100644 index 0000000..e69de29 diff --git a/tests/stub/liftoff/Russell_V2a.chr1.fsa.gz b/tests/stub/liftoff/Russell_V2a.chr1.fsa.gz new file mode 100644 index 0000000..e69de29 diff --git a/tests/stub/liftoff/Russell_V2a.chr2.fsa.gz b/tests/stub/liftoff/Russell_V2a.chr2.fsa.gz new file mode 100644 index 0000000..e69de29 diff --git a/tests/stub/liftoffannotations.csv b/tests/stub/liftoffannotations.csv new file mode 100644 index 0000000..5215d2c --- /dev/null +++ b/tests/stub/liftoffannotations.csv @@ -0,0 +1,3 @@ +fasta,gff3 +tests/stub/liftoff/Russell_V2a.chr1.fsa.gz,tests/stub/liftoff/RU01.20221115150135.chr1.gff3.gz +tests/stub/liftoff/Russell_V2a.chr2.fsa.gz,tests/stub/liftoff/RU01.20221115150135.chr2.gff3.gz diff --git a/tests/stub/params.json b/tests/stub/params.json new file mode 100644 index 0000000..dbaa4fb --- /dev/null +++ b/tests/stub/params.json @@ -0,0 +1,10 @@ +{ + "input": "tests/stub/assemblysheet.csv", + "protein_evidence": "tests/stub/external-protein-fastas.txt", + "eggnogmapper_db_dir": "tests/stub/emapperdb/5.0.2", + "eggnogmapper_tax_scope": 33090, + "rna_evidence": "tests/stub/rnasheet.csv", + "liftoff_annotations": "tests/stub/liftoffannotations.csv", + "max_cpus": 2, + "max_memory": "3.GB" +} diff --git a/tests/stub/rnasheet.csv b/tests/stub/rnasheet.csv new file mode 100644 index 0000000..610bfbc --- /dev/null +++ b/tests/stub/rnasheet.csv @@ -0,0 +1,6 @@ +sample,file_1,file_2,target_assemblies +Root1,tests/stub/fq/1505KHS-0090_Root1_162bp_C728RACXX_Lane1_R1.1k.fastq.gz,tests/stub/fq/1505KHS-0090_Root1_162bp_C728RACXX_Lane1_R2.1k.fastq.gz,red5_v2p1;red5_v3 +Root1,tests/stub/fq/1505KHS-0090_Root2_156bp_C728RACXX_Lane1_R1.1k.fastq.gz,tests/stub/fq/1505KHS-0090_Root2_156bp_C728RACXX_Lane1_R2.1k.fastq.gz,red5_v2p1;red5_v3 +Root3,tests/stub/bam/1505KHS-0090_Root3.red5_v3.bam,,red5_v3 +Root3,tests/stub/bam/1505KHS-0092_Root3.red5_v3.bam,,red5_v3 +cane3,tests/stub/fq/1505KHS-0090_cane3_165bp_C728RACXX_Lane1_R1.1k.fastq.gz,tests/stub/fq/1505KHS-0090_cane3_165bp_C728RACXX_Lane1_R2.1k.fastq.gz,red5_v2p1;donghong;red5_v3 diff --git a/tests/stub/target/donghong.chr1.fsa.gz b/tests/stub/target/donghong.chr1.fsa.gz new file mode 100644 index 0000000..e69de29 diff --git a/tests/stub/target/red5_v2p1_chr1.fasta.gz b/tests/stub/target/red5_v2p1_chr1.fasta.gz new file mode 100644 index 0000000..e69de29 diff --git a/tests/stub/target/red5_v3_chr1.fasta b/tests/stub/target/red5_v3_chr1.fasta new file mode 100644 index 0000000..e69de29 diff --git a/tests/stub/te_lib/donghong.TElib.fa.gz b/tests/stub/te_lib/donghong.TElib.fa.gz new file mode 100644 index 0000000..e69de29 diff --git a/tower.yml b/tower.yml deleted file mode 100644 index 787aedf..0000000 --- a/tower.yml +++ /dev/null @@ -1,5 +0,0 @@ -reports: - multiqc_report.html: - display: "MultiQC HTML report" - samplesheet.csv: - display: "Auto-created samplesheet with collated metadata and FASTQ paths" diff --git a/workflows/genepal.nf b/workflows/genepal.nf index 1fb6a59..deccba4 100644 --- a/workflows/genepal.nf +++ b/workflows/genepal.nf @@ -4,12 +4,23 @@ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ -include { FASTQC } from '../modules/nf-core/fastqc/main' -include { MULTIQC } from '../modules/nf-core/multiqc/main' -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 { methodsDescriptionText } from '../subworkflows/local/utils_nfcore_genepal_pipeline' +include { PREPARE_ASSEMBLY } from '../subworkflows/local/prepare_assembly' +include { PREPROCESS_RNASEQ } from '../subworkflows/local/preprocess_rnaseq' +include { ALIGN_RNASEQ } from '../subworkflows/local/align_rnaseq' +include { PREPARE_EXT_PROTS } from '../subworkflows/local/prepare_ext_prots' +include { FASTA_BRAKER3 } from '../subworkflows/local/fasta_braker3' +include { FASTA_LIFTOFF } from '../subworkflows/local/fasta_liftoff' +include { PURGE_BRAKER_MODELS } from '../subworkflows/local/purge_braker_models' +include { GFF_MERGE_CLEANUP } from '../subworkflows/local/gff_merge_cleanup' +include { GFF_EGGNOGMAPPER } from '../subworkflows/local/gff_eggnogmapper' +include { PURGE_NOHIT_MODELS } from '../subworkflows/local/purge_nohit_models' +include { GFF_STORE } from '../subworkflows/local/gff_store' +include { FASTA_ORTHOFINDER } from '../subworkflows/local/fasta_orthofinder' +include { FASTA_GXF_BUSCO_PLOT } from '../subworkflows/gallvp/fasta_gxf_busco_plot/main' +include { CAT_CAT as SAVE_MARKED_GFF3 } from '../modules/nf-core/cat/cat/main' +include { softwareVersionsToYAML } from '../subworkflows/nf-core/utils_nfcore_pipeline' + +include { GXF_FASTA_AGAT_SPADDINTRONS_SPEXTRACTSEQUENCES } from '../subworkflows/gallvp/gxf_fasta_agat_spaddintrons_spextractsequences/main' /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -20,75 +31,212 @@ include { methodsDescriptionText } from '../subworkflows/local/utils_nfcore_gene workflow GENEPAL { take: - ch_samplesheet // channel: samplesheet read in from --input + target_assembly + tar_assm_str + is_masked + te_library + braker_annotation + braker_ex_asm_str + rna_fq + rna_bam + rna_bam_by_assembly + sortmerna_fastas + ext_prot_fastas + liftoff_fasta + liftoff_gff + tsebra_config + orthofinder_pep - main: - ch_versions = Channel.empty() - ch_multiqc_files = Channel.empty() + // Versions channel + ch_versions = Channel.empty() - // - // MODULE: Run FastQC - // - FASTQC ( - ch_samplesheet + // SUBWORKFLOW: PREPARE_ASSEMBLY + PREPARE_ASSEMBLY( + ch_target_assembly, + ch_te_library, + params.repeat_annotator, + ch_braker_ex_asm_str, + ch_is_masked ) - ch_multiqc_files = ch_multiqc_files.mix(FASTQC.out.zip.collect{it[1]}) - ch_versions = ch_versions.mix(FASTQC.out.versions.first()) - // - // Collate and save software versions - // - softwareVersionsToYAML(ch_versions) - .collectFile( - storeDir: "${params.outdir}/pipeline_info", - name: 'nf_core_pipeline_software_mqc_versions.yml', - sort: true, - newLine: true - ).set { ch_collated_versions } - - // - // MODULE: MultiQC - // - ch_multiqc_config = Channel.fromPath( - "$projectDir/assets/multiqc_config.yml", checkIfExists: true) - ch_multiqc_custom_config = params.multiqc_config ? - Channel.fromPath(params.multiqc_config, checkIfExists: true) : - Channel.empty() - ch_multiqc_logo = params.multiqc_logo ? - Channel.fromPath(params.multiqc_logo, checkIfExists: true) : - Channel.empty() - - summary_params = paramsSummaryMap( - workflow, parameters_schema: "nextflow_schema.json") - ch_workflow_summary = Channel.value(paramsSummaryMultiqc(summary_params)) - - ch_multiqc_custom_methods_description = params.multiqc_methods_description ? - file(params.multiqc_methods_description, checkIfExists: true) : - file("$projectDir/assets/methods_description_template.yml", checkIfExists: true) - ch_methods_description = Channel.value( - methodsDescriptionText(ch_multiqc_custom_methods_description)) - - 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) - ch_multiqc_files = ch_multiqc_files.mix( - ch_methods_description.collectFile( - name: 'methods_description_mqc.yaml', - sort: true - ) + ch_valid_target_assembly = PREPARE_ASSEMBLY.out.target_assemby + ch_masked_target_assembly = PREPARE_ASSEMBLY.out.masked_target_assembly + ch_target_assemby_index = PREPARE_ASSEMBLY.out.target_assemby_index + ch_versions = ch_versions.mix(PREPARE_ASSEMBLY.out.versions) + + // SUBWORKFLOW: PREPROCESS_RNASEQ + PREPROCESS_RNASEQ( + ch_rna_fq, + ch_tar_assm_str, + ch_braker_ex_asm_str, + params.skip_fastqc, + params.skip_fastp, + params.save_trimmed, + params.min_trimmed_reads, + params.remove_ribo_rna, + ch_sortmerna_fastas + ) + + ch_trim_reads = PREPROCESS_RNASEQ.out.trim_reads + ch_reads_target = PREPROCESS_RNASEQ.out.reads_target + ch_versions = ch_versions.mix(PREPROCESS_RNASEQ.out.versions) + + // SUBWORKFLOW: ALIGN_RNASEQ + ALIGN_RNASEQ( + ch_reads_target, + ch_trim_reads, + ch_rna_bam_by_assembly, + ch_target_assemby_index, + ) + + ch_rnaseq_bam = ALIGN_RNASEQ.out.bam + ch_versions = ch_versions.mix(ALIGN_RNASEQ.out.versions) + + // MODULE: PREPARE_EXT_PROTS + PREPARE_EXT_PROTS( + ch_ext_prot_fastas + ) + + ch_ext_prots_fasta = PREPARE_EXT_PROTS.out.ext_prots_fasta + ch_versions = ch_versions.mix(PREPARE_EXT_PROTS.out.versions) + + // SUBWORKFLOW: FASTA_BRAKER3 + FASTA_BRAKER3( + ch_masked_target_assembly, + ch_braker_ex_asm_str, + ch_rnaseq_bam, + ch_ext_prots_fasta, + ch_braker_annotation + ) + + ch_braker_gff3 = FASTA_BRAKER3.out.braker_gff3 + ch_braker_hints = FASTA_BRAKER3.out.braker_hints + ch_versions = ch_versions.mix(FASTA_BRAKER3.out.versions) + + // SUBWORKFLOW: FASTA_LIFTOFF + FASTA_LIFTOFF( + ch_valid_target_assembly, + ch_liftoff_fasta, + ch_liftoff_gff, + params.filter_liftoff_by_hints, + ch_braker_hints, + ch_tsebra_config, + params.allow_isoforms ) - MULTIQC ( - ch_multiqc_files.collect(), - ch_multiqc_config.toList(), - ch_multiqc_custom_config.toList(), - ch_multiqc_logo.toList() + ch_liftoff_gff3 = FASTA_LIFTOFF.out.gff3 + ch_versions = ch_versions.mix(FASTA_LIFTOFF.out.versions) + + // SUBWORKFLOW: PURGE_BRAKER_MODELS + PURGE_BRAKER_MODELS( + ch_braker_gff3, + ch_braker_hints, + ch_liftoff_gff3, + ch_tsebra_config, + params.allow_isoforms + ) + + ch_braker_purged_gff = PURGE_BRAKER_MODELS.out.braker_purged_gff + ch_versions = ch_versions.mix(PURGE_BRAKER_MODELS.out.versions) + + // SUBWORKFLOW: GFF_MERGE_CLEANUP + GFF_MERGE_CLEANUP( + ch_braker_purged_gff, + ch_liftoff_gff3 + ) + + ch_merged_gff = GFF_MERGE_CLEANUP.out.gff + ch_versions = ch_versions.mix(GFF_MERGE_CLEANUP.out.versions) + + // SUBWORKFLOW: GFF_EGGNOGMAPPER + GFF_EGGNOGMAPPER( + ch_merged_gff, + ch_valid_target_assembly, + params.eggnogmapper_db_dir, ) - emit: - multiqc_report = MULTIQC.out.report.toList() // channel: /path/to/multiqc_report.html - versions = ch_versions // channel: [ path(versions.yml) ] + ch_eggnogmapper_hits = GFF_EGGNOGMAPPER.out.eggnogmapper_hits + ch_eggnogmapper_annotations = GFF_EGGNOGMAPPER.out.eggnogmapper_annotations + ch_versions = ch_versions.mix(GFF_EGGNOGMAPPER.out.versions) + + // SUBWORKFLOW: PURGE_NOHIT_MODELS + PURGE_NOHIT_MODELS( + ch_merged_gff, + ch_eggnogmapper_hits, + params.eggnogmapper_purge_nohits && params.eggnogmapper_db_dir + ) + + ch_purged_gff = PURGE_NOHIT_MODELS.out.purged_gff + ch_versions = ch_versions.mix(PURGE_NOHIT_MODELS.out.versions) + + // SUBWORKFLOW: GFF_STORE + GFF_STORE( + ch_purged_gff, + ch_eggnogmapper_annotations, + ch_valid_target_assembly, + params.eggnogmapper_db_dir + ) + + ch_final_gff = GFF_STORE.out.final_gff + ch_final_proteins = GFF_STORE.out.final_proteins + ch_versions = ch_versions.mix(GFF_STORE.out.versions) + + // SUBWORKFLOW: FASTA_ORTHOFINDER + FASTA_ORTHOFINDER( + ch_final_proteins, + ch_orthofinder_pep + ) + + ch_versions = ch_versions.mix(FASTA_ORTHOFINDER.out.versions) + + // SUBWORKFLOW: FASTA_GXF_BUSCO_PLOT + ch_busco_fasta = params.busco_skip + ? Channel.empty() + : ch_valid_target_assembly + + ch_busco_gff = params.busco_skip + ? Channel.empty() + : ch_final_gff + + FASTA_GXF_BUSCO_PLOT( + ch_busco_fasta, + ch_busco_gff, + 'genome', + params.busco_lineage_datasets?.tokenize(' '), + [], // val_busco_lineages_path + [] // val_busco_config + ) + + ch_versions = ch_versions.mix(FASTA_GXF_BUSCO_PLOT.out.versions) + + // SUBWORKFLOW: GXF_FASTA_AGAT_SPADDINTRONS_SPEXTRACTSEQUENCES + GXF_FASTA_AGAT_SPADDINTRONS_SPEXTRACTSEQUENCES( + ch_final_gff, + ch_valid_target_assembly + ) + + ch_splicing_marked_gff3 = GXF_FASTA_AGAT_SPADDINTRONS_SPEXTRACTSEQUENCES.out.marked_gff3 + ch_versions = ch_versions.mix(GXF_FASTA_AGAT_SPADDINTRONS_SPEXTRACTSEQUENCES.out.versions) + + // MODULE: CAT_CAT as SAVE_MARKED_GFF3 + SAVE_MARKED_GFF3 ( ch_splicing_marked_gff3 ) + + // Collate and save software versions + ch_versions = ch_versions + | unique + | map { yml -> + if ( yml ) { yml } + } + + ch_versions_yml = softwareVersionsToYAML(ch_versions) + | collectFile( + storeDir: "${params.outdir}/pipeline_info", + name: 'software_versions.yml', + sort: true, + newLine: true, + cache: false + ) } /* From c122e620a8168608cacb3be146fce7b6dd508926 Mon Sep 17 00:00:00 2001 From: Usman Rashid Date: Mon, 19 Aug 2024 17:42:33 +1200 Subject: [PATCH 47/87] Stub test is now passing again --- CHANGELOG.md | 1 + docs/parameters.md | 72 +++++++++---- main.nf | 88 +++++++-------- modules.json | 5 - .../dumpsoftwareversions/environment.yml | 7 -- .../custom/dumpsoftwareversions/main.nf | 24 ----- .../custom/dumpsoftwareversions/meta.yml | 37 ------- .../templates/dumpsoftwareversions.py | 100 ------------------ .../dumpsoftwareversions/tests/main.nf.test | 43 -------- .../tests/main.nf.test.snap | 33 ------ .../dumpsoftwareversions/tests/tags.yml | 2 - nextflow.config | 12 +-- nextflow_schema.json | 35 +++--- .../utils_nfcore_genepal_pipeline/main.nf | 3 +- workflows/genepal.nf | 35 +++--- 15 files changed, 138 insertions(+), 359 deletions(-) mode change 100644 => 100755 main.nf delete mode 100644 modules/nf-core/custom/dumpsoftwareversions/environment.yml delete mode 100644 modules/nf-core/custom/dumpsoftwareversions/main.nf delete mode 100644 modules/nf-core/custom/dumpsoftwareversions/meta.yml delete mode 100755 modules/nf-core/custom/dumpsoftwareversions/templates/dumpsoftwareversions.py delete mode 100644 modules/nf-core/custom/dumpsoftwareversions/tests/main.nf.test delete mode 100644 modules/nf-core/custom/dumpsoftwareversions/tests/main.nf.test.snap delete mode 100644 modules/nf-core/custom/dumpsoftwareversions/tests/tags.yml diff --git a/CHANGELOG.md b/CHANGELOG.md index 03935c8..59c8b28 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -52,6 +52,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 8. Now the final annotations are not stored in the `final` folder 9. Now BRAKER3 outputs are not saved by default [#53](https://github.com/plant-food-research-open/genepal/issues/53) and saved under `etc` folder when enabled 10. Removed `local` profile. Local executor is the default when no executor is specified. Therefore, the `local` profile was not needed. +11. Removed `CUSTOM_DUMPSOFTWAREVERSIONS` ## 0.3.3 - [18-Jun-2024] diff --git a/docs/parameters.md b/docs/parameters.md index 3199382..3e293ad 100644 --- a/docs/parameters.md +++ b/docs/parameters.md @@ -1,19 +1,19 @@ # plant-food-research-open/genepal pipeline parameters -A NextFlow pipeline for single genome and pan-genome annotation +A Nextflow pipeline for single genome and pan-genome annotation ## Input/output options -| Parameter | Description | Type | Default | Required | Hidden | -| ------------------------- | -------------------------------------------------------------------------------------------------------- | --------- | --------- | -------- | ------ | -| `input` | Target assemblies listed in a CSV sheet | `string` | | True | | -| `protein_evidence` | Protein evidence provided as a fasta file or multiple fasta files listed in a plain txt file | `string` | | True | | -| `eggnogmapper_db_dir` | Eggnogmapper database directory | `string` | | | | -| `eggnogmapper_tax_scope` | Eggnogmapper taxonomy scopre. Eukaryota: 2759, Viridiplantae: 33090, Archaea: 2157, Bacteria: 2, root: 1 | `integer` | 1 | | | -| `rna_evidence` | FASTQ/BAM samples listed in a CSV sheet | `string` | | | | -| `liftoff_annotations` | Reference annotations listed in a CSV sheet | `string` | | | | -| `orthofinder_annotations` | Additional annotations for orthology listed in a CSV sheet | `string` | | | | -| `outdir` | The output directory where the results will be saved | `string` | ./results | True | | +| Parameter | Description | Type | Default | Required | Hidden | +| ------------------------- | -------------------------------------------------------------------------------------------------------- | --------- | ------- | -------- | ------ | +| `input` | Target assemblies listed in a CSV sheet | `string` | | True | | +| `protein_evidence` | Protein evidence provided as a fasta file or multiple fasta files listed in a plain txt file | `string` | | True | | +| `eggnogmapper_db_dir` | Eggnogmapper database directory | `string` | | | | +| `eggnogmapper_tax_scope` | Eggnogmapper taxonomy scopre. Eukaryota: 2759, Viridiplantae: 33090, Archaea: 2157, Bacteria: 2, root: 1 | `integer` | 1 | | | +| `rna_evidence` | FASTQ/BAM samples listed in a CSV sheet | `string` | | | | +| `liftoff_annotations` | Reference annotations listed in a CSV sheet | `string` | | | | +| `orthofinder_annotations` | Additional annotations for orthology listed in a CSV sheet | `string` | | | | +| `outdir` | The output directory where the results will be saved | `string` | | True | | ## Repeat annotation options @@ -72,15 +72,41 @@ A NextFlow pipeline for single genome and pan-genome annotation Set the top limit for requested resources for any single job. -| Parameter | Description | Type | Default | Required | Hidden | -| ------------ | ------------------------------------------------------------------ | --------- | ------- | -------- | ------ | -| `max_cpus` | Maximum number of CPUs that can be requested for any single job. | `integer` | 12 | | True | -| `max_memory` | Maximum amount of memory that can be requested for any single job. | `string` | 72.GB | | True | -| `max_time` | Maximum amount of time that can be requested for any single job. | `string` | 7.day | | True | - -## Infrastructure options - -| Parameter | Description | Type | Default | Required | Hidden | -| ------------------------------ | ----------- | --------- | ------- | -------- | ------ | -| `validationSkipDuplicateCheck` | | `boolean` | True | | True | -| `validationS3PathCheck` | | `boolean` | True | | True | +| Parameter | Description | Type | Default | Required | Hidden | +| ------------ | ---------------------------------------------------------------------------------- | --------- | ------- | -------- | ------ | +| `max_cpus` | Maximum number of CPUs that can be requested for any single job. | `integer` | 16 | | | +| `max_memory` | Maximum amount of memory that can be requested for any single job. Example: '8.GB' | `string` | 72.GB | | | +| `max_time` | Maximum amount of time that can be requested for any single job. Example: '1.day' | `string` | 7.day | | | + +## Institutional config options + +Parameters used to describe centralised config profiles. These should not be edited. + +| Parameter | Description | Type | Default | Required | Hidden | +| ---------------------------- | ----------------------------------------- | -------- | -------------------------------------------------------- | -------- | ------ | +| `custom_config_version` | Git commit id for Institutional configs. | `string` | master | | True | +| `custom_config_base` | Base directory for Institutional configs. | `string` | https://raw.githubusercontent.com/nf-core/configs/master | | True | +| `config_profile_name` | Institutional config name. | `string` | | | True | +| `config_profile_description` | Institutional config description. | `string` | | | True | +| `config_profile_contact` | Institutional config contact information. | `string` | | | True | +| `config_profile_url` | Institutional config URL link. | `string` | | | True | + +## Generic options + +Less common options for the pipeline, typically set in a config file. + +| Parameter | Description | Type | Default | Required | Hidden | +| ---------------------------------- | ----------------------------------------------------------------------- | --------- | -------------------------------------------------------- | -------- | ------ | +| `help` | Display help text. | `boolean` | | | True | +| `version` | Display version and exit. | `boolean` | | | True | +| `publish_dir_mode` | Method used to save pipeline results to output directory. | `string` | copy | | True | +| `email` | Email address for completion summary. | `string` | | | True | +| `email_on_fail` | Email address for completion summary, only when pipeline fails. | `string` | | | True | +| `plaintext_email` | Send plain-text email instead of HTML. | `boolean` | | | True | +| `monochrome_logs` | Do not use coloured log outputs. | `boolean` | | | True | +| `hook_url` | Incoming hook URL for messaging service | `string` | | | True | +| `validate_params` | Boolean whether to validate parameters against the schema at runtime | `boolean` | True | | True | +| `validationShowHiddenParams` | Show all params when using `--help` | `boolean` | | | True | +| `validationFailUnrecognisedParams` | Validation of parameters fails when an unrecognised parameter is found. | `boolean` | | | True | +| `validationLenientMode` | Validation of parameters in lenient more. | `boolean` | | | True | +| `pipelines_testdata_base_path` | | `string` | https://raw.githubusercontent.com/nf-core/test-datasets/ | | True | diff --git a/main.nf b/main.nf old mode 100644 new mode 100755 index f20d37d..5a3a4e8 --- a/main.nf +++ b/main.nf @@ -31,42 +31,42 @@ include { PIPELINE_COMPLETION } from './subworkflows/local/utils_nfcore_ge workflow PLANTFOODRESEARCHOPEN_GENEPAL { take: - target_assembly - tar_assm_str - is_masked - te_library - braker_annotation - braker_ex_asm_str - rna_fq - rna_bam - rna_bam_by_assembly - sortmerna_fastas - ext_prot_fastas - liftoff_fasta - liftoff_gff - tsebra_config - orthofinder_pep + ch_target_assembly + ch_tar_assm_str + ch_is_masked + ch_te_library + ch_braker_annotation + ch_braker_ex_asm_str + ch_rna_fq + ch_rna_bam + ch_rna_bam_by_assembly + ch_sortmerna_fastas + ch_ext_prot_fastas + ch_liftoff_fasta + ch_liftoff_gff + ch_tsebra_config + ch_orthofinder_pep main: // // WORKFLOW: Run pipeline // GENEPAL( - target_assembly - tar_assm_str - is_masked - te_library - braker_annotation - braker_ex_asm_str - rna_fq - rna_bam - rna_bam_by_assembly - sortmerna_fastas - ext_prot_fastas - liftoff_fasta - liftoff_gff - tsebra_config - orthofinder_pep + ch_target_assembly, + ch_tar_assm_str, + ch_is_masked, + ch_te_library, + ch_braker_annotation, + ch_braker_ex_asm_str, + ch_rna_fq, + ch_rna_bam, + ch_rna_bam_by_assembly, + ch_sortmerna_fastas, + ch_ext_prot_fastas, + ch_liftoff_fasta, + ch_liftoff_gff, + ch_tsebra_config, + ch_orthofinder_pep ) } @@ -97,20 +97,20 @@ workflow { // WORKFLOW: Run main workflow // PLANTFOODRESEARCHOPEN_GENEPAL( - PIPELINE_INITIALISATION.out.target_assembly - PIPELINE_INITIALISATION.out.tar_assm_str - PIPELINE_INITIALISATION.out.is_masked - PIPELINE_INITIALISATION.out.te_library - PIPELINE_INITIALISATION.out.braker_annotation - PIPELINE_INITIALISATION.out.braker_ex_asm_str - PIPELINE_INITIALISATION.out.rna_fq - PIPELINE_INITIALISATION.out.rna_bam - PIPELINE_INITIALISATION.out.rna_bam_by_assembly - PIPELINE_INITIALISATION.out.sortmerna_fastas - PIPELINE_INITIALISATION.out.ext_prot_fastas - PIPELINE_INITIALISATION.out.liftoff_fasta - PIPELINE_INITIALISATION.out.liftoff_gff - PIPELINE_INITIALISATION.out.tsebra_config + PIPELINE_INITIALISATION.out.target_assembly, + PIPELINE_INITIALISATION.out.tar_assm_str, + PIPELINE_INITIALISATION.out.is_masked, + PIPELINE_INITIALISATION.out.te_library, + PIPELINE_INITIALISATION.out.braker_annotation, + PIPELINE_INITIALISATION.out.braker_ex_asm_str, + PIPELINE_INITIALISATION.out.rna_fq, + PIPELINE_INITIALISATION.out.rna_bam, + PIPELINE_INITIALISATION.out.rna_bam_by_assembly, + PIPELINE_INITIALISATION.out.sortmerna_fastas, + PIPELINE_INITIALISATION.out.ext_prot_fastas, + PIPELINE_INITIALISATION.out.liftoff_fasta, + PIPELINE_INITIALISATION.out.liftoff_gff, + PIPELINE_INITIALISATION.out.tsebra_config, PIPELINE_INITIALISATION.out.orthofinder_pep ) diff --git a/modules.json b/modules.json index 9eb2bd6..94ded5a 100644 --- a/modules.json +++ b/modules.json @@ -115,11 +115,6 @@ "git_sha": "1ceaa8ba4d0fd886dbca0e545815d905b7407de7", "installed_by": ["modules"] }, - "custom/dumpsoftwareversions": { - "branch": "master", - "git_sha": "82024cf6325d2ee194e7f056d841ecad2f6856e9", - "installed_by": ["modules"] - }, "eggnogmapper": { "branch": "master", "git_sha": "b34fb117e397e72a070cde8adf21b758670c90f5", diff --git a/modules/nf-core/custom/dumpsoftwareversions/environment.yml b/modules/nf-core/custom/dumpsoftwareversions/environment.yml deleted file mode 100644 index b48ced2..0000000 --- a/modules/nf-core/custom/dumpsoftwareversions/environment.yml +++ /dev/null @@ -1,7 +0,0 @@ -name: custom_dumpsoftwareversions -channels: - - conda-forge - - bioconda - - defaults -dependencies: - - bioconda::multiqc=1.20 diff --git a/modules/nf-core/custom/dumpsoftwareversions/main.nf b/modules/nf-core/custom/dumpsoftwareversions/main.nf deleted file mode 100644 index 105f926..0000000 --- a/modules/nf-core/custom/dumpsoftwareversions/main.nf +++ /dev/null @@ -1,24 +0,0 @@ -process CUSTOM_DUMPSOFTWAREVERSIONS { - label 'process_single' - - // Requires `pyyaml` which does not have a dedicated container but is in the MultiQC container - conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/multiqc:1.20--pyhdfd78af_0' : - 'biocontainers/multiqc:1.20--pyhdfd78af_0' }" - - input: - path versions - - output: - path "software_versions.yml" , emit: yml - path "software_versions_mqc.yml", emit: mqc_yml - path "versions.yml" , emit: versions - - when: - task.ext.when == null || task.ext.when - - script: - def args = task.ext.args ?: '' - template 'dumpsoftwareversions.py' -} diff --git a/modules/nf-core/custom/dumpsoftwareversions/meta.yml b/modules/nf-core/custom/dumpsoftwareversions/meta.yml deleted file mode 100644 index 5f15a5f..0000000 --- a/modules/nf-core/custom/dumpsoftwareversions/meta.yml +++ /dev/null @@ -1,37 +0,0 @@ -# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/meta-schema.json -name: custom_dumpsoftwareversions -description: Custom module used to dump software versions within the nf-core pipeline template -keywords: - - custom - - dump - - version -tools: - - custom: - description: Custom module used to dump software versions within the nf-core pipeline template - homepage: https://github.com/nf-core/tools - documentation: https://github.com/nf-core/tools - licence: ["MIT"] -input: - - versions: - type: file - description: YML file containing software versions - pattern: "*.yml" -output: - - yml: - type: file - description: Standard YML file containing software versions - pattern: "software_versions.yml" - - mqc_yml: - type: file - description: MultiQC custom content YML file containing software versions - pattern: "software_versions_mqc.yml" - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" -authors: - - "@drpatelh" - - "@grst" -maintainers: - - "@drpatelh" - - "@grst" diff --git a/modules/nf-core/custom/dumpsoftwareversions/templates/dumpsoftwareversions.py b/modules/nf-core/custom/dumpsoftwareversions/templates/dumpsoftwareversions.py deleted file mode 100755 index 9a493ac..0000000 --- a/modules/nf-core/custom/dumpsoftwareversions/templates/dumpsoftwareversions.py +++ /dev/null @@ -1,100 +0,0 @@ -#!/usr/bin/env python - - -"""Provide functions to merge multiple versions.yml files.""" - -import yaml -import platform -from textwrap import dedent - - -def _make_versions_html(versions): - """Generate a tabular HTML output of all versions for MultiQC.""" - html = [ - dedent( - """\\ - -
    Process Name \\", + " \\ Software Version
    CUSTOM_DUMPSOFTWAREVERSIONSpython3.11.7
    yaml5.4.1
    TOOL1tool10.11.9
    TOOL2tool21.9
    WorkflowNextflow
    File typeConventional base calls
    File typeConventional base calls
    File typeConventional base calls
    File typeConventional base calls
    File typeConventional base calls
    File typeConventional base calls
    File typeConventional base calls
    File typeConventional base calls
    File typeConventional base calls
    File typeConventional base calls
    File typeConventional base calls
    File typeConventional base calls
    File typeConventional base calls
    File typeConventional base calls
    File typeConventional base calls
    File typeConventional base calls
    File typeConventional base calls
    File typeConventional base calls
    File typeConventional base calls
    File typeConventional base calls
    - - - - - - - - """ - ) - ] - for process, tmp_versions in sorted(versions.items()): - html.append("") - for i, (tool, version) in enumerate(sorted(tmp_versions.items())): - html.append( - dedent( - f"""\\ - - - - - - """ - ) - ) - html.append("") - html.append("
    Process Name Software Version
    {process if (i == 0) else ''}{tool}{version}
    ") - return "\\n".join(html) - - -def main(): - """Load all version files and generate merged output.""" - versions_this_module = {} - versions_this_module["${task.process}"] = { - "python": platform.python_version(), - "yaml": yaml.__version__, - } - - with open("$versions") as f: - versions_by_process = yaml.load(f, Loader=yaml.BaseLoader) | versions_this_module - - # aggregate versions by the module name (derived from fully-qualified process name) - versions_by_module = {} - for process, process_versions in versions_by_process.items(): - module = process.split(":")[-1] - try: - if versions_by_module[module] != process_versions: - raise AssertionError( - "We assume that software versions are the same between all modules. " - "If you see this error-message it means you discovered an edge-case " - "and should open an issue in nf-core/tools. " - ) - except KeyError: - versions_by_module[module] = process_versions - - versions_by_module["Workflow"] = { - "Nextflow": "$workflow.nextflow.version", - "$workflow.manifest.name": "$workflow.manifest.version", - } - - versions_mqc = { - "id": "software_versions", - "section_name": "${workflow.manifest.name} Software Versions", - "section_href": "https://github.com/${workflow.manifest.name}", - "plot_type": "html", - "description": "are collected at run time from the software output.", - "data": _make_versions_html(versions_by_module), - } - - with open("software_versions.yml", "w") as f: - yaml.dump(versions_by_module, f, default_flow_style=False) - with open("software_versions_mqc.yml", "w") as f: - yaml.dump(versions_mqc, f, default_flow_style=False) - - with open("versions.yml", "w") as f: - yaml.dump(versions_this_module, f, default_flow_style=False) - - -if __name__ == "__main__": - main() diff --git a/modules/nf-core/custom/dumpsoftwareversions/tests/main.nf.test b/modules/nf-core/custom/dumpsoftwareversions/tests/main.nf.test deleted file mode 100644 index b1e1630..0000000 --- a/modules/nf-core/custom/dumpsoftwareversions/tests/main.nf.test +++ /dev/null @@ -1,43 +0,0 @@ -nextflow_process { - - name "Test Process CUSTOM_DUMPSOFTWAREVERSIONS" - script "../main.nf" - process "CUSTOM_DUMPSOFTWAREVERSIONS" - tag "modules" - tag "modules_nfcore" - tag "custom" - tag "dumpsoftwareversions" - tag "custom/dumpsoftwareversions" - - test("Should run without failures") { - when { - process { - """ - def tool1_version = ''' - TOOL1: - tool1: 0.11.9 - '''.stripIndent() - - def tool2_version = ''' - TOOL2: - tool2: 1.9 - '''.stripIndent() - - input[0] = Channel.of(tool1_version, tool2_version).collectFile() - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot( - process.out.versions, - file(process.out.mqc_yml[0]).readLines()[0..10], - file(process.out.yml[0]).readLines()[0..7] - ).match() - } - ) - } - } -} diff --git a/modules/nf-core/custom/dumpsoftwareversions/tests/main.nf.test.snap b/modules/nf-core/custom/dumpsoftwareversions/tests/main.nf.test.snap deleted file mode 100644 index 5f59a93..0000000 --- a/modules/nf-core/custom/dumpsoftwareversions/tests/main.nf.test.snap +++ /dev/null @@ -1,33 +0,0 @@ -{ - "Should run without failures": { - "content": [ - [ - "versions.yml:md5,76d454d92244589d32455833f7c1ba6d" - ], - [ - "data: \"\\n\\n \\n \\n \\n \\n \\n \\n \\n\\", - " \\n\\n\\n \\n \\n\\", - " \\ \\n\\n\\n\\n \\n \\", - " \\ \\n \\n\\n\\n\\n\\", - " \\n\\n \\n \\n\\", - " \\ \\n\\n\\n\\n\\n\\n \\n\\", - " \\ \\n \\n\\n\\n\\n\\", - " \\n\\n \\n \\n\\" - ], - [ - "CUSTOM_DUMPSOFTWAREVERSIONS:", - " python: 3.11.7", - " yaml: 5.4.1", - "TOOL1:", - " tool1: 0.11.9", - "TOOL2:", - " tool2: '1.9'", - "Workflow:" - ] - ], - "timestamp": "2024-01-09T23:01:18.710682" - } -} \ No newline at end of file diff --git a/modules/nf-core/custom/dumpsoftwareversions/tests/tags.yml b/modules/nf-core/custom/dumpsoftwareversions/tests/tags.yml deleted file mode 100644 index 405aa24..0000000 --- a/modules/nf-core/custom/dumpsoftwareversions/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -custom/dumpsoftwareversions: - - modules/nf-core/custom/dumpsoftwareversions/** diff --git a/nextflow.config b/nextflow.config index 7065d3c..ec5ef55 100644 --- a/nextflow.config +++ b/nextflow.config @@ -16,7 +16,7 @@ params { rna_evidence = null liftoff_annotations = null orthofinder_annotations = null - outdir = "./results" + outdir = null // Repeat annotation options repeat_annotator = 'repeatmodeler' @@ -102,11 +102,11 @@ try { } // Load plant-food-research-open/genepal custom profiles from different institutions. -try { - includeConfig "${params.custom_config_base}/pipeline/genepal.config" -} catch (Exception e) { - System.err.println("WARNING: Could not load nf-core/config/genepal profiles: ${params.custom_config_base}/pipeline/genepal.config") -} +// try { +// includeConfig "${params.custom_config_base}/pipeline/genepal.config" +// } catch (Exception e) { +// System.err.println("WARNING: Could not load nf-core/config/genepal profiles: ${params.custom_config_base}/pipeline/genepal.config") +// } profiles { debug { dumpHashes = true diff --git a/nextflow_schema.json b/nextflow_schema.json index aa7679a..14c8f3a 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -31,7 +31,8 @@ "eggnogmapper_db_dir": { "type": "string", "description": "Eggnogmapper database directory", - "format": "directory-path" + "format": "directory-path", + "fa_icon": "fas fa-folder-open" }, "eggnogmapper_tax_scope": { "type": "integer", @@ -70,8 +71,7 @@ "type": "string", "format": "directory-path", "description": "The output directory where the results will be saved", - "fa_icon": "fas fa-folder-open", - "default": "./results" + "fa_icon": "fas fa-folder-open" } } }, @@ -267,24 +267,21 @@ "type": "integer", "description": "Maximum number of CPUs that can be requested for any single job.", "default": 16, - "fa_icon": "fas fa-microchip", - "hidden": true + "fa_icon": "fas fa-microchip" }, "max_memory": { "type": "string", "description": "Maximum amount of memory that can be requested for any single job. Example: '8.GB'", - "default": "512.GB", + "default": "72.GB", "fa_icon": "fas fa-memory", - "pattern": "^\\d+(\\.\\d+)?\\.?\\s*(K|M|G|T)?B$", - "hidden": true + "pattern": "^\\d+(\\.\\d+)?\\.?\\s*(K|M|G|T)?B$" }, "max_time": { "type": "string", "description": "Maximum amount of time that can be requested for any single job. Example: '1.day'", "default": "7.day", "fa_icon": "far fa-clock", - "pattern": "^(\\d+\\.?\\s*(s|m|h|d|day)\\s*)+$", - "hidden": true + "pattern": "^(\\d+\\.?\\s*(s|m|h|d|day)\\s*)+$" } } }, @@ -362,6 +359,13 @@ "enum": ["symlink", "rellink", "link", "copy", "copyNoFollow", "move"], "hidden": true }, + "email": { + "type": "string", + "description": "Email address for completion summary.", + "fa_icon": "fas fa-envelope", + "pattern": "^([a-zA-Z0-9_\\-\\.]+)@([a-zA-Z0-9_\\-\\.]+)\\.([a-zA-Z]{2,5})$", + "hidden": true + }, "email_on_fail": { "type": "string", "description": "Email address for completion summary, only when pipeline fails.", @@ -381,12 +385,6 @@ "fa_icon": "fas fa-palette", "hidden": true }, - "monochromeLogs": { - "type": "boolean", - "fa_icon": "fas fa-palette", - "description": "Do not use coloured log outputs.", - "hidden": true - }, "hook_url": { "type": "string", "description": "Incoming hook URL for messaging service", @@ -417,6 +415,11 @@ "fa_icon": "far fa-check-circle", "description": "Validation of parameters in lenient more.", "hidden": true + }, + "pipelines_testdata_base_path": { + "type": "string", + "default": "https://raw.githubusercontent.com/nf-core/test-datasets/", + "hidden": true } } } diff --git a/subworkflows/local/utils_nfcore_genepal_pipeline/main.nf b/subworkflows/local/utils_nfcore_genepal_pipeline/main.nf index a3932a8..5b14b68 100644 --- a/subworkflows/local/utils_nfcore_genepal_pipeline/main.nf +++ b/subworkflows/local/utils_nfcore_genepal_pipeline/main.nf @@ -296,7 +296,6 @@ workflow PIPELINE_COMPLETION { 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: @@ -307,7 +306,7 @@ workflow PIPELINE_COMPLETION { // workflow.onComplete { if (email || email_on_fail) { - completionEmail(summary_params, email, email_on_fail, plaintext_email, outdir, monochrome_logs, multiqc_report.toList()) + completionEmail(summary_params, email, email_on_fail, plaintext_email, outdir, monochrome_logs) } completionSummary(monochrome_logs) diff --git a/workflows/genepal.nf b/workflows/genepal.nf index deccba4..89eebba 100644 --- a/workflows/genepal.nf +++ b/workflows/genepal.nf @@ -31,23 +31,24 @@ include { GXF_FASTA_AGAT_SPADDINTRONS_SPEXTRACTSEQUENCES } from '../subworkflows workflow GENEPAL { take: - target_assembly - tar_assm_str - is_masked - te_library - braker_annotation - braker_ex_asm_str - rna_fq - rna_bam - rna_bam_by_assembly - sortmerna_fastas - ext_prot_fastas - liftoff_fasta - liftoff_gff - tsebra_config - orthofinder_pep - - + ch_target_assembly + ch_tar_assm_str + ch_is_masked + ch_te_library + ch_braker_annotation + ch_braker_ex_asm_str + ch_rna_fq + ch_rna_bam + ch_rna_bam_by_assembly + ch_sortmerna_fastas + ch_ext_prot_fastas + ch_liftoff_fasta + ch_liftoff_gff + ch_tsebra_config + ch_orthofinder_pep + + + main: // Versions channel ch_versions = Channel.empty() From 51b7482f830eeef39f67e6fd8ffc69ceb8ba5e41 Mon Sep 17 00:00:00 2001 From: Usman Rashid Date: Tue, 20 Aug 2024 12:45:14 +1200 Subject: [PATCH 48/87] Fixed multiple linting issues --- conf/base.config | 3 --- conf/modules.config | 9 --------- subworkflows/local/file_gunzip.nf | 7 ++++++- subworkflows/local/gff_store.nf | 2 +- subworkflows/local/purge_braker_models.nf | 2 -- 5 files changed, 7 insertions(+), 16 deletions(-) diff --git a/conf/base.config b/conf/base.config index 4accf0a..06a63be 100644 --- a/conf/base.config +++ b/conf/base.config @@ -74,7 +74,4 @@ process { cpus = { check_max( 8 * task.attempt, 'cpus' ) } time = { check_max( 7.days * task.attempt, 'time' ) } } - withName:CUSTOM_DUMPSOFTWAREVERSIONS { - cache = false - } } diff --git a/conf/modules.config b/conf/modules.config index 4199673..6e433c0 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -352,13 +352,4 @@ process { // Universal saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, ] } - - withName: CUSTOM_DUMPSOFTWAREVERSIONS { - publishDir = [ - path: "$params.outdir/pipeline_info", - pattern: "software_versions.yml", - mode: params.publish_dir_mode, - enabled: true - ] - } } diff --git a/subworkflows/local/file_gunzip.nf b/subworkflows/local/file_gunzip.nf index 30f3368..ec45610 100644 --- a/subworkflows/local/file_gunzip.nf +++ b/subworkflows/local/file_gunzip.nf @@ -5,6 +5,9 @@ workflow FILE_GUNZIP { ch_input // channel [ meta, archive ] main: + + ch_versions = Channel.empty() + ch_input_branch = ch_input | branch { meta, archive -> gz: "$archive".endsWith('.gz') @@ -14,7 +17,9 @@ workflow FILE_GUNZIP { // MODULE: GUNZIP GUNZIP ( ch_input_branch.gz ) + ch_versions = ch_versions.mix(GUNZIP.out.versions.first()) + emit: - versions = GUNZIP.out.versions.first() + versions = ch_versions gunzip = GUNZIP.out.gunzip.mix( ch_input_branch.rest ) } diff --git a/subworkflows/local/gff_store.nf b/subworkflows/local/gff_store.nf index 00ca00b..2c877a9 100644 --- a/subworkflows/local/gff_store.nf +++ b/subworkflows/local/gff_store.nf @@ -131,7 +131,7 @@ workflow GFF_STORE { ) ch_final_proteins = EXTRACT_PROTEINS.out.gffread_fasta - ch_versions = ch_versions.mix(FINAL_GFF_CHECK.out.versions.first()) + ch_versions = ch_versions.mix(EXTRACT_PROTEINS.out.versions.first()) emit: diff --git a/subworkflows/local/purge_braker_models.nf b/subworkflows/local/purge_braker_models.nf index bda8ce1..3f0dc05 100644 --- a/subworkflows/local/purge_braker_models.nf +++ b/subworkflows/local/purge_braker_models.nf @@ -1,8 +1,6 @@ include { GFF_TSEBRA_SPFILTERFEATUREFROMKILLLIST } from '../../subworkflows/local/gff_tsebra_spfilterfeaturefromkilllist' include { GFFCOMPARE as COMPARE_BRAKER_TO_LIFTOFF } from '../../modules/nf-core/gffcompare/main' include { AGAT_SPFILTERFEATUREFROMKILLLIST } from '../../modules/nf-core/agat/spfilterfeaturefromkilllist/main' -include { GFFCOMPARE as VALIDATE_PURGING_BY_AGAT } from '../../modules/nf-core/gffcompare/main' -include { AGAT_SPMERGEANNOTATIONS as MERGE_BRAKER_LIFTOFF } from '../../modules/nf-core/agat/spmergeannotations/main' workflow PURGE_BRAKER_MODELS { take: From d1bc3ce61b29a0e9569060186a10ace3ae321e7e Mon Sep 17 00:00:00 2001 From: Usman Rashid Date: Tue, 20 Aug 2024 16:09:07 +1200 Subject: [PATCH 49/87] Updated README and flowchart --- .nf-core.yml | 8 +- README.md | 94 ++++++++++++------ assets/rrna-db-test.txt | 1 - conf/test_full.config | 28 ++++++ docs/img/genepal.drawio | 207 ++++++++++++++++++---------------------- docs/img/genepal.png | Bin 334096 -> 527127 bytes nextflow_schema.json | 11 ++- pyproject.toml | 15 --- 8 files changed, 198 insertions(+), 166 deletions(-) delete mode 100644 assets/rrna-db-test.txt create mode 100644 conf/test_full.config delete mode 100644 pyproject.toml diff --git a/.nf-core.yml b/.nf-core.yml index 7278b0a..5571c09 100644 --- a/.nf-core.yml +++ b/.nf-core.yml @@ -8,17 +8,21 @@ lint: - .github/workflows/awstest.yml - .github/workflows/awsfulltest.yml - conf/igenomes.config + - assets/multiqc_config.yml files_unchanged: - CODE_OF_CONDUCT.md - assets/nf-core-genepal_logo_light.png - docs/images/nf-core-genepal_logo_light.png - docs/images/nf-core-genepal_logo_dark.png - .github/ISSUE_TEMPLATE/bug_report.yml - multiqc_config: - - report_comment + - docs/README.md + - LICENSE nextflow_config: - manifest.name - manifest.homePage + - config_defaults: + - params.ribo_database_manifest + multiqc_config: false nf_core_version: 2.14.1 repository_type: pipeline template: diff --git a/README.md b/README.md index 34eb434..24e7be7 100644 --- a/README.md +++ b/README.md @@ -3,58 +3,59 @@ [![nf-test](https://img.shields.io/badge/unit_tests-nf--test-337ab7.svg)](https://www.nf-test.com) [![Nextflow](https://img.shields.io/badge/nextflow%20DSL2-%E2%89%A523.04.0-23aa62.svg)](https://www.nextflow.io/) -[![run with conda](http://img.shields.io/badge/run%20with-conda-3EB049?labelColor=000000&logo=anaconda)](https://docs.conda.io/en/latest/) +[![run with conda ❌](http://img.shields.io/badge/run%20with-conda%20❌-3EB049?labelColor=000000&logo=anaconda)](https://docs.conda.io/en/latest/) [![run with docker](https://img.shields.io/badge/run%20with-docker-0db7ed?labelColor=000000&logo=docker)](https://www.docker.com/) [![run with singularity](https://img.shields.io/badge/run%20with-singularity-1d355c.svg?labelColor=000000)](https://sylabs.io/docs/) [![Launch on Seqera Platform](https://img.shields.io/badge/Launch%20%F0%9F%9A%80-Seqera%20Platform-%234256e7)](https://cloud.seqera.io/launch?pipeline=https://github.com/plant-food-research-open/genepal) ## Introduction -**plant-food-research-open/genepal** is a bioinformatics pipeline that ... +**plant-food-research-open/genepal** is a bioinformatics pipeline for single genome and pan-genome annotation. An overview is shown in the [Pipeline Flowchart](#pipeline-flowchart) and the references for the tools are listed in [CITATIONS.md](./CITATIONS.md). - +## Pipeline Flowchart - - +

    -1. Read QC ([`FastQC`](https://www.bioinformatics.babraham.ac.uk/projects/fastqc/)) -2. Present QC for raw reads ([`MultiQC`](http://multiqc.info/)) +- [FASTA VALIDATOR](https://github.com/linsalrob/fasta_validator): Validate genome fasta +- [EDTA](https://github.com/oushujun/EDTA) or [REPEATMODELER](https://github.com/Dfam-consortium/RepeatModeler): Create TE library +- [REPEATMASKER](https://github.com/rmhubley/RepeatMasker): Soft mask the genome fasta +- [FASTQC](https://www.bioinformatics.babraham.ac.uk/projects/fastqc), [FASTP](https://github.com/OpenGene/fastp), [SORTMERNA](https://github.com/sortmerna/sortmerna): QC, trim and filter RNASeq evidence +- [BRAKER](https://github.com/Gaius-Augustus/BRAKER): Annotate the genome fasta +- [LIFTOFF](https://github.com/agshumate/Liftoff): Liftoff annotations from reference genome fasta/gff +- [TSEBRA](https://github.com/Gaius-Augustus/TSEBRA) and [AGAT](https://github.com/NBISweden/AGAT): Merge BRAKER and Liftoff annotations +- [EGGNOG-MAPPER](https://github.com/eggnogdb/eggnog-mapper): Add functional annotation to gff +- [ORTHOFINDER](https://github.com/davidemms/OrthoFinder): Perform phylogenetic orthology inference across input genomes ## Usage +Refer to [usage](./docs/usage.md), [parameters](./docs/parameters.md) and [output](./docs/output.md) documents for details. + > [!NOTE] > If you are new to Nextflow and nf-core, please refer to [this page](https://nf-co.re/docs/usage/installation) on how to set-up Nextflow. Make sure to [test your setup](https://nf-co.re/docs/usage/introduction#how-to-run-a-pipeline) with `-profile test` before running the workflow on actual data. - +- `tag:` A unique tag which represents the genome throughout the pipeline +- `fasta:` fasta file for the genome +- `is_masked`: yes or no to denote whether the fasta file is already masked or not -Now, you can run the pipeline using: - - +At minimum, a file with proteins as evidence is also required. Now, you can run the pipeline using: ```bash nextflow run plant-food-research-open/genepal \ - -profile \ - --input samplesheet.csv \ - --outdir + -profile \ + --input assemblysheet.csv \ + --protein_evidence proteins.faa + --outdir ``` > [!WARNING] @@ -63,11 +64,44 @@ nextflow run plant-food-research-open/genepal \ ## Credits -plant-food-research-open/genepal was originally written by Usman Rashid, Jason Shiller. +plant-food-research-open/genepal workflows were originally scripted by Jason Shiller ([@jasonshiller](https://github.com/jasonshiller)). Usman Rashid ([@gallvp](https://github.com/gallvp)) wrote the Nextflow pipeline. We thank the following people for their extensive assistance in the development of this pipeline: - +- Cecilia Deng [@CeciliaDeng](https://github.com/CeciliaDeng) +- Charles David [@charlesdavid](https://github.com/charlesdavid) +- Chen Wu [@christinawu2008](https://github.com/christinawu2008) +- Leonardo Salgado [@leorippel](https://github.com/leorippel) +- Ross Crowhurst [@rosscrowhurst](https://github.com/rosscrowhurst) +- Susan Thomson [@cflsjt](https://github.com/cflsjt) +- Ting-Hsuan Chen [@ting-hsuan-chen](https://github.com/ting-hsuan-chen) + +The pipeline uses nf-core modules contributed by following authors: + + + + + + + + + + + + + + + + + + + + + + + + + ## Contributions and Support @@ -78,8 +112,6 @@ If you would like to contribute to this pipeline, please see the [contributing g - - An extensive list of references for the tools used by the pipeline can be found in the [`CITATIONS.md`](CITATIONS.md) file. This pipeline uses code and infrastructure developed and maintained by the [nf-core](https://nf-co.re) community, reused here under the [MIT license](https://github.com/nf-core/tools/blob/master/LICENSE). diff --git a/assets/rrna-db-test.txt b/assets/rrna-db-test.txt deleted file mode 100644 index 20116f9..0000000 --- a/assets/rrna-db-test.txt +++ /dev/null @@ -1 +0,0 @@ -https://raw.githubusercontent.com/biocore/sortmerna/v4.3.4/data/rRNA_databases/silva-euk-28s-id98.fasta diff --git a/conf/test_full.config b/conf/test_full.config new file mode 100644 index 0000000..8c88716 --- /dev/null +++ b/conf/test_full.config @@ -0,0 +1,28 @@ +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Nextflow config file for running full-size tests +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Defines input files and everything required to run a full size pipeline test. + + Use as follows: + nextflow run plant-food-research-open/genepal -profile test_full, --outdir + +---------------------------------------------------------------------------------------- +*/ + +params { + config_profile_name = 'Full test profile' + config_profile_description = 'Full test dataset to check pipeline function' + + // Tested with these minimal resources + max_cpus = 8 + max_memory = '32.GB' + max_time = '6.h' + + // Input data + input = "${projectDir}/tests/minimal/assemblysheet.csv" + protein_evidence = 'https://raw.githubusercontent.com/Gaius-Augustus/BRAKER/f58479fe5bb13a9e51c3ca09cb9e137cab3b8471/example/proteins.fa' + + braker_extra_args = '--gm_max_intergenic 10000 --skipOptimize' // Added for faster test execution! Do not use with actual data! + busco_lineage_datasets = 'eudicots_odb10' +} diff --git a/docs/img/genepal.drawio b/docs/img/genepal.drawio index 38446e4..a183f18 100644 --- a/docs/img/genepal.drawio +++ b/docs/img/genepal.drawio @@ -1,4 +1,4 @@ - + @@ -35,70 +35,70 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + @@ -152,15 +152,15 @@ - - - + + + @@ -172,17 +172,16 @@ - + - - + + - - - - - + + + + @@ -233,151 +232,133 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - + - - + + - - + + - - + + - - + + - - + + - - - - - - - - + + - + - + - + - + - + - + + + + - - + + - - + + - - + + - - + + - - + + - - + + + + + + + + diff --git a/docs/img/genepal.png b/docs/img/genepal.png index 679f214ab340f750ed6a4b3fd8c7710e541665df..fbbd9c60cd4d3f577e59799a7cee0ce51c6f1f03 100644 GIT binary patch literal 527127 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

    +TJMou550V1I^5I-$`OU0)cXbuB{6 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

    90Ok-S$9vkY) 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

    0a$N9u3{<_Fr%s9#-AS#q~* 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 z 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 avR2`$!^ZZH*_Oe7s!B%=WgIy6+y4WnSe$79 literal 334096 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

    $iblrI_)s+ka`Wa*U@#qCO^(V6_P%}l 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

    xksV|DXl#5b zYRx3Da&{}uAoE_zR2Ml}DbxC#oH?d5zcX*Ph{igJm^-bSLn~@~diZ$wP{nKN7;mbY zIQGiXfB#C!Yy7itAsGXwXs??A8YcDs0EM;Bd^qekzIVOkTOjvztd+)P&@PP#kEKk# zXAG9A)yx^B-1}xM0tCmo_In-zV6?*1&mDeNJJ-V)aPPjkwHn3{*&o5%ww<4<*!_8H zLCaX9-Xe?F6Y~ncpQfT!fZ3QFcg$5KDuhtWewfAKu>Wqosp&l<6q zKj~m^&m2L(5xWN)65Hi(t~>$=X$m2?4hr!mhWB&0a&hxy6p%`p`lK6?JIUP>$Cff3 z`IFykQRB15nS}GLr`OirSNK|97x1#p5Q6K|3hz9?`eUfJA4`V&{brhdr0K=|1LBpj^n57 zY0Mdd4<|q<_%SbOr0~x(rkCHK%x{k8SXZ~GKv?To(yQTAkp)@&kGN!PV6TZXC$Jb{ z&2d1p?Bq+dI2TbFZ7>}oNH8zPi=Ow~iQbVq509+Nf?$=F4)ksvBBsSh+m3p1!M47u z=EYVNhqy6d{TS@gWUN;~VT+AR8p94BR9#oM3UikzPoCKo>-ju|hdboon>~eBQU}(H ztO^3Ws+@Y3_*my-j)4jrrcEQGc=n@C+317--shqVbwpZSkVcrUL9cuk0#e|>La1k~!Kr(~OXsbn{PyHZ!P@2lhdGAK;J#}2YtQt4+u)=sC zkQp7|*KFpD_or)RXQPRC3yGDvBh9|5{L}|u<)d?jH>Hj4HXq;gj!?wqF!xiW8E`vg z_W$VV-z=OtKE;FRP*I$Q+qmrGGFpuEDNKqynW-*VXe!VHrCdAh%tG9Yv5|iY$0c1U zW@`!y4=9du&%P90He*nUM)0h^_Ri=~7?lRy2p{mMAF3>kip!rDFVs*iG4uxE z@rP;BuC5$fE-L{*(8diQ@gJfpNE29Wp*ZhM3!`rihW$U%zA`N8t&8`F7{EcL1VKVt zkOon5l%YWyq)|XXN?LLpiv~&Q1}Q;W8iVeVW|VHEo4I=!FgTub-}~He0~34y_g=kz zYc0(0U@%w8xyFS^q;x|Gb%MX4=Ny{l0BwC^^EGrI8cq-9H>}i@p#LRj#l}w-`+1|d;m}$3Incp z>5{*H+K&ROFar5=4RaoH%O;bw?dDqHTl0L_R%Ri*T|qAWz!bVR_o@$1k=n0;{9YOP zy}xI+6*d%i5ON~J!g8)YqafnY2-ES!_H6dE<9$f#pe*V>{BXiwWCR#nQIlW$=wcIFVkJ45xII0 zwSX8gJOXWb9M-SW3c4|DJQ2Tah3P1;`;k=EY1Ef@>M0IuoG;nUj$C?N680xLkH4Mb z`}#zi?M#Pq(KU?Bl$2ShCt7Jq^Mga;Czi8B3F~FdeKjIM_|dVXFJA zp38I!Qz(qC#`{P22(v)SG$50RA?9(yHk4=tZ8{yZTMquDK6|$|)i2dY~4m<|ca#d0O2yPR6!S7Wkl~q&>8wZ20D&?<5ja?;I=g=;-e~T}oj^*(=lzphoG4C?9 z-Cr26-BC)(=MEAr1gU9hS3J25LZHyAAFJ3ZHlHSemXM~#z{5~hP>6r-M=i!TpWj(G zDGf`~%g9N%d=&9M_Ox-Ms8Ws5{p%!`jsj5sK*ju8l0$<3N`h4)4R30wwCGFKV6jbF zeEcoVH!L`!-&dAuDLX}pwV^1uJpW=@5Y!+^8uX3H^(jm;jWrG@Px1Bj^^6eRI|qS0 zzY4ZYEgQ{OaMCAb7WbPRY@6V%MnS{+XKNc9le$+|q_pnd?d71Z8lVth`q7N**NuSJ z`OF|_-cKaV_eV`|oT=cSv7$h{zN^R*@tG_^lo=is74=0w@mYVrMxt5m3TyFL;B%O? zClomEyzTQvh%9pdfq8m7GTO)_SL*uo?85sIbzurULh!OOfdjGz&R`zmERQ)}DuDJX z-MRS!^qn{F7C%D$9bX@W(n2BkVQaF5#QC81{-1CE^FNP#AgZbtQJUMYZ-5+EUGx$u zzr9(c-p&2ZQ4|>5wwb3#UQA5vwyWEEpHcrdez^q0V1TtY6Duoyc8{q>^|-ZYh&mQk zzn4i@+@ldjcvF+iL2MWViUk1LxK&}Gv^0lKI5+!x5Wd^_^wBTfdbQn znZMsYV#r;xswF3OBy}jWn^nce#IV}><^!PD-{Zd(c|@e#i6&Jm1ki>ylsOPYFYCpW zcc0H@LIzbyk=Q?VCo@dLGtRb9A(ZrlXGGrpYHYiqhP5YSf5X8_0Kl-vl7r(0W{+Fq2E#jT6*hv(@28Bple#!av+Or zK~z>TTc_Ms#bkA=-L~!48I##CQDOio0+^vGfY?YXFzxBEbXy_ohavZHPl>v2uf|vI zuVvc;@V@CzzL#>oE2zSBzUnfQ_J;5ossWk>KrcD%t@U(ow(!kfvo1|UI^>b3uvPAI z4uL}}47(F`LxEpNJDAQ~gpltx6)&%vXq!f*o1korKp$Qt`)%5dfWaO7XtTyp7OX3H z_oBO9V_)4;{nN|Y zrbeuxsfl~Oes-+`Odo{w=)wdg4KCc%Qc)4bzaoxFhyqT=i?}N;4wuWCKgU7MLles1 zT|iU{4_P;|%yf2jfgnprNXXd6PROR%XR#a%3YtVP6N#t6qIm~ct{VQ$=YWonCkYD? zpQr@kSK86FEth~kh1!p+HDs2`*9QVkx~Ks4pD4a4+WT_s@(K0Gh4KxZ?E%ET7)nzC zx#4f|34*cJ_B5Ez4sXkoHlMS+)X1d z5sdpr5tt@|OP>k2jan{C2jR0Accm)K=&Sd|J-smx1FH8l-4}K0x=S4QpW9W3ky2|o z0ePTrohV25vS(B_;i+o`S$P|6Gp})e0siX+iY3=AM7aBye4US1mvx&qZ<{0A(U2%E+am z=67>~ge4G{?7DHI!cj-s<3!z7fb|tgWjl``&if&mr}Qwf&u!D4iZqoG4*~d|PR_$F zqu_FHNXJcmFTF~L9YJb0xz5QVa^g4LX$!@;bm@{U@VeT8Ya@#a?w5m6V1$21EIRU! zT<&+087MSQ43ZNHAAUTF+tAW-M|#7wCo5TZfBCgZj`@RC;>yia<@?*S52_WmsA~f1 zZn%npPC_Pz% znfvmx$+k@BWWm7e9y`28&OnhR@7re>7p5{X&)xX?m(%wTXCyyAwyfN{j`CEw z-F6@22c)usTAPk;HCNWARC^K81~fM`G^AEk#JC7i5)l)3w#AE}8m1Q5AyidV+QIDRu7Edw zIltcMug{$n{)GAS)n?Z!f&bxXfLws^U$}5fhFZa-|DFey-A$7Y+J@FvUh@^e;7OMi z7#SGEMd|s#I6#w+&#|~&HXj8F0Ga3gXt4rPXoB}1p@#`g^C#bJIqQ<>^;}s~Y6o}w7^qSG7j*qCs^ODQZwr=U%X82WZ2nwlDK995GtGc#jUK` zlqY6ytWM98h5l>$;<$?;Lh$OW0N_-$*maWBv!-L6I`xYi%pZb-_KJ9w7$z|^oluiC zPpPP?qAY|s%tzb(jIzWhJeBRiG^*Q>VAd*gGd1d(D}Sa+NG|4J{dFk+|721B;Pp1V z_j9?8#=wY1snq2ymy&cw>637979F7C&KUHzGeI_B%Yxb zrcL>gH9Qike z!~zDKqeG0)#JQui z64l~azt%4q6|Mm&t5k7+iWxo}T~h$#2i-`ezzF0Npf%7nBgAa(34g_RnWiYQU3X9LL5F39+5&4>%08qYwyeuebY9L z$iZ8|h7J!Fnufz~I!rhO28BDf*u-o&!i@49!US7gk;`mIPGF@Dqo}k)DOl=kS8-KG zvh=LW=?1yTDu4tb2^kWLqi*Z(C$)4LCA;^J;d1uURHd3~rC|pXiK|%b|DQ>3w+K`ry$ccBTxi zzGJfy;nP>+JdK@()$;x^;`5iK+0&~`-b7ynabX*mMQ4OJ@Z_wz9-jc?*V!I@#A5gx z)^Q1pe42Y%bIRx9JX{g`}fSXfv@oX2|` zb=GqqBX)*~&x2`pSwT0XjtwR33V~E)rK=ntrwsY+V?0D)oT?QtnZ-p!M4|v@gQuD0 z5;%XQ$|MJ}C3em`%uT+dKjI=q(E#(nczB*E|F^QhJ^RH>!*SQM##OxgSMizM~0 zO>$#Q~_8nO4wDcG+^njjvBmjsWju&jS})N}8#~TFcX; zMbPTHU^5DA2LG(AEbSLJ#eREi%(F>a5CVk;%U8?C?(_IQsD?0LE4;9v1&rCa5)d!w zx)mZt%kGE)nwt47f+2raz-0Mi)&_<`-}sWHU8=do)C`T?n=^7(r2+D!(_-8jHFEyf zMcB76B0T63gC4*A_xEc-y~Qqz$#i~Gc+s&nl0GlI#3Tv?2bT(q%2}+72fK*w8DLz+ zyD<@_KLR{GA7D}6q$8Tws(D*9Ov>i+4JT2aan7X!@As7^ zBkLITjBaALK3hIh5(AT8)4z+qB3MBB{7g44jMCJiuTg+N{d`?YlYm zMOl>OB(ijOM~IhVHp+}{TT36ONEsiHH1@O#LCy00uZK@5t~w*U`QgUcE0L6~YYYxf zz*mKWiXmZ7DVvYXx?2tPS1slEyIuoP&JT|}BZrmMn61lqh8F#RGP@HH zb??~pVt5YrSgjMN`v0%RQ77MdYJWQ$$)|(d?rF7si4}-t05~?np}&)l z-_oy-ArT2NH8oYHxKM~k_5BRILF!6~iiepJP1~0*7g65Tn+J~)@q2OMVCemPsTp;@ zZ}4ad_v=Q{WUI7}O`EC{XXZG?4OQNuMqLkYe<`XVLu}S;0_|Ad_`cx-bJqLY1nuwm z?)<(3xGk1Jr;6XhU#a^abSx1B^x4yu7JfEay0jNn!B}97c(u6jcKiFWK)7%|4_jxO~WP_!W$^9JB^JRao zo1_G|nQzfM{pY`a-ztjWl5WSv$6u*fiC+Ai{91<;hnQ7HRMv}%od^RM*VcoNM}3!G z@|N9WddW)#SwpKi!%CX}(fiaEO z1`UpJj>rEm3QHq;4_YjY0Kd*3B{kL&Fl5)4Gw6)^Ag+1=^g zX3E^?P-P?pG4_8heL@y`wHUAAzvjQn%VB)t!3OPqu17>h&YCbiq`N=~GO?p5`F#if z?c2Bf4*HRsX2=H{;JqcYYb3csQ?Xt^6XOtgOm0f}Kk+{y*;+1-^`EzWct-H6 z#HbP2BdD585QX)-+lZ2Cuw@1q=Y5}`V+Z;Fb`({?*n^Kg;ab&PGWv`n%S;rVE`_(c z(C7Bed0749@}}{=>n=?f6Ej`;oi2}U;_z|V4KaZKZ>fR{H8(f60&_BIz~uTjnW`rb zXJP*MmOgPCl-r(5?VqgwhyR4BVw9Jcqf9H?E+P+5bxk6?zvMr9v(>RBKcce!_iw<% zsb0lm1#yf27i0g}2j)v+lyDmXdVx%c>LyCMeg?4+A`m_#;b@UO_8U~uKq+@P>MDyK zGf{ru!r>L`DPk6y4_sVyU33<|JnKQ@=RvtQCC&lc-^Ck^qCIw;9n7y}ElrsIw_(nD z38yMHtJ!Kmi`bXs53tFRa~UDXF>X)5)Boq*+2TAI_ckP6{5;k_3-`DM z%rBYh1i&eH0@*%g@&4P(d)@-$!Ac`OTrDJjVDi1Q2D5LJLyilSKQALMeIPkN=TLXq zEzpbPaj(rkr2ZORoM&pq!s~~}%#A-YWtWT|NQcr)@XfvZBqp#(d+by4!hjlPCUw$+ zk1_i{&K5-;5ZP0ps#>gx*K)WFua#f&7zK6tLn_>)RIVOd<98}4xbPm-_1y;<3;rYx z5P3Y8U4FRMgO`vrWm2mI;BEdv`lM0g5u02f*dYuUxhs>ENvjCvX+R^VPWSi&*>eEB~g7_x_b z`BBvgg}#hF)Hv^lA3p=F>4~xBA_V#kv(I@HYgznHclRI;k_K}oEE2r%qNPBAV#;e- z&mngMYLFXXV&*L)VrmdMDdx65958#AB3x_qZ)Hxy1Ab<|4!15Qte*EjS6+M3`TDu? zBGilRpp7q~b=Q@L^#`bVO-;s_7IWTy5|-d93=lmoyf8cH9!re?kZd1Xr zfN8;fB{T3R*^b0|rb8m%i2E8J6X|OT{`|?H zp6lo>cAk=Q)r@@%bIn|)aMmX*9Hvwt&5TIykPnWnTy|K@ZuP1W6&IsND6g$y{13FO z!~(7+eeucC&(G3gJR@817+U8J6cqdviV6_S&(D8~aX2QvF8q^n*_$yN zlJ9qLukKA%Y;`L1x@1!%J2&A~|_HI+;%@OGERS3CbNOGmu`fcfKFR6cLcpESR)Fnl04WqhjmhnM`` zgOrN9tQ%|4u)-eS zNX2jeO!lRIve3%}d478t##+{^w0@S12S3H0gAp<^x=PGd%hPsU>yGe9hvSPpsd|1k zQ=@>1sT5`F9~ZQ6PXa*NR)w5DIigomPjAn>-EpWi;oZH5NDi0pIf%~_i)Hi?=Wp;n zAm7*skXDs{hldhVa3>;0;%#@;_1TgwrTPYulS?i_3 z2iMs&cUQTC&(DbI=?yjKESa)-Wr21f$+%FtQ_O2-9_GR&jMrfstqHy5`)O}n&>#L! zaTdl2M5~gRrQXqDfryNJ?>5A2djjbdqoR9fJh<`MQ2SPAQOy_1N;;`$f@zrw3I_-K zbsA&b`eup6{%Tu;Q}w)QtQ#Lu_8E#|q3dpYhV95UyR=ksyyI8!k4vd)x>(mbHytVX z;~lss(UkL71`%ewV4QLSetFznHB~xNEtqqY;Epg2BB$*1rDU|)AfS;qaT;0|hQ)GE zYVmWN>|!@9wv;w2o?%Pao8pD;a9F0^dysbY{6P%wfN8$j*XmZ-`6Q&qg6zkN$6owX zF~+rEIxTFA+3M{0d03llFt<8DQyi_Jolon=G^lf%C0p(@Lrd#j6ksjfALRGpE)qU_C63IRnW7+PRz15v;9Bd7A?AM%dk3H4vl(l^fow~ zvpT|>=_^^8&(T^U>YZn*CK%O*bRh)ONN2S{m2rbfFiNjJ0&2Ntq`Ll0IBp&}@NYgvSsmxdR9=)x zVPD%NeZ+vToZx`o$sJBAq>Q%JEm&zRKU(1mRKc#gg+A-MTx`7uE#L6!V>I_081070l5u;Wj-70^gYO2ARsQz}? zRl%2RSXhs4r|TKS*|{{E+z&+M0gJi443Bv21XqNv>!_a2dNNv znO1V7JV=NaOJLR|UeVcoQRi?iTSa~OKnub-aDs7MbH>vveL%HDjlFpmPp&jjoj9?t zGj}_=3r)p6TIe$_sjM&Oz80I#SrjwblM9?$KC3qOI2{N!u|h)~+sm+aKZdd+(v%^9 z-?y4$rjZLui~P69fae?ls=n6n>(Bb{U%6Vm?e39ir8Bm^-C5Tn z==3oqqTYapYf-%(8@p9Tm9B(I%HNIQs@1#nC8_erK=(q#g%#cHZlGIK?R-(X5g3oA zaPyurp3{_-CNd^mD{?ZbxZ8w9zK!+X zjoM3C`}$hV+4IK1kNj@=9utFA7FfpA{VYPnKNZpA+i~2z1e)3Vr5=iQ%{N0bIBonr z2Ze~C^oZ+MeZtLztV6m+=_gil6N-$|qV(w_7s2$uMPH*xf2kyyyQZ@!mdMPHvj# zPzLHrVLoV$A+IHO(CXILh3&1W)M5i)55jT^)KqTrr-mk2%Z65gwl)l=jHAabXiR%l zhT`?LbHA95k&wxPMUVTFA}YGU+WQT4EJ7JGn;NGdXl(fGUO`^2=85%K4kgQw8gkfh zNO0)OOB}BvRv}{ZI3U%o+j@^y$`wrV)0|9oNViTRuXD=cq*o-V!b3uk){Q!s!`DwH zJYIy+`c}IpzF}Rj{es-ux%(<}^R)4CtTgx*ey*Dn2QPxER3QubgMt zzu~|80m)4VboW~}{++fYKbTKltJ}=CdzEY!<-#RyJF$N-D31ieFGnxWe1aLTTS}4Q zi08Tmu=R`c~pDZjYS7UH8hgj#TWD^@ zfh)p{%;ZSbGWsJfiY`2im$5lZhX3nQrRUi4+e6>xmqqbvPls%!yqf4Dey zaLw_DBDqRrY+@p5V%TsbgMRGl=!HGqtD){&wMT{ocqkI>xUNb;CRu2=S@@||-@$~= zbgbyruy`WRb!Tnp%1C<6!uFbYx)%ZT;PPvj+iZ4-69WzAo&zUnb%CX}0kr|0MAB!G#sDV6(FZe!|V zbG;O%bNR#7_g8)D#v-UIM|>6DkLpr~cX@;;Q&>|BzGEW2NWphM3LT5n6TnFR5HnRV zkE5ck0Su7*YZ*-T=}&WUV#$){9Z*_HoF#rXMXsidPTc>9oDUb~5=BM2{e=2q49&qi zf)RsoZ)_uQDu5z*KK z7XFN8lsQpw_iXPEvJRr3cAts)*!&hY;u6&ZAfTm4#O{L>nI3^(4T;0e%Djize-vjw z+9Hq-CX8(xRsM-xMUGwJh7++Qed~MTzS7bV`}#gSSsZbeH^Skt9EZ+dcet>**v?iz z7O1kXBj}_hMa{WYSU11rm7YFbJUXjVjrFf&_VccNRKQ`~t^WK|JxE|~FKjJLoeMb= zwc*k?Wp&l7&VY=jXpSyXO_>$Af@;1L3~1-m=a$~1(P)K1CuFLc0dW*zcqm(+~geA<-01h+9O{CvNo4;F1>^UwbJ~^im}6w=fbrB?xSm zmbb+UtlqewK>B#(Tdm@ihH-0XaqwKVWLC!`OnR}n;9bW>*pyKseQT5O6;59paCVxI z2g6o)rj?gC-dTO_D6uS`^F$&jI2zEwO8Ih#VRB`Ak&FRxERWOO25Qc5nX%9)0-z^I zb8@W_UjPS32gGU$Ghgz%afRXF4uNvwtT!5^qwH01)Ft1JF!ib9p+#J$cUCeW)j+=E zEfg=zp}9FM--tc-?`Pjt0HJqG<#kN&IkKOCMqW;v1aTH<&TPAZE^)E}+j^$IVrvQr zeaNggOOCb`Cc#s2E}g(gJUe!Nr^q1Wd2%8&dBxUh=zPNJ_t%~3Q3pvPJuw_$Koe~3 zA#+)A8zi5(ehaPiWwiZbxaUQGKzD15uj-3{Lt$^AIU$~9_@S-GY~W*E0h_1Rz(`%Q zR7H!%#c&rJ!8>xze-x)Exd7+Dy6b5yqxJOQK&n>pQZuQPdtKym5o9k|>MPdv87-V| zm|S+c7M?^gI&Jf&*&rR0^X*QT`ALQ9Yy8N~B+n`4dWU_XuykRO8kDYsYvUM93LEt> z%zQPbkCYqMk0np8&CYuEFa&5#pdwS;A;oQE<5|P;=Nqp2uqT_%QUpYntBp<0@#j

    I$FJs;sXa;|IuhV$z2Dfzq2X@vB?%?RLL~> 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

    Process Name \\", - " \\ Software Version
    CUSTOM_DUMPSOFTWAREVERSIONSpython3.11.7
    yaml5.4.1
    TOOL1tool10.11.9
    TOOL2tool21.9
    WorkflowNextflow~HU+ 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�_ls!nm3cHDR8wFBPx2_gj#xaJ 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 RF$({*we&QTR%}1^e*oE@xsCt; diff --git a/nextflow_schema.json b/nextflow_schema.json index 14c8f3a..75cded1 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -139,10 +139,12 @@ }, "ribo_database_manifest": { "type": "string", - "default": "${projectDir}/assets/rrna-db-defaults.txt", - "description": "Ribosomal RNA fastas listed in a text sheet", "format": "file-path", - "mimetype": "text/txt" + "exists": true, + "mimetype": "text/plain", + "default": "${projectDir}/assets/rrna-db-defaults.txt", + "fa_icon": "fas fa-database", + "description": "Ribosomal RNA fastas listed in a text sheet" } } }, @@ -419,7 +421,8 @@ "pipelines_testdata_base_path": { "type": "string", "default": "https://raw.githubusercontent.com/nf-core/test-datasets/", - "hidden": true + "hidden": true, + "description": "Base path for pipeline test datasets" } } } diff --git a/pyproject.toml b/pyproject.toml deleted file mode 100644 index 5611062..0000000 --- a/pyproject.toml +++ /dev/null @@ -1,15 +0,0 @@ -# Config file for Python. Mostly used to configure linting of bin/*.py with Ruff. -# Should be kept the same as nf-core/tools to avoid fighting with template synchronisation. -[tool.ruff] -line-length = 120 -target-version = "py38" -cache-dir = "~/.cache/ruff" - -[tool.ruff.lint] -select = ["I", "E1", "E4", "E7", "E9", "F", "UP", "N"] - -[tool.ruff.lint.isort] -known-first-party = ["nf_core"] - -[tool.ruff.lint.per-file-ignores] -"__init__.py" = ["E402", "F401"] From f94ff82299bdc64b7676e4f1a28d83b627a537dd Mon Sep 17 00:00:00 2001 From: Usman Rashid Date: Fri, 23 Aug 2024 14:05:09 +1200 Subject: [PATCH 50/87] Updated tool list and contributors --- .github/contributors.sh | 5 +++++ README.md | 7 +++++-- 2 files changed, 10 insertions(+), 2 deletions(-) create mode 100755 .github/contributors.sh diff --git a/.github/contributors.sh b/.github/contributors.sh new file mode 100755 index 0000000..e694e49 --- /dev/null +++ b/.github/contributors.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash + +module_authors=$(find ./modules -name meta.yml | xargs -I {} grep -A20 'authors:' {} | grep '\- ' | tr -d '"' | tr '[:upper:]' '[:lower:]' | awk '{print $2}') +workflow_authors=$(find ./subworkflows -name meta.yml | xargs -I {} grep -A20 'authors:' {} | grep '\- ' | tr -d '"' | tr '[:upper:]' '[:lower:]' | awk '{print $2}') +echo -e "${module_authors}\n${workflow_authors}" | sort -V | uniq -c | sort -k1,1 -r | awk '{print $2}' | sed -n 's|@\(.*\)||p' diff --git a/README.md b/README.md index 24e7be7..be89347 100644 --- a/README.md +++ b/README.md @@ -14,12 +14,13 @@ ## Pipeline Flowchart -

    +

    - [FASTA VALIDATOR](https://github.com/linsalrob/fasta_validator): Validate genome fasta - [EDTA](https://github.com/oushujun/EDTA) or [REPEATMODELER](https://github.com/Dfam-consortium/RepeatModeler): Create TE library - [REPEATMASKER](https://github.com/rmhubley/RepeatMasker): Soft mask the genome fasta - [FASTQC](https://www.bioinformatics.babraham.ac.uk/projects/fastqc), [FASTP](https://github.com/OpenGene/fastp), [SORTMERNA](https://github.com/sortmerna/sortmerna): QC, trim and filter RNASeq evidence +- [STAR](https://github.com/alexdobin/STAR): RNAseq alignment - [BRAKER](https://github.com/Gaius-Augustus/BRAKER): Annotate the genome fasta - [LIFTOFF](https://github.com/agshumate/Liftoff): Liftoff annotations from reference genome fasta/gff - [TSEBRA](https://github.com/Gaius-Augustus/TSEBRA) and [AGAT](https://github.com/NBISweden/AGAT): Merge BRAKER and Liftoff annotations @@ -81,10 +82,12 @@ The pipeline uses nf-core modules contributed by following authors: - + + + From 2baea7f085426837f2f4c06f7da2fc4f31633aa8 Mon Sep 17 00:00:00 2001 From: Usman Rashid Date: Fri, 23 Aug 2024 14:06:58 +1200 Subject: [PATCH 51/87] Reduced image dpi to 300 --- docs/img/genepal.png | Bin 527127 -> 218769 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/img/genepal.png b/docs/img/genepal.png index fbbd9c60cd4d3f577e59799a7cee0ce51c6f1f03..93ca50e4222c67e3647e240bb1030b6440784403 100644 GIT binary patch literal 218769 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

    +TJMou550V1I^5I-$`OU0)cXbuB{6 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

    90Ok-S$9vkY) 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

    0a$N9u3{<_Fr%s9#-AS#q~* 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 z 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 avR2`$!^ZZH*_Oe7s!B%=WgIy6+y4WnSe$79 From e94e37c69d0de94700e1ad0f756fe15e389a6f37 Mon Sep 17 00:00:00 2001 From: Usman Rashid Date: Fri, 23 Aug 2024 14:14:38 +1200 Subject: [PATCH 52/87] Updated modules and subworkflows --- modules.json | 24 +++++++++---------- .../gallvp/agat/spaddintrons/environment.yml | 2 +- .../agat/spextractsequences/environment.yml | 2 +- modules/gallvp/busco/busco/environment.yml | 2 +- modules/gallvp/busco/busco/tests/main.nf.test | 2 +- .../busco/busco/tests/main.nf.test.snap | 6 ++--- .../gallvp/busco/generateplot/environment.yml | 2 +- .../custom/restoregffids/environment.yml | 2 +- .../custom/shortenfastaids/environment.yml | 1 - modules/gallvp/gffread/environment.yml | 2 +- .../gallvp/ltrretriever/lai/environment.yml | 2 +- .../repeatmasker/repeatmasker/environment.yml | 2 +- modules/nf-core/fastqc/main.nf | 5 +++- .../builddatabase/tests/main.nf.test | 4 ++-- .../repeatmodeler/tests/main.nf.test | 4 ++-- 15 files changed, 32 insertions(+), 30 deletions(-) diff --git a/modules.json b/modules.json index 94ded5a..d77d640 100644 --- a/modules.json +++ b/modules.json @@ -7,12 +7,12 @@ "gallvp": { "agat/spaddintrons": { "branch": "main", - "git_sha": "7bf6fbca23edc94490ffa6709f52b2f71c6fb130", + "git_sha": "004aba06875a2fee13207e2ffaa04deb2190a35d", "installed_by": ["gxf_fasta_agat_spaddintrons_spextractsequences"] }, "agat/spextractsequences": { "branch": "main", - "git_sha": "7bf6fbca23edc94490ffa6709f52b2f71c6fb130", + "git_sha": "004aba06875a2fee13207e2ffaa04deb2190a35d", "installed_by": ["gxf_fasta_agat_spaddintrons_spextractsequences"] }, "braker3": { @@ -22,22 +22,22 @@ }, "busco/busco": { "branch": "main", - "git_sha": "ab92c438688c1f4a3753b65914bfd2e6319cebb2", + "git_sha": "0fcdaa66410acee08d31884cdc3e8e4b1b79e66a", "installed_by": ["fasta_gxf_busco_plot"] }, "busco/generateplot": { "branch": "main", - "git_sha": "ab92c438688c1f4a3753b65914bfd2e6319cebb2", + "git_sha": "004aba06875a2fee13207e2ffaa04deb2190a35d", "installed_by": ["fasta_gxf_busco_plot"] }, "custom/restoregffids": { "branch": "main", - "git_sha": "490f8ab54c632d84f99edd6f208305ac5e283ab3", + "git_sha": "004aba06875a2fee13207e2ffaa04deb2190a35d", "installed_by": ["fasta_edta_lai"] }, "custom/shortenfastaids": { "branch": "main", - "git_sha": "490f8ab54c632d84f99edd6f208305ac5e283ab3", + "git_sha": "004aba06875a2fee13207e2ffaa04deb2190a35d", "installed_by": ["fasta_edta_lai"] }, "edta/edta": { @@ -47,17 +47,17 @@ }, "gffread": { "branch": "main", - "git_sha": "c04bf39d67027e044a6eaed0b7b0439fd8866fc7", + "git_sha": "004aba06875a2fee13207e2ffaa04deb2190a35d", "installed_by": ["fasta_gxf_busco_plot"] }, "ltrretriever/lai": { "branch": "main", - "git_sha": "490f8ab54c632d84f99edd6f208305ac5e283ab3", + "git_sha": "004aba06875a2fee13207e2ffaa04deb2190a35d", "installed_by": ["fasta_edta_lai"] }, "repeatmasker/repeatmasker": { "branch": "main", - "git_sha": "07c6fda11aff03d2d7fc68224e7fd96866fc6a8f", + "git_sha": "004aba06875a2fee13207e2ffaa04deb2190a35d", "installed_by": ["modules"] } } @@ -132,7 +132,7 @@ }, "fastqc": { "branch": "master", - "git_sha": "46eca555142d6e597729fcb682adcc791796f514", + "git_sha": "b49b8992e5271ce427f3a7cdb29628fc58400eb5", "installed_by": ["fastq_fastqc_umitools_fastp", "modules"] }, "gffcompare": { @@ -168,12 +168,12 @@ }, "repeatmodeler/builddatabase": { "branch": "master", - "git_sha": "1cbb5551b917aa423e414dcd69898d01520a309d", + "git_sha": "52507581f62929f98dd6e6c5c5824583fa6ef94d", "installed_by": ["modules"] }, "repeatmodeler/repeatmodeler": { "branch": "master", - "git_sha": "84efd2f87d07deb22ee9378f065a9aa5f1434161", + "git_sha": "52507581f62929f98dd6e6c5c5824583fa6ef94d", "installed_by": ["modules"] }, "samtools/cat": { diff --git a/modules/gallvp/agat/spaddintrons/environment.yml b/modules/gallvp/agat/spaddintrons/environment.yml index 854ee35..f108584 100644 --- a/modules/gallvp/agat/spaddintrons/environment.yml +++ b/modules/gallvp/agat/spaddintrons/environment.yml @@ -4,6 +4,6 @@ name: "agat_spaddintrons" channels: - conda-forge - bioconda - - defaults + dependencies: - "bioconda::agat=1.4.0" diff --git a/modules/gallvp/agat/spextractsequences/environment.yml b/modules/gallvp/agat/spextractsequences/environment.yml index be40401..c164fc0 100644 --- a/modules/gallvp/agat/spextractsequences/environment.yml +++ b/modules/gallvp/agat/spextractsequences/environment.yml @@ -4,6 +4,6 @@ name: "agat_spextractsequences" channels: - conda-forge - bioconda - - defaults + dependencies: - bioconda::agat=1.4.0 diff --git a/modules/gallvp/busco/busco/environment.yml b/modules/gallvp/busco/busco/environment.yml index 06a5d93..7df4e9a 100644 --- a/modules/gallvp/busco/busco/environment.yml +++ b/modules/gallvp/busco/busco/environment.yml @@ -2,6 +2,6 @@ name: busco_busco channels: - conda-forge - bioconda - - defaults + dependencies: - bioconda::busco=5.7.1 diff --git a/modules/gallvp/busco/busco/tests/main.nf.test b/modules/gallvp/busco/busco/tests/main.nf.test index 829bd28..e0eb735 100644 --- a/modules/gallvp/busco/busco/tests/main.nf.test +++ b/modules/gallvp/busco/busco/tests/main.nf.test @@ -126,7 +126,7 @@ nextflow_process { } assert snapshot( - process.out.batch_summary[0][1], + file(process.out.batch_summary[0][1]).name, process.out.full_table[0][1], process.out.missing_busco_list[0][1], process.out.versions[0] diff --git a/modules/gallvp/busco/busco/tests/main.nf.test.snap b/modules/gallvp/busco/busco/tests/main.nf.test.snap index 1b6411b..1140d5d 100644 --- a/modules/gallvp/busco/busco/tests/main.nf.test.snap +++ b/modules/gallvp/busco/busco/tests/main.nf.test.snap @@ -146,7 +146,7 @@ }, "test_busco_genome_multi_fasta": { "content": [ - "test-bacteria_odb10-busco.batch_summary.txt:md5,fcd3c208913e8abda3d6742c43fec5fa", + "test-bacteria_odb10-busco.batch_summary.txt", [ "full_table.tsv:md5,c657edcc7d0de0175869717551df6e83", "full_table.tsv:md5,638fe7590f442c57361554dae330eca1" @@ -159,9 +159,9 @@ ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.4" }, - "timestamp": "2024-05-03T13:23:50.255602" + "timestamp": "2024-08-22T11:24:24.828742" }, "test_busco_eukaryote_metaeuk": { "content": [ diff --git a/modules/gallvp/busco/generateplot/environment.yml b/modules/gallvp/busco/generateplot/environment.yml index 1ca5bab..eb97426 100644 --- a/modules/gallvp/busco/generateplot/environment.yml +++ b/modules/gallvp/busco/generateplot/environment.yml @@ -4,6 +4,6 @@ name: "busco_generateplot" channels: - conda-forge - bioconda - - defaults + dependencies: - bioconda::busco=5.7.1 diff --git a/modules/gallvp/custom/restoregffids/environment.yml b/modules/gallvp/custom/restoregffids/environment.yml index 2450c45..a13fdbb 100644 --- a/modules/gallvp/custom/restoregffids/environment.yml +++ b/modules/gallvp/custom/restoregffids/environment.yml @@ -4,6 +4,6 @@ name: "custom_restoregffids" channels: - conda-forge - bioconda - - defaults + dependencies: - "python=3.10.2" diff --git a/modules/gallvp/custom/shortenfastaids/environment.yml b/modules/gallvp/custom/shortenfastaids/environment.yml index a64758c..2d7b9f7 100644 --- a/modules/gallvp/custom/shortenfastaids/environment.yml +++ b/modules/gallvp/custom/shortenfastaids/environment.yml @@ -4,7 +4,6 @@ name: "custom_shortenfastaids" channels: - conda-forge - bioconda - - defaults dependencies: - biopython==1.75 diff --git a/modules/gallvp/gffread/environment.yml b/modules/gallvp/gffread/environment.yml index c6df58a..5575384 100644 --- a/modules/gallvp/gffread/environment.yml +++ b/modules/gallvp/gffread/environment.yml @@ -2,6 +2,6 @@ name: gffread channels: - conda-forge - bioconda - - defaults + dependencies: - bioconda::gffread=0.12.7 diff --git a/modules/gallvp/ltrretriever/lai/environment.yml b/modules/gallvp/ltrretriever/lai/environment.yml index e0e4968..b55c28a 100644 --- a/modules/gallvp/ltrretriever/lai/environment.yml +++ b/modules/gallvp/ltrretriever/lai/environment.yml @@ -4,6 +4,6 @@ name: "ltrretriever_lai" channels: - conda-forge - bioconda - - defaults + dependencies: - "bioconda::LTR_retriever=2.9.9" diff --git a/modules/gallvp/repeatmasker/repeatmasker/environment.yml b/modules/gallvp/repeatmasker/repeatmasker/environment.yml index efc290a..d701a5c 100644 --- a/modules/gallvp/repeatmasker/repeatmasker/environment.yml +++ b/modules/gallvp/repeatmasker/repeatmasker/environment.yml @@ -4,6 +4,6 @@ name: "repeatmasker_repeatmasker" channels: - conda-forge - bioconda - - defaults + dependencies: - "bioconda::repeatmasker=4.1.5" diff --git a/modules/nf-core/fastqc/main.nf b/modules/nf-core/fastqc/main.nf index d79f1c8..d8989f4 100644 --- a/modules/nf-core/fastqc/main.nf +++ b/modules/nf-core/fastqc/main.nf @@ -26,7 +26,10 @@ process FASTQC { def rename_to = old_new_pairs*.join(' ').join(' ') def renamed_files = old_new_pairs.collect{ old_name, new_name -> new_name }.join(' ') - def memory_in_mb = MemoryUnit.of("${task.memory}").toUnit('MB') + // The total amount of allocated RAM by FastQC is equal to the number of threads defined (--threads) time the amount of RAM defined (--memory) + // https://github.com/s-andrews/FastQC/blob/1faeea0412093224d7f6a07f777fad60a5650795/fastqc#L211-L222 + // Dividing the task.memory by task.cpu allows to stick to requested amount of RAM in the label + def memory_in_mb = MemoryUnit.of("${task.memory}").toUnit('MB') / task.cpus // FastQC memory value allowed range (100 - 10000) def fastqc_memory = memory_in_mb > 10000 ? 10000 : (memory_in_mb < 100 ? 100 : memory_in_mb) diff --git a/modules/nf-core/repeatmodeler/builddatabase/tests/main.nf.test b/modules/nf-core/repeatmodeler/builddatabase/tests/main.nf.test index bfe5d78..78b78a6 100644 --- a/modules/nf-core/repeatmodeler/builddatabase/tests/main.nf.test +++ b/modules/nf-core/repeatmodeler/builddatabase/tests/main.nf.test @@ -16,7 +16,7 @@ nextflow_process { """ input[0] = [ [ id:'test' ], // meta map - file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) ] """ } @@ -42,7 +42,7 @@ nextflow_process { """ input[0] = [ [ id:'test' ], // meta map - file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) ] """ } diff --git a/modules/nf-core/repeatmodeler/repeatmodeler/tests/main.nf.test b/modules/nf-core/repeatmodeler/repeatmodeler/tests/main.nf.test index 65edd7e..829e222 100644 --- a/modules/nf-core/repeatmodeler/repeatmodeler/tests/main.nf.test +++ b/modules/nf-core/repeatmodeler/repeatmodeler/tests/main.nf.test @@ -20,7 +20,7 @@ nextflow_process { """ input[0] = [ [ id:'test' ], // meta map - file(params.test_data['homo_sapiens']['genome']['genome_fasta'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ] """ } @@ -56,7 +56,7 @@ nextflow_process { """ input[0] = [ [ id:'test' ], // meta map - file(params.test_data['homo_sapiens']['genome']['genome_fasta'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ] """ } From a31ba798bcc2f6cc49dce9150f387d84ef965c4f Mon Sep 17 00:00:00 2001 From: Usman Rashid Date: Fri, 23 Aug 2024 15:11:53 +1200 Subject: [PATCH 53/87] Added info for outputs --- .gitignore | 1 + CHANGELOG.md | 2 +- README.md | 4 +- conf/modules.config | 8 +++- docs/output.md | 44 ++++++++----------- .../utils_nfcore_genepal_pipeline/main.nf | 6 ++- .../{target => assembly}/donghong.chr1.fsa.gz | 0 .../red5_v2p1_chr1.fasta.gz | 0 .../{target => assembly}/red5_v3_chr1.fasta | 0 tests/stub/assembly/red7_v5_chr3.fasta | 0 tests/stub/assemblysheet.csv | 7 +-- 11 files changed, 38 insertions(+), 34 deletions(-) rename tests/stub/{target => assembly}/donghong.chr1.fsa.gz (100%) rename tests/stub/{target => assembly}/red5_v2p1_chr1.fasta.gz (100%) rename tests/stub/{target => assembly}/red5_v3_chr1.fasta (100%) create mode 100644 tests/stub/assembly/red7_v5_chr3.fasta diff --git a/.gitignore b/.gitignore index dfb706c..c9a1e95 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ .nextflow* work/ data/ +null/ results/ .DS_Store testing/ diff --git a/CHANGELOG.md b/CHANGELOG.md index 59c8b28..704489e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## 0.4.0+dev - [19-Aug-2024] +## 0.4.0+dev - [23-Aug-2024] ### `Added` diff --git a/README.md b/README.md index be89347..3f14e6a 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@

    - [FASTA VALIDATOR](https://github.com/linsalrob/fasta_validator): Validate genome fasta -- [EDTA](https://github.com/oushujun/EDTA) or [REPEATMODELER](https://github.com/Dfam-consortium/RepeatModeler): Create TE library +- [REPEATMODELER](https://github.com/Dfam-consortium/RepeatModeler) or [EDTA](https://github.com/oushujun/EDTA): Create TE library - [REPEATMASKER](https://github.com/rmhubley/RepeatMasker): Soft mask the genome fasta - [FASTQC](https://www.bioinformatics.babraham.ac.uk/projects/fastqc), [FASTP](https://github.com/OpenGene/fastp), [SORTMERNA](https://github.com/sortmerna/sortmerna): QC, trim and filter RNASeq evidence - [STAR](https://github.com/alexdobin/STAR): RNAseq alignment @@ -55,7 +55,7 @@ At minimum, a file with proteins as evidence is also required. Now, you can run nextflow run plant-food-research-open/genepal \ -profile \ --input assemblysheet.csv \ - --protein_evidence proteins.faa + --protein_evidence proteins.faa \ --outdir ``` diff --git a/conf/modules.config b/conf/modules.config index 6e433c0..262927a 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -57,12 +57,18 @@ process { // SUBWORKFLOW: PREPROCESS_RNASEQ if(!params.skip_fastqc) { withName: '.*:PREPROCESS_RNASEQ:FASTQ_FASTQC_UMITOOLS_FASTP:FASTQC_RAW' { ext.args = '--quiet' + + publishDir = [ + path: { "${params.outdir}/fastqc_raw" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + ] } withName: '.*:PREPROCESS_RNASEQ:FASTQ_FASTQC_UMITOOLS_FASTP:FASTQC_TRIM' { ext.args = '--quiet' publishDir = [ - path: { "${params.outdir}/fastp/fastqc" }, + path: { "${params.outdir}/fastqc_trim" }, mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, ] diff --git a/docs/output.md b/docs/output.md index 4e5c251..0792e4c 100644 --- a/docs/output.md +++ b/docs/output.md @@ -2,7 +2,7 @@ ## Introduction -This document describes the output produced by the pipeline. Most of the plots are taken from the MultiQC report, which summarises results at the end of the pipeline. +This document describes the output produced by the pipeline. The directories listed below will be created in the results directory after the pipeline has finished. All paths are relative to the top-level results directory. @@ -12,48 +12,40 @@ The directories listed below will be created in the results directory after the The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes data using the following steps: -- [FastQC](#fastqc) - Raw read QC -- [MultiQC](#multiqc) - Aggregate report describing results and QC from the whole pipeline -- [Pipeline information](#pipeline-information) - Report metrics generated during the workflow execution + -### FastQC +- [Repeat annotation](#repeat-annotation) +- [Repeat masking](#repeat-masking) +- [RNAseq trimming, filtering and QC](#rnaseq-trimming-filtering-and-qc) + +### Repeat annotation
    Output files -- `fastqc/` - - `*_fastqc.html`: FastQC report containing quality metrics. - - `*_fastqc.zip`: Zip archive containing the FastQC report, tab-delimited data file and plot images. +- `repeatmodeler/` + - `*.fa`: Repeat library +- `edta/` + - `*.EDTA.TElib.fa`: Repeat library
    -[FastQC](http://www.bioinformatics.babraham.ac.uk/projects/fastqc/) gives general quality metrics about your sequenced reads. It provides information about the quality score distribution across your reads, per base sequence content (%A/T/G/C), adapter contamination and overrepresented sequences. For further reading and documentation see the [FastQC help pages](http://www.bioinformatics.babraham.ac.uk/projects/fastqc/Help/). - -![MultiQC - FastQC sequence counts plot](images/mqc_fastqc_counts.png) - -![MultiQC - FastQC mean quality scores plot](images/mqc_fastqc_quality.png) - -![MultiQC - FastQC adapter content plot](images/mqc_fastqc_adapter.png) - -:::note -The FastQC plots displayed in the MultiQC report shows _untrimmed_ reads. They may contain adapter sequence and potentially regions with low quality. -::: +A repeat library is created with either [REPEATMODELER](https://github.com/Dfam-consortium/RepeatModeler) or [EDTA](https://github.com/oushujun/EDTA). The choice of the tool is specified by the `repeat_annotator` parameter (default: `repeatmodeler`). Repeat annotation outputs are saved only if `save_annotated_te_lib` parameter is set to `true` (default: `false`). -### MultiQC +### Repeat masking
    Output files -- `multiqc/` - - `multiqc_report.html`: a standalone HTML file that can be viewed in your web browser. - - `multiqc_data/`: directory containing parsed statistics from the different tools used in the pipeline. - - `multiqc_plots/`: directory containing static images from the report in various formats. +- `repeatmasker/` + - `*.masked`: Masked assembly + - `*.gff`: Repeatmasker output in GFF3 format
    -[MultiQC](http://multiqc.info) is a visualization tool that generates a single HTML report summarising all samples in your project. Most of the pipeline QC results are visualised in the report and further statistics are available in the report data directory. +Soft masking of the repeats is performed with [REPEATMASKER](https://github.com/rmhubley/RepeatMasker) using the repeat library prepared in the previous step. Masking outputs are saved only if `repeatmasker_save_outputs` parameter is set to `true` (default: `false`). -Results generated by MultiQC collate pipeline QC from supported tools e.g. FastQC. The pipeline has special steps which also allow the software versions to be reported in the MultiQC output for future traceability. For more information about how to use MultiQC reports, see . +### RNAseq trimming, filtering and QC ### Pipeline information diff --git a/subworkflows/local/utils_nfcore_genepal_pipeline/main.nf b/subworkflows/local/utils_nfcore_genepal_pipeline/main.nf index 5b14b68..f084ba8 100644 --- a/subworkflows/local/utils_nfcore_genepal_pipeline/main.nf +++ b/subworkflows/local/utils_nfcore_genepal_pipeline/main.nf @@ -54,7 +54,11 @@ workflow PIPELINE_INITIALISATION { // 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 --outdir " + def String workflow_command = """nextflow run ${workflow.manifest.name} \\ + -profile \\ + --input assemblysheet.csv \\ + --protein_evidence proteins.faa \\ + --outdir """ UTILS_NFVALIDATION_PLUGIN ( help, workflow_command, diff --git a/tests/stub/target/donghong.chr1.fsa.gz b/tests/stub/assembly/donghong.chr1.fsa.gz similarity index 100% rename from tests/stub/target/donghong.chr1.fsa.gz rename to tests/stub/assembly/donghong.chr1.fsa.gz diff --git a/tests/stub/target/red5_v2p1_chr1.fasta.gz b/tests/stub/assembly/red5_v2p1_chr1.fasta.gz similarity index 100% rename from tests/stub/target/red5_v2p1_chr1.fasta.gz rename to tests/stub/assembly/red5_v2p1_chr1.fasta.gz diff --git a/tests/stub/target/red5_v3_chr1.fasta b/tests/stub/assembly/red5_v3_chr1.fasta similarity index 100% rename from tests/stub/target/red5_v3_chr1.fasta rename to tests/stub/assembly/red5_v3_chr1.fasta diff --git a/tests/stub/assembly/red7_v5_chr3.fasta b/tests/stub/assembly/red7_v5_chr3.fasta new file mode 100644 index 0000000..e69de29 diff --git a/tests/stub/assemblysheet.csv b/tests/stub/assemblysheet.csv index 7fdff29..10581ff 100644 --- a/tests/stub/assemblysheet.csv +++ b/tests/stub/assemblysheet.csv @@ -1,4 +1,5 @@ tag,fasta,is_masked,te_lib,braker_gff3,braker_hints -red5_v2p1,tests/stub/target/red5_v2p1_chr1.fasta.gz,no,,tests/stub/braker/red5_v2p1.gff3.gz,tests/stub/braker/red5_v2p1.hints.gff.gz -donghong,tests/stub/target/donghong.chr1.fsa.gz,no,tests/stub/te_lib/donghong.TElib.fa.gz,tests/stub/braker/red5_v2p1.gff3.gz,tests/stub/braker/red5_v2p1.hints.gff.gz -red5_v3,tests/stub/target/red5_v3_chr1.fasta,yes +red5_v2p1,tests/stub/assembly/red5_v2p1_chr1.fasta.gz,no,,tests/stub/braker/red5_v2p1.gff3.gz,tests/stub/braker/red5_v2p1.hints.gff.gz +donghong,tests/stub/assembly/donghong.chr1.fsa.gz,no,tests/stub/te_lib/donghong.TElib.fa.gz,tests/stub/braker/red5_v2p1.gff3.gz,tests/stub/braker/red5_v2p1.hints.gff.gz +red5_v3,tests/stub/assembly/red5_v3_chr1.fasta,yes +red7_v5,tests/stub/assembly/red7_v5_chr3.fasta,no From 806c7cfe7463bee4f79df6c1c43a37b833b30678 Mon Sep 17 00:00:00 2001 From: Usman Rashid Date: Wed, 11 Sep 2024 10:07:00 +1200 Subject: [PATCH 54/87] Updated deps and parameters docs --- CHANGELOG.md | 19 +- README.md | 4 +- docs/parameters.md | 2 +- modules.json | 55 ++- .../agat/convertspgff2gtf/environment.yml | 2 - .../agat/convertspgxf2gxf/environment.yml | 2 - .../environment.yml | 2 - .../agat/spmergeannotations/environment.yml | 2 - modules/nf-core/cat/cat/environment.yml | 2 - modules/nf-core/cat/fastq/environment.yml | 2 - modules/nf-core/eggnogmapper/environment.yml | 2 - .../nf-core/fastavalidator/environment.yml | 2 - modules/nf-core/fastp/environment.yml | 2 - modules/nf-core/fastqc/environment.yml | 2 - modules/nf-core/gffcompare/environment.yml | 2 - modules/nf-core/gffcompare/meta.yml | 1 + modules/nf-core/gffcompare/tests/main.nf.test | 103 +++++ .../gffcompare/tests/main.nf.test.snap | 365 ++++++++++++++++++ modules/nf-core/gffread/environment.yml | 2 - modules/nf-core/gt/gff3/environment.yml | 2 - modules/nf-core/gunzip/environment.yml | 2 - modules/nf-core/liftoff/environment.yml | 3 - modules/nf-core/orthofinder/environment.yml | 7 +- modules/nf-core/orthofinder/main.nf | 33 +- modules/nf-core/orthofinder/meta.yml | 12 + .../nf-core/orthofinder/tests/main.nf.test | 73 +++- .../orthofinder/tests/main.nf.test.snap | 353 +++-------------- .../builddatabase/environment.yml | 2 - .../repeatmodeler/environment.yml | 2 - modules/nf-core/samtools/cat/environment.yml | 2 - modules/nf-core/sortmerna/environment.yml | 2 - modules/nf-core/star/align/environment.yml | 2 - .../star/genomegenerate/environment.yml | 2 - modules/nf-core/tsebra/environment.yml | 2 - .../nf-core/umitools/extract/environment.yml | 2 - subworkflows/local/fasta_orthofinder.nf | 5 +- .../nf-core/utils_nextflow_pipeline/main.nf | 24 +- .../tests/nextflow.config | 2 +- .../nf-core/utils_nfcore_pipeline/main.nf | 45 ++- 39 files changed, 694 insertions(+), 456 deletions(-) create mode 100644 modules/nf-core/gffcompare/tests/main.nf.test create mode 100644 modules/nf-core/gffcompare/tests/main.nf.test.snap diff --git a/CHANGELOG.md b/CHANGELOG.md index 704489e..b5f894b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## 0.4.0+dev - [23-Aug-2024] +## 0.4.0+dev - [11-Sep-2024] ### `Added` @@ -19,15 +19,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 10. Added param `enforce_full_intron_support` to turn on/off strict model purging by TSEBRA [#21](https://github.com/plant-food-research-open/genepal/issues/21) 11. Added param `filter_liftoff_by_hints` to evaluate liftoff models with TSEBRA to make sure they have the same level of evidence as BRAKER [#28](ttps://github.com/plant-food-research-open/genepal/issues/28) 12. Added a script to automatically check module version updates -13. Updated modules: `AGAT/CONVERTSPGFF2GTF`, `CAT_FASTQ`, `CUSTOM/DUMPSOFTWAREVERSIONS`, `EGGNOGMAPPER`, `FASTP`, `GFFREAD`, `SAMTOOLS/CAT`, `CUSTOM/RESTOREGFFIDS`, `CUSTOM/SHORTENFASTAIDS`, `EDTA/EDTA`, `CAT/CAT`, `FASTQC`, `GUNZIP`, `LIFTOFF`, `STAR/ALIGN`, `STAR/GENOMEGENERATE`, `UMITOOLS/EXTRACT`, -14. Updated sub-workflows: `FASTQ_FASTQC_UMITOOLS_FASTP` and `FASTA_EDTA_LAI` -15. Reduced `BRAKER3` threads to 8 [#55](https://github.com/plant-food-research-open/genepal/issues/55) -16. Now the final annotations are stored in the `annotations` folder [#53](https://github.com/plant-food-research-open/genepal/issues/53) -17. Added `-gff` flag to `REPEATMASKER` to save the gff file [#54](https://github.com/plant-food-research-open/genepal/issues/54) -18. Now a single `fasta` file can be directly specified for `protein_evidence` -19. `eggnogmapper_db_dir` is not a required parameter anymore -20. `eggnogmapper_tax_scope` is now set to 1 (root div) by default -21. Added a `test` profile based on public data +13. Reduced `BRAKER3` threads to 8 [#55](https://github.com/plant-food-research-open/genepal/issues/55) +14. Now the final annotations are stored in the `annotations` folder [#53](https://github.com/plant-food-research-open/genepal/issues/53) +15. Added `-gff` flag to `REPEATMASKER` to save the gff file [#54](https://github.com/plant-food-research-open/genepal/issues/54) +16. Now a single `fasta` file can be directly specified for `protein_evidence` +17. `eggnogmapper_db_dir` is not a required parameter anymore +18. `eggnogmapper_tax_scope` is now set to 1 (root div) by default +19. Added a `test` profile based on public data +20. Updated modules and sub-workflows ### `Fixed` diff --git a/README.md b/README.md index 3f14e6a..ef4c3ba 100644 --- a/README.md +++ b/README.md @@ -39,8 +39,8 @@ First, prepare an assemblysheet with your input genomes that looks as follows: `assemblysheet.csv`: ```csv -tag,fasta,is_masked -a_thaliana,/path/to/genome.fa,yes +tag ,fasta ,is_masked +a_thaliana ,/path/to/genome.fa ,yes ``` Each row represents an input genome and the fields are: diff --git a/docs/parameters.md b/docs/parameters.md index 3e293ad..6de7e25 100644 --- a/docs/parameters.md +++ b/docs/parameters.md @@ -109,4 +109,4 @@ Less common options for the pipeline, typically set in a config file. | `validationShowHiddenParams` | Show all params when using `--help` | `boolean` | | | True | | `validationFailUnrecognisedParams` | Validation of parameters fails when an unrecognised parameter is found. | `boolean` | | | True | | `validationLenientMode` | Validation of parameters in lenient more. | `boolean` | | | True | -| `pipelines_testdata_base_path` | | `string` | https://raw.githubusercontent.com/nf-core/test-datasets/ | | True | +| `pipelines_testdata_base_path` | Base path for pipeline test datasets | `string` | https://raw.githubusercontent.com/nf-core/test-datasets/ | | True | diff --git a/modules.json b/modules.json index d77d640..cb588f6 100644 --- a/modules.json +++ b/modules.json @@ -87,123 +87,122 @@ "nf-core": { "agat/convertspgff2gtf": { "branch": "master", - "git_sha": "0a0b723d114e502207072603479b635dfbc2bf59", + "git_sha": "06c8865e36741e05ad32ef70ab3fac127486af48", "installed_by": ["modules"] }, "agat/convertspgxf2gxf": { "branch": "master", - "git_sha": "0a0b723d114e502207072603479b635dfbc2bf59", + "git_sha": "06c8865e36741e05ad32ef70ab3fac127486af48", "installed_by": ["modules"] }, "agat/spfilterfeaturefromkilllist": { "branch": "master", - "git_sha": "d1535889747781d919bc81da2344952f4bfa2be4", + "git_sha": "06c8865e36741e05ad32ef70ab3fac127486af48", "installed_by": ["modules"] }, "agat/spmergeannotations": { "branch": "master", - "git_sha": "8e30f5d09155b45ddafc2d1357fc5f447f1aaa03", + "git_sha": "06c8865e36741e05ad32ef70ab3fac127486af48", "installed_by": ["modules"] }, "cat/cat": { "branch": "master", - "git_sha": "5bb8ca085e17549e185e1823495ab8d20727a805", + "git_sha": "06c8865e36741e05ad32ef70ab3fac127486af48", "installed_by": ["modules"] }, "cat/fastq": { "branch": "master", - "git_sha": "1ceaa8ba4d0fd886dbca0e545815d905b7407de7", + "git_sha": "06c8865e36741e05ad32ef70ab3fac127486af48", "installed_by": ["modules"] }, "eggnogmapper": { "branch": "master", - "git_sha": "b34fb117e397e72a070cde8adf21b758670c90f5", + "git_sha": "06c8865e36741e05ad32ef70ab3fac127486af48", "installed_by": ["modules"] }, "fastavalidator": { "branch": "master", - "git_sha": "90dad5491658049282ceb287a3d7732c1ce39837", + "git_sha": "06c8865e36741e05ad32ef70ab3fac127486af48", "installed_by": ["modules"] }, "fastp": { "branch": "master", - "git_sha": "1ceaa8ba4d0fd886dbca0e545815d905b7407de7", + "git_sha": "06c8865e36741e05ad32ef70ab3fac127486af48", "installed_by": ["fastq_fastqc_umitools_fastp"] }, "fastqc": { "branch": "master", - "git_sha": "b49b8992e5271ce427f3a7cdb29628fc58400eb5", + "git_sha": "06c8865e36741e05ad32ef70ab3fac127486af48", "installed_by": ["fastq_fastqc_umitools_fastp", "modules"] }, "gffcompare": { "branch": "master", - "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", + "git_sha": "06c8865e36741e05ad32ef70ab3fac127486af48", "installed_by": ["modules"] }, "gffread": { "branch": "master", - "git_sha": "6c996d7fbe0816dcbb68ce587ad5f873313682a1", + "git_sha": "06c8865e36741e05ad32ef70ab3fac127486af48", "installed_by": ["modules"] }, "gt/gff3": { "branch": "master", - "git_sha": "9a8bba5910982ae637dedb8664e3121db77e173f", + "git_sha": "06c8865e36741e05ad32ef70ab3fac127486af48", "installed_by": ["modules"] }, "gunzip": { "branch": "master", - "git_sha": "4e5f4687318f24ba944a13609d3ea6ebd890737d", - "installed_by": ["modules"], - "patch": "modules/nf-core/gunzip/gunzip.diff" + "git_sha": "06c8865e36741e05ad32ef70ab3fac127486af48", + "installed_by": ["modules"] }, "liftoff": { "branch": "master", - "git_sha": "b34fb117e397e72a070cde8adf21b758670c90f5", + "git_sha": "06c8865e36741e05ad32ef70ab3fac127486af48", "installed_by": ["modules"] }, "orthofinder": { "branch": "master", - "git_sha": "07f10f34d88408af7c71f13227d11f23b7f53b50", + "git_sha": "06c8865e36741e05ad32ef70ab3fac127486af48", "installed_by": ["modules"] }, "repeatmodeler/builddatabase": { "branch": "master", - "git_sha": "52507581f62929f98dd6e6c5c5824583fa6ef94d", + "git_sha": "06c8865e36741e05ad32ef70ab3fac127486af48", "installed_by": ["modules"] }, "repeatmodeler/repeatmodeler": { "branch": "master", - "git_sha": "52507581f62929f98dd6e6c5c5824583fa6ef94d", + "git_sha": "06c8865e36741e05ad32ef70ab3fac127486af48", "installed_by": ["modules"] }, "samtools/cat": { "branch": "master", - "git_sha": "04fbbc7c43cebc0b95d5b126f6d9fe4effa33519", + "git_sha": "06c8865e36741e05ad32ef70ab3fac127486af48", "installed_by": ["modules"] }, "sortmerna": { "branch": "master", - "git_sha": "df05c8db5195867c0bc7b92c1788115b66f0d17d", + "git_sha": "06c8865e36741e05ad32ef70ab3fac127486af48", "installed_by": ["modules"] }, "star/align": { "branch": "master", - "git_sha": "46eca555142d6e597729fcb682adcc791796f514", + "git_sha": "06c8865e36741e05ad32ef70ab3fac127486af48", "installed_by": ["modules"] }, "star/genomegenerate": { "branch": "master", - "git_sha": "46eca555142d6e597729fcb682adcc791796f514", + "git_sha": "06c8865e36741e05ad32ef70ab3fac127486af48", "installed_by": ["modules"] }, "tsebra": { "branch": "master", - "git_sha": "0995f9cd0cc5e4eb60f7870280b75ecdb5ab0db2", + "git_sha": "06c8865e36741e05ad32ef70ab3fac127486af48", "installed_by": ["modules"] }, "umitools/extract": { "branch": "master", - "git_sha": "b4919e9a2b4d8b71061e601633db4600a3858fa1", + "git_sha": "06c8865e36741e05ad32ef70ab3fac127486af48", "installed_by": ["fastq_fastqc_umitools_fastp"] } } @@ -217,12 +216,12 @@ }, "utils_nextflow_pipeline": { "branch": "master", - "git_sha": "5caf7640a9ef1d18d765d55339be751bb0969dfa", + "git_sha": "d20fb2a9cc3e2835e9d067d1046a63252eb17352", "installed_by": ["subworkflows"] }, "utils_nfcore_pipeline": { "branch": "master", - "git_sha": "92de218a329bfc9a9033116eb5f65fd270e72ba3", + "git_sha": "2fdce49d30c0254f76bc0f13c55c17455c1251ab", "installed_by": ["subworkflows"] }, "utils_nfvalidation_plugin": { diff --git a/modules/nf-core/agat/convertspgff2gtf/environment.yml b/modules/nf-core/agat/convertspgff2gtf/environment.yml index 6747331..0410ee7 100644 --- a/modules/nf-core/agat/convertspgff2gtf/environment.yml +++ b/modules/nf-core/agat/convertspgff2gtf/environment.yml @@ -1,7 +1,5 @@ -name: agat_convertspgff2gtf channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::agat=1.4.0 diff --git a/modules/nf-core/agat/convertspgxf2gxf/environment.yml b/modules/nf-core/agat/convertspgxf2gxf/environment.yml index 6ed34fa..0410ee7 100644 --- a/modules/nf-core/agat/convertspgxf2gxf/environment.yml +++ b/modules/nf-core/agat/convertspgxf2gxf/environment.yml @@ -1,7 +1,5 @@ -name: agat_convertspgxf2gxf channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::agat=1.4.0 diff --git a/modules/nf-core/agat/spfilterfeaturefromkilllist/environment.yml b/modules/nf-core/agat/spfilterfeaturefromkilllist/environment.yml index fb2df48..a6b5f2b 100644 --- a/modules/nf-core/agat/spfilterfeaturefromkilllist/environment.yml +++ b/modules/nf-core/agat/spfilterfeaturefromkilllist/environment.yml @@ -1,9 +1,7 @@ --- # yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json -name: "agat_spfilterfeaturefromkilllist" channels: - conda-forge - bioconda - - defaults dependencies: - "bioconda::agat=1.4.0" diff --git a/modules/nf-core/agat/spmergeannotations/environment.yml b/modules/nf-core/agat/spmergeannotations/environment.yml index 5644e08..a6b5f2b 100644 --- a/modules/nf-core/agat/spmergeannotations/environment.yml +++ b/modules/nf-core/agat/spmergeannotations/environment.yml @@ -1,9 +1,7 @@ --- # yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json -name: "agat_spmergeannotations" channels: - conda-forge - bioconda - - defaults dependencies: - "bioconda::agat=1.4.0" diff --git a/modules/nf-core/cat/cat/environment.yml b/modules/nf-core/cat/cat/environment.yml index 17a04ef..9b01c86 100644 --- a/modules/nf-core/cat/cat/environment.yml +++ b/modules/nf-core/cat/cat/environment.yml @@ -1,7 +1,5 @@ -name: cat_cat channels: - conda-forge - bioconda - - defaults dependencies: - conda-forge::pigz=2.3.4 diff --git a/modules/nf-core/cat/fastq/environment.yml b/modules/nf-core/cat/fastq/environment.yml index 8c69b12..c7eb9bd 100644 --- a/modules/nf-core/cat/fastq/environment.yml +++ b/modules/nf-core/cat/fastq/environment.yml @@ -1,7 +1,5 @@ -name: cat_fastq channels: - conda-forge - bioconda - - defaults dependencies: - conda-forge::coreutils=8.30 diff --git a/modules/nf-core/eggnogmapper/environment.yml b/modules/nf-core/eggnogmapper/environment.yml index f4fb6fd..2092ea5 100644 --- a/modules/nf-core/eggnogmapper/environment.yml +++ b/modules/nf-core/eggnogmapper/environment.yml @@ -1,7 +1,5 @@ -name: eggnogmapper channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::eggnog-mapper=2.1.12 diff --git a/modules/nf-core/fastavalidator/environment.yml b/modules/nf-core/fastavalidator/environment.yml index 70f346e..44d55c1 100644 --- a/modules/nf-core/fastavalidator/environment.yml +++ b/modules/nf-core/fastavalidator/environment.yml @@ -1,9 +1,7 @@ --- # yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json -name: "fastavalidator" channels: - conda-forge - bioconda - - defaults dependencies: - "bioconda::py_fasta_validator=0.6" diff --git a/modules/nf-core/fastp/environment.yml b/modules/nf-core/fastp/environment.yml index 70389e6..26d4aca 100644 --- a/modules/nf-core/fastp/environment.yml +++ b/modules/nf-core/fastp/environment.yml @@ -1,7 +1,5 @@ -name: fastp channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::fastp=0.23.4 diff --git a/modules/nf-core/fastqc/environment.yml b/modules/nf-core/fastqc/environment.yml index 1787b38..691d4c7 100644 --- a/modules/nf-core/fastqc/environment.yml +++ b/modules/nf-core/fastqc/environment.yml @@ -1,7 +1,5 @@ -name: fastqc channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::fastqc=0.12.1 diff --git a/modules/nf-core/gffcompare/environment.yml b/modules/nf-core/gffcompare/environment.yml index bcd633e..2b52417 100644 --- a/modules/nf-core/gffcompare/environment.yml +++ b/modules/nf-core/gffcompare/environment.yml @@ -1,7 +1,5 @@ -name: gffcompare channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::gffcompare=0.12.6 diff --git a/modules/nf-core/gffcompare/meta.yml b/modules/nf-core/gffcompare/meta.yml index 674f08c..dd944f2 100644 --- a/modules/nf-core/gffcompare/meta.yml +++ b/modules/nf-core/gffcompare/meta.yml @@ -89,3 +89,4 @@ authors: - "@jemten" maintainers: - "@jemten" + - "@gallvp" diff --git a/modules/nf-core/gffcompare/tests/main.nf.test b/modules/nf-core/gffcompare/tests/main.nf.test new file mode 100644 index 0000000..258733a --- /dev/null +++ b/modules/nf-core/gffcompare/tests/main.nf.test @@ -0,0 +1,103 @@ + +nextflow_process { + + name "Test Process GFFCOMPARE" + script "../main.nf" + process "GFFCOMPARE" + + tag "modules" + tag "modules_nfcore" + tag "gffcompare" + + test("test-gffcompare") { + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.gff3', checkIfExists: true) ], + ] + input[1] = [ + [ id:'sarscov2' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true) + ] + input[2] = [ + [ id:'sarscov2' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.gtf', checkIfExists: true) + ] + + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("test-gffcompare-combine") { + + when { + process { + """ + input[0] = [ [ id:'test' ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.gff3', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.gtf', checkIfExists: true) + ] + ] + input[1] = [ + [ id:'sarscov2' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true) + ] + input[2] = [[id:'sarscov2'], []] + + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("test-gffcompare-combine-stub") { + options '-stub' + when { + process { + """ + input[0] = [ [ id:'test' ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.gff3', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.gtf', checkIfExists: true) + ] + ] + input[1] = [ + [ id:'sarscov2' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true) + ] + input[2] = [[id:'sarscov2'], []] + + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + +} diff --git a/modules/nf-core/gffcompare/tests/main.nf.test.snap b/modules/nf-core/gffcompare/tests/main.nf.test.snap new file mode 100644 index 0000000..9db3c0a --- /dev/null +++ b/modules/nf-core/gffcompare/tests/main.nf.test.snap @@ -0,0 +1,365 @@ +{ + "test-gffcompare": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.annotated.gtf:md5,9fdcea941cb003026e1ab04a45c3944c" + ] + ], + "1": [ + + ], + "2": [ + [ + { + "id": "test" + }, + "test.genome.gff3.tmap:md5,8935511caaf122288167f8d908eb2632" + ] + ], + "3": [ + [ + { + "id": "test" + }, + "test.genome.gff3.refmap:md5,60461ca3548615db12d31c53c5356ee5" + ] + ], + "4": [ + [ + { + "id": "test" + }, + "test.loci:md5,b637f88bbedda47aee859f7bc20c36ab" + ] + ], + "5": [ + [ + { + "id": "test" + }, + "test.stats:md5,a7c5a8cd8aa7188a2152e894f2355f10" + ] + ], + "6": [ + [ + { + "id": "test" + }, + "test.tracking:md5,344cd0bea36e5aab3a0824f2aaf7b824" + ] + ], + "7": [ + "versions.yml:md5,6f40a0e2547d9e3f4cf8e142ae5c17b6" + ], + "annotated_gtf": [ + [ + { + "id": "test" + }, + "test.annotated.gtf:md5,9fdcea941cb003026e1ab04a45c3944c" + ] + ], + "combined_gtf": [ + + ], + "loci": [ + [ + { + "id": "test" + }, + "test.loci:md5,b637f88bbedda47aee859f7bc20c36ab" + ] + ], + "refmap": [ + [ + { + "id": "test" + }, + "test.genome.gff3.refmap:md5,60461ca3548615db12d31c53c5356ee5" + ] + ], + "stats": [ + [ + { + "id": "test" + }, + "test.stats:md5,a7c5a8cd8aa7188a2152e894f2355f10" + ] + ], + "tmap": [ + [ + { + "id": "test" + }, + "test.genome.gff3.tmap:md5,8935511caaf122288167f8d908eb2632" + ] + ], + "tracking": [ + [ + { + "id": "test" + }, + "test.tracking:md5,344cd0bea36e5aab3a0824f2aaf7b824" + ] + ], + "versions": [ + "versions.yml:md5,6f40a0e2547d9e3f4cf8e142ae5c17b6" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-29T19:08:50.819004" + }, + "test-gffcompare-combine-stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.annotated.gtf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test" + }, + "test.combined.gtf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + [ + { + "id": "test" + }, + "test.tmap:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + [ + { + "id": "test" + }, + "test.refmap:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "4": [ + [ + { + "id": "test" + }, + "test.loci:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "5": [ + [ + { + "id": "test" + }, + "test.stats:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "6": [ + [ + { + "id": "test" + }, + "test.tracking:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "7": [ + "versions.yml:md5,6f40a0e2547d9e3f4cf8e142ae5c17b6" + ], + "annotated_gtf": [ + [ + { + "id": "test" + }, + "test.annotated.gtf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "combined_gtf": [ + [ + { + "id": "test" + }, + "test.combined.gtf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "loci": [ + [ + { + "id": "test" + }, + "test.loci:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "refmap": [ + [ + { + "id": "test" + }, + "test.refmap:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "stats": [ + [ + { + "id": "test" + }, + "test.stats:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "tmap": [ + [ + { + "id": "test" + }, + "test.tmap:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "tracking": [ + [ + { + "id": "test" + }, + "test.tracking:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,6f40a0e2547d9e3f4cf8e142ae5c17b6" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-29T19:10:25.943352" + }, + "test-gffcompare-combine": { + "content": [ + { + "0": [ + + ], + "1": [ + [ + { + "id": "test" + }, + "test.combined.gtf:md5,deebda20162eddb07b53d1da393a92a1" + ] + ], + "2": [ + [ + { + "id": "test" + }, + [ + "test.genome.gff3.tmap:md5,6f3866608c9d2b45d169dbc15a6372c4", + "test.genome.gtf.tmap:md5,6f3866608c9d2b45d169dbc15a6372c4" + ] + ] + ], + "3": [ + + ], + "4": [ + [ + { + "id": "test" + }, + "test.loci:md5,2c020db4486b1997f68555825065c28d" + ] + ], + "5": [ + [ + { + "id": "test" + }, + "test.stats:md5,040cf90e0d649479173a5c846928cd67" + ] + ], + "6": [ + [ + { + "id": "test" + }, + "test.tracking:md5,55b10c257c1a07224cb5d995c799f782" + ] + ], + "7": [ + "versions.yml:md5,6f40a0e2547d9e3f4cf8e142ae5c17b6" + ], + "annotated_gtf": [ + + ], + "combined_gtf": [ + [ + { + "id": "test" + }, + "test.combined.gtf:md5,deebda20162eddb07b53d1da393a92a1" + ] + ], + "loci": [ + [ + { + "id": "test" + }, + "test.loci:md5,2c020db4486b1997f68555825065c28d" + ] + ], + "refmap": [ + + ], + "stats": [ + [ + { + "id": "test" + }, + "test.stats:md5,040cf90e0d649479173a5c846928cd67" + ] + ], + "tmap": [ + [ + { + "id": "test" + }, + [ + "test.genome.gff3.tmap:md5,6f3866608c9d2b45d169dbc15a6372c4", + "test.genome.gtf.tmap:md5,6f3866608c9d2b45d169dbc15a6372c4" + ] + ] + ], + "tracking": [ + [ + { + "id": "test" + }, + "test.tracking:md5,55b10c257c1a07224cb5d995c799f782" + ] + ], + "versions": [ + "versions.yml:md5,6f40a0e2547d9e3f4cf8e142ae5c17b6" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-29T19:10:21.420587" + } +} \ No newline at end of file diff --git a/modules/nf-core/gffread/environment.yml b/modules/nf-core/gffread/environment.yml index c6df58a..ee23984 100644 --- a/modules/nf-core/gffread/environment.yml +++ b/modules/nf-core/gffread/environment.yml @@ -1,7 +1,5 @@ -name: gffread channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::gffread=0.12.7 diff --git a/modules/nf-core/gt/gff3/environment.yml b/modules/nf-core/gt/gff3/environment.yml index 8289fb3..666eb47 100644 --- a/modules/nf-core/gt/gff3/environment.yml +++ b/modules/nf-core/gt/gff3/environment.yml @@ -1,9 +1,7 @@ --- # yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json -name: "gt_gff3" channels: - conda-forge - bioconda - - defaults dependencies: - "bioconda::genometools-genometools=1.6.5" diff --git a/modules/nf-core/gunzip/environment.yml b/modules/nf-core/gunzip/environment.yml index dfc02a7..c779485 100644 --- a/modules/nf-core/gunzip/environment.yml +++ b/modules/nf-core/gunzip/environment.yml @@ -1,8 +1,6 @@ -name: gunzip channels: - conda-forge - bioconda - - defaults dependencies: - conda-forge::grep=3.11 - conda-forge::sed=4.8 diff --git a/modules/nf-core/liftoff/environment.yml b/modules/nf-core/liftoff/environment.yml index 7f3eadf..94c10a3 100644 --- a/modules/nf-core/liftoff/environment.yml +++ b/modules/nf-core/liftoff/environment.yml @@ -1,9 +1,6 @@ -name: liftoff - channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::liftoff=1.6.3 diff --git a/modules/nf-core/orthofinder/environment.yml b/modules/nf-core/orthofinder/environment.yml index f93b9bb..68c475f 100644 --- a/modules/nf-core/orthofinder/environment.yml +++ b/modules/nf-core/orthofinder/environment.yml @@ -1,9 +1,6 @@ ---- -# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json -name: "orthofinder" channels: - conda-forge - bioconda - - defaults dependencies: - - "bioconda::orthofinder=2.5.5" + - bioconda::diamond=2.1.9 + - bioconda::orthofinder=2.5.5 diff --git a/modules/nf-core/orthofinder/main.nf b/modules/nf-core/orthofinder/main.nf index 2971fc0..a47c4de 100644 --- a/modules/nf-core/orthofinder/main.nf +++ b/modules/nf-core/orthofinder/main.nf @@ -9,31 +9,40 @@ process ORTHOFINDER { input: tuple val(meta), path(fastas, stageAs: 'input/') + tuple val(meta2), path(prior_run) output: - tuple val(meta), path("$prefix") , emit: orthofinder - path "versions.yml" , emit: versions + tuple val(meta), path("$prefix") , emit: orthofinder + tuple val(meta), path("$prefix/WorkingDirectory") , emit: working + path "versions.yml" , emit: versions when: task.ext.when == null || task.ext.when script: - def args = task.ext.args ?: '' - prefix = task.ext.prefix ?: "${meta.id}" + def args = task.ext.args ?: '' + prefix = task.ext.prefix ?: "${meta.id}" + def include_command = prior_run ? "-b $prior_run" : '' + """ mkdir temp_pickle orthofinder \\ - $args \\ -t $task.cpus \\ -a $task.cpus \\ -p temp_pickle \\ -f input \\ - -n $prefix + -n $prefix \\ + $include_command \\ + $args + + if [ -e input/OrthoFinder/Results_$prefix ]; then + mv input/OrthoFinder/Results_$prefix $prefix + fi - mv \\ - input/OrthoFinder/Results_$prefix \\ - $prefix + if [ -e ${prior_run}/OrthoFinder/Results_$prefix ]; then + mv ${prior_run}/OrthoFinder/Results_$prefix $prefix + fi cat <<-END_VERSIONS > versions.yml "${task.process}": @@ -42,8 +51,10 @@ process ORTHOFINDER { """ stub: - def args = task.ext.args ?: '' - prefix = task.ext.prefix ?: "${meta.id}" + def args = task.ext.args ?: '' + prefix = task.ext.prefix ?: "${meta.id}" + def include_command = prior_run ? "-b $prior_run" : '' + """ mkdir -p $prefix/Comparative_Genomics_Statistics mkdir $prefix/Gene_Duplication_Events diff --git a/modules/nf-core/orthofinder/meta.yml b/modules/nf-core/orthofinder/meta.yml index 23cc532..8c7689b 100644 --- a/modules/nf-core/orthofinder/meta.yml +++ b/modules/nf-core/orthofinder/meta.yml @@ -29,6 +29,15 @@ input: type: list description: Input fasta files pattern: "*.{fa,faa,fasta,fas,pep}" + - meta2: + type: map + description: | + Groovy Map containing a name + e.g. `[ id:'folder1' ]` + - prior_run: + type: directory + description: | + A folder container containing a previous WorkingDirectory from Orthofinder. output: - meta: @@ -43,6 +52,9 @@ output: - orthofinder: type: directory description: Orthofinder output directory + - working: + type: directory + description: Orthofinder output WorkingDirectory (used for the orthofinder resume function) authors: - "@GallVp" diff --git a/modules/nf-core/orthofinder/tests/main.nf.test b/modules/nf-core/orthofinder/tests/main.nf.test index 2d64800..aa68d1d 100644 --- a/modules/nf-core/orthofinder/tests/main.nf.test +++ b/modules/nf-core/orthofinder/tests/main.nf.test @@ -9,6 +9,7 @@ nextflow_process { tag "modules" tag "modules_nfcore" tag "orthofinder" + tag "untar" test("sarscov2 - candidatus_portiera_aleyrodidarum - proteome") { @@ -28,6 +29,10 @@ nextflow_process { [ id:'test', single_end:false ], [ file_a, file_b ] ] + input[1] = [ + [], + [] + ] """ } } @@ -41,8 +46,6 @@ nextflow_process { all_files << file } - def all_file_names = all_files.collect { it.name }.sort(false) - def stable_file_names = [ 'Statistics_PerSpecies.tsv', 'SpeciesTree_Gene_Duplications_0.5_Support.txt', @@ -52,8 +55,66 @@ nextflow_process { def stable_files = all_files.findAll { it.name in stable_file_names } assert snapshot( - all_file_names, - stable_files, + stable_files.toSorted(), + process.out.versions[0] + ).match() + } + + } + + + test("sarscov2 - candidatus_portiera_aleyrodidarum - proteome - resume") { + + + setup { + run("UNTAR") { + script "../../untar/main.nf" + process { + """ + input[0] = [ [ id:'test1' ], // meta map + file(params.modules_testdata_base_path + 'delete_me/orthofinder/WorkingDirectory.tar.gz', checkIfExists: true) + ] + """ + } + } + } + + when { + process { + """ + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/proteome.fasta', checkIfExists: true) + .copyTo("${workDir}/sarscov2.fasta") + + def file_a = file("https://raw.githubusercontent.com/nf-core/test-datasets/proteinfold/testdata/sequences/H1065.fasta") + def file_c = UNTAR.out.untar + input[0] = [ + [ id:'test_2', single_end:false ], + [ file_a ] + ] + input[1] = UNTAR.out.untar + """ + } + } + + then { + assert process.success + + def all_files = [] + + file(process.out.orthofinder[0][1]).eachFileRecurse (FileType.FILES) { file -> + all_files << file + } + + def stable_file_names = [ + 'Statistics_PerSpecies.tsv', + 'OrthologuesStats_Totals.tsv', + 'Duplications_per_Species_Tree_Node.tsv' + ] + + def stable_files = all_files.findAll { it.name in stable_file_names } + + assert snapshot( + stable_files.toSorted(), process.out.versions[0] ).match() } @@ -80,6 +141,10 @@ nextflow_process { [ id:'test', single_end:false ], [ file_a, file_b ] ] + input[1] = [ + [], + [] + ] """ } } diff --git a/modules/nf-core/orthofinder/tests/main.nf.test.snap b/modules/nf-core/orthofinder/tests/main.nf.test.snap index 8b621c0..f2c7b91 100644 --- a/modules/nf-core/orthofinder/tests/main.nf.test.snap +++ b/modules/nf-core/orthofinder/tests/main.nf.test.snap @@ -1,310 +1,6 @@ { "sarscov2 - candidatus_portiera_aleyrodidarum - proteome": { "content": [ - [ - "Blast0_0.txt.gz", - "Blast0_1.txt.gz", - "Blast1_0.txt.gz", - "Blast1_1.txt.gz", - "Citation.txt", - "Duplications.tsv", - "Duplications_per_Orthogroup.tsv", - "Duplications_per_Species_Tree_Node.tsv", - "Log.txt", - "N0.tsv", - "OG0000000.fa", - "OG0000000_tree.txt", - "OG0000000_tree.txt", - "OG0000000_tree_id.txt", - "OG0000001.fa", - "OG0000001_tree.txt", - "OG0000001_tree.txt", - "OG0000001_tree_id.txt", - "OG0000002.fa", - "OG0000003.fa", - "OG0000004.fa", - "OG0000005.fa", - "OG0000006.fa", - "OG0000007.fa", - "OG0000008.fa", - "OG0000009.fa", - "OG0000010.fa", - "OG0000011.fa", - "OG0000012.fa", - "OG0000013.fa", - "OG0000014.fa", - "OG0000015.fa", - "OG0000016.fa", - "OG0000017.fa", - "OG0000018.fa", - "OG0000019.fa", - "OG0000020.fa", - "OG0000021.fa", - "OG0000022.fa", - "OG0000023.fa", - "OG0000024.fa", - "OG0000025.fa", - "OG0000026.fa", - "OG0000027.fa", - "OG0000028.fa", - "OG0000029.fa", - "OG0000030.fa", - "OG0000031.fa", - "OG0000032.fa", - "OG0000033.fa", - "OG0000034.fa", - "OG0000035.fa", - "OG0000036.fa", - "OG0000037.fa", - "OG0000038.fa", - "OG0000039.fa", - "OG0000040.fa", - "OG0000041.fa", - "OG0000042.fa", - "OG0000043.fa", - "OG0000044.fa", - "OG0000045.fa", - "OG0000046.fa", - "OG0000047.fa", - "OG0000048.fa", - "OG0000049.fa", - "OG0000050.fa", - "OG0000051.fa", - "OG0000052.fa", - "OG0000053.fa", - "OG0000054.fa", - "OG0000055.fa", - "OG0000056.fa", - "OG0000057.fa", - "OG0000058.fa", - "OG0000059.fa", - "OG0000060.fa", - "OG0000061.fa", - "OG0000062.fa", - "OG0000063.fa", - "OG0000064.fa", - "OG0000065.fa", - "OG0000066.fa", - "OG0000067.fa", - "OG0000068.fa", - "OG0000069.fa", - "OG0000070.fa", - "OG0000071.fa", - "OG0000072.fa", - "OG0000073.fa", - "OG0000074.fa", - "OG0000075.fa", - "OG0000076.fa", - "OG0000077.fa", - "OG0000078.fa", - "OG0000079.fa", - "OG0000080.fa", - "OG0000081.fa", - "OG0000082.fa", - "OG0000083.fa", - "OG0000084.fa", - "OG0000085.fa", - "OG0000086.fa", - "OG0000087.fa", - "OG0000088.fa", - "OG0000089.fa", - "OG0000090.fa", - "OG0000091.fa", - "OG0000092.fa", - "OG0000093.fa", - "OG0000094.fa", - "OG0000095.fa", - "OG0000096.fa", - "OG0000097.fa", - "OG0000098.fa", - "OG0000099.fa", - "OG0000100.fa", - "OG0000101.fa", - "OG0000102.fa", - "OG0000103.fa", - "OG0000104.fa", - "OG0000105.fa", - "OG0000106.fa", - "OG0000107.fa", - "OG0000108.fa", - "OG0000109.fa", - "OG0000110.fa", - "OG0000111.fa", - "OG0000112.fa", - "OG0000113.fa", - "OG0000114.fa", - "OG0000115.fa", - "OG0000116.fa", - "OG0000117.fa", - "OG0000118.fa", - "OG0000119.fa", - "OG0000120.fa", - "OG0000121.fa", - "OG0000122.fa", - "OG0000123.fa", - "OG0000124.fa", - "OG0000125.fa", - "OG0000126.fa", - "OG0000127.fa", - "OG0000128.fa", - "OG0000129.fa", - "OG0000130.fa", - "OG0000131.fa", - "OG0000132.fa", - "OG0000133.fa", - "OG0000134.fa", - "OG0000135.fa", - "OG0000136.fa", - "OG0000137.fa", - "OG0000138.fa", - "OG0000139.fa", - "OG0000140.fa", - "OG0000141.fa", - "OG0000142.fa", - "OG0000143.fa", - "OG0000144.fa", - "OG0000145.fa", - "OG0000146.fa", - "OG0000147.fa", - "OG0000148.fa", - "OG0000149.fa", - "OG0000150.fa", - "OG0000151.fa", - "OG0000152.fa", - "OG0000153.fa", - "OG0000154.fa", - "OG0000155.fa", - "OG0000156.fa", - "OG0000157.fa", - "OG0000158.fa", - "OG0000159.fa", - "OG0000160.fa", - "OG0000161.fa", - "OG0000162.fa", - "OG0000163.fa", - "OG0000164.fa", - "OG0000165.fa", - "OG0000166.fa", - "OG0000167.fa", - "OG0000168.fa", - "OG0000169.fa", - "OG0000170.fa", - "OG0000171.fa", - "OG0000172.fa", - "OG0000173.fa", - "OG0000174.fa", - "OG0000175.fa", - "OG0000176.fa", - "OG0000177.fa", - "OG0000178.fa", - "OG0000179.fa", - "OG0000180.fa", - "OG0000181.fa", - "OG0000182.fa", - "OG0000183.fa", - "OG0000184.fa", - "OG0000185.fa", - "OG0000186.fa", - "OG0000187.fa", - "OG0000188.fa", - "OG0000189.fa", - "OG0000190.fa", - "OG0000191.fa", - "OG0000192.fa", - "OG0000193.fa", - "OG0000194.fa", - "OG0000195.fa", - "OG0000196.fa", - "OG0000197.fa", - "OG0000198.fa", - "OG0000199.fa", - "OG0000200.fa", - "OG0000201.fa", - "OG0000202.fa", - "OG0000203.fa", - "OG0000204.fa", - "OG0000205.fa", - "OG0000206.fa", - "OG0000207.fa", - "OG0000208.fa", - "OG0000209.fa", - "OG0000210.fa", - "OG0000211.fa", - "OG0000212.fa", - "OG0000213.fa", - "OG0000214.fa", - "OG0000215.fa", - "OG0000216.fa", - "OG0000217.fa", - "OG0000218.fa", - "OG0000219.fa", - "OG0000220.fa", - "OG0000221.fa", - "OG0000222.fa", - "OG0000223.fa", - "OG0000224.fa", - "OG0000225.fa", - "OG0000226.fa", - "OG0000227.fa", - "OG0000228.fa", - "OG0000229.fa", - "OG0000230.fa", - "OG0000231.fa", - "OG0000232.fa", - "OG0000233.fa", - "OG0000234.fa", - "OG0000235.fa", - "OG0000236.fa", - "OG0000237.fa", - "OG0000238.fa", - "OG0000239.fa", - "OG0000240.fa", - "OG0000241.fa", - "OG0000242.fa", - "OG0000243.fa", - "OG0000244.fa", - "OG0000245.fa", - "OrthoFinder_graph.txt", - "Orthogroups.GeneCount.tsv", - "Orthogroups.tsv", - "Orthogroups.txt", - "Orthogroups_SingleCopyOrthologues.txt", - "Orthogroups_SpeciesOverlaps.tsv", - "Orthogroups_UnassignedGenes.tsv", - "OrthologuesStats_Totals.tsv", - "OrthologuesStats_many-to-many.tsv", - "OrthologuesStats_many-to-one.tsv", - "OrthologuesStats_one-to-many.tsv", - "OrthologuesStats_one-to-one.tsv", - "SequenceIDs.txt", - "SimpleTest.phy", - "SimpleTest.phy_fastme_stat.txt", - "SimpleTest.tre", - "Species0.fa", - "Species0.fa", - "Species1.fa", - "SpeciesIDs.txt", - "SpeciesTree_Gene_Duplications_0.5_Support.txt", - "SpeciesTree_rooted.txt", - "SpeciesTree_rooted_ids.txt", - "SpeciesTree_rooted_node_labels.txt", - "SpeciesTree_unrooted.txt", - "SpeciesTree_unrooted_ids.txt", - "Statistics_Overall.tsv", - "Statistics_PerSpecies.tsv", - "candidatus_portiera_aleyrodidarum.tsv", - "candidatus_portiera_aleyrodidarum.tsv", - "candidatus_portiera_aleyrodidarum__v__sarscov2.tsv", - "clusters_OrthoFinder_I1.5.txt", - "clusters_OrthoFinder_I1.5.txt_id_pairs.txt", - "diamondDBSpecies0.dmnd", - "diamondDBSpecies0.dmnd", - "diamondDBSpecies1.dmnd", - "sarscov2.tsv", - "sarscov2.tsv", - "sarscov2__v__candidatus_portiera_aleyrodidarum.tsv", - "test_search_results.txt.gz" - ], [ "Statistics_PerSpecies.tsv:md5,984b5011a34d54527fe17896bfa36a2d", "SpeciesTree_Gene_Duplications_0.5_Support.txt:md5,8b7a673e2e8b6d1aeb697f2bb88afa18", @@ -313,10 +9,10 @@ "versions.yml:md5,86b472c85626aac1840eec0769016f5c" ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-06-07T21:33:50.902329" + "timestamp": "2024-09-03T10:59:02.895708598" }, "sarscov2 - candidatus_portiera_aleyrodidarum - proteome - stub": { "content": [ @@ -372,6 +68,17 @@ ] ], "1": [ + [ + { + "id": "test", + "single_end": false + }, + [ + + ] + ] + ], + "2": [ "versions.yml:md5,86b472c85626aac1840eec0769016f5c" ], "orthofinder": [ @@ -426,13 +133,39 @@ ], "versions": [ "versions.yml:md5,86b472c85626aac1840eec0769016f5c" + ], + "working": [ + [ + { + "id": "test", + "single_end": false + }, + [ + + ] + ] ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-03T11:07:31.319665056" + }, + "sarscov2 - candidatus_portiera_aleyrodidarum - proteome - resume": { + "content": [ + [ + "Duplications_per_Species_Tree_Node.tsv:md5,addc6f5ceec40bd82b00038d1872a27c", + "OrthologuesStats_Totals.tsv:md5,20d243abef226051a43cb37e922fc3eb", + "Statistics_PerSpecies.tsv:md5,83174c383b6c6828d1cc9b3be1679890" + ], + "versions.yml:md5,86b472c85626aac1840eec0769016f5c" + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-06-07T16:00:56.530716" + "timestamp": "2024-09-03T11:04:10.916947006" } } \ No newline at end of file diff --git a/modules/nf-core/repeatmodeler/builddatabase/environment.yml b/modules/nf-core/repeatmodeler/builddatabase/environment.yml index ecc282e..5314307 100644 --- a/modules/nf-core/repeatmodeler/builddatabase/environment.yml +++ b/modules/nf-core/repeatmodeler/builddatabase/environment.yml @@ -1,9 +1,7 @@ --- # yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json -name: "repeatmodeler_builddatabase" channels: - conda-forge - bioconda - - defaults dependencies: - "bioconda::repeatmodeler=2.0.5" diff --git a/modules/nf-core/repeatmodeler/repeatmodeler/environment.yml b/modules/nf-core/repeatmodeler/repeatmodeler/environment.yml index 2422071..5314307 100644 --- a/modules/nf-core/repeatmodeler/repeatmodeler/environment.yml +++ b/modules/nf-core/repeatmodeler/repeatmodeler/environment.yml @@ -1,9 +1,7 @@ --- # yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json -name: "repeatmodeler_repeatmodeler" channels: - conda-forge - bioconda - - defaults dependencies: - "bioconda::repeatmodeler=2.0.5" diff --git a/modules/nf-core/samtools/cat/environment.yml b/modules/nf-core/samtools/cat/environment.yml index a368198..da2df5e 100644 --- a/modules/nf-core/samtools/cat/environment.yml +++ b/modules/nf-core/samtools/cat/environment.yml @@ -1,8 +1,6 @@ -name: samtools_cat channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::samtools=1.20 - bioconda::htslib=1.20 diff --git a/modules/nf-core/sortmerna/environment.yml b/modules/nf-core/sortmerna/environment.yml index f40f995..fab4408 100644 --- a/modules/nf-core/sortmerna/environment.yml +++ b/modules/nf-core/sortmerna/environment.yml @@ -1,7 +1,5 @@ -name: sortmerna channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::sortmerna=4.3.6 diff --git a/modules/nf-core/star/align/environment.yml b/modules/nf-core/star/align/environment.yml index 8bd58cf..e3d1c71 100644 --- a/modules/nf-core/star/align/environment.yml +++ b/modules/nf-core/star/align/environment.yml @@ -1,8 +1,6 @@ -name: star_align channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::star=2.7.10a - bioconda::samtools=1.18 diff --git a/modules/nf-core/star/genomegenerate/environment.yml b/modules/nf-core/star/genomegenerate/environment.yml index 791f255..38611df 100644 --- a/modules/nf-core/star/genomegenerate/environment.yml +++ b/modules/nf-core/star/genomegenerate/environment.yml @@ -1,8 +1,6 @@ -name: star_genomegenerate channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::samtools=1.18 - bioconda::htslib=1.18 diff --git a/modules/nf-core/tsebra/environment.yml b/modules/nf-core/tsebra/environment.yml index 657cd82..f189f6b 100644 --- a/modules/nf-core/tsebra/environment.yml +++ b/modules/nf-core/tsebra/environment.yml @@ -1,9 +1,7 @@ --- # yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json -name: "tsebra" channels: - conda-forge - bioconda - - defaults dependencies: - "bioconda::tsebra=1.1.2.5" diff --git a/modules/nf-core/umitools/extract/environment.yml b/modules/nf-core/umitools/extract/environment.yml index aab452d..9f9e03c 100644 --- a/modules/nf-core/umitools/extract/environment.yml +++ b/modules/nf-core/umitools/extract/environment.yml @@ -1,7 +1,5 @@ -name: umitools_extract channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::umi_tools=1.1.5 diff --git a/subworkflows/local/fasta_orthofinder.nf b/subworkflows/local/fasta_orthofinder.nf index 715d78e..a39e26d 100644 --- a/subworkflows/local/fasta_orthofinder.nf +++ b/subworkflows/local/fasta_orthofinder.nf @@ -24,7 +24,10 @@ workflow FASTA_ORTHOFINDER { | collect | filter { it.size() > 1 } - ORTHOFINDER ( ch_orthofinder_peps.map { fastas -> [ [ id: 'genepal' ], fastas ] } ) + ORTHOFINDER( + ch_orthofinder_peps.map { fastas -> [ [ id: 'genepal' ], fastas ] }, + [ [], [] ] + ) ch_versions = ch_versions.mix(ORTHOFINDER.out.versions) diff --git a/subworkflows/nf-core/utils_nextflow_pipeline/main.nf b/subworkflows/nf-core/utils_nextflow_pipeline/main.nf index ac31f28..28e32b2 100644 --- a/subworkflows/nf-core/utils_nextflow_pipeline/main.nf +++ b/subworkflows/nf-core/utils_nextflow_pipeline/main.nf @@ -2,10 +2,6 @@ // 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 @@ -58,7 +54,7 @@ workflow UTILS_NEXTFLOW_PIPELINE { // Generate version string // def getWorkflowVersion() { - String version_string = "" + def version_string = "" as String if (workflow.manifest.version) { def prefix_v = workflow.manifest.version[0] != 'v' ? 'v' : '' version_string += "${prefix_v}${workflow.manifest.version}" @@ -79,10 +75,10 @@ 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) + def jsonStr = groovy.json.JsonOutput.toJson(params) + temp_pf.text = groovy.json.JsonOutput.prettyPrint(jsonStr) - FilesEx.copyTo(temp_pf.toPath(), "${outdir}/pipeline_info/params_${timestamp}.json") + nextflow.extension.FilesEx.copyTo(temp_pf.toPath(), "${outdir}/pipeline_info/params_${timestamp}.json") temp_pf.delete() } @@ -90,7 +86,7 @@ def dumpParametersToJSON(outdir) { // When running with -profile conda, warn if channels have not been set-up appropriately // def checkCondaChannels() { - Yaml parser = new Yaml() + def parser = new org.yaml.snakeyaml.Yaml() def channels = [] try { def config = parser.load("conda config --show channels".execute().text) @@ -102,14 +98,16 @@ def checkCondaChannels() { // 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 required_channels_in_order = ['conda-forge', 'bioconda'] 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])) + + required_channels_in_order.eachWithIndex { channel, index -> + if (index < required_channels_in_order.size() - 1) { + channel_priority_violation |= !(channels.indexOf(channel) < channels.indexOf(required_channels_in_order[index+1])) + } } if (channels_missing | channel_priority_violation) { diff --git a/subworkflows/nf-core/utils_nextflow_pipeline/tests/nextflow.config b/subworkflows/nf-core/utils_nextflow_pipeline/tests/nextflow.config index d0a926b..a09572e 100644 --- a/subworkflows/nf-core/utils_nextflow_pipeline/tests/nextflow.config +++ b/subworkflows/nf-core/utils_nextflow_pipeline/tests/nextflow.config @@ -3,7 +3,7 @@ manifest { author = """nf-core""" homePage = 'https://127.0.0.1' description = """Dummy pipeline""" - nextflowVersion = '!>=23.04.0' + 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/main.nf b/subworkflows/nf-core/utils_nfcore_pipeline/main.nf index 14558c3..cbd8495 100644 --- a/subworkflows/nf-core/utils_nfcore_pipeline/main.nf +++ b/subworkflows/nf-core/utils_nfcore_pipeline/main.nf @@ -2,9 +2,6 @@ // Subworkflow with utility functions specific to the nf-core pipeline template // -import org.yaml.snakeyaml.Yaml -import nextflow.extension.FilesEx - /* ======================================================================================== SUBWORKFLOW DEFINITION @@ -34,7 +31,7 @@ workflow UTILS_NFCORE_PIPELINE { // Warn if a -profile or Nextflow config has not been provided to run the pipeline // def checkConfigProvided() { - valid_config = true + def valid_config = true as Boolean 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" + @@ -66,11 +63,13 @@ def checkProfileProvided(nextflow_cli_args) { // def workflowCitation() { def temp_doi_ref = "" - String[] manifest_doi = workflow.manifest.doi.tokenize(",") + def manifest_doi = workflow.manifest.doi.tokenize(",") // Using a loop to handle multiple DOIs // Removing `https://doi.org/` to handle pipelines using DOIs vs DOI resolvers // Removing ` ` since the manifest.doi is a string and not a proper list - for (String doi_ref: manifest_doi) temp_doi_ref += " https://doi.org/${doi_ref.replace('https://doi.org/', '').replace(' ', '')}\n" + manifest_doi.each { doi_ref -> + temp_doi_ref += " https://doi.org/${doi_ref.replace('https://doi.org/', '').replace(' ', '')}\n" + } return "If you use ${workflow.manifest.name} for your analysis please cite:\n\n" + "* The pipeline\n" + temp_doi_ref + "\n" + @@ -84,7 +83,7 @@ def workflowCitation() { // Generate workflow version string // def getWorkflowVersion() { - String version_string = "" + def version_string = "" as String if (workflow.manifest.version) { def prefix_v = workflow.manifest.version[0] != 'v' ? 'v' : '' version_string += "${prefix_v}${workflow.manifest.version}" @@ -102,8 +101,8 @@ def getWorkflowVersion() { // 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 ] } + def yaml = new org.yaml.snakeyaml.Yaml() + def versions = yaml.load(yaml_file).collectEntries { k, v -> [ k.tokenize(':')[-1], v ] } return yaml.dumpAsMap(versions).trim() } @@ -124,7 +123,7 @@ def workflowVersionToYAML() { def softwareVersionsToYAML(ch_versions) { return ch_versions .unique() - .map { processVersionsFromYAML(it) } + .map { version -> processVersionsFromYAML(version) } .unique() .mix(Channel.of(workflowVersionToYAML())) } @@ -134,19 +133,19 @@ def softwareVersionsToYAML(ch_versions) { // def paramsSummaryMultiqc(summary_params) { def summary_section = '' - for (group in summary_params.keySet()) { + summary_params.keySet().each { group -> 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()) { + group_params.keySet().sort().each { param -> summary_section += "
    $param
    ${group_params.get(param) ?: 'N/A'}
    \n" } summary_section += "
    \n" } } - String yaml_file_text = "id: '${workflow.manifest.name.replace('/','-')}-summary'\n" + def yaml_file_text = "id: '${workflow.manifest.name.replace('/','-')}-summary'\n" as String 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" @@ -161,7 +160,7 @@ def paramsSummaryMultiqc(summary_params) { // nf-core logo // def nfCoreLogo(monochrome_logs=true) { - Map colors = logColours(monochrome_logs) + def colors = logColours(monochrome_logs) as Map String.format( """\n ${dashedLine(monochrome_logs)} @@ -180,7 +179,7 @@ def nfCoreLogo(monochrome_logs=true) { // Return dashed line // def dashedLine(monochrome_logs=true) { - Map colors = logColours(monochrome_logs) + def colors = logColours(monochrome_logs) as Map return "-${colors.dim}----------------------------------------------------${colors.reset}-" } @@ -188,7 +187,7 @@ def dashedLine(monochrome_logs=true) { // ANSII colours used for terminal logging // def logColours(monochrome_logs=true) { - Map colorcodes = [:] + def colorcodes = [:] as Map // Reset / Meta colorcodes['reset'] = monochrome_logs ? '' : "\033[0m" @@ -287,7 +286,7 @@ def completionEmail(summary_params, email, email_on_fail, plaintext_email, outdi } def summary = [:] - for (group in summary_params.keySet()) { + summary_params.keySet().sort().each { group -> summary << summary_params[group] } @@ -344,10 +343,10 @@ def completionEmail(summary_params, email, email_on_fail, plaintext_email, outdi def sendmail_html = sendmail_template.toString() // Send the HTML e-mail - Map colors = logColours(monochrome_logs) + def colors = logColours(monochrome_logs) as Map if (email_address) { try { - if (plaintext_email) { throw GroovyException('Send plaintext e-mail, not HTML') } + if (plaintext_email) { throw new org.codehaus.groovy.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 } @@ -364,13 +363,13 @@ def completionEmail(summary_params, email, email_on_fail, plaintext_email, outdi // 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"); + nextflow.extension.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"); + nextflow.extension.FilesEx.copyTo(output_tf.toPath(), "${outdir}/pipeline_info/pipeline_report.txt"); output_tf.delete() } @@ -378,7 +377,7 @@ def completionEmail(summary_params, email, email_on_fail, plaintext_email, outdi // Print pipeline summary on completion // def completionSummary(monochrome_logs=true) { - Map colors = logColours(monochrome_logs) + def colors = logColours(monochrome_logs) as Map if (workflow.success) { if (workflow.stats.ignoredCount == 0) { log.info "-${colors.purple}[$workflow.manifest.name]${colors.green} Pipeline completed successfully${colors.reset}-" @@ -395,7 +394,7 @@ def completionSummary(monochrome_logs=true) { // def imNotification(summary_params, hook_url) { def summary = [:] - for (group in summary_params.keySet()) { + summary_params.keySet().sort().each { group -> summary << summary_params[group] } From 99eb4aefc0165d7e3bfec892d4b3364575e0bdfd Mon Sep 17 00:00:00 2001 From: Usman Rashid Date: Wed, 11 Sep 2024 11:10:32 +1200 Subject: [PATCH 55/87] Updated output.md --- docs/output.md | 31 +++++++++++++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/docs/output.md b/docs/output.md index 0792e4c..4b05cba 100644 --- a/docs/output.md +++ b/docs/output.md @@ -30,7 +30,7 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d -A repeat library is created with either [REPEATMODELER](https://github.com/Dfam-consortium/RepeatModeler) or [EDTA](https://github.com/oushujun/EDTA). The choice of the tool is specified by the `repeat_annotator` parameter (default: `repeatmodeler`). Repeat annotation outputs are saved only if `save_annotated_te_lib` parameter is set to `true` (default: `false`). +A repeat library is created with either [REPEATMODELER](https://github.com/Dfam-consortium/RepeatModeler) or [EDTA](https://github.com/oushujun/EDTA). The choice of the tool is specified by the `repeat_annotator` parameter (default: `repeatmodeler`). Repeat annotation outputs are saved to the output directory only if `save_annotated_te_lib` parameter is set to `true` (default: `false`). ### Repeat masking @@ -43,10 +43,37 @@ A repeat library is created with either [REPEATMODELER](https://github.com/Dfam- -Soft masking of the repeats is performed with [REPEATMASKER](https://github.com/rmhubley/RepeatMasker) using the repeat library prepared in the previous step. Masking outputs are saved only if `repeatmasker_save_outputs` parameter is set to `true` (default: `false`). +Soft masking of the repeats is performed with [REPEATMASKER](https://github.com/rmhubley/RepeatMasker) using the repeat library prepared in the previous step. Masking outputs are saved to the output directory only if `repeatmasker_save_outputs` parameter is set to `true` (default: `false`). ### RNAseq trimming, filtering and QC +
    +Output files + +- `fastqc_raw/` + - `*.html`: HTML QC report for a sample before trimming + - `*.zip`: Zipped QC files for a sample before trimming +- `fastqc_trim/` + - `*.html`: HTML QC report for a sample after trimming + - `*.zip`: Zipped QC files for a sample after trimming +- `fastp/` + - `html/` + - `*.fastp.html`: HTML trimming report for a sample + - `json/` + - `*.fastp.json`: Trimming statistics for a sample + - `log/` + - `*.fastp.log`: Trimming log for a sample + - `*_{1,2}.fail.fastq.gz`: Reads which failed trimming + - `*.paired.fail.fastq.gz`: Pairs of reads which failed trimming + - `*.merged.fastq.gz`: Reads which passed trimming. For paired reads, reads 1 and 2 are merged into a single file +- `sortmerna/` + - `*.sortmerna.log`: Filtering log for a sample + - `*_{1,2}.non_rRNA.fastq.gz`: Filtered reads + +
    + +RNASeq reads are trimmed with [FASTP](https://github.com/OpenGene/fastp) and are QC'ed with [FASTQC](https://www.bioinformatics.babraham.ac.uk/projects/fastqc). Ribosomal reads are filtered out using [SORTMERNA](https://github.com/sortmerna/sortmerna). Trimmed reads are only stored to the output directory if the `save_trimmed` parameter is set to `true` (default: `false`). Reads filtered by [SORTMERNA](https://github.com/sortmerna/sortmerna) are stored to the output directory if the `save_non_ribo_reads` parameter is set to `true` (default: `false`). + ### Pipeline information
    From 8a64bee3d4b224c8390686054ff4177909c3a840 Mon Sep 17 00:00:00 2001 From: Usman Rashid Date: Wed, 11 Sep 2024 11:49:18 +1200 Subject: [PATCH 56/87] Added outputs for RNAseq alignment --- docs/output.md | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/docs/output.md b/docs/output.md index 4b05cba..fb08e0e 100644 --- a/docs/output.md +++ b/docs/output.md @@ -17,6 +17,7 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d - [Repeat annotation](#repeat-annotation) - [Repeat masking](#repeat-masking) - [RNAseq trimming, filtering and QC](#rnaseq-trimming-filtering-and-qc) +- [RNAseq Alignment](#rnaseq-alignment) ### Repeat annotation @@ -74,6 +75,22 @@ Soft masking of the repeats is performed with [REPEATMASKER](https://github.com/ RNASeq reads are trimmed with [FASTP](https://github.com/OpenGene/fastp) and are QC'ed with [FASTQC](https://www.bioinformatics.babraham.ac.uk/projects/fastqc). Ribosomal reads are filtered out using [SORTMERNA](https://github.com/sortmerna/sortmerna). Trimmed reads are only stored to the output directory if the `save_trimmed` parameter is set to `true` (default: `false`). Reads filtered by [SORTMERNA](https://github.com/sortmerna/sortmerna) are stored to the output directory if the `save_non_ribo_reads` parameter is set to `true` (default: `false`). +### RNAseq Alignment + +
    +Output files + +- `star/` + - `alignment/` + - `X.on.Y.Aligned.sortedByCoord.out.bam`: Sorted BAM file of read alignments for sample `X` against reference `Y` + - `X.on.Y.Log.final.out`: STAR final log file for sample `X` against reference `Y` + - `cat_bam/` + - `Y.bam`: A single BAM file for reference `Y` created by concatenating alignments from sample-wise `*.on.Y.Aligned.sortedByCoord.out.bam` files + +
    + +RNAseq alignment is performed with [STAR](https://github.com/alexdobin/STAR). Alignment files are only stored to the output directory if the `star_save_outputs` parameter is set to `true` (default: `false`). Concatenated bam files are stored to the output directory if the `save_cat_bam` parameter is set to `true` (default: `false`). + ### Pipeline information
    From 78a355384b620ec3426ca5360e6c3b15ead9b68f Mon Sep 17 00:00:00 2001 From: Usman Rashid Date: Wed, 11 Sep 2024 12:08:05 +1200 Subject: [PATCH 57/87] Added outputs for Annotation with BRAKER --- docs/output.md | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/docs/output.md b/docs/output.md index fb08e0e..ca29aaa 100644 --- a/docs/output.md +++ b/docs/output.md @@ -91,6 +91,29 @@ RNASeq reads are trimmed with [FASTP](https://github.com/OpenGene/fastp) and are RNAseq alignment is performed with [STAR](https://github.com/alexdobin/STAR). Alignment files are only stored to the output directory if the `star_save_outputs` parameter is set to `true` (default: `false`). Concatenated bam files are stored to the output directory if the `save_cat_bam` parameter is set to `true` (default: `false`). +### Annotation with BRAKER + +
    +Output files + +- `etc/braker/` + - `Y/` + - `braker.gff3`: Gene models predicted by BRAKER in GFF3 format + - `braker.gtf`: Gene models predicted by BRAKER in GTF format + - `braker.codingseq`: Coding sequences for the predicted genes + - `braker.aa`: Protein sequences for the predicted genes + - `braker.log`: BRAKER log file + - `hintsfile.gff`: Evidential hints used by BRAKER in GFF format + - `what-to-cite.txt`: A list of references which must be cited when reporting outputs created by BRAKER + +
    + +[BRAKER](https://github.com/Gaius-Augustus/BRAKER) is used to annotate each genome assembly using the provide protein and RNAseq evidence. Outputs from BRAKER are stored to the output directory if the `braker_save_outputs` parameter is set to `true` (default: `false`). + +> [!CAUTION] +> +> BRAKER outputs are not the final outputs from the pipeline and that's why they are not stored by default. These are only intermediary files. The pipeline further processes the BRAKER predictions and stores the final validated outputs in the `annotations` directory. + ### Pipeline information
    From 8509069eb88bf799d24c0ed56df6b87b117ffe95 Mon Sep 17 00:00:00 2001 From: Usman Rashid Date: Thu, 12 Sep 2024 13:09:11 +1200 Subject: [PATCH 58/87] Updated outputs doc --- README.md | 6 ++++-- docs/output.md | 35 ++++++++++++++++++++++++++++++++--- nextflow.config | 2 +- 3 files changed, 37 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index ef4c3ba..4604dc7 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ ## Introduction -**plant-food-research-open/genepal** is a bioinformatics pipeline for single genome and pan-genome annotation. An overview is shown in the [Pipeline Flowchart](#pipeline-flowchart) and the references for the tools are listed in [CITATIONS.md](./CITATIONS.md). +**plant-food-research-open/genepal** is a bioinformatics pipeline for single genome, multiple genomes and pan-genome annotation. An overview is shown in the [Pipeline Flowchart](#pipeline-flowchart) and the references for the tools are listed in [CITATIONS.md](./CITATIONS.md). ## Pipeline Flowchart @@ -23,9 +23,11 @@ - [STAR](https://github.com/alexdobin/STAR): RNAseq alignment - [BRAKER](https://github.com/Gaius-Augustus/BRAKER): Annotate the genome fasta - [LIFTOFF](https://github.com/agshumate/Liftoff): Liftoff annotations from reference genome fasta/gff -- [TSEBRA](https://github.com/Gaius-Augustus/TSEBRA) and [AGAT](https://github.com/NBISweden/AGAT): Merge BRAKER and Liftoff annotations +- [TSEBRA](https://github.com/Gaius-Augustus/TSEBRA), [AGAT](https://github.com/NBISweden/AGAT): Merge BRAKER and Liftoff annotations - [EGGNOG-MAPPER](https://github.com/eggnogdb/eggnog-mapper): Add functional annotation to gff - [ORTHOFINDER](https://github.com/davidemms/OrthoFinder): Perform phylogenetic orthology inference across input genomes +- [GENOMETOOLS](https://github.com/genometools/genometools), [GFFREAD](https://github.com/gpertea/gffread): Final GFF format validation and extraction of protein sequences +- [BUSCO](https://gitlab.com/ezlab/busco): Completeness statistics for genome and annotation through proteins ## Usage diff --git a/docs/output.md b/docs/output.md index ca29aaa..0cdef5d 100644 --- a/docs/output.md +++ b/docs/output.md @@ -17,7 +17,11 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d - [Repeat annotation](#repeat-annotation) - [Repeat masking](#repeat-masking) - [RNAseq trimming, filtering and QC](#rnaseq-trimming-filtering-and-qc) -- [RNAseq Alignment](#rnaseq-alignment) +- [RNAseq alignment](#rnaseq-alignment) +- [Annotation with BRAKER](#annotation-with-braker) +- [Annotation with Liftoff](#annotation-with-liftoff) +- [Annotation filtering and merging](#annotation-filtering-and-merging) +- [Functional annotation](#functional-annotation) ### Repeat annotation @@ -75,7 +79,7 @@ Soft masking of the repeats is performed with [REPEATMASKER](https://github.com/ RNASeq reads are trimmed with [FASTP](https://github.com/OpenGene/fastp) and are QC'ed with [FASTQC](https://www.bioinformatics.babraham.ac.uk/projects/fastqc). Ribosomal reads are filtered out using [SORTMERNA](https://github.com/sortmerna/sortmerna). Trimmed reads are only stored to the output directory if the `save_trimmed` parameter is set to `true` (default: `false`). Reads filtered by [SORTMERNA](https://github.com/sortmerna/sortmerna) are stored to the output directory if the `save_non_ribo_reads` parameter is set to `true` (default: `false`). -### RNAseq Alignment +### RNAseq alignment
    Output files @@ -112,7 +116,32 @@ RNAseq alignment is performed with [STAR](https://github.com/alexdobin/STAR). Al > [!CAUTION] > -> BRAKER outputs are not the final outputs from the pipeline and that's why they are not stored by default. These are only intermediary files. The pipeline further processes the BRAKER predictions and stores the final validated outputs in the `annotations` directory. +> BRAKER outputs are not the final outputs from the pipeline and that's why they are not stored by default. These are only intermediary files. +> +> The pipeline further processes the BRAKER predictions and stores the final validated outputs in the `annotations` directory. The `braker_save_outputs` option is only provided to allow a manual resume of the pipeline for advanced use cases. + +### Annotation with Liftoff + +Gene models are lifted from reference assembly(ies) to the target assembly using [LIFTOFF](https://github.com/agshumate/Liftoff). Currently, the outputs from Liftoff are considered intermediary and an option to store them in the output directory is not available. + +### Annotation filtering and merging + +Annotations obtained from [BRAKER](https://github.com/Gaius-Augustus/BRAKER) and [LIFTOFF](https://github.com/agshumate/Liftoff) are filtered with [TSEBRA](https://github.com/Gaius-Augustus/TSEBRA) and merged with [AGAT](https://github.com/NBISweden/AGAT). Currently, the outputs from these processes are considered intermediary and an option to store them in the output directory is not available. + +### Functional annotation + +
    +Output files + +- `annotations/` + - `Y/` + - `Y.emapper.annotations`: TSV with the annotation results + - `Y.emapper.hits`: TSV with the search results + - `Y.emapper.seed_orthologs`: TSV with the results from parsing the hits, linking queries with seed orthologs + +
    + +Functional annotation of the gene models from BRAKER and Liftoff is performed with [EGGNOG-MAPPER](https://github.com/eggnogdb/eggnog-mapper). ### Pipeline information diff --git a/nextflow.config b/nextflow.config index ec5ef55..010e561 100644 --- a/nextflow.config +++ b/nextflow.config @@ -262,7 +262,7 @@ manifest { name = 'plant-food-research-open/genepal' author = """Usman Rashid, Jason Shiller""" homePage = 'https://github.com/plant-food-research-open/genepal' - description = """A Nextflow pipeline for single genome and pan-genome annotation""" + description = """A Nextflow pipeline for single genome, multiple genomes and pan-genome annotation""" mainScript = 'main.nf' nextflowVersion = '!>=23.04.0' version = '0.4.0+dev' From 024417dff6f72795a72ffcf9fa0c78c576f567eb Mon Sep 17 00:00:00 2001 From: Usman Rashid Date: Thu, 12 Sep 2024 13:11:04 +1200 Subject: [PATCH 59/87] Fixed linting --- .nf-core.yml | 1 + assets/email_template.html | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.nf-core.yml b/.nf-core.yml index 5571c09..3d6dd86 100644 --- a/.nf-core.yml +++ b/.nf-core.yml @@ -17,6 +17,7 @@ lint: - .github/ISSUE_TEMPLATE/bug_report.yml - docs/README.md - LICENSE + - .gitignore nextflow_config: - manifest.name - manifest.homePage diff --git a/assets/email_template.html b/assets/email_template.html index 218a088..c7f9d61 100644 --- a/assets/email_template.html +++ b/assets/email_template.html @@ -4,7 +4,7 @@ - + plant-food-research-open/genepal Pipeline Report From 7c352545c4a9260d852158ac5125d2f94025d591 Mon Sep 17 00:00:00 2001 From: Usman Rashid Date: Thu, 12 Sep 2024 14:24:36 +1200 Subject: [PATCH 60/87] Completed the output doc --- .github/workflows/ci.yml | 3 ++- docs/output.md | 49 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c8d303a..8d2674f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -43,4 +43,5 @@ jobs: main.nf \ -profile docker \ -stub \ - -params-file tests/stub/params.json + -params-file tests/stub/params.json \ + --outdir ./results diff --git a/docs/output.md b/docs/output.md index 0cdef5d..d60e0ed 100644 --- a/docs/output.md +++ b/docs/output.md @@ -22,6 +22,9 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d - [Annotation with Liftoff](#annotation-with-liftoff) - [Annotation filtering and merging](#annotation-filtering-and-merging) - [Functional annotation](#functional-annotation) +- [Orthology inference](#orthology-inference) +- [Final annotation files](#final-annotation-files) +- [Annotation QC](#annotation-qc) ### Repeat annotation @@ -143,6 +146,52 @@ Annotations obtained from [BRAKER](https://github.com/Gaius-Augustus/BRAKER) and Functional annotation of the gene models from BRAKER and Liftoff is performed with [EGGNOG-MAPPER](https://github.com/eggnogdb/eggnog-mapper). +### Orthology inference + +
    +Output files + +- `orthofinder/` + - `genepal/*` + +
    + +If more than one genome is included in the pipeline, [ORTHOFINDER](https://github.com/davidemms/OrthoFinder) is used to perform an orthology inference. + +### Final annotation files + +
    +Output files + +- `annotations/` + - `Y/` + - `Y.gt.gff3`: Final annotation file for genome `Y` which contains gene models and their functional annotations + - `Y.pep.fasta`: Protein sequences for the gene models + +
    + +The final annotation files are saved in GFF3 format validated with [GENOMETOOLS](https://github.com/genometools/genometools) and FASTA format obtained with [GFFREAD](https://github.com/gpertea/gffread). + +### Annotation QC + +
    +Output files + +- `busco/` + - `gff/` + - `short_summary.specific.Y.eudicots_odb10.txt`: BUSCO summary for annotations from genome `Y` against the `eudicots_odb10` database + - `busco_figure`: BUSCO summary figure including statistics for annotations from all the genomes + - `fasta/` + - `short_summary.specific.Y.eudicots_odb10.txt`: BUSCO summary for genome `Y` against the `eudicots_odb10` database + - `busco_figure`: BUSCO summary figure including statistics for all the genomes +- `etc/` + - `splicing_marked/` + - `Y.gff3`: Final annotation file for genome `Y` which contains gene models and their functional annotations. Additionally, the intron features are marked as canonical or non-canonical and the splice motif is also added an attribute. + +
    + +The completeness of the annotations is checked with [BUSCO](https://gitlab.com/ezlab/busco). TO provide a comparative baseline, the completeness of the genomes is also checked. Moreover, the canonical/non-canonical splicing of the introns is also assessed by the pipeline. + ### Pipeline information
    From 274f69724aac0e2897ac053c0a9bd24d553b8e03 Mon Sep 17 00:00:00 2001 From: Usman Rashid Date: Fri, 13 Sep 2024 15:09:28 +1200 Subject: [PATCH 61/87] Partially completed the usage doc --- docs/parameters.md | 2 +- docs/usage.md | 124 +++++++++++++++++++++++++++++++------------ nextflow_schema.json | 2 +- 3 files changed, 92 insertions(+), 36 deletions(-) diff --git a/docs/parameters.md b/docs/parameters.md index 6de7e25..e3d6742 100644 --- a/docs/parameters.md +++ b/docs/parameters.md @@ -1,6 +1,6 @@ # plant-food-research-open/genepal pipeline parameters -A Nextflow pipeline for single genome and pan-genome annotation +A Nextflow pipeline for single genome, multiple genomes and pan-genome annotation. ## Input/output options diff --git a/docs/usage.md b/docs/usage.md index 7b9653b..00c1210 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -1,54 +1,110 @@ -# plant-food-research-open/genepal: Usage +# plant-food-research-open/genepal: Usage -> _Documentation of pipeline parameters is generated automatically from the pipeline schema and can no longer be found in markdown files._ +> [!TIP] +> +> This document does not describe every pipeline parameter. For an exhaustive list of parameters, see [parameters.md](./parameters.md). -## Introduction +- [Assemblysheet input](#assemblysheet-input) +- [Protein evidence](#protein-evidence) + - [BRAKER workflow](#braker-workflow) +- [RNAseq evidence](#rnaseq-evidence) + - [BRAKER workflow](#braker-workflow-1) + - [Preprocessing](#preprocessing) + - [Alignment](#alignment) +- [Liftoff annotations](#liftoff-annotations) +- [Running the pipeline](#running-the-pipeline) + - [Updating the pipeline](#updating-the-pipeline) + - [Reproducibility](#reproducibility) +- [Core Nextflow arguments](#core-nextflow-arguments) + - [`-profile`](#-profile) + - [`-resume`](#-resume) + - [`-c`](#-c) +- [Custom configuration](#custom-configuration) + - [Resource requests](#resource-requests) + - [Custom Containers](#custom-containers) + - [Custom Tool Arguments](#custom-tool-arguments) + - [nf-core/configs](#nf-coreconfigs) +- [Azure Resource Requests](#azure-resource-requests) +- [Running in the background](#running-in-the-background) +- [Nextflow memory requirements](#nextflow-memory-requirements) - +## Assemblysheet input -## Samplesheet input +> ✅ Mandatory `--input` -You will need to create a samplesheet with information about the samples you would like to analyse before running the pipeline. Use this parameter to specify its location. It has to be a comma-separated file with 3 columns, and a header row as shown in the examples below. +You will need to create an assemblysheet with information about the genome assemblies you would like to annotate before running the pipeline. Use the `input` parameter to specify its location. It has to be a comma-separated file with at least three columns, and a header row. + +- `tag:` A unique tag which represents the target assembly throughout the pipeline. The `tag` and `fasta` file name should not be same, such as `tag.fasta`. This can create file name collisions in the pipeline or result in file overwrite. It is also a good-practice to make all the input files read-only. +- `fasta:` FASTA file +- `is_masked:` Whether the FASTA is masked or not? Use yes/no to indicate the masking. If the assembly is not masked. The pipeline will soft mask it before annotating it. +- `te_lib [Optional]`: If an assembly is not masked and a TE library is available which cna be used to mask the assembly, the path of the TE library FASTA file can be provided here. If this column is absent and the assembly is not masked, the pipeline will first create a TE library so that it can soft mask the assembly. + +## Protein evidence + +> ✅ Mandatory `--protein_evidence` + +Protein evidence can be provided in two ways. First, a single FASTA file. Second, a list of FASTA files listed in a plain text file. The extension of the text file must be `txt`. + +### BRAKER workflow + +With these two parameters, the pipeline has sufficient inputs to execute the [BRAKER workflow C](https://github.com/Gaius-Augustus/BRAKER/tree/f58479fe5bb13a9e51c3ca09cb9e137cab3b8471?tab=readme-ov-file#overview-of-modes-for-running-braker) (see Figure 4) in which GeneMark-EP+ is trained on protein spliced alignments, then GeneMark-EP+ generates training data for AUGUSTUS which then performs the final gene prediction. + +## RNAseq evidence + +> ❔ Optional `--rna_evidence` + +RNAseq evidence must be provided through a samplesheet in CSV format which has the following columns, + +- `sample:` A sample identifier. The `sample` identifiers have to be the same when you have re-sequenced the same sample more than once e.g. to increase sequencing depth. The pipeline will concatenate the raw reads before performing any downstream analysis. +- `file_1:` A FASTQ or BAM file +- `file_2:` A FASTQ file if `file_1` is also a FASTQ file and provides paired samples. +- `target_assemblies:` A semicolon `;` separated list of assembly tags from the [assemblysheet input](#assemblysheet-input). If `file_1` points to a BAM file, only a single assembly can be listed under `target_assemblies` for that sample. FASTQ data from `file_1` and `file_2` is aligned against each target assembly. BAM data from `file_1` is considered already aligned against the target assembly and is directly fed to BRAKER. + +### BRAKER workflow + +If RNAseq evidence is provided, the pipeline executes the [BRAKER workflow D](https://github.com/Gaius-Augustus/BRAKER/tree/f58479fe5bb13a9e51c3ca09cb9e137cab3b8471?tab=readme-ov-file#overview-of-modes-for-running-braker) (see Figure 4) in which GeneMark-ETP is trained with both protein and RNASeq evidence and the training data generated by GeneMark-ETP is used to optimise AUGUSTUS for final gene predictions. + +### Preprocessing + +RNAseq reads provided in FASTQ files are by default preprocessed with FASTP + +### Alignment + +RNAseq evidence provided as FASTQ files is aligned using [STAR](https://github.com/alexdobin/STAR). The default alignment parameters are, ```bash ---input '[path to samplesheet file]' +--outSAMstrandField intronMotif \ +--outSAMtype BAM SortedByCoordinate \ +--readFilesCommand gunzip -c \ +--alignIntronMax $star_max_intron_length ``` -### Multiple runs of the same sample +where `--star_max_intron_length` is a pipeline parameter and its default value is `16000`. In our experience, the performance of BRAKER predictions is fairly sensitive to this parameter and the parameter value should be based on some estimation of the length of introns in the genes of the target _species_. Additional STAR parameters can be specified with `--star_align_extra_args`. -The `sample` identifiers have to be the same when you have re-sequenced the same sample more than once e.g. to increase sequencing depth. The pipeline will concatenate the raw reads before performing any downstream analysis. Below is an example for the same sample sequenced across 3 lanes: +> [!WARNING] +> +> If pre-aligned RNAseq data is provided as a BAM file and the alignment was not performed with `--outSAMstrandField intronMotif` parameter, the pipeline might trough an error. -```csv title="samplesheet.csv" -sample,fastq_1,fastq_2 -CONTROL_REP1,AEG588A1_S1_L002_R1_001.fastq.gz,AEG588A1_S1_L002_R2_001.fastq.gz -CONTROL_REP1,AEG588A1_S1_L003_R1_001.fastq.gz,AEG588A1_S1_L003_R2_001.fastq.gz -CONTROL_REP1,AEG588A1_S1_L004_R1_001.fastq.gz,AEG588A1_S1_L004_R2_001.fastq.gz -``` +## Liftoff annotations -### Full samplesheet +> ❔ Optional `--liftoff_annotations` -The pipeline will auto-detect whether a sample is single- or paired-end using the information provided in the samplesheet. The samplesheet can have as many columns as you desire, however, there is a strict requirement for the first 3 columns to match those defined in the table below. +In addition to gene prediction with BRAKER, the pipeline also enables gene model transfer from one or more reference assemblies to all the target assemblies. The reference assemblies and the associated gene models must be specified through a CSV file with the following two columns, -A final samplesheet file consisting of both single- and paired-end data may look something like the one below. This is for 6 samples, where `TREATMENT_REP3` has been sequenced twice. +- `fasta:` Reference assembly genome in a FASTA file +- `gff3:` Reference assembly gene models in a GFF3 file -```csv title="samplesheet.csv" -sample,fastq_1,fastq_2 -CONTROL_REP1,AEG588A1_S1_L002_R1_001.fastq.gz,AEG588A1_S1_L002_R2_001.fastq.gz -CONTROL_REP2,AEG588A2_S2_L002_R1_001.fastq.gz,AEG588A2_S2_L002_R2_001.fastq.gz -CONTROL_REP3,AEG588A3_S3_L002_R1_001.fastq.gz,AEG588A3_S3_L002_R2_001.fastq.gz -TREATMENT_REP1,AEG588A4_S4_L003_R1_001.fastq.gz, -TREATMENT_REP2,AEG588A5_S5_L003_R1_001.fastq.gz, -TREATMENT_REP3,AEG588A6_S6_L003_R1_001.fastq.gz, -TREATMENT_REP3,AEG588A6_S6_L004_R1_001.fastq.gz, -``` +[LIFTOFF](https://github.com/agshumate/Liftoff) is used for lifting over the models. The default alignment parameters are, -| Column | Description | -| --------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `sample` | Custom sample name. This entry will be identical for multiple sequencing libraries/runs from the same sample. Spaces in sample names are automatically converted to underscores (`_`). | -| `fastq_1` | Full path to FastQ file for Illumina short reads 1. File has to be gzipped and have the extension ".fastq.gz" or ".fq.gz". | -| `fastq_2` | Full path to FastQ file for Illumina short reads 2. File has to be gzipped and have the extension ".fastq.gz" or ".fq.gz". | +```bash +-exclude_partial \ +-copies \ +-polish \ +-a $liftoff_coverage \ +-s $liftoff_identity +``` -An [example samplesheet](../assets/samplesheet.csv) has been provided with the pipeline. +where `--liftoff_coverage` and `--liftoff_identity` are pipeline parameters and their default value is `0.9`. After the liftoff, the pipeline filters out any model which is marked as `valid_ORF=False` by [LIFTOFF](https://github.com/agshumate/Liftoff). ## Running the pipeline diff --git a/nextflow_schema.json b/nextflow_schema.json index 75cded1..60cca38 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -2,7 +2,7 @@ "$schema": "http://json-schema.org/draft-07/schema", "$id": "https://raw.githubusercontent.com/plant-food-research-open/genepal/master/nextflow_schema.json", "title": "plant-food-research-open/genepal pipeline parameters", - "description": "A Nextflow pipeline for single genome and pan-genome annotation", + "description": "A Nextflow pipeline for single genome, multiple genomes and pan-genome annotation.", "type": "object", "definitions": { "input_output_options": { From ab8fe9ee95e48c39a194cb8cee403eea9722759e Mon Sep 17 00:00:00 2001 From: Usman Rashid Date: Fri, 13 Sep 2024 15:48:05 +1200 Subject: [PATCH 62/87] Added to usage doc --- docs/usage.md | 53 ++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 50 insertions(+), 3 deletions(-) diff --git a/docs/usage.md b/docs/usage.md index 00c1210..a786924 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -12,6 +12,8 @@ - [Preprocessing](#preprocessing) - [Alignment](#alignment) - [Liftoff annotations](#liftoff-annotations) +- [EggNOG-mapper DB](#eggnog-mapper-db) +- [Orthology inference input](#orthology-inference-input) - [Running the pipeline](#running-the-pipeline) - [Updating the pipeline](#updating-the-pipeline) - [Reproducibility](#reproducibility) @@ -35,7 +37,7 @@ You will need to create an assemblysheet with information about the genome assemblies you would like to annotate before running the pipeline. Use the `input` parameter to specify its location. It has to be a comma-separated file with at least three columns, and a header row. - `tag:` A unique tag which represents the target assembly throughout the pipeline. The `tag` and `fasta` file name should not be same, such as `tag.fasta`. This can create file name collisions in the pipeline or result in file overwrite. It is also a good-practice to make all the input files read-only. -- `fasta:` FASTA file +- `fasta:` FASTA file for the genome - `is_masked:` Whether the FASTA is masked or not? Use yes/no to indicate the masking. If the assembly is not masked. The pipeline will soft mask it before annotating it. - `te_lib [Optional]`: If an assembly is not masked and a TE library is available which cna be used to mask the assembly, the path of the TE library FASTA file can be provided here. If this column is absent and the assembly is not masked, the pipeline will first create a TE library so that it can soft mask the assembly. @@ -66,7 +68,9 @@ If RNAseq evidence is provided, the pipeline executes the [BRAKER workflow D](ht ### Preprocessing -RNAseq reads provided in FASTQ files are by default preprocessed with FASTP +RNAseq reads provided in FASTQ files are by default trimmed with [FASTP](https://github.com/OpenGene/fastp). No parameters are provided by default. Although, additional parameters can be provided with `--extra_fastp_args` parameter. After trimming, any sample which does not have `10000` reads left is dropped. This threshold can be specified with the `--min_trimmed_reads` parameter. If trimming was already performed ot it is not desirable, it can be skipped by setting the `--skip_fastp` flag to `true`. + +Optionally, [SORTMERNA](https://github.com/sortmerna/sortmerna) can be activated by setting the `--remove_ribo_rna` flag to `true`. A default list of rRNA databases is pre-configured and can be seen in the [assets/rrna-db-defaults.txt](../assets/rrna-db-defaults.txt) file. A path to a custom list of databases can be specified by the `--ribo_database_manifest` parameter. ### Alignment @@ -104,7 +108,50 @@ In addition to gene prediction with BRAKER, the pipeline also enables gene model -s $liftoff_identity ``` -where `--liftoff_coverage` and `--liftoff_identity` are pipeline parameters and their default value is `0.9`. After the liftoff, the pipeline filters out any model which is marked as `valid_ORF=False` by [LIFTOFF](https://github.com/agshumate/Liftoff). +where `--liftoff_coverage` and `--liftoff_identity` are pipeline parameters and their default value is `0.9`. After the liftoff, the pipeline filters out any model which is marked as `valid_ORF=False` by [LIFTOFF](https://github.com/agshumate/Liftoff). Then, the BRAKER and LIFTOFF annotations are merged together. + +## EggNOG-mapper DB + +> ❔ Optional `--eggnogmapper_db_dir`, `--eggnogmapper_tax_scope` + +EggNOG-mapper is used to add functional annotations to the gene models. The EggNOG-mapper database must be downloaded manually before running the pipeline. The database is available at . The path to the database folder must be provided with the `--eggnogmapper_db_dir` parameter. The pipeline assumes following directory structure for the database path. + +```bash +/path/to/db +├── eggnog.db +├── eggnog.taxa.db +├── eggnog.taxa.db.traverse.pkl +├── eggnog_proteins.dmnd +├── mmseqs +│ ├── mmseqs.db +│ ├── mmseqs.db.dbtype +│ ├── mmseqs.db.index +│ ├── mmseqs.db.lookup +│ ├── mmseqs.db.source +│ ├── mmseqs.db_h +│ ├── mmseqs.db_h.dbtype +│ └── mmseqs.db_h.index +└── pfam + ├── Pfam-A.clans.tsv.gz + ├── Pfam-A.hmm + ├── Pfam-A.hmm.h3f + ├── Pfam-A.hmm.h3i + ├── Pfam-A.hmm.h3m + ├── Pfam-A.hmm.h3m.ssi + ├── Pfam-A.hmm.h3p + └── Pfam-A.hmm.idmap +``` + +An appropriate taxonomic scope for the mapper can be specified with `--eggnogmapper_tax_scope` parameter, otherwise, the pipeline uses teh default value of `1` for the taxonomic scope. Common taxonomic scopes are Eukaryota: `2759`, Viridiplantae: `33090`, Archaea: `2157`, Bacteria: `2` and root: `1`. For a comprehensive list of available scopes, see . + +## Orthology inference input + +> ❔ Optional `--orthofinder_annotations` + +If there are more than one target assemblies, an orthology inference is performed with [ORTHOFINDER](https://github.com/davidemms/OrthoFinder). Additional annotations can be directly provided for the orthology inference with the `--orthofinder_annotations` parameter. This should be the path to a CSV file with following two columns, + +- `tag:` A unique tag which represents the annotation. The `tag` and `fasta` file name should not be same, such as `tag.fasta`. This can create file name collisions in the pipeline or result in file overwrite. It is also a good-practice to make all the input files read-only. +- `fasta:` FASTA file containing protein sequences. ## Running the pipeline From ca0d3bb271ee5325928b99adb21385c79a45a2e7 Mon Sep 17 00:00:00 2001 From: Usman Rashid Date: Fri, 13 Sep 2024 16:15:09 +1200 Subject: [PATCH 63/87] Completed docs and updated stub test --- docs/usage.md | 39 ++++++++++++++----------- tests/stub/orthofinderannotations.csv | 2 ++ tests/stub/params.json | 1 + tests/stub/proteins/arguta_proteins.faa | 0 4 files changed, 25 insertions(+), 17 deletions(-) create mode 100644 tests/stub/orthofinderannotations.csv create mode 100644 tests/stub/proteins/arguta_proteins.faa diff --git a/docs/usage.md b/docs/usage.md index a786924..7002830 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -1,6 +1,6 @@ # plant-food-research-open/genepal: Usage -> [!TIP] +> [!NOTE] > > This document does not describe every pipeline parameter. For an exhaustive list of parameters, see [parameters.md](./parameters.md). @@ -14,6 +14,7 @@ - [Liftoff annotations](#liftoff-annotations) - [EggNOG-mapper DB](#eggnog-mapper-db) - [Orthology inference input](#orthology-inference-input) +- [Iso-forms and full intron support](#iso-forms-and-full-intron-support) - [Running the pipeline](#running-the-pipeline) - [Updating the pipeline](#updating-the-pipeline) - [Reproducibility](#reproducibility) @@ -108,7 +109,7 @@ In addition to gene prediction with BRAKER, the pipeline also enables gene model -s $liftoff_identity ``` -where `--liftoff_coverage` and `--liftoff_identity` are pipeline parameters and their default value is `0.9`. After the liftoff, the pipeline filters out any model which is marked as `valid_ORF=False` by [LIFTOFF](https://github.com/agshumate/Liftoff). Then, the BRAKER and LIFTOFF annotations are merged together. +where `--liftoff_coverage` and `--liftoff_identity` are pipeline parameters and their default value is `0.9`. After the liftoff, the pipeline filters out any model which is marked as `valid_ORF=False` by [LIFTOFF](https://github.com/agshumate/Liftoff). Then, the BRAKER and LIFTOFF annotations are merged together. During this merge, LIFTOFF models are given precedence over BRAKER models. A region where the LIFTOFF model overlaps a BRAKER model, the BRAKER model is dropped. ## EggNOG-mapper DB @@ -153,12 +154,20 @@ If there are more than one target assemblies, an orthology inference is performe - `tag:` A unique tag which represents the annotation. The `tag` and `fasta` file name should not be same, such as `tag.fasta`. This can create file name collisions in the pipeline or result in file overwrite. It is also a good-practice to make all the input files read-only. - `fasta:` FASTA file containing protein sequences. +## Iso-forms and full intron support + +By default the pipeline allows multiple isoforms from BRAKER. This behavior can be changed by setting the `--allow_isoforms` flag to `false`. Moreover, every intron from every model from BRAKER and LIFTOFF must have support from protein or RNAseq evidence. This is enforced with [TSEBRA](https://github.com/Gaius-Augustus/TSEBRA). This requirement can be removed by setting the `--enforce_full_intron_support` flag to `false`. Or, selectively only applying this criterion to BRAKER models by setting the `--filter_liftoff_by_hints` flag to `false`. + ## Running the pipeline The typical command for running the pipeline is as follows: ```bash -nextflow run plant-food-research-open/genepal --input ./samplesheet.csv --outdir ./results --genome GRCh37 -profile docker +nextflow run plant-food-research-open/genepal \ + -profile \ + --input assemblysheet.csv \ + --protein_evidence proteins.faa \ + --outdir ``` This will launch the pipeline with the `docker` configuration profile. See below for more information about profiles. @@ -176,9 +185,8 @@ If you wish to repeatedly use the same parameters for multiple runs, rather than Pipeline settings can be provided in a `yaml` or `json` file via `-params-file `. -:::warning -Do not use `-c ` to specify parameters as this will result in errors. Custom config files specified with `-c` must only be used for [tuning process resource specifications](https://nf-co.re/docs/usage/configuration#tuning-workflow-resources), other infrastructural tweaks (such as output directories), or module arguments (args). -::: +> [!WARNING] +> Do not use `-c ` to specify parameters as this will result in errors. Custom config files specified with `-c` must only be used for [tuning process resource specifications](https://nf-co.re/docs/usage/configuration#tuning-workflow-resources), other infrastructural tweaks (such as output directories), or module arguments (args). The above pipeline run specified with a params file in yaml format: @@ -189,9 +197,9 @@ nextflow run plant-food-research-open/genepal -profile docker -params-file param with `params.yaml` containing: ```yaml -input: './samplesheet.csv' +input: './assemblysheet.csv' outdir: './results/' -genome: 'GRCh37' +protein_evidence: './proteins.faa' <...> ``` @@ -215,15 +223,13 @@ This version number will be logged in reports when you run the pipeline, so that To further assist in reproducbility, you can use share and re-use [parameter files](#running-the-pipeline) to repeat pipeline runs with the same settings without having to write out a command with every single parameter. -:::tip -If you wish to share such profile (such as upload as supplementary material for academic publications), make sure to NOT include cluster specific paths to files, nor institutional specific profiles. -::: +> [!TIP] +> If you wish to share such profile (such as upload as supplementary material for academic publications), make sure to NOT include cluster specific paths to files, nor institutional specific profiles. ## Core Nextflow arguments -:::note -These options are part of Nextflow and use a _single_ hyphen (pipeline parameters use a double-hyphen). -::: +> [!NOTE] +> These options are part of Nextflow and use a _single_ hyphen (pipeline parameters use a double-hyphen). ### `-profile` @@ -231,9 +237,8 @@ Use this parameter to choose a configuration profile. Profiles can give configur Several generic profiles are bundled with the pipeline which instruct the pipeline to use software packaged using different methods (Docker, Singularity, Podman, Shifter, Charliecloud, Apptainer, Conda) - see below. -:::info -We highly recommend the use of Docker or Singularity containers for full pipeline reproducibility, however when this is not possible, Conda is also supported. -::: +> [!INFO] +> We highly recommend the use of Docker or Singularity containers for full pipeline reproducibility, however when this is not possible, Conda is also supported. The pipeline also dynamically loads configurations from [https://github.com/nf-core/configs](https://github.com/nf-core/configs) when it runs, making multiple config profiles for various institutional clusters available at run time. For more information and to see if your system is available in these configs please see the [nf-core/configs documentation](https://github.com/nf-core/configs#documentation). diff --git a/tests/stub/orthofinderannotations.csv b/tests/stub/orthofinderannotations.csv new file mode 100644 index 0000000..0443c1c --- /dev/null +++ b/tests/stub/orthofinderannotations.csv @@ -0,0 +1,2 @@ +tag,fasta +arguta,tests/stub/proteins/arguta_proteins.faa diff --git a/tests/stub/params.json b/tests/stub/params.json index dbaa4fb..59730d3 100644 --- a/tests/stub/params.json +++ b/tests/stub/params.json @@ -5,6 +5,7 @@ "eggnogmapper_tax_scope": 33090, "rna_evidence": "tests/stub/rnasheet.csv", "liftoff_annotations": "tests/stub/liftoffannotations.csv", + "orthofinder_annotations": "tests/stub/orthofinderannotations.csv", "max_cpus": 2, "max_memory": "3.GB" } diff --git a/tests/stub/proteins/arguta_proteins.faa b/tests/stub/proteins/arguta_proteins.faa new file mode 100644 index 0000000..e69de29 From 75c629cf1a20d5658c3f0aee75f48d08b2f94587 Mon Sep 17 00:00:00 2001 From: Usman Rashid Date: Fri, 13 Sep 2024 16:18:08 +1200 Subject: [PATCH 64/87] Updated modules --- modules.json | 20 +++++++++---------- .../gallvp/agat/spaddintrons/environment.yml | 3 --- .../agat/spextractsequences/environment.yml | 3 --- modules/gallvp/braker3/main.nf | 3 +++ modules/gallvp/busco/busco/environment.yml | 2 -- .../gallvp/busco/generateplot/environment.yml | 2 -- .../custom/restoregffids/environment.yml | 3 --- .../custom/shortenfastaids/environment.yml | 3 --- modules/gallvp/gffread/environment.yml | 2 -- .../gallvp/ltrretriever/lai/environment.yml | 2 -- .../repeatmasker/repeatmasker/environment.yml | 3 --- 11 files changed, 13 insertions(+), 33 deletions(-) diff --git a/modules.json b/modules.json index cb588f6..78ea6f2 100644 --- a/modules.json +++ b/modules.json @@ -7,37 +7,37 @@ "gallvp": { "agat/spaddintrons": { "branch": "main", - "git_sha": "004aba06875a2fee13207e2ffaa04deb2190a35d", + "git_sha": "a203a6035aed3f9b345ee380f5d497ca98504d98", "installed_by": ["gxf_fasta_agat_spaddintrons_spextractsequences"] }, "agat/spextractsequences": { "branch": "main", - "git_sha": "004aba06875a2fee13207e2ffaa04deb2190a35d", + "git_sha": "a203a6035aed3f9b345ee380f5d497ca98504d98", "installed_by": ["gxf_fasta_agat_spaddintrons_spextractsequences"] }, "braker3": { "branch": "main", - "git_sha": "be636e1e7d50b12ee1f50ed0bb9b21b0fade7cfd", + "git_sha": "cc6ea1f3e96e8264d2cc99afed31bcf3b0bb03ca", "installed_by": ["modules"] }, "busco/busco": { "branch": "main", - "git_sha": "0fcdaa66410acee08d31884cdc3e8e4b1b79e66a", + "git_sha": "cc6ea1f3e96e8264d2cc99afed31bcf3b0bb03ca", "installed_by": ["fasta_gxf_busco_plot"] }, "busco/generateplot": { "branch": "main", - "git_sha": "004aba06875a2fee13207e2ffaa04deb2190a35d", + "git_sha": "cc6ea1f3e96e8264d2cc99afed31bcf3b0bb03ca", "installed_by": ["fasta_gxf_busco_plot"] }, "custom/restoregffids": { "branch": "main", - "git_sha": "004aba06875a2fee13207e2ffaa04deb2190a35d", + "git_sha": "a203a6035aed3f9b345ee380f5d497ca98504d98", "installed_by": ["fasta_edta_lai"] }, "custom/shortenfastaids": { "branch": "main", - "git_sha": "004aba06875a2fee13207e2ffaa04deb2190a35d", + "git_sha": "a203a6035aed3f9b345ee380f5d497ca98504d98", "installed_by": ["fasta_edta_lai"] }, "edta/edta": { @@ -47,17 +47,17 @@ }, "gffread": { "branch": "main", - "git_sha": "004aba06875a2fee13207e2ffaa04deb2190a35d", + "git_sha": "cc6ea1f3e96e8264d2cc99afed31bcf3b0bb03ca", "installed_by": ["fasta_gxf_busco_plot"] }, "ltrretriever/lai": { "branch": "main", - "git_sha": "004aba06875a2fee13207e2ffaa04deb2190a35d", + "git_sha": "cc6ea1f3e96e8264d2cc99afed31bcf3b0bb03ca", "installed_by": ["fasta_edta_lai"] }, "repeatmasker/repeatmasker": { "branch": "main", - "git_sha": "004aba06875a2fee13207e2ffaa04deb2190a35d", + "git_sha": "a203a6035aed3f9b345ee380f5d497ca98504d98", "installed_by": ["modules"] } } diff --git a/modules/gallvp/agat/spaddintrons/environment.yml b/modules/gallvp/agat/spaddintrons/environment.yml index f108584..fd42731 100644 --- a/modules/gallvp/agat/spaddintrons/environment.yml +++ b/modules/gallvp/agat/spaddintrons/environment.yml @@ -1,6 +1,3 @@ ---- -# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json -name: "agat_spaddintrons" channels: - conda-forge - bioconda diff --git a/modules/gallvp/agat/spextractsequences/environment.yml b/modules/gallvp/agat/spextractsequences/environment.yml index c164fc0..214b22f 100644 --- a/modules/gallvp/agat/spextractsequences/environment.yml +++ b/modules/gallvp/agat/spextractsequences/environment.yml @@ -1,6 +1,3 @@ ---- -# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json -name: "agat_spextractsequences" channels: - conda-forge - bioconda diff --git a/modules/gallvp/braker3/main.nf b/modules/gallvp/braker3/main.nf index c856216..3cba6f8 100644 --- a/modules/gallvp/braker3/main.nf +++ b/modules/gallvp/braker3/main.nf @@ -38,6 +38,9 @@ process BRAKER3 { cp -r \$AUGUSTUS_CONFIG_PATH \\ augustus_config + chmod -R a+w \\ + augustus_config + perl -p -e 's/^(>\\S+).*\$/\$1/' \\ $fasta \\ > ${prefix}.name.only.genome.masked.fasta diff --git a/modules/gallvp/busco/busco/environment.yml b/modules/gallvp/busco/busco/environment.yml index 7df4e9a..5b918b4 100644 --- a/modules/gallvp/busco/busco/environment.yml +++ b/modules/gallvp/busco/busco/environment.yml @@ -1,7 +1,5 @@ -name: busco_busco channels: - conda-forge - bioconda - dependencies: - bioconda::busco=5.7.1 diff --git a/modules/gallvp/busco/generateplot/environment.yml b/modules/gallvp/busco/generateplot/environment.yml index eb97426..766c0f4 100644 --- a/modules/gallvp/busco/generateplot/environment.yml +++ b/modules/gallvp/busco/generateplot/environment.yml @@ -1,9 +1,7 @@ --- # yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json -name: "busco_generateplot" channels: - conda-forge - bioconda - dependencies: - bioconda::busco=5.7.1 diff --git a/modules/gallvp/custom/restoregffids/environment.yml b/modules/gallvp/custom/restoregffids/environment.yml index a13fdbb..68eaa88 100644 --- a/modules/gallvp/custom/restoregffids/environment.yml +++ b/modules/gallvp/custom/restoregffids/environment.yml @@ -1,6 +1,3 @@ ---- -# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json -name: "custom_restoregffids" channels: - conda-forge - bioconda diff --git a/modules/gallvp/custom/shortenfastaids/environment.yml b/modules/gallvp/custom/shortenfastaids/environment.yml index 2d7b9f7..04ccfc9 100644 --- a/modules/gallvp/custom/shortenfastaids/environment.yml +++ b/modules/gallvp/custom/shortenfastaids/environment.yml @@ -1,6 +1,3 @@ ---- -# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json -name: "custom_shortenfastaids" channels: - conda-forge - bioconda diff --git a/modules/gallvp/gffread/environment.yml b/modules/gallvp/gffread/environment.yml index 5575384..ee23984 100644 --- a/modules/gallvp/gffread/environment.yml +++ b/modules/gallvp/gffread/environment.yml @@ -1,7 +1,5 @@ -name: gffread channels: - conda-forge - bioconda - dependencies: - bioconda::gffread=0.12.7 diff --git a/modules/gallvp/ltrretriever/lai/environment.yml b/modules/gallvp/ltrretriever/lai/environment.yml index b55c28a..f1c392a 100644 --- a/modules/gallvp/ltrretriever/lai/environment.yml +++ b/modules/gallvp/ltrretriever/lai/environment.yml @@ -1,9 +1,7 @@ --- # yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json -name: "ltrretriever_lai" channels: - conda-forge - bioconda - dependencies: - "bioconda::LTR_retriever=2.9.9" diff --git a/modules/gallvp/repeatmasker/repeatmasker/environment.yml b/modules/gallvp/repeatmasker/repeatmasker/environment.yml index d701a5c..8c4d8c1 100644 --- a/modules/gallvp/repeatmasker/repeatmasker/environment.yml +++ b/modules/gallvp/repeatmasker/repeatmasker/environment.yml @@ -1,6 +1,3 @@ ---- -# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json -name: "repeatmasker_repeatmasker" channels: - conda-forge - bioconda From 3e00ad65c78f30775c4742aa8e34e6475dd4b159 Mon Sep 17 00:00:00 2001 From: Usman Rashid Date: Fri, 13 Sep 2024 16:18:12 +1200 Subject: [PATCH 65/87] Updated modules --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b5f894b..953ed20 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## 0.4.0+dev - [11-Sep-2024] +## 0.4.0+dev - [13-Sep-2024] ### `Added` From ffccf53cdf30876011c165466e6b750364e15a19 Mon Sep 17 00:00:00 2001 From: Usman Rashid Date: Fri, 13 Sep 2024 16:20:32 +1200 Subject: [PATCH 66/87] Fixed linting issues --- docs/output.md | 2 -- docs/parameters.md | 2 +- nextflow_schema.json | 2 +- 3 files changed, 2 insertions(+), 4 deletions(-) diff --git a/docs/output.md b/docs/output.md index d60e0ed..f785e95 100644 --- a/docs/output.md +++ b/docs/output.md @@ -6,8 +6,6 @@ This document describes the output produced by the pipeline. The directories listed below will be created in the results directory after the pipeline has finished. All paths are relative to the top-level results directory. - - ## Pipeline overview The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes data using the following steps: diff --git a/docs/parameters.md b/docs/parameters.md index e3d6742..3009d59 100644 --- a/docs/parameters.md +++ b/docs/parameters.md @@ -1,6 +1,6 @@ # plant-food-research-open/genepal pipeline parameters -A Nextflow pipeline for single genome, multiple genomes and pan-genome annotation. +A Nextflow pipeline for single genome, multiple genomes and pan-genome annotation ## Input/output options diff --git a/nextflow_schema.json b/nextflow_schema.json index 60cca38..be0832e 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -2,7 +2,7 @@ "$schema": "http://json-schema.org/draft-07/schema", "$id": "https://raw.githubusercontent.com/plant-food-research-open/genepal/master/nextflow_schema.json", "title": "plant-food-research-open/genepal pipeline parameters", - "description": "A Nextflow pipeline for single genome, multiple genomes and pan-genome annotation.", + "description": "A Nextflow pipeline for single genome, multiple genomes and pan-genome annotation", "type": "object", "definitions": { "input_output_options": { From 19cdd3ccc47969808693ba672ed9e6ddd62a8e47 Mon Sep 17 00:00:00 2001 From: Usman Rashid Date: Fri, 20 Sep 2024 12:44:46 +1200 Subject: [PATCH 67/87] Added parameter add_attrs_to_proteins_fasta --- CHANGELOG.md | 7 ++-- conf/modules.config | 2 +- local_genepal | 3 +- nextflow.config | 1 + nextflow_schema.json | 82 ++++++++++++++++++++++++++++++-------------- 5 files changed, 64 insertions(+), 31 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 953ed20..ae1790a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## 0.4.0+dev - [13-Sep-2024] +## 0.4.0+dev - [20-Sep-2024] ### `Added` @@ -17,7 +17,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 8. Added `GXF_FASTA_AGAT_SPADDINTRONS_SPEXTRACTSEQUENCES` sub-workflow for splice type statistics [#11](https://github.com/plant-food-research-open/genepal/issues/11) 9. Changed `orthofinder_annotations` from FASTA/GFF to protein FASTA [#43](https://github.com/plant-food-research-open/genepal/issues/43) 10. Added param `enforce_full_intron_support` to turn on/off strict model purging by TSEBRA [#21](https://github.com/plant-food-research-open/genepal/issues/21) -11. Added param `filter_liftoff_by_hints` to evaluate liftoff models with TSEBRA to make sure they have the same level of evidence as BRAKER [#28](ttps://github.com/plant-food-research-open/genepal/issues/28) +11. Added param `filter_liftoff_by_hints` to evaluate liftoff models with TSEBRA to make sure they have the same level of evidence as BRAKER [#28](https://github.com/plant-food-research-open/genepal/issues/28) 12. Added a script to automatically check module version updates 13. Reduced `BRAKER3` threads to 8 [#55](https://github.com/plant-food-research-open/genepal/issues/55) 14. Now the final annotations are stored in the `annotations` folder [#53](https://github.com/plant-food-research-open/genepal/issues/53) @@ -26,7 +26,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 17. `eggnogmapper_db_dir` is not a required parameter anymore 18. `eggnogmapper_tax_scope` is now set to 1 (root div) by default 19. Added a `test` profile based on public data -20. Updated modules and sub-workflows +20. Added parameter `add_attrs_to_proteins_fasta` to enable/disable addition of decoded gff attributes to proteins fasta [#58](https://github.com/plant-food-research-open/genepal/issues/58) +21. Updated modules and sub-workflows ### `Fixed` diff --git a/conf/modules.config b/conf/modules.config index 262927a..a5d9fed 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -271,7 +271,7 @@ process { // SUBWORKFLOW: GFF_STORE } withName: '.*:GFF_STORE:EXTRACT_PROTEINS' { - ext.args = '-y' + ext.args = params.add_attrs_to_proteins_fasta ? '-F -D -y' : '-y' ext.prefix = { "${meta.id}.pep" } publishDir = [ diff --git a/local_genepal b/local_genepal index 6f287b1..525f930 100755 --- a/local_genepal +++ b/local_genepal @@ -20,4 +20,5 @@ nextflow run \ --max_cpus 8 \ --max_memory '32.GB' \ --eggnogmapper_tax_scope 33090 \ - --eggnogmapper_db_dir ../dbs/emapperdb/5.0.2 + --eggnogmapper_db_dir ../dbs/emapperdb/5.0.2 \ + --outdir results diff --git a/nextflow.config b/nextflow.config index 010e561..aa8ed74 100644 --- a/nextflow.config +++ b/nextflow.config @@ -51,6 +51,7 @@ params { eggnogmapper_evalue = 0.00001 eggnogmapper_pident = 35 eggnogmapper_purge_nohits = false + add_attrs_to_proteins_fasta = false // Evaluation options busco_skip = false diff --git a/nextflow_schema.json b/nextflow_schema.json index be0832e..abee05d 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -38,7 +38,8 @@ "type": "integer", "description": "Eggnogmapper taxonomy scopre. Eukaryota: 2759, Viridiplantae: 33090, Archaea: 2157, Bacteria: 2, root: 1", "minimum": 1, - "default": 1 + "default": 1, + "fa_icon": "fas fa-hashtag" }, "rna_evidence": { "type": "string", @@ -85,21 +86,26 @@ "type": "string", "default": "repeatmodeler", "enum": ["edta", "repeatmodeler"], - "description": "'edta' or 'repeatmodeler'" + "description": "'edta' or 'repeatmodeler'", + "fa_icon": "fas fa-tasks" }, "save_annotated_te_lib": { "type": "boolean", - "description": "Save annotated TE library or not?" + "description": "Save annotated TE library or not?", + "fa_icon": "fas fa-question-circle" }, "edta_is_sensitive": { "type": "boolean", - "description": "Use '--sensitive 1' flag with EDTA or not?" + "description": "Use '--sensitive 1' flag with EDTA or not?", + "fa_icon": "fas fa-question-circle" }, "repeatmasker_save_outputs": { "type": "boolean", - "description": "Save the repeat-masked genome or not?" + "description": "Save the repeat-masked genome or not?", + "fa_icon": "fas fa-question-circle" } - } + }, + "fa_icon": "fab fa-adn" }, "rnaseq_pre_processing_options": { "title": "RNASeq pre-processing options", @@ -109,33 +115,40 @@ "properties": { "skip_fastqc": { "type": "boolean", - "description": "Skip FASTQC or not?" + "description": "Skip FASTQC or not?", + "fa_icon": "fas fa-question-circle" }, "skip_fastp": { "type": "boolean", - "description": "Skip trimming by FASTQP or not?" + "description": "Skip trimming by FASTQP or not?", + "fa_icon": "fas fa-question-circle" }, "min_trimmed_reads": { "type": "integer", "default": 10000, "description": "Exclude a sample if its reads after trimming are below this number", - "minimum": 0 + "minimum": 0, + "fa_icon": "fas fa-hashtag" }, "extra_fastp_args": { "type": "string", - "description": "Extra FASTP arguments" + "description": "Extra FASTP arguments", + "fa_icon": "fas fa-terminal" }, "save_trimmed": { "type": "boolean", - "description": "Save FASTQ files after trimming or not?" + "description": "Save FASTQ files after trimming or not?", + "fa_icon": "fas fa-question-circle" }, "remove_ribo_rna": { "type": "boolean", - "description": "Remove Ribosomal RNA or not?" + "description": "Remove Ribosomal RNA or not?", + "fa_icon": "fas fa-question-circle" }, "save_non_ribo_reads": { "type": "boolean", - "description": "Save FASTQ files after Ribosomal RNA removal or not?" + "description": "Save FASTQ files after Ribosomal RNA removal or not?", + "fa_icon": "fas fa-question-circle" }, "ribo_database_manifest": { "type": "string", @@ -146,7 +159,8 @@ "fa_icon": "fas fa-database", "description": "Ribosomal RNA fastas listed in a text sheet" } - } + }, + "fa_icon": "fas fa-filter" }, "rnaseq_alignment_options": { "title": "RNAseq alignment options", @@ -158,21 +172,26 @@ "type": "integer", "default": 16000, "minimum": 0, - "description": "Maximum intron length for STAR alignment" + "description": "Maximum intron length for STAR alignment", + "fa_icon": "fas fa-hashtag" }, "star_align_extra_args": { "type": "string", - "description": "EXTRA arguments for STAR" + "description": "EXTRA arguments for STAR", + "fa_icon": "fas fa-terminal" }, "star_save_outputs": { "type": "boolean", - "description": "Save BAM files from STAR or not?" + "description": "Save BAM files from STAR or not?", + "fa_icon": "fas fa-question-circle" }, "save_cat_bam": { "type": "boolean", - "description": "SAVE a concatenated BAM file per assembly or not?" + "description": "SAVE a concatenated BAM file per assembly or not?", + "fa_icon": "fas fa-question-circle" } - } + }, + "fa_icon": "fas fa-align-center" }, "annotation_options": { "title": "Annotation options", @@ -182,7 +201,8 @@ "properties": { "braker_extra_args": { "type": "string", - "description": "Extra arguments for BRAKER" + "description": "Extra arguments for BRAKER", + "fa_icon": "fas fa-terminal" }, "braker_save_outputs": { "type": "boolean", @@ -194,12 +214,14 @@ "default": 0.9, "minimum": 0, "maximum": 1, - "description": "Liftoff coverage parameter" + "description": "Liftoff coverage parameter", + "fa_icon": "fas fa-hashtag" }, "liftoff_identity": { "type": "number", "default": 0.9, - "description": "Liftoff identity parameter" + "description": "Liftoff identity parameter", + "fa_icon": "fas fa-hashtag" }, "allow_isoforms": { "type": "boolean", @@ -222,20 +244,28 @@ "eggnogmapper_evalue": { "type": "number", "default": 1e-5, - "description": "Only report alignments below or equal the e-value threshold" + "description": "Only report alignments below or equal the e-value threshold", + "fa_icon": "fas fa-hashtag" }, "eggnogmapper_pident": { "type": "integer", "default": 35, "description": "Only report alignments above or equal to the given percentage of identity (0-100)", "minimum": 0, - "maximum": 100 + "maximum": 100, + "fa_icon": "fas fa-hashtag" }, "eggnogmapper_purge_nohits": { "type": "boolean", - "description": "Purge transcripts which do not have a hit against eggnog" + "description": "Purge transcripts which do not have a hit against eggnog", + "fa_icon": "fas fa-question-circle" + }, + "add_attrs_to_proteins_fasta": { + "type": "boolean", + "fa_icon": "fas fa-question-circle" } - } + }, + "fa_icon": "fab fa-adn" }, "evaluation_options": { "title": "Evaluation options", From 5f16a823032e1fbbba0a971c1dc1df118414551e Mon Sep 17 00:00:00 2001 From: Usman Rashid Date: Mon, 23 Sep 2024 15:33:52 +1200 Subject: [PATCH 68/87] Added nonmasked test case --- CHANGELOG.md | 13 ++++++------- conf/modules.config | 1 - tests/README.md | 27 +++++++++++++++++++++++++++ tests/nonmasked/assemblysheet.csv | 2 ++ tests/nonmasked/params.json | 5 +++++ 5 files changed, 40 insertions(+), 8 deletions(-) create mode 100644 tests/README.md create mode 100644 tests/nonmasked/assemblysheet.csv create mode 100644 tests/nonmasked/params.json diff --git a/CHANGELOG.md b/CHANGELOG.md index ae1790a..0ffecbb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -21,13 +21,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 12. Added a script to automatically check module version updates 13. Reduced `BRAKER3` threads to 8 [#55](https://github.com/plant-food-research-open/genepal/issues/55) 14. Now the final annotations are stored in the `annotations` folder [#53](https://github.com/plant-food-research-open/genepal/issues/53) -15. Added `-gff` flag to `REPEATMASKER` to save the gff file [#54](https://github.com/plant-food-research-open/genepal/issues/54) -16. Now a single `fasta` file can be directly specified for `protein_evidence` -17. `eggnogmapper_db_dir` is not a required parameter anymore -18. `eggnogmapper_tax_scope` is now set to 1 (root div) by default -19. Added a `test` profile based on public data -20. Added parameter `add_attrs_to_proteins_fasta` to enable/disable addition of decoded gff attributes to proteins fasta [#58](https://github.com/plant-food-research-open/genepal/issues/58) -21. Updated modules and sub-workflows +15. Now a single `fasta` file can be directly specified for `protein_evidence` +16. `eggnogmapper_db_dir` is not a required parameter anymore +17. `eggnogmapper_tax_scope` is now set to 1 (root div) by default +18. Added a `test` profile based on public data +19. Added parameter `add_attrs_to_proteins_fasta` to enable/disable addition of decoded gff attributes to proteins fasta [#58](https://github.com/plant-food-research-open/genepal/issues/58) +20. Updated modules and sub-workflows ### `Fixed` diff --git a/conf/modules.config b/conf/modules.config index a5d9fed..edc84a2 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -41,7 +41,6 @@ process { // SUBWORKFLOW: PREPARE_ASSEMBLY ext.args = [ "-no_is", "-xsmall", - "-gff", ].join(' ').trim() publishDir = [ diff --git a/tests/README.md b/tests/README.md new file mode 100644 index 0000000..9d62d34 --- /dev/null +++ b/tests/README.md @@ -0,0 +1,27 @@ +# **plant-food-research-open/genepal** Tests + +## Minimal Testing + +If [Nextflow](https://www.nextflow.io/docs/latest/install.html#install-nextflow) and [Docker](https://docs.docker.com/install) are installed on the system, the pipeline can be minimally tested with the following command: + +```bash +nextflow run plant-food-research-open/genepal -r main -profile docker,test --outdir results +``` + +Or using [singularity](https://docs.sylabs.io/guides/3.0/user-guide/installation.html): + +```bash +nextflow run plant-food-research-open/genepal -r main -profile singularity,test --outdir results +``` + +## Local Testing + +The test sets included in this directory can be executed by first downloading the pipeline from GitHub and then executing the following command: + +```bash +./main.nf -profile docker -params-file tests/minimal/params.json --max_cpus 8 --max_memory '32.GB' --outdir results +``` + +## Continuous Integration (CI) + +The GitHub [CI action](../.github/workflows/ci.yml) included with the pipeline continuously tests the pipeline with the various test sets listed in this directory. diff --git a/tests/nonmasked/assemblysheet.csv b/tests/nonmasked/assemblysheet.csv new file mode 100644 index 0000000..9cf5f15 --- /dev/null +++ b/tests/nonmasked/assemblysheet.csv @@ -0,0 +1,2 @@ +tag,fasta,is_masked +a_chinensis,https://raw.githubusercontent.com/nf-core/test-datasets/modules/data/genomics/eukaryotes/actinidia_chinensis/genome/chr1/genome.fasta.gz,no diff --git a/tests/nonmasked/params.json b/tests/nonmasked/params.json new file mode 100644 index 0000000..0c7a4bf --- /dev/null +++ b/tests/nonmasked/params.json @@ -0,0 +1,5 @@ +{ + "input": "tests/nonmasked/assemblysheet.csv", + "protein_evidence": "https://ftp.ncbi.nlm.nih.gov/genomes/all/GCA/003/024/255/GCA_003024255.1_Red5_PS1_1.69.0/GCA_003024255.1_Red5_PS1_1.69.0_protein.faa.gz", + "busco_lineage_datasets": "eudicots_odb10" +} From 75b66fdf533dd54dabb594782fb7316678e7577a Mon Sep 17 00:00:00 2001 From: Usman Rashid Date: Mon, 23 Sep 2024 16:24:21 +1200 Subject: [PATCH 69/87] Added a check for input assembly size --- CHANGELOG.md | 3 ++- docs/output.md | 1 - .../local/utils_nfcore_genepal_pipeline/main.nf | 11 ++++++++++- tests/short/assemblysheet.csv | 2 ++ tests/short/params.json | 5 +++++ 5 files changed, 19 insertions(+), 3 deletions(-) create mode 100644 tests/short/assemblysheet.csv create mode 100644 tests/short/params.json diff --git a/CHANGELOG.md b/CHANGELOG.md index 0ffecbb..f503cee 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -26,7 +26,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 17. `eggnogmapper_tax_scope` is now set to 1 (root div) by default 18. Added a `test` profile based on public data 19. Added parameter `add_attrs_to_proteins_fasta` to enable/disable addition of decoded gff attributes to proteins fasta [#58](https://github.com/plant-food-research-open/genepal/issues/58) -20. Updated modules and sub-workflows +20. Added a check for input assemblies. If an assembly is smaller than 1 MB (or 300KB in zipped format), the pipeline errors out before starting the downstream processes [#47](https://github.com/plant-food-research-open/genepal/issues/47) +21. Updated modules and sub-workflows ### `Fixed` diff --git a/docs/output.md b/docs/output.md index f785e95..a436fad 100644 --- a/docs/output.md +++ b/docs/output.md @@ -45,7 +45,6 @@ A repeat library is created with either [REPEATMODELER](https://github.com/Dfam- - `repeatmasker/` - `*.masked`: Masked assembly - - `*.gff`: Repeatmasker output in GFF3 format
    diff --git a/subworkflows/local/utils_nfcore_genepal_pipeline/main.nf b/subworkflows/local/utils_nfcore_genepal_pipeline/main.nf index f084ba8..c4b53f2 100644 --- a/subworkflows/local/utils_nfcore_genepal_pipeline/main.nf +++ b/subworkflows/local/utils_nfcore_genepal_pipeline/main.nf @@ -85,7 +85,16 @@ workflow PIPELINE_INITIALISATION { def tag = it[0] def fasta = it[1] - [ [ id: tag ], file(fasta, checkIfExists: true) ] + def fasta_file = file(fasta, checkIfExists: true) + def is_zipped = fasta.endsWith('.gz') + def sz_thresh = is_zipped ? 300_000 : 1_000_000 + def fasta_size = fasta_file.size() + + if ( fasta_size < sz_thresh ) { // < 1 MB + error "The assembly represented by tag '$tag' is only $fasta_size bytes. The minimum allowed size is 1 MB!" + } + + [ [ id: tag ], fasta_file ] } ch_tar_assm_str = ch_input diff --git a/tests/short/assemblysheet.csv b/tests/short/assemblysheet.csv new file mode 100644 index 0000000..3b09d44 --- /dev/null +++ b/tests/short/assemblysheet.csv @@ -0,0 +1,2 @@ +tag,fasta,is_masked +sarscov2,https://raw.githubusercontent.com/nf-core/test-datasets/modules/data/genomics/sarscov2/genome/genome.fasta.gz,no diff --git a/tests/short/params.json b/tests/short/params.json new file mode 100644 index 0000000..b808cab --- /dev/null +++ b/tests/short/params.json @@ -0,0 +1,5 @@ +{ + "input": "tests/short/assemblysheet.csv", + "protein_evidence": "https://raw.githubusercontent.com/nf-core/test-datasets/modules/data/genomics/sarscov2/genome/proteome.fasta.gz", + "busco_skip": true +} From 5d419b853689827763fbcb9d0cc247b76239f04a Mon Sep 17 00:00:00 2001 From: Usman Rashid Date: Wed, 25 Sep 2024 18:08:03 +1200 Subject: [PATCH 70/87] Now skipping file size check for stub run --- subworkflows/local/utils_nfcore_genepal_pipeline/main.nf | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/subworkflows/local/utils_nfcore_genepal_pipeline/main.nf b/subworkflows/local/utils_nfcore_genepal_pipeline/main.nf index c4b53f2..f38843a 100644 --- a/subworkflows/local/utils_nfcore_genepal_pipeline/main.nf +++ b/subworkflows/local/utils_nfcore_genepal_pipeline/main.nf @@ -86,6 +86,11 @@ workflow PIPELINE_INITIALISATION { def fasta = it[1] def fasta_file = file(fasta, checkIfExists: true) + + if ( workflow.stubRun ) { + return [ [ id: tag ], fasta_file ] + } + def is_zipped = fasta.endsWith('.gz') def sz_thresh = is_zipped ? 300_000 : 1_000_000 def fasta_size = fasta_file.size() From 2c79787efe6bdba692b2d8a7dc0559a06b3b19f6 Mon Sep 17 00:00:00 2001 From: Usman Rashid Date: Fri, 27 Sep 2024 10:42:41 +1200 Subject: [PATCH 71/87] Updated flowchart --- README.md | 2 +- docs/img/genepal.drawio | 234 ++++++++++++++++++++++++++-------------- docs/img/genepal.png | Bin 218769 -> 377039 bytes 3 files changed, 157 insertions(+), 79 deletions(-) diff --git a/README.md b/README.md index 4604dc7..91ee585 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@ ## Pipeline Flowchart -

    +

    - [FASTA VALIDATOR](https://github.com/linsalrob/fasta_validator): Validate genome fasta - [REPEATMODELER](https://github.com/Dfam-consortium/RepeatModeler) or [EDTA](https://github.com/oushujun/EDTA): Create TE library diff --git a/docs/img/genepal.drawio b/docs/img/genepal.drawio index a183f18..fb31492 100644 --- a/docs/img/genepal.drawio +++ b/docs/img/genepal.drawio @@ -1,6 +1,6 @@ - + - + @@ -35,7 +35,7 @@ - + @@ -52,11 +52,11 @@ - + - + @@ -76,11 +76,11 @@ - + - + @@ -97,7 +97,7 @@ - + @@ -106,26 +106,26 @@ - - + + - - + + - - + + - - + + - - + + - - + + - - + + @@ -169,10 +169,10 @@ - - + + - + @@ -183,8 +183,8 @@ - - + + @@ -195,8 +195,8 @@ - - + + @@ -204,8 +204,8 @@ - - + + @@ -216,20 +216,8 @@ - - - - - - - - - - - - - - + + @@ -249,14 +237,14 @@ - + - + - + @@ -273,11 +261,11 @@ - + - + @@ -294,26 +282,14 @@ - + - - - - - - - - - - - - - - + + - + @@ -330,35 +306,137 @@ - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - + - + - + - + - + - + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/img/genepal.png b/docs/img/genepal.png index 93ca50e4222c67e3647e240bb1030b6440784403..08201169716e565e420fd9c853f3c349e9086f6a 100644 GIT binary patch literal 377039 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

    -KdHx8)K3A^!c=ys&j=uRbrMn8UOrpP~7+9&?%y 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 z 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 O^?foIToDff? zt;{avdVhz?){7sAIe{=P&E6t}!cOE3%Md-ps`V8SD(%++mpKZ@r0D+PwTZ=@<(;SUQErL7-|ez9YHjQk zap0wZ9IHJ)ly7eGh-t}0XX_YLs>Ue|m7FI-fWhNy+ek0HuGDO6mCWAE38WxKZ+ssf zX=o6ZnXDvuEAjXDF5o>wquPUvtm5Y zL=?fnzWxlkz3o+R_TI=cI#aV<^7DXtQd*^!PM5bAmmbQYT6#83`UxJsb2u;|jJfu4 zNd*QTSMkB6%x~f^T_CPWp!jCmTf_xdLlXnbBb&>RLeo$pYb-)^qDNuTEja90`|>!Y zNy?u)-rdtUVVDY36uDpT35O-KxpZjJRfO#yF_>>WF-j;etcZaiNsl-+uO>QFoum4r zO9zRi;YHrBvFHVwNG^=#ndCVjvFP{fGwnkutHc?T>AV+OTul}*H z$wNm&>*U_3$(0S`gLPMMd3(;o$aAfPjoGQ&R-fjTXw=UWz?_Yv6xQkv&pY#~0v}h! z*2amyR}21^7lz$!o}jF5h=Jwr*8N_T= ziD5Ekas@^;&0q%KGrw%CtS9$_G0I^Gu%ct!n$rz`nweJ8{t_c_MiYD#Hp1;y8FXr( z__ZSJ=}tL)U#50h&-~utXOji=f!cuWpUFFAnx$4UT&TvISy>e3S1#)+FN&N`r4GpGL4UY#kGenqiVRzNN>^PRQC)>~g(8z#D@ zoDC4pbwQvB!PV2UPXn&3-JED1SI_1OO#aD(1RBFuHnb~qxpK(v#tI;FcQFS<;{=ZM z^|kvCntmjvW$=OW(t-qx_sRytFR{V;T(?KQdCC6kJ7> zbi981FazBT3jKPkB?p=!8y&fFc1a5>jI(HirBGh26Lx>Pe8>=k0dK-82umY{AG_e0 zVzRf0D+U;AueV~;{7X}oHLfXB5X+=-$QC!7R_*qAljKCKLQ zXBj@9Q8h?Uvv9jZgnonN?&dRY^UzQ9L7om&ctU&7R?`x#hBe-r-Y$e!|zey%zKWj!;X<$mL^cp;8_dJcnxb1Pwq)5 zvphQe!k)PMW#_%l0HN$9wnXi)*nW3f8z>4k-dnu?c3rx4OTlP8mC2X{b?)Fq_q4Xi z$jI738Xp&9PN7}e7w<36K*Ts^XfAc38U2RVYLRHM7>z)6OfEeru zK{eOcV}>tmWe{o_5jMli4K`pjIGS6oo3EbCrlGH>mIUoMZs@$wBJ(PI`DS|$focpa zOnM!c|7z~CbD!tuc$`q17P5M!h&jk2P6dj&zV9Wq9h^{E_Cj6o^8K?)7|=(u4RJ*~ z8Ui-wpmrOd^YDh^IgtkoF}~Z)<4_5|GJ{8M=a$m8+{<^-$)DZe0(RA0aqiKVGBiR&Uu58JTs_;}k*41mD$(!wg^1 z-s$nZv$j~~s^V8I0G_o&`w;=q`}Rxm=x-L62$f{kdScFN?WFE!lT6h#(@HOR9cWJP zY;kJKmQa42S%z#aZ{bTda4ZPsh->H|HX-qg$$?PfVq(2RX%QjROLhV}8Ll&ZH z9>7c{mMh>CldXPW9ZVr1U{W({IKSLsP}hl`k0*2%AynE*tp0>%ONTvqjSxts0`4Ex zW%ZBrtfsRBM%h*-I#4?`m3zhXjSTKe`xLnlyK$~iyTP9Y2P;taI4ygf2CvntKL<}E zu<`WX5w++L+Fku+yHNMD;huMb_hU%bx);Kac%%isw-KoJ%+Pmz-S&s^)u0;X?q^TO zc$6GzYI)0Dio;(Q|11!}E``ksk_}HlmLVMwA2Gcgxm8`RMz>Sx7NU_t)lMQV=eZra zVXVVc$^lkSBs#vKkx|2|xWq36Sy0tU?)rzyn(q0Ok0dyJN|%+FKdRpGWG-obe#}u$ zADOnhqo`a-UGNiC$^cr3(;X@LxJLlte1IFHgUA?wEYd4xZb_qIp9BL2C>f74%q#+0 zv@!Suu+{?ic-6~;7F~dYARu|p@QXx=IJjymO(fNnj3061{f%-2gG+RD^*G#vy;Lix zk=f+#Ge-LpuaOslM5>7ilXF%~x)&UB(OJ&7i8BkA5Oyd-pq z?azOR4`&`fLbjnK~N2?|>4 zibd?go|n`-BsLq$e0p;?>6<%5 z^^mrPuaEG}FBp+{90Aw@gY}7@?Zw2z0(Ly3XkJGz$T4M0b*2IwOv!K^+>FsPecbD~fif1{@J{h4L4(QHh~h!i zKCR&=D_>17MmDDPLZ&R@Zc&xJ`&Z(6Eu z=7O6b**H1>{Wfddq`8^{N|wH+KnvQ>vq}cGcqco=7tSAhs2A+?*=@SReP7zei4_X7 zW}N`#ZhiCkyDDG4%mkIj((_CEF$cLt{)vPHQ;p_flKFvhyG!>uLTbhYK?7F3p_RPY zwN-+4))~&xDWGm^%02dr84FuH333Z}MSs@TOw_>a&;l2xh49&}3(Y>LH=53|FbgwI z*{gS;Z1sIMDps3?eL|TZPiS&gI|&wFsGKmsXyhqw(3N zdt9v8*$hnIKAF5T8AzK=iv{5tB_7wETeLNvwgJ=I)G{Hg^RTzuOuZi6u-%6n7rnwf z^fRi1E>GH^)v@X@Gn`Lp;Kd_47CdUfqN*ZFrLA-kvwt6#wl_@0BSs z3uhaHq_06|Zo1^&ZBtQznvUATtE{lmyzZfY96?v+8d!Qpx+*s?A&DcVpjRi1qLM9z z6h^?G71B>(AvbEex!21!pQh1EfQb9a}dU;>Q zVQKjO73;P*Di+sHoOs>m!TxXFj(a(61+dD2Ka`99KYuHpMMq675fsY<9(y)&hAP}2 z-{)`mT@}XY!7>G8#aF13sJ`lv*%E^djS`Wt!J)rY!F@<6f<=cewZzmYR8Y zMGdd0{7DgFSdh1D9l<;~Nvl!9n{jLJ7cXh!BOL3Xznk^G=hId2iyk8cVAhyG=Gji6 z_?BmnX~+GG-My-V1pQy_VJt@r-em?r@{nIIEK;o#kIMd@kMI#z<>f32lD7@vPwo$jlXe5&M$ZdeeVn+nu3-V z9+v%WrbmCz$MMAfWKc0wn4-InKp<;gyYbeRe1FThb8;#veaRdMT{{q;6DbxR9)9@f z%#`qo`TR;+>%XK1kk2DeVWud@*Xq3+EF1A8FoFI6$u1y%Hk4;LUm&xWjsylT?OoL+ z5=+&+jU!c>qT)AztywhcV&4&OU+u%!h5eu5JRlDz`)uO4fPQMSwyrD+yqy3uEA5`h zyEmayt+RUG&WZ&>dFHl36b)T`B#iOJy>iKRm9IIgAm4Wk`xuJwIz~UOSb3cD>Hf0n zfs3s`k7~QJ?n~rYoB2G5fQ&kes))cqQ%lVJ#qa=6dqfbCsDm0AgS<~+G}nUl?5WYT- z1%c6p)G@y7!XgjTijrvl?j>u~Xqj2D?Q4f|Z}$Jbd%GwNIq$-8JORw$y53ZUzXEIY zC(Wuw&O>ziY?~klapH+ML)=r(`W0uEjW_jL^AzMyVi+g_9`te<@)pup3?r6hn){}` z&)3u8k-W^!DCuJ!zHL-CMQDoSr}6kvXyHzoy{q*pY5G_LNgF!n{NlmBfeZ+X)zRE| z%Fgog-`#TY_qrOo#Idm*-zW!(-#P_d7;l*WVT!QqA9Fpsa;a)Mr8%DCaOwvOAj8^C z!nZ1?&nls8`4X8iY0gs%l+vH}VYWZ94DDZ`xPM&psJK#2YtGO5qXeMpWZng80&yRF zv)pI!8&pP*=;NkLy)w`zw*kxR1VALwcbeIBu)~L`y<``7PQrxZdpBh&@fF8WmBl{c zkx|>ZH+!ZN;3;`DE_4~OG>Aj^1OVH~26%<4S`Ey8e_OOliet|YOxyM<;&Kkrjld9_ z5tX%ZDLX*O;MqIpb6ub|=&nk%StQJ+W{UQu92~19E3vOa`%1 z&@d-VEr+PABpLPS>Y(A-6}I9dvfznF#T6nSyq}fYx}=L{MP1r348=AV$)(dd?qs0x zQ=k#Ysa1Tnvm5HC_SG8;^Z->+gNx3px76}W23X*ZmT~hsVVI+U*RpersmoE z>H6;ls&4K)fs>;_LcSC@cP40c)9_Ha?X2p zf08^Kv?0a0(ZKrVk0>~`0vO0a#oA6sNqu25@Wrynma8)%iZ}vzYD7e`QRiiyfKebi z+!NhyTNYyx{aF~->+4FhXA6>&;TV*07b2TelD>{!a80-5tFjLVU%DtGSdFUpN1!-H z)-lAWd5`ov$8~77d@(vxJ{IjvA5AqMrg@g$f@V?b8uD(I94xv&1H-TD@P)4^K6<}& zcn#1VJNvS~KlIzD_xA&9gG8(MiwzpTz2&8oNa{WfWX2ppz4Xfc9Oc<4-qYkS8nUgc zxF)S(7l6yU3*C(uYEjOOE>ltCh)wmA1S0%bUDi7%th_j2e8d})8L$CslD291Nf zsTacY`9pez*NFS6RhEPMFzwnDZJ73q9D&i&I)_me%!O%8b^1e{>v_NbU1WYhrYZbX zN~`b0<9&?SA%?~a9iaB$L;|T~NvLkT2aLGhQX@@Aq<;Tk=aQAHEG^HwMD((up*CP* z&C_whG7uvfHJxA;Mbya0!v@Gb+GL7?m4dky;M0>W(=3TI0D6RY%=%CKeRt77N@QJ^ zJ@1Fx3Ve$!z%CHF>SlR<(l$r+rnf;2t~3N45ikTNUV_jayzTZ7CvXZkZ%9NZT9kY$ zK*_j7CQslIIvRfxi%fwS=-}pA*NQ^mF$`!!v$Gzw1lD+vnm*la~3q z6KLF{zTa(Guf{qU%+?Sfp&3?wT2_UK!hT?(wN#GIEWlP56wo4tq8^XpzLZ~$Gp~7+ zSw?rOE&NVDku>9o2=MpPq}%VWB@dd#e9nns;{6oXKE>dcW5hL?2@Rj{$Vj_CNBQaP zV?+oO;|Rs$U<%}D&`fBGPE$XVm-=odgT0Rsl&AZrDsgzwud5a+*NP~hEb01(=E@aU zj2taW2VdgeK-23CIorMUXN+@vCNJH9&Qyhp+qLN1vH0H-q1hKplrYIjrYh5Z6JJ+Y z*dXJ9w~*V~pP_xqd%)PvLf!8)dggW`;wnwbKycZ2*G7Ew6rg6(*SLUAe+o$~1D$|! zXy4$Bl2GkBB5{nIx;zU4rv}@b;%Ss(pGd6l{|K)JIC^{G%(#9QRsWO#nYdu!p(fzc z$YJaY_c|vFeY=9--q_qbf9~dfn&l#TF$29BV$^#|AOtR<*ES&o4#(bi0lxhYXqMQv zus^05_wxXnGiKwkj#;#47nx-f*6~&}6!aIyQzE)hV*zmX4d9jkI!er`Lt>~x*A~8mQ z1QbY0w;(_VKv^wZzc-QjH%D?k~Y@K^;8fN8e0FQ-) zkWqG3m-Hyw5YRhY1NJ9IcPA>J%$nUxAzm>A-LX^APc=s4OXII~AUPj1itf^LaGJ2V zoHudjTBNTxKt_km-Mgeayox1vmP)BxeMUV}@r2f7bl4y2bx8O$)ypkNyr|c>No?Pp z@|B!BJ9K6%c+5A89Jj3*I0_@H&{my|5PdAtOG|Tf8&aoCgKqc_HlFbDB2prA^w?{lZC%SYim12x^>?Bbg-ADvV(J;|(ib+(qs~QI zCkiSyd-q`tKh%}_lJqAnJ-`P=bhD-m4Iz4tu(=he6Qnla59tJQCmHc)_>^xvFazDzrWR~zxleo|L}wD6e?E?u9(-)xj?E**#&G%LCO=T59Hzuij#gv zsfstx%NdzNE-^n4gPj}<=x0Nfubrgt#t@*gJ{W^J#2rVdEypgn#DOVto*Ulx{3mS4 zOG`@3d^eO4m<36xsS9bc2&IVLijq9f&B__=4~{jVurpI$hCms?q)vC^Mi`5Er^(e= z1K0U#34&xr9`JQvr1XzbbXB+Nbe{wg{9*xdD!Rql>;&r|8_fstIkr4esi35>6`&F7 zx~6=P;0&kfbJeiJfh*~h1?)aqX1+t04p~6lYy}?E_ML6b{+aNY2@1*mJc5h>i@2st zKdQgR_lc4P1NE$`Q{7^Lf9Fu8KHpD)nR28M=n+eL6iL593voWUy%)${2H6@t;OlHj z=||BjHJv=I%>4vF&4_f0O6`mGUt-bg8o2H$bxbH80U$D;D8`g<|9u=Jjitma@;cNy zaYr1VY&?cw3Q#k+N<<1F_5cLIMRhD)Rz3$is-Sb>*`h-zzq*V?rZ`Ig8K+XwW6&%mE9dcUU!lB@S0Fm$c!LrFdy8Pnz-k+-Um#CSmJWUH@4RJL-&k?HxCHg zr@r2l?-#xEycya@au#D6h5kGN&;yQW&q|v|h_KA8jz@PxRJV=di&BBbNw;{I^)!rk z;UINSrKtCDybixzg48*uq}d}pyupwQ*-NTn7zRjSeUik3jB*VGX0f2OE4PLpgw}wn zAZfi2TebU3r*iK523~vc?diFGU>~MfC}jV%H5}{n^%dDt+n%3Xkpq6FxkDtP(@57_ z=l)*B-d8~+@qKfpau`r4bdnheh0wJG#7QocE0M zzBhWW_B;rGIsBqfKfjilK_e3quZ=p@hwXTt0n=Z5Y;MtEk|El(sovdT5#E7q$hk0Q z^G-!^O(5lYoWG9~o>gh!3A%dIU8)jawb2a|9@h#1ggbbWHb)pv77m!@nia%CXn? zY^T@8{R7AGRbWO2__1`=kx5qhye9_BUhFGyVejWH=(n9~a`_41O|<A1#ugXjI{y3YD5O384JlUUH(qnI}Nhi_}rKp)h?S7^=_FS+H?bA9K*(U-+1@qoQUMVK}J&?Db2C<<=raSiPnU zO$PH&-?hE=9WQm01w`^myps*?DGA({l{^afijIoIY+cC9d7dnZo0gSn23r}IN+j{H3 z)DJ+wAnux2Tw8V_uW97{djGp?n+AWJZ;-E2WW=MDZTfo#QHF`eTFulQ&Xg_iQ$EY! zG7+}x1;7Q|dC54vQW;8syAbNW8!EA4A7kne-!o^j$8HWDNuVQ6;PSvw=Y!{fnpPi8 z29>@RiALc9ODXV(rqAAZ$A{MZr!lkHeM?{83n~>1kc5l7JyzgnUOM}sAQGI>bTyIg z`&N`hk>2rG7PNx0lAP+Md};j!=S|~t{P#YM`);tG3GJC1@l4m7w_Mx*0^b$nxq_z) znNzTi^FlKyj3sKGRmQ%s;8Jt$kKu7_-`@QCYy{J$j|bc^=h_SqB|KSZ2gxRu`x~iK z(6l2J3?ctBzF&x!tXsVbtvno(qi_le}8-ZvO$s!$7Fr9_YnrUmlB<*G3 z0Dg(~O$v%E1W^)CyohYj+Y+_yPoY(oE%GOXcJAvd#Ma*;vae?1PRmD0!yR%FnQl0loJ@k1~0g!82;p6_&eI$!q8U_`5TsDX-CDL-FZ z|E&P*x*~e_lYsV7aPYj0$pSQ~!?_L$qcbA;LnUpESVo0vH}CTI>N~QZcs&Z7W{w;8%%!tSK^D`TrB}TXS-CM`!THs5tmJG;|MS9q&&z-RuY`quiWi%x%jZPGfA#Tk0td_E&X@eFzv1u2 zGNQ8!jCRdC!_OJ#?;XD#?>oX{Z1UZI;fNLf{hIdwk^dcP?o;^Rq5gKidw=-vP;*|Ail1amat+$A94m_X=>E)Bl&lk3xoM)DJ%h zg{)k**pS=rah>9S_|<<0oO^r!i?9Dbb-@4OPx# literal 377039 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

    -KdHx8)K3A^!c=ys&j=uRbrMn8UOrpP~7+9&?%y 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

    0UthStxW)6_y*9^YXh|53prm^kn0=8 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 P|C5zgluF%aeDVJQBOL2+ From 6a028072694de7797edc56c8f2a3772bbabc7073 Mon Sep 17 00:00:00 2001 From: Usman Rashid Date: Mon, 1 Jul 2024 15:35:06 +1200 Subject: [PATCH 27/87] Now publishing more outputs --- CHANGELOG.md | 2 +- conf/modules.config | 16 ++++++++++++++++ modules.json | 2 +- .../main.nf | 19 ------------------- workflows/pangene.nf | 4 ++++ 5 files changed, 22 insertions(+), 21 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0d45d05..84e47c9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## 0.4 - [25-Jun-2024] +## 0.4 - [01-Jul-2024] ### `Added` diff --git a/conf/modules.config b/conf/modules.config index 9f01fed..5505751 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -266,6 +266,14 @@ process { // SUBWORKFLOW: FASTA_ORTHOFINDER withName: '.*:FASTA_ORTHOFINDER:FASTA_GUNZIP:GUNZIP' { ext.prefix = { "${meta.id}.pep" } } + + withName: '.*:FASTA_ORTHOFINDER:ORTHOFINDER' { + publishDir = [ + path: { "${params.outdir}/orthofinder" }, + mode: "copy", + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + ] + } } process { // SUBWORKFLOW: FASTA_GXF_BUSCO_PLOT @@ -323,6 +331,14 @@ process { // Universal ext.prefix = { "${meta.id}.purged" } } + withName: SAVE_MARKED_GFF3 { + publishDir = [ + path: { "${params.outdir}/splicing_marked" }, + mode: "copy", + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + ] + } + withName: CUSTOM_DUMPSOFTWAREVERSIONS { publishDir = [ path: "$params.outdir/pipeline_info", diff --git a/modules.json b/modules.json index e8a5bd3..64c6f5d 100644 --- a/modules.json +++ b/modules.json @@ -76,7 +76,7 @@ }, "gxf_fasta_agat_spaddintrons_spextractsequences": { "branch": "main", - "git_sha": "f373339d099de4e7330cd8f3c400ad9a080358c9", + "git_sha": "d67a48075392ac63ce680780dd87415244a66b3a", "installed_by": ["subworkflows"] } } diff --git a/subworkflows/pfr/gxf_fasta_agat_spaddintrons_spextractsequences/main.nf b/subworkflows/pfr/gxf_fasta_agat_spaddintrons_spextractsequences/main.nf index e7b4cc5..6380ca4 100644 --- a/subworkflows/pfr/gxf_fasta_agat_spaddintrons_spextractsequences/main.nf +++ b/subworkflows/pfr/gxf_fasta_agat_spaddintrons_spextractsequences/main.nf @@ -110,25 +110,6 @@ workflow GXF_FASTA_AGAT_SPADDINTRONS_SPEXTRACTSEQUENCES { ) | map { id, gff3, meta -> [ meta, gff3 ] } - // collectFile: Stats - ch_stats_tsv = ch_marked_gff3 - | map { meta, gff3 -> - def summary = gff3.readLines().findAll { line -> - if ( line.startsWith('#') ) { return false } - - def cols = line.tokenize('\t') - def feat = cols[2].trim().toLowerCase() - - if ( feat == 'intron' ) { return true } - - return false - } - .collect { line -> - - } - } - - emit: motifs_tsv = ch_splice_motifs // channel: [ val(meta), tsv ] marked_gff3 = ch_marked_gff3 // channel: [ val(meta), gff3 ] diff --git a/workflows/pangene.nf b/workflows/pangene.nf index 93e03e6..19f069f 100644 --- a/workflows/pangene.nf +++ b/workflows/pangene.nf @@ -14,6 +14,7 @@ include { PURGE_NOHIT_MODELS } from '../subworkflows/local/pu include { GFF_STORE } from '../subworkflows/local/gff_store' include { FASTA_ORTHOFINDER } from '../subworkflows/local/fasta_orthofinder' include { FASTA_GXF_BUSCO_PLOT } from '../subworkflows/pfr/fasta_gxf_busco_plot/main' +include { CAT_CAT as SAVE_MARKED_GFF3 } from '../modules/nf-core/cat/cat/main' include { CUSTOM_DUMPSOFTWAREVERSIONS } from '../modules/nf-core/custom/dumpsoftwareversions' include { GXF_FASTA_AGAT_SPADDINTRONS_SPEXTRACTSEQUENCES } from '../subworkflows/pfr/gxf_fasta_agat_spaddintrons_spextractsequences/main' @@ -372,6 +373,9 @@ workflow PANGENE { ch_splicing_marked_gff3 = GXF_FASTA_AGAT_SPADDINTRONS_SPEXTRACTSEQUENCES.out.marked_gff3 ch_versions = ch_versions.mix(GXF_FASTA_AGAT_SPADDINTRONS_SPEXTRACTSEQUENCES.out.versions) + // MODULE: CAT_CAT as SAVE_MARKED_GFF3 + SAVE_MARKED_GFF3 ( ch_splicing_marked_gff3 ) + // MODULE: CUSTOM_DUMPSOFTWAREVERSIONS CUSTOM_DUMPSOFTWAREVERSIONS ( ch_versions.unique().collectFile(name: 'collated_versions.yml') From 6d958bf541b2b0ecb23db9405c1b1c5abea1a1a4 Mon Sep 17 00:00:00 2001 From: Usman Rashid Date: Wed, 24 Jul 2024 16:44:19 +1200 Subject: [PATCH 28/87] Added a script to automatically check module version updates --- .github/check_module_versions.py | 320 ++++++++++++++++++ version_check.sh => .github/version_checks.sh | 0 .pre-commit-config.yaml | 2 +- CHANGELOG.md | 4 +- nextflow.config | 4 +- 5 files changed, 326 insertions(+), 4 deletions(-) create mode 100755 .github/check_module_versions.py rename version_check.sh => .github/version_checks.sh (100%) diff --git a/.github/check_module_versions.py b/.github/check_module_versions.py new file mode 100755 index 0000000..ac8ce59 --- /dev/null +++ b/.github/check_module_versions.py @@ -0,0 +1,320 @@ +#!/usr/bin/env python3 + +import colorlog +from urllib.parse import quote_plus +from functools import cmp_to_key +from pathlib import Path + +import subprocess +import argparse +import requests +import logging +import semver +import json +import re +import os + +PIPELINE_REPO = "PlantandFoodResearch/pangene" + +def get_logger(): + formatter = colorlog.ColoredFormatter( + "%(log_color)s%(levelname)-8s%(reset)s %(blue)s%(message)s", + datefmt=None, + reset=True, + log_colors={ + "DEBUG": "cyan", + "INFO": "green", + "WARNING": "yellow", + "ERROR": "red", + "CRITICAL": "red,bg_white", + }, + secondary_log_colors={}, + style="%", + ) + + handler = colorlog.StreamHandler() + handler.setFormatter(formatter) + + logger = colorlog.getLogger("") + logger.addHandler(handler) + return logger + + +LOGGER = get_logger() + + +def first(from_list): + if from_list == []: + return None + + return from_list[0] + + +def extract_semvar(from_version_str): + version_numbers = first( + re.findall(r"^[vV]?(\d+)\.?(\d*)\.?(\d*)$", from_version_str) + ) + if version_numbers == None: + return None + + major_ver = int(version_numbers[0]) + minor_ver = int(f"{version_numbers[1]}") if version_numbers[1] != "" else 0 + patch_ver = int(f"{version_numbers[2]}") if version_numbers[2] != "" else 0 + + return f"{major_ver}.{minor_ver}.{patch_ver}" + + +def check_version_status(git_repo_from_meta): + + host = git_repo_from_meta["host"] + org = git_repo_from_meta["org"] + repo = git_repo_from_meta["repo"] + current_ver = git_repo_from_meta["semver"] + + sem_versions = [] + if host == "github": + r = subprocess.run( + " ".join( + [ + "gh api", + '-H "Accept: application/vnd.github+json"', + '-H "X-GitHub-Api-Version: 2022-11-28"', + f"/repos/{org}/{repo}/tags", + ] + ), + shell=True, + capture_output=True, + text=True, + ) + + if r.returncode != 0: + LOGGER.warning(f"Failed to get tags for {org}/{repo}: {r.stderr}") + return None + + response_data = json.loads(r.stdout) + + elif host == "gitlab": + encoded = quote_plus(f"{org}/{repo}") + r = requests.get( + f"https://gitlab.com/api/v4/projects/{encoded}/repository/tags" + ) + + if r.status_code != 200: + LOGGER.warning(f"Failed to get tags for {org}/{repo}: {r.json()}") + return None + response_data = r.json() + + else: + raise f"{host} is not supported!" + + available_versions = [x["name"] for x in response_data] + + if available_versions == []: + LOGGER.warning(f"No versions available for {host}/{org}/{repo}") + return None + + LOGGER.debug(f"Available versions for {host}/{org}/{repo}: {available_versions}") + + sem_versions = [extract_semvar(x["name"]) for x in response_data] + sem_versions = [v for v in sem_versions if v != None] + if sem_versions == []: + LOGGER.warning(f"{host}/{org}/{repo} versions do not conform to semver") + return None + + newer_vers = [v for v in sem_versions if semver.compare(v, current_ver) > 0] + + if newer_vers == []: + LOGGER.info( + f"{host}/{org}/{repo} does not have a new version compared to {current_ver}, first/last {available_versions[0]}/{available_versions[-1]}" + ) + return None + + latest_version = max(newer_vers, key=cmp_to_key(semver.compare)) + + LOGGER.info( + f"{host}/{org}/{repo} has a new version {latest_version} compared to {current_ver}" + ) + + return {**git_repo_from_meta, "latest_version": latest_version} + + +def get_new_versions_from_meta_paths(): + + module_meta_paths = ( + subprocess.run( + "find ./modules -name meta.yml", + shell=True, + capture_output=True, + text=True, + ) + .stdout.strip() + .split("\n") + ) + + git_repos_from_meta = [] + for meta_path in module_meta_paths: + meta_text = Path(meta_path).read_text() + main_path = f"{os.path.dirname(meta_path)}/main.nf" + main_text = Path(main_path).read_text() + repo = first( + re.findall( + r"\s+tool_dev_url:\s+\"?https://(github|gitlab).com/([\w-]+)/([\w-]+)\"?", + meta_text, + ) + ) + + if repo == None: + LOGGER.warning(f"No repo found in {meta_path}") + continue + + LOGGER.debug(f"{meta_path} repo: {repo}") + + if "mulled-v2" in main_text: + LOGGER.warning(f"Mulled container found in {main_path}") + continue + + version = first(re.findall(rf".*/([\w-]+):v?([\.0-9]+)", main_text)) + + if version == None: + LOGGER.warning(f"No version found in {main_path}") + continue + + LOGGER.debug(f"{main_path} version: {version}") + + semver_version = extract_semvar(version[1]) + + if semver_version == None: + LOGGER.warning( + f"Version {version} from {main_path} does not conform to semver" + ) + continue + + repo_data = { + "meta.yml": meta_path, + "main.nf": main_path, + "host": repo[0], + "org": repo[1], + "repo": repo[2], + "tool": version[0], + "semver": semver_version, + } + + LOGGER.debug(f"{meta_path} version data: {repo_data}") + + git_repos_from_meta.append(repo_data) + + with_latest = [check_version_status(r) for r in git_repos_from_meta] + filtered = [v for v in with_latest if v != None] + grouped = {} + + for v in filtered: + key = f"{v['host']}/{v['org']}/{v['repo']}" + if key not in grouped.keys(): + grouped[key] = {} + grouped[key]["latest_version"] = v["latest_version"] + grouped[key]["modules"] = [] + grouped[key]["modules"].append(v) + continue + + grouped[key]["modules"].append(v) + grouped[key]["latest_version"] = semver.max_ver( + grouped[key]["latest_version"], v["latest_version"] + ) + + return grouped + + +def get_repo_issue_titles(repo): + r = subprocess.run( + " ".join( + [ + "gh api", + '-H "Accept: application/vnd.github+json"', + '-H "X-GitHub-Api-Version: 2022-11-28"', + f"/repos/{repo}/issues", + ] + ), + shell=True, + capture_output=True, + text=True, + ) + + if r.returncode != 0: + LOGGER.error(f"Failed to get issues for {repo}: {r.stderr}") + exit(1) + + response_data = json.loads(r.stdout) + + update_issues = [ + x["title"] for x in response_data if x["title"].startswith("[UPDATE]") + ] + + return update_issues + + +def register_issue(host_repo_name, issue_title, tool_data): + + first_module = tool_data["modules"][0] + host, org, repo = (first_module["host"], first_module["org"], first_module["repo"]) + + module_paths = "\n".join( + [f"- {module['main.nf']}" for module in tool_data["modules"]] + ) + + issue_data = [ + "gh api", + "--method POST", + '-H "Accept: application/vnd.github+json"', + '-H "X-GitHub-Api-Version: 2022-11-28"', + f"/repos/{host_repo_name}/issues", + f'-f "title={issue_title}"', + f'-f "body=- https://{host}.com/{org}/{repo}\n{module_paths}"', + '-f "labels[]=enhancement"', + ] + + issue_post = subprocess.run( + " ".join(issue_data), + shell=True, + capture_output=True, + text=True, + ) + + if issue_post.returncode == 0: + LOGGER.info(f"Submitted issue: {issue_title}") + else: + LOGGER.warning(f"Failed to submitted issue: {issue_title}: {issue_post.stderr}") + + +if __name__ == "__main__": + + parser = argparse.ArgumentParser() + + parser.add_argument( + "-v", "--verbose", action="store_true", help="Enable verbose mode" + ) + parser.add_argument( + "-d", "--dry-run", action="store_true", help="Enable dry-run mode" + ) + args = parser.parse_args() + + if args.verbose: + LOGGER.setLevel(level=logging.DEBUG) + else: + LOGGER.setLevel(level=logging.INFO) + + git_repos_from_meta = get_new_versions_from_meta_paths() + update_issue_titles = get_repo_issue_titles(PIPELINE_REPO) + + for key, tool_data in git_repos_from_meta.items(): + + new_issue_title = f"[UPDATE] {key.upper()} -> {tool_data['latest_version']}" + + if new_issue_title in update_issue_titles: + LOGGER.info(f"{new_issue_title} has already been raised!") + continue + + if args.dry_run: + LOGGER.info(f"Dry run new issue: {new_issue_title}") + continue + + register_issue(PIPELINE_REPO, new_issue_title, tool_data) diff --git a/version_check.sh b/.github/version_checks.sh similarity index 100% rename from version_check.sh rename to .github/version_checks.sh diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index b942ccd..3c51dd9 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -16,7 +16,7 @@ repos: name: Version checks language: system entry: > - ./version_check.sh + .github/version_checks.sh always_run: true fail_fast: true pass_filenames: false diff --git a/CHANGELOG.md b/CHANGELOG.md index 84e47c9..baac6f0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## 0.4 - [01-Jul-2024] +## 0.4.0 - [24-Jul-2024] ### `Added` @@ -21,6 +21,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 12. Changed `orthofinder_annotations` from FASTA/GFF to protein FASTA [#43](https://github.com/PlantandFoodResearch/pangene/issues/43) 13. Added param `enforce_full_intron_support` to turn on/off strict model purging by TSEBRA [#21](https://github.com/PlantandFoodResearch/pangene/issues/21) 14. Added param `filter_liftoff_by_hints` to evaluate liftoff models with TSEBRA to make sure they have the same level of evidence as BRAKER [#28](ttps://github.com/PlantandFoodResearch/pangene/issues/28) +15. Added a script to automatically check module version updates ### `Fixed` @@ -39,6 +40,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 2. Renamed `fastq` param to `rna_evidence` 3. Renamed `braker_allow_isoforms` param to `allow_isoforms` 4. Moved liftoffID from gene level to mRNA/transcript level +5. Moved `version_check.sh` to `.github/version_checks.sh` ## 0.3.3 - [18-Jun-2024] diff --git a/nextflow.config b/nextflow.config index 9b776ab..286996c 100644 --- a/nextflow.config +++ b/nextflow.config @@ -61,11 +61,11 @@ params { manifest { name = 'pangene' author = """Usman Rashid, Jason Shiller""" - homePage = 'https://github.com/PlantandFoodResearch/pan-gene' + homePage = 'https://github.com/PlantandFoodResearch/pangene' description = """A NextFlow pipeline for pan-genome annotation""" mainScript = 'main.nf' nextflowVersion = '!>=23.04.4' - version = '0.4' + version = '0.4.0' doi = '' } From e07c595516bd4899eb16d8d5e0dd761fb17b776b Mon Sep 17 00:00:00 2001 From: Usman Rashid Date: Thu, 25 Jul 2024 10:23:59 +1200 Subject: [PATCH 29/87] Updated contributors --- {docs => .github}/contributors.sh | 0 README.md | 6 +++--- 2 files changed, 3 insertions(+), 3 deletions(-) rename {docs => .github}/contributors.sh (100%) diff --git a/docs/contributors.sh b/.github/contributors.sh similarity index 100% rename from docs/contributors.sh rename to .github/contributors.sh diff --git a/README.md b/README.md index 0ee65e0..cb8928b 100644 --- a/README.md +++ b/README.md @@ -22,9 +22,9 @@ sbatch ./pfr_pangene ## Credits -plantandfoodresearch/pangene workflows were originally scripted by Jason Shiller. Usman Rashid wrote the NextFLow pipeline. +plantandfoodresearch/pangene workflows were originally scripted by Jason Shiller ([@jasonshiller](https://github.com/jasonshiller)). Usman Rashid ([@gallvp](https://github.com/gallvp)) wrote the NextFLow pipeline. -We thank the following people for their extensive assistance in the development of this pipeline. +We thank the following people for their extensive assistance in the development of this pipeline: - Cecilia Deng [@CeciliaDeng](https://github.com/CeciliaDeng) - Charles David [@charlesdavid](https://github.com/charlesdavid) @@ -34,7 +34,7 @@ We thank the following people for their extensive assistance in the development - Susan Thomson [@cflsjt](https://github.com/cflsjt) - Ting-Hsuan Chen [@ting-hsuan-chen](https://github.com/ting-hsuan-chen) -The pipeline uses nf-core modules contributed by following authors. +The pipeline uses nf-core modules contributed by following authors: From 72a642302c83e48db07c195e994be6faab57054c Mon Sep 17 00:00:00 2001 From: Usman Rashid Date: Fri, 26 Jul 2024 10:17:08 +1200 Subject: [PATCH 30/87] Removed dependency on kherronism repo for BRAKER3 and REPEATMASKER --- CHANGELOG.md | 3 +- README.md | 2 +- modules.json | 32 ++-- modules/gallvp/braker3/main.nf | 93 +++++++++ .../{kherronism => gallvp}/braker3/meta.yml | 33 +++- modules/gallvp/braker3/tests/main.nf.test | 77 ++++++++ .../gallvp/braker3/tests/main.nf.test.snap | 181 ++++++++++++++++++ modules/gallvp/braker3/tests/nextflow.config | 5 + modules/gallvp/repeatmasker/environment.yml | 9 + modules/gallvp/repeatmasker/main.nf | 57 ++++++ .../repeatmasker/meta.yml | 35 ++-- .../gallvp/repeatmasker/tests/main.nf.test | 65 +++++++ .../repeatmasker/tests/main.nf.test.snap | 103 ++++++++++ .../gallvp/repeatmasker/tests/nextflow.config | 5 + modules/kherronism/braker3/main.nf | 90 --------- modules/kherronism/braker3/tests/name.only.sh | 4 - modules/kherronism/braker3/tests/test.fa | 16 -- modules/kherronism/repeatmasker/main.nf | 59 ------ subworkflows/local/fasta_braker3.nf | 2 +- subworkflows/local/prepare_assembly.nf | 2 +- 20 files changed, 663 insertions(+), 210 deletions(-) create mode 100644 modules/gallvp/braker3/main.nf rename modules/{kherronism => gallvp}/braker3/meta.yml (80%) create mode 100644 modules/gallvp/braker3/tests/main.nf.test create mode 100644 modules/gallvp/braker3/tests/main.nf.test.snap create mode 100644 modules/gallvp/braker3/tests/nextflow.config create mode 100644 modules/gallvp/repeatmasker/environment.yml create mode 100644 modules/gallvp/repeatmasker/main.nf rename modules/{kherronism => gallvp}/repeatmasker/meta.yml (63%) create mode 100644 modules/gallvp/repeatmasker/tests/main.nf.test create mode 100644 modules/gallvp/repeatmasker/tests/main.nf.test.snap create mode 100644 modules/gallvp/repeatmasker/tests/nextflow.config delete mode 100644 modules/kherronism/braker3/main.nf delete mode 100755 modules/kherronism/braker3/tests/name.only.sh delete mode 100644 modules/kherronism/braker3/tests/test.fa delete mode 100644 modules/kherronism/repeatmasker/main.nf diff --git a/CHANGELOG.md b/CHANGELOG.md index baac6f0..1a67252 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## 0.4.0 - [24-Jul-2024] +## 0.4.0 - [26-Jul-2024] ### `Added` @@ -41,6 +41,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 3. Renamed `braker_allow_isoforms` param to `allow_isoforms` 4. Moved liftoffID from gene level to mRNA/transcript level 5. Moved `version_check.sh` to `.github/version_checks.sh` +6. Removed dependency on for `BRAKER3` and `REPEATMASKER` modules which are now installed from ## 0.3.3 - [18-Jun-2024] diff --git a/README.md b/README.md index cb8928b..24edfeb 100644 --- a/README.md +++ b/README.md @@ -43,6 +43,7 @@ The pipeline uses nf-core modules contributed by following authors: + @@ -51,7 +52,6 @@ The pipeline uses nf-core modules contributed by following authors: - diff --git a/modules.json b/modules.json index 64c6f5d..bc4fa40 100644 --- a/modules.json +++ b/modules.json @@ -2,6 +2,22 @@ "name": "PlantandFoodResearch/pangene", "homePage": "https://github.com/PlantandFoodResearch/pangene", "repos": { + "https://github.com/GallVp/nxf-components.git": { + "modules": { + "gallvp": { + "braker3": { + "branch": "main", + "git_sha": "be636e1e7d50b12ee1f50ed0bb9b21b0fade7cfd", + "installed_by": ["modules"] + }, + "repeatmasker": { + "branch": "main", + "git_sha": "76c4ba86319c935f4003e7d18e5dfdd967d9af95", + "installed_by": ["modules"] + } + } + } + }, "https://github.com/PlantandFoodResearch/nxf-modules.git": { "modules": { "pfr": { @@ -82,22 +98,6 @@ } } }, - "https://github.com/kherronism/nf-modules.git": { - "modules": { - "kherronism": { - "braker3": { - "branch": "dev", - "git_sha": "b01fec253f3b73b24e3f166a96d4beb49e58b0a6", - "installed_by": ["modules"] - }, - "repeatmasker": { - "branch": "dev", - "git_sha": "6778d5bb4c9f3d597753c699226fcde8d0811bfb", - "installed_by": ["modules"] - } - } - } - }, "https://github.com/nf-core/modules.git": { "modules": { "nf-core": { diff --git a/modules/gallvp/braker3/main.nf b/modules/gallvp/braker3/main.nf new file mode 100644 index 0000000..c856216 --- /dev/null +++ b/modules/gallvp/braker3/main.nf @@ -0,0 +1,93 @@ +process BRAKER3 { + tag "${meta.id}" + label 'process_high' + + container "docker.io/teambraker/braker3:v3.0.7.5" + + input: + tuple val(meta), path(fasta) + path bam + path rnaseq_sets_dirs + path rnaseq_sets_ids + path proteins + path hintsfile + + output: + tuple val(meta), path("$prefix/braker.gtf") , emit: gtf + tuple val(meta), path("$prefix/braker.codingseq") , emit: cds + tuple val(meta), path("$prefix/braker.aa") , emit: aa + tuple val(meta), path("$prefix/braker.log") , emit: log + tuple val(meta), path("$prefix/hintsfile.gff") , emit: hintsfile , optional: true + tuple val(meta), path("$prefix/braker.gff3") , emit: gff3 , optional: true + tuple val(meta), path("$prefix/what-to-cite.txt") , emit: citations + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + prefix = task.ext.prefix ?: "${meta.id}" + def rna_ids = rnaseq_sets_ids ? "--rnaseq_sets_ids=$rnaseq_sets_ids" : '' + def rna_dirs = rnaseq_sets_dirs ? "--rnaseq_sets_dirs=$rnaseq_sets_dirs" : '' + def bam = bam ? "--bam=$bam" : '' + def proteins = proteins ? "--prot_seq=$proteins" : '' + def hints = hintsfile ? "--hints=$hintsfile" : '' + def new_species = args.contains('--species')? '' : '--species new_species' + """ + cp -r \$AUGUSTUS_CONFIG_PATH \\ + augustus_config + + perl -p -e 's/^(>\\S+).*\$/\$1/' \\ + $fasta \\ + > ${prefix}.name.only.genome.masked.fasta + + braker.pl \\ + --genome ${prefix}.name.only.genome.masked.fasta \\ + $new_species \\ + --workingdir $prefix \\ + --AUGUSTUS_CONFIG_PATH "\$(pwd)/augustus_config" \\ + --threads $task.cpus \\ + $rna_ids \\ + $rna_dirs \\ + $bam \\ + $proteins \\ + $hints \\ + $args + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + braker3: \$(braker.pl --version 2>/dev/null | sed 's/braker.pl version //') + augustus: \$(augustus --version |& sed -n 's/AUGUSTUS (\\(.*\\)) is a gene .*/\\1/p') + genemark-etp: \$(echo "\$(gmetp.pl || echo '')" | sed -n 's/ETP version \\(.*\\)/\\1/p') + prothint: \$(prothint.py --version | sed 's/prothint.py //1') + END_VERSIONS + """ + + stub: + def args = task.ext.args ?: '' + prefix = task.ext.prefix ?: "${meta.id}" + def rna_ids = rnaseq_sets_ids ? "--rnaseq_sets_ids=$rnaseq_sets_ids" : '' + def hints = hintsfile ? "--hints=$hintsfile" : '' + def touch_hints = (rna_ids || bam || proteins || hints) ? "touch $prefix/hintsfile.gff" : '' + def touch_gff = args.contains('--gff3') ? "touch $prefix/braker.gff3" : '' + """ + mkdir "$prefix" + + touch "$prefix/braker.gtf" + touch "$prefix/braker.codingseq" + touch "$prefix/braker.aa" + $touch_hints + touch "$prefix/braker.log" + touch "$prefix/what-to-cite.txt" + $touch_gff + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + braker3: \$(braker.pl --version 2>/dev/null | sed 's/braker.pl version //') + augustus: \$(augustus --version |& sed -n 's/AUGUSTUS (\\(.*\\)) is a gene .*/\\1/p') + genemark-etp: \$(echo "\$(gmetp.pl || echo '')" | sed -n 's/ETP version \\(.*\\)/\\1/p') + prothint: \$(prothint.py --version | sed 's/prothint.py //1') + END_VERSIONS + """ +} diff --git a/modules/kherronism/braker3/meta.yml b/modules/gallvp/braker3/meta.yml similarity index 80% rename from modules/kherronism/braker3/meta.yml rename to modules/gallvp/braker3/meta.yml index ed4da40..bfb8211 100644 --- a/modules/kherronism/braker3/meta.yml +++ b/modules/gallvp/braker3/meta.yml @@ -4,15 +4,17 @@ description: | keywords: - genome - annotation - + - braker + - gff + - gtf tools: - braker3: description: "BRAKER3 is a pipeline for fully automated prediction of protein coding gene structures using protein and RNA-seq and protein homology information" - homepage: "https://github.com/Gaius-Augustus/BRAKER" - documentation: "https://github.com/Gaius-Augustus/BRAKER" - tool_dev_url: "https://github.com/Gaius-Augustus/BRAKER" + homepage: https://github.com/Gaius-Augustus/BRAKER + documentation: https://github.com/Gaius-Augustus/BRAKER + tool_dev_url: https://github.com/Gaius-Augustus/BRAKER doi: "10.13140/RG.2.2.20047.36004" licence: ["Artistic-1.0"] @@ -21,21 +23,21 @@ input: type: map description: | Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] + e.g. [ id:'test' ] - fasta: type: file description: Genome assembly fasta pattern: "*.{fasta,fa,fas,faa,fna}" - - rnaseq_sets_ids: + - bam: type: file - description: IDs of RNA-seq data sets to be passed to --rnaseq_sets_ids + description: BAM file of RNA-seq data to be passed to --bam + pattern: "*.bam" - rnaseq_sets_dirs: type: file description: Directories of RNA-seq data sets to be passed to --rnaseq_sets_dirs - - bam: + - rnaseq_sets_ids: type: file - description: BAM file of RNA-seq data to be passed to --bam - pattern: "*.bam" + description: IDs of RNA-seq data sets to be passed to --rnaseq_sets_ids - proteins: type: file description: Protein evidence to be passed to --proteins @@ -57,6 +59,10 @@ output: type: file description: Protein sequence file as output by BRAKER3 pattern: "*.{aa}" + - log: + type: file + description: BRAKER3 log file + pattern: "*.log" - hintsfile: type: file description: Hints file as output by BRAKER3 @@ -65,6 +71,10 @@ output: type: file description: GFF3 file as output by BRAKER3 pattern: "*.{gff3}" + - citations: + type: file + description: BRAKER3 citations + pattern: "what-to-cite.txt" - versions: type: file description: File containing software versions @@ -72,3 +82,6 @@ output: authors: - "@kherronism" + - "@GallVp" +maintainers: + - "@GallVp" diff --git a/modules/gallvp/braker3/tests/main.nf.test b/modules/gallvp/braker3/tests/main.nf.test new file mode 100644 index 0000000..6302ea2 --- /dev/null +++ b/modules/gallvp/braker3/tests/main.nf.test @@ -0,0 +1,77 @@ +nextflow_process { + + name "Test Process BRAKER3" + script "../main.nf" + config "./nextflow.config" + process "BRAKER3" + + tag "modules" + tag "modules_gallvp" + tag "braker3" + + test("braker3 - test - 4") { + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file('https://raw.githubusercontent.com/Gaius-Augustus/BRAKER/f58479fe5bb13a9e51c3ca09cb9e137cab3b8471/example/genome.fa', checkIfExists: true) + ] + input[1] = file('http://topaz.gatech.edu/GeneMark/Braker/RNAseq.bam', checkIfExists: true) + input[2] = [] + input[3] = [] + input[4] = [] + input[5] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.aa, + process.out.cds, + process.out.citations, + process.out.gff3, + process.out.gtf, + process.out.hintsfile, + process.out.versions, + ).match() }, + { assert file(process.out.log[0][1]).text.contains('BRAKER RUN FINISHED') } + ) + } + + } + + test("sarscov2 - fasta - stub") { + + options '-stub' + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true), + ] + input[1] = [] + input[2] = [] + input[3] = [] + input[4] = [] + input[5] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + +} diff --git a/modules/gallvp/braker3/tests/main.nf.test.snap b/modules/gallvp/braker3/tests/main.nf.test.snap new file mode 100644 index 0000000..e9dc283 --- /dev/null +++ b/modules/gallvp/braker3/tests/main.nf.test.snap @@ -0,0 +1,181 @@ +{ + "sarscov2 - fasta - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "braker.gtf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "braker.codingseq:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "braker.aa:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + [ + { + "id": "test", + "single_end": false + }, + "braker.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "4": [ + + ], + "5": [ + + ], + "6": [ + [ + { + "id": "test", + "single_end": false + }, + "what-to-cite.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "7": [ + "versions.yml:md5,465227c41b8b4aae2dea6ec249676935" + ], + "aa": [ + [ + { + "id": "test", + "single_end": false + }, + "braker.aa:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "cds": [ + [ + { + "id": "test", + "single_end": false + }, + "braker.codingseq:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "citations": [ + [ + { + "id": "test", + "single_end": false + }, + "what-to-cite.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "gff3": [ + + ], + "gtf": [ + [ + { + "id": "test", + "single_end": false + }, + "braker.gtf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "hintsfile": [ + + ], + "log": [ + [ + { + "id": "test", + "single_end": false + }, + "braker.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,465227c41b8b4aae2dea6ec249676935" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-25T16:01:15.128244" + }, + "braker3 - test - 4": { + "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + "braker.aa:md5,56ec6600d2843fe4a7fc9913e6b1448a" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "braker.codingseq:md5,47f7f312e4f5b3854b960a373717a0f7" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "what-to-cite.txt:md5,2ab67eaf09994751a09f5de8de7160a7" + ] + ], + [ + + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "braker.gtf:md5,22a968505188b7aa57c37fa85f570295" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "hintsfile.gff:md5,d42b89e12af7ba66ae25fd977146640a" + ] + ], + [ + "versions.yml:md5,465227c41b8b4aae2dea6ec249676935" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-25T16:03:42.343716" + } +} \ No newline at end of file diff --git a/modules/gallvp/braker3/tests/nextflow.config b/modules/gallvp/braker3/tests/nextflow.config new file mode 100644 index 0000000..bf8441b --- /dev/null +++ b/modules/gallvp/braker3/tests/nextflow.config @@ -0,0 +1,5 @@ +process { + withName: BRAKER3 { + ext.args = '--species=arabidopsis --skipAllTraining' // Not required, but significantly cuts the runtime + } +} diff --git a/modules/gallvp/repeatmasker/environment.yml b/modules/gallvp/repeatmasker/environment.yml new file mode 100644 index 0000000..44ae45b --- /dev/null +++ b/modules/gallvp/repeatmasker/environment.yml @@ -0,0 +1,9 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json +name: "repeatmasker" +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - "bioconda::repeatmasker=4.1.5" diff --git a/modules/gallvp/repeatmasker/main.nf b/modules/gallvp/repeatmasker/main.nf new file mode 100644 index 0000000..3eff897 --- /dev/null +++ b/modules/gallvp/repeatmasker/main.nf @@ -0,0 +1,57 @@ +process REPEATMASKER { + tag "$meta.id" + label 'process_high' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/repeatmasker:4.1.5--pl5321hdfd78af_0': + 'biocontainers/repeatmasker:4.1.5--pl5321hdfd78af_0' }" + + input: + tuple val(meta), path(fasta) + path(lib) + + output: + tuple val(meta), path("${prefix}.masked") , emit: masked + tuple val(meta), path("${prefix}.out") , emit: out + tuple val(meta), path("${prefix}.tbl") , emit: tbl + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + prefix = task.ext.prefix ?: "${meta.id}" + def lib_arg = lib ? "-lib $lib" : '' + """ + RepeatMasker \\ + $lib_arg \\ + -pa ${task.cpus} \\ + -dir ${prefix} \\ + ${args} \\ + ${fasta} + + mv $prefix/${fasta}.masked ${prefix}.masked + mv $prefix/${fasta}.out ${prefix}.out + mv $prefix/${fasta}.tbl ${prefix}.tbl + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + repeatmasker: \$(RepeatMasker -v | sed 's/RepeatMasker version //1') + END_VERSIONS + """ + + stub: + prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.masked + touch ${prefix}.out + touch ${prefix}.tbl + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + repeatmasker: \$(RepeatMasker -v | sed 's/RepeatMasker version //1') + END_VERSIONS + """ +} diff --git a/modules/kherronism/repeatmasker/meta.yml b/modules/gallvp/repeatmasker/meta.yml similarity index 63% rename from modules/kherronism/repeatmasker/meta.yml rename to modules/gallvp/repeatmasker/meta.yml index 0cab608..df47791 100644 --- a/modules/kherronism/repeatmasker/meta.yml +++ b/modules/gallvp/repeatmasker/meta.yml @@ -5,7 +5,8 @@ description: | keywords: - genome - annotation - - repeats + - repeat + - mask tools: - repeatmasker: @@ -15,7 +16,6 @@ tools: homepage: "https://www.repeatmasker.org/" documentation: "https://www.repeatmasker.org/webrepeatmaskerhelp.html" tool_dev_url: "https://github.com/rmhubley/RepeatMasker" - doi: "10.1073/pnas.1921046117" licence: ["Open Software License v. 2.1"] input: @@ -23,21 +23,29 @@ input: type: map description: | Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] + e.g. [ id:'test' ] - fasta: type: file description: Genome assembly - pattern: "*.{fasta,fa,fas,faa,fna}" + pattern: "*.{fasta,fa,fas,fsa,faa,fna}" + - lib: + type: file + description: Custom library (e.g. from another species) + pattern: "*.{fasta,fa,fas,fsa,faa,fna}" output: - - rm_fasta: + - masked: + type: file + description: Masked fasta + pattern: "*.masked" + - out: + type: file + description: Out file + pattern: "*.out" + - tbl: type: file - description: Gene transfer format file as output by BRAKER3 - pattern: "*.{-families.fa}" - - rm_stk: - type: - description: "" - pattern: "*.{stk}" + description: tbl file + pattern: "*.tbl" - versions: type: file description: File containing software versions @@ -45,3 +53,8 @@ output: authors: - "@kherronism" + - "@gallvp" + +maintainers: + - "@kherronism" + - "@gallvp" diff --git a/modules/gallvp/repeatmasker/tests/main.nf.test b/modules/gallvp/repeatmasker/tests/main.nf.test new file mode 100644 index 0000000..5aed861 --- /dev/null +++ b/modules/gallvp/repeatmasker/tests/main.nf.test @@ -0,0 +1,65 @@ +nextflow_process { + + name "Test Process REPEATMASKER" + script "../main.nf" + process "REPEATMASKER" + config "./nextflow.config" + + tag "modules" + tag "modules_gallvp" + tag "repeatmasker" + + test("sarscov2 - genome - fasta") { + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ] + input[1] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.masked, + process.out.out, + process.out.versions + ).match() }, + { assert file(process.out.tbl[0][1]).text.contains('run with rmblastn') } + ) + } + + } + + test("sarscov2 - genome - fasta - stub") { + + options '-stub' + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ] + input[1] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + +} diff --git a/modules/gallvp/repeatmasker/tests/main.nf.test.snap b/modules/gallvp/repeatmasker/tests/main.nf.test.snap new file mode 100644 index 0000000..ca7dda1 --- /dev/null +++ b/modules/gallvp/repeatmasker/tests/main.nf.test.snap @@ -0,0 +1,103 @@ +{ + "sarscov2 - genome - fasta": { + "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + "test.masked:md5,c0eb8dd958ce3b4b1fdc7fcb6b0d5161" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.out:md5,8610cb2b8d87356bf2ab0a895c065752" + ] + ], + [ + "versions.yml:md5,f22d471f5aed51b369cc4295ad1f7bc0" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-25T12:17:18.863465" + }, + "sarscov2 - genome - fasta - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.masked:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.out:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test.tbl:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + "versions.yml:md5,f22d471f5aed51b369cc4295ad1f7bc0" + ], + "masked": [ + [ + { + "id": "test", + "single_end": false + }, + "test.masked:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "out": [ + [ + { + "id": "test", + "single_end": false + }, + "test.out:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "tbl": [ + [ + { + "id": "test", + "single_end": false + }, + "test.tbl:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,f22d471f5aed51b369cc4295ad1f7bc0" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-25T11:01:52.492661" + } +} \ No newline at end of file diff --git a/modules/gallvp/repeatmasker/tests/nextflow.config b/modules/gallvp/repeatmasker/tests/nextflow.config new file mode 100644 index 0000000..4be4879 --- /dev/null +++ b/modules/gallvp/repeatmasker/tests/nextflow.config @@ -0,0 +1,5 @@ +process { + withName: REPEATMASKER { + ext.args = '-no_is' // Not required but significantly cuts the runtime + } +} diff --git a/modules/kherronism/braker3/main.nf b/modules/kherronism/braker3/main.nf deleted file mode 100644 index 9a15143..0000000 --- a/modules/kherronism/braker3/main.nf +++ /dev/null @@ -1,90 +0,0 @@ -process BRAKER3 { - tag "${meta.id}" - label 'process_high' - - container "gallvp/teambraker_braker3:v1.0.6" - - input: - tuple val(meta), path(fasta) - path bam - path rnaseq_sets_dirs - path rnaseq_sets_ids - path proteins - path hintsfile - - output: - tuple val(meta), path("${prefix}/braker.gtf") , emit: gtf - tuple val(meta), path("${prefix}/braker.codingseq"), emit: cds - tuple val(meta), path("${prefix}/braker.aa") , emit: aa - tuple val(meta), path("${prefix}/hintsfile.gff") , emit: hintsfile, optional: true - tuple val(meta), path("${prefix}/braker.log") , emit: log - tuple val(meta), path("${prefix}/what-to-cite.txt"), emit: citations - tuple val(meta), path("${prefix}/braker.gff3") , emit: gff3 , optional: true - path "versions.yml" , emit: versions - - when: - task.ext.when == null || task.ext.when - - script: - def args = task.ext.args ?: '' - prefix = task.ext.prefix ?: "${meta.id}" - - def test_mode = args.contains('--testMode') // Custom flag for test data - def args_fmt = test_mode ? args.replace('--testMode', '') : args - - def rna_ids = rnaseq_sets_ids ? "--rnaseq_sets_ids=${rnaseq_sets_ids}" : '' - def rna_dirs = rnaseq_sets_dirs ? "--rnaseq_sets_dirs=${rnaseq_sets_dirs}" : '' - def bam = bam && !test_mode ? "--bam=${bam}" : '' - def proteins = proteins && !test_mode ? "--prot_seq=${proteins}" : '' - def hints = hintsfile ? "--hints=${hintsfile}" : '' - - def new_species = args.contains('--species') ? '' : "--species new_species" - """ - cp -r /usr/share/augustus/config augustus_config - - perl -p -e 's/^(>\\S+).*\$/\$1/' \\ - ${fasta} \\ - > ${prefix}.name.only.genome.masked.fasta - - braker.pl \\ - --genome ${prefix}.name.only.genome.masked.fasta \\ - ${new_species} \\ - --workingdir ${prefix} \\ - --AUGUSTUS_CONFIG_PATH "\$(pwd)/augustus_config" \\ - --threads ${task.cpus} \\ - ${rna_ids} \\ - ${rna_dirs} \\ - ${bam} \\ - ${proteins} \\ - ${hints} \\ - ${args_fmt} - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - braker3: \$(braker.pl --version 2>/dev/null | sed 's/braker.pl version//') - END_VERSIONS - """ - - stub: - def args = task.ext.args ?: '' - prefix = task.ext.prefix ?: "${meta.id}" - def rna_ids = rnaseq_sets_ids ? "--rnaseq_sets_ids=${rnaseq_sets_ids}" : '' - def touch_hints = (rna_ids || bam || proteins || hints) ? "touch ${prefix}/hintsfile.gff" : '' - def touch_gff = args.contains('--gff3') ? "touch ${prefix}/braker.gff3" : '' - """ - mkdir "$prefix" - - touch "${prefix}/braker.gtf" - touch "${prefix}/braker.codingseq" - touch "${prefix}/braker.aa" - $touch_hints - touch "${prefix}/braker.log" - touch "${prefix}/what-to-cite.txt" - $touch_gff - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - braker3: \$(braker.pl --version 2>/dev/null | sed 's/braker.pl version//') - END_VERSIONS - """ -} diff --git a/modules/kherronism/braker3/tests/name.only.sh b/modules/kherronism/braker3/tests/name.only.sh deleted file mode 100755 index 172e651..0000000 --- a/modules/kherronism/braker3/tests/name.only.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/usr/bin/env bash - -perl -p -e 's/^(>\S+).*$/$1/' \ - modules/kherronism/braker3/tests/test.fa diff --git a/modules/kherronism/braker3/tests/test.fa b/modules/kherronism/braker3/tests/test.fa deleted file mode 100644 index 8b195b8..0000000 --- a/modules/kherronism/braker3/tests/test.fa +++ /dev/null @@ -1,16 +0,0 @@ ->chr1 This is with four spaces and a space and a tab -AAACCCTAAACCCTAAACCCTAAACCCTAAACCCTAAACCCTAAACCCTAAACCCTAAAC -CCTAAACCCTAAACCCTAAACCCTAAACCCTAAACCCTAAACCCTAAACCCTAAACCCTA ->chr2 This is with four spaces -TAAACCCTAAACCCTAAACCCTAAACCCTAAACCCTAAACCCTAAACCCTAAACCCTAAA -CCCTAAACCCTAAACCCTAAACCCTAAACCCTAAACCCTAAACCCTAAACCCTAAACCCT -AAACCCTAAACCCTAAACCCTAAACCCTAAACCCTAAACCCTAAACCCTAAACCCTAAAC ->chr3 This is with a single space -TAAACCCTAAACCCTAAACCCTAAACCCTAAACCCTAAACCCTAAACCCTAAACCCTAAA -CCCTAAACCCTAAACCCTAAACCCTAAACCCTAAACCCTAAACCCTAAACCCTAAACCCT ->chrX -AACCCTAAACCCTAAACCCTAAACCCTAAACCCTAAACCCTAAACCCTAAACCCTAAACC -CTAAACCCTAAACCCTAAACCCTAAACCCTAAACCCTAAACCCTAAACCCTAAACCCTAA ->chrY This desc is with tab and another tab | and a vertical slash -AACCCTAAACCCTAAACCCTAAACCCTAAACCCTAAACCCTAAACCCTAAACCCTAAACC -CTAAACCCTAAACCCTAAACCCTAAACCCTAAACCCTAAACCCTAAACCCTAAACCCTAA diff --git a/modules/kherronism/repeatmasker/main.nf b/modules/kherronism/repeatmasker/main.nf deleted file mode 100644 index fdab29e..0000000 --- a/modules/kherronism/repeatmasker/main.nf +++ /dev/null @@ -1,59 +0,0 @@ -process REPEATMASKER { - tag "$meta.id" - label 'process_high' - - conda "bioconda::repeatmasker=4.1.5" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/repeatmasker:4.1.5--pl5321hdfd78af_0': - 'biocontainers/repeatmasker:4.1.5--pl5321hdfd78af_0' }" - - input: - tuple val(meta), path(fasta) - path(lib) - - output: - tuple val(meta), path("${meta.id}/*.f*a.masked") , emit: fasta_masked - tuple val(meta), path("${meta.id}/*.f*a.out") , emit: fasta_out - tuple val(meta), path("${meta.id}/*.f*a.tbl") , emit: fasta_tbl - tuple val(meta), path("${meta.id}/*.f*a.cat.gz") , emit: fasta_cat_gz , optional: true - tuple val(meta), path("${meta.id}/*.f*a.out.gff"), emit: fasta_out_gff, optional: true - tuple val(meta), path("${meta.id}/*.f*a.align") , emit: fasta_align , optional: true - path "versions.yml" , emit: versions - - when: - task.ext.when == null || task.ext.when - - script: - def args = task.ext.args ?: '' - def prefix = task.ext.prefix ?: "${meta.id}" - def VERSION = '4.1.5' // WARN: Version information not provided by tool on CLI. Please update this string when bumping container versions. - """ - RepeatMasker \\ - -lib ${lib} \\ - -pa ${task.cpus} \\ - -dir ${prefix} \\ - ${args} \\ - ${fasta} - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - repeatmasker: ${VERSION} - END_VERSIONS - """ - - stub: - def prefix = task.ext.prefix ?: "${meta.id}" - def VERSION = '4.1.5' // WARN: Version information not provided by tool on CLI. Please update this string when bumping container versions. - """ - mkdir "$meta.id" - - touch "${meta.id}/${meta.id}.fasta.masked" - touch "${meta.id}/${meta.id}.fasta.out" - touch "${meta.id}/${meta.id}.fasta.tbl" - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - repeatmasker: ${VERSION} - END_VERSIONS - """ -} diff --git a/subworkflows/local/fasta_braker3.nf b/subworkflows/local/fasta_braker3.nf index b76bdf7..dcb0e5d 100644 --- a/subworkflows/local/fasta_braker3.nf +++ b/subworkflows/local/fasta_braker3.nf @@ -1,4 +1,4 @@ -include { BRAKER3 } from '../../modules/kherronism/braker3' +include { BRAKER3 } from '../../modules/gallvp/braker3' include { FILE_GUNZIP as BRAKER_GFF3_GUNZIP } from '../../subworkflows/local/file_gunzip' include { FILE_GUNZIP as BRAKER_HINTS_GUNZIP } from '../../subworkflows/local/file_gunzip' diff --git a/subworkflows/local/prepare_assembly.nf b/subworkflows/local/prepare_assembly.nf index fff044a..3b5d08c 100644 --- a/subworkflows/local/prepare_assembly.nf +++ b/subworkflows/local/prepare_assembly.nf @@ -3,7 +3,7 @@ include { GUNZIP as GUNZIP_TE_LIBRARY } from '../../modules/nf-core/gu include { FASTAVALIDATOR } from '../../modules/nf-core/fastavalidator' include { REPEATMODELER_BUILDDATABASE } from '../../modules/nf-core/repeatmodeler/builddatabase' include { REPEATMODELER_REPEATMODELER } from '../../modules/nf-core/repeatmodeler/repeatmodeler' -include { REPEATMASKER } from '../../modules/kherronism/repeatmasker' +include { REPEATMASKER } from '../../modules/gallvp/repeatmasker' include { STAR_GENOMEGENERATE } from '../../modules/nf-core/star/genomegenerate' include { FASTA_EDTA_LAI } from '../../subworkflows/pfr/fasta_edta_lai' From 9cb7c6261f9761a46a6bf6979fcaf22d257b9677 Mon Sep 17 00:00:00 2001 From: Usman Rashid Date: Fri, 26 Jul 2024 13:46:03 +1200 Subject: [PATCH 31/87] Updated modules and sub workflows --- CHANGELOG.md | 25 +- modules.json | 20 +- modules/nf-core/cat/cat/main.nf | 1 - modules/nf-core/cat/cat/tests/main.nf.test | 27 +- .../nf-core/cat/cat/tests/main.nf.test.snap | 74 +- modules/nf-core/cat/fastq/main.nf | 10 +- modules/nf-core/cat/fastq/tests/main.nf.test | 136 +- .../nf-core/cat/fastq/tests/main.nf.test.snap | 207 ++ modules/nf-core/fastp/main.nf | 6 +- modules/nf-core/fastp/tests/main.nf.test | 371 +-- modules/nf-core/fastp/tests/main.nf.test.snap | 781 ++++-- modules/nf-core/fastqc/main.nf | 1 + modules/nf-core/fastqc/tests/main.nf.test | 225 +- .../nf-core/fastqc/tests/main.nf.test.snap | 370 ++- modules/nf-core/gunzip/environment.yml | 4 +- modules/nf-core/gunzip/gunzip.diff | 259 -- modules/nf-core/gunzip/main.nf | 4 +- modules/nf-core/liftoff/environment.yml | 8 +- modules/nf-core/liftoff/tests/tags.yml | 2 - modules/nf-core/star/align/main.nf | 4 +- modules/nf-core/star/align/tests/main.nf.test | 523 +++- .../star/align/tests/main.nf.test.snap | 2288 +++++++++++++---- .../star/genomegenerate/tests/main.nf.test | 39 +- .../genomegenerate/tests/main.nf.test.snap | 182 +- modules/nf-core/umitools/extract/main.nf | 18 + .../umitools/extract/tests/main.nf.test | 79 +- .../umitools/extract/tests/main.nf.test.snap | 159 +- .../tests/main.nf.test | 568 +++- .../tests/main.nf.test.snap | 2193 ++++++++++++++-- 29 files changed, 6689 insertions(+), 1895 deletions(-) delete mode 100644 modules/nf-core/gunzip/gunzip.diff delete mode 100644 modules/nf-core/liftoff/tests/tags.yml diff --git a/CHANGELOG.md b/CHANGELOG.md index 1a67252..cec5140 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,19 +9,18 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 1. Added `orthofinder_annotations` param 2. Added `FASTA_GFF_ORTHOFINDER` sub-workflow -3. Updated modules: `AGAT_CONVERTSPGFF2GTF`, `CAT_FASTQ`, `CUSTOM_DUMPSOFTWAREVERSIONS`, `EGGNOGMAPPER`, `FASTP`, `GFFREAD`, `SAMTOOLS_CAT`, `CUSTOM_RESTOREGFFIDS`, `CUSTOM_SHORTENFASTAIDS` and `EDTA_EDTA` -4. Updated sub-workflows: `FASTQ_FASTQC_UMITOOLS_FASTP` and `FASTA_EDTA_LAI` -5. Added evaluation by BUSCO [#41](https://github.com/PlantandFoodResearch/pangene/issues/41) -6. Included common tax ids for eggnog mapper [#27](https://github.com/PlantandFoodResearch/pangene/issues/27) -7. Implemented hierarchical naming scheme: geneI.tJ, geneI.tJ.exonK, geneI.tJ.cdsK [#19](https://github.com/PlantandFoodResearch/pangene/issues/19), [#34](https://github.com/PlantandFoodResearch/pangene/issues/34) -8. Now sorting list of bam and list of fastq before cat to avoid resume cache misses -9. Allowed BAM files for RNA evidence [#3](https://github.com/PlantandFoodResearch/pangene/issues/3) -10. Added `GXF_FASTA_AGAT_SPADDINTRONS_SPEXTRACTSEQUENCES` sub-workflow for splice type statistics [#11](https://github.com/PlantandFoodResearch/pangene/issues/11) -11. Added a local patch for `GUNZIP` -12. Changed `orthofinder_annotations` from FASTA/GFF to protein FASTA [#43](https://github.com/PlantandFoodResearch/pangene/issues/43) -13. Added param `enforce_full_intron_support` to turn on/off strict model purging by TSEBRA [#21](https://github.com/PlantandFoodResearch/pangene/issues/21) -14. Added param `filter_liftoff_by_hints` to evaluate liftoff models with TSEBRA to make sure they have the same level of evidence as BRAKER [#28](ttps://github.com/PlantandFoodResearch/pangene/issues/28) -15. Added a script to automatically check module version updates +3. Added evaluation by BUSCO [#41](https://github.com/PlantandFoodResearch/pangene/issues/41) +4. Included common tax ids for eggnog mapper [#27](https://github.com/PlantandFoodResearch/pangene/issues/27) +5. Implemented hierarchical naming scheme: geneI.tJ, geneI.tJ.exonK, geneI.tJ.cdsK [#19](https://github.com/PlantandFoodResearch/pangene/issues/19), [#34](https://github.com/PlantandFoodResearch/pangene/issues/34) +6. Now sorting list of bam and list of fastq before cat to avoid resume cache misses +7. Allowed BAM files for RNA evidence [#3](https://github.com/PlantandFoodResearch/pangene/issues/3) +8. Added `GXF_FASTA_AGAT_SPADDINTRONS_SPEXTRACTSEQUENCES` sub-workflow for splice type statistics [#11](https://github.com/PlantandFoodResearch/pangene/issues/11) +9. Changed `orthofinder_annotations` from FASTA/GFF to protein FASTA [#43](https://github.com/PlantandFoodResearch/pangene/issues/43) +10. Added param `enforce_full_intron_support` to turn on/off strict model purging by TSEBRA [#21](https://github.com/PlantandFoodResearch/pangene/issues/21) +11. Added param `filter_liftoff_by_hints` to evaluate liftoff models with TSEBRA to make sure they have the same level of evidence as BRAKER [#28](ttps://github.com/PlantandFoodResearch/pangene/issues/28) +12. Added a script to automatically check module version updates +13. Updated modules: `AGAT/CONVERTSPGFF2GTF`, `CAT_FASTQ`, `CUSTOM/DUMPSOFTWAREVERSIONS`, `EGGNOGMAPPER`, `FASTP`, `GFFREAD`, `SAMTOOLS/CAT`, `CUSTOM/RESTOREGFFIDS`, `CUSTOM/SHORTENFASTAIDS`, `EDTA/EDTA`, `CAT/CAT`, `FASTQC`, `GUNZIP`, `LIFTOFF`, `STAR/ALIGN`, `STAR/GENOMEGENERATE`, `UMITOOLS/EXTRACT`, +14. Updated sub-workflows: `FASTQ_FASTQC_UMITOOLS_FASTP` and `FASTA_EDTA_LAI` ### `Fixed` diff --git a/modules.json b/modules.json index bc4fa40..948c8ec 100644 --- a/modules.json +++ b/modules.json @@ -113,12 +113,12 @@ }, "cat/cat": { "branch": "master", - "git_sha": "9437e6053dccf4aafa022bfd6e7e9de67e625af8", + "git_sha": "5bb8ca085e17549e185e1823495ab8d20727a805", "installed_by": ["modules"] }, "cat/fastq": { "branch": "master", - "git_sha": "4fc983ad0b30e6e32696fa7d980c76c7bfe1c03e", + "git_sha": "1ceaa8ba4d0fd886dbca0e545815d905b7407de7", "installed_by": ["modules"] }, "custom/dumpsoftwareversions": { @@ -138,12 +138,12 @@ }, "fastp": { "branch": "master", - "git_sha": "b90b5cd93149a1b3be263d916c7234fe0708a71c", + "git_sha": "1ceaa8ba4d0fd886dbca0e545815d905b7407de7", "installed_by": ["fastq_fastqc_umitools_fastp"] }, "fastqc": { "branch": "master", - "git_sha": "285a50500f9e02578d90b3ce6382ea3c30216acd", + "git_sha": "46eca555142d6e597729fcb682adcc791796f514", "installed_by": ["fastq_fastqc_umitools_fastp", "modules"] }, "gffcompare": { @@ -163,13 +163,13 @@ }, "gunzip": { "branch": "master", - "git_sha": "3a5fef109d113b4997c9822198664ca5f2716208", + "git_sha": "4e5f4687318f24ba944a13609d3ea6ebd890737d", "installed_by": ["modules"], "patch": "modules/nf-core/gunzip/gunzip.diff" }, "liftoff": { "branch": "master", - "git_sha": "8ce34a40589137b75b65dfe8bb334c9b94f1d6c8", + "git_sha": "fb8d53f339dc130223367ca7fde3695946f5da64", "installed_by": ["modules"] }, "orthofinder": { @@ -199,12 +199,12 @@ }, "star/align": { "branch": "master", - "git_sha": "a21faa6a3481af92a343a10926f59c189a2c16c9", + "git_sha": "46eca555142d6e597729fcb682adcc791796f514", "installed_by": ["modules"] }, "star/genomegenerate": { "branch": "master", - "git_sha": "a21faa6a3481af92a343a10926f59c189a2c16c9", + "git_sha": "46eca555142d6e597729fcb682adcc791796f514", "installed_by": ["modules"] }, "tsebra": { @@ -214,7 +214,7 @@ }, "umitools/extract": { "branch": "master", - "git_sha": "d2c5e76f291379f3dd403e48e46ed7e6ba5da744", + "git_sha": "b4919e9a2b4d8b71061e601633db4600a3858fa1", "installed_by": ["fastq_fastqc_umitools_fastp"] } } @@ -223,7 +223,7 @@ "nf-core": { "fastq_fastqc_umitools_fastp": { "branch": "master", - "git_sha": "db35d26edeafacf9906a517827df621a29adc13d", + "git_sha": "46eca555142d6e597729fcb682adcc791796f514", "installed_by": ["subworkflows"] } } diff --git a/modules/nf-core/cat/cat/main.nf b/modules/nf-core/cat/cat/main.nf index adbdbd7..2862c64 100644 --- a/modules/nf-core/cat/cat/main.nf +++ b/modules/nf-core/cat/cat/main.nf @@ -76,4 +76,3 @@ def getFileSuffix(filename) { def match = filename =~ /^.*?((\.\w{1,5})?(\.\w{1,5}\.gz$))/ return match ? match[0][1] : filename.substring(filename.lastIndexOf('.')) } - diff --git a/modules/nf-core/cat/cat/tests/main.nf.test b/modules/nf-core/cat/cat/tests/main.nf.test index fcee2d1..9cb1617 100644 --- a/modules/nf-core/cat/cat/tests/main.nf.test +++ b/modules/nf-core/cat/cat/tests/main.nf.test @@ -29,7 +29,8 @@ nextflow_process { then { assertAll( { assert !process.success }, - { assert process.stdout.toString().contains("The name of the input file can't be the same as for the output prefix") } + { assert process.stdout.toString().contains("The name of the input file can't be the same as for the output prefix") }, + { assert snapshot(process.out.versions).match() } ) } } @@ -83,8 +84,12 @@ nextflow_process { def lines = path(process.out.file_out.get(0).get(1)).linesGzip assertAll( { assert process.success }, - { assert snapshot(lines[0..5]).match("test_cat_zipped_zipped_lines") }, - { assert snapshot(lines.size()).match("test_cat_zipped_zipped_size")} + { assert snapshot( + lines[0..5], + lines.size(), + process.out.versions + ).match() + } ) } } @@ -142,8 +147,12 @@ nextflow_process { def lines = path(process.out.file_out.get(0).get(1)).linesGzip assertAll( { assert process.success }, - { assert snapshot(lines[0..5]).match("test_cat_unzipped_zipped_lines") }, - { assert snapshot(lines.size()).match("test_cat_unzipped_zipped_size")} + { assert snapshot( + lines[0..5], + lines.size(), + process.out.versions + ).match() + } ) } } @@ -170,8 +179,12 @@ nextflow_process { def lines = path(process.out.file_out.get(0).get(1)).linesGzip assertAll( { assert process.success }, - { assert snapshot(lines[0..5]).match("test_cat_one_file_unzipped_zipped_lines") }, - { assert snapshot(lines.size()).match("test_cat_one_file_unzipped_zipped_size")} + { assert snapshot( + lines[0..5], + lines.size(), + process.out.versions + ).match() + } ) } } diff --git a/modules/nf-core/cat/cat/tests/main.nf.test.snap b/modules/nf-core/cat/cat/tests/main.nf.test.snap index 423571b..b7623ee 100644 --- a/modules/nf-core/cat/cat/tests/main.nf.test.snap +++ b/modules/nf-core/cat/cat/tests/main.nf.test.snap @@ -1,10 +1,4 @@ { - "test_cat_unzipped_zipped_size": { - "content": [ - 375 - ], - "timestamp": "2023-10-16T14:33:08.049445686" - }, "test_cat_unzipped_unzipped": { "content": [ { @@ -34,6 +28,10 @@ ] } ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.3" + }, "timestamp": "2023-10-16T14:32:18.500464399" }, "test_cat_zipped_unzipped": { @@ -65,9 +63,13 @@ ] } ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.3" + }, "timestamp": "2023-10-16T14:32:49.642741302" }, - "test_cat_zipped_zipped_lines": { + "test_cat_zipped_zipped": { "content": [ [ "MT192765.1\tGenbank\ttranscript\t259\t29667\t.\t+\t.\tID=unknown_transcript_1;geneID=orf1ab;gene_name=orf1ab", @@ -76,11 +78,31 @@ "MT192765.1\tGenbank\tCDS\t13461\t21548\t.\t+\t0\tParent=unknown_transcript_1;exception=\"ribosomal slippage\";gbkey=CDS;gene=orf1ab;note=\"pp1ab;translated=by -1 ribosomal frameshift\";product=\"orf1ab polyprotein\";protein_id=QIK50426.1", "MT192765.1\tGenbank\tCDS\t21556\t25377\t.\t+\t0\tParent=unknown_transcript_1;gbkey=CDS;gene=S;note=\"structural protein\";product=\"surface glycoprotein\";protein_id=QIK50427.1", "MT192765.1\tGenbank\tgene\t21556\t25377\t.\t+\t.\tParent=unknown_transcript_1" + ], + 78, + [ + "versions.yml:md5,115ed6177ebcff24eb99d503fa5ef894" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T11:51:46.802978" + }, + "test_cat_name_conflict": { + "content": [ + [ + ] ], - "timestamp": "2023-10-16T14:32:33.629048645" + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T11:51:29.45394" }, - "test_cat_unzipped_zipped_lines": { + "test_cat_one_file_unzipped_zipped": { "content": [ [ ">MT192765.1 Severe acute respiratory syndrome coronavirus 2 isolate SARS-CoV-2/human/USA/PC00101P/2020, complete genome", @@ -89,11 +111,19 @@ "TAACTCGTCTATCTTCTGCAGGCTGCTTACGGTTTCGTCCGTGTTGCAGCCGATCATCAGCACATCTAGGTTTTGTCCGG", "GTGTGACCGAAAGGTAAGATGGAGAGCCTTGTCCCTGGTTTCAACGAGAAAACACACGTCCAACTCAGTTTGCCTGTTTT", "ACAGGTTCGCGACGTGCTCGTACGTGGCTTTGGAGACTCCGTGGAGGAGGTCTTATCAGAGGCACGTCAACATCTTAAAG" + ], + 374, + [ + "versions.yml:md5,115ed6177ebcff24eb99d503fa5ef894" ] ], - "timestamp": "2023-10-16T14:33:08.038830506" + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T11:52:02.774016" }, - "test_cat_one_file_unzipped_zipped_lines": { + "test_cat_unzipped_zipped": { "content": [ [ ">MT192765.1 Severe acute respiratory syndrome coronavirus 2 isolate SARS-CoV-2/human/USA/PC00101P/2020, complete genome", @@ -102,20 +132,16 @@ "TAACTCGTCTATCTTCTGCAGGCTGCTTACGGTTTCGTCCGTGTTGCAGCCGATCATCAGCACATCTAGGTTTTGTCCGG", "GTGTGACCGAAAGGTAAGATGGAGAGCCTTGTCCCTGGTTTCAACGAGAAAACACACGTCCAACTCAGTTTGCCTGTTTT", "ACAGGTTCGCGACGTGCTCGTACGTGGCTTTGGAGACTCCGTGGAGGAGGTCTTATCAGAGGCACGTCAACATCTTAAAG" + ], + 375, + [ + "versions.yml:md5,115ed6177ebcff24eb99d503fa5ef894" ] ], - "timestamp": "2023-10-16T14:33:21.39642399" - }, - "test_cat_zipped_zipped_size": { - "content": [ - 78 - ], - "timestamp": "2023-10-16T14:32:33.641869244" - }, - "test_cat_one_file_unzipped_zipped_size": { - "content": [ - 374 - ], - "timestamp": "2023-10-16T14:33:21.4094373" + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T11:51:57.581523" } } \ No newline at end of file diff --git a/modules/nf-core/cat/fastq/main.nf b/modules/nf-core/cat/fastq/main.nf index f132b2a..b68e5f9 100644 --- a/modules/nf-core/cat/fastq/main.nf +++ b/modules/nf-core/cat/fastq/main.nf @@ -53,9 +53,9 @@ process CAT_FASTQ { def prefix = task.ext.prefix ?: "${meta.id}" def readList = reads instanceof List ? reads.collect{ it.toString() } : [reads.toString()] if (meta.single_end) { - if (readList.size > 1) { + if (readList.size >= 1) { """ - touch ${prefix}.merged.fastq.gz + echo '' | gzip > ${prefix}.merged.fastq.gz cat <<-END_VERSIONS > versions.yml "${task.process}": @@ -64,10 +64,10 @@ process CAT_FASTQ { """ } } else { - if (readList.size > 2) { + if (readList.size >= 2) { """ - touch ${prefix}_1.merged.fastq.gz - touch ${prefix}_2.merged.fastq.gz + echo '' | gzip > ${prefix}_1.merged.fastq.gz + echo '' | gzip > ${prefix}_2.merged.fastq.gz cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/cat/fastq/tests/main.nf.test b/modules/nf-core/cat/fastq/tests/main.nf.test index a71dcb8..f88a78b 100644 --- a/modules/nf-core/cat/fastq/tests/main.nf.test +++ b/modules/nf-core/cat/fastq/tests/main.nf.test @@ -13,9 +13,6 @@ nextflow_process { test("test_cat_fastq_single_end") { when { - params { - outdir = "$outputDir" - } process { """ input[0] = Channel.of([ @@ -38,9 +35,6 @@ nextflow_process { test("test_cat_fastq_paired_end") { when { - params { - outdir = "$outputDir" - } process { """ input[0] = Channel.of([ @@ -65,9 +59,6 @@ nextflow_process { test("test_cat_fastq_single_end_same_name") { when { - params { - outdir = "$outputDir" - } process { """ input[0] = Channel.of([ @@ -90,9 +81,6 @@ nextflow_process { test("test_cat_fastq_paired_end_same_name") { when { - params { - outdir = "$outputDir" - } process { """ input[0] = Channel.of([ @@ -117,9 +105,129 @@ nextflow_process { test("test_cat_fastq_single_end_single_file") { when { - params { - outdir = "$outputDir" + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:true ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true)] + ]) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("test_cat_fastq_single_end - stub") { + + options "-stub" + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:true ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true)] + ]) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("test_cat_fastq_paired_end - stub") { + + options "-stub" + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test2_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test2_2.fastq.gz', checkIfExists: true)] + ]) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("test_cat_fastq_single_end_same_name - stub") { + + options "-stub" + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:true ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true)] + ]) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("test_cat_fastq_paired_end_same_name - stub") { + + options "-stub" + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true)] + ]) + """ } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("test_cat_fastq_single_end_single_file - stub") { + + options "-stub" + + when { process { """ input[0] = Channel.of([ diff --git a/modules/nf-core/cat/fastq/tests/main.nf.test.snap b/modules/nf-core/cat/fastq/tests/main.nf.test.snap index 43dfe28..aec119a 100644 --- a/modules/nf-core/cat/fastq/tests/main.nf.test.snap +++ b/modules/nf-core/cat/fastq/tests/main.nf.test.snap @@ -28,6 +28,10 @@ ] } ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, "timestamp": "2024-01-17T17:30:39.816981" }, "test_cat_fastq_single_end_same_name": { @@ -59,6 +63,10 @@ ] } ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, "timestamp": "2024-01-17T17:32:35.229332" }, "test_cat_fastq_single_end_single_file": { @@ -90,6 +98,10 @@ ] } ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, "timestamp": "2024-01-17T17:34:00.058829" }, "test_cat_fastq_paired_end_same_name": { @@ -127,8 +139,123 @@ ] } ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, "timestamp": "2024-01-17T17:33:33.031555" }, + "test_cat_fastq_single_end - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": true + }, + "test.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + "versions.yml:md5,d42d6e24d67004608495883e00bd501b" + ], + "reads": [ + [ + { + "id": "test", + "single_end": true + }, + "test.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "versions": [ + "versions.yml:md5,d42d6e24d67004608495883e00bd501b" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-05T12:07:28.244999" + }, + "test_cat_fastq_paired_end_same_name - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "1": [ + "versions.yml:md5,d42d6e24d67004608495883e00bd501b" + ], + "reads": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "versions": [ + "versions.yml:md5,d42d6e24d67004608495883e00bd501b" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-05T12:07:57.070911" + }, + "test_cat_fastq_single_end_same_name - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": true + }, + "test.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + "versions.yml:md5,d42d6e24d67004608495883e00bd501b" + ], + "reads": [ + [ + { + "id": "test", + "single_end": true + }, + "test.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "versions": [ + "versions.yml:md5,d42d6e24d67004608495883e00bd501b" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-05T12:07:46.796254" + }, "test_cat_fastq_paired_end": { "content": [ { @@ -164,6 +291,86 @@ ] } ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, "timestamp": "2024-01-17T17:32:02.270935" + }, + "test_cat_fastq_paired_end - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "1": [ + "versions.yml:md5,d42d6e24d67004608495883e00bd501b" + ], + "reads": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "versions": [ + "versions.yml:md5,d42d6e24d67004608495883e00bd501b" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-05T12:07:37.807553" + }, + "test_cat_fastq_single_end_single_file - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": true + }, + "test.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + "versions.yml:md5,d42d6e24d67004608495883e00bd501b" + ], + "reads": [ + [ + { + "id": "test", + "single_end": true + }, + "test.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "versions": [ + "versions.yml:md5,d42d6e24d67004608495883e00bd501b" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-05T12:14:51.861264" } } \ No newline at end of file diff --git a/modules/nf-core/fastp/main.nf b/modules/nf-core/fastp/main.nf index df60ff6..e1b9f56 100644 --- a/modules/nf-core/fastp/main.nf +++ b/modules/nf-core/fastp/main.nf @@ -106,14 +106,16 @@ process FASTP { stub: def prefix = task.ext.prefix ?: "${meta.id}" def is_single_output = task.ext.args?.contains('--interleaved_in') || meta.single_end - def touch_reads = (is_single_output && !discard_trimmed_pass) ? "echo '' | gzip > ${prefix}.fastp.fastq.gz" : "echo '' | gzip > ${prefix}_1.fastp.fastq.gz ; echo '' | gzip > ${prefix}_2.fastp.fastq.gz" + def touch_reads = (discard_trimmed_pass) ? "" : (is_single_output) ? "echo '' | gzip > ${prefix}.fastp.fastq.gz" : "echo '' | gzip > ${prefix}_1.fastp.fastq.gz ; echo '' | gzip > ${prefix}_2.fastp.fastq.gz" def touch_merged = (!is_single_output && save_merged) ? "echo '' | gzip > ${prefix}.merged.fastq.gz" : "" + def touch_fail_fastq = (!save_trimmed_fail) ? "" : meta.single_end ? "echo '' | gzip > ${prefix}.fail.fastq.gz" : "echo '' | gzip > ${prefix}.paired.fail.fastq.gz ; echo '' | gzip > ${prefix}_1.fail.fastq.gz ; echo '' | gzip > ${prefix}_2.fail.fastq.gz" """ $touch_reads + $touch_fail_fastq + $touch_merged touch "${prefix}.fastp.json" touch "${prefix}.fastp.html" touch "${prefix}.fastp.log" - $touch_merged cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/fastp/tests/main.nf.test b/modules/nf-core/fastp/tests/main.nf.test index a659ebd..30dbb8a 100644 --- a/modules/nf-core/fastp/tests/main.nf.test +++ b/modules/nf-core/fastp/tests/main.nf.test @@ -28,28 +28,33 @@ nextflow_process { then { assertAll( { assert process.success }, + { assert path(process.out.html.get(0).get(1)).getText().contains("single end (151 cycles)") }, + { assert path(process.out.log.get(0).get(1)).getText().contains("reads passed filter: 99") }, { assert snapshot( - process.out.reads, process.out.json, - process.out.versions).match() }, - { assert process.out.reads_fail == [] }, - { assert process.out.reads_merged == [] }, - { assert path(process.out.log.get(0).get(1)).getText().contains("reads passed filter: 99") }, - { assert path(process.out.html.get(0).get(1)).getText().contains("single end (151 cycles)") } + process.out.reads, + process.out.reads_fail, + process.out.reads_merged, + process.out.versions).match() } ) } } - test("test_fastp_single_end-stub") { - - options '-stub' + test("test_fastp_paired_end") { when { + process { """ + adapter_fasta = [] + save_trimmed_pass = true + save_trimmed_fail = false + save_merged = false + input[0] = Channel.of([ - [ id:'test', single_end:true ], - [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) ] + [ id:'test', single_end:false ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) ] ]) input[1] = [] input[2] = false @@ -60,29 +65,29 @@ nextflow_process { } then { - assertAll( { assert process.success }, - { assert snapshot(process.out).match() } + { assert path(process.out.html.get(0).get(1)).getText().contains("The input has little adapter percentage (~0.000000%), probably it's trimmed before.") }, + { assert path(process.out.log.get(0).get(1)).getText().contains("Q30 bases: 12281(88.3716%)") }, + { assert snapshot( + process.out.json, + process.out.reads, + process.out.reads_fail, + process.out.reads_merged, + process.out.versions).match() } ) } } - test("test_fastp_paired_end") { + test("fastp test_fastp_interleaved") { + config './nextflow.interleaved.config' when { - process { """ - adapter_fasta = [] - save_trimmed_pass = true - save_trimmed_fail = false - save_merged = false - input[0] = Channel.of([ - [ id:'test', single_end:false ], // meta map - [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) ] + [ id:'test', single_end:true ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_interleaved.fastq.gz', checkIfExists: true) ] ]) input[1] = [] input[2] = false @@ -95,34 +100,31 @@ nextflow_process { then { assertAll( { assert process.success }, + { assert path(process.out.html.get(0).get(1)).getText().contains("paired end (151 cycles + 151 cycles)") }, + { assert path(process.out.log.get(0).get(1)).getText().contains("reads passed filter: 162") }, + { assert process.out.reads_fail == [] }, + { assert process.out.reads_merged == [] }, { assert snapshot( process.out.reads, process.out.json, - process.out.versions).match() }, - { assert process.out.reads_fail == [] }, - { assert process.out.reads_merged == [] }, - { assert path(process.out.log.get(0).get(1)).getText().contains("Q30 bases: 12281(88.3716%)") }, - { assert path(process.out.html.get(0).get(1)).getText().contains("The input has little adapter percentage (~0.000000%), probably it's trimmed before.") } + process.out.versions).match() } ) } } - test("test_fastp_paired_end - stub") { - - options '-stub' + test("test_fastp_single_end_trim_fail") { when { process { """ input[0] = Channel.of([ - [ id:'test', single_end:false ], // meta map - [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) ] + [ id:'test', single_end:true ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) ] ]) input[1] = [] input[2] = false - input[3] = false + input[3] = true input[4] = false """ } @@ -131,24 +133,32 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(process.out).match() }, + { assert path(process.out.html.get(0).get(1)).getText().contains("single end (151 cycles)") }, + { assert path(process.out.log.get(0).get(1)).getText().contains("reads passed filter: 99") }, + { assert snapshot( + process.out.json, + process.out.reads, + process.out.reads_fail, + process.out.reads_merged, + process.out.versions).match() } ) } } - test("fastp test_fastp_interleaved") { + test("test_fastp_paired_end_trim_fail") { - config './nextflow.interleaved.config' + config './nextflow.save_failed.config' when { process { """ input[0] = Channel.of([ - [ id:'test', single_end:true ], // meta map - [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_interleaved.fastq.gz', checkIfExists: true) ] + [ id:'test', single_end:false ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true)] ]) input[1] = [] input[2] = false - input[3] = false + input[3] = true input[4] = false """ } @@ -157,35 +167,32 @@ nextflow_process { then { assertAll( { assert process.success }, + { assert path(process.out.html.get(0).get(1)).getText().contains("The input has little adapter percentage (~0.000000%), probably it's trimmed before.") }, + { assert path(process.out.log.get(0).get(1)).getText().contains("reads passed filter: 162") }, { assert snapshot( process.out.reads, + process.out.reads_fail, + process.out.reads_merged, process.out.json, - process.out.versions).match() }, - { assert process.out.reads_fail == [] }, - { assert process.out.reads_merged == [] }, - { assert path(process.out.log.get(0).get(1)).getText().contains("reads passed filter: 162") }, - { assert path(process.out.html.get(0).get(1)).getText().contains("paired end (151 cycles + 151 cycles)") } + process.out.versions).match() } ) } } - test("fastp test_fastp_interleaved - stub") { - - options '-stub' + test("test_fastp_paired_end_merged") { - config './nextflow.interleaved.config' when { - process { """ input[0] = Channel.of([ - [ id:'test', single_end:true ], // meta map - [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_interleaved.fastq.gz', checkIfExists: true) ] + [ id:'test', single_end:false ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) ] ]) input[1] = [] input[2] = false input[3] = false - input[4] = false + input[4] = true """ } } @@ -193,25 +200,32 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(process.out).match() }, + { assert path(process.out.html.get(0).get(1)).getText().contains("The input has little adapter percentage (~0.000000%), probably it's trimmed before.") }, + { assert path(process.out.log.get(0).get(1)).getText().contains("total reads: 75") }, + { assert snapshot( + process.out.json, + process.out.reads, + process.out.reads_fail, + process.out.reads_merged, + process.out.versions).match() }, ) } } - test("test_fastp_single_end_trim_fail") { + test("test_fastp_paired_end_merged_adapterlist") { when { - process { """ input[0] = Channel.of([ - [ id:'test', single_end:true ], // meta map - [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) ] + [ id:'test', single_end:false ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) ] ]) - input[1] = [] + input[1] = Channel.of([ file(params.modules_testdata_base_path + 'delete_me/fastp/adapters.fasta', checkIfExists: true) ]) input[2] = false - input[3] = true - input[4] = false + input[3] = false + input[4] = true """ } } @@ -219,32 +233,30 @@ nextflow_process { then { assertAll( { assert process.success }, + { assert path(process.out.html.get(0).get(1)).getText().contains("

    0UthStxW)6_y*9^YXh|53prm^kn0=8 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 P|C5zgluF%aeDVJQBOL2+ literal 863296 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

    Xyb>-`k_W~yR6`%!IqFPh-A;|JbOi?)X+jj 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%0AW|s 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