diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml deleted file mode 100644 index c23beda..0000000 --- a/.github/workflows/ci.yml +++ /dev/null @@ -1,87 +0,0 @@ -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] - workflow_dispatch: - -env: - NXF_ANSI_LOG: false - NXF_SINGULARITY_CACHEDIR: ${{ github.workspace }}/.singularity - NXF_SINGULARITY_LIBRARYDIR: ${{ github.workspace }}/.singularity - -concurrency: - group: "${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}" - cancel-in-progress: true - -jobs: - test: - name: "Run pipeline with test data (${{ matrix.NXF_VER }} | ${{ matrix.test_name }} | ${{ matrix.profile }})" - # 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 == 'nf-core/deepmutscan') }}" - runs-on: ubuntu-latest - strategy: - matrix: - NXF_VER: - - "24.04.2" - - "latest-everything" - profile: - - "conda" - - "docker" - - "singularity" - test_name: - - "test" - isMaster: - - ${{ github.base_ref == 'master' }} - # Exclude conda and singularity on dev - exclude: - - isMaster: false - profile: "conda" - - isMaster: false - profile: "singularity" - steps: - - name: Check out pipeline code - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 - with: - fetch-depth: 0 - - - name: Set up Nextflow - uses: nf-core/setup-nextflow@v2 - with: - version: "${{ matrix.NXF_VER }}" - - - name: Set up Apptainer - if: matrix.profile == 'singularity' - uses: eWaterCycle/setup-apptainer@main - - - name: Set up Singularity - if: matrix.profile == 'singularity' - run: | - mkdir -p $NXF_SINGULARITY_CACHEDIR - mkdir -p $NXF_SINGULARITY_LIBRARYDIR - - - name: Set up Miniconda - if: matrix.profile == 'conda' - uses: conda-incubator/setup-miniconda@a4260408e20b96e80095f42ff7f1a15b27dd94ca # v3 - with: - miniconda-version: "latest" - auto-update-conda: true - conda-solver: libmamba - channels: conda-forge,bioconda - - - name: Set up Conda - if: matrix.profile == 'conda' - run: | - echo $(realpath $CONDA)/condabin >> $GITHUB_PATH - echo $(realpath python) >> $GITHUB_PATH - - - name: Clean up Disk space - uses: jlumbroso/free-disk-space@54081f138730dfa15788a46383842cd2f914a1be # v1.3.1 - - - name: "Run pipeline with test data ${{ matrix.NXF_VER }} | ${{ matrix.test_name }} | ${{ matrix.profile }}" - run: | - nextflow run ${GITHUB_WORKSPACE} -profile ${{ matrix.test_name }},${{ matrix.profile }} --outdir ./results diff --git a/.github/workflows/nf-test.yml b/.github/workflows/nf-test.yml index c98d76e..c7381d6 100644 --- a/.github/workflows/nf-test.yml +++ b/.github/workflows/nf-test.yml @@ -78,7 +78,7 @@ jobs: - isMain: false profile: "singularity" NXF_VER: - - "25.04.0" + - "25.04.4" - "latest-everything" env: NXF_ANSI_LOG: false diff --git a/README.md b/README.md index 65a7e62..0b00b28 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ [![GitHub Actions Linting Status](https://github.com/nf-core/deepmutscan/actions/workflows/linting.yml/badge.svg)](https://github.com/nf-core/deepmutscan/actions/workflows/linting.yml)[![AWS CI](https://img.shields.io/badge/CI%20tests-full%20size-FF9900?labelColor=000000&logo=Amazon%20AWS)](https://nf-co.re/deepmutscan/results)[![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%A524.04.2-23aa62.svg)](https://www.nextflow.io/) +[![Nextflow](https://img.shields.io/badge/nextflow%20DSL2-%E2%89%A525.04.4-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/) diff --git a/modules/local/bamprocessing/bam_filter/environment.yml b/modules/local/bamprocessing/bam_filter/environment.yml new file mode 100644 index 0000000..a5338f6 --- /dev/null +++ b/modules/local/bamprocessing/bam_filter/environment.yml @@ -0,0 +1,5 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::samtools=1.21 diff --git a/modules/local/bamprocessing/bamfilteringdms.nf b/modules/local/bamprocessing/bam_filter/main.nf similarity index 100% rename from modules/local/bamprocessing/bamfilteringdms.nf rename to modules/local/bamprocessing/bam_filter/main.nf diff --git a/modules/local/bamprocessing/premerge/environment.yml b/modules/local/bamprocessing/premerge/environment.yml new file mode 100644 index 0000000..0e199ab --- /dev/null +++ b/modules/local/bamprocessing/premerge/environment.yml @@ -0,0 +1,7 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::bwa=0.7.19 + - bioconda::samtools=1.21 + - bioconda::vsearch=2.30.0 diff --git a/modules/local/bamprocessing/premerge.nf b/modules/local/bamprocessing/premerge/main.nf similarity index 100% rename from modules/local/bamprocessing/premerge.nf rename to modules/local/bamprocessing/premerge/main.nf diff --git a/modules/local/dmsanalysis/aa_seq/environment.yml b/modules/local/dmsanalysis/aa_seq/environment.yml new file mode 100644 index 0000000..1b0726d --- /dev/null +++ b/modules/local/dmsanalysis/aa_seq/environment.yml @@ -0,0 +1,15 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::bioconductor-biostrings=2.74.0 + - conda-forge::r-base=4.4.1 + - conda-forge::r-biocmanager=1.30.25 + - conda-forge::r-dplyr=1.1.4 + - conda-forge::r-ggplot2=3.5.1 + - conda-forge::r-reshape2=1.4.4 + - conda-forge::r-scales=1.3.0 + - conda-forge::r-stringr=1.5.1 + - conda-forge::r-tidyr=1.3.1 + - conda-forge::r-tidyverse=2.0.0 + - conda-forge::r-zoo=1.8_12 diff --git a/modules/local/dmsanalysis/aaseq.nf b/modules/local/dmsanalysis/aa_seq/main.nf similarity index 100% rename from modules/local/dmsanalysis/aaseq.nf rename to modules/local/dmsanalysis/aa_seq/main.nf diff --git a/modules/local/dmsanalysis/templates/aa_seq.R b/modules/local/dmsanalysis/aa_seq/templates/aa_seq.R similarity index 100% rename from modules/local/dmsanalysis/templates/aa_seq.R rename to modules/local/dmsanalysis/aa_seq/templates/aa_seq.R diff --git a/modules/local/dmsanalysis/possible_mutations/environment.yml b/modules/local/dmsanalysis/possible_mutations/environment.yml new file mode 100644 index 0000000..1b0726d --- /dev/null +++ b/modules/local/dmsanalysis/possible_mutations/environment.yml @@ -0,0 +1,15 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::bioconductor-biostrings=2.74.0 + - conda-forge::r-base=4.4.1 + - conda-forge::r-biocmanager=1.30.25 + - conda-forge::r-dplyr=1.1.4 + - conda-forge::r-ggplot2=3.5.1 + - conda-forge::r-reshape2=1.4.4 + - conda-forge::r-scales=1.3.0 + - conda-forge::r-stringr=1.5.1 + - conda-forge::r-tidyr=1.3.1 + - conda-forge::r-tidyverse=2.0.0 + - conda-forge::r-zoo=1.8_12 diff --git a/modules/local/dmsanalysis/possiblemutations.nf b/modules/local/dmsanalysis/possible_mutations/main.nf similarity index 100% rename from modules/local/dmsanalysis/possiblemutations.nf rename to modules/local/dmsanalysis/possible_mutations/main.nf diff --git a/modules/local/dmsanalysis/templates/possible_mutations.R b/modules/local/dmsanalysis/possible_mutations/templates/possible_mutations.R similarity index 100% rename from modules/local/dmsanalysis/templates/possible_mutations.R rename to modules/local/dmsanalysis/possible_mutations/templates/possible_mutations.R diff --git a/modules/local/dmsanalysis/process_gatk/environment.yml b/modules/local/dmsanalysis/process_gatk/environment.yml new file mode 100644 index 0000000..1b0726d --- /dev/null +++ b/modules/local/dmsanalysis/process_gatk/environment.yml @@ -0,0 +1,15 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::bioconductor-biostrings=2.74.0 + - conda-forge::r-base=4.4.1 + - conda-forge::r-biocmanager=1.30.25 + - conda-forge::r-dplyr=1.1.4 + - conda-forge::r-ggplot2=3.5.1 + - conda-forge::r-reshape2=1.4.4 + - conda-forge::r-scales=1.3.0 + - conda-forge::r-stringr=1.5.1 + - conda-forge::r-tidyr=1.3.1 + - conda-forge::r-tidyverse=2.0.0 + - conda-forge::r-zoo=1.8_12 diff --git a/modules/local/dmsanalysis/processgatk.nf b/modules/local/dmsanalysis/process_gatk/main.nf similarity index 100% rename from modules/local/dmsanalysis/processgatk.nf rename to modules/local/dmsanalysis/process_gatk/main.nf diff --git a/modules/local/dmsanalysis/templates/process_gatk.R b/modules/local/dmsanalysis/process_gatk/templates/process_gatk.R similarity index 100% rename from modules/local/dmsanalysis/templates/process_gatk.R rename to modules/local/dmsanalysis/process_gatk/templates/process_gatk.R diff --git a/modules/local/fitness/find_synonymous_mutation/environment.yml b/modules/local/fitness/find_synonymous_mutation/environment.yml new file mode 100644 index 0000000..1b0726d --- /dev/null +++ b/modules/local/fitness/find_synonymous_mutation/environment.yml @@ -0,0 +1,15 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::bioconductor-biostrings=2.74.0 + - conda-forge::r-base=4.4.1 + - conda-forge::r-biocmanager=1.30.25 + - conda-forge::r-dplyr=1.1.4 + - conda-forge::r-ggplot2=3.5.1 + - conda-forge::r-reshape2=1.4.4 + - conda-forge::r-scales=1.3.0 + - conda-forge::r-stringr=1.5.1 + - conda-forge::r-tidyr=1.3.1 + - conda-forge::r-tidyverse=2.0.0 + - conda-forge::r-zoo=1.8_12 diff --git a/modules/local/fitness/find_synonymous_mutation.nf b/modules/local/fitness/find_synonymous_mutation/main.nf similarity index 100% rename from modules/local/fitness/find_synonymous_mutation.nf rename to modules/local/fitness/find_synonymous_mutation/main.nf diff --git a/modules/local/fitness/templates/find_syn_mutation.R b/modules/local/fitness/find_synonymous_mutation/templates/find_syn_mutation.R similarity index 100% rename from modules/local/fitness/templates/find_syn_mutation.R rename to modules/local/fitness/find_synonymous_mutation/templates/find_syn_mutation.R diff --git a/modules/local/fitness/fitness_QC/environment.yml b/modules/local/fitness/fitness_QC/environment.yml new file mode 100644 index 0000000..1b0726d --- /dev/null +++ b/modules/local/fitness/fitness_QC/environment.yml @@ -0,0 +1,15 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::bioconductor-biostrings=2.74.0 + - conda-forge::r-base=4.4.1 + - conda-forge::r-biocmanager=1.30.25 + - conda-forge::r-dplyr=1.1.4 + - conda-forge::r-ggplot2=3.5.1 + - conda-forge::r-reshape2=1.4.4 + - conda-forge::r-scales=1.3.0 + - conda-forge::r-stringr=1.5.1 + - conda-forge::r-tidyr=1.3.1 + - conda-forge::r-tidyverse=2.0.0 + - conda-forge::r-zoo=1.8_12 diff --git a/modules/local/fitness/fitness_QC/main.nf b/modules/local/fitness/fitness_QC/main.nf new file mode 100644 index 0000000..8cb16f3 --- /dev/null +++ b/modules/local/fitness/fitness_QC/main.nf @@ -0,0 +1,30 @@ +process FITNESS_QC { + tag { sample.sample } + label 'process_single' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' + ? 'community.wave.seqera.io/library/bioconductor-biostrings_r-base_r-biocmanager_r-dplyr_pruned:ce2ba7ad7f6e7f2c' + : 'community.wave.seqera.io/library/bioconductor-biostrings_r-base_r-biocmanager_r-dplyr_pruned:0fd2e39a5bf2ecaa' }" + + input: + tuple val(sample), path(fitness_estimation_tsv) // from FITNESS_CALCULATION + + output: + tuple val(sample), path("fitness_estimation_count_correlation.pdf"), emit: counts_corr_pdf + tuple val(sample), path("fitness_estimation_fitness_correlation.pdf"), emit: fitness_corr_pdf + path "versions.yml", emit: versions + + script: + template 'fitness_QC.R' + + stub: + """ + touch fitness_estimation_count_correlation.pdf + touch fitness_estimation_fitness_correlation.pdf + cat > versions.yml <<'EOF' + FITNESS_PLOTS: + stub-version: "0.0.0" + EOF + """ +} diff --git a/modules/local/fitness/templates/fitness_QC.R b/modules/local/fitness/fitness_QC/templates/fitness_QC.R similarity index 100% rename from modules/local/fitness/templates/fitness_QC.R rename to modules/local/fitness/fitness_QC/templates/fitness_QC.R diff --git a/modules/local/fitness/fitness_calculation/environment.yml b/modules/local/fitness/fitness_calculation/environment.yml new file mode 100644 index 0000000..1b0726d --- /dev/null +++ b/modules/local/fitness/fitness_calculation/environment.yml @@ -0,0 +1,15 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::bioconductor-biostrings=2.74.0 + - conda-forge::r-base=4.4.1 + - conda-forge::r-biocmanager=1.30.25 + - conda-forge::r-dplyr=1.1.4 + - conda-forge::r-ggplot2=3.5.1 + - conda-forge::r-reshape2=1.4.4 + - conda-forge::r-scales=1.3.0 + - conda-forge::r-stringr=1.5.1 + - conda-forge::r-tidyr=1.3.1 + - conda-forge::r-tidyverse=2.0.0 + - conda-forge::r-zoo=1.8_12 diff --git a/modules/local/fitness/fitness_calculation/main.nf b/modules/local/fitness/fitness_calculation/main.nf new file mode 100644 index 0000000..9377492 --- /dev/null +++ b/modules/local/fitness/fitness_calculation/main.nf @@ -0,0 +1,28 @@ +process FITNESS_CALCULATION { + tag { sample.sample } + label 'process_single' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' + ? 'community.wave.seqera.io/library/bioconductor-biostrings_r-base_r-biocmanager_r-dplyr_pruned:ce2ba7ad7f6e7f2c' + : 'community.wave.seqera.io/library/bioconductor-biostrings_r-base_r-biocmanager_r-dplyr_pruned:0fd2e39a5bf2ecaa' }" + + input: + tuple val(sample), path(counts_merged) + path(exp_design) + path(syn_wt_txt) + + output: + tuple val(sample), path("fitness_estimation.tsv"), emit: fitness_estimation + path "versions.yml", emit: versions + + script: + template 'fitness_calculation.R' + + stub: + """ + touch fitness_estimation.tsv + echo "FITNESS_CALCULATION:" > versions.yml + echo " stub-version: 0.0.0" >> versions.yml + """ +} diff --git a/modules/local/fitness/templates/fitness_calculation.R b/modules/local/fitness/fitness_calculation/templates/fitness_calculation.R similarity index 100% rename from modules/local/fitness/templates/fitness_calculation.R rename to modules/local/fitness/fitness_calculation/templates/fitness_calculation.R diff --git a/modules/local/fitness/fitness_experimental_design/environment.yml b/modules/local/fitness/fitness_experimental_design/environment.yml new file mode 100644 index 0000000..1b0726d --- /dev/null +++ b/modules/local/fitness/fitness_experimental_design/environment.yml @@ -0,0 +1,15 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::bioconductor-biostrings=2.74.0 + - conda-forge::r-base=4.4.1 + - conda-forge::r-biocmanager=1.30.25 + - conda-forge::r-dplyr=1.1.4 + - conda-forge::r-ggplot2=3.5.1 + - conda-forge::r-reshape2=1.4.4 + - conda-forge::r-scales=1.3.0 + - conda-forge::r-stringr=1.5.1 + - conda-forge::r-tidyr=1.3.1 + - conda-forge::r-tidyverse=2.0.0 + - conda-forge::r-zoo=1.8_12 diff --git a/modules/local/fitness/fitness_experimental_design.nf b/modules/local/fitness/fitness_experimental_design/main.nf similarity index 100% rename from modules/local/fitness/fitness_experimental_design.nf rename to modules/local/fitness/fitness_experimental_design/main.nf diff --git a/modules/local/fitness/templates/dimsum_experimentalDesign.R b/modules/local/fitness/fitness_experimental_design/templates/dimsum_experimentalDesign.R similarity index 100% rename from modules/local/fitness/templates/dimsum_experimentalDesign.R rename to modules/local/fitness/fitness_experimental_design/templates/dimsum_experimentalDesign.R diff --git a/modules/local/fitness/fitness_heatmap/environment.yml b/modules/local/fitness/fitness_heatmap/environment.yml new file mode 100644 index 0000000..1b0726d --- /dev/null +++ b/modules/local/fitness/fitness_heatmap/environment.yml @@ -0,0 +1,15 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::bioconductor-biostrings=2.74.0 + - conda-forge::r-base=4.4.1 + - conda-forge::r-biocmanager=1.30.25 + - conda-forge::r-dplyr=1.1.4 + - conda-forge::r-ggplot2=3.5.1 + - conda-forge::r-reshape2=1.4.4 + - conda-forge::r-scales=1.3.0 + - conda-forge::r-stringr=1.5.1 + - conda-forge::r-tidyr=1.3.1 + - conda-forge::r-tidyverse=2.0.0 + - conda-forge::r-zoo=1.8_12 diff --git a/modules/local/fitness/fitness_heatmap/main.nf b/modules/local/fitness/fitness_heatmap/main.nf new file mode 100644 index 0000000..80a9bad --- /dev/null +++ b/modules/local/fitness/fitness_heatmap/main.nf @@ -0,0 +1,29 @@ +process FITNESS_HEATMAP { + tag { sample.sample } + label 'process_single' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' + ? 'community.wave.seqera.io/library/bioconductor-biostrings_r-base_r-biocmanager_r-dplyr_pruned:ce2ba7ad7f6e7f2c' + : 'community.wave.seqera.io/library/bioconductor-biostrings_r-base_r-biocmanager_r-dplyr_pruned:0fd2e39a5bf2ecaa' }" + + input: + tuple val(sample), path(fitness_estimation_tsv) // from FITNESS_CALCULATION + tuple val(sample), path(wt_seq) // WT sequence + + output: + tuple val(sample), path("fitness_heatmap.pdf"), emit: fitness_heatmap + path "versions.yml", emit: versions + + script: + template 'fitness_heatmap.R' + + stub: + """ + touch fitness_heatmap.pdf + cat > versions.yml <<'EOF' + FITNESS_HEATMAP: + stub-version: "0.0.0" + EOF + """ +} diff --git a/modules/local/fitness/templates/fitness_heatmap.R b/modules/local/fitness/fitness_heatmap/templates/fitness_heatmap.R similarity index 100% rename from modules/local/fitness/templates/fitness_heatmap.R rename to modules/local/fitness/fitness_heatmap/templates/fitness_heatmap.R diff --git a/modules/local/fitness/fitness_standard.nf b/modules/local/fitness/fitness_standard.nf deleted file mode 100644 index 5b7a0fb..0000000 --- a/modules/local/fitness/fitness_standard.nf +++ /dev/null @@ -1,93 +0,0 @@ -process FITNESS_CALCULATION { - tag { sample.sample } - label 'process_single' - - conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' - ? 'community.wave.seqera.io/library/bioconductor-biostrings_r-base_r-biocmanager_r-dplyr_pruned:ce2ba7ad7f6e7f2c' - : 'community.wave.seqera.io/library/bioconductor-biostrings_r-base_r-biocmanager_r-dplyr_pruned:0fd2e39a5bf2ecaa' }" - - input: - tuple val(sample), path(counts_merged) - path(exp_design) - path(syn_wt_txt) - - output: - tuple val(sample), path("fitness_estimation.tsv"), emit: fitness_estimation - path "versions.yml", emit: versions - - script: - template 'fitness_calculation.R' - - stub: - """ - touch fitness_estimation.tsv - echo "FITNESS_CALCULATION:" > versions.yml - echo " stub-version: 0.0.0" >> versions.yml - """ -} - - - -process FITNESS_QC { - tag { sample.sample } - label 'process_single' - - conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' - ? 'community.wave.seqera.io/library/bioconductor-biostrings_r-base_r-biocmanager_r-dplyr_pruned:ce2ba7ad7f6e7f2c' - : 'community.wave.seqera.io/library/bioconductor-biostrings_r-base_r-biocmanager_r-dplyr_pruned:0fd2e39a5bf2ecaa' }" - - input: - tuple val(sample), path(fitness_estimation_tsv) // from FITNESS_CALCULATION - - output: - tuple val(sample), path("fitness_estimation_count_correlation.pdf"), emit: counts_corr_pdf - tuple val(sample), path("fitness_estimation_fitness_correlation.pdf"), emit: fitness_corr_pdf - path "versions.yml", emit: versions - - script: - template 'fitness_QC.R' - - stub: - """ - touch fitness_estimation_count_correlation.pdf - touch fitness_estimation_fitness_correlation.pdf - cat > versions.yml <<'EOF' - FITNESS_PLOTS: - stub-version: "0.0.0" - EOF - """ -} - - - -process FITNESS_HEATMAP { - tag { sample.sample } - label 'process_single' - - conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' - ? 'community.wave.seqera.io/library/bioconductor-biostrings_r-base_r-biocmanager_r-dplyr_pruned:ce2ba7ad7f6e7f2c' - : 'community.wave.seqera.io/library/bioconductor-biostrings_r-base_r-biocmanager_r-dplyr_pruned:0fd2e39a5bf2ecaa' }" - - input: - tuple val(sample), path(fitness_estimation_tsv) // from FITNESS_CALCULATION - tuple val(sample), path(wt_seq) // WT sequence - - output: - tuple val(sample), path("fitness_heatmap.pdf"), emit: fitness_heatmap - path "versions.yml", emit: versions - - script: - template 'fitness_heatmap.R' - - stub: - """ - touch fitness_heatmap.pdf - cat > versions.yml <<'EOF' - FITNESS_HEATMAP: - stub-version: "0.0.0" - EOF - """ -} diff --git a/modules/local/fitness/merge_counts/environment.yml b/modules/local/fitness/merge_counts/environment.yml new file mode 100644 index 0000000..1b0726d --- /dev/null +++ b/modules/local/fitness/merge_counts/environment.yml @@ -0,0 +1,15 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::bioconductor-biostrings=2.74.0 + - conda-forge::r-base=4.4.1 + - conda-forge::r-biocmanager=1.30.25 + - conda-forge::r-dplyr=1.1.4 + - conda-forge::r-ggplot2=3.5.1 + - conda-forge::r-reshape2=1.4.4 + - conda-forge::r-scales=1.3.0 + - conda-forge::r-stringr=1.5.1 + - conda-forge::r-tidyr=1.3.1 + - conda-forge::r-tidyverse=2.0.0 + - conda-forge::r-zoo=1.8_12 diff --git a/modules/local/fitness/merge_counts.nf b/modules/local/fitness/merge_counts/main.nf similarity index 100% rename from modules/local/fitness/merge_counts.nf rename to modules/local/fitness/merge_counts/main.nf diff --git a/modules/local/fitness/templates/merge_counts.R b/modules/local/fitness/merge_counts/templates/merge_counts.R similarity index 100% rename from modules/local/fitness/templates/merge_counts.R rename to modules/local/fitness/merge_counts/templates/merge_counts.R diff --git a/modules/local/fitness/run_dimsum/environment.yml b/modules/local/fitness/run_dimsum/environment.yml new file mode 100644 index 0000000..4d75327 --- /dev/null +++ b/modules/local/fitness/run_dimsum/environment.yml @@ -0,0 +1,5 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::r-dimsum=1.4 diff --git a/modules/local/fitness/run_dimsum.nf b/modules/local/fitness/run_dimsum/main.nf similarity index 100% rename from modules/local/fitness/run_dimsum.nf rename to modules/local/fitness/run_dimsum/main.nf diff --git a/modules/local/gatk/gatk_to_fitness/environment.yml b/modules/local/gatk/gatk_to_fitness/environment.yml new file mode 100644 index 0000000..1b0726d --- /dev/null +++ b/modules/local/gatk/gatk_to_fitness/environment.yml @@ -0,0 +1,15 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::bioconductor-biostrings=2.74.0 + - conda-forge::r-base=4.4.1 + - conda-forge::r-biocmanager=1.30.25 + - conda-forge::r-dplyr=1.1.4 + - conda-forge::r-ggplot2=3.5.1 + - conda-forge::r-reshape2=1.4.4 + - conda-forge::r-scales=1.3.0 + - conda-forge::r-stringr=1.5.1 + - conda-forge::r-tidyr=1.3.1 + - conda-forge::r-tidyverse=2.0.0 + - conda-forge::r-zoo=1.8_12 diff --git a/modules/local/gatk/gatktofitness.nf b/modules/local/gatk/gatk_to_fitness/main.nf similarity index 100% rename from modules/local/gatk/gatktofitness.nf rename to modules/local/gatk/gatk_to_fitness/main.nf diff --git a/modules/local/gatk/templates/gatk_to_fitness.R b/modules/local/gatk/gatk_to_fitness/templates/gatk_to_fitness.R similarity index 100% rename from modules/local/gatk/templates/gatk_to_fitness.R rename to modules/local/gatk/gatk_to_fitness/templates/gatk_to_fitness.R diff --git a/modules/local/gatk/saturationmutagenesis/environment.yml b/modules/local/gatk/saturationmutagenesis/environment.yml new file mode 100644 index 0000000..be64e16 --- /dev/null +++ b/modules/local/gatk/saturationmutagenesis/environment.yml @@ -0,0 +1,7 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::gatk4=4.6.2.0 + - bioconda::samtools=1.21 + - conda-forge::java-1.7.0-openjdk-conda-aarch64=1.7.0.261 diff --git a/modules/local/gatk/saturationmutagenesis.nf b/modules/local/gatk/saturationmutagenesis/main.nf similarity index 100% rename from modules/local/gatk/saturationmutagenesis.nf rename to modules/local/gatk/saturationmutagenesis/main.nf diff --git a/modules/local/visualization/counts_heatmap/environment.yml b/modules/local/visualization/counts_heatmap/environment.yml new file mode 100644 index 0000000..1b0726d --- /dev/null +++ b/modules/local/visualization/counts_heatmap/environment.yml @@ -0,0 +1,15 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::bioconductor-biostrings=2.74.0 + - conda-forge::r-base=4.4.1 + - conda-forge::r-biocmanager=1.30.25 + - conda-forge::r-dplyr=1.1.4 + - conda-forge::r-ggplot2=3.5.1 + - conda-forge::r-reshape2=1.4.4 + - conda-forge::r-scales=1.3.0 + - conda-forge::r-stringr=1.5.1 + - conda-forge::r-tidyr=1.3.1 + - conda-forge::r-tidyverse=2.0.0 + - conda-forge::r-zoo=1.8_12 diff --git a/modules/local/visualization/counts_heatmap/main.nf b/modules/local/visualization/counts_heatmap/main.nf new file mode 100644 index 0000000..f12043a --- /dev/null +++ b/modules/local/visualization/counts_heatmap/main.nf @@ -0,0 +1,30 @@ +process VISUALIZATION_COUNTS_HEATMAP { + tag "$meta.id" + label 'process_single' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' + ? 'community.wave.seqera.io/library/bioconductor-biostrings_r-base_r-biocmanager_r-dplyr_pruned:ce2ba7ad7f6e7f2c' + : 'community.wave.seqera.io/library/bioconductor-biostrings_r-base_r-biocmanager_r-dplyr_pruned:0fd2e39a5bf2ecaa' }" + + input: + tuple val(meta), path(variantCounts_for_heatmaps) + val min_counts + + output: + tuple val(meta), path("counts_heatmap.pdf"), emit: counts_heatmap + path "versions.yml", emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + template 'counts_heatmap.R' + + stub: + """ + touch counts_heatmap.pdf + echo "VISUALIZATION_COUNTS_HEATMAP:" > versions.yml + echo " stub-version: 0.0.0" >> versions.yml + """ +} diff --git a/modules/local/visualization/templates/counts_heatmap.R b/modules/local/visualization/counts_heatmap/templates/counts_heatmap.R similarity index 100% rename from modules/local/visualization/templates/counts_heatmap.R rename to modules/local/visualization/counts_heatmap/templates/counts_heatmap.R diff --git a/modules/local/visualization/counts_per_cov/environment.yml b/modules/local/visualization/counts_per_cov/environment.yml new file mode 100644 index 0000000..1b0726d --- /dev/null +++ b/modules/local/visualization/counts_per_cov/environment.yml @@ -0,0 +1,15 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::bioconductor-biostrings=2.74.0 + - conda-forge::r-base=4.4.1 + - conda-forge::r-biocmanager=1.30.25 + - conda-forge::r-dplyr=1.1.4 + - conda-forge::r-ggplot2=3.5.1 + - conda-forge::r-reshape2=1.4.4 + - conda-forge::r-scales=1.3.0 + - conda-forge::r-stringr=1.5.1 + - conda-forge::r-tidyr=1.3.1 + - conda-forge::r-tidyverse=2.0.0 + - conda-forge::r-zoo=1.8_12 diff --git a/modules/local/visualization/counts_per_cov/main.nf b/modules/local/visualization/counts_per_cov/main.nf new file mode 100644 index 0000000..687ffc5 --- /dev/null +++ b/modules/local/visualization/counts_per_cov/main.nf @@ -0,0 +1,30 @@ +process VISUALIZATION_COUNTS_PER_COV { + tag "$meta.id" + label 'process_single' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' + ? 'community.wave.seqera.io/library/bioconductor-biostrings_r-base_r-biocmanager_r-dplyr_pruned:ce2ba7ad7f6e7f2c' + : 'community.wave.seqera.io/library/bioconductor-biostrings_r-base_r-biocmanager_r-dplyr_pruned:0fd2e39a5bf2ecaa' }" + + input: + tuple val(meta), path(variantCounts_for_heatmaps) + val min_counts + + output: + tuple val(meta), path("counts_per_cov_heatmap.pdf"), emit: counts_per_cov_heatmap + path "versions.yml", emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + template 'counts_per_cov_heatmap.R' + + stub: + """ + touch counts_per_cov_heatmap.pdf + echo "VISUALIZATION_COUNTS_PER_COV:" > versions.yml + echo " stub-version: 0.0.0" >> versions.yml + """ +} diff --git a/modules/local/visualization/templates/counts_per_cov_heatmap.R b/modules/local/visualization/counts_per_cov/templates/counts_per_cov_heatmap.R similarity index 100% rename from modules/local/visualization/templates/counts_per_cov_heatmap.R rename to modules/local/visualization/counts_per_cov/templates/counts_per_cov_heatmap.R diff --git a/modules/local/visualization/global_pos_biases_counts/environment.yml b/modules/local/visualization/global_pos_biases_counts/environment.yml new file mode 100644 index 0000000..1b0726d --- /dev/null +++ b/modules/local/visualization/global_pos_biases_counts/environment.yml @@ -0,0 +1,15 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::bioconductor-biostrings=2.74.0 + - conda-forge::r-base=4.4.1 + - conda-forge::r-biocmanager=1.30.25 + - conda-forge::r-dplyr=1.1.4 + - conda-forge::r-ggplot2=3.5.1 + - conda-forge::r-reshape2=1.4.4 + - conda-forge::r-scales=1.3.0 + - conda-forge::r-stringr=1.5.1 + - conda-forge::r-tidyr=1.3.1 + - conda-forge::r-tidyverse=2.0.0 + - conda-forge::r-zoo=1.8_12 diff --git a/modules/local/visualization/global_pos_biases_counts/main.nf b/modules/local/visualization/global_pos_biases_counts/main.nf new file mode 100644 index 0000000..25c1f83 --- /dev/null +++ b/modules/local/visualization/global_pos_biases_counts/main.nf @@ -0,0 +1,33 @@ +process VISUALIZATION_GLOBAL_POS_BIASES_COUNTS { + tag "$meta.id" + label 'process_single' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' + ? 'community.wave.seqera.io/library/bioconductor-biostrings_r-base_r-biocmanager_r-dplyr_pruned:ce2ba7ad7f6e7f2c' + : 'community.wave.seqera.io/library/bioconductor-biostrings_r-base_r-biocmanager_r-dplyr_pruned:0fd2e39a5bf2ecaa' }" + + input: + tuple val(meta), path(variantCounts_filtered_by_library) + path aa_seq + val sliding_window_size + + output: + tuple val(meta), path("rolling_counts.pdf"), emit: rolling_counts + tuple val(meta), path("rolling_counts_per_cov.pdf"), emit: rolling_counts_per_cov + path "versions.yml", emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + template 'global_position_biases_counts_and_counts_per_cov.R' + + stub: + """ + touch rolling_counts.pdf + touch rolling_counts_per_cov.pdf + echo "VISUALIZATION_COUNTS_HEATMAP:" > versions.yml + echo " stub-version: 0.0.0" >> versions.yml + """ +} diff --git a/modules/local/visualization/templates/global_position_biases_counts_and_counts_per_cov.R b/modules/local/visualization/global_pos_biases_counts/templates/global_position_biases_counts_and_counts_per_cov.R similarity index 100% rename from modules/local/visualization/templates/global_position_biases_counts_and_counts_per_cov.R rename to modules/local/visualization/global_pos_biases_counts/templates/global_position_biases_counts_and_counts_per_cov.R diff --git a/modules/local/visualization/global_pos_biases_cov/environment.yml b/modules/local/visualization/global_pos_biases_cov/environment.yml new file mode 100644 index 0000000..1b0726d --- /dev/null +++ b/modules/local/visualization/global_pos_biases_cov/environment.yml @@ -0,0 +1,15 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::bioconductor-biostrings=2.74.0 + - conda-forge::r-base=4.4.1 + - conda-forge::r-biocmanager=1.30.25 + - conda-forge::r-dplyr=1.1.4 + - conda-forge::r-ggplot2=3.5.1 + - conda-forge::r-reshape2=1.4.4 + - conda-forge::r-scales=1.3.0 + - conda-forge::r-stringr=1.5.1 + - conda-forge::r-tidyr=1.3.1 + - conda-forge::r-tidyverse=2.0.0 + - conda-forge::r-zoo=1.8_12 diff --git a/modules/local/visualization/global_pos_biases_cov/main.nf b/modules/local/visualization/global_pos_biases_cov/main.nf new file mode 100644 index 0000000..ff70191 --- /dev/null +++ b/modules/local/visualization/global_pos_biases_cov/main.nf @@ -0,0 +1,32 @@ +process VISUALIZATION_GLOBAL_POS_BIASES_COV { + tag "$meta.id" + label 'process_single' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' + ? 'community.wave.seqera.io/library/bioconductor-biostrings_r-base_r-biocmanager_r-dplyr_pruned:ce2ba7ad7f6e7f2c' + : 'community.wave.seqera.io/library/bioconductor-biostrings_r-base_r-biocmanager_r-dplyr_pruned:0fd2e39a5bf2ecaa' }" + + input: + tuple val(meta), path(variantCounts_filtered_by_library) + path aa_seq + val sliding_window_size + val aimed_cov + + output: + tuple val(meta), path("rolling_coverage.pdf"), emit: rolling_coverage + path "versions.yml", emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + template 'global_position_biases_cov.R' + + stub: + """ + touch rolling_coverage.pdf + echo "VISUALIZATION_COUNTS_HEATMAP:" > versions.yml + echo " stub-version: 0.0.0" >> versions.yml + """ +} diff --git a/modules/local/visualization/templates/global_position_biases_cov.R b/modules/local/visualization/global_pos_biases_cov/templates/global_position_biases_cov.R similarity index 100% rename from modules/local/visualization/templates/global_position_biases_cov.R rename to modules/local/visualization/global_pos_biases_cov/templates/global_position_biases_cov.R diff --git a/modules/local/visualization/logdiff/environment.yml b/modules/local/visualization/logdiff/environment.yml new file mode 100644 index 0000000..1b0726d --- /dev/null +++ b/modules/local/visualization/logdiff/environment.yml @@ -0,0 +1,15 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::bioconductor-biostrings=2.74.0 + - conda-forge::r-base=4.4.1 + - conda-forge::r-biocmanager=1.30.25 + - conda-forge::r-dplyr=1.1.4 + - conda-forge::r-ggplot2=3.5.1 + - conda-forge::r-reshape2=1.4.4 + - conda-forge::r-scales=1.3.0 + - conda-forge::r-stringr=1.5.1 + - conda-forge::r-tidyr=1.3.1 + - conda-forge::r-tidyverse=2.0.0 + - conda-forge::r-zoo=1.8_12 diff --git a/modules/local/visualization/logdiff/main.nf b/modules/local/visualization/logdiff/main.nf new file mode 100644 index 0000000..ee9f7df --- /dev/null +++ b/modules/local/visualization/logdiff/main.nf @@ -0,0 +1,31 @@ +process VISUALIZATION_LOGDIFF { + tag "$meta.id" + label 'process_single' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' + ? 'community.wave.seqera.io/library/bioconductor-biostrings_r-base_r-biocmanager_r-dplyr_pruned:ce2ba7ad7f6e7f2c' + : 'community.wave.seqera.io/library/bioconductor-biostrings_r-base_r-biocmanager_r-dplyr_pruned:0fd2e39a5bf2ecaa' }" + + input: + tuple val(meta), path(library_completed_variantCounts) + + output: + tuple val(meta), path("logdiff_plot.pdf"), emit: logdiff_plot + tuple val(meta), path("logdiff_varying_bases.pdf"), emit: logdiff_varying_bases + path "versions.yml", emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + template 'logdiff.R' + + stub: + """ + touch logdiff_plot.pdf + touch logdiff_varying_bases.pdf + echo "VISUALIZATION_COUNTS_HEATMAP:" > versions.yml + echo " stub-version: 0.0.0" >> versions.yml + """ +} diff --git a/modules/local/visualization/templates/logdiff.R b/modules/local/visualization/logdiff/templates/logdiff.R similarity index 100% rename from modules/local/visualization/templates/logdiff.R rename to modules/local/visualization/logdiff/templates/logdiff.R diff --git a/modules/local/visualization/seqdepth/environment.yml b/modules/local/visualization/seqdepth/environment.yml new file mode 100644 index 0000000..1b0726d --- /dev/null +++ b/modules/local/visualization/seqdepth/environment.yml @@ -0,0 +1,15 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::bioconductor-biostrings=2.74.0 + - conda-forge::r-base=4.4.1 + - conda-forge::r-biocmanager=1.30.25 + - conda-forge::r-dplyr=1.1.4 + - conda-forge::r-ggplot2=3.5.1 + - conda-forge::r-reshape2=1.4.4 + - conda-forge::r-scales=1.3.0 + - conda-forge::r-stringr=1.5.1 + - conda-forge::r-tidyr=1.3.1 + - conda-forge::r-tidyverse=2.0.0 + - conda-forge::r-zoo=1.8_12 diff --git a/modules/local/visualization/seqdepth/main.nf b/modules/local/visualization/seqdepth/main.nf new file mode 100644 index 0000000..7c482dc --- /dev/null +++ b/modules/local/visualization/seqdepth/main.nf @@ -0,0 +1,29 @@ +process VISUALIZATION_SEQDEPTH { + tag "$meta.id" + label 'process_high' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' + ? 'community.wave.seqera.io/library/bioconductor-biostrings_r-base_r-biocmanager_r-dplyr_pruned:ce2ba7ad7f6e7f2c' + : 'community.wave.seqera.io/library/bioconductor-biostrings_r-base_r-biocmanager_r-dplyr_pruned:0fd2e39a5bf2ecaa' }" + + input: + tuple val(meta), path(variantCounts_filtered_by_library) + path possible_mutations + val min_counts + + output: + tuple val(meta), path("SeqDepth.pdf"), emit: SeqDepth + path "versions.yml", emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + template 'SeqDepth_simulation.R' + + stub: + """ + touch SeqDepth.pdf + """ +} diff --git a/modules/local/visualization/templates/SeqDepth_simulation.R b/modules/local/visualization/seqdepth/templates/SeqDepth_simulation.R similarity index 100% rename from modules/local/visualization/templates/SeqDepth_simulation.R rename to modules/local/visualization/seqdepth/templates/SeqDepth_simulation.R diff --git a/modules/local/visualization/visualization.nf b/modules/local/visualization/visualization.nf deleted file mode 100644 index e2cd4eb..0000000 --- a/modules/local/visualization/visualization.nf +++ /dev/null @@ -1,190 +0,0 @@ -process VISUALIZATION_COUNTS_PER_COV { - tag "$meta.id" - label 'process_single' - - conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' - ? 'community.wave.seqera.io/library/bioconductor-biostrings_r-base_r-biocmanager_r-dplyr_pruned:ce2ba7ad7f6e7f2c' - : 'community.wave.seqera.io/library/bioconductor-biostrings_r-base_r-biocmanager_r-dplyr_pruned:0fd2e39a5bf2ecaa' }" - - input: - tuple val(meta), path(variantCounts_for_heatmaps) - val min_counts - - output: - tuple val(meta), path("counts_per_cov_heatmap.pdf"), emit: counts_per_cov_heatmap - path "versions.yml", emit: versions - - when: - task.ext.when == null || task.ext.when - - script: - template 'counts_per_cov_heatmap.R' - - stub: - """ - touch counts_per_cov_heatmap.pdf - echo "VISUALIZATION_COUNTS_PER_COV:" > versions.yml - echo " stub-version: 0.0.0" >> versions.yml - """ -} - -process VISUALIZATION_COUNTS_HEATMAP { - tag "$meta.id" - label 'process_single' - - conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' - ? 'community.wave.seqera.io/library/bioconductor-biostrings_r-base_r-biocmanager_r-dplyr_pruned:ce2ba7ad7f6e7f2c' - : 'community.wave.seqera.io/library/bioconductor-biostrings_r-base_r-biocmanager_r-dplyr_pruned:0fd2e39a5bf2ecaa' }" - - input: - tuple val(meta), path(variantCounts_for_heatmaps) - val min_counts - - output: - tuple val(meta), path("counts_heatmap.pdf"), emit: counts_heatmap - path "versions.yml", emit: versions - - when: - task.ext.when == null || task.ext.when - - script: - template 'counts_heatmap.R' - - stub: - """ - touch counts_heatmap.pdf - echo "VISUALIZATION_COUNTS_HEATMAP:" > versions.yml - echo " stub-version: 0.0.0" >> versions.yml - """ -} - -process VISUALIZATION_GLOBAL_POS_BIASES_COUNTS { - tag "$meta.id" - label 'process_single' - - conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' - ? 'community.wave.seqera.io/library/bioconductor-biostrings_r-base_r-biocmanager_r-dplyr_pruned:ce2ba7ad7f6e7f2c' - : 'community.wave.seqera.io/library/bioconductor-biostrings_r-base_r-biocmanager_r-dplyr_pruned:0fd2e39a5bf2ecaa' }" - - input: - tuple val(meta), path(variantCounts_filtered_by_library) - path aa_seq - val sliding_window_size - - output: - tuple val(meta), path("rolling_counts.pdf"), emit: rolling_counts - tuple val(meta), path("rolling_counts_per_cov.pdf"), emit: rolling_counts_per_cov - path "versions.yml", emit: versions - - when: - task.ext.when == null || task.ext.when - - script: - template 'global_position_biases_counts_and_counts_per_cov.R' - - stub: - """ - touch rolling_counts.pdf - touch rolling_counts_per_cov.pdf - echo "VISUALIZATION_COUNTS_HEATMAP:" > versions.yml - echo " stub-version: 0.0.0" >> versions.yml - """ -} - -process VISUALIZATION_GLOBAL_POS_BIASES_COV { - tag "$meta.id" - label 'process_single' - - conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' - ? 'community.wave.seqera.io/library/bioconductor-biostrings_r-base_r-biocmanager_r-dplyr_pruned:ce2ba7ad7f6e7f2c' - : 'community.wave.seqera.io/library/bioconductor-biostrings_r-base_r-biocmanager_r-dplyr_pruned:0fd2e39a5bf2ecaa' }" - - input: - tuple val(meta), path(variantCounts_filtered_by_library) - path aa_seq - val sliding_window_size - val aimed_cov - - output: - tuple val(meta), path("rolling_coverage.pdf"), emit: rolling_coverage - path "versions.yml", emit: versions - - when: - task.ext.when == null || task.ext.when - - script: - template 'global_position_biases_cov.R' - - stub: - """ - touch rolling_coverage.pdf - echo "VISUALIZATION_COUNTS_HEATMAP:" > versions.yml - echo " stub-version: 0.0.0" >> versions.yml - """ -} - -process VISUALIZATION_LOGDIFF { - tag "$meta.id" - label 'process_single' - - conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' - ? 'community.wave.seqera.io/library/bioconductor-biostrings_r-base_r-biocmanager_r-dplyr_pruned:ce2ba7ad7f6e7f2c' - : 'community.wave.seqera.io/library/bioconductor-biostrings_r-base_r-biocmanager_r-dplyr_pruned:0fd2e39a5bf2ecaa' }" - - input: - tuple val(meta), path(library_completed_variantCounts) - - output: - tuple val(meta), path("logdiff_plot.pdf"), emit: logdiff_plot - tuple val(meta), path("logdiff_varying_bases.pdf"), emit: logdiff_varying_bases - path "versions.yml", emit: versions - - when: - task.ext.when == null || task.ext.when - - script: - template 'logdiff.R' - - stub: - """ - touch logdiff_plot.pdf - touch logdiff_varying_bases.pdf - echo "VISUALIZATION_COUNTS_HEATMAP:" > versions.yml - echo " stub-version: 0.0.0" >> versions.yml - """ -} - -process VISUALIZATION_SEQDEPTH { - tag "$meta.id" - label 'process_high' - - conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' - ? 'community.wave.seqera.io/library/bioconductor-biostrings_r-base_r-biocmanager_r-dplyr_pruned:ce2ba7ad7f6e7f2c' - : 'community.wave.seqera.io/library/bioconductor-biostrings_r-base_r-biocmanager_r-dplyr_pruned:0fd2e39a5bf2ecaa' }" - - input: - tuple val(meta), path(variantCounts_filtered_by_library) - path possible_mutations - val min_counts - - output: - tuple val(meta), path("SeqDepth.pdf"), emit: SeqDepth - path "versions.yml", emit: versions - - when: - task.ext.when == null || task.ext.when - - script: - template 'SeqDepth_simulation.R' - - stub: - """ - touch SeqDepth.pdf - """ -} diff --git a/nextflow.config b/nextflow.config index a954088..0975f17 100644 --- a/nextflow.config +++ b/nextflow.config @@ -25,16 +25,6 @@ params { max_multiqc_email_size = '25.MB' multiqc_methods_description = null - min_counts = 3 - mutagenesis_type = 'nnk' - run_seqdepth = false - reading_frame = null - custom_codon_library = '/NULL' - sliding_window_size = 10 - aimed_cov = 100 - fitness = false - dimsum = false - // Boilerplate options outdir = null publish_dir_mode = 'copy' @@ -42,7 +32,7 @@ params { email_on_fail = null plaintext_email = false monochrome_logs = false - hook_url = null + hook_url = System.getenv('HOOK_URL') help = false help_full = false show_hidden = false @@ -101,9 +91,20 @@ profiles { shifter.enabled = false charliecloud.enabled = false apptainer.enabled = false - process.containerOptions = '-u $(id -u):$(id -g)' + docker.runOptions = '-u $(id -u):$(id -g)' + } + arm64 { + process.arch = 'arm64' + // TODO https://github.com/nf-core/modules/issues/6694 + // For now if you're using arm64 you have to use wave for the sake of the maintainers + // wave profile + apptainer.ociAutoPull = true + singularity.ociAutoPull = true + wave.enabled = true + wave.freeze = true + wave.strategy = 'conda,container' } - arm { + emulate_amd64 { docker.runOptions = '-u $(id -u):$(id -g) --platform=linux/amd64' } singularity { @@ -165,65 +166,21 @@ profiles { apptainer.runOptions = '--nv' singularity.runOptions = '--nv' } - local { - process { - withLabel:process_single { - cpus = 4 - memory = 8.GB - time = '6h' - } - withLabel:process_low { - cpus = 4 - memory = 8.GB - time = '6h' - } - withLabel:process_medium { - cpus = 4 - memory = 8.GB - time = '6h' - } - withLabel:process_high { - cpus = 4 - memory = 8.GB - time = '6h' - } - withLabel:process_long { - cpus = 4 - memory = 8.GB - time = '6h' - } - withLabel:process_high_memory { - cpus = 4 - memory = 8.GB - time = '6h' - } - } - } - lowcpu { - process { - // default for all processes when this profile is active - cpus = 1 - - // override resource labels defined (e.g., in base.config) - withLabel: process_single { cpus = 1 } - withLabel: process_low { cpus = 1 } - withLabel: process_medium { cpus = 1 } - withLabel: process_high { cpus = 1 } - withLabel: process_long { cpus = 1 } - withLabel: process_high_memory { cpus = 1 } - - // anything not labeled gets also 1 CPU - withName: /.*/ { cpus = 1 } - } - } test { includeConfig 'conf/test.config' } test_full { includeConfig 'conf/test_full.config' } } +// Load nf-core custom profiles from different institutions + // If params.custom_config_base is set AND either the NXF_OFFLINE environment variable is not set or params.custom_config_base is a local path, the nfcore_custom.config file from the specified base path is included. // Load nf-core/deepmutscan custom profiles from different institutions. includeConfig params.custom_config_base && (!System.getenv('NXF_OFFLINE') || !params.custom_config_base.startsWith('http')) ? "${params.custom_config_base}/nfcore_custom.config" : "/dev/null" + +// Load nf-core/deepmutscan custom profiles from different institutions. +// TODO nf-core: Optionally, you can add a pipeline-specific nf-core config at https://github.com/nf-core/configs +// includeConfig params.custom_config_base && (!System.getenv('NXF_OFFLINE') || !params.custom_config_base.startsWith('http')) ? "${params.custom_config_base}/pipeline/deepmutscan.config" : "/dev/null" + // Set default registry for Apptainer, Docker, Podman, Charliecloud and Singularity independent of -profile // Will not be used unless Apptainer / Docker / Podman / Charliecloud / Singularity are enabled // Set to your registry if you have a mirror of containers @@ -248,14 +205,14 @@ env { } // Set bash options -process.shell = """\ -bash - -set -e # Exit if a tool returns a non-zero status/exit code -set -u # Treat unset variables and parameters as an error -set -o pipefail # Returns the status of the last command to exit with a non-zero status or zero if all successfully execute -set -C # No clobber - prevent output redirection from overwriting files. -""" +process.shell = [ + "bash", + "-C", // No clobber - prevent output redirection from overwriting files. + "-e", // Exit if a tool returns a non-zero status/exit code + "-u", // Treat unset variables and parameters as an error + "-o", // Returns the status of the last command to exit.. + "pipefail" // ..with a non-zero status or zero if all successfully execute +] // Disable process selector warnings by default. Use debug profile to enable warnings. nextflow.enable.configProcessNamesValidation = false @@ -279,8 +236,6 @@ dag { manifest { name = 'nf-core/deepmutscan' - author = """Benjamin Wehnert & Max Stammnitz""" // The author field is deprecated from Nextflow version 24.10.0, use contributors instead - author = """Benjamin Wehnert & Max Stammnitz""" // The author field is deprecated from Nextflow version 24.10.0, use contributors instead contributors = [ // TODO nf-core: Update the field with the details of the contributors to your pipeline. New with Nextflow version 24.10.0 [ @@ -296,46 +251,19 @@ manifest { description = """Until now, most Deep Mutational Scanning (DMS) experiments relied on variant-specific barcoded libraries for sequencing. This method enabled DMS on large proteins and led to many great publications. Recently, efforts have increased to make use of the classic and more simple random fragmentation-based short-read sequencing (“shotgun-sequencing”). This saves time and money and due to its simpler experimental design is less prone to mistakes. dmscore handles the essential computational steps, processing the raw FASTQ files and generating a count table of variants. Along the way, it provides multiple QC metrics, enabling users to quickly evaluate the success of their experimental setup.""" mainScript = 'main.nf' defaultBranch = 'master' - nextflowVersion = '!>=24.04.2' + nextflowVersion = '!>=25.04.0' version = '1.0.0' doi = '' } // Nextflow plugins plugins { - id 'nf-schema@2.3.0' // Validation of pipeline parameters and creation of an input channel from a sample sheet + id 'nf-schema@2.5.1' // Validation of pipeline parameters and creation of an input channel from a sample sheet } validation { defaultIgnoreParams = ["genomes"] monochromeLogs = params.monochrome_logs - help { - enabled = true - command = "nextflow run nf-core/deepmutscan -profile --input samplesheet.csv --outdir " - fullParameter = "help_full" - showHiddenParameter = "show_hidden" - beforeText = """ --\033[2m----------------------------------------------------\033[0m- - \033[0;32m,--.\033[0;30m/\033[0;32m,-.\033[0m -\033[0;34m ___ __ __ __ ___ \033[0;32m/,-._.--~\'\033[0m -\033[0;34m |\\ | |__ __ / ` / \\ |__) |__ \033[0;33m} {\033[0m -\033[0;34m | \\| | \\__, \\__/ | \\ |___ \033[0;32m\\`-._,-`-,\033[0m - \033[0;32m`._,._,\'\033[0m -\033[0;35m nf-core/deepmutscan ${manifest.version}\033[0m --\033[2m----------------------------------------------------\033[0m- -""" - afterText = """${manifest.doi ? "\n* The pipeline\n" : ""}${manifest.doi.tokenize(",").collect { " https://doi.org/${it.trim().replace('https://doi.org/','')}"}.join("\n")}${manifest.doi ? "\n" : ""} -* The nf-core framework - https://doi.org/10.1038/s41587-020-0439-x - -* Software dependencies - https://github.com/nf-core/deepmutscan/blob/master/CITATIONS.md -""" - } - summary { - beforeText = validation.help.beforeText - afterText = validation.help.afterText - } } // Load modules.config for DSL2 module specific options diff --git a/subworkflows/local/calculatefitness.nf b/subworkflows/local/calculatefitness.nf index 367e92d..463d205 100644 --- a/subworkflows/local/calculatefitness.nf +++ b/subworkflows/local/calculatefitness.nf @@ -3,13 +3,13 @@ IMPORT MODULES ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ -include { MERGE_COUNTS } from '../../modules/local/fitness/merge_counts' -include { EXPDESIGN_FITNESS } from '../../modules/local/fitness/fitness_experimental_design' -include { FIND_SYNONYMOUS_MUTATION } from '../../modules/local/fitness/find_synonymous_mutation' -include { FITNESS_CALCULATION } from '../../modules/local/fitness/fitness_standard' -include { FITNESS_QC } from '../../modules/local/fitness/fitness_standard' -include { FITNESS_HEATMAP } from '../../modules/local/fitness/fitness_standard' -include { RUN_DIMSUM } from '../../modules/local/fitness/run_dimsum' +include { MERGE_COUNTS } from '../../modules/local/fitness/merge_counts/main' +include { EXPDESIGN_FITNESS } from '../../modules/local/fitness/fitness_experimental_design/main' +include { FIND_SYNONYMOUS_MUTATION } from '../../modules/local/fitness/find_synonymous_mutation/main' +include { FITNESS_CALCULATION } from '../../modules/local/fitness/fitness_calculation/main' +include { FITNESS_QC } from '../../modules/local/fitness/fitness_QC/main' +include { FITNESS_HEATMAP } from '../../modules/local/fitness/fitness_heatmap/main' +include { RUN_DIMSUM } from '../../modules/local/fitness/run_dimsum/main' /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/tests/default.nf.test.snap b/tests/default.nf.test.snap new file mode 100644 index 0000000..57ce47d --- /dev/null +++ b/tests/default.nf.test.snap @@ -0,0 +1,23 @@ +{ + "-profile test": { + "content": [ + { + "Workflow": { + "nf-core/deepmutscan": "v1.0.0" + } + }, + [ + "pipeline_info", + "pipeline_info/nf_core_deepmutscan_software_mqc_versions.yml" + ], + [ + + ] + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.4" + }, + "timestamp": "2026-03-10T19:59:48.552161" + } +} \ No newline at end of file diff --git a/workflows/deepmutscan.nf b/workflows/deepmutscan.nf index 761fc8a..ea0b02a 100644 --- a/workflows/deepmutscan.nf +++ b/workflows/deepmutscan.nf @@ -7,19 +7,19 @@ include { FASTQC } from '../modules/nf-core/fastqc/main' include { MULTIQC } from '../modules/nf-core/multiqc/main' include { BWA_INDEX } from '../modules/nf-core/bwa/index/main' include { BWA_MEM } from '../modules/nf-core/bwa/mem/main' -include { BAMFILTER_DMS } from '../modules/local/bamprocessing/bamfilteringdms' -include { PREMERGE } from '../modules/local/bamprocessing/premerge' -include { GATK_SATURATIONMUTAGENESIS } from '../modules/local/gatk/saturationmutagenesis' -include { DMSANALYSIS_AASEQ } from '../modules/local/dmsanalysis/aaseq' -include { DMSANALYSIS_POSSIBLE_MUTATIONS } from '../modules/local/dmsanalysis/possiblemutations' -include { DMSANALYSIS_PROCESS_GATK } from '../modules/local/dmsanalysis/processgatk' -include { VISUALIZATION_COUNTS_PER_COV } from '../modules/local/visualization/visualization' -include { VISUALIZATION_COUNTS_HEATMAP } from '../modules/local/visualization/visualization' -include { VISUALIZATION_GLOBAL_POS_BIASES_COUNTS } from '../modules/local/visualization/visualization' -include { VISUALIZATION_GLOBAL_POS_BIASES_COV } from '../modules/local/visualization/visualization' -include { VISUALIZATION_LOGDIFF } from '../modules/local/visualization/visualization' -include { VISUALIZATION_SEQDEPTH } from '../modules/local/visualization/visualization' -include { GATK_GATKTOFITNESS } from '../modules/local/gatk/gatktofitness' +include { BAMFILTER_DMS } from '../modules/local/bamprocessing/bam_filter/main' +include { PREMERGE } from '../modules/local/bamprocessing/premerge/main' +include { GATK_SATURATIONMUTAGENESIS } from '../modules/local/gatk/saturationmutagenesis/main' +include { DMSANALYSIS_AASEQ } from '../modules/local/dmsanalysis/aa_seq/main' +include { DMSANALYSIS_POSSIBLE_MUTATIONS } from '../modules/local/dmsanalysis/possible_mutations/main' +include { DMSANALYSIS_PROCESS_GATK } from '../modules/local/dmsanalysis/process_gatk/main' +include { VISUALIZATION_COUNTS_PER_COV } from '../modules/local/visualization/counts_per_cov/main' +include { VISUALIZATION_COUNTS_HEATMAP } from '../modules/local/visualization/counts_heatmap/main' +include { VISUALIZATION_GLOBAL_POS_BIASES_COUNTS } from '../modules/local/visualization/global_pos_biases_counts/main' +include { VISUALIZATION_GLOBAL_POS_BIASES_COV } from '../modules/local/visualization/global_pos_biases_cov/main' +include { VISUALIZATION_LOGDIFF } from '../modules/local/visualization/logdiff/main' +include { VISUALIZATION_SEQDEPTH } from '../modules/local/visualization/seqdepth/main' +include { GATK_GATKTOFITNESS } from '../modules/local/gatk/gatk_to_fitness/main' include { CALCULATEFITNESS } from '../subworkflows/local/calculatefitness'