From 344480193ea29c860c08e2be2ba8993d137f19a0 Mon Sep 17 00:00:00 2001 From: Paolo Cozzi Date: Mon, 26 Feb 2024 17:46:14 +0100 Subject: [PATCH 1/6] :fire: remove est-sfs bin --- tskit-pipeline/bin/est-sfs | Bin 54792 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100755 tskit-pipeline/bin/est-sfs diff --git a/tskit-pipeline/bin/est-sfs b/tskit-pipeline/bin/est-sfs deleted file mode 100755 index 1d974b520167553f7e28756be2bd909053588b39..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 54792 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�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 From e9c2ad379dca10bb30ee34daa7ae361a25e510da Mon Sep 17 00:00:00 2001 From: Paolo Cozzi Date: Mon, 26 Feb 2024 18:01:41 +0100 Subject: [PATCH 2/6] :heavy_plus_sign: add custom estsfs module dependency --- tskit-pipeline/modules.json | 11 ++++ .../modules/cnr-ibba/estsfs/main.nf | 48 +++++++++++++++++ .../modules/cnr-ibba/estsfs/meta.yml | 53 +++++++++++++++++++ 3 files changed, 112 insertions(+) create mode 100644 tskit-pipeline/modules/cnr-ibba/estsfs/main.nf create mode 100644 tskit-pipeline/modules/cnr-ibba/estsfs/meta.yml diff --git a/tskit-pipeline/modules.json b/tskit-pipeline/modules.json index 7fe6362..713c2d6 100644 --- a/tskit-pipeline/modules.json +++ b/tskit-pipeline/modules.json @@ -2,6 +2,17 @@ "name": "tskit-pipeline", "homePage": "https://github.com/bunop/TSKITetude", "repos": { + "https://github.com/cnr-ibba/nf-modules.git": { + "modules": { + "cnr-ibba": { + "estsfs": { + "branch": "issue-33", + "git_sha": "e9a3d75c0a0eb9743eeb791802f9a6876c155122", + "installed_by": ["modules"] + } + } + } + }, "https://github.com/nf-core/modules.git": { "modules": { "nf-core": { diff --git a/tskit-pipeline/modules/cnr-ibba/estsfs/main.nf b/tskit-pipeline/modules/cnr-ibba/estsfs/main.nf new file mode 100644 index 0000000..3028430 --- /dev/null +++ b/tskit-pipeline/modules/cnr-ibba/estsfs/main.nf @@ -0,0 +1,48 @@ +process ESTSFS { + tag "$meta.id" + label 'process_single' + label 'process_long' + + // WARN: Version information not provided by tool on CLI. Please update version string below when bumping container versions. + container "docker.io/bunop/est-sfs:2.0.5" + + input: + tuple val(meta), path(e_config), path(data), path(seed) + + output: + tuple val(meta), path("${prefix}_sfs.txt") , emit: sfs_out + tuple val(meta), path("${prefix}_pvalues.txt") , emit: pvalues_out + tuple val(meta), path("${prefix}.seed") , emit: seed + path "versions.yml", emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def VERSION = '2.05' // WARN: Version information not provided by tool on CLI. Please update this string when bumping container versions. + prefix = task.ext.prefix ?: "${meta.id}" + """ + cp ${seed} ${prefix}.seed + est-sfs ${e_config} ${data} ${prefix}.seed ${prefix}_sfs.txt ${prefix}_pvalues.txt + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + est-sfs: $VERSION + END_VERSIONS + """ + + stub: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}_sfs.txt + touch ${prefix}_pvalues.txt + touch ${prefix}.seed + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + est-sfs: $VERSION + END_VERSIONS + """ +} diff --git a/tskit-pipeline/modules/cnr-ibba/estsfs/meta.yml b/tskit-pipeline/modules/cnr-ibba/estsfs/meta.yml new file mode 100644 index 0000000..cae1988 --- /dev/null +++ b/tskit-pipeline/modules/cnr-ibba/estsfs/meta.yml @@ -0,0 +1,53 @@ +--- +name: "estsfs" +description: estimation of the unfolded site frequency spectrum +keywords: + - site frequency spectrum + - ancestral alleles + - derived alleles +tools: + - "estsfs": + description: "est-sfs ( Keightley and Jackson, 2018) is a stand-alone implementation of a method to infer the unfolded site frequency spectrum (the uSFS) and ancestral state probabilities by maximum likelihood (ML)." + homepage: "https://sourceforge.net/projects/est-usfs/" + documentation: "https://sourceforge.net/projects/est-usfs/" + tool_dev_url: "https://sourceforge.net/projects/est-usfs/files/est-sfs-release-2.04.tar.gz" + doi: "10.1534/genetics.118.301120" + licence: "['Free for Academic Use']" +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'test']` + - e_config: + type: file + description: config file for est-sfs + pattern: "*.txt" + - data: + type: file + description: input data file for est-sfs + pattern: "*.txt" + - seed: + type: file + description: text file containing random number seed + pattern: "*.txt" +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'test']` + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" + - sfs_out: + type: file + description: output file consists of the comma-separated estimated uSFS vector + pattern: "*.txt" + - pvalues_out: + type: file + description: this file contains the estimated ancestral state probabilities for each site + pattern: "*.txt" +authors: + - "@BioInf2305" From 1ab1bfdb48064c41e4173a2f96f8a72c210215ef Mon Sep 17 00:00:00 2001 From: Paolo Cozzi Date: Mon, 26 Feb 2024 18:17:05 +0100 Subject: [PATCH 3/6] :sparkles: generate seed and call custom est-sfs --- tskit-pipeline/conf/modules.config | 8 ++++++++ tskit-pipeline/modules.json | 2 +- tskit-pipeline/workflows/tskit.nf | 20 ++++++++++++++++++-- 3 files changed, 27 insertions(+), 3 deletions(-) diff --git a/tskit-pipeline/conf/modules.config b/tskit-pipeline/conf/modules.config index dab1477..fc8a8bc 100644 --- a/tskit-pipeline/conf/modules.config +++ b/tskit-pipeline/conf/modules.config @@ -89,6 +89,14 @@ process { ] } + withName: "GENERATE_SEED" { + publishDir = [ + path: { "${params.outdir}/estsfs" }, + mode: params.publish_dir_mode, + pattern: 'seedfile.txt' + ] + } + withName: "TSINFER" { ext.args = { "--mutation_rate ${params.tsdate_mutation_rate} --ne ${params.tsdate_ne}" } } diff --git a/tskit-pipeline/modules.json b/tskit-pipeline/modules.json index 713c2d6..9ef0840 100644 --- a/tskit-pipeline/modules.json +++ b/tskit-pipeline/modules.json @@ -6,7 +6,7 @@ "modules": { "cnr-ibba": { "estsfs": { - "branch": "issue-33", + "branch": "master", "git_sha": "e9a3d75c0a0eb9743eeb791802f9a6876c155122", "installed_by": ["modules"] } diff --git a/tskit-pipeline/workflows/tskit.nf b/tskit-pipeline/workflows/tskit.nf index bd10c70..374abbf 100644 --- a/tskit-pipeline/workflows/tskit.nf +++ b/tskit-pipeline/workflows/tskit.nf @@ -74,7 +74,7 @@ include { TABIX_TABIX as ANCIENT_SPLIT_TABIX } from '../modules/nf-core/tabix/tabix/main' include { BCFTOOLS_MERGE } from '../modules/nf-core/bcftools/merge/main' include { ESTSFS_INPUT } from '../modules/local/estsfs_input' -include { ESTSFS } from '../modules/nf-core/estsfs/main' +include { ESTSFS } from '../modules/cnr-ibba/estsfs/main' include { ESTSFS_OUTPUT } from '../modules/local/estsfs_output' include { TSINFER } from '../modules/local/tsinfer' include { CUSTOM_DUMPSOFTWAREVERSIONS } from '../modules/nf-core/custom/dumpsoftwareversions/main' @@ -89,6 +89,16 @@ include { CUSTOM_DUMPSOFTWAREVERSIONS } from '../modules/nf-core/custom/du def multiqc_report = [] +process GENERATE_SEED { + output: + path 'seedfile.txt' + + ''' + echo $RANDOM > seedfile.txt + ''' +} + + workflow TSKIT { ch_versions = Channel.empty() @@ -249,8 +259,14 @@ workflow TSKIT { outgroup_files_ch.collect() ) + // determine a seedfile + seedfile = GENERATE_SEED() + + // call custom est-sfs ESTSFS( - ESTSFS_INPUT.out.config.join(ESTSFS_INPUT.out.input) + ESTSFS_INPUT.out.config + .join(ESTSFS_INPUT.out.input) + .combine(seedfile) ) ch_versions = ch_versions.mix(ESTSFS.out.versions) From e6a4060a50e11e6e07048e7b17cad7f583f57938 Mon Sep 17 00:00:00 2001 From: Paolo Cozzi Date: Mon, 26 Feb 2024 18:19:44 +0100 Subject: [PATCH 4/6] :heavy_minus_sign: remove nf-core est-sfs dependency --- tskit-pipeline/modules.json | 5 -- tskit-pipeline/modules/nf-core/estsfs/main.nf | 46 ---------------- .../modules/nf-core/estsfs/meta.yml | 53 ------------------- 3 files changed, 104 deletions(-) delete mode 100644 tskit-pipeline/modules/nf-core/estsfs/main.nf delete mode 100644 tskit-pipeline/modules/nf-core/estsfs/meta.yml diff --git a/tskit-pipeline/modules.json b/tskit-pipeline/modules.json index 9ef0840..fa6789f 100644 --- a/tskit-pipeline/modules.json +++ b/tskit-pipeline/modules.json @@ -46,11 +46,6 @@ "git_sha": "8ec825f465b9c17f9d83000022995b4f7de6fe93", "installed_by": ["modules"] }, - "estsfs": { - "branch": "master", - "git_sha": "9678944d908e5aedab318c94a79d6ecbfa854fbc", - "installed_by": ["modules"] - }, "plink/recode": { "branch": "master", "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", diff --git a/tskit-pipeline/modules/nf-core/estsfs/main.nf b/tskit-pipeline/modules/nf-core/estsfs/main.nf deleted file mode 100644 index abeeb6f..0000000 --- a/tskit-pipeline/modules/nf-core/estsfs/main.nf +++ /dev/null @@ -1,46 +0,0 @@ -process ESTSFS { - tag "$meta.id" - label 'process_single' - label 'process_long' - - // WARN: Version information not provided by tool on CLI. Please update version string below when bumping container versions. - - input: - tuple val(meta), path(e_config), path(data) - - output: - tuple val(meta), path("${prefix}_sfs.txt") , emit: sfs_out - tuple val(meta), path("${prefix}_pvalues.txt"), emit: pvalues_out - tuple val(meta), path("${prefix}.seed"), emit: seed - path "versions.yml", emit: versions - - when: - task.ext.when == null || task.ext.when - - script: - def args = task.ext.args ?: '' - def VERSION = '2.05' // WARN: Version information not provided by tool on CLI. Please update this string when bumping container versions. - prefix = task.ext.prefix ?: "${meta.id}" - """ - est-sfs ${e_config} ${data} ${prefix}.seed ${prefix}_sfs.txt ${prefix}_pvalues.txt - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - est-sfs: $VERSION - END_VERSIONS - """ - - stub: - def args = task.ext.args ?: '' - def prefix = task.ext.prefix ?: "${meta.id}" - """ - touch ${prefix}_sfs.txt - touch ${prefix}_pvalues.txt - touch ${prefix}.seed - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - est-sfs: $VERSION - END_VERSIONS - """ -} diff --git a/tskit-pipeline/modules/nf-core/estsfs/meta.yml b/tskit-pipeline/modules/nf-core/estsfs/meta.yml deleted file mode 100644 index cae1988..0000000 --- a/tskit-pipeline/modules/nf-core/estsfs/meta.yml +++ /dev/null @@ -1,53 +0,0 @@ ---- -name: "estsfs" -description: estimation of the unfolded site frequency spectrum -keywords: - - site frequency spectrum - - ancestral alleles - - derived alleles -tools: - - "estsfs": - description: "est-sfs ( Keightley and Jackson, 2018) is a stand-alone implementation of a method to infer the unfolded site frequency spectrum (the uSFS) and ancestral state probabilities by maximum likelihood (ML)." - homepage: "https://sourceforge.net/projects/est-usfs/" - documentation: "https://sourceforge.net/projects/est-usfs/" - tool_dev_url: "https://sourceforge.net/projects/est-usfs/files/est-sfs-release-2.04.tar.gz" - doi: "10.1534/genetics.118.301120" - licence: "['Free for Academic Use']" -input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. `[ id:'test']` - - e_config: - type: file - description: config file for est-sfs - pattern: "*.txt" - - data: - type: file - description: input data file for est-sfs - pattern: "*.txt" - - seed: - type: file - description: text file containing random number seed - pattern: "*.txt" -output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. `[ id:'test']` - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - - sfs_out: - type: file - description: output file consists of the comma-separated estimated uSFS vector - pattern: "*.txt" - - pvalues_out: - type: file - description: this file contains the estimated ancestral state probabilities for each site - pattern: "*.txt" -authors: - - "@BioInf2305" From 9cf54b84e847b3a1c1383d8c3ec2040c06512d03 Mon Sep 17 00:00:00 2001 From: Paolo Cozzi Date: Mon, 26 Feb 2024 19:20:07 +0100 Subject: [PATCH 5/6] :bug: fix issue with TSINFER input channels using proper files pair --- tskit-pipeline/modules/local/tsinfer.nf | 3 +-- tskit-pipeline/workflows/tskit.nf | 16 ++++++++++++++-- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/tskit-pipeline/modules/local/tsinfer.nf b/tskit-pipeline/modules/local/tsinfer.nf index 2ba9ba5..799fa5d 100644 --- a/tskit-pipeline/modules/local/tsinfer.nf +++ b/tskit-pipeline/modules/local/tsinfer.nf @@ -9,8 +9,7 @@ process TSINFER { "--volume ${HOME}/.cache/tsdate/:/.cache/tsdate/" }""" input: - tuple val(meta), path(vcf) - tuple val(meta2), path(ancestral) + tuple val(meta), path(vcf), path(ancestral) path(sample_file) output: diff --git a/tskit-pipeline/workflows/tskit.nf b/tskit-pipeline/workflows/tskit.nf index 374abbf..7cf702e 100644 --- a/tskit-pipeline/workflows/tskit.nf +++ b/tskit-pipeline/workflows/tskit.nf @@ -272,10 +272,22 @@ workflow TSKIT { ESTSFS_OUTPUT(ESTSFS_INPUT.out.mapping.join(ESTSFS.out.pvalues_out)) + tsinfer_in_ch = BCFTOOLS_REHEADER.out.vcf + .map{ meta, vcf -> [meta.chrom, meta, vcf] } + .join( + ESTSFS_OUTPUT.out.ancestral + .map{ meta, ancestral -> + chrom = ancestral.name.tokenize(".")[-3] + [chrom, ancestral] + }, + by: [0], + failOnMismatch: true + ).map{ chrom, meta, vcf, ancestral -> [[id: meta.id], vcf, ancestral]} + // .view() + // now create a tstree file TSINFER( - BCFTOOLS_REHEADER.out.vcf, - ESTSFS_OUTPUT.out.ancestral, + tsinfer_in_ch, samples_ch.first() ) From 181312859df0c01954733018cb9e06d1975049b7 Mon Sep 17 00:00:00 2001 From: Paolo Cozzi Date: Mon, 26 Feb 2024 19:21:38 +0100 Subject: [PATCH 6/6] :fire: drop conda profile --- tskit-pipeline/nextflow.config | 7 ------- 1 file changed, 7 deletions(-) diff --git a/tskit-pipeline/nextflow.config b/tskit-pipeline/nextflow.config index 02ede5b..06b7498 100644 --- a/tskit-pipeline/nextflow.config +++ b/tskit-pipeline/nextflow.config @@ -96,21 +96,14 @@ profiles { cleanup = false nextflow.enable.configProcessNamesValidation = true } - conda { - conda.enabled = true - docker.enabled = false - singularity.enabled = false - } docker { docker.enabled = true - conda.enabled = false singularity.enabled = false docker.runOptions = '-u $(id -u):$(id -g)' } singularity { singularity.enabled = true singularity.autoMounts = true - conda.enabled = false docker.enabled = false } test { includeConfig 'conf/test.config' }