diff --git a/.github/workflows/nextflow-lint.yml b/.github/workflows/nextflow-lint.yml new file mode 100644 index 000000000..7c7109a7a --- /dev/null +++ b/.github/workflows/nextflow-lint.yml @@ -0,0 +1,17 @@ +name: Nextflow strict syntax lint +on: + pull_request: + push: + branches: [master, dev] + +jobs: + lint: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: Install Nextflow + uses: nf-core/setup-nextflow@v2 + + - name: Nextflow strict syntax lint + run: nextflow lint -o concise -exclude nf-test.config . diff --git a/.github/workflows/nf-test-arm.yml b/.github/workflows/nf-test-arm.yml index dce87d0c9..0101132b4 100644 --- a/.github/workflows/nf-test-arm.yml +++ b/.github/workflows/nf-test-arm.yml @@ -51,6 +51,8 @@ jobs: NFT_VER: ${{ env.NFT_VER }} # Skip sentieon tests - no ARM containers available SKIP_SENTIEON: true + # Skip parabricks tests - requires NVIDIA GPU + SKIP_PARABRICKS: true with: max_shards: 14 @@ -81,7 +83,7 @@ jobs: - isMain: false profile: "singularity" NXF_VER: - - "25.04.0" + - "25.04.3" - "latest-everything" env: NXF_ANSI_LOG: false @@ -101,8 +103,10 @@ jobs: NXF_VERSION: ${{ matrix.NXF_VER }} # Skip sentieon tests - no ARM containers available SKIP_SENTIEON: true + # Skip parabricks tests - requires NVIDIA GPU + SKIP_PARABRICKS: true with: - profile: ${{ matrix.profile }},${{ matrix.archProfile }} + profile: test,${{ matrix.profile }},${{ matrix.archProfile }} shard: ${{ matrix.shard }} total_shards: ${{ env.TOTAL_SHARDS }} diff --git a/.github/workflows/nf-test-gpu.yml b/.github/workflows/nf-test-gpu.yml new file mode 100644 index 000000000..1b3c80aa5 --- /dev/null +++ b/.github/workflows/nf-test-gpu.yml @@ -0,0 +1,125 @@ +name: Run GPU nf-tests +on: + push: + branches: + - dev + pull_request: + release: + types: [published] + workflow_dispatch: + inputs: + runners: + description: "Runners to test on" + type: string + default: "gpu" + +# Cancel if a newer run is started +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true + +env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + # renovate: datasource=github-releases depName=askimed/nf-test versioning=semver + NFT_VER: "0.9.3" + NXF_ANSI_LOG: false + NXF_SINGULARITY_CACHEDIR: ${{ github.workspace }}/.singularity + NXF_SINGULARITY_LIBRARYDIR: ${{ github.workspace }}/.singularity + +jobs: + get-shards: + runs-on: + - runs-on=${{ github.run_id }}-nf-test-get-shards-gpu + - runner=2cpu-linux-x64 + name: "Get Shards" + outputs: + shard: ${{ steps.set-shards.outputs.shard }} + total_shards: ${{ steps.set-shards.outputs.total_shards }} + steps: + - name: Check out pipeline code + uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4 + with: + fetch-depth: 0 + + - name: run nf-test-shard action + id: set-shards + uses: ./.github/actions/get-shards + env: + NFT_VER: ${{ env.NFT_VER }} + with: + tags: "gpu" + max_shards: 2 + + - name: Set outputs + id: set-outputs + run: | + echo "shard=${{ steps.set-shards.outputs.shard }}" >> $GITHUB_ENV + echo "total_shards=${{ steps.set-shards.outputs.total_shards }}" >> $GITHUB_ENV + + nf-test-gpu: + needs: [get-shards] + runs-on: "runs-on=${{ github.run_id }}/family=g5.2xlarge/image=ubuntu24-gpu-x64" + name: "GPU Test | ${{ matrix.profile }} | ${{ matrix.shard }} | ${{ matrix.NXF_VER }} | ${{ matrix.filters }}" + env: + NXF_VER: ${{ matrix.NXF_VER }} + + # Only run on push if this is the nf-core dev branch (merged PRs) + # and number of shards is greater than 0 + if: | + needs.get-shards.outputs.total_shards > 0 && + ( + github.event_name != 'push' || + ( github.event_name == 'push' && github.repository == 'nf-core/rnaseq' ) + ) + strategy: + fail-fast: false + matrix: + profile: [docker, singularity] + shard: ${{ fromJson(needs.get-shards.outputs.shard) }} + NXF_VER: + - "25.04.3" + filters: [pipeline] + + steps: + - name: Check out pipeline code + uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4 + with: + fetch-depth: 0 + + - name: Test CUDA + run: | + nvidia-smi -L + + - name: Run nf-test Action + uses: ./.github/actions/nf-test + with: + profile: test_gpu,${{ matrix.profile }} + shard: ${{ matrix.shard }} + total_shards: ${{ needs.get-shards.outputs.total_shards }} + filters: ${{ matrix.filters }} + tags: "gpu" + + confirm-pass-gpu: + runs-on: + - runs-on=${{ github.run_id }}-confirm-pass + - runner=2cpu-linux-x64 + needs: [nf-test-gpu] + if: always() + steps: + - name: One or more tests failed + if: ${{ contains(needs.*.result, 'failure') }} + run: exit 1 + + - name: One or more tests cancelled + if: ${{ contains(needs.*.result, 'cancelled') }} + run: exit 1 + + - name: All tests ok + if: ${{ contains(needs.*.result, 'success') }} + run: exit 0 + + - name: debug-print + if: always() + run: | + echo "toJSON(needs) = ${{ toJSON(needs) }}" + echo "toJSON(needs.*.result) = ${{ toJSON(needs.*.result) }}" diff --git a/.github/workflows/nf-test.yml b/.github/workflows/nf-test.yml index bf979f23e..358f9c3b1 100644 --- a/.github/workflows/nf-test.yml +++ b/.github/workflows/nf-test.yml @@ -45,8 +45,10 @@ jobs: NFT_VER: ${{ env.NFT_VER }} # Skip sentieon tests on fork PRs where secrets are not available SKIP_SENTIEON: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name != 'nf-core/rnaseq' }} + # Skip parabricks/GPU tests on CPU runners + SKIP_PARABRICKS: "true" with: - max_shards: 14 + max_shards: 20 - name: debug run: | @@ -74,7 +76,7 @@ jobs: - isMain: false profile: "singularity" NXF_VER: - - "25.04.0" + - "25.04.3" - "latest-everything" env: NXF_ANSI_LOG: false @@ -98,8 +100,10 @@ jobs: NXF_VERSION: ${{ matrix.NXF_VER }} # Skip sentieon tests on fork PRs where secrets are not available SKIP_SENTIEON: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name != 'nf-core/rnaseq' }} + # Skip parabricks/GPU tests on CPU runners + SKIP_PARABRICKS: "true" with: - profile: ${{ matrix.profile }} + profile: test,${{ matrix.profile }} shard: ${{ matrix.shard }} total_shards: ${{ env.TOTAL_SHARDS }} diff --git a/.nf-core.yml b/.nf-core.yml index 2ac9d4f07..6a2ab7116 100644 --- a/.nf-core.yml +++ b/.nf-core.yml @@ -1,5 +1,6 @@ lint: actions_nf_test: false + nf_test_content: false files_exist: - conf/modules.config files_unchanged: @@ -22,4 +23,4 @@ template: name: rnaseq org: nf-core outdir: . - version: 3.22.2 + version: 3.23.0 diff --git a/CHANGELOG.md b/CHANGELOG.md index a20471eed..98eb250db 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,97 @@ 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). +## [[3.23.0](https://github.com/nf-core/rnaseq/releases/tag/3.23.0)] - 2026-02-27 + +### Credits + +Special thanks to the following for their contributions to the release: + +- [Albert Palleja](https://github.com/apalleja) +- [Chase Mateusiak](https://github.com/cmatKhan) +- [Christian Mertes](https://github.com/c-mertes) +- [Elad Herz](https://github.com/EladH1) +- [Ezra Greenberg](https://github.com/egreenberg7) +- [Gary Burnett](https://github.com/gburnett-nvidia) +- [Isaac Virshup](https://github.com/ivirshup) +- [Juliana Assis](https://github.com/Juassis) +- [Marine Cambon](https://github.com/marccamb) +- [Matthias Zepper](https://github.com/MatthiasZepper) +- [Sebastian Schulz](https://github.com/sebschulz1) + +### Enhancements and fixes + +- [PR #1616](https://github.com/nf-core/rnaseq/pull/1616) - Add Sylph for contamination detection. +- [PR #1663](https://github.com/nf-core/rnaseq/pull/1663) - Bump version after release 3.22.2 +- [PR #1664](https://github.com/nf-core/rnaseq/pull/1664) - Add support for multiple rRNA removal tools (`--ribo_removal_tool`): SortMeRNA (default), Bowtie2, and RiboDetector; enable BBSplit MultiQC reporting; add paired-end read grouping in MultiQC +- [PR #1665](https://github.com/nf-core/rnaseq/pull/1665) - Bulk update modules/subworkflows; replace CUSTOM_GETCHROMSIZES with SAMTOOLS_FAIDX; update RSEQC modules with Wave containers for ARM compatibility; update ARM containers for RSEQC and UMITOOLS +- [PR #1667](https://github.com/nf-core/rnaseq/pull/1667) - Enhance RSEM output exports and remove unnecessary star_rsem check +- [PR #1669](https://github.com/nf-core/rnaseq/pull/1669) - Enable SeqKit stats MultiQC module for RiboDetector rRNA removal +- [PR #1672](https://github.com/nf-core/rnaseq/pull/1672) - Document star_rsem STAR aligner settings and customization +- [PR #1677](https://github.com/nf-core/rnaseq/pull/1677) - Apply Nextflow 25 strict syntax fixes +- [PR #1685](https://github.com/nf-core/rnaseq/pull/1685) - Add GPU-accelerated STAR alignment and mark duplicates using NVIDIA Parabricks rna_fq2bam (`--use_parabricks_star`) +- [PR #1686](https://github.com/nf-core/rnaseq/pull/1686) - Add support for uncompressed FASTQ input files ([#1343](https://github.com/nf-core/rnaseq/issues/1343)) +- [PR #1687](https://github.com/nf-core/rnaseq/pull/1687) - Fix PREPARE_GENOME tests: use single aligner values, correct aligner assignments for index-specific tests, add Kallisto test, remove ineffective Sentieon tests, use file-names-only snapshots for all non-deterministic indices (STAR, Salmon, Kallisto, RSEM, HISAT2) +- [PR #1688](https://github.com/nf-core/rnaseq/pull/1688) - Significantly improved prokaryotic RNA-seq support: new `-profile prokaryotic` for bacterial/archaeal data with Bowtie2+Salmon alignment, GFFREAD transcript extraction for CDS-only annotations, and automatic STAR CDS configuration. We would like to thank [Juliana Assis](https://github.com/Juassis), [Sebastian Schulz](https://github.com/sebschulz1), [Albert Palleja](https://github.com/apalleja) and [Marine Cambon](https://github.com/marccamb) for their [recommendations and extensive testing](https://github.com/nf-core/rnaseq/issues/1512). +- [PR #1689](https://github.com/nf-core/rnaseq/pull/1689) - Migrate to topic-based version reporting for nf-core modules/subworkflows and local modules +- [PR #1694](https://github.com/nf-core/rnaseq/pull/1694) - Replace local iGenomes STAR modules with nf-core module aliases and config-based container overrides +- [PR #1696](https://github.com/nf-core/rnaseq/pull/1696) - Fix offline mode by skipping `igenomes_base` validation when `NXF_OFFLINE=true` ([#1690](https://github.com/nf-core/rnaseq/issues/1690)) +- [PR #1697](https://github.com/nf-core/rnaseq/pull/1697) - Add tximport processing for RSEM outputs: gene/transcript length matrices, length-scaled counts, SummarizedExperiment objects, and DESeq2 QC using length-scaled counts ([#1320](https://github.com/nf-core/rnaseq/issues/1320)). **Note for `--aligner star_rsem` users:** the merged count and TPM files at the output root (e.g. `rsem.merged.gene_counts.tsv`) are now produced by tximport, matching the Salmon/Kallisto pathway. The previous RSEM merge script outputs are preserved in the `rsem_merge_counts/` subdirectory. +- [PR #1700](https://github.com/nf-core/rnaseq/pull/1700) - Add FastQC step after BBSplit/rRNA filtering to provide QC metrics on reads used for alignment ([#1276](https://github.com/nf-core/rnaseq/issues/1276)) +- [PR #1704](https://github.com/nf-core/rnaseq/pull/1704) - Include single-library samples in merged fastq output when `--save_merged_fastq` is set ([#748](https://github.com/nf-core/rnaseq/issues/748)) +- [PR #1707](https://github.com/nf-core/rnaseq/pull/1707) - Enable UMI deduplication with `--aligner star_rsem` ([#829](https://github.com/nf-core/rnaseq/issues/829)) +- [PR #1708](https://github.com/nf-core/rnaseq/pull/1708) - Allow `--skip_alignment` with a pre-built `--salmon_index` or `--kallisto_index` without requiring `--fasta` ([#1706](https://github.com/nf-core/rnaseq/issues/1706)) +- [PR #1709](https://github.com/nf-core/rnaseq/pull/1709) - Update metro map renders with nf-metro v0.4.7; add source `.mmd` file and regeneration instructions to CONTRIBUTING.md +- [PR #1711](https://github.com/nf-core/rnaseq/pull/1711) - Scope GPU container flags (`--gpus all`, `--nv`) to `process_gpu` tasks only via per-process `containerOptions`, fixing failures on CPU-only nodes in mixed clusters ([#1710](https://github.com/nf-core/rnaseq/issues/1710)) +- [PR #1713](https://github.com/nf-core/rnaseq/pull/1713) - Add optional `seq_platform` and `seq_center` samplesheet columns for per-sample BAM read group tags (`PL`, `CN`). Read group assembly is handled via ext.args config closures rather than module inputs. Per-sample `seq_center` overrides the global `--seq_center` parameter. Based on [PR #1701](https://github.com/nf-core/rnaseq/pull/1701) by [@c-mertes](https://github.com/c-mertes). +- [PR #1714](https://github.com/nf-core/rnaseq/pull/1714) - Re-render metro map with nf-metro v0.5.2: improved label spacing, smaller file icon font, and section alignment fix +- [PR #1715](https://github.com/nf-core/rnaseq/pull/1715) - Bump version to 3.23.0 ahead of release +- [PR #1716](https://github.com/nf-core/rnaseq/pull/1716) - Add informative error when Salmon fails to produce strandedness output for auto-strandedness samples +- [PR #1718](https://github.com/nf-core/rnaseq/pull/1718) - Add `--seq_platform` parameter for global sequencing platform BAM read group tag, by analogy with `--seq_center` +- [PR #1719](https://github.com/nf-core/rnaseq/pull/1719) - Docs and changelog cleanup: move descriptions above `
` blocks in output.md, add missing software dependencies, sort arm.config alphabetically +- [PR #1724](https://github.com/nf-core/rnaseq/pull/1724) - Update umitools modules: remove patches, add conda channel prefixes, update Wave containers +- [PR #1725](https://github.com/nf-core/rnaseq/pull/1725) - Refine .nftignore patterns to reinstate tx2gene MD5 checking, remove redundant UNTAR version collection +- [PR #1728](https://github.com/nf-core/rnaseq/pull/1728) - Re-render metro map with nf-metro v0.5.4: bolder section labels and number badges for improved visual hierarchy, increased vertical spacing between stacked sections, synchronized animation timing +- [PR #1730](https://github.com/nf-core/rnaseq/pull/1730) - Bump Nextflow from 25.04.0 to 25.04.3 in CI to fix `conda create --mkdir` failure ([nextflow-io/nextflow#5947](https://github.com/nextflow-io/nextflow/issues/5947)) +- [PR #1734](https://github.com/nf-core/rnaseq/pull/1734) - Compose `test_prokaryotic` profile on `prokaryotic` to remove duplicated settings +- [PR #1735](https://github.com/nf-core/rnaseq/pull/1735) - Code quality improvements: replace opaque tuple indexing with named destructuring, rename `ch_dummy_file`, move metro map docs, align GPU CI workflow with other workflows +- [PR #1736](https://github.com/nf-core/rnaseq/pull/1736) - Load prokaryotic config in nf-test instead of duplicating params in each test +- [PR #1738](https://github.com/nf-core/rnaseq/pull/1738) - Fix iGenomes STAR conda: use `bioconda` channel for x86_64, reserve `seqera` channel for ARM only + +### Parameters + +| Old parameter | New parameter | +| ------------- | ---------------------------- | +| | `--ribo_removal_tool` | +| | `--sylph_db` | +| | `--sylph_taxonomy` | +| | `--gffread_transcript_fasta` | +| | `--extra_bowtie2_align_args` | +| | `--use_parabricks_star` | + +> **NB:** Parameter has been **added** if just the new parameter information is present. + +### Profiles + +| Profile | Description | +| ------------- | ------------------------------------------------------ | +| `prokaryotic` | Settings optimized for bacterial/archaeal RNA-seq data | + +### Software dependencies + +| Dependency | Old version | New version | +| ----------- | ----------- | ----------- | +| `bowtie2` | | 2.5.4 | +| `seqkit` | | 2.9.0 | +| `sylph` | | 0.7.0 | +| `sylph-tax` | | 1.2.0 | + +> **NB:** Dependency has been **updated** if both old and new version information is present. +> +> **NB:** Dependency has been **added** if just the new version information is present. +> +> **NB:** Dependency has been **removed** if new version information isn't present. + ## [[3.22.2](https://github.com/nf-core/rnaseq/releases/tag/3.22.2)] - 2025-12-11 ### Credits diff --git a/CITATIONS.md b/CITATIONS.md index 5eaeea7f8..79a31ca13 100644 --- a/CITATIONS.md +++ b/CITATIONS.md @@ -88,6 +88,10 @@ > Kovaka S, Zimin AV, Pertea GM, Razaghi R, Salzberg SL, Pertea M. Transcriptome assembly from long-read RNA-seq alignments with StringTie2 Genome Biol. 2019 Dec 16;20(1):278. doi: 10.1186/s13059-019-1910-1. PubMed PMID: 31842956; PubMed Central PMCID: PMC6912988. +- [Sylph](https://pubmed.ncbi.nlm.nih.gov/39379646/) + + > Shaw J, Yu YW. Rapid species-level metagenome profiling and containment estimation with sylph. Nat Biotechnol. 2025 Aug;43(8):1348-1359. doi: 10.1038/s41587-024-02412-y. Epub 2024 Oct 8. PMID: 39379646; PMCID: PMC12339375. + - [Trim Galore!](https://www.bioinformatics.babraham.ac.uk/projects/trim_galore/) - [UMI-tools](https://pubmed.ncbi.nlm.nih.gov/28100584/) diff --git a/README.md b/README.md index 79619a722..2dce7bae1 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ [![GitHub Actions Linting Status](https://github.com/nf-core/rnaseq/actions/workflows/linting.yml/badge.svg)](https://github.com/nf-core/rnaseq/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/rnaseq/results)[![Cite with Zenodo](http://img.shields.io/badge/DOI-10.5281/zenodo.1400710-1073c8?labelColor=000000)](https://doi.org/10.5281/zenodo.1400710) [![nf-test](https://img.shields.io/badge/unit_tests-nf--test-337ab7.svg)](https://www.nf-test.com) -[![Nextflow](https://img.shields.io/badge/version-%E2%89%A525.04.0-green?style=flat&logo=nextflow&logoColor=white&color=%230DC09D&link=https%3A%2F%2Fnextflow.io)](https://www.nextflow.io/) +[![Nextflow](https://img.shields.io/badge/version-%E2%89%A525.04.3-green?style=flat&logo=nextflow&logoColor=white&color=%230DC09D&link=https%3A%2F%2Fnextflow.io)](https://www.nextflow.io/) [![nf-core template version](https://img.shields.io/badge/nf--core_template-3.5.1-green?style=flat&logo=nfcore&logoColor=white&color=%2324B064&link=https%3A%2F%2Fnf-co.re)](https://github.com/nf-core/tools/releases/tag/3.5.1) [![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/) @@ -49,7 +49,9 @@ 3. [`dupRadar`](https://bioconductor.org/packages/release/bioc/html/dupRadar.html) 4. [`Preseq`](http://smithlabresearch.org/software/preseq/) 5. [`DESeq2`](https://bioconductor.org/packages/release/bioc/html/DESeq2.html) - 6. [`Kraken2`](https://ccb.jhu.edu/software/kraken2/) -> [`Bracken`](https://ccb.jhu.edu/software/bracken/) on unaligned sequences; _optional_ + 6. Contamination detection on unaligned sequences; _optional_ + 1. [`Kraken2`](https://ccb.jhu.edu/software/kraken2/) -> [`Bracken`](https://ccb.jhu.edu/software/bracken/) + 2. [`Sylph`](https://sylph-docs.github.io/) 15. Pseudoalignment and quantification ([`Salmon`](https://combine-lab.github.io/salmon/) or ['Kallisto'](https://pachterlab.github.io/kallisto/); _optional_) 16. Present QC for raw read, alignment, gene biotype, sample similarity, and strand-specificity checks ([`MultiQC`](http://multiqc.info/), [`R`](https://www.r-project.org/)) @@ -69,13 +71,13 @@ First, prepare a samplesheet with your input data that looks as follows: **samplesheet.csv**: ```csv -sample,fastq_1,fastq_2,strandedness -CONTROL_REP1,AEG588A1_S1_L002_R1_001.fastq.gz,AEG588A1_S1_L002_R2_001.fastq.gz,auto -CONTROL_REP1,AEG588A1_S1_L003_R1_001.fastq.gz,AEG588A1_S1_L003_R2_001.fastq.gz,auto -CONTROL_REP1,AEG588A1_S1_L004_R1_001.fastq.gz,AEG588A1_S1_L004_R2_001.fastq.gz,auto +sample,fastq_1,fastq_2,strandedness,seq_platform +CONTROL_REP1,AEG588A1_S1_L002_R1_001.fastq.gz,AEG588A1_S1_L002_R2_001.fastq.gz,auto,ILLUMINA +CONTROL_REP1,AEG588A1_S1_L003_R1_001.fastq.gz,AEG588A1_S1_L003_R2_001.fastq.gz,auto,ILLUMINA +CONTROL_REP1,AEG588A1_S1_L004_R1_001.fastq.gz,AEG588A1_S1_L004_R2_001.fastq.gz,auto,ILLUMINA ``` -Each row represents a fastq file (single-end) or a pair of fastq files (paired end). Rows with the same sample identifier are considered technical replicates and merged automatically. The strandedness refers to the library preparation and will be automatically inferred if set to `auto`. +Each row represents a fastq file (single-end) or a pair of fastq files (paired end). Rows with the same sample identifier are considered technical replicates and merged automatically. The strandedness refers to the library preparation and will be automatically inferred if set to `auto`. The `seq_platform` column is optional; for a single platform across all samples, use the `--seq_platform` parameter instead. The pipeline supports a two-step reprocessing workflow using BAM files from previous runs. Run initially with `--save_align_intermeds` to generate a samplesheet with BAM paths, then reprocess using `--skip_alignment` for efficient downstream analysis without repeating expensive alignment steps. This feature is designed specifically for pipeline-generated BAMs. diff --git a/assets/metro_map.mmd b/assets/metro_map.mmd new file mode 100644 index 000000000..2bfdd7223 --- /dev/null +++ b/assets/metro_map.mmd @@ -0,0 +1,151 @@ +%%metro title: nf-core/rnaseq +%%metro logo: examples/nf-core-rnaseq_logo_dark.png +%%metro style: dark +%%metro file: fastq_in | FASTQ +%%metro file: report_final | HTML +%%metro file: report_quant | HTML +%%metro file: report_bowtie2 | HTML +%%metro line: star_rsem | Aligner: STAR, Quantification: RSEM | #0570b0 +%%metro line: star_salmon | Aligner: STAR, Quantification: Salmon (default) | #2db572 +%%metro line: hisat2 | Aligner: HISAT2, Quantification: None | #f5c542 +%%metro line: bowtie2_salmon | Aligner: Bowtie2, Quantification: Salmon | #ff8c00 +%%metro line: pseudo_salmon | Pseudo-aligner: Salmon, Quantification: Salmon | #e63946 +%%metro line: pseudo_kallisto | Pseudo-aligner: Kallisto, Quantification: Kallisto | #7b2d3b +%%metro legend: bl + +graph LR + subgraph preprocessing [Pre-processing] + %%metro exit: right | star_salmon, star_rsem, hisat2, bowtie2_salmon + %%metro exit: bottom | pseudo_salmon, pseudo_kallisto + fastq_in[ ] + cat_fastq[cat FASTQ] + fastqc_raw[FastQC] + infer_strandedness[Infer Strand.] + umi_tools_extract[UMI-tools Extract] + fastp[fastp] + trimgalore[Trim Galore!] + fastqc_trimmed[FastQC] + bbsplit[BBSplit] + sortmerna[SortMeRNA] + ribodetector[RiboDetector] + fastqc_filtered[FastQC] + + fastq_in -->|pseudo_salmon,pseudo_kallisto,star_salmon,star_rsem,hisat2,bowtie2_salmon| cat_fastq + cat_fastq -->|pseudo_salmon,pseudo_kallisto,star_salmon,star_rsem,hisat2,bowtie2_salmon| fastqc_raw + fastqc_raw -->|pseudo_salmon,pseudo_kallisto,star_salmon,star_rsem,hisat2,bowtie2_salmon| infer_strandedness + infer_strandedness -->|pseudo_salmon,pseudo_kallisto,star_salmon,star_rsem,hisat2,bowtie2_salmon| umi_tools_extract + + umi_tools_extract -->|pseudo_salmon,pseudo_kallisto,star_salmon,star_rsem,hisat2,bowtie2_salmon| fastp + umi_tools_extract -->|pseudo_salmon,pseudo_kallisto,star_salmon,star_rsem,hisat2,bowtie2_salmon| trimgalore + fastp -->|pseudo_salmon,pseudo_kallisto,star_salmon,star_rsem,hisat2,bowtie2_salmon| fastqc_trimmed + trimgalore -->|pseudo_salmon,pseudo_kallisto,star_salmon,star_rsem,hisat2,bowtie2_salmon| fastqc_trimmed + + fastqc_trimmed -->|pseudo_salmon,pseudo_kallisto,star_salmon,star_rsem,hisat2,bowtie2_salmon| bbsplit + fastqc_trimmed -->|pseudo_salmon,pseudo_kallisto,star_salmon,star_rsem,hisat2,bowtie2_salmon| sortmerna + fastqc_trimmed -->|pseudo_salmon,pseudo_kallisto,star_salmon,star_rsem,hisat2,bowtie2_salmon| ribodetector + bbsplit -->|pseudo_salmon,pseudo_kallisto,star_salmon,star_rsem,hisat2,bowtie2_salmon| fastqc_filtered + sortmerna -->|pseudo_salmon,pseudo_kallisto,star_salmon,star_rsem,hisat2,bowtie2_salmon| fastqc_filtered + ribodetector -->|pseudo_salmon,pseudo_kallisto,star_salmon,star_rsem,hisat2,bowtie2_salmon| fastqc_filtered + end + + subgraph genome_align [Genome alignment & quantification] + %%metro entry: left | star_salmon, star_rsem, hisat2, bowtie2_salmon + %%metro exit: right | star_salmon, star_rsem + %%metro exit: right | hisat2 + star[STAR] + hisat2_align[HISAT2] + bowtie2_align[Bowtie2] + rsem[RSEM] + salmon_quant[Salmon] + umi_tools_dedup[UMI-tools Dedup] + tximport_ga[tximport] + summarized_exp_ga[Sum. Exp.] + multiqc_bowtie2[MultiQC] + report_bowtie2[ ] + _h1[hidden] + _h2[hidden] + _h3[hidden] + + star -->|star_rsem,star_salmon| umi_tools_dedup + hisat2_align -->|hisat2| umi_tools_dedup + bowtie2_align -->|bowtie2_salmon| umi_tools_dedup + umi_tools_dedup -->|star_rsem| rsem + umi_tools_dedup -->|star_salmon| salmon_quant + umi_tools_dedup -->|hisat2| _h1 + _h1 -->|hisat2| _h2 + _h2 -->|hisat2| _h3 + salmon_quant -->|star_salmon| tximport_ga + rsem -->|star_rsem| tximport_ga + tximport_ga -->|star_salmon,star_rsem| summarized_exp_ga + umi_tools_dedup -->|bowtie2_salmon| salmon_quant + salmon_quant -->|bowtie2_salmon| multiqc_bowtie2 + multiqc_bowtie2 -->|bowtie2_salmon| report_bowtie2 + end + + subgraph pseudo_align [Pseudo-alignment & quantification] + %%metro entry: left | pseudo_salmon, pseudo_kallisto + salmon_pseudo[Salmon] + kallisto[Kallisto] + tximport_pa[tximport] + summarized_exp_pa[Sum. Exp.] + multiqc_quant[MultiQC] + report_quant[ ] + + salmon_pseudo -->|pseudo_salmon| tximport_pa + kallisto -->|pseudo_kallisto| tximport_pa + tximport_pa -->|pseudo_salmon,pseudo_kallisto| summarized_exp_pa + summarized_exp_pa -->|pseudo_salmon,pseudo_kallisto| multiqc_quant + multiqc_quant -->|pseudo_salmon,pseudo_kallisto| report_quant + end + + subgraph postprocessing [Post-processing] + %%metro direction: TB + %%metro entry: left | star_salmon, star_rsem, hisat2 + %%metro exit: bottom | star_salmon, star_rsem, hisat2 + samtools[SAMtools] + picard[Picard] + bedtools[BEDTools] + bedgraph[bedGraphToBigWig] + stringtie[StringTie] + + samtools -->|star_salmon,star_rsem,hisat2| picard + picard -->|star_salmon,star_rsem,hisat2| bedtools + bedtools -->|star_salmon,star_rsem,hisat2| bedgraph + bedgraph -->|star_salmon,star_rsem,hisat2| stringtie + end + + subgraph qc_report [Quality control & reporting] + %%metro direction: RL + %%metro entry: top | star_salmon, star_rsem, hisat2 + rseqc[RSeQC] + preseq[Preseq] + qualimap[Qualimap] + dupradar[dupRadar] + featurecounts[featureCounts] + deseq2_pca[DESeq2 PCA] + kraken2[Kraken2/Bracken] + sylph[Sylph] + multiqc_final[MultiQC] + report_final[ ] + + rseqc -->|star_salmon,star_rsem,hisat2| preseq + preseq -->|star_salmon,star_rsem,hisat2| qualimap + qualimap -->|star_salmon,star_rsem,hisat2| dupradar + dupradar -->|star_salmon,star_rsem,hisat2| featurecounts + featurecounts -->|star_salmon,star_rsem,hisat2| deseq2_pca + deseq2_pca -->|star_salmon,star_rsem,hisat2| kraken2 + deseq2_pca -->|star_salmon,star_rsem,hisat2| sylph + kraken2 -->|star_salmon,star_rsem,hisat2| multiqc_final + sylph -->|star_salmon,star_rsem,hisat2| multiqc_final + multiqc_final -->|star_salmon,star_rsem,hisat2| report_final + end + + %% Inter-section edges + fastqc_filtered -->|star_salmon,star_rsem| star + fastqc_filtered -->|hisat2| hisat2_align + fastqc_filtered -->|bowtie2_salmon| bowtie2_align + fastqc_filtered -->|pseudo_salmon| salmon_pseudo + fastqc_filtered -->|pseudo_kallisto| kallisto + summarized_exp_ga -->|star_salmon,star_rsem| samtools + _h3 -->|hisat2| samtools + stringtie -->|star_salmon,star_rsem,hisat2| rseqc diff --git a/assets/schema_input.json b/assets/schema_input.json index b2f9cfad9..f985208f8 100644 --- a/assets/schema_input.json +++ b/assets/schema_input.json @@ -17,15 +17,15 @@ "type": "string", "format": "file-path", "exists": true, - "pattern": "^([\\S\\s]*\\/)?[^\\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\\s]*\\/)?[^\\s\\/]+\\.f(ast)?q(\\.gz)?$", + "errorMessage": "FastQ file for reads 1 must be provided, cannot contain spaces and must have extension '.fq', '.fastq', '.fq.gz' or '.fastq.gz'" }, "fastq_2": { "type": "string", "format": "file-path", "exists": true, - "pattern": "^([\\S\\s]*\\/)?[^\\s\\/]+\\.f(ast)?q\\.gz$", - "errorMessage": "FastQ file for reads 2 cannot contain spaces and must have extension '.fq.gz' or '.fastq.gz'" + "pattern": "^([\\S\\s]*\\/)?[^\\s\\/]+\\.f(ast)?q(\\.gz)?$", + "errorMessage": "FastQ file for reads 2 cannot contain spaces and must have extension '.fq', '.fastq', '.fq.gz' or '.fastq.gz'" }, "strandedness": { "type": "string", @@ -33,6 +33,18 @@ "enum": ["forward", "reverse", "unstranded", "auto"], "meta": ["strandedness"] }, + "seq_platform": { + "type": "string", + "pattern": "^\\S+$", + "meta": ["seq_platform"], + "errorMessage": "Sequencing platform must not contain spaces (e.g. 'ILLUMINA', 'ONT', 'PACBIO')" + }, + "seq_center": { + "type": "string", + "pattern": "^\\S+$", + "meta": ["seq_center"], + "errorMessage": "Sequencing center must not contain spaces. Use underscores instead (e.g. 'My_Center')" + }, "genome_bam": { "type": "string", "format": "file-path", diff --git a/conf/arm.config b/conf/arm.config index 7cc7a1c6e..5397a18f1 100644 --- a/conf/arm.config +++ b/conf/arm.config @@ -24,6 +24,14 @@ process { container = { workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/51/519a920dacc643078823740486c40d30b9f555c493217d9f72db04901350e009/data' : 'community.wave.seqera.io/library/bedtools:2.31.1--efd79503b8c63422' } } + withName: 'BOWTIE2_ALIGN' { + container = { workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/29/29c438a970ee8bbe74e5c9c0c97749f782b6248fa143fec47ad9655810eb7d66/data' : 'community.wave.seqera.io/library/bowtie2_htslib_samtools_pigz:709459bd9a8b8470' } + } + + withName: 'BOWTIE2_BUILD' { + container = { workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/29/29c438a970ee8bbe74e5c9c0c97749f782b6248fa143fec47ad9655810eb7d66/data' : 'community.wave.seqera.io/library/bowtie2_htslib_samtools_pigz:709459bd9a8b8470' } + } + withName: 'BRACKEN_BRACKEN' { container = { workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/64/648fd6bc2805481aa60db7ee9e37d41d7643eaaabd92f21bf1019f8b3f0879a6/data' : 'community.wave.seqera.io/library/bracken:3.1--0b6ab6dde7667f60' } } @@ -36,8 +44,8 @@ process { container = { workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/c1/c17acd739990ad12c06583f57b097014c2bde5a91d0977fd102864a82f95e136/data' : 'community.wave.seqera.io/library/python:3.12.2--0d47e6fe32e00784' } } - withName: 'CUSTOM_GETCHROMSIZES' { - container = { workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/b9/b993d5094fcf4fe7e5016b9118363a8e9dc1a48e35964e5f15465ba4a65739e9/data' : 'community.wave.seqera.io/library/htslib_samtools:1.21--1dcf014b5ab22a61' } + withName: 'CUSTOM_RSEMMERGECOUNTS' { + container = { workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/4a/4ad78019c37ff4ab22c0dff6ab1af655c6438562ef644d0323861a97971d7694/data' : 'community.wave.seqera.io/library/sed:4.7--978821297d2b6677' } } withName: 'CUSTOM_TX2GENE' { @@ -49,22 +57,22 @@ process { } withName: 'DUPRADAR' { - container = { workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/10/10141f8fd43964316d04214a5f7d99a62e11cdbab5bd2fcd4f7c3c06eca9f2f6/data' : 'community.wave.seqera.io/library/bioconductor-dupradar:1.32.0--f75495d6abf45328' } + container = { workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/58/58cd36c576f59bcda91f110eb5927cb90e2e9fd326a373f1b6bdf17927a3e66b/data' : 'community.wave.seqera.io/library/bioconductor-dupradar:1.38.0--1bca173c6feb9be3' } } withName: 'FASTP' { - container = { workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/5e/5e81afc0a786ea4806add944eed450ef880073abc374eb8ea9bcc2b33f6bec15/data' : 'community.wave.seqera.io/library/fastp:0.24.0--39cd59724a206814' } + container = { workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/ab/ab214410b13486d83d8c0c633360516bfdfe6864c665113827ae00cd3a5a7ffa/data' : 'community.wave.seqera.io/library/fastp:1.0.1--3881c4726b0be262' } } withName: 'FASTQC' { container = { workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/fd/fd39534bf298698cbe3ee4d4a6f1e73330ec4bca44c38dd9a4d06cb5ea838017/data' : 'community.wave.seqera.io/library/fastqc:0.12.1--df99cb252670875a' } } - withName: 'FQ_SUBSAMPLE' { + withName: 'FQ_LINT' { container = { workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/cb/cb160e49e56ddbf7d53ba1c8495d6f4880a3f811cc9993619b1e84e40f8ffb53/data' : 'community.wave.seqera.io/library/fq:0.12.0--256df3027a85ed7c' } } - withName: 'FQ_LINT' { + withName: 'FQ_SUBSAMPLE' { container = { workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/cb/cb160e49e56ddbf7d53ba1c8495d6f4880a3f811cc9993619b1e84e40f8ffb53/data' : 'community.wave.seqera.io/library/fq:0.12.0--256df3027a85ed7c' } } @@ -117,7 +125,7 @@ process { } withName: 'PICARD_MARKDUPLICATES' { - container = { workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/c0/c0d4bbb10417a70d137a28da09329d9f9fbdf964a1cfeda24b05b618cae6b16f/data' : 'community.wave.seqera.io/library/picard:3.1.1--c28da730a329ab3c' } + container = { workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/b8/b8a8ab76695cfbbe99c393bbec2ff68c58c5db8bab383606c94d91cf38700f52/data' : 'community.wave.seqera.io/library/picard:3.4.0--6f28fdc142d7e8d3' } } withName: 'PREPROCESS_TRANSCRIPTS_FASTA_GENCODE' { @@ -132,12 +140,12 @@ process { container = { workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/7a/7aa0998788d327c6e7104c2c1e7bea2e8bb8fb7076ec5de3fdab4027e501b9a9/data' : 'community.wave.seqera.io/library/qualimap:2.3--8375b60bba97a2a6' } } - withName: 'RSEM_CALCULATEEXPRESSION' { - container = { workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/eb/eb5a2993bc13825b1b2443f740248c56ce0730a29553683392ce6388b7a2afe3/data' : 'community.wave.seqera.io/library/rsem_star:0dc50db916f3de8f' } + withName: 'RIBODETECTOR' { + container = { workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/20/20ad75242a0e88feb6084c43fefb5ea1ef00c0bc8116f7b16a22bfdd5b4ba110/data' : 'community.wave.seqera.io/library/ribodetector:0.3.2--29dd32c0ba5af75b' } } - withName: 'RSEM_MERGE_COUNTS' { - container = { workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/4a/4ad78019c37ff4ab22c0dff6ab1af655c6438562ef644d0323861a97971d7694/data' : 'community.wave.seqera.io/library/sed:4.7--978821297d2b6677' } + withName: 'RSEM_CALCULATEEXPRESSION' { + container = { workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/eb/eb5a2993bc13825b1b2443f740248c56ce0730a29553683392ce6388b7a2afe3/data' : 'community.wave.seqera.io/library/rsem_star:0dc50db916f3de8f' } } withName: 'RSEM_PREPAREREFERENCE' { @@ -145,35 +153,35 @@ process { } withName: 'RSEQC_BAMSTAT' { - container = { workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/63/6306dc454d7a565c726e30b9da0b9070fc67555516a660c54e7baba365070b25/data' : 'community.wave.seqera.io/library/rseqc_r-base:092fef07cff0abfa' } + container = { workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/84/84ac084db749a953ac5441ae5dbd9f58d614a46349457c3d818bd35565263b0c/data' : 'community.wave.seqera.io/library/rseqc_r-base:b63499fe19f103fe' } } withName: 'RSEQC_INFEREXPERIMENT' { - container = { workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/63/6306dc454d7a565c726e30b9da0b9070fc67555516a660c54e7baba365070b25/data' : 'community.wave.seqera.io/library/rseqc_r-base:092fef07cff0abfa' } + container = { workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/84/84ac084db749a953ac5441ae5dbd9f58d614a46349457c3d818bd35565263b0c/data' : 'community.wave.seqera.io/library/rseqc_r-base:b63499fe19f103fe' } } withName: 'RSEQC_INNERDISTANCE' { - container = { workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/63/6306dc454d7a565c726e30b9da0b9070fc67555516a660c54e7baba365070b25/data' : 'community.wave.seqera.io/library/rseqc_r-base:092fef07cff0abfa' } + container = { workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/84/84ac084db749a953ac5441ae5dbd9f58d614a46349457c3d818bd35565263b0c/data' : 'community.wave.seqera.io/library/rseqc_r-base:b63499fe19f103fe' } } withName: 'RSEQC_JUNCTIONANNOTATION' { - container = { workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/63/6306dc454d7a565c726e30b9da0b9070fc67555516a660c54e7baba365070b25/data' : 'community.wave.seqera.io/library/rseqc_r-base:092fef07cff0abfa' } + container = { workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/84/84ac084db749a953ac5441ae5dbd9f58d614a46349457c3d818bd35565263b0c/data' : 'community.wave.seqera.io/library/rseqc_r-base:b63499fe19f103fe' } } withName: 'RSEQC_JUNCTIONSATURATION' { - container = { workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/63/6306dc454d7a565c726e30b9da0b9070fc67555516a660c54e7baba365070b25/data' : 'community.wave.seqera.io/library/rseqc_r-base:092fef07cff0abfa' } + container = { workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/84/84ac084db749a953ac5441ae5dbd9f58d614a46349457c3d818bd35565263b0c/data' : 'community.wave.seqera.io/library/rseqc_r-base:b63499fe19f103fe' } } withName: 'RSEQC_READDISTRIBUTION' { - container = { workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/63/6306dc454d7a565c726e30b9da0b9070fc67555516a660c54e7baba365070b25/data' : 'community.wave.seqera.io/library/rseqc_r-base:092fef07cff0abfa' } + container = { workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/84/84ac084db749a953ac5441ae5dbd9f58d614a46349457c3d818bd35565263b0c/data' : 'community.wave.seqera.io/library/rseqc_r-base:b63499fe19f103fe' } } withName: 'RSEQC_READDUPLICATION' { - container = { workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/63/6306dc454d7a565c726e30b9da0b9070fc67555516a660c54e7baba365070b25/data' : 'community.wave.seqera.io/library/rseqc_r-base:092fef07cff0abfa' } + container = { workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/84/84ac084db749a953ac5441ae5dbd9f58d614a46349457c3d818bd35565263b0c/data' : 'community.wave.seqera.io/library/rseqc_r-base:b63499fe19f103fe' } } withName: 'RSEQC_TIN' { - container = { workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/63/6306dc454d7a565c726e30b9da0b9070fc67555516a660c54e7baba365070b25/data' : 'community.wave.seqera.io/library/rseqc_r-base:092fef07cff0abfa' } + container = { workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/84/84ac084db749a953ac5441ae5dbd9f58d614a46349457c3d818bd35565263b0c/data' : 'community.wave.seqera.io/library/rseqc_r-base:b63499fe19f103fe' } } withName: 'SALMON_INDEX' { @@ -184,24 +192,44 @@ process { container = { workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/b8/b8e3bcb1daa42497d0159cd5ae3b6d164b4470a972dd72d9d10b365fa166e5a4/data' : 'community.wave.seqera.io/library/salmon:1.10.3--dc33937abc5bffd1' } } + withName: 'SAMTOOLS_FAIDX' { + container = { workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/ab/abd65f6320e645645364f938dfea81215575e1e7e10117fb3ab7590f826be1cf/data' : 'community.wave.seqera.io/library/htslib_samtools:1.22.1--fa13e94a15df63c6' } + } + + withName: 'SAMTOOLS_FASTQ' { + container = { workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/ab/abd65f6320e645645364f938dfea81215575e1e7e10117fb3ab7590f826be1cf/data' : 'community.wave.seqera.io/library/htslib_samtools:1.22.1--fa13e94a15df63c6' } + } + withName: 'SAMTOOLS_FLAGSTAT' { - container = { workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/b9/b993d5094fcf4fe7e5016b9118363a8e9dc1a48e35964e5f15465ba4a65739e9/data' : 'community.wave.seqera.io/library/htslib_samtools:1.21--1dcf014b5ab22a61' } + container = { workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/ab/abd65f6320e645645364f938dfea81215575e1e7e10117fb3ab7590f826be1cf/data' : 'community.wave.seqera.io/library/htslib_samtools:1.22.1--fa13e94a15df63c6' } } withName: 'SAMTOOLS_IDXSTATS' { - container = { workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/b9/b993d5094fcf4fe7e5016b9118363a8e9dc1a48e35964e5f15465ba4a65739e9/data' : 'community.wave.seqera.io/library/htslib_samtools:1.21--1dcf014b5ab22a61' } + container = { workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/ab/abd65f6320e645645364f938dfea81215575e1e7e10117fb3ab7590f826be1cf/data' : 'community.wave.seqera.io/library/htslib_samtools:1.22.1--fa13e94a15df63c6' } } withName: 'SAMTOOLS_INDEX' { - container = { workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/b9/b993d5094fcf4fe7e5016b9118363a8e9dc1a48e35964e5f15465ba4a65739e9/data' : 'community.wave.seqera.io/library/htslib_samtools:1.21--1dcf014b5ab22a61' } + container = { workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/ab/abd65f6320e645645364f938dfea81215575e1e7e10117fb3ab7590f826be1cf/data' : 'community.wave.seqera.io/library/htslib_samtools:1.22.1--fa13e94a15df63c6' } } withName: 'SAMTOOLS_SORT' { - container = { workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/b9/b993d5094fcf4fe7e5016b9118363a8e9dc1a48e35964e5f15465ba4a65739e9/data' : 'community.wave.seqera.io/library/htslib_samtools:1.21--1dcf014b5ab22a61' } + container = { workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/ab/abd65f6320e645645364f938dfea81215575e1e7e10117fb3ab7590f826be1cf/data' : 'community.wave.seqera.io/library/htslib_samtools:1.22.1--fa13e94a15df63c6' } } withName: 'SAMTOOLS_STATS' { - container = { workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/b9/b993d5094fcf4fe7e5016b9118363a8e9dc1a48e35964e5f15465ba4a65739e9/data' : 'community.wave.seqera.io/library/htslib_samtools:1.21--1dcf014b5ab22a61' } + container = { workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/ab/abd65f6320e645645364f938dfea81215575e1e7e10117fb3ab7590f826be1cf/data' : 'community.wave.seqera.io/library/htslib_samtools:1.22.1--fa13e94a15df63c6' } + } + + withName: 'SAMTOOLS_VIEW' { + container = { workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/ab/abd65f6320e645645364f938dfea81215575e1e7e10117fb3ab7590f826be1cf/data' : 'community.wave.seqera.io/library/htslib_samtools:1.22.1--fa13e94a15df63c6' } + } + + withName: 'SEQKIT_REPLACE' { + container = { workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/a1/a19938c385d9b87145624dcc476de3a1fe5b2f372c9452c615be8bf88b0a1846/data' : 'community.wave.seqera.io/library/seqkit:2.9.0--3511d9d9a6b1fd4c' } + } + + withName: 'SEQKIT_STATS' { + container = { workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/a1/a19938c385d9b87145624dcc476de3a1fe5b2f372c9452c615be8bf88b0a1846/data' : 'community.wave.seqera.io/library/seqkit:2.9.0--3511d9d9a6b1fd4c' } } withName: 'STAR_ALIGN' { @@ -224,6 +252,14 @@ process { container = { workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/a7/a7d1ef576617b9790973bc9d178c4ef136a52b6337260c536cff6cd68f103b45/data' : 'community.wave.seqera.io/library/bioconductor-summarizedexperiment:1.32.0--859858039875a2a5' } } + withName: 'SYLPH_PROFILE' { + container = { workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/c7/c7617c9c9d0cfab87c0a2d1acb560a8e7282a970831e91e746bd6a82b36b1fc1/data' : 'community.wave.seqera.io/library/sylph:0.7.0--faed05f1dba22ece' } + } + + withName: 'SYLPHTAX_TAXPROF' { + container = { workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/f9/f9846321f18e39e7ecbe83c3f9312de37b8d2ebe780d6b58a1b349ccdf97761b/data' : 'community.wave.seqera.io/library/sylph-tax:1.2.0--3d6760c629c922a4' } + } + withName: 'TRIMGALORE' { container = { workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/a1/a11701c614c04de6ca4a386f2bb63532826aeb7d98fd0d714a07a8db31ef5359/data' : 'community.wave.seqera.io/library/cutadapt_trim-galore_pigz:d0b730b6770575ef' } } @@ -245,15 +281,15 @@ process { } withName: 'UMITOOLS_DEDUP' { - container = { workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/54/546e768a27f61fb6f9eb4b283a18981f042dee406011c7d86173eb58186bbec4/data' : 'community.wave.seqera.io/library/umi_tools_python_matplotlib_scipy_pruned:8a60fc02f4d98e7d' } + container = { workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/a0/a025c43aae1e2cbb0bf7e5e5745ea75f2b7d30cd60c2e8a3108470a1ff7c8104/data' : 'community.wave.seqera.io/library/umi_tools_python_matplotlib_scipy_pruned:2577c112581dc42e' } } withName: 'UMITOOLS_EXTRACT' { - container = { workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/54/546e768a27f61fb6f9eb4b283a18981f042dee406011c7d86173eb58186bbec4/data' : 'community.wave.seqera.io/library/umi_tools_python_matplotlib_scipy_pruned:8a60fc02f4d98e7d' } + container = { workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/a0/a025c43aae1e2cbb0bf7e5e5745ea75f2b7d30cd60c2e8a3108470a1ff7c8104/data' : 'community.wave.seqera.io/library/umi_tools_python_matplotlib_scipy_pruned:2577c112581dc42e' } } withName: 'UMITOOLS_PREPAREFORRSEM' { - container = { workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/54/546e768a27f61fb6f9eb4b283a18981f042dee406011c7d86173eb58186bbec4/data' : 'community.wave.seqera.io/library/umi_tools_python_matplotlib_scipy_pruned:8a60fc02f4d98e7d' } + container = { workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/a0/a025c43aae1e2cbb0bf7e5e5745ea75f2b7d30cd60c2e8a3108470a1ff7c8104/data' : 'community.wave.seqera.io/library/umi_tools_python_matplotlib_scipy_pruned:2577c112581dc42e' } } withName: 'UNTAR' { diff --git a/conf/base.config b/conf/base.config index af1b693e4..e82ba5a3b 100644 --- a/conf/base.config +++ b/conf/base.config @@ -59,7 +59,7 @@ process { maxRetries = 2 } withLabel: process_gpu { - ext.use_gpu = { workflow.profile.contains('gpu') } - accelerator = { workflow.profile.contains('gpu') ? 1 : null } + accelerator = 1 + containerOptions = { params.gpu_container_options ?: (workflow.containerEngine in ['singularity', 'apptainer'] ? '--nv' : '--gpus all') } } } diff --git a/conf/igenomes_star.config b/conf/igenomes_star.config new file mode 100644 index 000000000..9bd227bcc --- /dev/null +++ b/conf/igenomes_star.config @@ -0,0 +1,19 @@ +/* + * Container/conda overrides for iGenomes STAR processes. + * Pins STAR 2.6.1d for compatibility with pre-built AWS iGenomes STAR indices. + * ARM overrides for these processes are in conf/arm.config. + */ +process { + withName: '.*STAR_ALIGN_IGENOMES' { + conda = 'bioconda::star=2.6.1d bioconda::samtools=1.21 conda-forge::gawk=5.1.0' + container = { workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/50/50bb64440689d5d7af4bf8ad1032f01aa4e1597e0bb1c82ee91e8cb43943283c/data' : + 'community.wave.seqera.io/library/star_samtools_gawk:79ca42311e583cdc' } + } + withName: 'STAR_GENOMEGENERATE_IGENOMES' { + conda = 'bioconda::star=2.6.1d bioconda::samtools=1.21 conda-forge::gawk=5.1.0' + container = { workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/50/50bb64440689d5d7af4bf8ad1032f01aa4e1597e0bb1c82ee91e8cb43943283c/data' : + 'community.wave.seqera.io/library/star_samtools_gawk:79ca42311e583cdc' } + } +} diff --git a/conf/prokaryotic.config b/conf/prokaryotic.config new file mode 100644 index 000000000..2525dee57 --- /dev/null +++ b/conf/prokaryotic.config @@ -0,0 +1,38 @@ +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Nextflow config file for prokaryotic RNA-seq analysis +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Optimized settings for bacterial and archaeal RNA-seq data. + + Use as follows: + nextflow run nf-core/rnaseq -profile prokaryotic, --fasta genome.fa --gtf annotation.gtf ... + +---------------------------------------------------------------------------------------- +*/ + +params { + config_profile_name = 'Prokaryotic profile' + config_profile_description = 'Settings optimized for prokaryotic (bacterial/archaeal) RNA-seq data' + + // Enable prokaryotic mode + prokaryotic = true + + // Use gffread for transcript extraction (handles CDS-only annotations) + gffread_transcript_fasta = true + + // Use Bowtie2 as the default aligner for prokaryotes + // Bowtie2 is the conventional choice for prokaryotic RNA-seq + // Users can override with --aligner star_salmon if preferred + aligner = 'bowtie2_salmon' + + // Use CDS for biotype QC (prokaryotic annotations use CDS, not exon) + featurecounts_feature_type = 'CDS' + + // Skip QC tools that assume eukaryotic features + skip_rseqc = true + skip_dupradar = true + skip_qualimap = true + + // Skip bigWig generation (Bowtie2 aligns to transcriptome, not genome) + skip_bigwig = true +} diff --git a/conf/test.config b/conf/test.config index 1b3bd5db8..d756193da 100644 --- a/conf/test.config +++ b/conf/test.config @@ -10,14 +10,6 @@ ---------------------------------------------------------------------------------------- */ -process { - resourceLimits = [ - cpus: 4, - memory: '15.GB', - time: '1.h' - ] -} - params { config_profile_name = 'Test profile' config_profile_description = 'Minimal test dataset to check pipeline function' @@ -42,9 +34,20 @@ params { umitools_bc_pattern = 'NNNN' } -// When using RSEM, remove warning from STAR whilst building tiny indices process { + // When using RSEM, remove warning from STAR whilst building tiny indices withName: 'RSEM_PREPAREREFERENCE_GENOME|SENTIEON_RSEMPREPAREREFERENCE_GENOME' { ext.args2 = "--genomeSAindexNbases 7" } + + // Add seeds for reproducibility in rRNA removal tools + withName: '.*:BOWTIE2_ALIGN$' { + ext.args = '--very-sensitive-local --seed 1 --reorder' + } + withName: '.*:BOWTIE2_ALIGN_PE$' { + ext.args = '--very-sensitive-local --seed 1 --reorder' + } + withName: '.*:RIBODETECTOR' { + ext.args = '--seed 1' + } } diff --git a/conf/test_prokaryotic.config b/conf/test_prokaryotic.config new file mode 100644 index 000000000..549b73c1b --- /dev/null +++ b/conf/test_prokaryotic.config @@ -0,0 +1,56 @@ +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Nextflow config file for running minimal prokaryotic tests +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Defines input files and everything required to run a fast and simple pipeline test + with prokaryotic (bacterial/archaeal) RNA-seq data. + + Use as follows: + nextflow run nf-core/rnaseq -profile test_prokaryotic, --outdir + + Note: test_prokaryotic composes on the prokaryotic profile (via nextflow.config), + so core prokaryotic settings are inherited automatically. + +---------------------------------------------------------------------------------------- +*/ + +process { + resourceLimits = [ + cpus: 4, + memory: '15.GB', + time: '1.h' + ] +} + +params { + config_profile_name = 'Test prokaryotic profile' + config_profile_description = 'Minimal prokaryotic test dataset to check pipeline function with bacterial/archaeal data' + + // Input data - Salmonella Typhimurium SL1344 + input = 'https://raw.githubusercontent.com/nf-core/test-datasets/rnaseq/samplesheet/prokaryotic/samplesheet_test.csv' + + // Genome references - Salmonella Typhimurium SL1344 (subset) + fasta = 'https://raw.githubusercontent.com/nf-core/test-datasets/rnaseq/reference/prokaryotic/SL1344_sub.fasta' + gff = 'https://raw.githubusercontent.com/nf-core/test-datasets/rnaseq/reference/prokaryotic/SL1344_sub.gff3' + gtf = null + transcript_fasta = null + additional_fasta = null + + // Skip steps not needed for minimal testing + skip_bbsplit = true + skip_preseq = true + skip_biotype_qc = true + skip_deseq2_qc = true + pseudo_aligner = null + min_trimmed_reads = 0 +} + +process { + // Add seeds for reproducibility in alignment + withName: '.*:BOWTIE2_ALIGN$' { + ext.args = '--very-sensitive-local --seed 1 --reorder' + } + withName: '.*:BOWTIE2_ALIGN_PE$' { + ext.args = '--very-sensitive-local --seed 1 --reorder' + } +} diff --git a/docs/dev/metro_map.md b/docs/dev/metro_map.md new file mode 100644 index 000000000..e4ee28fcc --- /dev/null +++ b/docs/dev/metro_map.md @@ -0,0 +1,35 @@ +# Metro map + +The pipeline overview metro map is generated from `assets/metro_map.mmd` using [nf-metro](https://github.com/pinin4fjords/nf-metro). If you add or rename pipeline steps, update the `.mmd` source and regenerate the images: + +```bash +pip install 'nf-metro>=0.5.4' cairosvg + +# Static SVG + PNG +nf-metro render assets/metro_map.mmd \ + -o docs/images/nf-core-rnaseq_metro_map_grey.svg \ + --theme light --x-spacing 60 --y-spacing 40 \ + --no-straight-diamonds \ + --logo docs/images/nf-core-rnaseq_logo_light.png + +python -c "import cairosvg; cairosvg.svg2png( + url='docs/images/nf-core-rnaseq_metro_map_grey.svg', + write_to='docs/images/nf-core-rnaseq_metro_map_grey.png', output_width=2265)" + +# Animated SVG (used in README) +nf-metro render assets/metro_map.mmd \ + -o docs/images/nf-core-rnaseq_metro_map_grey_animated.svg \ + --theme light --x-spacing 60 --y-spacing 40 --animate \ + --no-straight-diamonds \ + --logo docs/images/nf-core-rnaseq_logo_light.png + +# Copy static PNG to docs subdir +cp docs/images/nf-core-rnaseq_metro_map_grey.png \ + docs/usage/differential_expression_analysis/img/ + +# Ensure trailing newlines on SVGs (required by pre-commit) +for f in docs/images/nf-core-rnaseq_metro_map_grey.svg \ + docs/images/nf-core-rnaseq_metro_map_grey_animated.svg; do + sed -i '' -e '$a\' "$f" +done +``` diff --git a/docs/images/nf-core-rnaseq_metro_map_grey.png b/docs/images/nf-core-rnaseq_metro_map_grey.png index 79b4e2afc..146bab346 100644 Binary files a/docs/images/nf-core-rnaseq_metro_map_grey.png and b/docs/images/nf-core-rnaseq_metro_map_grey.png differ diff --git a/docs/images/nf-core-rnaseq_metro_map_grey.svg b/docs/images/nf-core-rnaseq_metro_map_grey.svg index 2de5cd2e3..c62e3d724 100644 --- a/docs/images/nf-core-rnaseq_metro_map_grey.svg +++ b/docs/images/nf-core-rnaseq_metro_map_grey.svg @@ -1,9103 +1,337 @@ - - - -image/svg+xml1catfastqSTAGE2. Genome alignment & quantification3. Pseudo-alignment & quantification1. Pre-processing4. Post-processing35412 - + + + + + + + +1 + + + +2 + + + +3 + + + +4 + + + +5 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +FASTQ + + + + + + + + + + + + + + + + + + + + + + + + +HTML + + + + + + + + + +HTML + + + + + + + + + + + + + + + + + + +HTML +STAR +SAMtools +RSeQC +HISAT2 +Bowtie2 +Salmon +Kallisto +cat FASTQ +UMI-tools Dedup +Picard +Preseq +tximport +FastQC +RSEM +BEDTools +Qualimap +Salmon +Sum. Exp. +Infer Strand. +tximport +bedGraphToBigWig +dupRadar +MultiQC +MultiQC +UMI-tools Extract +Sum. Exp. +StringTie +featureCounts +fastp +DESeq2 PCA +Trim Galore! +Kraken2/Bracken +FastQC +Sylph +BBSplit +SortMeRNA +MultiQC +RiboDetector +FastQC + + + +Aligner: STAR, Quantification: RSEM + +Aligner: STAR, Quantification: Salmon (default) + +Aligner: HISAT2, Quantification: None + +Aligner: Bowtie2, Quantification: Salmon + +Pseudo-aligner: Salmon, Quantification: Salmon + +Pseudo-aligner: Kallisto, Quantification: Kallisto +created with nf-metro v0.5.4 + diff --git a/docs/images/nf-core-rnaseq_metro_map_grey_animated.svg b/docs/images/nf-core-rnaseq_metro_map_grey_animated.svg index 8886dd962..c217ef23c 100644 --- a/docs/images/nf-core-rnaseq_metro_map_grey_animated.svg +++ b/docs/images/nf-core-rnaseq_metro_map_grey_animated.svg @@ -1,9355 +1,391 @@ - - - -image/svg+xml1catfastqSTAGE2. Genome alignment & quantification3. Pseudo-alignment & quantification1. Pre-processing4. Post-processing35412 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + +1 + + + +2 + + + +3 + + + +4 + + + +5 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +FASTQ + + + + + + + + + + + + + + + + + + + + + + + + +HTML + + + + + + + + + +HTML + + + + + + + + + + + + + + + + + + +HTML +STAR +SAMtools +RSeQC +HISAT2 +Bowtie2 +Salmon +Kallisto +cat FASTQ +UMI-tools Dedup +Picard +Preseq +tximport +FastQC +RSEM +BEDTools +Qualimap +Salmon +Sum. Exp. +Infer Strand. +tximport +bedGraphToBigWig +dupRadar +MultiQC +MultiQC +UMI-tools Extract +Sum. Exp. +StringTie +featureCounts +fastp +DESeq2 PCA +Trim Galore! +Kraken2/Bracken +FastQC +Sylph +BBSplit +SortMeRNA +MultiQC +RiboDetector +FastQC + + + +Aligner: STAR, Quantification: RSEM + +Aligner: STAR, Quantification: Salmon (default) + +Aligner: HISAT2, Quantification: None + +Aligner: Bowtie2, Quantification: Salmon + +Pseudo-aligner: Salmon, Quantification: Salmon + +Pseudo-aligner: Kallisto, Quantification: Kallisto +created with nf-metro v0.5.4 + diff --git a/docs/images/sylphtax-top-n-plot.png b/docs/images/sylphtax-top-n-plot.png new file mode 100644 index 000000000..1a0c6460e Binary files /dev/null and b/docs/images/sylphtax-top-n-plot.png differ diff --git a/docs/output.md b/docs/output.md index 04b9c71cd..2e8e878a8 100644 --- a/docs/output.md +++ b/docs/output.md @@ -29,10 +29,12 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d - [TrimGalore](#trimgalore) - [fastp](#fastp) - [BBSplit](#bbsplit) - - [SortMeRNA](#sortmerna) + - [rRNA removal](#rrna-removal) + - [FastQC (filtered)](#fastqc-filtered) - [Alignment and quantification](#alignment-and-quantification) - [STAR, Salmon and Kallisto](#star-salmon-and-kallisto) - [STAR via RSEM](#star-via-rsem) + - [Bowtie2 and Salmon (Prokaryotic)](#bowtie2-and-salmon-prokaryotic) - [HISAT2](#hisat2) - [Alignment post-processing](#alignment-post-processing) - [SAMtools](#samtools) @@ -57,6 +59,7 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d - [featureCounts](#featurecounts) - [DESeq2](#deseq2) - [Kraken2/Bracken](#kraken2bracken) + - [Sylph](#sylph) - [MultiQC](#multiqc) - [Pseudoalignment and quantification](#pseudoalignment-and-quantification) - [Pseudoalignment](#pseudoalignment) @@ -194,21 +197,82 @@ sarscov2,/path/to/sarscov2.fa You can save the index by using the [`--save_reference`](https://nf-co.re/rnaseq/parameters#save_reference) parameter and then provide it via [`--bbsplit_index`](https://nf-co.re/rnaseq/parameters#bbsplit_index) for future runs. As described in the `Output files` dropdown box above the FastQ files relative to the main reference genome will always be called `*primary*.fastq.gz`. -### SortMeRNA +### rRNA removal + +When `--remove_ribo_rna` is specified, the pipeline removes ribosomal RNA reads using one of three tools, selected via the `--ribo_removal_tool` parameter. + +#### SILVA Database Licensing Considerations + +> [!IMPORTANT] +> **For SortMeRNA and Bowtie2 users**: The default rRNA databases include sequences from the SILVA database. Commercial and non-academic entities require [licensing for SILVA](https://www.arb-silva.de/silva-license-information) to use these databases. +> +> **Licensing-compliant alternatives**: +> +> - **SILVA 138+**: Available under CC-BY 4.0 license (permissive for most uses) +> - **Bowtie2**: Can be used with custom, license-free rRNA databases via `--ribo_database_manifest` +> - **RiboDetector**: Machine learning-based; does not require reference databases (but see warning below) +> +> Users in commercial or clinical settings should verify database licensing requirements before processing data. + +#### SortMeRNA (default)
Output files - `sortmerna/` + - `*.sortmerna.log`: Log file generated by SortMeRNA with information regarding reads that matched the reference database(s). - `*.fastq.gz`: If `--save_non_ribo_reads` is specified, FastQ files containing non-rRNA reads will be placed in this directory. - - `*.log`: Log file generated by SortMeRNA with information regarding reads that matched the reference database(s).
-When `--remove_ribo_rna` is specified, the pipeline uses [SortMeRNA](https://github.com/biocore/sortmerna) for the removal of ribosomal RNA. By default, [rRNA databases](https://github.com/biocore/sortmerna/tree/master/data/rRNA_databases) defined in the SortMeRNA GitHub repo are used. You can see an example in the pipeline Github repository in `assets/rrna-default-dbs.txt` which is used by default via the `--ribo_database_manifest` parameter. Please note that commercial/non-academic entities require [`licensing for SILVA`](https://www.arb-silva.de/silva-license-information) for these default databases. +When `--ribo_removal_tool sortmerna` is specified (or by default), the pipeline uses [SortMeRNA](https://github.com/biocore/sortmerna) for the removal of ribosomal RNA. By default, [rRNA databases](https://github.com/biocore/sortmerna/tree/master/data/rRNA_databases) defined in the SortMeRNA GitHub repo are used. You can see an example in the pipeline GitHub repository in `assets/rrna-db-defaults.txt` which is used by default via the `--ribo_database_manifest` parameter. ![MultiQC - SortMeRNA hit count plot](images/mqc_sortmerna.png) +#### Bowtie2 + +When `--ribo_removal_tool bowtie2` is specified, the pipeline uses [Bowtie2](https://github.com/BenLangmead/bowtie2) for alignment-based rRNA removal. Reads are aligned against rRNA reference sequences specified via `--ribo_database_manifest`, and reads that align to rRNA are filtered out. The unaligned reads (non-rRNA) are kept for downstream analysis. + +**Note**: Bowtie2 is recommended for users with SILVA licensing concerns, as it can be used with custom rRNA databases that do not include SILVA sequences. + +
+Output files + +- `bowtie2_rrna/` + - `*.bowtie2.log`: Log file generated by Bowtie2 with alignment statistics. + - `*.fastq.gz`: If `--save_non_ribo_reads` is specified, FastQ files containing non-rRNA reads will be placed in this directory. + +
+ +#### RiboDetector + +> [!WARNING] +> RiboDetector has known issues with ONNX multiprocessing that can cause hangs in containerized environments. We recommend using SortMeRNA or Bowtie2 instead. See [hzi-bifo/RiboDetector#61](https://github.com/hzi-bifo/RiboDetector/pull/61) for details. + +
+Output files + +- `ribodetector/` + - `*.log`: Log file generated by RiboDetector. + - `*.fastq.gz`: If `--save_non_ribo_reads` is specified, FastQ files containing non-rRNA reads will be placed in this directory. + +
+ +When `--ribo_removal_tool ribodetector` is specified, the pipeline uses [RiboDetector](https://github.com/hzi-bifo/RiboDetector), a machine learning-based tool that identifies rRNA reads without requiring a reference database. + +### FastQC (filtered) + +
+Output files + +- `fastqc/filtered/` + - `*_fastqc.html`: FastQC report containing quality metrics for read 1 (_and read2 if paired-end_) **after** contaminant removal (BBSplit) and/or ribosomal RNA removal. + - `*_fastqc.zip`: Zip archive containing the FastQC report, tab-delimited data file and plot images. + +
+ +When BBSplit and/or rRNA removal is enabled, an additional [FastQC](http://www.bioinformatics.babraham.ac.uk/projects/fastqc/) step runs on the filtered reads. This provides QC metrics on the reads that will actually be used for alignment and quantification, allowing you to verify that filtering steps worked as expected. This section will only appear in the results when at least one filtering step (BBSplit or rRNA removal) is active and FastQC is not skipped. + ## Alignment and quantification ### STAR, Salmon and Kallisto @@ -273,32 +337,81 @@ The STAR section of the MultiQC report shows a bar plot with alignment rates: go
Output files -- `star_rsem/` - - `rsem.merged.gene_counts.tsv`: Matrix of gene-level raw counts across all samples. +- `star_rsem/` - tximport-processed outputs (matching the Salmon/Kallisto format): + - `rsem.merged.gene_counts.tsv`: Matrix of gene-level estimated counts across all samples. + - `rsem.merged.gene_counts_length_scaled.tsv`: Matrix of gene-level length-scaled counts (used for DESeq2 QC). + - `rsem.merged.gene_counts_scaled.tsv`: Matrix of gene-level scaled counts. + - `rsem.merged.gene_lengths.tsv`: Matrix of gene-level effective lengths across all samples. - `rsem.merged.gene_tpm.tsv`: Matrix of gene-level TPM values across all samples. - - `rsem.merged.transcript_counts.tsv`: Matrix of isoform-level raw counts across all samples. - - `rsem.merged.transcript_tpm.tsv`: Matrix of isoform-level TPM values across all samples. - - `rsem.merged.genes_long.tsv`: long format contains length, expected_count, TPM, and FPKM across all samples. - - `rsem.merged.isoforms_long.tsv`: long format contains length, expected_count, TPM, FPKM, and IsoPct across all samples. + - `rsem.merged.transcript_counts.tsv`: Matrix of transcript-level estimated counts across all samples. + - `rsem.merged.transcript_lengths.tsv`: Matrix of transcript-level effective lengths across all samples. + - `rsem.merged.transcript_tpm.tsv`: Matrix of transcript-level TPM values across all samples. + - `rsem.merged.tx2gene.tsv`: Transcript-to-gene mapping file generated from the GTF. + - `rsem.merged.gene.SummarizedExperiment.rds`: RDS object that can be loaded in R that contains a [SummarizedExperiment](https://bioconductor.org/packages/release/bioc/html/SummarizedExperiment.html) container with the abundance TPM (`tpm`), estimated counts (`counts`) and gene length (`lengths`), estimated library size-scaled counts (`counts_scaled`), estimated length-scaled counts (`counts_length_scaled`) in the assays slot for genes. + - `rsem.merged.transcript.SummarizedExperiment.rds`: RDS object that can be loaded in R that contains a [SummarizedExperiment](https://bioconductor.org/packages/release/bioc/html/SummarizedExperiment.html) container with the abundance TPM (`tpm`), estimated isoform-level raw counts (`counts`) and transcript length (`lengths`) in the assays slot for transcripts. +- `star_rsem/rsem_merge_counts/` - legacy RSEM merge script outputs: + - `*.gene_counts.tsv`: Matrix of gene-level raw counts (RSEM expected_count) across all samples. + - `*.gene_tpm.tsv`: Matrix of gene-level TPM values across all samples. + - `*.transcript_counts.tsv`: Matrix of isoform-level raw counts across all samples. + - `*.transcript_tpm.tsv`: Matrix of isoform-level TPM values across all samples. + - `*.genes_long.tsv`: Long format containing length, expected_count, TPM, and FPKM across all samples. + - `*.isoforms_long.tsv`: Long format containing length, expected_count, TPM, FPKM, and IsoPct across all samples. +- `star_rsem/` - per-sample outputs: - `*.genes.results`: RSEM gene-level quantification results for each sample. - `*.isoforms.results`: RSEM isoform-level quantification results for each sample. - `*.STAR.genome.bam`: If `--save_align_intermeds` is specified the BAM file from STAR alignment containing read alignments to the reference genome will be placed in this directory. These files can be reused as `genome_bam` input in future pipeline runs. - `*.transcript.bam`: If `--save_align_intermeds` is specified the BAM file from STAR alignment containing read alignments to the transcriptome will be placed in this directory. These files can be reused as `transcriptome_bam` input in future pipeline runs. - `star_rsem/.stat/` - `*.cnt`, `*.model`, `*.theta`: RSEM counts and statistics for each sample. - - `star_rsem/log/` - - `*.log`: STAR alignment report containing the mapping results summary. +- `star_rsem/log/` + - `*.SJ.out.tab`: File containing filtered splice junctions detected after mapping the reads. + - `*.Log.final.out`: STAR alignment report containing the mapping results summary. + - `*.Log.out` and `*.Log.progress.out`: STAR log files containing detailed information about the run. Typically only useful for debugging purposes.
[RSEM](https://github.com/deweylab/RSEM) is a software package for estimating gene and isoform expression levels from RNA-seq data. It has been widely touted as one of the most accurate quantification tools for RNA-seq analysis. When using `--aligner star_rsem`, the pipeline first runs STAR alignment with RSEM-compatible parameters to generate genome and transcriptome BAM files, then RSEM quantifies expression using these pre-aligned BAMs via the `--alignments` mode. This approach ensures optimal compatibility while maintaining RSEM's ability to effectively use ambiguously-mapping reads. +RSEM results are additionally processed through [tximport](https://bioconductor.org/packages/tximport/) to produce length-scaled counts, effective length matrices, and SummarizedExperiment R objects, matching the output parity of the Salmon and Kallisto pseudoalignment paths. These outputs are directly compatible with downstream tools like [nf-core/differentialabundance](https://nf-co.re/differentialabundance). + You can choose to align and quantify your data with RSEM by providing the `--aligner star_rsem` parameter. ![MultiQC - RSEM alignment scores plot](images/mqc_rsem_mapped.png) ![MultiQC - RSEM uniquely mapped plot](images/mqc_rsem_multimapped.png) +### Bowtie2 and Salmon (Prokaryotic) + +[Bowtie2](https://github.com/BenLangmead/bowtie2) is a fast and memory-efficient tool for aligning unspliced reads to reference sequences. When using `--aligner bowtie2_salmon`, reads are aligned directly to the transcriptome and quantified with Salmon. This aligner is the default when using `-profile prokaryotic` for bacterial and archaeal RNA-seq analysis. + +> [!NOTE] +> For prokaryotic data, the transcript-level and gene-level output files will typically contain identical values since prokaryotic annotations usually have a 1:1 mapping between CDS features and genes (no alternative splicing). The transcript-level files are included for consistency with Salmon's standard output format, but users should focus on the gene-level results. + +
+Output files + +- `bowtie2_salmon/` + - `*.bam`: If `--save_align_intermeds` is specified the original BAM file containing read alignments to the transcriptome will be placed in this directory. + - `salmon.merged.gene_counts.tsv`: Matrix of gene-level raw counts across all samples. + - `salmon.merged.gene_tpm.tsv`: Matrix of gene-level TPM values across all samples. + - `salmon.merged.gene.SummarizedExperiment.rds`: RDS object containing a [SummarizedExperiment](https://bioconductor.org/packages/release/bioc/html/SummarizedExperiment.html) with gene-level abundance data. + - `salmon.merged.gene_lengths.tsv`: Matrix of average within-sample transcript lengths for each gene across all samples. + - `salmon.merged.gene_counts_scaled.tsv`: Matrix of gene-level library size-scaled estimated counts across all samples. + - `salmon.merged.gene_counts_length_scaled.tsv`: Matrix of gene-level length-scaled estimated counts across all samples. + - `salmon.merged.transcript_counts.tsv`: Matrix of isoform-level raw counts across all samples. + - `salmon.merged.transcript_tpm.tsv`: Matrix of isoform-level TPM values across all samples. + - `salmon.merged.transcript.SummarizedExperiment.rds`: RDS object containing a [SummarizedExperiment](https://bioconductor.org/packages/release/bioc/html/SummarizedExperiment.html) with transcript-level abundance data. + - `tx2gene.tsv`: Tab-delimited file containing gene to transcript ID mappings. +- `bowtie2_salmon//` + - `quant.sf`: Salmon transcript-level quantification results. + - `quant.genes.sf`: Salmon gene-level quantification results. +- `bowtie2_salmon//logs/` + - `salmon_quant.log`: Salmon quantification log file. +- `bowtie2_salmon/log/` + - `*.bowtie2.log`: Bowtie2 alignment report containing mapping statistics. + +
+ ### HISAT2
@@ -751,6 +864,21 @@ The plot on the left hand side shows the standard PC plot - notice the variable ![MultiQC - Bracken top species plot](images/bracken-top-n-plot.png) +### Sylph + +[Sylph](https://sylph-docs.github.io/) is a metagenomic profiler that determines the species present in reads by statistically estimating containment ANI. Its companion script, [sylph-tax](https://sylph-docs.github.io/sylph-tax/), converts these ANI estimates into estimated taxonomic abundances in the sample. These algorithms are run on unaligned sequences to detect potential contamination of samples. MultiQC shows the Top 10 strains in the Sylph-tax abundance estimates, with toggles available for higher taxonomic levels. + +![MultiQC - Sylphtax top species plot](images/sylphtax-top-n-plot.png) + +
+Output files + +- `/contaminants/sylph` + - `*.tsv` Summary of containment ANI and abundances of detected species in the sample. See the [Sylph documentation](https://sylph-docs.github.io/Output-format/) for full details on the output format. + - `*.sylphmpa` Taxonomic report of unaligned reads from `sylph-tax`. See the [Sylph documentation](https://sylph-docs.github.io/sylph-tax-output-format/) for full details on the output format. + +
+ ### MultiQC
diff --git a/docs/usage.md b/docs/usage.md index 39706c3ac..62f863caf 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -10,7 +10,7 @@ Please provide pipeline parameters via the CLI or Nextflow `-params-file` option ## 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 4 columns, and a header row as shown in the examples below. +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 the 4 required columns: `sample`, `fastq_1`, `fastq_2`, and `strandedness`. If samples were sequenced on different platforms or at different centers, you can specify per-sample values via optional `seq_platform` and `seq_center` columns (used in BAM read group tags). For uniform values across all samples, the `--seq_platform` and `--seq_center` parameters are simpler. Please refer to the example below. ```bash --input '[path to samplesheet file]' @@ -21,10 +21,10 @@ You will need to create a samplesheet with information about the samples you wou 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,strandedness -CONTROL_REP1,AEG588A1_S1_L002_R1_001.fastq.gz,AEG588A1_S1_L002_R2_001.fastq.gz,auto -CONTROL_REP1,AEG588A1_S1_L003_R1_001.fastq.gz,AEG588A1_S1_L003_R2_001.fastq.gz,auto -CONTROL_REP1,AEG588A1_S1_L004_R1_001.fastq.gz,AEG588A1_S1_L004_R2_001.fastq.gz,auto +sample,fastq_1,fastq_2,strandedness,seq_platform +CONTROL_REP1,AEG588A1_S1_L002_R1_001.fastq.gz,AEG588A1_S1_L002_R2_001.fastq.gz,auto,ILLUMINA +CONTROL_REP1,AEG588A1_S1_L003_R1_001.fastq.gz,AEG588A1_S1_L003_R2_001.fastq.gz,auto,ILLUMINA +CONTROL_REP1,AEG588A1_S1_L004_R1_001.fastq.gz,AEG588A1_S1_L004_R2_001.fastq.gz,auto,ILLUMINA ``` ### Linting @@ -82,25 +82,27 @@ The pipeline will auto-detect whether a sample is single- or paired-end using th 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,strandedness -CONTROL_REP1,AEG588A1_S1_L002_R1_001.fastq.gz,AEG588A1_S1_L002_R2_001.fastq.gz,forward -CONTROL_REP2,AEG588A2_S2_L002_R1_001.fastq.gz,AEG588A2_S2_L002_R2_001.fastq.gz,forward -CONTROL_REP3,AEG588A3_S3_L002_R1_001.fastq.gz,AEG588A3_S3_L002_R2_001.fastq.gz,forward -TREATMENT_REP1,AEG588A4_S4_L003_R1_001.fastq.gz,,reverse -TREATMENT_REP2,AEG588A5_S5_L003_R1_001.fastq.gz,,reverse -TREATMENT_REP3,AEG588A6_S6_L003_R1_001.fastq.gz,,reverse -TREATMENT_REP3,AEG588A6_S6_L004_R1_001.fastq.gz,,reverse -``` - -| 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". | -| `strandedness` | Sample strand-specificity. Must be one of `unstranded`, `forward`, `reverse` or `auto`. | -| `genome_bam` | **Optional**. Full path to genome-aligned BAM file. Typically from previous pipeline runs (see [output documentation](https://nf-co.re/rnaseq/output#star-salmon-and-kallisto) or [STAR/RSEM](https://nf-co.re/rnaseq/output#star-via-rsem)). | -| `transcriptome_bam` | **Optional**. Full path to transcriptome-aligned BAM file. Typically from previous pipeline runs (see [output documentation](https://nf-co.re/rnaseq/output#star-salmon-and-kallisto) or [STAR/RSEM](https://nf-co.re/rnaseq/output#star-via-rsem)). | -| `percent_mapped` | **Optional**. Percentage of reads that mapped during alignment (0-100). Useful for quality assessment and filtering. | +sample,fastq_1,fastq_2,strandedness,seq_platform +CONTROL_REP1,AEG588A1_S1_L002_R1_001.fastq.gz,AEG588A1_S1_L002_R2_001.fastq.gz,forward,ILLUMINA +CONTROL_REP2,AEG588A2_S2_L002_R1_001.fastq.gz,AEG588A2_S2_L002_R2_001.fastq.gz,forward,ILLUMINA +CONTROL_REP3,AEG588A3_S3_L002_R1_001.fastq.gz,AEG588A3_S3_L002_R2_001.fastq.gz,forward,ILLUMINA +TREATMENT_REP1,AEG588A4_S4_L003_R1_001.fastq.gz,,reverse,ILLUMINA +TREATMENT_REP2,AEG588A5_S5_L003_R1_001.fastq.gz,,reverse,ILLUMINA +TREATMENT_REP3,AEG588A6_S6_L003_R1_001.fastq.gz,,reverse,ILLUMINA +TREATMENT_REP3,AEG588A6_S6_L004_R1_001.fastq.gz,,reverse,ILLUMINA +``` + +| 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". | +| `strandedness` | Sample strand-specificity. Must be one of `unstranded`, `forward`, `reverse` or `auto`. | +| `seq_platform` | **Optional**. Sequencing platform for BAM read group `PL` tag (e.g., `ILLUMINA`). Use this column when samples were sequenced on different platforms. For a single platform across all samples, prefer `--seq_platform` instead. Per-sample values override the global parameter. | +| `seq_center` | **Optional**. Sequencing center for BAM read group `CN` tag. Use this column when samples come from different centers. For a single center across all samples, prefer `--seq_center` instead. Per-sample values override the global parameter. | +| `genome_bam` | **Optional**. Full path to genome-aligned BAM file. Typically from previous pipeline runs (see [output documentation](https://nf-co.re/rnaseq/output#star-salmon-and-kallisto) or [STAR/RSEM](https://nf-co.re/rnaseq/output#star-via-rsem)). | +| `transcriptome_bam` | **Optional**. Full path to transcriptome-aligned BAM file. Typically from previous pipeline runs (see [output documentation](https://nf-co.re/rnaseq/output#star-salmon-and-kallisto) or [STAR/RSEM](https://nf-co.re/rnaseq/output#star-via-rsem)). | +| `percent_mapped` | **Optional**. Percentage of reads that mapped during alignment (0-100). Useful for quality assessment and filtering. | An [example samplesheet](../assets/samplesheet.csv) has been provided with the pipeline. @@ -143,9 +145,9 @@ The `--skip_alignment` flag tells the pipeline to skip alignment, and in this si The `samplesheet_with_bams.csv` will look like: ```csv -sample,fastq_1,fastq_2,strandedness,genome_bam,percent_mapped,transcriptome_bam -SAMPLE1,/path/sample1_R1.fastq.gz,/path/sample1_R2.fastq.gz,forward,results/star_salmon/SAMPLE1.markdup.sorted.bam,85.2,results/star_salmon/SAMPLE1.Aligned.toTranscriptome.out.bam -SAMPLE2,/path/sample2_R1.fastq.gz,,reverse,results/star_salmon/SAMPLE2.sorted.bam,92.1,results/star_salmon/SAMPLE2.Aligned.toTranscriptome.out.bam +sample,fastq_1,fastq_2,strandedness,seq_platform,seq_center,genome_bam,percent_mapped,transcriptome_bam +SAMPLE1,/path/sample1_R1.fastq.gz,/path/sample1_R2.fastq.gz,forward,ILLUMINA,,results/star_salmon/SAMPLE1.markdup.sorted.bam,85.2,results/star_salmon/SAMPLE1.Aligned.toTranscriptome.out.bam +SAMPLE2,/path/sample2_R1.fastq.gz,,reverse,ILLUMINA,,results/star_salmon/SAMPLE2.sorted.bam,92.1,results/star_salmon/SAMPLE2.Aligned.toTranscriptome.out.bam ``` #### Important limitations @@ -179,10 +181,76 @@ If you would like to reduce the number of reads used in the analysis, for exampl > **NB:** TrimGalore! will only run using multiple cores if you are able to use more than > 5 and > 6 CPUs for single- and paired-end data, respectively. The total cores available to TrimGalore! will also be capped at 4 (7 and 8 CPUs in total for single- and paired-end data, respectively) because there is no longer a run-time benefit. See [release notes](https://github.com/FelixKrueger/TrimGalore/blob/master/Changelog.md#version-060-release-on-1-mar-2019) and [discussion whilst adding this logic to the nf-core/atacseq pipeline](https://github.com/nf-core/atacseq/pull/65). +## rRNA removal options + +Ribosomal RNA (rRNA) removal can be enabled with the `--remove_ribo_rna` parameter. The pipeline supports three different tools for rRNA removal, selectable via the `--ribo_removal_tool` parameter. + +> [!TIP] +> For tools that use a reference database (SortMeRNA and Bowtie2), although rRNA is the primary target, the reference database can include additional abundant contaminant sequences you wish to remove, such as tRNAs or other non-coding RNAs. Simply add the paths to your custom FASTA files in the manifest file. + +### SortMeRNA (default) + +[SortMeRNA](https://github.com/biocore/sortmerna) uses k-mer matching against rRNA databases to identify and filter rRNA reads. This is the default option and requires an rRNA database manifest file. + +```bash +nextflow run nf-core/rnaseq --remove_ribo_rna --ribo_removal_tool sortmerna ... +``` + +By default, [rRNA databases](https://github.com/biocore/sortmerna/tree/master/data/rRNA_databases) defined in the SortMeRNA GitHub repo are used. You can see an example in the pipeline GitHub repository in `assets/rrna-db-defaults.txt` which is used by default via the `--ribo_database_manifest` parameter. + +> [!NOTE] +> The default databases are based on SILVA 119, which requires [licensing for commercial use](https://www.arb-silva.de/silva-license-information). SILVA 138+ uses CC-BY 4.0 licensing that freely permits commercial use with attribution. If you have licensing concerns, consider using Bowtie2 with custom rRNA reference sequences via `--ribo_removal_tool bowtie2`. + +### Bowtie2 + +[Bowtie2](https://github.com/BenLangmead/bowtie2) performs alignment-based filtering against rRNA reference sequences. Reads that align to the rRNA references are filtered out, and unaligned reads are kept for downstream analysis. This option also requires an rRNA database manifest file specified via `--ribo_database_manifest`. + +```bash +nextflow run nf-core/rnaseq --remove_ribo_rna --ribo_removal_tool bowtie2 ... +``` + +### RiboDetector + +> [!WARNING] +> RiboDetector has known issues with ONNX multiprocessing that can cause hangs in containerized environments (Docker, Singularity). This makes it unreliable for production use in Nextflow pipelines. We recommend using SortMeRNA or Bowtie2 for rRNA removal until these issues are resolved upstream. See [hzi-bifo/RiboDetector#61](https://github.com/hzi-bifo/RiboDetector/pull/61) for details. + +[RiboDetector](https://github.com/hzi-bifo/RiboDetector) uses machine learning to identify rRNA reads without requiring a reference database. This makes it particularly useful when working with organisms that lack well-characterized rRNA sequences, or when you want to avoid database licensing requirements. + +```bash +nextflow run nf-core/rnaseq --remove_ribo_rna --ribo_removal_tool ribodetector ... +``` + +RiboDetector automatically determines read length from your data and uses its pre-trained neural network model to classify reads. + ## Alignment options By default, the pipeline uses [STAR](https://github.com/alexdobin/STAR) (i.e. `--aligner star_salmon`) to map the raw FastQ reads to the reference genome, project the alignments onto the transcriptome and to perform the downstream BAM-level quantification with [Salmon](https://salmon.readthedocs.io/en/latest/salmon.html). STAR is fast but requires a lot of memory to run, typically around 38GB for the Human GRCh37 reference genome. Both `--aligner star_salmon` and `--aligner star_rsem` use STAR for alignment, so you should use the [HISAT2](https://ccb.jhu.edu/software/hisat2/index.shtml) aligner (i.e. `--aligner hisat2`) if you have memory limitations. +:::note +Selecting `star_rsem` automatically applies the same STAR settings as [rsem-calculate-expression](https://deweylab.github.io/RSEM/rsem-calculate-expression.html) with the `--star` option. These are based on the ENCODE3 STAR settings, and are as follows: + +
+View STAR parameters + +```raw +--outSAMunmapped Within +--outFilterType BySJout +--outFilterMultimapNmax 20 +--outFilterMismatchNmax 999 +--outFilterMismatchNoverLmax 0.04 +--alignIntronMin 20 +--alignIntronMax 1000000 +--alignMatesGapMax 1000000 +--alignSJoverhangMin 8 +--alignSJDBoverhangMin 1 +--sjdbScore 1 +``` + +
+ +**NOTE**: The pipeline parameter [`--extra_star_align_args`](#custom-star-parameters) cannot be used with aligner option `star_rsem`. It is possible to set, via [custom tool arguments](#custom-tool-arguments), custom settings to the process `STAR_ALIGN` via `ext.args`. However, we discourage this and consider adjusting the STAR aligner while using RSEM to be an unsupported option in this pipeline. If you need to pass in custom star alignment options, we recommend using the aligner option `star_salmon`. After this warning, if you still wish to set custom STAR settings and use RSEM for quantification, then please reference [this configuration file](https://github.com/nf-core/rnaseq/blob/master/subworkflows/local/align_star/nextflow.config). +::: + You also have the option to pseudoalign and quantify your data directly with [Salmon](https://salmon.readthedocs.io/en/latest/salmon.html) or [Kallisto](https://pachterlab.github.io/kallisto/) by specifying `salmon` or `kallisto` to the `--pseudo_aligner` parameter. The selected pseudoaligner will then be run in addition to the standard alignment workflow defined by `--aligner`, mainly because it allows you to obtain QC metrics with respect to the genomic alignments. However, you can provide the `--skip_alignment` parameter if you would like to run Salmon or Kallisto in isolation. By default, the pipeline will use the genome fasta and gtf file to generate the transcripts fasta file, and then to build the Salmon index. You can override these parameters using the `--transcript_fasta` and `--salmon_index` parameters, respectively. The library preparation protocol (library type) used by Salmon quantification is inferred by the pipeline based on the information provided in the samplesheet, however, you can override it using the `--salmon_quant_libtype` parameter. You can find the available options in the [Salmon documentation](https://salmon.readthedocs.io/en/latest/library_type.html). Similarly, strandedness is taken from the sample sheet or calculated automatically, and passed to Kallisto on a per-library basis, but you can apply a global override by setting the Kallisto strandedness parameters in `--extra_kallisto_quant_args` like `--extra_kallisto_quant_args '--fr-stranded'` see the [Kallisto documentation](https://pachterlab.github.io/kallisto/manual). @@ -225,6 +293,45 @@ If you're looking for documentation on how the nf-core Sentieon GitHub Actions a For detailed instructions on how to test the modules and subworkflows separately, see [here](https://github.com/nf-core/modules/blob/master/modules/nf-core/sentieon/README.md). ::: +### Parabricks GPU acceleration for STAR + +The STAR aligner can also be GPU-accelerated using NVIDIA Parabricks via the `--use_parabricks_star` parameter. Parabricks runs STAR alignment on NVIDIA GPUs, significantly reducing wall-clock time for large datasets. + +```bash +nextflow run nf-core/rnaseq \ + --input samplesheet.csv \ + --outdir results \ + --fasta genome.fa \ + --gtf annotation.gtf \ + --use_parabricks_star \ + -profile docker +``` + +Container GPU flags (`--gpus all` for Docker, `--nv` for Singularity/Apptainer) are automatically applied to GPU tasks based on the container engine. These flags are scoped to GPU tasks only, so non-GPU steps will run normally on CPU-only nodes in mixed clusters. + +The container GPU flags can be overridden via `--gpu_container_options` (e.g. `--gpu_container_options '--gpus 1'`). + +#### Requirements + +- One or more NVIDIA GPUs (with appropriate drivers installed) +- Docker or Singularity (Conda/Mamba is **not** supported for this module) +- The Parabricks container (`nvcr.io/nvidia/clara/clara-parabricks:4.6.0-1`) will be pulled automatically + +#### Behaviour differences + +When using Parabricks, the pipeline automatically handles mark duplicates during the alignment step (via `pbrun rna_fq2bam`), so the separate Picard MarkDuplicates step is skipped. + +#### Known differences from native STAR + +Parabricks `rna_fq2bam` is based on STAR 2.7.2a. The following native STAR flags have no pbrun equivalent and are therefore not applied: + +- `--outFilterType BySJout` — pbrun uses its own splice junction filtering defaults +- `--sjdbScore 1` — affects junction scoring priority +- `--quantTranscriptomeBan Singleend` — Salmon handles mixed single/paired-end transcriptome records gracefully +- `--runRNGseed 0` — pbrun uses deterministic primary alignment selection + +These differences are unlikely to materially affect downstream quantification results, but users should be aware of them for reproducibility purposes. All other STAR parameters (multi-mapping limits, intron sizes, mate gap, splice junction overhangs, etc.) have pbrun equivalents and are applied consistently. + ## Quantification options The current options align with STAR and quantify using either Salmon (`--aligner star_salmon`) / RSEM (`--aligner star_rsem`). You also have the option to pseudoalign and quantify your data with Salmon or Kallisto by providing the `--pseudo_aligner salmon` or `--pseudo_aligner kallisto` parameter, respectively. @@ -369,12 +476,96 @@ As well as the standard annotations, GENCODE also provides "basic" annotations, #### Prokaryotic genome annotations -This pipeline uses featureCounts to generate QC metrics based on [biotype](http://www.ensembl.org/info/genome/genebuild/biotypes.html) information available within GFF/GTF genome annotation files. The format of these annotation files can vary significantly depending on the source of the annotation and the type of organism. The default settings in the pipeline are tailored towards Ensembl GTF annotations available for eukaryotic genomes. Prokaryotic genome annotations tend to be distributed in GFF format which are structured differently in terms of the feature naming conventions. There are a number of ways you can tune the behaviour of the pipeline to cater for differences/absence of biotype information: +The pipeline includes a dedicated profile for analysing bacterial and archaeal RNA-seq data: -- Use `--skip_biotype_qc` to bypass this step altogether in case biotype information is of no interest or isn't present in your annotation file. -- Use `--skip_rseqc` since features like splice junctions, transcription start (TSS) and ending sites (TES) are less prevalent and therefore, less informative in prokaryotes compared to eukaryotes. -- Use `--featurecounts_feature_type transcript` instead of `--featurecounts_feature_type transcript exon` (default) since entries for the latter may not contain a `--featurecounts_group_type gene_biotype` entry in the last column of the annotation. You should make sure that the value defined by `--featurecounts_feature_type` ideally contain corresponding entries for `featurecounts_group_type`. -- Use `--featurecounts_feature_type 'CDS' --featurecounts_group_type 'product'` to identify the number of hypothetical proteins. However, the featureCounts QC will no longer reflect the biotype information from your RNA. +> [!NOTE] +> This pipeline is primarily designed for eukaryotic RNA-seq. The prokaryotic profile provides basic support but does not include specialist features like operon detection or TSS mapping. + +```bash +nextflow run nf-core/rnaseq \ + --input samplesheet.csv \ + --fasta genome.fasta \ + --gff annotation.gff3 \ + --outdir results \ + -profile prokaryotic,docker +``` + +##### Input requirements + +| Input | Parameter | Requirements | +| ------------ | ------------------ | ------------------------------------------------------------------------------------------------------------------ | +| Samplesheet | `--input` | Standard CSV format (see [Samplesheet input](#samplesheet-input)) | +| Genome FASTA | `--fasta` | Genomic sequence file (`.fasta`, `.fa`, `.fna`, optionally gzipped) | +| Annotation | `--gff` or `--gtf` | Must contain **CDS features** with `gene_id` attributes. GFF3 format (`.gff3`, `.gff`) is typical for prokaryotes. | + +**Key points:** + +- **Use GFF3 format**: Prokaryotic annotations are typically distributed as GFF3 (not GTF). The pipeline accepts both via `--gff` or `--gtf`. +- **CDS features required**: The annotation must contain CDS (coding sequence) features. The pipeline extracts transcripts from these. +- **Matching contig names**: Chromosome/contig names in your FASTA must exactly match those in your GFF/GTF (e.g., if your FASTA has `>NC_003197.2`, your GFF must use `NC_003197.2` in column 1). +- **No transcript FASTA needed**: The pipeline generates the transcript FASTA automatically using GFFREAD. + +The `-profile prokaryotic` configures the pipeline with settings optimized for prokaryotic data: + +- **Bowtie2 alignment**: Uses Bowtie2 instead of STAR as the default aligner. Prokaryotic genomes lack introns, so splice-aware aligners are unnecessary. +- **GFFREAD transcript extraction**: Uses GFFREAD instead of RSEM to generate transcript sequences. Prokaryotic annotations typically use CDS features rather than exon features, and RSEM requires exon features. +- **CDS-based counting**: Sets `featurecounts_feature_type` to `CDS` for QC metrics. +- **Skips eukaryote-specific QC**: Disables RSeQC and dupRadar, which assume eukaryotic gene structures. + +You can override the aligner while keeping other prokaryotic settings: + +```bash +# Use STAR instead of Bowtie2 with prokaryotic settings +nextflow run nf-core/rnaseq \ + --input samplesheet.csv \ + --fasta genome.fasta \ + --gff annotation.gff3 \ + --outdir results \ + --aligner star_salmon \ + -profile prokaryotic,docker +``` + +When using STAR with `-profile prokaryotic`, the pipeline automatically configures STAR to use CDS features instead of exons for both index building and alignment. + +##### Annotation sources + +For prokaryotic genomes, we recommend using annotations from [Ensembl Bacteria](https://bacteria.ensembl.org/) when available, as these follow consistent formatting conventions. NCBI/RefSeq annotations can also work but may require additional attention: + +- **Contig name matching**: Ensure chromosome/contig names in your FASTA match those in your GTF/GFF. This is a common source of errors when mixing files from different sources. +- **Empty transcript IDs**: Some bacterial GTFs from RefSeq contain gene entries with empty `transcript_id` fields, which can cause Salmon errors. If you encounter issues, check your annotation file and consider filtering problematic entries. + +##### Using GFFREAD independently + +The `--gffread_transcript_fasta` parameter can also be used independently of `-profile prokaryotic` for any situation where RSEM fails to extract transcripts correctly (e.g., non-standard annotation formats): + +```bash +nextflow run nf-core/rnaseq \ + --input samplesheet.csv \ + --fasta genome.fasta \ + --gtf annotation.gtf \ + --gffread_transcript_fasta \ + --outdir results \ + -profile docker +``` + +##### Manual configuration (advanced) + +If you prefer not to use the profile, you can manually configure the pipeline for prokaryotic data. The following parameters are set by `-profile prokaryotic`: + +| Parameter | Value | Purpose | +| ------------------------------ | ---------------- | ------------------------------------------- | +| `--aligner` | `bowtie2_salmon` | Splice-unaware alignment | +| `--gffread_transcript_fasta` | `true` | Handle CDS-only annotations | +| `--featurecounts_feature_type` | `CDS` | QC counting on CDS features | +| `--skip_rseqc` | `true` | Skip eukaryote-specific QC | +| `--skip_dupradar` | `true` | Skip eukaryote-specific QC | +| `--skip_qualimap` | `true` | Skip eukaryote-specific QC | +| `--skip_bigwig` | `true` | Inappropriate for transcriptomic alignments | + +Additionally, you may want to set: + +- `--skip_biotype_qc` - if biotype information is not present or not of interest +- `--skip_deseq2_qc` - if you have fewer than 3 samples per condition Please get in touch with us on the #rnaseq channel in the [nf-core Slack workspace](https://nf-co.re/join) if you are having problems or need any advice. @@ -414,11 +605,15 @@ By default, the input GTF file will be filtered to ensure that sequence names co ## Contamination screening options -The pipeline provides the option to scan unaligned reads for contamination from other species using [Kraken2](https://ccb.jhu.edu/software/kraken2/), with the possibility of applying corrections from [Bracken](https://ccb.jhu.edu/software/bracken/). Since running Bracken is not computationally expensive, we recommend always using it to refine the abundance estimates generated by Kraken2. +The pipeline provides the option to scan unaligned reads for contamination from other species using either [Sylph](https://sylph-docs.github.io/) or [Kraken2](https://ccb.jhu.edu/software/kraken2/), with the possibility of applying corrections from [Bracken](https://ccb.jhu.edu/software/bracken/). Since running Bracken is not computationally expensive, we recommend always using it to refine the abundance estimates generated by Kraken2. + +Sylph is a [faster and much more memory-efficient tool](https://doi.org/10.1038/s41587-024-02412-y) with about equal precision in species detection to Kraken2/Bracken. Sylph also has lower rates of false positives. However, Sylph does not assign specific reads to species; it only provides overall abundance estimates. Sylph abundance estimates also [cannot assign a certain percentage of reads as unclassified](https://github.com/bluenote-1577/sylph/issues/49). + +Pre-constructed sylph databases can be found [here](https://sylph-docs.github.io/pre%E2%80%90built-databases/) and taxonomies [here](https://sylph-docs.github.io/sylph-tax/). The [documentation](https://sylph-docs.github.io/sylph-tax/) also has instructions on creating custom databases/taxonomies. As a newer tool, the effect of database choice on Sylph's performance has not been explored as thoroughly as for Kraken2 or Bracken. However, the following comments on choosing databases for Kraken2 are very likely still applicable to an extent for Sylph. -It is important to note that the accuracy of Kraken2 is [highly dependent on the database](https://doi.org/10.1099/mgen.0.000949) used. Specifically, it is [crucial](https://doi.org/10.1128/mbio.01607-23) to ensure that the host genome is included in the database. If you are particularly concerned about certain contaminants, it may be beneficial to use a smaller, more focused database containing primarily those contaminants instead of the full standard database. Various pre-built databases [are available for download](https://benlangmead.github.io/aws-indexes/k2), and instructions for building a custom database can be found in the [Kraken2 documentation](https://github.com/DerrickWood/kraken2/blob/master/docs/MANUAL.markdown). Additionally, genomes of contaminants detected in previous sequencing experiments are available on the [OpenContami website](https://openlooper.hgc.jp/opencontami/help/help_oct.php). +The accuracy of Kraken2 is [highly dependent on the database](https://doi.org/10.1099/mgen.0.000949) used. Specifically, it is [crucial](https://doi.org/10.1128/mbio.01607-23) to ensure that the host genome/transcriptome is included in the database. (Note that the pre-built sylph databases do _not_ appear to contain the human genome/transcriptome). If you are particularly concerned about certain contaminants, it may be beneficial to use a smaller, more focused database containing primarily those contaminants instead of the full standard database. Various pre-built databases [are available for download](https://benlangmead.github.io/aws-indexes/k2), and instructions for building a custom database can be found in the [Kraken2 documentation](https://github.com/DerrickWood/kraken2/blob/master/docs/MANUAL.markdown). Additionally, genomes of contaminants detected in previous sequencing experiments are available on the [OpenContami website](https://openlooper.hgc.jp/opencontami/help/help_oct.php). -While Kraken2 is capable of detecting low-abundance contaminants in a sample, false positives can occur. Therefore, if only a very small number of reads from a contaminating species are detected, these results should be interpreted with caution. +While Kraken2 is capable of detecting low-abundance contaminants in a sample, false positives can occur. Therefore, if only a very small number of reads from a contaminating species are detected, these results should be interpreted with caution. Lastly, while Kraken2 can be used without Bracken, since running Bracken is not computationally expensive, we recommend always using it to refine the abundance estimates generated by Kraken2. ## Running the pipeline @@ -537,7 +732,7 @@ To further assist in reproducibility, you can use share and reuse [parameter fil ### `-profile` -Use this parameter to choose a configuration profile. Profiles can give configuration presets for different compute environments. +Use this parameter to choose a configuration profile. Profiles can give configuration presets for different compute environments or analyses. 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. @@ -554,6 +749,10 @@ If `-profile` is not specified, the pipeline will run locally and expect all sof - `test` - A profile with a complete configuration for automated testing - Includes links to test data so needs no other parameters +- `test_prokaryotic` + - A test profile for prokaryotic (bacterial/archaeal) RNA-seq data + - Uses Salmonella Typhimurium SL1344 test data with Bowtie2 alignment + - Includes all prokaryotic-specific settings; use `--aligner star_salmon --skip_bigwig false` to test with STAR - `docker` - A generic configuration profile to be used with [Docker](https://docker.com/) - `singularity` @@ -572,6 +771,8 @@ If `-profile` is not specified, the pipeline will run locally and expect all sof - 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. - `arm64` - A configuration profile that applies overrides supplying ARM-compatible containers and Conda environments. See [Running on Linux ARM architectures](#running-on-linux-arm-architectures). +- `prokaryotic` + - A configuration profile optimized for bacterial and archaeal RNA-seq data. Uses Bowtie2 for alignment and configures the pipeline to handle CDS-based annotations. See [Prokaryotic genome annotations](#prokaryotic-genome-annotations). ### `-resume` diff --git a/docs/usage/differential_expression_analysis/img/nf-core-rnaseq_metro_map_grey.png b/docs/usage/differential_expression_analysis/img/nf-core-rnaseq_metro_map_grey.png index 0dbf23f81..146bab346 100644 Binary files a/docs/usage/differential_expression_analysis/img/nf-core-rnaseq_metro_map_grey.png and b/docs/usage/differential_expression_analysis/img/nf-core-rnaseq_metro_map_grey.png differ diff --git a/main.nf b/main.nf index 52ae6be08..e2d5ee940 100755 --- a/main.nf +++ b/main.nf @@ -28,6 +28,7 @@ params.rsem_index = getGenomeAttribute('rsem') params.hisat2_index = getGenomeAttribute('hisat2') params.salmon_index = getGenomeAttribute('salmon') params.kallisto_index = getGenomeAttribute('kallisto') +params.bowtie2_index = getGenomeAttribute('bowtie2') /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -54,7 +55,7 @@ workflow NFCORE_RNASEQ { main: - ch_versions = Channel.empty() + ch_versions = channel.empty() // // SUBWORKFLOW: Prepare reference genome files @@ -74,18 +75,21 @@ workflow NFCORE_RNASEQ { params.salmon_index, params.kallisto_index, params.hisat2_index, + params.bowtie2_index, params.bbsplit_index, params.sortmerna_index, params.gencode, + params.gffread_transcript_fasta, params.featurecounts_group_type, params.aligner, params.pseudo_aligner, params.skip_gtf_filter, params.skip_bbsplit, - !params.remove_ribo_rna, + params.remove_ribo_rna ? params.ribo_removal_tool : null, params.skip_alignment, params.skip_pseudo_alignment, - params.use_sentieon_star + params.use_sentieon_star, + params.use_parabricks_star ) ch_versions = ch_versions.mix(PREPARE_GENOME.out.versions) @@ -94,13 +98,18 @@ workflow NFCORE_RNASEQ { PREPARE_GENOME .out .fai - .map { checkMaxContigSize(it) } + .map { fai -> checkMaxContigSize(fai) } } // // WORKFLOW: Run nf-core/rnaseq workflow // - ch_samplesheet = Channel.value(file(params.input, checkIfExists: true)) + ch_samplesheet = channel.value(file(params.input, checkIfExists: true)) + + // Bowtie2 rRNA index is built on-demand inside the fastq_remove_rrna subworkflow + // rather than in PREPARE_GENOME, to avoid duplicating the rRNA FASTA preparation logic + ch_bowtie2_rrna_index = channel.empty() + RNASEQ ( ch_samplesheet, ch_versions, @@ -113,11 +122,13 @@ workflow NFCORE_RNASEQ { PREPARE_GENOME.out.star_index, PREPARE_GENOME.out.rsem_index, PREPARE_GENOME.out.hisat2_index, + PREPARE_GENOME.out.bowtie2_index, PREPARE_GENOME.out.salmon_index, PREPARE_GENOME.out.kallisto_index, PREPARE_GENOME.out.bbsplit_index, PREPARE_GENOME.out.rrna_fastas, PREPARE_GENOME.out.sortmerna_index, + ch_bowtie2_rrna_index, PREPARE_GENOME.out.splicesites ) ch_versions = ch_versions.mix(RNASEQ.out.versions) diff --git a/modules.json b/modules.json index 4589b12db..9af419cdd 100644 --- a/modules.json +++ b/modules.json @@ -7,199 +7,231 @@ "nf-core": { "bbmap/bbsplit": { "branch": "master", - "git_sha": "6da7216c83d9d885bdeb7aef1bcb9b51a90f370b", + "git_sha": "6d1d4b987af3ee5852d852abf99f8883028cea9c", "installed_by": ["fastq_qc_trim_filter_setstrandedness", "modules"] }, "bedtools/genomecov": { "branch": "master", - "git_sha": "81880787133db07d9b4c1febd152c090eb8325dc", + "git_sha": "88d43dad73a675e66bff49ebb57fe657a5909018", "installed_by": ["modules"] }, + "bowtie2/align": { + "branch": "master", + "git_sha": "92b8df948fd8cdb223e051f5f5e414818a073ee0", + "installed_by": ["fastq_remove_rrna"] + }, + "bowtie2/build": { + "branch": "master", + "git_sha": "447f7bc0fa41dfc2400c8cad4c0291880dc060cf", + "installed_by": ["fastq_remove_rrna"] + }, "bracken/bracken": { "branch": "master", - "git_sha": "20b042e352fc47ab6dab717a622253e96429e887", + "git_sha": "004e773fc35ebd24063ca4cbef057c94a24208aa", "installed_by": ["modules"] }, "cat/fastq": { "branch": "master", - "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", + "git_sha": "5d28ea7cfaebcfae6f74d1067ea766d8ff19dff3", "installed_by": ["fastq_qc_trim_filter_setstrandedness", "modules"] }, "custom/catadditionalfasta": { "branch": "master", - "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", + "git_sha": "96c57dfd98a0641886a67bd449fe33ee2ec0e374", "installed_by": ["modules"] }, - "custom/getchromsizes": { + "custom/rsemmergecounts": { "branch": "master", - "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", - "installed_by": ["modules"] + "git_sha": "1d67856e83d01712c604ac2955d0e5d4b018bf68", + "installed_by": ["modules", "quantify_rsem"] }, "custom/tx2gene": { "branch": "master", - "git_sha": "e0bdf8637721e27792a38c6b622f0a2345f3cbc9", - "installed_by": ["modules", "quantify_pseudo_alignment"] + "git_sha": "0de77432a7fb128e2fdeb3d4bd5a74c2ec02d6c6", + "installed_by": ["quant_tximport_summarizedexperiment", "quantify_pseudo_alignment"] }, "dupradar": { "branch": "master", - "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", + "git_sha": "e753770db613ce014b3c4bc94f6cba443427b726", "installed_by": ["modules"] }, "fastp": { "branch": "master", - "git_sha": "8864afe586537bf562eac7b83349c26207f3cb4d", + "git_sha": "a331ecfd1aa48b2b2298aab23bb4516c800e410b", "installed_by": ["fastq_fastqc_umitools_fastp", "modules"] }, "fastqc": { "branch": "master", - "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", - "installed_by": ["fastq_fastqc_umitools_fastp", "fastq_fastqc_umitools_trimgalore"] + "git_sha": "3009f27c4e4b6e99da4eeebe82799e13924a4a1f", + "installed_by": [ + "fastq_fastqc_umitools_fastp", + "fastq_fastqc_umitools_trimgalore", + "fastq_qc_trim_filter_setstrandedness" + ] }, "fq/lint": { "branch": "master", - "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", + "git_sha": "14b8e6cceb84242e16094fe979762e05bc8de526", "installed_by": ["fastq_qc_trim_filter_setstrandedness", "modules"] }, "fq/subsample": { "branch": "master", - "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", + "git_sha": "8c181528b68a7a60e6b1d998e43e602f949e8554", "installed_by": ["fastq_subsample_fq_salmon", "modules"] }, "gffread": { "branch": "master", - "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", + "git_sha": "51f2b493a7ff28b40a9f99faca64245521f2bb24", "installed_by": ["modules"] }, "gunzip": { "branch": "master", - "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", + "git_sha": "96c57dfd98a0641886a67bd449fe33ee2ec0e374", "installed_by": ["modules"] }, "hisat2/align": { "branch": "master", - "git_sha": "5ec0e05ebe154cf1325de4c8ae07cdff1a197b06", - "installed_by": ["fastq_align_hisat2"], - "patch": "modules/nf-core/hisat2/align/hisat2-align.diff" + "git_sha": "cebe21bbd158c15c8fab172e37cfe97a239f4b77", + "installed_by": ["fastq_align_hisat2"] }, "hisat2/build": { "branch": "master", - "git_sha": "20b042e352fc47ab6dab717a622253e96429e887", + "git_sha": "66391ca86ea6a081d288afe6a93d242fefcd8c2c", "installed_by": ["modules"] }, "hisat2/extractsplicesites": { "branch": "master", - "git_sha": "20b042e352fc47ab6dab717a622253e96429e887", + "git_sha": "004e773fc35ebd24063ca4cbef057c94a24208aa", "installed_by": ["modules"] }, "kallisto/index": { "branch": "master", - "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", + "git_sha": "447f7bc0fa41dfc2400c8cad4c0291880dc060cf", "installed_by": ["modules"] }, "kallisto/quant": { "branch": "master", - "git_sha": "8864afe586537bf562eac7b83349c26207f3cb4d", - "installed_by": ["modules", "quantify_pseudo_alignment"] + "git_sha": "77b38f082c32cf86d870802c5dc96b51062c926e", + "installed_by": ["quantify_pseudo_alignment"] }, "kraken2/kraken2": { "branch": "master", - "git_sha": "20b042e352fc47ab6dab717a622253e96429e887", + "git_sha": "71a39f3598935d64ffd65f0960e4d2d4a42ab778", "installed_by": ["modules"] }, "multiqc": { "branch": "master", - "git_sha": "9656d955b700a8707c4a67821ab056f8c1095675", + "git_sha": "80cba9452fb1e9bb79884976fa1ca0e671949aa2", + "installed_by": ["modules"] + }, + "parabricks/rnafq2bam": { + "branch": "master", + "git_sha": "0c44f69eefe8a8c373c7cdd9528b3e1d60cb895f", "installed_by": ["modules"] }, "picard/markduplicates": { "branch": "master", - "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", - "installed_by": ["bam_markduplicates_picard"], - "patch": "modules/nf-core/picard/markduplicates/picard-markduplicates.diff" + "git_sha": "66d5808eaaabd9de8997c4c31a9e8cdd3b56c080", + "installed_by": ["bam_markduplicates_picard"] }, "preseq/lcextrap": { "branch": "master", - "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", + "git_sha": "b80fa93d646109e3dc86e79010bf7c0b0af8ce29", "installed_by": ["modules"] }, "qualimap/rnaseq": { "branch": "master", - "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", + "git_sha": "1d2684a52df064573979f069272122fc73e02662", "installed_by": ["modules"] }, + "ribodetector": { + "branch": "master", + "git_sha": "5cb9a8694da0a0e550921636bb60bc8c56445fd7", + "installed_by": ["fastq_remove_rrna"] + }, "rsem/calculateexpression": { "branch": "master", - "git_sha": "82cd92d50025a01e1370758ae18fcfe708b6d28c", - "installed_by": ["modules"] + "git_sha": "2fc7570f0dcf6d23083eff475fd798a1c9354aca", + "installed_by": ["modules", "quantify_rsem"] }, "rsem/preparereference": { "branch": "master", - "git_sha": "20b042e352fc47ab6dab717a622253e96429e887", + "git_sha": "004e773fc35ebd24063ca4cbef057c94a24208aa", "installed_by": ["modules"] }, "rseqc/bamstat": { "branch": "master", - "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", + "git_sha": "0145202ae8a9f39a4e7c533f667c38989af799b2", "installed_by": ["bam_rseqc"] }, "rseqc/inferexperiment": { "branch": "master", - "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", + "git_sha": "0145202ae8a9f39a4e7c533f667c38989af799b2", "installed_by": ["bam_rseqc"] }, "rseqc/innerdistance": { "branch": "master", - "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", + "git_sha": "0145202ae8a9f39a4e7c533f667c38989af799b2", "installed_by": ["bam_rseqc"] }, "rseqc/junctionannotation": { "branch": "master", - "git_sha": "8864afe586537bf562eac7b83349c26207f3cb4d", + "git_sha": "0145202ae8a9f39a4e7c533f667c38989af799b2", "installed_by": ["bam_rseqc"] }, "rseqc/junctionsaturation": { "branch": "master", - "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", + "git_sha": "0145202ae8a9f39a4e7c533f667c38989af799b2", "installed_by": ["bam_rseqc"] }, "rseqc/readdistribution": { "branch": "master", - "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", + "git_sha": "eed5d14302a6c9070dcc25feeab707a27a4b3254", "installed_by": ["bam_rseqc"] }, "rseqc/readduplication": { "branch": "master", - "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", + "git_sha": "0145202ae8a9f39a4e7c533f667c38989af799b2", "installed_by": ["bam_rseqc"] }, "rseqc/tin": { "branch": "master", - "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", + "git_sha": "eed5d14302a6c9070dcc25feeab707a27a4b3254", "installed_by": ["bam_rseqc"] }, "salmon/index": { "branch": "master", - "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", + "git_sha": "196cde9b19d49324c5cf10977959f5db856ebbdd", "installed_by": ["fastq_subsample_fq_salmon"] }, "salmon/quant": { "branch": "master", - "git_sha": "db5a84497b80c4932b4498ec231f19403d19bcff", - "installed_by": ["fastq_subsample_fq_salmon", "modules", "quantify_pseudo_alignment"] + "git_sha": "9ebc300e05af07c770b86ff089581a2d41346c8b", + "installed_by": ["fastq_subsample_fq_salmon", "quantify_pseudo_alignment"] + }, + "samtools/faidx": { + "branch": "master", + "git_sha": "9a48bce39a67e2cb34b8f125fc1d50f0ad98b616", + "installed_by": ["modules"] + }, + "samtools/fastq": { + "branch": "master", + "git_sha": "1d2fbdcbca677bbe8da0f9d0d2bb7c02f2cab1c9", + "installed_by": ["fastq_remove_rrna"] }, "samtools/flagstat": { "branch": "master", - "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", + "git_sha": "1d2fbdcbca677bbe8da0f9d0d2bb7c02f2cab1c9", "installed_by": ["bam_stats_samtools"] }, "samtools/idxstats": { "branch": "master", - "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", + "git_sha": "1d2fbdcbca677bbe8da0f9d0d2bb7c02f2cab1c9", "installed_by": ["bam_stats_samtools"] }, "samtools/index": { "branch": "master", - "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", + "git_sha": "1d2fbdcbca677bbe8da0f9d0d2bb7c02f2cab1c9", "installed_by": [ "bam_dedup_stats_samtools_umicollapse", "bam_dedup_stats_samtools_umitools", @@ -209,105 +241,127 @@ }, "samtools/sort": { "branch": "master", - "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", + "git_sha": "5cb9a8694da0a0e550921636bb60bc8c56445fd7", "installed_by": ["bam_dedup_umi", "bam_sort_stats_samtools"] }, "samtools/stats": { "branch": "master", - "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", + "git_sha": "fe93fde0845f907fc91ad7cc7d797930408824df", "installed_by": ["bam_stats_samtools"] }, + "samtools/view": { + "branch": "master", + "git_sha": "d2ceed2ec5fccf922638f116a15e02f6458288fb", + "installed_by": ["fastq_remove_rrna"] + }, "sentieon/rsemcalculateexpression": { "branch": "master", - "git_sha": "d9cd3c825e2d05f9c851130100018ae02a766510", - "installed_by": ["modules"] + "git_sha": "d9c84ed4564744313bb586928885ebf05f40ad98", + "installed_by": ["modules", "quantify_rsem"] }, "sentieon/rsempreparereference": { "branch": "master", - "git_sha": "2779d18605e9923332155d671f45ed37fa185ff4", + "git_sha": "d9c84ed4564744313bb586928885ebf05f40ad98", "installed_by": ["modules"] }, "sentieon/staralign": { "branch": "master", - "git_sha": "73d3ab1ac411843ae643b5bc310a4aec9ae7ab3a", + "git_sha": "cebe21bbd158c15c8fab172e37cfe97a239f4b77", "installed_by": ["modules"] }, + "seqkit/replace": { + "branch": "master", + "git_sha": "2eccc519c7d25e24c8ef2a5a94062630b8383daf", + "installed_by": ["fastq_remove_rrna"] + }, + "seqkit/stats": { + "branch": "master", + "git_sha": "28935b89b7e1f19e835f8c6e4c8322d4b505dded", + "installed_by": ["fastq_remove_rrna"] + }, "sortmerna": { "branch": "master", - "git_sha": "d4a425ce59fc803a11e520f16680ede9af09761f", - "installed_by": ["fastq_qc_trim_filter_setstrandedness", "modules"] + "git_sha": "6d1d4b987af3ee5852d852abf99f8883028cea9c", + "installed_by": ["fastq_remove_rrna", "modules"] }, "star/align": { "branch": "master", - "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", + "git_sha": "cebe21bbd158c15c8fab172e37cfe97a239f4b77", "installed_by": ["modules"] }, "star/genomegenerate": { "branch": "master", - "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", + "git_sha": "481efe07277c76e23738b4be0724ba7d99653d7e", "installed_by": ["modules"] }, "stringtie/stringtie": { "branch": "master", - "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", + "git_sha": "4cfbd65a8dbdcfd1bb2736c4e8c5c12ac61d3281", "installed_by": ["modules"] }, "subread/featurecounts": { "branch": "master", - "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", + "git_sha": "eb1966338ee455671659c3dc2520057792342823", "installed_by": ["modules"] }, "summarizedexperiment/summarizedexperiment": { "branch": "master", - "git_sha": "1f008221e451e7a4738226c49e69aaa2eb731369", - "installed_by": ["modules", "quantify_pseudo_alignment"] + "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", + "installed_by": ["quant_tximport_summarizedexperiment", "quantify_pseudo_alignment"] + }, + "sylph/profile": { + "branch": "master", + "git_sha": "004e773fc35ebd24063ca4cbef057c94a24208aa", + "installed_by": ["modules"] + }, + "sylphtax/taxprof": { + "branch": "master", + "git_sha": "949ab51a3eca1682bfbe84ca0b2d7e150da01234", + "installed_by": ["modules"] }, "trimgalore": { "branch": "master", - "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", + "git_sha": "eed5d14302a6c9070dcc25feeab707a27a4b3254", "installed_by": ["fastq_fastqc_umitools_trimgalore"] }, "tximeta/tximport": { "branch": "master", - "git_sha": "9ef7553c32b02bc33ecb962b5f07a8cb16b2117c", - "installed_by": ["modules", "quantify_pseudo_alignment"] + "git_sha": "0de77432a7fb128e2fdeb3d4bd5a74c2ec02d6c6", + "installed_by": ["quant_tximport_summarizedexperiment", "quantify_pseudo_alignment"] }, "ucsc/bedclip": { "branch": "master", - "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", + "git_sha": "51f2b493a7ff28b40a9f99faca64245521f2bb24", "installed_by": ["bedgraph_bedclip_bedgraphtobigwig"] }, "ucsc/bedgraphtobigwig": { "branch": "master", - "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", + "git_sha": "51f2b493a7ff28b40a9f99faca64245521f2bb24", "installed_by": ["bedgraph_bedclip_bedgraphtobigwig"] }, "umicollapse": { "branch": "master", - "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", + "git_sha": "36b67c3f4b1cb390365f826bcf312424be25810a", "installed_by": ["bam_dedup_stats_samtools_umicollapse"] }, "umitools/dedup": { "branch": "master", - "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", - "installed_by": ["bam_dedup_stats_samtools_umitools", "modules"], - "patch": "modules/nf-core/umitools/dedup/umitools-dedup.diff" + "git_sha": "bd6d730b3f32742f402189113ba9480006a3350f", + "installed_by": ["bam_dedup_stats_samtools_umitools", "modules"] }, "umitools/extract": { "branch": "master", - "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", - "installed_by": ["fastq_fastqc_umitools_fastp", "fastq_fastqc_umitools_trimgalore", "modules"], - "patch": "modules/nf-core/umitools/extract/umitools-extract.diff" + "git_sha": "bd6d730b3f32742f402189113ba9480006a3350f", + "installed_by": ["fastq_fastqc_umitools_fastp", "fastq_fastqc_umitools_trimgalore", "modules"] }, "umitools/prepareforrsem": { "branch": "master", - "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", - "installed_by": ["bam_dedup_umi", "modules"], - "patch": "modules/nf-core/umitools/prepareforrsem/umitools-prepareforrsem.diff" + "git_sha": "bd6d730b3f32742f402189113ba9480006a3350f", + "installed_by": ["bam_dedup_umi", "modules"] }, "untar": { "branch": "master", - "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", + "git_sha": "447f7bc0fa41dfc2400c8cad4c0291880dc060cf", "installed_by": ["modules"] } } @@ -316,37 +370,37 @@ "nf-core": { "bam_dedup_stats_samtools_umicollapse": { "branch": "master", - "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", + "git_sha": "7ac6cbe7c17c2dad685da7f70496c8f48ea48687", "installed_by": ["bam_dedup_umi", "subworkflows"] }, "bam_dedup_stats_samtools_umitools": { "branch": "master", - "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", + "git_sha": "7ac6cbe7c17c2dad685da7f70496c8f48ea48687", "installed_by": ["bam_dedup_umi", "subworkflows"] }, "bam_dedup_umi": { "branch": "master", - "git_sha": "328ce676b3688b05ed9001f6af0a42f66eaaa094", + "git_sha": "7ac6cbe7c17c2dad685da7f70496c8f48ea48687", "installed_by": ["subworkflows"] }, "bam_markduplicates_picard": { "branch": "master", - "git_sha": "1731a5da1a9a4a4146211e36373aaaac6853865f", + "git_sha": "7ac6cbe7c17c2dad685da7f70496c8f48ea48687", "installed_by": ["subworkflows"] }, "bam_rseqc": { "branch": "master", - "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", + "git_sha": "eed5d14302a6c9070dcc25feeab707a27a4b3254", "installed_by": ["subworkflows"] }, "bam_sort_stats_samtools": { "branch": "master", - "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", + "git_sha": "7ac6cbe7c17c2dad685da7f70496c8f48ea48687", "installed_by": ["bam_dedup_umi", "fastq_align_hisat2"] }, "bam_stats_samtools": { "branch": "master", - "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", + "git_sha": "7ac6cbe7c17c2dad685da7f70496c8f48ea48687", "installed_by": [ "bam_dedup_stats_samtools_umicollapse", "bam_dedup_stats_samtools_umitools", @@ -356,37 +410,52 @@ }, "bedgraph_bedclip_bedgraphtobigwig": { "branch": "master", - "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", + "git_sha": "51f2b493a7ff28b40a9f99faca64245521f2bb24", "installed_by": ["subworkflows"] }, "fastq_align_hisat2": { "branch": "master", - "git_sha": "20b042e352fc47ab6dab717a622253e96429e887", + "git_sha": "cebe21bbd158c15c8fab172e37cfe97a239f4b77", "installed_by": ["subworkflows"] }, "fastq_fastqc_umitools_fastp": { "branch": "master", - "git_sha": "db5a84497b80c4932b4498ec231f19403d19bcff", + "git_sha": "8f2ec534d0418bf724cfd5f053176a9c500fae78", "installed_by": ["fastq_qc_trim_filter_setstrandedness", "subworkflows"] }, "fastq_fastqc_umitools_trimgalore": { "branch": "master", - "git_sha": "f232063fa5ecf4837df2da7db7857b5ddd62a3d5", + "git_sha": "8f2ec534d0418bf724cfd5f053176a9c500fae78", "installed_by": ["fastq_qc_trim_filter_setstrandedness", "subworkflows"] }, "fastq_qc_trim_filter_setstrandedness": { "branch": "master", - "git_sha": "db5a84497b80c4932b4498ec231f19403d19bcff", + "git_sha": "4cf9e693de047af3be0d817ee3b41a68962d5c3c", "installed_by": ["subworkflows"] }, + "fastq_remove_rrna": { + "branch": "master", + "git_sha": "b1d01480e4306e33851d936d065b70b469dad352", + "installed_by": ["fastq_qc_trim_filter_setstrandedness"] + }, "fastq_subsample_fq_salmon": { "branch": "master", - "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", + "git_sha": "b1d01480e4306e33851d936d065b70b469dad352", "installed_by": ["fastq_qc_trim_filter_setstrandedness", "subworkflows"] }, + "quant_tximport_summarizedexperiment": { + "branch": "master", + "git_sha": "bf0ea0eb763f9d692093ef4b40cb2a46ac762194", + "installed_by": ["quantify_pseudo_alignment", "quantify_rsem"] + }, "quantify_pseudo_alignment": { "branch": "master", - "git_sha": "1f008221e451e7a4738226c49e69aaa2eb731369", + "git_sha": "bf0ea0eb763f9d692093ef4b40cb2a46ac762194", + "installed_by": ["subworkflows"] + }, + "quantify_rsem": { + "branch": "master", + "git_sha": "bf0ea0eb763f9d692093ef4b40cb2a46ac762194", "installed_by": ["subworkflows"] }, "utils_nextflow_pipeline": { @@ -396,12 +465,12 @@ }, "utils_nfcore_pipeline": { "branch": "master", - "git_sha": "271e7fc14eb1320364416d996fb077421f3faed2", + "git_sha": "65f5e638d901a51534c68fd5c1c19e8112fb4df1", "installed_by": ["subworkflows"] }, "utils_nfschema_plugin": { "branch": "master", - "git_sha": "4b406a74dc0449c0401ed87d5bfff4252fd277fd", + "git_sha": "fdc08b8b1ae74f56686ce21f7ea11ad11990ce57", "installed_by": ["subworkflows"] } } diff --git a/modules/local/gtf2bed/main.nf b/modules/local/gtf2bed/main.nf index a2523c9cf..2388c377a 100644 --- a/modules/local/gtf2bed/main.nf +++ b/modules/local/gtf2bed/main.nf @@ -11,8 +11,8 @@ process GTF2BED { path gtf output: - path '*.bed' , emit: bed - path "versions.yml", emit: versions + path '*.bed', emit: bed + tuple val("${task.process}"), val('perl'), eval("perl --version 2>&1 | sed -n 's/.*v\\(.*\\)) built.*/\\1/p'"), topic: versions when: task.ext.when == null || task.ext.when @@ -22,20 +22,10 @@ process GTF2BED { gtf2bed \\ $gtf \\ > ${gtf.baseName}.bed - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - perl: \$(echo \$(perl --version 2>&1) | sed 's/.*v\\(.*\\)) built.*/\\1/') - END_VERSIONS """ stub: """ touch ${gtf.baseName}.bed - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - perl: \$(echo \$(perl --version 2>&1) | sed 's/.*v\\(.*\\)) built.*/\\1/') - END_VERSIONS """ } diff --git a/modules/local/gtf2bed/tests/main.nf.test.snap b/modules/local/gtf2bed/tests/main.nf.test.snap index 66ec3bf9e..85ffc8369 100644 --- a/modules/local/gtf2bed/tests/main.nf.test.snap +++ b/modules/local/gtf2bed/tests/main.nf.test.snap @@ -6,21 +6,22 @@ "genome.bed:md5,d41d8cd98f00b204e9800998ecf8427e" ], "1": [ - "versions.yml:md5,d04d815c224b980b6f3818d4b2fd4fe3" + [ + "GTF2BED", + "perl", + "5.26.2" + ] ], "bed": [ "genome.bed:md5,d41d8cd98f00b204e9800998ecf8427e" - ], - "versions": [ - "versions.yml:md5,d04d815c224b980b6f3818d4b2fd4fe3" ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2024-06-21T11:46:28.123826" + "timestamp": "2026-02-04T15:59:11.068236092" }, "sarscov2 - bam": { "content": [ @@ -29,20 +30,21 @@ "genome.bed:md5,d41d8cd98f00b204e9800998ecf8427e" ], "1": [ - "versions.yml:md5,d04d815c224b980b6f3818d4b2fd4fe3" + [ + "GTF2BED", + "perl", + "5.26.2" + ] ], "bed": [ "genome.bed:md5,d41d8cd98f00b204e9800998ecf8427e" - ], - "versions": [ - "versions.yml:md5,d04d815c224b980b6f3818d4b2fd4fe3" ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2024-03-07T15:00:44.458214" + "timestamp": "2026-02-04T15:58:59.523870298" } } \ No newline at end of file diff --git a/modules/local/gtf_filter/main.nf b/modules/local/gtf_filter/main.nf index bba995475..070b9e18f 100644 --- a/modules/local/gtf_filter/main.nf +++ b/modules/local/gtf_filter/main.nf @@ -12,7 +12,7 @@ process GTF_FILTER { output: path "*.filtered.gtf", emit: genome_gtf - path "versions.yml" , emit: versions + tuple val("${task.process}"), val('python'), eval("python --version | sed 's/Python //g'"), topic: versions when: task.ext.when == null || task.ext.when @@ -27,20 +27,10 @@ process GTF_FILTER { --gtf $gtf \\ $fasta_text \\ --prefix ${gtf.baseName} - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - python: \$(python --version | sed 's/Python //g') - END_VERSIONS """ stub: """ touch ${fasta.baseName}.filtered.gtf - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - python: \$(python --version | sed 's/Python //g') - END_VERSIONS """ } diff --git a/modules/local/gtf_filter/tests/main.nf.test.snap b/modules/local/gtf_filter/tests/main.nf.test.snap index d22a4fa5b..7a81a6027 100644 --- a/modules/local/gtf_filter/tests/main.nf.test.snap +++ b/modules/local/gtf_filter/tests/main.nf.test.snap @@ -6,21 +6,22 @@ "genome.filtered.gtf:md5,aa8b2aa1e0b5fbbba3b04d471e1b0535" ], "1": [ - "versions.yml:md5,4adf55ec05d247fd6d253459bd80856f" + [ + "GTF_FILTER", + "python", + "3.9.5" + ] ], "genome_gtf": [ "genome.filtered.gtf:md5,aa8b2aa1e0b5fbbba3b04d471e1b0535" - ], - "versions": [ - "versions.yml:md5,4adf55ec05d247fd6d253459bd80856f" ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2024-06-21T11:47:56.314297" + "timestamp": "2026-02-04T14:37:34.541802092" }, "sarscov2 - fasta - gtf - stub": { "content": [ @@ -29,20 +30,21 @@ "genome.filtered.gtf:md5,d41d8cd98f00b204e9800998ecf8427e" ], "1": [ - "versions.yml:md5,4adf55ec05d247fd6d253459bd80856f" + [ + "GTF_FILTER", + "python", + "3.9.5" + ] ], "genome_gtf": [ "genome.filtered.gtf:md5,d41d8cd98f00b204e9800998ecf8427e" - ], - "versions": [ - "versions.yml:md5,4adf55ec05d247fd6d253459bd80856f" ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2024-06-21T11:48:19.085835" + "timestamp": "2026-02-04T14:37:45.189305689" } } \ No newline at end of file diff --git a/modules/local/multiqc_custom_biotype/main.nf b/modules/local/multiqc_custom_biotype/main.nf index a4b923c3e..b04532981 100644 --- a/modules/local/multiqc_custom_biotype/main.nf +++ b/modules/local/multiqc_custom_biotype/main.nf @@ -12,7 +12,7 @@ process MULTIQC_CUSTOM_BIOTYPE { output: tuple val(meta), path("*.tsv"), emit: tsv - path "versions.yml" , emit: versions + tuple val("${task.process}"), val('python'), eval("python --version | sed 's/Python //g'"), topic: versions when: task.ext.when == null || task.ext.when @@ -27,11 +27,6 @@ process MULTIQC_CUSTOM_BIOTYPE { -s $meta.id \\ -f rRNA \\ -o ${prefix}.biotype_counts_rrna_mqc.tsv - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - python: \$(python --version | sed 's/Python //g') - END_VERSIONS """ stub: @@ -39,10 +34,5 @@ process MULTIQC_CUSTOM_BIOTYPE { """ touch ${prefix}.biotype_counts_mqc.tsv touch ${prefix}.biotype_counts_rrna_mqc.tsv - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - python: \$(python --version | sed 's/Python //g') - END_VERSIONS """ } diff --git a/modules/local/multiqc_custom_biotype/nextflow.config b/modules/local/multiqc_custom_biotype/nextflow.config index 6326efeb5..76ab02a7c 100644 --- a/modules/local/multiqc_custom_biotype/nextflow.config +++ b/modules/local/multiqc_custom_biotype/nextflow.config @@ -1,13 +1,9 @@ -if (!params.skip_qc) { - if (!params.skip_biotype_qc && params.featurecounts_group_type) { - process { - withName: 'MULTIQC_CUSTOM_BIOTYPE' { - publishDir = [ - path: { "${params.outdir}/${params.aligner}/featurecounts" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } - } +process { + withName: 'MULTIQC_CUSTOM_BIOTYPE' { + publishDir = [ + path: { "${params.outdir}/${params.aligner}/featurecounts" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] } } diff --git a/modules/local/multiqc_custom_biotype/tests/main.nf.test.snap b/modules/local/multiqc_custom_biotype/tests/main.nf.test.snap index 2fc5e4ab6..66917b90f 100644 --- a/modules/local/multiqc_custom_biotype/tests/main.nf.test.snap +++ b/modules/local/multiqc_custom_biotype/tests/main.nf.test.snap @@ -14,7 +14,11 @@ ] ], "1": [ - "versions.yml:md5,575b3b4c8a8a6e508c8ceeca41331b6b" + [ + "MULTIQC_CUSTOM_BIOTYPE", + "python", + "3.9.5" + ] ], "tsv": [ [ @@ -26,17 +30,14 @@ "test.biotype_counts_rrna_mqc.tsv:md5,31c68d05ffe90d1e3eb2cb2ef9a7b4d9" ] ] - ], - "versions": [ - "versions.yml:md5,575b3b4c8a8a6e508c8ceeca41331b6b" ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2024-07-02T16:48:24.844934" + "timestamp": "2026-02-04T14:38:01.977126983" }, "test sarscov2 count data - stub": { "content": [ @@ -53,7 +54,11 @@ ] ], "1": [ - "versions.yml:md5,575b3b4c8a8a6e508c8ceeca41331b6b" + [ + "MULTIQC_CUSTOM_BIOTYPE", + "python", + "3.9.5" + ] ], "tsv": [ [ @@ -65,16 +70,13 @@ "test.biotype_counts_rrna_mqc.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" ] ] - ], - "versions": [ - "versions.yml:md5,575b3b4c8a8a6e508c8ceeca41331b6b" ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2024-06-21T11:50:15.104113" + "timestamp": "2026-02-04T14:38:12.720793008" } } \ No newline at end of file diff --git a/modules/local/preprocess_transcripts_fasta_gencode/main.nf b/modules/local/preprocess_transcripts_fasta_gencode/main.nf index 2722e66c7..73fc694bc 100644 --- a/modules/local/preprocess_transcripts_fasta_gencode/main.nf +++ b/modules/local/preprocess_transcripts_fasta_gencode/main.nf @@ -10,8 +10,8 @@ process PREPROCESS_TRANSCRIPTS_FASTA_GENCODE { path fasta output: - path "*.fa" , emit: fasta - path "versions.yml", emit: versions + path "*.fa", emit: fasta + tuple val("${task.process}"), val('sed'), eval("sed --version 2>&1 | sed '1!d;s/^.*) //'"), topic: versions when: task.ext.when == null || task.ext.when @@ -22,11 +22,6 @@ process PREPROCESS_TRANSCRIPTS_FASTA_GENCODE { def command = gzipped ? 'zcat' : 'cat' """ $command $fasta | cut -d "|" -f1 > ${outfile}.fixed.fa - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - sed: \$(echo \$(sed --version 2>&1) | sed 's/^.*GNU sed) //; s/ .*\$//') - END_VERSIONS """ stub: @@ -34,10 +29,5 @@ process PREPROCESS_TRANSCRIPTS_FASTA_GENCODE { def outfile = gzipped ? file(fasta.baseName).baseName : fasta.baseName """ touch ${outfile}.fixed.fa - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - sed: \$(echo \$(sed --version 2>&1) | sed 's/^.*GNU sed) //; s/ .*\$//') - END_VERSIONS """ } diff --git a/modules/local/preprocess_transcripts_fasta_gencode/tests/main.nf.test.snap b/modules/local/preprocess_transcripts_fasta_gencode/tests/main.nf.test.snap index eaef85b1b..94881d024 100644 --- a/modules/local/preprocess_transcripts_fasta_gencode/tests/main.nf.test.snap +++ b/modules/local/preprocess_transcripts_fasta_gencode/tests/main.nf.test.snap @@ -6,21 +6,22 @@ "gencodeFasta.fixed.fa:md5,e9267fa40efc784cc92575b5ba8a441b" ], "1": [ - "versions.yml:md5,e2c7f636c472887a914b128d1444737e" + [ + "PREPROCESS_TRANSCRIPTS_FASTA_GENCODE", + "sed", + "4.7" + ] ], "fasta": [ "gencodeFasta.fixed.fa:md5,e9267fa40efc784cc92575b5ba8a441b" - ], - "versions": [ - "versions.yml:md5,e2c7f636c472887a914b128d1444737e" ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2024-03-06T16:16:36.494744" + "timestamp": "2026-02-04T15:59:40.238809244" }, "gencode fasta - stub": { "content": [ @@ -29,20 +30,21 @@ "gencodeFasta.fixed.fa:md5,d41d8cd98f00b204e9800998ecf8427e" ], "1": [ - "versions.yml:md5,e2c7f636c472887a914b128d1444737e" + [ + "PREPROCESS_TRANSCRIPTS_FASTA_GENCODE", + "sed", + "4.7" + ] ], "fasta": [ "gencodeFasta.fixed.fa:md5,d41d8cd98f00b204e9800998ecf8427e" - ], - "versions": [ - "versions.yml:md5,e2c7f636c472887a914b128d1444737e" ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2024-06-21T11:54:20.291494" + "timestamp": "2026-02-04T15:59:48.074469078" } } \ No newline at end of file diff --git a/modules/local/rsem_merge_counts/environment.yml b/modules/local/rsem_merge_counts/environment.yml deleted file mode 100644 index b7c48640f..000000000 --- a/modules/local/rsem_merge_counts/environment.yml +++ /dev/null @@ -1,5 +0,0 @@ -channels: - - conda-forge - - bioconda -dependencies: - - conda-forge::sed=4.7 diff --git a/modules/local/rsem_merge_counts/tests/main.nf.test b/modules/local/rsem_merge_counts/tests/main.nf.test deleted file mode 100644 index 61008082a..000000000 --- a/modules/local/rsem_merge_counts/tests/main.nf.test +++ /dev/null @@ -1,62 +0,0 @@ -nextflow_process { - - name "Test Process RSEM_MERGE_COUNTS" - script "../main.nf" - process "RSEM_MERGE_COUNTS" - - test("Should run without failures") { - - when { - process { - """ - input[0] = Channel.of([ - file(params.pipelines_testdata_base_path + "rsem_merge_counts/genes/RAP1_IAA_30M_REP1.genes.results", checkIfExists: true), - file(params.pipelines_testdata_base_path + "rsem_merge_counts/genes/RAP1_UNINDUCED_REP1.genes.results", checkIfExists: true), - file(params.pipelines_testdata_base_path + "rsem_merge_counts/genes/RAP1_UNINDUCED_REP2.genes.results", checkIfExists: true) - ]).collect() - input[1] = Channel.of([ - file(params.pipelines_testdata_base_path + "rsem_merge_counts/isoforms/RAP1_IAA_30M_REP1.isoforms.results", checkIfExists: true), - file(params.pipelines_testdata_base_path + "rsem_merge_counts/isoforms/RAP1_UNINDUCED_REP1.isoforms.results", checkIfExists: true), - file(params.pipelines_testdata_base_path + "rsem_merge_counts/isoforms/RAP1_UNINDUCED_REP2.isoforms.results", checkIfExists: true) - ]).collect() - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(process.out).match() } - ) - } - } - - test("stub") { - - options "-stub" - - when { - process { - """ - input[0] = Channel.of([ - file(params.pipelines_testdata_base_path + "rsem_merge_counts/genes/RAP1_IAA_30M_REP1.genes.results", checkIfExists: true), - file(params.pipelines_testdata_base_path + "rsem_merge_counts/genes/RAP1_UNINDUCED_REP1.genes.results", checkIfExists: true), - file(params.pipelines_testdata_base_path + "rsem_merge_counts/genes/RAP1_UNINDUCED_REP2.genes.results", checkIfExists: true) - ]).collect() - input[1] = Channel.of([ - file(params.pipelines_testdata_base_path + "rsem_merge_counts/isoforms/RAP1_IAA_30M_REP1.isoforms.results", checkIfExists: true), - file(params.pipelines_testdata_base_path + "rsem_merge_counts/isoforms/RAP1_UNINDUCED_REP1.isoforms.results", checkIfExists: true), - file(params.pipelines_testdata_base_path + "rsem_merge_counts/isoforms/RAP1_UNINDUCED_REP2.isoforms.results", checkIfExists: true) - ]).collect() - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(process.out).match() } - ) - } - } -} diff --git a/modules/local/rsem_merge_counts/tests/main.nf.test.snap b/modules/local/rsem_merge_counts/tests/main.nf.test.snap deleted file mode 100644 index da991326f..000000000 --- a/modules/local/rsem_merge_counts/tests/main.nf.test.snap +++ /dev/null @@ -1,108 +0,0 @@ -{ - "stub": { - "content": [ - { - "0": [ - "rsem.merged.gene_counts.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" - ], - "1": [ - "rsem.merged.gene_tpm.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" - ], - "2": [ - "rsem.merged.transcript_counts.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" - ], - "3": [ - "rsem.merged.transcript_tpm.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" - ], - "4": [ - "rsem.merged.genes_long.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" - ], - "5": [ - "rsem.merged.isoforms_long.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" - ], - "6": [ - "versions.yml:md5,48ca3e12c91829af8019462b3f6aa29c" - ], - "counts_gene": [ - "rsem.merged.gene_counts.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" - ], - "counts_transcript": [ - "rsem.merged.transcript_counts.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" - ], - "genes_long": [ - "rsem.merged.genes_long.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" - ], - "isoforms_long": [ - "rsem.merged.isoforms_long.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" - ], - "tpm_gene": [ - "rsem.merged.gene_tpm.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" - ], - "tpm_transcript": [ - "rsem.merged.transcript_tpm.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" - ], - "versions": [ - "versions.yml:md5,48ca3e12c91829af8019462b3f6aa29c" - ] - } - ], - "meta": { - "nf-test": "0.9.3", - "nextflow": "25.04.6" - }, - "timestamp": "2025-11-27T17:09:36.795867708" - }, - "Should run without failures": { - "content": [ - { - "0": [ - "rsem.merged.gene_counts.tsv:md5,7d1da94077dc2f90cfb2c793ca5b7446" - ], - "1": [ - "rsem.merged.gene_tpm.tsv:md5,39bad606eb012456bba1d995fe0feb5f" - ], - "2": [ - "rsem.merged.transcript_counts.tsv:md5,e40bba0aafc5904361513b3513c217ad" - ], - "3": [ - "rsem.merged.transcript_tpm.tsv:md5,abbaac45f9938716c58d604299ea284e" - ], - "4": [ - "rsem.merged.genes_long.tsv:md5,e26cd2b3b381432a011eed98f3ad4e6d" - ], - "5": [ - "rsem.merged.isoforms_long.tsv:md5,33b189595600493b917d786a542de8e9" - ], - "6": [ - "versions.yml:md5,48ca3e12c91829af8019462b3f6aa29c" - ], - "counts_gene": [ - "rsem.merged.gene_counts.tsv:md5,7d1da94077dc2f90cfb2c793ca5b7446" - ], - "counts_transcript": [ - "rsem.merged.transcript_counts.tsv:md5,e40bba0aafc5904361513b3513c217ad" - ], - "genes_long": [ - "rsem.merged.genes_long.tsv:md5,e26cd2b3b381432a011eed98f3ad4e6d" - ], - "isoforms_long": [ - "rsem.merged.isoforms_long.tsv:md5,33b189595600493b917d786a542de8e9" - ], - "tpm_gene": [ - "rsem.merged.gene_tpm.tsv:md5,39bad606eb012456bba1d995fe0feb5f" - ], - "tpm_transcript": [ - "rsem.merged.transcript_tpm.tsv:md5,abbaac45f9938716c58d604299ea284e" - ], - "versions": [ - "versions.yml:md5,48ca3e12c91829af8019462b3f6aa29c" - ] - } - ], - "meta": { - "nf-test": "0.9.3", - "nextflow": "25.04.6" - }, - "timestamp": "2025-11-27T17:09:28.461621756" - } -} \ No newline at end of file diff --git a/modules/local/star_align_igenomes/environment.yml b/modules/local/star_align_igenomes/environment.yml deleted file mode 100644 index dae1aa802..000000000 --- a/modules/local/star_align_igenomes/environment.yml +++ /dev/null @@ -1,8 +0,0 @@ -channels: - - conda-forge - - bioconda - - seqera -dependencies: - - star=2.6.1d - - bioconda::samtools=1.21 - - conda-forge::gawk=5.1.0 diff --git a/modules/local/star_align_igenomes/main.nf b/modules/local/star_align_igenomes/main.nf deleted file mode 100644 index c19fe93af..000000000 --- a/modules/local/star_align_igenomes/main.nf +++ /dev/null @@ -1,105 +0,0 @@ -process STAR_ALIGN_IGENOMES { - tag "$meta.id" - label 'process_high' - - conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/50/50bb64440689d5d7af4bf8ad1032f01aa4e1597e0bb1c82ee91e8cb43943283c/data' : - 'community.wave.seqera.io/library/star_samtools_gawk:79ca42311e583cdc' }" - - 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('*.out.junction') , optional:true, emit: junction - tuple val(meta), path('*.out.sam') , optional:true, emit: sam - - when: - task.ext.when == null || task.ext.when - - script: - def args = task.ext.args ?: '' - def prefix = task.ext.prefix ?: "${meta.id}" - def reads1 = [] - def 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 ? "--outSAMattrRGline ID:$prefix 'CN:$seq_center' 'SM:$prefix' $seq_platform " : "--outSAMattrRGline ID:$prefix '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 \\ - $seq_center \\ - $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/local/star_align_igenomes/tests/main.nf.test b/modules/local/star_align_igenomes/tests/main.nf.test deleted file mode 100644 index 7e7d785dd..000000000 --- a/modules/local/star_align_igenomes/tests/main.nf.test +++ /dev/null @@ -1,534 +0,0 @@ -nextflow_process { - - name "Test Process STAR_ALIGN_IGENOMES" - script "../main.nf" - process "STAR_ALIGN_IGENOMES" - - test("homo_sapiens - single_end") { - config "./nextflow.config" - setup { - run("STAR_GENOMEGENERATE_IGENOMES") { - script "../../star_genomegenerate_igenomes/main.nf" - process { - """ - input[0] = Channel.of([file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true)]) - input[1] = Channel.of([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_IGENOMES.out.index.map{ [ [id:'star'], it ] } - 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_IGENOMES") { - script "../../star_genomegenerate_igenomes/main.nf" - process { - """ - input[0] = Channel.of([file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true)]) - input[1] = Channel.of([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_IGENOMES.out.index.map{ [ [id:'star'], it ] } - 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_IGENOMES") { - script "../../star_genomegenerate_igenomes/main.nf" - process { - """ - input[0] = Channel.of([file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true)]) - input[1] = Channel.of([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_IGENOMES.out.index.map{ [ [id:'star'], it ] } - 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, - file(process.out.bam[0][1]).name, - 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_IGENOMES") { - script "../../star_genomegenerate_igenomes/main.nf" - process { - """ - input[0] = Channel.of([file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true)]) - input[1] = Channel.of([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_IGENOMES.out.index.map{ [ [id:'star'], it ] } - 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_IGENOMES") { - script "../../star_genomegenerate_igenomes/main.nf" - process { - """ - input[0] = Channel.of([file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true)]) - input[1] = Channel.of([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_IGENOMES.out.index.map{ [ [id:'star'], it ] } - 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_IGENOMES") { - script "../../star_genomegenerate_igenomes/main.nf" - process { - """ - input[0] = Channel.of([file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true)]) - input[1] = Channel.of([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_IGENOMES.out.index.map{ [ [id:'star'], it ] } - 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_IGENOMES") { - script "../../star_genomegenerate_igenomes/main.nf" - process { - """ - input[0] = Channel.of([file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true)]) - input[1] = Channel.of([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_IGENOMES.out.index.map{ [ [id:'star'], it ] } - 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_IGENOMES") { - script "../../star_genomegenerate_igenomes/main.nf" - process { - """ - input[0] = Channel.of([file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true)]) - input[1] = Channel.of([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_IGENOMES.out.index.map{ [ [id:'star'], it ] } - 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_IGENOMES") { - script "../../star_genomegenerate_igenomes/main.nf" - process { - """ - input[0] = Channel.of([file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true)]) - input[1] = Channel.of([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_IGENOMES.out.index.map{ [ [id:'star'], it ] } - 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_IGENOMES") { - script "../../star_genomegenerate_igenomes/main.nf" - process { - """ - input[0] = Channel.of([file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true)]) - input[1] = Channel.of([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_IGENOMES.out.index.map{ [ [id:'star'], it ] } - 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() } - ) - } - } -} diff --git a/modules/local/star_align_igenomes/tests/main.nf.test.snap b/modules/local/star_align_igenomes/tests/main.nf.test.snap deleted file mode 100644 index 07555ebe7..000000000 --- a/modules/local/star_align_igenomes/tests/main.nf.test.snap +++ /dev/null @@ -1,1514 +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.Chimeric.out.junction:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "11": [ - [ - { - "id": "test", - "single_end": true - }, - "test.out.sam:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "2": [ - [ - { - "id": "test", - "single_end": true - }, - "test.Log.progress.out:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "3": [ - "versions.yml:md5,1d87ea190fd5f463b8ae318cf966c675" - ], - "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" - ] - ], - "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" - ] - ], - "sam": [ - [ - { - "id": "test", - "single_end": true - }, - "test.out.sam: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,1d87ea190fd5f463b8ae318cf966c675" - ] - } - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" - }, - "timestamp": "2024-07-22T20:12:37.024869" - }, - "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.Chimeric.out.junction:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "11": [ - [ - { - "id": "test", - "single_end": false - }, - "test.out.sam:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "2": [ - [ - { - "id": "test", - "single_end": false - }, - "test.Log.progress.out:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "3": [ - "versions.yml:md5,1d87ea190fd5f463b8ae318cf966c675" - ], - "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" - ] - ], - "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" - ] - ], - "sam": [ - [ - { - "id": "test", - "single_end": false - }, - "test.out.sam: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,1d87ea190fd5f463b8ae318cf966c675" - ] - } - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" - }, - "timestamp": "2024-07-22T20:13:17.56838" - }, - "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,e5060a8dd60584378786c588c3f25b4d" - ] - ], - [ - [ - { - "id": "test", - "single_end": true - }, - "test.Aligned.sortedByCoord.out.bam:md5,e5060a8dd60584378786c588c3f25b4d" - ] - ], - [ - - ], - [ - - ], - null, - [ - - ], - [ - - ], - null, - [ - - ], - null, - [ - [ - { - "id": "test", - "single_end": true - }, - "test.SJ.out.tab:md5,75a516ab950fb958f40b29996474949c" - ] - ], - null, - [ - "versions.yml:md5,1d87ea190fd5f463b8ae318cf966c675" - ] - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" - }, - "timestamp": "2024-07-22T20:04:35.055193" - }, - "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,b6cec9bba6b04b9b92eddbef128bdfbb" - ] - ], - [ - [ - { - "id": "test", - "single_end": false - }, - "test.Aligned.sortedByCoord.out.bam:md5,b6cec9bba6b04b9b92eddbef128bdfbb" - ] - ], - [ - - ], - [ - - ], - null, - [ - - ], - [ - - ], - null, - [ - - ], - null, - [ - [ - { - "id": "test", - "single_end": false - }, - "test.SJ.out.tab:md5,844af19ab0fc8cd9a3f75228445aca0d" - ] - ], - null, - [ - "versions.yml:md5,1d87ea190fd5f463b8ae318cf966c675" - ] - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" - }, - "timestamp": "2024-07-22T20:05:25.626464" - }, - "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.Chimeric.out.junction:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "11": [ - [ - { - "id": "test", - "single_end": false - }, - "test.out.sam:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "2": [ - [ - { - "id": "test", - "single_end": false - }, - "test.Log.progress.out:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "3": [ - "versions.yml:md5,1d87ea190fd5f463b8ae318cf966c675" - ], - "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" - ] - ], - "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" - ] - ], - "sam": [ - [ - { - "id": "test", - "single_end": false - }, - "test.out.sam: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,1d87ea190fd5f463b8ae318cf966c675" - ] - } - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" - }, - "timestamp": "2024-07-22T20:14:00.135162" - }, - "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,7b20152380dbc52ec23d2e95a7953710" - ] - ], - [ - [ - { - "id": "test", - "single_end": false - }, - "test.Aligned.sortedByCoord.out.bam:md5,7b20152380dbc52ec23d2e95a7953710" - ] - ], - [ - - ], - [ - - ], - null, - [ - - ], - [ - - ], - null, - [ - - ], - null, - [ - [ - { - "id": "test", - "single_end": false - }, - "test.SJ.out.tab:md5,069877e053714e23010fe4e1c003b4a2" - ] - ], - null, - [ - "versions.yml:md5,1d87ea190fd5f463b8ae318cf966c675" - ] - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" - }, - "timestamp": "2024-07-22T20:12:16.618713" - }, - "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.Chimeric.out.junction:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "11": [ - [ - { - "id": "test", - "single_end": false - }, - "test.out.sam:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "2": [ - [ - { - "id": "test", - "single_end": false - }, - "test.Log.progress.out:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "3": [ - "versions.yml:md5,1d87ea190fd5f463b8ae318cf966c675" - ], - "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" - ] - ], - "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" - ] - ], - "sam": [ - [ - { - "id": "test", - "single_end": false - }, - "test.out.sam: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,1d87ea190fd5f463b8ae318cf966c675" - ] - } - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" - }, - "timestamp": "2024-07-22T20:12:56.326797" - }, - "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,7806e69c537f72e494f9ce8e95f16355" - ] - ], - [ - - ], - [ - - ], - [ - - ], - null, - [ - - ], - [ - [ - { - "id": "test", - "single_end": false - }, - "test.Chimeric.out.junction:md5,c6d4d8c641ebb1c152a10da44f0dbf20" - ] - ], - null, - [ - - ], - null, - [ - [ - { - "id": "test", - "single_end": false - }, - "test.SJ.out.tab:md5,19c3faa1bfa9a0cc5e4c45f17065b53a" - ] - ], - null, - [ - "versions.yml:md5,1d87ea190fd5f463b8ae318cf966c675" - ] - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" - }, - "timestamp": "2024-07-22T20:10:49.022723" - }, - "homo_sapiens - paired_end - arriba": { - "content": [ - "test.Log.final.out", - "test.Log.out", - "test.Log.progress.out", - "test.Aligned.out.bam", - [ - - ], - [ - - ], - [ - - ], - null, - [ - - ], - [ - [ - { - "id": "test", - "single_end": false - }, - "test.Chimeric.out.junction:md5,62760fd60371d5bacae324c370358944" - ] - ], - null, - [ - - ], - null, - [ - [ - { - "id": "test", - "single_end": false - }, - "test.SJ.out.tab:md5,5155c9fd1f787ad6d7d80987fb06219c" - ] - ], - null, - [ - "versions.yml:md5,1d87ea190fd5f463b8ae318cf966c675" - ] - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" - }, - "timestamp": "2024-07-22T20:07:19.724256" - }, - "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.Chimeric.out.junction:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "11": [ - [ - { - "id": "test", - "single_end": false - }, - "test.out.sam:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "2": [ - [ - { - "id": "test", - "single_end": false - }, - "test.Log.progress.out:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "3": [ - "versions.yml:md5,1d87ea190fd5f463b8ae318cf966c675" - ], - "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" - ] - ], - "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" - ] - ], - "sam": [ - [ - { - "id": "test", - "single_end": false - }, - "test.out.sam: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,1d87ea190fd5f463b8ae318cf966c675" - ] - } - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" - }, - "timestamp": "2024-07-22T20:13:37.606866" - } -} \ No newline at end of file diff --git a/modules/local/star_align_igenomes/tests/nextflow.arriba.config b/modules/local/star_align_igenomes/tests/nextflow.arriba.config deleted file mode 100644 index a9a3c237c..000000000 --- a/modules/local/star_align_igenomes/tests/nextflow.arriba.config +++ /dev/null @@ -1,14 +0,0 @@ -process { - - withName: STAR_GENOMEGENERATE_IGENOMES { - ext.args = '--genomeSAindexNbases 9' - } - - withName: STAR_ALIGN_IGENOMES { - 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 WithinBAM HardClip --chimJunctionOverhangMin 10 --chimScoreDropMax 30 --chimScoreJunctionNonGTAG 0 --chimScoreSeparation 1 --chimSegmentReadGapMax 3 --chimMultimapNmax 50 --chimOutType Junctions' - } - -} - -// Fix chown issue for the output star folder -docker.runOptions = '-u $(id -u):$(id -g)' diff --git a/modules/local/star_align_igenomes/tests/nextflow.config b/modules/local/star_align_igenomes/tests/nextflow.config deleted file mode 100644 index 44012b5b4..000000000 --- a/modules/local/star_align_igenomes/tests/nextflow.config +++ /dev/null @@ -1,14 +0,0 @@ -process { - - withName: STAR_GENOMEGENERATE_IGENOMES { - ext.args = '--genomeSAindexNbases 9' - } - - withName: STAR_ALIGN_IGENOMES { - ext.args = '--readFilesCommand zcat --outSAMtype BAM SortedByCoordinate --outWigType bedGraph --outWigStrand Unstranded' - } - -} - -// Fix chown issue for the output star folder -docker.runOptions = '-u $(id -u):$(id -g)' diff --git a/modules/local/star_align_igenomes/tests/nextflow.starfusion.config b/modules/local/star_align_igenomes/tests/nextflow.starfusion.config deleted file mode 100644 index 30a7b3b38..000000000 --- a/modules/local/star_align_igenomes/tests/nextflow.starfusion.config +++ /dev/null @@ -1,14 +0,0 @@ -process { - - withName: STAR_GENOMEGENERATE_IGENOMES { - ext.args = '--genomeSAindexNbases 9' - } - - withName: STAR_ALIGN_IGENOMES { - 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 = '-u $(id -u):$(id -g)' diff --git a/modules/local/star_genomegenerate_igenomes/environment.yml b/modules/local/star_genomegenerate_igenomes/environment.yml deleted file mode 100644 index dae1aa802..000000000 --- a/modules/local/star_genomegenerate_igenomes/environment.yml +++ /dev/null @@ -1,8 +0,0 @@ -channels: - - conda-forge - - bioconda - - seqera -dependencies: - - star=2.6.1d - - bioconda::samtools=1.21 - - conda-forge::gawk=5.1.0 diff --git a/modules/local/star_genomegenerate_igenomes/main.nf b/modules/local/star_genomegenerate_igenomes/main.nf deleted file mode 100644 index d3282db48..000000000 --- a/modules/local/star_genomegenerate_igenomes/main.nf +++ /dev/null @@ -1,119 +0,0 @@ -process STAR_GENOMEGENERATE_IGENOMES { - tag "$fasta" - label 'process_high' - - conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/50/50bb64440689d5d7af4bf8ad1032f01aa4e1597e0bb1c82ee91e8cb43943283c/data' : - 'community.wave.seqera.io/library/star_samtools_gawk:79ca42311e583cdc' }" - - input: - path fasta - path gtf - - output: - 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/local/star_genomegenerate_igenomes/tests/main.nf.test b/modules/local/star_genomegenerate_igenomes/tests/main.nf.test deleted file mode 100644 index d3bd71891..000000000 --- a/modules/local/star_genomegenerate_igenomes/tests/main.nf.test +++ /dev/null @@ -1,93 +0,0 @@ -nextflow_process { - - name "Test Process STAR_GENOMEGENERATE_IGENOMES" - script "../main.nf" - process "STAR_GENOMEGENERATE_IGENOMES" - - test("fasta with gtf") { - - when { - process { - """ - input[0] = Channel.of([file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true)]) - input[1] = Channel.of([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 no gtf") { - - when { - process { - """ - input[0] = Channel.of([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 with gtf - stub") { - - options '-stub' - - when { - process { - """ - input[0] = Channel.of([file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true)]) - input[1] = Channel.of([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 no gtf - stub") { - - options '-stub' - - when { - process { - """ - input[0] = Channel.of([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/local/star_genomegenerate_igenomes/tests/main.nf.test.snap b/modules/local/star_genomegenerate_igenomes/tests/main.nf.test.snap deleted file mode 100644 index 4622baf9b..000000000 --- a/modules/local/star_genomegenerate_igenomes/tests/main.nf.test.snap +++ /dev/null @@ -1,128 +0,0 @@ -{ - "fasta with gtf": { - "content": [ - "[]", - [ - "versions.yml:md5,fcd34fef756da88336a9685d41433075" - ] - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" - }, - "timestamp": "2024-07-22T20:14:17.250178" - }, - "fasta no gtf - stub": { - "content": [ - { - "0": [ - [ - "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,fcd34fef756da88336a9685d41433075" - ], - "index": [ - [ - "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,fcd34fef756da88336a9685d41433075" - ] - } - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" - }, - "timestamp": "2024-07-22T20:15:09.671637" - }, - "fasta no gtf": { - "content": [ - "[]", - [ - "versions.yml:md5,fcd34fef756da88336a9685d41433075" - ] - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" - }, - "timestamp": "2024-07-22T20:14:35.674278" - }, - "fasta with gtf - stub": { - "content": [ - { - "0": [ - [ - "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,fcd34fef756da88336a9685d41433075" - ], - "index": [ - [ - "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,fcd34fef756da88336a9685d41433075" - ] - } - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" - }, - "timestamp": "2024-07-22T20:14:52.732323" - } -} \ No newline at end of file diff --git a/modules/nf-core/bbmap/bbsplit/main.nf b/modules/nf-core/bbmap/bbsplit/main.nf index c755bb718..bce220832 100644 --- a/modules/nf-core/bbmap/bbsplit/main.nf +++ b/modules/nf-core/bbmap/bbsplit/main.nf @@ -21,7 +21,7 @@ process BBMAP_BBSPLIT { tuple val(meta), path('*fastq.gz') , optional:true, emit: all_fastq tuple val(meta), path('*txt') , optional:true, emit: stats tuple val(meta), path('*.log') , optional:true, emit: log - path "versions.yml" , emit: versions + tuple val("${task.process}"), val('bbmap'), eval('bbversion.sh | grep -v "Duplicate cpuset"'), topic: versions, emit: versions_bbmap when: task.ext.when == null || task.ext.when @@ -38,8 +38,8 @@ process BBMAP_BBSPLIT { } def other_refs = [] - other_ref_names.eachWithIndex { name, index -> - other_refs << "ref_${name}=${other_ref_paths[index]}" + other_ref_names.eachWithIndex { name, idx -> + other_refs << "ref_${name}=${other_ref_paths[idx]}" } def fastq_in='' @@ -79,7 +79,7 @@ process BBMAP_BBSPLIT { done find index_writable/ref/genome -name summary.txt | while read -r summary_file; do src=\$(grep '^source' "\$summary_file" | cut -f2- -d\$'\\t' | sed 's|.*/ref/|index_writable/ref/|') - mod=\$(echo "System.out.println(java.nio.file.Files.getLastModifiedTime(java.nio.file.Paths.get(\\"\$src\\")).toMillis());" | jshell -J-Djdk.lang.Process.launchMechanism=vfork -) + mod=\$(echo "System.out.println(java.nio.file.Files.getLastModifiedTime(java.nio.file.Paths.get(\\"\$src\\")).toMillis());" | jshell -J-Djdk.lang.Process.launchMechanism=vfork - 2>/dev/null | grep -oE '^[0-9]{12,14}\$') sed -e 's|bbsplit_index/ref|index_writable/ref|' -e "s|^last modified.*|last modified\\t\$mod|" "\$summary_file" > \${summary_file}.tmp && mv \${summary_file}.tmp \${summary_file} done fi @@ -103,17 +103,12 @@ process BBMAP_BBSPLIT { done mv bbsplit_build bbsplit_index fi - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - bbmap: \$(bbversion.sh | grep -v "Duplicate cpuset") - END_VERSIONS """ stub: def prefix = task.ext.prefix ?: "${meta.id}" def other_refs = '' - other_ref_names.eachWithIndex { name, index -> + other_ref_names.eachWithIndex { name, _idx -> other_refs += "echo '' | gzip > ${prefix}_${name}.fastq.gz" } def will_build_index = only_build_index || (!index && primary_ref && other_ref_names && other_ref_paths) @@ -131,10 +126,5 @@ process BBMAP_BBSPLIT { fi touch ${prefix}.log - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - bbmap: \$(bbversion.sh | grep -v "Duplicate cpuset") - END_VERSIONS """ } diff --git a/modules/nf-core/bbmap/bbsplit/meta.yml b/modules/nf-core/bbmap/bbsplit/meta.yml index 66f87cce0..ecab992d0 100644 --- a/modules/nf-core/bbmap/bbsplit/meta.yml +++ b/modules/nf-core/bbmap/bbsplit/meta.yml @@ -96,13 +96,29 @@ output: description: Log file pattern: "*.log" ontologies: [] + versions_bbmap: + - - ${task.process}: + type: string + description: The process the versions were collected from + - bbmap: + type: string + description: The tool name + - bbversion.sh | grep -v "Duplicate cpuset": + type: eval + description: The expression to obtain the version of the tool + +topics: versions: - - versions.yml: - type: file - description: File containing software versions - pattern: "versions.yml" - ontologies: - - edam: http://edamontology.org/format_3750 # YAML + - - ${task.process}: + type: string + description: The process the versions were collected from + - bbmap: + type: string + description: The tool name + - bbversion.sh | grep -v "Duplicate cpuset": + type: eval + description: The expression to obtain the version of the tool + authors: - "@joseespinosa" - "@drpatelh" diff --git a/modules/nf-core/bbmap/bbsplit/nextflow.config b/modules/nf-core/bbmap/bbsplit/nextflow.config index 8d71e9d85..b1bd66c35 100644 --- a/modules/nf-core/bbmap/bbsplit/nextflow.config +++ b/modules/nf-core/bbmap/bbsplit/nextflow.config @@ -1,20 +1,18 @@ -if (!params.skip_bbsplit) { - process { - withName: 'BBMAP_BBSPLIT' { - ext.args = 'build=1 ambiguous2=all maxindel=150000 ow=f' - publishDir = [ - [ - path: { "${params.outdir}/bbsplit" }, - mode: params.publish_dir_mode, - pattern: '*.txt' - ], - [ - path: { params.save_bbsplit_reads ? "${params.outdir}/bbsplit" : params.outdir }, - mode: params.publish_dir_mode, - pattern: '*.fastq.gz', - saveAs: { params.save_bbsplit_reads ? it : null } - ] +process { + withName: 'BBMAP_BBSPLIT' { + ext.args = 'build=1 ambiguous2=all maxindel=150000 ow=f' + publishDir = [ + [ + path: { "${params.outdir}/bbsplit" }, + mode: params.publish_dir_mode, + pattern: '*.txt' + ], + [ + path: { params.save_bbsplit_reads ? "${params.outdir}/bbsplit" : params.outdir }, + mode: params.publish_dir_mode, + pattern: '*.fastq.gz', + saveAs: { filename -> params.save_bbsplit_reads ? filename : null } ] - } + ] } } diff --git a/modules/nf-core/bbmap/bbsplit/tests/main.nf.test b/modules/nf-core/bbmap/bbsplit/tests/main.nf.test index 2f942f39c..82985102f 100644 --- a/modules/nf-core/bbmap/bbsplit/tests/main.nf.test +++ b/modules/nf-core/bbmap/bbsplit/tests/main.nf.test @@ -30,7 +30,7 @@ nextflow_process { { assert process.success }, { assert path("${process.out.index[0]}").exists() }, { assert path(process.out.log[0][1]).text.contains("No index available") }, - { assert snapshot(process.out.versions).match() } + { assert snapshot(process.out.findAll { key, val -> key.startsWith("versions") }).match() } ) } } @@ -104,7 +104,7 @@ nextflow_process { { assert snapshot( process.out.primary_fastq, process.out.stats, - process.out.versions + process.out.findAll { key, val -> key.startsWith("versions") } ).match()} ) } diff --git a/modules/nf-core/bbmap/bbsplit/tests/main.nf.test.snap b/modules/nf-core/bbmap/bbsplit/tests/main.nf.test.snap index 7e739a663..b5fbb54f3 100644 --- a/modules/nf-core/bbmap/bbsplit/tests/main.nf.test.snap +++ b/modules/nf-core/bbmap/bbsplit/tests/main.nf.test.snap @@ -19,26 +19,38 @@ "test.stats.txt:md5,2cbf69b72e5f4f8508306b54e8fe2861" ] ], - [ - "versions.yml:md5,b75d21d7649b5a512e7b54dd15cd3eba" - ] + { + "versions_bbmap": [ + [ + "BBMAP_BBSPLIT", + "bbmap", + "39.18" + ] + ] + } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.10.0" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-11-07T12:36:23.511852" + "timestamp": "2026-01-19T14:51:21.775776" }, "sarscov2_se_fastq_fasta_chr22_fasta - build index": { "content": [ - [ - "versions.yml:md5,b75d21d7649b5a512e7b54dd15cd3eba" - ] + { + "versions_bbmap": [ + [ + "BBMAP_BBSPLIT", + "bbmap", + "39.18" + ] + ] + } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.10.0" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-11-07T11:05:45.517832" + "timestamp": "2026-01-19T14:50:28.922018" } } \ No newline at end of file diff --git a/modules/nf-core/bedtools/genomecov/main.nf b/modules/nf-core/bedtools/genomecov/main.nf index 35e2ab14b..710da5b47 100644 --- a/modules/nf-core/bedtools/genomecov/main.nf +++ b/modules/nf-core/bedtools/genomecov/main.nf @@ -1,66 +1,57 @@ process BEDTOOLS_GENOMECOV { - tag "$meta.id" + tag "${meta.id}" label 'process_single' conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/63/6397750e9730a3fbcc5b4c43f14bd141c64c723fd7dad80e47921a68a7c3cd21/data': - 'community.wave.seqera.io/library/bedtools_coreutils:a623c13f66d5262b' }" + container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container + ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/63/6397750e9730a3fbcc5b4c43f14bd141c64c723fd7dad80e47921a68a7c3cd21/data' + : 'community.wave.seqera.io/library/bedtools_coreutils:a623c13f66d5262b'}" input: tuple val(meta), path(intervals), val(scale) - path sizes - val extension - val sort + path sizes + val extension + val sort output: tuple val(meta), path("*.${extension}"), emit: genomecov - path "versions.yml" , emit: versions + tuple val("${task.process}"), val('bedtools'), eval("bedtools --version | sed -e 's/bedtools v//g'"), topic: versions, emit: versions_bedtools when: task.ext.when == null || task.ext.when script: - def args = task.ext.args ?: '' + def args = task.ext.args ?: '' def args_list = args.tokenize() - args += (scale > 0 && scale != 1) ? " -scale $scale" : "" + args += scale > 0 && scale != 1 ? " -scale ${scale}" : "" if (!args_list.contains('-bg') && (scale > 0 && scale != 1)) { args += " -bg" } // Sorts output file by chromosome and position using additional options for performance and consistency // See https://www.biostars.org/p/66927/ for further details - def buffer = task.memory ? "--buffer-size=${task.memory.toGiga().intdiv(2)}G" : '' - def sort_cmd = sort ? "| LC_ALL=C sort --parallel=$task.cpus $buffer -k1,1 -k2,2n" : '' + def buffer = task.memory ? "--buffer-size=${task.memory.toGiga().intdiv(2)}G" : '' + def sort_cmd = sort ? "| LC_ALL=C sort --parallel=${task.cpus} ${buffer} -k1,1 -k2,2n" : '' def prefix = task.ext.prefix ?: "${meta.id}" if (intervals.name =~ /\.bam/) { """ bedtools \\ genomecov \\ - -ibam $intervals \\ - $args \\ - $sort_cmd \\ + -ibam ${intervals} \\ + ${args} \\ + ${sort_cmd} \\ > ${prefix}.${extension} - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - bedtools: \$(bedtools --version | sed -e "s/bedtools v//g") - END_VERSIONS """ - } else { + } + else { """ bedtools \\ genomecov \\ - -i $intervals \\ - -g $sizes \\ - $args \\ - $sort_cmd \\ + -i ${intervals} \\ + -g ${sizes} \\ + ${args} \\ + ${sort_cmd} \\ > ${prefix}.${extension} - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - bedtools: \$(bedtools --version | sed -e "s/bedtools v//g") - END_VERSIONS """ } @@ -68,10 +59,5 @@ process BEDTOOLS_GENOMECOV { def prefix = task.ext.prefix ?: "${meta.id}" """ touch ${prefix}.${extension} - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - bedtools: \$(bedtools --version | sed -e "s/bedtools v//g") - END_VERSIONS """ } diff --git a/modules/nf-core/bedtools/genomecov/meta.yml b/modules/nf-core/bedtools/genomecov/meta.yml index 41b1f8f49..69b911c23 100644 --- a/modules/nf-core/bedtools/genomecov/meta.yml +++ b/modules/nf-core/bedtools/genomecov/meta.yml @@ -24,26 +24,28 @@ input: type: file description: BAM/BED/GFF/VCF pattern: "*.{bam|bed|gff|vcf}" + ontologies: [] - scale: type: integer description: Number containing the scale factor for the output. Set to 1 to disable. Setting to a value other than 1 will also get the -bg bedgraph output format as this is required for this command switch - - - sizes: - type: file - description: Tab-delimited table of chromosome names in the first column and - chromosome sizes in the second column - - - extension: - type: string - description: Extension of the output file (e. g., ".bg", ".bedgraph", ".txt", - ".tab", etc.) It is set arbitrarily by the user and corresponds to the file - format which depends on arguments. - - - sort: - type: boolean - description: Sort the output + - sizes: + type: file + description: Tab-delimited table of chromosome names in the first column and chromosome + sizes in the second column + ontologies: [] + - extension: + type: string + description: Extension of the output file (e. g., ".bg", ".bedgraph", ".txt", + ".tab", etc.) It is set arbitrarily by the user and corresponds to the file + format which depends on arguments. + - sort: + type: boolean + description: Sort the output output: - - genomecov: - - meta: + genomecov: + - - meta: type: map description: | Groovy Map containing sample information @@ -52,11 +54,28 @@ output: type: file description: Computed genome coverage file pattern: "*.${extension}" - - versions: - - versions.yml: - type: file - description: File containing software versions - pattern: "versions.yml" + ontologies: [] + versions_bedtools: + - - ${task.process}: + type: string + description: The name of the process + - bedtools: + type: string + description: The name of the tool + - "bedtools --version | sed -e 's/bedtools v//g'": + type: eval + description: The expression to obtain the version of the tool +topics: + versions: + - - ${task.process}: + type: string + description: The name of the process + - bedtools: + type: string + description: The name of the tool + - "bedtools --version | sed -e 's/bedtools v//g'": + type: eval + description: The expression to obtain the version of the tool authors: - "@edmundmiller" - "@sruthipsuresh" diff --git a/modules/nf-core/bedtools/genomecov/tests/main.nf.test b/modules/nf-core/bedtools/genomecov/tests/main.nf.test index 13f043102..16a03492c 100644 --- a/modules/nf-core/bedtools/genomecov/tests/main.nf.test +++ b/modules/nf-core/bedtools/genomecov/tests/main.nf.test @@ -4,6 +4,10 @@ nextflow_process { process "BEDTOOLS_GENOMECOV" config "./nextflow.config" + tag "modules" + tag "modules_nfcore" + tag "bedtools" + tag "bedtools/genomecov" test("sarscov2 - no scale") { when { diff --git a/modules/nf-core/bedtools/genomecov/tests/main.nf.test.snap b/modules/nf-core/bedtools/genomecov/tests/main.nf.test.snap index da6dbe875..4175ae7c9 100644 --- a/modules/nf-core/bedtools/genomecov/tests/main.nf.test.snap +++ b/modules/nf-core/bedtools/genomecov/tests/main.nf.test.snap @@ -11,7 +11,11 @@ ] ], "1": [ - "versions.yml:md5,5fd44452613992a6f71f2c73d2e117f2" + [ + "BEDTOOLS_GENOMECOV", + "bedtools", + "2.31.1" + ] ], "genomecov": [ [ @@ -21,16 +25,20 @@ "test.coverage.txt:md5,01291b6e1beab72e046653e709eb0e10" ] ], - "versions": [ - "versions.yml:md5,5fd44452613992a6f71f2c73d2e117f2" + "versions_bedtools": [ + [ + "BEDTOOLS_GENOMECOV", + "bedtools", + "2.31.1" + ] ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2024-07-05T11:59:33.898146" + "timestamp": "2026-01-21T11:30:01.187722797" }, "sarscov2 - no scale - stub": { "content": [ @@ -44,7 +52,11 @@ ] ], "1": [ - "versions.yml:md5,5fd44452613992a6f71f2c73d2e117f2" + [ + "BEDTOOLS_GENOMECOV", + "bedtools", + "2.31.1" + ] ], "genomecov": [ [ @@ -54,16 +66,20 @@ "test.coverage.txt:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "versions": [ - "versions.yml:md5,5fd44452613992a6f71f2c73d2e117f2" + "versions_bedtools": [ + [ + "BEDTOOLS_GENOMECOV", + "bedtools", + "2.31.1" + ] ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2024-07-05T11:59:52.483371" + "timestamp": "2026-01-21T11:30:16.248235814" }, "sarscov2 - scale": { "content": [ @@ -77,7 +93,11 @@ ] ], "1": [ - "versions.yml:md5,5fd44452613992a6f71f2c73d2e117f2" + [ + "BEDTOOLS_GENOMECOV", + "bedtools", + "2.31.1" + ] ], "genomecov": [ [ @@ -87,16 +107,20 @@ "test.coverage.txt:md5,de3c59c0ea123bcdbbad27bc0a0a601e" ] ], - "versions": [ - "versions.yml:md5,5fd44452613992a6f71f2c73d2e117f2" + "versions_bedtools": [ + [ + "BEDTOOLS_GENOMECOV", + "bedtools", + "2.31.1" + ] ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2024-07-05T11:59:43.69501" + "timestamp": "2026-01-21T11:30:08.76325362" }, "sarscov2 - scale - stub": { "content": [ @@ -110,7 +134,11 @@ ] ], "1": [ - "versions.yml:md5,5fd44452613992a6f71f2c73d2e117f2" + [ + "BEDTOOLS_GENOMECOV", + "bedtools", + "2.31.1" + ] ], "genomecov": [ [ @@ -120,16 +148,20 @@ "test.coverage.txt:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "versions": [ - "versions.yml:md5,5fd44452613992a6f71f2c73d2e117f2" + "versions_bedtools": [ + [ + "BEDTOOLS_GENOMECOV", + "bedtools", + "2.31.1" + ] ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2024-07-05T12:00:09.930036" + "timestamp": "2026-01-21T11:30:32.324649338" }, "sarscov2 - no scale": { "content": [ @@ -143,7 +175,11 @@ ] ], "1": [ - "versions.yml:md5,5fd44452613992a6f71f2c73d2e117f2" + [ + "BEDTOOLS_GENOMECOV", + "bedtools", + "2.31.1" + ] ], "genomecov": [ [ @@ -153,16 +189,20 @@ "test.coverage.txt:md5,66083198daca6c001d328ba9616e9b53" ] ], - "versions": [ - "versions.yml:md5,5fd44452613992a6f71f2c73d2e117f2" + "versions_bedtools": [ + [ + "BEDTOOLS_GENOMECOV", + "bedtools", + "2.31.1" + ] ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2024-07-05T11:59:25.448817" + "timestamp": "2026-01-21T11:29:54.109132031" }, "sarscov2 - dummy sizes - stub": { "content": [ @@ -176,7 +216,11 @@ ] ], "1": [ - "versions.yml:md5,5fd44452613992a6f71f2c73d2e117f2" + [ + "BEDTOOLS_GENOMECOV", + "bedtools", + "2.31.1" + ] ], "genomecov": [ [ @@ -186,15 +230,19 @@ "test.coverage.txt:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "versions": [ - "versions.yml:md5,5fd44452613992a6f71f2c73d2e117f2" + "versions_bedtools": [ + [ + "BEDTOOLS_GENOMECOV", + "bedtools", + "2.31.1" + ] ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2024-07-05T12:00:01.086433" + "timestamp": "2026-01-21T11:30:23.839839194" } } \ No newline at end of file diff --git a/modules/nf-core/bedtools/genomecov/tests/nextflow.config b/modules/nf-core/bedtools/genomecov/tests/nextflow.config index bdb74ae5a..670ef7fd5 100644 --- a/modules/nf-core/bedtools/genomecov/tests/nextflow.config +++ b/modules/nf-core/bedtools/genomecov/tests/nextflow.config @@ -3,5 +3,5 @@ process { withName: BEDTOOLS_GENOMECOV { ext.prefix = { "${meta.id}.coverage" } } - + } diff --git a/modules/nf-core/bowtie2/align/environment.yml b/modules/nf-core/bowtie2/align/environment.yml new file mode 100644 index 000000000..066ff52e0 --- /dev/null +++ b/modules/nf-core/bowtie2/align/environment.yml @@ -0,0 +1,13 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json +channels: + - conda-forge + - bioconda +dependencies: + # renovate: datasource=conda depName=bioconda/bowtie2 + - bioconda::bowtie2=2.5.4 + # renovate: datasource=conda depName=bioconda/htslib + - bioconda::htslib=1.21 + # renovate: datasource=conda depName=bioconda/samtools + - bioconda::samtools=1.21 + - conda-forge::pigz=2.8 diff --git a/modules/nf-core/bowtie2/align/main.nf b/modules/nf-core/bowtie2/align/main.nf new file mode 100644 index 000000000..0a8c1a0c9 --- /dev/null +++ b/modules/nf-core/bowtie2/align/main.nf @@ -0,0 +1,106 @@ +process BOWTIE2_ALIGN { + tag "$meta.id" + label 'process_high' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/b4/b41b403e81883126c3227fc45840015538e8e2212f13abc9ae84e4b98891d51c/data' : + 'community.wave.seqera.io/library/bowtie2_htslib_samtools_pigz:edeb13799090a2a6' }" + + input: + tuple val(meta) , path(reads) + tuple val(meta2), path(index) + tuple val(meta3), path(fasta) + val save_unaligned + val sort_bam + + output: + tuple val(meta), path("*.sam") , emit: sam , optional:true + tuple val(meta), path("*.bam") , emit: bam , optional:true + tuple val(meta), path("*.cram") , emit: cram , optional:true + tuple val(meta), path("*.csi") , emit: csi , optional:true + tuple val(meta), path("*.crai") , emit: crai , optional:true + tuple val(meta), path("*.log") , emit: log + tuple val(meta), path("*fastq.gz") , emit: fastq , optional:true + tuple val("${task.process}"), val('bowtie2'), eval("bowtie2 --version 2>&1 | sed -n '1s/.*bowtie2-align-s version //p'"), emit: versions_bowtie2, topic: versions + tuple val("${task.process}"), val('samtools'), eval("samtools version | sed '1!d;s/.* //'"), emit: versions_samtools, topic: versions + tuple val("${task.process}"), val('pigz'), eval("pigz --version 2>&1 | sed 's/pigz //'"), emit: versions_pigz, topic: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: "" + def args2 = task.ext.args2 ?: "" + def prefix = task.ext.prefix ?: "${meta.id}" + def rg = args.contains("--rg-id") ? "" : "--rg-id ${prefix} --rg SM:${prefix}" + + def unaligned = "" + def reads_args = "" + if (meta.single_end) { + unaligned = save_unaligned ? "--un-gz ${prefix}.unmapped.fastq.gz" : "" + reads_args = "-U ${reads}" + } else { + unaligned = save_unaligned ? "--un-conc-gz ${prefix}.unmapped.fastq.gz" : "" + reads_args = "-1 ${reads[0]} -2 ${reads[1]}" + } + + def samtools_command = sort_bam ? 'sort' : 'view' + def extension_pattern = /(--output-fmt|-O)+\s+(\S+)/ + def extension_matcher = (args2 =~ extension_pattern) + def extension = extension_matcher.getCount() > 0 ? extension_matcher[0][2].toLowerCase() : "bam" + def reference = fasta && extension=="cram" ? "--reference ${fasta}" : "" + if (!fasta && extension=="cram") error "Fasta reference is required for CRAM output" + + """ + INDEX=`find -L ./ -name "*.rev.1.bt2" | sed "s/\\.rev.1.bt2\$//"` + [ -z "\$INDEX" ] && INDEX=`find -L ./ -name "*.rev.1.bt2l" | sed "s/\\.rev.1.bt2l\$//"` + [ -z "\$INDEX" ] && echo "Bowtie2 index files not found" 1>&2 && exit 1 + + bowtie2 \\ + -x \$INDEX \\ + $reads_args \\ + --threads $task.cpus \\ + $unaligned \\ + $rg \\ + $args \\ + 2>| >(tee ${prefix}.bowtie2.log >&2) \\ + | samtools $samtools_command $args2 --threads $task.cpus ${reference} -o ${prefix}.${extension} - + + if [ -f ${prefix}.unmapped.fastq.1.gz ]; then + mv ${prefix}.unmapped.fastq.1.gz ${prefix}.unmapped_1.fastq.gz + fi + + if [ -f ${prefix}.unmapped.fastq.2.gz ]; then + mv ${prefix}.unmapped.fastq.2.gz ${prefix}.unmapped_2.fastq.gz + fi + """ + + stub: + def args2 = task.ext.args2 ?: "" + def prefix = task.ext.prefix ?: "${meta.id}" + def extension_pattern = /(--output-fmt|-O)+\s+(\S+)/ + def extension = (args2 ==~ extension_pattern) ? (args2 =~ extension_pattern)[0][2].toLowerCase() : "bam" + def create_unmapped = "" + if (meta.single_end) { + create_unmapped = save_unaligned ? "touch ${prefix}.unmapped.fastq.gz" : "" + } else { + create_unmapped = save_unaligned ? "touch ${prefix}.unmapped_1.fastq.gz && touch ${prefix}.unmapped_2.fastq.gz" : "" + } + if (!fasta && extension=="cram") error "Fasta reference is required for CRAM output" + + def create_index = "" + if (extension == "cram") { + create_index = "touch ${prefix}.crai" + } else if (extension == "bam") { + create_index = "touch ${prefix}.csi" + } + + """ + touch ${prefix}.${extension} + ${create_index} + touch ${prefix}.bowtie2.log + ${create_unmapped} + """ + +} diff --git a/modules/nf-core/bowtie2/align/meta.yml b/modules/nf-core/bowtie2/align/meta.yml new file mode 100644 index 000000000..2d8051daa --- /dev/null +++ b/modules/nf-core/bowtie2/align/meta.yml @@ -0,0 +1,192 @@ +name: bowtie2_align +description: Align reads to a reference genome using bowtie2 +keywords: + - align + - map + - fasta + - fastq + - genome + - reference +tools: + - bowtie2: + description: | + Bowtie 2 is an ultrafast and memory-efficient tool for aligning + sequencing reads to long reference sequences. + homepage: http://bowtie-bio.sourceforge.net/bowtie2/index.shtml + documentation: http://bowtie-bio.sourceforge.net/bowtie2/manual.shtml + doi: 10.1186/gb-2009-10-3-r25 + licence: ["GPL-3.0-or-later"] + identifier: "" +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. + ontologies: [] + - - meta2: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'test', single_end:false ] + - index: + type: file + description: Bowtie2 genome index files + pattern: "*.ebwt" + ontologies: [] + - - meta3: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'test', single_end:false ] + - fasta: + type: file + description: Bowtie2 genome fasta file + pattern: "*.fasta" + ontologies: [] + - save_unaligned: + type: boolean + description: | + Save reads that do not map to the reference (true) or discard them (false) + (default: false) + - sort_bam: + type: boolean + description: use samtools sort (true) or samtools view (false) + pattern: "true or false" +output: + sam: + - - meta: + type: map + description: Groovy Map containing sample information + - "*.sam": + type: file + description: Output SAM file containing read alignments + pattern: "*.sam" + ontologies: [] + bam: + - - meta: + type: map + description: Groovy Map containing sample information + - "*.bam": + type: file + description: Output BAM file containing read alignments + pattern: "*.bam" + ontologies: [] + cram: + - - meta: + type: map + description: Groovy Map containing sample information + - "*.cram": + type: file + description: Output CRAM file containing read alignments + pattern: "*.cram" + ontologies: [] + csi: + - - meta: + type: map + description: Groovy Map containing sample information + - "*.csi": + type: file + description: Output SAM/BAM index for large inputs + pattern: "*.csi" + ontologies: [] + crai: + - - meta: + type: map + description: Groovy Map containing sample information + - "*.crai": + type: file + description: Output CRAM index + pattern: "*.crai" + ontologies: [] + log: + - - meta: + type: map + description: Groovy Map containing sample information + - "*.log": + type: file + description: Alignment log + pattern: "*.log" + ontologies: [] + fastq: + - - meta: + type: map + description: Groovy Map containing sample information + - "*fastq.gz": + type: file + description: Unaligned FastQ files + pattern: "*.fastq.gz" + ontologies: + - edam: http://edamontology.org/format_3989 # GZIP format + versions_bowtie2: + - - ${task.process}: + type: string + description: The name of the process + - bowtie2: + type: string + description: The name of the tool + - "bowtie2 --version 2>&1 | sed -n '1s/.*bowtie2-align-s version //p'": + type: eval + description: The expression to obtain the version of bowtie2 + versions_samtools: + - - ${task.process}: + type: string + description: The name of the process + - samtools: + type: string + description: The name of the tool + - "samtools version | sed '1!d;s/.* //'": + type: eval + description: The expression to obtain the version of samtools + versions_pigz: + - - ${task.process}: + type: string + description: The name of the process + - pigz: + type: string + description: The name of the tool + - "pigz --version 2>&1 | sed 's/pigz //'": + type: eval + description: The expression to obtain the version of pigz + +topics: + versions: + - - ${task.process}: + type: string + description: The name of the process + - bowtie2: + type: string + description: The name of the tool + - "bowtie2 --version 2>&1 | sed -n '1s/.*bowtie2-align-s version //p'": + type: eval + description: The expression to obtain the version of bowtie2 + - - ${task.process}: + type: string + description: The name of the process + - samtools: + type: string + description: The name of the tool + - "samtools version | sed '1!d;s/.* //'": + type: eval + description: The expression to obtain the version of samtools + - - ${task.process}: + type: string + description: The name of the process + - pigz: + type: string + description: The name of the tool + - "pigz --version 2>&1 | sed 's/pigz //'": + type: eval + description: The expression to obtain the version of pigz + +authors: + - "@joseespinosa" + - "@drpatelh" +maintainers: + - "@joseespinosa" + - "@drpatelh" diff --git a/modules/nf-core/bowtie2/align/tests/cram_crai.config b/modules/nf-core/bowtie2/align/tests/cram_crai.config new file mode 100644 index 000000000..03f1d5e51 --- /dev/null +++ b/modules/nf-core/bowtie2/align/tests/cram_crai.config @@ -0,0 +1,5 @@ +process { + withName: BOWTIE2_ALIGN { + ext.args2 = '--output-fmt cram --write-index' + } +} diff --git a/modules/nf-core/bowtie2/align/tests/large_index.config b/modules/nf-core/bowtie2/align/tests/large_index.config new file mode 100644 index 000000000..b2f0c4058 --- /dev/null +++ b/modules/nf-core/bowtie2/align/tests/large_index.config @@ -0,0 +1,5 @@ +process { + withName: BOWTIE2_BUILD { + ext.args = '--large-index' + } +} diff --git a/modules/nf-core/bowtie2/align/tests/main.nf.test b/modules/nf-core/bowtie2/align/tests/main.nf.test new file mode 100644 index 000000000..1705b66dc --- /dev/null +++ b/modules/nf-core/bowtie2/align/tests/main.nf.test @@ -0,0 +1,623 @@ +nextflow_process { + + name "Test Process BOWTIE2_ALIGN" + script "../main.nf" + process "BOWTIE2_ALIGN" + tag "modules" + tag "modules_nfcore" + tag "bowtie2" + tag "bowtie2/build" + tag "bowtie2/align" + + test("sarscov2 - fastq, index, fasta, false, false - bam") { + + setup { + run("BOWTIE2_BUILD") { + script "../../build/main.nf" + process { + """ + input[0] = [ + [ id:'test'], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ] + """ + } + } + } + + 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) + ] + input[1] = BOWTIE2_BUILD.out.index + input[2] = [[ id:'test'], file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)] + input[3] = false //save_unaligned + input[4] = false //sort + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot( + file(process.out.bam[0][1]).name, + process.out.log, + process.out.fastq, + process.out.findAll { key, val -> key.startsWith('versions') } + ).match() } + ) + } + + } + + test("sarscov2 - fastq, index, fasta, false, false - sam") { + + config "./sam.config" + setup { + run("BOWTIE2_BUILD") { + script "../../build/main.nf" + process { + """ + input[0] = [ + [ id:'test'], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ] + """ + } + } + } + + 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) + ] + input[1] = BOWTIE2_BUILD.out.index + input[2] = [[ id:'test'], file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)] + input[3] = false //save_unaligned + input[4] = false //sort + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot( + file(process.out.sam[0][1]).readLines()[0..4], + process.out.log, + process.out.fastq, + process.out.findAll { key, val -> key.startsWith('versions') } + ).match() } + ) + } + + } + + test("sarscov2 - fastq, index, fasta, false, false - sam2") { + + config "./sam2.config" + setup { + run("BOWTIE2_BUILD") { + script "../../build/main.nf" + process { + """ + input[0] = [ + [ id:'test'], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ] + """ + } + } + } + + 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) + ] + input[1] = BOWTIE2_BUILD.out.index + input[2] = [[ id:'test'], file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)] + input[3] = false //save_unaligned + input[4] = false //sort + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot( + file(process.out.sam[0][1]).readLines()[0..4], + process.out.log, + process.out.fastq, + process.out.findAll { key, val -> key.startsWith('versions') } + ).match() } + ) + } + + } + + test("sarscov2 - fastq, index, fasta, false, true - bam") { + + setup { + run("BOWTIE2_BUILD") { + script "../../build/main.nf" + process { + """ + input[0] = [ + [ id:'test'], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ] + """ + } + } + } + + 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) + ] + input[1] = BOWTIE2_BUILD.out.index + input[2] = [[ id:'test'], file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)] + input[3] = false //save_unaligned + input[4] = false //sort + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot( + file(process.out.bam[0][1]).name, + process.out.log, + process.out.fastq, + process.out.findAll { key, val -> key.startsWith('versions') } + ).match() } + ) + } + + } + + test("sarscov2 - [fastq1, fastq2], index, fasta, false, false - bam") { + + setup { + run("BOWTIE2_BUILD") { + script "../../build/main.nf" + process { + """ + input[0] = [ + [ id:'test'], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ] + """ + } + } + } + + 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) + ] + ] + input[1] = BOWTIE2_BUILD.out.index + input[2] = [[ id:'test'], file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)] + input[3] = false //save_unaligned + input[4] = false //sort + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot( + file(process.out.bam[0][1]).name, + process.out.log, + process.out.fastq, + process.out.findAll { key, val -> key.startsWith('versions') } + ).match() } + ) + } + + } + + test("sarscov2 - [fastq1, fastq2], index, fasta, false, true - bam") { + + setup { + run("BOWTIE2_BUILD") { + script "../../build/main.nf" + process { + """ + input[0] = [ + [ id:'test'], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ] + """ + } + } + } + + 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) + ] + ] + input[1] = BOWTIE2_BUILD.out.index + input[2] = [[ id:'test'], file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)] + input[3] = false //save_unaligned + input[4] = false //sort + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot( + file(process.out.bam[0][1]).name, + process.out.log, + process.out.fastq, + process.out.findAll { key, val -> key.startsWith('versions') } + ).match() } + ) + } + + } + + test("sarscov2 - fastq, large_index, fasta, false, false - bam") { + + config "./large_index.config" + setup { + run("BOWTIE2_BUILD") { + script "../../build/main.nf" + process { + """ + input[0] = [ + [ id:'test'], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ] + """ + } + } + } + + 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) + ] + input[1] = BOWTIE2_BUILD.out.index + input[2] = [[ id:'test'], file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)] + input[3] = false //save_unaligned + input[4] = false //sort + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot( + file(process.out.bam[0][1]).name, + process.out.log, + process.out.fastq, + process.out.findAll { key, val -> key.startsWith('versions') } + ).match() } + ) + } + + } + + test("sarscov2 - [fastq1, fastq2], large_index, fasta, false, false - bam") { + + config "./large_index.config" + setup { + run("BOWTIE2_BUILD") { + script "../../build/main.nf" + process { + """ + input[0] = [ + [ id:'test'], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ] + """ + } + } + } + + 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) + ] + ] + input[1] = BOWTIE2_BUILD.out.index + input[2] = [[ id:'test'], file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)] + input[3] = false //save_unaligned + input[4] = false //sort + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot( + file(process.out.bam[0][1]).name, + process.out.log, + process.out.fastq, + process.out.findAll { key, val -> key.startsWith('versions') } + ).match() } + ) + } + + } + + test("sarscov2 - [fastq1, fastq2], index, fasta, true, false - bam") { + + setup { + run("BOWTIE2_BUILD") { + script "../../build/main.nf" + process { + """ + input[0] = [ + [ id:'test'], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ] + """ + } + } + } + + 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) + ] + ] + input[1] = BOWTIE2_BUILD.out.index + input[2] = [[ id:'test'], file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)] + input[3] = false //save_unaligned + input[4] = false //sort + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot( + file(process.out.bam[0][1]).name, + process.out.log, + process.out.fastq, + process.out.findAll { key, val -> key.startsWith('versions') } + ).match() } + ) + } + + } + + test("sarscov2 - fastq, index, fasta, true, false - bam") { + + setup { + run("BOWTIE2_BUILD") { + script "../../build/main.nf" + process { + """ + input[0] = [ + [ id:'test'], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ] + """ + } + } + } + + 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) + ] + input[1] = BOWTIE2_BUILD.out.index + input[2] = [[ id:'test'], file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)] + input[3] = false //save_unaligned + input[4] = false //sort + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot( + file(process.out.bam[0][1]).name, + process.out.log, + process.out.fastq, + process.out.findAll { key, val -> key.startsWith('versions') } + ).match() } + + ) + } + + } + + test("sarscov2 - [fastq1, fastq2], index, fasta, true, true - cram") { + + config "./cram_crai.config" + setup { + run("BOWTIE2_BUILD") { + script "../../build/main.nf" + process { + """ + input[0] = [ + [ id:'test'], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ] + """ + } + } + } + + 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) + ] + ] + input[1] = BOWTIE2_BUILD.out.index + input[2] = [[ id:'test'], file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)] + input[3] = false //save_unaligned + input[4] = true //sort + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot( + file(process.out.cram[0][1]).name, + file(process.out.crai[0][1]).name + ).match() } + ) + } + + } + + test("sarscov2 - [fastq1, fastq2], index, fasta, false, false - stub") { + + options "-stub" + setup { + run("BOWTIE2_BUILD") { + script "../../build/main.nf" + process { + """ + input[0] = [ + [ id:'test'], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ] + """ + } + } + } + + 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) + ] + ] + input[1] = BOWTIE2_BUILD.out.index + input[2] = [[ id:'test'], file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)] + input[3] = false //save_unaligned + input[4] = false //sort + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot( + file(process.out.bam[0][1]).name, + file(process.out.csi[0][1]).name, + file(process.out.log[0][1]).name, + process.out.fastq, + process.out.findAll { key, val -> key.startsWith('versions') } + ).match() } + ) + } + + } + + test("sarscov2 - fastq, index, fasta, true, false - stub") { + + options "-stub" + setup { + run("BOWTIE2_BUILD") { + script "../../build/main.nf" + process { + """ + input[0] = [ + [ id:'test'], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ] + """ + } + } + } + + 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) + ] + input[1] = BOWTIE2_BUILD.out.index + input[2] = [[ id:'test'], file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)] + input[3] = false //save_unaligned + input[4] = false //sort + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot( + file(process.out.bam[0][1]).name, + file(process.out.csi[0][1]).name, + file(process.out.log[0][1]).name, + process.out.fastq, + process.out.findAll { key, val -> key.startsWith('versions') } + ).match() } + ) + } + + } + +} diff --git a/modules/nf-core/bowtie2/align/tests/main.nf.test.snap b/modules/nf-core/bowtie2/align/tests/main.nf.test.snap new file mode 100644 index 000000000..b1df41e78 --- /dev/null +++ b/modules/nf-core/bowtie2/align/tests/main.nf.test.snap @@ -0,0 +1,551 @@ +{ + "sarscov2 - [fastq1, fastq2], large_index, fasta, false, false - bam": { + "content": [ + "test.bam", + [ + [ + { + "id": "test", + "single_end": false + }, + "test.bowtie2.log:md5,bd89ce1b28c93bf822bae391ffcedd19" + ] + ], + [ + + ], + { + "versions_bowtie2": [ + [ + "BOWTIE2_ALIGN", + "bowtie2", + "2.5.4" + ] + ], + "versions_pigz": [ + [ + "BOWTIE2_ALIGN", + "pigz", + "2.8" + ] + ], + "versions_samtools": [ + [ + "BOWTIE2_ALIGN", + "samtools", + "1.21" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.3" + }, + "timestamp": "2026-02-03T15:18:12.706444258" + }, + "sarscov2 - fastq, index, fasta, false, false - sam2": { + "content": [ + [ + "ERR5069949.2151832\t16\tMT192765.1\t17453\t42\t150M\t*\t0\t0\tACGCACATTGCTAACTAAGGGCACACTAGAACCAGAATATTTCAATTCAGTGTGTAGACTTATGAAAACTATAGGTCCAGACATGTTCCTCGGAACTTGTCGGCGTTGTCCTGCTGAAATTGTTGACACTGTGAGTGCTTTGGTTTATGA\tAAAA&1 | head -1 | sed "s/^.*bowtie2-align-s version //; s/ .*//"'), emit: versions_bowtie2, topic: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + """ + mkdir bowtie2 + bowtie2-build $args --threads $task.cpus $fasta bowtie2/${fasta.baseName} + """ + + stub: + """ + mkdir bowtie2 + touch bowtie2/${fasta.baseName}.{1..4}.bt2 + touch bowtie2/${fasta.baseName}.rev.{1,2}.bt2 + """ +} diff --git a/modules/nf-core/bowtie2/build/meta.yml b/modules/nf-core/bowtie2/build/meta.yml new file mode 100644 index 000000000..3a9d31cf5 --- /dev/null +++ b/modules/nf-core/bowtie2/build/meta.yml @@ -0,0 +1,69 @@ +name: bowtie2_build +description: Builds bowtie index for reference genome +keywords: + - build + - index + - fasta + - genome + - reference +tools: + - bowtie2: + description: | + Bowtie 2 is an ultrafast and memory-efficient tool for aligning + sequencing reads to long reference sequences. + homepage: http://bowtie-bio.sourceforge.net/bowtie2/index.shtml + documentation: http://bowtie-bio.sourceforge.net/bowtie2/manual.shtml + doi: 10.1038/nmeth.1923 + licence: ["GPL-3.0-or-later"] + identifier: "" +input: + - - meta: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'test', single_end:false ] + - fasta: + type: file + description: Input genome fasta file + ontologies: [] +output: + index: + - - meta: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'test', single_end:false ] + - bowtie2: + type: directory + description: Bowtie2 genome index files + pattern: "*.bt2" + ontologies: [] + versions_bowtie2: + - - ${task.process}: + type: string + description: The name of the process + - bowtie2: + type: string + description: The name of the tool + - 'bowtie2 --version 2>&1 | head -1 | sed "s/^.*bowtie2-align-s version //; s/ .*//"': + type: eval + description: The expression to obtain the version of the tool + +topics: + versions: + - - ${task.process}: + type: string + description: The name of the process + - bowtie2: + type: string + description: The name of the tool + - 'bowtie2 --version 2>&1 | head -1 | sed "s/^.*bowtie2-align-s version //; s/ .*//"': + type: eval + description: The expression to obtain the version of the tool + +authors: + - "@joseespinosa" + - "@drpatelh" +maintainers: + - "@joseespinosa" + - "@drpatelh" diff --git a/modules/nf-core/bowtie2/build/tests/main.nf.test b/modules/nf-core/bowtie2/build/tests/main.nf.test new file mode 100644 index 000000000..a4bad2a10 --- /dev/null +++ b/modules/nf-core/bowtie2/build/tests/main.nf.test @@ -0,0 +1,36 @@ +nextflow_process { + + name "Test Process BOWTIE2_BUILD" + script "../main.nf" + process "BOWTIE2_BUILD" + tag "modules" + tag "modules_nfcore" + tag "bowtie2" + tag "bowtie2/build" + + test("Should run without failures") { + + 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.index, + process.out.findAll { key, val -> key.startsWith('versions') } + ).match() } + ) + } + + } + +} diff --git a/modules/nf-core/bowtie2/build/tests/main.nf.test.snap b/modules/nf-core/bowtie2/build/tests/main.nf.test.snap new file mode 100644 index 000000000..9f1bf0803 --- /dev/null +++ b/modules/nf-core/bowtie2/build/tests/main.nf.test.snap @@ -0,0 +1,35 @@ +{ + "Should run without failures": { + "content": [ + [ + [ + { + "id": "test" + }, + [ + "genome.1.bt2:md5,cbe3d0bbea55bc57c99b4bfa25b5fbdf", + "genome.2.bt2:md5,47b153cd1319abc88dda532462651fcf", + "genome.3.bt2:md5,4ed93abba181d8dfab2e303e33114777", + "genome.4.bt2:md5,c25be5f8b0378abf7a58c8a880b87626", + "genome.rev.1.bt2:md5,52be6950579598a990570fbcf5372184", + "genome.rev.2.bt2:md5,e3b4ef343dea4dd571642010a7d09597" + ] + ] + ], + { + "versions_bowtie2": [ + [ + "BOWTIE2_BUILD", + "bowtie2", + "2.5.4" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.2" + }, + "timestamp": "2026-01-28T17:52:30.165111" + } +} \ No newline at end of file diff --git a/modules/nf-core/bracken/bracken/main.nf b/modules/nf-core/bracken/bracken/main.nf index 360980c35..17c71e9ac 100644 --- a/modules/nf-core/bracken/bracken/main.nf +++ b/modules/nf-core/bracken/bracken/main.nf @@ -14,7 +14,7 @@ process BRACKEN_BRACKEN { output: tuple val(meta), path(bracken_report) , emit: reports tuple val(meta), path(bracken_kraken_style_report), emit: txt - path "versions.yml" , emit: versions + tuple val("${task.process}"), val('bracken'), eval('bracken -v | cut -f2 -d"v"'), topic: versions, emit: versions_bracken when: task.ext.when == null || task.ext.when @@ -31,25 +31,14 @@ process BRACKEN_BRACKEN { -i '${kraken_report}' \\ -o '${bracken_report}' \\ -w '${bracken_kraken_style_report}' - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - bracken: \$(echo \$(bracken -v) | cut -f2 -d'v') - END_VERSIONS """ stub: - def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" bracken_report = "${prefix}.tsv" bracken_kraken_style_report = "${prefix}.kraken2.report_bracken.txt" """ touch ${prefix}.tsv touch ${bracken_kraken_style_report} - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - bracken: \$(echo \$(bracken -v) | cut -f2 -d'v') - END_VERSIONS """ } diff --git a/modules/nf-core/bracken/bracken/meta.yml b/modules/nf-core/bracken/bracken/meta.yml index 85a267efc..447e77983 100644 --- a/modules/nf-core/bracken/bracken/meta.yml +++ b/modules/nf-core/bracken/bracken/meta.yml @@ -26,13 +26,16 @@ input: type: file description: TSV file with six columns coming from kraken2 output pattern: "*.{tsv}" - - - database: - type: file - description: Directory containing the kraken2/Bracken files for analysis - pattern: "*" + ontologies: + - edam: http://edamontology.org/format_3475 # TSV + - database: + type: file + description: Directory containing the kraken2/Bracken files for analysis + pattern: "*" + ontologies: [] output: - - reports: - - meta: + reports: + - - meta: type: map description: | Groovy Map containing sample information @@ -44,24 +47,42 @@ output: Groovy Map containing sample information e.g. [ id:'test', single_end:false ] pattern: "*.{tsv}" - - txt: - - meta: + txt: + - - meta: type: map description: | Groovy Map containing sample information e.g. [ id:'test', single_end:false ] - pattern: "*.txt" + pattern: "*.{tsv}" - bracken_kraken_style_report: type: map description: | Groovy Map containing sample information e.g. [ id:'test', single_end:false ] pattern: "*.txt" - - versions: - - versions.yml: - type: file - description: File containing software versions - pattern: "versions.yml" + versions_bracken: + - - ${task.process}: + type: string + description: The process the versions were collected from + - bracken: + type: string + description: The tool name + - bracken -v | cut -f2 -d"v": + type: eval + description: The expression to obtain the version of the tool + +topics: + versions: + - - ${task.process}: + type: string + description: The process the versions were collected from + - bracken: + type: string + description: The tool name + - bracken -v | cut -f2 -d"v": + type: eval + description: The expression to obtain the version of the tool + authors: - "@Midnighter" maintainers: diff --git a/modules/nf-core/bracken/bracken/nextflow.config b/modules/nf-core/bracken/bracken/nextflow.config index d5e2a2e00..4f2d8be0f 100644 --- a/modules/nf-core/bracken/bracken/nextflow.config +++ b/modules/nf-core/bracken/bracken/nextflow.config @@ -1,13 +1,9 @@ -if (!params.skip_qc) { - if (params.contaminant_screening == 'kraken2_bracken') { - process { - withName: 'BRACKEN' { - ext.args = "-l ${params.bracken_precision}" - publishDir = [ - path: { "${params.outdir}/${params.aligner}/contaminants/bracken" }, - mode: params.publish_dir_mode - ] - } - } +process { + withName: 'BRACKEN' { + ext.args = "-l ${params.bracken_precision}" + publishDir = [ + path: { "${params.outdir}/${params.aligner}/contaminants/bracken" }, + mode: params.publish_dir_mode + ] } } diff --git a/modules/nf-core/bracken/bracken/tests/main.nf.test b/modules/nf-core/bracken/bracken/tests/main.nf.test index c0f4ce8f1..9d2105ded 100644 --- a/modules/nf-core/bracken/bracken/tests/main.nf.test +++ b/modules/nf-core/bracken/bracken/tests/main.nf.test @@ -4,6 +4,13 @@ nextflow_process { script "../main.nf" process "BRACKEN_BRACKEN" + tag "modules" + tag "modules_nfcore" + tag "bracken" + tag "bracken/bracken" + tag "kraken2/kraken2" + tag "untar" + setup { run ("UNTAR") { script "../../../untar/main.nf" diff --git a/modules/nf-core/bracken/bracken/tests/main.nf.test.snap b/modules/nf-core/bracken/bracken/tests/main.nf.test.snap index 482e55d43..45c641b65 100644 --- a/modules/nf-core/bracken/bracken/tests/main.nf.test.snap +++ b/modules/nf-core/bracken/bracken/tests/main.nf.test.snap @@ -21,7 +21,11 @@ ] ], "2": [ - "versions.yml:md5,e3d2c4366550ad48484aa3cae6e67ad4" + [ + "BRACKEN_BRACKEN", + "bracken", + "3.0.1" + ] ], "reports": [ [ @@ -41,16 +45,20 @@ "test.kraken2.report_bracken.txt:md5,ca0fbeedc4353b5fdd081688823a33df" ] ], - "versions": [ - "versions.yml:md5,e3d2c4366550ad48484aa3cae6e67ad4" + "versions_bracken": [ + [ + "BRACKEN_BRACKEN", + "bracken", + "3.0.1" + ] ] } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.2" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-06-02T13:17:09.050813" + "timestamp": "2026-01-19T14:03:31.299124251" }, "sarscov2 - paired-end - fastq - genus config": { "content": [ @@ -74,7 +82,11 @@ ] ], "2": [ - "versions.yml:md5,e3d2c4366550ad48484aa3cae6e67ad4" + [ + "BRACKEN_BRACKEN", + "bracken", + "3.0.1" + ] ], "reports": [ [ @@ -94,16 +106,20 @@ "test.kraken2.report_bracken.txt:md5,2ce58814420a3690da1f08e10e8d3a30" ] ], - "versions": [ - "versions.yml:md5,e3d2c4366550ad48484aa3cae6e67ad4" + "versions_bracken": [ + [ + "BRACKEN_BRACKEN", + "bracken", + "3.0.1" + ] ] } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.2" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-06-02T13:17:22.479694" + "timestamp": "2026-01-19T14:03:38.094543816" }, "sarscov2 - paired-end - fastq": { "content": [ @@ -127,7 +143,11 @@ ] ], "2": [ - "versions.yml:md5,e3d2c4366550ad48484aa3cae6e67ad4" + [ + "BRACKEN_BRACKEN", + "bracken", + "3.0.1" + ] ], "reports": [ [ @@ -147,16 +167,20 @@ "test.kraken2.report_bracken.txt:md5,ca0fbeedc4353b5fdd081688823a33df" ] ], - "versions": [ - "versions.yml:md5,e3d2c4366550ad48484aa3cae6e67ad4" + "versions_bracken": [ + [ + "BRACKEN_BRACKEN", + "bracken", + "3.0.1" + ] ] } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.2" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-06-02T13:17:35.489383" + "timestamp": "2026-01-19T14:03:44.706209228" }, "sarscov2 - stub - fastq": { "content": [ @@ -178,7 +202,11 @@ ] ], "2": [ - "versions.yml:md5,e3d2c4366550ad48484aa3cae6e67ad4" + [ + "BRACKEN_BRACKEN", + "bracken", + "3.0.1" + ] ], "reports": [ [ @@ -196,15 +224,19 @@ "test.kraken2.report_bracken.txt:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "versions": [ - "versions.yml:md5,e3d2c4366550ad48484aa3cae6e67ad4" + "versions_bracken": [ + [ + "BRACKEN_BRACKEN", + "bracken", + "3.0.1" + ] ] } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.2" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-06-02T13:17:47.183592" + "timestamp": "2026-01-19T14:03:50.763300237" } } \ 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 acfb6d0e6..e70af3d11 100644 --- a/modules/nf-core/cat/fastq/main.nf +++ b/modules/nf-core/cat/fastq/main.nf @@ -12,23 +12,19 @@ process CAT_FASTQ { output: tuple val(meta), path("*.merged.fastq.gz"), emit: reads - path "versions.yml", emit: versions + tuple val("${task.process}"), val("cat"), eval("cat --version 2>&1 | head -n 1 | sed 's/^.*coreutils) //; s/ .*\$//'"), emit: versions_cat, topic: versions when: task.ext.when == null || task.ext.when script: def prefix = task.ext.prefix ?: "${meta.id}" - def readList = reads instanceof List ? reads.collect { it.toString() } : [reads.toString()] + def readList = reads instanceof List ? reads.collect { item -> item.toString() } : [reads.toString()] + def compress = readList[0]?.endsWith('.gz') ? '' : '| gzip' 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 + cat ${readList.join(' ')} ${compress} > ${prefix}.merged.fastq.gz """ } else { error("Could not find any FASTQ files to concatenate in the process input") @@ -40,13 +36,8 @@ process CAT_FASTQ { 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 + cat ${read1.join(' ')} ${compress} > ${prefix}_1.merged.fastq.gz + cat ${read2.join(' ')} ${compress} > ${prefix}_2.merged.fastq.gz """ } else { error("Could not find any FASTQ file pairs to concatenate in the process input") @@ -55,16 +46,11 @@ process CAT_FASTQ { stub: def prefix = task.ext.prefix ?: "${meta.id}" - def readList = reads instanceof List ? reads.collect { it.toString() } : [reads.toString()] + def readList = reads instanceof List ? reads.collect { item -> item.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 { error("Could not find any FASTQ files to concatenate in the process input") @@ -75,11 +61,6 @@ process CAT_FASTQ { """ 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 """ } else { error("Could not find any FASTQ file pairs to concatenate in the process input") diff --git a/modules/nf-core/cat/fastq/meta.yml b/modules/nf-core/cat/fastq/meta.yml index 91ff2fb5f..6fefd6e0e 100644 --- a/modules/nf-core/cat/fastq/meta.yml +++ b/modules/nf-core/cat/fastq/meta.yml @@ -1,9 +1,10 @@ name: cat_fastq -description: Concatenates fastq files +description: Concatenates fastq files. Supports both compressed (.gz) and uncompressed inputs; uncompressed files are automatically gzip-compressed during concatenation. keywords: - cat - fastq - concatenate + - compress tools: - cat: description: | @@ -21,9 +22,11 @@ input: type: file description: | List of input FastQ files to be concatenated. + Accepts both gzip-compressed (.fastq.gz) and uncompressed (.fastq) files. + ontologies: [] output: - - reads: - - meta: + reads: + - - meta: type: map description: | Groovy Map containing sample information @@ -32,11 +35,30 @@ output: type: file description: Merged fastq file pattern: "*.{merged.fastq.gz}" - - versions: - - versions.yml: - type: file - description: File containing software versions - pattern: "versions.yml" + ontologies: [] + versions_cat: + - - ${task.process}: + type: string + description: The process the versions were collected from + - cat: + type: string + description: The tool name + - cat --version 2>&1 | head -n 1 | sed 's/^.*coreutils) //; s/ .*\$//': + type: eval + description: The expression to obtain the version of the tool + +topics: + versions: + - - ${task.process}: + type: string + description: The process the versions were collected from + - cat: + type: string + description: The tool name + - cat --version 2>&1 | head -n 1 | sed 's/^.*coreutils) //; s/ .*\$//': + type: eval + description: The expression to obtain the version of the tool + authors: - "@joseespinosa" - "@drpatelh" diff --git a/modules/nf-core/cat/fastq/tests/main.nf.test b/modules/nf-core/cat/fastq/tests/main.nf.test index c8fc2f7f7..21052d90f 100644 --- a/modules/nf-core/cat/fastq/tests/main.nf.test +++ b/modules/nf-core/cat/fastq/tests/main.nf.test @@ -3,6 +3,11 @@ nextflow_process { name "Test Process CAT_FASTQ" script "../main.nf" process "CAT_FASTQ" + tag "modules" + tag "modules_nfcore" + tag "cat" + tag "cat/fastq" + tag "gunzip" test("test_cat_fastq_single_end") { @@ -96,6 +101,76 @@ nextflow_process { } } + test("test_cat_fastq_single_end_uncompressed") { + + setup { + run("GUNZIP") { + script "../../../gunzip/main.nf" + process { + """ + input[0] = Channel.of( + [[ id:'r1' ], file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true)], + [[ id:'r2' ], file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true)] + ) + """ + } + } + } + + when { + process { + """ + input[0] = GUNZIP.out.gunzip + .toSortedList { a, b -> a[0].id <=> b[0].id } + .map { items -> [[ id: 'test', single_end: true ], items.collect { it[1] }] } + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("test_cat_fastq_paired_end_uncompressed") { + + setup { + run("GUNZIP") { + script "../../../gunzip/main.nf" + process { + """ + input[0] = Channel.of( + [[ id:'a' ], file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true)], + [[ id:'b' ], file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true)], + [[ id:'c' ], file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test2_1.fastq.gz', checkIfExists: true)], + [[ id:'d' ], file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test2_2.fastq.gz', checkIfExists: true)] + ) + """ + } + } + } + + when { + process { + """ + input[0] = GUNZIP.out.gunzip + .toSortedList { a, b -> a[0].id <=> b[0].id } + .map { items -> [[ id: 'test', single_end: false ], items.collect { it[1] }] } + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + test("test_cat_fastq_single_end_single_file") { when { 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 ee5ab3647..6375b2ab2 100644 --- a/modules/nf-core/cat/fastq/tests/main.nf.test.snap +++ b/modules/nf-core/cat/fastq/tests/main.nf.test.snap @@ -22,7 +22,11 @@ ] ], "1": [ - "versions.yml:md5,6ef4fd28546a005865b9454bbedbf81a" + [ + "CAT_FASTQ", + "cat", + "9.5" + ] ], "reads": [ [ @@ -33,16 +37,20 @@ "test.merged.fastq.gz:md5,4161df271f9bfcd25d5845a1e220dbec" ] ], - "versions": [ - "versions.yml:md5,6ef4fd28546a005865b9454bbedbf81a" + "versions_cat": [ + [ + "CAT_FASTQ", + "cat", + "9.5" + ] ] } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.4" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-02-25T17:24:04.902821069" + "timestamp": "2025-12-10T14:31:42.84401526" }, "test_cat_fastq_paired_end_same_name": { "content": [ @@ -60,7 +68,11 @@ ] ], "1": [ - "versions.yml:md5,6ef4fd28546a005865b9454bbedbf81a" + [ + "CAT_FASTQ", + "cat", + "9.5" + ] ], "reads": [ [ @@ -74,16 +86,20 @@ ] ] ], - "versions": [ - "versions.yml:md5,6ef4fd28546a005865b9454bbedbf81a" + "versions_cat": [ + [ + "CAT_FASTQ", + "cat", + "9.5" + ] ] } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.4" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-02-25T17:23:57.476357974" + "timestamp": "2025-12-10T14:31:36.820489323" }, "test_cat_fastq_paired_end_same_name - stub": { "content": [ @@ -101,7 +117,11 @@ ] ], "1": [ - "versions.yml:md5,6ef4fd28546a005865b9454bbedbf81a" + [ + "CAT_FASTQ", + "cat", + "9.5" + ] ], "reads": [ [ @@ -115,16 +135,112 @@ ] ] ], - "versions": [ - "versions.yml:md5,6ef4fd28546a005865b9454bbedbf81a" + "versions_cat": [ + [ + "CAT_FASTQ", + "cat", + "9.5" + ] ] } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.4" + "nf-test": "0.9.3", + "nextflow": "25.10.2" + }, + "timestamp": "2025-12-10T14:32:06.262192935" + }, + "test_cat_fastq_single_end_uncompressed": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": true + }, + "test.merged.fastq.gz:md5,ee314a9bd568d06617171b0c85f508da" + ] + ], + "1": [ + [ + "CAT_FASTQ", + "cat", + "9.5" + ] + ], + "reads": [ + [ + { + "id": "test", + "single_end": true + }, + "test.merged.fastq.gz:md5,ee314a9bd568d06617171b0c85f508da" + ] + ], + "versions_cat": [ + [ + "CAT_FASTQ", + "cat", + "9.5" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.2" + }, + "timestamp": "2026-02-09T10:03:24.344628" + }, + "test_cat_fastq_paired_end_uncompressed": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.merged.fastq.gz:md5,3ad9406595fafec8172368f9cd0b6a22", + "test_2.merged.fastq.gz:md5,a52cab0b840c7178b0ea83df1fdbe8d5" + ] + ] + ], + "1": [ + [ + "CAT_FASTQ", + "cat", + "9.5" + ] + ], + "reads": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.merged.fastq.gz:md5,3ad9406595fafec8172368f9cd0b6a22", + "test_2.merged.fastq.gz:md5,a52cab0b840c7178b0ea83df1fdbe8d5" + ] + ] + ], + "versions_cat": [ + [ + "CAT_FASTQ", + "cat", + "9.5" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-02-25T17:24:34.615815265" + "timestamp": "2026-02-09T10:03:37.568053" }, "test_cat_fastq_single_end": { "content": [ @@ -139,7 +255,11 @@ ] ], "1": [ - "versions.yml:md5,6ef4fd28546a005865b9454bbedbf81a" + [ + "CAT_FASTQ", + "cat", + "9.5" + ] ], "reads": [ [ @@ -150,16 +270,20 @@ "test.merged.fastq.gz:md5,ee314a9bd568d06617171b0c85f508da" ] ], - "versions": [ - "versions.yml:md5,6ef4fd28546a005865b9454bbedbf81a" + "versions_cat": [ + [ + "CAT_FASTQ", + "cat", + "9.5" + ] ] } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.4" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-02-25T17:23:32.489874386" + "timestamp": "2025-12-10T14:31:18.859169785" }, "test_cat_fastq_single_end_same_name": { "content": [ @@ -174,7 +298,11 @@ ] ], "1": [ - "versions.yml:md5,6ef4fd28546a005865b9454bbedbf81a" + [ + "CAT_FASTQ", + "cat", + "9.5" + ] ], "reads": [ [ @@ -185,16 +313,20 @@ "test.merged.fastq.gz:md5,3ad9406595fafec8172368f9cd0b6a22" ] ], - "versions": [ - "versions.yml:md5,6ef4fd28546a005865b9454bbedbf81a" + "versions_cat": [ + [ + "CAT_FASTQ", + "cat", + "9.5" + ] ] } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.4" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-02-25T17:23:49.184759506" + "timestamp": "2025-12-10T14:31:30.942615287" }, "test_cat_fastq_single_end - stub": { "content": [ @@ -209,7 +341,11 @@ ] ], "1": [ - "versions.yml:md5,6ef4fd28546a005865b9454bbedbf81a" + [ + "CAT_FASTQ", + "cat", + "9.5" + ] ], "reads": [ [ @@ -220,16 +356,20 @@ "test.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" ] ], - "versions": [ - "versions.yml:md5,6ef4fd28546a005865b9454bbedbf81a" + "versions_cat": [ + [ + "CAT_FASTQ", + "cat", + "9.5" + ] ] } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.4" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-02-25T17:24:12.857293744" + "timestamp": "2025-12-10T14:31:48.827990633" }, "test_cat_fastq_paired_end_no_files": { "content": [ @@ -264,7 +404,11 @@ ] ], "1": [ - "versions.yml:md5,6ef4fd28546a005865b9454bbedbf81a" + [ + "CAT_FASTQ", + "cat", + "9.5" + ] ], "reads": [ [ @@ -275,16 +419,20 @@ "test.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" ] ], - "versions": [ - "versions.yml:md5,6ef4fd28546a005865b9454bbedbf81a" + "versions_cat": [ + [ + "CAT_FASTQ", + "cat", + "9.5" + ] ] } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.4" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-02-25T17:24:27.816080065" + "timestamp": "2025-12-10T14:32:00.586584379" }, "test_cat_fastq_paired_end": { "content": [ @@ -302,7 +450,11 @@ ] ], "1": [ - "versions.yml:md5,6ef4fd28546a005865b9454bbedbf81a" + [ + "CAT_FASTQ", + "cat", + "9.5" + ] ], "reads": [ [ @@ -316,16 +468,20 @@ ] ] ], - "versions": [ - "versions.yml:md5,6ef4fd28546a005865b9454bbedbf81a" + "versions_cat": [ + [ + "CAT_FASTQ", + "cat", + "9.5" + ] ] } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.4" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-02-25T17:23:41.739469187" + "timestamp": "2025-12-10T14:31:25.159365603" }, "test_cat_fastq_single_end_no_files": { "content": [ @@ -353,7 +509,11 @@ ] ], "1": [ - "versions.yml:md5,6ef4fd28546a005865b9454bbedbf81a" + [ + "CAT_FASTQ", + "cat", + "9.5" + ] ], "reads": [ [ @@ -367,16 +527,20 @@ ] ] ], - "versions": [ - "versions.yml:md5,6ef4fd28546a005865b9454bbedbf81a" + "versions_cat": [ + [ + "CAT_FASTQ", + "cat", + "9.5" + ] ] } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.4" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-02-25T17:24:21.178950408" + "timestamp": "2025-12-10T14:31:54.850702874" }, "test_cat_fastq_single_end_single_file - stub": { "content": [ @@ -391,7 +555,11 @@ ] ], "1": [ - "versions.yml:md5,6ef4fd28546a005865b9454bbedbf81a" + [ + "CAT_FASTQ", + "cat", + "9.5" + ] ], "reads": [ [ @@ -402,15 +570,19 @@ "test.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" ] ], - "versions": [ - "versions.yml:md5,6ef4fd28546a005865b9454bbedbf81a" + "versions_cat": [ + [ + "CAT_FASTQ", + "cat", + "9.5" + ] ] } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.4" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-02-25T17:24:40.851404993" + "timestamp": "2025-12-10T14:32:11.746498148" } } \ No newline at end of file diff --git a/modules/nf-core/custom/catadditionalfasta/main.nf b/modules/nf-core/custom/catadditionalfasta/main.nf index 9925ca322..86d39a6eb 100644 --- a/modules/nf-core/custom/catadditionalfasta/main.nf +++ b/modules/nf-core/custom/catadditionalfasta/main.nf @@ -26,12 +26,12 @@ process CUSTOM_CATADDITIONALFASTA { def prefix = task.ext.prefix ?: "${meta.id}" """ mkdir out - touch out/genome_transcriptome.fasta - touch out/genome_transcriptome.gtf + touch out/${prefix}.fasta + touch out/${prefix}.gtf cat <<-END_VERSIONS > versions.yml "${task.process}": - python: \$(python --version | grep -v "Python ") + python: \$(python --version | sed 's/Python //') END_VERSIONS """ } diff --git a/modules/nf-core/custom/catadditionalfasta/meta.yml b/modules/nf-core/custom/catadditionalfasta/meta.yml index e6c313d39..2fa3b720c 100644 --- a/modules/nf-core/custom/catadditionalfasta/meta.yml +++ b/modules/nf-core/custom/catadditionalfasta/meta.yml @@ -23,10 +23,12 @@ input: type: file description: FASTA-format sequence file pattern: "*.{fasta,fa}" + ontologies: [] - gtf: type: file description: GTF-format annotation file for fasta pattern: "*.gtf" + ontologies: [] - - meta2: type: map description: | @@ -35,12 +37,13 @@ input: type: file description: FASTA-format file of additional sequences pattern: "*.fa" - - - biotype: - type: string - description: Biotype to apply to new GTF entries + ontologies: [] + - biotype: + type: string + description: Biotype to apply to new GTF entries output: - - fasta: - - meta: + fasta: + - - meta: type: map description: | Groovy Map containing fasta information @@ -48,8 +51,9 @@ output: type: file description: FASTA-format combined sequence file pattern: "*.{fasta,fa}" - - gtf: - - meta: + ontologies: [] + gtf: + - - meta: type: map description: | Groovy Map containing fasta information @@ -57,11 +61,14 @@ output: type: file description: GTF-format combined annotation file pattern: "*.gtf" - - versions: - - versions.yml: - type: file - description: File containing software versions - pattern: "versions.yml" + ontologies: [] + versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" + ontologies: + - edam: http://edamontology.org/format_3750 # YAML authors: - "@pinin4fjords" maintainers: diff --git a/modules/nf-core/custom/catadditionalfasta/tests/main.nf.test b/modules/nf-core/custom/catadditionalfasta/tests/main.nf.test index f13f39fa4..a0ef5c91d 100644 --- a/modules/nf-core/custom/catadditionalfasta/tests/main.nf.test +++ b/modules/nf-core/custom/catadditionalfasta/tests/main.nf.test @@ -4,6 +4,10 @@ nextflow_process { script "../main.nf" process "CUSTOM_CATADDITIONALFASTA" + tag "modules" + tag "modules_nfcore" + tag "custom" + tag "custom/catadditionalfasta" test("sarscov2 - fastq - gtf") { diff --git a/modules/nf-core/custom/catadditionalfasta/tests/main.nf.test.snap b/modules/nf-core/custom/catadditionalfasta/tests/main.nf.test.snap index 6dd1afeb1..6f7151cf2 100644 --- a/modules/nf-core/custom/catadditionalfasta/tests/main.nf.test.snap +++ b/modules/nf-core/custom/catadditionalfasta/tests/main.nf.test.snap @@ -38,7 +38,7 @@ "id": "test", "single_end": false }, - "genome_transcriptome.fasta:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.fasta:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "1": [ @@ -47,11 +47,11 @@ "id": "test", "single_end": false }, - "genome_transcriptome.gtf:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.gtf:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "2": [ - "versions.yml:md5,451e5a1afee71b2b916b6f2ccc47e508" + "versions.yml:md5,8ab7a953e43316a447ad37b2e29e9c75" ], "fasta": [ [ @@ -59,7 +59,7 @@ "id": "test", "single_end": false }, - "genome_transcriptome.fasta:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.fasta:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "gtf": [ @@ -68,11 +68,11 @@ "id": "test", "single_end": false }, - "genome_transcriptome.gtf:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.gtf:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "versions": [ - "versions.yml:md5,451e5a1afee71b2b916b6f2ccc47e508" + "versions.yml:md5,8ab7a953e43316a447ad37b2e29e9c75" ] } ], diff --git a/modules/nf-core/custom/getchromsizes/main.nf b/modules/nf-core/custom/getchromsizes/main.nf deleted file mode 100644 index d8c7405c6..000000000 --- a/modules/nf-core/custom/getchromsizes/main.nf +++ /dev/null @@ -1,47 +0,0 @@ -process CUSTOM_GETCHROMSIZES { - tag "$fasta" - label 'process_single' - - conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/samtools:1.21--h50ea8bc_0' : - 'biocontainers/samtools:1.21--h50ea8bc_0' }" - - input: - tuple val(meta), path(fasta) - - output: - tuple val(meta), path ("*.sizes"), emit: sizes - tuple val(meta), path ("*.fai") , emit: fai - tuple val(meta), path ("*.gzi") , emit: gzi, optional: true - path "versions.yml" , emit: versions - - when: - task.ext.when == null || task.ext.when - - script: - def args = task.ext.args ?: '' - """ - samtools faidx $fasta - cut -f 1,2 ${fasta}.fai > ${fasta}.sizes - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - getchromsizes: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') - END_VERSIONS - """ - - stub: - """ - touch ${fasta}.fai - touch ${fasta}.sizes - if [[ "${fasta.extension}" == "gz" ]]; then - touch ${fasta}.gzi - fi - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - getchromsizes: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') - END_VERSIONS - """ -} diff --git a/modules/nf-core/custom/getchromsizes/meta.yml b/modules/nf-core/custom/getchromsizes/meta.yml deleted file mode 100644 index 2a0e8da0a..000000000 --- a/modules/nf-core/custom/getchromsizes/meta.yml +++ /dev/null @@ -1,69 +0,0 @@ -name: custom_getchromsizes -description: Generates a FASTA file of chromosome sizes and a fasta index file -keywords: - - fasta - - chromosome - - indexing -tools: - - samtools: - description: Tools for dealing with SAM, BAM and CRAM files - homepage: http://www.htslib.org/ - documentation: http://www.htslib.org/doc/samtools.html - tool_dev_url: https://github.com/samtools/samtools - doi: 10.1093/bioinformatics/btp352 - licence: ["MIT"] - identifier: "" -input: - - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - fasta: - type: file - description: FASTA file - pattern: "*.{fa,fasta,fna,fas}" -output: - - sizes: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - "*.sizes": - type: file - description: File containing chromosome lengths - pattern: "*.{sizes}" - - fai: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - "*.fai": - type: file - description: FASTA index file - pattern: "*.{fai}" - - gzi: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - "*.gzi": - type: file - description: Optional gzip index file for compressed inputs - pattern: "*.gzi" - - versions: - - versions.yml: - type: file - description: File containing software versions - pattern: "versions.yml" -authors: - - "@tamara-hodgetts" - - "@chris-cheshire" - - "@muffato" -maintainers: - - "@tamara-hodgetts" - - "@chris-cheshire" - - "@muffato" diff --git a/modules/nf-core/custom/getchromsizes/tests/main.nf.test b/modules/nf-core/custom/getchromsizes/tests/main.nf.test deleted file mode 100644 index 8a05aeaae..000000000 --- a/modules/nf-core/custom/getchromsizes/tests/main.nf.test +++ /dev/null @@ -1,95 +0,0 @@ -nextflow_process { - - name "Test Process CUSTOM_GETCHROMSIZES" - script "../main.nf" - process "CUSTOM_GETCHROMSIZES" - - - test("test_custom_getchromsizes") { - - when { - process { - """ - input[0] = Channel.of([ - [ id:'test' ], // 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() } - ) - } - } - - test("test_custom_getchromsizes_bgzip") { - - when { - process { - """ - input[0] = Channel.of([ - [ id:'test' ], // meta map - file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.gz', checkIfExists: true) - ]) - """ - } - } - - then { - assertAll ( - { assert process.success }, - { assert snapshot(process.out).match() } - ) - } - } - - test("test_custom_getchromsizes - stub") { - - options "-stub" - - when { - process { - """ - input[0] = Channel.of([ - [ id:'test' ], // 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() } - ) - } - } - - test("test_custom_getchromsizes_bgzip - stub") { - - options "-stub" - - when { - process { - """ - input[0] = Channel.of([ - [ id:'test' ], // meta map - file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.gz', checkIfExists: true) - ]) - """ - } - } - - then { - assertAll ( - { assert process.success }, - { assert snapshot(process.out).match() } - ) - } - } -} diff --git a/modules/nf-core/custom/getchromsizes/tests/main.nf.test.snap b/modules/nf-core/custom/getchromsizes/tests/main.nf.test.snap deleted file mode 100644 index d2072e22c..000000000 --- a/modules/nf-core/custom/getchromsizes/tests/main.nf.test.snap +++ /dev/null @@ -1,242 +0,0 @@ -{ - "test_custom_getchromsizes_bgzip - stub": { - "content": [ - { - "0": [ - [ - { - "id": "test" - }, - "genome.fasta.gz.sizes:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "1": [ - [ - { - "id": "test" - }, - "genome.fasta.gz.fai:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "2": [ - [ - { - "id": "test" - }, - "genome.fasta.gz.gzi:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "3": [ - "versions.yml:md5,f68edc4d5999d8cb07147b9be115d60b" - ], - "fai": [ - [ - { - "id": "test" - }, - "genome.fasta.gz.fai:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "gzi": [ - [ - { - "id": "test" - }, - "genome.fasta.gz.gzi:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "sizes": [ - [ - { - "id": "test" - }, - "genome.fasta.gz.sizes:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "versions": [ - "versions.yml:md5,f68edc4d5999d8cb07147b9be115d60b" - ] - } - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" - }, - "timestamp": "2024-10-18T10:11:37.459094476" - }, - "test_custom_getchromsizes": { - "content": [ - { - "0": [ - [ - { - "id": "test" - }, - "genome.fasta.sizes:md5,a57c401f27ae5133823fb09fb21c8a3c" - ] - ], - "1": [ - [ - { - "id": "test" - }, - "genome.fasta.fai:md5,9da2a56e2853dc8c0b86a9e7229c9fe5" - ] - ], - "2": [ - - ], - "3": [ - "versions.yml:md5,f68edc4d5999d8cb07147b9be115d60b" - ], - "fai": [ - [ - { - "id": "test" - }, - "genome.fasta.fai:md5,9da2a56e2853dc8c0b86a9e7229c9fe5" - ] - ], - "gzi": [ - - ], - "sizes": [ - [ - { - "id": "test" - }, - "genome.fasta.sizes:md5,a57c401f27ae5133823fb09fb21c8a3c" - ] - ], - "versions": [ - "versions.yml:md5,f68edc4d5999d8cb07147b9be115d60b" - ] - } - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" - }, - "timestamp": "2024-10-18T10:11:01.526301351" - }, - "test_custom_getchromsizes_bgzip": { - "content": [ - { - "0": [ - [ - { - "id": "test" - }, - "genome.fasta.gz.sizes:md5,a57c401f27ae5133823fb09fb21c8a3c" - ] - ], - "1": [ - [ - { - "id": "test" - }, - "genome.fasta.gz.fai:md5,9da2a56e2853dc8c0b86a9e7229c9fe5" - ] - ], - "2": [ - [ - { - "id": "test" - }, - "genome.fasta.gz.gzi:md5,7dea362b3fac8e00956a4952a3d4f474" - ] - ], - "3": [ - "versions.yml:md5,f68edc4d5999d8cb07147b9be115d60b" - ], - "fai": [ - [ - { - "id": "test" - }, - "genome.fasta.gz.fai:md5,9da2a56e2853dc8c0b86a9e7229c9fe5" - ] - ], - "gzi": [ - [ - { - "id": "test" - }, - "genome.fasta.gz.gzi:md5,7dea362b3fac8e00956a4952a3d4f474" - ] - ], - "sizes": [ - [ - { - "id": "test" - }, - "genome.fasta.gz.sizes:md5,a57c401f27ae5133823fb09fb21c8a3c" - ] - ], - "versions": [ - "versions.yml:md5,f68edc4d5999d8cb07147b9be115d60b" - ] - } - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" - }, - "timestamp": "2024-10-18T10:11:14.32456385" - }, - "test_custom_getchromsizes - stub": { - "content": [ - { - "0": [ - [ - { - "id": "test" - }, - "genome.fasta.sizes:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "1": [ - [ - { - "id": "test" - }, - "genome.fasta.fai:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "2": [ - - ], - "3": [ - "versions.yml:md5,f68edc4d5999d8cb07147b9be115d60b" - ], - "fai": [ - [ - { - "id": "test" - }, - "genome.fasta.fai:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "gzi": [ - - ], - "sizes": [ - [ - { - "id": "test" - }, - "genome.fasta.sizes:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "versions": [ - "versions.yml:md5,f68edc4d5999d8cb07147b9be115d60b" - ] - } - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" - }, - "timestamp": "2024-10-18T10:11:26.505487624" - } -} \ No newline at end of file diff --git a/modules/nf-core/custom/getchromsizes/environment.yml b/modules/nf-core/custom/rsemmergecounts/environment.yml similarity index 76% rename from modules/nf-core/custom/getchromsizes/environment.yml rename to modules/nf-core/custom/rsemmergecounts/environment.yml index 9eac2f1e2..4ea414c04 100644 --- a/modules/nf-core/custom/getchromsizes/environment.yml +++ b/modules/nf-core/custom/rsemmergecounts/environment.yml @@ -3,7 +3,5 @@ channels: - conda-forge - bioconda - dependencies: - - bioconda::htslib=1.21 - - bioconda::samtools=1.21 + - conda-forge::sed=4.7 diff --git a/modules/local/rsem_merge_counts/main.nf b/modules/nf-core/custom/rsemmergecounts/main.nf similarity index 51% rename from modules/local/rsem_merge_counts/main.nf rename to modules/nf-core/custom/rsemmergecounts/main.nf index 4daf6d97c..006a0d2ad 100644 --- a/modules/local/rsem_merge_counts/main.nf +++ b/modules/nf-core/custom/rsemmergecounts/main.nf @@ -1,4 +1,5 @@ -process RSEM_MERGE_COUNTS { +process CUSTOM_RSEMMERGECOUNTS { + tag "$meta.id" label "process_medium" conda "${moduleDir}/environment.yml" @@ -7,22 +8,23 @@ process RSEM_MERGE_COUNTS { 'nf-core/ubuntu:20.04' }" input: - path ('genes/*') + tuple val(meta), path ('genes/*') path ('isoforms/*') output: - path "rsem.merged.gene_counts.tsv" , emit: counts_gene - path "rsem.merged.gene_tpm.tsv" , emit: tpm_gene - path "rsem.merged.transcript_counts.tsv", emit: counts_transcript - path "rsem.merged.transcript_tpm.tsv" , emit: tpm_transcript - path "rsem.merged.genes_long.tsv" , emit: genes_long - path "rsem.merged.isoforms_long.tsv" , emit: isoforms_long - path "versions.yml" , emit: versions + tuple val(meta), path("${prefix}.gene_counts.tsv") , emit: counts_gene + tuple val(meta), path("${prefix}.gene_tpm.tsv") , emit: tpm_gene + tuple val(meta), path("${prefix}.transcript_counts.tsv"), emit: counts_transcript + tuple val(meta), path("${prefix}.transcript_tpm.tsv") , emit: tpm_transcript + tuple val(meta), path("${prefix}.genes_long.tsv") , emit: genes_long + tuple val(meta), path("${prefix}.isoforms_long.tsv") , emit: isoforms_long + tuple val("${task.process}"), val('sed'), eval("sed --version 2>&1 | sed '1!d;s/^.*) //'"), emit: versions_sed, topic: versions when: task.ext.when == null || task.ext.when script: + prefix = task.ext.prefix ?: "${meta.id}" """ mkdir -p tmp/genes cut -f 1,2 `ls ./genes/* | head -n 1` > gene_ids.txt @@ -44,43 +46,34 @@ process RSEM_MERGE_COUNTS { cut -f 6 \${fileid} | tail -n+2 >> tmp/isoforms/\${samplename}.tpm.txt done - paste gene_ids.txt tmp/genes/*.counts.txt > rsem.merged.gene_counts.tsv - paste gene_ids.txt tmp/genes/*.tpm.txt > rsem.merged.gene_tpm.tsv - paste transcript_ids.txt tmp/isoforms/*.counts.txt > rsem.merged.transcript_counts.tsv - paste transcript_ids.txt tmp/isoforms/*.tpm.txt > rsem.merged.transcript_tpm.tsv + paste gene_ids.txt tmp/genes/*.counts.txt > ${prefix}.gene_counts.tsv + paste gene_ids.txt tmp/genes/*.tpm.txt > ${prefix}.gene_tpm.tsv + paste transcript_ids.txt tmp/isoforms/*.counts.txt > ${prefix}.transcript_counts.tsv + paste transcript_ids.txt tmp/isoforms/*.tpm.txt > ${prefix}.transcript_tpm.tsv # Create long format for genes (idx=1-4, concat columns 5-7) - echo -e "sample_name\tgene_id\ttranscript_id(s)\tlength\teffective_length\texpected_count\tTPM\tFPKM" > rsem.merged.genes_long.tsv + echo -e "sample_name\\tgene_id\\ttranscript_id(s)\\tlength\\teffective_length\\texpected_count\\tTPM\\tFPKM" > ${prefix}.genes_long.tsv for fileid in `ls ./genes/*`; do samplename=`basename \$fileid | sed s/\\.genes.results\$//g` - tail -n+2 \$fileid | awk -v sample=\$samplename 'BEGIN{OFS="\t"}{print sample,\$1,\$2,\$3,\$4,\$5,\$6,\$7}' >> rsem.merged.genes_long.tsv + tail -n+2 \$fileid | awk -v sample=\$samplename 'BEGIN{OFS="\\t"}{print sample,\$1,\$2,\$3,\$4,\$5,\$6,\$7}' >> ${prefix}.genes_long.tsv done # Create long format for isoforms (idx=1-4, concat columns 5-8) - echo -e "sample_name\ttranscript_id\tgene_id\tlength\teffective_length\texpected_count\tTPM\tFPKM\tIsoPct" > rsem.merged.isoforms_long.tsv + echo -e "sample_name\\ttranscript_id\\tgene_id\\tlength\\teffective_length\\texpected_count\\tTPM\\tFPKM\\tIsoPct" > ${prefix}.isoforms_long.tsv for fileid in `ls ./isoforms/*`; do samplename=`basename \$fileid | sed s/\\.isoforms.results\$//g` - tail -n+2 \$fileid | awk -v sample=\$samplename 'BEGIN{OFS="\t"}{print sample,\$1,\$2,\$3,\$4,\$5,\$6,\$7,\$8}' >> rsem.merged.isoforms_long.tsv + tail -n+2 \$fileid | awk -v sample=\$samplename 'BEGIN{OFS="\\t"}{print sample,\$1,\$2,\$3,\$4,\$5,\$6,\$7,\$8}' >> ${prefix}.isoforms_long.tsv done - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - sed: \$(echo \$(sed --version 2>&1) | sed 's/^.*GNU sed) //; s/ .*\$//') - END_VERSIONS """ stub: + prefix = task.ext.prefix ?: "${meta.id}" """ - touch rsem.merged.gene_counts.tsv - touch rsem.merged.gene_tpm.tsv - touch rsem.merged.transcript_counts.tsv - touch rsem.merged.transcript_tpm.tsv - touch rsem.merged.genes_long.tsv - touch rsem.merged.isoforms_long.tsv - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - sed: \$(echo \$(sed --version 2>&1) | sed 's/^.*GNU sed) //; s/ .*\$//') - END_VERSIONS + touch ${prefix}.gene_counts.tsv + touch ${prefix}.gene_tpm.tsv + touch ${prefix}.transcript_counts.tsv + touch ${prefix}.transcript_tpm.tsv + touch ${prefix}.genes_long.tsv + touch ${prefix}.isoforms_long.tsv """ } diff --git a/modules/nf-core/custom/rsemmergecounts/meta.yml b/modules/nf-core/custom/rsemmergecounts/meta.yml new file mode 100644 index 000000000..00d06af59 --- /dev/null +++ b/modules/nf-core/custom/rsemmergecounts/meta.yml @@ -0,0 +1,140 @@ +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/meta-schema.json +name: "custom_rsemmergecounts" +description: Merge per-sample RSEM results into wide and long format TSV matrices +keywords: + - rsem + - merge + - counts + - gene expression +tools: + - "custom": + description: | + Custom module to merge RSEM gene and isoform count results across + samples into count/TPM matrices and long-format tables. + tool_dev_url: "https://github.com/nf-core/modules/blob/master/modules/nf-core/custom/rsemmergecounts/main.nf" + licence: ["MIT"] + identifier: "" + +input: + - - meta: + type: map + description: | + Groovy Map containing sample information. e.g. [ id:'all_samples' ]. + - "genes/*": + type: file + description: | + Collected RSEM gene-level results files across all samples. + pattern: "*.genes.results" + ontologies: [] + - "isoforms/*": + type: file + description: | + Collected RSEM isoform-level results files across all samples. + pattern: "*.isoforms.results" + ontologies: [] + +output: + counts_gene: + - - meta: + type: map + description: | + Groovy Map containing sample information. e.g. [ id:'all_samples' ]. + - "${prefix}.gene_counts.tsv": + type: file + description: | + Wide-format gene-level count matrix (expected_count column from + RSEM) with samples as columns. + pattern: "*.gene_counts.tsv" + ontologies: + - edam: http://edamontology.org/format_3475 + tpm_gene: + - - meta: + type: map + description: | + Groovy Map containing sample information. e.g. [ id:'all_samples' ]. + - "${prefix}.gene_tpm.tsv": + type: file + description: | + Wide-format gene-level TPM matrix with samples as columns. + pattern: "*.gene_tpm.tsv" + ontologies: + - edam: http://edamontology.org/format_3475 + counts_transcript: + - - meta: + type: map + description: | + Groovy Map containing sample information. e.g. [ id:'all_samples' ]. + - "${prefix}.transcript_counts.tsv": + type: file + description: | + Wide-format transcript-level count matrix (expected_count column + from RSEM) with samples as columns. + pattern: "*.transcript_counts.tsv" + ontologies: + - edam: http://edamontology.org/format_3475 + tpm_transcript: + - - meta: + type: map + description: | + Groovy Map containing sample information. e.g. [ id:'all_samples' ]. + - "${prefix}.transcript_tpm.tsv": + type: file + description: | + Wide-format transcript-level TPM matrix with samples as columns. + pattern: "*.transcript_tpm.tsv" + ontologies: + - edam: http://edamontology.org/format_3475 + genes_long: + - - meta: + type: map + description: | + Groovy Map containing sample information. e.g. [ id:'all_samples' ]. + - "${prefix}.genes_long.tsv": + type: file + description: | + Long-format gene-level results with all RSEM fields and a + sample_name column. + pattern: "*.genes_long.tsv" + ontologies: + - edam: http://edamontology.org/format_3475 + isoforms_long: + - - meta: + type: map + description: | + Groovy Map containing sample information. e.g. [ id:'all_samples' ]. + - "${prefix}.isoforms_long.tsv": + type: file + description: | + Long-format isoform-level results with all RSEM fields and a + sample_name column. + pattern: "*.isoforms_long.tsv" + ontologies: + - edam: http://edamontology.org/format_3475 + + versions_sed: + - - ${task.process}: + type: string + description: The name of the process + - sed: + type: string + description: The name of the tool + - "sed --version 2>&1 | sed '1!d;s/^.*) //'": + type: eval + description: The expression to obtain the version of the tool + +topics: + versions: + - - ${task.process}: + type: string + description: The name of the process + - sed: + type: string + description: The name of the tool + - "sed --version 2>&1 | sed '1!d;s/^.*) //'": + type: eval + description: The expression to obtain the version of the tool + +authors: + - "@pinin4fjords" +maintainers: + - "@pinin4fjords" diff --git a/modules/nf-core/custom/rsemmergecounts/tests/main.nf.test b/modules/nf-core/custom/rsemmergecounts/tests/main.nf.test new file mode 100644 index 000000000..635e61cfe --- /dev/null +++ b/modules/nf-core/custom/rsemmergecounts/tests/main.nf.test @@ -0,0 +1,94 @@ +nextflow_process { + + name "Test Process CUSTOM_RSEMMERGECOUNTS" + script "../main.nf" + process "CUSTOM_RSEMMERGECOUNTS" + + tag "modules" + tag "modules_nfcore" + tag "custom" + tag "custom/rsemmergecounts" + tag "untar" + + test("saccharomyces_cerevisiae") { + + setup { + run("UNTAR") { + script "../../../untar/main.nf" + process { + """ + input[0] = Channel.of([ + [ id: 'rsem_results' ], + file(params.modules_testdata_base_path + 'genomics/eukaryotes/saccharomyces_cerevisiae/rsem_results.tar.gz', checkIfExists: true) + ]) + """ + } + } + } + + when { + process { + """ + input[0] = UNTAR.out.untar.flatMap { meta, dir -> + def files = [] + dir.toFile().eachFileRecurse { f -> + if (f.name.endsWith('.genes.results')) { + files << f.toPath() + } + } + files + }.collect().map { files -> [ [ id: 'rsem_merged' ], files ] } + input[1] = UNTAR.out.untar.flatMap { meta, dir -> + def files = [] + dir.toFile().eachFileRecurse { f -> + if (f.name.endsWith('.isoforms.results')) { + files << f.toPath() + } + } + files + }.collect() + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.counts_gene, + process.out.tpm_gene, + process.out.counts_transcript, + process.out.tpm_transcript, + process.out.genes_long, + process.out.isoforms_long, + process.out.findAll { key, val -> key.startsWith('versions') } + ).match() } + ) + } + } + + test("saccharomyces_cerevisiae - stub") { + + options "-stub" + + when { + process { + """ + input[0] = Channel.of( + file(params.modules_testdata_base_path + 'genomics/eukaryotes/saccharomyces_cerevisiae/genome_gfp.gtf', checkIfExists: true) + ).collect().map { files -> [ [ id: 'rsem_merged' ], files ] } + input[1] = Channel.of( + file(params.modules_testdata_base_path + 'genomics/eukaryotes/saccharomyces_cerevisiae/genome_gfp.gtf', checkIfExists: true) + ).collect() + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } +} diff --git a/modules/nf-core/custom/rsemmergecounts/tests/main.nf.test.snap b/modules/nf-core/custom/rsemmergecounts/tests/main.nf.test.snap new file mode 100644 index 000000000..46d9aea3c --- /dev/null +++ b/modules/nf-core/custom/rsemmergecounts/tests/main.nf.test.snap @@ -0,0 +1,189 @@ +{ + "saccharomyces_cerevisiae - stub": { + "content": [ + { + "0": [ + [ + { + "id": "rsem_merged" + }, + "rsem_merged.gene_counts.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "rsem_merged" + }, + "rsem_merged.gene_tpm.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + [ + { + "id": "rsem_merged" + }, + "rsem_merged.transcript_counts.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + [ + { + "id": "rsem_merged" + }, + "rsem_merged.transcript_tpm.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "4": [ + [ + { + "id": "rsem_merged" + }, + "rsem_merged.genes_long.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "5": [ + [ + { + "id": "rsem_merged" + }, + "rsem_merged.isoforms_long.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "6": [ + [ + "CUSTOM_RSEMMERGECOUNTS", + "sed", + "4.7" + ] + ], + "counts_gene": [ + [ + { + "id": "rsem_merged" + }, + "rsem_merged.gene_counts.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "counts_transcript": [ + [ + { + "id": "rsem_merged" + }, + "rsem_merged.transcript_counts.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "genes_long": [ + [ + { + "id": "rsem_merged" + }, + "rsem_merged.genes_long.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "isoforms_long": [ + [ + { + "id": "rsem_merged" + }, + "rsem_merged.isoforms_long.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "tpm_gene": [ + [ + { + "id": "rsem_merged" + }, + "rsem_merged.gene_tpm.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "tpm_transcript": [ + [ + { + "id": "rsem_merged" + }, + "rsem_merged.transcript_tpm.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions_sed": [ + [ + "CUSTOM_RSEMMERGECOUNTS", + "sed", + "4.7" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.3" + }, + "timestamp": "2026-02-13T10:26:27.893114579" + }, + "saccharomyces_cerevisiae": { + "content": [ + [ + [ + { + "id": "rsem_merged" + }, + "rsem_merged.gene_counts.tsv:md5,0a100470da54fc96e19ae70f0afdfbf0" + ] + ], + [ + [ + { + "id": "rsem_merged" + }, + "rsem_merged.gene_tpm.tsv:md5,338689117908cdd08fe10d6fd4b38f17" + ] + ], + [ + [ + { + "id": "rsem_merged" + }, + "rsem_merged.transcript_counts.tsv:md5,d1c7e727f1d1da94def08a0d5e735fb1" + ] + ], + [ + [ + { + "id": "rsem_merged" + }, + "rsem_merged.transcript_tpm.tsv:md5,bf07c9cba378995b3626ff60c0a2d6b9" + ] + ], + [ + [ + { + "id": "rsem_merged" + }, + "rsem_merged.genes_long.tsv:md5,93c7d2e9d1f2d49bc367939f4f15ff1d" + ] + ], + [ + [ + { + "id": "rsem_merged" + }, + "rsem_merged.isoforms_long.tsv:md5,17c5217b25bc42db6f9fce802d1dbe73" + ] + ], + { + "versions_sed": [ + [ + "CUSTOM_RSEMMERGECOUNTS", + "sed", + "4.7" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.3" + }, + "timestamp": "2026-02-13T10:26:22.463918579" + } +} \ No newline at end of file diff --git a/modules/nf-core/custom/tx2gene/main.nf b/modules/nf-core/custom/tx2gene/main.nf index eed5e97b1..5b3969657 100644 --- a/modules/nf-core/custom/tx2gene/main.nf +++ b/modules/nf-core/custom/tx2gene/main.nf @@ -25,8 +25,9 @@ process CUSTOM_TX2GENE { template 'tx2gene.py' stub: + def prefix = task.ext.prefix ?: meta.id """ - touch ${meta.id}.tx2gene.tsv + touch ${prefix}.tx2gene.tsv cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/custom/tx2gene/meta.yml b/modules/nf-core/custom/tx2gene/meta.yml index 07b1f0f4b..2ff392bc2 100644 --- a/modules/nf-core/custom/tx2gene/meta.yml +++ b/modules/nf-core/custom/tx2gene/meta.yml @@ -6,6 +6,7 @@ keywords: - gene - gtf - pseudoalignment + - rsem - transcript tools: - "custom": @@ -37,7 +38,7 @@ input: description: quants file - quant_type: type: string - description: Quantification type, 'kallisto' or 'salmon' + description: Quantification type, 'kallisto', 'salmon', or 'rsem' - id: type: string description: Gene ID attribute in the GTF file (default= gene_id) diff --git a/modules/nf-core/custom/tx2gene/templates/tx2gene.py b/modules/nf-core/custom/tx2gene/templates/tx2gene.py index a90c63e39..dbd500587 100755 --- a/modules/nf-core/custom/tx2gene/templates/tx2gene.py +++ b/modules/nf-core/custom/tx2gene/templates/tx2gene.py @@ -50,7 +50,11 @@ def read_top_transcripts(quant_dir: str, file_pattern: str) -> Set[str]: """ try: # Find the quantification file within the directory - quant_file_path = glob.glob(os.path.join(quant_dir, "*", file_pattern))[0] + # Try subdirectory layout first (Salmon/Kallisto), then flat layout (RSEM) + matches = glob.glob(os.path.join(quant_dir, "*", file_pattern)) + if not matches: + matches = glob.glob(os.path.join(quant_dir, file_pattern)) + quant_file_path = matches[0] with open(quant_file_path) as file_handle: # Read the file and extract the top 100 transcripts return {line.split()[0] for i, line in enumerate(file_handle) if i > 0 and i <= 100} @@ -146,7 +150,15 @@ def map_transcripts_to_gene( bool: True if the operation was successful, False otherwise. """ # Read the top transcripts based on quantification type - transcripts = read_top_transcripts(quant_dir, "quant.sf" if quant_type == "salmon" else "abundance.tsv") + if quant_type == "salmon": + pattern = "quant.sf" + elif quant_type == "kallisto": + pattern = "abundance.tsv" + elif quant_type == "rsem": + pattern = "*.isoforms.results" + else: + raise ValueError(f"Unknown quantification type: {quant_type}") + transcripts = read_top_transcripts(quant_dir, pattern) # Discover the attribute that corresponds to transcripts in the GTF transcript_attribute = discover_transcript_attribute(gtf_file, transcripts) diff --git a/modules/nf-core/custom/tx2gene/tests/main.nf.test b/modules/nf-core/custom/tx2gene/tests/main.nf.test index 49518f797..6459068a0 100644 --- a/modules/nf-core/custom/tx2gene/tests/main.nf.test +++ b/modules/nf-core/custom/tx2gene/tests/main.nf.test @@ -88,6 +88,51 @@ nextflow_process { } } + test("saccharomyces_cerevisiae - rsem - gtf") { + + setup { + run("UNTAR") { + script "../../../untar/main.nf" + process { + """ + input[0] = Channel.of([ + [ id:'test'], // meta map + file(params.modules_testdata_base_path + 'genomics/eukaryotes/saccharomyces_cerevisiae/rsem_results.tar.gz', checkIfExists: true) + ]) + """ + } + } + } + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test'], // meta map + file(params.modules_testdata_base_path + 'genomics/eukaryotes/saccharomyces_cerevisiae/genome_gfp.gtf', checkIfExists: true) + ]) + input[1] = UNTAR.out.untar.map { meta, dir -> + def results = [] + dir.eachFileRecurse { f -> + if (f.name.endsWith('.isoforms.results')) results << f + } + [ meta, results ] + } + input[2] = 'rsem' + input[3] = 'gene_id' + input[4] = 'gene_name' + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + test("saccharomyces_cerevisiae - gtf - stub") { options "-stub" diff --git a/modules/nf-core/custom/tx2gene/tests/main.nf.test.snap b/modules/nf-core/custom/tx2gene/tests/main.nf.test.snap index 63f319e90..2b3e8794b 100644 --- a/modules/nf-core/custom/tx2gene/tests/main.nf.test.snap +++ b/modules/nf-core/custom/tx2gene/tests/main.nf.test.snap @@ -65,6 +65,39 @@ }, "timestamp": "2025-11-25T19:28:57.610922" }, + "saccharomyces_cerevisiae - rsem - gtf": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.tx2gene.tsv:md5,0e2418a69d2eba45097ebffc2f700bfe" + ] + ], + "1": [ + "versions.yml:md5,e504b95d76ef4cf65ba0b38cddce2840" + ], + "tx2gene": [ + [ + { + "id": "test" + }, + "test.tx2gene.tsv:md5,0e2418a69d2eba45097ebffc2f700bfe" + ] + ], + "versions": [ + "versions.yml:md5,e504b95d76ef4cf65ba0b38cddce2840" + ] + } + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.3" + }, + "timestamp": "2026-02-11T11:00:31.806696767" + }, "saccharomyces_cerevisiae - gtf - stub": { "content": [ { diff --git a/modules/nf-core/dupradar/environment.yml b/modules/nf-core/dupradar/environment.yml index 0add73e81..40bd5130f 100644 --- a/modules/nf-core/dupradar/environment.yml +++ b/modules/nf-core/dupradar/environment.yml @@ -4,4 +4,4 @@ channels: - conda-forge - bioconda dependencies: - - bioconda::bioconductor-dupradar=1.32.0 + - bioconda::bioconductor-dupradar=1.38.0 diff --git a/modules/nf-core/dupradar/main.nf b/modules/nf-core/dupradar/main.nf index 8f3665a67..8006e782f 100644 --- a/modules/nf-core/dupradar/main.nf +++ b/modules/nf-core/dupradar/main.nf @@ -4,8 +4,8 @@ process DUPRADAR { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/bioconductor-dupradar:1.32.0--r43hdfd78af_0' : - 'biocontainers/bioconductor-dupradar:1.32.0--r43hdfd78af_0' }" + 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/24/24bb76357588d05b5637e2954f2dfb3ba04e3eb1ff52c927ffe1906d7d69915a/data' : + 'community.wave.seqera.io/library/bioconductor-dupradar:1.38.0--831da16eb40a64ab' }" input: tuple val(meta), path(bam) diff --git a/modules/nf-core/dupradar/meta.yml b/modules/nf-core/dupradar/meta.yml index a532519fe..64e314e3c 100644 --- a/modules/nf-core/dupradar/meta.yml +++ b/modules/nf-core/dupradar/meta.yml @@ -25,6 +25,7 @@ input: type: file description: BAM/SAM file containing read alignments pattern: "*.{bam}" + ontologies: [] - - meta2: type: map description: | @@ -34,9 +35,10 @@ input: type: file description: Genomic features annotation in GTF or SAF pattern: "*.{gtf}" + ontologies: [] output: - - scatter2d: - - meta: + scatter2d: + - - meta: type: map description: | Groovy Map containing sample information @@ -45,8 +47,9 @@ output: type: file description: PDF duplication rate against total read count plot pattern: "*_duprateExpDens.pdf" - - boxplot: - - meta: + ontologies: [] + boxplot: + - - meta: type: map description: | Groovy Map containing sample information @@ -56,8 +59,9 @@ output: description: | PDF duplication rate ~ total reads per kilobase (RPK) boxplot pattern: "*_duprateExpBoxplot.pdf" - - hist: - - meta: + ontologies: [] + hist: + - - meta: type: map description: | Groovy Map containing sample information @@ -67,8 +71,9 @@ output: description: | PDF expression histogram pattern: "*.pdf" - - dupmatrix: - - meta: + ontologies: [] + dupmatrix: + - - meta: type: map description: | Groovy Map containing sample information @@ -79,8 +84,9 @@ output: Text file containing tags falling on the features described in the GTF file pattern: "*_dupMatrix.txt" - - intercept_slope: - - meta: + ontologies: [] + intercept_slope: + - - meta: type: map description: | Groovy Map containing sample information @@ -90,8 +96,9 @@ output: description: | Text file containing intercept and slope from dupRadar modelling pattern: "*_intercept_slope.txt" - - multiqc: - - meta: + ontologies: [] + multiqc: + - - meta: type: map description: | Groovy Map containing sample information @@ -101,8 +108,9 @@ output: description: | dupRadar files for passing to MultiQC pattern: "*_multiqc.txt" - - session_info: - - meta: + ontologies: [] + session_info: + - - meta: type: map description: | Groovy Map containing sample information @@ -111,11 +119,14 @@ output: type: file description: dump of R SessionInfo pattern: "*.log" - - versions: - - versions.yml: - type: file - description: File containing software versions - pattern: "versions.yml" + ontologies: [] + versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" + ontologies: + - edam: http://edamontology.org/format_3750 # YAML authors: - "@pinin4fjords" maintainers: diff --git a/modules/nf-core/dupradar/nextflow.config b/modules/nf-core/dupradar/nextflow.config index aa2004e50..af30e170c 100644 --- a/modules/nf-core/dupradar/nextflow.config +++ b/modules/nf-core/dupradar/nextflow.config @@ -1,35 +1,31 @@ -if (!params.skip_qc) { - if (!params.skip_dupradar) { - process { - withName: 'DUPRADAR' { - publishDir = [ - [ - path: { "${params.outdir}/${params.aligner}/dupradar/scatter_plot" }, - mode: params.publish_dir_mode, - pattern: "*Dens.pdf" - ], - [ - path: { "${params.outdir}/${params.aligner}/dupradar/box_plot" }, - mode: params.publish_dir_mode, - pattern: "*Boxplot.pdf" - ], - [ - path: { "${params.outdir}/${params.aligner}/dupradar/histogram" }, - mode: params.publish_dir_mode, - pattern: "*Hist.pdf" - ], - [ - path: { "${params.outdir}/${params.aligner}/dupradar/gene_data" }, - mode: params.publish_dir_mode, - pattern: "*Matrix.txt" - ], - [ - path: { "${params.outdir}/${params.aligner}/dupradar/intercepts_slope" }, - mode: params.publish_dir_mode, - pattern: "*slope.txt" - ] - ] - } - } +process { + withName: 'DUPRADAR' { + publishDir = [ + [ + path: { "${params.outdir}/${params.aligner}/dupradar/scatter_plot" }, + mode: params.publish_dir_mode, + pattern: "*Dens.pdf" + ], + [ + path: { "${params.outdir}/${params.aligner}/dupradar/box_plot" }, + mode: params.publish_dir_mode, + pattern: "*Boxplot.pdf" + ], + [ + path: { "${params.outdir}/${params.aligner}/dupradar/histogram" }, + mode: params.publish_dir_mode, + pattern: "*Hist.pdf" + ], + [ + path: { "${params.outdir}/${params.aligner}/dupradar/gene_data" }, + mode: params.publish_dir_mode, + pattern: "*Matrix.txt" + ], + [ + path: { "${params.outdir}/${params.aligner}/dupradar/intercepts_slope" }, + mode: params.publish_dir_mode, + pattern: "*slope.txt" + ] + ] } } diff --git a/modules/nf-core/dupradar/tests/main.nf.test b/modules/nf-core/dupradar/tests/main.nf.test index d45cefcfe..4abf7c5c1 100644 --- a/modules/nf-core/dupradar/tests/main.nf.test +++ b/modules/nf-core/dupradar/tests/main.nf.test @@ -4,6 +4,9 @@ nextflow_process { script "../main.nf" process "DUPRADAR" + tag "modules" + tag "modules_nfcore" + tag "dupradar" test("sarscov2 - bam - single_end") { @@ -34,8 +37,9 @@ nextflow_process { process.out.dupmatrix, process.out.intercept_slopt, process.out.multiqc, - process.out.versions - ).match() } + path(process.out.versions.get(0)).yaml, + ).match() }, + { assert snapshot(path(process.out.versions.get(0)).yaml).match("versions") }, ) } } @@ -98,8 +102,8 @@ nextflow_process { process.out.dupmatrix, process.out.intercept_slopt, process.out.multiqc, - process.out.versions - ).match() } + path(process.out.versions.get(0)).yaml, + ).match() }, ) } } diff --git a/modules/nf-core/dupradar/tests/main.nf.test.snap b/modules/nf-core/dupradar/tests/main.nf.test.snap index dc7aba4a5..8a80d1170 100644 --- a/modules/nf-core/dupradar/tests/main.nf.test.snap +++ b/modules/nf-core/dupradar/tests/main.nf.test.snap @@ -28,15 +28,31 @@ ] ] ], - [ - "versions.yml:md5,cd524e9e74304c2930cf28e2d741d351" - ] + { + "DUPRADAR": { + "bioconductor-dupradar": "1.38.0" + } + } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" + "nf-test": "0.9.2", + "nextflow": "25.04.6" }, - "timestamp": "2024-07-11T11:21:44.31238184" + "timestamp": "2025-08-27T15:55:26.944511" + }, + "versions": { + "content": [ + { + "DUPRADAR": { + "bioconductor-dupradar": "1.38.0" + } + } + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "25.04.6" + }, + "timestamp": "2025-08-27T15:44:39.879885" }, "sarscov2 - bam - single_end - stub": { "content": [ @@ -115,7 +131,7 @@ ] ], "7": [ - "versions.yml:md5,cd524e9e74304c2930cf28e2d741d351" + "versions.yml:md5,2b4e70ac61a7bbbaef2ad21d95064ee2" ], "boxplot": [ [ @@ -191,15 +207,15 @@ ] ], "versions": [ - "versions.yml:md5,cd524e9e74304c2930cf28e2d741d351" + "versions.yml:md5,2b4e70ac61a7bbbaef2ad21d95064ee2" ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" + "nf-test": "0.9.2", + "nextflow": "25.04.6" }, - "timestamp": "2024-07-11T11:21:56.741878886" + "timestamp": "2025-08-27T15:44:46.00689" }, "sarscov2 - bam - paired_end": { "content": [ @@ -230,15 +246,17 @@ ] ] ], - [ - "versions.yml:md5,cd524e9e74304c2930cf28e2d741d351" - ] + { + "DUPRADAR": { + "bioconductor-dupradar": "1.38.0" + } + } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" + "nf-test": "0.9.2", + "nextflow": "25.04.6" }, - "timestamp": "2024-07-11T11:22:10.053957095" + "timestamp": "2025-08-27T15:55:55.958566" }, "sarscov2 - bam - paired_end - stub": { "content": [ @@ -317,7 +335,7 @@ ] ], "7": [ - "versions.yml:md5,cd524e9e74304c2930cf28e2d741d351" + "versions.yml:md5,2b4e70ac61a7bbbaef2ad21d95064ee2" ], "boxplot": [ [ @@ -393,14 +411,14 @@ ] ], "versions": [ - "versions.yml:md5,cd524e9e74304c2930cf28e2d741d351" + "versions.yml:md5,2b4e70ac61a7bbbaef2ad21d95064ee2" ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" + "nf-test": "0.9.2", + "nextflow": "25.04.6" }, - "timestamp": "2024-07-11T11:22:22.134058061" + "timestamp": "2025-08-27T15:45:15.504711" } } \ No newline at end of file diff --git a/modules/nf-core/dupradar/tests/nextflow.config b/modules/nf-core/dupradar/tests/nextflow.config index 1b44170a0..047bf999e 100644 --- a/modules/nf-core/dupradar/tests/nextflow.config +++ b/modules/nf-core/dupradar/tests/nextflow.config @@ -3,5 +3,5 @@ process { withName: DUPRADAR { ext.args = { "--feature_type CDS" } } - + } diff --git a/modules/nf-core/fastp/environment.yml b/modules/nf-core/fastp/environment.yml index 90adcd2c5..0c36eed25 100644 --- a/modules/nf-core/fastp/environment.yml +++ b/modules/nf-core/fastp/environment.yml @@ -4,4 +4,5 @@ channels: - conda-forge - bioconda dependencies: - - bioconda::fastp=0.24.0 + # renovate: datasource=conda depName=bioconda/fastp + - bioconda::fastp=1.0.1 diff --git a/modules/nf-core/fastp/main.nf b/modules/nf-core/fastp/main.nf index 6e3e6c43a..e13509ca2 100644 --- a/modules/nf-core/fastp/main.nf +++ b/modules/nf-core/fastp/main.nf @@ -4,12 +4,11 @@ process FASTP { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/88/889a182b8066804f4799f3808a5813ad601381a8a0e3baa4ab8d73e739b97001/data' : - 'community.wave.seqera.io/library/fastp:0.24.0--62c97b06e8447690' }" + 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/52/527b18847a97451091dba07a886b24f17f742a861f9f6c9a6bfb79d4f1f3bf9d/data' : + 'community.wave.seqera.io/library/fastp:1.0.1--c8b87fe62dcc103c' }" input: - tuple val(meta), path(reads) - path adapter_fasta + tuple val(meta), path(reads), path(adapter_fasta) val discard_trimmed_pass val save_trimmed_fail val save_merged @@ -21,7 +20,7 @@ process FASTP { 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 + tuple val("${task.process}"), val('fastp'), eval('fastp --version 2>&1 | sed -e "s/fastp //g"'), emit: versions_fastp, topic: versions when: task.ext.when == null || task.ext.when @@ -30,9 +29,9 @@ process FASTP { 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" + 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}_R1.fail.fastq.gz --unpaired2 ${prefix}_R2.fail.fastq.gz" : '' + def out_fq1 = discard_trimmed_pass ?: ( meta.single_end ? "--out1 ${prefix}.fastp.fastq.gz" : "--out1 ${prefix}_R1.fastp.fastq.gz" ) + def out_fq2 = discard_trimmed_pass ?: "--out2 ${prefix}_R2.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') ) { @@ -50,11 +49,6 @@ process FASTP { $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) { """ @@ -70,20 +64,15 @@ process FASTP { $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 + [ ! -f ${prefix}_R1.fastq.gz ] && ln -sf ${reads[0]} ${prefix}_R1.fastq.gz + [ ! -f ${prefix}_R2.fastq.gz ] && ln -sf ${reads[1]} ${prefix}_R2.fastq.gz fastp \\ - --in1 ${prefix}_1.fastq.gz \\ - --in2 ${prefix}_2.fastq.gz \\ + --in1 ${prefix}_R1.fastq.gz \\ + --in2 ${prefix}_R2.fastq.gz \\ $out_fq1 \\ $out_fq2 \\ --json ${prefix}.fastp.json \\ @@ -95,20 +84,15 @@ process FASTP { --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_reads = (discard_trimmed_pass) ? "" : (is_single_output) ? "echo '' | gzip > ${prefix}.fastp.fastq.gz" : "echo '' | gzip > ${prefix}_R1.fastp.fastq.gz ; echo '' | gzip > ${prefix}_R2.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" + 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}_R1.fail.fastq.gz ; echo '' | gzip > ${prefix}_R2.fail.fastq.gz" """ $touch_reads $touch_fail_fastq @@ -116,10 +100,5 @@ process FASTP { 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 index 9c4b24584..a67be395b 100644 --- a/modules/nf-core/fastp/meta.yml +++ b/modules/nf-core/fastp/meta.yml @@ -24,25 +24,27 @@ input: 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: + ontologies: [] + - 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` + ontologies: [] + - 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: - - reads: - - meta: + reads: + - - meta: type: map description: | Groovy Map containing sample information @@ -51,8 +53,11 @@ output: type: file description: The trimmed/modified/unmerged fastq reads pattern: "*fastp.fastq.gz" - - json: - - meta: + ontologies: + - edam: http://edamontology.org/format_1930 # FASTQ + - edam: http://edamontology.org/format_3989 # GZIP format + json: + - - meta: type: map description: | Groovy Map containing sample information @@ -61,8 +66,10 @@ output: type: file description: Results in JSON format pattern: "*.json" - - html: - - meta: + ontologies: + - edam: http://edamontology.org/format_3464 # JSON + html: + - - meta: type: map description: | Groovy Map containing sample information @@ -71,8 +78,9 @@ output: type: file description: Results in HTML format pattern: "*.html" - - log: - - meta: + ontologies: [] + log: + - - meta: type: map description: | Groovy Map containing sample information @@ -81,8 +89,9 @@ output: type: file description: fastq log file pattern: "*.log" - - reads_fail: - - meta: + ontologies: [] + reads_fail: + - - meta: type: map description: | Groovy Map containing sample information @@ -91,8 +100,11 @@ output: type: file description: Reads the failed the preprocessing pattern: "*fail.fastq.gz" - - reads_merged: - - meta: + ontologies: + - edam: http://edamontology.org/format_1930 # FASTQ + - edam: http://edamontology.org/format_3989 # GZIP format + reads_merged: + - - meta: type: map description: | Groovy Map containing sample information @@ -101,14 +113,32 @@ output: type: file description: Reads that were successfully merged pattern: "*.{merged.fastq.gz}" - - versions: - - versions.yml: - type: file - description: File containing software versions - pattern: "versions.yml" + ontologies: [] + versions_fastp: + - - "${task.process}": + type: string + description: The name of the process + - fastp: + type: string + description: The name of the tool + - 'fastp --version 2>&1 | sed -e "s/fastp //g"': + type: eval + description: The expression to obtain the version of the tool +topics: + versions: + - - "${task.process}": + type: string + description: The name of the process + - fastp: + type: string + description: The name of the tool + - 'fastp --version 2>&1 | sed -e "s/fastp //g"': + type: eval + description: The expression to obtain the version of the tool authors: - "@drpatelh" - "@kevinmenden" + - "@eit-maxlcummins" maintainers: - "@drpatelh" - "@kevinmenden" diff --git a/modules/nf-core/fastp/tests/main.nf.test b/modules/nf-core/fastp/tests/main.nf.test index c4e119aff..b79015781 100644 --- a/modules/nf-core/fastp/tests/main.nf.test +++ b/modules/nf-core/fastp/tests/main.nf.test @@ -3,6 +3,9 @@ nextflow_process { name "Test Process FASTP" script "../main.nf" process "FASTP" + tag "modules" + tag "modules_nfcore" + tag "fastp" test("test_fastp_single_end") { @@ -10,14 +13,19 @@ nextflow_process { process { """ + adapter_fasta = [] // empty list for no adapter file! + discard_trimmed_pass = false + 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) ] + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) ], + adapter_fasta ]) - input[1] = [] - input[2] = false - input[3] = false - input[4] = false + input[1] = discard_trimmed_pass + input[2] = save_trimmed_fail + input[3] = save_merged """ } } @@ -28,11 +36,11 @@ nextflow_process { { 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() } + process.out.findAll { key, val -> key.startsWith('versions') }).match() + } ) } } @@ -43,20 +51,22 @@ nextflow_process { process { """ - adapter_fasta = [] - save_trimmed_pass = true - save_trimmed_fail = false - save_merged = false + adapter_fasta = [] + discard_trimmed_pass = false + 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) ] + [ + 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) + ], + adapter_fasta ]) - input[1] = [] - input[2] = false - input[3] = false - input[4] = false + input[1] = discard_trimmed_pass + input[2] = save_trimmed_fail + input[3] = save_merged """ } } @@ -67,11 +77,10 @@ nextflow_process { { 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() } + process.out.findAll { key, val -> key.startsWith('versions') }).match() } ) } } @@ -82,14 +91,19 @@ nextflow_process { when { process { """ + adapter_fasta = [] + discard_trimmed_pass = false + 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) ] + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_interleaved.fastq.gz', checkIfExists: true) ], + adapter_fasta ]) - input[1] = [] - input[2] = false - input[3] = false - input[4] = false + input[1] = discard_trimmed_pass + input[2] = save_trimmed_fail + input[3] = save_merged """ } } @@ -103,8 +117,7 @@ nextflow_process { { assert process.out.reads_merged == [] }, { assert snapshot( process.out.reads, - process.out.json, - process.out.versions).match() } + process.out.findAll { key, val -> key.startsWith('versions') }).match() } ) } } @@ -115,14 +128,19 @@ nextflow_process { process { """ + adapter_fasta = [] + discard_trimmed_pass = false + 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) ] + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) ], + adapter_fasta ]) - input[1] = [] - input[2] = false - input[3] = true - input[4] = false + input[1] = discard_trimmed_pass + input[2] = save_trimmed_fail + input[3] = save_merged """ } } @@ -133,11 +151,10 @@ nextflow_process { { 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() } + process.out.findAll { key, val -> key.startsWith('versions') }).match() } ) } } @@ -148,15 +165,22 @@ nextflow_process { when { process { """ + adapter_fasta = [] + discard_trimmed_pass = false + 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)] + [ + 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) + ], + adapter_fasta ]) - input[1] = [] - input[2] = false - input[3] = true - input[4] = false + input[1] = discard_trimmed_pass + input[2] = save_trimmed_fail + input[3] = save_merged """ } } @@ -170,8 +194,7 @@ nextflow_process { process.out.reads, process.out.reads_fail, process.out.reads_merged, - process.out.json, - process.out.versions).match() } + process.out.findAll { key, val -> key.startsWith('versions') }).match() } ) } } @@ -181,15 +204,22 @@ nextflow_process { when { process { """ + adapter_fasta = [] + discard_trimmed_pass = false + 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) ] + [ + 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) + ], + adapter_fasta ]) - input[1] = [] - input[2] = false - input[3] = false - input[4] = true + input[1] = discard_trimmed_pass + input[2] = save_trimmed_fail + input[3] = save_merged """ } } @@ -200,11 +230,10 @@ nextflow_process { { 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() }, + process.out.findAll { key, val -> key.startsWith('versions') }).match() }, ) } } @@ -214,15 +243,22 @@ nextflow_process { when { process { """ + adapter_fasta = file(params.modules_testdata_base_path + 'delete_me/fastp/adapters.fasta', checkIfExists: true) + discard_trimmed_pass = false + 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) ] + [ + 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) + ], + adapter_fasta ]) - input[1] = Channel.of([ file(params.modules_testdata_base_path + 'delete_me/fastp/adapters.fasta', checkIfExists: true) ]) + input[1] = false input[2] = false - input[3] = false - input[4] = true + input[3] = true """ } } @@ -233,11 +269,10 @@ nextflow_process { { 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() } + process.out.findAll { key, val -> key.startsWith('versions') }).match() } ) } } @@ -247,14 +282,20 @@ nextflow_process { when { process { """ + adapter_fasta = [] + discard_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) ] + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) ], + adapter_fasta ]) - input[1] = [] - input[2] = true - input[3] = false - input[4] = false + + input[1] = discard_trimmed_pass + input[2] = save_trimmed_fail + input[3] = save_merged """ } } @@ -265,14 +306,13 @@ nextflow_process { { 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() } + process.out.findAll { key, val -> key.startsWith('versions') }).match() } ) } } @@ -282,15 +322,22 @@ nextflow_process { when { process { """ + adapter_fasta = [] + discard_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) ] + [ + 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) + ], + adapter_fasta ]) - input[1] = [] - input[2] = true - input[3] = false - input[4] = false + input[1] = discard_trimmed_pass + input[2] = save_trimmed_fail + input[3] = save_merged """ } } @@ -301,14 +348,13 @@ nextflow_process { { 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() } + process.out.findAll { key, val -> key.startsWith('versions') }).match() } ) } } @@ -321,14 +367,19 @@ nextflow_process { process { """ + adapter_fasta = [] + discard_trimmed_pass = false + 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) ] + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) ], + adapter_fasta ]) - input[1] = [] - input[2] = false - input[3] = false - input[4] = false + input[1] = discard_trimmed_pass + input[2] = save_trimmed_fail + input[3] = save_merged """ } } @@ -349,20 +400,20 @@ nextflow_process { process { """ - adapter_fasta = [] - save_trimmed_pass = true - save_trimmed_fail = false - save_merged = false + adapter_fasta = [] + discard_trimmed_pass = false + 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) ] + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) ], + adapter_fasta ]) - input[1] = [] - input[2] = false - input[3] = false - input[4] = false + input[1] = discard_trimmed_pass + input[2] = save_trimmed_fail + input[3] = save_merged """ } } @@ -383,14 +434,19 @@ nextflow_process { when { process { """ + adapter_fasta = [] + discard_trimmed_pass = false + 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) ] + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_interleaved.fastq.gz', checkIfExists: true) ], + adapter_fasta ]) - input[1] = [] - input[2] = false - input[3] = false - input[4] = false + input[1] = discard_trimmed_pass + input[2] = save_trimmed_fail + input[3] = save_merged """ } } @@ -411,14 +467,19 @@ nextflow_process { process { """ + adapter_fasta = [] + discard_trimmed_pass = false + 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) ] + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) ], + adapter_fasta ]) - input[1] = [] - input[2] = false - input[3] = true - input[4] = false + input[1] = discard_trimmed_pass + input[2] = save_trimmed_fail + input[3] = save_merged """ } } @@ -439,15 +500,20 @@ nextflow_process { when { process { """ + adapter_fasta = [] + discard_trimmed_pass = false + 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)] + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true)], + adapter_fasta ]) - input[1] = [] - input[2] = false - input[3] = true - input[4] = false + input[1] = discard_trimmed_pass + input[2] = save_trimmed_fail + input[3] = save_merged """ } } @@ -467,15 +533,20 @@ nextflow_process { when { process { """ + adapter_fasta = [] + discard_trimmed_pass = false + 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) ] + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) ], + adapter_fasta ]) - input[1] = [] - input[2] = false - input[3] = false - input[4] = true + input[1] = discard_trimmed_pass + input[2] = save_trimmed_fail + input[3] = save_merged """ } } @@ -495,15 +566,22 @@ nextflow_process { when { process { """ + adapter_fasta = file(params.modules_testdata_base_path + 'delete_me/fastp/adapters.fasta', checkIfExists: true) + discard_trimmed_pass = false + 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) ] + [ + 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) + ], + adapter_fasta ]) - 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 + input[1] = discard_trimmed_pass + input[2] = save_trimmed_fail + input[3] = save_merged """ } } @@ -523,14 +601,19 @@ nextflow_process { when { process { """ + adapter_fasta = [] + discard_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) ] + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) ], + adapter_fasta ]) - input[1] = [] - input[2] = true - input[3] = false - input[4] = false + input[1] = discard_trimmed_pass + input[2] = save_trimmed_fail + input[3] = save_merged """ } } @@ -550,15 +633,20 @@ nextflow_process { when { process { """ + adapter_fasta = [] + discard_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) ] + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) ], + adapter_fasta ]) - input[1] = [] - input[2] = true - input[3] = false - input[4] = false + input[1] = discard_trimmed_pass + input[2] = save_trimmed_fail + input[3] = save_merged """ } } @@ -570,4 +658,4 @@ nextflow_process { ) } } -} \ 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 9e2aaf315..567723589 100644 --- a/modules/nf-core/fastp/tests/main.nf.test.snap +++ b/modules/nf-core/fastp/tests/main.nf.test.snap @@ -39,7 +39,11 @@ ], "6": [ - "versions.yml:md5,3799377c4173131ba9392346e1c40bb9" + [ + "FASTP", + "fastp", + "1.0.1" + ] ], "html": [ [ @@ -77,28 +81,23 @@ "reads_merged": [ ], - "versions": [ - "versions.yml:md5,3799377c4173131ba9392346e1c40bb9" + "versions_fastp": [ + [ + "FASTP", + "fastp", + "1.0.1" + ] ] } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-03-31T13:40:51.8619133" + "timestamp": "2026-01-22T13:00:52.14535813" }, "test_fastp_paired_end": { "content": [ - [ - [ - { - "id": "test", - "single_end": false - }, - "test.fastp.json:md5,7cf3bff1922b512bcca58439eb2d3679" - ] - ], [ [ { @@ -106,8 +105,8 @@ "single_end": false }, [ - "test_1.fastp.fastq.gz:md5,67b2bbae47f073e05a97a9c2edce23c7", - "test_2.fastp.fastq.gz:md5,25cbdca08e2083dbd4f0502de6b62f39" + "test_R1.fastp.fastq.gz:md5,67b2bbae47f073e05a97a9c2edce23c7", + "test_R2.fastp.fastq.gz:md5,25cbdca08e2083dbd4f0502de6b62f39" ] ] ], @@ -117,27 +116,24 @@ [ ], - [ - "versions.yml:md5,3799377c4173131ba9392346e1c40bb9" - ] + { + "versions_fastp": [ + [ + "FASTP", + "fastp", + "1.0.1" + ] + ] + } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-03-31T13:39:15.121411815" + "timestamp": "2026-01-23T09:46:26.421773402" }, "test_fastp_paired_end_merged_adapterlist": { "content": [ - [ - [ - { - "id": "test", - "single_end": false - }, - "test.fastp.json:md5,533983f8c11cc3f2ccdcea01531f68ae" - ] - ], [ [ { @@ -145,8 +141,8 @@ "single_end": false }, [ - "test_1.fastp.fastq.gz:md5,54b726a55e992a869fd3fa778afe1672", - "test_2.fastp.fastq.gz:md5,29d3b33b869f7b63417b8ff07bb128ba" + "test_R1.fastp.fastq.gz:md5,54b726a55e992a869fd3fa778afe1672", + "test_R2.fastp.fastq.gz:md5,29d3b33b869f7b63417b8ff07bb128ba" ] ] ], @@ -162,27 +158,24 @@ "test.merged.fastq.gz:md5,c873bb1ab3fa859dcc47306465e749d5" ] ], - [ - "versions.yml:md5,3799377c4173131ba9392346e1c40bb9" - ] + { + "versions_fastp": [ + [ + "FASTP", + "fastp", + "1.0.1" + ] + ] + } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-03-31T13:39:51.561598206" + "timestamp": "2026-01-23T09:46:59.832295907" }, "test_fastp_single_end_qc_only": { "content": [ - [ - [ - { - "id": "test", - "single_end": true - }, - "test.fastp.json:md5,93f407199ee8b94c023c291bddfc4dce" - ] - ], [ ], @@ -201,15 +194,21 @@ [ ], - [ - "versions.yml:md5,3799377c4173131ba9392346e1c40bb9" - ] + { + "versions_fastp": [ + [ + "FASTP", + "fastp", + "1.0.1" + ] + ] + } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-03-31T13:39:56.392912049" + "timestamp": "2026-01-23T09:47:06.486959565" }, "test_fastp_paired_end_trim_fail": { "content": [ @@ -220,8 +219,8 @@ "single_end": false }, [ - "test_1.fastp.fastq.gz:md5,6ff32a64c5188b9a9192be1398c262c7", - "test_2.fastp.fastq.gz:md5,db0cb7c9977e94ac2b4b446ebd017a8a" + "test_R1.fastp.fastq.gz:md5,6ff32a64c5188b9a9192be1398c262c7", + "test_R2.fastp.fastq.gz:md5,db0cb7c9977e94ac2b4b446ebd017a8a" ] ] ], @@ -233,32 +232,29 @@ }, [ "test.paired.fail.fastq.gz:md5,409b687c734cedd7a1fec14d316e1366", - "test_1.fail.fastq.gz:md5,4f273cf3159c13f79e8ffae12f5661f6", - "test_2.fail.fastq.gz:md5,f97b9edefb5649aab661fbc9e71fc995" + "test_R1.fail.fastq.gz:md5,4f273cf3159c13f79e8ffae12f5661f6", + "test_R2.fail.fastq.gz:md5,f97b9edefb5649aab661fbc9e71fc995" ] ] ], [ ], - [ - [ - { - "id": "test", - "single_end": false - }, - "test.fastp.json:md5,5009a892192f2084c2af69c153d88d6c" + { + "versions_fastp": [ + [ + "FASTP", + "fastp", + "1.0.1" + ] ] - ], - [ - "versions.yml:md5,3799377c4173131ba9392346e1c40bb9" - ] + } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-03-31T13:39:38.690242568" + "timestamp": "2026-01-23T09:46:46.736511024" }, "fastp - stub test_fastp_interleaved": { "content": [ @@ -306,7 +302,11 @@ ], "6": [ - "versions.yml:md5,3799377c4173131ba9392346e1c40bb9" + [ + "FASTP", + "fastp", + "1.0.1" + ] ], "html": [ [ @@ -350,16 +350,20 @@ "reads_merged": [ ], - "versions": [ - "versions.yml:md5,3799377c4173131ba9392346e1c40bb9" + "versions_fastp": [ + [ + "FASTP", + "fastp", + "1.0.1" + ] ] } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-03-31T13:40:23.678200076" + "timestamp": "2026-01-22T13:00:16.097071654" }, "test_fastp_single_end - stub": { "content": [ @@ -407,7 +411,11 @@ ], "6": [ - "versions.yml:md5,3799377c4173131ba9392346e1c40bb9" + [ + "FASTP", + "fastp", + "1.0.1" + ] ], "html": [ [ @@ -451,16 +459,20 @@ "reads_merged": [ ], - "versions": [ - "versions.yml:md5,3799377c4173131ba9392346e1c40bb9" + "versions_fastp": [ + [ + "FASTP", + "fastp", + "1.0.1" + ] ] } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-03-31T13:40:08.756547678" + "timestamp": "2026-01-22T13:00:03.317192706" }, "test_fastp_paired_end_merged_adapterlist - stub": { "content": [ @@ -472,8 +484,8 @@ "single_end": false }, [ - "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", - "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + "test_R1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_R2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" ] ] ], @@ -517,7 +529,11 @@ ] ], "6": [ - "versions.yml:md5,3799377c4173131ba9392346e1c40bb9" + [ + "FASTP", + "fastp", + "1.0.1" + ] ], "html": [ [ @@ -553,8 +569,8 @@ "single_end": false }, [ - "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", - "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + "test_R1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_R2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" ] ] ], @@ -570,16 +586,20 @@ "test.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" ] ], - "versions": [ - "versions.yml:md5,3799377c4173131ba9392346e1c40bb9" + "versions_fastp": [ + [ + "FASTP", + "fastp", + "1.0.1" + ] ] } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-03-31T13:40:47.596331823" + "timestamp": "2026-01-22T13:00:44.851708205" }, "test_fastp_paired_end_merged - stub": { "content": [ @@ -591,8 +611,8 @@ "single_end": false }, [ - "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", - "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + "test_R1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_R2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" ] ] ], @@ -636,7 +656,11 @@ ] ], "6": [ - "versions.yml:md5,3799377c4173131ba9392346e1c40bb9" + [ + "FASTP", + "fastp", + "1.0.1" + ] ], "html": [ [ @@ -672,8 +696,8 @@ "single_end": false }, [ - "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", - "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + "test_R1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_R2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" ] ] ], @@ -689,28 +713,23 @@ "test.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" ] ], - "versions": [ - "versions.yml:md5,3799377c4173131ba9392346e1c40bb9" + "versions_fastp": [ + [ + "FASTP", + "fastp", + "1.0.1" + ] ] } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-03-31T13:40:39.962303534" + "timestamp": "2026-01-22T13:00:37.581047713" }, "test_fastp_paired_end_merged": { "content": [ - [ - [ - { - "id": "test", - "single_end": false - }, - "test.fastp.json:md5,8f99097bfa04b629891105b8af9c429f" - ] - ], [ [ { @@ -718,8 +737,8 @@ "single_end": false }, [ - "test_1.fastp.fastq.gz:md5,54b726a55e992a869fd3fa778afe1672", - "test_2.fastp.fastq.gz:md5,29d3b33b869f7b63417b8ff07bb128ba" + "test_R1.fastp.fastq.gz:md5,54b726a55e992a869fd3fa778afe1672", + "test_R2.fastp.fastq.gz:md5,29d3b33b869f7b63417b8ff07bb128ba" ] ] ], @@ -735,15 +754,21 @@ "test.merged.fastq.gz:md5,c873bb1ab3fa859dcc47306465e749d5" ] ], - [ - "versions.yml:md5,3799377c4173131ba9392346e1c40bb9" - ] + { + "versions_fastp": [ + [ + "FASTP", + "fastp", + "1.0.1" + ] + ] + } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-03-31T13:39:46.300238743" + "timestamp": "2026-01-23T09:46:53.190202914" }, "test_fastp_paired_end - stub": { "content": [ @@ -755,8 +780,8 @@ "single_end": false }, [ - "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", - "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + "test_R1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_R2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" ] ] ], @@ -794,7 +819,11 @@ ], "6": [ - "versions.yml:md5,3799377c4173131ba9392346e1c40bb9" + [ + "FASTP", + "fastp", + "1.0.1" + ] ], "html": [ [ @@ -830,8 +859,8 @@ "single_end": false }, [ - "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", - "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + "test_R1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_R2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" ] ] ], @@ -841,28 +870,23 @@ "reads_merged": [ ], - "versions": [ - "versions.yml:md5,3799377c4173131ba9392346e1c40bb9" + "versions_fastp": [ + [ + "FASTP", + "fastp", + "1.0.1" + ] ] } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-03-31T13:40:16.309925689" + "timestamp": "2026-01-22T13:00:09.585957282" }, "test_fastp_single_end": { "content": [ - [ - [ - { - "id": "test", - "single_end": true - }, - "test.fastp.json:md5,81dc86dd695967bb5c015e0a978bf20c" - ] - ], [ [ { @@ -878,15 +902,21 @@ [ ], - [ - "versions.yml:md5,3799377c4173131ba9392346e1c40bb9" - ] + { + "versions_fastp": [ + [ + "FASTP", + "fastp", + "1.0.1" + ] + ] + } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-03-31T13:39:07.133909607" + "timestamp": "2026-01-23T09:46:19.624824985" }, "test_fastp_single_end_trim_fail - stub": { "content": [ @@ -940,7 +970,11 @@ ], "6": [ - "versions.yml:md5,3799377c4173131ba9392346e1c40bb9" + [ + "FASTP", + "fastp", + "1.0.1" + ] ], "html": [ [ @@ -990,16 +1024,20 @@ "reads_merged": [ ], - "versions": [ - "versions.yml:md5,3799377c4173131ba9392346e1c40bb9" + "versions_fastp": [ + [ + "FASTP", + "fastp", + "1.0.1" + ] ] } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-03-31T13:40:28.086573661" + "timestamp": "2026-01-22T13:00:22.800659826" }, "test_fastp_paired_end_trim_fail - stub": { "content": [ @@ -1011,8 +1049,8 @@ "single_end": false }, [ - "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", - "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + "test_R1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_R2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" ] ] ], @@ -1051,8 +1089,8 @@ }, [ "test.paired.fail.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", - "test_1.fail.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", - "test_2.fail.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + "test_R1.fail.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_R2.fail.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" ] ] ], @@ -1060,7 +1098,11 @@ ], "6": [ - "versions.yml:md5,3799377c4173131ba9392346e1c40bb9" + [ + "FASTP", + "fastp", + "1.0.1" + ] ], "html": [ [ @@ -1096,8 +1138,8 @@ "single_end": false }, [ - "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", - "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + "test_R1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_R2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" ] ] ], @@ -1109,24 +1151,28 @@ }, [ "test.paired.fail.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", - "test_1.fail.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", - "test_2.fail.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + "test_R1.fail.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_R2.fail.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" ] ] ], "reads_merged": [ ], - "versions": [ - "versions.yml:md5,3799377c4173131ba9392346e1c40bb9" + "versions_fastp": [ + [ + "FASTP", + "fastp", + "1.0.1" + ] ] } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-03-31T13:40:35.606162029" + "timestamp": "2026-01-22T13:00:30.271734068" }, "fastp test_fastp_interleaved": { "content": [ @@ -1139,36 +1185,24 @@ "test.fastp.fastq.gz:md5,217d62dc13a23e92513a1bd8e1bcea39" ] ], - [ - [ - { - "id": "test", - "single_end": true - }, - "test.fastp.json:md5,101003b8ac634ca5fd381656ac2b8b9f" + { + "versions_fastp": [ + [ + "FASTP", + "fastp", + "1.0.1" + ] ] - ], - [ - "versions.yml:md5,3799377c4173131ba9392346e1c40bb9" - ] + } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-03-31T13:39:23.114582408" + "timestamp": "2026-01-23T09:46:33.4628687" }, "test_fastp_single_end_trim_fail": { "content": [ - [ - [ - { - "id": "test", - "single_end": true - }, - "test.fastp.json:md5,d721f75d68a382c819b6499e6325a942" - ] - ], [ [ { @@ -1190,27 +1224,24 @@ [ ], - [ - "versions.yml:md5,3799377c4173131ba9392346e1c40bb9" - ] + { + "versions_fastp": [ + [ + "FASTP", + "fastp", + "1.0.1" + ] + ] + } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-03-31T13:39:30.757538842" + "timestamp": "2026-01-23T09:46:39.895973372" }, "test_fastp_paired_end_qc_only": { "content": [ - [ - [ - { - "id": "test", - "single_end": false - }, - "test.fastp.json:md5,1ad31d6559ff5d4d275f501f3f5c02b9" - ] - ], [ ], @@ -1229,15 +1260,21 @@ [ ], - [ - "versions.yml:md5,3799377c4173131ba9392346e1c40bb9" - ] + { + "versions_fastp": [ + [ + "FASTP", + "fastp", + "1.0.1" + ] + ] + } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-03-31T13:40:01.381972575" + "timestamp": "2026-01-23T09:47:13.015833707" }, "test_fastp_paired_end_qc_only - stub": { "content": [ @@ -1279,7 +1316,11 @@ ], "6": [ - "versions.yml:md5,3799377c4173131ba9392346e1c40bb9" + [ + "FASTP", + "fastp", + "1.0.1" + ] ], "html": [ [ @@ -1317,15 +1358,19 @@ "reads_merged": [ ], - "versions": [ - "versions.yml:md5,3799377c4173131ba9392346e1c40bb9" + "versions_fastp": [ + [ + "FASTP", + "fastp", + "1.0.1" + ] ] } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-03-31T13:40:56.392034947" + "timestamp": "2026-01-22T13:00:59.670106791" } } \ No newline at end of file diff --git a/modules/nf-core/fastqc/main.nf b/modules/nf-core/fastqc/main.nf index 23e16634c..f5629527d 100644 --- a/modules/nf-core/fastqc/main.nf +++ b/modules/nf-core/fastqc/main.nf @@ -1,6 +1,6 @@ process FASTQC { tag "${meta.id}" - label 'process_medium' + label 'process_low' conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? @@ -11,9 +11,9 @@ process FASTQC { tuple val(meta), path(reads) output: - tuple val(meta), path("*.html"), emit: html - tuple val(meta), path("*.zip") , emit: zip - path "versions.yml" , emit: versions + tuple val(meta) , path("*.html") , emit: html + tuple val(meta) , path("*.zip") , emit: zip + tuple val("${task.process}"), val('fastqc'), eval('fastqc --version | sed "/FastQC v/!d; s/.*v//"'), emit: versions_fastqc, topic: versions when: task.ext.when == null || task.ext.when @@ -43,11 +43,6 @@ process FASTQC { --threads ${task.cpus} \\ --memory ${fastqc_memory} \\ ${renamed_files} - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - fastqc: \$( fastqc --version | sed '/FastQC v/!d; s/.*v//' ) - END_VERSIONS """ stub: @@ -55,10 +50,5 @@ process FASTQC { """ touch ${prefix}.html touch ${prefix}.zip - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - fastqc: \$( fastqc --version | sed '/FastQC v/!d; s/.*v//' ) - END_VERSIONS """ } diff --git a/modules/nf-core/fastqc/meta.yml b/modules/nf-core/fastqc/meta.yml index c8d9d025a..49164c88f 100644 --- a/modules/nf-core/fastqc/meta.yml +++ b/modules/nf-core/fastqc/meta.yml @@ -53,13 +53,28 @@ output: description: FastQC report archive pattern: "*_{fastqc.zip}" ontologies: [] + versions_fastqc: + - - ${task.process}: + type: string + description: The process the versions were collected from + - fastqc: + type: string + description: The tool name + - fastqc --version | sed "/FastQC v/!d; s/.*v//": + type: eval + description: The expression to obtain the version of the tool + +topics: versions: - - versions.yml: - type: file - description: File containing software versions - pattern: "versions.yml" - ontologies: - - edam: http://edamontology.org/format_3750 # YAML + - - ${task.process}: + type: string + description: The process the versions were collected from + - fastqc: + type: string + description: The tool name + - fastqc --version | sed "/FastQC v/!d; s/.*v//": + type: eval + description: The expression to obtain the version of the tool authors: - "@drpatelh" - "@grst" @@ -70,3 +85,27 @@ maintainers: - "@grst" - "@ewels" - "@FelixKrueger" +containers: + conda: + linux_amd64: + lock_file: https://wave.seqera.io/v1alpha1/builds/bd-af7a5314d5015c29_1/condalock + linux_arm64: + lock_file: https://wave.seqera.io/v1alpha1/builds/bd-df99cb252670875a_2/condalock + docker: + linux_amd64: + build_id: bd-af7a5314d5015c29_1 + name: community.wave.seqera.io/library/fastqc:0.12.1--af7a5314d5015c29 + scanId: sc-a618548acbee5a8a_30 + linux_arm64: + build_id: bd-df99cb252670875a_2 + name: community.wave.seqera.io/library/fastqc:0.12.1--df99cb252670875a + scanId: sc-b5913ed5d42b22d2_18 + singularity: + linux_amd64: + build_id: bd-104d26ddd9519960_1 + name: oras://community.wave.seqera.io/library/fastqc:0.12.1--104d26ddd9519960 + https: https://community.wave.seqera.io/v2/library/fastqc/blobs/sha256:e0c976cb2eca5fee72618a581537a4f8ea42fcae24c9b201e2e0f764fd28648a + linux_arm64: + build_id: bd-d56b505a93aef38a_1 + name: oras://community.wave.seqera.io/library/fastqc:0.12.1--d56b505a93aef38a + https: https://community.wave.seqera.io/v2/library/fastqc/blobs/sha256:fd39534bf298698cbe3ee4d4a6f1e73330ec4bca44c38dd9a4d06cb5ea838017 diff --git a/modules/nf-core/fastqc/tests/main.nf.test b/modules/nf-core/fastqc/tests/main.nf.test index e9d79a074..66c44da9b 100644 --- a/modules/nf-core/fastqc/tests/main.nf.test +++ b/modules/nf-core/fastqc/tests/main.nf.test @@ -30,7 +30,7 @@ nextflow_process { { 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() } + { assert snapshot(sanitizeOutput(process.out).findAll { key, val -> key != 'html' && key != 'zip' }).match() } ) } } @@ -58,7 +58,7 @@ nextflow_process { { 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() } + { assert snapshot(sanitizeOutput(process.out).findAll { key, val -> key != 'html' && key != 'zip' }).match() } ) } } @@ -82,7 +82,7 @@ nextflow_process { { 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() } + { assert snapshot(sanitizeOutput(process.out).findAll { key, val -> key != 'html' && key != 'zip' }).match() } ) } } @@ -106,7 +106,7 @@ nextflow_process { { 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() } + { assert snapshot(sanitizeOutput(process.out).findAll { key, val -> key != 'html' && key != 'zip' }).match() } ) } } @@ -142,7 +142,7 @@ nextflow_process { { 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() } + { assert snapshot(sanitizeOutput(process.out).findAll { key, val -> key != 'html' && key != 'zip' }).match() } ) } } @@ -166,7 +166,7 @@ nextflow_process { { 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() } + { assert snapshot(sanitizeOutput(process.out).findAll { key, val -> key != 'html' && key != 'zip' }).match() } ) } } diff --git a/modules/nf-core/fastqc/tests/main.nf.test.snap b/modules/nf-core/fastqc/tests/main.nf.test.snap index d5db3092f..c8ee120f5 100644 --- a/modules/nf-core/fastqc/tests/main.nf.test.snap +++ b/modules/nf-core/fastqc/tests/main.nf.test.snap @@ -1,15 +1,21 @@ { "sarscov2 custom_prefix": { "content": [ - [ - "versions.yml:md5,e1cc25ca8af856014824abd842e93978" - ] + { + "versions_fastqc": [ + [ + "FASTQC", + "fastqc", + "0.12.1" + ] + ] + } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" + "nf-test": "0.9.2", + "nextflow": "25.10.0" }, - "timestamp": "2024-07-22T11:02:16.374038" + "timestamp": "2025-10-28T16:39:14.518503" }, "sarscov2 single-end [fastq] - stub": { "content": [ @@ -33,7 +39,11 @@ ] ], "2": [ - "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + [ + "FASTQC", + "fastqc", + "0.12.1" + ] ], "html": [ [ @@ -44,8 +54,12 @@ "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "versions": [ - "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + "versions_fastqc": [ + [ + "FASTQC", + "fastqc", + "0.12.1" + ] ], "zip": [ [ @@ -59,10 +73,10 @@ } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" + "nf-test": "0.9.2", + "nextflow": "25.10.0" }, - "timestamp": "2024-07-22T11:02:24.993809" + "timestamp": "2025-10-28T16:39:19.309008" }, "sarscov2 custom_prefix - stub": { "content": [ @@ -86,7 +100,11 @@ ] ], "2": [ - "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + [ + "FASTQC", + "fastqc", + "0.12.1" + ] ], "html": [ [ @@ -97,8 +115,12 @@ "mysample.html:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "versions": [ - "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + "versions_fastqc": [ + [ + "FASTQC", + "fastqc", + "0.12.1" + ] ], "zip": [ [ @@ -112,58 +134,82 @@ } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" + "nf-test": "0.9.2", + "nextflow": "25.10.0" }, - "timestamp": "2024-07-22T11:03:10.93942" + "timestamp": "2025-10-28T16:39:44.94888" }, "sarscov2 interleaved [fastq]": { "content": [ - [ - "versions.yml:md5,e1cc25ca8af856014824abd842e93978" - ] + { + "versions_fastqc": [ + [ + "FASTQC", + "fastqc", + "0.12.1" + ] + ] + } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" + "nf-test": "0.9.2", + "nextflow": "25.10.0" }, - "timestamp": "2024-07-22T11:01:42.355718" + "timestamp": "2025-10-28T16:38:45.168496" }, "sarscov2 paired-end [bam]": { "content": [ - [ - "versions.yml:md5,e1cc25ca8af856014824abd842e93978" - ] + { + "versions_fastqc": [ + [ + "FASTQC", + "fastqc", + "0.12.1" + ] + ] + } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" + "nf-test": "0.9.2", + "nextflow": "25.10.0" }, - "timestamp": "2024-07-22T11:01:53.276274" + "timestamp": "2025-10-28T16:38:53.268919" }, "sarscov2 multiple [fastq]": { "content": [ - [ - "versions.yml:md5,e1cc25ca8af856014824abd842e93978" - ] + { + "versions_fastqc": [ + [ + "FASTQC", + "fastqc", + "0.12.1" + ] + ] + } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" + "nf-test": "0.9.2", + "nextflow": "25.10.0" }, - "timestamp": "2024-07-22T11:02:05.527626" + "timestamp": "2025-10-28T16:39:05.050305" }, "sarscov2 paired-end [fastq]": { "content": [ - [ - "versions.yml:md5,e1cc25ca8af856014824abd842e93978" - ] + { + "versions_fastqc": [ + [ + "FASTQC", + "fastqc", + "0.12.1" + ] + ] + } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" + "nf-test": "0.9.2", + "nextflow": "25.10.0" }, - "timestamp": "2024-07-22T11:01:31.188871" + "timestamp": "2025-10-28T16:38:37.2373" }, "sarscov2 paired-end [fastq] - stub": { "content": [ @@ -187,7 +233,11 @@ ] ], "2": [ - "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + [ + "FASTQC", + "fastqc", + "0.12.1" + ] ], "html": [ [ @@ -198,8 +248,12 @@ "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "versions": [ - "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + "versions_fastqc": [ + [ + "FASTQC", + "fastqc", + "0.12.1" + ] ], "zip": [ [ @@ -213,10 +267,10 @@ } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" + "nf-test": "0.9.2", + "nextflow": "25.10.0" }, - "timestamp": "2024-07-22T11:02:34.273566" + "timestamp": "2025-10-28T16:39:24.450398" }, "sarscov2 multiple [fastq] - stub": { "content": [ @@ -240,7 +294,11 @@ ] ], "2": [ - "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + [ + "FASTQC", + "fastqc", + "0.12.1" + ] ], "html": [ [ @@ -251,8 +309,12 @@ "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "versions": [ - "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + "versions_fastqc": [ + [ + "FASTQC", + "fastqc", + "0.12.1" + ] ], "zip": [ [ @@ -266,22 +328,28 @@ } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" + "nf-test": "0.9.2", + "nextflow": "25.10.0" }, - "timestamp": "2024-07-22T11:03:02.304411" + "timestamp": "2025-10-28T16:39:39.758762" }, "sarscov2 single-end [fastq]": { "content": [ - [ - "versions.yml:md5,e1cc25ca8af856014824abd842e93978" - ] + { + "versions_fastqc": [ + [ + "FASTQC", + "fastqc", + "0.12.1" + ] + ] + } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" + "nf-test": "0.9.2", + "nextflow": "25.10.0" }, - "timestamp": "2024-07-22T11:01:19.095607" + "timestamp": "2025-10-28T16:38:29.555068" }, "sarscov2 interleaved [fastq] - stub": { "content": [ @@ -305,7 +373,11 @@ ] ], "2": [ - "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + [ + "FASTQC", + "fastqc", + "0.12.1" + ] ], "html": [ [ @@ -316,8 +388,12 @@ "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "versions": [ - "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + "versions_fastqc": [ + [ + "FASTQC", + "fastqc", + "0.12.1" + ] ], "zip": [ [ @@ -331,10 +407,10 @@ } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" + "nf-test": "0.9.2", + "nextflow": "25.10.0" }, - "timestamp": "2024-07-22T11:02:44.640184" + "timestamp": "2025-10-28T16:39:29.193136" }, "sarscov2 paired-end [bam] - stub": { "content": [ @@ -358,7 +434,11 @@ ] ], "2": [ - "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + [ + "FASTQC", + "fastqc", + "0.12.1" + ] ], "html": [ [ @@ -369,8 +449,12 @@ "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "versions": [ - "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + "versions_fastqc": [ + [ + "FASTQC", + "fastqc", + "0.12.1" + ] ], "zip": [ [ @@ -384,9 +468,9 @@ } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" + "nf-test": "0.9.2", + "nextflow": "25.10.0" }, - "timestamp": "2024-07-22T11:02:53.550742" + "timestamp": "2025-10-28T16:39:34.144919" } } \ No newline at end of file diff --git a/modules/nf-core/fq/lint/main.nf b/modules/nf-core/fq/lint/main.nf index 27107b465..6f2dae8d8 100644 --- a/modules/nf-core/fq/lint/main.nf +++ b/modules/nf-core/fq/lint/main.nf @@ -12,7 +12,7 @@ process FQ_LINT { output: tuple val(meta), path("*.fq_lint.txt"), emit: lint - path "versions.yml" , emit: versions + tuple val("${task.process}"), val('fq'), eval("fq lint --version | sed 's/fq-lint //; s/ .*//'"), emit: versions_fq, topic: versions when: task.ext.when == null || task.ext.when @@ -24,21 +24,11 @@ process FQ_LINT { fq lint \\ $args \\ $fastq > ${prefix}.fq_lint.txt - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - fq: \$(echo \$(fq lint --version | sed 's/fq-lint //g')) - END_VERSIONS """ stub: def prefix = task.ext.prefix ?: "${meta.id}" """ touch ${prefix}.fq_lint.txt - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - fq: \$(echo \$(fq lint --version | sed 's/fq-lint //g')) - END_VERSIONS """ } diff --git a/modules/nf-core/fq/lint/meta.yml b/modules/nf-core/fq/lint/meta.yml index 7240fb579..e5c4b41bf 100644 --- a/modules/nf-core/fq/lint/meta.yml +++ b/modules/nf-core/fq/lint/meta.yml @@ -22,21 +22,42 @@ input: type: file description: FASTQ file list pattern: "*.fastq{,.gz}" + ontologies: [] output: - - lint: - - meta: + lint: + - - meta: type: file description: Lint output pattern: "*.fq_lint.txt" + ontologies: [] - "*.fq_lint.txt": type: file description: Lint output pattern: "*.fq_lint.txt" - - versions: - - versions.yml: - type: file - description: File containing software versions - pattern: "versions.yml" + ontologies: [] + versions_fq: + - - ${task.process}: + type: string + description: The name of the process + - fq: + type: string + description: The name of the tool + - "fq lint --version | sed 's/fq-lint //; s/ .*//'": + type: eval + description: The expression to obtain the version of the tool + +topics: + versions: + - - ${task.process}: + type: string + description: The name of the process + - fq: + type: string + description: The name of the tool + - "fq lint --version | sed 's/fq-lint //; s/ .*//'": + type: eval + description: The expression to obtain the version of the tool + authors: - "@adamrtalbot" maintainers: diff --git a/modules/nf-core/fq/lint/tests/main.nf.test b/modules/nf-core/fq/lint/tests/main.nf.test index 0cef42cd6..cafbebe3b 100644 --- a/modules/nf-core/fq/lint/tests/main.nf.test +++ b/modules/nf-core/fq/lint/tests/main.nf.test @@ -4,6 +4,10 @@ nextflow_process { script "../main.nf" process "FQ_LINT" + tag "modules" + tag "modules_nfcore" + tag "fq" + tag "fq/lint" test("test_fq_lint_success") { when { @@ -50,7 +54,10 @@ nextflow_process { then { assertAll ( { assert !process.success }, - { assert snapshot(process.out).match() }, + { assert snapshot( + process.out.lint, + process.out.findAll { key, val -> key.startsWith('versions') } + ).match() }, ) } diff --git a/modules/nf-core/fq/lint/tests/main.nf.test.snap b/modules/nf-core/fq/lint/tests/main.nf.test.snap index fec8e5243..a73aa791e 100644 --- a/modules/nf-core/fq/lint/tests/main.nf.test.snap +++ b/modules/nf-core/fq/lint/tests/main.nf.test.snap @@ -1,25 +1,19 @@ { "test_fq_lint_fail": { "content": [ + [ + + ], { - "0": [ - - ], - "1": [ - - ], - "lint": [ - - ], - "versions": [ + "versions_fq": [ ] } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2024-10-19T16:37:02.133847389" + "timestamp": "2026-02-02T17:01:53.025036" } } \ No newline at end of file diff --git a/modules/nf-core/fq/subsample/main.nf b/modules/nf-core/fq/subsample/main.nf index d66f0cd1a..6c011e6bd 100644 --- a/modules/nf-core/fq/subsample/main.nf +++ b/modules/nf-core/fq/subsample/main.nf @@ -12,7 +12,7 @@ process FQ_SUBSAMPLE { output: tuple val(meta), path("*.fastq.gz"), emit: fastq - path "versions.yml" , emit: versions + tuple val("${task.process}"), val('fq'), eval("fq subsample --version | sed 's/fq-subsample //; s/ .*//'"), emit: versions_fq, topic: versions when: task.ext.when == null || task.ext.when @@ -46,11 +46,6 @@ process FQ_SUBSAMPLE { $fastq \\ $fastq1_output \\ $fastq2_output - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - fq: \$(echo \$(fq subsample --version | sed 's/fq-subsample //g')) - END_VERSIONS """ stub: @@ -58,10 +53,5 @@ process FQ_SUBSAMPLE { """ echo '' | gzip > ${prefix}_R1.fastq.gz echo '' | gzip > ${prefix}_R2.fastq.gz - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - fq: \$(echo \$(fq subsample --version | sed 's/fq-subsample //g')) - END_VERSIONS """ } diff --git a/modules/nf-core/fq/subsample/meta.yml b/modules/nf-core/fq/subsample/meta.yml index 7d91b0d9a..4e4023086 100644 --- a/modules/nf-core/fq/subsample/meta.yml +++ b/modules/nf-core/fq/subsample/meta.yml @@ -23,9 +23,11 @@ input: type: file description: FASTQ file pattern: "*.{fq,fastq}{,.gz}" + ontologies: + - edam: http://edamontology.org/format_1930 # FASTQ output: - - fastq: - - meta: + fastq: + - - meta: type: map description: | Groovy Map containing sample information @@ -34,11 +36,31 @@ output: type: file description: Randomly sampled FASTQ files. pattern: "*_R[12].fastq.gz" - - versions: - - versions.yml: - type: file - description: File containing software versions - pattern: "versions.yml" + ontologies: + - edam: http://edamontology.org/format_3989 # GZIP format + versions_fq: + - - ${task.process}: + type: string + description: The name of the process + - fq: + type: string + description: The name of the tool + - "fq subsample --version | sed 's/fq-subsample //; s/ .*//'": + type: eval + description: The expression to obtain the version of the tool + +topics: + versions: + - - ${task.process}: + type: string + description: The name of the process + - fq: + type: string + description: The name of the tool + - "fq subsample --version | sed 's/fq-subsample //; s/ .*//'": + type: eval + description: The expression to obtain the version of the tool + authors: - "@adamrtalbot" maintainers: diff --git a/modules/nf-core/fq/subsample/tests/main.nf.test b/modules/nf-core/fq/subsample/tests/main.nf.test index a7880501b..1833304f8 100644 --- a/modules/nf-core/fq/subsample/tests/main.nf.test +++ b/modules/nf-core/fq/subsample/tests/main.nf.test @@ -4,6 +4,10 @@ nextflow_process { script "../main.nf" process "FQ_SUBSAMPLE" + tag "modules" + tag "modules_nfcore" + tag "fq" + tag "fq/subsample" test("test_fq_subsample_no_args") { config "./nextflow_no_args.config" @@ -204,4 +208,4 @@ nextflow_process { ) } } -} \ No newline at end of file +} diff --git a/modules/nf-core/fq/subsample/tests/main.nf.test.snap b/modules/nf-core/fq/subsample/tests/main.nf.test.snap index cf0b0f254..17a37d3e4 100644 --- a/modules/nf-core/fq/subsample/tests/main.nf.test.snap +++ b/modules/nf-core/fq/subsample/tests/main.nf.test.snap @@ -15,7 +15,11 @@ ] ], "1": [ - "versions.yml:md5,cd1dcdb5fdaf7a8318f83f7f7f9082a1" + [ + "FQ_SUBSAMPLE", + "fq", + "0.12.0" + ] ], "fastq": [ [ @@ -29,16 +33,20 @@ ] ] ], - "versions": [ - "versions.yml:md5,cd1dcdb5fdaf7a8318f83f7f7f9082a1" + "versions_fq": [ + [ + "FQ_SUBSAMPLE", + "fq", + "0.12.0" + ] ] } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2024-10-19T16:33:49.881713827" + "timestamp": "2026-02-03T09:12:25.241092" }, "test_fq_subsample_probability": { "content": [ @@ -56,7 +64,11 @@ ] ], "1": [ - "versions.yml:md5,cd1dcdb5fdaf7a8318f83f7f7f9082a1" + [ + "FQ_SUBSAMPLE", + "fq", + "0.12.0" + ] ], "fastq": [ [ @@ -70,16 +82,20 @@ ] ] ], - "versions": [ - "versions.yml:md5,cd1dcdb5fdaf7a8318f83f7f7f9082a1" + "versions_fq": [ + [ + "FQ_SUBSAMPLE", + "fq", + "0.12.0" + ] ] } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2024-10-19T16:33:38.284916869" + "timestamp": "2026-02-03T09:12:19.1217" }, "test_fq_subsample_single - stub": { "content": [ @@ -97,7 +113,11 @@ ] ], "1": [ - "versions.yml:md5,cd1dcdb5fdaf7a8318f83f7f7f9082a1" + [ + "FQ_SUBSAMPLE", + "fq", + "0.12.0" + ] ], "fastq": [ [ @@ -111,16 +131,20 @@ ] ] ], - "versions": [ - "versions.yml:md5,cd1dcdb5fdaf7a8318f83f7f7f9082a1" + "versions_fq": [ + [ + "FQ_SUBSAMPLE", + "fq", + "0.12.0" + ] ] } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2024-10-19T16:34:47.477222088" + "timestamp": "2026-02-03T09:12:50.814985" }, "test_fq_subsample_record_count": { "content": [ @@ -138,7 +162,11 @@ ] ], "1": [ - "versions.yml:md5,cd1dcdb5fdaf7a8318f83f7f7f9082a1" + [ + "FQ_SUBSAMPLE", + "fq", + "0.12.0" + ] ], "fastq": [ [ @@ -152,16 +180,20 @@ ] ] ], - "versions": [ - "versions.yml:md5,cd1dcdb5fdaf7a8318f83f7f7f9082a1" + "versions_fq": [ + [ + "FQ_SUBSAMPLE", + "fq", + "0.12.0" + ] ] } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2024-10-19T16:34:02.461958921" + "timestamp": "2026-02-03T09:12:31.370661" }, "test_fq_subsample_single": { "content": [ @@ -176,7 +208,11 @@ ] ], "1": [ - "versions.yml:md5,cd1dcdb5fdaf7a8318f83f7f7f9082a1" + [ + "FQ_SUBSAMPLE", + "fq", + "0.12.0" + ] ], "fastq": [ [ @@ -187,16 +223,20 @@ "test.fastq.gz:md5,19326ff922a16c0cb81191f2a0a5c5fc" ] ], - "versions": [ - "versions.yml:md5,cd1dcdb5fdaf7a8318f83f7f7f9082a1" + "versions_fq": [ + [ + "FQ_SUBSAMPLE", + "fq", + "0.12.0" + ] ] } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2024-10-19T16:34:27.295010129" + "timestamp": "2026-02-03T09:12:43.669334" }, "test_fq_subsample_no_args": { "content": [ @@ -210,16 +250,16 @@ "fastq": [ ], - "versions": [ + "versions_fq": [ ] } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2024-10-19T16:33:26.427718685" + "timestamp": "2026-02-03T09:12:12.836944" }, "test_fq_subsample_no_input": { "content": [ @@ -233,16 +273,16 @@ "fastq": [ ], - "versions": [ + "versions_fq": [ ] } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2024-10-19T16:35:00.624040224" + "timestamp": "2026-02-03T09:12:55.07987" }, "test_fq_subsample_record_count - stub": { "content": [ @@ -260,7 +300,11 @@ ] ], "1": [ - "versions.yml:md5,cd1dcdb5fdaf7a8318f83f7f7f9082a1" + [ + "FQ_SUBSAMPLE", + "fq", + "0.12.0" + ] ], "fastq": [ [ @@ -274,15 +318,19 @@ ] ] ], - "versions": [ - "versions.yml:md5,cd1dcdb5fdaf7a8318f83f7f7f9082a1" + "versions_fq": [ + [ + "FQ_SUBSAMPLE", + "fq", + "0.12.0" + ] ] } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2024-10-19T16:34:14.613246906" + "timestamp": "2026-02-03T09:12:37.362897" } } \ No newline at end of file diff --git a/modules/nf-core/gffread/main.nf b/modules/nf-core/gffread/main.nf index da55cbab7..198afa8d6 100644 --- a/modules/nf-core/gffread/main.nf +++ b/modules/nf-core/gffread/main.nf @@ -15,7 +15,7 @@ process GFFREAD { 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 + tuple val("${task.process}"), val('gffread'), eval('gffread --version 2>&1'), topic: versions, emit: versions_gffread when: task.ext.when == null || task.ext.when @@ -23,11 +23,11 @@ process GFFREAD { 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 extension = args.contains("-T") ? 'gtf' : ( ( ['-w', '-x', '-y' ].any { flag -> args.contains(flag) } ) ? '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() + 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!" """ @@ -36,25 +36,15 @@ process GFFREAD { $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 extension = args.contains("-T") ? 'gtf' : ( ( ['-w', '-x', '-y' ].any { flag -> args.contains(flag) } ) ? '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 index bebe7f575..abdae64d2 100644 --- a/modules/nf-core/gffread/meta.yml +++ b/modules/nf-core/gffread/meta.yml @@ -25,35 +25,39 @@ input: 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}" + ontologies: [] + - fasta: + type: file + description: A multi-fasta file with the genomic sequences + pattern: "*.{fasta,fa,faa,fas,fsa}" + ontologies: [] output: - - gtf: - - meta: + gtf: + - - 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 + description: GTF file resulting from the conversion of the GFF input file + if '-T' argument is present pattern: "*.{gtf}" - - gffread_gff: - - meta: + ontologies: [] + gffread_gff: + - - meta: type: map description: | Groovy Map containing meta data e.g. [ id:'test' ] - "*.gff3": type: file - description: GFF3 file resulting from the conversion of the GFF input file if - '-T' argument is absent + description: GFF3 file resulting from the conversion of the GFF input file + if '-T' argument is absent pattern: "*.gff3" - - gffread_fasta: - - meta: + ontologies: [] + gffread_fasta: + - - meta: type: map description: | Groovy Map containing meta data @@ -63,11 +67,30 @@ output: description: Fasta file produced when either of '-w', '-x', '-y' parameters is present pattern: "*.fasta" - - versions: - - versions.yml: - type: file - description: File containing software versions - pattern: "versions.yml" + ontologies: [] + versions_gffread: + - - ${task.process}: + type: string + description: The process the versions were collected from + - gffread: + type: string + description: The tool name + - gffread --version 2>&1: + type: eval + description: The expression to obtain the version of the tool + +topics: + versions: + - - ${task.process}: + type: string + description: The process the versions were collected from + - gffread: + type: string + description: The tool name + - gffread --version 2>&1: + type: eval + description: The expression to obtain the version of the tool + authors: - "@edmundmiller" maintainers: diff --git a/modules/nf-core/gffread/tests/main.nf.test b/modules/nf-core/gffread/tests/main.nf.test index b26cba587..eed210f47 100644 --- a/modules/nf-core/gffread/tests/main.nf.test +++ b/modules/nf-core/gffread/tests/main.nf.test @@ -4,6 +4,9 @@ nextflow_process { script "../main.nf" process "GFFREAD" + tag "gffread" + tag "modules_nfcore" + tag "modules" test("sarscov2-gff3-gtf") { @@ -218,4 +221,4 @@ nextflow_process { } -} \ No newline at end of file +} diff --git a/modules/nf-core/gffread/tests/main.nf.test.snap b/modules/nf-core/gffread/tests/main.nf.test.snap index 15262320d..cfdbe9ffc 100644 --- a/modules/nf-core/gffread/tests/main.nf.test.snap +++ b/modules/nf-core/gffread/tests/main.nf.test.snap @@ -17,7 +17,11 @@ ], "3": [ - "versions.yml:md5,05f671c6c6e530acedad0af0a5948dbd" + [ + "GFFREAD", + "gffread", + "0.12.7" + ] ], "gffread_fasta": [ @@ -33,16 +37,20 @@ "test.gtf:md5,1ea0ae98d3388e0576407dc4a24ef428" ] ], - "versions": [ - "versions.yml:md5,05f671c6c6e530acedad0af0a5948dbd" + "versions_gffread": [ + [ + "GFFREAD", + "gffread", + "0.12.7" + ] ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2024-04-09T10:48:56.496187" + "timestamp": "2026-01-19T14:04:00.517880519" }, "sarscov2-gff3-gff3": { "content": [ @@ -62,7 +70,11 @@ ], "3": [ - "versions.yml:md5,05f671c6c6e530acedad0af0a5948dbd" + [ + "GFFREAD", + "gffread", + "0.12.7" + ] ], "gffread_fasta": [ @@ -78,16 +90,20 @@ "gtf": [ ], - "versions": [ - "versions.yml:md5,05f671c6c6e530acedad0af0a5948dbd" + "versions_gffread": [ + [ + "GFFREAD", + "gffread", + "0.12.7" + ] ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2024-04-09T10:49:00.892782" + "timestamp": "2026-01-19T14:04:11.054206957" }, "sarscov2-gff3-gtf-stub": { "content": [ @@ -107,7 +123,11 @@ ], "3": [ - "versions.yml:md5,05f671c6c6e530acedad0af0a5948dbd" + [ + "GFFREAD", + "gffread", + "0.12.7" + ] ], "gffread_fasta": [ @@ -123,16 +143,20 @@ "test.gtf:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "versions": [ - "versions.yml:md5,05f671c6c6e530acedad0af0a5948dbd" + "versions_gffread": [ + [ + "GFFREAD", + "gffread", + "0.12.7" + ] ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2024-04-09T11:11:26.975666" + "timestamp": "2026-01-19T14:04:05.79250369" }, "sarscov2-gff3-fasta-stub": { "content": [ @@ -152,7 +176,11 @@ ] ], "3": [ - "versions.yml:md5,05f671c6c6e530acedad0af0a5948dbd" + [ + "GFFREAD", + "gffread", + "0.12.7" + ] ], "gffread_fasta": [ [ @@ -168,16 +196,20 @@ "gtf": [ ], - "versions": [ - "versions.yml:md5,05f671c6c6e530acedad0af0a5948dbd" + "versions_gffread": [ + [ + "GFFREAD", + "gffread", + "0.12.7" + ] ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2024-04-09T11:11:44.34792" + "timestamp": "2026-01-19T14:04:26.781173161" }, "sarscov2-gff3-gff3-stub": { "content": [ @@ -197,7 +229,11 @@ ], "3": [ - "versions.yml:md5,05f671c6c6e530acedad0af0a5948dbd" + [ + "GFFREAD", + "gffread", + "0.12.7" + ] ], "gffread_fasta": [ @@ -213,16 +249,20 @@ "gtf": [ ], - "versions": [ - "versions.yml:md5,05f671c6c6e530acedad0af0a5948dbd" + "versions_gffread": [ + [ + "GFFREAD", + "gffread", + "0.12.7" + ] ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2024-04-09T11:11:35.221671" + "timestamp": "2026-01-19T14:04:16.265299123" }, "sarscov2-gff3-fasta": { "content": [ @@ -242,7 +282,11 @@ ] ], "3": [ - "versions.yml:md5,05f671c6c6e530acedad0af0a5948dbd" + [ + "GFFREAD", + "gffread", + "0.12.7" + ] ], "gffread_fasta": [ [ @@ -258,15 +302,19 @@ "gtf": [ ], - "versions": [ - "versions.yml:md5,05f671c6c6e530acedad0af0a5948dbd" + "versions_gffread": [ + [ + "GFFREAD", + "gffread", + "0.12.7" + ] ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2024-04-09T10:54:02.88143" + "timestamp": "2026-01-19T14:04:21.551846584" } } \ No newline at end of file diff --git a/modules/nf-core/gunzip/main.nf b/modules/nf-core/gunzip/main.nf index 3ffc8e926..a8533e74b 100644 --- a/modules/nf-core/gunzip/main.nf +++ b/modules/nf-core/gunzip/main.nf @@ -12,7 +12,7 @@ process GUNZIP { output: tuple val(meta), path("${gunzip}"), emit: gunzip - path "versions.yml", emit: versions + tuple val("${task.process}"), val('gunzip'), eval('gunzip --version 2>&1 | head -1 | sed "s/^.*(gzip) //; s/ Copyright.*//"'), topic: versions, emit: versions_gunzip when: task.ext.when == null || task.ext.when @@ -32,24 +32,14 @@ process GUNZIP { ${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 index 69d310245..bba6b3ba7 100644 --- a/modules/nf-core/gunzip/meta.yml +++ b/modules/nf-core/gunzip/meta.yml @@ -21,21 +21,42 @@ input: type: file description: File to be compressed/uncompressed pattern: "*.*" + ontologies: [] output: - - gunzip: - - meta: + gunzip: + - - meta: type: file description: Compressed/uncompressed file pattern: "*.*" + ontologies: [] - ${gunzip}: type: file description: Compressed/uncompressed file pattern: "*.*" - - versions: - - versions.yml: - type: file - description: File containing software versions - pattern: "versions.yml" + ontologies: [] + versions_gunzip: + - - ${task.process}: + type: string + description: The process the versions were collected from + - gunzip: + type: string + description: The tool name + - gunzip --version 2>&1 | head -1 | sed "s/^.*(gzip) //; s/ Copyright.*//": + type: eval + description: The expression to obtain the version of the tool + +topics: + versions: + - - ${task.process}: + type: string + description: The process the versions were collected from + - gunzip: + type: string + description: The tool name + - gunzip --version 2>&1 | head -1 | sed "s/^.*(gzip) //; s/ Copyright.*//": + type: eval + description: The expression to obtain the version of the tool + authors: - "@joseespinosa" - "@drpatelh" diff --git a/modules/nf-core/gunzip/tests/main.nf.test b/modules/nf-core/gunzip/tests/main.nf.test index 384edf226..776211adf 100644 --- a/modules/nf-core/gunzip/tests/main.nf.test +++ b/modules/nf-core/gunzip/tests/main.nf.test @@ -3,6 +3,9 @@ nextflow_process { name "Test Process GUNZIP" script "../main.nf" process "GUNZIP" + tag "gunzip" + tag "modules_nfcore" + tag "modules" test("Should run without failures") { diff --git a/modules/nf-core/gunzip/tests/main.nf.test.snap b/modules/nf-core/gunzip/tests/main.nf.test.snap index a0f0e67ed..111ba1bce 100644 --- a/modules/nf-core/gunzip/tests/main.nf.test.snap +++ b/modules/nf-core/gunzip/tests/main.nf.test.snap @@ -11,7 +11,11 @@ ] ], "1": [ - "versions.yml:md5,d327e4a19a6d5c5e974136cef8999d8c" + [ + "GUNZIP", + "gunzip", + "1.13" + ] ], "gunzip": [ [ @@ -21,16 +25,20 @@ "test.xyz.fastq:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "versions": [ - "versions.yml:md5,d327e4a19a6d5c5e974136cef8999d8c" + "versions_gunzip": [ + [ + "GUNZIP", + "gunzip", + "1.13" + ] ] } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.2" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2024-12-13T11:48:22.080222697" + "timestamp": "2026-01-19T17:21:56.633550769" }, "Should run without failures - stub": { "content": [ @@ -44,7 +52,11 @@ ] ], "1": [ - "versions.yml:md5,d327e4a19a6d5c5e974136cef8999d8c" + [ + "GUNZIP", + "gunzip", + "1.13" + ] ], "gunzip": [ [ @@ -54,16 +66,20 @@ "test_1.fastq:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "versions": [ - "versions.yml:md5,d327e4a19a6d5c5e974136cef8999d8c" + "versions_gunzip": [ + [ + "GUNZIP", + "gunzip", + "1.13" + ] ] } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.2" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2024-12-13T11:48:14.593020264" + "timestamp": "2026-01-19T17:21:51.435621199" }, "Should run without failures": { "content": [ @@ -77,7 +93,11 @@ ] ], "1": [ - "versions.yml:md5,d327e4a19a6d5c5e974136cef8999d8c" + [ + "GUNZIP", + "gunzip", + "1.13" + ] ], "gunzip": [ [ @@ -87,16 +107,20 @@ "test_1.fastq:md5,4161df271f9bfcd25d5845a1e220dbec" ] ], - "versions": [ - "versions.yml:md5,d327e4a19a6d5c5e974136cef8999d8c" + "versions_gunzip": [ + [ + "GUNZIP", + "gunzip", + "1.13" + ] ] } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.2" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2024-12-13T11:48:01.295397925" + "timestamp": "2026-01-19T17:21:40.613975821" }, "Should run without failures - prefix": { "content": [ @@ -110,7 +134,11 @@ ] ], "1": [ - "versions.yml:md5,d327e4a19a6d5c5e974136cef8999d8c" + [ + "GUNZIP", + "gunzip", + "1.13" + ] ], "gunzip": [ [ @@ -120,15 +148,19 @@ "test.xyz.fastq:md5,4161df271f9bfcd25d5845a1e220dbec" ] ], - "versions": [ - "versions.yml:md5,d327e4a19a6d5c5e974136cef8999d8c" + "versions_gunzip": [ + [ + "GUNZIP", + "gunzip", + "1.13" + ] ] } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.2" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2024-12-13T11:48:07.414271387" + "timestamp": "2026-01-19T17:21:46.086880414" } } \ No newline at end of file diff --git a/modules/nf-core/hisat2/align/hisat2-align.diff b/modules/nf-core/hisat2/align/hisat2-align.diff deleted file mode 100644 index 946fa9615..000000000 --- a/modules/nf-core/hisat2/align/hisat2-align.diff +++ /dev/null @@ -1,53 +0,0 @@ -Changes in component 'nf-core/hisat2/align' -'modules/nf-core/hisat2/align/environment.yml' is unchanged -'modules/nf-core/hisat2/align/meta.yml' is unchanged -Changes in 'hisat2/align/main.nf': ---- modules/nf-core/hisat2/align/main.nf -+++ modules/nf-core/hisat2/align/main.nf -@@ -34,7 +34,7 @@ - ss = "$splicesites" ? "--known-splicesite-infile $splicesites" : '' - def seq_center = params.seq_center ? "--rg-id ${prefix} --rg SM:$prefix --rg CN:${params.seq_center.replaceAll('\\s','_')}" : "--rg-id ${prefix} --rg SM:$prefix" - if (meta.single_end) { -- def unaligned = params.save_unaligned ? "--un-gz ${prefix}.unmapped.fastq.gz" : '' -+ def unaligned = params.save_unaligned || params.contaminant_screening ? "--un-gz ${prefix}.unmapped.fastq.gz" : '' - """ - INDEX=`find -L ./ -name "*.1.ht2*" | sed 's/\\.1.ht2.*\$//'` - hisat2 \\ -@@ -56,7 +56,7 @@ - END_VERSIONS - """ - } else { -- def unaligned = params.save_unaligned ? "--un-conc-gz ${prefix}.unmapped.fastq.gz" : '' -+ def unaligned = params.save_unaligned || params.contaminant_screening ? "--un-conc-gz ${prefix}.unmapped.fastq.gz" : '' - """ - INDEX=`find -L ./ -name "*.1.ht2*" | sed 's/\\.1.ht2.*\$//'` - hisat2 \\ -@@ -91,7 +91,7 @@ - - stub: - def prefix = task.ext.prefix ?: "${meta.id}" -- def unaligned = params.save_unaligned ? "echo '' | gzip > ${prefix}.unmapped_1.fastq.gz \n echo '' | gzip > ${prefix}.unmapped_2.fastq.gz" : '' -+ def unaligned = params.save_unaligned || params.contaminant_screening ? "echo '' | gzip > ${prefix}.unmapped_1.fastq.gz \n echo '' | gzip > ${prefix}.unmapped_2.fastq.gz" : '' - """ - ${unaligned} - - -'modules/nf-core/hisat2/align/tests/main.nf.test.snap' is unchanged -Changes in 'hisat2/align/tests/main.nf.test': ---- modules/nf-core/hisat2/align/tests/main.nf.test -+++ modules/nf-core/hisat2/align/tests/main.nf.test -@@ -3,12 +3,6 @@ - name "Test Process HISAT2_ALIGN" - script "../main.nf" - process "HISAT2_ALIGN" -- tag "modules" -- tag "modules_nfcore" -- tag "hisat2" -- tag "hisat2/align" -- tag "hisat2/build" -- tag "hisat2/extractsplicesites" - - test("Single-End") { - - -************************************************************ diff --git a/modules/nf-core/hisat2/align/main.nf b/modules/nf-core/hisat2/align/main.nf index d2166579a..77405bae0 100644 --- a/modules/nf-core/hisat2/align/main.nf +++ b/modules/nf-core/hisat2/align/main.nf @@ -11,12 +11,14 @@ process HISAT2_ALIGN { tuple val(meta), path(reads) tuple val(meta2), path(index) tuple val(meta3), path(splicesites) + val save_unaligned output: tuple val(meta), path("*.bam") , emit: bam tuple val(meta), path("*.log") , emit: summary tuple val(meta), path("*fastq.gz"), optional:true, emit: fastq - path "versions.yml" , emit: versions + tuple val("${task.process}"), val('hisat2'), eval("hisat2 --version | sed -n '1s/.*version //p'"), emit: versions_hisat2, topic: versions + tuple val("${task.process}"), val('samtools'), eval("samtools --version | sed -n '1s/samtools //p'"), emit: versions_samtools, topic: versions when: task.ext.when == null || task.ext.when @@ -32,9 +34,9 @@ process HISAT2_ALIGN { strandedness = meta.single_end ? '--rna-strandness R' : '--rna-strandness RF' } ss = "$splicesites" ? "--known-splicesite-infile $splicesites" : '' - def seq_center = params.seq_center ? "--rg-id ${prefix} --rg SM:$prefix --rg CN:${params.seq_center.replaceAll('\\s','_')}" : "--rg-id ${prefix} --rg SM:$prefix" + def rg = args.contains("--rg-id") ? "" : "--rg-id ${prefix} --rg SM:${prefix}" if (meta.single_end) { - def unaligned = params.save_unaligned || params.contaminant_screening ? "--un-gz ${prefix}.unmapped.fastq.gz" : '' + def unaligned = save_unaligned ? "--un-gz ${prefix}.unmapped.fastq.gz" : '' """ INDEX=`find -L ./ -name "*.1.ht2*" | sed 's/\\.1.ht2.*\$//'` hisat2 \\ @@ -44,19 +46,13 @@ process HISAT2_ALIGN { $ss \\ --summary-file ${prefix}.hisat2.summary.log \\ --threads $task.cpus \\ - $seq_center \\ + $rg \\ $unaligned \\ $args \\ | samtools view -bS -F 4 -F 256 - > ${prefix}.bam - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - hisat2: \$(hisat2 --version | grep -o 'version [^ ]*' | cut -d ' ' -f 2) - samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') - END_VERSIONS """ } else { - def unaligned = params.save_unaligned || params.contaminant_screening ? "--un-conc-gz ${prefix}.unmapped.fastq.gz" : '' + def unaligned = save_unaligned ? "--un-conc-gz ${prefix}.unmapped.fastq.gz" : '' """ INDEX=`find -L ./ -name "*.1.ht2*" | sed 's/\\.1.ht2.*\$//'` hisat2 \\ @@ -67,7 +63,7 @@ process HISAT2_ALIGN { $ss \\ --summary-file ${prefix}.hisat2.summary.log \\ --threads $task.cpus \\ - $seq_center \\ + $rg \\ $unaligned \\ --no-mixed \\ --no-discordant \\ @@ -80,29 +76,17 @@ process HISAT2_ALIGN { if [ -f ${prefix}.unmapped.fastq.2.gz ]; then mv ${prefix}.unmapped.fastq.2.gz ${prefix}.unmapped_2.fastq.gz fi - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - hisat2: \$(hisat2 --version | grep -o 'version [^ ]*' | cut -d ' ' -f 2) - samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') - END_VERSIONS """ } stub: def prefix = task.ext.prefix ?: "${meta.id}" - def unaligned = params.save_unaligned || params.contaminant_screening ? "echo '' | gzip > ${prefix}.unmapped_1.fastq.gz \n echo '' | gzip > ${prefix}.unmapped_2.fastq.gz" : '' + def unaligned = save_unaligned ? "echo '' | gzip > ${prefix}.unmapped_1.fastq.gz \n echo '' | gzip > ${prefix}.unmapped_2.fastq.gz" : '' """ ${unaligned} touch ${prefix}.hisat2.summary.log touch ${prefix}.bam - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - hisat2: \$(hisat2 --version | grep -o 'version [^ ]*' | cut -d ' ' -f 2) - samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') - END_VERSIONS """ diff --git a/modules/nf-core/hisat2/align/meta.yml b/modules/nf-core/hisat2/align/meta.yml index 8a466b646..dc627ede0 100644 --- a/modules/nf-core/hisat2/align/meta.yml +++ b/modules/nf-core/hisat2/align/meta.yml @@ -47,6 +47,9 @@ input: description: Splices sites in gtf file pattern: "*.{txt}" ontologies: [] + - save_unaligned: + type: boolean + description: Save unaligned reads to FastQ files output: bam: - - meta: @@ -82,13 +85,48 @@ output: pattern: "*fastq.gz" ontologies: - edam: http://edamontology.org/format_3989 # GZIP format + versions_hisat2: + - - ${task.process}: + type: string + description: The name of the process + - hisat2: + type: string + description: The name of the tool + - "hisat2 --version | sed -n '1s/.*version //p'": + type: eval + description: The expression to obtain the version of the tool + versions_samtools: + - - ${task.process}: + type: string + description: The name of the process + - samtools: + type: string + description: The name of the tool + - "samtools --version | sed -n '1s/samtools //p'": + type: eval + description: The expression to obtain the version of the tool + +topics: versions: - - versions.yml: - type: file - description: File containing software versions - pattern: "versions.yml" - ontologies: - - edam: http://edamontology.org/format_3750 # YAML + - - ${task.process}: + type: string + description: The name of the process + - hisat2: + type: string + description: The name of the tool + - "hisat2 --version | sed -n '1s/.*version //p'": + type: eval + description: The expression to obtain the version of the tool + - - ${task.process}: + type: string + description: The name of the process + - samtools: + type: string + description: The name of the tool + - "samtools --version | sed -n '1s/samtools //p'": + type: eval + description: The expression to obtain the version of the tool + authors: - "@ntoda03" - "@ramprasadn" diff --git a/modules/nf-core/hisat2/align/tests/main.nf.test b/modules/nf-core/hisat2/align/tests/main.nf.test index 8193c82d8..f7650bff8 100644 --- a/modules/nf-core/hisat2/align/tests/main.nf.test +++ b/modules/nf-core/hisat2/align/tests/main.nf.test @@ -3,6 +3,12 @@ nextflow_process { name "Test Process HISAT2_ALIGN" script "../main.nf" process "HISAT2_ALIGN" + tag "modules" + tag "modules_nfcore" + tag "hisat2" + tag "hisat2/align" + tag "hisat2/build" + tag "hisat2/extractsplicesites" test("Single-End") { @@ -48,6 +54,7 @@ nextflow_process { ]) input[1] = HISAT2_BUILD.out.index input[2] = HISAT2_EXTRACTSPLICESITES.out.txt + input[3] = false """ } } @@ -57,7 +64,7 @@ nextflow_process { { assert process.success }, { assert snapshot(process.out.summary).match("se_summary") }, { assert snapshot(process.out.fastq).match("se_fastq") }, - { assert snapshot(process.out.versions).match("se_versions") } + { assert snapshot(process.out.findAll { key, val -> key.startsWith('versions') }).match("se_versions") } ) } } @@ -107,6 +114,7 @@ nextflow_process { ]) input[1] = HISAT2_BUILD.out.index input[2] = HISAT2_EXTRACTSPLICESITES.out.txt + input[3] = false """ } } @@ -164,6 +172,7 @@ nextflow_process { ]) input[1] = HISAT2_BUILD.out.index input[2] = HISAT2_EXTRACTSPLICESITES.out.txt + input[3] = false """ } } @@ -173,7 +182,7 @@ nextflow_process { { assert process.success }, { assert snapshot(process.out.summary).match("pe_summary") }, { assert snapshot(process.out.fastq).match("pe_fastq") }, - { assert snapshot(process.out.versions).match("pe_versions") } + { assert snapshot(process.out.findAll { key, val -> key.startsWith('versions') }).match("pe_versions") } ) } } @@ -224,6 +233,7 @@ nextflow_process { ]) input[1] = HISAT2_BUILD.out.index input[2] = HISAT2_EXTRACTSPLICESITES.out.txt + input[3] = false """ } } @@ -266,6 +276,7 @@ nextflow_process { ]) input[1] = HISAT2_BUILD.out.index input[2] = [[:],[]] + input[3] = false """ } } @@ -275,7 +286,7 @@ nextflow_process { { assert process.success }, { assert snapshot(process.out.summary).match("se_no_ss_summary") }, { assert snapshot(process.out.fastq).match("se_no_ss_fastq") }, - { assert snapshot(process.out.versions).match("se_no_ss_versions") } + { assert snapshot(process.out.findAll { key, val -> key.startsWith('versions') }).match("se_no_ss_versions") } ) } } @@ -311,6 +322,7 @@ nextflow_process { ]) input[1] = HISAT2_BUILD.out.index input[2] = [[:],[]] + input[3] = false """ } } @@ -354,6 +366,7 @@ nextflow_process { ]) input[1] = HISAT2_BUILD.out.index input[2] = [[:],[]] + input[3] = false """ } } @@ -363,7 +376,7 @@ nextflow_process { { assert process.success }, { assert snapshot(process.out.summary).match("pe_no_ss_summary") }, { assert snapshot(process.out.fastq).match("pe_no_ss_fastq") }, - { assert snapshot(process.out.versions).match("pe_no_ss_versions") } + { assert snapshot(process.out.findAll { key, val -> key.startsWith('versions') }).match("pe_no_ss_versions") } ) } } @@ -400,6 +413,7 @@ nextflow_process { ]) input[1] = HISAT2_BUILD.out.index input[2] = [[:],[]] + input[3] = false """ } } diff --git a/modules/nf-core/hisat2/align/tests/main.nf.test.snap b/modules/nf-core/hisat2/align/tests/main.nf.test.snap index 534e23394..4dc8cdf46 100644 --- a/modules/nf-core/hisat2/align/tests/main.nf.test.snap +++ b/modules/nf-core/hisat2/align/tests/main.nf.test.snap @@ -1,15 +1,28 @@ { "se_versions": { "content": [ - [ - "versions.yml:md5,1a38a5d8b9ea523ccfa7c9f9802fa7ec" - ] + { + "versions_hisat2": [ + [ + "HISAT2_ALIGN", + "hisat2", + "2.2.1" + ] + ], + "versions_samtools": [ + [ + "HISAT2_ALIGN", + "samtools", + "1.20" + ] + ] + } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.2" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-06-02T13:34:25.408496" + "timestamp": "2026-02-02T23:39:56.867139" }, "Paired-End - stub": { "content": [ @@ -36,7 +49,18 @@ ], "3": [ - "versions.yml:md5,1a38a5d8b9ea523ccfa7c9f9802fa7ec" + [ + "HISAT2_ALIGN", + "hisat2", + "2.2.1" + ] + ], + "4": [ + [ + "HISAT2_ALIGN", + "samtools", + "1.20" + ] ], "bam": [ [ @@ -59,16 +83,27 @@ "test.hisat2.summary.log:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "versions": [ - "versions.yml:md5,1a38a5d8b9ea523ccfa7c9f9802fa7ec" + "versions_hisat2": [ + [ + "HISAT2_ALIGN", + "hisat2", + "2.2.1" + ] + ], + "versions_samtools": [ + [ + "HISAT2_ALIGN", + "samtools", + "1.20" + ] ] } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.2" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-06-02T13:35:07.399682" + "timestamp": "2026-02-02T23:40:56.902461" }, "Single-End - stub": { "content": [ @@ -95,7 +130,18 @@ ], "3": [ - "versions.yml:md5,1a38a5d8b9ea523ccfa7c9f9802fa7ec" + [ + "HISAT2_ALIGN", + "hisat2", + "2.2.1" + ] + ], + "4": [ + [ + "HISAT2_ALIGN", + "samtools", + "1.20" + ] ], "bam": [ [ @@ -118,28 +164,52 @@ "test.hisat2.summary.log:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "versions": [ - "versions.yml:md5,1a38a5d8b9ea523ccfa7c9f9802fa7ec" + "versions_hisat2": [ + [ + "HISAT2_ALIGN", + "hisat2", + "2.2.1" + ] + ], + "versions_samtools": [ + [ + "HISAT2_ALIGN", + "samtools", + "1.20" + ] ] } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.2" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-06-02T13:34:39.530376" + "timestamp": "2026-02-02T23:40:17.08214" }, "pe_no_ss_versions": { "content": [ - [ - "versions.yml:md5,1a38a5d8b9ea523ccfa7c9f9802fa7ec" - ] + { + "versions_hisat2": [ + [ + "HISAT2_ALIGN", + "hisat2", + "2.2.1" + ] + ], + "versions_samtools": [ + [ + "HISAT2_ALIGN", + "samtools", + "1.20" + ] + ] + } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.2" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-06-02T13:35:42.179425" + "timestamp": "2026-02-02T23:41:41.765628" }, "Paired-End No Splice Sites - stub": { "content": [ @@ -166,7 +236,18 @@ ], "3": [ - "versions.yml:md5,1a38a5d8b9ea523ccfa7c9f9802fa7ec" + [ + "HISAT2_ALIGN", + "hisat2", + "2.2.1" + ] + ], + "4": [ + [ + "HISAT2_ALIGN", + "samtools", + "1.20" + ] ], "bam": [ [ @@ -189,16 +270,27 @@ "test.hisat2.summary.log:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "versions": [ - "versions.yml:md5,1a38a5d8b9ea523ccfa7c9f9802fa7ec" + "versions_hisat2": [ + [ + "HISAT2_ALIGN", + "hisat2", + "2.2.1" + ] + ], + "versions_samtools": [ + [ + "HISAT2_ALIGN", + "samtools", + "1.20" + ] ] } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.2" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-06-02T13:35:54.361279" + "timestamp": "2026-02-02T23:41:53.108448" }, "pe_no_ss_summary": { "content": [ @@ -310,15 +402,28 @@ }, "se_no_ss_versions": { "content": [ - [ - "versions.yml:md5,1a38a5d8b9ea523ccfa7c9f9802fa7ec" - ] + { + "versions_hisat2": [ + [ + "HISAT2_ALIGN", + "hisat2", + "2.2.1" + ] + ], + "versions_samtools": [ + [ + "HISAT2_ALIGN", + "samtools", + "1.20" + ] + ] + } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.2" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-06-02T13:35:18.850585" + "timestamp": "2026-02-02T23:41:17.495998" }, "se_no_ss_fastq": { "content": [ @@ -357,7 +462,18 @@ ], "3": [ - "versions.yml:md5,1a38a5d8b9ea523ccfa7c9f9802fa7ec" + [ + "HISAT2_ALIGN", + "hisat2", + "2.2.1" + ] + ], + "4": [ + [ + "HISAT2_ALIGN", + "samtools", + "1.20" + ] ], "bam": [ [ @@ -380,27 +496,51 @@ "test.hisat2.summary.log:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "versions": [ - "versions.yml:md5,1a38a5d8b9ea523ccfa7c9f9802fa7ec" + "versions_hisat2": [ + [ + "HISAT2_ALIGN", + "hisat2", + "2.2.1" + ] + ], + "versions_samtools": [ + [ + "HISAT2_ALIGN", + "samtools", + "1.20" + ] ] } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.2" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-06-02T13:35:30.451275" + "timestamp": "2026-02-02T23:41:27.847461" }, "pe_versions": { "content": [ - [ - "versions.yml:md5,1a38a5d8b9ea523ccfa7c9f9802fa7ec" - ] + { + "versions_hisat2": [ + [ + "HISAT2_ALIGN", + "hisat2", + "2.2.1" + ] + ], + "versions_samtools": [ + [ + "HISAT2_ALIGN", + "samtools", + "1.20" + ] + ] + } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.2" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-06-02T13:34:53.518239" + "timestamp": "2026-02-02T23:40:40.784947" } } \ No newline at end of file diff --git a/modules/nf-core/hisat2/build/main.nf b/modules/nf-core/hisat2/build/main.nf index 1d9370107..906d36fe5 100644 --- a/modules/nf-core/hisat2/build/main.nf +++ b/modules/nf-core/hisat2/build/main.nf @@ -15,7 +15,7 @@ process HISAT2_BUILD { output: tuple val(meta), path("hisat2"), emit: index - path "versions.yml", emit: versions + tuple val("${task.process}"), val('hisat2'), eval("hisat2 --version | sed -n 's/.*version \\([^ ]*\\).*/\\1/p'"), emit: versions_hisat2, topic: versions when: task.ext.when == null || task.ext.when @@ -55,20 +55,10 @@ process HISAT2_BUILD { ${args} \\ ${fasta} \\ hisat2/${fasta.baseName} - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - hisat2: \$(hisat2 --version | grep -o 'version [^ ]*' | cut -d ' ' -f 2) - END_VERSIONS """ stub: """ mkdir hisat2 - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - hisat2: \$(hisat2 --version | grep -o 'version [^ ]*' | cut -d ' ' -f 2) - END_VERSIONS """ } diff --git a/modules/nf-core/hisat2/build/meta.yml b/modules/nf-core/hisat2/build/meta.yml index 3272f8e05..805804910 100644 --- a/modules/nf-core/hisat2/build/meta.yml +++ b/modules/nf-core/hisat2/build/meta.yml @@ -26,6 +26,7 @@ input: type: file description: Reference fasta file pattern: "*.{fa,fasta,fna}" + ontologies: [] - - meta2: type: map description: | @@ -35,6 +36,7 @@ input: type: file description: Reference gtf annotation file pattern: "*.{gtf}" + ontologies: [] - - meta3: type: map description: | @@ -44,9 +46,10 @@ input: type: file description: Splices sites in gtf file pattern: "*.{txt}" + ontologies: [] output: - - index: - - meta: + index: + - - meta: type: map description: | Groovy Map containing reference information @@ -55,11 +58,30 @@ output: type: file description: HISAT2 genome index file pattern: "*.ht2" - - versions: - - versions.yml: - type: file - description: File containing software versions - pattern: "versions.yml" + ontologies: [] + versions_hisat2: + - - ${task.process}: + type: string + description: The name of the process + - hisat2: + type: string + description: The name of the tool + - "hisat2 --version | sed -n 's/.*version \\([^ ]*\\).*/\\1/p'": + type: eval + description: The expression to obtain the version of the tool + +topics: + versions: + - - ${task.process}: + type: string + description: The name of the process + - hisat2: + type: string + description: The name of the tool + - "hisat2 --version | sed -n 's/.*version \\([^ ]*\\).*/\\1/p'": + type: eval + description: The expression to obtain the version of the tool + authors: - "@ntoda03" maintainers: diff --git a/modules/nf-core/hisat2/build/tests/main.nf.test b/modules/nf-core/hisat2/build/tests/main.nf.test index bd8e9dae0..9bee5f676 100644 --- a/modules/nf-core/hisat2/build/tests/main.nf.test +++ b/modules/nf-core/hisat2/build/tests/main.nf.test @@ -3,6 +3,11 @@ nextflow_process { name "Test Process HISAT2_BUILD" script "../main.nf" process "HISAT2_BUILD" + tag "modules" + tag "modules_nfcore" + tag "hisat2" + tag "hisat2/build" + tag "hisat2/extractsplicesites" test("Should run without failures") { @@ -41,7 +46,10 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(process.out).match() } + { assert snapshot( + process.out.index.collect { it.collect { it instanceof Map ? it : file(it).name } }, + process.out.findAll { key, val -> key.startsWith('versions') } + ).match() } ) } } @@ -86,8 +94,11 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(process.out).match() } + { assert snapshot( + process.out.index.collect { it.collect { it instanceof Map ? it : file(it).name } }, + process.out.findAll { key, val -> key.startsWith('versions') } + ).match() } ) } } -} \ No newline at end of file +} diff --git a/modules/nf-core/hisat2/build/tests/main.nf.test.snap b/modules/nf-core/hisat2/build/tests/main.nf.test.snap index 68fc7ffba..99b33cb2c 100644 --- a/modules/nf-core/hisat2/build/tests/main.nf.test.snap +++ b/modules/nf-core/hisat2/build/tests/main.nf.test.snap @@ -1,90 +1,54 @@ { "Should run without failures - stub": { "content": [ + [ + [ + { + "id": "genome" + }, + "hisat2" + ] + ], { - "0": [ - [ - { - "id": "genome" - }, - [ - - ] - ] - ], - "1": [ - "versions.yml:md5,e36ef3cd73d19ccf2378c9358fe942c0" - ], - "index": [ + "versions_hisat2": [ [ - { - "id": "genome" - }, - [ - - ] + "HISAT2_BUILD", + "hisat2", + "2.2.1" ] - ], - "versions": [ - "versions.yml:md5,e36ef3cd73d19ccf2378c9358fe942c0" ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" + "nf-test": "0.9.3", + "nextflow": "25.10.3" }, - "timestamp": "2024-06-20T18:18:08.896422" + "timestamp": "2026-02-02T15:53:37.611420605" }, "Should run without failures": { "content": [ + [ + [ + { + "id": "genome" + }, + "hisat2" + ] + ], { - "0": [ - [ - { - "id": "genome" - }, - [ - "genome.1.ht2:md5,057cfa8a22b97ee9cff4c8d342498803", - "genome.2.ht2:md5,47b153cd1319abc88dda532462651fcf", - "genome.3.ht2:md5,4ed93abba181d8dfab2e303e33114777", - "genome.4.ht2:md5,c25be5f8b0378abf7a58c8a880b87626", - "genome.5.ht2:md5,91198831aaba993acac1734138c5f173", - "genome.6.ht2:md5,265e1284ce85686516fae5d35540994a", - "genome.7.ht2:md5,9013eccd91ad614d7893c739275a394f", - "genome.8.ht2:md5,33cdeccccebe80329f1fdbee7f5874cb" - ] - ] - ], - "1": [ - "versions.yml:md5,e36ef3cd73d19ccf2378c9358fe942c0" - ], - "index": [ + "versions_hisat2": [ [ - { - "id": "genome" - }, - [ - "genome.1.ht2:md5,057cfa8a22b97ee9cff4c8d342498803", - "genome.2.ht2:md5,47b153cd1319abc88dda532462651fcf", - "genome.3.ht2:md5,4ed93abba181d8dfab2e303e33114777", - "genome.4.ht2:md5,c25be5f8b0378abf7a58c8a880b87626", - "genome.5.ht2:md5,91198831aaba993acac1734138c5f173", - "genome.6.ht2:md5,265e1284ce85686516fae5d35540994a", - "genome.7.ht2:md5,9013eccd91ad614d7893c739275a394f", - "genome.8.ht2:md5,33cdeccccebe80329f1fdbee7f5874cb" - ] + "HISAT2_BUILD", + "hisat2", + "2.2.1" ] - ], - "versions": [ - "versions.yml:md5,e36ef3cd73d19ccf2378c9358fe942c0" ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" + "nf-test": "0.9.3", + "nextflow": "25.10.3" }, - "timestamp": "2023-10-16T14:42:22.381609786" + "timestamp": "2026-02-02T15:53:31.34596606" } } \ No newline at end of file diff --git a/modules/nf-core/hisat2/extractsplicesites/main.nf b/modules/nf-core/hisat2/extractsplicesites/main.nf index 6fbe33d0f..3d778d8fe 100644 --- a/modules/nf-core/hisat2/extractsplicesites/main.nf +++ b/modules/nf-core/hisat2/extractsplicesites/main.nf @@ -12,7 +12,7 @@ process HISAT2_EXTRACTSPLICESITES { output: tuple val(meta), path("*.splice_sites.txt"), emit: txt - path "versions.yml" , emit: versions + tuple val("${task.process}"), val('hisat2'), eval('hisat2 --version | grep -o "version [^ ]*" | cut -d " " -f 2'), topic: versions, emit: versions_hisat2 when: task.ext.when == null || task.ext.when @@ -20,20 +20,14 @@ process HISAT2_EXTRACTSPLICESITES { script: def args = task.ext.args ?: '' """ - hisat2_extract_splice_sites.py $gtf > ${gtf.baseName}.splice_sites.txt - cat <<-END_VERSIONS > versions.yml - "${task.process}": - hisat2: \$(hisat2 --version | grep -o 'version [^ ]*' | cut -d ' ' -f 2) - END_VERSIONS + hisat2_extract_splice_sites.py \\ + $args \\ + $gtf \\ + > ${gtf.baseName}.splice_sites.txt """ stub: """ touch ${gtf.baseName}.splice_sites.txt - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - hisat2: \$(hisat2 --version | grep -o 'version [^ ]*' | cut -d ' ' -f 2) - END_VERSIONS """ } diff --git a/modules/nf-core/hisat2/extractsplicesites/meta.yml b/modules/nf-core/hisat2/extractsplicesites/meta.yml index c1bdc9e65..c13cc5b9d 100644 --- a/modules/nf-core/hisat2/extractsplicesites/meta.yml +++ b/modules/nf-core/hisat2/extractsplicesites/meta.yml @@ -25,9 +25,10 @@ input: type: file description: Reference gtf annotation file pattern: "*.{gtf}" + ontologies: [] output: - - txt: - - meta: + txt: + - - meta: type: map description: | Groovy Map containing reference information @@ -36,11 +37,30 @@ output: type: file description: Splice sites in txt file pattern: "*.txt" - - versions: - - versions.yml: - type: file - description: File containing software versions - pattern: "versions.yml" + ontologies: [] + versions_hisat2: + - - ${task.process}: + type: string + description: The process the versions were collected from + - hisat2: + type: string + description: The tool name + - hisat2 --version | grep -o "version [^ ]*" | cut -d " " -f 2: + type: eval + description: The expression to obtain the version of the tool + +topics: + versions: + - - ${task.process}: + type: string + description: The process the versions were collected from + - hisat2: + type: string + description: The tool name + - hisat2 --version | grep -o "version [^ ]*" | cut -d " " -f 2: + type: eval + description: The expression to obtain the version of the tool + authors: - "@ntoda03" - "@ramprasadn" diff --git a/modules/nf-core/hisat2/extractsplicesites/tests/main.nf.test b/modules/nf-core/hisat2/extractsplicesites/tests/main.nf.test index a9f93ec52..a827a0fc5 100644 --- a/modules/nf-core/hisat2/extractsplicesites/tests/main.nf.test +++ b/modules/nf-core/hisat2/extractsplicesites/tests/main.nf.test @@ -3,6 +3,10 @@ nextflow_process { name "Test Process HISAT2_EXTRACTSPLICESITES" script "../main.nf" process "HISAT2_EXTRACTSPLICESITES" + tag "modules" + tag "modules_nfcore" + tag "hisat2" + tag "hisat2/extractsplicesites" test("Should run without failures") { @@ -24,7 +28,7 @@ nextflow_process { assertAll( { assert process.success }, { assert path("${process.out.txt[0][1]}").exists() }, - { assert snapshot(process.out.versions).match() } + { assert snapshot(process.out.findAll { key, val -> key.startsWith("versions") }).match() } ) } } diff --git a/modules/nf-core/hisat2/extractsplicesites/tests/main.nf.test.snap b/modules/nf-core/hisat2/extractsplicesites/tests/main.nf.test.snap index 1dcd8af23..341c32024 100644 --- a/modules/nf-core/hisat2/extractsplicesites/tests/main.nf.test.snap +++ b/modules/nf-core/hisat2/extractsplicesites/tests/main.nf.test.snap @@ -11,7 +11,11 @@ ] ], "1": [ - "versions.yml:md5,eeea7231fe197810659b8bad4133aff2" + [ + "HISAT2_EXTRACTSPLICESITES", + "hisat2", + "2.2.1" + ] ], "txt": [ [ @@ -21,27 +25,37 @@ "genome.splice_sites.txt:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "versions": [ - "versions.yml:md5,eeea7231fe197810659b8bad4133aff2" + "versions_hisat2": [ + [ + "HISAT2_EXTRACTSPLICESITES", + "hisat2", + "2.2.1" + ] ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2024-06-20T17:34:13.229903" + "timestamp": "2026-01-19T13:53:18.228211649" }, "Should run without failures": { "content": [ - [ - "versions.yml:md5,eeea7231fe197810659b8bad4133aff2" - ] + { + "versions_hisat2": [ + [ + "HISAT2_EXTRACTSPLICESITES", + "hisat2", + "2.2.1" + ] + ] + } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2024-01-18T20:56:30.71763" + "timestamp": "2026-01-19T13:53:12.997365366" } } \ No newline at end of file diff --git a/modules/nf-core/kallisto/index/main.nf b/modules/nf-core/kallisto/index/main.nf index 73a5f7a95..5174924eb 100644 --- a/modules/nf-core/kallisto/index/main.nf +++ b/modules/nf-core/kallisto/index/main.nf @@ -12,7 +12,7 @@ process KALLISTO_INDEX { output: tuple val(meta), path("kallisto") , emit: index - path "versions.yml" , emit: versions + tuple val("${task.process}"), val('kallisto'), eval('kallisto 2>&1 | head -1 | sed "s/^kallisto //; s/Usage.*//"'), emit: versions_kallisto, topic: versions when: task.ext.when == null || task.ext.when @@ -25,20 +25,10 @@ process KALLISTO_INDEX { $args \\ -i kallisto \\ $fasta - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - kallisto: \$(echo \$(kallisto 2>&1) | sed 's/^kallisto //; s/Usage.*\$//') - END_VERSIONS """ stub: """ mkdir kallisto - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - kallisto: \$(echo \$(kallisto 2>&1) | sed 's/^kallisto //; s/Usage.*\$//') - END_VERSIONS """ } diff --git a/modules/nf-core/kallisto/index/meta.yml b/modules/nf-core/kallisto/index/meta.yml index 4541074ed..99d9e773b 100644 --- a/modules/nf-core/kallisto/index/meta.yml +++ b/modules/nf-core/kallisto/index/meta.yml @@ -6,9 +6,9 @@ keywords: - index tools: - kallisto: - description: Quantifying abundances of transcripts from bulk and single-cell RNA-Seq - data, or more generally of target sequences using high-throughput sequencing - reads. + description: Quantifying abundances of transcripts from bulk and single-cell + RNA-Seq data, or more generally of target sequences using high-throughput + sequencing reads. homepage: https://pachterlab.github.io/kallisto/ documentation: https://pachterlab.github.io/kallisto/manual tool_dev_url: https://github.com/pachterlab/kallisto @@ -24,9 +24,10 @@ input: type: file description: genome fasta file pattern: "*.{fasta}" + ontologies: [] output: - - index: - - meta: + index: + - - meta: type: map description: | Groovy Map containing reference information @@ -35,11 +36,29 @@ output: type: directory description: Kallisto genome index pattern: "*.idx" - - versions: - - versions.yml: - type: file - description: File containing software versions - pattern: "versions.yml" + versions_kallisto: + - - ${task.process}: + type: string + description: The name of the process + - kallisto: + type: string + description: The name of the tool + - kallisto 2>&1 | head -1 | sed "s/^kallisto //; s/Usage.*//": + type: eval + description: The expression to obtain the version of the tool + +topics: + versions: + - - ${task.process}: + type: string + description: The name of the process + - kallisto: + type: string + description: The name of the tool + - kallisto 2>&1 | head -1 | sed "s/^kallisto //; s/Usage.*//": + type: eval + description: The expression to obtain the version of the tool + authors: - "@ggabernet" maintainers: diff --git a/modules/nf-core/kallisto/index/tests/main.nf.test b/modules/nf-core/kallisto/index/tests/main.nf.test index bdb824012..37365690d 100644 --- a/modules/nf-core/kallisto/index/tests/main.nf.test +++ b/modules/nf-core/kallisto/index/tests/main.nf.test @@ -3,6 +3,10 @@ nextflow_process { name "Test Process KALLISTO_INDEX" script "../main.nf" process "KALLISTO_INDEX" + tag "modules" + tag "modules_nfcore" + tag "kallisto" + tag "kallisto/index" test("sarscov2 transcriptome.fasta") { @@ -21,7 +25,7 @@ nextflow_process { assertAll( { assert process.success }, { assert path(process.out.index.get(0).get(1)).exists() }, - { assert snapshot(process.out.versions).match() } + { assert snapshot(process.out.findAll { key, val -> key.startsWith('versions') }).match() } ) } } @@ -44,7 +48,10 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(process.out).match() } + { assert snapshot( + process.out.index, + process.out.findAll { key, val -> key.startsWith('versions') } + ).match() } ) } } diff --git a/modules/nf-core/kallisto/index/tests/main.nf.test.snap b/modules/nf-core/kallisto/index/tests/main.nf.test.snap index 42ba6c310..5af4c9136 100644 --- a/modules/nf-core/kallisto/index/tests/main.nf.test.snap +++ b/modules/nf-core/kallisto/index/tests/main.nf.test.snap @@ -1,51 +1,48 @@ { "sarscov2 transcriptome.fasta - stub": { "content": [ - { - "0": [ + [ + [ + { + "id": "transcriptome" + }, [ - { - "id": "transcriptome" - }, - [ - - ] + ] - ], - "1": [ - "versions.yml:md5,e23afe0f9a5d0dc20b05c27fe59ad041" - ], - "index": [ + ] + ], + { + "versions_kallisto": [ [ - { - "id": "transcriptome" - }, - [ - - ] + "KALLISTO_INDEX", + "kallisto", + "0.51.1" ] - ], - "versions": [ - "versions.yml:md5,e23afe0f9a5d0dc20b05c27fe59ad041" ] } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2024-10-19T18:51:55.402665844" + "timestamp": "2026-01-28T17:53:06.991465" }, "sarscov2 transcriptome.fasta": { "content": [ - [ - "versions.yml:md5,e23afe0f9a5d0dc20b05c27fe59ad041" - ] + { + "versions_kallisto": [ + [ + "KALLISTO_INDEX", + "kallisto", + "0.51.1" + ] + ] + } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2024-10-19T18:51:42.328144373" + "timestamp": "2026-01-28T17:52:50.923273" } } \ No newline at end of file diff --git a/modules/nf-core/kallisto/quant/main.nf b/modules/nf-core/kallisto/quant/main.nf index 8d04f2c6b..17b0d98a2 100644 --- a/modules/nf-core/kallisto/quant/main.nf +++ b/modules/nf-core/kallisto/quant/main.nf @@ -19,7 +19,7 @@ process KALLISTO_QUANT { tuple val(meta), path("${prefix}") , emit: results tuple val(meta), path("*.run_info.json") , emit: json_info tuple val(meta), path("*.log") , emit: log - path "versions.yml" , emit: versions + tuple val("${task.process}"), val('kallisto'), eval("kallisto version | sed 's/.*version //'"), emit: versions_kallisto, topic: versions when: task.ext.when == null || task.ext.when @@ -61,11 +61,6 @@ process KALLISTO_QUANT { cp ${prefix}/kallisto_quant.log ${prefix}.log cp ${prefix}/run_info.json ${prefix}.run_info.json - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - kallisto: \$(echo \$(kallisto version) | sed "s/kallisto, version //g" ) - END_VERSIONS """ stub: @@ -75,10 +70,5 @@ process KALLISTO_QUANT { mkdir -p $prefix touch ${prefix}.log touch ${prefix}.run_info.json - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - kallisto: \$(echo \$(kallisto version) | sed "s/kallisto, version //g" ) - END_VERSIONS """ } diff --git a/modules/nf-core/kallisto/quant/meta.yml b/modules/nf-core/kallisto/quant/meta.yml index 329268a17..5e089a69a 100644 --- a/modules/nf-core/kallisto/quant/meta.yml +++ b/modules/nf-core/kallisto/quant/meta.yml @@ -26,6 +26,8 @@ input: List of input FastQ files of size 1 and 2 for single-end and paired-end data, respectively. pattern: "*.{fastq,fastq.gz}" + ontologies: + - edam: http://edamontology.org/format_1930 # FASTQ - - meta2: type: map description: | @@ -35,24 +37,28 @@ input: type: file description: Kallisto genome index. pattern: "*.idx" - - - gtf: - type: file - description: Optional gtf file for translation of transcripts into genomic coordinates. - pattern: "*.gtf" - - - chromosomes: - type: file - description: Optional tab separated file with chromosome names and lengths. - pattern: "*.tsv" - - - fragment_length: - type: integer - description: For single-end mode only, the estimated average fragment length. - - - fragment_length_sd: - type: integer - description: For single-end mode only, the estimated standard deviation of the - fragment length. + ontologies: [] + - gtf: + type: file + description: Optional gtf file for translation of transcripts into genomic coordinates. + pattern: "*.gtf" + ontologies: [] + - chromosomes: + type: file + description: Optional tab separated file with chromosome names and lengths. + pattern: "*.tsv" + ontologies: + - edam: http://edamontology.org/format_3475 # TSV + - fragment_length: + type: integer + description: For single-end mode only, the estimated average fragment length. + - fragment_length_sd: + type: integer + description: For single-end mode only, the estimated standard deviation of the + fragment length. output: - - results: - - meta: + results: + - - meta: type: map description: | Groovy Map containing sample information @@ -60,8 +66,9 @@ output: - ${prefix}: type: file description: Kallisto output file - - json_info: - - meta: + ontologies: [] + json_info: + - - meta: type: map description: | Groovy Map containing sample information @@ -70,8 +77,10 @@ output: type: file description: JSON file containing information about the run pattern: "*.run_info.json" - - log: - - meta: + ontologies: + - edam: http://edamontology.org/format_3464 # JSON + log: + - - meta: type: map description: | Groovy Map containing sample information @@ -80,11 +89,30 @@ output: type: file description: File containing log information from running kallisto quant pattern: "*.log.txt" - - versions: - - versions.yml: - type: file - description: File containing software versions - pattern: "versions.yml" + ontologies: [] + versions_kallisto: + - - ${task.process}: + type: string + description: The name of the process + - kallisto: + type: string + description: The name of the tool + - "kallisto version | sed 's/.*version //'": + type: eval + description: The expression to obtain the version of the tool + +topics: + versions: + - - ${task.process}: + type: string + description: The name of the process + - kallisto: + type: string + description: The name of the tool + - "kallisto version | sed 's/.*version //'": + type: eval + description: The expression to obtain the version of the tool + authors: - "@anoronh4" maintainers: diff --git a/modules/nf-core/kallisto/quant/tests/main.nf.test b/modules/nf-core/kallisto/quant/tests/main.nf.test index ec6e3d60c..20107be7e 100644 --- a/modules/nf-core/kallisto/quant/tests/main.nf.test +++ b/modules/nf-core/kallisto/quant/tests/main.nf.test @@ -3,6 +3,11 @@ nextflow_process { name "Test Process KALLISTO_QUANT" script "../main.nf" process "KALLISTO_QUANT" + tag "modules" + tag "modules_nfcore" + tag "kallisto" + tag "kallisto/quant" + tag "kallisto/index" setup { run("KALLISTO_INDEX") { @@ -58,7 +63,7 @@ nextflow_process { { assert snapshot( path("${process.out.results[0][1]}/abundance.tsv"), process.out.log, - process.out.versions).match() } + process.out.findAll { key, val -> key.startsWith('versions') }).match() } ) } } @@ -91,7 +96,7 @@ nextflow_process { { assert snapshot( path("${process.out.results[0][1]}/abundance.tsv"), process.out.log, - process.out.versions).match() } + process.out.findAll { key, val -> key.startsWith('versions') }).match() } ) } } @@ -124,7 +129,11 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(process.out).match() } + { assert snapshot( + process.out.results, + process.out.json_info, + process.out.log, + process.out.findAll { key, val -> key.startsWith('versions') }).match() } ) } } @@ -157,7 +166,11 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(process.out).match() } + { assert snapshot( + process.out.results, + process.out.json_info, + process.out.log, + process.out.findAll { key, val -> key.startsWith('versions') }).match() } ) } } diff --git a/modules/nf-core/kallisto/quant/tests/main.nf.test.snap b/modules/nf-core/kallisto/quant/tests/main.nf.test.snap index db1aa10e6..65ee42224 100644 --- a/modules/nf-core/kallisto/quant/tests/main.nf.test.snap +++ b/modules/nf-core/kallisto/quant/tests/main.nf.test.snap @@ -11,165 +11,115 @@ "test.log:md5,cb46ef02463f63fec5aac31a4adcac94" ] ], - [ - "versions.yml:md5,9956d7fa99ceece8d7ea0ec3e780d970" - ] + { + "versions_kallisto": [ + [ + "KALLISTO_QUANT", + "kallisto", + "0.51.1" + ] + ] + } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.3", + "nextflow": "25.10.3" }, - "timestamp": "2024-10-19T16:46:09.603634413" + "timestamp": "2026-02-02T17:41:02.882228634" }, "sarscov2 paired-end - stub": { "content": [ - { - "0": [ - [ - { - "id": "test", - "single_end": false - }, - [ - - ] - ] - ], - "1": [ - [ - { - "id": "test", - "single_end": false - }, - "test.run_info.json:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "2": [ - [ - { - "id": "test", - "single_end": false - }, - "test.log:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "3": [ - "versions.yml:md5,9956d7fa99ceece8d7ea0ec3e780d970" - ], - "json_info": [ - [ - { - "id": "test", - "single_end": false - }, - "test.run_info.json:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "log": [ + [ + [ + { + "id": "test", + "single_end": false + }, [ - { - "id": "test", - "single_end": false - }, - "test.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] - ], - "results": [ + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.run_info.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + { + "versions_kallisto": [ [ - { - "id": "test", - "single_end": false - }, - [ - - ] + "KALLISTO_QUANT", + "kallisto", + "0.51.1" ] - ], - "versions": [ - "versions.yml:md5,9956d7fa99ceece8d7ea0ec3e780d970" ] } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2024-10-19T16:46:38.620702213" + "timestamp": "2026-02-02T17:04:52.776183" }, "sarscov2 single-end - stub": { "content": [ - { - "0": [ - [ - { - "id": "test", - "single_end": true - }, - [ - - ] - ] - ], - "1": [ - [ - { - "id": "test", - "single_end": true - }, - "test.run_info.json:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "2": [ - [ - { - "id": "test", - "single_end": true - }, - "test.log:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "3": [ - "versions.yml:md5,9956d7fa99ceece8d7ea0ec3e780d970" - ], - "json_info": [ - [ - { - "id": "test", - "single_end": true - }, - "test.run_info.json:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "log": [ + [ + [ + { + "id": "test", + "single_end": true + }, [ - { - "id": "test", - "single_end": true - }, - "test.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] - ], - "results": [ + ] + ], + [ + [ + { + "id": "test", + "single_end": true + }, + "test.run_info.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + [ + [ + { + "id": "test", + "single_end": true + }, + "test.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + { + "versions_kallisto": [ [ - { - "id": "test", - "single_end": true - }, - [ - - ] + "KALLISTO_QUANT", + "kallisto", + "0.51.1" ] - ], - "versions": [ - "versions.yml:md5,9956d7fa99ceece8d7ea0ec3e780d970" ] } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2024-10-19T16:46:24.255840154" + "timestamp": "2026-02-02T17:04:38.704914" }, "sarscov2 single-end": { "content": [ @@ -183,14 +133,20 @@ "test.log:md5,0cad96e4108b2ea1c152ad063198b21f" ] ], - [ - "versions.yml:md5,9956d7fa99ceece8d7ea0ec3e780d970" - ] + { + "versions_kallisto": [ + [ + "KALLISTO_QUANT", + "kallisto", + "0.51.1" + ] + ] + } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.3", + "nextflow": "25.10.3" }, - "timestamp": "2024-10-19T16:45:56.782215718" + "timestamp": "2026-02-02T17:40:56.333394652" } } \ No newline at end of file diff --git a/modules/nf-core/kraken2/kraken2/environment.yml b/modules/nf-core/kraken2/kraken2/environment.yml index 19525e8d8..aca72ddb5 100644 --- a/modules/nf-core/kraken2/kraken2/environment.yml +++ b/modules/nf-core/kraken2/kraken2/environment.yml @@ -4,6 +4,6 @@ channels: - conda-forge - bioconda dependencies: - - bioconda::kraken2=2.1.5 - - coreutils=9.4 + - bioconda::kraken2=2.1.6 + - coreutils=9.5 - pigz=2.8 diff --git a/modules/nf-core/kraken2/kraken2/main.nf b/modules/nf-core/kraken2/kraken2/main.nf index f3789516a..c826eecf5 100644 --- a/modules/nf-core/kraken2/kraken2/main.nf +++ b/modules/nf-core/kraken2/kraken2/main.nf @@ -4,8 +4,8 @@ process KRAKEN2_KRAKEN2 { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/29/29ed8f68315625eca61a3de9fcb7b8739fe8da23f5779eda3792b9d276aa3b8f/data' : - 'community.wave.seqera.io/library/kraken2_coreutils_pigz:45764814c4bb5bf3' }" + 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/0f/0f827dcea51be6b5c32255167caa2dfb65607caecdc8b067abd6b71c267e2e82/data' : + 'community.wave.seqera.io/library/kraken2_coreutils_pigz:920ecc6b96e2ba71' }" input: tuple val(meta), path(reads) @@ -18,7 +18,8 @@ process KRAKEN2_KRAKEN2 { tuple val(meta), path('*.unclassified{.,_}*') , optional:true, emit: unclassified_reads_fastq tuple val(meta), path('*classifiedreads.txt') , optional:true, emit: classified_reads_assignment tuple val(meta), path('*report.txt') , emit: report - path "versions.yml" , emit: versions + tuple val("${task.process}"), val('kraken2'), eval('kraken2 --version 2>&1 | head -1 | sed "s/^.*Kraken version //; s/ .*//"'), topic: versions, emit: versions_kraken2 + tuple val("${task.process}"), val('pigz'), eval('pigz --version 2>&1 | sed "s/pigz //g"'), topic: versions, emit: versions_pigz when: task.ext.when == null || task.ext.when @@ -48,22 +49,12 @@ process KRAKEN2_KRAKEN2 { $reads $compress_reads_command - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - kraken2: \$(echo \$(kraken2 --version 2>&1) | sed 's/^.*Kraken version //; s/ .*\$//') - pigz: \$( pigz --version 2>&1 | sed 's/pigz //g' ) - END_VERSIONS """ stub: - def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" - def paired = meta.single_end ? "" : "--paired" def classified = meta.single_end ? "${prefix}.classified.fastq.gz" : "${prefix}.classified_1.fastq.gz ${prefix}.classified_2.fastq.gz" def unclassified = meta.single_end ? "${prefix}.unclassified.fastq.gz" : "${prefix}.unclassified_1.fastq.gz ${prefix}.unclassified_2.fastq.gz" - def readclassification_option = save_reads_assignment ? "--output ${prefix}.kraken2.classifiedreads.txt" : "--output /dev/null" - def compress_reads_command = save_output_fastqs ? "pigz -p $task.cpus *.fastq" : "" """ touch ${prefix}.kraken2.report.txt @@ -74,12 +65,6 @@ process KRAKEN2_KRAKEN2 { if [ "$save_reads_assignment" == "true" ]; then touch ${prefix}.kraken2.classifiedreads.txt fi - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - kraken2: \$(echo \$(kraken2 --version 2>&1) | sed 's/^.*Kraken version //; s/ .*\$//') - pigz: \$( pigz --version 2>&1 | sed 's/pigz //g' ) - END_VERSIONS """ } diff --git a/modules/nf-core/kraken2/kraken2/meta.yml b/modules/nf-core/kraken2/kraken2/meta.yml index 39e3601c8..b60868de6 100644 --- a/modules/nf-core/kraken2/kraken2/meta.yml +++ b/modules/nf-core/kraken2/kraken2/meta.yml @@ -25,22 +25,23 @@ input: description: | List of input FastQ files of size 1 and 2 for single-end and paired-end data, respectively. - - - db: - type: directory - description: Kraken2 database - - - save_output_fastqs: - type: string - description: | - If true, optional commands are added to save classified and unclassified reads - as fastq files - - - save_reads_assignment: - type: string - description: | - If true, an optional command is added to save a file reporting the taxonomic - classification of each input read + ontologies: [] + - db: + type: directory + description: Kraken2 database + - save_output_fastqs: + type: string + description: | + If true, optional commands are added to save classified and unclassified reads + as fastq files + - save_reads_assignment: + type: string + description: | + If true, an optional command is added to save a file reporting the taxonomic + classification of each input read output: - - classified_reads_fastq: - - meta: + classified_reads_fastq: + - - meta: type: map description: | Groovy Map containing sample information @@ -51,8 +52,9 @@ output: Reads classified as belonging to any of the taxa on the Kraken2 database. pattern: "*{fastq.gz}" - - unclassified_reads_fastq: - - meta: + ontologies: [] + unclassified_reads_fastq: + - - meta: type: map description: | Groovy Map containing sample information @@ -63,8 +65,9 @@ output: Reads not classified to any of the taxa on the Kraken2 database. pattern: "*{fastq.gz}" - - classified_reads_assignment: - - meta: + ontologies: [] + classified_reads_assignment: + - - meta: type: map description: | Groovy Map containing sample information @@ -74,8 +77,9 @@ output: description: | Kraken2 output file indicating the taxonomic assignment of each input read - - report: - - meta: + ontologies: [] + report: + - - meta: type: map description: | Groovy Map containing sample information @@ -86,11 +90,49 @@ output: Kraken2 report containing stats about classified and not classified reads. pattern: "*.{report.txt}" - - versions: - - versions.yml: - type: file - description: File containing software versions - pattern: "versions.yml" + ontologies: [] + versions_kraken2: + - - ${task.process}: + type: string + description: The process the versions were collected from + - kraken2: + type: string + description: The tool name + - kraken2 --version 2>&1 | head -1 | sed "s/^.*Kraken version //; s/ .*//": + type: eval + description: The expression to obtain the version of the tool + versions_pigz: + - - ${task.process}: + type: string + description: The process the versions were collected from + - pigz: + type: string + description: The tool name + - pigz --version 2>&1 | sed "s/pigz //g": + type: eval + description: The expression to obtain the version of the tool + +topics: + versions: + - - ${task.process}: + type: string + description: The process the versions were collected from + - kraken2: + type: string + description: The tool name + - kraken2 --version 2>&1 | head -1 | sed "s/^.*Kraken version //; s/ .*//": + type: eval + description: The expression to obtain the version of the tool + - - ${task.process}: + type: string + description: The process the versions were collected from + - pigz: + type: string + description: The tool name + - pigz --version 2>&1 | sed "s/pigz //g": + type: eval + description: The expression to obtain the version of the tool + authors: - "@joseespinosa" - "@drpatelh" diff --git a/modules/nf-core/kraken2/kraken2/nextflow.config b/modules/nf-core/kraken2/kraken2/nextflow.config index e7055a915..8e25d96ee 100644 --- a/modules/nf-core/kraken2/kraken2/nextflow.config +++ b/modules/nf-core/kraken2/kraken2/nextflow.config @@ -1,15 +1,11 @@ -if (!params.skip_qc) { - if (params.contaminant_screening in ['kraken2', 'kraken2_bracken']) { - process { - withName: 'KRAKEN2' { - // See https://doi.org/10.1080/19490976.2024.2323235 for the confidence level - // and https://doi.org/10.1038/s41596-022-00738-y for the minimum-hit-groups - ext.args = "--confidence 0.05 --minimum-hit-groups 3" - publishDir = [ - path: { "${params.outdir}/${params.aligner}/contaminants/kraken2/kraken_reports" }, - mode: params.publish_dir_mode - ] - } - } +process { + withName: 'KRAKEN2' { + // See https://doi.org/10.1080/19490976.2024.2323235 for the confidence level + // and https://doi.org/10.1038/s41596-022-00738-y for the minimum-hit-groups + ext.args = "--confidence 0.05 --minimum-hit-groups 3" + publishDir = [ + path: { "${params.outdir}/${params.aligner}/contaminants/kraken2/kraken_reports" }, + mode: params.publish_dir_mode + ] } } diff --git a/modules/nf-core/kraken2/kraken2/tests/main.nf.test b/modules/nf-core/kraken2/kraken2/tests/main.nf.test index 60adc5ef0..72dc33c05 100644 --- a/modules/nf-core/kraken2/kraken2/tests/main.nf.test +++ b/modules/nf-core/kraken2/kraken2/tests/main.nf.test @@ -2,6 +2,11 @@ nextflow_process { name "Test Process KRAKEN2_KRAKEN2" script "../main.nf" process "KRAKEN2_KRAKEN2" + tag "modules" + tag "modules_nfcore" + tag "untar" + tag "kraken2" + tag "kraken2/kraken2" setup { run("UNTAR") { @@ -43,7 +48,7 @@ nextflow_process { { assert process.success }, { assert snapshot( process.out.report, - process.out.versions, + process.out.findAll { key, val -> key.startsWith("versions") }, ).match() }, { assert process.out.classified_reads_fastq.get(0).get(1) ==~ ".*/test.classified.fastq.gz" }, @@ -86,7 +91,7 @@ nextflow_process { { assert process.success }, { assert snapshot( process.out.report, - process.out.versions, + process.out.findAll { key, val -> key.startsWith("versions") }, ).match() }, { assert process.out.classified_reads_fastq.get(0).get(1).get(0) @@ -128,11 +133,81 @@ nextflow_process { { assert process.success }, { assert snapshot( process.out.report, + process.out.findAll { key, val -> key.startsWith("versions") }, process.out.classified_reads_assignment, - process.out.versions, ).match() }, ) } } + + test("single_end - stub") { + + tag "stub" + options "-stub" + when { + process { + """ + input[0] = [ + [ id:'test', single_end:true ], // meta map + [ file("dummy1", checkIfExists: false)] + ] + input[1] = file("dummy2", checkIfExists: false) + input[2] = true + input[3] = false + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.report, + process.out.findAll { key, val -> key.startsWith("versions") }, + ).match() + }, + { assert process.out.classified_reads_fastq.get(0).get(1) ==~ ".*/test.classified.fastq.gz" }, + { assert process.out.unclassified_reads_fastq.get(0).get(1) ==~ ".*/test.unclassified.fastq.gz" }, + ) + } + } + + test("paired_end - stub") { + + tag "stub" + options "-stub" + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + [ file("dummy1", checkIfExists: false)] + ] + input[1] = file("dummy2", checkIfExists: false) + input[2] = true + input[3] = false + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.report, + process.out.findAll { key, val -> key.startsWith("versions") }, + ).match() + }, + { assert process.out.classified_reads_fastq.get(0).get(1).get(0) + ==~ ".*/test.classified_1.fastq.gz" }, + { assert process.out.classified_reads_fastq.get(0).get(1).get(1) + ==~ ".*/test.classified_2.fastq.gz" }, + { assert process.out.unclassified_reads_fastq.get(0).get(1).get(0) + ==~ ".*/test.unclassified_1.fastq.gz" }, + { assert process.out.unclassified_reads_fastq.get(0).get(1).get(1) + ==~ ".*/test.unclassified_2.fastq.gz" }, + ) + } + } } diff --git a/modules/nf-core/kraken2/kraken2/tests/main.nf.test.snap b/modules/nf-core/kraken2/kraken2/tests/main.nf.test.snap index 7e20d53f6..4aa2ece7f 100644 --- a/modules/nf-core/kraken2/kraken2/tests/main.nf.test.snap +++ b/modules/nf-core/kraken2/kraken2/tests/main.nf.test.snap @@ -10,15 +10,86 @@ "test.kraken2.report.txt:md5,4227755fe40478b8d7dc8634b489761e" ] ], + { + "versions_kraken2": [ + [ + "KRAKEN2_KRAKEN2", + "kraken2", + "2.1.6" + ] + ], + "versions_pigz": [ + [ + "KRAKEN2_KRAKEN2", + "pigz", + "2.8" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.2" + }, + "timestamp": "2026-01-19T17:22:36.682041524" + }, + "paired_end - stub": { + "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + "test.kraken2.report.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + { + "versions_kraken2": [ + [ + "KRAKEN2_KRAKEN2", + "kraken2", + "2.1.6" + ] + ], + "versions_pigz": [ + [ + "KRAKEN2_KRAKEN2", + "pigz", + "2.8" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.2" + }, + "timestamp": "2026-01-19T17:22:59.824433284" + }, + "sarscov2 custom_prefix - stub": { + "content": [ + [ + [ + { + "id": "test", + "single_end": true + }, + "test.kraken2.report.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], [ - "versions.yml:md5,ed58d544fca4d012d5477858c986d741" + + ], + [ + "versions.yml:md5,79adf2ca1cfc625cb77e391b27142c43" ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.2" + "nf-test": "0.9.3", + "nextflow": "25.04.8" }, - "timestamp": "2025-06-02T13:05:44.695905" + "timestamp": "2025-10-16T13:56:24.287200136" }, "sarscov2 illumina paired end [fastq]": { "content": [ @@ -31,15 +102,28 @@ "test.kraken2.report.txt:md5,4227755fe40478b8d7dc8634b489761e" ] ], - [ - "versions.yml:md5,ed58d544fca4d012d5477858c986d741" - ] + { + "versions_kraken2": [ + [ + "KRAKEN2_KRAKEN2", + "kraken2", + "2.1.6" + ] + ], + "versions_pigz": [ + [ + "KRAKEN2_KRAKEN2", + "pigz", + "2.8" + ] + ] + } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.2" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-06-02T13:05:56.337945" + "timestamp": "2026-01-19T17:22:42.807626617" }, "sarscov2 illumina single end [fastq] + save_reads_assignment": { "content": [ @@ -52,6 +136,22 @@ "test.kraken2.report.txt:md5,4227755fe40478b8d7dc8634b489761e" ] ], + { + "versions_kraken2": [ + [ + "KRAKEN2_KRAKEN2", + "kraken2", + "2.1.6" + ] + ], + "versions_pigz": [ + [ + "KRAKEN2_KRAKEN2", + "pigz", + "2.8" + ] + ] + }, [ [ { @@ -60,15 +160,46 @@ }, "test.kraken2.classifiedreads.txt:md5,e7a90531f0d8d777316515c36fe4cae0" ] - ], - [ - "versions.yml:md5,ed58d544fca4d012d5477858c986d741" ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.2" + "nf-test": "0.9.3", + "nextflow": "25.10.2" + }, + "timestamp": "2026-01-19T17:22:48.87201447" + }, + "single_end - stub": { + "content": [ + [ + [ + { + "id": "test", + "single_end": true + }, + "test.kraken2.report.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + { + "versions_kraken2": [ + [ + "KRAKEN2_KRAKEN2", + "kraken2", + "2.1.6" + ] + ], + "versions_pigz": [ + [ + "KRAKEN2_KRAKEN2", + "pigz", + "2.8" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-06-02T13:06:07.865635" + "timestamp": "2026-01-19T17:22:54.351663948" } } \ No newline at end of file diff --git a/modules/nf-core/multiqc/meta.yml b/modules/nf-core/multiqc/meta.yml index e4b8f94dd..861cd7f76 100644 --- a/modules/nf-core/multiqc/meta.yml +++ b/modules/nf-core/multiqc/meta.yml @@ -83,7 +83,6 @@ output: - multiqc --version | sed "s/.* //g": type: eval description: The expression to obtain the version of the tool - authors: - "@abhi18av" - "@bunop" @@ -94,3 +93,27 @@ maintainers: - "@bunop" - "@drpatelh" - "@jfy133" +containers: + conda: + linux/amd64: + lock_file: https://wave.seqera.io/v1alpha1/builds/bd-ee7739d47738383b_1/condalock + linux/arm64: + lock_file: https://wave.seqera.io/v1alpha1/builds/bd-58d7dee710ab3aa8_1/condalock + docker: + linux/amd64: + build_id: bd-ee7739d47738383b_1 + name: community.wave.seqera.io/library/multiqc:1.33--ee7739d47738383b + scanId: sc-6ddec592dcadd583_4 + linux/arm64: + build_id: bd-58d7dee710ab3aa8_1 + name: community.wave.seqera.io/library/multiqc:1.33--58d7dee710ab3aa8 + scanId: sc-a04c42273e34c55c_2 + singularity: + linux/amd64: + build_id: bd-e3576ddf588fa00d_1 + https: https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/34/34e733a9ae16a27e80fe00f863ea1479c96416017f24a907996126283e7ecd4d/data + name: oras://community.wave.seqera.io/library/multiqc:1.33--e3576ddf588fa00d + linux/arm64: + build_id: bd-2537ca5f8445e3c2_1 + https: https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/78/78b89e91d89e9cc99ad5ade5be311f347838cb2acbfb4f13bc343b170be09ce4/data + name: oras://community.wave.seqera.io/library/multiqc:1.33--2537ca5f8445e3c2 diff --git a/modules/nf-core/multiqc/nextflow.config b/modules/nf-core/multiqc/nextflow.config index 0714dbccd..c0a3af18b 100644 --- a/modules/nf-core/multiqc/nextflow.config +++ b/modules/nf-core/multiqc/nextflow.config @@ -1,18 +1,16 @@ -if (!params.skip_multiqc) { - process { - withName: 'MULTIQC' { - ext.args = { [ - ((params.multiqc_title == null) ? '' : "--title \"${params.multiqc_title}\"") - ].join(' ').trim() } - ext.prefix = "multiqc_report" - publishDir = [ - path: { [ - "${params.outdir}/multiqc", - params.skip_alignment? '' : "/${params.aligner}" - ].join('') }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } +process { + withName: 'MULTIQC' { + ext.args = { [ + ((params.multiqc_title == null) ? '' : "--title \"${params.multiqc_title}\"") + ].join(' ').trim() } + ext.prefix = "multiqc_report" + publishDir = [ + path: { [ + "${params.outdir}/multiqc", + params.skip_alignment? '' : "/${params.aligner}" + ].join('') }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] } } diff --git a/modules/nf-core/parabricks/rnafq2bam/main.nf b/modules/nf-core/parabricks/rnafq2bam/main.nf new file mode 100644 index 000000000..ddaf70c77 --- /dev/null +++ b/modules/nf-core/parabricks/rnafq2bam/main.nf @@ -0,0 +1,102 @@ +process PARABRICKS_RNAFQ2BAM { + tag "${meta.id}" + label 'process_high' + label 'process_gpu' + // needed by the module to work properly can be removed when fixed upstream - see: https://github.com/nf-core/modules/issues/7226 + stageInMode 'copy' + + container "nvcr.io/nvidia/clara/clara-parabricks:4.6.0-1" + + input: + tuple val(meta), path(reads) + tuple val(meta2), path(fasta) + tuple val(meta3), path(index) + val qc_metrics + val mark_duplicates + + output: + tuple val(meta), path("${prefix}.Log.final.out"), emit: log_final + tuple val(meta), path("${prefix}.Log.out"), emit: log_out + tuple val(meta), path("${prefix}.Log.progress.out"), emit: log_progress + tuple val(meta), path("${prefix}.bam"), emit: bam, optional:true + tuple val(meta), path("${prefix}.bam.bai"), emit: bai, optional:true + tuple val(meta), path("*.sortedByCoord.out.bam"), emit: bam_sorted, optional:true + tuple val(meta), path("*.Aligned.sortedByCoord.out.bam"), emit: bam_sorted_aligned, optional:true + tuple val(meta), path('*toTranscriptome.out.bam'), emit: bam_transcript, optional:true + tuple val(meta), path('*Aligned.unsort.out.bam'), emit: bam_unsorted, optional:true + tuple val(meta), path('*fastq.gz'), emit: fastq, optional:true + tuple val(meta), path('*.tab'), emit: tab, optional:true + tuple val(meta), path('*.SJ.out.tab'), emit: spl_junc_tab, optional:true + tuple val(meta), path('*.ReadsPerGene.out.tab'), emit: read_per_gene_tab, optional:true + tuple val(meta), path('*.out.junction'), emit: junction, optional:true + tuple val(meta), path('*.out.sam'), emit: sam, optional:true + tuple val(meta), path('*.wig'), emit: wig, optional:true + tuple val(meta), path('*.bg'), emit: bedgraph, optional:true + tuple val(meta), path("${prefix}_qc_metrics"), emit: qc_metrics, optional:true + tuple val(meta), path("${prefix}.duplicate-metrics.txt"), emit: duplicate_metrics, optional:true + tuple val("${task.process}"), val("parabricks"), eval("pbrun version 2>&1 | grep -Po '(?<=^pbrun: ).*'"), emit: versions_parabricks, topic: versions + + when: + task.ext.when == null || task.ext.when + + script: + // Exit if running this module with -profile conda / -profile mamba + if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) { + error("Parabricks module does not support Conda. Please use Docker / Singularity / Podman instead.") + } + def args = task.ext.args ?: '' + prefix = task.ext.prefix ?: "${meta.id}" + + def in_fq_command = meta.single_end ? "--in-se-fq ${reads}" : "--in-fq ${reads}" + def num_gpus = task.accelerator ? "--num-gpus ${task.accelerator.request}" : '' + + def qc_metrics_command = qc_metrics ? "--out-qc-metrics-dir ${prefix}_qc_metrics" : "" + def duplicate_metrics_command = mark_duplicates ? "--out-duplicate-metrics ${prefix}.duplicate-metrics.txt" : "--no-markdups" + + """ + pbrun \\ + rna_fq2bam \\ + --ref ${fasta} \\ + ${in_fq_command} \\ + --output-dir . \\ + --genome-lib-dir ${index} \\ + --out-bam ${prefix}.bam \\ + --logfile ${prefix}.Log.final.out \\ + --out-prefix ${prefix}. \\ + ${num_gpus} \\ + ${qc_metrics_command} \\ + ${duplicate_metrics_command} \\ + ${args} + """ + + stub: + // Exit if running this module with -profile conda / -profile mamba + if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) { + error("Parabricks module does not support Conda. Please use Docker / Singularity / Podman instead.") + } + prefix = task.ext.prefix ?: "${meta.id}" + def qc_metrics_output = qc_metrics ? "mkdir ${prefix}_qc_metrics" : "" + def duplicate_metrics_output = mark_duplicates ? "touch ${prefix}.duplicate-metrics.txt" : "" + """ + echo "" | gzip > ${prefix}.unmapped_1.fastq.gz + echo "" | gzip > ${prefix}.unmapped_2.fastq.gz + touch ${prefix}.bam + touch ${prefix}.bam.bai + 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 + ${qc_metrics_output} + ${duplicate_metrics_output} + """ +} diff --git a/modules/nf-core/parabricks/rnafq2bam/meta.yml b/modules/nf-core/parabricks/rnafq2bam/meta.yml new file mode 100644 index 000000000..f25344a96 --- /dev/null +++ b/modules/nf-core/parabricks/rnafq2bam/meta.yml @@ -0,0 +1,297 @@ +name: parabricks_rnafq2bam +description: This tool is the equivalent of fq2bam for RNA-Seq samples, + receiving inputs in FASTQ format, performing alignment with the splice-aware + STAR algorithm, optionally marking of duplicate reads, and outputting an + aligned BAM file ready for variant and fusion calling. +keywords: + - align + - star + - rna +tools: + - "parabricks": + description: "NVIDIA Clara Parabricks GPU-accelerated genomics tools" + homepage: "https://www.nvidia.com/en-us/clara/genomics/" + documentation: "https://docs.nvidia.com/clara/parabricks/latest/index.html" + licence: + - "https://docs.nvidia.com/clara/parabricks/latest/eula.html" + identifier: "" +input: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - reads: + type: file + description: fastq.gz files + pattern: "*.fastq.gz" + ontologies: + - edam: http://edamontology.org/format_3989 + - edam: http://edamontology.org/format_1930 + - - meta2: + type: map + description: | + Groovy Map containing fasta information + - fasta: + type: file + description: reference fasta file - must be unzipped + pattern: "*.fasta" + ontologies: + - edam: http://edamontology.org/format_1929 + - - meta3: + type: map + description: | + Groovy Map containing genome lib dir information + - index: + type: directory + description: Path to a genome resource library directory. The indexing + required to run STAR should be completed by the user beforehand. + pattern: "*" + ontologies: [] + - qc_metrics: + type: boolean + description: Optionally report QC metrics + - mark_duplicates: + type: boolean + description: Optionally mark duplicates +output: + log_final: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.Log.final.out: + type: file + description: STAR log final out file + pattern: "*Log.final.out" + ontologies: [] + log_out: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.Log.out: + type: file + description: STAR log out file + pattern: "*Log.out" + ontologies: [] + log_progress: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.Log.progress.out: + type: file + description: STAR log progress out file + pattern: "*Log.progress.out" + ontologies: [] + bam: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.bam: + type: file + description: Output BAM file containing read alignments + pattern: "*.{bam}" + ontologies: [] + bai: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.bam.bai: + type: file + description: Output BAM index file + pattern: "*.{bam}.{bai}" + ontologies: [] + bam_sorted: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.sortedByCoord.out.bam": + type: file + description: Output BAM file of read alignments sorted by coordinate + (optional) + pattern: "*.sortedByCoord.out.bam" + ontologies: [] + bam_sorted_aligned: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.Aligned.sortedByCoord.out.bam": + type: file + description: Output BAM file of read alignments sorted by coordinate + (optional) + pattern: "*.Aligned.sortedByCoord.out.bam" + ontologies: [] + bam_transcript: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*toTranscriptome.out.bam": + type: file + description: Output BAM file of transcriptome alignment (optional) + pattern: "*toTranscriptome.out.bam" + ontologies: [] + bam_unsorted: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*Aligned.unsort.out.bam": + type: file + description: Unsorted BAM file of read alignments (optional) + pattern: "*Aligned.unsort.out.bam" + ontologies: [] + fastq: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*fastq.gz": + type: file + description: Unmapped FastQ files (optional) + pattern: "*fastq.gz" + ontologies: + - edam: http://edamontology.org/format_3989 + tab: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.tab": + type: file + description: STAR output tab file(s) (optional) + pattern: "*.tab" + ontologies: + - edam: http://edamontology.org/format_3475 + spl_junc_tab: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.SJ.out.tab": + type: file + description: STAR output splice junction tab file + pattern: "*.SJ.out.tab" + ontologies: + - edam: http://edamontology.org/format_3475 + read_per_gene_tab: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.ReadsPerGene.out.tab": + type: file + description: STAR output read per gene tab file + pattern: "*.ReadsPerGene.out.tab" + ontologies: + - edam: http://edamontology.org/format_3475 + junction: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.out.junction": + type: file + description: STAR chimeric junction output file (optional) + pattern: "*.out.junction" + ontologies: [] + sam: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.out.sam": + type: file + description: STAR output SAM file(s) (optional) + pattern: "*.out.sam" + ontologies: [] + wig: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.wig": + type: file + description: STAR output wiggle format file(s) (optional) + pattern: "*.wig" + ontologies: [] + bedgraph: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.bg": + type: file + description: STAR output bedGraph format file(s) (optional) + pattern: "*.bg" + ontologies: [] + qc_metrics: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}_qc_metrics: + type: directory + description: Directory containing QC metrics output by STAR (optional) + pattern: "*_qc_metrics" + ontologies: [] + duplicate_metrics: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.duplicate-metrics.txt: + type: file + description: File containing duplicate metrics output by STAR (optional) + pattern: "*.duplicate-metrics.txt" + ontologies: [] + versions_parabricks: + - - ${task.process}: + type: string + description: The name of the process + - parabricks: + type: string + description: The name of the tool + - "pbrun version 2>&1 | grep -Po '(?<=^pbrun: ).*'": + type: eval + description: The expression to obtain the version of the tool +topics: + versions: + - - ${task.process}: + type: string + description: The name of the process + - parabricks: + type: string + description: The name of the tool + - "pbrun version 2>&1 | grep -Po '(?<=^pbrun: ).*'": + type: eval + description: The expression to obtain the version of the tool +authors: + - "@gburnett-nvidia" +maintainers: + - "@gburnett-nvidia" diff --git a/modules/nf-core/parabricks/rnafq2bam/tests/main.nf.test b/modules/nf-core/parabricks/rnafq2bam/tests/main.nf.test new file mode 100644 index 000000000..bf79d3150 --- /dev/null +++ b/modules/nf-core/parabricks/rnafq2bam/tests/main.nf.test @@ -0,0 +1,182 @@ +nextflow_process { + + name "Test Process PARABRICKS_RNAFQ2BAM" + script "../main.nf" + process "PARABRICKS_RNAFQ2BAM" + + tag "gpu_highmem" + tag "modules" + tag "modules_nfcore" + tag "parabricks" + tag "parabricks/rnafq2bam" + tag "star/genomegenerate" + + setup { + + run("STAR_GENOMEGENERATE") { + script "../../../star/genomegenerate/main.nf" + process { + """ + input[0] = [ + [ id:'minigenome_fasta' ], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/minigenome.fa') + ] + input[1] = [ + [ id:'minigenome_gtf' ], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/minigenome.gtf') + ] + """ + } + } + } + + test("homo_sapiens") { + + config "./nextflow.config" + + when { + params { + module_args = '--low-memory --read-files-command zcat --x3' + // Ref: https://forums.developer.nvidia.com/t/problem-with-gpu/256825/6 + // Parabricks’s rnafq2bam requires 24GB of memory. + // Using --low-memory for testing + } + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:true ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/test_starfusion_rnaseq_1.fastq.gz', checkIfExists: true) ] + ]) + input[1] = Channel.of([ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ]) + input[2] = STAR_GENOMEGENERATE.out.index + input[3] = false + input[4] = false + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + file(process.out.log_final[0][1]).name, + process.out.findAll { key, val -> key.startsWith('versions') }, + bam(process.out.bam[0][1]).getReadsMD5() + ).match() } + ) + } + } + + test("homo_sapiens - stub") { + + config "./nextflow.config" + options "-stub" + + when { + params { + module_args = '' + } + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:true ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/test_starfusion_rnaseq_1.fastq.gz', checkIfExists: true) ] + ]) + input[1] = Channel.of([ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/minigenome.fa', checkIfExists: true) + ]) + input[2] = STAR_GENOMEGENERATE.out.index + input[3] = false + input[4] = false + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("homo_sapiens_chimeric") { + + config "./nextflow.config" + + when { + params { + module_args = '--low-memory --read-files-command zcat --out-chim-type Junctions --min-chim-segment 15 --x3' + // Ref: https://forums.developer.nvidia.com/t/problem-with-gpu/256825/6 + // Parabricks’s rnafq2bam requires 24GB of memory. + // Using --low-memory for testing + } + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:true ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/test_starfusion_rnaseq_1.fastq.gz', checkIfExists: true) ] + ]) + input[1] = Channel.of([ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ]) + input[2] = STAR_GENOMEGENERATE.out.index + input[3] = false + input[4] = false + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + bam(process.out.bam[0][1]).getReadsMD5(), + file(process.out.bai[0][1]).name, + file(process.out.junction[0][1]).name, + process.out.findAll { key, val -> key.startsWith('versions') } + ).match() } + ) + } + } + + test("homo_sapiens_chimeric - stub") { + + config "./nextflow.config" + options "-stub" + + when { + params { + module_args = '--out-chim-type Junctions' + } + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:true ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/test_starfusion_rnaseq_1.fastq.gz', checkIfExists: true) ] + ]) + input[1] = Channel.of([ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ]) + input[2] = STAR_GENOMEGENERATE.out.index + input[3] = false + input[4] = false + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + +} diff --git a/modules/nf-core/parabricks/rnafq2bam/tests/main.nf.test.snap b/modules/nf-core/parabricks/rnafq2bam/tests/main.nf.test.snap new file mode 100644 index 000000000..a0fadd02b --- /dev/null +++ b/modules/nf-core/parabricks/rnafq2bam/tests/main.nf.test.snap @@ -0,0 +1,769 @@ +{ + "homo_sapiens - 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.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "11": [ + [ + { + "id": "test", + "single_end": true + }, + "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "12": [ + [ + { + "id": "test", + "single_end": true + }, + "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "13": [ + [ + { + "id": "test", + "single_end": true + }, + "test.Chimeric.out.junction:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "14": [ + [ + { + "id": "test", + "single_end": true + }, + "test.out.sam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "15": [ + [ + { + "id": "test", + "single_end": true + }, + "test.Signal.UniqueMultiple.str1.out.wig:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "16": [ + [ + { + "id": "test", + "single_end": true + }, + "test.Signal.UniqueMultiple.str1.out.bg:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "17": [ + + ], + "18": [ + + ], + "19": [ + [ + "PARABRICKS_RNAFQ2BAM", + "parabricks", + "4.6.0-1" + ] + ], + "2": [ + [ + { + "id": "test", + "single_end": true + }, + "test.Log.progress.out:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + [ + { + "id": "test", + "single_end": true + }, + "test.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "4": [ + [ + { + "id": "test", + "single_end": true + }, + "test.bam.bai: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.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "7": [ + [ + { + "id": "test", + "single_end": true + }, + "test.toTranscriptome.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "8": [ + [ + { + "id": "test", + "single_end": true + }, + "test.Aligned.unsort.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "9": [ + [ + { + "id": "test", + "single_end": true + }, + [ + "test.unmapped_1.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test.unmapped_2.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "bai": [ + [ + { + "id": "test", + "single_end": true + }, + "test.bam.bai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "bam": [ + [ + { + "id": "test", + "single_end": true + }, + "test.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "bam_sorted": [ + [ + { + "id": "test", + "single_end": true + }, + [ + "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "bam_sorted_aligned": [ + [ + { + "id": "test", + "single_end": true + }, + "test.Aligned.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" + ] + ], + "duplicate_metrics": [ + + ], + "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" + ] + ], + "qc_metrics": [ + + ], + "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_parabricks": [ + [ + "PARABRICKS_RNAFQ2BAM", + "parabricks", + "4.6.0-1" + ] + ], + "wig": [ + [ + { + "id": "test", + "single_end": true + }, + "test.Signal.UniqueMultiple.str1.out.wig:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.3" + }, + "timestamp": "2026-02-09T09:28:46.515275982" + }, + "homo_sapiens_chimeric - 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.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "11": [ + [ + { + "id": "test", + "single_end": true + }, + "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "12": [ + [ + { + "id": "test", + "single_end": true + }, + "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "13": [ + [ + { + "id": "test", + "single_end": true + }, + "test.Chimeric.out.junction:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "14": [ + [ + { + "id": "test", + "single_end": true + }, + "test.out.sam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "15": [ + [ + { + "id": "test", + "single_end": true + }, + "test.Signal.UniqueMultiple.str1.out.wig:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "16": [ + [ + { + "id": "test", + "single_end": true + }, + "test.Signal.UniqueMultiple.str1.out.bg:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "17": [ + + ], + "18": [ + + ], + "19": [ + [ + "PARABRICKS_RNAFQ2BAM", + "parabricks", + "4.6.0-1" + ] + ], + "2": [ + [ + { + "id": "test", + "single_end": true + }, + "test.Log.progress.out:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + [ + { + "id": "test", + "single_end": true + }, + "test.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "4": [ + [ + { + "id": "test", + "single_end": true + }, + "test.bam.bai: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.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "7": [ + [ + { + "id": "test", + "single_end": true + }, + "test.toTranscriptome.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "8": [ + [ + { + "id": "test", + "single_end": true + }, + "test.Aligned.unsort.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "9": [ + [ + { + "id": "test", + "single_end": true + }, + [ + "test.unmapped_1.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test.unmapped_2.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "bai": [ + [ + { + "id": "test", + "single_end": true + }, + "test.bam.bai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "bam": [ + [ + { + "id": "test", + "single_end": true + }, + "test.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "bam_sorted": [ + [ + { + "id": "test", + "single_end": true + }, + [ + "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "bam_sorted_aligned": [ + [ + { + "id": "test", + "single_end": true + }, + "test.Aligned.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" + ] + ], + "duplicate_metrics": [ + + ], + "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" + ] + ], + "qc_metrics": [ + + ], + "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_parabricks": [ + [ + "PARABRICKS_RNAFQ2BAM", + "parabricks", + "4.6.0-1" + ] + ], + "wig": [ + [ + { + "id": "test", + "single_end": true + }, + "test.Signal.UniqueMultiple.str1.out.wig:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.3" + }, + "timestamp": "2026-02-09T09:29:54.340122816" + }, + "homo_sapiens": { + "content": [ + "test.Log.final.out", + { + "versions_parabricks": [ + [ + "PARABRICKS_RNAFQ2BAM", + "parabricks", + "4.6.0-1" + ] + ] + }, + "220938db5c88cdfcb9d98e10630a9e31" + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.3" + }, + "timestamp": "2026-02-09T09:27:02.147122093" + }, + "homo_sapiens_chimeric": { + "content": [ + "220938db5c88cdfcb9d98e10630a9e31", + "test.bam.bai", + "test.Chimeric.out.junction", + { + "versions_parabricks": [ + [ + "PARABRICKS_RNAFQ2BAM", + "parabricks", + "4.6.0-1" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.3" + }, + "timestamp": "2026-02-09T09:29:44.105218347" + } +} \ No newline at end of file diff --git a/modules/nf-core/parabricks/rnafq2bam/tests/nextflow.config b/modules/nf-core/parabricks/rnafq2bam/tests/nextflow.config new file mode 100644 index 000000000..7e550187c --- /dev/null +++ b/modules/nf-core/parabricks/rnafq2bam/tests/nextflow.config @@ -0,0 +1,18 @@ +process { + // Parabricks rnafq2bam requires more memory + withName: 'PARABRICKS_RNAFQ2BAM' { + ext.args = params.module_args + accelerator.request = 1 + memory = 30.GB + } + + // Parabricks requires STAR version 2.7.2a + withName: 'STAR_GENOMEGENERATE' { + conda = 'bioconda::htslib=1.21 bioconda::samtools=1.21 bioconda::star=2.7.2a conda-forge::gawk=5.1.0' + container = { + (workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container) + ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/90/90e5dfb6f785d74101a62b11668bb53a7020647ddda2df959c7c18023ee5c591/data' + : 'community.wave.seqera.io/library/htslib_samtools_star_gawk:4de2f983041d42e6' + } + } +} diff --git a/modules/nf-core/picard/markduplicates/environment.yml b/modules/nf-core/picard/markduplicates/environment.yml index 5f919a9a9..b4ac4fe08 100644 --- a/modules/nf-core/picard/markduplicates/environment.yml +++ b/modules/nf-core/picard/markduplicates/environment.yml @@ -1,5 +1,8 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json channels: - conda-forge - bioconda dependencies: - - bioconda::picard=3.1.1 + # renovate: datasource=conda depName=bioconda/picard + - bioconda::picard=3.4.0 diff --git a/modules/nf-core/picard/markduplicates/main.nf b/modules/nf-core/picard/markduplicates/main.nf index ad0b29636..10621e019 100644 --- a/modules/nf-core/picard/markduplicates/main.nf +++ b/modules/nf-core/picard/markduplicates/main.nf @@ -4,8 +4,8 @@ process PICARD_MARKDUPLICATES { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/picard:3.1.1--hdfd78af_0' : - 'biocontainers/picard:3.1.1--hdfd78af_0' }" + 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/08/0861295baa7c01fc593a9da94e82b44a729dcaf8da92be8e565da109aa549b25/data' : + 'community.wave.seqera.io/library/picard:3.4.0--e9963040df0a9bf6' }" input: tuple val(meta), path(reads) @@ -17,7 +17,7 @@ process PICARD_MARKDUPLICATES { tuple val(meta), path("*.bai") , emit: bai, optional: true tuple val(meta), path("*.cram"), emit: cram, optional: true tuple val(meta), path("*.metrics.txt"), emit: metrics - path "versions.yml" , emit: versions + tuple val("${task.process}"), val('picard'), eval("picard MarkDuplicates --version 2>&1 | sed -n 's/^Version:*//p'"), topic: versions, emit: versions_picard when: task.ext.when == null || task.ext.when @@ -46,10 +46,6 @@ process PICARD_MARKDUPLICATES { $reference \\ --METRICS_FILE ${prefix}.MarkDuplicates.metrics.txt - cat <<-END_VERSIONS > versions.yml - "${task.process}": - picard: \$(echo \$(picard MarkDuplicates --version 2>&1) | grep -o 'Version:.*' | cut -f2- -d:) - END_VERSIONS """ stub: @@ -58,11 +54,8 @@ process PICARD_MARKDUPLICATES { if ("$reads" == "${prefix}.${suffix}") error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!" """ touch ${prefix}.${suffix} + touch ${prefix}.${suffix}.bai touch ${prefix}.MarkDuplicates.metrics.txt - cat <<-END_VERSIONS > versions.yml - "${task.process}": - picard: \$(echo \$(picard MarkDuplicates --version 2>&1) | grep -o 'Version:.*' | cut -f2- -d:) - END_VERSIONS """ } diff --git a/modules/nf-core/picard/markduplicates/meta.yml b/modules/nf-core/picard/markduplicates/meta.yml index 1f0ffe16c..0ec99c7f1 100644 --- a/modules/nf-core/picard/markduplicates/meta.yml +++ b/modules/nf-core/picard/markduplicates/meta.yml @@ -15,60 +15,107 @@ tools: homepage: https://broadinstitute.github.io/picard/ documentation: https://broadinstitute.github.io/picard/ licence: ["MIT"] + identifier: biotools:picard_tools input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - reads: - type: file - description: Sequence reads file, can be SAM/BAM/CRAM format - pattern: "*.{bam,cram,sam}" - - meta2: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'genome' ] - - fasta: - type: file - description: Reference genome fasta file, required for CRAM input - pattern: "*.{fasta,fa}" - - meta3: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'genome' ] - - fai: - type: file - description: Reference genome fasta index - pattern: "*.{fai}" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - reads: + type: file + description: Sequence reads file, can be SAM/BAM/CRAM format + pattern: "*.{bam,cram,sam}" + ontologies: [] + - - meta2: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] + - fasta: + type: file + description: Reference genome fasta file, required for CRAM input + pattern: "*.{fasta,fa}" + ontologies: [] + - - meta3: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] + - fai: + type: file + description: Reference genome fasta index + pattern: "*.{fai}" + ontologies: [] output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - bam: - type: file - description: BAM file with duplicate reads marked/removed - pattern: "*.{bam}" - - bai: - type: file - description: An optional BAM index file. If desired, --CREATE_INDEX must be passed as a flag - pattern: "*.{bai}" - - cram: - type: file - description: Output CRAM file - pattern: "*.{cram}" - - metrics: - type: file - description: Duplicate metrics file generated by picard - pattern: "*.{metrics.txt}" - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + bam: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.bam": + type: file + description: BAM file with duplicate reads marked/removed + pattern: "*.{bam}" + ontologies: [] + bai: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.bai": + type: file + description: An optional BAM index file. If desired, --CREATE_INDEX must be + passed as a flag + pattern: "*.{bai}" + ontologies: [] + cram: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.cram": + type: file + description: Output CRAM file + pattern: "*.{cram}" + ontologies: [] + metrics: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.metrics.txt": + type: file + description: Duplicate metrics file generated by picard + pattern: "*.{metrics.txt}" + ontologies: [] + versions_picard: + - - ${task.process}: + type: string + description: The process the versions were collected from + - picard: + type: string + description: The tool name + - "picard MarkDuplicates --version 2>&1 | sed -n 's/^Version:*//p'": + type: string + description: The command used to generate the version of the tool + +topics: + versions: + - - ${task.process}: + type: string + description: The process the versions were collected from + - picard: + type: string + description: The tool name + - "picard MarkDuplicates --version 2>&1 | sed -n 's/^Version:*//p'": + type: string + description: The command used to generate the version of the tool + authors: - "@drpatelh" - "@projectoriented" diff --git a/modules/nf-core/picard/markduplicates/picard-markduplicates.diff b/modules/nf-core/picard/markduplicates/picard-markduplicates.diff deleted file mode 100644 index 0daa9399e..000000000 --- a/modules/nf-core/picard/markduplicates/picard-markduplicates.diff +++ /dev/null @@ -1,191 +0,0 @@ -Changes in module 'nf-core/picard/markduplicates' -Changes in 'picard/markduplicates/main.nf': ---- modules/nf-core/picard/markduplicates/main.nf -+++ modules/nf-core/picard/markduplicates/main.nf -@@ -4,8 +4,8 @@ - - conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? -- 'https://depot.galaxyproject.org/singularity/picard:3.2.0--hdfd78af_0' : -- 'biocontainers/picard:3.2.0--hdfd78af_0' }" -+ 'https://depot.galaxyproject.org/singularity/picard:3.1.1--hdfd78af_0' : -+ 'biocontainers/picard:3.1.1--hdfd78af_0' }" - - input: - tuple val(meta), path(reads) - -'modules/nf-core/picard/markduplicates/meta.yml' is unchanged -Changes in 'picard/markduplicates/environment.yml': ---- modules/nf-core/picard/markduplicates/environment.yml -+++ modules/nf-core/picard/markduplicates/environment.yml -@@ -2,4 +2,4 @@ - - conda-forge - - bioconda - dependencies: -- - bioconda::picard=3.2.0 -+ - bioconda::picard=3.1.1 - -Changes in 'picard/markduplicates/tests/main.nf.test.snap': ---- modules/nf-core/picard/markduplicates/tests/main.nf.test.snap -+++ modules/nf-core/picard/markduplicates/tests/main.nf.test.snap -@@ -27,7 +27,7 @@ - ] - ], - "4": [ -- "versions.yml:md5,33dd4b32140e801e0d2e50aeefd0788d" -+ "versions.yml:md5,b699af51b1956f3810f8a7c066e0ab17" - ], - "bai": [ - -@@ -54,7 +54,7 @@ - ] - ], - "versions": [ -- "versions.yml:md5,33dd4b32140e801e0d2e50aeefd0788d" -+ "versions.yml:md5,b699af51b1956f3810f8a7c066e0ab17" - ] - } - ], -@@ -62,7 +62,7 @@ - "nf-test": "0.9.0", - "nextflow": "24.04.3" - }, -- "timestamp": "2024-07-22T11:56:32.025869" -+ "timestamp": "2024-07-22T19:34:20.663558" - }, - "sarscov2 [unsorted bam] - stub": { - "content": [ -@@ -92,7 +92,7 @@ - ] - ], - "4": [ -- "versions.yml:md5,33dd4b32140e801e0d2e50aeefd0788d" -+ "versions.yml:md5,b699af51b1956f3810f8a7c066e0ab17" - ], - "bai": [ - -@@ -119,7 +119,7 @@ - ] - ], - "versions": [ -- "versions.yml:md5,33dd4b32140e801e0d2e50aeefd0788d" -+ "versions.yml:md5,b699af51b1956f3810f8a7c066e0ab17" - ] - } - ], -@@ -127,61 +127,61 @@ - "nf-test": "0.9.0", - "nextflow": "24.04.3" - }, -- "timestamp": "2024-07-22T11:56:20.497105" -+ "timestamp": "2024-07-22T19:34:01.021052" - }, - "sarscov2 [unsorted bam]": { - "content": [ - "test.marked.bam", - [ - "## htsjdk.samtools.metrics.StringHeader", -- "# MarkDuplicates --INPUT test.paired_end.bam --OUTPUT test.marked.bam --METRICS_FILE test.marked.MarkDuplicates.metrics.txt --ASSUME_SORT_ORDER queryname --MAX_SEQUENCES_FOR_DISK_READ_ENDS_MAP 50000 --MAX_FILE_HANDLES_FOR_READ_ENDS_MAP 8000 --SORTING_COLLECTION_SIZE_RATIO 0.25 --TAG_DUPLICATE_SET_MEMBERS false --REMOVE_SEQUENCING_DUPLICATES false --TAGGING_POLICY DontTag --CLEAR_DT true --DUPLEX_UMI false --FLOW_MODE false --FLOW_DUP_STRATEGY FLOW_QUALITY_SUM_STRATEGY --USE_END_IN_UNPAIRED_READS false --USE_UNPAIRED_CLIPPED_END false --UNPAIRED_END_UNCERTAINTY 0 --UNPAIRED_START_UNCERTAINTY 0 --FLOW_SKIP_FIRST_N_FLOWS 0 --FLOW_Q_IS_KNOWN_END false --FLOW_EFFECTIVE_QUALITY_THRESHOLD 15 --ADD_PG_TAG_TO_READS true --REMOVE_DUPLICATES false --ASSUME_SORTED false --DUPLICATE_SCORING_STRATEGY SUM_OF_BASE_QUALITIES --PROGRAM_RECORD_ID MarkDuplicates --PROGRAM_GROUP_NAME MarkDuplicates --READ_NAME_REGEX --OPTICAL_DUPLICATE_PIXEL_DISTANCE 100 --MAX_OPTICAL_DUPLICATE_SET_SIZE 300000 --VERBOSITY INFO --QUIET false --VALIDATION_STRINGENCY STRICT --COMPRESSION_LEVEL 5 --MAX_RECORDS_IN_RAM 500000 --CREATE_INDEX false --CREATE_MD5_FILE false --help false --version false --showHidden false --USE_JDK_DEFLATER false --USE_JDK_INFLATER false", -+ "# MarkDuplicates --INPUT test.paired_end.bam --OUTPUT test.marked.bam --METRICS_FILE test.marked.MarkDuplicates.metrics.txt --ASSUME_SORT_ORDER queryname --MAX_SEQUENCES_FOR_DISK_READ_ENDS_MAP 50000 --MAX_FILE_HANDLES_FOR_READ_ENDS_MAP 8000 --SORTING_COLLECTION_SIZE_RATIO 0.25 --TAG_DUPLICATE_SET_MEMBERS false --REMOVE_SEQUENCING_DUPLICATES false --TAGGING_POLICY DontTag --CLEAR_DT true --DUPLEX_UMI false --FLOW_MODE false --FLOW_QUALITY_SUM_STRATEGY false --USE_END_IN_UNPAIRED_READS false --USE_UNPAIRED_CLIPPED_END false --UNPAIRED_END_UNCERTAINTY 0 --FLOW_SKIP_FIRST_N_FLOWS 0 --FLOW_Q_IS_KNOWN_END false --FLOW_EFFECTIVE_QUALITY_THRESHOLD 15 --ADD_PG_TAG_TO_READS true --REMOVE_DUPLICATES false --ASSUME_SORTED false --DUPLICATE_SCORING_STRATEGY SUM_OF_BASE_QUALITIES --PROGRAM_RECORD_ID MarkDuplicates --PROGRAM_GROUP_NAME MarkDuplicates --READ_NAME_REGEX --OPTICAL_DUPLICATE_PIXEL_DISTANCE 100 --MAX_OPTICAL_DUPLICATE_SET_SIZE 300000 --VERBOSITY INFO --QUIET false --VALIDATION_STRINGENCY STRICT --COMPRESSION_LEVEL 5 --MAX_RECORDS_IN_RAM 500000 --CREATE_INDEX false --CREATE_MD5_FILE false --help false --version false --showHidden false --USE_JDK_DEFLATER false --USE_JDK_INFLATER false", - "## htsjdk.samtools.metrics.StringHeader" - ], - [ -- "versions.yml:md5,33dd4b32140e801e0d2e50aeefd0788d" -+ "versions.yml:md5,b699af51b1956f3810f8a7c066e0ab17" - ] - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" - }, -- "timestamp": "2024-07-22T11:50:14.881666" -+ "timestamp": "2024-07-22T19:32:49.777427" - }, - "sarscov2 [sorted bam]": { - "content": [ - "test.marked.bam", - [ - "## htsjdk.samtools.metrics.StringHeader", -- "# MarkDuplicates --INPUT test.paired_end.sorted.bam --OUTPUT test.marked.bam --METRICS_FILE test.marked.MarkDuplicates.metrics.txt --ASSUME_SORT_ORDER queryname --MAX_SEQUENCES_FOR_DISK_READ_ENDS_MAP 50000 --MAX_FILE_HANDLES_FOR_READ_ENDS_MAP 8000 --SORTING_COLLECTION_SIZE_RATIO 0.25 --TAG_DUPLICATE_SET_MEMBERS false --REMOVE_SEQUENCING_DUPLICATES false --TAGGING_POLICY DontTag --CLEAR_DT true --DUPLEX_UMI false --FLOW_MODE false --FLOW_DUP_STRATEGY FLOW_QUALITY_SUM_STRATEGY --USE_END_IN_UNPAIRED_READS false --USE_UNPAIRED_CLIPPED_END false --UNPAIRED_END_UNCERTAINTY 0 --UNPAIRED_START_UNCERTAINTY 0 --FLOW_SKIP_FIRST_N_FLOWS 0 --FLOW_Q_IS_KNOWN_END false --FLOW_EFFECTIVE_QUALITY_THRESHOLD 15 --ADD_PG_TAG_TO_READS true --REMOVE_DUPLICATES false --ASSUME_SORTED false --DUPLICATE_SCORING_STRATEGY SUM_OF_BASE_QUALITIES --PROGRAM_RECORD_ID MarkDuplicates --PROGRAM_GROUP_NAME MarkDuplicates --READ_NAME_REGEX --OPTICAL_DUPLICATE_PIXEL_DISTANCE 100 --MAX_OPTICAL_DUPLICATE_SET_SIZE 300000 --VERBOSITY INFO --QUIET false --VALIDATION_STRINGENCY STRICT --COMPRESSION_LEVEL 5 --MAX_RECORDS_IN_RAM 500000 --CREATE_INDEX false --CREATE_MD5_FILE false --help false --version false --showHidden false --USE_JDK_DEFLATER false --USE_JDK_INFLATER false", -+ "# MarkDuplicates --INPUT test.paired_end.sorted.bam --OUTPUT test.marked.bam --METRICS_FILE test.marked.MarkDuplicates.metrics.txt --ASSUME_SORT_ORDER queryname --MAX_SEQUENCES_FOR_DISK_READ_ENDS_MAP 50000 --MAX_FILE_HANDLES_FOR_READ_ENDS_MAP 8000 --SORTING_COLLECTION_SIZE_RATIO 0.25 --TAG_DUPLICATE_SET_MEMBERS false --REMOVE_SEQUENCING_DUPLICATES false --TAGGING_POLICY DontTag --CLEAR_DT true --DUPLEX_UMI false --FLOW_MODE false --FLOW_QUALITY_SUM_STRATEGY false --USE_END_IN_UNPAIRED_READS false --USE_UNPAIRED_CLIPPED_END false --UNPAIRED_END_UNCERTAINTY 0 --FLOW_SKIP_FIRST_N_FLOWS 0 --FLOW_Q_IS_KNOWN_END false --FLOW_EFFECTIVE_QUALITY_THRESHOLD 15 --ADD_PG_TAG_TO_READS true --REMOVE_DUPLICATES false --ASSUME_SORTED false --DUPLICATE_SCORING_STRATEGY SUM_OF_BASE_QUALITIES --PROGRAM_RECORD_ID MarkDuplicates --PROGRAM_GROUP_NAME MarkDuplicates --READ_NAME_REGEX --OPTICAL_DUPLICATE_PIXEL_DISTANCE 100 --MAX_OPTICAL_DUPLICATE_SET_SIZE 300000 --VERBOSITY INFO --QUIET false --VALIDATION_STRINGENCY STRICT --COMPRESSION_LEVEL 5 --MAX_RECORDS_IN_RAM 500000 --CREATE_INDEX false --CREATE_MD5_FILE false --help false --version false --showHidden false --USE_JDK_DEFLATER false --USE_JDK_INFLATER false", - "## htsjdk.samtools.metrics.StringHeader" - ], - [ -- "versions.yml:md5,33dd4b32140e801e0d2e50aeefd0788d" -+ "versions.yml:md5,b699af51b1956f3810f8a7c066e0ab17" - ] - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" - }, -- "timestamp": "2024-07-22T11:52:03.11428" -+ "timestamp": "2024-07-22T19:33:14.462596" - }, - "homo_sapiens [cram]": { - "content": [ - "test.marked.cram", - [ - "## htsjdk.samtools.metrics.StringHeader", -- "# MarkDuplicates --INPUT test.paired_end.sorted.cram --OUTPUT test.marked.cram --METRICS_FILE test.marked.MarkDuplicates.metrics.txt --ASSUME_SORT_ORDER queryname --REFERENCE_SEQUENCE genome.fasta --MAX_SEQUENCES_FOR_DISK_READ_ENDS_MAP 50000 --MAX_FILE_HANDLES_FOR_READ_ENDS_MAP 8000 --SORTING_COLLECTION_SIZE_RATIO 0.25 --TAG_DUPLICATE_SET_MEMBERS false --REMOVE_SEQUENCING_DUPLICATES false --TAGGING_POLICY DontTag --CLEAR_DT true --DUPLEX_UMI false --FLOW_MODE false --FLOW_DUP_STRATEGY FLOW_QUALITY_SUM_STRATEGY --USE_END_IN_UNPAIRED_READS false --USE_UNPAIRED_CLIPPED_END false --UNPAIRED_END_UNCERTAINTY 0 --UNPAIRED_START_UNCERTAINTY 0 --FLOW_SKIP_FIRST_N_FLOWS 0 --FLOW_Q_IS_KNOWN_END false --FLOW_EFFECTIVE_QUALITY_THRESHOLD 15 --ADD_PG_TAG_TO_READS true --REMOVE_DUPLICATES false --ASSUME_SORTED false --DUPLICATE_SCORING_STRATEGY SUM_OF_BASE_QUALITIES --PROGRAM_RECORD_ID MarkDuplicates --PROGRAM_GROUP_NAME MarkDuplicates --READ_NAME_REGEX --OPTICAL_DUPLICATE_PIXEL_DISTANCE 100 --MAX_OPTICAL_DUPLICATE_SET_SIZE 300000 --VERBOSITY INFO --QUIET false --VALIDATION_STRINGENCY STRICT --COMPRESSION_LEVEL 5 --MAX_RECORDS_IN_RAM 500000 --CREATE_INDEX false --CREATE_MD5_FILE false --help false --version false --showHidden false --USE_JDK_DEFLATER false --USE_JDK_INFLATER false", -+ "# MarkDuplicates --INPUT test.paired_end.sorted.cram --OUTPUT test.marked.cram --METRICS_FILE test.marked.MarkDuplicates.metrics.txt --ASSUME_SORT_ORDER queryname --REFERENCE_SEQUENCE genome.fasta --MAX_SEQUENCES_FOR_DISK_READ_ENDS_MAP 50000 --MAX_FILE_HANDLES_FOR_READ_ENDS_MAP 8000 --SORTING_COLLECTION_SIZE_RATIO 0.25 --TAG_DUPLICATE_SET_MEMBERS false --REMOVE_SEQUENCING_DUPLICATES false --TAGGING_POLICY DontTag --CLEAR_DT true --DUPLEX_UMI false --FLOW_MODE false --FLOW_QUALITY_SUM_STRATEGY false --USE_END_IN_UNPAIRED_READS false --USE_UNPAIRED_CLIPPED_END false --UNPAIRED_END_UNCERTAINTY 0 --FLOW_SKIP_FIRST_N_FLOWS 0 --FLOW_Q_IS_KNOWN_END false --FLOW_EFFECTIVE_QUALITY_THRESHOLD 15 --ADD_PG_TAG_TO_READS true --REMOVE_DUPLICATES false --ASSUME_SORTED false --DUPLICATE_SCORING_STRATEGY SUM_OF_BASE_QUALITIES --PROGRAM_RECORD_ID MarkDuplicates --PROGRAM_GROUP_NAME MarkDuplicates --READ_NAME_REGEX --OPTICAL_DUPLICATE_PIXEL_DISTANCE 100 --MAX_OPTICAL_DUPLICATE_SET_SIZE 300000 --VERBOSITY INFO --QUIET false --VALIDATION_STRINGENCY STRICT --COMPRESSION_LEVEL 5 --MAX_RECORDS_IN_RAM 500000 --CREATE_INDEX false --CREATE_MD5_FILE false --help false --version false --showHidden false --USE_JDK_DEFLATER false --USE_JDK_INFLATER false", - "## htsjdk.samtools.metrics.StringHeader" - ], - [ -- "versions.yml:md5,33dd4b32140e801e0d2e50aeefd0788d" -+ "versions.yml:md5,b699af51b1956f3810f8a7c066e0ab17" - ] - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" - }, -- "timestamp": "2024-07-22T11:53:05.403139" -+ "timestamp": "2024-07-22T19:33:40.215159" - }, - "homo_sapiens [cram] - stub": { - "content": [ -@@ -211,7 +211,7 @@ - ] - ], - "4": [ -- "versions.yml:md5,33dd4b32140e801e0d2e50aeefd0788d" -+ "versions.yml:md5,b699af51b1956f3810f8a7c066e0ab17" - ], - "bai": [ - -@@ -238,7 +238,7 @@ - ] - ], - "versions": [ -- "versions.yml:md5,33dd4b32140e801e0d2e50aeefd0788d" -+ "versions.yml:md5,b699af51b1956f3810f8a7c066e0ab17" - ] - } - ], -@@ -246,6 +246,6 @@ - "nf-test": "0.9.0", - "nextflow": "24.04.3" - }, -- "timestamp": "2024-07-22T11:56:43.438188" -+ "timestamp": "2024-07-22T19:34:51.753515" - } - } -'modules/nf-core/picard/markduplicates/tests/nextflow.config' is unchanged -Changes in 'picard/markduplicates/tests/main.nf.test': ---- modules/nf-core/picard/markduplicates/tests/main.nf.test -+++ modules/nf-core/picard/markduplicates/tests/main.nf.test -@@ -4,10 +4,6 @@ - script "../main.nf" - process "PICARD_MARKDUPLICATES" - config "./nextflow.config" -- tag "modules" -- tag "modules_nfcore" -- tag "picard" -- tag "picard/markduplicates" - - test("sarscov2 [unsorted bam]") { - - -'modules/nf-core/picard/markduplicates/tests/tags.yml' was removed -************************************************************ diff --git a/modules/nf-core/picard/markduplicates/tests/main.nf.test b/modules/nf-core/picard/markduplicates/tests/main.nf.test index 1abea33e3..e18723be0 100644 --- a/modules/nf-core/picard/markduplicates/tests/main.nf.test +++ b/modules/nf-core/picard/markduplicates/tests/main.nf.test @@ -4,6 +4,10 @@ nextflow_process { script "../main.nf" process "PICARD_MARKDUPLICATES" config "./nextflow.config" + tag "modules" + tag "modules_nfcore" + tag "picard" + tag "picard/markduplicates" test("sarscov2 [unsorted bam]") { @@ -26,7 +30,7 @@ nextflow_process { { assert snapshot( file(process.out.bam[0][1]).name, path(process.out.metrics.get(0).get(1)).readLines()[0..2], - process.out.versions) + process.out.findAll { key, val -> key.startsWith("versions") }) .match() } ) } @@ -53,7 +57,7 @@ nextflow_process { { assert snapshot( file(process.out.bam[0][1]).name, path(process.out.metrics.get(0).get(1)).readLines()[0..2], - process.out.versions) + process.out.findAll { key, val -> key.startsWith("versions") }) .match() } ) } @@ -86,7 +90,7 @@ nextflow_process { { assert snapshot( file(process.out.cram[0][1]).name, path(process.out.metrics.get(0).get(1)).readLines()[0..2], - process.out.versions) + process.out.findAll { key, val -> key.startsWith("versions") }) .match() } ) } diff --git a/modules/nf-core/picard/markduplicates/tests/main.nf.test.snap b/modules/nf-core/picard/markduplicates/tests/main.nf.test.snap index 1a6598aa9..848013849 100644 --- a/modules/nf-core/picard/markduplicates/tests/main.nf.test.snap +++ b/modules/nf-core/picard/markduplicates/tests/main.nf.test.snap @@ -12,7 +12,13 @@ ] ], "1": [ - + [ + { + "id": "test", + "single_end": false + }, + "test.marked.bam.bai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "2": [ @@ -27,10 +33,20 @@ ] ], "4": [ - "versions.yml:md5,b699af51b1956f3810f8a7c066e0ab17" + [ + "PICARD_MARKDUPLICATES", + "picard", + "3.4.0" + ] ], "bai": [ - + [ + { + "id": "test", + "single_end": false + }, + "test.marked.bam.bai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "bam": [ [ @@ -53,16 +69,20 @@ "test.marked.MarkDuplicates.metrics.txt:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "versions": [ - "versions.yml:md5,b699af51b1956f3810f8a7c066e0ab17" + "versions_picard": [ + [ + "PICARD_MARKDUPLICATES", + "picard", + "3.4.0" + ] ] } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2024-07-22T19:34:20.663558" + "timestamp": "2026-02-02T11:46:02.077382134" }, "sarscov2 [unsorted bam] - stub": { "content": [ @@ -77,7 +97,13 @@ ] ], "1": [ - + [ + { + "id": "test", + "single_end": false + }, + "test.marked.bam.bai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "2": [ @@ -92,10 +118,20 @@ ] ], "4": [ - "versions.yml:md5,b699af51b1956f3810f8a7c066e0ab17" + [ + "PICARD_MARKDUPLICATES", + "picard", + "3.4.0" + ] ], "bai": [ - + [ + { + "id": "test", + "single_end": false + }, + "test.marked.bam.bai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "bam": [ [ @@ -118,70 +154,92 @@ "test.marked.MarkDuplicates.metrics.txt:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "versions": [ - "versions.yml:md5,b699af51b1956f3810f8a7c066e0ab17" + "versions_picard": [ + [ + "PICARD_MARKDUPLICATES", + "picard", + "3.4.0" + ] ] } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2024-07-22T19:34:01.021052" + "timestamp": "2026-02-02T11:45:49.985589186" }, "sarscov2 [unsorted bam]": { "content": [ "test.marked.bam", [ "## htsjdk.samtools.metrics.StringHeader", - "# MarkDuplicates --INPUT test.paired_end.bam --OUTPUT test.marked.bam --METRICS_FILE test.marked.MarkDuplicates.metrics.txt --ASSUME_SORT_ORDER queryname --MAX_SEQUENCES_FOR_DISK_READ_ENDS_MAP 50000 --MAX_FILE_HANDLES_FOR_READ_ENDS_MAP 8000 --SORTING_COLLECTION_SIZE_RATIO 0.25 --TAG_DUPLICATE_SET_MEMBERS false --REMOVE_SEQUENCING_DUPLICATES false --TAGGING_POLICY DontTag --CLEAR_DT true --DUPLEX_UMI false --FLOW_MODE false --FLOW_QUALITY_SUM_STRATEGY false --USE_END_IN_UNPAIRED_READS false --USE_UNPAIRED_CLIPPED_END false --UNPAIRED_END_UNCERTAINTY 0 --FLOW_SKIP_FIRST_N_FLOWS 0 --FLOW_Q_IS_KNOWN_END false --FLOW_EFFECTIVE_QUALITY_THRESHOLD 15 --ADD_PG_TAG_TO_READS true --REMOVE_DUPLICATES false --ASSUME_SORTED false --DUPLICATE_SCORING_STRATEGY SUM_OF_BASE_QUALITIES --PROGRAM_RECORD_ID MarkDuplicates --PROGRAM_GROUP_NAME MarkDuplicates --READ_NAME_REGEX --OPTICAL_DUPLICATE_PIXEL_DISTANCE 100 --MAX_OPTICAL_DUPLICATE_SET_SIZE 300000 --VERBOSITY INFO --QUIET false --VALIDATION_STRINGENCY STRICT --COMPRESSION_LEVEL 5 --MAX_RECORDS_IN_RAM 500000 --CREATE_INDEX false --CREATE_MD5_FILE false --help false --version false --showHidden false --USE_JDK_DEFLATER false --USE_JDK_INFLATER false", + "# MarkDuplicates --INPUT test.paired_end.bam --OUTPUT test.marked.bam --METRICS_FILE test.marked.MarkDuplicates.metrics.txt --ASSUME_SORT_ORDER queryname --MAX_SEQUENCES_FOR_DISK_READ_ENDS_MAP 50000 --MAX_FILE_HANDLES_FOR_READ_ENDS_MAP 8000 --SORTING_COLLECTION_SIZE_RATIO 0.25 --TAG_DUPLICATE_SET_MEMBERS false --REMOVE_SEQUENCING_DUPLICATES false --TAGGING_POLICY DontTag --CLEAR_DT true --DUPLEX_UMI false --FLOW_MODE false --FLOW_DUP_STRATEGY FLOW_QUALITY_SUM_STRATEGY --FLOW_USE_END_IN_UNPAIRED_READS false --FLOW_USE_UNPAIRED_CLIPPED_END false --FLOW_UNPAIRED_END_UNCERTAINTY 0 --FLOW_UNPAIRED_START_UNCERTAINTY 0 --FLOW_SKIP_FIRST_N_FLOWS 0 --FLOW_Q_IS_KNOWN_END false --FLOW_EFFECTIVE_QUALITY_THRESHOLD 15 --ADD_PG_TAG_TO_READS true --REMOVE_DUPLICATES false --ASSUME_SORTED false --DUPLICATE_SCORING_STRATEGY SUM_OF_BASE_QUALITIES --PROGRAM_RECORD_ID MarkDuplicates --PROGRAM_GROUP_NAME MarkDuplicates --READ_NAME_REGEX --OPTICAL_DUPLICATE_PIXEL_DISTANCE 100 --MAX_OPTICAL_DUPLICATE_SET_SIZE 300000 --VERBOSITY INFO --QUIET false --VALIDATION_STRINGENCY STRICT --COMPRESSION_LEVEL 5 --MAX_RECORDS_IN_RAM 500000 --CREATE_INDEX false --CREATE_MD5_FILE false --help false --version false --showHidden false --USE_JDK_DEFLATER false --USE_JDK_INFLATER false", "## htsjdk.samtools.metrics.StringHeader" ], - [ - "versions.yml:md5,b699af51b1956f3810f8a7c066e0ab17" - ] + { + "versions_picard": [ + [ + "PICARD_MARKDUPLICATES", + "picard", + "3.4.0" + ] + ] + } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2024-07-22T19:32:49.777427" + "timestamp": "2026-02-02T11:42:49.704752548" }, "sarscov2 [sorted bam]": { "content": [ "test.marked.bam", [ "## htsjdk.samtools.metrics.StringHeader", - "# MarkDuplicates --INPUT test.paired_end.sorted.bam --OUTPUT test.marked.bam --METRICS_FILE test.marked.MarkDuplicates.metrics.txt --ASSUME_SORT_ORDER queryname --MAX_SEQUENCES_FOR_DISK_READ_ENDS_MAP 50000 --MAX_FILE_HANDLES_FOR_READ_ENDS_MAP 8000 --SORTING_COLLECTION_SIZE_RATIO 0.25 --TAG_DUPLICATE_SET_MEMBERS false --REMOVE_SEQUENCING_DUPLICATES false --TAGGING_POLICY DontTag --CLEAR_DT true --DUPLEX_UMI false --FLOW_MODE false --FLOW_QUALITY_SUM_STRATEGY false --USE_END_IN_UNPAIRED_READS false --USE_UNPAIRED_CLIPPED_END false --UNPAIRED_END_UNCERTAINTY 0 --FLOW_SKIP_FIRST_N_FLOWS 0 --FLOW_Q_IS_KNOWN_END false --FLOW_EFFECTIVE_QUALITY_THRESHOLD 15 --ADD_PG_TAG_TO_READS true --REMOVE_DUPLICATES false --ASSUME_SORTED false --DUPLICATE_SCORING_STRATEGY SUM_OF_BASE_QUALITIES --PROGRAM_RECORD_ID MarkDuplicates --PROGRAM_GROUP_NAME MarkDuplicates --READ_NAME_REGEX --OPTICAL_DUPLICATE_PIXEL_DISTANCE 100 --MAX_OPTICAL_DUPLICATE_SET_SIZE 300000 --VERBOSITY INFO --QUIET false --VALIDATION_STRINGENCY STRICT --COMPRESSION_LEVEL 5 --MAX_RECORDS_IN_RAM 500000 --CREATE_INDEX false --CREATE_MD5_FILE false --help false --version false --showHidden false --USE_JDK_DEFLATER false --USE_JDK_INFLATER false", + "# MarkDuplicates --INPUT test.paired_end.sorted.bam --OUTPUT test.marked.bam --METRICS_FILE test.marked.MarkDuplicates.metrics.txt --ASSUME_SORT_ORDER queryname --MAX_SEQUENCES_FOR_DISK_READ_ENDS_MAP 50000 --MAX_FILE_HANDLES_FOR_READ_ENDS_MAP 8000 --SORTING_COLLECTION_SIZE_RATIO 0.25 --TAG_DUPLICATE_SET_MEMBERS false --REMOVE_SEQUENCING_DUPLICATES false --TAGGING_POLICY DontTag --CLEAR_DT true --DUPLEX_UMI false --FLOW_MODE false --FLOW_DUP_STRATEGY FLOW_QUALITY_SUM_STRATEGY --FLOW_USE_END_IN_UNPAIRED_READS false --FLOW_USE_UNPAIRED_CLIPPED_END false --FLOW_UNPAIRED_END_UNCERTAINTY 0 --FLOW_UNPAIRED_START_UNCERTAINTY 0 --FLOW_SKIP_FIRST_N_FLOWS 0 --FLOW_Q_IS_KNOWN_END false --FLOW_EFFECTIVE_QUALITY_THRESHOLD 15 --ADD_PG_TAG_TO_READS true --REMOVE_DUPLICATES false --ASSUME_SORTED false --DUPLICATE_SCORING_STRATEGY SUM_OF_BASE_QUALITIES --PROGRAM_RECORD_ID MarkDuplicates --PROGRAM_GROUP_NAME MarkDuplicates --READ_NAME_REGEX --OPTICAL_DUPLICATE_PIXEL_DISTANCE 100 --MAX_OPTICAL_DUPLICATE_SET_SIZE 300000 --VERBOSITY INFO --QUIET false --VALIDATION_STRINGENCY STRICT --COMPRESSION_LEVEL 5 --MAX_RECORDS_IN_RAM 500000 --CREATE_INDEX false --CREATE_MD5_FILE false --help false --version false --showHidden false --USE_JDK_DEFLATER false --USE_JDK_INFLATER false", "## htsjdk.samtools.metrics.StringHeader" ], - [ - "versions.yml:md5,b699af51b1956f3810f8a7c066e0ab17" - ] + { + "versions_picard": [ + [ + "PICARD_MARKDUPLICATES", + "picard", + "3.4.0" + ] + ] + } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2024-07-22T19:33:14.462596" + "timestamp": "2026-02-02T11:44:17.407572621" }, "homo_sapiens [cram]": { "content": [ "test.marked.cram", [ "## htsjdk.samtools.metrics.StringHeader", - "# MarkDuplicates --INPUT test.paired_end.sorted.cram --OUTPUT test.marked.cram --METRICS_FILE test.marked.MarkDuplicates.metrics.txt --ASSUME_SORT_ORDER queryname --REFERENCE_SEQUENCE genome.fasta --MAX_SEQUENCES_FOR_DISK_READ_ENDS_MAP 50000 --MAX_FILE_HANDLES_FOR_READ_ENDS_MAP 8000 --SORTING_COLLECTION_SIZE_RATIO 0.25 --TAG_DUPLICATE_SET_MEMBERS false --REMOVE_SEQUENCING_DUPLICATES false --TAGGING_POLICY DontTag --CLEAR_DT true --DUPLEX_UMI false --FLOW_MODE false --FLOW_QUALITY_SUM_STRATEGY false --USE_END_IN_UNPAIRED_READS false --USE_UNPAIRED_CLIPPED_END false --UNPAIRED_END_UNCERTAINTY 0 --FLOW_SKIP_FIRST_N_FLOWS 0 --FLOW_Q_IS_KNOWN_END false --FLOW_EFFECTIVE_QUALITY_THRESHOLD 15 --ADD_PG_TAG_TO_READS true --REMOVE_DUPLICATES false --ASSUME_SORTED false --DUPLICATE_SCORING_STRATEGY SUM_OF_BASE_QUALITIES --PROGRAM_RECORD_ID MarkDuplicates --PROGRAM_GROUP_NAME MarkDuplicates --READ_NAME_REGEX --OPTICAL_DUPLICATE_PIXEL_DISTANCE 100 --MAX_OPTICAL_DUPLICATE_SET_SIZE 300000 --VERBOSITY INFO --QUIET false --VALIDATION_STRINGENCY STRICT --COMPRESSION_LEVEL 5 --MAX_RECORDS_IN_RAM 500000 --CREATE_INDEX false --CREATE_MD5_FILE false --help false --version false --showHidden false --USE_JDK_DEFLATER false --USE_JDK_INFLATER false", + "# MarkDuplicates --INPUT test.paired_end.sorted.cram --OUTPUT test.marked.cram --METRICS_FILE test.marked.MarkDuplicates.metrics.txt --ASSUME_SORT_ORDER queryname --REFERENCE_SEQUENCE genome.fasta --MAX_SEQUENCES_FOR_DISK_READ_ENDS_MAP 50000 --MAX_FILE_HANDLES_FOR_READ_ENDS_MAP 8000 --SORTING_COLLECTION_SIZE_RATIO 0.25 --TAG_DUPLICATE_SET_MEMBERS false --REMOVE_SEQUENCING_DUPLICATES false --TAGGING_POLICY DontTag --CLEAR_DT true --DUPLEX_UMI false --FLOW_MODE false --FLOW_DUP_STRATEGY FLOW_QUALITY_SUM_STRATEGY --FLOW_USE_END_IN_UNPAIRED_READS false --FLOW_USE_UNPAIRED_CLIPPED_END false --FLOW_UNPAIRED_END_UNCERTAINTY 0 --FLOW_UNPAIRED_START_UNCERTAINTY 0 --FLOW_SKIP_FIRST_N_FLOWS 0 --FLOW_Q_IS_KNOWN_END false --FLOW_EFFECTIVE_QUALITY_THRESHOLD 15 --ADD_PG_TAG_TO_READS true --REMOVE_DUPLICATES false --ASSUME_SORTED false --DUPLICATE_SCORING_STRATEGY SUM_OF_BASE_QUALITIES --PROGRAM_RECORD_ID MarkDuplicates --PROGRAM_GROUP_NAME MarkDuplicates --READ_NAME_REGEX --OPTICAL_DUPLICATE_PIXEL_DISTANCE 100 --MAX_OPTICAL_DUPLICATE_SET_SIZE 300000 --VERBOSITY INFO --QUIET false --VALIDATION_STRINGENCY STRICT --COMPRESSION_LEVEL 5 --MAX_RECORDS_IN_RAM 500000 --CREATE_INDEX false --CREATE_MD5_FILE false --help false --version false --showHidden false --USE_JDK_DEFLATER false --USE_JDK_INFLATER false", "## htsjdk.samtools.metrics.StringHeader" ], - [ - "versions.yml:md5,b699af51b1956f3810f8a7c066e0ab17" - ] + { + "versions_picard": [ + [ + "PICARD_MARKDUPLICATES", + "picard", + "3.4.0" + ] + ] + } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2024-07-22T19:33:40.215159" + "timestamp": "2026-02-02T11:45:33.412603893" }, "homo_sapiens [cram] - stub": { "content": [ @@ -190,7 +248,13 @@ ], "1": [ - + [ + { + "id": "test", + "single_end": false + }, + "test.marked.cram.bai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "2": [ [ @@ -211,10 +275,20 @@ ] ], "4": [ - "versions.yml:md5,b699af51b1956f3810f8a7c066e0ab17" + [ + "PICARD_MARKDUPLICATES", + "picard", + "3.4.0" + ] ], "bai": [ - + [ + { + "id": "test", + "single_end": false + }, + "test.marked.cram.bai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "bam": [ @@ -237,15 +311,19 @@ "test.marked.MarkDuplicates.metrics.txt:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "versions": [ - "versions.yml:md5,b699af51b1956f3810f8a7c066e0ab17" + "versions_picard": [ + [ + "PICARD_MARKDUPLICATES", + "picard", + "3.4.0" + ] ] } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2024-07-22T19:34:51.753515" + "timestamp": "2026-02-02T11:46:18.599127485" } } \ No newline at end of file diff --git a/modules/nf-core/preseq/lcextrap/main.nf b/modules/nf-core/preseq/lcextrap/main.nf index 540a5fb27..7868884eb 100644 --- a/modules/nf-core/preseq/lcextrap/main.nf +++ b/modules/nf-core/preseq/lcextrap/main.nf @@ -14,7 +14,7 @@ process PRESEQ_LCEXTRAP { output: tuple val(meta), path("*.lc_extrap.txt"), emit: lc_extrap tuple val(meta), path("*.log") , emit: log - path "versions.yml" , emit: versions + tuple val("${task.process}"), val('preseq'), eval("preseq 2>&1 | sed -n 's/.*Version: \\(.*\\)/\\1/p'"), emit: versions_preseq, topic: versions when: task.ext.when == null || task.ext.when @@ -32,11 +32,6 @@ process PRESEQ_LCEXTRAP { -output ${prefix}.lc_extrap.txt \\ $bam cp .command.err ${prefix}.command.log - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - preseq: \$(echo \$(preseq 2>&1) | sed 's/^.*Version: //; s/Usage:.*\$//') - END_VERSIONS """ stub: @@ -44,10 +39,5 @@ process PRESEQ_LCEXTRAP { """ touch ${prefix}.lc_extrap.txt touch ${prefix}.command.log - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - preseq: \$(echo \$(preseq 2>&1) | sed 's/^.*Version: //; s/Usage:.*\$//') - END_VERSIONS """ } diff --git a/modules/nf-core/preseq/lcextrap/meta.yml b/modules/nf-core/preseq/lcextrap/meta.yml index 28fb449ca..bb3099522 100644 --- a/modules/nf-core/preseq/lcextrap/meta.yml +++ b/modules/nf-core/preseq/lcextrap/meta.yml @@ -24,9 +24,10 @@ input: type: file description: BAM/CRAM/SAM file pattern: "*.{bam,cram,sam}" + ontologies: [] output: - - lc_extrap: - - meta: + lc_extrap: + - - meta: type: map description: | Groovy Map containing sample information @@ -35,8 +36,9 @@ output: type: file description: File containing output of Preseq lcextrap pattern: "*.{lc_extrap.txt}" - - log: - - meta: + ontologies: [] + log: + - - meta: type: map description: | Groovy Map containing sample information @@ -45,11 +47,30 @@ output: type: file description: Log file containing stderr produced by Preseq pattern: "*.{log}" - - versions: - - versions.yml: - type: file - description: File containing software versions - pattern: "versions.yml" + ontologies: [] + versions_preseq: + - - ${task.process}: + type: string + description: The name of the process + - preseq: + type: string + description: The name of the tool + - "preseq 2>&1 | sed -n 's/.*Version: \\(.*\\)/\\1/p'": + type: eval + description: The expression to obtain the version of the tool + +topics: + versions: + - - ${task.process}: + type: string + description: The name of the process + - preseq: + type: string + description: The name of the tool + - "preseq 2>&1 | sed -n 's/.*Version: \\(.*\\)/\\1/p'": + type: eval + description: The expression to obtain the version of the tool + authors: - "@drpatelh" - "@edmundmiller" diff --git a/modules/nf-core/preseq/lcextrap/nextflow.config b/modules/nf-core/preseq/lcextrap/nextflow.config index 220496967..27e66dc30 100644 --- a/modules/nf-core/preseq/lcextrap/nextflow.config +++ b/modules/nf-core/preseq/lcextrap/nextflow.config @@ -1,21 +1,17 @@ -if (!params.skip_qc) { - if (!params.skip_preseq) { - process { - withName: 'PRESEQ_LCEXTRAP' { - ext.args = '-verbose -bam -seed 1 -seg_len 100000000' - publishDir = [ - [ - path: { "${params.outdir}/${params.aligner}/preseq" }, - mode: params.publish_dir_mode, - pattern: "*.txt" - ], - [ - path: { "${params.outdir}/${params.aligner}/preseq/log" }, - mode: params.publish_dir_mode, - pattern: "*.log" - ] - ] - } - } +process { + withName: 'PRESEQ_LCEXTRAP' { + ext.args = '-verbose -bam -seed 1 -seg_len 100000000' + publishDir = [ + [ + path: { "${params.outdir}/${params.aligner}/preseq" }, + mode: params.publish_dir_mode, + pattern: "*.txt" + ], + [ + path: { "${params.outdir}/${params.aligner}/preseq/log" }, + mode: params.publish_dir_mode, + pattern: "*.log" + ] + ] } } diff --git a/modules/nf-core/preseq/lcextrap/tests/main.nf.test b/modules/nf-core/preseq/lcextrap/tests/main.nf.test index 50e44157e..e3163ea07 100644 --- a/modules/nf-core/preseq/lcextrap/tests/main.nf.test +++ b/modules/nf-core/preseq/lcextrap/tests/main.nf.test @@ -3,6 +3,10 @@ nextflow_process { name "Test Process PRESEQ_LCEXTRAP" script "../main.nf" process "PRESEQ_LCEXTRAP" + tag "modules" + tag "modules_nfcore" + tag "preseq" + tag "preseq/lcextrap" test("sarscov2 - single_end") { when { @@ -19,9 +23,11 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(file(process.out.log[0][1]).name).match("single_end - log") }, - { assert snapshot(process.out.lc_extrap).match("single_end - lc_extrap") }, - { assert snapshot(process.out.versions).match("single_end - versions") } + { assert snapshot( + file(process.out.log[0][1]).name, + process.out.lc_extrap, + process.out.findAll { key, val -> key.startsWith('versions') } + ).match() } ) } } @@ -64,9 +70,11 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(file(process.out.log[0][1]).name).match("paired_end - log") }, - { assert snapshot(process.out.lc_extrap).match("paired_end - lc_extrap") }, - { assert snapshot(process.out.versions).match("paired_end - versions") } + { assert snapshot( + file(process.out.log[0][1]).name, + process.out.lc_extrap, + process.out.findAll { key, val -> key.startsWith('versions') } + ).match() } ) } } @@ -93,4 +101,4 @@ nextflow_process { ) } } -} \ No newline at end of file +} diff --git a/modules/nf-core/preseq/lcextrap/tests/main.nf.test.snap b/modules/nf-core/preseq/lcextrap/tests/main.nf.test.snap index c725d8e89..ad073de60 100644 --- a/modules/nf-core/preseq/lcextrap/tests/main.nf.test.snap +++ b/modules/nf-core/preseq/lcextrap/tests/main.nf.test.snap @@ -1,6 +1,7 @@ { - "single_end - lc_extrap": { + "sarscov2 - single_end": { "content": [ + "test.command.log", [ [ { @@ -9,35 +10,22 @@ }, "test.lc_extrap.txt:md5,1fa5cdd601079329618f61660bee00de" ] - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" - }, - "timestamp": "2023-11-23T17:20:40.735535" - }, - "paired_end - log": { - "content": [ - "test.command.log" - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" - }, - "timestamp": "2023-11-23T17:20:51.981746" - }, - "single_end - versions": { - "content": [ - [ - "versions.yml:md5,e099c02ff6a63c1dacc6c79fd3d0223e" - ] + ], + { + "versions_preseq": [ + [ + "PRESEQ_LCEXTRAP", + "preseq", + "3.2.0" + ] + ] + } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.3", + "nextflow": "25.10.3" }, - "timestamp": "2024-10-19T16:55:55.821665692" + "timestamp": "2026-02-02T14:35:59.779654786" }, "sarscov2 - single_end - stub": { "content": [ @@ -61,7 +49,11 @@ ] ], "2": [ - "versions.yml:md5,e099c02ff6a63c1dacc6c79fd3d0223e" + [ + "PRESEQ_LCEXTRAP", + "preseq", + "3.2.0" + ] ], "lc_extrap": [ [ @@ -81,41 +73,24 @@ "test.command.log:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "versions": [ - "versions.yml:md5,e099c02ff6a63c1dacc6c79fd3d0223e" + "versions_preseq": [ + [ + "PRESEQ_LCEXTRAP", + "preseq", + "3.2.0" + ] ] } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.3", + "nextflow": "25.10.3" }, - "timestamp": "2024-10-19T16:56:11.779385911" + "timestamp": "2026-02-02T14:36:05.164534216" }, - "paired_end - versions": { - "content": [ - [ - "versions.yml:md5,e099c02ff6a63c1dacc6c79fd3d0223e" - ] - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" - }, - "timestamp": "2024-10-19T16:56:31.353046182" - }, - "single_end - log": { - "content": [ - "test.command.log" - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" - }, - "timestamp": "2023-11-23T17:20:40.72985" - }, - "paired_end - lc_extrap": { + "sarscov2 - paired_end": { "content": [ + "test.command.log", [ [ { @@ -124,13 +99,22 @@ }, "test.lc_extrap.txt:md5,10e5ea860e87fb6f5dc10f4f20c62040" ] - ] + ], + { + "versions_preseq": [ + [ + "PRESEQ_LCEXTRAP", + "preseq", + "3.2.0" + ] + ] + } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" + "nf-test": "0.9.3", + "nextflow": "25.10.3" }, - "timestamp": "2023-11-23T17:20:51.998533" + "timestamp": "2026-02-02T14:36:10.713888585" }, "sarscov2 - paired_end - stub": { "content": [ @@ -154,7 +138,11 @@ ] ], "2": [ - "versions.yml:md5,e099c02ff6a63c1dacc6c79fd3d0223e" + [ + "PRESEQ_LCEXTRAP", + "preseq", + "3.2.0" + ] ], "lc_extrap": [ [ @@ -174,15 +162,19 @@ "test.command.log:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "versions": [ - "versions.yml:md5,e099c02ff6a63c1dacc6c79fd3d0223e" + "versions_preseq": [ + [ + "PRESEQ_LCEXTRAP", + "preseq", + "3.2.0" + ] ] } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.3", + "nextflow": "25.10.3" }, - "timestamp": "2024-10-19T16:56:45.034808313" + "timestamp": "2026-02-02T14:36:16.120076691" } } \ No newline at end of file diff --git a/modules/nf-core/qualimap/rnaseq/main.nf b/modules/nf-core/qualimap/rnaseq/main.nf index 4411d8689..cfab71b4b 100644 --- a/modules/nf-core/qualimap/rnaseq/main.nf +++ b/modules/nf-core/qualimap/rnaseq/main.nf @@ -13,7 +13,7 @@ process QUALIMAP_RNASEQ { output: tuple val(meta), path("${prefix}"), emit: results - path "versions.yml" , emit: versions + tuple val("${task.process}"), val('qualimap'), eval("qualimap 2>&1 | sed -n 's/.*QualiMap v.\\(.*\\)/\\1/p'"), emit: versions_qualimap, topic: versions when: task.ext.when == null || task.ext.when @@ -43,21 +43,11 @@ process QUALIMAP_RNASEQ { -p $strandedness \\ $paired_end \\ -outdir $prefix - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - qualimap: \$(echo \$(qualimap 2>&1) | sed 's/^.*QualiMap v.//; s/Built.*\$//') - END_VERSIONS """ stub: prefix = task.ext.prefix ?: "${meta.id}" """ mkdir ${prefix} - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - qualimap: \$(echo \$(qualimap 2>&1) | sed 's/^.*QualiMap v.//; s/Built.*\$//') - END_VERSIONS """ } diff --git a/modules/nf-core/qualimap/rnaseq/meta.yml b/modules/nf-core/qualimap/rnaseq/meta.yml index a730261b5..28e0f910e 100644 --- a/modules/nf-core/qualimap/rnaseq/meta.yml +++ b/modules/nf-core/qualimap/rnaseq/meta.yml @@ -26,6 +26,7 @@ input: type: file description: BAM file pattern: "*.{bam}" + ontologies: [] - - meta2: type: map description: | @@ -35,9 +36,10 @@ input: type: file description: GTF file of the reference genome pattern: "*.{gtf}" + ontologies: [] output: - - results: - - meta: + results: + - - meta: type: map description: | Groovy Map containing sample information @@ -46,11 +48,29 @@ output: type: directory description: Qualimap results dir pattern: "*/*" - - versions: - - versions.yml: - type: file - description: File containing software versions - pattern: "versions.yml" + versions_qualimap: + - - ${task.process}: + type: string + description: The name of the process + - qualimap: + type: string + description: The name of the tool + - "qualimap 2>&1 | sed -n 's/.*QualiMap v.\\(.*\\)/\\1/p'": + type: eval + description: The expression to obtain the version of the tool + +topics: + versions: + - - ${task.process}: + type: string + description: The name of the process + - qualimap: + type: string + description: The name of the tool + - "qualimap 2>&1 | sed -n 's/.*QualiMap v.\\(.*\\)/\\1/p'": + type: eval + description: The expression to obtain the version of the tool + authors: - "@FriederikeHanssen" maintainers: diff --git a/modules/nf-core/qualimap/rnaseq/nextflow.config b/modules/nf-core/qualimap/rnaseq/nextflow.config index 5c1b59423..e2078fca6 100644 --- a/modules/nf-core/qualimap/rnaseq/nextflow.config +++ b/modules/nf-core/qualimap/rnaseq/nextflow.config @@ -1,22 +1,18 @@ -if (!params.skip_qc) { - if (!params.skip_qualimap) { - process { - withName: 'SAMTOOLS_SORT_QUALIMAP' { - ext.args = '-n' - ext.prefix = { "${meta.id}.namesorted" } - publishDir = [ - enabled: false - ] - } +process { + withName: 'SAMTOOLS_SORT_QUALIMAP' { + ext.args = '-n' + ext.prefix = { "${meta.id}.namesorted" } + publishDir = [ + enabled: false + ] + } - withName: 'QUALIMAP_RNASEQ' { - ext.args = '--sorted' - publishDir = [ - path: { "${params.outdir}/${params.aligner}/qualimap" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } - } + withName: 'QUALIMAP_RNASEQ' { + ext.args = '--sorted' + publishDir = [ + path: { "${params.outdir}/${params.aligner}/qualimap" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] } } diff --git a/modules/nf-core/qualimap/rnaseq/tests/main.nf.test b/modules/nf-core/qualimap/rnaseq/tests/main.nf.test index ff4197eeb..87ddf8a32 100644 --- a/modules/nf-core/qualimap/rnaseq/tests/main.nf.test +++ b/modules/nf-core/qualimap/rnaseq/tests/main.nf.test @@ -3,6 +3,10 @@ nextflow_process { name "Test Process QUALIMAP_RNASEQ" script "../main.nf" process "QUALIMAP_RNASEQ" + tag "modules" + tag "modules_nfcore" + tag "qualimap" + tag "qualimap/rnaseq" test("homo_sapiens [bam]") { when { @@ -26,7 +30,7 @@ nextflow_process { { assert snapshot( file("${process.out.results[0][1]}/qualimapReport.html").name, path("${process.out.results[0][1]}/rnaseq_qc_results.txt"), - process.out.versions + process.out.findAll { key, val -> key.startsWith('versions') } ).match() } ) } diff --git a/modules/nf-core/qualimap/rnaseq/tests/main.nf.test.snap b/modules/nf-core/qualimap/rnaseq/tests/main.nf.test.snap index 682462639..3f29893ca 100644 --- a/modules/nf-core/qualimap/rnaseq/tests/main.nf.test.snap +++ b/modules/nf-core/qualimap/rnaseq/tests/main.nf.test.snap @@ -14,7 +14,11 @@ ] ], "1": [ - "versions.yml:md5,a6868ab89f7d31361a7791db2dea98e7" + [ + "QUALIMAP_RNASEQ", + "qualimap", + "2.3" + ] ], "results": [ [ @@ -27,29 +31,39 @@ ] ] ], - "versions": [ - "versions.yml:md5,a6868ab89f7d31361a7791db2dea98e7" + "versions_qualimap": [ + [ + "QUALIMAP_RNASEQ", + "qualimap", + "2.3" + ] ] } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" + "nf-test": "0.9.3", + "nextflow": "25.10.3" }, - "timestamp": "2024-07-22T11:27:41.158111" + "timestamp": "2026-02-02T14:37:16.973048807" }, "homo_sapiens [bam]": { "content": [ "qualimapReport.html", "rnaseq_qc_results.txt:md5,b77878cac45beaa79a892af54aad2da3", - [ - "versions.yml:md5,a6868ab89f7d31361a7791db2dea98e7" - ] + { + "versions_qualimap": [ + [ + "QUALIMAP_RNASEQ", + "qualimap", + "2.3" + ] + ] + } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" + "nf-test": "0.9.3", + "nextflow": "25.10.3" }, - "timestamp": "2024-07-22T11:27:30.782304" + "timestamp": "2026-02-02T14:37:10.64233656" } } \ No newline at end of file diff --git a/modules/nf-core/ribodetector/environment.yml b/modules/nf-core/ribodetector/environment.yml new file mode 100644 index 000000000..3f9b0530f --- /dev/null +++ b/modules/nf-core/ribodetector/environment.yml @@ -0,0 +1,7 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json +channels: + - conda-forge + - bioconda +dependencies: + - "bioconda::ribodetector=0.3.2" diff --git a/modules/nf-core/ribodetector/main.nf b/modules/nf-core/ribodetector/main.nf new file mode 100644 index 000000000..6c1921ad3 --- /dev/null +++ b/modules/nf-core/ribodetector/main.nf @@ -0,0 +1,51 @@ +process RIBODETECTOR { + tag "$meta.id" + label 'process_medium' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/4d/4de8fe74d21198e6fc8218cb3209d929b3d7dab750678501b096b0ccc324307b/data' : + 'community.wave.seqera.io/library/ribodetector:0.3.2--cbe1c77fa14eeb53' }" + + input: + tuple val(meta), path(fastq) + val length + + output: + tuple val(meta), path("*.nonrna*.fastq.gz"), emit: fastq + tuple val(meta), path("*.log") , emit: log + tuple val("${task.process}"), val('ribodetector'), eval('ribodetector --version | sed "s/ribodetector //"'), emit: versions_ribodetector, topic: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + ribodetector_bin = task.accelerator ? "ribodetector" : "ribodetector_cpu" + ribodetector_mem = task.accelerator ? "-m $task.memory.toGiga()" : "" + output = meta.single_end ? "${prefix}.nonrna.fastq.gz" : "${prefix}.nonrna.1.fastq.gz ${prefix}.nonrna.2.fastq.gz" + + """ + ${ribodetector_bin} \\ + -i ${fastq} \\ + -o ${output} \\ + -l ${length} \\ + -t ${task.cpus} \\ + --log ${prefix}.log \\ + ${ribodetector_mem} \\ + ${args} + """ + + stub: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + + """ + echo $args + + echo | gzip > ${prefix}.nonrna.1.fastq.gz + echo | gzip > ${prefix}.nonrna.2.fastq.gz + touch ${prefix}.log + """ +} diff --git a/modules/nf-core/ribodetector/meta.yml b/modules/nf-core/ribodetector/meta.yml new file mode 100644 index 000000000..76d8f5c87 --- /dev/null +++ b/modules/nf-core/ribodetector/meta.yml @@ -0,0 +1,95 @@ +name: "ribodetector" +description: Accurate and rapid RiboRNA sequences Detector based on deep + learning +keywords: + - RNA + - RNAseq + - rRNA + - ribosomal RNA + - rRNA depletion + - rRNA removal + - rRNA filtering + - deep learning + - Riboseq + - genomics +tools: + - ribodetector: + description: Accurate and rapid RiboRNA sequences detector based on deep + learning. RiboDetector uses a deep learning approach to identify rRNA + sequences in ribosome profiling (Ribo-seq) data. It can be used to filter + out rRNA reads from Ribo-seq datasets, improving the quality of downstream + analyses. As of version 0.3.1, Ribodetector doesn't support setting a + random seed, so results may not be fully deterministic across runs. + homepage: "https://github.com/hzi-bifo/RiboDetector" + documentation: "https://github.com/hzi-bifo/RiboDetector" + tool_dev_url: "https://github.com/hzi-bifo/RiboDetector" + doi: "10.1093/nar/gkac112" + licence: ["GPL v3-or-later"] + identifier: biotools:ribodetector + +input: + - - meta: + type: map + description: | + Groovy Map containing riboseq sample information + e.g. `[ id:'sample1', single_end:false ] + - fastq: + type: file + description: | + List of input FastQ files of size 1 and 2 for single-end and paired-end data, + respectively. + ontologies: + - edam: http://edamontology.org/format_1930 # fastq format + - length: + type: integer + description: | + Sequencing read length (mean length). Note: the accuracy reduces for reads shorter than 40 + pattern: "integer >= 1" +output: + fastq: + - - meta: + type: map + description: Groovy Map containing sample information + - "*.nonrna*.fastq.gz": + type: file + description: rRNA depleted FastQ files + pattern: "*.nonrna*.fastq.gz" + ontologies: + - edam: http://edamontology.org/format_1930 # fastq format + - edam: http://edamontology.org/format_3989 # GZIP format + log: + - - meta: + type: map + description: Groovy Map containing sample information + - "*.log": + type: file + description: Log file from RiboDetector + pattern: "*.log" + ontologies: [] + versions_ribodetector: + - - ${task.process}: + type: string + description: Name of the process + - ribodetector: + type: string + description: Name of the tool + - ribodetector --version | sed "s/ribodetector //": + type: eval + description: The expression to obtain the version of the tool + +topics: + versions: + - - ${task.process}: + type: string + description: Name of the process + - ribodetector: + type: string + description: Name of the tool + - ribodetector --version | sed "s/ribodetector //": + type: eval + description: The expression to obtain the version of the tool + +authors: + - "@maxibor" +maintainers: + - "@maxibor" diff --git a/modules/nf-core/ribodetector/tests/main.nf.test b/modules/nf-core/ribodetector/tests/main.nf.test new file mode 100644 index 000000000..1de2e5fc5 --- /dev/null +++ b/modules/nf-core/ribodetector/tests/main.nf.test @@ -0,0 +1,67 @@ +nextflow_process { + + name "Test Process RIBODETECTOR" + script "../main.nf" + process "RIBODETECTOR" + + tag "modules" + tag "modules_nfcore" + tag "ribodetector" + + test("ribodetector - rnaseq PE input") { + when { + process { + """ + input[0] = [ + [ 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] = 150 + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert process.out.fastq }, + { assert process.out.log }, + { assert path(process.out.log[0][1]).getText().contains("Writing output non-rRNA sequences") }, + { assert snapshot(process.out.findAll { key, val -> key.startsWith("versions") }).match() } + ) + } + + } + + test("ribodetector - stub rnaseq PE input") { + + options "-stub" + + when { + process { + """ + input[0] = [ + [ 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] = 150 + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + +} diff --git a/modules/nf-core/ribodetector/tests/main.nf.test.snap b/modules/nf-core/ribodetector/tests/main.nf.test.snap new file mode 100644 index 000000000..31f9c8a25 --- /dev/null +++ b/modules/nf-core/ribodetector/tests/main.nf.test.snap @@ -0,0 +1,87 @@ +{ + "ribodetector - rnaseq PE input": { + "content": [ + { + "versions_ribodetector": [ + [ + "RIBODETECTOR", + "ribodetector", + "0.3.2" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "25.10.0" + }, + "timestamp": "2025-11-29T21:25:27.269196" + }, + "ribodetector - stub rnaseq PE input": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.nonrna.1.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test.nonrna.2.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + [ + "RIBODETECTOR", + "ribodetector", + "0.3.2" + ] + ], + "fastq": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.nonrna.1.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test.nonrna.2.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "log": [ + [ + { + "id": "test", + "single_end": false + }, + "test.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions_ribodetector": [ + [ + "RIBODETECTOR", + "ribodetector", + "0.3.2" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.2" + }, + "timestamp": "2025-11-29T21:44:20.650130249" + } +} \ No newline at end of file diff --git a/modules/nf-core/rsem/calculateexpression/main.nf b/modules/nf-core/rsem/calculateexpression/main.nf index b4851805e..3c81468d9 100644 --- a/modules/nf-core/rsem/calculateexpression/main.nf +++ b/modules/nf-core/rsem/calculateexpression/main.nf @@ -16,7 +16,8 @@ process RSEM_CALCULATEEXPRESSION { tuple val(meta), path("*.isoforms.results"), emit: counts_transcript tuple val(meta), path("*.stat") , emit: stat tuple val(meta), path("*.log") , emit: logs, optional:true - path "versions.yml" , emit: versions + tuple val("${task.process}"), val('rsem'), eval("rsem-calculate-expression --version | sed 's/Current version: RSEM v//'"), emit: versions_rsem, topic: versions + tuple val("${task.process}"), val('star'), eval('STAR --version | sed -e "s/STAR_//g"'), emit: versions_star, topic: versions tuple val(meta), path("*.STAR.genome.bam") , optional:true, emit: bam_star tuple val(meta), path("${prefix}.genome.bam") , optional:true, emit: bam_genome @@ -56,7 +57,7 @@ process RSEM_CALCULATEEXPRESSION { [ ${reads.size()} -gt 1 ] && PAIRED_END_FLAG="--paired-end" fi fi - + rsem-calculate-expression \\ --num-threads $task.cpus \\ --temporary-folder ./tmp/ \\ @@ -67,12 +68,6 @@ process RSEM_CALCULATEEXPRESSION { $reads \\ \$INDEX \\ $prefix - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - rsem: \$(rsem-calculate-expression --version | sed -e "s/Current version: RSEM v//g") - star: \$(STAR --version | sed -e "s/STAR_//g") - END_VERSIONS """ stub: @@ -83,19 +78,13 @@ process RSEM_CALCULATEEXPRESSION { touch ${prefix}.isoforms.results touch ${prefix}.stat touch ${prefix}.log - + # Only create STAR BAM output when not in alignment mode if [ "${is_bam}" == "false" ]; then touch ${prefix}.STAR.genome.bam fi - + touch ${prefix}.genome.bam touch ${prefix}.transcript.bam - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - rsem: \$(rsem-calculate-expression --version | sed -e "s/Current version: RSEM v//g") - star: \$(STAR --version | sed -e "s/STAR_//g") - END_VERSIONS """ } diff --git a/modules/nf-core/rsem/calculateexpression/meta.yml b/modules/nf-core/rsem/calculateexpression/meta.yml index 0a7ea6e7d..7dbd249aa 100644 --- a/modules/nf-core/rsem/calculateexpression/meta.yml +++ b/modules/nf-core/rsem/calculateexpression/meta.yml @@ -76,13 +76,27 @@ output: description: RSEM logs pattern: "*.log" ontologies: [] - versions: - - versions.yml: - type: file - description: File containing software versions - pattern: "versions.yml" - ontologies: - - edam: http://edamontology.org/format_3750 # YAML + versions_rsem: + - - ${task.process}: + type: string + description: The name of the process + - rsem: + type: string + description: The name of the tool + - "rsem-calculate-expression --version | sed 's/Current version: RSEM v//'": + type: eval + description: The expression to obtain the version of the tool + versions_star: + - - ${task.process}: + type: string + description: The name of the process + - star: + type: string + description: The name of the tool + - 'STAR --version | sed -e "s/STAR_//g"': + type: eval + description: The expression to obtain the version of the tool + bam_star: - - meta: type: map @@ -116,6 +130,28 @@ output: description: Transcript BAM file (optional) pattern: "*.transcript.bam" ontologies: [] + +topics: + versions: + - - ${task.process}: + type: string + description: The name of the process + - rsem: + type: string + description: The name of the tool + - "rsem-calculate-expression --version | sed 's/Current version: RSEM v//'": + type: eval + description: The expression to obtain the version of the tool + - - ${task.process}: + type: string + description: The name of the process + - star: + type: string + description: The name of the tool + - 'STAR --version | sed -e "s/STAR_//g"': + type: eval + description: The expression to obtain the version of the tool + authors: - "@drpatelh" - "@kevinmenden" diff --git a/modules/nf-core/rsem/calculateexpression/tests/main.nf.test b/modules/nf-core/rsem/calculateexpression/tests/main.nf.test index 8860e7df9..69d980646 100644 --- a/modules/nf-core/rsem/calculateexpression/tests/main.nf.test +++ b/modules/nf-core/rsem/calculateexpression/tests/main.nf.test @@ -47,7 +47,7 @@ nextflow_process { process.out.counts_gene, process.out.counts_transcript, process.out.stat, - process.out.versions + process.out.findAll { key, val -> key.startsWith('versions') } ).match() } ) } @@ -93,7 +93,7 @@ nextflow_process { process.out.counts_gene, process.out.counts_transcript, process.out.stat, - process.out.versions + process.out.findAll { key, val -> key.startsWith('versions') } ).match() }, { assert path(process.out.logs.get(0).get(1)).exists() } ) @@ -140,7 +140,7 @@ nextflow_process { { assert path(process.out.stat.get(0).get(1)).exists() }, { assert path(process.out.logs.get(0).get(1)).exists() }, { assert snapshot( - process.out.versions + process.out.findAll { key, val -> key.startsWith('versions') } ).match() } ) } diff --git a/modules/nf-core/rsem/calculateexpression/tests/main.nf.test.snap b/modules/nf-core/rsem/calculateexpression/tests/main.nf.test.snap index 1175e2970..c0069168d 100644 --- a/modules/nf-core/rsem/calculateexpression/tests/main.nf.test.snap +++ b/modules/nf-core/rsem/calculateexpression/tests/main.nf.test.snap @@ -1,15 +1,28 @@ { "homo_sapiens - stub": { "content": [ - [ - "versions.yml:md5,823e53afe1ff4f3930ae8392f9f8dd5c" - ] + { + "versions_rsem": [ + [ + "RSEM_CALCULATEEXPRESSION", + "rsem", + "1.3.1" + ] + ], + "versions_star": [ + [ + "RSEM_CALCULATEEXPRESSION", + "star", + "2.7.10a" + ] + ] + } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.6" + "nf-test": "0.9.3", + "nextflow": "25.10.3" }, - "timestamp": "2025-09-15T09:32:28.388711" + "timestamp": "2026-02-02T16:06:46.672144942" }, "homo_sapiens - fastq": { "content": [ @@ -44,15 +57,28 @@ ] ] ], - [ - "versions.yml:md5,823e53afe1ff4f3930ae8392f9f8dd5c" - ] + { + "versions_rsem": [ + [ + "RSEM_CALCULATEEXPRESSION", + "rsem", + "1.3.1" + ] + ], + "versions_star": [ + [ + "RSEM_CALCULATEEXPRESSION", + "star", + "2.7.10a" + ] + ] + } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.6" + "nf-test": "0.9.3", + "nextflow": "25.10.3" }, - "timestamp": "2025-09-12T14:47:20.34162" + "timestamp": "2026-02-02T16:06:40.332161512" }, "homo_sapiens - bam": { "content": [ @@ -87,14 +113,27 @@ ] ] ], - [ - "versions.yml:md5,823e53afe1ff4f3930ae8392f9f8dd5c" - ] + { + "versions_rsem": [ + [ + "RSEM_CALCULATEEXPRESSION", + "rsem", + "1.3.1" + ] + ], + "versions_star": [ + [ + "RSEM_CALCULATEEXPRESSION", + "star", + "2.7.10a" + ] + ] + } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.6" + "nf-test": "0.9.3", + "nextflow": "25.10.3" }, - "timestamp": "2025-09-15T10:38:32.603705" + "timestamp": "2026-02-02T16:04:53.881673089" } } \ No newline at end of file diff --git a/modules/nf-core/rsem/preparereference/main.nf b/modules/nf-core/rsem/preparereference/main.nf index 4d7c65996..e014ce6fa 100644 --- a/modules/nf-core/rsem/preparereference/main.nf +++ b/modules/nf-core/rsem/preparereference/main.nf @@ -14,7 +14,8 @@ process RSEM_PREPAREREFERENCE { output: path "rsem" , emit: index path "*transcripts.fa", emit: transcript_fasta - path "versions.yml" , emit: versions + tuple val("${task.process}"), val('rsem'), eval('rsem-calculate-expression --version | sed -e "s/Current version: RSEM v//g"'), topic: versions, emit: versions_rsem + tuple val("${task.process}"), val('star'), eval('STAR --version | sed -e "s/STAR_//g"'), topic: versions, emit: versions_star when: task.ext.when == null || task.ext.when @@ -24,7 +25,7 @@ process RSEM_PREPAREREFERENCE { def args2 = task.ext.args2 ?: '' def args_list = args.tokenize() if (args_list.contains('--star')) { - args_list.removeIf { it.contains('--star') } + args_list.removeIf { arg -> arg.contains('--star') } def memory = task.memory ? "--limitGenomeGenerateRAM ${task.memory.toBytes() - 100000000}" : '' """ STAR \\ @@ -44,12 +45,6 @@ process RSEM_PREPAREREFERENCE { rsem/genome cp rsem/genome.transcripts.fa . - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - rsem: \$(rsem-calculate-expression --version | sed -e "s/Current version: RSEM v//g") - star: \$(STAR --version | sed -e "s/STAR_//g") - END_VERSIONS """ } else { """ @@ -61,23 +56,11 @@ process RSEM_PREPAREREFERENCE { rsem/genome cp rsem/genome.transcripts.fa . - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - rsem: \$(rsem-calculate-expression --version | sed -e "s/Current version: RSEM v//g") - star: \$(STAR --version | sed -e "s/STAR_//g") - END_VERSIONS """ } stub: """ touch genome.transcripts.fa - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - rsem: \$(rsem-calculate-expression --version | sed -e "s/Current version: RSEM v//g") - star: \$(STAR --version | sed -e "s/STAR_//g") - END_VERSIONS """ } diff --git a/modules/nf-core/rsem/preparereference/meta.yml b/modules/nf-core/rsem/preparereference/meta.yml index e95f4a2ae..4a3a5a2d2 100644 --- a/modules/nf-core/rsem/preparereference/meta.yml +++ b/modules/nf-core/rsem/preparereference/meta.yml @@ -14,30 +14,70 @@ tools: licence: ["GPL-3.0-or-later"] identifier: biotools:rsem input: - - - fasta: - type: file - description: The Fasta file of the reference genome - pattern: "*.{fasta,fa}" - - - gtf: - type: file - description: The GTF file of the reference genome - pattern: "*.gtf" + - fasta: + type: file + description: The Fasta file of the reference genome + pattern: "*.{fasta,fa}" + ontologies: [] + - gtf: + type: file + description: The GTF file of the reference genome + pattern: "*.gtf" + ontologies: [] output: - - index: + index: + - rsem: + type: directory + description: RSEM index directory + pattern: "rsem" + transcript_fasta: + - "*transcripts.fa": + type: file + description: Fasta file of transcripts + pattern: "rsem/*transcripts.fa" + ontologies: [] + versions_rsem: + - - ${task.process}: + type: string + description: The process the versions were collected from + - rsem: + type: string + description: The tool name + - 'rsem-calculate-expression --version | sed -e "s/Current version: RSEM v//g"': + type: eval + description: The expression to obtain the version of the tool + versions_star: + - - ${task.process}: + type: string + description: The process the versions were collected from + - star: + type: string + description: The tool name + - STAR --version | sed -e "s/STAR_//g": + type: eval + description: The expression to obtain the version of the tool + +topics: + versions: + - - ${task.process}: + type: string + description: The process the versions were collected from - rsem: - type: directory - description: RSEM index directory - pattern: "rsem" - - transcript_fasta: - - "*transcripts.fa": - type: file - description: Fasta file of transcripts - pattern: "rsem/*transcripts.fa" - - versions: - - versions.yml: - type: file - description: File containing software versions - pattern: "versions.yml" + type: string + description: The tool name + - 'rsem-calculate-expression --version | sed -e "s/Current version: RSEM v//g"': + type: eval + description: The expression to obtain the version of the tool + - - ${task.process}: + type: string + description: The process the versions were collected from + - star: + type: string + description: The tool name + - STAR --version | sed -e "s/STAR_//g": + type: eval + description: The expression to obtain the version of the tool + authors: - "@drpatelh" - "@kevinmenden" diff --git a/modules/nf-core/rsem/preparereference/tests/main.nf.test b/modules/nf-core/rsem/preparereference/tests/main.nf.test index 210e03e87..958d5e2e8 100644 --- a/modules/nf-core/rsem/preparereference/tests/main.nf.test +++ b/modules/nf-core/rsem/preparereference/tests/main.nf.test @@ -3,6 +3,10 @@ nextflow_process { name "Test Process RSEM_PREPAREREFERENCE" script "../main.nf" process "RSEM_PREPAREREFERENCE" + tag "modules" + tag "modules_nfcore" + tag "rsem" + tag "rsem/preparereference" test("homo_sapiens") { @@ -23,7 +27,7 @@ nextflow_process { { assert process.success }, { assert snapshot(process.out.index).match("index")}, { assert snapshot(process.out.transcript_fasta).match("transcript_fasta")}, - { assert snapshot(process.out.versions).match("versions") } + { assert snapshot(process.out.findAll { key, val -> key.startsWith("versions") }).match("versions") } ) } } diff --git a/modules/nf-core/rsem/preparereference/tests/main.nf.test.snap b/modules/nf-core/rsem/preparereference/tests/main.nf.test.snap index 0c3c10896..2941d1a22 100644 --- a/modules/nf-core/rsem/preparereference/tests/main.nf.test.snap +++ b/modules/nf-core/rsem/preparereference/tests/main.nf.test.snap @@ -11,7 +11,18 @@ "genome.transcripts.fa:md5,d41d8cd98f00b204e9800998ecf8427e" ], "2": [ - "versions.yml:md5,517611c42f6354d3609db1b35fffa397" + [ + "RSEM_PREPAREREFERENCE", + "rsem", + "1.3.1" + ] + ], + "3": [ + [ + "RSEM_PREPAREREFERENCE", + "star", + "2.7.10a" + ] ], "index": [ [ @@ -21,28 +32,52 @@ "transcript_fasta": [ "genome.transcripts.fa:md5,d41d8cd98f00b204e9800998ecf8427e" ], - "versions": [ - "versions.yml:md5,517611c42f6354d3609db1b35fffa397" + "versions_rsem": [ + [ + "RSEM_PREPAREREFERENCE", + "rsem", + "1.3.1" + ] + ], + "versions_star": [ + [ + "RSEM_PREPAREREFERENCE", + "star", + "2.7.10a" + ] ] } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.2" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-06-02T14:24:38.229417" + "timestamp": "2026-01-19T14:06:19.387360983" }, "versions": { "content": [ - [ - "versions.yml:md5,517611c42f6354d3609db1b35fffa397" - ] + { + "versions_rsem": [ + [ + "RSEM_PREPAREREFERENCE", + "rsem", + "1.3.1" + ] + ], + "versions_star": [ + [ + "RSEM_PREPAREREFERENCE", + "star", + "2.7.10a" + ] + ] + } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.2" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-06-02T14:24:27.489566" + "timestamp": "2026-01-19T14:53:27.239498" }, "index": { "content": [ diff --git a/modules/nf-core/rseqc/bamstat/environment.yml b/modules/nf-core/rseqc/bamstat/environment.yml index f1dc909fc..522ed09e2 100644 --- a/modules/nf-core/rseqc/bamstat/environment.yml +++ b/modules/nf-core/rseqc/bamstat/environment.yml @@ -4,5 +4,5 @@ channels: - conda-forge - bioconda dependencies: - - bioconda::rseqc=5.0.3 - - conda-forge::r-base>=3.5 + - bioconda::rseqc=5.0.4 + - conda-forge::r-base=4.3 diff --git a/modules/nf-core/rseqc/bamstat/main.nf b/modules/nf-core/rseqc/bamstat/main.nf index 167240c46..55ce0c9b5 100644 --- a/modules/nf-core/rseqc/bamstat/main.nf +++ b/modules/nf-core/rseqc/bamstat/main.nf @@ -4,15 +4,15 @@ process RSEQC_BAMSTAT { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/rseqc:5.0.3--py39hf95cd2a_0' : - 'biocontainers/rseqc:5.0.3--py39hf95cd2a_0' }" + 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/6f/6f44b7933e2c2b1a340dc9485869974eb032d34e81af83716eb381964ee3e5e7/data' : + 'community.wave.seqera.io/library/rseqc_r-base:2e29d2dfda9cef15' }" input: - tuple val(meta), path(bam) + tuple val(meta), path(bam), path(bai) output: tuple val(meta), path("*.bam_stat.txt"), emit: txt - path "versions.yml" , emit: versions + tuple val("${task.process}"), val('rseqc'), eval('bam_stat.py --version | sed "s/bam_stat.py //"'), emit: versions_rseqc, topic: versions when: task.ext.when == null || task.ext.when @@ -25,21 +25,11 @@ process RSEQC_BAMSTAT { -i $bam \\ $args \\ > ${prefix}.bam_stat.txt - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - rseqc: \$(bam_stat.py --version | sed -e "s/bam_stat.py //g") - END_VERSIONS """ stub: def prefix = task.ext.prefix ?: "${meta.id}" """ touch ${prefix}.bam_stat.txt - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - rseqc: \$(bam_stat.py --version | sed -e "s/bam_stat.py //g") - END_VERSIONS """ } diff --git a/modules/nf-core/rseqc/bamstat/meta.yml b/modules/nf-core/rseqc/bamstat/meta.yml index d69f05442..7fd9b44a0 100644 --- a/modules/nf-core/rseqc/bamstat/meta.yml +++ b/modules/nf-core/rseqc/bamstat/meta.yml @@ -24,24 +24,50 @@ input: type: file description: the bam file to calculate statistics of pattern: "*.{bam}" + ontologies: [] + - bai: + type: file + description: BAM index file + pattern: "*.{bai}" + ontologies: [] output: - - txt: - - meta: + txt: + - - meta: type: file description: bam statistics report pattern: "*.bam_stat.txt" + ontologies: [] - "*.bam_stat.txt": type: file description: bam statistics report pattern: "*.bam_stat.txt" - - versions: - - versions.yml: - type: file - description: File containing software versions - pattern: "versions.yml" + ontologies: [] + versions_rseqc: + - - ${task.process}: + type: string + description: The process the versions were collected from + - rseqc: + type: string + description: The tool name + - bam_stat.py --version | sed "s/bam_stat.py //": + type: eval + description: The expression to obtain the version of the tool +topics: + versions: + - - ${task.process}: + type: string + description: The process the versions were collected from + - rseqc: + type: string + description: The tool name + - bam_stat.py --version | sed "s/bam_stat.py //": + type: eval + description: The expression to obtain the version of the tool authors: - "@drpatelh" - "@kevinmenden" + - "@rhassaine" maintainers: - "@drpatelh" - "@kevinmenden" + - "@rhassaine" diff --git a/modules/nf-core/rseqc/bamstat/tests/main.nf.test b/modules/nf-core/rseqc/bamstat/tests/main.nf.test index 7af50092d..9401646df 100644 --- a/modules/nf-core/rseqc/bamstat/tests/main.nf.test +++ b/modules/nf-core/rseqc/bamstat/tests/main.nf.test @@ -4,6 +4,10 @@ nextflow_process { script "../main.nf" process "RSEQC_BAMSTAT" + tag "modules" + tag "modules_nfcore" + tag "rseqc" + tag "rseqc/bamstat" config "./nextflow.config" @@ -12,38 +16,44 @@ nextflow_process { when { process { """ - input[0] = [ + input[0] = channel.of([ [ id:'test' ], // meta map - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam') - ] + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true) + ]) """ } } then { - assert process.success - assert snapshot(process.out).match() + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) } } test("sarscov2 - [meta] - bam - stub") { - options "-stub" + options "-stub" when { process { """ - input[0] = [ + input[0] = channel.of([ [ id:'test' ], // meta map - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam') - ] + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true) + ]) """ } } then { - assert process.success - assert snapshot(process.out).match() + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) } } } diff --git a/modules/nf-core/rseqc/bamstat/tests/main.nf.test.snap b/modules/nf-core/rseqc/bamstat/tests/main.nf.test.snap index deae0e80d..96f3f5fe8 100644 --- a/modules/nf-core/rseqc/bamstat/tests/main.nf.test.snap +++ b/modules/nf-core/rseqc/bamstat/tests/main.nf.test.snap @@ -11,7 +11,11 @@ ] ], "1": [ - "versions.yml:md5,58f74a7ff9d2966142c81a4a4735dbf3" + [ + "RSEQC_BAMSTAT", + "rseqc", + "5.0.4" + ] ], "txt": [ [ @@ -21,16 +25,20 @@ "test.bam_stat.txt:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "versions": [ - "versions.yml:md5,58f74a7ff9d2966142c81a4a4735dbf3" + "versions_rseqc": [ + [ + "RSEQC_BAMSTAT", + "rseqc", + "5.0.4" + ] ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" + "nf-test": "0.9.2", + "nextflow": "25.10.2" }, - "timestamp": "2024-06-21T09:16:13.970299" + "timestamp": "2025-12-10T12:09:27.652778872" }, "sarscov2 - [meta] - bam": { "content": [ @@ -44,7 +52,11 @@ ] ], "1": [ - "versions.yml:md5,58f74a7ff9d2966142c81a4a4735dbf3" + [ + "RSEQC_BAMSTAT", + "rseqc", + "5.0.4" + ] ], "txt": [ [ @@ -54,15 +66,19 @@ "test.bam_stat.txt:md5,2675857864c1d1139b2a19d25dc36b09" ] ], - "versions": [ - "versions.yml:md5,58f74a7ff9d2966142c81a4a4735dbf3" + "versions_rseqc": [ + [ + "RSEQC_BAMSTAT", + "rseqc", + "5.0.4" + ] ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.2", + "nextflow": "25.10.2" }, - "timestamp": "2023-12-14T17:00:23.830276754" + "timestamp": "2025-12-10T12:09:21.393873778" } } \ No newline at end of file diff --git a/modules/nf-core/rseqc/inferexperiment/environment.yml b/modules/nf-core/rseqc/inferexperiment/environment.yml index f1dc909fc..522ed09e2 100644 --- a/modules/nf-core/rseqc/inferexperiment/environment.yml +++ b/modules/nf-core/rseqc/inferexperiment/environment.yml @@ -4,5 +4,5 @@ channels: - conda-forge - bioconda dependencies: - - bioconda::rseqc=5.0.3 - - conda-forge::r-base>=3.5 + - bioconda::rseqc=5.0.4 + - conda-forge::r-base=4.3 diff --git a/modules/nf-core/rseqc/inferexperiment/main.nf b/modules/nf-core/rseqc/inferexperiment/main.nf index 87c676ada..eeae81d0a 100644 --- a/modules/nf-core/rseqc/inferexperiment/main.nf +++ b/modules/nf-core/rseqc/inferexperiment/main.nf @@ -4,16 +4,16 @@ process RSEQC_INFEREXPERIMENT { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/rseqc:5.0.3--py39hf95cd2a_0' : - 'biocontainers/rseqc:5.0.3--py39hf95cd2a_0' }" + 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/6f/6f44b7933e2c2b1a340dc9485869974eb032d34e81af83716eb381964ee3e5e7/data' : + 'community.wave.seqera.io/library/rseqc_r-base:2e29d2dfda9cef15' }" input: - tuple val(meta), path(bam) + tuple val(meta), path(bam), path(bai) path bed output: tuple val(meta), path("*.infer_experiment.txt"), emit: txt - path "versions.yml" , emit: versions + tuple val("${task.process}"), val('rseqc'), eval('infer_experiment.py --version | sed "s/infer_experiment.py //"'), emit: versions_rseqc, topic: versions when: task.ext.when == null || task.ext.when @@ -27,21 +27,11 @@ process RSEQC_INFEREXPERIMENT { -r $bed \\ $args \\ > ${prefix}.infer_experiment.txt - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - rseqc: \$(infer_experiment.py --version | sed -e "s/infer_experiment.py //g") - END_VERSIONS """ stub: def prefix = task.ext.prefix ?: "${meta.id}" """ touch ${prefix}.infer_experiment.txt - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - rseqc: \$(infer_experiment.py --version | sed -e "s/infer_experiment.py //g") - END_VERSIONS """ } diff --git a/modules/nf-core/rseqc/inferexperiment/meta.yml b/modules/nf-core/rseqc/inferexperiment/meta.yml index 3ac757289..72e516ec3 100644 --- a/modules/nf-core/rseqc/inferexperiment/meta.yml +++ b/modules/nf-core/rseqc/inferexperiment/meta.yml @@ -24,28 +24,57 @@ input: type: file description: the bam file to calculate statistics of pattern: "*.{bam}" - - - bed: + ontologies: [] + - bai: type: file - description: a bed file for the reference gene model - pattern: "*.{bed}" + description: BAM index file + pattern: "*.{bai}" + ontologies: [] + - bed: + type: file + description: a bed file for the reference gene model + pattern: "*.{bed}" + ontologies: [] output: - - txt: - - meta: + txt: + - - meta: type: file description: infer_experiment results report pattern: "*.infer_experiment.txt" + ontologies: [] - "*.infer_experiment.txt": type: file description: infer_experiment results report pattern: "*.infer_experiment.txt" - - versions: - - versions.yml: - type: file - description: File containing software versions - pattern: "versions.yml" + ontologies: [] + versions_rseqc: + - - ${task.process}: + type: string + description: The name of the process + - rseqc: + type: string + description: The name of the tool + - infer_experiment.py --version | sed "s/infer_experiment.py //": + type: eval + description: The expression to obtain the version of the tool + +topics: + versions: + - - ${task.process}: + type: string + description: The name of the process + - rseqc: + type: string + description: The name of the tool + - infer_experiment.py --version | sed "s/infer_experiment.py //": + type: eval + description: The expression to obtain the version of the tool + authors: - "@drpatelh" - "@kevinmenden" + - "@rhassaine" maintainers: - "@drpatelh" - "@kevinmenden" + - "@rhassaine" diff --git a/modules/nf-core/rseqc/inferexperiment/tests/main.nf.test b/modules/nf-core/rseqc/inferexperiment/tests/main.nf.test index 37eb8b1f5..d0dce7843 100644 --- a/modules/nf-core/rseqc/inferexperiment/tests/main.nf.test +++ b/modules/nf-core/rseqc/inferexperiment/tests/main.nf.test @@ -5,17 +5,22 @@ nextflow_process { process "RSEQC_INFEREXPERIMENT" config "./nextflow.config" + tag "modules" + tag "modules_nfcore" + tag "rseqc" + tag "rseqc/inferexperiment" test("sarscov2 - [[meta] - bam] - bed") { when { process { """ - input[0] = Channel.of([ + input[0] = channel.of([ [ id:'test' ], // meta map - file(params.modules_testdata_base_path + "genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam", checkIfExists: true) + file(params.modules_testdata_base_path + "genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam", checkIfExists: true), + file(params.modules_testdata_base_path + "genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam.bai", checkIfExists: true) ]) - input[1] = Channel.of(file(params.modules_testdata_base_path + "genomics/sarscov2/genome/bed/test.bed", checkIfExists: true)) + input[1] = channel.of(file(params.modules_testdata_base_path + "genomics/sarscov2/genome/bed/test.bed", checkIfExists: true)) """ } } @@ -33,11 +38,12 @@ nextflow_process { when { process { """ - input[0] = Channel.of([ + input[0] = channel.of([ [ id:'test' ], // meta map - file(params.modules_testdata_base_path + "genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam", checkIfExists: true) + file(params.modules_testdata_base_path + "genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam", checkIfExists: true), + file(params.modules_testdata_base_path + "genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam.bai", checkIfExists: true) ]) - input[1] = Channel.of(file(params.modules_testdata_base_path + "genomics/sarscov2/genome/bed/test.bed", checkIfExists: true)) + input[1] = channel.of(file(params.modules_testdata_base_path + "genomics/sarscov2/genome/bed/test.bed", checkIfExists: true)) """ } } diff --git a/modules/nf-core/rseqc/inferexperiment/tests/main.nf.test.snap b/modules/nf-core/rseqc/inferexperiment/tests/main.nf.test.snap index e31c1129f..b1e258514 100644 --- a/modules/nf-core/rseqc/inferexperiment/tests/main.nf.test.snap +++ b/modules/nf-core/rseqc/inferexperiment/tests/main.nf.test.snap @@ -11,7 +11,11 @@ ] ], "1": [ - "versions.yml:md5,f56ba5c6208ae720dd730f3a432e3ba7" + [ + "RSEQC_INFEREXPERIMENT", + "rseqc", + "5.0.4" + ] ], "txt": [ [ @@ -21,16 +25,20 @@ "test.infer_experiment.txt:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "versions": [ - "versions.yml:md5,f56ba5c6208ae720dd730f3a432e3ba7" + "versions_rseqc": [ + [ + "RSEQC_INFEREXPERIMENT", + "rseqc", + "5.0.4" + ] ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" + "nf-test": "0.9.2", + "nextflow": "25.10.2" }, - "timestamp": "2024-06-21T09:34:31.050305" + "timestamp": "2025-12-10T13:17:45.425228866" }, "sarscov2 - [[meta] - bam] - bed": { "content": [ @@ -44,7 +52,11 @@ ] ], "1": [ - "versions.yml:md5,f56ba5c6208ae720dd730f3a432e3ba7" + [ + "RSEQC_INFEREXPERIMENT", + "rseqc", + "5.0.4" + ] ], "txt": [ [ @@ -54,15 +66,19 @@ "test.infer_experiment.txt:md5,f9d0bfc239df637cd8aeda40ade3c59a" ] ], - "versions": [ - "versions.yml:md5,f56ba5c6208ae720dd730f3a432e3ba7" + "versions_rseqc": [ + [ + "RSEQC_INFEREXPERIMENT", + "rseqc", + "5.0.4" + ] ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.01.0" + "nf-test": "0.9.2", + "nextflow": "25.10.2" }, - "timestamp": "2024-02-26T14:33:19.853327" + "timestamp": "2025-12-10T13:15:34.201975881" } } \ No newline at end of file diff --git a/modules/nf-core/rseqc/innerdistance/environment.yml b/modules/nf-core/rseqc/innerdistance/environment.yml index f1dc909fc..522ed09e2 100644 --- a/modules/nf-core/rseqc/innerdistance/environment.yml +++ b/modules/nf-core/rseqc/innerdistance/environment.yml @@ -4,5 +4,5 @@ channels: - conda-forge - bioconda dependencies: - - bioconda::rseqc=5.0.3 - - conda-forge::r-base>=3.5 + - bioconda::rseqc=5.0.4 + - conda-forge::r-base=4.3 diff --git a/modules/nf-core/rseqc/innerdistance/main.nf b/modules/nf-core/rseqc/innerdistance/main.nf index 207f5fb4d..7eddb2905 100644 --- a/modules/nf-core/rseqc/innerdistance/main.nf +++ b/modules/nf-core/rseqc/innerdistance/main.nf @@ -4,11 +4,11 @@ process RSEQC_INNERDISTANCE { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/rseqc:5.0.3--py39hf95cd2a_0' : - 'biocontainers/rseqc:5.0.3--py39hf95cd2a_0' }" + 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/6f/6f44b7933e2c2b1a340dc9485869974eb032d34e81af83716eb381964ee3e5e7/data' : + 'community.wave.seqera.io/library/rseqc_r-base:2e29d2dfda9cef15' }" input: - tuple val(meta), path(bam) + tuple val(meta), path(bam), path(bai) path bed output: @@ -17,7 +17,7 @@ process RSEQC_INNERDISTANCE { tuple val(meta), path("*mean.txt") , optional:true, emit: mean tuple val(meta), path("*.pdf") , optional:true, emit: pdf tuple val(meta), path("*.r") , optional:true, emit: rscript - path "versions.yml" , emit: versions + tuple val("${task.process}"), val('rseqc'), eval('inner_distance.py --version | sed "s/inner_distance.py //"'), emit: versions_rseqc, topic: versions when: task.ext.when == null || task.ext.when @@ -34,18 +34,10 @@ process RSEQC_INNERDISTANCE { $args \\ > stdout.txt head -n 2 stdout.txt > ${prefix}.inner_distance_mean.txt - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - rseqc: \$(inner_distance.py --version | sed -e "s/inner_distance.py //g") - END_VERSIONS """ } else { """ - cat <<-END_VERSIONS > versions.yml - "${task.process}": - rseqc: \$(inner_distance.py --version | sed -e "s/inner_distance.py //g") - END_VERSIONS + echo "inner_distance.py doesn't support single-end data" > ${prefix}.inner_distance.txt """ } @@ -57,10 +49,5 @@ process RSEQC_INNERDISTANCE { touch ${prefix}.inner_distance_mean.txt touch ${prefix}.inner_distance_plot.pdf touch ${prefix}.inner_distance_plot.r - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - rseqc: \$(inner_distance.py --version | sed -e "s/inner_distance.py //g") - END_VERSIONS """ } diff --git a/modules/nf-core/rseqc/innerdistance/meta.yml b/modules/nf-core/rseqc/innerdistance/meta.yml index 358e4d160..87e329da0 100644 --- a/modules/nf-core/rseqc/innerdistance/meta.yml +++ b/modules/nf-core/rseqc/innerdistance/meta.yml @@ -24,64 +24,100 @@ input: type: file description: the alignment in bam format pattern: "*.{bam}" - - - bed: + ontologies: [] + - bai: type: file - description: a bed file for the reference gene model - pattern: "*.{bed}" + description: BAM index file + pattern: "*.{bai}" + ontologies: [] + - bed: + type: file + description: a bed file for the reference gene model + pattern: "*.{bed}" + ontologies: [] output: - - distance: - - meta: + distance: + - - meta: type: file description: the inner distances pattern: "*.inner_distance.txt" + ontologies: [] - "*distance.txt": type: file description: the inner distances pattern: "*.inner_distance.txt" - - freq: - - meta: + ontologies: [] + freq: + - - meta: type: file - description: frequencies of different insert sizes - pattern: "*.inner_distance_freq.txt" + description: the inner distances + pattern: "*.inner_distance.txt" + ontologies: [] - "*freq.txt": type: file description: frequencies of different insert sizes pattern: "*.inner_distance_freq.txt" - - mean: - - meta: + ontologies: [] + mean: + - - meta: type: file - description: mean/median values of inner distances - pattern: "*.inner_distance_mean.txt" + description: the inner distances + pattern: "*.inner_distance.txt" + ontologies: [] - "*mean.txt": type: file description: mean/median values of inner distances pattern: "*.inner_distance_mean.txt" - - pdf: - - meta: + ontologies: [] + pdf: + - - meta: type: file - description: distribution plot of inner distances - pattern: "*.inner_distance_plot.pdf" + description: the inner distances + pattern: "*.inner_distance.txt" + ontologies: [] - "*.pdf": type: file description: distribution plot of inner distances pattern: "*.inner_distance_plot.pdf" - - rscript: - - meta: + ontologies: [] + rscript: + - - meta: type: file - description: script to reproduce the plot - pattern: "*.inner_distance_plot.R" + description: the inner distances + pattern: "*.inner_distance.txt" + ontologies: [] - "*.r": type: file description: script to reproduce the plot pattern: "*.inner_distance_plot.R" - - versions: - - versions.yml: - type: file - description: File containing software versions - pattern: "versions.yml" + ontologies: + - edam: http://edamontology.org/format_3999 # R script + versions_rseqc: + - - ${task.process}: + type: string + description: The process the versions were collected from + - rseqc: + type: string + description: The tool name + - inner_distance.py --version | sed "s/inner_distance.py //": + type: eval + description: The expression to obtain the version of the tool +topics: + versions: + - - ${task.process}: + type: string + description: The process the versions were collected from + - rseqc: + type: string + description: The tool name + - inner_distance.py --version | sed "s/inner_distance.py //": + type: eval + description: The expression to obtain the version of the tool authors: - "@drpatelh" - "@kevinmenden" + - "@rhassaine" maintainers: - "@drpatelh" - "@kevinmenden" + - "@rhassaine" diff --git a/modules/nf-core/rseqc/innerdistance/tests/main.nf.test b/modules/nf-core/rseqc/innerdistance/tests/main.nf.test index 633d27d12..26ad8f36c 100644 --- a/modules/nf-core/rseqc/innerdistance/tests/main.nf.test +++ b/modules/nf-core/rseqc/innerdistance/tests/main.nf.test @@ -3,19 +3,23 @@ nextflow_process { name "Test Process RSEQC_INNERDISTANCE" script "../main.nf" process "RSEQC_INNERDISTANCE" - config "./nextflow.config" + tag "modules" + tag "modules_nfcore" + tag "rseqc" + tag "rseqc/innerdistance" test("sarscov2 - [[meta] - bam] - bed") { when { process { """ - input[0] = Channel.of([ + input[0] = channel.of([ [ id:'test' ], // meta map - file(params.modules_testdata_base_path + "genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam", checkIfExists: true) + file(params.modules_testdata_base_path + "genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam", checkIfExists: true), + file(params.modules_testdata_base_path + "genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam.bai", checkIfExists: true) ]) - input[1] = Channel.of(file(params.modules_testdata_base_path + "genomics/sarscov2/genome/bed/test.bed12", checkIfExists: true)) + input[1] = channel.of(file(params.modules_testdata_base_path + "genomics/sarscov2/genome/bed/test.bed12", checkIfExists: true)) """ } } @@ -23,12 +27,14 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(file(process.out.pdf[0][1]).name).match("pdf") }, - { assert snapshot(process.out.distance).match("distance") }, - { assert snapshot(process.out.freq).match("freq") }, - { assert snapshot(process.out.freq).match("rscript") }, - { assert snapshot(process.out.mean).match("mean") }, - { assert snapshot(process.out.versions).match("versions") } + { assert snapshot( + file(process.out.pdf[0][1]).name, + process.out.distance, + process.out.freq, + process.out.mean, + process.out.rscript, + process.out.versions_rseqc + ).match() } ) } } @@ -40,11 +46,12 @@ nextflow_process { when { process { """ - input[0] = Channel.of([ + input[0] = channel.of([ [ id:'test' ], // meta map - file(params.modules_testdata_base_path + "genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam", checkIfExists: true) + file(params.modules_testdata_base_path + "genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam", checkIfExists: true), + file(params.modules_testdata_base_path + "genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam.bai", checkIfExists: true) ]) - input[1] = Channel.of(file(params.modules_testdata_base_path + "genomics/sarscov2/genome/bed/test.bed12", checkIfExists: true)) + input[1] = channel.of(file(params.modules_testdata_base_path + "genomics/sarscov2/genome/bed/test.bed12", checkIfExists: true)) """ } } @@ -52,7 +59,8 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(process.out).match() } + { assert snapshot(process.out).match() }, + { assert snapshot(process.out.versions_rseqc).match("versions") } ) } } diff --git a/modules/nf-core/rseqc/innerdistance/tests/main.nf.test.snap b/modules/nf-core/rseqc/innerdistance/tests/main.nf.test.snap index 83f33363a..a93f47918 100644 --- a/modules/nf-core/rseqc/innerdistance/tests/main.nf.test.snap +++ b/modules/nf-core/rseqc/innerdistance/tests/main.nf.test.snap @@ -1,76 +1,19 @@ { - "rscript": { - "content": [ - [ - [ - { - "id": "test" - }, - "test.inner_distance_freq.txt:md5,3fc037501f5899b5da009c8ce02fc25e" - ] - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.01.0" - }, - "timestamp": "2024-02-26T14:33:42.467401" - }, - "pdf": { - "content": [ - "test.inner_distance_plot.pdf" - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.01.0" - }, - "timestamp": "2024-02-26T14:33:42.461959" - }, - "distance": { - "content": [ - [ - [ - { - "id": "test" - }, - "test.inner_distance.txt:md5,a1acc9def0f64a5500d4c4cb47cbe32b" - ] - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.01.0" - }, - "timestamp": "2024-02-26T14:33:42.463083" - }, "versions": { - "content": [ - [ - "versions.yml:md5,3ca19644c7f02a53db3ffe50c7706797" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.01.0" - }, - "timestamp": "2024-02-26T14:33:42.474576" - }, - "mean": { "content": [ [ [ - { - "id": "test" - }, - "test.inner_distance_mean.txt:md5,58398b7d5a29a5e564f9e3c50b55996c" + "RSEQC_INNERDISTANCE", + "rseqc", + "5.0.4" ] ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.01.0" + "nf-test": "0.9.2", + "nextflow": "25.10.2" }, - "timestamp": "2024-02-26T14:33:42.470638" + "timestamp": "2025-12-16T11:17:41.715202246" }, "sarscov2 - [[meta] - bam] - bed - stub": { "content": [ @@ -116,7 +59,11 @@ ] ], "5": [ - "versions.yml:md5,3ca19644c7f02a53db3ffe50c7706797" + [ + "RSEQC_INNERDISTANCE", + "rseqc", + "5.0.4" + ] ], "distance": [ [ @@ -158,19 +105,32 @@ "test.inner_distance_plot.r:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "versions": [ - "versions.yml:md5,3ca19644c7f02a53db3ffe50c7706797" + "versions_rseqc": [ + [ + "RSEQC_INNERDISTANCE", + "rseqc", + "5.0.4" + ] ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" + "nf-test": "0.9.2", + "nextflow": "25.10.2" }, - "timestamp": "2024-06-21T09:22:20.844642" + "timestamp": "2025-12-12T12:31:48.540818468" }, - "freq": { + "sarscov2 - [[meta] - bam] - bed": { "content": [ + "test.inner_distance_plot.pdf", + [ + [ + { + "id": "test" + }, + "test.inner_distance.txt:md5,a1acc9def0f64a5500d4c4cb47cbe32b" + ] + ], [ [ { @@ -178,12 +138,35 @@ }, "test.inner_distance_freq.txt:md5,3fc037501f5899b5da009c8ce02fc25e" ] + ], + [ + [ + { + "id": "test" + }, + "test.inner_distance_mean.txt:md5,58398b7d5a29a5e564f9e3c50b55996c" + ] + ], + [ + [ + { + "id": "test" + }, + "test.inner_distance_plot.r:md5,5859fbd5b42046d47e8b9aa85077f4ea" + ] + ], + [ + [ + "RSEQC_INNERDISTANCE", + "rseqc", + "5.0.4" + ] ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.01.0" + "nf-test": "0.9.2", + "nextflow": "25.10.2" }, - "timestamp": "2024-02-26T14:33:42.464983" + "timestamp": "2025-12-12T11:22:52.085525681" } } \ No newline at end of file diff --git a/modules/nf-core/rseqc/innerdistance/tests/nextflow.config b/modules/nf-core/rseqc/innerdistance/tests/nextflow.config deleted file mode 100644 index 8730f1c4b..000000000 --- a/modules/nf-core/rseqc/innerdistance/tests/nextflow.config +++ /dev/null @@ -1,5 +0,0 @@ -process { - - publishDir = { "${params.outdir}/${task.process.tokenize(':')[-1].tokenize('_')[0].toLowerCase()}" } - -} diff --git a/modules/nf-core/rseqc/junctionannotation/environment.yml b/modules/nf-core/rseqc/junctionannotation/environment.yml index f1dc909fc..522ed09e2 100644 --- a/modules/nf-core/rseqc/junctionannotation/environment.yml +++ b/modules/nf-core/rseqc/junctionannotation/environment.yml @@ -4,5 +4,5 @@ channels: - conda-forge - bioconda dependencies: - - bioconda::rseqc=5.0.3 - - conda-forge::r-base>=3.5 + - bioconda::rseqc=5.0.4 + - conda-forge::r-base=4.3 diff --git a/modules/nf-core/rseqc/junctionannotation/main.nf b/modules/nf-core/rseqc/junctionannotation/main.nf index 7857b8c2c..b1748c2df 100644 --- a/modules/nf-core/rseqc/junctionannotation/main.nf +++ b/modules/nf-core/rseqc/junctionannotation/main.nf @@ -4,11 +4,11 @@ process RSEQC_JUNCTIONANNOTATION { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/rseqc:5.0.3--py39hf95cd2a_0' : - 'biocontainers/rseqc:5.0.3--py39hf95cd2a_0' }" + 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/6f/6f44b7933e2c2b1a340dc9485869974eb032d34e81af83716eb381964ee3e5e7/data' : + 'community.wave.seqera.io/library/rseqc_r-base:2e29d2dfda9cef15' }" input: - tuple val(meta), path(bam) + tuple val(meta), path(bam), path(bai) path bed output: @@ -19,7 +19,7 @@ process RSEQC_JUNCTIONANNOTATION { tuple val(meta), path("*.Interact.bed"), optional:true, emit: interact_bed tuple val(meta), path("*junction.pdf") , optional:true, emit: pdf tuple val(meta), path("*events.pdf") , optional:true, emit: events_pdf - path "versions.yml" , emit: versions + tuple val("${task.process}"), val('rseqc'), eval('junction_annotation.py --version | sed "s/junction_annotation.py //"'), emit: versions_rseqc, topic: versions when: task.ext.when == null || task.ext.when @@ -34,11 +34,6 @@ process RSEQC_JUNCTIONANNOTATION { -o $prefix \\ $args \\ 2>| >(grep -v 'E::idx_find_and_load' | tee ${prefix}.junction_annotation.log >&2) - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - rseqc: \$(junction_annotation.py --version | sed -e "s/junction_annotation.py //g") - END_VERSIONS """ stub: @@ -51,10 +46,5 @@ process RSEQC_JUNCTIONANNOTATION { touch ${prefix}.Interact.bed touch ${prefix}.junction.pdf touch ${prefix}.events.pdf - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - rseqc: \$(junction_annotation.py --version | sed -e "s/junction_annotation.py //g") - END_VERSIONS """ } diff --git a/modules/nf-core/rseqc/junctionannotation/meta.yml b/modules/nf-core/rseqc/junctionannotation/meta.yml index 0622ee43b..30d116a20 100644 --- a/modules/nf-core/rseqc/junctionannotation/meta.yml +++ b/modules/nf-core/rseqc/junctionannotation/meta.yml @@ -24,82 +24,121 @@ input: type: file description: the alignment in bam format pattern: "*.{bam}" - - - bed: + ontologies: [] + - bai: type: file - description: a bed file for the reference gene model - pattern: "*.{bed}" + description: BAM index file + pattern: "*.{bai}" + ontologies: [] + - bed: + type: file + description: a bed file for the reference gene model + pattern: "*.{bed}" + ontologies: [] output: - - xls: - - meta: + xls: + - - meta: type: file description: xls file with junction information pattern: "*.xls" + ontologies: [] - "*.xls": type: file description: xls file with junction information pattern: "*.xls" - - rscript: - - meta: + ontologies: [] + rscript: + - - meta: type: file - description: Rscript to reproduce the plots - pattern: "*.r" + description: xls file with junction information + pattern: "*.xls" + ontologies: [] - "*.r": type: file description: Rscript to reproduce the plots pattern: "*.r" - - log: - - meta: + ontologies: [] + log: + - - meta: type: file - description: Log file of execution - pattern: "*.junction_annotation.log" + description: xls file with junction information + pattern: "*.xls" + ontologies: [] - "*.log": type: file description: Log file of execution pattern: "*.junction_annotation.log" - - bed: - - meta: + ontologies: [] + bed: + - - meta: type: file - description: bed file of annotated junctions - pattern: "*.junction.bed" + description: xls file with junction information + pattern: "*.xls" + ontologies: [] - "*.junction.bed": type: file description: bed file of annotated junctions pattern: "*.junction.bed" - - interact_bed: - - meta: + ontologies: [] + interact_bed: + - - meta: type: file - description: Interact bed file - pattern: "*.Interact.bed" + description: xls file with junction information + pattern: "*.xls" + ontologies: [] - "*.Interact.bed": type: file description: Interact bed file pattern: "*.Interact.bed" - - pdf: - - meta: + ontologies: [] + pdf: + - - meta: type: file - description: junction plot - pattern: "*.junction.pdf" + description: xls file with junction information + pattern: "*.xls" + ontologies: [] - "*junction.pdf": type: file description: junction plot pattern: "*.junction.pdf" - - events_pdf: - - meta: + ontologies: [] + events_pdf: + - - meta: type: file - description: events plot - pattern: "*.events.pdf" + description: xls file with junction information + pattern: "*.xls" + ontologies: [] - "*events.pdf": type: file description: events plot pattern: "*.events.pdf" - - versions: - - versions.yml: - type: file - description: File containing software versions - pattern: "versions.yml" + ontologies: [] + versions_rseqc: + - - ${task.process}: + type: string + description: The process the versions were collected from + - rseqc: + type: string + description: The tool name + - junction_annotation.py --version | sed "s/junction_annotation.py //": + type: eval + description: The expression to obtain the version of the tool +topics: + versions: + - - ${task.process}: + type: string + description: The process the versions were collected from + - rseqc: + type: string + description: The tool name + - junction_annotation.py --version | sed "s/junction_annotation.py //": + type: eval + description: The expression to obtain the version of the tool of the tool authors: - "@drpatelh" - "@kevinmenden" + - "@rhassaine" maintainers: - "@drpatelh" - "@kevinmenden" + - "@rhassaine" diff --git a/modules/nf-core/rseqc/junctionannotation/tests/main.nf.test b/modules/nf-core/rseqc/junctionannotation/tests/main.nf.test index b0e4eb86c..f57c4d25c 100644 --- a/modules/nf-core/rseqc/junctionannotation/tests/main.nf.test +++ b/modules/nf-core/rseqc/junctionannotation/tests/main.nf.test @@ -4,17 +4,22 @@ nextflow_process { script "../main.nf" process "RSEQC_JUNCTIONANNOTATION" + tag "modules" + tag "modules_nfcore" + tag "rseqc" + tag "rseqc/junctionannotation" test("sarscov2 - paired end [bam]") { when { process { """ - input[0] = Channel.of([ + 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) + file(params.modules_testdata_base_path + "genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam", checkIfExists: true), + file(params.modules_testdata_base_path + "genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam.bai", checkIfExists: true) ]) - input[1] = Channel.of(file(params.modules_testdata_base_path + "genomics/sarscov2/genome/bed/test.bed", checkIfExists: true)) + input[1] = channel.of(file(params.modules_testdata_base_path + "genomics/sarscov2/genome/bed/test.bed12", checkIfExists: true)) """ } } @@ -22,10 +27,14 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert process.out.rscript.get(0).get(1) ==~ ".*/test.junction_plot.r" }, - { assert process.out.xls.get(0).get(1) ==~ ".*/test.junction.xls" }, - { assert snapshot(process.out.log).match("log") }, - { assert snapshot(process.out.versions).match("versions") } + { assert process.out.pdf.size() == 0 || file(process.out.pdf[0][1]).name.endsWith('.pdf') }, + { assert process.out.events_pdf.size() == 0 || file(process.out.events_pdf[0][1]).name.endsWith('.pdf') }, + { assert process.out.xls.size() == 0 || file(process.out.xls[0][1]).name.endsWith('.xls') }, + { assert process.out.rscript.size() == 0 || file(process.out.rscript[0][1]).name.endsWith('.r') }, + { assert snapshot( + process.out.log, + process.out.versions_rseqc + ).match() } ) } } @@ -37,11 +46,12 @@ nextflow_process { when { process { """ - input[0] = Channel.of([ + 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) + file(params.modules_testdata_base_path + "genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam", checkIfExists: true), + file(params.modules_testdata_base_path + "genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam.bai", checkIfExists: true) ]) - input[1] = Channel.of(file(params.modules_testdata_base_path + "genomics/sarscov2/genome/bed/test.bed", checkIfExists: true)) + input[1] = channel.of(file(params.modules_testdata_base_path + "genomics/sarscov2/genome/bed/test.bed12", checkIfExists: true)) """ } } @@ -49,7 +59,8 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(process.out).match() } + { assert snapshot(process.out).match() }, + { assert snapshot(process.out.versions_rseqc).match("versions") } ) } } diff --git a/modules/nf-core/rseqc/junctionannotation/tests/main.nf.test.snap b/modules/nf-core/rseqc/junctionannotation/tests/main.nf.test.snap index e87594f0b..03ab47c16 100644 --- a/modules/nf-core/rseqc/junctionannotation/tests/main.nf.test.snap +++ b/modules/nf-core/rseqc/junctionannotation/tests/main.nf.test.snap @@ -1,33 +1,19 @@ { - "log": { + "versions": { "content": [ [ [ - { - "id": "test", - "single_end": false - }, - "test.junction_annotation.log:md5,ef37d06d169a1adbeec23fddf82aee2b" + "RSEQC_JUNCTIONANNOTATION", + "rseqc", + "5.0.4" ] ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.01.0" + "nf-test": "0.9.2", + "nextflow": "25.10.2" }, - "timestamp": "2024-02-26T14:32:52.732937" - }, - "versions": { - "content": [ - [ - "versions.yml:md5,091865c0ebd6de262c9b0968b5771091" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.01.0" - }, - "timestamp": "2024-02-26T14:32:52.734515" + "timestamp": "2025-12-16T11:12:52.934637398" }, "sarscov2 - paired end [bam] - stub": { "content": [ @@ -96,7 +82,11 @@ ] ], "7": [ - "versions.yml:md5,091865c0ebd6de262c9b0968b5771091" + [ + "RSEQC_JUNCTIONANNOTATION", + "rseqc", + "5.0.4" + ] ], "bed": [ [ @@ -152,8 +142,12 @@ "test.junction_plot.r:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "versions": [ - "versions.yml:md5,091865c0ebd6de262c9b0968b5771091" + "versions_rseqc": [ + [ + "RSEQC_JUNCTIONANNOTATION", + "rseqc", + "5.0.4" + ] ], "xls": [ [ @@ -167,9 +161,34 @@ } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" + "nf-test": "0.9.2", + "nextflow": "25.10.2" + }, + "timestamp": "2025-12-10T15:03:34.433311514" + }, + "sarscov2 - paired end [bam]": { + "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + "test.junction_annotation.log:md5,d75e0f5d62fada8aa9449991b209554c" + ] + ], + [ + [ + "RSEQC_JUNCTIONANNOTATION", + "rseqc", + "5.0.4" + ] + ] + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "25.10.2" }, - "timestamp": "2024-06-21T09:39:10.213511" + "timestamp": "2025-12-16T11:12:46.525058132" } } \ No newline at end of file diff --git a/modules/nf-core/rseqc/junctionsaturation/environment.yml b/modules/nf-core/rseqc/junctionsaturation/environment.yml index f1dc909fc..522ed09e2 100644 --- a/modules/nf-core/rseqc/junctionsaturation/environment.yml +++ b/modules/nf-core/rseqc/junctionsaturation/environment.yml @@ -4,5 +4,5 @@ channels: - conda-forge - bioconda dependencies: - - bioconda::rseqc=5.0.3 - - conda-forge::r-base>=3.5 + - bioconda::rseqc=5.0.4 + - conda-forge::r-base=4.3 diff --git a/modules/nf-core/rseqc/junctionsaturation/main.nf b/modules/nf-core/rseqc/junctionsaturation/main.nf index 18f063f38..08b85ff1c 100644 --- a/modules/nf-core/rseqc/junctionsaturation/main.nf +++ b/modules/nf-core/rseqc/junctionsaturation/main.nf @@ -4,17 +4,17 @@ process RSEQC_JUNCTIONSATURATION { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/rseqc:5.0.3--py39hf95cd2a_0' : - 'biocontainers/rseqc:5.0.3--py39hf95cd2a_0' }" + 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/6f/6f44b7933e2c2b1a340dc9485869974eb032d34e81af83716eb381964ee3e5e7/data' : + 'community.wave.seqera.io/library/rseqc_r-base:2e29d2dfda9cef15' }" input: - tuple val(meta), path(bam) + tuple val(meta), path(bam), path(bai) path bed output: tuple val(meta), path("*.pdf"), emit: pdf tuple val(meta), path("*.r") , emit: rscript - path "versions.yml" , emit: versions + tuple val("${task.process}"), val('rseqc'), eval('junction_saturation.py --version | sed "s/junction_saturation.py //"'), emit: versions_rseqc, topic: versions when: task.ext.when == null || task.ext.when @@ -28,11 +28,6 @@ process RSEQC_JUNCTIONSATURATION { -r $bed \\ -o $prefix \\ $args - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - rseqc: \$(junction_saturation.py --version | sed -e "s/junction_saturation.py //g") - END_VERSIONS """ stub: @@ -40,10 +35,5 @@ process RSEQC_JUNCTIONSATURATION { """ touch ${prefix}.junctionSaturation_plot.pdf touch ${prefix}.junctionSaturation_plot.r - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - rseqc: \$(junction_saturation.py --version | sed -e "s/junction_saturation.py //g") - END_VERSIONS """ } diff --git a/modules/nf-core/rseqc/junctionsaturation/meta.yml b/modules/nf-core/rseqc/junctionsaturation/meta.yml index b6f422dc7..4f2626828 100644 --- a/modules/nf-core/rseqc/junctionsaturation/meta.yml +++ b/modules/nf-core/rseqc/junctionsaturation/meta.yml @@ -24,37 +24,66 @@ input: type: file description: the alignment in bam format pattern: "*.{bam}" - - - bed: + ontologies: [] + - bai: type: file - description: a bed file for the reference gene model - pattern: "*.{bed}" + description: BAM index file + pattern: "*.{bai}" + ontologies: [] + - bed: + type: file + description: a bed file for the reference gene model + pattern: "*.{bed}" + ontologies: [] output: - - pdf: - - meta: + pdf: + - - meta: type: file description: Junction saturation report pattern: "*.pdf" + ontologies: [] - "*.pdf": type: file description: Junction saturation report pattern: "*.pdf" - - rscript: - - meta: + ontologies: [] + rscript: + - - meta: type: file - description: Junction saturation R-script - pattern: "*.r" + description: Junction saturation report + pattern: "*.pdf" + ontologies: [] - "*.r": type: file description: Junction saturation R-script pattern: "*.r" - - versions: - - versions.yml: - type: file - description: File containing software versions - pattern: "versions.yml" + ontologies: [] + versions_rseqc: + - - ${task.process}: + type: string + description: The process the versions were collected from + - rseqc: + type: string + description: The tool name + - junction_saturation.py --version | sed "s/junction_saturation.py //": + type: eval + description: The expression to obtain the version of the tool +topics: + versions: + - - ${task.process}: + type: string + description: The process the versions were collected from + - rseqc: + type: string + description: The tool name + - junction_saturation.py --version | sed "s/junction_saturation.py //": + type: eval + description: The expression to obtain the version of the tool authors: - "@drpatelh" - "@kevinmenden" + - "@rhassaine" maintainers: - "@drpatelh" - "@kevinmenden" + - "@rhassaine" diff --git a/modules/nf-core/rseqc/junctionsaturation/tests/main.nf.test b/modules/nf-core/rseqc/junctionsaturation/tests/main.nf.test index 311125576..f825f2db7 100644 --- a/modules/nf-core/rseqc/junctionsaturation/tests/main.nf.test +++ b/modules/nf-core/rseqc/junctionsaturation/tests/main.nf.test @@ -4,17 +4,22 @@ nextflow_process { script "../main.nf" process "RSEQC_JUNCTIONSATURATION" + tag "modules" + tag "modules_nfcore" + tag "rseqc" + tag "rseqc/junctionsaturation" test("sarscov2 paired-end [bam]") { when { process { """ - input[0] = Channel.of([ + 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) + file(params.modules_testdata_base_path + "genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam", checkIfExists: true), + file(params.modules_testdata_base_path + "genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam.bai", checkIfExists: true) ]) - input[1] = file(params.modules_testdata_base_path + "genomics/sarscov2/genome/bed/test.bed", checkIfExists: true) + input[1] = file(params.modules_testdata_base_path + "genomics/sarscov2/genome/bed/test.bed12", checkIfExists: true) """ } } @@ -22,9 +27,11 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(file(process.out.pdf[0][1]).name).match("pdf") }, - { assert snapshot(process.out.rscript).match("rscript") }, - { assert snapshot(process.out.versions).match("versions") } + { assert snapshot( + file(process.out.pdf[0][1]).name, + process.out.rscript, + process.out.versions_rseqc + ).match() } ) } } @@ -36,11 +43,12 @@ nextflow_process { when { process { """ - input[0] = Channel.of([ + 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) + file(params.modules_testdata_base_path + "genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam", checkIfExists: true), + file(params.modules_testdata_base_path + "genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam.bai", checkIfExists: true) ]) - input[1] = file(params.modules_testdata_base_path + "genomics/sarscov2/genome/bed/test.bed", checkIfExists: true) + input[1] = file(params.modules_testdata_base_path + "genomics/sarscov2/genome/bed/test.bed12", checkIfExists: true) """ } } diff --git a/modules/nf-core/rseqc/junctionsaturation/tests/main.nf.test.snap b/modules/nf-core/rseqc/junctionsaturation/tests/main.nf.test.snap index 8d702a4ef..956af34fb 100644 --- a/modules/nf-core/rseqc/junctionsaturation/tests/main.nf.test.snap +++ b/modules/nf-core/rseqc/junctionsaturation/tests/main.nf.test.snap @@ -1,6 +1,7 @@ { - "rscript": { + "sarscov2 paired-end [bam]": { "content": [ + "test.junctionSaturation_plot.pdf", [ [ { @@ -9,35 +10,20 @@ }, "test.junctionSaturation_plot.r:md5,caa6e63dcb477aabb169882b2f30dadd" ] - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.01.0" - }, - "timestamp": "2024-02-26T14:32:24.018924" - }, - "pdf": { - "content": [ - "test.junctionSaturation_plot.pdf" - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.01.0" - }, - "timestamp": "2024-02-26T14:32:24.011942" - }, - "versions": { - "content": [ + ], [ - "versions.yml:md5,cd4638541a825dbd44e3cb65d2980aa1" + [ + "RSEQC_JUNCTIONSATURATION", + "rseqc", + "5.0.4" + ] ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.01.0" + "nf-test": "0.9.2", + "nextflow": "25.10.2" }, - "timestamp": "2024-02-26T14:32:24.021984" + "timestamp": "2025-12-11T14:31:38.120944367" }, "sarscov2 paired-end [bam] - stub": { "content": [ @@ -61,7 +47,11 @@ ] ], "2": [ - "versions.yml:md5,cd4638541a825dbd44e3cb65d2980aa1" + [ + "RSEQC_JUNCTIONSATURATION", + "rseqc", + "5.0.4" + ] ], "pdf": [ [ @@ -81,15 +71,19 @@ "test.junctionSaturation_plot.r:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "versions": [ - "versions.yml:md5,cd4638541a825dbd44e3cb65d2980aa1" + "versions_rseqc": [ + [ + "RSEQC_JUNCTIONSATURATION", + "rseqc", + "5.0.4" + ] ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" + "nf-test": "0.9.2", + "nextflow": "25.10.2" }, - "timestamp": "2024-06-21T09:43:55.853893" + "timestamp": "2025-12-10T15:09:58.928551451" } } \ No newline at end of file diff --git a/modules/nf-core/rseqc/readdistribution/environment.yml b/modules/nf-core/rseqc/readdistribution/environment.yml index f1dc909fc..522ed09e2 100644 --- a/modules/nf-core/rseqc/readdistribution/environment.yml +++ b/modules/nf-core/rseqc/readdistribution/environment.yml @@ -4,5 +4,5 @@ channels: - conda-forge - bioconda dependencies: - - bioconda::rseqc=5.0.3 - - conda-forge::r-base>=3.5 + - bioconda::rseqc=5.0.4 + - conda-forge::r-base=4.3 diff --git a/modules/nf-core/rseqc/readdistribution/main.nf b/modules/nf-core/rseqc/readdistribution/main.nf index 1d9406491..e055485b1 100644 --- a/modules/nf-core/rseqc/readdistribution/main.nf +++ b/modules/nf-core/rseqc/readdistribution/main.nf @@ -4,16 +4,16 @@ process RSEQC_READDISTRIBUTION { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/rseqc:5.0.3--py39hf95cd2a_0' : - 'biocontainers/rseqc:5.0.3--py39hf95cd2a_0' }" + 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/6f/6f44b7933e2c2b1a340dc9485869974eb032d34e81af83716eb381964ee3e5e7/data' : + 'community.wave.seqera.io/library/rseqc_r-base:2e29d2dfda9cef15' }" input: - tuple val(meta), path(bam) + tuple val(meta), path(bam), path(bai) path bed output: tuple val(meta), path("*.read_distribution.txt"), emit: txt - path "versions.yml" , emit: versions + tuple val("${task.process}"), val('rseqc'), eval('read_distribution.py --version | sed "s/read_distribution.py //"'), emit: versions_rseqc, topic: versions when: task.ext.when == null || task.ext.when @@ -23,24 +23,15 @@ process RSEQC_READDISTRIBUTION { def prefix = task.ext.prefix ?: "${meta.id}" """ read_distribution.py \\ + $args \\ -i $bam \\ -r $bed \\ > ${prefix}.read_distribution.txt - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - rseqc: \$(read_distribution.py --version | sed -e "s/read_distribution.py //g") - END_VERSIONS """ stub: def prefix = task.ext.prefix ?: "${meta.id}" """ touch ${prefix}.read_distribution.txt - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - rseqc: \$(read_distribution.py --version | sed -e "s/read_distribution.py //g") - END_VERSIONS """ } diff --git a/modules/nf-core/rseqc/readdistribution/meta.yml b/modules/nf-core/rseqc/readdistribution/meta.yml index 578200abb..4b46ef30d 100644 --- a/modules/nf-core/rseqc/readdistribution/meta.yml +++ b/modules/nf-core/rseqc/readdistribution/meta.yml @@ -24,28 +24,55 @@ input: type: file description: the alignment in bam format pattern: "*.{bam}" - - - bed: + ontologies: [] + - bai: type: file - description: a bed file for the reference gene model - pattern: "*.{bed}" + description: BAM index file + pattern: "*.{bai}" + ontologies: [] + - bed: + type: file + description: a bed file for the reference gene model + pattern: "*.{bed}" + ontologies: [] output: - - txt: - - meta: + txt: + - - meta: type: file description: the read distribution report pattern: "*.read_distribution.txt" + ontologies: [] - "*.read_distribution.txt": type: file description: the read distribution report pattern: "*.read_distribution.txt" - - versions: - - versions.yml: - type: file - description: File containing software versions - pattern: "versions.yml" + ontologies: [] + versions_rseqc: + - - ${task.process}: + type: string + description: The process the versions were collected from + - rseqc: + type: string + description: The tool name + - read_distribution.py --version | sed "s/read_distribution.py //": + type: eval + description: The expression to obtain the version of the tool +topics: + versions: + - - ${task.process}: + type: string + description: The process the versions were collected from + - rseqc: + type: string + description: The tool name + - read_distribution.py --version | sed "s/read_distribution.py //": + type: eval + description: The expression to obtain the version of the tool authors: - "@drpatelh" - "@kevinmenden" + - "@rhassaine" maintainers: - "@drpatelh" - "@kevinmenden" + - "@rhassaine" diff --git a/modules/nf-core/rseqc/readdistribution/tests/main.nf.test b/modules/nf-core/rseqc/readdistribution/tests/main.nf.test index c49c558de..5b37cb341 100644 --- a/modules/nf-core/rseqc/readdistribution/tests/main.nf.test +++ b/modules/nf-core/rseqc/readdistribution/tests/main.nf.test @@ -3,17 +3,22 @@ nextflow_process { name "Test Process RSEQC_READDISTRIBUTION" script "../main.nf" process "RSEQC_READDISTRIBUTION" + tag "modules" + tag "modules_nfcore" + tag "rseqc" + tag "rseqc/readdistribution" test("sarscov2 paired-end [bam]") { when { process { """ - input[0] = Channel.of([ + 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) + file(params.modules_testdata_base_path + "genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam", checkIfExists: true), + file(params.modules_testdata_base_path + "genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam.bai", checkIfExists: true) ]) - input[1] = Channel.of(file(params.modules_testdata_base_path + "genomics/sarscov2/genome/bed/test.bed12", checkIfExists: true)) + input[1] = channel.of(file(params.modules_testdata_base_path + "genomics/sarscov2/genome/bed/test.bed12", checkIfExists: true)) """ } } @@ -33,11 +38,12 @@ nextflow_process { when { process { """ - input[0] = Channel.of([ + 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) + file(params.modules_testdata_base_path + "genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam", checkIfExists: true), + file(params.modules_testdata_base_path + "genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam.bai", checkIfExists: true) ]) - input[1] = Channel.of(file(params.modules_testdata_base_path + "genomics/sarscov2/genome/bed/test.bed12", checkIfExists: true)) + input[1] = channel.of(file(params.modules_testdata_base_path + "genomics/sarscov2/genome/bed/test.bed12", checkIfExists: true)) """ } } diff --git a/modules/nf-core/rseqc/readdistribution/tests/main.nf.test.snap b/modules/nf-core/rseqc/readdistribution/tests/main.nf.test.snap index 02e5e6117..25e1829bc 100644 --- a/modules/nf-core/rseqc/readdistribution/tests/main.nf.test.snap +++ b/modules/nf-core/rseqc/readdistribution/tests/main.nf.test.snap @@ -12,7 +12,11 @@ ] ], "1": [ - "versions.yml:md5,fc68a268ab32a0d72a66f270d6c7925e" + [ + "RSEQC_READDISTRIBUTION", + "rseqc", + "5.0.4" + ] ], "txt": [ [ @@ -23,16 +27,20 @@ "test.read_distribution.txt:md5,56893fdc0809d968629a363551a1655f" ] ], - "versions": [ - "versions.yml:md5,fc68a268ab32a0d72a66f270d6c7925e" + "versions_rseqc": [ + [ + "RSEQC_READDISTRIBUTION", + "rseqc", + "5.0.4" + ] ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.01.0" + "nf-test": "0.9.2", + "nextflow": "25.10.2" }, - "timestamp": "2024-02-26T15:38:36.441841" + "timestamp": "2025-12-11T14:49:56.413225535" }, "sarscov2 paired-end [bam] - stub": { "content": [ @@ -47,7 +55,11 @@ ] ], "1": [ - "versions.yml:md5,fc68a268ab32a0d72a66f270d6c7925e" + [ + "RSEQC_READDISTRIBUTION", + "rseqc", + "5.0.4" + ] ], "txt": [ [ @@ -58,15 +70,19 @@ "test.read_distribution.txt:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "versions": [ - "versions.yml:md5,fc68a268ab32a0d72a66f270d6c7925e" + "versions_rseqc": [ + [ + "RSEQC_READDISTRIBUTION", + "rseqc", + "5.0.4" + ] ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" + "nf-test": "0.9.2", + "nextflow": "25.10.2" }, - "timestamp": "2024-06-21T09:50:29.345905" + "timestamp": "2025-12-11T14:50:02.619740426" } } \ No newline at end of file diff --git a/modules/nf-core/rseqc/readduplication/environment.yml b/modules/nf-core/rseqc/readduplication/environment.yml index f1dc909fc..522ed09e2 100644 --- a/modules/nf-core/rseqc/readduplication/environment.yml +++ b/modules/nf-core/rseqc/readduplication/environment.yml @@ -4,5 +4,5 @@ channels: - conda-forge - bioconda dependencies: - - bioconda::rseqc=5.0.3 - - conda-forge::r-base>=3.5 + - bioconda::rseqc=5.0.4 + - conda-forge::r-base=4.3 diff --git a/modules/nf-core/rseqc/readduplication/main.nf b/modules/nf-core/rseqc/readduplication/main.nf index 354338021..442ebc90c 100644 --- a/modules/nf-core/rseqc/readduplication/main.nf +++ b/modules/nf-core/rseqc/readduplication/main.nf @@ -4,18 +4,18 @@ process RSEQC_READDUPLICATION { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/rseqc:5.0.3--py39hf95cd2a_0' : - 'biocontainers/rseqc:5.0.3--py39hf95cd2a_0' }" + 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/6f/6f44b7933e2c2b1a340dc9485869974eb032d34e81af83716eb381964ee3e5e7/data' : + 'community.wave.seqera.io/library/rseqc_r-base:2e29d2dfda9cef15' }" input: - tuple val(meta), path(bam) + tuple val(meta), path(bam), path(bai) output: tuple val(meta), path("*seq.DupRate.xls"), emit: seq_xls tuple val(meta), path("*pos.DupRate.xls"), emit: pos_xls tuple val(meta), path("*.pdf") , emit: pdf tuple val(meta), path("*.r") , emit: rscript - path "versions.yml" , emit: versions + tuple val("${task.process}"), val('rseqc'), eval('read_duplication.py --version | sed "s/read_duplication.py //"'), emit: versions_rseqc, topic: versions when: task.ext.when == null || task.ext.when @@ -28,11 +28,6 @@ process RSEQC_READDUPLICATION { -i $bam \\ -o $prefix \\ $args - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - rseqc: \$(read_duplication.py --version | sed -e "s/read_duplication.py //g") - END_VERSIONS """ stub: @@ -42,10 +37,5 @@ process RSEQC_READDUPLICATION { touch ${prefix}.pos.DupRate.xls touch ${prefix}.DupRate_plot.pdf touch ${prefix}.DupRate_plot.r - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - rseqc: \$(read_duplication.py --version | sed -e "s/read_duplication.py //g") - END_VERSIONS """ } diff --git a/modules/nf-core/rseqc/readduplication/meta.yml b/modules/nf-core/rseqc/readduplication/meta.yml index ef94122e9..8ad367da7 100644 --- a/modules/nf-core/rseqc/readduplication/meta.yml +++ b/modules/nf-core/rseqc/readduplication/meta.yml @@ -25,51 +25,84 @@ input: type: file description: the alignment in bam format pattern: "*.{bam}" + ontologies: [] + - bai: + type: file + description: BAM index file + pattern: "*.{bai}" + ontologies: [] output: - - seq_xls: - - meta: + seq_xls: + - - meta: type: file description: Read duplication rate determined from mapping position of read pattern: "*seq.DupRate.xls" + ontologies: [] - "*seq.DupRate.xls": type: file description: Read duplication rate determined from mapping position of read pattern: "*seq.DupRate.xls" - - pos_xls: - - meta: + ontologies: [] + pos_xls: + - - meta: type: file - description: Read duplication rate determined from sequence of read - pattern: "*pos.DupRate.xls" + description: Read duplication rate determined from mapping position of read + pattern: "*seq.DupRate.xls" + ontologies: [] - "*pos.DupRate.xls": type: file description: Read duplication rate determined from sequence of read pattern: "*pos.DupRate.xls" - - pdf: - - meta: + ontologies: [] + pdf: + - - meta: type: file - description: plot of duplication rate - pattern: "*.pdf" + description: Read duplication rate determined from mapping position of read + pattern: "*seq.DupRate.xls" + ontologies: [] - "*.pdf": type: file description: plot of duplication rate pattern: "*.pdf" - - rscript: - - meta: + ontologies: [] + rscript: + - - meta: type: file - description: script to reproduce the plot - pattern: "*.R" + description: Read duplication rate determined from mapping position of read + pattern: "*seq.DupRate.xls" + ontologies: [] - "*.r": type: file description: script to reproduce the plot pattern: "*.R" - - versions: - - versions.yml: - type: file - description: File containing software versions - pattern: "versions.yml" + ontologies: + - edam: http://edamontology.org/format_3999 # R script + versions_rseqc: + - - ${task.process}: + type: string + description: The process the versions were collected from + - rseqc: + type: string + description: The tool name + - read_duplication.py --version | sed "s/read_duplication.py //": + type: eval + description: The expression to obtain the version of the tool +topics: + versions: + - - ${task.process}: + type: string + description: The process the versions were collected from + - rseqc: + type: string + description: The tool name + - read_duplication.py --version | sed "s/read_duplication.py //": + type: eval + description: The expression to obtain the version of the tool authors: - "@drpatelh" - "@kevinmenden" + - "@rhassaine" maintainers: - "@drpatelh" - "@kevinmenden" + - "@rhassaine" diff --git a/modules/nf-core/rseqc/readduplication/tests/main.nf.test b/modules/nf-core/rseqc/readduplication/tests/main.nf.test index a6ffced4c..693547d1a 100644 --- a/modules/nf-core/rseqc/readduplication/tests/main.nf.test +++ b/modules/nf-core/rseqc/readduplication/tests/main.nf.test @@ -3,15 +3,20 @@ nextflow_process { name "Test Process RSEQC_READDUPLICATION" script "../main.nf" process "RSEQC_READDUPLICATION" + tag "modules" + tag "modules_nfcore" + tag "rseqc" + tag "rseqc/readduplication" test("sarscov2 paired-end [bam]") { when { process { """ - input[0] = Channel.of([ + 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) + file(params.modules_testdata_base_path + "genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam", checkIfExists: true), + file(params.modules_testdata_base_path + "genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam.bai", checkIfExists: true) ]) """ } @@ -20,11 +25,13 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(file(process.out.pdf[0][1]).name).match("pdf") }, - { assert snapshot(process.out.pos_xls).match("pos_xls") }, - { assert snapshot(process.out.rscript).match("rscript") }, - { assert snapshot(process.out.seq_xls).match("seq_xls") }, - { assert snapshot(process.out.versions).match("versions") } + { assert snapshot( + file(process.out.pdf[0][1]).name, + process.out.pos_xls, + process.out.rscript, + process.out.seq_xls, + process.out.versions_rseqc + ).match() } ) } } @@ -36,9 +43,10 @@ nextflow_process { when { process { """ - input[0] = Channel.of([ + 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) + file(params.modules_testdata_base_path + "genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam", checkIfExists: true), + file(params.modules_testdata_base_path + "genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam.bai", checkIfExists: true) ]) """ } diff --git a/modules/nf-core/rseqc/readduplication/tests/main.nf.test.snap b/modules/nf-core/rseqc/readduplication/tests/main.nf.test.snap index 143a29dc6..6ca20ad93 100644 --- a/modules/nf-core/rseqc/readduplication/tests/main.nf.test.snap +++ b/modules/nf-core/rseqc/readduplication/tests/main.nf.test.snap @@ -1,6 +1,7 @@ { - "pos_xls": { + "sarscov2 paired-end [bam]": { "content": [ + "test.DupRate_plot.pdf", [ [ { @@ -9,16 +10,7 @@ }, "test.pos.DupRate.xls:md5,a859bc2031d46bf1cc4336205847caa3" ] - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.01.0" - }, - "timestamp": "2024-02-26T15:43:14.989834" - }, - "rscript": { - "content": [ + ], [ [ { @@ -27,26 +19,7 @@ }, "test.DupRate_plot.r:md5,3c0325095cee4835b921e57d61c23dca" ] - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.01.0" - }, - "timestamp": "2024-02-26T15:43:15.045525" - }, - "pdf": { - "content": [ - "test.DupRate_plot.pdf" - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.01.0" - }, - "timestamp": "2024-02-26T14:33:06.857254" - }, - "seq_xls": { - "content": [ + ], [ [ { @@ -55,25 +28,20 @@ }, "test.seq.DupRate.xls:md5,ee8783399eec5a18522a6f08bece338b" ] - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.01.0" - }, - "timestamp": "2024-02-26T15:43:15.101953" - }, - "versions": { - "content": [ + ], [ - "versions.yml:md5,8a0721f3247f97135eadb8eecbe142a1" + [ + "RSEQC_READDUPLICATION", + "rseqc", + "5.0.4" + ] ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.01.0" + "nf-test": "0.9.2", + "nextflow": "25.10.2" }, - "timestamp": "2024-02-26T14:33:06.877127" + "timestamp": "2025-12-11T15:22:07.908044925" }, "sarscov2 paired-end [bam] - stub": { "content": [ @@ -115,7 +83,11 @@ ] ], "4": [ - "versions.yml:md5,8a0721f3247f97135eadb8eecbe142a1" + [ + "RSEQC_READDUPLICATION", + "rseqc", + "5.0.4" + ] ], "pdf": [ [ @@ -153,15 +125,19 @@ "test.seq.DupRate.xls:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "versions": [ - "versions.yml:md5,8a0721f3247f97135eadb8eecbe142a1" + "versions_rseqc": [ + [ + "RSEQC_READDUPLICATION", + "rseqc", + "5.0.4" + ] ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" + "nf-test": "0.9.2", + "nextflow": "25.10.2" }, - "timestamp": "2024-06-21T09:53:03.817194" + "timestamp": "2025-12-11T15:22:13.974266658" } } \ No newline at end of file diff --git a/modules/nf-core/rseqc/tin/environment.yml b/modules/nf-core/rseqc/tin/environment.yml index f1dc909fc..522ed09e2 100644 --- a/modules/nf-core/rseqc/tin/environment.yml +++ b/modules/nf-core/rseqc/tin/environment.yml @@ -4,5 +4,5 @@ channels: - conda-forge - bioconda dependencies: - - bioconda::rseqc=5.0.3 - - conda-forge::r-base>=3.5 + - bioconda::rseqc=5.0.4 + - conda-forge::r-base=4.3 diff --git a/modules/nf-core/rseqc/tin/main.nf b/modules/nf-core/rseqc/tin/main.nf index 397442f03..e7cfda0bb 100644 --- a/modules/nf-core/rseqc/tin/main.nf +++ b/modules/nf-core/rseqc/tin/main.nf @@ -4,8 +4,8 @@ process RSEQC_TIN { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/rseqc:5.0.3--py39hf95cd2a_0' : - 'biocontainers/rseqc:5.0.3--py39hf95cd2a_0' }" + 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/6f/6f44b7933e2c2b1a340dc9485869974eb032d34e81af83716eb381964ee3e5e7/data' : + 'community.wave.seqera.io/library/rseqc_r-base:2e29d2dfda9cef15' }" input: tuple val(meta), path(bam), path(bai) @@ -14,7 +14,7 @@ process RSEQC_TIN { output: tuple val(meta), path("*.txt"), emit: txt tuple val(meta), path("*.xls"), emit: xls - path "versions.yml" , emit: versions + tuple val("${task.process}"), val('rseqc'), eval('tin.py --version | sed "s/tin.py //"'), emit: versions_rseqc, topic: versions when: task.ext.when == null || task.ext.when @@ -28,21 +28,14 @@ process RSEQC_TIN { -r $bed \\ $args - cat <<-END_VERSIONS > versions.yml - "${task.process}": - rseqc: \$(tin.py --version | sed -e "s/tin.py //g") - END_VERSIONS + mv ${bam.baseName}.summary.txt ${prefix}.summary.txt + mv ${bam.baseName}.tin.xls ${prefix}.tin.xls """ stub: def prefix = task.ext.prefix ?: "${meta.id}" """ - touch ${bam.fileName}.summary.txt - touch ${bam.fileName}.tin.xls - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - rseqc: \$(tin.py --version | sed -e "s/tin.py //g") - END_VERSIONS + touch ${prefix}.summary.txt + touch ${prefix}.tin.xls """ } diff --git a/modules/nf-core/rseqc/tin/meta.yml b/modules/nf-core/rseqc/tin/meta.yml index 29fa68b32..eeb9c3586 100644 --- a/modules/nf-core/rseqc/tin/meta.yml +++ b/modules/nf-core/rseqc/tin/meta.yml @@ -24,39 +24,64 @@ input: type: file description: Input BAM file pattern: "*.{bam}" + ontologies: [] - bai: type: file description: Index for input BAM file pattern: "*.{bai}" - - - bed: - type: file - description: BED file containing the reference gene model - pattern: "*.{bed}" + ontologies: [] + - bed: + type: file + description: BED file containing the reference gene model + pattern: "*.{bed}" + ontologies: [] output: - - txt: - - meta: + txt: + - - meta: type: file description: TXT file containing tin.py results summary pattern: "*.txt" + ontologies: [] - "*.txt": type: file description: TXT file containing tin.py results summary pattern: "*.txt" - - xls: - - meta: + ontologies: [] + xls: + - - meta: type: file - description: XLS file containing tin.py results - pattern: "*.xls" + description: TXT file containing tin.py results summary + pattern: "*.txt" + ontologies: [] - "*.xls": type: file description: XLS file containing tin.py results pattern: "*.xls" - - versions: - - versions.yml: - type: file - description: File containing software versions - pattern: "versions.yml" + ontologies: [] + versions_rseqc: + - - ${task.process}: + type: string + description: The process the versions were collected from + - rseqc: + type: string + description: The tool name + - tin.py --version | sed "s/tin.py //": + type: eval + description: The expression to obtain the version of the tool +topics: + versions: + - - ${task.process}: + type: string + description: The process the versions were collected from + - rseqc: + type: string + description: The tool name + - tin.py --version | sed "s/tin.py //": + type: eval + description: The expression to obtain the version of the tool authors: - "@drpatelh" + - "@rhassaine" maintainers: - "@drpatelh" + - "@rhassaine" diff --git a/modules/nf-core/rseqc/tin/tests/main.nf.test b/modules/nf-core/rseqc/tin/tests/main.nf.test index a4b6f05d4..ee506cf0b 100644 --- a/modules/nf-core/rseqc/tin/tests/main.nf.test +++ b/modules/nf-core/rseqc/tin/tests/main.nf.test @@ -3,18 +3,22 @@ nextflow_process { name "Test Process RSEQC_TIN" script "../main.nf" process "RSEQC_TIN" + tag "modules" + tag "modules_nfcore" + tag "rseqc" + tag "rseqc/tin" test("sarscov2 paired-end [bam]") { when { process { """ - input[0] = Channel.of([ + 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), file(params.modules_testdata_base_path + "genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam.bai", checkIfExists: true) ]) - input[1] = Channel.of(file(params.modules_testdata_base_path + "genomics/sarscov2/genome/bed/test.bed12", checkIfExists: true)) + input[1] = channel.of(file(params.modules_testdata_base_path + "genomics/sarscov2/genome/bed/test.bed12", checkIfExists: true)) """ } } @@ -34,12 +38,12 @@ nextflow_process { when { process { """ - input[0] = Channel.of([ + 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), file(params.modules_testdata_base_path + "genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam.bai", checkIfExists: true) ]) - input[1] = Channel.of(file(params.modules_testdata_base_path + "genomics/sarscov2/genome/bed/test.bed12", checkIfExists: true)) + input[1] = channel.of(file(params.modules_testdata_base_path + "genomics/sarscov2/genome/bed/test.bed12", checkIfExists: true)) """ } } diff --git a/modules/nf-core/rseqc/tin/tests/main.nf.test.snap b/modules/nf-core/rseqc/tin/tests/main.nf.test.snap index caab3a091..83b1a2cbe 100644 --- a/modules/nf-core/rseqc/tin/tests/main.nf.test.snap +++ b/modules/nf-core/rseqc/tin/tests/main.nf.test.snap @@ -8,7 +8,7 @@ "id": "test", "single_end": false }, - "test.paired_end.sorted.summary.txt:md5,9d98447e178b89a89f6f5aba7a772fe6" + "test.summary.txt:md5,9d98447e178b89a89f6f5aba7a772fe6" ] ], "1": [ @@ -17,11 +17,15 @@ "id": "test", "single_end": false }, - "test.paired_end.sorted.tin.xls:md5,abdbb6d51a5cd7038cd862ce241ecef1" + "test.tin.xls:md5,abdbb6d51a5cd7038cd862ce241ecef1" ] ], "2": [ - "versions.yml:md5,79670dedaa11a978951c16ead7f49c24" + [ + "RSEQC_TIN", + "rseqc", + "5.0.4" + ] ], "txt": [ [ @@ -29,11 +33,15 @@ "id": "test", "single_end": false }, - "test.paired_end.sorted.summary.txt:md5,9d98447e178b89a89f6f5aba7a772fe6" + "test.summary.txt:md5,9d98447e178b89a89f6f5aba7a772fe6" ] ], - "versions": [ - "versions.yml:md5,79670dedaa11a978951c16ead7f49c24" + "versions_rseqc": [ + [ + "RSEQC_TIN", + "rseqc", + "5.0.4" + ] ], "xls": [ [ @@ -41,16 +49,16 @@ "id": "test", "single_end": false }, - "test.paired_end.sorted.tin.xls:md5,abdbb6d51a5cd7038cd862ce241ecef1" + "test.tin.xls:md5,abdbb6d51a5cd7038cd862ce241ecef1" ] ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.01.0" + "nf-test": "0.9.2", + "nextflow": "25.10.2" }, - "timestamp": "2024-02-26T14:32:42.823857" + "timestamp": "2025-12-10T14:24:58.103086041" }, "sarscov2 paired-end [bam] - stub": { "content": [ @@ -61,7 +69,7 @@ "id": "test", "single_end": false }, - "test.paired_end.sorted.bam.summary.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.summary.txt:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "1": [ @@ -70,11 +78,15 @@ "id": "test", "single_end": false }, - "test.paired_end.sorted.bam.tin.xls:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.tin.xls:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "2": [ - "versions.yml:md5,79670dedaa11a978951c16ead7f49c24" + [ + "RSEQC_TIN", + "rseqc", + "5.0.4" + ] ], "txt": [ [ @@ -82,11 +94,15 @@ "id": "test", "single_end": false }, - "test.paired_end.sorted.bam.summary.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.summary.txt:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "versions": [ - "versions.yml:md5,79670dedaa11a978951c16ead7f49c24" + "versions_rseqc": [ + [ + "RSEQC_TIN", + "rseqc", + "5.0.4" + ] ], "xls": [ [ @@ -94,15 +110,15 @@ "id": "test", "single_end": false }, - "test.paired_end.sorted.bam.tin.xls:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.tin.xls:md5,d41d8cd98f00b204e9800998ecf8427e" ] ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" + "nf-test": "0.9.2", + "nextflow": "25.10.2" }, - "timestamp": "2024-06-21T09:55:57.905927" + "timestamp": "2025-12-10T14:25:04.054587066" } } \ No newline at end of file diff --git a/modules/nf-core/salmon/index/main.nf b/modules/nf-core/salmon/index/main.nf index 2e9c6224c..176dc0854 100644 --- a/modules/nf-core/salmon/index/main.nf +++ b/modules/nf-core/salmon/index/main.nf @@ -13,7 +13,7 @@ process SALMON_INDEX { output: path "salmon" , emit: index - path "versions.yml", emit: versions + tuple val("${task.process}"), val('salmon'), eval("salmon --version | sed 's/salmon //'"), emit: versions_salmon, topic: versions when: task.ext.when == null || task.ext.when @@ -22,15 +22,15 @@ process SALMON_INDEX { def args = task.ext.args ?: '' def decoys = '' def fasta = transcript_fasta - if (genome_fasta){ - if (genome_fasta.endsWith('.gz')) { - genome_fasta = "<(gunzip -c $genome_fasta)" + if (genome_fasta) { + if ("${genome_fasta}".endsWith('.gz')) { + genome_fasta = "<(gunzip -c ${genome_fasta})" } decoys='-d decoys.txt' fasta='gentrome.fa' } - if (transcript_fasta.endsWith('.gz')) { - transcript_fasta = "<(gunzip -c $transcript_fasta)" + if ("${transcript_fasta}".endsWith('.gz')) { + transcript_fasta = "<(gunzip -c ${transcript_fasta})" } """ if [ -n '$genome_fasta' ]; then @@ -45,11 +45,6 @@ process SALMON_INDEX { $decoys \\ $args \\ -i salmon - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - salmon: \$(echo \$(salmon --version) | sed -e "s/salmon //g") - END_VERSIONS """ stub: @@ -70,10 +65,5 @@ process SALMON_INDEX { touch salmon/refseq.bin touch salmon/seq.bin touch salmon/versionInfo.json - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - salmon: \$(echo \$(salmon --version) | sed -e "s/salmon //g") - END_VERSIONS """ } diff --git a/modules/nf-core/salmon/index/meta.yml b/modules/nf-core/salmon/index/meta.yml index 48486a2bb..d98d42a23 100644 --- a/modules/nf-core/salmon/index/meta.yml +++ b/modules/nf-core/salmon/index/meta.yml @@ -15,23 +15,43 @@ tools: licence: ["GPL-3.0-or-later"] identifier: biotools:salmon input: - - - genome_fasta: - type: file - description: Fasta file of the reference genome - - - transcript_fasta: - type: file - description: Fasta file of the reference transcriptome + - genome_fasta: + type: file + description: Fasta file of the reference genome + ontologies: [] + - transcript_fasta: + type: file + description: Fasta file of the reference transcriptome + ontologies: [] output: - - index: + index: + - salmon: + type: directory + description: Folder containing the star index files + pattern: "salmon" + versions_salmon: + - - ${task.process}: + type: string + description: The name of the process - salmon: - type: directory - description: Folder containing the star index files - pattern: "salmon" - - versions: - - versions.yml: - type: file - description: File containing software versions - pattern: "versions.yml" + type: string + description: The name of the tool + - "salmon --version | sed 's/salmon //'": + type: eval + description: The expression to obtain the version of the tool + +topics: + versions: + - - ${task.process}: + type: string + description: The name of the process + - salmon: + type: string + description: The name of the tool + - "salmon --version | sed 's/salmon //'": + type: eval + description: The expression to obtain the version of the tool + authors: - "@kevinmenden" - "@drpatelh" diff --git a/modules/nf-core/salmon/index/tests/main.nf.test b/modules/nf-core/salmon/index/tests/main.nf.test index 6847bbd7a..16fa31eb5 100644 --- a/modules/nf-core/salmon/index/tests/main.nf.test +++ b/modules/nf-core/salmon/index/tests/main.nf.test @@ -3,6 +3,10 @@ nextflow_process { name "Test Process SALMON_INDEX" script "../main.nf" process "SALMON_INDEX" + tag "modules" + tag "modules_nfcore" + tag "salmon" + tag "salmon/index" test("sarscov2") { @@ -24,7 +28,7 @@ nextflow_process { { assert path(process.out.index.get(0)).exists() }, { assert snapshot( file(process.out.index[0]).listFiles().collect { it.getName() }.sort().toString(), - process.out.versions + process.out.findAll { key, val -> key.startsWith('versions') } ).match()} ) } @@ -51,7 +55,7 @@ nextflow_process { { assert path(process.out.index.get(0)).exists() }, { assert snapshot( file(process.out.index[0]).listFiles().collect { it.getName() }.sort().toString(), - process.out.versions + process.out.findAll { key, val -> key.startsWith('versions') } ).match()} ) } @@ -78,11 +82,11 @@ nextflow_process { { assert path(process.out.index.get(0)).exists() }, { assert snapshot( file(process.out.index[0]).listFiles().collect { it.getName() }.sort().toString(), - process.out.versions + process.out.findAll { key, val -> key.startsWith('versions') } ).match()} ) } } -} \ No newline at end of file +} diff --git a/modules/nf-core/salmon/index/tests/main.nf.test.snap b/modules/nf-core/salmon/index/tests/main.nf.test.snap index f8ed44d7d..e5f5227a5 100644 --- a/modules/nf-core/salmon/index/tests/main.nf.test.snap +++ b/modules/nf-core/salmon/index/tests/main.nf.test.snap @@ -2,40 +2,58 @@ "sarscov2 stub": { "content": [ "[complete_ref_lens.bin, ctable.bin, ctg_offsets.bin, duplicate_clusters.tsv, info.json, mphf.bin, pos.bin, pre_indexing.log, rank.bin, refAccumLengths.bin, ref_indexing.log, reflengths.bin, refseq.bin, seq.bin, versionInfo.json]", - [ - "versions.yml:md5,85337fa0a286ea35073ee5260974e307" - ] + { + "versions_salmon": [ + [ + "SALMON_INDEX", + "salmon", + "1.10.3" + ] + ] + } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.2" + "nf-test": "0.9.3", + "nextflow": "25.10.3" }, - "timestamp": "2025-01-20T12:57:51.498323" + "timestamp": "2026-02-02T16:08:35.725968411" }, "sarscov2": { "content": [ "[complete_ref_lens.bin, ctable.bin, ctg_offsets.bin, duplicate_clusters.tsv, info.json, mphf.bin, pos.bin, pre_indexing.log, rank.bin, refAccumLengths.bin, ref_indexing.log, reflengths.bin, refseq.bin, seq.bin, versionInfo.json]", - [ - "versions.yml:md5,85337fa0a286ea35073ee5260974e307" - ] + { + "versions_salmon": [ + [ + "SALMON_INDEX", + "salmon", + "1.10.3" + ] + ] + } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.2" + "nf-test": "0.9.3", + "nextflow": "25.10.3" }, - "timestamp": "2025-01-20T12:57:33.474302" + "timestamp": "2026-02-02T16:08:25.230161687" }, "sarscov2 transcriptome only": { "content": [ "[complete_ref_lens.bin, ctable.bin, ctg_offsets.bin, duplicate_clusters.tsv, info.json, mphf.bin, pos.bin, pre_indexing.log, rank.bin, refAccumLengths.bin, ref_indexing.log, reflengths.bin, refseq.bin, seq.bin, versionInfo.json]", - [ - "versions.yml:md5,85337fa0a286ea35073ee5260974e307" - ] + { + "versions_salmon": [ + [ + "SALMON_INDEX", + "salmon", + "1.10.3" + ] + ] + } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.2" + "nf-test": "0.9.3", + "nextflow": "25.10.3" }, - "timestamp": "2025-01-20T12:57:42.420247" + "timestamp": "2026-02-02T16:08:30.548863827" } } \ No newline at end of file diff --git a/modules/nf-core/salmon/quant/main.nf b/modules/nf-core/salmon/quant/main.nf index b7c71871c..eed3b3d54 100644 --- a/modules/nf-core/salmon/quant/main.nf +++ b/modules/nf-core/salmon/quant/main.nf @@ -19,7 +19,7 @@ process SALMON_QUANT { tuple val(meta), path("${prefix}"), emit: results tuple val(meta), path("*info.json"), emit: json_info, optional: true tuple val(meta), path("*lib_format_counts.json"), emit: lib_format_counts, optional: true - path "versions.yml", emit: versions + tuple val("${task.process}"), val('salmon'), eval('salmon --version | sed -e "s/salmon //g"'), topic: versions, emit: versions_salmon when: task.ext.when == null || task.ext.when @@ -31,7 +31,7 @@ process SALMON_QUANT { def reference = "--index ${index}" def reads1 = [] def reads2 = [] - meta.single_end ? [reads].flatten().each { reads1 << it } : reads.eachWithIndex { v, ix -> (ix & 1 ? reads2 : reads1) << v } + meta.single_end ? [reads].flatten().each { r -> reads1 << r } : reads.eachWithIndex { v, ix -> (ix & 1 ? reads2 : reads1) << v } def input_reads = meta.single_end ? "-r ${reads1.join(" ")}" : "-1 ${reads1.join(" ")} -2 ${reads2.join(" ")}" if (alignment_mode) { reference = "-t ${transcript_fasta}" @@ -90,11 +90,6 @@ process SALMON_QUANT { if [ -f ${prefix}/lib_format_counts.json ]; then cp ${prefix}/lib_format_counts.json "${prefix}_lib_format_counts.json" fi - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - salmon: \$(echo \$(salmon --version) | sed -e "s/salmon //g") - END_VERSIONS """ stub: @@ -103,10 +98,5 @@ process SALMON_QUANT { mkdir ${prefix} touch ${prefix}_meta_info.json touch ${prefix}_lib_format_counts.json - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - salmon: \$(echo \$(salmon --version) | sed -e "s/salmon //g") - END_VERSIONS """ } diff --git a/modules/nf-core/salmon/quant/meta.yml b/modules/nf-core/salmon/quant/meta.yml index 4cacde0f0..634507e6f 100644 --- a/modules/nf-core/salmon/quant/meta.yml +++ b/modules/nf-core/salmon/quant/meta.yml @@ -26,25 +26,28 @@ input: List of input FastQ files for single-end or paired-end data. Multiple single-end fastqs or pairs of paired-end fastqs are handled. - - - index: - type: directory - description: Folder containing the star index files - - - gtf: - type: file - description: GTF of the reference transcriptome - - - transcript_fasta: - type: file - description: Fasta file of the reference transcriptome - - - alignment_mode: - type: boolean - description: whether to run salmon in alignment mode - - - lib_type: - type: string - description: | - Override library type inferred based on strandedness defined in meta object + ontologies: [] + - index: + type: directory + description: Folder containing the star index files + - gtf: + type: file + description: GTF of the reference transcriptome + ontologies: [] + - transcript_fasta: + type: file + description: Fasta file of the reference transcriptome + ontologies: [] + - alignment_mode: + type: boolean + description: whether to run salmon in alignment mode + - lib_type: + type: string + description: | + Override library type inferred based on strandedness defined in meta object output: - - results: - - meta: + results: + - - meta: type: directory description: Folder containing the quantification results for a specific sample pattern: "${prefix}" @@ -52,30 +55,51 @@ output: type: directory description: Folder containing the quantification results for a specific sample pattern: "${prefix}" - - json_info: - - meta: - type: file - description: File containing meta information from Salmon quant - pattern: "*info.json" + json_info: + - - meta: + type: directory + description: Folder containing the quantification results for a specific sample + pattern: "${prefix}" - "*info.json": type: file description: File containing meta information from Salmon quant pattern: "*info.json" - - lib_format_counts: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] + ontologies: + - edam: http://edamontology.org/format_3464 # JSON + lib_format_counts: + - - meta: + type: directory + description: Folder containing the quantification results for a specific sample + pattern: "${prefix}" - "*lib_format_counts.json": type: file description: File containing the library format counts pattern: "*lib_format_counts.json" - - versions: - - versions.yml: - type: file - description: File containing software versions - pattern: "versions.yml" + ontologies: + - edam: http://edamontology.org/format_3464 # JSON + versions_salmon: + - - ${task.process}: + type: string + description: The process the versions were collected from + - salmon: + type: string + description: The tool name + - salmon --version | sed -e "s/salmon //g": + type: eval + description: The expression to obtain the version of the tool + +topics: + versions: + - - ${task.process}: + type: string + description: The process the versions were collected from + - salmon: + type: string + description: The tool name + - salmon --version | sed -e "s/salmon //g": + type: eval + description: The expression to obtain the version of the tool + authors: - "@kevinmenden" - "@drpatelh" diff --git a/modules/nf-core/salmon/quant/tests/main.nf.test b/modules/nf-core/salmon/quant/tests/main.nf.test index 24d8dd700..c687a170f 100644 --- a/modules/nf-core/salmon/quant/tests/main.nf.test +++ b/modules/nf-core/salmon/quant/tests/main.nf.test @@ -4,6 +4,11 @@ nextflow_process { script "../main.nf" process "SALMON_QUANT" config "./nextflow.config" + tag "modules" + tag "modules_nfcore" + tag "salmon" + tag "salmon/quant" + tag "salmon/index" setup { run("SALMON_INDEX") { @@ -44,7 +49,7 @@ nextflow_process { { assert path(process.out.json_info.get(0).get(1)).exists() }, { assert path(process.out.results.get(0).get(1)).exists() }, { assert snapshot( - process.out.versions, + process.out.findAll { key, val -> key.startsWith("versions") }, process.out.lib_format_counts ).match() } ) @@ -79,7 +84,7 @@ nextflow_process { { assert path(process.out.json_info.get(0).get(1)).exists() }, { assert path(process.out.results.get(0).get(1)).exists() }, { assert snapshot( - process.out.versions, + process.out.findAll { key, val -> key.startsWith("versions") }, process.out.lib_format_counts ).match() } ) @@ -114,7 +119,7 @@ nextflow_process { { assert path(process.out.json_info.get(0).get(1)).exists() }, { assert path(process.out.results.get(0).get(1)).exists() }, { assert snapshot( - process.out.versions, + process.out.findAll { key, val -> key.startsWith("versions") }, process.out.lib_format_counts ).match() } ) @@ -149,7 +154,7 @@ nextflow_process { { assert path(process.out.json_info.get(0).get(1)).exists() }, { assert path(process.out.results.get(0).get(1)).exists() }, { assert snapshot( - process.out.versions, + process.out.findAll { key, val -> key.startsWith("versions") }, process.out.lib_format_counts ).match() } ) @@ -187,7 +192,7 @@ nextflow_process { { assert path(process.out.json_info.get(0).get(1)).exists() }, { assert path(process.out.results.get(0).get(1)).exists() }, { assert snapshot( - process.out.versions, + process.out.findAll { key, val -> key.startsWith("versions") }, process.out.lib_format_counts ).match() } ) @@ -225,7 +230,7 @@ nextflow_process { { assert path(process.out.json_info.get(0).get(1)).exists() }, { assert path(process.out.results.get(0).get(1)).exists() }, { assert snapshot( - process.out.versions, + process.out.findAll { key, val -> key.startsWith("versions") }, process.out.lib_format_counts ).match() } ) @@ -265,7 +270,7 @@ nextflow_process { { assert path(process.out.json_info.get(0).get(1)).exists() }, { assert path(process.out.results.get(0).get(1)).exists() }, { assert snapshot( - process.out.versions, + process.out.findAll { key, val -> key.startsWith("versions") }, process.out.lib_format_counts ).match() } ) @@ -305,7 +310,7 @@ nextflow_process { { assert path(process.out.json_info.get(0).get(1)).exists() }, { assert path(process.out.results.get(0).get(1)).exists() }, { assert snapshot( - process.out.versions, + process.out.findAll { key, val -> key.startsWith("versions") }, process.out.lib_format_counts ).match() } ) diff --git a/modules/nf-core/salmon/quant/tests/main.nf.test.snap b/modules/nf-core/salmon/quant/tests/main.nf.test.snap index ea22a80ce..8f96b544f 100644 --- a/modules/nf-core/salmon/quant/tests/main.nf.test.snap +++ b/modules/nf-core/salmon/quant/tests/main.nf.test.snap @@ -1,9 +1,15 @@ { "sarscov2 - single_end": { "content": [ - [ - "versions.yml:md5,0d510d5db6398e2c8ca9443330740607" - ], + { + "versions_salmon": [ + [ + "SALMON_QUANT", + "salmon", + "1.10.3" + ] + ] + }, [ [ { @@ -15,16 +21,22 @@ ] ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2024-10-18T10:01:16.989080539" + "timestamp": "2026-01-19T14:53:59.375252" }, "sarscov2 - single_end stub": { "content": [ - [ - "versions.yml:md5,0d510d5db6398e2c8ca9443330740607" - ], + { + "versions_salmon": [ + [ + "SALMON_QUANT", + "salmon", + "1.10.3" + ] + ] + }, [ [ { @@ -36,16 +48,22 @@ ] ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2024-10-18T10:01:29.340996235" + "timestamp": "2026-01-19T14:54:06.507228" }, "sarscov2 - single_end lib type A": { "content": [ - [ - "versions.yml:md5,0d510d5db6398e2c8ca9443330740607" - ], + { + "versions_salmon": [ + [ + "SALMON_QUANT", + "salmon", + "1.10.3" + ] + ] + }, [ [ { @@ -57,16 +75,22 @@ ] ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2024-10-18T10:01:43.056167576" + "timestamp": "2026-01-19T14:54:15.005117" }, "sarscov2 - pair_end multiple": { "content": [ - [ - "versions.yml:md5,0d510d5db6398e2c8ca9443330740607" - ], + { + "versions_salmon": [ + [ + "SALMON_QUANT", + "salmon", + "1.10.3" + ] + ] + }, [ [ { @@ -78,16 +102,22 @@ ] ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2024-10-18T10:03:05.500792631" + "timestamp": "2026-01-19T14:54:48.338822" }, "sarscov2 - pair_end multiple stub": { "content": [ - [ - "versions.yml:md5,0d510d5db6398e2c8ca9443330740607" - ], + { + "versions_salmon": [ + [ + "SALMON_QUANT", + "salmon", + "1.10.3" + ] + ] + }, [ [ { @@ -99,16 +129,22 @@ ] ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2024-10-18T10:03:26.428959203" + "timestamp": "2026-01-19T14:54:56.134603" }, "sarscov2 - single_end lib type A stub": { "content": [ - [ - "versions.yml:md5,0d510d5db6398e2c8ca9443330740607" - ], + { + "versions_salmon": [ + [ + "SALMON_QUANT", + "salmon", + "1.10.3" + ] + ] + }, [ [ { @@ -120,16 +156,22 @@ ] ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2024-10-18T10:02:03.420850208" + "timestamp": "2026-01-19T14:54:22.024404" }, "sarscov2 - pair_end": { "content": [ - [ - "versions.yml:md5,0d510d5db6398e2c8ca9443330740607" - ], + { + "versions_salmon": [ + [ + "SALMON_QUANT", + "salmon", + "1.10.3" + ] + ] + }, [ [ { @@ -141,16 +183,22 @@ ] ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2024-10-18T10:02:16.130074696" + "timestamp": "2026-01-19T14:54:30.967174" }, "sarscov2 - pair_end stub": { "content": [ - [ - "versions.yml:md5,0d510d5db6398e2c8ca9443330740607" - ], + { + "versions_salmon": [ + [ + "SALMON_QUANT", + "salmon", + "1.10.3" + ] + ] + }, [ [ { @@ -162,9 +210,9 @@ ] ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2024-10-18T10:02:39.470004547" + "timestamp": "2026-01-19T14:54:38.572004" } } \ No newline at end of file diff --git a/modules/nf-core/samtools/faidx/environment.yml b/modules/nf-core/samtools/faidx/environment.yml new file mode 100644 index 000000000..89e12a645 --- /dev/null +++ b/modules/nf-core/samtools/faidx/environment.yml @@ -0,0 +1,10 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json +channels: + - conda-forge + - bioconda +dependencies: + # renovate: datasource=conda depName=bioconda/htslib + - bioconda::htslib=1.22.1 + # renovate: datasource=conda depName=bioconda/samtools + - bioconda::samtools=1.22.1 diff --git a/modules/nf-core/samtools/faidx/main.nf b/modules/nf-core/samtools/faidx/main.nf new file mode 100644 index 000000000..57a03497f --- /dev/null +++ b/modules/nf-core/samtools/faidx/main.nf @@ -0,0 +1,50 @@ +process SAMTOOLS_FAIDX { + tag "$fasta" + label 'process_single' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/samtools:1.22.1--h96c455f_0' : + 'biocontainers/samtools:1.22.1--h96c455f_0' }" + + input: + tuple val(meta), path(fasta) + tuple val(meta2), path(fai) + val get_sizes + + output: + tuple val(meta), path ("*.{fa,fasta}") , emit: fa, optional: true + tuple val(meta), path ("*.sizes") , emit: sizes, optional: true + tuple val(meta), path ("*.fai") , emit: fai, optional: true + tuple val(meta), path ("*.gzi") , emit: gzi, optional: true + tuple val("${task.process}"), val('samtools'), eval("samtools version | sed '1!d;s/.* //'"), topic: versions, emit: versions_samtools + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def get_sizes_command = get_sizes ? "cut -f 1,2 ${fasta}.fai > ${fasta}.sizes" : '' + """ + samtools \\ + faidx \\ + $fasta \\ + $args + + ${get_sizes_command} + """ + + stub: + def match = (task.ext.args =~ /-o(?:utput)?\s(.*)\s?/).findAll() + def fastacmd = match[0] ? "touch ${match[0][1]}" : '' + def get_sizes_command = get_sizes ? "touch ${fasta}.sizes" : '' + """ + ${fastacmd} + touch ${fasta}.fai + if [[ "${fasta.extension}" == "gz" ]]; then + touch ${fasta}.gzi + fi + + ${get_sizes_command} + """ +} diff --git a/modules/nf-core/samtools/faidx/meta.yml b/modules/nf-core/samtools/faidx/meta.yml new file mode 100644 index 000000000..163c30151 --- /dev/null +++ b/modules/nf-core/samtools/faidx/meta.yml @@ -0,0 +1,117 @@ +name: samtools_faidx +description: Index FASTA file, and optionally generate a file of chromosome sizes +keywords: + - index + - fasta + - faidx + - chromosome +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"] + identifier: biotools:samtools +input: + - - meta: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'test' ] + - fasta: + type: file + description: FASTA file + pattern: "*.{fa,fasta}" + ontologies: [] + - - meta2: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'test' ] + - fai: + type: file + description: FASTA index file + pattern: "*.{fai}" + ontologies: [] + - get_sizes: + type: boolean + description: use cut to get the sizes of the index (true) or not (false) + +output: + fa: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.{fa,fasta}": + type: file + description: FASTA file + pattern: "*.{fa}" + ontologies: [] + sizes: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.sizes": + type: file + description: File containing chromosome lengths + pattern: "*.{sizes}" + ontologies: [] + fai: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.fai": + type: file + description: FASTA index file + pattern: "*.{fai}" + ontologies: [] + gzi: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.gzi": + type: file + description: Optional gzip index file for compressed inputs + pattern: "*.gzi" + ontologies: [] + versions_samtools: + - - ${task.process}: + type: string + description: The process the versions were collected from + - samtools: + type: string + description: The tool name + - "samtools version | sed '1!d;s/.* //'": + type: string + description: The command used to generate the version of the tool + +topics: + versions: + - - ${task.process}: + type: string + description: The process the versions were collected from + - samtools: + type: string + description: The tool name + - "samtools version | sed '1!d;s/.* //'": + type: string + description: The command used to generate the version of the tool +authors: + - "@drpatelh" + - "@ewels" + - "@phue" +maintainers: + - "@maxulysse" + - "@phue" diff --git a/modules/nf-core/samtools/faidx/tests/main.nf.test b/modules/nf-core/samtools/faidx/tests/main.nf.test new file mode 100644 index 000000000..02ba5040c --- /dev/null +++ b/modules/nf-core/samtools/faidx/tests/main.nf.test @@ -0,0 +1,245 @@ +nextflow_process { + + name "Test Process SAMTOOLS_FAIDX" + script "../main.nf" + process "SAMTOOLS_FAIDX" + + tag "modules" + tag "modules_nfcore" + tag "samtools" + tag "samtools/faidx" + config "./nextflow.config" + + test("test_samtools_faidx") { + + when { + params { + module_args = '' + } + 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] = false + """ + } + } + + then { + assert process.success + assertAll( + { assert snapshot(process.out).match()} + ) + } + } + + test("test_samtools_faidx_bgzip") { + + when { + params { + module_args = '' + } + process { + """ + input[0] = [ [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.gz', checkIfExists: true)] + input[1] = [[],[]] + input[2] = false + """ + } + } + + then { + assert process.success + assertAll( + { assert snapshot(process.out).match()} + ) + } + } + + test("test_samtools_faidx_fasta") { + + when { + params { + module_args = 'MT192765.1 -o extract.fa' + } + 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] = [ [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true) ] + input[2] = false + """ + } + } + + then { + assert process.success + assertAll( + { assert snapshot(process.out).match()} + ) + } + } + + test("test_samtools_faidx_stub_fasta") { + + options "-stub" + when { + params { + module_args = '-o extract.fa' + } + 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] = [ [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true) ] + input[2] = false + """ + } + } + + then { + assert process.success + assertAll( + { assert snapshot(process.out).match()} + ) + } + } + + test("test_samtools_faidx_stub_fai") { + + options "-stub" + when { + params { + module_args = '' + } + 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] = false + """ + } + } + + then { + assert process.success + assertAll( + { assert snapshot(process.out).match()} + ) + } + } + + test("test_samtools_faidx_get_sizes") { + + when { + params { + module_args = '' + } + process { + """ + input[0] = Channel.of([ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ]) + input[1] = [[],[]] + input[2] = true + """ + } + } + + then { + assert process.success + assertAll( + { assert snapshot(process.out).match()} + ) + } + } + + test("test_samtools_faidx_get_sizes_bgzip") { + + when { + params { + module_args = '' + } + process { + """ + input[0] = Channel.of([ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.gz', checkIfExists: true) + ]) + input[1] = [[],[]] + input[2] = true + """ + } + } + + then { + assert process.success + assertAll( + { assert snapshot(process.out).match()} + ) + } + } + + test("test_samtools_faidx_get_sizes - stub") { + + options "-stub" + + when { + params { + module_args = '' + } + process { + """ + input[0] = Channel.of([ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ]) + input[1] = [[],[]] + input[2] = true + """ + } + } + + then { + assert process.success + assertAll( + { assert snapshot(process.out).match()} + ) + } + } + + test("test_samtools_faidx_get_sizes_bgzip - stub") { + + options "-stub" + + when { + params { + module_args = '' + } + process { + """ + input[0] = Channel.of([ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.gz', checkIfExists: true) + ]) + input[1] = [[],[]] + input[2] = true + """ + } + } + + then { + assert process.success + assertAll( + { assert snapshot(process.out).match()} + ) + } + } + +} diff --git a/modules/nf-core/samtools/faidx/tests/main.nf.test.snap b/modules/nf-core/samtools/faidx/tests/main.nf.test.snap new file mode 100644 index 000000000..565d20e71 --- /dev/null +++ b/modules/nf-core/samtools/faidx/tests/main.nf.test.snap @@ -0,0 +1,615 @@ +{ + "test_samtools_faidx": { + "content": [ + { + "0": [ + + ], + "1": [ + + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "genome.fasta.fai:md5,9da2a56e2853dc8c0b86a9e7229c9fe5" + ] + ], + "3": [ + + ], + "4": [ + [ + "SAMTOOLS_FAIDX", + "samtools", + "1.22.1" + ] + ], + "fa": [ + + ], + "fai": [ + [ + { + "id": "test", + "single_end": false + }, + "genome.fasta.fai:md5,9da2a56e2853dc8c0b86a9e7229c9fe5" + ] + ], + "gzi": [ + + ], + "sizes": [ + + ], + "versions_samtools": [ + [ + "SAMTOOLS_FAIDX", + "samtools", + "1.22.1" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.2" + }, + "timestamp": "2025-12-23T14:02:40.159309157" + }, + "test_samtools_faidx_get_sizes_bgzip - stub": { + "content": [ + { + "0": [ + + ], + "1": [ + [ + { + "id": "test" + }, + "genome.fasta.gz.sizes:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + [ + { + "id": "test" + }, + "genome.fasta.gz.fai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + [ + { + "id": "test" + }, + "genome.fasta.gz.gzi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "4": [ + [ + "SAMTOOLS_FAIDX", + "samtools", + "1.22.1" + ] + ], + "fa": [ + + ], + "fai": [ + [ + { + "id": "test" + }, + "genome.fasta.gz.fai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "gzi": [ + [ + { + "id": "test" + }, + "genome.fasta.gz.gzi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "sizes": [ + [ + { + "id": "test" + }, + "genome.fasta.gz.sizes:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions_samtools": [ + [ + "SAMTOOLS_FAIDX", + "samtools", + "1.22.1" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.2" + }, + "timestamp": "2025-12-23T14:03:39.550619177" + }, + "test_samtools_faidx_get_sizes": { + "content": [ + { + "0": [ + + ], + "1": [ + [ + { + "id": "test" + }, + "genome.fasta.sizes:md5,a57c401f27ae5133823fb09fb21c8a3c" + ] + ], + "2": [ + [ + { + "id": "test" + }, + "genome.fasta.fai:md5,9da2a56e2853dc8c0b86a9e7229c9fe5" + ] + ], + "3": [ + + ], + "4": [ + [ + "SAMTOOLS_FAIDX", + "samtools", + "1.22.1" + ] + ], + "fa": [ + + ], + "fai": [ + [ + { + "id": "test" + }, + "genome.fasta.fai:md5,9da2a56e2853dc8c0b86a9e7229c9fe5" + ] + ], + "gzi": [ + + ], + "sizes": [ + [ + { + "id": "test" + }, + "genome.fasta.sizes:md5,a57c401f27ae5133823fb09fb21c8a3c" + ] + ], + "versions_samtools": [ + [ + "SAMTOOLS_FAIDX", + "samtools", + "1.22.1" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.2" + }, + "timestamp": "2025-12-23T14:03:16.844965756" + }, + "test_samtools_faidx_bgzip": { + "content": [ + { + "0": [ + + ], + "1": [ + + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "genome.fasta.gz.fai:md5,9da2a56e2853dc8c0b86a9e7229c9fe5" + ] + ], + "3": [ + [ + { + "id": "test", + "single_end": false + }, + "genome.fasta.gz.gzi:md5,7dea362b3fac8e00956a4952a3d4f474" + ] + ], + "4": [ + [ + "SAMTOOLS_FAIDX", + "samtools", + "1.22.1" + ] + ], + "fa": [ + + ], + "fai": [ + [ + { + "id": "test", + "single_end": false + }, + "genome.fasta.gz.fai:md5,9da2a56e2853dc8c0b86a9e7229c9fe5" + ] + ], + "gzi": [ + [ + { + "id": "test", + "single_end": false + }, + "genome.fasta.gz.gzi:md5,7dea362b3fac8e00956a4952a3d4f474" + ] + ], + "sizes": [ + + ], + "versions_samtools": [ + [ + "SAMTOOLS_FAIDX", + "samtools", + "1.22.1" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.2" + }, + "timestamp": "2025-12-23T14:02:47.301476131" + }, + "test_samtools_faidx_fasta": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "extract.fa:md5,6a0774a0ad937ba0bfd2ac7457d90f36" + ] + ], + "1": [ + + ], + "2": [ + + ], + "3": [ + + ], + "4": [ + [ + "SAMTOOLS_FAIDX", + "samtools", + "1.22.1" + ] + ], + "fa": [ + [ + { + "id": "test", + "single_end": false + }, + "extract.fa:md5,6a0774a0ad937ba0bfd2ac7457d90f36" + ] + ], + "fai": [ + + ], + "gzi": [ + + ], + "sizes": [ + + ], + "versions_samtools": [ + [ + "SAMTOOLS_FAIDX", + "samtools", + "1.22.1" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.2" + }, + "timestamp": "2025-12-23T09:44:40.559583279" + }, + "test_samtools_faidx_get_sizes - stub": { + "content": [ + { + "0": [ + + ], + "1": [ + [ + { + "id": "test" + }, + "genome.fasta.sizes:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + [ + { + "id": "test" + }, + "genome.fasta.fai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + + ], + "4": [ + [ + "SAMTOOLS_FAIDX", + "samtools", + "1.22.1" + ] + ], + "fa": [ + + ], + "fai": [ + [ + { + "id": "test" + }, + "genome.fasta.fai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "gzi": [ + + ], + "sizes": [ + [ + { + "id": "test" + }, + "genome.fasta.sizes:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions_samtools": [ + [ + "SAMTOOLS_FAIDX", + "samtools", + "1.22.1" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.2" + }, + "timestamp": "2025-12-23T14:03:31.989929281" + }, + "test_samtools_faidx_stub_fasta": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "extract.fa:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + + ], + "2": [ + + ], + "3": [ + + ], + "4": [ + [ + "SAMTOOLS_FAIDX", + "samtools", + "1.22.1" + ] + ], + "fa": [ + [ + { + "id": "test", + "single_end": false + }, + "extract.fa:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "fai": [ + + ], + "gzi": [ + + ], + "sizes": [ + + ], + "versions_samtools": [ + [ + "SAMTOOLS_FAIDX", + "samtools", + "1.22.1" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.2" + }, + "timestamp": "2025-12-23T09:44:48.295693103" + }, + "test_samtools_faidx_stub_fai": { + "content": [ + { + "0": [ + + ], + "1": [ + + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "genome.fasta.fai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + + ], + "4": [ + [ + "SAMTOOLS_FAIDX", + "samtools", + "1.22.1" + ] + ], + "fa": [ + + ], + "fai": [ + [ + { + "id": "test", + "single_end": false + }, + "genome.fasta.fai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "gzi": [ + + ], + "sizes": [ + + ], + "versions_samtools": [ + [ + "SAMTOOLS_FAIDX", + "samtools", + "1.22.1" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.2" + }, + "timestamp": "2025-12-23T14:03:09.784289542" + }, + "test_samtools_faidx_get_sizes_bgzip": { + "content": [ + { + "0": [ + + ], + "1": [ + [ + { + "id": "test" + }, + "genome.fasta.gz.sizes:md5,a57c401f27ae5133823fb09fb21c8a3c" + ] + ], + "2": [ + [ + { + "id": "test" + }, + "genome.fasta.gz.fai:md5,9da2a56e2853dc8c0b86a9e7229c9fe5" + ] + ], + "3": [ + [ + { + "id": "test" + }, + "genome.fasta.gz.gzi:md5,7dea362b3fac8e00956a4952a3d4f474" + ] + ], + "4": [ + [ + "SAMTOOLS_FAIDX", + "samtools", + "1.22.1" + ] + ], + "fa": [ + + ], + "fai": [ + [ + { + "id": "test" + }, + "genome.fasta.gz.fai:md5,9da2a56e2853dc8c0b86a9e7229c9fe5" + ] + ], + "gzi": [ + [ + { + "id": "test" + }, + "genome.fasta.gz.gzi:md5,7dea362b3fac8e00956a4952a3d4f474" + ] + ], + "sizes": [ + [ + { + "id": "test" + }, + "genome.fasta.gz.sizes:md5,a57c401f27ae5133823fb09fb21c8a3c" + ] + ], + "versions_samtools": [ + [ + "SAMTOOLS_FAIDX", + "samtools", + "1.22.1" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.2" + }, + "timestamp": "2025-12-23T14:03:24.814967939" + } +} \ No newline at end of file diff --git a/modules/nf-core/samtools/faidx/tests/nextflow.config b/modules/nf-core/samtools/faidx/tests/nextflow.config new file mode 100644 index 000000000..202c036ed --- /dev/null +++ b/modules/nf-core/samtools/faidx/tests/nextflow.config @@ -0,0 +1,7 @@ +process { + + withName: SAMTOOLS_FAIDX { + ext.args = params.module_args + } + +} diff --git a/modules/nf-core/samtools/fastq/environment.yml b/modules/nf-core/samtools/fastq/environment.yml new file mode 100644 index 000000000..89e12a645 --- /dev/null +++ b/modules/nf-core/samtools/fastq/environment.yml @@ -0,0 +1,10 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json +channels: + - conda-forge + - bioconda +dependencies: + # renovate: datasource=conda depName=bioconda/htslib + - bioconda::htslib=1.22.1 + # renovate: datasource=conda depName=bioconda/samtools + - bioconda::samtools=1.22.1 diff --git a/modules/nf-core/samtools/fastq/main.nf b/modules/nf-core/samtools/fastq/main.nf new file mode 100644 index 000000000..922dbec39 --- /dev/null +++ b/modules/nf-core/samtools/fastq/main.nf @@ -0,0 +1,50 @@ +process SAMTOOLS_FASTQ { + 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.22.1--h96c455f_0' : + 'biocontainers/samtools:1.22.1--h96c455f_0' }" + + input: + tuple val(meta), path(input) + val(interleave) + + output: + tuple val(meta), path("*_{1,2}.fastq.gz") , optional:true, emit: fastq + tuple val(meta), path("*_interleaved.fastq") , optional:true, emit: interleaved + tuple val(meta), path("*_singleton.fastq.gz") , optional:true, emit: singleton + tuple val(meta), path("*_other.fastq.gz") , optional:true, emit: other + tuple val("${task.process}"), val('samtools'), eval("samtools version | sed '1!d;s/.* //'"), emit: versions_samtools, topic: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def output = ( interleave && ! meta.single_end ) ? "> ${prefix}_interleaved.fastq" : + meta.single_end ? "-1 ${prefix}_1.fastq.gz -s ${prefix}_singleton.fastq.gz" : + "-1 ${prefix}_1.fastq.gz -2 ${prefix}_2.fastq.gz -s ${prefix}_singleton.fastq.gz" + """ + # Note: --threads value represents *additional* CPUs to allocate (total CPUs = 1 + --threads). + samtools \\ + fastq \\ + $args \\ + --threads ${task.cpus-1} \\ + -0 ${prefix}_other.fastq.gz \\ + $input \\ + $output + """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + def output = ( interleave && ! meta.single_end ) ? "touch ${prefix}_interleaved.fastq" : + meta.single_end ? "echo | gzip > ${prefix}_1.fastq.gz && echo | gzip > ${prefix}_singleton.fastq.gz" : + "echo | gzip > ${prefix}_1.fastq.gz && echo | gzip > ${prefix}_2.fastq.gz && echo | gzip > ${prefix}_singleton.fastq.gz" + """ + ${output} + echo | gzip > ${prefix}_other.fastq.gz + """ +} diff --git a/modules/nf-core/samtools/fastq/meta.yml b/modules/nf-core/samtools/fastq/meta.yml new file mode 100644 index 000000000..cab17ffa9 --- /dev/null +++ b/modules/nf-core/samtools/fastq/meta.yml @@ -0,0 +1,111 @@ +name: samtools_fastq +description: Converts a SAM/BAM/CRAM file to FASTQ +keywords: + - bam + - sam + - cram + - fastq +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" + identifier: biotools:samtools +input: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - input: + type: file + description: BAM/CRAM/SAM file + pattern: "*.{bam,cram,sam}" + ontologies: [] + - interleave: + type: boolean + description: Set true for interleaved fastq file +output: + fastq: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*_{1,2}.fastq.gz": + type: file + description: Compressed FASTQ file(s) with reads with either the READ1 + or READ2 flag set in separate files. + pattern: "*_{1,2}.fastq.gz" + ontologies: [] + interleaved: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*_interleaved.fastq": + type: file + description: Compressed FASTQ file with reads with either the READ1 or + READ2 flag set in a combined file. Needs collated input file. + pattern: "*_interleaved.fastq.gz" + ontologies: + - edam: http://edamontology.org/format_3989 + singleton: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*_singleton.fastq.gz": + type: file + description: Compressed FASTQ file with singleton reads + pattern: "*_singleton.fastq.gz" + ontologies: + - edam: http://edamontology.org/format_3989 + other: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*_other.fastq.gz": + type: file + description: Compressed FASTQ file with reads with either both READ1 and + READ2 flags set or unset + pattern: "*_other.fastq.gz" + ontologies: + - edam: http://edamontology.org/format_3989 + versions_samtools: + - - ${task.process}: + type: string + description: The name of the process + - samtools: + type: string + description: The name of the tool + - samtools version | sed '1!d;s/.* //': + type: eval + description: The expression to obtain the version of the tool +topics: + versions: + - - ${task.process}: + type: string + description: The name of the process + - samtools: + type: string + description: The name of the tool + - samtools version | sed '1!d;s/.* //': + type: eval + description: The expression to obtain the version of the tool +authors: + - "@priyanka-surana" + - "@suzannejin" +maintainers: + - "@priyanka-surana" + - "@suzannejin" diff --git a/modules/nf-core/samtools/fastq/tests/main.nf.test b/modules/nf-core/samtools/fastq/tests/main.nf.test new file mode 100644 index 000000000..46ec7e7c3 --- /dev/null +++ b/modules/nf-core/samtools/fastq/tests/main.nf.test @@ -0,0 +1,131 @@ +nextflow_process { + + name "Test Process SAMTOOLS_FASTQ" + script "../main.nf" + process "SAMTOOLS_FASTQ" + + tag "modules" + tag "modules_nfcore" + tag "samtools" + tag "samtools/fastq" + + test("bam") { + + when { + process { + """ + interleave = false + + 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) + ]) + input[1] = interleave + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out.fastq[0][1].collect { path(it).linesGzip[0..6] }).match("bam_fastq") }, + { assert snapshot(process.out.interleaved).match("bam_interleaved") }, + { assert snapshot(file(process.out.singleton[0][1]).name).match("bam_singleton") }, + { assert snapshot(file(process.out.other[0][1]).name).match("bam_other") }, + { assert snapshot(process.out.findAll { key, val -> key.startsWith('versions') }).match("bam_versions") } + ) + } + } + + test("bam_interleave") { + + when { + process { + """ + interleave = true + + 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) + ]) + input[1] = interleave + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out.fastq).match("bam_interleave_fastq") }, + { assert snapshot(path(process.out.interleaved[0][1]).readLines()[0..6]).match("bam_interlinterleave_eaved") }, + { assert snapshot(process.out.singleton).match("bam_singinterleave_leton") }, + { assert snapshot(file(process.out.other[0][1]).name).match("bam_interleave_other") }, + { assert snapshot(process.out.findAll { key, val -> key.startsWith('versions') }).match("bam_verinterleave_sions") } + ) + } + } + + test("bam - stub") { + + options "-stub" + + when { + process { + """ + interleave = false + + 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) + ]) + input[1] = interleave + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot( + process.out.fastq, + process.out.interleaved, + process.out.singleton, + process.out.other, + process.out.findAll { key, val -> key.startsWith('versions') } + ).match() } + ) + } + } + + test("bam_interleave - stub") { + + options "-stub" + + when { + process { + """ + interleave = true + + 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) + ]) + input[1] = interleave + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot( + process.out.fastq, + process.out.interleaved, + process.out.singleton, + process.out.other, + process.out.findAll { key, val -> key.startsWith('versions') } + ).match() } + ) + } + } +} diff --git a/modules/nf-core/samtools/fastq/tests/main.nf.test.snap b/modules/nf-core/samtools/fastq/tests/main.nf.test.snap new file mode 100644 index 000000000..17b5ade9c --- /dev/null +++ b/modules/nf-core/samtools/fastq/tests/main.nf.test.snap @@ -0,0 +1,244 @@ +{ + "bam_interlinterleave_eaved": { + "content": [ + [ + "@ERR5069949.2151832/1", + "TCATAAACCAAAGCACTCACAGTGTCAACAATTTCAGCAGGACAACGCCGACAAGTTCCGAGGAACATGTCTGGACCTATAGTTTTCATAAGTCTACACACTGAATTGAAATATTCTGGTTCTAGTGTGCCCTTAGTTAGCAATGTGCGT", + "+", + "AAAAAAEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEAAEEEEAEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEAAEEEEE ${prefix}.flagstat - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') - END_VERSIONS """ stub: def prefix = task.ext.prefix ?: "${meta.id}" """ - touch ${prefix}.flagstat - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') - END_VERSIONS + cat <<-END_FLAGSTAT > ${prefix}.flagstat + 1000000 + 0 in total (QC-passed reads + QC-failed reads) + 0 + 0 secondary + 0 + 0 supplementary + 0 + 0 duplicates + 900000 + 0 mapped (90.00% : N/A) + 1000000 + 0 paired in sequencing + 500000 + 0 read1 + 500000 + 0 read2 + 800000 + 0 properly paired (80.00% : N/A) + 850000 + 0 with mate mapped to a different chr + 50000 + 0 with mate mapped to a different chr (mapQ>=5) + END_FLAGSTAT """ } diff --git a/modules/nf-core/samtools/flagstat/meta.yml b/modules/nf-core/samtools/flagstat/meta.yml index cdc4c2544..8caa1bcc5 100644 --- a/modules/nf-core/samtools/flagstat/meta.yml +++ b/modules/nf-core/samtools/flagstat/meta.yml @@ -1,6 +1,6 @@ name: samtools_flagstat -description: Counts the number of alignments in a BAM/CRAM/SAM file for each FLAG - type +description: Counts the number of alignments in a BAM/CRAM/SAM file for each + FLAG type keywords: - stats - mapping @@ -17,7 +17,8 @@ tools: homepage: http://www.htslib.org/ documentation: http://www.htslib.org/doc/samtools.html doi: 10.1093/bioinformatics/btp352 - licence: ["MIT"] + licence: + - "MIT" identifier: biotools:samtools input: - - meta: @@ -29,13 +30,15 @@ input: type: file description: BAM/CRAM/SAM file pattern: "*.{bam,cram,sam}" + ontologies: [] - bai: type: file description: Index for BAM/CRAM/SAM file pattern: "*.{bai,crai,sai}" + ontologies: [] output: - - flagstat: - - meta: + flagstat: + - - meta: type: map description: | Groovy Map containing sample information @@ -44,11 +47,28 @@ output: type: file description: File containing samtools flagstat output pattern: "*.{flagstat}" - - versions: - - versions.yml: - type: file - description: File containing software versions - pattern: "versions.yml" + ontologies: [] + versions_samtools: + - - ${task.process}: + type: string + description: The name of the process + - samtools: + type: string + description: The name of the tool + - samtools version | sed '1!d;s/.* //': + type: eval + description: The expression to obtain the version of the tool +topics: + versions: + - - ${task.process}: + type: string + description: The name of the process + - samtools: + type: string + description: The name of the tool + - samtools version | sed '1!d;s/.* //': + type: eval + description: The expression to obtain the version of the tool authors: - "@drpatelh" maintainers: diff --git a/modules/nf-core/samtools/flagstat/tests/main.nf.test b/modules/nf-core/samtools/flagstat/tests/main.nf.test index b899f1fc7..3b648a37d 100644 --- a/modules/nf-core/samtools/flagstat/tests/main.nf.test +++ b/modules/nf-core/samtools/flagstat/tests/main.nf.test @@ -3,6 +3,10 @@ nextflow_process { name "Test Process SAMTOOLS_FLAGSTAT" script "../main.nf" process "SAMTOOLS_FLAGSTAT" + tag "modules" + tag "modules_nfcore" + tag "samtools" + tag "samtools/flagstat" test("BAM") { diff --git a/modules/nf-core/samtools/flagstat/tests/main.nf.test.snap b/modules/nf-core/samtools/flagstat/tests/main.nf.test.snap index 04c3852b2..f5c882da2 100644 --- a/modules/nf-core/samtools/flagstat/tests/main.nf.test.snap +++ b/modules/nf-core/samtools/flagstat/tests/main.nf.test.snap @@ -8,11 +8,15 @@ "id": "test", "single_end": false }, - "test.flagstat:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.flagstat:md5,67394650dbae96d1a4fcc70484822159" ] ], "1": [ - "versions.yml:md5,108a155f2d4a99f50bf3176904208d27" + [ + "SAMTOOLS_FLAGSTAT", + "samtools", + "1.22.1" + ] ], "flagstat": [ [ @@ -20,19 +24,23 @@ "id": "test", "single_end": false }, - "test.flagstat:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.flagstat:md5,67394650dbae96d1a4fcc70484822159" ] ], - "versions": [ - "versions.yml:md5,108a155f2d4a99f50bf3176904208d27" + "versions_samtools": [ + [ + "SAMTOOLS_FLAGSTAT", + "samtools", + "1.22.1" + ] ] } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.3", + "nextflow": "25.10.3" }, - "timestamp": "2024-09-16T08:02:58.866491759" + "timestamp": "2026-02-03T11:14:30.820969684" }, "BAM": { "content": [ @@ -47,7 +55,11 @@ ] ], "1": [ - "versions.yml:md5,108a155f2d4a99f50bf3176904208d27" + [ + "SAMTOOLS_FLAGSTAT", + "samtools", + "1.22.1" + ] ], "flagstat": [ [ @@ -58,15 +70,19 @@ "test.flagstat:md5,4f7ffd1e6a5e85524d443209ac97d783" ] ], - "versions": [ - "versions.yml:md5,108a155f2d4a99f50bf3176904208d27" + "versions_samtools": [ + [ + "SAMTOOLS_FLAGSTAT", + "samtools", + "1.22.1" + ] ] } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.3", + "nextflow": "25.10.3" }, - "timestamp": "2024-09-16T08:02:47.383332837" + "timestamp": "2026-02-03T11:14:25.581619424" } } \ No newline at end of file diff --git a/modules/nf-core/samtools/idxstats/environment.yml b/modules/nf-core/samtools/idxstats/environment.yml index 62054fc97..89e12a645 100644 --- a/modules/nf-core/samtools/idxstats/environment.yml +++ b/modules/nf-core/samtools/idxstats/environment.yml @@ -4,5 +4,7 @@ channels: - conda-forge - bioconda dependencies: - - bioconda::htslib=1.21 - - bioconda::samtools=1.21 + # renovate: datasource=conda depName=bioconda/htslib + - bioconda::htslib=1.22.1 + # renovate: datasource=conda depName=bioconda/samtools + - bioconda::samtools=1.22.1 diff --git a/modules/nf-core/samtools/idxstats/main.nf b/modules/nf-core/samtools/idxstats/main.nf index e2bb6b20c..d5b70a7fa 100644 --- a/modules/nf-core/samtools/idxstats/main.nf +++ b/modules/nf-core/samtools/idxstats/main.nf @@ -4,15 +4,15 @@ process SAMTOOLS_IDXSTATS { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/samtools:1.21--h50ea8bc_0' : - 'biocontainers/samtools:1.21--h50ea8bc_0' }" + 'https://depot.galaxyproject.org/singularity/samtools:1.22.1--h96c455f_0' : + 'biocontainers/samtools:1.22.1--h96c455f_0' }" input: tuple val(meta), path(bam), path(bai) output: tuple val(meta), path("*.idxstats"), emit: idxstats - path "versions.yml" , emit: versions + tuple val("${task.process}"), val('samtools'), eval("samtools version | sed '1!d;s/.* //'"), emit: versions_samtools, topic: versions when: task.ext.when == null || task.ext.when @@ -21,16 +21,12 @@ process SAMTOOLS_IDXSTATS { def prefix = task.ext.prefix ?: "${meta.id}" """ + # Note: --threads value represents *additional* CPUs to allocate (total CPUs = 1 + --threads). samtools \\ idxstats \\ --threads ${task.cpus-1} \\ $bam \\ > ${prefix}.idxstats - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') - END_VERSIONS """ stub: @@ -38,10 +34,5 @@ process SAMTOOLS_IDXSTATS { """ touch ${prefix}.idxstats - - 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/idxstats/meta.yml b/modules/nf-core/samtools/idxstats/meta.yml index f0a6bcb2a..fd1538414 100644 --- a/modules/nf-core/samtools/idxstats/meta.yml +++ b/modules/nf-core/samtools/idxstats/meta.yml @@ -17,7 +17,8 @@ tools: homepage: http://www.htslib.org/ documentation: http://www.htslib.org/doc/samtools.html doi: 10.1093/bioinformatics/btp352 - licence: ["MIT"] + licence: + - "MIT" identifier: biotools:samtools input: - - meta: @@ -29,13 +30,15 @@ input: type: file description: BAM/CRAM/SAM file pattern: "*.{bam,cram,sam}" + ontologies: [] - bai: type: file description: Index for BAM/CRAM/SAM file pattern: "*.{bai,crai,sai}" + ontologies: [] output: - - idxstats: - - meta: + idxstats: + - - meta: type: map description: | Groovy Map containing sample information @@ -44,11 +47,28 @@ output: type: file description: File containing samtools idxstats output pattern: "*.{idxstats}" - - versions: - - versions.yml: - type: file - description: File containing software versions - pattern: "versions.yml" + ontologies: [] + versions_samtools: + - - ${task.process}: + type: string + description: The name of the process + - samtools: + type: string + description: The name of the tool + - samtools version | sed '1!d;s/.* //': + type: eval + description: The expression to obtain the version of the tool +topics: + versions: + - - ${task.process}: + type: string + description: The name of the process + - samtools: + type: string + description: The name of the tool + - samtools version | sed '1!d;s/.* //': + type: eval + description: The expression to obtain the version of the tool authors: - "@drpatelh" maintainers: diff --git a/modules/nf-core/samtools/idxstats/tests/main.nf.test b/modules/nf-core/samtools/idxstats/tests/main.nf.test index bf4c31047..c990cd551 100644 --- a/modules/nf-core/samtools/idxstats/tests/main.nf.test +++ b/modules/nf-core/samtools/idxstats/tests/main.nf.test @@ -3,6 +3,10 @@ nextflow_process { name "Test Process SAMTOOLS_IDXSTATS" script "../main.nf" process "SAMTOOLS_IDXSTATS" + tag "modules" + tag "modules_nfcore" + tag "samtools" + tag "samtools/idxstats" test("bam") { @@ -21,7 +25,10 @@ nextflow_process { then { assertAll ( { assert process.success }, - { assert snapshot(process.out).match() } + { assert snapshot( + process.out.idxstats, + process.out.findAll { key, val -> key.startsWith('versions') } + ).match() } ) } } @@ -43,7 +50,10 @@ nextflow_process { then { assertAll ( { assert process.success }, - { assert snapshot(process.out).match() } + { assert snapshot( + process.out.idxstats, + process.out.findAll { key, val -> key.startsWith('versions') } + ).match() } ) } }} diff --git a/modules/nf-core/samtools/idxstats/tests/main.nf.test.snap b/modules/nf-core/samtools/idxstats/tests/main.nf.test.snap index 2cc89a3b8..19a54c7cb 100644 --- a/modules/nf-core/samtools/idxstats/tests/main.nf.test.snap +++ b/modules/nf-core/samtools/idxstats/tests/main.nf.test.snap @@ -1,72 +1,56 @@ { "bam - stub": { "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + "test.idxstats:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], { - "0": [ - [ - { - "id": "test", - "single_end": false - }, - "test.idxstats:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "1": [ - "versions.yml:md5,c8d7394830c3c1e5be150589571534fb" - ], - "idxstats": [ + "versions_samtools": [ [ - { - "id": "test", - "single_end": false - }, - "test.idxstats:md5,d41d8cd98f00b204e9800998ecf8427e" + "SAMTOOLS_IDXSTATS", + "samtools", + "1.22.1" ] - ], - "versions": [ - "versions.yml:md5,c8d7394830c3c1e5be150589571534fb" ] } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.3", + "nextflow": "25.10.3" }, - "timestamp": "2024-09-16T08:11:56.466856235" + "timestamp": "2026-02-02T16:21:46.333090477" }, "bam": { "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + "test.idxstats:md5,df60a8c8d6621100d05178c93fb053a2" + ] + ], { - "0": [ - [ - { - "id": "test", - "single_end": false - }, - "test.idxstats:md5,df60a8c8d6621100d05178c93fb053a2" - ] - ], - "1": [ - "versions.yml:md5,c8d7394830c3c1e5be150589571534fb" - ], - "idxstats": [ + "versions_samtools": [ [ - { - "id": "test", - "single_end": false - }, - "test.idxstats:md5,df60a8c8d6621100d05178c93fb053a2" + "SAMTOOLS_IDXSTATS", + "samtools", + "1.22.1" ] - ], - "versions": [ - "versions.yml:md5,c8d7394830c3c1e5be150589571534fb" ] } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.3", + "nextflow": "25.10.3" }, - "timestamp": "2024-09-16T08:11:46.311550359" + "timestamp": "2026-02-02T16:21:41.063422521" } } \ No newline at end of file diff --git a/modules/nf-core/samtools/index/environment.yml b/modules/nf-core/samtools/index/environment.yml index 62054fc97..89e12a645 100644 --- a/modules/nf-core/samtools/index/environment.yml +++ b/modules/nf-core/samtools/index/environment.yml @@ -4,5 +4,7 @@ channels: - conda-forge - bioconda dependencies: - - bioconda::htslib=1.21 - - bioconda::samtools=1.21 + # renovate: datasource=conda depName=bioconda/htslib + - bioconda::htslib=1.22.1 + # renovate: datasource=conda depName=bioconda/samtools + - bioconda::samtools=1.22.1 diff --git a/modules/nf-core/samtools/index/main.nf b/modules/nf-core/samtools/index/main.nf index 311756102..e2a0e56da 100644 --- a/modules/nf-core/samtools/index/main.nf +++ b/modules/nf-core/samtools/index/main.nf @@ -4,8 +4,8 @@ process SAMTOOLS_INDEX { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/samtools:1.21--h50ea8bc_0' : - 'biocontainers/samtools:1.21--h50ea8bc_0' }" + 'https://depot.galaxyproject.org/singularity/samtools:1.22.1--h96c455f_0' : + 'biocontainers/samtools:1.22.1--h96c455f_0' }" input: tuple val(meta), path(input) @@ -14,7 +14,7 @@ process SAMTOOLS_INDEX { tuple val(meta), path("*.bai") , optional:true, emit: bai tuple val(meta), path("*.csi") , optional:true, emit: csi tuple val(meta), path("*.crai"), optional:true, emit: crai - path "versions.yml" , emit: versions + tuple val("${task.process}"), val('samtools'), eval("samtools version | sed '1!d;s/.* //'"), emit: versions_samtools, topic: versions when: task.ext.when == null || task.ext.when @@ -24,14 +24,9 @@ process SAMTOOLS_INDEX { """ samtools \\ index \\ - -@ ${task.cpus-1} \\ + -@ ${task.cpus} \\ $args \\ $input - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') - END_VERSIONS """ stub: @@ -40,10 +35,5 @@ process SAMTOOLS_INDEX { "crai" : args.contains("-c") ? "csi" : "bai" """ touch ${input}.${extension} - - 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/index/meta.yml b/modules/nf-core/samtools/index/meta.yml index db8df0d50..c6d4ce259 100644 --- a/modules/nf-core/samtools/index/meta.yml +++ b/modules/nf-core/samtools/index/meta.yml @@ -14,7 +14,8 @@ tools: homepage: http://www.htslib.org/ documentation: http://www.htslib.org/doc/samtools.html doi: 10.1093/bioinformatics/btp352 - licence: ["MIT"] + licence: + - "MIT" identifier: biotools:samtools input: - - meta: @@ -25,9 +26,10 @@ input: - input: type: file description: input file + ontologies: [] output: - - bai: - - meta: + bai: + - - meta: type: map description: | Groovy Map containing sample information @@ -36,8 +38,9 @@ output: type: file description: BAM/CRAM/SAM index file pattern: "*.{bai,crai,sai}" - - csi: - - meta: + ontologies: [] + csi: + - - meta: type: map description: | Groovy Map containing sample information @@ -46,8 +49,9 @@ output: type: file description: CSI index file pattern: "*.{csi}" - - crai: - - meta: + ontologies: [] + crai: + - - meta: type: map description: | Groovy Map containing sample information @@ -56,11 +60,28 @@ output: type: file description: BAM/CRAM/SAM index file pattern: "*.{bai,crai,sai}" - - versions: - - versions.yml: - type: file - description: File containing software versions - pattern: "versions.yml" + ontologies: [] + versions_samtools: + - - ${task.process}: + type: string + description: The name of the process + - samtools: + type: string + description: The name of the tool + - samtools version | sed '1!d;s/.* //': + type: eval + description: The expression to obtain the version of the tool +topics: + versions: + - - ${task.process}: + type: string + description: The name of the process + - samtools: + type: string + description: The name of the tool + - samtools version | sed '1!d;s/.* //': + type: eval + description: The expression to obtain the version of the tool authors: - "@drpatelh" - "@ewels" diff --git a/modules/nf-core/samtools/index/tests/main.nf.test b/modules/nf-core/samtools/index/tests/main.nf.test index b59a25b38..c96cec860 100644 --- a/modules/nf-core/samtools/index/tests/main.nf.test +++ b/modules/nf-core/samtools/index/tests/main.nf.test @@ -3,6 +3,10 @@ nextflow_process { name "Test Process SAMTOOLS_INDEX" script "../main.nf" process "SAMTOOLS_INDEX" + tag "modules" + tag "modules_nfcore" + tag "samtools" + tag "samtools/index" test("bai") { when { @@ -19,7 +23,10 @@ nextflow_process { then { assertAll ( { assert process.success }, - { assert snapshot(process.out).match() } + { assert snapshot( + process.out.bai, + process.out.findAll { key, val -> key.startsWith('versions') } + ).match() } ) } } @@ -39,7 +46,10 @@ nextflow_process { then { assertAll ( { assert process.success }, - { assert snapshot(process.out).match() } + { assert snapshot( + process.out.crai, + process.out.findAll { key, val -> key.startsWith('versions') } + ).match() } ) } } @@ -63,7 +73,7 @@ nextflow_process { { assert process.success }, { assert snapshot( file(process.out.csi[0][1]).name, - process.out.versions + process.out.findAll { key, val -> key.startsWith('versions') } ).match() } ) } @@ -85,7 +95,10 @@ nextflow_process { then { assertAll ( { assert process.success }, - { assert snapshot(process.out).match() } + { assert snapshot( + process.out.bai, + process.out.findAll { key, val -> key.startsWith('versions') } + ).match() } ) } } @@ -106,7 +119,10 @@ nextflow_process { then { assertAll ( { assert process.success }, - { assert snapshot(process.out).match() } + { assert snapshot( + process.out.crai, + process.out.findAll { key, val -> key.startsWith('versions') } + ).match() } ) } } @@ -129,7 +145,10 @@ nextflow_process { then { assertAll ( { assert process.success }, - { assert snapshot(process.out).match() } + { assert snapshot( + process.out.csi, + process.out.findAll { key, val -> key.startsWith('versions') } + ).match() } ) } } diff --git a/modules/nf-core/samtools/index/tests/main.nf.test.snap b/modules/nf-core/samtools/index/tests/main.nf.test.snap index 72d65e81a..afc8a1ff6 100644 --- a/modules/nf-core/samtools/index/tests/main.nf.test.snap +++ b/modules/nf-core/samtools/index/tests/main.nf.test.snap @@ -1,250 +1,156 @@ { "csi - stub": { "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + "test.paired_end.sorted.bam.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], { - "0": [ - - ], - "1": [ - [ - { - "id": "test", - "single_end": false - }, - "test.paired_end.sorted.bam.csi:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "2": [ - - ], - "3": [ - "versions.yml:md5,5e09a6fdf76de396728f877193d72315" - ], - "bai": [ - - ], - "crai": [ - - ], - "csi": [ + "versions_samtools": [ [ - { - "id": "test", - "single_end": false - }, - "test.paired_end.sorted.bam.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + "SAMTOOLS_INDEX", + "samtools", + "1.22.1" ] - ], - "versions": [ - "versions.yml:md5,5e09a6fdf76de396728f877193d72315" ] } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2024-09-16T08:21:25.261127166" + "timestamp": "2026-01-28T17:52:10.030187" }, "crai - stub": { "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + "test.paired_end.recalibrated.sorted.cram.crai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], { - "0": [ - - ], - "1": [ - - ], - "2": [ + "versions_samtools": [ [ - { - "id": "test", - "single_end": false - }, - "test.paired_end.recalibrated.sorted.cram.crai:md5,d41d8cd98f00b204e9800998ecf8427e" + "SAMTOOLS_INDEX", + "samtools", + "1.22.1" ] - ], - "3": [ - "versions.yml:md5,5e09a6fdf76de396728f877193d72315" - ], - "bai": [ - - ], - "crai": [ - [ - { - "id": "test", - "single_end": false - }, - "test.paired_end.recalibrated.sorted.cram.crai:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "csi": [ - - ], - "versions": [ - "versions.yml:md5,5e09a6fdf76de396728f877193d72315" ] } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2024-09-16T08:21:12.653194876" + "timestamp": "2026-01-28T17:51:59.125484" }, "bai - stub": { "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + "test.paired_end.sorted.bam.bai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], { - "0": [ + "versions_samtools": [ [ - { - "id": "test", - "single_end": false - }, - "test.paired_end.sorted.bam.bai:md5,d41d8cd98f00b204e9800998ecf8427e" + "SAMTOOLS_INDEX", + "samtools", + "1.22.1" ] - ], - "1": [ - - ], - "2": [ - - ], - "3": [ - "versions.yml:md5,5e09a6fdf76de396728f877193d72315" - ], - "bai": [ - [ - { - "id": "test", - "single_end": false - }, - "test.paired_end.sorted.bam.bai:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "crai": [ - - ], - "csi": [ - - ], - "versions": [ - "versions.yml:md5,5e09a6fdf76de396728f877193d72315" ] } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2024-09-16T08:21:01.854932651" + "timestamp": "2026-01-28T17:51:47.277042" }, "csi": { "content": [ "test.paired_end.sorted.bam.csi", - [ - "versions.yml:md5,5e09a6fdf76de396728f877193d72315" - ] + { + "versions_samtools": [ + [ + "SAMTOOLS_INDEX", + "samtools", + "1.22.1" + ] + ] + } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2024-09-16T08:20:51.485364222" + "timestamp": "2026-01-28T17:51:35.758735" }, "crai": { "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + "test.paired_end.recalibrated.sorted.cram.crai:md5,14bc3bd5c89cacc8f4541f9062429029" + ] + ], { - "0": [ - - ], - "1": [ - - ], - "2": [ + "versions_samtools": [ [ - { - "id": "test", - "single_end": false - }, - "test.paired_end.recalibrated.sorted.cram.crai:md5,14bc3bd5c89cacc8f4541f9062429029" + "SAMTOOLS_INDEX", + "samtools", + "1.22.1" ] - ], - "3": [ - "versions.yml:md5,5e09a6fdf76de396728f877193d72315" - ], - "bai": [ - - ], - "crai": [ - [ - { - "id": "test", - "single_end": false - }, - "test.paired_end.recalibrated.sorted.cram.crai:md5,14bc3bd5c89cacc8f4541f9062429029" - ] - ], - "csi": [ - - ], - "versions": [ - "versions.yml:md5,5e09a6fdf76de396728f877193d72315" ] } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2024-09-16T08:20:40.518873972" + "timestamp": "2026-01-28T17:51:26.561965" }, "bai": { "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + "test.paired_end.sorted.bam.bai:md5,704c10dd1326482448ca3073fdebc2f4" + ] + ], { - "0": [ - [ - { - "id": "test", - "single_end": false - }, - "test.paired_end.sorted.bam.bai:md5,704c10dd1326482448ca3073fdebc2f4" - ] - ], - "1": [ - - ], - "2": [ - - ], - "3": [ - "versions.yml:md5,5e09a6fdf76de396728f877193d72315" - ], - "bai": [ + "versions_samtools": [ [ - { - "id": "test", - "single_end": false - }, - "test.paired_end.sorted.bam.bai:md5,704c10dd1326482448ca3073fdebc2f4" + "SAMTOOLS_INDEX", + "samtools", + "1.22.1" ] - ], - "crai": [ - - ], - "csi": [ - - ], - "versions": [ - "versions.yml:md5,5e09a6fdf76de396728f877193d72315" ] } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2024-09-16T08:20:21.184050361" + "timestamp": "2026-01-28T17:51:15.299035" } } \ No newline at end of file diff --git a/modules/nf-core/samtools/sort/environment.yml b/modules/nf-core/samtools/sort/environment.yml index 62054fc97..89e12a645 100644 --- a/modules/nf-core/samtools/sort/environment.yml +++ b/modules/nf-core/samtools/sort/environment.yml @@ -4,5 +4,7 @@ channels: - conda-forge - bioconda dependencies: - - bioconda::htslib=1.21 - - bioconda::samtools=1.21 + # renovate: datasource=conda depName=bioconda/htslib + - bioconda::htslib=1.22.1 + # renovate: datasource=conda depName=bioconda/samtools + - bioconda::samtools=1.22.1 diff --git a/modules/nf-core/samtools/sort/main.nf b/modules/nf-core/samtools/sort/main.nf index caf3c61a8..6b5aa31dd 100644 --- a/modules/nf-core/samtools/sort/main.nf +++ b/modules/nf-core/samtools/sort/main.nf @@ -4,30 +4,41 @@ process SAMTOOLS_SORT { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/samtools:1.21--h50ea8bc_0' : - 'biocontainers/samtools:1.21--h50ea8bc_0' }" + 'https://depot.galaxyproject.org/singularity/samtools:1.22.1--h96c455f_0' : + 'biocontainers/samtools:1.22.1--h96c455f_0' }" input: tuple val(meta) , path(bam) tuple val(meta2), path(fasta) + val index_format output: - tuple val(meta), path("*.bam"), emit: bam, optional: true - tuple val(meta), path("*.cram"), emit: cram, optional: true - tuple val(meta), path("*.crai"), emit: crai, optional: true - tuple val(meta), path("*.csi"), emit: csi, optional: true - path "versions.yml", emit: versions + tuple val(meta), path("${prefix}.bam"), emit: bam, optional: true + tuple val(meta), path("${prefix}.cram"), emit: cram, optional: true + tuple val(meta), path("${prefix}.sam"), emit: sam, optional: true + tuple val(meta), path("${prefix}.${extension}.crai"), emit: crai, optional: true + tuple val(meta), path("${prefix}.${extension}.csi"), emit: csi, optional: true + tuple val(meta), path("${prefix}.${extension}.bai"), emit: bai, optional: true + tuple val("${task.process}"), val('samtools'), eval("samtools version | sed '1!d;s/.* //'"), topic: versions, emit: versions_samtools 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("--output-fmt sam") ? "sam" : - args.contains("--output-fmt cram") ? "cram" : - "bam" + prefix = task.ext.prefix ?: "${meta.id}" + extension = args.contains("--output-fmt sam") ? "sam" : + args.contains("--output-fmt cram") ? "cram" : + "bam" def reference = fasta ? "--reference ${fasta}" : "" + output_file = index_format ? "${prefix}.${extension}##idx##${prefix}.${extension}.${index_format} --write-index" : "${prefix}.${extension}" + if (index_format) { + if (!index_format.matches('bai|csi|crai')) { + error "Index format not one of bai, csi, crai." + } else if (extension == "sam") { + error "Indexing not compatible with SAM output" + } + } if ("$bam" == "${prefix}.bam") error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!" """ @@ -39,34 +50,29 @@ process SAMTOOLS_SORT { -T ${prefix} \\ --threads $task.cpus \\ ${reference} \\ - -o ${prefix}.${extension} \\ + -o ${output_file} \\ - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') - END_VERSIONS """ stub: def args = task.ext.args ?: '' - def prefix = task.ext.prefix ?: "${meta.id}" - def extension = args.contains("--output-fmt sam") ? "sam" : - args.contains("--output-fmt cram") ? "cram" : - "bam" + prefix = task.ext.prefix ?: "${meta.id}" + extension = args.contains("--output-fmt sam") ? "sam" : + args.contains("--output-fmt cram") ? "cram" : + "bam" + if (index_format) { + if (!index_format.matches('bai|csi|crai')) { + error "Index format not one of bai, csi, crai." + } else if (extension == "sam") { + error "Indexing not compatible with SAM output" + } + } + index = index_format ? "touch ${prefix}.${extension}.${index_format}" : "" + """ touch ${prefix}.${extension} - if [ "${extension}" == "bam" ]; - then - touch ${prefix}.${extension}.csi - elif [ "${extension}" == "cram" ]; - then - touch ${prefix}.${extension}.crai - fi + ${index} - 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/sort/meta.yml b/modules/nf-core/samtools/sort/meta.yml index a9dbec5a8..699683047 100644 --- a/modules/nf-core/samtools/sort/meta.yml +++ b/modules/nf-core/samtools/sort/meta.yml @@ -26,6 +26,7 @@ input: type: file description: BAM/CRAM/SAM file(s) pattern: "*.{bam,cram,sam}" + ontologies: [] - - meta2: type: map description: | @@ -36,52 +37,101 @@ input: description: Reference genome FASTA file pattern: "*.{fa,fasta,fna}" optional: true + ontologies: [] + - index_format: + type: string + description: Index format to use (optional) + pattern: "bai|csi|crai" output: - - bam: - - meta: + bam: + - - meta: type: map description: | Groovy Map containing sample information e.g. [ id:'test', single_end:false ] - - "*.bam": + - "${prefix}.bam": type: file description: Sorted BAM file pattern: "*.{bam}" - - cram: - - meta: + ontologies: [] + cram: + - - meta: type: map description: | Groovy Map containing sample information e.g. [ id:'test', single_end:false ] - - "*.cram": + - "${prefix}.cram": type: file description: Sorted CRAM file pattern: "*.{cram}" - - crai: - - meta: + ontologies: [] + sam: + - - meta: type: map description: | Groovy Map containing sample information e.g. [ id:'test', single_end:false ] - - "*.crai": + - "${prefix}.sam": + type: file + description: Sorted SAM file + pattern: "*.{sam}" + ontologies: [] + crai: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "${prefix}.${extension}.crai": type: file description: CRAM index file (optional) pattern: "*.crai" - - csi: - - meta: + ontologies: [] + csi: + - - meta: type: map description: | Groovy Map containing sample information e.g. [ id:'test', single_end:false ] - - "*.csi": + - "${prefix}.${extension}.csi": type: file description: BAM index file (optional) pattern: "*.csi" - - versions: - - versions.yml: + ontologies: [] + bai: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "${prefix}.${extension}.bai": type: file - description: File containing software versions - pattern: "versions.yml" + description: BAM index file (optional) + pattern: "*.bai" + ontologies: [] + versions_samtools: + - - ${task.process}: + type: string + description: The process the versions were collected from + - samtools: + type: string + description: The tool name + - "samtools version | sed '1!d;s/.* //'": + type: string + description: The command used to generate the version of the tool + +topics: + versions: + - - ${task.process}: + type: string + description: The process the versions were collected from + - samtools: + type: string + description: The tool name + - "samtools version | sed '1!d;s/.* //'": + type: string + description: The command used to generate the version of the tool + authors: - "@drpatelh" - "@ewels" diff --git a/modules/nf-core/samtools/sort/tests/main.nf.test b/modules/nf-core/samtools/sort/tests/main.nf.test index 14d9d73d8..df47bb25c 100644 --- a/modules/nf-core/samtools/sort/tests/main.nf.test +++ b/modules/nf-core/samtools/sort/tests/main.nf.test @@ -3,8 +3,12 @@ nextflow_process { name "Test Process SAMTOOLS_SORT" script "../main.nf" process "SAMTOOLS_SORT" + tag "modules" + tag "modules_nfcore" + tag "samtools" + tag "samtools/sort" - test("bam") { + test("bam_no_index") { config "./nextflow.config" @@ -19,6 +23,7 @@ nextflow_process { [ id:'fasta' ], // meta map file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) ]) + input[2] = '' """ } } @@ -28,8 +33,72 @@ nextflow_process { { assert process.success }, { assert snapshot( process.out.bam, - process.out.csi.collect { it.collect { it instanceof Map ? it : file(it).name } }, - process.out.versions + process.out.bai, + process.out.findAll { key, val -> key.startsWith("versions") } + ).match()} + ) + } + } + + test("bam_bai_index") { + + config "./nextflow.config" + + 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) + ]) + input[1] = Channel.of([ + [ id:'fasta' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ]) + input[2] = 'bai' + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot( + process.out.bam, + process.out.bai, + process.out.findAll { key, val -> key.startsWith("versions") } + ).match()} + ) + } + } + + test("bam_csi_index") { + + config "./nextflow.config" + + 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) + ]) + input[1] = Channel.of([ + [ id:'fasta' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ]) + input[2] = 'csi' + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot( + process.out.bam, + process.out.csi, + process.out.findAll { key, val -> key.startsWith("versions") } ).match()} ) } @@ -53,6 +122,77 @@ nextflow_process { [ id:'fasta' ], // meta map file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ]) + input[2] = '' + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot( + process.out.bam, + process.out.csi.collect { it.collect { it instanceof Map ? it : file(it).name } }, + process.out.findAll { key, val -> key.startsWith("versions") } + ).match()} + ) + } + } + + test("multiple bam bai index") { + + config "./nextflow.config" + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test2.paired_end.sorted.bam', checkIfExists: true) + ] + ]) + input[1] = Channel.of([ + [ id:'fasta' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ]) + input[2] = 'bai' + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot( + process.out.bam, + process.out.bai.collect { it.collect { it instanceof Map ? it : file(it).name } }, + process.out.findAll { key, val -> key.startsWith("versions") } + ).match()} + ) + } + } + + test("multiple bam csi index") { + + config "./nextflow.config" + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test2.paired_end.sorted.bam', checkIfExists: true) + ] + ]) + input[1] = Channel.of([ + [ id:'fasta' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ]) + input[2] = 'csi' """ } } @@ -63,7 +203,7 @@ nextflow_process { { assert snapshot( process.out.bam, process.out.csi.collect { it.collect { it instanceof Map ? it : file(it).name } }, - process.out.versions + process.out.findAll { key, val -> key.startsWith("versions") } ).match()} ) } @@ -84,6 +224,7 @@ nextflow_process { [ id:'fasta' ], // meta map file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ]) + input[2] = '' """ } } @@ -94,7 +235,7 @@ nextflow_process { { assert snapshot( process.out.cram.collect { it.collect { it instanceof Map ? it : file(it).name } }, process.out.crai.collect { it.collect { it instanceof Map ? it : file(it).name } }, - process.out.versions + process.out.findAll { key, val -> key.startsWith("versions") } ).match()} ) } @@ -116,6 +257,7 @@ nextflow_process { [ id:'fasta' ], // meta map file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) ]) + input[2] = '' """ } } @@ -123,7 +265,7 @@ nextflow_process { then { assertAll ( { assert process.success }, - { assert snapshot(process.out).match() } + { assert snapshot(process.out.findAll { key, val -> key.startsWith("versions") }).match() } ) } } @@ -146,6 +288,7 @@ nextflow_process { [ id:'fasta' ], // meta map file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ]) + input[2] = '' """ } } @@ -153,7 +296,7 @@ nextflow_process { then { assertAll ( { assert process.success }, - { assert snapshot(process.out).match() } + { assert snapshot(process.out.findAll { key, val -> key.startsWith("versions") }).match() } ) } } @@ -174,6 +317,7 @@ nextflow_process { [ id:'fasta' ], // meta map file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ]) + input[2] = '' """ } } @@ -181,7 +325,7 @@ nextflow_process { then { assertAll ( { assert process.success }, - { assert snapshot(process.out).match() } + { assert snapshot(process.out.findAll { key, val -> key.startsWith("versions") }).match() } ) } } diff --git a/modules/nf-core/samtools/sort/tests/main.nf.test.snap b/modules/nf-core/samtools/sort/tests/main.nf.test.snap index 469891fe3..4e618fa3f 100644 --- a/modules/nf-core/samtools/sort/tests/main.nf.test.snap +++ b/modules/nf-core/samtools/sort/tests/main.nf.test.snap @@ -19,147 +19,77 @@ "test.sorted.cram.crai" ] ], - [ - "versions.yml:md5,2659b187d681241451539d4c53500b9f" - ] + { + "versions_samtools": [ + [ + "SAMTOOLS_SORT", + "samtools", + "1.22.1" + ] + ] + } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.3", + "nextflow": "25.10.0" }, - "timestamp": "2024-09-16T08:49:58.207549273" + "timestamp": "2025-10-29T12:47:01.171084" }, - "bam - stub": { + "bam_csi_index": { "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.bam:md5,72ca1dff5344a5e5e6b892fe5f6b134d" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.bam.csi:md5,01394e702c729cb478df914ffaf9f7f8" + ] + ], { - "0": [ + "versions_samtools": [ [ - { - "id": "test", - "single_end": false - }, - "test.sorted.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + "SAMTOOLS_SORT", + "samtools", + "1.22.1" ] - ], - "1": [ - - ], - "2": [ - - ], - "3": [ - [ - { - "id": "test", - "single_end": false - }, - "test.sorted.bam.csi:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "4": [ - "versions.yml:md5,2659b187d681241451539d4c53500b9f" - ], - "bam": [ - [ - { - "id": "test", - "single_end": false - }, - "test.sorted.bam:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "crai": [ - - ], - "cram": [ - - ], - "csi": [ - [ - { - "id": "test", - "single_end": false - }, - "test.sorted.bam.csi:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "versions": [ - "versions.yml:md5,2659b187d681241451539d4c53500b9f" ] } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.3", + "nextflow": "25.10.0" }, - "timestamp": "2024-09-16T08:50:08.630951018" + "timestamp": "2025-10-29T12:46:00.961675" }, - "cram - stub": { + "bam - stub": { "content": [ { - "0": [ - - ], - "1": [ + "versions_samtools": [ [ - { - "id": "test", - "single_end": false - }, - "test.sorted.cram:md5,d41d8cd98f00b204e9800998ecf8427e" + "SAMTOOLS_SORT", + "samtools", + "1.22.1" ] - ], - "2": [ - [ - { - "id": "test", - "single_end": false - }, - "test.sorted.cram.crai:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "3": [ - - ], - "4": [ - "versions.yml:md5,2659b187d681241451539d4c53500b9f" - ], - "bam": [ - - ], - "crai": [ - [ - { - "id": "test", - "single_end": false - }, - "test.sorted.cram.crai:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "cram": [ - [ - { - "id": "test", - "single_end": false - }, - "test.sorted.cram:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "csi": [ - - ], - "versions": [ - "versions.yml:md5,2659b187d681241451539d4c53500b9f" ] } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.3", + "nextflow": "25.10.0" }, - "timestamp": "2024-09-16T08:50:19.061912443" + "timestamp": "2025-10-29T12:47:12.154354" }, - "multiple bam": { + "multiple bam bai index": { "content": [ [ [ @@ -167,7 +97,7 @@ "id": "test", "single_end": false }, - "test.sorted.bam:md5,8a16ba90c7d294cbb4c33ac0f7127a12" + "test.sorted.bam:md5,3ffa2affc29f0aa6e7b36dded84625fe" ] ], [ @@ -176,85 +106,122 @@ "id": "test", "single_end": false }, - "test.sorted.bam.csi" + "test.sorted.bam.bai" ] ], - [ - "versions.yml:md5,2659b187d681241451539d4c53500b9f" - ] + { + "versions_samtools": [ + [ + "SAMTOOLS_SORT", + "samtools", + "1.22.1" + ] + ] + } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.09.0" + "nf-test": "0.9.3", + "nextflow": "25.10.0" }, - "timestamp": "2024-10-08T11:59:55.479443" + "timestamp": "2025-10-29T12:46:25.488622" }, - "multiple bam - stub": { + "cram - stub": { "content": [ { - "0": [ + "versions_samtools": [ [ - { - "id": "test", - "single_end": false - }, - "test.sorted.bam:md5,8a16ba90c7d294cbb4c33ac0f7127a12" + "SAMTOOLS_SORT", + "samtools", + "1.22.1" ] - ], - "1": [ - - ], - "2": [ - - ], - "3": [ + ] + } + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.0" + }, + "timestamp": "2025-10-29T12:47:28.485045" + }, + "multiple bam": { + "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.bam:md5,cd4eb0077f25e9cff395366b8883dd1f" + ] + ], + [ + + ], + { + "versions_samtools": [ [ - { - "id": "test", - "single_end": false - }, - "test.sorted.bam.csi:md5,d185916eaff9afeb4d0aeab3310371f9" + "SAMTOOLS_SORT", + "samtools", + "1.22.1" ] - ], - "4": [ - "versions.yml:md5,2659b187d681241451539d4c53500b9f" - ], - "bam": [ + ] + } + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.0" + }, + "timestamp": "2025-10-29T12:46:13.168476" + }, + "multiple bam - stub": { + "content": [ + { + "versions_samtools": [ [ - { - "id": "test", - "single_end": false - }, - "test.sorted.bam:md5,8a16ba90c7d294cbb4c33ac0f7127a12" + "SAMTOOLS_SORT", + "samtools", + "1.22.1" ] - ], - "crai": [ - - ], - "cram": [ - - ], - "csi": [ + ] + } + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.0" + }, + "timestamp": "2025-10-29T12:47:21.628088" + }, + "bam_no_index": { + "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.bam:md5,26b27d1f9bcb61c25da21b562349784e" + ] + ], + [ + + ], + { + "versions_samtools": [ [ - { - "id": "test", - "single_end": false - }, - "test.sorted.bam.csi:md5,d185916eaff9afeb4d0aeab3310371f9" + "SAMTOOLS_SORT", + "samtools", + "1.22.1" ] - ], - "versions": [ - "versions.yml:md5,2659b187d681241451539d4c53500b9f" ] } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.09.0" + "nf-test": "0.9.3", + "nextflow": "25.10.0" }, - "timestamp": "2024-10-08T11:36:13.781404" + "timestamp": "2025-10-29T12:45:47.139418" }, - "bam": { + "multiple bam csi index": { "content": [ [ [ @@ -262,7 +229,7 @@ "id": "test", "single_end": false }, - "test.sorted.bam:md5,34aa85e86abefe637f7a4a9887f016fc" + "test.sorted.bam:md5,295503ba5342531a3310c33ad0efbc22" ] ], [ @@ -274,14 +241,56 @@ "test.sorted.bam.csi" ] ], + { + "versions_samtools": [ + [ + "SAMTOOLS_SORT", + "samtools", + "1.22.1" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.0" + }, + "timestamp": "2025-10-29T12:46:51.5531" + }, + "bam_bai_index": { + "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.bam:md5,cae7564cb83bb4a5911205bf94124b54" + ] + ], [ - "versions.yml:md5,2659b187d681241451539d4c53500b9f" - ] + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.bam.bai:md5,50dd467c169545a4d5d1f709f7e986e0" + ] + ], + { + "versions_samtools": [ + [ + "SAMTOOLS_SORT", + "samtools", + "1.22.1" + ] + ] + } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.09.0" + "nf-test": "0.9.3", + "nextflow": "25.10.0" }, - "timestamp": "2024-10-08T11:59:46.372244" + "timestamp": "2025-10-29T12:45:52.796936" } } \ No newline at end of file diff --git a/modules/nf-core/samtools/sort/tests/nextflow.config b/modules/nf-core/samtools/sort/tests/nextflow.config index f642771f5..723f62b21 100644 --- a/modules/nf-core/samtools/sort/tests/nextflow.config +++ b/modules/nf-core/samtools/sort/tests/nextflow.config @@ -2,7 +2,6 @@ process { withName: SAMTOOLS_SORT { ext.prefix = { "${meta.id}.sorted" } - ext.args = "--write-index" } } diff --git a/modules/nf-core/samtools/stats/environment.yml b/modules/nf-core/samtools/stats/environment.yml index 62054fc97..89e12a645 100644 --- a/modules/nf-core/samtools/stats/environment.yml +++ b/modules/nf-core/samtools/stats/environment.yml @@ -4,5 +4,7 @@ channels: - conda-forge - bioconda dependencies: - - bioconda::htslib=1.21 - - bioconda::samtools=1.21 + # renovate: datasource=conda depName=bioconda/htslib + - bioconda::htslib=1.22.1 + # renovate: datasource=conda depName=bioconda/samtools + - bioconda::samtools=1.22.1 diff --git a/modules/nf-core/samtools/stats/main.nf b/modules/nf-core/samtools/stats/main.nf index 4443948b7..57d246806 100644 --- a/modules/nf-core/samtools/stats/main.nf +++ b/modules/nf-core/samtools/stats/main.nf @@ -4,8 +4,8 @@ process SAMTOOLS_STATS { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/samtools:1.21--h50ea8bc_0' : - 'biocontainers/samtools:1.21--h50ea8bc_0' }" + 'https://depot.galaxyproject.org/singularity/samtools:1.22.1--h96c455f_0' : + 'biocontainers/samtools:1.22.1--h96c455f_0' }" input: tuple val(meta), path(input), path(input_index) @@ -13,36 +13,28 @@ process SAMTOOLS_STATS { output: tuple val(meta), path("*.stats"), emit: stats - path "versions.yml" , emit: versions + tuple val("${task.process}"), val('samtools'), eval('samtools version | sed "1!d;s/.* //"'), emit: versions_samtools, topic: versions when: task.ext.when == null || task.ext.when script: - def prefix = task.ext.prefix ?: "${meta.id}" + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" def reference = fasta ? "--reference ${fasta}" : "" """ samtools \\ stats \\ + ${args} \\ --threads ${task.cpus} \\ ${reference} \\ ${input} \\ > ${prefix}.stats - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') - END_VERSIONS """ stub: def prefix = task.ext.prefix ?: "${meta.id}" """ touch ${prefix}.stats - - 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/stats/meta.yml b/modules/nf-core/samtools/stats/meta.yml index 77b020f76..5c59cce43 100644 --- a/modules/nf-core/samtools/stats/meta.yml +++ b/modules/nf-core/samtools/stats/meta.yml @@ -27,10 +27,12 @@ input: type: file description: BAM/CRAM file from alignment pattern: "*.{bam,cram}" + ontologies: [] - input_index: type: file description: BAI/CRAI file from alignment pattern: "*.{bai,crai}" + ontologies: [] - - meta2: type: map description: | @@ -40,9 +42,10 @@ input: type: file description: Reference file the CRAM was created with (optional) pattern: "*.{fasta,fa}" + ontologies: [] output: - - stats: - - meta: + stats: + - - meta: type: map description: | Groovy Map containing sample information @@ -51,11 +54,30 @@ output: type: file description: File containing samtools stats output pattern: "*.{stats}" - - versions: - - versions.yml: - type: file - description: File containing software versions - pattern: "versions.yml" + ontologies: [] + versions_samtools: + - - ${task.process}: + type: string + description: Name of the process + - samtools: + type: string + description: Name of the tool + - samtools version | sed "1!d;s/.* //": + type: eval + description: The expression to obtain the version of the tool + +topics: + versions: + - - ${task.process}: + type: string + description: Name of the process + - samtools: + type: string + description: Name of the tool + - samtools version | sed "1!d;s/.* //": + type: eval + description: The expression to obtain the version of the tool + authors: - "@drpatelh" - "@FriederikeHanssen" diff --git a/modules/nf-core/samtools/stats/tests/main.nf.test b/modules/nf-core/samtools/stats/tests/main.nf.test index ea8a233de..5bc893095 100644 --- a/modules/nf-core/samtools/stats/tests/main.nf.test +++ b/modules/nf-core/samtools/stats/tests/main.nf.test @@ -4,6 +4,10 @@ nextflow_process { script "../main.nf" process "SAMTOOLS_STATS" + tag "modules" + tag "modules_nfcore" + tag "samtools" + tag "samtools/stats" test("bam") { diff --git a/modules/nf-core/samtools/stats/tests/main.nf.test.snap b/modules/nf-core/samtools/stats/tests/main.nf.test.snap index df507be7a..94d981b2a 100644 --- a/modules/nf-core/samtools/stats/tests/main.nf.test.snap +++ b/modules/nf-core/samtools/stats/tests/main.nf.test.snap @@ -8,11 +8,15 @@ "id": "test", "single_end": false }, - "test.stats:md5,a27fe55e49a341f92379bb20a65c6a06" + "test.stats:md5,f4aec6c41b73d34ac2fc6b3253aa39ba" ] ], "1": [ - "versions.yml:md5,15b91d8c0e0440332e0fe4df80957043" + [ + "SAMTOOLS_STATS", + "samtools", + "1.22.1" + ] ], "stats": [ [ @@ -20,19 +24,23 @@ "id": "test", "single_end": false }, - "test.stats:md5,a27fe55e49a341f92379bb20a65c6a06" + "test.stats:md5,f4aec6c41b73d34ac2fc6b3253aa39ba" ] ], - "versions": [ - "versions.yml:md5,15b91d8c0e0440332e0fe4df80957043" + "versions_samtools": [ + [ + "SAMTOOLS_STATS", + "samtools", + "1.22.1" + ] ] } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.3", + "nextflow": "25.10.0" }, - "timestamp": "2024-09-16T09:29:16.767396182" + "timestamp": "2025-11-01T02:27:18.460724" }, "bam - stub": { "content": [ @@ -47,7 +55,11 @@ ] ], "1": [ - "versions.yml:md5,15b91d8c0e0440332e0fe4df80957043" + [ + "SAMTOOLS_STATS", + "samtools", + "1.22.1" + ] ], "stats": [ [ @@ -58,16 +70,20 @@ "test.stats:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "versions": [ - "versions.yml:md5,15b91d8c0e0440332e0fe4df80957043" + "versions_samtools": [ + [ + "SAMTOOLS_STATS", + "samtools", + "1.22.1" + ] ] } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.3", + "nextflow": "25.10.0" }, - "timestamp": "2024-09-16T09:29:29.721580274" + "timestamp": "2025-11-01T02:27:30.245839" }, "cram - stub": { "content": [ @@ -82,7 +98,11 @@ ] ], "1": [ - "versions.yml:md5,15b91d8c0e0440332e0fe4df80957043" + [ + "SAMTOOLS_STATS", + "samtools", + "1.22.1" + ] ], "stats": [ [ @@ -93,16 +113,20 @@ "test.stats:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "versions": [ - "versions.yml:md5,15b91d8c0e0440332e0fe4df80957043" + "versions_samtools": [ + [ + "SAMTOOLS_STATS", + "samtools", + "1.22.1" + ] ] } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.3", + "nextflow": "25.10.0" }, - "timestamp": "2024-09-16T09:29:53.567964304" + "timestamp": "2025-11-01T02:27:39.041649" }, "bam": { "content": [ @@ -113,11 +137,15 @@ "id": "test", "single_end": false }, - "test.stats:md5,d53a2584376d78942839e9933a34d11b" + "test.stats:md5,41ba8ad30ddb598dadb177a54c222ab9" ] ], "1": [ - "versions.yml:md5,15b91d8c0e0440332e0fe4df80957043" + [ + "SAMTOOLS_STATS", + "samtools", + "1.22.1" + ] ], "stats": [ [ @@ -125,18 +153,22 @@ "id": "test", "single_end": false }, - "test.stats:md5,d53a2584376d78942839e9933a34d11b" + "test.stats:md5,41ba8ad30ddb598dadb177a54c222ab9" ] ], - "versions": [ - "versions.yml:md5,15b91d8c0e0440332e0fe4df80957043" + "versions_samtools": [ + [ + "SAMTOOLS_STATS", + "samtools", + "1.22.1" + ] ] } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.3", + "nextflow": "25.10.0" }, - "timestamp": "2024-09-16T09:28:50.73610604" + "timestamp": "2025-11-01T02:26:55.988241" } } \ No newline at end of file diff --git a/modules/nf-core/samtools/view/environment.yml b/modules/nf-core/samtools/view/environment.yml new file mode 100644 index 000000000..89e12a645 --- /dev/null +++ b/modules/nf-core/samtools/view/environment.yml @@ -0,0 +1,10 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json +channels: + - conda-forge + - bioconda +dependencies: + # renovate: datasource=conda depName=bioconda/htslib + - bioconda::htslib=1.22.1 + # renovate: datasource=conda depName=bioconda/samtools + - bioconda::samtools=1.22.1 diff --git a/modules/nf-core/samtools/view/main.nf b/modules/nf-core/samtools/view/main.nf new file mode 100644 index 000000000..87b3333f6 --- /dev/null +++ b/modules/nf-core/samtools/view/main.nf @@ -0,0 +1,94 @@ +process SAMTOOLS_VIEW { + 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.22.1--h96c455f_0' : + 'biocontainers/samtools:1.22.1--h96c455f_0' }" + + input: + tuple val(meta), path(input), path(index) + tuple val(meta2), path(fasta) + path qname + val index_format + + output: + tuple val(meta), path("${prefix}.bam"), emit: bam, optional: true + tuple val(meta), path("${prefix}.cram"), emit: cram, optional: true + tuple val(meta), path("${prefix}.sam"), emit: sam, optional: true + tuple val(meta), path("${prefix}.${file_type}.bai"), emit: bai, optional: true + tuple val(meta), path("${prefix}.${file_type}.csi"), emit: csi, optional: true + tuple val(meta), path("${prefix}.${file_type}.crai"), emit: crai, optional: true + tuple val(meta), path("${prefix}.unselected.${file_type}"), emit: unselected, optional: true + tuple val(meta), path("${prefix}.unselected.${file_type}.{csi,crai}"), emit: unselected_index, optional: true + tuple val("${task.process}"), val('samtools'), eval('samtools version | sed "1!d;s/.* //"'), emit: versions_samtools, topic: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def args2 = task.ext.args2 ?: '' + prefix = task.ext.prefix ?: "${meta.id}" + def reference = fasta ? "--reference ${fasta}" : "" + file_type = args.contains("--output-fmt sam") ? "sam" : + args.contains("--output-fmt bam") ? "bam" : + args.contains("--output-fmt cram") ? "cram" : + input.getExtension() + + output_file = index_format ? "${prefix}.${file_type}##idx##${prefix}.${file_type}.${index_format} --write-index" : "${prefix}.${file_type}" + // Can't choose index type of unselected file + readnames = qname ? "--qname-file ${qname} --output-unselected ${prefix}.unselected.${file_type}": "" + + if ("$input" == "${prefix}.${file_type}") error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!" + if (index_format) { + if (!index_format.matches('bai|csi|crai')) { + error "Index format not one of bai, csi, crai." + } else if (file_type == "sam") { + error "Indexing not compatible with SAM output" + } + } + """ + # Note: --threads value represents *additional* CPUs to allocate (total CPUs = 1 + --threads). + samtools \\ + view \\ + --threads ${task.cpus-1} \\ + ${reference} \\ + ${readnames} \\ + $args \\ + -o ${output_file} \\ + $input \\ + $args2 + """ + + stub: + def args = task.ext.args ?: '' + prefix = task.ext.prefix ?: "${meta.id}" + file_type = args.contains("--output-fmt sam") ? "sam" : + args.contains("--output-fmt bam") ? "bam" : + args.contains("--output-fmt cram") ? "cram" : + input.getExtension() + default_index_format = + file_type == "bam" ? "csi" : + file_type == "cram" ? "crai" : "" + index = index_format ? "touch ${prefix}.${file_type}.${index_format}" : args.contains("--write-index") ? "touch ${prefix}.${file_type}.${default_index_format}" : "" + unselected = qname ? "touch ${prefix}.unselected.${file_type}" : "" + // Can't choose index type of unselected file + unselected_index = qname && (args.contains("--write-index") || index_format) ? "touch ${prefix}.unselected.${file_type}.${default_index_format}" : "" + + if ("$input" == "${prefix}.${file_type}") error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!" + if (index_format) { + if (!index_format.matches('bai|csi|crai')) { + error "Index format not one of bai, csi, crai." + } else if (file_type == "sam") { + error "Indexing not compatible with SAM output." + } + } + """ + touch ${prefix}.${file_type} + ${index} + ${unselected} + ${unselected_index} + """ +} diff --git a/modules/nf-core/samtools/view/meta.yml b/modules/nf-core/samtools/view/meta.yml new file mode 100644 index 000000000..215222661 --- /dev/null +++ b/modules/nf-core/samtools/view/meta.yml @@ -0,0 +1,175 @@ +name: samtools_view +description: filter/convert SAM/BAM/CRAM file +keywords: + - view + - 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"] + identifier: biotools:samtools +input: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - input: + type: file + description: BAM/CRAM/SAM file + pattern: "*.{bam,cram,sam}" + ontologies: [] + - index: + type: file + description: BAM.BAI/BAM.CSI/CRAM.CRAI file (optional) + pattern: "*.{.bai,.csi,.crai}" + ontologies: [] + - - meta2: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'test' ] + - fasta: + type: file + description: Reference file the CRAM was created with (optional) + pattern: "*.{fasta,fa}" + ontologies: [] + - qname: + type: file + description: Optional file with read names to output only select alignments + pattern: "*.{txt,list}" + ontologies: [] + - index_format: + type: string + description: Index format, used together with ext.args = '--write-index' + pattern: "bai|csi|crai" +output: + bam: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.bam: + type: file + description: optional filtered/converted BAM file + pattern: "*.{bam}" + ontologies: [] + cram: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.cram: + type: file + description: optional filtered/converted CRAM file + pattern: "*.{cram}" + ontologies: [] + sam: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.sam: + type: file + description: optional filtered/converted SAM file + pattern: "*.{sam}" + ontologies: [] + bai: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.${file_type}.bai: + type: file + description: optional BAM file index + pattern: "*.{bai}" + ontologies: [] + csi: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.${file_type}.csi: + type: file + description: optional tabix BAM file index + pattern: "*.{csi}" + ontologies: [] + crai: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.${file_type}.crai: + type: file + description: optional CRAM file index + pattern: "*.{crai}" + ontologies: [] + unselected: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.unselected.${file_type}: + type: file + description: optional file with unselected alignments + pattern: "*.unselected.{bam,cram,sam}" + ontologies: [] + unselected_index: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.unselected.${file_type}.{csi,crai}: + type: file + description: index for the "unselected" file + pattern: "*.unselected.{csi,crai}" + ontologies: [] + versions_samtools: + - - ${task.process}: + type: string + description: Name of the process + - samtools: + type: string + description: Name of the tool + - samtools version | sed "1!d;s/.* //": + type: eval + description: The expression to obtain the version of the tool + +topics: + versions: + - - ${task.process}: + type: string + description: Name of the process + - samtools: + type: string + description: Name of the tool + - samtools version | sed "1!d;s/.* //": + type: eval + description: The expression to obtain the version of the tool + +authors: + - "@drpatelh" + - "@joseespinosa" + - "@FriederikeHanssen" + - "@priyanka-surana" +maintainers: + - "@drpatelh" + - "@joseespinosa" + - "@FriederikeHanssen" + - "@priyanka-surana" diff --git a/modules/nf-core/samtools/view/tests/main.nf.test b/modules/nf-core/samtools/view/tests/main.nf.test new file mode 100644 index 000000000..74e1c49fd --- /dev/null +++ b/modules/nf-core/samtools/view/tests/main.nf.test @@ -0,0 +1,422 @@ +nextflow_process { + + name "Test Process SAMTOOLS_VIEW" + script "../main.nf" + config "./nextflow.config" + process "SAMTOOLS_VIEW" + + tag "modules" + tag "modules_nfcore" + tag "samtools" + tag "samtools/view" + + test("bam") { + when { + params { + samtools_args = "" + } + process { + """ + input[0] = [ + [ id:'test' ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.bam', checkIfExists: true), + [] + ] + input[1] = [[],[]] + input[2] = [] + input[3] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(sanitizeOutput(process.out, unstableKeys: ["bam"])).match()} + ) + } + } + + test("bam_csi_index") { + when { + params { + samtools_args = "--output-fmt bam --write-index" + } + process { + """ + input[0] = [ + [ id:'test' ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + [] + ] + input[1] = [[],[]] + input[2] = [] + input[3] = 'csi' + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(sanitizeOutput(process.out, unstableKeys: ["bam", "csi"])).match()} + ) + } + } + + test("bam_bai_index") { + when { + params { + samtools_args = "--output-fmt bam --write-index" + } + process { + """ + input[0] = [ + [ id:'test' ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + [] + ] + input[1] = [[],[]] + input[2] = [] + input[3] = 'bai' + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(sanitizeOutput(process.out, unstableKeys: ["bam", "bai"])).match()} + ) + } + } + + test("bam_bai_index_unselected") { + when { + params { + samtools_args = "--output-fmt bam --write-index" + } + process { + """ + input[0] = [ + [ id:'test' ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + [] + ] + input[1] = [[],[]] + input[2] = Channel.of('testN:1') + .collectFile(name: 'selected_reads.txt') + input[3] = 'bai' + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(sanitizeOutput(process.out, unstableKeys: ["bam", "bai", "unselected", "unselected_index"])).match()} + ) + } + } + + test("cram_crai_index_unselected") { + when { + params { + samtools_args = "--output-fmt cram --write-index" + } + process { + """ + input[0] = [ + [ id:'test' ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + [] + ] + input[1] = [[],[]] + input[2] = Channel.of('testN:1') + .collectFile(name: 'selected_reads.txt') + input[3] = 'crai' + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(sanitizeOutput(process.out, unstableKeys: ["bam", "bai", "unselected", "unselected_index", "crai"])).match()} + ) + } + } + + test("cram") { + when { + params { + samtools_args = "" + } + process { + """ + input[0] = [ + [ id:'test' ], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram.crai', checkIfExists: true) + ] + input[1] = [ + [ id:'genome' ], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ] + input[2] = [] + input[3] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(sanitizeOutput(process.out, unstableKeys: ["cram"])).match()} + ) + } + } + + test("cram_to_bam") { + when { + params { + samtools_args = "--output-fmt bam" + } + process { + """ + input[0] = [ + [ id:'test' ], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram', checkIfExists: true), + [] + ] + input[1] = [ + [ id:'genome' ], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ] + input[2] = [] + input[3] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(sanitizeOutput(process.out, unstableKeys: ["bam"])).match()} + ) + } + } + + test("cram_to_bam_index") { + when { + params { + samtools_args = "--output-fmt bam --write-index" + } + process { + """ + input[0] = [ + [ id:'test' ], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram', checkIfExists: true), + [] + ] + input[1] = [ + [ id:'genome' ], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ] + input[2] = [] + input[3] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(sanitizeOutput(process.out, unstableKeys: ["bam", "csi"])).match()} + ) + } + } + + test("cram_to_bam_index_qname") { + when { + params { + samtools_args = "--output-fmt bam --write-index" + } + process { + """ + input[0] = [ + [ id:'test' ], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram', checkIfExists: true), + [] + ] + input[1] = [ + [ id:'genome' ], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ] + input[2] = Channel.of("testN:2817", "testN:2814") + .collectFile(name: "readnames.list", newLine: true) + input[3] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(sanitizeOutput(process.out, unstableKeys: ["bam", "bai", "unselected", "unselected_index"])).match()} + ) + } + } + + test("bam_stub") { + + options "-stub" + + when { + params { + samtools_args = "--output-fmt bam --write-index" + } + process { + """ + input[0] = [ + [ id:'test' ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.bam', checkIfExists: true), + [] + ] + input[1] = [[],[]] + input[2] = [] + input[3] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(sanitizeOutput(process.out, unstableKeys: ["bam", "csi"])).match()} + ) + } + } + + test("bam_csi_index - stub") { + + options "-stub" + + when { + params { + samtools_args = "--output-fmt bam --write-index" + } + process { + """ + input[0] = [ + [ id:'test' ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + [] + ] + input[1] = [[],[]] + input[2] = [] + input[3] = 'csi' + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("bam_bai_index - stub") { + + options "-stub" + + when { + params { + samtools_args = "--output-fmt bam --write-index" + } + process { + """ + input[0] = [ + [ id:'test' ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + [] + ] + input[1] = [[],[]] + input[2] = [] + input[3] = 'bai' + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("bam_bai_index_uselected - stub") { + + options "-stub" + + when { + params { + samtools_args = "--output-fmt bam --write-index" + } + process { + """ + input[0] = [ + [ id:'test' ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + [] + ] + input[1] = [[],[]] + input[2] = Channel.of('testN:1') + .collectFile(name: 'selected_reads.txt') + input[3] = 'bai' + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("cram_crai_index_unselected - stub") { + + options "-stub" + + when { + params { + samtools_args = "--output-fmt cram --write-index" + } + process { + """ + input[0] = [ + [ id:'test' ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + [] + ] + input[1] = [[],[]] + input[2] = Channel.of('testN:1') + .collectFile(name: 'selected_reads.txt') + input[3] = 'crai' + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } +} diff --git a/modules/nf-core/samtools/view/tests/main.nf.test.snap b/modules/nf-core/samtools/view/tests/main.nf.test.snap new file mode 100644 index 000000000..95205e56f --- /dev/null +++ b/modules/nf-core/samtools/view/tests/main.nf.test.snap @@ -0,0 +1,949 @@ +{ + "cram_to_bam_index": { + "content": [ + { + "bai": [ + + ], + "bam": [ + [ + { + "id": "test" + }, + "test.bam" + ] + ], + "crai": [ + + ], + "cram": [ + + ], + "csi": [ + [ + { + "id": "test" + }, + "test.bam.csi" + ] + ], + "sam": [ + + ], + "unselected": [ + + ], + "unselected_index": [ + + ], + "versions_samtools": [ + [ + "SAMTOOLS_VIEW", + "samtools", + "1.22.1" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.3" + }, + "timestamp": "2026-02-03T16:49:14.82588493" + }, + "bam_csi_index - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + + ], + "2": [ + + ], + "3": [ + + ], + "4": [ + [ + { + "id": "test" + }, + "test.bam.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "5": [ + + ], + "6": [ + + ], + "7": [ + + ], + "8": [ + [ + "SAMTOOLS_VIEW", + "samtools", + "1.22.1" + ] + ], + "bai": [ + + ], + "bam": [ + [ + { + "id": "test" + }, + "test.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "crai": [ + + ], + "cram": [ + + ], + "csi": [ + [ + { + "id": "test" + }, + "test.bam.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "sam": [ + + ], + "unselected": [ + + ], + "unselected_index": [ + + ], + "versions_samtools": [ + [ + "SAMTOOLS_VIEW", + "samtools", + "1.22.1" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.3" + }, + "timestamp": "2026-02-03T16:49:31.409368544" + }, + "bam_csi_index": { + "content": [ + { + "bai": [ + + ], + "bam": [ + [ + { + "id": "test" + }, + "test.bam" + ] + ], + "crai": [ + + ], + "cram": [ + + ], + "csi": [ + [ + { + "id": "test" + }, + "test.bam.csi" + ] + ], + "sam": [ + + ], + "unselected": [ + + ], + "unselected_index": [ + + ], + "versions_samtools": [ + [ + "SAMTOOLS_VIEW", + "samtools", + "1.22.1" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.3" + }, + "timestamp": "2026-02-03T16:48:46.36824035" + }, + "cram_to_bam_index_qname": { + "content": [ + { + "bai": [ + + ], + "bam": [ + [ + { + "id": "test" + }, + "test.bam" + ] + ], + "crai": [ + + ], + "cram": [ + + ], + "csi": [ + [ + { + "id": "test" + }, + "test.bam.csi:md5,15d725bced7ececd45b4312b2af99a6b" + ] + ], + "sam": [ + + ], + "unselected": [ + [ + { + "id": "test" + }, + "test.unselected.bam" + ] + ], + "unselected_index": [ + [ + { + "id": "test" + }, + "test.unselected.bam.csi" + ] + ], + "versions_samtools": [ + [ + "SAMTOOLS_VIEW", + "samtools", + "1.22.1" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.3" + }, + "timestamp": "2026-02-03T16:49:20.747636525" + }, + "bam_bai_index_unselected": { + "content": [ + { + "bai": [ + [ + { + "id": "test" + }, + "test.bam.bai" + ] + ], + "bam": [ + [ + { + "id": "test" + }, + "test.bam" + ] + ], + "crai": [ + + ], + "cram": [ + + ], + "csi": [ + + ], + "sam": [ + + ], + "unselected": [ + [ + { + "id": "test" + }, + "test.unselected.bam" + ] + ], + "unselected_index": [ + [ + { + "id": "test" + }, + "test.unselected.bam.csi" + ] + ], + "versions_samtools": [ + [ + "SAMTOOLS_VIEW", + "samtools", + "1.22.1" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.3" + }, + "timestamp": "2026-02-03T16:48:57.713608154" + }, + "cram_crai_index_unselected - stub": { + "content": [ + { + "0": [ + + ], + "1": [ + [ + { + "id": "test" + }, + "test.cram:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + + ], + "3": [ + + ], + "4": [ + + ], + "5": [ + [ + { + "id": "test" + }, + "test.cram.crai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "6": [ + [ + { + "id": "test" + }, + "test.unselected.cram:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "7": [ + [ + { + "id": "test" + }, + "test.unselected.cram.crai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "8": [ + [ + "SAMTOOLS_VIEW", + "samtools", + "1.22.1" + ] + ], + "bai": [ + + ], + "bam": [ + + ], + "crai": [ + [ + { + "id": "test" + }, + "test.cram.crai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "cram": [ + [ + { + "id": "test" + }, + "test.cram:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "csi": [ + + ], + "sam": [ + + ], + "unselected": [ + [ + { + "id": "test" + }, + "test.unselected.cram:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "unselected_index": [ + [ + { + "id": "test" + }, + "test.unselected.cram.crai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions_samtools": [ + [ + "SAMTOOLS_VIEW", + "samtools", + "1.22.1" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.3" + }, + "timestamp": "2026-02-03T16:49:48.092654899" + }, + "bam": { + "content": [ + { + "bai": [ + + ], + "bam": [ + [ + { + "id": "test" + }, + "test.bam" + ] + ], + "crai": [ + + ], + "cram": [ + + ], + "csi": [ + + ], + "sam": [ + + ], + "unselected": [ + + ], + "unselected_index": [ + + ], + "versions_samtools": [ + [ + "SAMTOOLS_VIEW", + "samtools", + "1.22.1" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.3" + }, + "timestamp": "2026-02-03T16:48:27.608944526" + }, + "bam_bai_index": { + "content": [ + { + "bai": [ + [ + { + "id": "test" + }, + "test.bam.bai" + ] + ], + "bam": [ + [ + { + "id": "test" + }, + "test.bam" + ] + ], + "crai": [ + + ], + "cram": [ + + ], + "csi": [ + + ], + "sam": [ + + ], + "unselected": [ + + ], + "unselected_index": [ + + ], + "versions_samtools": [ + [ + "SAMTOOLS_VIEW", + "samtools", + "1.22.1" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.3" + }, + "timestamp": "2026-02-03T16:48:52.047178732" + }, + "cram_to_bam": { + "content": [ + { + "bai": [ + + ], + "bam": [ + [ + { + "id": "test" + }, + "test.bam" + ] + ], + "crai": [ + + ], + "cram": [ + + ], + "csi": [ + + ], + "sam": [ + + ], + "unselected": [ + + ], + "unselected_index": [ + + ], + "versions_samtools": [ + [ + "SAMTOOLS_VIEW", + "samtools", + "1.22.1" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.3" + }, + "timestamp": "2026-02-03T16:50:41.727031999" + }, + "bam_bai_index - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + + ], + "2": [ + + ], + "3": [ + [ + { + "id": "test" + }, + "test.bam.bai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "4": [ + + ], + "5": [ + + ], + "6": [ + + ], + "7": [ + + ], + "8": [ + [ + "SAMTOOLS_VIEW", + "samtools", + "1.22.1" + ] + ], + "bai": [ + [ + { + "id": "test" + }, + "test.bam.bai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "bam": [ + [ + { + "id": "test" + }, + "test.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "crai": [ + + ], + "cram": [ + + ], + "csi": [ + + ], + "sam": [ + + ], + "unselected": [ + + ], + "unselected_index": [ + + ], + "versions_samtools": [ + [ + "SAMTOOLS_VIEW", + "samtools", + "1.22.1" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.3" + }, + "timestamp": "2026-02-03T16:49:36.783381688" + }, + "cram": { + "content": [ + { + "bai": [ + + ], + "bam": [ + + ], + "crai": [ + + ], + "cram": [ + [ + { + "id": "test" + }, + "test.cram" + ] + ], + "csi": [ + + ], + "sam": [ + + ], + "unselected": [ + + ], + "unselected_index": [ + + ], + "versions_samtools": [ + [ + "SAMTOOLS_VIEW", + "samtools", + "1.22.1" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.3" + }, + "timestamp": "2026-02-03T16:49:09.393102901" + }, + "bam_bai_index_uselected - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + + ], + "2": [ + + ], + "3": [ + [ + { + "id": "test" + }, + "test.bam.bai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "4": [ + + ], + "5": [ + + ], + "6": [ + [ + { + "id": "test" + }, + "test.unselected.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "7": [ + [ + { + "id": "test" + }, + "test.unselected.bam.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "8": [ + [ + "SAMTOOLS_VIEW", + "samtools", + "1.22.1" + ] + ], + "bai": [ + [ + { + "id": "test" + }, + "test.bam.bai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "bam": [ + [ + { + "id": "test" + }, + "test.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "crai": [ + + ], + "cram": [ + + ], + "csi": [ + + ], + "sam": [ + + ], + "unselected": [ + [ + { + "id": "test" + }, + "test.unselected.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "unselected_index": [ + [ + { + "id": "test" + }, + "test.unselected.bam.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions_samtools": [ + [ + "SAMTOOLS_VIEW", + "samtools", + "1.22.1" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.3" + }, + "timestamp": "2026-02-03T16:49:42.344755528" + }, + "cram_crai_index_unselected": { + "content": [ + { + "bai": [ + + ], + "bam": [ + + ], + "crai": [ + [ + { + "id": "test" + }, + "test.cram.crai" + ] + ], + "cram": [ + [ + { + "id": "test" + }, + "test.cram:md5,9b6eeca8f6b4b744297ae7cc87c031a4" + ] + ], + "csi": [ + + ], + "sam": [ + + ], + "unselected": [ + [ + { + "id": "test" + }, + "test.unselected.cram" + ] + ], + "unselected_index": [ + [ + { + "id": "test" + }, + "test.unselected.cram.crai" + ] + ], + "versions_samtools": [ + [ + "SAMTOOLS_VIEW", + "samtools", + "1.22.1" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.3" + }, + "timestamp": "2026-02-03T16:49:03.431621547" + }, + "bam_stub": { + "content": [ + { + "bai": [ + + ], + "bam": [ + [ + { + "id": "test" + }, + "test.bam" + ] + ], + "crai": [ + + ], + "cram": [ + + ], + "csi": [ + [ + { + "id": "test" + }, + "test.bam.csi" + ] + ], + "sam": [ + + ], + "unselected": [ + + ], + "unselected_index": [ + + ], + "versions_samtools": [ + [ + "SAMTOOLS_VIEW", + "samtools", + "1.22.1" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.3" + }, + "timestamp": "2026-02-03T16:49:26.152824543" + } +} \ No newline at end of file diff --git a/modules/nf-core/sentieon/rsemcalculateexpression/environment.yml b/modules/nf-core/sentieon/rsemcalculateexpression/environment.yml index abe2c8a84..7518e5dd7 100644 --- a/modules/nf-core/sentieon/rsemcalculateexpression/environment.yml +++ b/modules/nf-core/sentieon/rsemcalculateexpression/environment.yml @@ -5,4 +5,4 @@ channels: - bioconda dependencies: - bioconda::rsem=1.3.3 - - bioconda::sentieon=202503.01 + - bioconda::sentieon=202503.02 diff --git a/modules/nf-core/sentieon/rsemcalculateexpression/main.nf b/modules/nf-core/sentieon/rsemcalculateexpression/main.nf index 11d0cbb0f..4a675d4bc 100644 --- a/modules/nf-core/sentieon/rsemcalculateexpression/main.nf +++ b/modules/nf-core/sentieon/rsemcalculateexpression/main.nf @@ -5,8 +5,8 @@ process SENTIEON_RSEMCALCULATEEXPRESSION { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/61/618669d3715d81208a7936180c7170c7dad065c187d3ad933efa01d81a9fc193/data' : - 'community.wave.seqera.io/library/rsem_sentieon:1d3ad86b89bf5cc7' }" + 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/39/39a3e1a85912520836ad054c8ac0497b463bb5170e0e907183dbd08509dad997/data' : + 'community.wave.seqera.io/library/rsem_sentieon:3e4315fa0b636313' }" input: tuple val(meta), path(reads) // FASTQ files or BAM file for --alignments mode @@ -17,12 +17,15 @@ process SENTIEON_RSEMCALCULATEEXPRESSION { tuple val(meta), path("*.isoforms.results"), emit: counts_transcript tuple val(meta), path("*.stat") , emit: stat tuple val(meta), path("*.log") , emit: logs, optional:true - path "versions.yml" , emit: versions tuple val(meta), path("*.STAR.genome.bam") , optional:true, emit: bam_star tuple val(meta), path("${prefix}.genome.bam") , optional:true, emit: bam_genome tuple val(meta), path("${prefix}.transcript.bam"), optional:true, emit: bam_transcript + tuple val("${task.process}"), val('rsem'), eval('rsem-calculate-expression --version | sed -e "s/Current version: RSEM v//g"'), topic: versions, emit: versions_rsem + tuple val("${task.process}"), val('star'), eval('STAR --version | sed -e "s/STAR_//g"'), topic: versions, emit: versions_star + tuple val("${task.process}"), val('sentieon'), eval('sentieon driver --version 2>&1 | sed -e "s/sentieon-genomics-//g"'), topic: versions, emit: versions_sentieon + when: task.ext.when == null || task.ext.when @@ -49,6 +52,8 @@ process SENTIEON_RSEMCALCULATEEXPRESSION { : "" """ + $sentieonLicense + INDEX=`find -L ./ -name "*.grp" | sed 's/\\.grp\$//'` # Create symlink to sentieon in PATH @@ -65,7 +70,7 @@ process SENTIEON_RSEMCALCULATEEXPRESSION { [ ${reads.size()} -gt 1 ] && PAIRED_END_FLAG="--paired-end" fi fi - + rsem-calculate-expression \\ --num-threads $task.cpus \\ --temporary-folder ./tmp/ \\ @@ -76,37 +81,27 @@ process SENTIEON_RSEMCALCULATEEXPRESSION { $reads \\ \$INDEX \\ $prefix - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - rsem: \$(rsem-calculate-expression --version | sed -e "s/Current version: RSEM v//g") - star: \$(STAR --version | sed -e "s/STAR_//g") - sentieon: \$(echo \$(sentieon driver --version 2>&1) | sed -e "s/sentieon-genomics-//g") - END_VERSIONS """ stub: prefix = task.ext.prefix ?: "${meta.id}" def is_bam = reads.toString().toLowerCase().endsWith('.bam') """ + # Create symlink to sentieon in PATH for version detection + ln -sf \$(which sentieon) ./STAR + export PATH=".:\$PATH" + touch ${prefix}.genes.results touch ${prefix}.isoforms.results touch ${prefix}.stat touch ${prefix}.log - + # Only create STAR BAM output when not in alignment mode if [ "${is_bam}" == "false" ]; then touch ${prefix}.STAR.genome.bam fi - + touch ${prefix}.genome.bam touch ${prefix}.transcript.bam - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - rsem: \$(rsem-calculate-expression --version | sed -e "s/Current version: RSEM v//g") - star: \$(STAR --version | sed -e "s/STAR_//g") - sentieon: \$(echo \$(sentieon driver --version 2>&1) | sed -e "s/sentieon-genomics-//g") - END_VERSIONS """ } diff --git a/modules/nf-core/sentieon/rsemcalculateexpression/meta.yml b/modules/nf-core/sentieon/rsemcalculateexpression/meta.yml index 87a966363..eaf0729b3 100644 --- a/modules/nf-core/sentieon/rsemcalculateexpression/meta.yml +++ b/modules/nf-core/sentieon/rsemcalculateexpression/meta.yml @@ -76,13 +76,6 @@ output: description: RSEM logs pattern: "*.log" ontologies: [] - versions: - - versions.yml: - type: file - description: File containing software versions - pattern: "versions.yml" - ontologies: - - edam: http://edamontology.org/format_3750 # YAML bam_star: - - meta: type: map @@ -116,6 +109,67 @@ output: description: Transcript BAM file (optional) pattern: "*.transcript.bam" ontologies: [] + versions_rsem: + - - ${task.process}: + type: string + description: The process the versions were collected from + - rsem: + type: string + description: The tool name + - 'rsem-calculate-expression --version | sed -e "s/Current version: RSEM v//g"': + type: eval + description: The expression to obtain the version of the tool + versions_star: + - - ${task.process}: + type: string + description: The process the versions were collected from + - star: + type: string + description: The tool name + - STAR --version | sed -e "s/STAR_//g": + type: eval + description: The expression to obtain the version of the tool + versions_sentieon: + - - ${task.process}: + type: string + description: The process the versions were collected from + - sentieon: + type: string + description: The tool name + - sentieon driver --version 2>&1 | sed -e "s/sentieon-genomics-//g": + type: eval + description: The expression to obtain the version of the tool + +topics: + versions: + - - ${task.process}: + type: string + description: The process the versions were collected from + - rsem: + type: string + description: The tool name + - 'rsem-calculate-expression --version | sed -e "s/Current version: RSEM v//g"': + type: eval + description: The expression to obtain the version of the tool + - - ${task.process}: + type: string + description: The process the versions were collected from + - star: + type: string + description: The tool name + - STAR --version | sed -e "s/STAR_//g": + type: eval + description: The expression to obtain the version of the tool + - - ${task.process}: + type: string + description: The process the versions were collected from + - sentieon: + type: string + description: The tool name + - sentieon driver --version 2>&1 | sed -e "s/sentieon-genomics-//g": + type: eval + description: The expression to obtain the version of the tool + authors: - "@FriederikeHanssen" maintainers: diff --git a/modules/nf-core/sentieon/rsemcalculateexpression/tests/alignment.config b/modules/nf-core/sentieon/rsemcalculateexpression/tests/alignment.config deleted file mode 100644 index 8730f1c4b..000000000 --- a/modules/nf-core/sentieon/rsemcalculateexpression/tests/alignment.config +++ /dev/null @@ -1,5 +0,0 @@ -process { - - publishDir = { "${params.outdir}/${task.process.tokenize(':')[-1].tokenize('_')[0].toLowerCase()}" } - -} diff --git a/modules/nf-core/sentieon/rsemcalculateexpression/tests/main.nf.test b/modules/nf-core/sentieon/rsemcalculateexpression/tests/main.nf.test index e99eaf4c3..91ad73bfd 100644 --- a/modules/nf-core/sentieon/rsemcalculateexpression/tests/main.nf.test +++ b/modules/nf-core/sentieon/rsemcalculateexpression/tests/main.nf.test @@ -12,8 +12,6 @@ nextflow_process { test("homo_sapiens - bam") { - config "./alignment.config" - setup { run("SENTIEON_RSEMPREPAREREFERENCE") { script "../../../sentieon/rsempreparereference/main.nf" @@ -47,7 +45,7 @@ nextflow_process { process.out.counts_gene, process.out.counts_transcript, process.out.stat, - process.out.versions + process.out.findAll { key, val -> key.startsWith("versions") } ).match() } ) } @@ -93,7 +91,7 @@ nextflow_process { process.out.counts_gene, process.out.counts_transcript, process.out.stat, - process.out.versions + process.out.findAll { key, val -> key.startsWith("versions") } ).match() }, { assert path(process.out.logs.get(0).get(1)).exists() } ) @@ -140,7 +138,7 @@ nextflow_process { { assert path(process.out.stat.get(0).get(1)).exists() }, { assert path(process.out.logs.get(0).get(1)).exists() }, { assert snapshot( - process.out.versions + process.out.findAll { key, val -> key.startsWith("versions") } ).match() } ) } diff --git a/modules/nf-core/sentieon/rsemcalculateexpression/tests/main.nf.test.snap b/modules/nf-core/sentieon/rsemcalculateexpression/tests/main.nf.test.snap index 539a2b0f5..5782facee 100644 --- a/modules/nf-core/sentieon/rsemcalculateexpression/tests/main.nf.test.snap +++ b/modules/nf-core/sentieon/rsemcalculateexpression/tests/main.nf.test.snap @@ -1,15 +1,35 @@ { "homo_sapiens - stub": { "content": [ - [ - "versions.yml:md5,2c37927aa617a24c43688228944f4a96" - ] + { + "versions_rsem": [ + [ + "SENTIEON_RSEMCALCULATEEXPRESSION", + "rsem", + "1.3.1" + ] + ], + "versions_sentieon": [ + [ + "SENTIEON_RSEMCALCULATEEXPRESSION", + "sentieon", + "202503.02" + ] + ], + "versions_star": [ + [ + "SENTIEON_RSEMCALCULATEEXPRESSION", + "star", + "2.7.10b" + ] + ] + } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.6" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-09-15T09:32:28.388711" + "timestamp": "2026-01-22T07:31:27.470105652" }, "homo_sapiens - fastq": { "content": [ @@ -44,15 +64,35 @@ ] ] ], - [ - "versions.yml:md5,253b43edb079232ffcdf0b741134cce9" - ] + { + "versions_rsem": [ + [ + "SENTIEON_RSEMCALCULATEEXPRESSION", + "rsem", + "1.3.1" + ] + ], + "versions_sentieon": [ + [ + "SENTIEON_RSEMCALCULATEEXPRESSION", + "sentieon", + "202503.02" + ] + ], + "versions_star": [ + [ + "SENTIEON_RSEMCALCULATEEXPRESSION", + "star", + "2.7.10b" + ] + ] + } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.6" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-09-12T14:47:20.34162" + "timestamp": "2026-01-22T07:31:17.898622217" }, "homo_sapiens - bam": { "content": [ @@ -87,14 +127,34 @@ ] ] ], - [ - "versions.yml:md5,253b43edb079232ffcdf0b741134cce9" - ] + { + "versions_rsem": [ + [ + "SENTIEON_RSEMCALCULATEEXPRESSION", + "rsem", + "1.3.1" + ] + ], + "versions_sentieon": [ + [ + "SENTIEON_RSEMCALCULATEEXPRESSION", + "sentieon", + "202503.02" + ] + ], + "versions_star": [ + [ + "SENTIEON_RSEMCALCULATEEXPRESSION", + "star", + "2.7.10b" + ] + ] + } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.6" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-09-15T10:38:32.603705" + "timestamp": "2026-01-22T07:30:42.42027321" } } \ No newline at end of file diff --git a/modules/nf-core/sentieon/rsemcalculateexpression/tests/nextflow.config b/modules/nf-core/sentieon/rsemcalculateexpression/tests/nextflow.config index 0d7b82c43..0e32cedbe 100644 --- a/modules/nf-core/sentieon/rsemcalculateexpression/tests/nextflow.config +++ b/modules/nf-core/sentieon/rsemcalculateexpression/tests/nextflow.config @@ -1,7 +1,5 @@ process { - publishDir = { "${params.outdir}/${task.process.tokenize(':')[-1].tokenize('_')[0].toLowerCase()}" } - withName: SENTIEON_RSEMPREPAREREFERENCE { ext.args = '--star' } @@ -14,9 +12,11 @@ process { env { // NOTE This is how pipeline users will use Sentieon in real world use - SENTIEON_LICENSE = "$SENTIEON_LICSRVR_IP" + // TODO: Update to `env('SENTIEON_LICSRVR_IP')` when minimum Nextflow version is >= 26.04.0 + SENTIEON_LICENSE = env('SENTIEON_LICSRVR_IP') // NOTE This should only happen in GitHub actions or nf-core MegaTests - SENTIEON_AUTH_MECH = "$SENTIEON_AUTH_MECH" + // TODO: Update to `env('SENTIEON_AUTH_MECH')` when minimum Nextflow version is >= 26.04.0 + SENTIEON_AUTH_MECH = env('SENTIEON_AUTH_MECH') SENTIEON_AUTH_DATA = secrets.SENTIEON_AUTH_DATA // NOTE This is how pipeline users will test out Sentieon with a license file // nextflow secrets set SENTIEON_LICENSE_BASE64 \$(cat | base64 -w 0) diff --git a/modules/nf-core/sentieon/rsempreparereference/environment.yml b/modules/nf-core/sentieon/rsempreparereference/environment.yml index abe2c8a84..7518e5dd7 100644 --- a/modules/nf-core/sentieon/rsempreparereference/environment.yml +++ b/modules/nf-core/sentieon/rsempreparereference/environment.yml @@ -5,4 +5,4 @@ channels: - bioconda dependencies: - bioconda::rsem=1.3.3 - - bioconda::sentieon=202503.01 + - bioconda::sentieon=202503.02 diff --git a/modules/nf-core/sentieon/rsempreparereference/main.nf b/modules/nf-core/sentieon/rsempreparereference/main.nf index 28a666850..2b14884f8 100644 --- a/modules/nf-core/sentieon/rsempreparereference/main.nf +++ b/modules/nf-core/sentieon/rsempreparereference/main.nf @@ -5,8 +5,8 @@ process SENTIEON_RSEMPREPAREREFERENCE { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/61/618669d3715d81208a7936180c7170c7dad065c187d3ad933efa01d81a9fc193/data' : - 'community.wave.seqera.io/library/rsem_sentieon:1d3ad86b89bf5cc7' }" + 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/39/39a3e1a85912520836ad054c8ac0497b463bb5170e0e907183dbd08509dad997/data' : + 'community.wave.seqera.io/library/rsem_sentieon:3e4315fa0b636313' }" input: path fasta, stageAs: "rsem/*" @@ -15,7 +15,9 @@ process SENTIEON_RSEMPREPAREREFERENCE { output: path "rsem" , emit: index path "*transcripts.fa", emit: transcript_fasta - path "versions.yml" , emit: versions + tuple val("${task.process}"), val('rsem'), eval('rsem-calculate-expression --version | sed -e "s/Current version: RSEM v//g"'), topic: versions, emit: versions_rsem + tuple val("${task.process}"), val('star'), eval('STAR --version | sed -e "s/STAR_//g"'), topic: versions, emit: versions_star + tuple val("${task.process}"), val('sentieon'), eval('sentieon driver --version 2>&1 | sed -e "s/sentieon-genomics-//g"'), topic: versions, emit: versions_sentieon when: task.ext.when == null || task.ext.when @@ -24,14 +26,16 @@ process SENTIEON_RSEMPREPAREREFERENCE { def args = task.ext.args ?: '' def args2 = task.ext.args2 ?: '' def args_list = args.tokenize() + def star_symlink = """ + # Create symlink to sentieon in PATH for version detection + ln -sf \$(which sentieon) ./STAR + export PATH=".:\$PATH" + """ if (args_list.contains('--star')) { - args_list.removeIf { it.contains('--star') } + args_list.removeIf { arg -> arg.contains('--star') } def memory = task.memory ? "--limitGenomeGenerateRAM ${task.memory.toBytes() - 100000000}" : '' """ - - # Create symlink to sentieon in PATH - ln -sf \$(which sentieon) ./STAR - export PATH=".:\$PATH" + $star_symlink STAR \\ --runMode genomeGenerate \\ @@ -50,16 +54,11 @@ process SENTIEON_RSEMPREPAREREFERENCE { rsem/genome cp rsem/genome.transcripts.fa . - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - rsem: \$(rsem-calculate-expression --version | sed -e "s/Current version: RSEM v//g") - star: \$(STAR --version | sed -e "s/STAR_//g") - sentieon: \$(echo \$(sentieon driver --version 2>&1) | sed -e "s/sentieon-genomics-//g") - END_VERSIONS """ } else { """ + $star_symlink + rsem-prepare-reference \\ --gtf $gtf \\ --num-threads $task.cpus \\ @@ -68,25 +67,16 @@ process SENTIEON_RSEMPREPAREREFERENCE { rsem/genome cp rsem/genome.transcripts.fa . - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - rsem: \$(rsem-calculate-expression --version | sed -e "s/Current version: RSEM v//g") - star: \$(STAR --version | sed -e "s/STAR_//g") - sentieon: \$(echo \$(sentieon driver --version 2>&1) | sed -e "s/sentieon-genomics-//g") - END_VERSIONS """ } stub: """ - touch genome.transcripts.fa + # Create symlink to sentieon in PATH for version detection + ln -sf \$(which sentieon) ./STAR + export PATH=".:\$PATH" - cat <<-END_VERSIONS > versions.yml - "${task.process}": - rsem: \$(rsem-calculate-expression --version | sed -e "s/Current version: RSEM v//g") - star: \$(STAR --version | sed -e "s/STAR_//g") - sentieon: \$(echo \$(sentieon driver --version 2>&1) | sed -e "s/sentieon-genomics-//g") - END_VERSIONS + mkdir -p rsem + touch genome.transcripts.fa """ } diff --git a/modules/nf-core/sentieon/rsempreparereference/meta.yml b/modules/nf-core/sentieon/rsempreparereference/meta.yml index a05f8e9be..b1fd9268a 100644 --- a/modules/nf-core/sentieon/rsempreparereference/meta.yml +++ b/modules/nf-core/sentieon/rsempreparereference/meta.yml @@ -37,13 +37,67 @@ output: description: Fasta file of transcripts pattern: "rsem/*transcripts.fa" ontologies: [] + versions_rsem: + - - ${task.process}: + type: string + description: The process the versions were collected from + - rsem: + type: string + description: The tool name + - 'rsem-calculate-expression --version | sed -e "s/Current version: RSEM v//g"': + type: eval + description: The expression to obtain the version of the tool + versions_star: + - - ${task.process}: + type: string + description: The process the versions were collected from + - star: + type: string + description: The tool name + - 'STAR --version | sed -e "s/STAR_//g"': + type: eval + description: The expression to obtain the version of the tool + versions_sentieon: + - - ${task.process}: + type: string + description: The process the versions were collected from + - sentieon: + type: string + description: The tool name + - 'sentieon driver --version 2>&1 | sed -e "s/sentieon-genomics-//g"': + type: eval + description: The expression to obtain the version of the tool + +topics: versions: - - versions.yml: - type: file - description: File containing software versions - pattern: "versions.yml" - ontologies: - - edam: http://edamontology.org/format_3750 # YAML + - - ${task.process}: + type: string + description: The process the versions were collected from + - rsem: + type: string + description: The tool name + - 'rsem-calculate-expression --version | sed -e "s/Current version: RSEM v//g"': + type: eval + description: The expression to obtain the version of the tool + - - ${task.process}: + type: string + description: The process the versions were collected from + - star: + type: string + description: The tool name + - 'STAR --version | sed -e "s/STAR_//g"': + type: eval + description: The expression to obtain the version of the tool + - - ${task.process}: + type: string + description: The process the versions were collected from + - sentieon: + type: string + description: The tool name + - 'sentieon driver --version 2>&1 | sed -e "s/sentieon-genomics-//g"': + type: eval + description: The expression to obtain the version of the tool + authors: - "@FriederikeHanssen" maintainers: diff --git a/modules/nf-core/sentieon/rsempreparereference/tests/main.nf.test b/modules/nf-core/sentieon/rsempreparereference/tests/main.nf.test index ca4ae8227..2cdc7660c 100644 --- a/modules/nf-core/sentieon/rsempreparereference/tests/main.nf.test +++ b/modules/nf-core/sentieon/rsempreparereference/tests/main.nf.test @@ -11,9 +11,6 @@ nextflow_process { test("homo_sapiens") { when { - params { - outdir = "$outputDir" - } process { """ input[0] = Channel.of(file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true)) @@ -23,11 +20,13 @@ nextflow_process { } then { + assert process.success assertAll( - { assert process.success }, - { assert snapshot(process.out.index).match("index")}, - { assert snapshot(process.out.transcript_fasta).match("transcript_fasta")}, - { assert snapshot(process.out.versions).match("versions") } + { assert snapshot( + process.out.index, + process.out.transcript_fasta, + process.out.findAll { key, val -> key.startsWith("versions") } + ).match() } ) } } @@ -46,8 +45,8 @@ nextflow_process { } then { + assert process.success assertAll( - { assert process.success }, { assert snapshot(process.out).match() } ) } diff --git a/modules/nf-core/sentieon/rsempreparereference/tests/main.nf.test.snap b/modules/nf-core/sentieon/rsempreparereference/tests/main.nf.test.snap index d83e20ef6..aad4106e8 100644 --- a/modules/nf-core/sentieon/rsempreparereference/tests/main.nf.test.snap +++ b/modules/nf-core/sentieon/rsempreparereference/tests/main.nf.test.snap @@ -11,7 +11,25 @@ "genome.transcripts.fa:md5,d41d8cd98f00b204e9800998ecf8427e" ], "2": [ - "versions.yml:md5,5701c66cf1e2c8475b2903d95df99db5" + [ + "SENTIEON_RSEMPREPAREREFERENCE", + "rsem", + "1.3.1" + ] + ], + "3": [ + [ + "SENTIEON_RSEMPREPAREREFERENCE", + "star", + "2.7.10b" + ] + ], + "4": [ + [ + "SENTIEON_RSEMPREPAREREFERENCE", + "sentieon", + "202503.02" + ] ], "index": [ [ @@ -21,30 +39,36 @@ "transcript_fasta": [ "genome.transcripts.fa:md5,d41d8cd98f00b204e9800998ecf8427e" ], - "versions": [ - "versions.yml:md5,5701c66cf1e2c8475b2903d95df99db5" + "versions_rsem": [ + [ + "SENTIEON_RSEMPREPAREREFERENCE", + "rsem", + "1.3.1" + ] + ], + "versions_sentieon": [ + [ + "SENTIEON_RSEMPREPAREREFERENCE", + "sentieon", + "202503.02" + ] + ], + "versions_star": [ + [ + "SENTIEON_RSEMPREPAREREFERENCE", + "star", + "2.7.10b" + ] ] } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.2" - }, - "timestamp": "2025-06-02T14:24:38.229417" - }, - "versions": { - "content": [ - [ - "versions.yml:md5,5701c66cf1e2c8475b2903d95df99db5" - ] - ], - "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.2" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-06-02T14:24:27.489566" + "timestamp": "2026-01-22T07:31:41.257694207" }, - "index": { + "homo_sapiens": { "content": [ [ [ @@ -57,24 +81,38 @@ "genome.ti:md5,c9e4ae8d4d13a504eec2acf1b8589a66", "genome.transcripts.fa:md5,050c521a2719c2ae48267c1e65218f29" ] - ] - ], - "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.2" - }, - "timestamp": "2025-06-02T14:24:27.451885" - }, - "transcript_fasta": { - "content": [ + ], [ "genome.transcripts.fa:md5,050c521a2719c2ae48267c1e65218f29" - ] + ], + { + "versions_rsem": [ + [ + "SENTIEON_RSEMPREPAREREFERENCE", + "rsem", + "1.3.1" + ] + ], + "versions_sentieon": [ + [ + "SENTIEON_RSEMPREPAREREFERENCE", + "sentieon", + "202503.02" + ] + ], + "versions_star": [ + [ + "SENTIEON_RSEMPREPAREREFERENCE", + "star", + "2.7.10b" + ] + ] + } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.2" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-06-02T14:24:27.472246" + "timestamp": "2026-01-22T07:31:34.400783134" } -} +} \ No newline at end of file diff --git a/modules/nf-core/sentieon/rsempreparereference/tests/nextflow.config b/modules/nf-core/sentieon/rsempreparereference/tests/nextflow.config index c1e9e4864..a0b8779cb 100644 --- a/modules/nf-core/sentieon/rsempreparereference/tests/nextflow.config +++ b/modules/nf-core/sentieon/rsempreparereference/tests/nextflow.config @@ -1,8 +1,10 @@ env { // NOTE This is how pipeline users will use Sentieon in real world use - SENTIEON_LICENSE = "$SENTIEON_LICSRVR_IP" + // TODO: Update to `env('SENTIEON_LICSRVR_IP')` when minimum Nextflow version is >= 26.04.0 + SENTIEON_LICENSE = env('SENTIEON_LICSRVR_IP') // NOTE This should only happen in GitHub actions or nf-core MegaTests - SENTIEON_AUTH_MECH = "$SENTIEON_AUTH_MECH" + // TODO: Update to `env('SENTIEON_AUTH_MECH')` when minimum Nextflow version is >= 26.04.0 + SENTIEON_AUTH_MECH = env('SENTIEON_AUTH_MECH') SENTIEON_AUTH_DATA = secrets.SENTIEON_AUTH_DATA // NOTE This is how pipeline users will test out Sentieon with a license file // nextflow secrets set SENTIEON_LICENSE_BASE64 \$(cat | base64 -w 0) diff --git a/modules/nf-core/sentieon/staralign/environment.yml b/modules/nf-core/sentieon/staralign/environment.yml index dae76d1b6..6b8bb5232 100644 --- a/modules/nf-core/sentieon/staralign/environment.yml +++ b/modules/nf-core/sentieon/staralign/environment.yml @@ -4,4 +4,4 @@ channels: - conda-forge - bioconda dependencies: - - bioconda::sentieon=202503.01 + - bioconda::sentieon=202503.02 diff --git a/modules/nf-core/sentieon/staralign/main.nf b/modules/nf-core/sentieon/staralign/main.nf index 264087dec..7f8d605e0 100644 --- a/modules/nf-core/sentieon/staralign/main.nf +++ b/modules/nf-core/sentieon/staralign/main.nf @@ -6,36 +6,34 @@ process SENTIEON_STARALIGN { conda "${moduleDir}/environment.yml" container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container - ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/0f/0f1dfe59ef66d7326b43db9ab1f39ce6220b358a311078c949a208f9c9815d4e/data' - : 'community.wave.seqera.io/library/sentieon:202503.01--1863def31ed8e4d5'}" + ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/73/73e9111552beb76e2ad3ad89eb75bed162d7c5b85b2433723ecb4fc96a02674a/data' + : 'community.wave.seqera.io/library/sentieon:202503.02--def60555294d04fa'}" 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("${prefix}.sortedByCoord.out.bam"), optional: true, emit: bam_sorted - tuple val(meta), path("${prefix}.Aligned.sortedByCoord.out.bam"), optional: true, emit: bam_sorted_aligned - 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 + 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 + tuple val(meta), path('*d.out.bam'), emit: bam, optional: true + tuple val(meta), path("${prefix}.sortedByCoord.out.bam"), emit: bam_sorted, optional: true + tuple val(meta), path("${prefix}.Aligned.sortedByCoord.out.bam"), emit: bam_sorted_aligned, optional: true + tuple val(meta), path('*toTranscriptome.out.bam'), emit: bam_transcript, optional: true + tuple val(meta), path('*Aligned.unsort.out.bam'), emit: bam_unsorted, optional: true + tuple val(meta), path('*fastq.gz'), emit: fastq, optional: true + tuple val(meta), path('*.tab'), emit: tab, optional: true + tuple val(meta), path('*.SJ.out.tab'), emit: spl_junc_tab, optional: true + tuple val(meta), path('*.ReadsPerGene.out.tab'), emit: read_per_gene_tab, optional: true + tuple val(meta), path('*.out.junction'), emit: junction, optional: true + tuple val(meta), path('*.out.sam'), emit: sam, optional: true + tuple val(meta), path('*.wig'), emit: wig, optional: true + tuple val(meta), path('*.bg'), emit: bedgraph, optional: true + tuple val("${task.process}"), val('star'), eval('sentieon STAR --version | sed -e "s/STAR_//g"'), topic: versions, emit: versions_star + tuple val("${task.process}"), val('sentieon'), eval('sentieon driver --version 2>&1 | sed -e "s/sentieon-genomics-//g"'), topic: versions, emit: versions_sentieon when: task.ext.when == null || task.ext.when @@ -45,11 +43,9 @@ process SENTIEON_STARALIGN { prefix = task.ext.prefix ?: "${meta.id}" def reads1 = [] def reads2 = [] - meta.single_end ? [reads].flatten().each { reads1 << it } : reads.eachWithIndex { v, ix -> (ix & 1 ? reads2 : reads1) << v } + meta.single_end ? [reads].flatten().each { r -> reads1 << r } : reads.eachWithIndex { v, ix -> (ix & 1 ? reads2 : reads1) << v } def ignore_gtf = star_ignore_sjdbgtf ? '' : "--sjdbGTFfile ${gtf}" - def seq_platform_arg = seq_platform ? "'PL:${seq_platform}'" : "" - def seq_center_arg = seq_center ? "'CN:${seq_center}'" : "" - attrRG = args.contains("--outSAMattrRGline") ? "" : "--outSAMattrRGline 'ID:${prefix}' ${seq_center_arg} 'SM:${prefix}' ${seq_platform_arg}" + attrRG = args.contains("--outSAMattrRGline") ? "" : "--outSAMattrRGline 'ID:${prefix}' 'SM:${prefix}'" def out_sam_type = args.contains('--outSAMtype') ? '' : '--outSAMtype BAM Unsorted' mv_unsorted_bam = args.contains('--outSAMtype BAM Unsorted SortedByCoordinate') ? "mv ${prefix}.Aligned.out.bam ${prefix}.Aligned.unsort.out.bam" : '' @@ -57,6 +53,8 @@ process SENTIEON_STARALIGN { ? "export SENTIEON_LICENSE=\$(mktemp);echo -e \"${secrets.SENTIEON_LICENSE_BASE64}\" | base64 -d > \$SENTIEON_LICENSE; " : "" """ + $sentieonLicense + sentieon STAR \\ --genomeDir ${index} \\ --readFilesIn ${reads1.join(",")} ${reads2.join(",")} \\ @@ -77,11 +75,6 @@ process SENTIEON_STARALIGN { mv ${prefix}.Unmapped.out.mate2 ${prefix}.unmapped_2.fastq gzip ${prefix}.unmapped_2.fastq fi - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - star: \$(sentieon STAR --version | sed -e "s/STAR_//g") - END_VERSIONS """ stub: @@ -104,10 +97,5 @@ process SENTIEON_STARALIGN { 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: \$(sentieon STAR --version | sed -e "s/STAR_//g") - END_VERSIONS """ } diff --git a/modules/nf-core/sentieon/staralign/meta.yml b/modules/nf-core/sentieon/staralign/meta.yml index beda95799..d2823c3d9 100644 --- a/modules/nf-core/sentieon/staralign/meta.yml +++ b/modules/nf-core/sentieon/staralign/meta.yml @@ -48,12 +48,6 @@ input: - 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: log_final: - - meta: @@ -88,13 +82,26 @@ output: description: STAR log progress file pattern: "*Log.progress.out" ontologies: [] - versions: - - versions.yml: - type: file - description: File containing software versions - pattern: "versions.yml" - ontologies: - - edam: http://edamontology.org/format_3750 # YAML + versions_star: + - - ${task.process}: + type: string + description: The process the versions were collected from + - star: + type: string + description: The tool name + - 'sentieon STAR --version | sed -e "s/STAR_//g"': + type: eval + description: The expression to obtain the version of the tool + versions_sentieon: + - - ${task.process}: + type: string + description: The process the versions were collected from + - sentieon: + type: string + description: The tool name + - 'sentieon driver --version 2>&1 | sed -e "s/sentieon-genomics-//g"': + type: eval + description: The expression to obtain the version of the tool bam: - - meta: type: map @@ -242,6 +249,28 @@ output: description: STAR output bedGraph format file(s) (optional) pattern: "*.bg" ontologies: [] + +topics: + versions: + - - ${task.process}: + type: string + description: The process the versions were collected from + - star: + type: string + description: The tool name + - 'sentieon STAR --version | sed -e "s/STAR_//g"': + type: eval + description: The expression to obtain the version of the tool + - - ${task.process}: + type: string + description: The process the versions were collected from + - sentieon: + type: string + description: The tool name + - 'sentieon driver --version 2>&1 | sed -e "s/sentieon-genomics-//g"': + type: eval + description: The expression to obtain the version of the tool + authors: - "@FriederikeHanssen" maintainers: diff --git a/modules/nf-core/sentieon/staralign/tests/main.nf.test b/modules/nf-core/sentieon/staralign/tests/main.nf.test index e985938fd..581baec41 100644 --- a/modules/nf-core/sentieon/staralign/tests/main.nf.test +++ b/modules/nf-core/sentieon/staralign/tests/main.nf.test @@ -43,15 +43,13 @@ nextflow_process { [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] ]) input[3] = false - input[4] = 'illumina' - input[5] = false """ } } then { + assert process.success assertAll( - { assert process.success }, { assert snapshot( file(process.out.log_final[0][1]).name, file(process.out.log_out[0][1]).name, @@ -65,7 +63,7 @@ nextflow_process { process.out.spl_junc_tab, process.out.tab, process.out.wig, - process.out.versions + process.out.findAll { key, val -> key.startsWith("versions") } ).match() } ) } @@ -108,15 +106,13 @@ nextflow_process { [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] ]) input[3] = false - input[4] = 'illumina' - input[5] = false """ } } then { + assert process.success assertAll( - { assert process.success }, { assert snapshot( file(process.out.log_final[0][1]).name, file(process.out.log_out[0][1]).name, @@ -130,7 +126,7 @@ nextflow_process { process.out.spl_junc_tab, process.out.tab, process.out.wig, - process.out.versions + process.out.findAll { key, val -> key.startsWith("versions") } ).match() } ) } @@ -173,15 +169,13 @@ nextflow_process { [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] ]) input[3] = false - input[4] = 'illumina' - input[5] = false """ } } then { + assert process.success assertAll( - { assert process.success }, { assert snapshot( file(process.out.log_final[0][1]).name, file(process.out.log_out[0][1]).name, @@ -194,7 +188,7 @@ nextflow_process { process.out.spl_junc_tab, process.out.tab, process.out.wig, - process.out.versions + process.out.findAll { key, val -> key.startsWith("versions") } ).match() } ) } @@ -237,15 +231,13 @@ nextflow_process { [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] ]) input[3] = false - input[4] = 'illumina' - input[5] = false """ } } then { + assert process.success assertAll( - { assert process.success }, { assert snapshot( file(process.out.log_final[0][1]).name, file(process.out.log_out[0][1]).name, @@ -259,7 +251,7 @@ nextflow_process { process.out.spl_junc_tab, process.out.tab, process.out.wig, - process.out.versions + process.out.findAll { key, val -> key.startsWith("versions") } ).match() } ) } @@ -304,15 +296,13 @@ nextflow_process { [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] ]) input[3] = false - input[4] = 'illumina' - input[5] = false """ } } then { + assert process.success assertAll( - { assert process.success }, { assert snapshot( file(process.out.log_final[0][1]).name, file(process.out.log_out[0][1]).name, @@ -326,7 +316,7 @@ nextflow_process { process.out.spl_junc_tab, process.out.tab, process.out.wig, - process.out.versions + process.out.findAll { key, val -> key.startsWith("versions") } ).match() } ) } @@ -367,15 +357,13 @@ nextflow_process { [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] ]) input[3] = false - input[4] = 'illumina' - input[5] = false """ } } then { + assert process.success assertAll( - { assert process.success }, { assert snapshot(process.out).match() } ) } @@ -419,15 +407,13 @@ nextflow_process { [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] ]) input[3] = false - input[4] = 'illumina' - input[5] = false """ } } then { + assert process.success assertAll( - { assert process.success }, { assert snapshot(process.out).match() } ) } @@ -471,15 +457,13 @@ nextflow_process { [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] ]) input[3] = false - input[4] = 'illumina' - input[5] = false """ } } then { + assert process.success assertAll( - { assert process.success }, { assert snapshot(process.out).match() } ) } @@ -523,15 +507,13 @@ nextflow_process { [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] ]) input[3] = false - input[4] = 'illumina' - input[5] = false """ } } then { + assert process.success assertAll( - { assert process.success }, { assert snapshot(process.out).match() } ) } @@ -577,15 +559,13 @@ nextflow_process { [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] ]) input[3] = false - input[4] = 'illumina' - input[5] = false """ } } then { + assert process.success assertAll( - { assert process.success }, { assert snapshot(process.out).match() } ) } diff --git a/modules/nf-core/sentieon/staralign/tests/main.nf.test.snap b/modules/nf-core/sentieon/staralign/tests/main.nf.test.snap index c65ef0b15..efed72319 100644 --- a/modules/nf-core/sentieon/staralign/tests/main.nf.test.snap +++ b/modules/nf-core/sentieon/staralign/tests/main.nf.test.snap @@ -26,11 +26,7 @@ "id": "test", "single_end": true }, - [ - "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.tab:md5,d41d8cd98f00b204e9800998ecf8427e" - ] + "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "11": [ @@ -39,7 +35,7 @@ "id": "test", "single_end": true }, - "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "12": [ @@ -48,7 +44,7 @@ "id": "test", "single_end": true }, - "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.Chimeric.out.junction:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "13": [ @@ -57,7 +53,7 @@ "id": "test", "single_end": true }, - "test.Chimeric.out.junction:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.out.sam:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "14": [ @@ -66,7 +62,7 @@ "id": "test", "single_end": true }, - "test.out.sam:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.Signal.UniqueMultiple.str1.out.wig:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "15": [ @@ -75,16 +71,21 @@ "id": "test", "single_end": true }, - "test.Signal.UniqueMultiple.str1.out.wig:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.Signal.UniqueMultiple.str1.out.bg:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "16": [ [ - { - "id": "test", - "single_end": true - }, - "test.Signal.UniqueMultiple.str1.out.bg:md5,d41d8cd98f00b204e9800998ecf8427e" + "SENTIEON_STARALIGN", + "star", + "2.7.10b" + ] + ], + "17": [ + [ + "SENTIEON_STARALIGN", + "sentieon", + "202503.02" ] ], "2": [ @@ -97,9 +98,6 @@ ] ], "3": [ - "versions.yml:md5,83ad27eb85d8740c01891c71acd3879e" - ], - "4": [ [ { "id": "test", @@ -112,7 +110,7 @@ ] ] ], - "5": [ + "4": [ [ { "id": "test", @@ -121,7 +119,7 @@ "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "6": [ + "5": [ [ { "id": "test", @@ -130,7 +128,7 @@ "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "7": [ + "6": [ [ { "id": "test", @@ -139,7 +137,7 @@ "test.toTranscriptome.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "8": [ + "7": [ [ { "id": "test", @@ -148,7 +146,7 @@ "test.Aligned.unsort.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "9": [ + "8": [ [ { "id": "test", @@ -160,6 +158,19 @@ ] ] ], + "9": [ + [ + { + "id": "test", + "single_end": true + }, + [ + "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], "bam": [ [ { @@ -306,8 +317,19 @@ ] ] ], - "versions": [ - "versions.yml:md5,83ad27eb85d8740c01891c71acd3879e" + "versions_sentieon": [ + [ + "SENTIEON_STARALIGN", + "sentieon", + "202503.02" + ] + ], + "versions_star": [ + [ + "SENTIEON_STARALIGN", + "star", + "2.7.10b" + ] ], "wig": [ [ @@ -321,10 +343,10 @@ } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.6" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-08-11T14:20:15.523674152" + "timestamp": "2026-01-22T06:54:43.516829867" }, "homo_sapiens - paired_end - arriba - stub": { "content": [ @@ -353,11 +375,7 @@ "id": "test", "single_end": false }, - [ - "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.tab:md5,d41d8cd98f00b204e9800998ecf8427e" - ] + "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "11": [ @@ -366,7 +384,7 @@ "id": "test", "single_end": false }, - "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "12": [ @@ -375,7 +393,7 @@ "id": "test", "single_end": false }, - "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.Chimeric.out.junction:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "13": [ @@ -384,7 +402,7 @@ "id": "test", "single_end": false }, - "test.Chimeric.out.junction:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.out.sam:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "14": [ @@ -393,7 +411,7 @@ "id": "test", "single_end": false }, - "test.out.sam:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.Signal.UniqueMultiple.str1.out.wig:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "15": [ @@ -402,16 +420,21 @@ "id": "test", "single_end": false }, - "test.Signal.UniqueMultiple.str1.out.wig:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.Signal.UniqueMultiple.str1.out.bg:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "16": [ [ - { - "id": "test", - "single_end": false - }, - "test.Signal.UniqueMultiple.str1.out.bg:md5,d41d8cd98f00b204e9800998ecf8427e" + "SENTIEON_STARALIGN", + "star", + "2.7.10b" + ] + ], + "17": [ + [ + "SENTIEON_STARALIGN", + "sentieon", + "202503.02" ] ], "2": [ @@ -424,9 +447,6 @@ ] ], "3": [ - "versions.yml:md5,83ad27eb85d8740c01891c71acd3879e" - ], - "4": [ [ { "id": "test", @@ -439,7 +459,7 @@ ] ] ], - "5": [ + "4": [ [ { "id": "test", @@ -448,7 +468,7 @@ "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "6": [ + "5": [ [ { "id": "test", @@ -457,7 +477,7 @@ "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "7": [ + "6": [ [ { "id": "test", @@ -466,7 +486,7 @@ "test.toTranscriptome.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "8": [ + "7": [ [ { "id": "test", @@ -475,7 +495,7 @@ "test.Aligned.unsort.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "9": [ + "8": [ [ { "id": "test", @@ -487,6 +507,19 @@ ] ] ], + "9": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], "bam": [ [ { @@ -633,8 +666,19 @@ ] ] ], - "versions": [ - "versions.yml:md5,83ad27eb85d8740c01891c71acd3879e" + "versions_sentieon": [ + [ + "SENTIEON_STARALIGN", + "sentieon", + "202503.02" + ] + ], + "versions_star": [ + [ + "SENTIEON_STARALIGN", + "star", + "2.7.10b" + ] ], "wig": [ [ @@ -649,9 +693,153 @@ ], "meta": { "nf-test": "0.9.2", - "nextflow": "25.04.6" + "nextflow": "24.10.2" + }, + "timestamp": "2025-08-21T08:26:06.423784364" + }, + "homo_sapiens - single_end": { + "content": [ + "test.Log.final.out", + "test.Log.out", + "test.Log.progress.out", + "9f76be49a6607613a64f760101bdddce", + "9f76be49a6607613a64f760101bdddce", + [ + [ + { + "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_sentieon": [ + [ + "SENTIEON_STARALIGN", + "sentieon", + "202503.02" + ] + ], + "versions_star": [ + [ + "SENTIEON_STARALIGN", + "star", + "2.7.10b" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.2" + }, + "timestamp": "2026-01-22T06:53:15.380410216" + }, + "homo_sapiens - paired_end": { + "content": [ + "test.Log.final.out", + "test.Log.out", + "test.Log.progress.out", + "db9a8324b5163b025bcc0c33e848486", + "db9a8324b5163b025bcc0c33e848486", + [ + [ + { + "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_sentieon": [ + [ + "SENTIEON_STARALIGN", + "sentieon", + "202503.02" + ] + ], + "versions_star": [ + [ + "SENTIEON_STARALIGN", + "star", + "2.7.10b" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-08-11T14:20:45.677866207" + "timestamp": "2026-01-22T06:53:28.968999388" }, "homo_sapiens - paired_end - multiple - stub": { "content": [ @@ -680,11 +868,7 @@ "id": "test", "single_end": false }, - [ - "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.tab:md5,d41d8cd98f00b204e9800998ecf8427e" - ] + "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "11": [ @@ -693,7 +877,7 @@ "id": "test", "single_end": false }, - "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "12": [ @@ -702,7 +886,7 @@ "id": "test", "single_end": false }, - "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.Chimeric.out.junction:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "13": [ @@ -711,7 +895,7 @@ "id": "test", "single_end": false }, - "test.Chimeric.out.junction:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.out.sam:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "14": [ @@ -720,7 +904,7 @@ "id": "test", "single_end": false }, - "test.out.sam:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.Signal.UniqueMultiple.str1.out.wig:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "15": [ @@ -729,16 +913,21 @@ "id": "test", "single_end": false }, - "test.Signal.UniqueMultiple.str1.out.wig:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.Signal.UniqueMultiple.str1.out.bg:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "16": [ [ - { - "id": "test", - "single_end": false - }, - "test.Signal.UniqueMultiple.str1.out.bg:md5,d41d8cd98f00b204e9800998ecf8427e" + "SENTIEON_STARALIGN", + "star", + "2.7.10b" + ] + ], + "17": [ + [ + "SENTIEON_STARALIGN", + "sentieon", + "202503.02" ] ], "2": [ @@ -751,9 +940,6 @@ ] ], "3": [ - "versions.yml:md5,83ad27eb85d8740c01891c71acd3879e" - ], - "4": [ [ { "id": "test", @@ -766,7 +952,7 @@ ] ] ], - "5": [ + "4": [ [ { "id": "test", @@ -775,7 +961,7 @@ "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "6": [ + "5": [ [ { "id": "test", @@ -784,7 +970,7 @@ "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "7": [ + "6": [ [ { "id": "test", @@ -793,7 +979,7 @@ "test.toTranscriptome.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "8": [ + "7": [ [ { "id": "test", @@ -802,7 +988,7 @@ "test.Aligned.unsort.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "9": [ + "8": [ [ { "id": "test", @@ -814,6 +1000,19 @@ ] ] ], + "9": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], "bam": [ [ { @@ -960,8 +1159,19 @@ ] ] ], - "versions": [ - "versions.yml:md5,83ad27eb85d8740c01891c71acd3879e" + "versions_sentieon": [ + [ + "SENTIEON_STARALIGN", + "sentieon", + "202503.02" + ] + ], + "versions_star": [ + [ + "SENTIEON_STARALIGN", + "star", + "2.7.10b" + ] ], "wig": [ [ @@ -976,9 +1186,9 @@ ], "meta": { "nf-test": "0.9.2", - "nextflow": "25.04.6" + "nextflow": "24.10.2" }, - "timestamp": "2025-08-11T14:21:37.092968061" + "timestamp": "2025-08-21T08:26:18.790692609" }, "homo_sapiens - paired_end - stub": { "content": [ @@ -1007,11 +1217,7 @@ "id": "test", "single_end": false }, - [ - "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.tab:md5,d41d8cd98f00b204e9800998ecf8427e" - ] + "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "11": [ @@ -1020,7 +1226,7 @@ "id": "test", "single_end": false }, - "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "12": [ @@ -1029,7 +1235,7 @@ "id": "test", "single_end": false }, - "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.Chimeric.out.junction:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "13": [ @@ -1038,7 +1244,7 @@ "id": "test", "single_end": false }, - "test.Chimeric.out.junction:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.out.sam:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "14": [ @@ -1047,7 +1253,7 @@ "id": "test", "single_end": false }, - "test.out.sam:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.Signal.UniqueMultiple.str1.out.wig:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "15": [ @@ -1056,16 +1262,21 @@ "id": "test", "single_end": false }, - "test.Signal.UniqueMultiple.str1.out.wig:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.Signal.UniqueMultiple.str1.out.bg:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "16": [ [ - { - "id": "test", - "single_end": false - }, - "test.Signal.UniqueMultiple.str1.out.bg:md5,d41d8cd98f00b204e9800998ecf8427e" + "SENTIEON_STARALIGN", + "star", + "2.7.10b" + ] + ], + "17": [ + [ + "SENTIEON_STARALIGN", + "sentieon", + "202503.02" ] ], "2": [ @@ -1078,9 +1289,6 @@ ] ], "3": [ - "versions.yml:md5,83ad27eb85d8740c01891c71acd3879e" - ], - "4": [ [ { "id": "test", @@ -1093,7 +1301,7 @@ ] ] ], - "5": [ + "4": [ [ { "id": "test", @@ -1102,7 +1310,7 @@ "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "6": [ + "5": [ [ { "id": "test", @@ -1111,7 +1319,7 @@ "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "7": [ + "6": [ [ { "id": "test", @@ -1120,7 +1328,7 @@ "test.toTranscriptome.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "8": [ + "7": [ [ { "id": "test", @@ -1129,7 +1337,7 @@ "test.Aligned.unsort.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "9": [ + "8": [ [ { "id": "test", @@ -1141,6 +1349,19 @@ ] ] ], + "9": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], "bam": [ [ { @@ -1287,8 +1508,19 @@ ] ] ], - "versions": [ - "versions.yml:md5,83ad27eb85d8740c01891c71acd3879e" + "versions_sentieon": [ + [ + "SENTIEON_STARALIGN", + "sentieon", + "202503.02" + ] + ], + "versions_star": [ + [ + "SENTIEON_STARALIGN", + "star", + "2.7.10b" + ] ], "wig": [ [ @@ -1303,9 +1535,206 @@ ], "meta": { "nf-test": "0.9.2", - "nextflow": "25.04.6" + "nextflow": "24.10.2" + }, + "timestamp": "2025-08-21T08:26:00.409568421" + }, + "homo_sapiens - paired_end - multiple": { + "content": [ + "test.Log.final.out", + "test.Log.out", + "test.Log.progress.out", + "3e54e45f5dc3e9c1f2fc55bc41531a87", + "3e54e45f5dc3e9c1f2fc55bc41531a87", + [ + [ + { + "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_sentieon": [ + [ + "SENTIEON_STARALIGN", + "sentieon", + "202503.02" + ] + ], + "versions_star": [ + [ + "SENTIEON_STARALIGN", + "star", + "2.7.10b" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.2" + }, + "timestamp": "2026-01-22T06:54:34.482656727" + }, + "homo_sapiens - paired_end - starfusion": { + "content": [ + "test.Log.final.out", + "test.Log.out", + "test.Log.progress.out", + "test.Chimeric.out.junction", + "caee9dcda13882d4913456973c25b57a", + [ + + ], + [ + + ], + [ + + ], + [ + + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.SJ.out.tab:md5,19c3faa1bfa9a0cc5e4c45f17065b53a" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.SJ.out.tab:md5,19c3faa1bfa9a0cc5e4c45f17065b53a" + ] + ], + [ + + ], + { + "versions_sentieon": [ + [ + "SENTIEON_STARALIGN", + "sentieon", + "202503.02" + ] + ], + "versions_star": [ + [ + "SENTIEON_STARALIGN", + "star", + "2.7.10b" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.2" + }, + "timestamp": "2026-01-22T06:54:20.508615429" + }, + "homo_sapiens - paired_end - arriba": { + "content": [ + "test.Log.final.out", + "test.Log.out", + "test.Log.progress.out", + "1a3abe88fb2490589c58497d39921bcc", + [ + + ], + [ + + ], + [ + + ], + [ + + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.SJ.out.tab:md5,5155c9fd1f787ad6d7d80987fb06219c" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.SJ.out.tab:md5,5155c9fd1f787ad6d7d80987fb06219c" + ] + ], + [ + + ], + { + "versions_sentieon": [ + [ + "SENTIEON_STARALIGN", + "sentieon", + "202503.02" + ] + ], + "versions_star": [ + [ + "SENTIEON_STARALIGN", + "star", + "2.7.10b" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-08-11T14:20:28.328798489" + "timestamp": "2026-01-22T06:53:51.308134511" }, "homo_sapiens - paired_end - starfusion - stub": { "content": [ @@ -1334,11 +1763,7 @@ "id": "test", "single_end": false }, - [ - "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.tab:md5,d41d8cd98f00b204e9800998ecf8427e" - ] + "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "11": [ @@ -1347,7 +1772,7 @@ "id": "test", "single_end": false }, - "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "12": [ @@ -1356,7 +1781,7 @@ "id": "test", "single_end": false }, - "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.Chimeric.out.junction:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "13": [ @@ -1365,7 +1790,7 @@ "id": "test", "single_end": false }, - "test.Chimeric.out.junction:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.out.sam:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "14": [ @@ -1374,7 +1799,7 @@ "id": "test", "single_end": false }, - "test.out.sam:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.Signal.UniqueMultiple.str1.out.wig:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "15": [ @@ -1383,16 +1808,21 @@ "id": "test", "single_end": false }, - "test.Signal.UniqueMultiple.str1.out.wig:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.Signal.UniqueMultiple.str1.out.bg:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "16": [ [ - { - "id": "test", - "single_end": false - }, - "test.Signal.UniqueMultiple.str1.out.bg:md5,d41d8cd98f00b204e9800998ecf8427e" + "SENTIEON_STARALIGN", + "star", + "2.7.10b" + ] + ], + "17": [ + [ + "SENTIEON_STARALIGN", + "sentieon", + "202503.02" ] ], "2": [ @@ -1405,9 +1835,6 @@ ] ], "3": [ - "versions.yml:md5,83ad27eb85d8740c01891c71acd3879e" - ], - "4": [ [ { "id": "test", @@ -1420,7 +1847,7 @@ ] ] ], - "5": [ + "4": [ [ { "id": "test", @@ -1429,7 +1856,7 @@ "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "6": [ + "5": [ [ { "id": "test", @@ -1438,7 +1865,7 @@ "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "7": [ + "6": [ [ { "id": "test", @@ -1447,7 +1874,7 @@ "test.toTranscriptome.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "8": [ + "7": [ [ { "id": "test", @@ -1456,7 +1883,7 @@ "test.Aligned.unsort.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "9": [ + "8": [ [ { "id": "test", @@ -1468,6 +1895,19 @@ ] ] ], + "9": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], "bam": [ [ { @@ -1614,8 +2054,19 @@ ] ] ], - "versions": [ - "versions.yml:md5,83ad27eb85d8740c01891c71acd3879e" + "versions_sentieon": [ + [ + "SENTIEON_STARALIGN", + "sentieon", + "202503.02" + ] + ], + "versions_star": [ + [ + "SENTIEON_STARALIGN", + "star", + "2.7.10b" + ] ], "wig": [ [ @@ -1630,284 +2081,8 @@ ], "meta": { "nf-test": "0.9.2", - "nextflow": "25.04.6" - }, - "timestamp": "2025-08-11T14:21:08.422749797" - }, - "homo_sapiens - single_end": { - "content": [ - "test.Log.final.out", - "test.Log.out", - "test.Log.progress.out", - "9f76be49a6607613a64f760101bdddce", - "9f76be49a6607613a64f760101bdddce", - [ - [ - { - "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,83ad27eb85d8740c01891c71acd3879e" - ] - ], - "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.6" - }, - "timestamp": "2025-08-11T14:20:15.523674152" - }, - "homo_sapiens - paired_end - arriba": { - "content": [ - "test.Log.final.out", - "test.Log.out", - "test.Log.progress.out", - "1a3abe88fb2490589c58497d39921bcc", - [ - - ], - [ - - ], - [ - - ], - [ - - ], - [ - [ - { - "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,83ad27eb85d8740c01891c71acd3879e" - ] - ], - "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.6" - }, - "timestamp": "2025-08-11T14:20:45.677866207" - }, - "homo_sapiens - paired_end - multiple": { - "content": [ - "test.Log.final.out", - "test.Log.out", - "test.Log.progress.out", - "3e54e45f5dc3e9c1f2fc55bc41531a87", - "3e54e45f5dc3e9c1f2fc55bc41531a87", - [ - [ - { - "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,83ad27eb85d8740c01891c71acd3879e" - ] - ], - "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.6" - }, - "timestamp": "2025-08-11T14:21:37.092968061" - }, - "homo_sapiens - paired_end": { - "content": [ - "test.Log.final.out", - "test.Log.out", - "test.Log.progress.out", - "db9a8324b5163b025bcc0c33e848486", - "db9a8324b5163b025bcc0c33e848486", - [ - [ - { - "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,83ad27eb85d8740c01891c71acd3879e" - ] - ], - "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.6" - }, - "timestamp": "2025-08-11T14:20:28.328798489" - }, - "homo_sapiens - paired_end - starfusion": { - "content": [ - "test.Log.final.out", - "test.Log.out", - "test.Log.progress.out", - "test.Chimeric.out.junction", - "caee9dcda13882d4913456973c25b57a", - [ - - ], - [ - - ], - [ - - ], - [ - - ], - [ - [ - { - "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,83ad27eb85d8740c01891c71acd3879e" - ] - ], - "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.6" + "nextflow": "24.10.2" }, - "timestamp": "2025-08-11T14:21:08.422749797" + "timestamp": "2025-08-21T08:26:12.629223403" } -} +} \ No newline at end of file diff --git a/modules/nf-core/sentieon/staralign/tests/nextflow.arriba.config b/modules/nf-core/sentieon/staralign/tests/nextflow.arriba.config index c17b0ca55..499f984c2 100644 --- a/modules/nf-core/sentieon/staralign/tests/nextflow.arriba.config +++ b/modules/nf-core/sentieon/staralign/tests/nextflow.arriba.config @@ -12,11 +12,12 @@ process { env { // NOTE This is how pipeline users will use Sentieon in real world use - SENTIEON_LICENSE = "$SENTIEON_LICSRVR_IP" + // TODO: Update to `env('SENTIEON_LICSRVR_IP')` when minimum Nextflow version is >= 26.04.0 + SENTIEON_LICENSE = env('SENTIEON_LICSRVR_IP') // NOTE This should only happen in GitHub actions or nf-core MegaTests - SENTIEON_AUTH_MECH = "$SENTIEON_AUTH_MECH" + // TODO: Update to `env('SENTIEON_AUTH_MECH')` when minimum Nextflow version is >= 26.04.0 + SENTIEON_AUTH_MECH = env('SENTIEON_AUTH_MECH') SENTIEON_AUTH_DATA = secrets.SENTIEON_AUTH_DATA // NOTE This is how pipeline users will test out Sentieon with a license file // nextflow secrets set SENTIEON_LICENSE_BASE64 \$(cat | base64 -w 0) } - diff --git a/modules/nf-core/sentieon/staralign/tests/nextflow.config b/modules/nf-core/sentieon/staralign/tests/nextflow.config index 6c89ce9e0..32c94e871 100644 --- a/modules/nf-core/sentieon/staralign/tests/nextflow.config +++ b/modules/nf-core/sentieon/staralign/tests/nextflow.config @@ -12,9 +12,11 @@ process { env { // NOTE This is how pipeline users will use Sentieon in real world use - SENTIEON_LICENSE = "$SENTIEON_LICSRVR_IP" + // TODO: Update to `env('SENTIEON_LICSRVR_IP')` when minimum Nextflow version is >= 26.04.0 + SENTIEON_LICENSE = env('SENTIEON_LICSRVR_IP') // NOTE This should only happen in GitHub actions or nf-core MegaTests - SENTIEON_AUTH_MECH = "$SENTIEON_AUTH_MECH" + // TODO: Update to `env('SENTIEON_AUTH_MECH')` when minimum Nextflow version is >= 26.04.0 + SENTIEON_AUTH_MECH = env('SENTIEON_AUTH_MECH') SENTIEON_AUTH_DATA = secrets.SENTIEON_AUTH_DATA // NOTE This is how pipeline users will test out Sentieon with a license file // nextflow secrets set SENTIEON_LICENSE_BASE64 \$(cat | base64 -w 0) diff --git a/modules/nf-core/sentieon/staralign/tests/nextflow.starfusion.config b/modules/nf-core/sentieon/staralign/tests/nextflow.starfusion.config index 39093b5a6..ed1499f6f 100644 --- a/modules/nf-core/sentieon/staralign/tests/nextflow.starfusion.config +++ b/modules/nf-core/sentieon/staralign/tests/nextflow.starfusion.config @@ -12,9 +12,11 @@ process { env { // NOTE This is how pipeline users will use Sentieon in real world use - SENTIEON_LICENSE = "$SENTIEON_LICSRVR_IP" + // TODO: Update to `env('SENTIEON_LICSRVR_IP')` when minimum Nextflow version is >= 26.04.0 + SENTIEON_LICENSE = env('SENTIEON_LICSRVR_IP') // NOTE This should only happen in GitHub actions or nf-core MegaTests - SENTIEON_AUTH_MECH = "$SENTIEON_AUTH_MECH" + // TODO: Update to `env('SENTIEON_AUTH_MECH')` when minimum Nextflow version is >= 26.04.0 + SENTIEON_AUTH_MECH = env('SENTIEON_AUTH_MECH') SENTIEON_AUTH_DATA = secrets.SENTIEON_AUTH_DATA // NOTE This is how pipeline users will test out Sentieon with a license file // nextflow secrets set SENTIEON_LICENSE_BASE64 \$(cat | base64 -w 0) diff --git a/modules/nf-core/seqkit/replace/environment.yml b/modules/nf-core/seqkit/replace/environment.yml new file mode 100644 index 000000000..b26fb1eb8 --- /dev/null +++ b/modules/nf-core/seqkit/replace/environment.yml @@ -0,0 +1,7 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::seqkit=2.9.0 diff --git a/modules/nf-core/seqkit/replace/main.nf b/modules/nf-core/seqkit/replace/main.nf new file mode 100644 index 000000000..dd03dacd5 --- /dev/null +++ b/modules/nf-core/seqkit/replace/main.nf @@ -0,0 +1,52 @@ +process SEQKIT_REPLACE { + 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/seqkit:2.9.0--h9ee0642_0' + : 'biocontainers/seqkit:2.9.0--h9ee0642_0'}" + + input: + tuple val(meta), path(fastx) + + output: + tuple val(meta), path("*.fast*"), emit: fastx + tuple val("${task.process}"), val('seqkit'), eval("seqkit version | sed 's/seqkit v//'"), emit: versions_seqkit, topic: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def extension = "fastq" + if ("${fastx}" ==~ /.+\.fasta|.+\.fasta.gz|.+\.fa|.+\.fa.gz|.+\.fas|.+\.fas.gz|.+\.fna|.+\.fna.gz|.+\.faa|.+\.faa.gz/) { + extension = "fasta" + } + def isgz = "" + if ("${fastx}" ==~ /.+\.gz/) { + isgz = ".gz" + } + def endswith = task.ext.suffix ?: "${extension}${isgz}" + """ + seqkit \\ + replace \\ + ${args} \\ + --threads ${task.cpus} \\ + -i ${fastx} \\ + -o ${prefix}.${endswith} + """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + def extension = "fastq" + if ("${fastx}" ==~ /.+\.fasta|.+\.fasta.gz|.+\.fa|.+\.fa.gz|.+\.fas|.+\.fas.gz|.+\.fna|.+\.fna.gz/) { + extension = "fasta" + } + def endswith = task.ext.suffix ?: "${extension}.gz" + + """ + echo "" | gzip > ${prefix}.${endswith} + """ +} diff --git a/modules/nf-core/seqkit/replace/meta.yml b/modules/nf-core/seqkit/replace/meta.yml new file mode 100644 index 000000000..15927872a --- /dev/null +++ b/modules/nf-core/seqkit/replace/meta.yml @@ -0,0 +1,69 @@ +name: seqkit_replace +description: Use seqkit to find/replace strings within sequences and sequence headers +keywords: + - seqkit + - replace + - sequence + - sequence headers + - fasta +tools: + - seqkit: + description: Cross-platform and ultrafast toolkit for FASTA/Q file manipulation, + written by Wei Shen. + homepage: https://bioinf.shenwei.me/seqkit/usage/ + documentation: https://bioinf.shenwei.me/seqkit/usage/ + tool_dev_url: https://github.com/shenwei356/seqkit/ + doi: "10.1371/journal.pone.016396" + identifier: biotools:seqkit +input: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - fastx: + type: file + description: fasta/q file + pattern: "*.{fasta,fastq,fa,fq,fas,fna,faa}*" + ontologies: + - edam: http://edamontology.org/format_1930 # FASTQ +output: + fastx: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.fast*": + type: file + description: fasta/q file with replaced values + pattern: "*.{fasta,fastq,fa,fq,fas,fna,faa}*" + ontologies: + - edam: http://edamontology.org/format_1930 # FASTQ + versions_seqkit: + - - ${task.process}: + type: string + description: The name of the process + - seqkit: + type: string + description: The name of the tool + - "seqkit version | sed 's/seqkit v//'": + type: eval + description: The expression to obtain the version of seqkit + +topics: + versions: + - - ${task.process}: + type: string + description: The name of the process + - seqkit: + type: string + description: The name of the tool + - "seqkit version | sed 's/seqkit v//'": + type: eval + description: The expression to obtain the version of seqkit + +authors: + - "@mjcipriano" +maintainers: + - "@mjcipriano" diff --git a/modules/nf-core/seqkit/replace/tests/main.nf.test b/modules/nf-core/seqkit/replace/tests/main.nf.test new file mode 100644 index 000000000..15fb7d350 --- /dev/null +++ b/modules/nf-core/seqkit/replace/tests/main.nf.test @@ -0,0 +1,105 @@ +nextflow_process { + + name "Test Process SEQKIT_REPLACE" + script "../main.nf" + process "SEQKIT_REPLACE" + + tag "modules" + tag "modules_nfcore" + tag "seqkit" + tag "seqkit/replace" + + test("sarscov2 - fasta - replace") { + + config "./replace.config" + + when { + process { + """ + input[0] = [ [ id:'test' ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/proteome.fasta.gz', checkIfExists: true) ] + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + + test("sarscov2 - fasta - replace - uncompressed") { + + config "./replace.config" + + when { + process { + """ + input[0] = [ [ id:'test' ], // 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() } + ) + } + + } + + test("sarscov2 - fasta - uncomp - custom") { + + config "./uncomp.config" + + when { + process { + """ + input[0] = [ [ id:'test' ], // 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() } + ) + } + + } + + test("sarscov2 - fasta - stub") { + + options "-stub" + + when { + process { + """ + input[0] = [ [ id:'test' ], // 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() } + ) + } + + } + +} diff --git a/modules/nf-core/seqkit/replace/tests/main.nf.test.snap b/modules/nf-core/seqkit/replace/tests/main.nf.test.snap new file mode 100644 index 000000000..fdae3ebe4 --- /dev/null +++ b/modules/nf-core/seqkit/replace/tests/main.nf.test.snap @@ -0,0 +1,166 @@ +{ + "sarscov2 - fasta - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.fasta.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + [ + "SEQKIT_REPLACE", + "seqkit", + "2.9.0" + ] + ], + "fastx": [ + [ + { + "id": "test" + }, + "test.fasta.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "versions_seqkit": [ + [ + "SEQKIT_REPLACE", + "seqkit", + "2.9.0" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.3" + }, + "timestamp": "2026-02-03T14:51:31.369966565" + }, + "sarscov2 - fasta - replace - uncompressed": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.fasta:md5,b1518908253a4997fcad98270751112e" + ] + ], + "1": [ + [ + "SEQKIT_REPLACE", + "seqkit", + "2.9.0" + ] + ], + "fastx": [ + [ + { + "id": "test" + }, + "test.fasta:md5,b1518908253a4997fcad98270751112e" + ] + ], + "versions_seqkit": [ + [ + "SEQKIT_REPLACE", + "seqkit", + "2.9.0" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.3" + }, + "timestamp": "2026-02-03T14:51:20.851601162" + }, + "sarscov2 - fasta - uncomp - custom": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test..fasta:md5,05d3294a62c72f5489f067c1da3c2f6c" + ] + ], + "1": [ + [ + "SEQKIT_REPLACE", + "seqkit", + "2.9.0" + ] + ], + "fastx": [ + [ + { + "id": "test" + }, + "test..fasta:md5,05d3294a62c72f5489f067c1da3c2f6c" + ] + ], + "versions_seqkit": [ + [ + "SEQKIT_REPLACE", + "seqkit", + "2.9.0" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.3" + }, + "timestamp": "2026-02-03T14:51:26.121667583" + }, + "sarscov2 - fasta - replace": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.fasta.gz:md5,c40eaff961f6f2a48bb7e8fd156ed5d7" + ] + ], + "1": [ + [ + "SEQKIT_REPLACE", + "seqkit", + "2.9.0" + ] + ], + "fastx": [ + [ + { + "id": "test" + }, + "test.fasta.gz:md5,c40eaff961f6f2a48bb7e8fd156ed5d7" + ] + ], + "versions_seqkit": [ + [ + "SEQKIT_REPLACE", + "seqkit", + "2.9.0" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.3" + }, + "timestamp": "2026-02-03T14:51:15.520168225" + } +} \ No newline at end of file diff --git a/modules/nf-core/seqkit/replace/tests/replace.config b/modules/nf-core/seqkit/replace/tests/replace.config new file mode 100644 index 000000000..8766447c3 --- /dev/null +++ b/modules/nf-core/seqkit/replace/tests/replace.config @@ -0,0 +1,5 @@ + process { + withName: 'SEQKIT_REPLACE' { + ext.args = "-s -p 'A' -r 'N'" + } + } diff --git a/modules/nf-core/seqkit/replace/tests/uncomp.config b/modules/nf-core/seqkit/replace/tests/uncomp.config new file mode 100644 index 000000000..dbd892b54 --- /dev/null +++ b/modules/nf-core/seqkit/replace/tests/uncomp.config @@ -0,0 +1,6 @@ + process { + withName: 'SEQKIT_REPLACE' { + ext.args = "-s -p 'T' -r 'N'" + ext.suffix = ".fasta" + } + } diff --git a/modules/nf-core/seqkit/stats/environment.yml b/modules/nf-core/seqkit/stats/environment.yml new file mode 100644 index 000000000..b26fb1eb8 --- /dev/null +++ b/modules/nf-core/seqkit/stats/environment.yml @@ -0,0 +1,7 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::seqkit=2.9.0 diff --git a/modules/nf-core/seqkit/stats/main.nf b/modules/nf-core/seqkit/stats/main.nf new file mode 100644 index 000000000..540aa8815 --- /dev/null +++ b/modules/nf-core/seqkit/stats/main.nf @@ -0,0 +1,36 @@ +process SEQKIT_STATS { + 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/seqkit:2.9.0--h9ee0642_0' + : 'biocontainers/seqkit:2.9.0--h9ee0642_0'}" + + input: + tuple val(meta), path(reads) + + output: + tuple val(meta), path("*.tsv"), emit: stats + tuple val("${task.process}"), val('seqkit'), eval("seqkit version | sed 's/seqkit v//'"), emit: versions_seqkit, topic: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '--all' + def prefix = task.ext.prefix ?: "${meta.id}" + """ + seqkit stats \\ + --tabular \\ + --threads ${task.cpus} \\ + ${args} \\ + ${reads} > '${prefix}.tsv' + """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.tsv + """ +} diff --git a/modules/nf-core/seqkit/stats/meta.yml b/modules/nf-core/seqkit/stats/meta.yml new file mode 100644 index 000000000..1d51b05b0 --- /dev/null +++ b/modules/nf-core/seqkit/stats/meta.yml @@ -0,0 +1,72 @@ +name: "seqkit_stats" +description: simple statistics of FASTA/Q files +keywords: + - seqkit + - fasta + - stats +tools: + - "seqkit": + description: Cross-platform and ultrafast toolkit for FASTA/Q file manipulation, + written by Wei Shen. + homepage: https://bioinf.shenwei.me/seqkit/usage/ + documentation: https://bioinf.shenwei.me/seqkit/usage/ + tool_dev_url: https://github.com/shenwei356/seqkit/ + doi: "10.1371/journal.pone.0163962" + licence: ["MIT"] + identifier: biotools:seqkit +input: + - - meta: + type: map + description: > + Groovy Map containing sample information e.g. [ id:'test', single_end:false + ] + - reads: + type: file + description: > + Either FASTA or FASTQ files. + pattern: "*.{fa,fna,faa,fasta,fq,fastq}[.gz]" + ontologies: + - edam: http://edamontology.org/format_1930 # FASTQ +output: + stats: + - - meta: + type: map + description: > + Groovy Map containing sample information e.g. [ id:'test', single_end:false + ] + - "*.tsv": + type: file + description: > + Tab-separated output file with basic sequence statistics. + pattern: "*.tsv" + ontologies: + - edam: http://edamontology.org/format_3475 # TSV + versions_seqkit: + - - ${task.process}: + type: string + description: The name of the process + - seqkit: + type: string + description: The name of the tool + - "seqkit version | sed 's/seqkit v//'": + type: eval + description: The expression to obtain the version of seqkit + +topics: + versions: + - - ${task.process}: + type: string + description: The name of the process + - seqkit: + type: string + description: The name of the tool + - "seqkit version | sed 's/seqkit v//'": + type: eval + description: The expression to obtain the version of seqkit + +authors: + - "@Midnighter" + - "@heuermh" +maintainers: + - "@Midnighter" + - "@heuermh" diff --git a/modules/nf-core/seqkit/stats/tests/main.nf.test b/modules/nf-core/seqkit/stats/tests/main.nf.test new file mode 100644 index 000000000..2cd4eb49e --- /dev/null +++ b/modules/nf-core/seqkit/stats/tests/main.nf.test @@ -0,0 +1,141 @@ +nextflow_process { + + name "Test Process SEQKIT_STATS" + script "../main.nf" + process "SEQKIT_STATS" + + tag "modules" + tag "modules_nfcore" + tag "seqkit" + tag "seqkit/stats" + + 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).match() } + ) + } + + } + + test("paired_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(process.out).match() } + ) + } + + } + + test("nanopore") { + + when { + process { + """ + input[0] = [[ id:'test', single_end:true ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/nanopore/fastq/test.fastq.gz', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("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) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("transcriptome_fasta") { + + when { + process { + """ + input[0] = [[ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/transcriptome.fasta', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).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() } + ) + } + + } + +} diff --git a/modules/nf-core/seqkit/stats/tests/main.nf.test.snap b/modules/nf-core/seqkit/stats/tests/main.nf.test.snap new file mode 100644 index 000000000..b83e6a616 --- /dev/null +++ b/modules/nf-core/seqkit/stats/tests/main.nf.test.snap @@ -0,0 +1,260 @@ +{ + "nanopore": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": true + }, + "test.tsv:md5,14f97a9e0414998854ead651e0e69449" + ] + ], + "1": [ + [ + "SEQKIT_STATS", + "seqkit", + "2.9.0" + ] + ], + "stats": [ + [ + { + "id": "test", + "single_end": true + }, + "test.tsv:md5,14f97a9e0414998854ead651e0e69449" + ] + ], + "versions_seqkit": [ + [ + "SEQKIT_STATS", + "seqkit", + "2.9.0" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.3" + }, + "timestamp": "2026-02-03T13:29:39.937621054" + }, + "genome_fasta": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.tsv:md5,82b33df8ec2515560b80c3d0bc64c898" + ] + ], + "1": [ + [ + "SEQKIT_STATS", + "seqkit", + "2.9.0" + ] + ], + "stats": [ + [ + { + "id": "test", + "single_end": false + }, + "test.tsv:md5,82b33df8ec2515560b80c3d0bc64c898" + ] + ], + "versions_seqkit": [ + [ + "SEQKIT_STATS", + "seqkit", + "2.9.0" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.3" + }, + "timestamp": "2026-02-03T13:29:45.268086738" + }, + "transcriptome_fasta": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.tsv:md5,eef67c2e2f225391836d59d5b0d6c3b7" + ] + ], + "1": [ + [ + "SEQKIT_STATS", + "seqkit", + "2.9.0" + ] + ], + "stats": [ + [ + { + "id": "test", + "single_end": false + }, + "test.tsv:md5,eef67c2e2f225391836d59d5b0d6c3b7" + ] + ], + "versions_seqkit": [ + [ + "SEQKIT_STATS", + "seqkit", + "2.9.0" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.3" + }, + "timestamp": "2026-02-03T13:29:50.657274211" + }, + "single_end": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": true + }, + "test.tsv:md5,f172827a8608b646559cc39c6ca05085" + ] + ], + "1": [ + [ + "SEQKIT_STATS", + "seqkit", + "2.9.0" + ] + ], + "stats": [ + [ + { + "id": "test", + "single_end": true + }, + "test.tsv:md5,f172827a8608b646559cc39c6ca05085" + ] + ], + "versions_seqkit": [ + [ + "SEQKIT_STATS", + "seqkit", + "2.9.0" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.3" + }, + "timestamp": "2026-02-03T13:29:29.264287187" + }, + "paired_end": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.tsv:md5,f172827a8608b646559cc39c6ca05085" + ] + ], + "1": [ + [ + "SEQKIT_STATS", + "seqkit", + "2.9.0" + ] + ], + "stats": [ + [ + { + "id": "test", + "single_end": false + }, + "test.tsv:md5,f172827a8608b646559cc39c6ca05085" + ] + ], + "versions_seqkit": [ + [ + "SEQKIT_STATS", + "seqkit", + "2.9.0" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.3" + }, + "timestamp": "2026-02-03T13:29:34.665600897" + }, + "single_end - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": true + }, + "test.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + "SEQKIT_STATS", + "seqkit", + "2.9.0" + ] + ], + "stats": [ + [ + { + "id": "test", + "single_end": true + }, + "test.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions_seqkit": [ + [ + "SEQKIT_STATS", + "seqkit", + "2.9.0" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.3" + }, + "timestamp": "2026-02-03T13:29:55.952952629" + } +} \ No newline at end of file diff --git a/modules/nf-core/sortmerna/main.nf b/modules/nf-core/sortmerna/main.nf index 67a03464f..28c4ab3b9 100644 --- a/modules/nf-core/sortmerna/main.nf +++ b/modules/nf-core/sortmerna/main.nf @@ -16,7 +16,7 @@ process SORTMERNA { 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 + tuple val("${task.process}"), val('sortmerna'), eval('sortmerna --version 2>&1 | grep -oE "[0-9]+\\.[0-9]+\\.[0-9]+" | head -1'), topic: versions, emit: versions_sortmerna when: task.ext.when == null || task.ext.when @@ -33,11 +33,11 @@ process SORTMERNA { def out2_cmd = '' def mv_cmd = '' def reads_input = '' - def refs_input = '' + def refs_input = (skip_index && index) ? "--idx-dir ${index}" : '' if (! index_only){ reads_args = '--aligned rRNA_reads --fastx --other non_rRNA_reads' - reads_input = paired_end ? reads.collect{"--reads $it"}.join(' ') : "--reads $reads" + reads_input = paired_end ? reads.collect{ r -> "--reads $r"}.join(' ') : "--reads $reads" def n_fastq = paired_end ? reads.size() : 1 if ( n_fastq == 1 ) { mv_cmd = """ @@ -67,11 +67,6 @@ process SORTMERNA { $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: @@ -80,20 +75,16 @@ process SORTMERNA { 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" + mv_cmd = "echo | gzip > ${prefix}.non_rRNA.fastq.gz" } else { mv_cmd = """ - touch ${prefix}_1.non_rRNA.fastq.gz - touch ${prefix}_2.non_rRNA.fastq.gz + echo "" | gzip > ${prefix}_1.non_rRNA.fastq.gz + echo "" | gzip > ${prefix}_2.non_rRNA.fastq.gz """ } } @@ -101,10 +92,5 @@ process SORTMERNA { $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 index 3b43d006d..bd94d8a68 100644 --- a/modules/nf-core/sortmerna/meta.yml +++ b/modules/nf-core/sortmerna/meta.yml @@ -30,6 +30,7 @@ input: description: | List of input FastQ files of size 1 and 2 for single-end and paired-end data, respectively. + ontologies: [] - - meta2: type: map description: | @@ -39,6 +40,7 @@ input: type: file description: | Path to reference file(s) + ontologies: [] - - meta3: type: map description: | @@ -49,8 +51,8 @@ input: description: | Path to index directory of a previous sortmerna run output: - - reads: - - meta: + reads: + - - meta: type: map description: | Groovy Map containing sample information @@ -60,8 +62,10 @@ output: type: file description: The filtered fastq reads pattern: "*fastq.gz" - - log: - - meta: + ontologies: + - edam: http://edamontology.org/format_3989 # GZIP format + log: + - - meta: type: map description: | Groovy Map containing sample information @@ -71,8 +75,9 @@ output: type: file description: SortMeRNA log file pattern: "*sortmerna.log" - - index: - - meta2: + ontologies: [] + index: + - - meta2: type: map description: | Groovy Map containing reference information @@ -81,11 +86,29 @@ output: type: directory description: | Path to index directory generated by sortmern - - versions: - - versions.yml: - type: file - description: File containing software versions - pattern: "versions.yml" + versions_sortmerna: + - - ${task.process}: + type: string + description: The process the versions were collected from + - sortmerna: + type: string + description: The tool name + - sortmerna --version 2>&1 | grep -oE "[0-9]+\.[0-9]+\.[0-9]+" | head -1: + type: eval + description: The expression to obtain the version of the tool + +topics: + versions: + - - ${task.process}: + type: string + description: The process the versions were collected from + - sortmerna: + type: string + description: The tool name + - sortmerna --version 2>&1 | grep -oE "[0-9]+\.[0-9]+\.[0-9]+" | head -1: + type: eval + description: The expression to obtain the version of the tool + authors: - "@drpatelh" - "@mashehu" diff --git a/modules/nf-core/sortmerna/nextflow.config b/modules/nf-core/sortmerna/nextflow.config index 953da5a39..2ce5dc579 100644 --- a/modules/nf-core/sortmerna/nextflow.config +++ b/modules/nf-core/sortmerna/nextflow.config @@ -1,20 +1,18 @@ -if (params.remove_ribo_rna) { - process { - withName: 'SORTMERNA' { - ext.args = '--num_alignments 1 -v --index 0' - publishDir = [ - [ - path: { "${params.outdir}/sortmerna" }, - mode: params.publish_dir_mode, - pattern: "*.log" - ], - [ - path: { params.save_non_ribo_reads ? "${params.outdir}/sortmerna" : params.outdir }, - mode: params.publish_dir_mode, - pattern: "*.fastq.gz", - saveAs: { params.save_non_ribo_reads ? it : null } - ] +process { + withName: 'SORTMERNA' { + ext.args = '--num_alignments 1 -v --index 0' + publishDir = [ + [ + path: { "${params.outdir}/sortmerna" }, + mode: params.publish_dir_mode, + pattern: "*.log" + ], + [ + path: { params.save_non_ribo_reads ? "${params.outdir}/sortmerna" : params.outdir }, + mode: params.publish_dir_mode, + pattern: "*.fastq.gz", + saveAs: { filename -> params.save_non_ribo_reads ? filename : null } ] - } + ] } -} \ No newline at end of file +} diff --git a/modules/nf-core/sortmerna/tests/main.nf.test b/modules/nf-core/sortmerna/tests/main.nf.test index 1d0622476..4f6dc5789 100644 --- a/modules/nf-core/sortmerna/tests/main.nf.test +++ b/modules/nf-core/sortmerna/tests/main.nf.test @@ -3,6 +3,9 @@ nextflow_process { name "Test Process SORTMERNA" script "../main.nf" process "SORTMERNA" + tag "modules" + tag "modules_nfcore" + tag "sortmerna" test("sarscov2 indexing only") { @@ -26,7 +29,7 @@ nextflow_process { { assert ! process.out.reads }, { assert snapshot( file(process.out.index[0][1]).listFiles().findAll { !it.name.endsWith(".stats") }.sort { it.name }, - process.out.versions + process.out.findAll { key, val -> key.startsWith("versions") } ).match() } ) } @@ -55,7 +58,7 @@ nextflow_process { { 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") } + { assert snapshot(process.out.findAll { key, val -> key.startsWith("versions") }).match("versions_index_only_stub") } ) } @@ -94,7 +97,7 @@ nextflow_process { { assert snapshot( file(process.out.index[0][1]).listFiles().findAll { !it.name.endsWith(".stats") }.sort { it.name } ).match("index_single_end")}, - { assert snapshot(process.out.versions).match("versions_single_end") } + { assert snapshot(process.out.findAll { key, val -> key.startsWith("versions") }).match("versions_single_end") } ) } @@ -131,7 +134,7 @@ nextflow_process { ).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") } + { assert snapshot(process.out.findAll { key, val -> key.startsWith("versions") }).match("versions_single_end_stub") } ) } @@ -174,7 +177,7 @@ nextflow_process { { assert snapshot( file(process.out.index[0][1]).listFiles().findAll { !it.name.endsWith(".stats") }.sort { it.name } ).match("index_paired_end") }, - { assert snapshot(process.out.versions).match("versions_paired_end") } + { assert snapshot(process.out.findAll { key, val -> key.startsWith("versions") }).match("versions_paired_end") } ) } @@ -215,7 +218,7 @@ nextflow_process { ).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") } + { assert snapshot(process.out.findAll { key, val -> key.startsWith("versions") }).match("versions_paired_end_stub") } ) } @@ -272,7 +275,7 @@ nextflow_process { { assert snapshot( file(process.out.index[0][1]).listFiles().findAll { !it.name.endsWith(".stats") }.sort{ it.name } ).match("index_single_end_premade_index") }, - { assert snapshot(process.out.versions).match("versions_single_end_premade_index") } + { assert snapshot(process.out.findAll { key, val -> key.startsWith("versions") }).match("versions_single_end_premade_index") } ) } } @@ -326,7 +329,7 @@ nextflow_process { ).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") } + { assert snapshot(process.out.findAll { key, val -> key.startsWith("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 index ee2b46795..1b27283ad 100644 --- a/modules/nf-core/sortmerna/tests/main.nf.test.snap +++ b/modules/nf-core/sortmerna/tests/main.nf.test.snap @@ -1,15 +1,21 @@ { "versions_paired_end_stub": { "content": [ - [ - "versions.yml:md5,1ba8f45ec168b6ebfceb9d4a4203f655" - ] + { + "versions_sortmerna": [ + [ + "SORTMERNA", + "sortmerna", + "4.3.7" + ] + ] + } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.2" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-05-27T16:48:08.251216694" + "timestamp": "2026-01-19T17:23:41.371837471" }, "index_paired_end_stub": { "content": [ @@ -32,27 +38,39 @@ }, "versions_paired_end": { "content": [ - [ - "versions.yml:md5,1ba8f45ec168b6ebfceb9d4a4203f655" - ] + { + "versions_sortmerna": [ + [ + "SORTMERNA", + "sortmerna", + "4.3.7" + ] + ] + } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.2" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-05-27T16:47:57.934896622" + "timestamp": "2026-01-19T17:23:35.889332842" }, "versions_single_end_stub": { "content": [ - [ - "versions.yml:md5,1ba8f45ec168b6ebfceb9d4a4203f655" - ] + { + "versions_sortmerna": [ + [ + "SORTMERNA", + "sortmerna", + "4.3.7" + ] + ] + } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.2" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-05-27T16:47:46.144044374" + "timestamp": "2026-01-19T17:23:29.270369464" }, "sarscov2 single_end_match": { "content": [ @@ -103,15 +121,21 @@ }, "versions_single_end_premade_index": { "content": [ - [ - "versions.yml:md5,1ba8f45ec168b6ebfceb9d4a4203f655" - ] + { + "versions_sortmerna": [ + [ + "SORTMERNA", + "sortmerna", + "4.3.7" + ] + ] + } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.2" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-05-27T16:48:20.839706567" + "timestamp": "2026-01-19T17:23:48.659750701" }, "sarscov2 paired_end-for_stub_match": { "content": [ @@ -137,15 +161,21 @@ "2415186086593376314.kmer_0.dat:md5,4a0bcb71b120f6a6949b7969292ef2e7", "2415186086593376314.pos_0.dat:md5,bc2875e4cc4017707306565e396839ef" ], - [ - "versions.yml:md5,1ba8f45ec168b6ebfceb9d4a4203f655" - ] + { + "versions_sortmerna": [ + [ + "SORTMERNA", + "sortmerna", + "4.3.7" + ] + ] + } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.2" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-06-03T09:42:00.868287579" + "timestamp": "2026-01-19T17:23:11.933438391" }, "index_paired_end": { "content": [ @@ -208,27 +238,39 @@ }, "versions_single_end": { "content": [ - [ - "versions.yml:md5,1ba8f45ec168b6ebfceb9d4a4203f655" - ] + { + "versions_sortmerna": [ + [ + "SORTMERNA", + "sortmerna", + "4.3.7" + ] + ] + } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.2" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-05-27T16:47:35.26956893" + "timestamp": "2026-01-19T17:23:23.954370601" }, "versions_single_end_premade_index_stub": { "content": [ - [ - "versions.yml:md5,1ba8f45ec168b6ebfceb9d4a4203f655" - ] + { + "versions_sortmerna": [ + [ + "SORTMERNA", + "sortmerna", + "4.3.7" + ] + ] + } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.2" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-05-27T16:48:32.170638722" + "timestamp": "2026-01-19T17:23:54.679653966" }, "index_single_end_stub": { "content": [ @@ -251,15 +293,21 @@ }, "versions_index_only_stub": { "content": [ - [ - "versions.yml:md5,1ba8f45ec168b6ebfceb9d4a4203f655" - ] + { + "versions_sortmerna": [ + [ + "SORTMERNA", + "sortmerna", + "4.3.7" + ] + ] + } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.2" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-05-27T16:47:23.422761188" + "timestamp": "2026-01-19T17:23:17.3325412" }, "index_single_end_premade_index_stub": { "content": [ diff --git a/modules/nf-core/star/align/main.nf b/modules/nf-core/star/align/main.nf index 22a52184d..5a926ba8c 100644 --- a/modules/nf-core/star/align/main.nf +++ b/modules/nf-core/star/align/main.nf @@ -12,14 +12,14 @@ process STAR_ALIGN { 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("${task.process}"), val('star'), eval('STAR --version | sed "s/STAR_//"'), emit: versions_star, topic: versions + tuple val("${task.process}"), val('samtools'), eval("samtools --version | sed -n '1s/samtools //p'"), emit: versions_samtools, topic: versions + tuple val("${task.process}"), val('gawk'), eval("gawk --version | sed -n '1s/GNU Awk \\([0-9.]*\\).*/\\1/p'"), emit: versions_gawk, topic: versions tuple val(meta), path('*d.out.bam') , optional:true, emit: bam tuple val(meta), path("${prefix}.sortedByCoord.out.bam") , optional:true, emit: bam_sorted @@ -43,11 +43,9 @@ process STAR_ALIGN { prefix = task.ext.prefix ?: "${meta.id}" def reads1 = [] def reads2 = [] - meta.single_end ? [reads].flatten().each{reads1 << it} : reads.eachWithIndex{ v, ix -> ( ix & 1 ? reads2 : reads1) << v } + meta.single_end ? [reads].flatten().each{ read -> reads1 << read} : reads.eachWithIndex{ v, ix -> ( ix & 1 ? reads2 : reads1) << v } def ignore_gtf = star_ignore_sjdbgtf ? '' : "--sjdbGTFfile $gtf" - def seq_platform_arg = seq_platform ? "'PL:$seq_platform'" : "" - def seq_center_arg = seq_center ? "'CN:$seq_center'" : "" - attrRG = args.contains("--outSAMattrRGline") ? "" : "--outSAMattrRGline 'ID:$prefix' $seq_center_arg 'SM:$prefix' $seq_platform_arg" + attrRG = args.contains("--outSAMattrRGline") ? "" : "--outSAMattrRGline 'ID:$prefix' 'SM:$prefix'" def out_sam_type = (args.contains('--outSAMtype')) ? '' : '--outSAMtype BAM Unsorted' mv_unsorted_bam = (args.contains('--outSAMtype BAM Unsorted SortedByCoordinate')) ? "mv ${prefix}.Aligned.out.bam ${prefix}.Aligned.unsort.out.bam" : '' """ @@ -71,13 +69,6 @@ process STAR_ALIGN { 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: @@ -100,12 +91,5 @@ process STAR_ALIGN { 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 index 5cfe763e3..3df5cfe75 100644 --- a/modules/nf-core/star/align/meta.yml +++ b/modules/nf-core/star/align/meta.yml @@ -26,6 +26,7 @@ input: description: | List of input FastQ files of size 1 and 2 for single-end and paired-end data, respectively. + ontologies: [] - - meta2: type: map description: | @@ -44,18 +45,13 @@ input: 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 + ontologies: [] + - star_ignore_sjdbgtf: + type: boolean + description: Ignore annotation GTF file output: - - log_final: - - meta: + log_final: + - - meta: type: map description: | Groovy Map containing sample information @@ -64,8 +60,9 @@ output: type: file description: STAR final log file pattern: "*Log.final.out" - - log_out: - - meta: + ontologies: [] + log_out: + - - meta: type: map description: | Groovy Map containing sample information @@ -74,8 +71,9 @@ output: type: file description: STAR lot out file pattern: "*Log.out" - - log_progress: - - meta: + ontologies: [] + log_progress: + - - meta: type: map description: | Groovy Map containing sample information @@ -84,13 +82,40 @@ output: type: file description: STAR log progress file pattern: "*Log.progress.out" - - versions: - - versions.yml: - type: file - description: File containing software versions - pattern: "versions.yml" - - bam: - - meta: + ontologies: [] + versions_star: + - - ${task.process}: + type: string + description: The name of the process + - star: + type: string + description: The name of the tool + - STAR --version | sed "s/STAR_//": + type: eval + description: The expression to obtain the version of the tool + versions_samtools: + - - ${task.process}: + type: string + description: The name of the process + - samtools: + type: string + description: The name of the tool + - samtools --version | sed -n '1s/samtools //p': + type: eval + description: The expression to obtain the version of the tool + versions_gawk: + - - ${task.process}: + type: string + description: The name of the process + - gawk: + type: string + description: The name of the tool + - gawk --version | sed -n '1s/GNU Awk \([0-9.]*\).*/\1/p': + type: eval + description: The expression to obtain the version of the tool + + bam: + - - meta: type: map description: | Groovy Map containing sample information @@ -99,8 +124,9 @@ output: type: file description: Output BAM file containing read alignments pattern: "*.{bam}" - - bam_sorted: - - meta: + ontologies: [] + bam_sorted: + - - meta: type: map description: | Groovy Map containing sample information @@ -109,8 +135,9 @@ output: type: file description: Sorted BAM file of read alignments (optional) pattern: "*sortedByCoord.out.bam" - - bam_sorted_aligned: - - meta: + ontologies: [] + bam_sorted_aligned: + - - meta: type: map description: | Groovy Map containing sample information @@ -119,8 +146,9 @@ output: type: file description: Sorted BAM file of read alignments (optional) pattern: "*.Aligned.sortedByCoord.out.bam" - - bam_transcript: - - meta: + ontologies: [] + bam_transcript: + - - meta: type: map description: | Groovy Map containing sample information @@ -129,8 +157,9 @@ output: type: file description: Output BAM file of transcriptome alignment (optional) pattern: "*toTranscriptome.out.bam" - - bam_unsorted: - - meta: + ontologies: [] + bam_unsorted: + - - meta: type: map description: | Groovy Map containing sample information @@ -139,8 +168,9 @@ output: type: file description: Unsorted BAM file of read alignments (optional) pattern: "*Aligned.unsort.out.bam" - - fastq: - - meta: + ontologies: [] + fastq: + - - meta: type: map description: | Groovy Map containing sample information @@ -149,8 +179,10 @@ output: type: file description: Unmapped FastQ files (optional) pattern: "*fastq.gz" - - tab: - - meta: + ontologies: + - edam: http://edamontology.org/format_3989 # GZIP format + tab: + - - meta: type: map description: | Groovy Map containing sample information @@ -159,8 +191,10 @@ output: type: file description: STAR output tab file(s) (optional) pattern: "*.tab" - - spl_junc_tab: - - meta: + ontologies: + - edam: http://edamontology.org/format_3475 # TSV + spl_junc_tab: + - - meta: type: map description: | Groovy Map containing sample information @@ -169,8 +203,10 @@ output: type: file description: STAR output splice junction tab file pattern: "*.SJ.out.tab" - - read_per_gene_tab: - - meta: + ontologies: + - edam: http://edamontology.org/format_3475 # TSV + read_per_gene_tab: + - - meta: type: map description: | Groovy Map containing sample information @@ -179,8 +215,10 @@ output: type: file description: STAR output read per gene tab file pattern: "*.ReadsPerGene.out.tab" - - junction: - - meta: + ontologies: + - edam: http://edamontology.org/format_3475 # TSV + junction: + - - meta: type: map description: | Groovy Map containing sample information @@ -189,19 +227,20 @@ output: type: file description: STAR chimeric junction output file (optional) pattern: "*.out.junction" - - sam: - - meta: + ontologies: [] + sam: + - - meta: type: map description: | Groovy Map containing sample information e.g. [ id:'test', single_end:false ] - pattern: "*.out.sam" - "*.out.sam": type: file description: STAR output SAM file(s) (optional) pattern: "*.out.sam" - - wig: - - meta: + ontologies: [] + wig: + - - meta: type: map description: | Groovy Map containing sample information @@ -210,8 +249,9 @@ output: type: file description: STAR output wiggle format file(s) (optional) pattern: "*.wig" - - bedgraph: - - meta: + ontologies: [] + bedgraph: + - - meta: type: map description: | Groovy Map containing sample information @@ -220,6 +260,37 @@ output: type: file description: STAR output bedGraph format file(s) (optional) pattern: "*.bg" + ontologies: [] +topics: + versions: + - - ${task.process}: + type: string + description: The name of the process + - star: + type: string + description: The name of the tool + - STAR --version | sed "s/STAR_//": + type: eval + description: The expression to obtain the version of the tool + - - ${task.process}: + type: string + description: The name of the process + - samtools: + type: string + description: The name of the tool + - samtools --version | sed -n '1s/samtools //p': + type: eval + description: The expression to obtain the version of the tool + - - ${task.process}: + type: string + description: The name of the process + - gawk: + type: string + description: The name of the tool + - gawk --version | sed -n '1s/GNU Awk \([0-9.]*\).*/\1/p': + type: eval + description: The expression to obtain the version of the tool + authors: - "@kevinmenden" - "@drpatelh" diff --git a/modules/nf-core/star/align/tests/main.nf.test b/modules/nf-core/star/align/tests/main.nf.test index 2fa21352e..d7c6ccbd9 100644 --- a/modules/nf-core/star/align/tests/main.nf.test +++ b/modules/nf-core/star/align/tests/main.nf.test @@ -3,6 +3,11 @@ 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" @@ -38,8 +43,6 @@ nextflow_process { [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] ]) input[3] = false - input[4] = 'illumina' - input[5] = false """ } } @@ -60,7 +63,7 @@ nextflow_process { process.out.spl_junc_tab, process.out.tab, process.out.wig, - process.out.versions + process.out.findAll { key, val -> key.startsWith('versions') } ).match() } ) } @@ -103,8 +106,6 @@ nextflow_process { [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] ]) input[3] = false - input[4] = 'illumina' - input[5] = false """ } } @@ -125,7 +126,7 @@ nextflow_process { process.out.spl_junc_tab, process.out.tab, process.out.wig, - process.out.versions + process.out.findAll { key, val -> key.startsWith('versions') } ).match() } ) } @@ -168,8 +169,6 @@ nextflow_process { [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] ]) input[3] = false - input[4] = 'illumina' - input[5] = false """ } } @@ -189,7 +188,7 @@ nextflow_process { process.out.spl_junc_tab, process.out.tab, process.out.wig, - process.out.versions + process.out.findAll { key, val -> key.startsWith('versions') } ).match() } ) } @@ -232,8 +231,6 @@ nextflow_process { [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] ]) input[3] = false - input[4] = 'illumina' - input[5] = false """ } } @@ -254,7 +251,7 @@ nextflow_process { process.out.spl_junc_tab, process.out.tab, process.out.wig, - process.out.versions + process.out.findAll { key, val -> key.startsWith('versions') } ).match() } ) } @@ -299,8 +296,6 @@ nextflow_process { [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] ]) input[3] = false - input[4] = 'illumina' - input[5] = false """ } } @@ -321,7 +316,7 @@ nextflow_process { process.out.spl_junc_tab, process.out.tab, process.out.wig, - process.out.versions + process.out.findAll { key, val -> key.startsWith('versions') } ).match() } ) } @@ -362,8 +357,6 @@ nextflow_process { [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] ]) input[3] = false - input[4] = 'illumina' - input[5] = false """ } } @@ -414,8 +407,6 @@ nextflow_process { [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] ]) input[3] = false - input[4] = 'illumina' - input[5] = false """ } } @@ -466,8 +457,6 @@ nextflow_process { [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] ]) input[3] = false - input[4] = 'illumina' - input[5] = false """ } } @@ -518,8 +507,6 @@ nextflow_process { [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] ]) input[3] = false - input[4] = 'illumina' - input[5] = false """ } } @@ -572,8 +559,6 @@ nextflow_process { [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] ]) input[3] = false - input[4] = 'illumina' - input[5] = false """ } } 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 a1ec3a3d0..2b5755db4 100644 --- a/modules/nf-core/star/align/tests/main.nf.test.snap +++ b/modules/nf-core/star/align/tests/main.nf.test.snap @@ -21,6 +21,27 @@ ] ], "10": [ + [ + { + "id": "test", + "single_end": true + }, + "test.Aligned.unsort.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "11": [ + [ + { + "id": "test", + "single_end": true + }, + [ + "test.unmapped_1.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test.unmapped_2.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "12": [ [ { "id": "test", @@ -33,7 +54,7 @@ ] ] ], - "11": [ + "13": [ [ { "id": "test", @@ -42,7 +63,7 @@ "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "12": [ + "14": [ [ { "id": "test", @@ -51,7 +72,7 @@ "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "13": [ + "15": [ [ { "id": "test", @@ -60,7 +81,7 @@ "test.Chimeric.out.junction:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "14": [ + "16": [ [ { "id": "test", @@ -69,7 +90,7 @@ "test.out.sam:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "15": [ + "17": [ [ { "id": "test", @@ -78,7 +99,7 @@ "test.Signal.UniqueMultiple.str1.out.wig:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "16": [ + "18": [ [ { "id": "test", @@ -97,28 +118,24 @@ ] ], "3": [ - "versions.yml:md5,b416145d7b5b8a080e832a7f7cde4c44" + [ + "STAR_ALIGN", + "star", + "2.7.11b" + ] ], "4": [ [ - { - "id": "test", - "single_end": true - }, - [ - "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", - "testXd.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" - ] + "STAR_ALIGN", + "samtools", + "1.21" ] ], "5": [ [ - { - "id": "test", - "single_end": true - }, - "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + "STAR_ALIGN", + "gawk", + "5.1.0" ] ], "6": [ @@ -127,7 +144,11 @@ "id": "test", "single_end": true }, - "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + [ + "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "testXd.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ] ], "7": [ @@ -136,7 +157,7 @@ "id": "test", "single_end": true }, - "test.toTranscriptome.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "8": [ @@ -145,7 +166,7 @@ "id": "test", "single_end": true }, - "test.Aligned.unsort.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "9": [ @@ -154,10 +175,7 @@ "id": "test", "single_end": true }, - [ - "test.unmapped_1.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", - "test.unmapped_2.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" - ] + "test.toTranscriptome.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "bam": [ @@ -306,8 +324,26 @@ ] ] ], - "versions": [ - "versions.yml:md5,b416145d7b5b8a080e832a7f7cde4c44" + "versions_gawk": [ + [ + "STAR_ALIGN", + "gawk", + "5.1.0" + ] + ], + "versions_samtools": [ + [ + "STAR_ALIGN", + "samtools", + "1.21" + ] + ], + "versions_star": [ + [ + "STAR_ALIGN", + "star", + "2.7.11b" + ] ], "wig": [ [ @@ -321,10 +357,10 @@ } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.2" + "nf-test": "0.9.3", + "nextflow": "25.10.3" }, - "timestamp": "2024-12-11T16:28:39.242074494" + "timestamp": "2026-02-03T09:28:25.802437191" }, "homo_sapiens - paired_end - arriba - stub": { "content": [ @@ -348,6 +384,27 @@ ] ], "10": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Aligned.unsort.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "11": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.unmapped_1.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test.unmapped_2.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "12": [ [ { "id": "test", @@ -360,7 +417,7 @@ ] ] ], - "11": [ + "13": [ [ { "id": "test", @@ -369,7 +426,7 @@ "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "12": [ + "14": [ [ { "id": "test", @@ -378,7 +435,7 @@ "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "13": [ + "15": [ [ { "id": "test", @@ -387,7 +444,7 @@ "test.Chimeric.out.junction:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "14": [ + "16": [ [ { "id": "test", @@ -396,7 +453,7 @@ "test.out.sam:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "15": [ + "17": [ [ { "id": "test", @@ -405,7 +462,7 @@ "test.Signal.UniqueMultiple.str1.out.wig:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "16": [ + "18": [ [ { "id": "test", @@ -424,28 +481,24 @@ ] ], "3": [ - "versions.yml:md5,b416145d7b5b8a080e832a7f7cde4c44" + [ + "STAR_ALIGN", + "star", + "2.7.11b" + ] ], "4": [ [ - { - "id": "test", - "single_end": false - }, - [ - "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", - "testXd.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" - ] + "STAR_ALIGN", + "samtools", + "1.21" ] ], "5": [ [ - { - "id": "test", - "single_end": false - }, - "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + "STAR_ALIGN", + "gawk", + "5.1.0" ] ], "6": [ @@ -454,7 +507,11 @@ "id": "test", "single_end": false }, - "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + [ + "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "testXd.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ] ], "7": [ @@ -463,7 +520,7 @@ "id": "test", "single_end": false }, - "test.toTranscriptome.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "8": [ @@ -472,7 +529,7 @@ "id": "test", "single_end": false }, - "test.Aligned.unsort.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "9": [ @@ -481,10 +538,7 @@ "id": "test", "single_end": false }, - [ - "test.unmapped_1.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", - "test.unmapped_2.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" - ] + "test.toTranscriptome.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "bam": [ @@ -633,8 +687,26 @@ ] ] ], - "versions": [ - "versions.yml:md5,b416145d7b5b8a080e832a7f7cde4c44" + "versions_gawk": [ + [ + "STAR_ALIGN", + "gawk", + "5.1.0" + ] + ], + "versions_samtools": [ + [ + "STAR_ALIGN", + "samtools", + "1.21" + ] + ], + "versions_star": [ + [ + "STAR_ALIGN", + "star", + "2.7.11b" + ] ], "wig": [ [ @@ -648,10 +720,10 @@ } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.2" + "nf-test": "0.9.3", + "nextflow": "25.10.3" }, - "timestamp": "2024-12-11T16:29:08.392620556" + "timestamp": "2026-02-03T09:28:38.483306917" }, "homo_sapiens - single_end": { "content": [ @@ -702,15 +774,35 @@ [ ], - [ - "versions.yml:md5,b416145d7b5b8a080e832a7f7cde4c44" - ] + { + "versions_gawk": [ + [ + "STAR_ALIGN", + "gawk", + "5.1.0" + ] + ], + "versions_samtools": [ + [ + "STAR_ALIGN", + "samtools", + "1.21" + ] + ], + "versions_star": [ + [ + "STAR_ALIGN", + "star", + "2.7.11b" + ] + ] + } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.2" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2024-12-11T16:21:34.549483887" + "timestamp": "2026-02-02T23:44:45.378997" }, "homo_sapiens - paired_end": { "content": [ @@ -761,15 +853,35 @@ [ ], - [ - "versions.yml:md5,b416145d7b5b8a080e832a7f7cde4c44" - ] + { + "versions_gawk": [ + [ + "STAR_ALIGN", + "gawk", + "5.1.0" + ] + ], + "versions_samtools": [ + [ + "STAR_ALIGN", + "samtools", + "1.21" + ] + ], + "versions_star": [ + [ + "STAR_ALIGN", + "star", + "2.7.11b" + ] + ] + } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.2" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2024-12-11T16:22:17.011253146" + "timestamp": "2026-02-02T23:50:50.657212" }, "homo_sapiens - paired_end - multiple - stub": { "content": [ @@ -793,6 +905,27 @@ ] ], "10": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Aligned.unsort.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "11": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.unmapped_1.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test.unmapped_2.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "12": [ [ { "id": "test", @@ -805,7 +938,7 @@ ] ] ], - "11": [ + "13": [ [ { "id": "test", @@ -814,7 +947,7 @@ "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "12": [ + "14": [ [ { "id": "test", @@ -823,7 +956,7 @@ "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "13": [ + "15": [ [ { "id": "test", @@ -832,7 +965,7 @@ "test.Chimeric.out.junction:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "14": [ + "16": [ [ { "id": "test", @@ -841,7 +974,7 @@ "test.out.sam:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "15": [ + "17": [ [ { "id": "test", @@ -850,7 +983,7 @@ "test.Signal.UniqueMultiple.str1.out.wig:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "16": [ + "18": [ [ { "id": "test", @@ -869,28 +1002,24 @@ ] ], "3": [ - "versions.yml:md5,b416145d7b5b8a080e832a7f7cde4c44" + [ + "STAR_ALIGN", + "star", + "2.7.11b" + ] ], "4": [ [ - { - "id": "test", - "single_end": false - }, - [ - "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", - "testXd.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" - ] + "STAR_ALIGN", + "samtools", + "1.21" ] ], "5": [ [ - { - "id": "test", - "single_end": false - }, - "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + "STAR_ALIGN", + "gawk", + "5.1.0" ] ], "6": [ @@ -899,7 +1028,11 @@ "id": "test", "single_end": false }, - "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + [ + "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "testXd.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ] ], "7": [ @@ -908,7 +1041,7 @@ "id": "test", "single_end": false }, - "test.toTranscriptome.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "8": [ @@ -917,7 +1050,7 @@ "id": "test", "single_end": false }, - "test.Aligned.unsort.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "9": [ @@ -926,10 +1059,7 @@ "id": "test", "single_end": false }, - [ - "test.unmapped_1.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", - "test.unmapped_2.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" - ] + "test.toTranscriptome.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "bam": [ @@ -1078,8 +1208,26 @@ ] ] ], - "versions": [ - "versions.yml:md5,b416145d7b5b8a080e832a7f7cde4c44" + "versions_gawk": [ + [ + "STAR_ALIGN", + "gawk", + "5.1.0" + ] + ], + "versions_samtools": [ + [ + "STAR_ALIGN", + "samtools", + "1.21" + ] + ], + "versions_star": [ + [ + "STAR_ALIGN", + "star", + "2.7.11b" + ] ], "wig": [ [ @@ -1093,10 +1241,10 @@ } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.2" + "nf-test": "0.9.3", + "nextflow": "25.10.3" }, - "timestamp": "2024-12-11T16:29:31.072104862" + "timestamp": "2026-02-03T09:28:51.288466085" }, "homo_sapiens - paired_end - multiple": { "content": [ @@ -1147,15 +1295,35 @@ [ ], - [ - "versions.yml:md5,b416145d7b5b8a080e832a7f7cde4c44" - ] + { + "versions_gawk": [ + [ + "STAR_ALIGN", + "gawk", + "5.1.0" + ] + ], + "versions_samtools": [ + [ + "STAR_ALIGN", + "samtools", + "1.21" + ] + ], + "versions_star": [ + [ + "STAR_ALIGN", + "star", + "2.7.11b" + ] + ] + } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.2" + "nf-test": "0.9.3", + "nextflow": "25.10.3" }, - "timestamp": "2024-12-11T16:28:26.645008336" + "timestamp": "2026-02-03T09:28:19.516063466" }, "homo_sapiens - paired_end - stub": { "content": [ @@ -1179,6 +1347,27 @@ ] ], "10": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Aligned.unsort.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "11": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.unmapped_1.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test.unmapped_2.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "12": [ [ { "id": "test", @@ -1191,7 +1380,7 @@ ] ] ], - "11": [ + "13": [ [ { "id": "test", @@ -1200,7 +1389,7 @@ "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "12": [ + "14": [ [ { "id": "test", @@ -1209,7 +1398,7 @@ "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "13": [ + "15": [ [ { "id": "test", @@ -1218,7 +1407,7 @@ "test.Chimeric.out.junction:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "14": [ + "16": [ [ { "id": "test", @@ -1227,7 +1416,7 @@ "test.out.sam:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "15": [ + "17": [ [ { "id": "test", @@ -1236,7 +1425,7 @@ "test.Signal.UniqueMultiple.str1.out.wig:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "16": [ + "18": [ [ { "id": "test", @@ -1255,28 +1444,24 @@ ] ], "3": [ - "versions.yml:md5,b416145d7b5b8a080e832a7f7cde4c44" + [ + "STAR_ALIGN", + "star", + "2.7.11b" + ] ], "4": [ [ - { - "id": "test", - "single_end": false - }, - [ - "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", - "testXd.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" - ] + "STAR_ALIGN", + "samtools", + "1.21" ] ], "5": [ [ - { - "id": "test", - "single_end": false - }, - "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + "STAR_ALIGN", + "gawk", + "5.1.0" ] ], "6": [ @@ -1285,7 +1470,11 @@ "id": "test", "single_end": false }, - "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + [ + "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "testXd.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ] ], "7": [ @@ -1294,7 +1483,7 @@ "id": "test", "single_end": false }, - "test.toTranscriptome.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "8": [ @@ -1303,7 +1492,7 @@ "id": "test", "single_end": false }, - "test.Aligned.unsort.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "9": [ @@ -1312,10 +1501,7 @@ "id": "test", "single_end": false }, - [ - "test.unmapped_1.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", - "test.unmapped_2.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" - ] + "test.toTranscriptome.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "bam": [ @@ -1464,8 +1650,26 @@ ] ] ], - "versions": [ - "versions.yml:md5,b416145d7b5b8a080e832a7f7cde4c44" + "versions_gawk": [ + [ + "STAR_ALIGN", + "gawk", + "5.1.0" + ] + ], + "versions_samtools": [ + [ + "STAR_ALIGN", + "samtools", + "1.21" + ] + ], + "versions_star": [ + [ + "STAR_ALIGN", + "star", + "2.7.11b" + ] ], "wig": [ [ @@ -1479,10 +1683,10 @@ } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.2" + "nf-test": "0.9.3", + "nextflow": "25.10.3" }, - "timestamp": "2024-12-11T16:28:53.816280805" + "timestamp": "2026-02-03T09:28:32.099657738" }, "homo_sapiens - paired_end - starfusion": { "content": [ @@ -1524,15 +1728,35 @@ [ ], - [ - "versions.yml:md5,b416145d7b5b8a080e832a7f7cde4c44" - ] + { + "versions_gawk": [ + [ + "STAR_ALIGN", + "gawk", + "5.1.0" + ] + ], + "versions_samtools": [ + [ + "STAR_ALIGN", + "samtools", + "1.21" + ] + ], + "versions_star": [ + [ + "STAR_ALIGN", + "star", + "2.7.11b" + ] + ] + } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.2" + "nf-test": "0.9.3", + "nextflow": "25.10.3" }, - "timestamp": "2024-12-11T16:27:14.136111964" + "timestamp": "2026-02-03T09:26:46.244829386" }, "homo_sapiens - paired_end - arriba": { "content": [ @@ -1573,15 +1797,35 @@ [ ], - [ - "versions.yml:md5,b416145d7b5b8a080e832a7f7cde4c44" - ] + { + "versions_gawk": [ + [ + "STAR_ALIGN", + "gawk", + "5.1.0" + ] + ], + "versions_samtools": [ + [ + "STAR_ALIGN", + "samtools", + "1.21" + ] + ], + "versions_star": [ + [ + "STAR_ALIGN", + "star", + "2.7.11b" + ] + ] + } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.2" + "nf-test": "0.9.3", + "nextflow": "25.10.3" }, - "timestamp": "2024-12-11T16:24:00.829462526" + "timestamp": "2026-02-03T09:22:41.580434639" }, "homo_sapiens - paired_end - starfusion - stub": { "content": [ @@ -1605,6 +1849,27 @@ ] ], "10": [ + [ + { + "id": "test", + "single_end": false + }, + "test.Aligned.unsort.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "11": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.unmapped_1.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test.unmapped_2.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "12": [ [ { "id": "test", @@ -1617,7 +1882,7 @@ ] ] ], - "11": [ + "13": [ [ { "id": "test", @@ -1626,7 +1891,7 @@ "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "12": [ + "14": [ [ { "id": "test", @@ -1635,7 +1900,7 @@ "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "13": [ + "15": [ [ { "id": "test", @@ -1644,7 +1909,7 @@ "test.Chimeric.out.junction:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "14": [ + "16": [ [ { "id": "test", @@ -1653,7 +1918,7 @@ "test.out.sam:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "15": [ + "17": [ [ { "id": "test", @@ -1662,7 +1927,7 @@ "test.Signal.UniqueMultiple.str1.out.wig:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "16": [ + "18": [ [ { "id": "test", @@ -1681,28 +1946,24 @@ ] ], "3": [ - "versions.yml:md5,b416145d7b5b8a080e832a7f7cde4c44" + [ + "STAR_ALIGN", + "star", + "2.7.11b" + ] ], "4": [ [ - { - "id": "test", - "single_end": false - }, - [ - "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", - "testXd.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" - ] + "STAR_ALIGN", + "samtools", + "1.21" ] ], "5": [ [ - { - "id": "test", - "single_end": false - }, - "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + "STAR_ALIGN", + "gawk", + "5.1.0" ] ], "6": [ @@ -1711,7 +1972,11 @@ "id": "test", "single_end": false }, - "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + [ + "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "testXd.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ] ], "7": [ @@ -1720,7 +1985,7 @@ "id": "test", "single_end": false }, - "test.toTranscriptome.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "8": [ @@ -1729,7 +1994,7 @@ "id": "test", "single_end": false }, - "test.Aligned.unsort.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "9": [ @@ -1738,10 +2003,7 @@ "id": "test", "single_end": false }, - [ - "test.unmapped_1.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", - "test.unmapped_2.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" - ] + "test.toTranscriptome.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "bam": [ @@ -1890,8 +2152,26 @@ ] ] ], - "versions": [ - "versions.yml:md5,b416145d7b5b8a080e832a7f7cde4c44" + "versions_gawk": [ + [ + "STAR_ALIGN", + "gawk", + "5.1.0" + ] + ], + "versions_samtools": [ + [ + "STAR_ALIGN", + "samtools", + "1.21" + ] + ], + "versions_star": [ + [ + "STAR_ALIGN", + "star", + "2.7.11b" + ] ], "wig": [ [ @@ -1905,9 +2185,9 @@ } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.2" + "nf-test": "0.9.3", + "nextflow": "25.10.3" }, - "timestamp": "2024-12-11T16:29:20.015372487" + "timestamp": "2026-02-03T09:28:44.836246776" } } \ No newline at end of file diff --git a/modules/nf-core/star/genomegenerate/main.nf b/modules/nf-core/star/genomegenerate/main.nf index 4eb95654b..16e41f9d3 100644 --- a/modules/nf-core/star/genomegenerate/main.nf +++ b/modules/nf-core/star/genomegenerate/main.nf @@ -13,7 +13,9 @@ process STAR_GENOMEGENERATE { output: tuple val(meta), path("star") , emit: index - path "versions.yml" , emit: versions + tuple val("${task.process}"), val('star'), eval('STAR --version | sed -e "s/STAR_//g"'), emit: versions_star, topic: versions + tuple val("${task.process}"), val('samtools'), eval("samtools --version | sed -n '1s/samtools //p'"), emit: versions_samtools, topic: versions + tuple val("${task.process}"), val('gawk'), eval("gawk --version | sed -n '1{s/GNU Awk //;s/,.*//;p}'"), emit: versions_gawk, topic: versions when: task.ext.when == null || task.ext.when @@ -34,13 +36,6 @@ process STAR_GENOMEGENERATE { --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 { """ @@ -57,13 +52,6 @@ process STAR_GENOMEGENERATE { --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 """ } @@ -87,13 +75,6 @@ process STAR_GENOMEGENERATE { 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 { """ @@ -107,13 +88,6 @@ process STAR_GENOMEGENERATE { 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 index 33c1f65f3..393a1275d 100644 --- a/modules/nf-core/star/genomegenerate/meta.yml +++ b/modules/nf-core/star/genomegenerate/meta.yml @@ -24,6 +24,7 @@ input: - fasta: type: file description: Fasta file of the reference genome + ontologies: [] - - meta2: type: map description: | @@ -32,9 +33,10 @@ input: - gtf: type: file description: GTF file of the reference genome + ontologies: [] output: - - index: - - meta: + index: + - - meta: type: map description: | Groovy Map containing sample information @@ -43,11 +45,67 @@ output: type: directory description: Folder containing the star index files pattern: "star" - - versions: - - versions.yml: - type: file - description: File containing software versions - pattern: "versions.yml" + versions_star: + - - ${task.process}: + type: string + description: The name of the process + - star: + type: string + description: The name of the tool + - 'STAR --version | sed -e "s/STAR_//g"': + type: eval + description: The expression to obtain the version of the tool + versions_samtools: + - - ${task.process}: + type: string + description: The name of the process + - samtools: + type: string + description: The name of the tool + - "samtools --version | sed -n '1s/samtools //p'": + type: eval + description: The expression to obtain the version of the tool + versions_gawk: + - - ${task.process}: + type: string + description: The name of the process + - gawk: + type: string + description: The name of the tool + - "gawk --version | sed -n '1{s/GNU Awk //;s/,.*//;p}'": + type: eval + description: The expression to obtain the version of the tool + +topics: + versions: + - - ${task.process}: + type: string + description: The name of the process + - star: + type: string + description: The name of the tool + - 'STAR --version | sed -e "s/STAR_//g"': + type: eval + description: The expression to obtain the version of the tool + - - ${task.process}: + type: string + description: The name of the process + - samtools: + type: string + description: The name of the tool + - "samtools --version | sed -n '1s/samtools //p'": + type: eval + description: The expression to obtain the version of the tool + - - ${task.process}: + type: string + description: The name of the process + - gawk: + type: string + description: The name of the tool + - "gawk --version | sed -n '1{s/GNU Awk //;s/,.*//;p}'": + type: eval + description: The expression to obtain the version of the tool + authors: - "@kevinmenden" - "@drpatelh" diff --git a/modules/nf-core/star/genomegenerate/tests/main.nf.test b/modules/nf-core/star/genomegenerate/tests/main.nf.test index fed98212d..c0c8ee1fe 100644 --- a/modules/nf-core/star/genomegenerate/tests/main.nf.test +++ b/modules/nf-core/star/genomegenerate/tests/main.nf.test @@ -3,6 +3,10 @@ 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") { @@ -26,7 +30,7 @@ nextflow_process { { assert process.success }, { assert snapshot( file(process.out.index[0][1]).listFiles().collect { it.getName() }.sort().toString(), - process.out.versions) + process.out.findAll { key, val -> key.startsWith('versions') }) .match() } ) } @@ -51,7 +55,7 @@ nextflow_process { { assert process.success }, { assert snapshot( file(process.out.index[0][1]).listFiles().collect { it.getName() }.sort().toString(), - process.out.versions + process.out.findAll { key, val -> key.startsWith('versions') } ).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 b79da991d..0c1e437e2 100644 --- a/modules/nf-core/star/genomegenerate/tests/main.nf.test.snap +++ b/modules/nf-core/star/genomegenerate/tests/main.nf.test.snap @@ -2,15 +2,35 @@ "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,0c6c5fab50cc8601f9072268a2f49aad" - ] + { + "versions_gawk": [ + [ + "STAR_GENOMEGENERATE", + "gawk", + "5.1.0" + ] + ], + "versions_samtools": [ + [ + "STAR_GENOMEGENERATE", + "samtools", + "1.21" + ] + ], + "versions_star": [ + [ + "STAR_GENOMEGENERATE", + "star", + "2.7.11b" + ] + ] + } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.2" + "nf-test": "0.9.3", + "nextflow": "25.10.3" }, - "timestamp": "2024-12-11T16:29:40.748676908" + "timestamp": "2026-02-02T14:41:49.00863479" }, "fasta_gtf_stub": { "content": [ @@ -41,7 +61,25 @@ ] ], "1": [ - "versions.yml:md5,0c6c5fab50cc8601f9072268a2f49aad" + [ + "STAR_GENOMEGENERATE", + "star", + "2.7.11b" + ] + ], + "2": [ + [ + "STAR_GENOMEGENERATE", + "samtools", + "1.21" + ] + ], + "3": [ + [ + "STAR_GENOMEGENERATE", + "gawk", + "5.1.0" + ] ], "index": [ [ @@ -68,16 +106,34 @@ ] ] ], - "versions": [ - "versions.yml:md5,0c6c5fab50cc8601f9072268a2f49aad" + "versions_gawk": [ + [ + "STAR_GENOMEGENERATE", + "gawk", + "5.1.0" + ] + ], + "versions_samtools": [ + [ + "STAR_GENOMEGENERATE", + "samtools", + "1.21" + ] + ], + "versions_star": [ + [ + "STAR_GENOMEGENERATE", + "star", + "2.7.11b" + ] ] } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.2" + "nf-test": "0.9.3", + "nextflow": "25.10.3" }, - "timestamp": "2024-12-11T16:30:11.024076742" + "timestamp": "2026-02-02T14:41:59.662412926" }, "fasta_stub": { "content": [ @@ -101,7 +157,25 @@ ] ], "1": [ - "versions.yml:md5,0c6c5fab50cc8601f9072268a2f49aad" + [ + "STAR_GENOMEGENERATE", + "star", + "2.7.11b" + ] + ], + "2": [ + [ + "STAR_GENOMEGENERATE", + "samtools", + "1.21" + ] + ], + "3": [ + [ + "STAR_GENOMEGENERATE", + "gawk", + "5.1.0" + ] ], "index": [ [ @@ -121,28 +195,66 @@ ] ] ], - "versions": [ - "versions.yml:md5,0c6c5fab50cc8601f9072268a2f49aad" + "versions_gawk": [ + [ + "STAR_GENOMEGENERATE", + "gawk", + "5.1.0" + ] + ], + "versions_samtools": [ + [ + "STAR_GENOMEGENERATE", + "samtools", + "1.21" + ] + ], + "versions_star": [ + [ + "STAR_GENOMEGENERATE", + "star", + "2.7.11b" + ] ] } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.2" + "nf-test": "0.9.3", + "nextflow": "25.10.3" }, - "timestamp": "2024-12-11T16:30:22.674364031" + "timestamp": "2026-02-02T14:42:05.002386149" }, "fasta": { "content": [ "[Genome, Log.out, SA, SAindex, chrLength.txt, chrName.txt, chrNameLength.txt, chrStart.txt, genomeParameters.txt]", - [ - "versions.yml:md5,0c6c5fab50cc8601f9072268a2f49aad" - ] + { + "versions_gawk": [ + [ + "STAR_GENOMEGENERATE", + "gawk", + "5.1.0" + ] + ], + "versions_samtools": [ + [ + "STAR_GENOMEGENERATE", + "samtools", + "1.21" + ] + ], + "versions_star": [ + [ + "STAR_GENOMEGENERATE", + "star", + "2.7.11b" + ] + ] + } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.2" + "nf-test": "0.9.3", + "nextflow": "25.10.3" }, - "timestamp": "2024-12-11T16:29:57.958812354" + "timestamp": "2026-02-02T14:41:54.327031765" } } \ No newline at end of file diff --git a/modules/nf-core/stringtie/stringtie/main.nf b/modules/nf-core/stringtie/stringtie/main.nf index 4635c8c5b..1e59bb97a 100644 --- a/modules/nf-core/stringtie/stringtie/main.nf +++ b/modules/nf-core/stringtie/stringtie/main.nf @@ -16,7 +16,7 @@ process STRINGTIE_STRINGTIE { tuple val(meta), path("*.abundance.txt") , emit: abundance tuple val(meta), path("*.coverage.gtf") , optional: true, emit: coverage_gtf tuple val(meta), path("*.ballgown") , optional: true, emit: ballgown - path "versions.yml" , emit: versions + tuple val("${task.process}"), val('stringtie'), eval("stringtie --version"), emit: versions_stringtie, topic: versions when: task.ext.when == null || task.ext.when @@ -45,11 +45,6 @@ process STRINGTIE_STRINGTIE { $ballgown \\ -p $task.cpus \\ $args - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - stringtie: \$(stringtie --version 2>&1) - END_VERSIONS """ stub: @@ -59,10 +54,5 @@ process STRINGTIE_STRINGTIE { touch ${prefix}.gene.abundance.txt touch ${prefix}.coverage.gtf touch ${prefix}.ballgown - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - stringtie: \$(stringtie --version 2>&1) - END_VERSIONS """ } diff --git a/modules/nf-core/stringtie/stringtie/meta.yml b/modules/nf-core/stringtie/stringtie/meta.yml index e55b2abfc..dcae4abde 100644 --- a/modules/nf-core/stringtie/stringtie/meta.yml +++ b/modules/nf-core/stringtie/stringtie/meta.yml @@ -23,13 +23,15 @@ input: type: file description: | Stringtie transcript gtf output(s). - - - annotation_gtf: - type: file - description: | - Annotation gtf file (optional). + ontologies: [] + - annotation_gtf: + type: file + description: | + Annotation gtf file (optional). + ontologies: [] output: - - transcript_gtf: - - meta: + transcript_gtf: + - - meta: type: map description: | Groovy Map containing sample information @@ -38,8 +40,9 @@ output: type: file description: transcript gtf pattern: "*.{transcripts.gtf}" - - abundance: - - meta: + ontologies: [] + abundance: + - - meta: type: map description: | Groovy Map containing sample information @@ -48,8 +51,9 @@ output: type: file description: abundance pattern: "*.{abundance.txt}" - - coverage_gtf: - - meta: + ontologies: [] + coverage_gtf: + - - meta: type: map description: | Groovy Map containing sample information @@ -58,8 +62,9 @@ output: type: file description: coverage gtf pattern: "*.{coverage.gtf}" - - ballgown: - - meta: + ontologies: [] + ballgown: + - - meta: type: map description: | Groovy Map containing sample information @@ -68,11 +73,30 @@ output: type: file description: for running ballgown pattern: "*.{ballgown}" - - versions: - - versions.yml: - type: file - description: File containing software versions - pattern: "versions.yml" + ontologies: [] + versions_stringtie: + - - ${task.process}: + type: string + description: The name of the process + - stringtie: + type: string + description: The name of the tool + - "stringtie --version": + type: eval + description: The expression to obtain the version of the tool + +topics: + versions: + - - ${task.process}: + type: string + description: The name of the process + - stringtie: + type: string + description: The name of the tool + - "stringtie --version": + type: eval + description: The expression to obtain the version of the tool + authors: - "@drpatelh" maintainers: diff --git a/modules/nf-core/stringtie/stringtie/nextflow.config b/modules/nf-core/stringtie/stringtie/nextflow.config index abc40e2ce..6048a28e0 100644 --- a/modules/nf-core/stringtie/stringtie/nextflow.config +++ b/modules/nf-core/stringtie/stringtie/nextflow.config @@ -1,15 +1,13 @@ -if (!params.skip_stringtie) { - process { - withName: 'STRINGTIE_STRINGTIE' { - ext.args = { [ - '-v', - params.stringtie_ignore_gtf ? '' : '-e' - ].join(' ').trim() } - publishDir = [ - path: { "${params.outdir}/${params.aligner}/stringtie" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } +process { + withName: 'STRINGTIE_STRINGTIE' { + ext.args = { [ + '-v', + params.stringtie_ignore_gtf ? '' : '-e' + ].join(' ').trim() } + publishDir = [ + path: { "${params.outdir}/${params.aligner}/stringtie" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] } } diff --git a/modules/nf-core/stringtie/stringtie/tests/main.nf.test b/modules/nf-core/stringtie/stringtie/tests/main.nf.test index dc315a314..c11bf1893 100644 --- a/modules/nf-core/stringtie/stringtie/tests/main.nf.test +++ b/modules/nf-core/stringtie/stringtie/tests/main.nf.test @@ -4,6 +4,10 @@ nextflow_process { script "../main.nf" process "STRINGTIE_STRINGTIE" config "./nextflow.config" + tag "modules" + tag "modules_nfcore" + tag "stringtie" + tag "stringtie/stringtie" test("sarscov2 [bam] - forward strandedness") { @@ -25,7 +29,7 @@ nextflow_process { { assert snapshot( process.out.abundance, process.out.transcript_gtf, - process.out.versions + process.out.findAll { key, val -> key.startsWith('versions') } ).match() } ) } @@ -52,7 +56,7 @@ nextflow_process { process.out.abundance, process.out.ballgown, process.out.transcript_gtf, - process.out.versions + process.out.findAll { key, val -> key.startsWith('versions') } ).match() } ) } @@ -78,7 +82,7 @@ nextflow_process { { assert snapshot( process.out.abundance, process.out.transcript_gtf, - process.out.versions + process.out.findAll { key, val -> key.startsWith('versions') } ).match() } ) } @@ -105,7 +109,7 @@ nextflow_process { process.out.abundance, process.out.ballgown, process.out.transcript_gtf, - process.out.versions + process.out.findAll { key, val -> key.startsWith('versions') } ).match() } ) } diff --git a/modules/nf-core/stringtie/stringtie/tests/main.nf.test.snap b/modules/nf-core/stringtie/stringtie/tests/main.nf.test.snap index d4645de3e..318dd35f7 100644 --- a/modules/nf-core/stringtie/stringtie/tests/main.nf.test.snap +++ b/modules/nf-core/stringtie/stringtie/tests/main.nf.test.snap @@ -34,15 +34,21 @@ "test.transcripts.gtf:md5,37154e7bda96544f24506ee902bb561d" ] ], - [ - "versions.yml:md5,06593ea00cc35bf06f2de2753e0c3913" - ] + { + "versions_stringtie": [ + [ + "STRINGTIE_STRINGTIE", + "stringtie", + "2.2.3" + ] + ] + } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.3", + "nextflow": "25.10.3" }, - "timestamp": "2024-10-18T09:56:50.294157199" + "timestamp": "2026-02-02T16:30:11.16528789" }, "sarscov2 [bam] - forward strandedness": { "content": [ @@ -64,15 +70,21 @@ "test.transcripts.gtf:md5,6087dfc9700a52d9e4a1ae3fcd1d1dfd" ] ], - [ - "versions.yml:md5,06593ea00cc35bf06f2de2753e0c3913" - ] + { + "versions_stringtie": [ + [ + "STRINGTIE_STRINGTIE", + "stringtie", + "2.2.3" + ] + ] + } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.3", + "nextflow": "25.10.3" }, - "timestamp": "2024-10-18T09:56:39.4249133" + "timestamp": "2026-02-02T16:30:05.908980074" }, "sarscov2 [bam] - forward strandedness - stub": { "content": [ @@ -114,7 +126,11 @@ ] ], "4": [ - "versions.yml:md5,06593ea00cc35bf06f2de2753e0c3913" + [ + "STRINGTIE_STRINGTIE", + "stringtie", + "2.2.3" + ] ], "abundance": [ [ @@ -152,16 +168,20 @@ "test.transcripts.gtf:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "versions": [ - "versions.yml:md5,06593ea00cc35bf06f2de2753e0c3913" + "versions_stringtie": [ + [ + "STRINGTIE_STRINGTIE", + "stringtie", + "2.2.3" + ] ] } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.3", + "nextflow": "25.10.3" }, - "timestamp": "2024-10-18T09:57:23.008470065" + "timestamp": "2026-02-02T16:30:26.94909715" }, "sarscov2 [bam] - forward strandedness + reference annotation - stub": { "content": [ @@ -203,7 +223,11 @@ ] ], "4": [ - "versions.yml:md5,06593ea00cc35bf06f2de2753e0c3913" + [ + "STRINGTIE_STRINGTIE", + "stringtie", + "2.2.3" + ] ], "abundance": [ [ @@ -241,16 +265,20 @@ "test.transcripts.gtf:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "versions": [ - "versions.yml:md5,06593ea00cc35bf06f2de2753e0c3913" + "versions_stringtie": [ + [ + "STRINGTIE_STRINGTIE", + "stringtie", + "2.2.3" + ] ] } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.3", + "nextflow": "25.10.3" }, - "timestamp": "2024-10-18T09:57:33.622824981" + "timestamp": "2026-02-02T16:30:32.157264403" }, "sarscov2 [bam] - reverse strandedness + reference annotation - stub": { "content": [ @@ -292,7 +320,11 @@ ] ], "4": [ - "versions.yml:md5,06593ea00cc35bf06f2de2753e0c3913" + [ + "STRINGTIE_STRINGTIE", + "stringtie", + "2.2.3" + ] ], "abundance": [ [ @@ -330,16 +362,20 @@ "test.transcripts.gtf:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "versions": [ - "versions.yml:md5,06593ea00cc35bf06f2de2753e0c3913" + "versions_stringtie": [ + [ + "STRINGTIE_STRINGTIE", + "stringtie", + "2.2.3" + ] ] } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.3", + "nextflow": "25.10.3" }, - "timestamp": "2024-10-18T09:57:55.803421433" + "timestamp": "2026-02-02T16:30:42.741125528" }, "sarscov2 [bam] - reverse strandedness - stub": { "content": [ @@ -381,7 +417,11 @@ ] ], "4": [ - "versions.yml:md5,06593ea00cc35bf06f2de2753e0c3913" + [ + "STRINGTIE_STRINGTIE", + "stringtie", + "2.2.3" + ] ], "abundance": [ [ @@ -419,16 +459,20 @@ "test.transcripts.gtf:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "versions": [ - "versions.yml:md5,06593ea00cc35bf06f2de2753e0c3913" + "versions_stringtie": [ + [ + "STRINGTIE_STRINGTIE", + "stringtie", + "2.2.3" + ] ] } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.3", + "nextflow": "25.10.3" }, - "timestamp": "2024-10-18T09:57:44.825389635" + "timestamp": "2026-02-02T16:30:37.444482002" }, "sarscov2 [bam] - reverse strandedness + reference annotation": { "content": [ @@ -465,15 +509,21 @@ "test.transcripts.gtf:md5,fbabb4e3888bbede67f11f692e484880" ] ], - [ - "versions.yml:md5,06593ea00cc35bf06f2de2753e0c3913" - ] + { + "versions_stringtie": [ + [ + "STRINGTIE_STRINGTIE", + "stringtie", + "2.2.3" + ] + ] + } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.3", + "nextflow": "25.10.3" }, - "timestamp": "2024-10-18T09:57:11.793664242" + "timestamp": "2026-02-02T16:30:21.762442003" }, "sarscov2 [bam] - reverse strandedness": { "content": [ @@ -495,14 +545,20 @@ "test.transcripts.gtf:md5,01d6da00a3c458420841e57427297183" ] ], - [ - "versions.yml:md5,06593ea00cc35bf06f2de2753e0c3913" - ] + { + "versions_stringtie": [ + [ + "STRINGTIE_STRINGTIE", + "stringtie", + "2.2.3" + ] + ] + } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.3", + "nextflow": "25.10.3" }, - "timestamp": "2024-10-18T09:57:01.166309777" + "timestamp": "2026-02-02T16:30:16.466823767" } } \ No newline at end of file diff --git a/modules/nf-core/subread/featurecounts/main.nf b/modules/nf-core/subread/featurecounts/main.nf index 85cd18a3d..1ffcbf54d 100644 --- a/modules/nf-core/subread/featurecounts/main.nf +++ b/modules/nf-core/subread/featurecounts/main.nf @@ -13,7 +13,7 @@ process SUBREAD_FEATURECOUNTS { output: tuple val(meta), path("*featureCounts.tsv"), emit: counts tuple val(meta), path("*featureCounts.tsv.summary"), emit: summary - path "versions.yml", emit: versions + tuple val("${task.process}"), val('subread'), eval("featureCounts -v 2>&1 | sed 's/featureCounts v//'"), emit: versions_subread, topic: versions when: task.ext.when == null || task.ext.when @@ -39,11 +39,6 @@ process SUBREAD_FEATURECOUNTS { -s ${strandedness} \\ -o ${prefix}.featureCounts.tsv \\ ${bams.join(' ')} - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - subread: \$( echo \$(featureCounts -v 2>&1) | sed -e "s/featureCounts v//g") - END_VERSIONS """ stub: @@ -51,10 +46,5 @@ process SUBREAD_FEATURECOUNTS { """ touch ${prefix}.featureCounts.tsv touch ${prefix}.featureCounts.tsv.summary - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - subread: \$( echo \$(featureCounts -v 2>&1) | sed -e "s/featureCounts v//g") - END_VERSIONS """ } diff --git a/modules/nf-core/subread/featurecounts/meta.yml b/modules/nf-core/subread/featurecounts/meta.yml index 83c322af2..eafcd1f8f 100644 --- a/modules/nf-core/subread/featurecounts/meta.yml +++ b/modules/nf-core/subread/featurecounts/meta.yml @@ -26,13 +26,15 @@ input: type: file description: BAM files containing mapped reads pattern: "*.bam" + ontologies: [] - annotation: type: file description: Genomic features annotation in GTF or SAF pattern: "*.{gtf,saf}" + ontologies: [] output: - - counts: - - meta: + counts: + - - meta: type: map description: | Groovy Map containing sample information @@ -41,8 +43,10 @@ output: type: file description: Counts of reads mapping to features pattern: "*featureCounts.tsv" - - summary: - - meta: + ontologies: + - edam: http://edamontology.org/format_3475 # TSV + summary: + - - meta: type: map description: | Groovy Map containing sample information @@ -51,11 +55,30 @@ output: type: file description: Summary log file pattern: "*.featureCounts.tsv.summary" - - versions: - - versions.yml: - type: file - description: File containing software versions - pattern: "versions.yml" + ontologies: [] + versions_subread: + - - ${task.process}: + type: string + description: The name of the process + - subread: + type: string + description: The name of the tool + - "featureCounts -v 2>&1 | sed 's/featureCounts v//'": + type: eval + description: The expression to obtain the version of the tool + +topics: + versions: + - - ${task.process}: + type: string + description: The name of the process + - subread: + type: string + description: The name of the tool + - "featureCounts -v 2>&1 | sed 's/featureCounts v//'": + type: eval + description: The expression to obtain the version of the tool + authors: - "@ntoda03" maintainers: diff --git a/modules/nf-core/subread/featurecounts/nextflow.config b/modules/nf-core/subread/featurecounts/nextflow.config index b86d1b8e5..f94e42133 100644 --- a/modules/nf-core/subread/featurecounts/nextflow.config +++ b/modules/nf-core/subread/featurecounts/nextflow.config @@ -1,26 +1,22 @@ -if (!params.skip_qc) { - if (!params.skip_biotype_qc && params.featurecounts_group_type) { - process { - withName: 'SUBREAD_FEATURECOUNTS' { - ext.args = { [ - '-B -C', - params.gencode ? "-g gene_type" : "-g $params.featurecounts_group_type", - "-t $params.featurecounts_feature_type" - ].join(' ').trim() } - publishDir = [ - path: { "${params.outdir}/${params.aligner}/featurecounts" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } +process { + withName: 'SUBREAD_FEATURECOUNTS' { + ext.args = { [ + '-B -C', + params.gencode ? "-g gene_type" : "-g $params.featurecounts_group_type", + "-t $params.featurecounts_feature_type" + ].join(' ').trim() } + publishDir = [ + path: { "${params.outdir}/${params.aligner}/featurecounts" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } - withName: 'MULTIQC_CUSTOM_BIOTYPE' { - publishDir = [ - path: { "${params.outdir}/${params.aligner}/featurecounts" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } - } + withName: 'MULTIQC_CUSTOM_BIOTYPE' { + publishDir = [ + path: { "${params.outdir}/${params.aligner}/featurecounts" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] } } diff --git a/modules/nf-core/subread/featurecounts/tests/main.nf.test b/modules/nf-core/subread/featurecounts/tests/main.nf.test index 3c0c829bf..8ce452665 100644 --- a/modules/nf-core/subread/featurecounts/tests/main.nf.test +++ b/modules/nf-core/subread/featurecounts/tests/main.nf.test @@ -4,6 +4,10 @@ nextflow_process { script "../main.nf" process "SUBREAD_FEATURECOUNTS" config "./nextflow.config" + tag "modules" + tag "modules_nfcore" + tag "subread" + tag "subread/featurecounts" test("sarscov2 [bam] - forward") { @@ -22,9 +26,11 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(process.out.counts).match("forward_counts") }, - { assert snapshot(process.out.summary).match("forward_summary") }, - { assert snapshot(process.out.versions).match("forward_versions") } + { assert snapshot( + process.out.counts, + process.out.summary, + process.out.findAll { key, val -> key.startsWith('versions') } + ).match() } ) } } @@ -70,9 +76,11 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(process.out.counts).match("reverse_counts") }, - { assert snapshot(process.out.summary).match("reverse_summary") }, - { assert snapshot(process.out.versions).match("reverse_versions") } + { assert snapshot( + process.out.counts, + process.out.summary, + process.out.findAll { key, val -> key.startsWith('versions') } + ).match() } ) } } @@ -118,9 +126,11 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(process.out.counts).match("unstranded_counts") }, - { assert snapshot(process.out.summary).match("unstranded_summary") }, - { assert snapshot(process.out.versions).match("unstranded_versions") } + { assert snapshot( + process.out.counts, + process.out.summary, + process.out.findAll { key, val -> key.startsWith('versions') } + ).match() } ) } } diff --git a/modules/nf-core/subread/featurecounts/tests/main.nf.test.snap b/modules/nf-core/subread/featurecounts/tests/main.nf.test.snap index ff8b62a60..145d49b8f 100644 --- a/modules/nf-core/subread/featurecounts/tests/main.nf.test.snap +++ b/modules/nf-core/subread/featurecounts/tests/main.nf.test.snap @@ -1,5 +1,5 @@ { - "forward_counts": { + "sarscov2 [bam] - forward": { "content": [ [ [ @@ -10,51 +10,32 @@ }, "test.featureCounts.tsv:md5,21ff44bfaa4a3d8e8b7e749078f7a201" ] - ] - ], - "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.1" - }, - "timestamp": "2024-12-01T11:28:20.989068" - }, - "unstranded_counts": { - "content": [ + ], [ [ { "id": "test", "single_end": true, - "strandedness": "unstranded" + "strandedness": "forward" }, - "test.featureCounts.tsv:md5,9474f78d2d1d43613cbc16c10ba15047" + "test.featureCounts.tsv.summary:md5,8f602ff9a8ef467af43294e80b367cdf" ] - ] - ], - "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.1" - }, - "timestamp": "2024-12-01T11:28:33.648742" - }, - "reverse_summary": { - "content": [ - [ - [ - { - "id": "test", - "single_end": true, - "strandedness": "reverse" - }, - "test.featureCounts.tsv.summary:md5,7cfa30ad678b9bc1bc63afbb0281547b" + ], + { + "versions_subread": [ + [ + "SUBREAD_FEATURECOUNTS", + "subread", + "2.0.6" + ] ] - ] + } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.1" + "nf-test": "0.9.3", + "nextflow": "25.10.3" }, - "timestamp": "2024-12-01T11:28:27.457841" + "timestamp": "2026-02-02T14:44:54.308461465" }, "sarscov2 [bam] - forward - stub": { "content": [ @@ -80,7 +61,11 @@ ] ], "2": [ - "versions.yml:md5,956ebb9da6a1747fc47d393fb5931fc2" + [ + "SUBREAD_FEATURECOUNTS", + "subread", + "2.0.6" + ] ], "counts": [ [ @@ -102,16 +87,58 @@ "test.featureCounts.tsv.summary:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "versions": [ - "versions.yml:md5,956ebb9da6a1747fc47d393fb5931fc2" + "versions_subread": [ + [ + "SUBREAD_FEATURECOUNTS", + "subread", + "2.0.6" + ] ] } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.1" + "nf-test": "0.9.3", + "nextflow": "25.10.3" }, - "timestamp": "2024-12-01T11:29:21.075114" + "timestamp": "2026-02-02T14:44:59.542545235" + }, + "sarscov2 [bam] - unstranded": { + "content": [ + [ + [ + { + "id": "test", + "single_end": true, + "strandedness": "unstranded" + }, + "test.featureCounts.tsv:md5,9474f78d2d1d43613cbc16c10ba15047" + ] + ], + [ + [ + { + "id": "test", + "single_end": true, + "strandedness": "unstranded" + }, + "test.featureCounts.tsv.summary:md5,23164b79f9f23f11c82820db61a35560" + ] + ], + { + "versions_subread": [ + [ + "SUBREAD_FEATURECOUNTS", + "subread", + "2.0.6" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.3" + }, + "timestamp": "2026-02-02T14:45:15.194324716" }, "sarscov2 [bam] - reverse - stub": { "content": [ @@ -137,7 +164,11 @@ ] ], "2": [ - "versions.yml:md5,956ebb9da6a1747fc47d393fb5931fc2" + [ + "SUBREAD_FEATURECOUNTS", + "subread", + "2.0.6" + ] ], "counts": [ [ @@ -159,18 +190,22 @@ "test.featureCounts.tsv.summary:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "versions": [ - "versions.yml:md5,956ebb9da6a1747fc47d393fb5931fc2" + "versions_subread": [ + [ + "SUBREAD_FEATURECOUNTS", + "subread", + "2.0.6" + ] ] } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.1" + "nf-test": "0.9.3", + "nextflow": "25.10.3" }, - "timestamp": "2024-12-01T11:29:27.146094" + "timestamp": "2026-02-02T14:45:09.979159361" }, - "reverse_counts": { + "sarscov2 [bam] - reverse": { "content": [ [ [ @@ -181,13 +216,32 @@ }, "test.featureCounts.tsv:md5,7df6092fdc65ce40b71c64e0c97f95c6" ] - ] + ], + [ + [ + { + "id": "test", + "single_end": true, + "strandedness": "reverse" + }, + "test.featureCounts.tsv.summary:md5,7cfa30ad678b9bc1bc63afbb0281547b" + ] + ], + { + "versions_subread": [ + [ + "SUBREAD_FEATURECOUNTS", + "subread", + "2.0.6" + ] + ] + } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.1" + "nf-test": "0.9.3", + "nextflow": "25.10.3" }, - "timestamp": "2024-12-01T11:28:27.448485" + "timestamp": "2026-02-02T14:45:04.836250949" }, "sarscov2 [bam] - unstranded - stub": { "content": [ @@ -213,7 +267,11 @@ ] ], "2": [ - "versions.yml:md5,956ebb9da6a1747fc47d393fb5931fc2" + [ + "SUBREAD_FEATURECOUNTS", + "subread", + "2.0.6" + ] ], "counts": [ [ @@ -235,89 +293,19 @@ "test.featureCounts.tsv.summary:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "versions": [ - "versions.yml:md5,956ebb9da6a1747fc47d393fb5931fc2" + "versions_subread": [ + [ + "SUBREAD_FEATURECOUNTS", + "subread", + "2.0.6" + ] ] } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.1" - }, - "timestamp": "2024-12-01T11:29:33.287109" - }, - "forward_summary": { - "content": [ - [ - [ - { - "id": "test", - "single_end": true, - "strandedness": "forward" - }, - "test.featureCounts.tsv.summary:md5,8f602ff9a8ef467af43294e80b367cdf" - ] - ] - ], - "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.1" - }, - "timestamp": "2024-12-01T11:28:21.006184" - }, - "forward_versions": { - "content": [ - [ - "versions.yml:md5,956ebb9da6a1747fc47d393fb5931fc2" - ] - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" - }, - "timestamp": "2024-10-18T10:19:48.001158764" - }, - "unstranded_summary": { - "content": [ - [ - [ - { - "id": "test", - "single_end": true, - "strandedness": "unstranded" - }, - "test.featureCounts.tsv.summary:md5,23164b79f9f23f11c82820db61a35560" - ] - ] - ], - "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.1" - }, - "timestamp": "2024-12-01T11:28:33.657543" - }, - "reverse_versions": { - "content": [ - [ - "versions.yml:md5,956ebb9da6a1747fc47d393fb5931fc2" - ] - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" - }, - "timestamp": "2024-10-18T10:20:24.551053149" - }, - "unstranded_versions": { - "content": [ - [ - "versions.yml:md5,956ebb9da6a1747fc47d393fb5931fc2" - ] - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.3", + "nextflow": "25.10.3" }, - "timestamp": "2024-10-18T10:21:03.25895568" + "timestamp": "2026-02-02T14:45:20.368253962" } } \ No newline at end of file diff --git a/modules/nf-core/summarizedexperiment/summarizedexperiment/meta.yml b/modules/nf-core/summarizedexperiment/summarizedexperiment/meta.yml index 820d4f163..a2a4f6ab2 100644 --- a/modules/nf-core/summarizedexperiment/summarizedexperiment/meta.yml +++ b/modules/nf-core/summarizedexperiment/summarizedexperiment/meta.yml @@ -43,6 +43,9 @@ input: Metadata on matrix features. One column must contain all matrix row IDs. pattern: "*.{csv,tsv}" + ontologies: + - edam: http://edamontology.org/format_3752 # CSV + - edam: http://edamontology.org/format_3475 # TSV - - meta3: type: map description: | @@ -55,9 +58,12 @@ input: Metadata on matrix columns. One column must contain all matrix column IDs. pattern: "*.{csv,tsv}" + ontologies: + - edam: http://edamontology.org/format_3752 # CSV + - edam: http://edamontology.org/format_3475 # TSV output: - - rds: - - meta: + rds: + - - meta: type: map description: | Groovy Map containing information related to the experiment as a whole @@ -66,8 +72,9 @@ output: type: file description: Serialised SummarizedExperiment object pattern: "*.SummarizedExperiment.rds" - - log: - - meta: + ontologies: [] + log: + - - meta: type: map description: | Groovy Map containing information related to the experiment as a whole @@ -76,11 +83,14 @@ output: type: file description: dump of R SessionInfo pattern: "*.log" - - versions: - - versions.yml: - type: file - description: File containing software versions - pattern: "versions.yml" + ontologies: [] + versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" + ontologies: + - edam: http://edamontology.org/format_3750 # YAML authors: - "@pinin4fjords" maintainers: diff --git a/modules/nf-core/summarizedexperiment/summarizedexperiment/tests/main.nf.test b/modules/nf-core/summarizedexperiment/summarizedexperiment/tests/main.nf.test index d0cfb9524..aafead6db 100644 --- a/modules/nf-core/summarizedexperiment/summarizedexperiment/tests/main.nf.test +++ b/modules/nf-core/summarizedexperiment/summarizedexperiment/tests/main.nf.test @@ -4,6 +4,14 @@ nextflow_process { script "../main.nf" process "SUMMARIZEDEXPERIMENT_SUMMARIZEDEXPERIMENT" + tag "modules" + tag "modules_nfcore" + tag "custom/tx2gene" + tag "tximeta" + tag "tximeta/tximport" + tag "summarizedexperiment" + tag "summarizedexperiment/summarizedexperiment" + tag "untar" setup { diff --git a/modules/nf-core/sylph/profile/environment.yml b/modules/nf-core/sylph/profile/environment.yml new file mode 100644 index 000000000..9b3d985e7 --- /dev/null +++ b/modules/nf-core/sylph/profile/environment.yml @@ -0,0 +1,7 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::sylph=0.9.0 diff --git a/modules/nf-core/sylph/profile/main.nf b/modules/nf-core/sylph/profile/main.nf new file mode 100644 index 000000000..c96f1cf5e --- /dev/null +++ b/modules/nf-core/sylph/profile/main.nf @@ -0,0 +1,39 @@ +process SYLPH_PROFILE { + 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/sylph:0.9.0--ha6fb395_0' + : 'biocontainers/sylph:0.9.0--ha6fb395_0'}" + + input: + tuple val(meta), path(reads) + path database + + output: + tuple val(meta), path('*.tsv'), emit: profile_out + tuple val("${task.process}"), val('sylph'), eval('sylph -V | awk "{print \$2}"'), topic: versions, emit: versions_sylph + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def input = meta.single_end ? "${reads}" : "-1 ${reads[0]} -2 ${reads[1]}" + """ + sylph profile \\ + -t ${task.cpus} \\ + ${args} \\ + ${database}\\ + ${input} \\ + -o ${prefix}.tsv + """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.tsv + """ +} diff --git a/modules/nf-core/sylph/profile/meta.yml b/modules/nf-core/sylph/profile/meta.yml new file mode 100644 index 000000000..bf33d4d19 --- /dev/null +++ b/modules/nf-core/sylph/profile/meta.yml @@ -0,0 +1,75 @@ +name: "sylph_profile" +description: Sylph profile command for taxonoming profiling +keywords: + - profile + - metagenomics + - sylph + - classification +tools: + - sylph: + description: Sylph quickly enables querying of genomes against even low-coverage + shotgun metagenomes to find nearest neighbour ANI. + homepage: https://github.com/bluenote-1577/sylph + documentation: https://github.com/bluenote-1577/sylph + tool_dev_url: https://github.com/bluenote-1577/sylph + doi: 10.1038/s41587-024-02412-y + licence: ["MIT"] + identifier: biotools:sylph +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/FASTA files of size 1 and 2 for single-end and paired-end data, + respectively. They are automatically sketched to .sylsp/.syldb + ontologies: [] + - database: + type: file + description: Pre-sketched *.syldb/*.sylsp files. Raw single-end fastq/fasta are + allowed and will be automatically sketched to .sylsp/.syldb. + pattern: "*.{syldb,sylsp,fasta,fastq}" + ontologies: + - edam: http://edamontology.org/format_1930 # FASTQ +output: + profile_out: + - - meta: + type: map + description: Groovy Map containing sample information + - "*.tsv": + type: file + description: Output file of species-level taxonomic profiling with abundances + and ANIs. + pattern: "*tsv" + ontologies: [] + versions_sylph: + - - ${task.process}: + type: string + description: The process the versions were collected from + - sylph: + type: string + description: The tool name + - sylph -V | awk "{print \$2}": + type: eval + description: The expression to obtain the version of the tool + +topics: + versions: + - - ${task.process}: + type: string + description: The process the versions were collected from + - sylph: + type: string + description: The tool name + - sylph -V | awk "{print \$2}": + type: eval + description: The expression to obtain the version of the tool + +authors: + - "@jiahang1234" + - "@sofstam" +maintainers: + - "@sofstam" diff --git a/modules/nf-core/sylph/profile/nextflow.config b/modules/nf-core/sylph/profile/nextflow.config new file mode 100644 index 000000000..ffb139464 --- /dev/null +++ b/modules/nf-core/sylph/profile/nextflow.config @@ -0,0 +1,12 @@ +process { + withName: 'SYLPH_PROFILE' { + // -c 100 is recommended compression for reads + // -u option provides information on unknown reads, but this does not appear in the sylph-tax MultiQC output + // See https://sylph-docs.github.io/sylph-cookbook/ for full details + ext.args = "-c 100 -u" + publishDir = [ + path: { "${params.outdir}/${params.aligner}/contaminants/sylph" }, + mode: params.publish_dir_mode + ] + } +} diff --git a/modules/nf-core/sylph/profile/tests/main.nf.test b/modules/nf-core/sylph/profile/tests/main.nf.test new file mode 100644 index 000000000..4728d0dff --- /dev/null +++ b/modules/nf-core/sylph/profile/tests/main.nf.test @@ -0,0 +1,80 @@ +nextflow_process { + + name "Test Process SYLPH_PROFILE" + script "../main.nf" + process "SYLPH_PROFILE" + tag "modules" + tag "modules_nfcore" + tag "sylph" + tag "sylph/profile" + + test("sarscov2 illumina single-end [fastq_gz]") { + 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) + ] + ] + input[1] = file(params.modules_testdata_base_path +'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + """ + } + } + + then { + assert process.success + assert snapshot( + process.out.findAll { key, val -> key.startsWith("versions") }, + file(process.out.profile_out[0][1]).readLines()[0] + ).match() + } + } + + test("sarscov2 illumina paired-end [fastq_gz]") { + 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] = file(params.modules_testdata_base_path +'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + """ + } + } + + then { + assert process.success + assert snapshot( + process.out.findAll { key, val -> key.startsWith("versions") }, + file(process.out.profile_out[0][1]).readLines()[0] + ).match() + } + } + + test("sarscov2 illumina paired-end [fastq_gz]-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] = file(params.modules_testdata_base_path +'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + """ + } + } + + then { + assert process.success + assert snapshot(process.out).match() + } + } +} diff --git a/modules/nf-core/sylph/profile/tests/main.nf.test.snap b/modules/nf-core/sylph/profile/tests/main.nf.test.snap new file mode 100644 index 000000000..61f9edd75 --- /dev/null +++ b/modules/nf-core/sylph/profile/tests/main.nf.test.snap @@ -0,0 +1,81 @@ +{ + "sarscov2 illumina paired-end [fastq_gz]": { + "content": [ + { + "versions_sylph": [ + [ + "SYLPH_PROFILE", + "sylph", + "sylph 0.9.0" + ] + ] + }, + "Sample_file\tGenome_file\tTaxonomic_abundance\tSequence_abundance\tAdjusted_ANI\tEff_cov\tANI_5-95_percentile\tEff_lambda\tLambda_5-95_percentile\tMedian_cov\tMean_cov_geq1\tContainment_ind\tNaive_ANI\tkmers_reassigned\tContig_name" + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.2" + }, + "timestamp": "2026-01-19T13:53:39.426666755" + }, + "sarscov2 illumina single-end [fastq_gz]": { + "content": [ + { + "versions_sylph": [ + [ + "SYLPH_PROFILE", + "sylph", + "sylph 0.9.0" + ] + ] + }, + "Sample_file\tGenome_file\tTaxonomic_abundance\tSequence_abundance\tAdjusted_ANI\tEff_cov\tANI_5-95_percentile\tEff_lambda\tLambda_5-95_percentile\tMedian_cov\tMean_cov_geq1\tContainment_ind\tNaive_ANI\tkmers_reassigned\tContig_name" + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.2" + }, + "timestamp": "2026-01-19T13:53:34.383249183" + }, + "sarscov2 illumina paired-end [fastq_gz]-stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + "SYLPH_PROFILE", + "sylph", + "sylph 0.9.0" + ] + ], + "profile_out": [ + [ + { + "id": "test" + }, + "test.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions_sylph": [ + [ + "SYLPH_PROFILE", + "sylph", + "sylph 0.9.0" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.2" + }, + "timestamp": "2026-01-19T13:53:44.570456167" + } +} \ No newline at end of file diff --git a/modules/nf-core/sylphtax/taxprof/environment.yml b/modules/nf-core/sylphtax/taxprof/environment.yml new file mode 100644 index 000000000..517edcad5 --- /dev/null +++ b/modules/nf-core/sylphtax/taxprof/environment.yml @@ -0,0 +1,7 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json +channels: + - conda-forge + - bioconda +dependencies: + - "bioconda::sylph-tax=1.2.0" diff --git a/modules/nf-core/sylphtax/taxprof/main.nf b/modules/nf-core/sylphtax/taxprof/main.nf new file mode 100644 index 000000000..fa70b6330 --- /dev/null +++ b/modules/nf-core/sylphtax/taxprof/main.nf @@ -0,0 +1,42 @@ + +process SYLPHTAX_TAXPROF { + 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/sylph-tax:1.2.0--pyhdfd78af_0': + 'biocontainers/sylph-tax:1.2.0--pyhdfd78af_0' }" + + input: + tuple val(meta), path(sylph_results) + path taxonomy + + output: + tuple val(meta), path("*.sylphmpa"), emit: taxprof_output + tuple val("${task.process}"), val('sylph-tax'), eval("sylph-tax --version 2>&1 | tail -1"), emit: versions_sylphtax, topic: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + + """ + export SYLPH_TAXONOMY_CONFIG="/tmp/config.json" + sylph-tax \\ + taxprof \\ + $sylph_results \\ + $args \\ + -t $taxonomy + + mv *.sylphmpa ${prefix}.sylphmpa + """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.sylphmpa + """ +} diff --git a/modules/nf-core/sylphtax/taxprof/meta.yml b/modules/nf-core/sylphtax/taxprof/meta.yml new file mode 100644 index 000000000..5e3386e3d --- /dev/null +++ b/modules/nf-core/sylphtax/taxprof/meta.yml @@ -0,0 +1,73 @@ +name: sylphtax_taxprof +description: Incorporates taxonomy into sylph metagenomic classifier +keywords: + - taxonomy + - sylph + - metagenomics +tools: + - sylphtax: + description: Integrating taxonomic information into the sylph metagenome profiler. + homepage: https://github.com/bluenote-1577/sylph-tax?tab=readme-ov-file + documentation: https://sylph-docs.github.io/sylph-tax/ + licence: ["MIT"] + identifier: "" +input: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1', single_end:false ]` + - sylph_results: + type: file + description: Output results from sylph classifier. The database file(s) used + to create this file with sylph must be the same as those of the taxonomy input + channel of this module. + pattern: "*.{tsv}" + ontologies: + - edam: http://edamontology.org/format_3475 # TSV + - taxonomy: + type: file + description: A list of sylph-tax identifiers (e.g. GTDB_r220 or IMGVR_4.1). Multiple + taxonomy metadata files can be input. Custom taxonomy files are also possible. + ontologies: [] +output: + taxprof_output: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + pattern: "*{.sylphmpa}" + - "*.sylphmpa": + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + pattern: "*{.sylphmpa}" + versions_sylphtax: + - - ${task.process}: + type: string + description: The name of the process + - sylph-tax: + type: string + description: The name of the tool + - "sylph-tax --version 2>&1 | tail -1": + type: eval + description: The expression to obtain the version of the tool + +topics: + versions: + - - ${task.process}: + type: string + description: The name of the process + - sylph-tax: + type: string + description: The name of the tool + - "sylph-tax --version 2>&1 | tail -1": + type: eval + description: The expression to obtain the version of the tool + +authors: + - "@sofstam" +maintainers: + - "@sofstam" diff --git a/modules/nf-core/sylphtax/taxprof/nextflow.config b/modules/nf-core/sylphtax/taxprof/nextflow.config new file mode 100644 index 000000000..7185e0b75 --- /dev/null +++ b/modules/nf-core/sylphtax/taxprof/nextflow.config @@ -0,0 +1,8 @@ +process { + withName: 'SYLPHTAX_TAXPROF' { + publishDir = [ + path: { "${params.outdir}/${params.aligner}/contaminants/sylph" }, + mode: params.publish_dir_mode + ] + } +} diff --git a/modules/nf-core/sylphtax/taxprof/tests/main.nf.test b/modules/nf-core/sylphtax/taxprof/tests/main.nf.test new file mode 100644 index 000000000..553cf7597 --- /dev/null +++ b/modules/nf-core/sylphtax/taxprof/tests/main.nf.test @@ -0,0 +1,91 @@ +nextflow_process { + + name "Test Process SYLPHTAX_TAXPROF" + script "../main.nf" + process "SYLPHTAX_TAXPROF" + + tag "modules" + tag "modules_nfcore" + tag "sylph" + tag "sylph/profile" + tag "sylphtax" + tag "sylphtax/taxprof" + + + test("sarscov2 illumina single-end [fastq_gz]") { + setup { + run("SYLPH_PROFILE") { + script "../../../sylph/profile/main.nf" + 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) + ] + ] + input[1] = file(params.modules_testdata_base_path +'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + """ + } + } + } + when { + process { + """ + input[0] = SYLPH_PROFILE.out.profile_out + input[1] = file('https://github.com/nf-core/test-datasets/raw/taxprofiler/data/database/sylph/test_taxonomy.tsv.gz', checkIfExists: true) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.findAll { key, val -> key.startsWith('versions') }, + process.out.taxprof_output + ).match() } + ) + } + + } + + test("stub sarscov2 illumina single-end [fastq_gz]") { + + options '-stub' + + setup { + run("SYLPH_PROFILE") { + script "../../../sylph/profile/main.nf" + 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] = file(params.modules_testdata_base_path +'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + """ + } + } + } + when { + process { + """ + input[0] = SYLPH_PROFILE.out.profile_out + input[1] = file('https://github.com/nf-core/test-datasets/raw/taxprofiler/data/database/sylph/test_taxonomy.tsv.gz', checkIfExists: true) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.findAll { key, val -> key.startsWith('versions') }, + process.out.taxprof_output + ).match() } + ) + } + } + +} diff --git a/modules/nf-core/sylphtax/taxprof/tests/main.nf.test.snap b/modules/nf-core/sylphtax/taxprof/tests/main.nf.test.snap new file mode 100644 index 000000000..a95a85698 --- /dev/null +++ b/modules/nf-core/sylphtax/taxprof/tests/main.nf.test.snap @@ -0,0 +1,55 @@ +{ + "stub sarscov2 illumina single-end [fastq_gz]": { + "content": [ + { + "versions_sylphtax": [ + [ + "SYLPHTAX_TAXPROF", + "sylph-tax", + "1.2.0" + ] + ] + }, + [ + [ + { + "id": "test" + }, + "test.sylphmpa:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.3" + }, + "timestamp": "2026-02-02T14:48:37.167778561" + }, + "sarscov2 illumina single-end [fastq_gz]": { + "content": [ + { + "versions_sylphtax": [ + [ + "SYLPHTAX_TAXPROF", + "sylph-tax", + "1.2.0" + ] + ] + }, + [ + [ + { + "id": "test", + "single_end": true + }, + "test.sylphmpa:md5,1fd81c2f226e4766853d324d7aca1fc9" + ] + ] + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.3" + }, + "timestamp": "2026-02-02T14:48:30.003068972" + } +} \ No newline at end of file diff --git a/modules/nf-core/trimgalore/environment.yml b/modules/nf-core/trimgalore/environment.yml index 568b9e72e..60b33ef21 100644 --- a/modules/nf-core/trimgalore/environment.yml +++ b/modules/nf-core/trimgalore/environment.yml @@ -4,6 +4,4 @@ channels: - conda-forge - bioconda dependencies: - - bioconda::cutadapt=4.9 - bioconda::trim-galore=0.6.10 - - conda-forge::pigz=2.8 diff --git a/modules/nf-core/trimgalore/main.nf b/modules/nf-core/trimgalore/main.nf index 5fe53669f..5790b5207 100644 --- a/modules/nf-core/trimgalore/main.nf +++ b/modules/nf-core/trimgalore/main.nf @@ -3,20 +3,20 @@ process TRIMGALORE { label 'process_high' conda "${moduleDir}/environment.yml" - container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container - ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/9b/9becad054093ad4083a961d12733f2a742e11728fe9aa815d678b882b3ede520/data' - : 'community.wave.seqera.io/library/cutadapt_trim-galore_pigz:a98edd405b34582d'}" + container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/trim-galore:0.6.10--hdfd78af_2' : + 'biocontainers/trim-galore:0.6.10--hdfd78af_2'}" input: tuple val(meta), path(reads) output: tuple val(meta), path("*{3prime,5prime,trimmed,val}{,_1,_2}.fq.gz"), emit: reads - tuple val(meta), path("*report.txt") , emit: log, optional: true - tuple val(meta), path("*unpaired{,_1,_2}.fq.gz") , emit: unpaired, optional: true - tuple val(meta), path("*.html") , emit: html, optional: true - tuple val(meta), path("*.zip") , emit: zip, optional: true - path "versions.yml" , emit: versions + tuple val(meta), path("*report.txt") , emit: log , optional: true + tuple val(meta), path("*unpaired{,_1,_2}.fq.gz") , emit: unpaired, optional: true + tuple val(meta), path("*.html") , emit: html , optional: true + tuple val(meta), path("*.zip") , emit: zip , optional: true + tuple val("${task.process}"), val("trimgalore"), eval('trim_galore --version | grep -Eo "[0-9]+(\\.[0-9]+)+"'), topic: versions, emit: versions_trimgalore when: task.ext.when == null || task.ext.when @@ -44,7 +44,7 @@ process TRIMGALORE { def prefix = task.ext.prefix ?: "${meta.id}" if (meta.single_end) { def args_list = args.split("\\s(?=--)").toList() - args_list.removeAll { it.toLowerCase().contains('_r2 ') } + args_list.removeAll { arg -> arg.toLowerCase().contains('_r2 ') } """ [ ! -f ${prefix}.fastq.gz ] && ln -s ${reads} ${prefix}.fastq.gz trim_galore \\ @@ -52,13 +52,6 @@ process TRIMGALORE { --cores ${cores} \\ --gzip \\ ${prefix}.fastq.gz - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - trimgalore: \$(echo \$(trim_galore --version 2>&1) | sed 's/^.*version //; s/Last.*\$//') - cutadapt: \$(cutadapt --version) - pigz: \$( pigz --version 2>&1 | sed 's/pigz //g' ) - END_VERSIONS """ } else { @@ -72,13 +65,6 @@ process TRIMGALORE { --gzip \\ ${prefix}_1.fastq.gz \\ ${prefix}_2.fastq.gz - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - trimgalore: \$(echo \$(trim_galore --version 2>&1) | sed 's/^.*version //; s/Last.*\$//') - cutadapt: \$(cutadapt --version) - pigz: \$( pigz --version 2>&1 | sed 's/pigz //g' ) - END_VERSIONS """ } @@ -96,12 +82,5 @@ process TRIMGALORE { } """ ${output_command} - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - trimgalore: \$(echo \$(trim_galore --version 2>&1) | sed 's/^.*version //; s/Last.*\$//') - cutadapt: \$(cutadapt --version) - pigz: \$( pigz --version 2>&1 | sed 's/pigz //g' ) - END_VERSIONS """ } diff --git a/modules/nf-core/trimgalore/meta.yml b/modules/nf-core/trimgalore/meta.yml index bd793635f..dcd9b1703 100644 --- a/modules/nf-core/trimgalore/meta.yml +++ b/modules/nf-core/trimgalore/meta.yml @@ -1,9 +1,11 @@ name: trimgalore -description: Trim FastQ files using Trim Galore! +description: | + A wrapper around Cutadapt and FastQC to consistently apply adapter and quality trimming to FastQ files, + with extra functionality for RRBS data keywords: - trimming - adapters - - sequencing adapters + - sequencing - fastq tools: - trimgalore: @@ -14,7 +16,8 @@ tools: homepage: https://www.bioinformatics.babraham.ac.uk/projects/trim_galore/ documentation: https://github.com/FelixKrueger/TrimGalore/blob/master/Docs/Trim_Galore_User_Guide.md licence: ["GPL-3.0-or-later"] - identifier: "" + identifier: biotools:trim_galore + input: - - meta: type: map @@ -26,75 +29,95 @@ input: description: | List of input FastQ files of size 1 and 2 for single-end and paired-end data, respectively. + ontologies: + - edam: "http://edamontology.org/format_1930" # FASTQ output: - - reads: - - meta: + reads: + - - meta: type: map description: | Groovy Map containing sample information e.g. [ id:'test', single_end:false ] - "*{3prime,5prime,trimmed,val}{,_1,_2}.fq.gz": - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] + type: file + description: The trimmed/modified fastq reads pattern: "*{3prime,5prime,trimmed,val}{,_1,_2}.fq.gz" - - log: - - meta: + ontologies: + - edam: "http://edamontology.org/format_1930" # FASTQ + - edam: http://edamontology.org/format_3989 # GZIP format + log: + - - meta: type: map description: | Groovy Map containing sample information e.g. [ id:'test', single_end:false ] - pattern: "*_{report.txt}" - "*report.txt": - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - pattern: "*_{report.txt}" - - unpaired: - - meta: + type: file + description: trimgalore log file + pattern: "*report.txt" + ontologies: + - edam: "http://edamontology.org/format_2330" # Textual format + unpaired: + - - meta: type: map description: | Groovy Map containing sample information e.g. [ id:'test', single_end:false ] - "*unpaired{,_1,_2}.fq.gz": - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] + type: file + description: unpaired reads when --retain_unpaired flag is used pattern: "*unpaired*.fq.gz" - - html: - - meta: + ontologies: + - edam: "http://edamontology.org/format_1930" # FASTQ + - edam: http://edamontology.org/format_3989 # GZIP format + html: + - - meta: type: map description: | Groovy Map containing sample information e.g. [ id:'test', single_end:false ] - pattern: "*_{fastqc.html}" - "*.html": + type: file + description: FastQC HTML report after trimming when the --fastqc flag is used + pattern: "*_fastqc.html" + ontologies: + - edam: "http://edamontology.org/format_2331" # HTML + zip: + - - meta: type: map description: | Groovy Map containing sample information e.g. [ id:'test', single_end:false ] - pattern: "*_{fastqc.html}" - - zip: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - pattern: "*_{fastqc.zip}" - "*.zip": - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - pattern: "*_{fastqc.zip}" - - versions: - - versions.yml: type: file - description: File containing software versions - pattern: "versions.yml" + description: FastQC report output zip after trimming when the --fastqc flag + is used + pattern: "*_fastqc.zip" + ontologies: + - edam: http://edamontology.org/format_3987 # ZIP format + versions_trimgalore: + - - ${task.process}: + type: string + description: The name of the process + - trimgalore: + type: string + description: The name of the tool + - trim_galore --version | grep -Eo "[0-9]+(\.[0-9]+)+": + type: eval + description: The expression to obtain the version of the tool + +topics: + versions: + - - ${task.process}: + type: string + description: The name of the process + - trimgalore: + type: string + description: The name of the tool + - trim_galore --version | grep -Eo "[0-9]+(\.[0-9]+)+": + type: eval + description: The expression to obtain the version of the tool + authors: - "@drpatelh" - "@ewels" @@ -103,3 +126,4 @@ maintainers: - "@drpatelh" - "@ewels" - "@FelixKrueger" + - "@vagkaratzas" diff --git a/modules/nf-core/trimgalore/tests/main.nf.test b/modules/nf-core/trimgalore/tests/main.nf.test index 37d9f951c..ac97b0871 100644 --- a/modules/nf-core/trimgalore/tests/main.nf.test +++ b/modules/nf-core/trimgalore/tests/main.nf.test @@ -4,77 +4,82 @@ nextflow_process { script "../main.nf" process "TRIMGALORE" - test("test_trimgalore_single_end") { + tag "modules" + tag "modules_nfcore" + tag "trimgalore" + + test("sarscov2 - fastq - 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) ] + input[0] = [ + [ id:'test', single_end:true ], + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) ] ] """ } } then { - 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) } - } - }, - { report1_lines.each { report1_line -> - { assert path(process.out.log.get(0).get(1)).getText().contains(report1_line) } - } - }, - { assert snapshot(path(process.out.versions.get(0)).yaml).match() }, + { assert snapshot( + process.out.reads, + file(process.out.log[0][1]).readLines()[0..9], // line 11 changes + file(process.out.log[0][1]).readLines()[11..59], + process.out.findAll { key, val -> key.startsWith("versions")} + ).match() } ) } } - test("test_trimgalore_single_end - stub") { - - options "-stub" + test("sarscov2 - fastq - paired-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) ] + input[0] = [ [ id:'test', single_end:false ], + [ + 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( + assertAll ( { assert process.success }, { assert snapshot( - process.out, - path(process.out.versions.get(0)).yaml - ).match() }, + process.out.reads[0][1][0], + process.out.reads[0][1][1], + file(process.out.log[0][1][0]).readLines()[0..9], // line 11 changes + file(process.out.log[0][1][0]).readLines()[11..58], + file(process.out.log[0][1][1]).readLines()[0..9], // line 11 changes + file(process.out.log[0][1][1]).readLines()[11..60], + process.out.findAll { key, val -> key.startsWith("versions")} + ).match() } ) } } - test("test_trimgalore_paired_end") { + test("sarscov2 - fastq - paired-end - keep-unpaired") { + + config "./nextflow.config" when { + params { + module_args = '--retain_unpaired --length 150' + } + process { """ - input[0] = [ [ id:'test', single_end:false ], // meta map + input[0] = [ [ id:'test', single_end:false ], [ - 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) ] ] """ @@ -82,92 +87,61 @@ nextflow_process { } then { - 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) } - } - }, - { report1_lines.each { report1_line -> - { assert path(process.out.log.get(0).get(1).get(0)).getText().contains(report1_line) } - } - }, - { report2_lines.each { report2_line -> - { assert path(process.out.log.get(0).get(1).get(1)).getText().contains(report2_line) } - } - }, - { assert snapshot(path(process.out.versions.get(0)).yaml).match() }, + { assert snapshot( + process.out.reads[0][1][0], + process.out.reads[0][1][1], + process.out.unpaired[0][1][0], + process.out.unpaired[0][1][1], + file(process.out.log[0][1][0]).readLines()[0..9], // line 11 changes + file(process.out.log[0][1][0]).readLines()[11..59], + file(process.out.log[0][1][1]).readLines()[0..9], // line 11 changes + file(process.out.log[0][1][1]).readLines()[11..63], + process.out.findAll { key, val -> key.startsWith("versions")} + ).match() } ) } } - test("test_trimgalore_paired_end_keep_unpaired") { + test("sarscov2 - fastq - single-end - stub") { - config "./nextflow.config" + options "-stub" when { - - params { - module_args = '--retain_unpaired --length 150' - } - 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) - ] + input[0] = [ + [ id:'test', single_end:true ], + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) ] ] """ } } then { - assertAll( + assertAll ( { assert process.success }, { assert snapshot( - path(process.out.versions.get(0)).yaml, process.out.reads, - process.out.unpaired - ).match() }, + process.out.log, + process.out.findAll { key, val -> key.startsWith("versions")} + ).match() } ) } } - test("test_trimgalore_paired_end - stub") { + test("sarscov2 - fastq - paired-end - stub") { options "-stub" when { process { """ - input[0] = [ [ id:'test', single_end:false ], // meta map + input[0] = [ [ id:'test', single_end:false ], [ - 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) ] ] """ @@ -175,11 +149,14 @@ nextflow_process { } then { - assertAll( + assertAll ( { assert process.success }, - { assert snapshot(process.out).match() }, - { assert snapshot(path(process.out.versions.get(0)).yaml).match("versions") }, + { assert snapshot( + process.out.reads, + process.out.log, + process.out.findAll { key, val -> key.startsWith("versions")} + ).match() } ) } } -} \ No newline at end of file +} diff --git a/modules/nf-core/trimgalore/tests/main.nf.test.snap b/modules/nf-core/trimgalore/tests/main.nf.test.snap index c454ad521..2fb55f2d3 100644 --- a/modules/nf-core/trimgalore/tests/main.nf.test.snap +++ b/modules/nf-core/trimgalore/tests/main.nf.test.snap @@ -1,251 +1,468 @@ { - "test_trimgalore_single_end": { + "sarscov2 - fastq - paired-end - stub": { "content": [ - { - "TRIMGALORE": { - "trimgalore": "0.6.10", - "cutadapt": 4.9, - "pigz": 2.8 - } - } - ], - "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.3" - }, - "timestamp": "2025-01-06T12:25:01.330769598" - }, - "test_trimgalore_single_end - stub": { - "content": [ - { - "0": [ - [ - { - "id": "test", - "single_end": true - }, - "test_trimmed.fq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" - ] - ], - "1": [ + [ + [ + { + "id": "test", + "single_end": false + }, [ - { - "id": "test", - "single_end": true - }, - "test.fastq.gz_trimming_report.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + "test_1_trimmed.fq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2_trimmed.fq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" ] - ], - "2": [ - - ], - "3": [ - - ], - "4": [ - - ], - "5": [ - "versions.yml:md5,5928323d579768de37e83c56c821757f" - ], - "html": [ - - ], - "log": [ + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, [ - { - "id": "test", - "single_end": true - }, - "test.fastq.gz_trimming_report.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + "test_1.fastq.gz_trimming_report.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "test_2.fastq.gz_trimming_report.txt:md5,d41d8cd98f00b204e9800998ecf8427e" ] - ], - "reads": [ + ] + ], + { + "versions_trimgalore": [ [ - { - "id": "test", - "single_end": true - }, - "test_trimmed.fq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + "TRIMGALORE", + "trimgalore", + "0.6.10" ] - ], - "unpaired": [ - - ], - "versions": [ - "versions.yml:md5,5928323d579768de37e83c56c821757f" - ], - "zip": [ - ] - }, - { - "TRIMGALORE": { - "trimgalore": "0.6.10", - "cutadapt": 4.9, - "pigz": 2.8 - } } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.3" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-01-06T12:25:15.582246999" + "timestamp": "2025-12-15T14:40:14.896140126" }, - "test_trimgalore_paired_end - stub": { + "sarscov2 - fastq - paired-end - keep-unpaired": { "content": [ + "test_1_val_1.fq.gz:md5,75413e85910bbc2e1556e12f6479f935", + "test_2_val_2.fq.gz:md5,d3c588c12646ebd36a0812fe02d0bda6", + "test_1_unpaired_1.fq.gz:md5,17e0e878f6d0e93b9008a05f128660b6", + "test_2_unpaired_2.fq.gz:md5,b09a064368a867e099e66df5ef69b044", + [ + "", + "SUMMARISING RUN PARAMETERS", + "==========================", + "Input filename: test_1.fastq.gz", + "Trimming mode: paired-end", + "Trim Galore version: 0.6.10", + "Cutadapt version: 5.2", + "Number of cores used for trimming: 1", + "Quality Phred score cutoff: 20", + "Quality encoding type selected: ASCII+33" + ], + [ + "Defaulting to Illumina universal adapter ( AGATCGGAAGAGC ). Specify -a SEQUENCE to avoid this behavior).", + "Adapter sequence: 'AGATCGGAAGAGC' (Illumina TruSeq, Sanger iPCR; default (inconclusive auto-detection))", + "Maximum trimming error rate: 0.1 (default)", + "Minimum required adapter overlap (stringency): 1 bp", + "Minimum required sequence length for both reads before a sequence pair gets removed: 150 bp", + "Length cut-off for read 1: 35 bp (default)", + "Length cut-off for read 2: 35 bp (default)", + "Output file will be GZIP compressed", + "", + "", + "This is cutadapt 5.2 with Python 3.12.12", + "Command line parameters: -j 1 -e 0.1 -q 20 -O 1 -a AGATCGGAAGAGC test_1.fastq.gz", + "Processing single-end reads on 1 core ...", + "", + "=== Summary ===", + "", + "Total reads processed: 100", + "Reads with adapters: 31 (31.0%)", + "Reads written (passing filters): 100 (100.0%)", + "", + "Total basepairs processed: 13,897 bp", + "Quality-trimmed: 0 bp (0.0%)", + "Total written (filtered): 13,851 bp (99.7%)", + "", + "=== Adapter 1 ===", + "", + "Sequence: AGATCGGAAGAGC; Type: regular 3'; Length: 13; Trimmed: 31 times", + "", + "Minimum overlap: 1", + "No. of allowed errors:", + "1-9 bp: 0; 10-13 bp: 1", + "", + "Bases preceding removed adapters:", + " A: 35.5%", + " C: 25.8%", + " G: 9.7%", + " T: 29.0%", + " none/other: 0.0%", + "", + "Overview of removed sequences", + "length\tcount\texpect\tmax.err\terror counts", + "1\t19\t25.0\t0\t19", + "2\t10\t6.2\t0\t10", + "3\t1\t1.6\t0\t1", + "4\t1\t0.4\t0\t1", + "", + "RUN STATISTICS FOR INPUT FILE: test_1.fastq.gz", + "=============================================", + "100 sequences processed in total" + ], + [ + "", + "SUMMARISING RUN PARAMETERS", + "==========================", + "Input filename: test_2.fastq.gz", + "Trimming mode: paired-end", + "Trim Galore version: 0.6.10", + "Cutadapt version: 5.2", + "Number of cores used for trimming: 1", + "Quality Phred score cutoff: 20", + "Quality encoding type selected: ASCII+33" + ], + [ + "Defaulting to Illumina universal adapter ( AGATCGGAAGAGC ). Specify -a SEQUENCE to avoid this behavior).", + "Adapter sequence: 'AGATCGGAAGAGC' (Illumina TruSeq, Sanger iPCR; default (inconclusive auto-detection))", + "Maximum trimming error rate: 0.1 (default)", + "Minimum required adapter overlap (stringency): 1 bp", + "Minimum required sequence length for both reads before a sequence pair gets removed: 150 bp", + "Length cut-off for read 1: 35 bp (default)", + "Length cut-off for read 2: 35 bp (default)", + "Output file will be GZIP compressed", + "", + "", + "This is cutadapt 5.2 with Python 3.12.12", + "Command line parameters: -j 1 -e 0.1 -q 20 -O 1 -a AGATCGGAAGAGC test_2.fastq.gz", + "Processing single-end reads on 1 core ...", + "", + "=== Summary ===", + "", + "Total reads processed: 100", + "Reads with adapters: 40 (40.0%)", + "Reads written (passing filters): 100 (100.0%)", + "", + "Total basepairs processed: 13,748 bp", + "Quality-trimmed: 0 bp (0.0%)", + "Total written (filtered): 13,693 bp (99.6%)", + "", + "=== Adapter 1 ===", + "", + "Sequence: AGATCGGAAGAGC; Type: regular 3'; Length: 13; Trimmed: 40 times", + "", + "Minimum overlap: 1", + "No. of allowed errors:", + "1-9 bp: 0; 10-13 bp: 1", + "", + "Bases preceding removed adapters:", + " A: 35.0%", + " C: 25.0%", + " G: 5.0%", + " T: 35.0%", + " none/other: 0.0%", + "", + "Overview of removed sequences", + "length\tcount\texpect\tmax.err\terror counts", + "1\t28\t25.0\t0\t28", + "2\t10\t6.2\t0\t10", + "3\t1\t1.6\t0\t1", + "4\t1\t0.4\t0\t1", + "", + "RUN STATISTICS FOR INPUT FILE: test_2.fastq.gz", + "=============================================", + "100 sequences processed in total", + "", + "Total number of sequences analysed for the sequence pair length validation: 100", + "", + "Number of sequence pairs removed because at least one read was shorter than the length cutoff (150 bp): 81 (81.00%)" + ], { - "0": [ - [ - { - "id": "test", - "single_end": false - }, - [ - "test_1_trimmed.fq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", - "test_2_trimmed.fq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" - ] - ] - ], - "1": [ - [ - { - "id": "test", - "single_end": false - }, - [ - "test_1.fastq.gz_trimming_report.txt:md5,d41d8cd98f00b204e9800998ecf8427e", - "test_2.fastq.gz_trimming_report.txt:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ] - ], - "2": [ - - ], - "3": [ - - ], - "4": [ - - ], - "5": [ - "versions.yml:md5,5928323d579768de37e83c56c821757f" - ], - "html": [ - - ], - "log": [ - [ - { - "id": "test", - "single_end": false - }, - [ - "test_1.fastq.gz_trimming_report.txt:md5,d41d8cd98f00b204e9800998ecf8427e", - "test_2.fastq.gz_trimming_report.txt:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ] - ], - "reads": [ + "versions_trimgalore": [ [ - { - "id": "test", - "single_end": false - }, - [ - "test_1_trimmed.fq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", - "test_2_trimmed.fq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" - ] + "TRIMGALORE", + "trimgalore", + "0.6.10" ] - ], - "unpaired": [ - - ], - "versions": [ - "versions.yml:md5,5928323d579768de37e83c56c821757f" - ], - "zip": [ - ] } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.3" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-01-06T12:26:05.201562315" + "timestamp": "2025-12-15T14:39:53.811844594" }, - "versions": { + "sarscov2 - fastq - single-end - stub": { "content": [ + [ + [ + { + "id": "test", + "single_end": true + }, + "test_trimmed.fq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastq.gz_trimming_report.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], { - "TRIMGALORE": { - "trimgalore": "0.6.10", - "cutadapt": 4.9, - "pigz": 2.8 - } + "versions_trimgalore": [ + [ + "TRIMGALORE", + "trimgalore", + "0.6.10" + ] + ] } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.3" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-01-06T12:26:05.229598492" + "timestamp": "2025-12-15T14:40:03.991561892" }, - "test_trimgalore_paired_end": { + "sarscov2 - fastq - paired-end": { "content": [ + "test_1_val_1.fq.gz:md5,566d44cca0d22c522d6cf0e50c7165dc", + "test_2_val_2.fq.gz:md5,3c023e8e890b897821df3dc98f48c2b3", + [ + "", + "SUMMARISING RUN PARAMETERS", + "==========================", + "Input filename: test_1.fastq.gz", + "Trimming mode: paired-end", + "Trim Galore version: 0.6.10", + "Cutadapt version: 5.2", + "Number of cores used for trimming: 1", + "Quality Phred score cutoff: 20", + "Quality encoding type selected: ASCII+33" + ], + [ + "Defaulting to Illumina universal adapter ( AGATCGGAAGAGC ). Specify -a SEQUENCE to avoid this behavior).", + "Adapter sequence: 'AGATCGGAAGAGC' (Illumina TruSeq, Sanger iPCR; default (inconclusive auto-detection))", + "Maximum trimming error rate: 0.1 (default)", + "Minimum required adapter overlap (stringency): 1 bp", + "Minimum required sequence length for both reads before a sequence pair gets removed: 20 bp", + "Output file will be GZIP compressed", + "", + "", + "This is cutadapt 5.2 with Python 3.12.12", + "Command line parameters: -j 1 -e 0.1 -q 20 -O 1 -a AGATCGGAAGAGC test_1.fastq.gz", + "Processing single-end reads on 1 core ...", + "", + "=== Summary ===", + "", + "Total reads processed: 100", + "Reads with adapters: 31 (31.0%)", + "Reads written (passing filters): 100 (100.0%)", + "", + "Total basepairs processed: 13,897 bp", + "Quality-trimmed: 0 bp (0.0%)", + "Total written (filtered): 13,851 bp (99.7%)", + "", + "=== Adapter 1 ===", + "", + "Sequence: AGATCGGAAGAGC; Type: regular 3'; Length: 13; Trimmed: 31 times", + "", + "Minimum overlap: 1", + "No. of allowed errors:", + "1-9 bp: 0; 10-13 bp: 1", + "", + "Bases preceding removed adapters:", + " A: 35.5%", + " C: 25.8%", + " G: 9.7%", + " T: 29.0%", + " none/other: 0.0%", + "", + "Overview of removed sequences", + "length\tcount\texpect\tmax.err\terror counts", + "1\t19\t25.0\t0\t19", + "2\t10\t6.2\t0\t10", + "3\t1\t1.6\t0\t1", + "4\t1\t0.4\t0\t1", + "", + "RUN STATISTICS FOR INPUT FILE: test_1.fastq.gz", + "=============================================", + "100 sequences processed in total", + "" + ], + [ + "", + "SUMMARISING RUN PARAMETERS", + "==========================", + "Input filename: test_2.fastq.gz", + "Trimming mode: paired-end", + "Trim Galore version: 0.6.10", + "Cutadapt version: 5.2", + "Number of cores used for trimming: 1", + "Quality Phred score cutoff: 20", + "Quality encoding type selected: ASCII+33" + ], + [ + "Defaulting to Illumina universal adapter ( AGATCGGAAGAGC ). Specify -a SEQUENCE to avoid this behavior).", + "Adapter sequence: 'AGATCGGAAGAGC' (Illumina TruSeq, Sanger iPCR; default (inconclusive auto-detection))", + "Maximum trimming error rate: 0.1 (default)", + "Minimum required adapter overlap (stringency): 1 bp", + "Minimum required sequence length for both reads before a sequence pair gets removed: 20 bp", + "Output file will be GZIP compressed", + "", + "", + "This is cutadapt 5.2 with Python 3.12.12", + "Command line parameters: -j 1 -e 0.1 -q 20 -O 1 -a AGATCGGAAGAGC test_2.fastq.gz", + "Processing single-end reads on 1 core ...", + "", + "=== Summary ===", + "", + "Total reads processed: 100", + "Reads with adapters: 40 (40.0%)", + "Reads written (passing filters): 100 (100.0%)", + "", + "Total basepairs processed: 13,748 bp", + "Quality-trimmed: 0 bp (0.0%)", + "Total written (filtered): 13,693 bp (99.6%)", + "", + "=== Adapter 1 ===", + "", + "Sequence: AGATCGGAAGAGC; Type: regular 3'; Length: 13; Trimmed: 40 times", + "", + "Minimum overlap: 1", + "No. of allowed errors:", + "1-9 bp: 0; 10-13 bp: 1", + "", + "Bases preceding removed adapters:", + " A: 35.0%", + " C: 25.0%", + " G: 5.0%", + " T: 35.0%", + " none/other: 0.0%", + "", + "Overview of removed sequences", + "length\tcount\texpect\tmax.err\terror counts", + "1\t28\t25.0\t0\t28", + "2\t10\t6.2\t0\t10", + "3\t1\t1.6\t0\t1", + "4\t1\t0.4\t0\t1", + "", + "RUN STATISTICS FOR INPUT FILE: test_2.fastq.gz", + "=============================================", + "100 sequences processed in total", + "", + "Total number of sequences analysed for the sequence pair length validation: 100", + "" + ], { - "TRIMGALORE": { - "trimgalore": "0.6.10", - "cutadapt": 4.9, - "pigz": 2.8 - } + "versions_trimgalore": [ + [ + "TRIMGALORE", + "trimgalore", + "0.6.10" + ] + ] } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.3" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-01-06T12:25:33.510924538" + "timestamp": "2025-12-15T14:39:43.937555685" }, - "test_trimgalore_paired_end_keep_unpaired": { + "sarscov2 - fastq - single-end": { "content": [ - { - "TRIMGALORE": { - "trimgalore": "0.6.10", - "cutadapt": 4.9, - "pigz": 2.8 - } - }, [ [ { "id": "test", - "single_end": false + "single_end": true }, - [ - "test_1_val_1.fq.gz:md5,75413e85910bbc2e1556e12f6479f935", - "test_2_val_2.fq.gz:md5,d3c588c12646ebd36a0812fe02d0bda6" - ] + "test_trimmed.fq.gz:md5,566d44cca0d22c522d6cf0e50c7165dc" ] ], [ - [ - { - "id": "test", - "single_end": false - }, + "", + "SUMMARISING RUN PARAMETERS", + "==========================", + "Input filename: test.fastq.gz", + "Trimming mode: single-end", + "Trim Galore version: 0.6.10", + "Cutadapt version: 5.2", + "Number of cores used for trimming: 1", + "Quality Phred score cutoff: 20", + "Quality encoding type selected: ASCII+33" + ], + [ + "Defaulting to Illumina universal adapter ( AGATCGGAAGAGC ). Specify -a SEQUENCE to avoid this behavior).", + "Adapter sequence: 'AGATCGGAAGAGC' (Illumina TruSeq, Sanger iPCR; default (inconclusive auto-detection))", + "Maximum trimming error rate: 0.1 (default)", + "Minimum required adapter overlap (stringency): 1 bp", + "Minimum required sequence length before a sequence gets removed: 20 bp", + "Output file will be GZIP compressed", + "", + "", + "This is cutadapt 5.2 with Python 3.12.12", + "Command line parameters: -j 1 -e 0.1 -q 20 -O 1 -a AGATCGGAAGAGC test.fastq.gz", + "Processing single-end reads on 1 core ...", + "", + "=== Summary ===", + "", + "Total reads processed: 100", + "Reads with adapters: 31 (31.0%)", + "Reads written (passing filters): 100 (100.0%)", + "", + "Total basepairs processed: 13,897 bp", + "Quality-trimmed: 0 bp (0.0%)", + "Total written (filtered): 13,851 bp (99.7%)", + "", + "=== Adapter 1 ===", + "", + "Sequence: AGATCGGAAGAGC; Type: regular 3'; Length: 13; Trimmed: 31 times", + "", + "Minimum overlap: 1", + "No. of allowed errors:", + "1-9 bp: 0; 10-13 bp: 1", + "", + "Bases preceding removed adapters:", + " A: 35.5%", + " C: 25.8%", + " G: 9.7%", + " T: 29.0%", + " none/other: 0.0%", + "", + "Overview of removed sequences", + "length\tcount\texpect\tmax.err\terror counts", + "1\t19\t25.0\t0\t19", + "2\t10\t6.2\t0\t10", + "3\t1\t1.6\t0\t1", + "4\t1\t0.4\t0\t1", + "", + "RUN STATISTICS FOR INPUT FILE: test.fastq.gz", + "=============================================", + "100 sequences processed in total", + "Sequences removed because they became shorter than the length cutoff of 20 bp:\t0 (0.0%)", + "" + ], + { + "versions_trimgalore": [ [ - "test_1_unpaired_1.fq.gz:md5,17e0e878f6d0e93b9008a05f128660b6", - "test_2_unpaired_2.fq.gz:md5,b09a064368a867e099e66df5ef69b044" + "TRIMGALORE", + "trimgalore", + "0.6.10" ] ] - ] + } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.3" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-01-06T12:25:46.461002981" + "timestamp": "2025-12-15T14:39:33.985021562" } } \ No newline at end of file diff --git a/modules/nf-core/tximeta/tximport/meta.yml b/modules/nf-core/tximeta/tximport/meta.yml index 16519f17d..c05fbfc77 100644 --- a/modules/nf-core/tximeta/tximport/meta.yml +++ b/modules/nf-core/tximeta/tximport/meta.yml @@ -7,6 +7,7 @@ keywords: - gene - kallisto - pseudoalignment + - rsem - salmon - transcript tools: @@ -44,7 +45,7 @@ input: - edam: http://edamontology.org/format_3475 # TSV - quant_type: type: string - description: Quantification type, `kallisto` or `salmon` + description: Quantification type, `kallisto`, `salmon`, or `rsem` output: tpm_gene: - - meta: diff --git a/modules/nf-core/tximeta/tximport/templates/tximport.r b/modules/nf-core/tximeta/tximport/templates/tximport.r index 0ff05ef04..58fd048bd 100755 --- a/modules/nf-core/tximeta/tximport/templates/tximport.r +++ b/modules/nf-core/tximeta/tximport/templates/tximport.r @@ -161,14 +161,25 @@ for (ao in names(args_opt)) { } # Define pattern for file names based on quantification type -pattern <- ifelse('$quant_type' == "kallisto", "abundance.tsv", "quant.sf") -fns <- list.files('quants', pattern = pattern, recursive = T, full.names = T) -names <- basename(dirname(fns)) -names(fns) <- names -dropInfReps <- '$quant_type' == "kallisto" - -# Import transcript-level quantifications -txi <- tximport(fns, type = '$quant_type', txOut = TRUE, dropInfReps = dropInfReps) +if ('$quant_type' == "rsem") { + # RSEM: .isoforms.results files are flat in quants/ directory (not in subdirectories) + fns <- list.files('quants', pattern = 'isoforms\\\\.results\$', recursive = TRUE, full.names = TRUE) + names <- gsub("\\\\.isoforms\\\\.results\$", "", basename(fns)) + names(fns) <- names + + # Import transcript-level quantifications from RSEM isoform results + txi <- tximport(fns, type = 'rsem', txIn = TRUE, txOut = TRUE) +} else { + # Salmon/Kallisto: files are in sample subdirectories + pattern <- ifelse('$quant_type' == "kallisto", "abundance.tsv", "quant.sf") + fns <- list.files('quants', pattern = pattern, recursive = TRUE, full.names = TRUE) + names <- basename(dirname(fns)) + names(fns) <- names + dropInfReps <- '$quant_type' == "kallisto" + + # Import transcript-level quantifications + txi <- tximport(fns, type = '$quant_type', txOut = TRUE, dropInfReps = dropInfReps) +} # Read transcript and sample data transcript_info <- read_transcript_info('$tx2gene', opt\$tx_col, opt\$gene_id_col, opt\$gene_name_col) diff --git a/modules/nf-core/tximeta/tximport/tests/main.nf.test b/modules/nf-core/tximeta/tximport/tests/main.nf.test index 5e3b50b26..49787366b 100644 --- a/modules/nf-core/tximeta/tximport/tests/main.nf.test +++ b/modules/nf-core/tximeta/tximport/tests/main.nf.test @@ -265,6 +265,101 @@ nextflow_process { } } + test("saccharomyces_cerevisiae - rsem - gtf") { + + setup { + run("UNTAR") { + script "../../../untar/main.nf" + process { + """ + input[0] = Channel.of([ + [ id:'test'], // meta map + file(params.modules_testdata_base_path + 'genomics/eukaryotes/saccharomyces_cerevisiae/rsem_results.tar.gz', checkIfExists: true) + ]) + """ + } + } + run("CUSTOM_TX2GENE") { + script "../../../custom/tx2gene/main.nf" + process { + """ + input[0] = Channel.of([ + [ id:'test'], // meta map + file(params.modules_testdata_base_path + 'genomics/eukaryotes/saccharomyces_cerevisiae/genome_gfp.gtf', checkIfExists: true) + ]) + input[1] = UNTAR.out.untar.map { meta, dir -> + def results = [] + dir.eachFileRecurse { f -> + if (f.name.endsWith('.isoforms.results')) results << f + } + [ meta, results ] + } + input[2] = 'rsem' + input[3] = 'gene_id' + input[4] = 'gene_name' + """ + } + } + } + + when { + process { + """ + input[0] = UNTAR.out.untar.map { meta, dir -> + def results = [] + dir.eachFileRecurse { f -> + if (f.name.endsWith('.isoforms.results')) results << f + } + [ meta, results ] + } + input[1] = CUSTOM_TX2GENE.out.tx2gene + input[2] = 'rsem' + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.counts_gene, + process.out.counts_gene_length_scaled, + process.out.counts_gene_scaled, + process.out.counts_transcript, + process.out.lengths_gene, + process.out.lengths_transcript, + process.out.tpm_gene, + process.out.tpm_transcript, + process.out.versions).match() + } + ) + } + } + + test("saccharomyces_cerevisiae - rsem - gtf - stub") { + + options "-stub" + + when { + process { + """ + input[0] = Channel.of([ [id:'test'], [] ]) + input[1] = Channel.of([ [id:'test'], [] ]) + input[2] = 'rsem' + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() + } + ) + } + + } + test("saccharomyces_cerevisiae - kallisto - gtf - custom_column_names") { config "./nextflow.config" diff --git a/modules/nf-core/tximeta/tximport/tests/main.nf.test.snap b/modules/nf-core/tximeta/tximport/tests/main.nf.test.snap index cff6b0023..322d01858 100644 --- a/modules/nf-core/tximeta/tximport/tests/main.nf.test.snap +++ b/modules/nf-core/tximeta/tximport/tests/main.nf.test.snap @@ -441,6 +441,151 @@ }, "timestamp": "2025-12-09T09:29:35.461954" }, + "saccharomyces_cerevisiae - rsem - gtf - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.gene_tpm.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test" + }, + "test.gene_counts.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + [ + { + "id": "test" + }, + "test.gene_counts_length_scaled.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + [ + { + "id": "test" + }, + "test.gene_counts_scaled.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "4": [ + [ + { + "id": "test" + }, + "test.gene_lengths.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "5": [ + [ + { + "id": "test" + }, + "test.transcript_tpm.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "6": [ + [ + { + "id": "test" + }, + "test.transcript_counts.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "7": [ + [ + { + "id": "test" + }, + "test.transcript_lengths.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "8": [ + "versions.yml:md5,6ff317cceddc686f84d79cb976e1e28b" + ], + "counts_gene": [ + [ + { + "id": "test" + }, + "test.gene_counts.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "counts_gene_length_scaled": [ + [ + { + "id": "test" + }, + "test.gene_counts_length_scaled.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "counts_gene_scaled": [ + [ + { + "id": "test" + }, + "test.gene_counts_scaled.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "counts_transcript": [ + [ + { + "id": "test" + }, + "test.transcript_counts.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "lengths_gene": [ + [ + { + "id": "test" + }, + "test.gene_lengths.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "lengths_transcript": [ + [ + { + "id": "test" + }, + "test.transcript_lengths.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "tpm_gene": [ + [ + { + "id": "test" + }, + "test.gene_tpm.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "tpm_transcript": [ + [ + { + "id": "test" + }, + "test.transcript_tpm.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,6ff317cceddc686f84d79cb976e1e28b" + ] + } + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.3" + }, + "timestamp": "2026-02-11T10:59:46.025734857" + }, "saccharomyces_cerevisiae - kallisto - gtf": { "content": [ [ @@ -517,6 +662,82 @@ }, "timestamp": "2025-12-09T09:23:53.102679" }, + "saccharomyces_cerevisiae - rsem - gtf": { + "content": [ + [ + [ + { + "id": "test" + }, + "test.gene_counts.tsv:md5,ad4efd41deb638388e7e5271830c5dd1" + ] + ], + [ + [ + { + "id": "test" + }, + "test.gene_counts_length_scaled.tsv:md5,98dcb9117568e334a8c8a3fbdfc35496" + ] + ], + [ + [ + { + "id": "test" + }, + "test.gene_counts_scaled.tsv:md5,5217eb788b345c8d1240acebe432542b" + ] + ], + [ + [ + { + "id": "test" + }, + "test.transcript_counts.tsv:md5,4049fc5545452e4a1e3bc9a75b060fc6" + ] + ], + [ + [ + { + "id": "test" + }, + "test.gene_lengths.tsv:md5,3885932ab6bb723b2d258b5aa54e9091" + ] + ], + [ + [ + { + "id": "test" + }, + "test.transcript_lengths.tsv:md5,d04b3ee72b6b3f93436fd6bcccd1e41a" + ] + ], + [ + [ + { + "id": "test" + }, + "test.gene_tpm.tsv:md5,9cecb0af52c53cc0807a2319dcd8ea6e" + ] + ], + [ + [ + { + "id": "test" + }, + "test.transcript_tpm.tsv:md5,ba50c1a86bde2987572433c055e6559b" + ] + ], + [ + "versions.yml:md5,6ff317cceddc686f84d79cb976e1e28b" + ] + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.3" + }, + "timestamp": "2026-02-11T10:59:31.386695001" + }, "saccharomyces_cerevisiae - kallisto - gtf - extra_attributes": { "content": [ [ diff --git a/modules/nf-core/ucsc/bedclip/main.nf b/modules/nf-core/ucsc/bedclip/main.nf index d3e09dc11..2e54667ba 100755 --- a/modules/nf-core/ucsc/bedclip/main.nf +++ b/modules/nf-core/ucsc/bedclip/main.nf @@ -2,7 +2,6 @@ process UCSC_BEDCLIP { tag "$meta.id" label 'process_medium' - // WARN: Version information not provided by tool on CLI. Please update version string below when bumping container versions. conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/ucsc-bedclip:377--h0b8a92a_2' : @@ -14,7 +13,7 @@ process UCSC_BEDCLIP { output: tuple val(meta), path("*.bedGraph"), emit: bedgraph - path "versions.yml" , emit: versions + tuple val("${task.process}"), val('ucsc'), eval("echo $VERSION"), topic: versions, emit: versions_ucsc when: task.ext.when == null || task.ext.when @@ -22,28 +21,19 @@ process UCSC_BEDCLIP { script: def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" - def VERSION = '377' // WARN: Version information not provided by tool on CLI. Please update this string when bumping container versions. + VERSION = '377' // WARN: Version information not provided by tool on CLI. Please update this string when bumping container versions. """ bedClip \\ + $args \\ $bedgraph \\ $sizes \\ ${prefix}.bedGraph - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - ucsc: $VERSION - END_VERSIONS """ stub: def prefix = task.ext.prefix ?: "${meta.id}" - def VERSION = '377' // WARN: Version information not provided by tool on CLI. Please update this string when bumping container versions. + VERSION = '377' // WARN: Version information not provided by tool on CLI. Please update this string when bumping container versions. """ touch ${prefix}.bedGraph - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - ucsc: $VERSION - END_VERSIONS """ } diff --git a/modules/nf-core/ucsc/bedclip/meta.yml b/modules/nf-core/ucsc/bedclip/meta.yml index 9222d31d2..4544a7623 100644 --- a/modules/nf-core/ucsc/bedclip/meta.yml +++ b/modules/nf-core/ucsc/bedclip/meta.yml @@ -20,12 +20,14 @@ input: type: file description: bedGraph file pattern: "*.{bedgraph}" - - - sizes: - type: file - description: Chromosome sizes file + ontologies: [] + - sizes: + type: file + description: Chromosome sizes file + ontologies: [] output: - - bedgraph: - - meta: + bedgraph: + - - meta: type: map description: | Groovy Map containing sample information @@ -34,11 +36,30 @@ output: type: file description: bedGraph file pattern: "*.{bedgraph}" - - versions: - - versions.yml: - type: file - description: File containing software versions - pattern: "versions.yml" + ontologies: [] + versions_ucsc: + - - ${task.process}: + type: string + description: The process the versions were collected from + - ucsc: + type: string + description: The tool name + - echo $VERSION: + type: eval + description: The expression to obtain the version of the tool + +topics: + versions: + - - ${task.process}: + type: string + description: The process the versions were collected from + - ucsc: + type: string + description: The tool name + - echo $VERSION: + type: eval + description: The expression to obtain the version of the tool + authors: - "@drpatelh" maintainers: diff --git a/modules/nf-core/ucsc/bedclip/tests/main.nf.test b/modules/nf-core/ucsc/bedclip/tests/main.nf.test index 5cb8600c3..bc02d100c 100644 --- a/modules/nf-core/ucsc/bedclip/tests/main.nf.test +++ b/modules/nf-core/ucsc/bedclip/tests/main.nf.test @@ -3,6 +3,10 @@ nextflow_process { name "Test Process UCSC_BEDCLIP" script "../main.nf" process "UCSC_BEDCLIP" + tag "modules" + tag "modules_nfcore" + tag "ucsc" + tag "ucsc/bedclip" test("sarscov2") { config "./nextflow.config" @@ -50,4 +54,4 @@ nextflow_process { ) } } -} \ No newline at end of file +} diff --git a/modules/nf-core/ucsc/bedclip/tests/main.nf.test.snap b/modules/nf-core/ucsc/bedclip/tests/main.nf.test.snap index 77e893808..8ae98caff 100644 --- a/modules/nf-core/ucsc/bedclip/tests/main.nf.test.snap +++ b/modules/nf-core/ucsc/bedclip/tests/main.nf.test.snap @@ -12,7 +12,11 @@ ] ], "1": [ - "versions.yml:md5,b92248ce2a138ad4d146ac0d9e71fb34" + [ + "UCSC_BEDCLIP", + "ucsc", + "377" + ] ], "bedgraph": [ [ @@ -23,16 +27,20 @@ "test.clip.bedGraph:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "versions": [ - "versions.yml:md5,b92248ce2a138ad4d146ac0d9e71fb34" + "versions_ucsc": [ + [ + "UCSC_BEDCLIP", + "ucsc", + "377" + ] ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2024-06-21T10:31:42.86304" + "timestamp": "2026-01-19T14:08:43.009868476" }, "sarscov2": { "content": [ @@ -47,7 +55,11 @@ ] ], "1": [ - "versions.yml:md5,b92248ce2a138ad4d146ac0d9e71fb34" + [ + "UCSC_BEDCLIP", + "ucsc", + "377" + ] ], "bedgraph": [ [ @@ -58,15 +70,19 @@ "test.clip.bedGraph:md5,e02395e1f7c593b3f79563067159ebc2" ] ], - "versions": [ - "versions.yml:md5,b92248ce2a138ad4d146ac0d9e71fb34" + "versions_ucsc": [ + [ + "UCSC_BEDCLIP", + "ucsc", + "377" + ] ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2024-02-07T16:04:04.165478" + "timestamp": "2026-01-19T14:08:37.884007523" } } \ No newline at end of file diff --git a/modules/nf-core/ucsc/bedgraphtobigwig/main.nf b/modules/nf-core/ucsc/bedgraphtobigwig/main.nf index 81cdee953..f5bd3d521 100644 --- a/modules/nf-core/ucsc/bedgraphtobigwig/main.nf +++ b/modules/nf-core/ucsc/bedgraphtobigwig/main.nf @@ -2,7 +2,6 @@ process UCSC_BEDGRAPHTOBIGWIG { tag "$meta.id" label 'process_single' - // WARN: Version information not provided by tool on CLI. Please update version string below when bumping container versions. conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/ucsc-bedgraphtobigwig:469--h9b8f530_0' : @@ -14,7 +13,7 @@ process UCSC_BEDGRAPHTOBIGWIG { output: tuple val(meta), path("*.bigWig"), emit: bigwig - path "versions.yml" , emit: versions + tuple val("${task.process}"), val('ucsc'), eval("echo $VERSION"), topic: versions, emit: versions_ucsc when: task.ext.when == null || task.ext.when @@ -22,28 +21,19 @@ process UCSC_BEDGRAPHTOBIGWIG { script: def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" - def VERSION = '469' // WARN: Version information not provided by tool on CLI. Please update this string when bumping container versions. + VERSION = '469' // WARN: Version information not provided by tool on CLI. Please update this string when bumping container versions. """ bedGraphToBigWig \\ + $args \\ $bedgraph \\ $sizes \\ ${prefix}.bigWig - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - ucsc: $VERSION - END_VERSIONS """ stub: def prefix = task.ext.prefix ?: "${meta.id}" - def VERSION = '469' // WARN: Version information not provided by tool on CLI. Please update this string when bumping container versions. + VERSION = '469' // WARN: Version information not provided by tool on CLI. Please update this string when bumping container versions. """ touch ${prefix}.bigWig - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - ucsc: $VERSION - END_VERSIONS """ } diff --git a/modules/nf-core/ucsc/bedgraphtobigwig/meta.yml b/modules/nf-core/ucsc/bedgraphtobigwig/meta.yml index 5d42cbde7..53d99c55d 100755 --- a/modules/nf-core/ucsc/bedgraphtobigwig/meta.yml +++ b/modules/nf-core/ucsc/bedgraphtobigwig/meta.yml @@ -23,13 +23,15 @@ input: type: file description: bedGraph file pattern: "*.{bedGraph}" - - - sizes: - type: file - description: chromosome sizes file - pattern: "*.{sizes}" + ontologies: [] + - sizes: + type: file + description: chromosome sizes file + pattern: "*.{sizes}" + ontologies: [] output: - - bigwig: - - meta: + bigwig: + - - meta: type: map description: | Groovy Map containing sample information @@ -38,11 +40,30 @@ output: type: file description: bigWig file pattern: "*.{bigWig}" - - versions: - - versions.yml: - type: file - description: File containing software versions - pattern: "versions.yml" + ontologies: [] + versions_ucsc: + - - ${task.process}: + type: string + description: The process the versions were collected from + - ucsc: + type: string + description: The tool name + - echo $VERSION: + type: eval + description: The expression to obtain the version of the tool + +topics: + versions: + - - ${task.process}: + type: string + description: The process the versions were collected from + - ucsc: + type: string + description: The tool name + - echo $VERSION: + type: eval + description: The expression to obtain the version of the tool + authors: - "@drpatelh" maintainers: diff --git a/modules/nf-core/ucsc/bedgraphtobigwig/tests/main.nf.test b/modules/nf-core/ucsc/bedgraphtobigwig/tests/main.nf.test index d5dbe4a37..94a799ef6 100644 --- a/modules/nf-core/ucsc/bedgraphtobigwig/tests/main.nf.test +++ b/modules/nf-core/ucsc/bedgraphtobigwig/tests/main.nf.test @@ -3,6 +3,10 @@ nextflow_process { name "Test Process UCSC_BEDGRAPHTOBIGWIG" script "../main.nf" process "UCSC_BEDGRAPHTOBIGWIG" + tag "modules" + tag "modules_nfcore" + tag "ucsc" + tag "ucsc/bedgraphtobigwig" test("Should run without failures") { when { diff --git a/modules/nf-core/ucsc/bedgraphtobigwig/tests/main.nf.test.snap b/modules/nf-core/ucsc/bedgraphtobigwig/tests/main.nf.test.snap index 7c731f651..8da5bd01a 100644 --- a/modules/nf-core/ucsc/bedgraphtobigwig/tests/main.nf.test.snap +++ b/modules/nf-core/ucsc/bedgraphtobigwig/tests/main.nf.test.snap @@ -11,7 +11,11 @@ ] ], "1": [ - "versions.yml:md5,db26514184acfdf220bb2f061382cf8c" + [ + "UCSC_BEDGRAPHTOBIGWIG", + "ucsc", + "469" + ] ], "bigwig": [ [ @@ -21,16 +25,20 @@ "test.bigWig:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "versions": [ - "versions.yml:md5,db26514184acfdf220bb2f061382cf8c" + "versions_ucsc": [ + [ + "UCSC_BEDGRAPHTOBIGWIG", + "ucsc", + "469" + ] ] } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2024-10-18T10:47:58.558813949" + "timestamp": "2026-01-19T14:08:59.289945641" }, "Should run without failures": { "content": [ @@ -44,7 +52,11 @@ ] ], "1": [ - "versions.yml:md5,db26514184acfdf220bb2f061382cf8c" + [ + "UCSC_BEDGRAPHTOBIGWIG", + "ucsc", + "469" + ] ], "bigwig": [ [ @@ -54,15 +66,19 @@ "test.bigWig:md5,910ecc7f57e3bbd5fac5a8edba4f615d" ] ], - "versions": [ - "versions.yml:md5,db26514184acfdf220bb2f061382cf8c" + "versions_ucsc": [ + [ + "UCSC_BEDGRAPHTOBIGWIG", + "ucsc", + "469" + ] ] } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2024-10-18T10:47:36.476844229" + "timestamp": "2026-01-19T14:08:54.132930562" } } \ No newline at end of file diff --git a/modules/nf-core/umicollapse/main.nf b/modules/nf-core/umicollapse/main.nf index aec10e851..f6baacf60 100644 --- a/modules/nf-core/umicollapse/main.nf +++ b/modules/nf-core/umicollapse/main.nf @@ -16,7 +16,7 @@ process UMICOLLAPSE { tuple val(meta), path("*.bam"), emit: bam, optional: true tuple val(meta), path("*dedup*fastq.gz"), emit: fastq, optional: true tuple val(meta), path("*_UMICollapse.log"), emit: log - path "versions.yml" , emit: versions + tuple val("${task.process}"), val('umicollapse'), eval("echo ${VERSION}"), emit: versions_umicollapse, topic: versions when: task.ext.when == null || task.ext.when @@ -24,7 +24,7 @@ process UMICOLLAPSE { script: def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" - def VERSION = '1.1.0-0' // WARN: Version information not provided by tool on CLI. Please update this string when bumping container versions. + VERSION = '1.1.0-0' // WARN: Version information not provided by tool on CLI. Please update this string when bumping container versions. // Memory allocation: We need to make sure that both heap and stack size is sufficiently large for // umicollapse. We set the stack size to 5% of the available memory, the heap size to 90% // which leaves 5% for stuff happening outside of java without the scheduler killing the process. @@ -48,16 +48,11 @@ process UMICOLLAPSE { -i ${input} \\ -o ${prefix}.${extension} \\ $args | tee ${prefix}_UMICollapse.log - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - umicollapse: $VERSION - END_VERSIONS """ stub: def prefix = task.ext.prefix ?: "${meta.id}" - def VERSION = '1.0.0-1' + VERSION = '1.1.0-0' // WARN: Version information not provided by tool on CLI. Please update this string when bumping container versions. if ( mode !in [ 'fastq', 'bam' ] ) { error "Mode must be one of 'fastq' or 'bam'." } @@ -65,9 +60,5 @@ process UMICOLLAPSE { """ touch ${prefix}.dedup.${extension} touch ${prefix}_UMICollapse.log - cat <<-END_VERSIONS > versions.yml - "${task.process}": - umicollapse: $VERSION - END_VERSIONS """ } diff --git a/modules/nf-core/umicollapse/meta.yml b/modules/nf-core/umicollapse/meta.yml index 7c4ebc5ec..f2931bd48 100644 --- a/modules/nf-core/umicollapse/meta.yml +++ b/modules/nf-core/umicollapse/meta.yml @@ -1,6 +1,6 @@ name: "umicollapse" -description: Deduplicate reads based on the mapping co-ordinate and the UMI attached - to the read. +description: Deduplicate reads based on the mapping co-ordinate and the UMI + attached to the read. keywords: - umicollapse - deduplication @@ -25,19 +25,21 @@ input: type: file description: Input bam file pattern: "*.bam" + ontologies: [] - bai: type: file description: | BAM index files corresponding to the input BAM file. Optionally can be skipped using [] when using FastQ input. pattern: "*.{bai}" - - - mode: - type: string - description: | - Selects the mode of Umicollapse - either fastq or bam need to be provided. - pattern: "{fastq,bam}" + ontologies: [] + - mode: + type: string + description: | + Selects the mode of Umicollapse - either fastq or bam need to be provided. + pattern: "{fastq,bam}" output: - - bam: - - meta: + bam: + - - meta: type: map description: | Groovy Map containing sample information @@ -46,8 +48,9 @@ output: type: file description: BAM file with deduplicated UMIs. pattern: "*.{bam}" - - fastq: - - meta: + ontologies: [] + fastq: + - - meta: type: map description: | Groovy Map containing sample information @@ -56,8 +59,10 @@ output: type: file description: FASTQ file with deduplicated UMIs. pattern: "*dedup*fastq.gz" - - log: - - meta: + ontologies: + - edam: http://edamontology.org/format_3989 # GZIP format + log: + - - meta: type: map description: | Groovy Map containing sample information @@ -66,11 +71,30 @@ output: type: file description: A log file with the deduplication statistics. pattern: "*_{UMICollapse.log}" - - versions: - - versions.yml: - type: file - description: File containing software versions - pattern: "versions.yml" + ontologies: [] + versions_umicollapse: + - - ${task.process}: + type: string + description: The name of the process + - umicollapse: + type: string + description: The name of the tool + - echo ${VERSION}: + type: eval + description: The expression to obtain the version of the tool + +topics: + versions: + - - ${task.process}: + type: string + description: The name of the process + - umicollapse: + type: string + description: The name of the tool + - echo ${VERSION}: + type: eval + description: The expression to obtain the version of the tool + authors: - "@CharlotteAnne" - "@chris-cheshire" diff --git a/modules/nf-core/umicollapse/tests/main.nf.test b/modules/nf-core/umicollapse/tests/main.nf.test index 66b7a951f..dda6f16c2 100644 --- a/modules/nf-core/umicollapse/tests/main.nf.test +++ b/modules/nf-core/umicollapse/tests/main.nf.test @@ -4,6 +4,9 @@ nextflow_process { script "../main.nf" process "UMICOLLAPSE" + tag "modules" + tag "modules_nfcore" + tag "umicollapse" test("umicollapse single end test") { @@ -26,7 +29,7 @@ nextflow_process { { assert process.success }, { assert snapshot( bam(process.out.bam[0][1]).getSamLinesMD5(), - process.out.versions).match() } + process.out.findAll { key, val -> key.startsWith('versions') }).match() } ) } @@ -53,7 +56,7 @@ nextflow_process { { assert process.success }, { assert snapshot( bam(process.out.bam[0][1]).getSamLinesMD5(), - process.out.versions).match() } + process.out.findAll { key, val -> key.startsWith('versions') }).match() } ) } @@ -80,7 +83,7 @@ nextflow_process { { assert process.success }, { assert snapshot( process.out.fastq, - process.out.versions).match() } + process.out.findAll { key, val -> key.startsWith('versions') }).match() } ) } } @@ -106,7 +109,7 @@ nextflow_process { { assert process.success }, { assert snapshot( process.out.fastq, - process.out.versions).match() } + process.out.findAll { key, val -> key.startsWith('versions') }).match() } ) } } @@ -136,7 +139,7 @@ nextflow_process { { assert process.success }, { assert snapshot( process.out.bam, - process.out.versions).match() } + process.out.findAll { key, val -> key.startsWith('versions') }).match() } ) } @@ -165,10 +168,10 @@ nextflow_process { { assert process.success }, { assert snapshot( process.out.bam, - process.out.versions).match() } + process.out.findAll { key, val -> key.startsWith('versions') }).match() } ) } } -} \ No newline at end of file +} diff --git a/modules/nf-core/umicollapse/tests/main.nf.test.snap b/modules/nf-core/umicollapse/tests/main.nf.test.snap index e903c0ce0..0ffefe956 100644 --- a/modules/nf-core/umicollapse/tests/main.nf.test.snap +++ b/modules/nf-core/umicollapse/tests/main.nf.test.snap @@ -2,28 +2,40 @@ "umicollapse single end test": { "content": [ "9158ea6e7a0e54819e25cbac5fbc5cc0", - [ - "versions.yml:md5,03fdbcb1ba9bd40325ca42859d39deb1" - ] + { + "versions_umicollapse": [ + [ + "UMICOLLAPSE", + "umicollapse", + "1.1.0-0" + ] + ] + } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.10.1" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2024-11-25T17:31:45.024306" + "timestamp": "2026-02-03T10:23:51.999374" }, "umicollapse paired tests": { "content": [ "b7be15ac7aae194b04bdbb56f3534495", - [ - "versions.yml:md5,03fdbcb1ba9bd40325ca42859d39deb1" - ] + { + "versions_umicollapse": [ + [ + "UMICOLLAPSE", + "umicollapse", + "1.1.0-0" + ] + ] + } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.10.1" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2024-11-25T17:31:52.072799" + "timestamp": "2026-02-03T10:24:03.332834" }, "umicollapse fastq test (paired-end)": { "content": [ @@ -35,15 +47,21 @@ "test.dedup.fastq.gz:md5,721a84a2accac988d636e837c60e47bc" ] ], - [ - "versions.yml:md5,03fdbcb1ba9bd40325ca42859d39deb1" - ] + { + "versions_umicollapse": [ + [ + "UMICOLLAPSE", + "umicollapse", + "1.1.0-0" + ] + ] + } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.10.1" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2024-11-24T13:57:36.968147" + "timestamp": "2026-02-03T10:24:24.361959" }, "umicollapse fastq test (single-end)": { "content": [ @@ -56,15 +74,21 @@ "test.dedup.fastq.gz:md5,2e602ed23eb87f434e4f0a9e491c0310" ] ], - [ - "versions.yml:md5,03fdbcb1ba9bd40325ca42859d39deb1" - ] + { + "versions_umicollapse": [ + [ + "UMICOLLAPSE", + "umicollapse", + "1.1.0-0" + ] + ] + } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.10.1" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2024-11-24T13:57:28.328682" + "timestamp": "2026-02-03T10:24:13.865095" }, "umicollapse single end test - stub": { "content": [ @@ -77,15 +101,21 @@ "test.dedup.dedup.bam:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - [ - "versions.yml:md5,c1e0275d81b1c97a9344d216f9154996" - ] + { + "versions_umicollapse": [ + [ + "UMICOLLAPSE", + "umicollapse", + "1.1.0-0" + ] + ] + } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.10.1" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2024-11-24T14:09:40.277318" + "timestamp": "2026-02-03T10:24:31.739076" }, "umicollapse paired tests - stub": { "content": [ @@ -97,14 +127,20 @@ "test.dedup.dedup.bam:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - [ - "versions.yml:md5,c1e0275d81b1c97a9344d216f9154996" - ] + { + "versions_umicollapse": [ + [ + "UMICOLLAPSE", + "umicollapse", + "1.1.0-0" + ] + ] + } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.10.1" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2024-11-24T14:09:44.224965" + "timestamp": "2026-02-03T10:24:39.376789" } } \ No newline at end of file diff --git a/modules/nf-core/umitools/dedup/environment.yml b/modules/nf-core/umitools/dedup/environment.yml index 3ab4fdce4..4d05188be 100644 --- a/modules/nf-core/umitools/dedup/environment.yml +++ b/modules/nf-core/umitools/dedup/environment.yml @@ -4,13 +4,14 @@ channels: - conda-forge - bioconda dependencies: - - bioconda::umi_tools=1.1.5 - - python=3.9.18 - - matplotlib=3.8.2 - - scipy=1.12.0 - - regex=2023.12.25 - - numpy=1.26.4 - - pandas=2.2.0 - - pysam=0.22.0 - - future=0.18.3 - - pybktree=1.1 + # renovate: datasource=conda depName=bioconda/umi_tools + - bioconda::umi_tools=1.1.6 + - conda-forge::future=0.18.3 + - conda-forge::matplotlib=3.8.2 + - conda-forge::numpy=1.26.4 + - conda-forge::pandas=2.2.0 + - conda-forge::python=3.9.18 + - conda-forge::regex=2023.12.25 + - conda-forge::scipy=1.12.0 + - conda-forge::pybktree=1.1 + - bioconda::pysam=0.22.0 diff --git a/modules/nf-core/umitools/dedup/main.nf b/modules/nf-core/umitools/dedup/main.nf index 1e2a2aae0..3ccfd009a 100644 --- a/modules/nf-core/umitools/dedup/main.nf +++ b/modules/nf-core/umitools/dedup/main.nf @@ -4,8 +4,8 @@ process UMITOOLS_DEDUP { 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' }" + 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/32/32476f0107d72dbd2210a4e56b2873abde07300025cc11052680475509d2db81/data' : + 'community.wave.seqera.io/library/umi_tools_future_matplotlib_numpy_pruned:1ee668bafc8c9f81' }" input: tuple val(meta), path(bam), path(bai) @@ -17,7 +17,7 @@ process UMITOOLS_DEDUP { tuple val(meta), path("*edit_distance.tsv"), optional:true, emit: tsv_edit_distance tuple val(meta), path("*per_umi.tsv") , optional:true, emit: tsv_per_umi tuple val(meta), path("*per_position.tsv") , optional:true, emit: tsv_umi_per_position - path "versions.yml" , emit: versions + tuple val("${task.process}"), val('umitools'), eval("umi_tools --version | sed 's/UMI-tools version: //'"), emit: versions_umitools, topic: versions when: task.ext.when == null || task.ext.when @@ -31,7 +31,10 @@ process UMITOOLS_DEDUP { if (!(args ==~ /.*--random-seed.*/)) {args += " --random-seed=100"} """ - PYTHONHASHSEED=0 umi_tools \\ + #Prevent matplotlib from using /tmp + mkdir .tmp && chmod 777 .tmp + + MPLCONFIGDIR=.tmp TMPDIR=.tmp PYTHONHASHSEED=0 umi_tools \\ dedup \\ -I $bam \\ -S ${prefix}.bam \\ @@ -39,11 +42,6 @@ process UMITOOLS_DEDUP { $stats \\ $paired \\ $args - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - umitools: \$( umi_tools --version | sed '/version:/!d; s/.*: //' ) - END_VERSIONS """ stub: @@ -54,10 +52,5 @@ process UMITOOLS_DEDUP { touch ${prefix}_edit_distance.tsv touch ${prefix}_per_umi.tsv touch ${prefix}_per_position.tsv - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - umitools: \$( umi_tools --version | sed '/version:/!d; s/.*: //' ) - END_VERSIONS """ } diff --git a/modules/nf-core/umitools/dedup/meta.yml b/modules/nf-core/umitools/dedup/meta.yml index 6cbd84116..1dc455981 100644 --- a/modules/nf-core/umitools/dedup/meta.yml +++ b/modules/nf-core/umitools/dedup/meta.yml @@ -25,18 +25,20 @@ input: description: | BAM file containing reads to be deduplicated via UMIs. pattern: "*.{bam}" + ontologies: [] - bai: type: file description: | BAM index files corresponding to the input BAM file. pattern: "*.{bai}" - - - get_output_stats: - type: boolean - description: | - Whether or not to generate output stats. + ontologies: [] + - get_output_stats: + type: boolean + description: | + Whether or not to generate output stats. output: - - bam: - - meta: + bam: + - - meta: type: map description: | Groovy Map containing sample information @@ -45,8 +47,9 @@ output: type: file description: BAM file with deduplicated UMIs. pattern: "*.{bam}" - - log: - - meta: + ontologies: [] + log: + - - meta: type: map description: | Groovy Map containing sample information @@ -55,8 +58,9 @@ output: type: file description: File with logging information pattern: "*.{log}" - - tsv_edit_distance: - - meta: + ontologies: [] + tsv_edit_distance: + - - meta: type: map description: | Groovy Map containing sample information @@ -66,8 +70,10 @@ output: description: Reports the (binned) average edit distance between the UMIs at each position. pattern: "*edit_distance.tsv" - - tsv_per_umi: - - meta: + ontologies: + - edam: http://edamontology.org/format_3475 # TSV + tsv_per_umi: + - - meta: type: map description: | Groovy Map containing sample information @@ -76,8 +82,10 @@ output: type: file description: UMI-level summary statistics. pattern: "*per_umi.tsv" - - tsv_umi_per_position: - - meta: + ontologies: + - edam: http://edamontology.org/format_3475 # TSV + tsv_umi_per_position: + - - meta: type: map description: | Groovy Map containing sample information @@ -86,11 +94,30 @@ output: type: file description: Tabulates the counts for unique combinations of UMI and position. pattern: "*per_position.tsv" - - versions: - - versions.yml: - type: file - description: File containing software versions - pattern: "versions.yml" + ontologies: + - edam: http://edamontology.org/format_3475 # TSV + versions_umitools: + - - ${task.process}: + type: string + description: The name of the process + - umitools: + type: string + description: The name of the tool + - "umi_tools --version | sed 's/UMI-tools version: //'": + type: eval + description: The expression to obtain the version of the tool + +topics: + versions: + - - ${task.process}: + type: string + description: The name of the process + - umitools: + type: string + description: The name of the tool + - "umi_tools --version | sed 's/UMI-tools version: //'": + type: eval + description: The expression to obtain the version of the tool authors: - "@drpatelh" - "@grst" diff --git a/modules/nf-core/umitools/dedup/tests/main.nf.test b/modules/nf-core/umitools/dedup/tests/main.nf.test index eb41e7519..dd7096bfb 100644 --- a/modules/nf-core/umitools/dedup/tests/main.nf.test +++ b/modules/nf-core/umitools/dedup/tests/main.nf.test @@ -4,6 +4,10 @@ nextflow_process { script "../main.nf" process "UMITOOLS_DEDUP" + tag "modules" + tag "modules_nfcore" + tag "umitools" + tag "umitools/dedup" test("se - no stats") { config "./nextflow.config" @@ -29,7 +33,7 @@ nextflow_process { { assert path("${process.out.log[0][1]}").exists() }, { assert snapshot( bam(process.out.bam[0][1]).getSamLinesMD5(), - process.out.versions).match() } + process.out.findAll { key, val -> key.startsWith('versions') }).match() } ) } } @@ -58,7 +62,7 @@ nextflow_process { { assert path("${process.out.log[0][1]}").exists() }, { assert snapshot( bam(process.out.bam[0][1]).getSamLinesMD5(), - process.out.versions).match() } + process.out.findAll { key, val -> key.startsWith('versions') }).match() } ) } } @@ -90,7 +94,7 @@ nextflow_process { process.out.tsv_edit_distance, process.out.tsv_per_umi, process.out.tsv_umi_per_position, - process.out.versions).match() } + process.out.findAll { key, val -> key.startsWith('versions') }).match() } ) } } diff --git a/modules/nf-core/umitools/dedup/tests/main.nf.test.snap b/modules/nf-core/umitools/dedup/tests/main.nf.test.snap index 04b81692a..19f0dfe95 100644 --- a/modules/nf-core/umitools/dedup/tests/main.nf.test.snap +++ b/modules/nf-core/umitools/dedup/tests/main.nf.test.snap @@ -65,15 +65,21 @@ "test.dedup_per_umi_per_position.tsv:md5,2e1a12e6f720510880068deddeefe063" ] ], - [ - "versions.yml:md5,e2f5146464c09bf7ae98c85ea5410e50" - ] + { + "versions_umitools": [ + [ + "UMITOOLS_DEDUP", + "umitools", + "1.1.6" + ] + ] + } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.10.1" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2024-11-25T17:25:28.939957" + "timestamp": "2026-02-02T17:10:09.998378" }, "se - no stats - stub": { "content": [ @@ -96,27 +102,39 @@ "se - no stats": { "content": [ "9158ea6e7a0e54819e25cbac5fbc5cc0", - [ - "versions.yml:md5,e2f5146464c09bf7ae98c85ea5410e50" - ] + { + "versions_umitools": [ + [ + "UMITOOLS_DEDUP", + "umitools", + "1.1.6" + ] + ] + } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.10.1" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2024-11-23T09:06:54.373171" + "timestamp": "2026-02-02T17:08:30.01886" }, "pe - no stats": { "content": [ "b7be15ac7aae194b04bdbb56f3534495", - [ - "versions.yml:md5,e2f5146464c09bf7ae98c85ea5410e50" - ] + { + "versions_umitools": [ + [ + "UMITOOLS_DEDUP", + "umitools", + "1.1.6" + ] + ] + } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.10.1" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2024-11-25T17:24:51.423637" + "timestamp": "2026-02-02T17:09:22.650959" } } \ No newline at end of file diff --git a/modules/nf-core/umitools/dedup/umitools-dedup.diff b/modules/nf-core/umitools/dedup/umitools-dedup.diff deleted file mode 100644 index d3204eb1f..000000000 --- a/modules/nf-core/umitools/dedup/umitools-dedup.diff +++ /dev/null @@ -1,24 +0,0 @@ -Changes in component 'nf-core/umitools/dedup' -Changes in 'umitools/dedup/environment.yml': ---- modules/nf-core/umitools/dedup/environment.yml -+++ modules/nf-core/umitools/dedup/environment.yml -@@ -5,3 +5,12 @@ - - bioconda - dependencies: - - bioconda::umi_tools=1.1.5 -+ - python=3.9.18 -+ - matplotlib=3.8.2 -+ - scipy=1.12.0 -+ - regex=2023.12.25 -+ - numpy=1.26.4 -+ - pandas=2.2.0 -+ - pysam=0.22.0 -+ - future=0.18.3 -+ - pybktree=1.1 - -'modules/nf-core/umitools/dedup/meta.yml' is unchanged -'modules/nf-core/umitools/dedup/main.nf' is unchanged -'modules/nf-core/umitools/dedup/tests/main.nf.test.snap' is unchanged -'modules/nf-core/umitools/dedup/tests/nextflow.config' is unchanged -'modules/nf-core/umitools/dedup/tests/main.nf.test' is unchanged -************************************************************ diff --git a/modules/nf-core/umitools/extract/environment.yml b/modules/nf-core/umitools/extract/environment.yml index 3ab4fdce4..4d05188be 100644 --- a/modules/nf-core/umitools/extract/environment.yml +++ b/modules/nf-core/umitools/extract/environment.yml @@ -4,13 +4,14 @@ channels: - conda-forge - bioconda dependencies: - - bioconda::umi_tools=1.1.5 - - python=3.9.18 - - matplotlib=3.8.2 - - scipy=1.12.0 - - regex=2023.12.25 - - numpy=1.26.4 - - pandas=2.2.0 - - pysam=0.22.0 - - future=0.18.3 - - pybktree=1.1 + # renovate: datasource=conda depName=bioconda/umi_tools + - bioconda::umi_tools=1.1.6 + - conda-forge::future=0.18.3 + - conda-forge::matplotlib=3.8.2 + - conda-forge::numpy=1.26.4 + - conda-forge::pandas=2.2.0 + - conda-forge::python=3.9.18 + - conda-forge::regex=2023.12.25 + - conda-forge::scipy=1.12.0 + - conda-forge::pybktree=1.1 + - bioconda::pysam=0.22.0 diff --git a/modules/nf-core/umitools/extract/main.nf b/modules/nf-core/umitools/extract/main.nf index b97900e09..82d18cd59 100644 --- a/modules/nf-core/umitools/extract/main.nf +++ b/modules/nf-core/umitools/extract/main.nf @@ -5,8 +5,8 @@ process UMITOOLS_EXTRACT { 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' }" + 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/32/32476f0107d72dbd2210a4e56b2873abde07300025cc11052680475509d2db81/data' : + 'community.wave.seqera.io/library/umi_tools_future_matplotlib_numpy_pruned:1ee668bafc8c9f81' }" input: tuple val(meta), path(reads) @@ -14,7 +14,7 @@ process UMITOOLS_EXTRACT { output: tuple val(meta), path("*.fastq.gz"), emit: reads tuple val(meta), path("*.log") , emit: log - path "versions.yml" , emit: versions + tuple val("${task.process}"), val('umitools'), eval("umi_tools --version | sed -n '/version:/s/.*: //p'"), emit: versions_umitools, topic: versions when: task.ext.when == null || task.ext.when @@ -30,11 +30,6 @@ process UMITOOLS_EXTRACT { -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 { """ @@ -46,11 +41,6 @@ process UMITOOLS_EXTRACT { --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 """ } @@ -65,10 +55,5 @@ process UMITOOLS_EXTRACT { """ 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 index 648ffbd26..0bec392a5 100644 --- a/modules/nf-core/umitools/extract/meta.yml +++ b/modules/nf-core/umitools/extract/meta.yml @@ -25,8 +25,8 @@ input: description: | List of input FASTQ files whose UMIs will be extracted. output: - - reads: - - meta: + reads: + - - meta: type: map description: | Groovy Map containing sample information @@ -37,8 +37,9 @@ output: 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: - - meta: + ontologies: [] + log: + - - meta: type: map description: | Groovy Map containing sample information @@ -47,11 +48,30 @@ output: type: file description: Logfile for umi_tools pattern: "*.{log}" - - versions: - - versions.yml: - type: file - description: File containing software versions - pattern: "versions.yml" + ontologies: [] + versions_umitools: + - - ${task.process}: + type: string + description: The name of the process + - umitools: + type: string + description: The name of the tool + - "umi_tools --version | sed -n '/version:/s/.*: //p'": + type: eval + description: The expression to obtain the version of umitools + +topics: + versions: + - - ${task.process}: + type: string + description: The name of the process + - umitools: + type: string + description: The name of the tool + - "umi_tools --version | sed -n '/version:/s/.*: //p'": + type: eval + description: The expression to obtain the version of umitools + authors: - "@drpatelh" - "@grst" diff --git a/modules/nf-core/umitools/extract/tests/main.nf.test b/modules/nf-core/umitools/extract/tests/main.nf.test index 3eec566be..b6fa0482f 100644 --- a/modules/nf-core/umitools/extract/tests/main.nf.test +++ b/modules/nf-core/umitools/extract/tests/main.nf.test @@ -4,6 +4,10 @@ nextflow_process { script "../main.nf" process "UMITOOLS_EXTRACT" config "./nextflow.config" + tag "modules_nfcore" + tag "modules" + tag "umitools" + tag "umitools/extract" test("single end") { @@ -21,9 +25,9 @@ nextflow_process { 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 + process.out.reads.collect { item -> item.collect { element -> element instanceof Map ? element : file(element).name }}, + process.out.log.collect { item -> item.collect { element -> element instanceof Map ? element : file(element).name }}, + process.out.findAll { key, val -> key.startsWith('versions') } ).match() } ) } @@ -70,8 +74,8 @@ nextflow_process { { 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 + process.out.log.collect { item -> item.collect { element -> element instanceof Map ? element : file(element).name }}, + process.out.findAll { key, val -> key.startsWith('versions') } ).match() } ) } @@ -99,4 +103,4 @@ nextflow_process { ) } } -} \ 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 index b1159054b..916234283 100644 --- a/modules/nf-core/umitools/extract/tests/main.nf.test.snap +++ b/modules/nf-core/umitools/extract/tests/main.nf.test.snap @@ -24,7 +24,11 @@ ] ], "2": [ - "versions.yml:md5,568d243174c081a0301e74ed42e59b48" + [ + "UMITOOLS_EXTRACT", + "umitools", + "1.1.6" + ] ], "log": [ [ @@ -47,16 +51,20 @@ ] ] ], - "versions": [ - "versions.yml:md5,568d243174c081a0301e74ed42e59b48" + "versions_umitools": [ + [ + "UMITOOLS_EXTRACT", + "umitools", + "1.1.6" + ] ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" + "nf-test": "0.9.3", + "nextflow": "25.10.3" }, - "timestamp": "2024-07-02T15:05:20.008312" + "timestamp": "2026-02-03T13:17:55.612739621" }, "single end - stub": { "content": [ @@ -80,7 +88,11 @@ ] ], "2": [ - "versions.yml:md5,568d243174c081a0301e74ed42e59b48" + [ + "UMITOOLS_EXTRACT", + "umitools", + "1.1.6" + ] ], "log": [ [ @@ -100,16 +112,20 @@ "test.umi_extract.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" ] ], - "versions": [ - "versions.yml:md5,568d243174c081a0301e74ed42e59b48" + "versions_umitools": [ + [ + "UMITOOLS_EXTRACT", + "umitools", + "1.1.6" + ] ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" + "nf-test": "0.9.3", + "nextflow": "25.10.3" }, - "timestamp": "2024-07-02T15:04:12.145999" + "timestamp": "2026-02-03T13:17:37.310716092" }, "pair end": { "content": [ @@ -124,15 +140,21 @@ "test.umi_extract.log" ] ], - [ - "versions.yml:md5,568d243174c081a0301e74ed42e59b48" - ] + { + "versions_umitools": [ + [ + "UMITOOLS_EXTRACT", + "umitools", + "1.1.6" + ] + ] + } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" + "nf-test": "0.9.3", + "nextflow": "25.10.3" }, - "timestamp": "2024-07-02T15:21:09.578031" + "timestamp": "2026-02-03T13:17:47.683802227" }, "single end": { "content": [ @@ -154,14 +176,20 @@ "test.umi_extract.log" ] ], - [ - "versions.yml:md5,568d243174c081a0301e74ed42e59b48" - ] + { + "versions_umitools": [ + [ + "UMITOOLS_EXTRACT", + "umitools", + "1.1.6" + ] + ] + } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" + "nf-test": "0.9.3", + "nextflow": "25.10.3" }, - "timestamp": "2024-07-02T15:03:52.464606" + "timestamp": "2026-02-03T13:17:29.607052009" } } \ 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 index c866f5a00..628f5fcd7 100644 --- a/modules/nf-core/umitools/extract/tests/nextflow.config +++ b/modules/nf-core/umitools/extract/tests/nextflow.config @@ -1,7 +1,7 @@ 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/umitools-extract.diff b/modules/nf-core/umitools/extract/umitools-extract.diff deleted file mode 100644 index a32c9112b..000000000 --- a/modules/nf-core/umitools/extract/umitools-extract.diff +++ /dev/null @@ -1,24 +0,0 @@ -Changes in component 'nf-core/umitools/extract' -Changes in 'umitools/extract/environment.yml': ---- modules/nf-core/umitools/extract/environment.yml -+++ modules/nf-core/umitools/extract/environment.yml -@@ -5,3 +5,12 @@ - - bioconda - dependencies: - - bioconda::umi_tools=1.1.5 -+ - python=3.9.18 -+ - matplotlib=3.8.2 -+ - scipy=1.12.0 -+ - regex=2023.12.25 -+ - numpy=1.26.4 -+ - pandas=2.2.0 -+ - pysam=0.22.0 -+ - future=0.18.3 -+ - pybktree=1.1 - -'modules/nf-core/umitools/extract/meta.yml' is unchanged -'modules/nf-core/umitools/extract/main.nf' is unchanged -'modules/nf-core/umitools/extract/tests/main.nf.test.snap' is unchanged -'modules/nf-core/umitools/extract/tests/nextflow.config' is unchanged -'modules/nf-core/umitools/extract/tests/main.nf.test' is unchanged -************************************************************ diff --git a/modules/nf-core/umitools/prepareforrsem/environment.yml b/modules/nf-core/umitools/prepareforrsem/environment.yml index 3ab4fdce4..4d05188be 100644 --- a/modules/nf-core/umitools/prepareforrsem/environment.yml +++ b/modules/nf-core/umitools/prepareforrsem/environment.yml @@ -4,13 +4,14 @@ channels: - conda-forge - bioconda dependencies: - - bioconda::umi_tools=1.1.5 - - python=3.9.18 - - matplotlib=3.8.2 - - scipy=1.12.0 - - regex=2023.12.25 - - numpy=1.26.4 - - pandas=2.2.0 - - pysam=0.22.0 - - future=0.18.3 - - pybktree=1.1 + # renovate: datasource=conda depName=bioconda/umi_tools + - bioconda::umi_tools=1.1.6 + - conda-forge::future=0.18.3 + - conda-forge::matplotlib=3.8.2 + - conda-forge::numpy=1.26.4 + - conda-forge::pandas=2.2.0 + - conda-forge::python=3.9.18 + - conda-forge::regex=2023.12.25 + - conda-forge::scipy=1.12.0 + - conda-forge::pybktree=1.1 + - bioconda::pysam=0.22.0 diff --git a/modules/nf-core/umitools/prepareforrsem/main.nf b/modules/nf-core/umitools/prepareforrsem/main.nf index 07c4381ad..668201348 100644 --- a/modules/nf-core/umitools/prepareforrsem/main.nf +++ b/modules/nf-core/umitools/prepareforrsem/main.nf @@ -4,8 +4,8 @@ process UMITOOLS_PREPAREFORRSEM { 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' }" + 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/32/32476f0107d72dbd2210a4e56b2873abde07300025cc11052680475509d2db81/data' : + 'community.wave.seqera.io/library/umi_tools_future_matplotlib_numpy_pruned:1ee668bafc8c9f81' }" input: tuple val(meta), path(bam), path(bai) @@ -13,7 +13,7 @@ process UMITOOLS_PREPAREFORRSEM { output: tuple val(meta), path('*.bam'), emit: bam tuple val(meta), path('*.log'), emit: log - path "versions.yml" , emit: versions + tuple val("${task.process}"), val('umitools'), eval("umi_tools --version | sed 's/UMI-tools version: //'"), emit: versions_umitools, topic: versions when: task.ext.when == null || task.ext.when @@ -28,21 +28,11 @@ process UMITOOLS_PREPAREFORRSEM { --stdout=${prefix}.bam \\ --log=${prefix}.prepare_for_rsem.log \\ $args - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - umitools: \$( umi_tools --version | sed '/version:/!d; s/.*: //' ) - END_VERSIONS """ stub: """ touch ${meta.id}.bam touch ${meta.id}.log - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - umitools: \$( umi_tools --version | sed '/version:/!d; s/.*: //' ) - END_VERSIONS """ } diff --git a/modules/nf-core/umitools/prepareforrsem/meta.yml b/modules/nf-core/umitools/prepareforrsem/meta.yml index 3e8ead257..83b446754 100644 --- a/modules/nf-core/umitools/prepareforrsem/meta.yml +++ b/modules/nf-core/umitools/prepareforrsem/meta.yml @@ -24,14 +24,16 @@ input: description: | BAM file containing reads to be deduplicated via UMIs. pattern: "*.{bam}" + ontologies: [] - bai: type: file description: | BAM index files corresponding to the input BAM file. pattern: "*.{bai}" + ontologies: [] output: - - bam: - - meta: + bam: + - - meta: type: map description: | Groovy Map containing sample information @@ -40,8 +42,9 @@ output: type: file description: Prepared BAM file. pattern: "*.{bam}" - - log: - - meta: + ontologies: [] + log: + - - meta: type: map description: | Groovy Map containing sample information @@ -50,11 +53,30 @@ output: type: file description: File with logging information pattern: "*.{log}" - - versions: - - versions.yml: - type: file - description: File containing software versions - pattern: "versions.yml" + ontologies: [] + versions_umitools: + - - ${task.process}: + type: string + description: The name of the process + - umitools: + type: string + description: The name of the tool + - "umi_tools --version | sed 's/UMI-tools version: //'": + type: eval + description: The expression to obtain the version of the tool + +topics: + versions: + - - ${task.process}: + type: string + description: The name of the process + - umitools: + type: string + description: The name of the tool + - "umi_tools --version | sed 's/UMI-tools version: //'": + type: eval + description: The expression to obtain the version of the tool + authors: - "@drpatelh" - "@pinin4fjords" diff --git a/modules/nf-core/umitools/prepareforrsem/tests/main.nf.test b/modules/nf-core/umitools/prepareforrsem/tests/main.nf.test index 4dfb522a3..0ba6db8b8 100644 --- a/modules/nf-core/umitools/prepareforrsem/tests/main.nf.test +++ b/modules/nf-core/umitools/prepareforrsem/tests/main.nf.test @@ -4,6 +4,10 @@ nextflow_process { script "../main.nf" process "UMITOOLS_PREPAREFORRSEM" + tag "modules" + tag "modules_nfcore" + tag "umitools" + tag "umitools/prepareforrsem" test("sarscov2 - bam") { @@ -22,8 +26,10 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(process.out.bam).match('bam_sarscov2_bam') }, - { assert snapshot(process.out.versions).match('versions_sarscov2_bam') } + { assert snapshot( + process.out.bam, + process.out.findAll { key, val -> key.startsWith('versions') } + ).match() } ) } @@ -48,8 +54,10 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(process.out.bam).match('bam_sarscov2_bam - stub') }, - { assert snapshot(process.out.versions).match('versions_sarscov2_bam - stub') } + { assert snapshot( + process.out.bam, + process.out.findAll { key, val -> key.startsWith('versions') } + ).match() } ) } diff --git a/modules/nf-core/umitools/prepareforrsem/tests/main.nf.test.snap b/modules/nf-core/umitools/prepareforrsem/tests/main.nf.test.snap index c1e863f6f..c2ffb947f 100644 --- a/modules/nf-core/umitools/prepareforrsem/tests/main.nf.test.snap +++ b/modules/nf-core/umitools/prepareforrsem/tests/main.nf.test.snap @@ -1,17 +1,5 @@ { - "versions_sarscov2_bam": { - "content": [ - [ - "versions.yml:md5,3403849e88fbd33fadd928f8b6ca60bb" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-02-16T09:46:33.206750132" - }, - "bam_sarscov2_bam": { + "sarscov2 - bam - stub": { "content": [ [ [ @@ -19,17 +7,26 @@ "id": "test", "single_end": false }, - "test.bam:md5,fe4b8302182615651e4e7784ec67c819" + "test.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + { + "versions_umitools": [ + [ + "UMITOOLS_PREPAREFORRSEM", + "umitools", + "1.1.6" + ] ] - ] + } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2024-02-12T17:33:02.066537672" + "timestamp": "2026-02-03T09:49:37.596393" }, - "bam_sarscov2_bam - stub": { + "sarscov2 - bam": { "content": [ [ [ @@ -37,26 +34,23 @@ "id": "test", "single_end": false }, - "test.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.bam:md5,fe4b8302182615651e4e7784ec67c819" ] - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-02-12T17:33:39.36279218" - }, - "versions_sarscov2_bam - stub": { - "content": [ - [ - "versions.yml:md5,3403849e88fbd33fadd928f8b6ca60bb" - ] + ], + { + "versions_umitools": [ + [ + "UMITOOLS_PREPAREFORRSEM", + "umitools", + "1.1.6" + ] + ] + } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2024-02-16T09:46:47.363697981" + "timestamp": "2026-02-03T09:49:09.172528" } } \ No newline at end of file diff --git a/modules/nf-core/umitools/prepareforrsem/umitools-prepareforrsem.diff b/modules/nf-core/umitools/prepareforrsem/umitools-prepareforrsem.diff deleted file mode 100644 index 88eb12de8..000000000 --- a/modules/nf-core/umitools/prepareforrsem/umitools-prepareforrsem.diff +++ /dev/null @@ -1,23 +0,0 @@ -Changes in component 'nf-core/umitools/prepareforrsem' -Changes in 'umitools/prepareforrsem/environment.yml': ---- modules/nf-core/umitools/prepareforrsem/environment.yml -+++ modules/nf-core/umitools/prepareforrsem/environment.yml -@@ -5,3 +5,12 @@ - - bioconda - dependencies: - - bioconda::umi_tools=1.1.5 -+ - python=3.9.18 -+ - matplotlib=3.8.2 -+ - scipy=1.12.0 -+ - regex=2023.12.25 -+ - numpy=1.26.4 -+ - pandas=2.2.0 -+ - pysam=0.22.0 -+ - future=0.18.3 -+ - pybktree=1.1 - -'modules/nf-core/umitools/prepareforrsem/meta.yml' is unchanged -'modules/nf-core/umitools/prepareforrsem/main.nf' is unchanged -'modules/nf-core/umitools/prepareforrsem/tests/main.nf.test.snap' is unchanged -'modules/nf-core/umitools/prepareforrsem/tests/main.nf.test' is unchanged -************************************************************ diff --git a/modules/nf-core/untar/main.nf b/modules/nf-core/untar/main.nf index e712ebe63..b9c324dac 100644 --- a/modules/nf-core/untar/main.nf +++ b/modules/nf-core/untar/main.nf @@ -12,7 +12,7 @@ process UNTAR { output: tuple val(meta), path("${prefix}"), emit: untar - path "versions.yml", emit: versions + tuple val("${task.process}"), val('untar'), eval('tar --version 2>&1 | head -1 | sed "s/tar (GNU tar) //; s/ Copyright.*//"'), emit: versions_untar, topic: versions when: task.ext.when == null || task.ext.when @@ -43,10 +43,6 @@ process UNTAR { ${args2} fi - cat <<-END_VERSIONS > versions.yml - "${task.process}": - untar: \$(echo \$(tar --version 2>&1) | sed 's/^.*(GNU tar) //; s/ Copyright.*\$//') - END_VERSIONS """ stub: @@ -75,10 +71,5 @@ process UNTAR { fi done fi - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - untar: \$(echo \$(tar --version 2>&1) | sed 's/^.*(GNU tar) //; s/ Copyright.*\$//') - END_VERSIONS """ } diff --git a/modules/nf-core/untar/meta.yml b/modules/nf-core/untar/meta.yml index 3a37bb35c..571d8078a 100644 --- a/modules/nf-core/untar/meta.yml +++ b/modules/nf-core/untar/meta.yml @@ -1,5 +1,5 @@ name: untar -description: Extract files. +description: Extract files from tar, tar.gz, tar.bz2, tar.xz archives keywords: - untar - uncompress @@ -7,7 +7,7 @@ keywords: tools: - untar: description: | - Extract tar.gz files. + Extract tar, tar.gz, tar.bz2, tar.xz files. documentation: https://www.gnu.org/software/tar/manual/ licence: ["GPL-3.0-or-later"] identifier: "" @@ -19,11 +19,14 @@ input: e.g. [ id:'test', single_end:false ] - archive: type: file - description: File to be untar - pattern: "*.{tar}.{gz}" + description: File to be untarred + pattern: "*.{tar,tar.gz,tar.bz2,tar.xz}" + ontologies: + - edam: http://edamontology.org/format_3981 # TAR format + - edam: http://edamontology.org/format_3989 # GZIP format output: - - untar: - - meta: + untar: + - - meta: type: map description: | Groovy Map containing sample information @@ -35,11 +38,29 @@ output: Groovy Map containing sample information e.g. [ id:'test', single_end:false ] pattern: "*/" - - versions: - - versions.yml: - type: file - description: File containing software versions - pattern: "versions.yml" + versions_untar: + - - ${task.process}: + type: string + description: The name of the process + - untar: + type: string + description: The name of the tool + - tar --version 2>&1 | head -1 | sed "s/tar (GNU tar) //; s/ Copyright.*//": + type: eval + description: The expression to obtain the version of the tool + +topics: + versions: + - - ${task.process}: + type: string + description: The name of the process + - untar: + type: string + description: The name of the tool + - tar --version 2>&1 | head -1 | sed "s/tar (GNU tar) //; s/ Copyright.*//": + type: eval + description: The expression to obtain the version of the tool + authors: - "@joseespinosa" - "@drpatelh" diff --git a/modules/nf-core/untar/tests/main.nf.test b/modules/nf-core/untar/tests/main.nf.test index f556118ff..fde8db16a 100644 --- a/modules/nf-core/untar/tests/main.nf.test +++ b/modules/nf-core/untar/tests/main.nf.test @@ -3,6 +3,9 @@ nextflow_process { name "Test Process UNTAR" script "../main.nf" process "UNTAR" + tag "modules" + tag "modules_nfcore" + tag "untar" test("test_untar") { @@ -17,7 +20,10 @@ nextflow_process { then { assertAll ( { assert process.success }, - { assert snapshot(process.out).match() }, + { assert snapshot( + process.out.untar, + process.out.findAll { key, val -> key.startsWith('versions') } + ).match() }, ) } } @@ -35,7 +41,10 @@ nextflow_process { then { assertAll ( { assert process.success }, - { assert snapshot(process.out).match() }, + { assert snapshot( + process.out.untar, + process.out.findAll { key, val -> key.startsWith('versions') } + ).match() }, ) } } @@ -55,7 +64,10 @@ nextflow_process { then { assertAll ( { assert process.success }, - { assert snapshot(process.out).match() }, + { assert snapshot( + process.out.untar, + process.out.findAll { key, val -> key.startsWith('versions') } + ).match() }, ) } } @@ -75,7 +87,10 @@ nextflow_process { then { assertAll ( { assert process.success }, - { assert snapshot(process.out).match() }, + { assert snapshot( + process.out.untar, + process.out.findAll { key, val -> key.startsWith('versions') } + ).match() }, ) } } diff --git a/modules/nf-core/untar/tests/main.nf.test.snap b/modules/nf-core/untar/tests/main.nf.test.snap index ceb91b792..51a414dd4 100644 --- a/modules/nf-core/untar/tests/main.nf.test.snap +++ b/modules/nf-core/untar/tests/main.nf.test.snap @@ -1,158 +1,118 @@ { "test_untar_onlyfiles": { "content": [ - { - "0": [ + [ + [ + [ + + ], [ - [ - - ], - [ - "hello.txt:md5,e59ff97941044f85df5297e1c302d260" - ] + "hello.txt:md5,e59ff97941044f85df5297e1c302d260" ] - ], - "1": [ - "versions.yml:md5,6063247258c56fd271d076bb04dd7536" - ], - "untar": [ + ] + ], + { + "versions_untar": [ [ - [ - - ], - [ - "hello.txt:md5,e59ff97941044f85df5297e1c302d260" - ] + "UNTAR", + "untar", + "1.34" ] - ], - "versions": [ - "versions.yml:md5,6063247258c56fd271d076bb04dd7536" ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.3" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2024-07-10T12:04:28.231047" + "timestamp": "2026-01-28T17:49:32.000491" }, "test_untar_onlyfiles - stub": { "content": [ - { - "0": [ + [ + [ + [ + + ], [ - [ - - ], - [ - "hello.txt:md5,d41d8cd98f00b204e9800998ecf8427e" - ] + "hello.txt:md5,d41d8cd98f00b204e9800998ecf8427e" ] - ], - "1": [ - "versions.yml:md5,6063247258c56fd271d076bb04dd7536" - ], - "untar": [ + ] + ], + { + "versions_untar": [ [ - [ - - ], - [ - "hello.txt:md5,d41d8cd98f00b204e9800998ecf8427e" - ] + "UNTAR", + "untar", + "1.34" ] - ], - "versions": [ - "versions.yml:md5,6063247258c56fd271d076bb04dd7536" ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.3" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2024-07-10T12:04:45.773103" + "timestamp": "2026-01-28T17:49:58.812479" }, "test_untar - stub": { "content": [ - { - "0": [ + [ + [ + [ + + ], [ - [ - - ], - [ - "hash.k2d:md5,d41d8cd98f00b204e9800998ecf8427e", - "opts.k2d:md5,d41d8cd98f00b204e9800998ecf8427e", - "taxo.k2d:md5,d41d8cd98f00b204e9800998ecf8427e" - ] + "hash.k2d:md5,d41d8cd98f00b204e9800998ecf8427e", + "opts.k2d:md5,d41d8cd98f00b204e9800998ecf8427e", + "taxo.k2d:md5,d41d8cd98f00b204e9800998ecf8427e" ] - ], - "1": [ - "versions.yml:md5,6063247258c56fd271d076bb04dd7536" - ], - "untar": [ + ] + ], + { + "versions_untar": [ [ - [ - - ], - [ - "hash.k2d:md5,d41d8cd98f00b204e9800998ecf8427e", - "opts.k2d:md5,d41d8cd98f00b204e9800998ecf8427e", - "taxo.k2d:md5,d41d8cd98f00b204e9800998ecf8427e" - ] + "UNTAR", + "untar", + "1.34" ] - ], - "versions": [ - "versions.yml:md5,6063247258c56fd271d076bb04dd7536" ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.3" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2024-07-10T12:04:36.777441" + "timestamp": "2026-01-28T17:49:48.119456" }, "test_untar": { "content": [ - { - "0": [ + [ + [ + [ + + ], [ - [ - - ], - [ - "hash.k2d:md5,8b8598468f54a7087c203ad0190555d9", - "opts.k2d:md5,a033d00cf6759407010b21700938f543", - "taxo.k2d:md5,094d5891cdccf2f1468088855c214b2c" - ] + "hash.k2d:md5,8b8598468f54a7087c203ad0190555d9", + "opts.k2d:md5,a033d00cf6759407010b21700938f543", + "taxo.k2d:md5,094d5891cdccf2f1468088855c214b2c" ] - ], - "1": [ - "versions.yml:md5,6063247258c56fd271d076bb04dd7536" - ], - "untar": [ + ] + ], + { + "versions_untar": [ [ - [ - - ], - [ - "hash.k2d:md5,8b8598468f54a7087c203ad0190555d9", - "opts.k2d:md5,a033d00cf6759407010b21700938f543", - "taxo.k2d:md5,094d5891cdccf2f1468088855c214b2c" - ] + "UNTAR", + "untar", + "1.34" ] - ], - "versions": [ - "versions.yml:md5,6063247258c56fd271d076bb04dd7536" ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.3" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2024-07-10T12:04:19.377674" + "timestamp": "2026-01-28T17:49:17.252494" } } \ No newline at end of file diff --git a/nextflow.config b/nextflow.config index e4996dc42..f60fdf0df 100644 --- a/nextflow.config +++ b/nextflow.config @@ -22,9 +22,12 @@ params { featurecounts_feature_type = 'exon' featurecounts_group_type = 'gene_biotype' gencode = false + prokaryotic = false + gffread_transcript_fasta = false save_reference = false igenomes_base = 's3://ngi-igenomes/igenomes/' igenomes_ignore = false + arm = false // UMI handling with_umi = false @@ -58,15 +61,19 @@ params { // Ribosomal RNA removal remove_ribo_rna = false + ribo_removal_tool = 'sortmerna' save_non_ribo_reads = false ribo_database_manifest = "${projectDir}/workflows/rnaseq/assets/rrna-db-defaults.txt" // Alignment aligner = 'star_salmon' use_sentieon_star = false + use_parabricks_star = false + gpu_container_options = null pseudo_aligner = null pseudo_aligner_kmer_size = 31 seq_center = null + seq_platform = null bam_csi_index = false star_ignore_sjdbgtf = false salmon_quant_libtype = null @@ -74,6 +81,7 @@ params { stringtie_ignore_gtf = false min_mapped_reads = 5 extra_star_align_args = null + extra_bowtie2_align_args = null extra_salmon_quant_args = null extra_kallisto_quant_args = null kallisto_quant_fraglen = 200 @@ -100,6 +108,8 @@ params { save_kraken_assignments = false save_kraken_unassigned = false bracken_precision = "S" + sylph_db = null + sylph_taxonomy = null skip_rseqc = false skip_biotype_qc = false skip_deseq2_qc = false @@ -154,6 +164,9 @@ process { // Load base.config by default for all pipelines includeConfig 'conf/base.config' +// Pin STAR 2.6.1d for iGenomes compatibility (ARM-aware via params.arm closures) +includeConfig 'conf/igenomes_star.config' + profiles { debug { dumpHashes = true @@ -192,6 +205,7 @@ profiles { docker.runOptions = '-u $(id -u):$(id -g)' } arm64 { + params.arm = true process.arch = 'arm64' includeConfig 'conf/arm.config' } @@ -253,13 +267,32 @@ profiles { wave.freeze = true wave.strategy = 'conda,container' } - gpu { - docker.runOptions = '-u $(id -u):$(id -g) --gpus all' - apptainer.runOptions = '--nv' - singularity.runOptions = '--nv' + test { + includeConfig 'conf/test.config' + process { + resourceLimits = [ + cpus: 4, + memory: '15.GB', + time: '1.h' + ] + } + } + test_gpu { + includeConfig 'conf/test.config' + process { + resourceLimits = [ + cpus: 8, + memory: '30.GB', + time: '2.h' + ] + } + } + test_full { includeConfig 'conf/test_full.config' } + test_prokaryotic { + includeConfig 'conf/prokaryotic.config' + includeConfig 'conf/test_prokaryotic.config' } - test { includeConfig 'conf/test.config' } - test_full { includeConfig 'conf/test_full.config' } + prokaryotic { includeConfig 'conf/prokaryotic.config' } test_full_aws { includeConfig 'conf/test_full.config' } @@ -412,8 +445,8 @@ manifest { description = """RNA sequencing analysis pipeline for gene/isoform quantification and extensive quality control.""" mainScript = 'main.nf' defaultBranch = 'master' - nextflowVersion = '!>=25.04.0' - version = '3.22.2' + nextflowVersion = '!>=25.04.3' + version = '3.23.0' doi = 'https://doi.org/10.5281/zenodo.1400710' } @@ -423,7 +456,7 @@ plugins { } validation { - defaultIgnoreParams = ["genomes"] + defaultIgnoreParams = ["genomes"] + (System.getenv('NXF_OFFLINE') == 'true' ? ["igenomes_base"] : []) monochromeLogs = params.monochrome_logs } diff --git a/nextflow_schema.json b/nextflow_schema.json index 852b5bdd4..3908b5ebc 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -88,11 +88,11 @@ "format": "file-path", "exists": true, "mimetype": "text/plain", - "pattern": "^\\S+\\.gff(\\.gz)?$", + "pattern": "^\\S+\\.gff3?(\\.gz)?$", "fa_icon": "fas fa-code-branch", "description": "Path to GFF3 annotation file.", "help_text": "This parameter must be specified if neither `--genome` nor `--gtf` is provided.", - "errorMessage": "The GFF file must have a .gff or .gff.gz extension, must not contain spaces, and must exist." + "errorMessage": "The GFF file must have a .gff, .gff3, .gff.gz, or .gff3.gz extension, must not contain spaces, and must exist." }, "gene_bed": { "type": "string", @@ -167,6 +167,14 @@ "fa_icon": "fas fa-bezier-curve", "description": "Path to directory or tar.gz archive for pre-built Kallisto index." }, + "bowtie2_index": { + "type": "string", + "format": "path", + "exists": true, + "fa_icon": "fas fa-bezier-curve", + "description": "Path to directory or tar.gz archive for pre-built Bowtie2 index.", + "help_text": "Required when using `--aligner bowtie2_salmon`. If not provided, the index will be built from the transcript FASTA file for use with Salmon alignment-based quantification." + }, "hisat2_build_memory": { "type": "string", "default": "200.GB", @@ -182,6 +190,19 @@ "description": "Specify if your GTF annotation is in GENCODE format.", "help_text": "If your GTF file is in GENCODE format and you want to run Salmon (using `--pseudo_aligner salmon`), enable this parameter to build the Salmon index correctly." }, + "prokaryotic": { + "type": "boolean", + "hidden": true, + "fa_icon": "fas fa-bacterium", + "description": "Enable prokaryotic mode for bacterial/archaeal RNA-seq data.", + "help_text": "Prokaryotic genomes have different annotation conventions than eukaryotes. This configures STAR to use CDS features instead of exons. Use `-profile prokaryotic` to enable this along with other recommended prokaryotic settings." + }, + "gffread_transcript_fasta": { + "type": "boolean", + "fa_icon": "fas fa-file-code", + "description": "Use gffread to generate transcript FASTA instead of RSEM.", + "help_text": "By default, RSEM is used to extract transcript sequences from the genome FASTA and GTF. RSEM expects exon features in the GTF, which may not be present in some annotations (e.g., prokaryotic). Enable this to use gffread instead, which handles CDS-only annotations correctly. This is automatically enabled by `-profile prokaryotic`." + }, "gtf_extra_attributes": { "type": "string", "default": "gene_name", @@ -215,6 +236,13 @@ "hidden": true, "help_text": "Prevent loading of `igenomes.config` when running the pipeline. Use this option if you encounter conflicts between custom parameters and those in the iGenomes configuration." }, + "arm": { + "type": "boolean", + "description": "Use ARM architecture containers.", + "fa_icon": "fas fa-microchip", + "hidden": true, + "help_text": "Set automatically by the arm64 profile. Signals ARM architecture so that container closures can select ARM-compatible images where needed (e.g. STAR 2.6.1d in nf-test configs)." + }, "igenomes_base": { "type": "string", "format": "directory-path", @@ -292,8 +320,16 @@ "remove_ribo_rna": { "type": "boolean", "fa_icon": "fas fa-trash-alt", - "description": "Enable the removal of reads derived from ribosomal RNA using SortMeRNA.", - "help_text": "Any patterns found in sequences defined by the `--ribo_database_manifest` parameter will be used for filtering." + "description": "Enable the removal of reads derived from ribosomal RNA.", + "help_text": "Any patterns found in sequences defined by the `--ribo_database_manifest` parameter will be used for filtering (when using SortMeRNA or Bowtie2)." + }, + "ribo_removal_tool": { + "type": "string", + "default": "sortmerna", + "fa_icon": "fas fa-tools", + "description": "Tool to use for rRNA removal.", + "help_text": "Choose between 'sortmerna' (default), 'bowtie2', or 'ribodetector' for rRNA removal.\n\n- **sortmerna**: Reference-based filtering (default). Requires `--ribo_database_manifest`. Note: Default databases include SILVA sequences requiring licensing for commercial use.\n- **bowtie2**: Alignment-based filtering. Requires `--ribo_database_manifest`. Recommended for users with SILVA licensing concerns as it supports custom databases.\n- **ribodetector**: \u26a0\ufe0f EXPERIMENTAL - ML-based detection without reference requirement. Known ONNX multiprocessing issues can cause hangs in containerized environments. See https://github.com/hzi-bifo/RiboDetector/pull/61", + "enum": ["sortmerna", "ribodetector", "bowtie2"] }, "ribo_database_manifest": { "type": "string", @@ -385,15 +421,27 @@ "aligner": { "type": "string", "default": "star_salmon", - "description": "Specifies the alignment algorithm to use - available options are 'star_salmon', 'star_rsem' and 'hisat2'.", + "description": "Specifies the alignment algorithm to use - available options are 'star_salmon', 'star_rsem', 'hisat2', and 'bowtie2_salmon'.", "fa_icon": "fas fa-map-signs", - "enum": ["star_salmon", "star_rsem", "hisat2"] + "enum": ["star_salmon", "star_rsem", "hisat2", "bowtie2_salmon"], + "help_text": "Use 'bowtie2_salmon' for prokaryotic RNA-seq data. Bowtie2 is a splice-unaware aligner and is not recommended for eukaryotic data." }, "use_sentieon_star": { "type": "boolean", "description": "Optionally accelerate STAR with Sentieon", "fa_icon": "fas fa-running" }, + "use_parabricks_star": { + "type": "boolean", + "description": "Optionally accelerate STAR and MarkDuplicates with Parabricks", + "fa_icon": "fas fa-running" + }, + "gpu_container_options": { + "type": "string", + "description": "Override container GPU flags for GPU tasks. Auto-detects if not set (--gpus all for Docker, --nv for Singularity/Apptainer).", + "fa_icon": "fas fa-microchip", + "hidden": true + }, "pseudo_aligner": { "type": "string", "description": "Specifies the pseudo aligner to use - available options are 'salmon'. Runs in addition to '--aligner'.", @@ -454,6 +502,12 @@ "description": "Sequencing center information to be added to read group of BAM files.", "fa_icon": "fas fa-synagogue" }, + "seq_platform": { + "type": "string", + "minLength": 1, + "description": "Sequencing platform information to be added to read group of BAM files.", + "fa_icon": "fas fa-microscope" + }, "stringtie_ignore_gtf": { "type": "boolean", "description": "Perform reference-guided de novo assembly of transcripts using StringTie i.e. dont restrict to those in GTF file.", @@ -465,6 +519,12 @@ "description": "Extra arguments to pass to STAR alignment command in addition to defaults defined by the pipeline. Only available for the STAR-Salmon route.", "fa_icon": "fas fa-plus" }, + "extra_bowtie2_align_args": { + "type": "string", + "minLength": 1, + "description": "Extra arguments to pass to Bowtie2 alignment command in addition to defaults defined by the pipeline. Only available when using --aligner bowtie2_salmon.", + "fa_icon": "fas fa-plus" + }, "extra_salmon_quant_args": { "type": "string", "minLength": 1, @@ -600,15 +660,15 @@ }, "contaminant_screening": { "type": "string", - "description": "Tool to use for detecting contaminants in unaligned reads - available options are 'kraken2' and 'kraken2_bracken'", + "description": "Tool to use for detecting contaminants in unaligned reads - available options are 'sylph', 'kraken2', or 'kraken2_bracken'", "fa_icon": "fas fa-virus-slash", - "enum": ["kraken2", "kraken2_bracken"] + "enum": ["kraken2", "kraken2_bracken", "sylph"] }, "kraken_db": { "type": "string", "format": "directory-path", "description": "Database when using Kraken2/Bracken for contaminant screening.", - "help_text": "See the usage documentation for more information on setting up and using Kraken2 databases.", + "help_text": "See the usage documentation for more information on setting up and using Kraken2 databases. Requires the --contaminant_screening option to be set to 'kraken2' or 'kraken2_bracken' to have an effect", "fa_icon": "fas fa-fish" }, "bracken_precision": { @@ -616,8 +676,22 @@ "default": "S", "fa_icon": "fas fa-tree", "description": "Taxonomic level for Bracken abundance estimations.", - "help_text": "Use the first letter of taxonomic levels: Domain, Phylum, Class, Order, Family, Genus, or Species.", + "help_text": "Use the first letter of taxonomic levels: Domain, Phylum, Class, Order, Family, Genus, or Species. Requires --contaminant_screening option to be set to 'kraken2_bracken' to have an effect.", "enum": ["D", "P", "C", "O", "F", "G", "S"] + }, + "sylph_db": { + "type": "string", + "format": "file-path", + "description": "Comma separated list of databases to profile against when using Sylph for contamination detection", + "help_text": "See the usage documentation for more information on setting up and using Sylph databases. Requires --contaminant_screening option to be set to 'sylph' to have an effect.", + "fa_icon": "fas fa-database" + }, + "sylph_taxonomy": { + "type": "string", + "description": "Comma separated list of taxonomies when using Sylph for contamination detection", + "help_text": "See the usage documentation for more information on Sylph taxonomies. Requires --contaminant_screening option to be set to 'sylph' to have an effect.", + "fa_icon": "fas fa-tree", + "format": "file-path" } } }, diff --git a/nf-test.config b/nf-test.config index 7b871be9c..e2aa93158 100644 --- a/nf-test.config +++ b/nf-test.config @@ -1,24 +1,28 @@ config { // location for all nf-test tests - testsDir "." + testsDir = "." // nf-test directory including temporary files for each test - workDir System.getenv("NFT_WORKDIR") ?: ".nf-test" + workDir = System.getenv("NFT_WORKDIR") ?: ".nf-test" // location of an optional nextflow.config file specific for executing tests - configFile "tests/nextflow.config" + configFile = "tests/nextflow.config" // ignore tests coming from the nf-core/modules repo - // Also ignore sentieon tests when SKIP_SENTIEON env var is set (forks/ARM) - ignore System.getenv("SKIP_SENTIEON") == "true" - ? ['modules/nf-core/**/tests/*', 'subworkflows/nf-core/**/tests/*', 'tests/sentieon_default.nf.test', 'subworkflows/local/align_star/tests/main.sentieon.nf.test', 'subworkflows/local/quantify_rsem/tests/main.sentieon.nf.test'] - : ['modules/nf-core/**/tests/*', 'subworkflows/nf-core/**/tests/*'] + // Also ignore sentieon/parabricks tests when respective env vars are set (forks/ARM/CPU-only) + def skipSentieon = System.getenv("SKIP_SENTIEON") == "true" + def skipParabricks = System.getenv("SKIP_PARABRICKS") == "true" - // run all test with defined profile(s) from the main nextflow.config - profile "test" + def baseIgnore = ['modules/nf-core/**/tests/*', 'subworkflows/nf-core/**/tests/*'] + def sentieonTests = ['tests/sentieon_default.nf.test', 'subworkflows/local/align_star/tests/main.sentieon.nf.test'] + def parabricksTests = ['tests/parabricks_default.nf.test', 'subworkflows/local/align_star/tests/main.parabricks.nf.test', 'subworkflows/local/prepare_genome/tests/main.parabricks.nf.test'] + + ignore = baseIgnore + (skipSentieon ? sentieonTests : []) + (skipParabricks ? parabricksTests : []) + + // run all tests with the profile(s) specified by each CI workflow // list of filenames or patterns that should be trigger a full test run - triggers 'nextflow.config', 'nf-test.config', 'conf/test.config', 'tests/nextflow.config', 'tests/.nftignore', 'modules.json' + triggers = ['nextflow.config', 'nf-test.config', 'conf/test.config', 'tests/nextflow.config', 'tests/.nftignore', 'modules.json'] // load the necessary plugins plugins { diff --git a/ro-crate-metadata.json b/ro-crate-metadata.json index 67a4b39bf..b3ab0164b 100644 --- a/ro-crate-metadata.json +++ b/ro-crate-metadata.json @@ -22,8 +22,8 @@ "@id": "./", "@type": "Dataset", "creativeWorkStatus": "InProgress", - "datePublished": "2025-12-11T10:00:00+00:00", - "description": "

\n \n \n \"nf-core/rnaseq\"\n \n

\n\n[![Open in GitHub Codespaces](https://img.shields.io/badge/Open_In_GitHub_Codespaces-black?labelColor=grey&logo=github)](https://github.com/codespaces/new/nf-core/rnaseq)\n[![GitHub Actions CI Status](https://github.com/nf-core/rnaseq/actions/workflows/nf-test.yml/badge.svg)](https://github.com/nf-core/rnaseq/actions/workflows/nf-test.yml)\n[![GitHub Actions Linting Status](https://github.com/nf-core/rnaseq/actions/workflows/linting.yml/badge.svg)](https://github.com/nf-core/rnaseq/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/rnaseq/results)[![Cite with Zenodo](http://img.shields.io/badge/DOI-10.5281/zenodo.1400710-1073c8?labelColor=000000)](https://doi.org/10.5281/zenodo.1400710)\n[![nf-test](https://img.shields.io/badge/unit_tests-nf--test-337ab7.svg)](https://www.nf-test.com)\n\n[![Nextflow](https://img.shields.io/badge/version-%E2%89%A525.04.0-green?style=flat&logo=nextflow&logoColor=white&color=%230DC09D&link=https%3A%2F%2Fnextflow.io)](https://www.nextflow.io/)\n[![nf-core template version](https://img.shields.io/badge/nf--core_template-3.5.1-green?style=flat&logo=nfcore&logoColor=white&color=%2324B064&link=https%3A%2F%2Fnf-co.re)](https://github.com/nf-core/tools/releases/tag/3.5.1)\n[![run with conda](http://img.shields.io/badge/run%20with-conda-3EB049?labelColor=000000&logo=anaconda)](https://docs.conda.io/en/latest/)\n[![run with docker](https://img.shields.io/badge/run%20with-docker-0db7ed?labelColor=000000&logo=docker)](https://www.docker.com/)\n[![run with singularity](https://img.shields.io/badge/run%20with-singularity-1d355c.svg?labelColor=000000)](https://sylabs.io/docs/)\n[![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/nf-core/rnaseq)\n\n[![Get help on Slack](http://img.shields.io/badge/slack-nf--core%20%23rnaseq-4A154B?labelColor=000000&logo=slack)](https://nfcore.slack.com/channels/rnaseq)[![Follow on Bluesky](https://img.shields.io/badge/bluesky-%40nf__core-1185fe?labelColor=000000&logo=bluesky)](https://bsky.app/profile/nf-co.re)[![Follow on Mastodon](https://img.shields.io/badge/mastodon-nf__core-6364ff?labelColor=FFFFFF&logo=mastodon)](https://mstdn.science/@nf_core)[![Watch on YouTube](http://img.shields.io/badge/youtube-nf--core-FF0000?labelColor=000000&logo=youtube)](https://www.youtube.com/c/nf-core)\n\n## Introduction\n\n**nf-core/rnaseq** is a bioinformatics pipeline that can be used to analyse RNA sequencing data obtained from organisms with a reference genome and annotation. It takes a samplesheet with FASTQ files or pre-aligned BAM files as input, performs quality control (QC), trimming and (pseudo-)alignment, and produces a gene expression matrix and extensive QC report.\n\n![nf-core/rnaseq metro map](docs/images/nf-core-rnaseq_metro_map_grey_animated.svg)\n\n> In case the image above is not loading, please have a look at the [static version](docs/images/nf-core-rnaseq_metro_map_grey.png).\n\n1. Merge re-sequenced FastQ files ([`cat`](http://www.linfo.org/cat.html))\n2. Auto-infer strandedness by subsampling and pseudoalignment ([`fq`](https://github.com/stjude-rust-labs/fq), [`Salmon`](https://combine-lab.github.io/salmon/))\n3. Read QC ([`FastQC`](https://www.bioinformatics.babraham.ac.uk/projects/fastqc/))\n4. UMI extraction ([`UMI-tools`](https://github.com/CGATOxford/UMI-tools))\n5. Adapter and quality trimming ([`Trim Galore!`](https://www.bioinformatics.babraham.ac.uk/projects/trim_galore/))\n6. Removal of genome contaminants ([`BBSplit`](http://seqanswers.com/forums/showthread.php?t=41288))\n7. Removal of ribosomal RNA ([`SortMeRNA`](https://github.com/biocore/sortmerna))\n8. Choice of multiple alignment and quantification routes (_For `STAR` the sentieon implementation can be chosen_):\n 1. [`STAR`](https://github.com/alexdobin/STAR) -> [`Salmon`](https://combine-lab.github.io/salmon/)\n 2. [`STAR`](https://github.com/alexdobin/STAR) -> [`RSEM`](https://github.com/deweylab/RSEM)\n 3. [`HiSAT2`](https://ccb.jhu.edu/software/hisat2/index.shtml) -> **NO QUANTIFICATION**\n9. Sort and index alignments ([`SAMtools`](https://sourceforge.net/projects/samtools/files/samtools/))\n10. UMI-based deduplication ([`UMI-tools`](https://github.com/CGATOxford/UMI-tools))\n11. Duplicate read marking ([`picard MarkDuplicates`](https://broadinstitute.github.io/picard/))\n12. Transcript assembly and quantification ([`StringTie`](https://ccb.jhu.edu/software/stringtie/))\n13. Create bigWig coverage files ([`BEDTools`](https://github.com/arq5x/bedtools2/), [`bedGraphToBigWig`](http://hgdownload.soe.ucsc.edu/admin/exe/))\n14. Extensive quality control:\n 1. [`RSeQC`](http://rseqc.sourceforge.net/)\n 2. [`Qualimap`](http://qualimap.bioinfo.cipf.es/)\n 3. [`dupRadar`](https://bioconductor.org/packages/release/bioc/html/dupRadar.html)\n 4. [`Preseq`](http://smithlabresearch.org/software/preseq/)\n 5. [`DESeq2`](https://bioconductor.org/packages/release/bioc/html/DESeq2.html)\n 6. [`Kraken2`](https://ccb.jhu.edu/software/kraken2/) -> [`Bracken`](https://ccb.jhu.edu/software/bracken/) on unaligned sequences; _optional_\n15. Pseudoalignment and quantification ([`Salmon`](https://combine-lab.github.io/salmon/) or ['Kallisto'](https://pachterlab.github.io/kallisto/); _optional_)\n16. Present QC for raw read, alignment, gene biotype, sample similarity, and strand-specificity checks ([`MultiQC`](http://multiqc.info/), [`R`](https://www.r-project.org/))\n\n> **Note**\n> The SRA download functionality has been removed from the pipeline (`>=3.2`) and ported to an independent workflow called [nf-core/fetchngs](https://nf-co.re/fetchngs). You can provide `--nf_core_pipeline rnaseq` when running nf-core/fetchngs to download and auto-create a samplesheet containing publicly available samples that can be accepted directly as input by this pipeline.\n\n> **Warning**\n> Quantification isn't performed if using `--aligner hisat2` due to the lack of an appropriate option to calculate accurate expression estimates from HISAT2 derived genomic alignments. However, you can use this route if you have a preference for the alignment, QC and other types of downstream analysis compatible with the output of HISAT2.\n\n## Usage\n\n> [!NOTE]\n> 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.\n\nFirst, prepare a samplesheet with your input data that looks as follows:\n\n**samplesheet.csv**:\n\n```csv\nsample,fastq_1,fastq_2,strandedness\nCONTROL_REP1,AEG588A1_S1_L002_R1_001.fastq.gz,AEG588A1_S1_L002_R2_001.fastq.gz,auto\nCONTROL_REP1,AEG588A1_S1_L003_R1_001.fastq.gz,AEG588A1_S1_L003_R2_001.fastq.gz,auto\nCONTROL_REP1,AEG588A1_S1_L004_R1_001.fastq.gz,AEG588A1_S1_L004_R2_001.fastq.gz,auto\n```\n\nEach row represents a fastq file (single-end) or a pair of fastq files (paired end). Rows with the same sample identifier are considered technical replicates and merged automatically. The strandedness refers to the library preparation and will be automatically inferred if set to `auto`.\n\nThe pipeline supports a two-step reprocessing workflow using BAM files from previous runs. Run initially with `--save_align_intermeds` to generate a samplesheet with BAM paths, then reprocess using `--skip_alignment` for efficient downstream analysis without repeating expensive alignment steps. This feature is designed specifically for pipeline-generated BAMs.\n\n> [!WARNING]\n> 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/docs/usage/getting_started/configuration#custom-configuration-files).\n\nNow, you can run the pipeline using:\n\n```bash\nnextflow run nf-core/rnaseq \\\n --input \\\n --outdir \\\n --gtf \\\n --fasta \\\n -profile \n```\n\nFor more details and further functionality, please refer to the [usage documentation](https://nf-co.re/rnaseq/usage) and the [parameter documentation](https://nf-co.re/rnaseq/parameters).\n\n## Pipeline output\n\nTo see the results of an example test run with a full size dataset refer to the [results](https://nf-co.re/rnaseq/results) tab on the nf-core website pipeline page.\nFor more details about the output files and reports, please refer to the\n[output documentation](https://nf-co.re/rnaseq/output).\n\nThis pipeline quantifies RNA-sequenced reads relative to genes/transcripts in the genome and normalizes the resulting data. It does not compare the samples statistically in order to assign significance in the form of FDR or P-values. For downstream analyses, the output files from this pipeline can be analysed directly in statistical environments like [R](https://www.r-project.org/), [Julia](https://julialang.org/) or via the [nf-core/differentialabundance](https://github.com/nf-core/differentialabundance/) pipeline.\n\n## Online videos\n\nA short talk about the history, current status and functionality on offer in this pipeline was given by Harshil Patel ([@drpatelh](https://github.com/drpatelh)) on [8th February 2022](https://nf-co.re/events/2022/bytesize-32-nf-core-rnaseq) as part of the nf-core/bytesize series.\n\nYou can find numerous talks on the [nf-core events page](https://nf-co.re/events) from various topics including writing pipelines/modules in Nextflow DSL2, using nf-core tooling, running nf-core pipelines as well as more generic content like contributing to Github. Please check them out!\n\n## Credits\n\nThese scripts were originally written for use at the [National Genomics Infrastructure](https://ngisweden.scilifelab.se), part of [SciLifeLab](http://www.scilifelab.se/) in Stockholm, Sweden, by Phil Ewels ([@ewels](https://github.com/ewels)) and Rickard Hammar\u00e9n ([@Hammarn](https://github.com/Hammarn)).\n\nThe pipeline was re-written in Nextflow DSL2 by Harshil Patel ([@drpatelh](https://github.com/drpatelh)) from [Seqera Labs, Spain](https://seqera.io/), and is currently maintained by Jonathan Manning ([@pinin4fjords](https://github.com/pinin4fjords)) and the nf-core community.\n\nThe pipeline workflow diagram was initially designed by Sarah Guinchard ([@G-Sarah](https://github.com/G-Sarah)) and James Fellows Yates ([@jfy133](https://github.com/jfy133)), further modifications where made by Harshil Patel ([@drpatelh](https://github.com/drpatelh)) and Maxime Garcia ([@maxulysse](https://github.com/maxulysse)).\n\nMany thanks to other who have helped out along the way too, including (but not limited to):\n\n- [Alex Peltzer](https://github.com/apeltzer)\n- [Colin Davenport](https://github.com/colindaven)\n- [Denis Moreno](https://github.com/Galithil)\n- [Edmund Miller](https://github.com/edmundmiller)\n- [Gregor Sturm](https://github.com/grst)\n- [Jacki Buros Novik](https://github.com/jburos)\n- [Lorena Pantano](https://github.com/lpantano)\n- [Matthias Zepper](https://github.com/MatthiasZepper)\n- [Maxime Garcia](https://github.com/maxulysse)\n- [Olga Botvinnik](https://github.com/olgabot)\n- [@orzechoj](https://github.com/orzechoj)\n- [Paolo Di Tommaso](https://github.com/pditommaso)\n- [Rob Syme](https://github.com/robsyme)\n\n## Contributions and Support\n\nIf you would like to contribute to this pipeline, please see the [contributing guidelines](.github/CONTRIBUTING.md).\n\nFor further information or help, don't hesitate to get in touch on the [Slack `#rnaseq` channel](https://nfcore.slack.com/channels/rnaseq) (you can join with [this invite](https://nf-co.re/join/slack)).\n\n## Citations\n\nIf you use nf-core/rnaseq for your analysis, please cite it using the following doi: [10.5281/zenodo.1400710](https://doi.org/10.5281/zenodo.1400710)\n\nAn extensive list of references for the tools used by the pipeline can be found in the [`CITATIONS.md`](CITATIONS.md) file.\n\nYou can cite the `nf-core` publication as follows:\n\n> **The nf-core framework for community-curated bioinformatics pipelines.**\n>\n> Philip Ewels, Alexander Peltzer, Sven Fillinger, Harshil Patel, Johannes Alneberg, Andreas Wilm, Maxime Ulysse Garcia, Paolo Di Tommaso & Sven Nahnsen.\n>\n> _Nat Biotechnol._ 2020 Feb 13. doi: [10.1038/s41587-020-0439-x](https://dx.doi.org/10.1038/s41587-020-0439-x).\n", + "datePublished": "2026-02-25T10:00:00+00:00", + "description": "

\n \n \n \"nf-core/rnaseq\"\n \n

\n\n[![Open in GitHub Codespaces](https://img.shields.io/badge/Open_In_GitHub_Codespaces-black?labelColor=grey&logo=github)](https://github.com/codespaces/new/nf-core/rnaseq)\n[![GitHub Actions CI Status](https://github.com/nf-core/rnaseq/actions/workflows/nf-test.yml/badge.svg)](https://github.com/nf-core/rnaseq/actions/workflows/nf-test.yml)\n[![GitHub Actions Linting Status](https://github.com/nf-core/rnaseq/actions/workflows/linting.yml/badge.svg)](https://github.com/nf-core/rnaseq/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/rnaseq/results)[![Cite with Zenodo](http://img.shields.io/badge/DOI-10.5281/zenodo.1400710-1073c8?labelColor=000000)](https://doi.org/10.5281/zenodo.1400710)\n[![nf-test](https://img.shields.io/badge/unit_tests-nf--test-337ab7.svg)](https://www.nf-test.com)\n\n[![Nextflow](https://img.shields.io/badge/version-%E2%89%A525.04.0-green?style=flat&logo=nextflow&logoColor=white&color=%230DC09D&link=https%3A%2F%2Fnextflow.io)](https://www.nextflow.io/)\n[![nf-core template version](https://img.shields.io/badge/nf--core_template-3.5.1-green?style=flat&logo=nfcore&logoColor=white&color=%2324B064&link=https%3A%2F%2Fnf-co.re)](https://github.com/nf-core/tools/releases/tag/3.5.1)\n[![run with conda](http://img.shields.io/badge/run%20with-conda-3EB049?labelColor=000000&logo=anaconda)](https://docs.conda.io/en/latest/)\n[![run with docker](https://img.shields.io/badge/run%20with-docker-0db7ed?labelColor=000000&logo=docker)](https://www.docker.com/)\n[![run with singularity](https://img.shields.io/badge/run%20with-singularity-1d355c.svg?labelColor=000000)](https://sylabs.io/docs/)\n[![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/nf-core/rnaseq)\n\n[![Get help on Slack](http://img.shields.io/badge/slack-nf--core%20%23rnaseq-4A154B?labelColor=000000&logo=slack)](https://nfcore.slack.com/channels/rnaseq)[![Follow on Bluesky](https://img.shields.io/badge/bluesky-%40nf__core-1185fe?labelColor=000000&logo=bluesky)](https://bsky.app/profile/nf-co.re)[![Follow on Mastodon](https://img.shields.io/badge/mastodon-nf__core-6364ff?labelColor=FFFFFF&logo=mastodon)](https://mstdn.science/@nf_core)[![Watch on YouTube](http://img.shields.io/badge/youtube-nf--core-FF0000?labelColor=000000&logo=youtube)](https://www.youtube.com/c/nf-core)\n\n## Introduction\n\n**nf-core/rnaseq** is a bioinformatics pipeline that can be used to analyse RNA sequencing data obtained from organisms with a reference genome and annotation. It takes a samplesheet with FASTQ files or pre-aligned BAM files as input, performs quality control (QC), trimming and (pseudo-)alignment, and produces a gene expression matrix and extensive QC report.\n\n![nf-core/rnaseq metro map](docs/images/nf-core-rnaseq_metro_map_grey_animated.svg)\n\n> In case the image above is not loading, please have a look at the [static version](docs/images/nf-core-rnaseq_metro_map_grey.png).\n\n1. Merge re-sequenced FastQ files ([`cat`](http://www.linfo.org/cat.html))\n2. Auto-infer strandedness by subsampling and pseudoalignment ([`fq`](https://github.com/stjude-rust-labs/fq), [`Salmon`](https://combine-lab.github.io/salmon/))\n3. Read QC ([`FastQC`](https://www.bioinformatics.babraham.ac.uk/projects/fastqc/))\n4. UMI extraction ([`UMI-tools`](https://github.com/CGATOxford/UMI-tools))\n5. Adapter and quality trimming ([`Trim Galore!`](https://www.bioinformatics.babraham.ac.uk/projects/trim_galore/))\n6. Removal of genome contaminants ([`BBSplit`](http://seqanswers.com/forums/showthread.php?t=41288))\n7. Removal of ribosomal RNA ([`SortMeRNA`](https://github.com/biocore/sortmerna))\n8. Choice of multiple alignment and quantification routes (_For `STAR` the sentieon implementation can be chosen_):\n 1. [`STAR`](https://github.com/alexdobin/STAR) -> [`Salmon`](https://combine-lab.github.io/salmon/)\n 2. [`STAR`](https://github.com/alexdobin/STAR) -> [`RSEM`](https://github.com/deweylab/RSEM)\n 3. [`HiSAT2`](https://ccb.jhu.edu/software/hisat2/index.shtml) -> **NO QUANTIFICATION**\n9. Sort and index alignments ([`SAMtools`](https://sourceforge.net/projects/samtools/files/samtools/))\n10. UMI-based deduplication ([`UMI-tools`](https://github.com/CGATOxford/UMI-tools))\n11. Duplicate read marking ([`picard MarkDuplicates`](https://broadinstitute.github.io/picard/))\n12. Transcript assembly and quantification ([`StringTie`](https://ccb.jhu.edu/software/stringtie/))\n13. Create bigWig coverage files ([`BEDTools`](https://github.com/arq5x/bedtools2/), [`bedGraphToBigWig`](http://hgdownload.soe.ucsc.edu/admin/exe/))\n14. Extensive quality control:\n 1. [`RSeQC`](http://rseqc.sourceforge.net/)\n 2. [`Qualimap`](http://qualimap.bioinfo.cipf.es/)\n 3. [`dupRadar`](https://bioconductor.org/packages/release/bioc/html/dupRadar.html)\n 4. [`Preseq`](http://smithlabresearch.org/software/preseq/)\n 5. [`DESeq2`](https://bioconductor.org/packages/release/bioc/html/DESeq2.html)\n 6. Contamination detection on unaligned sequences; _optional_\n 1. [`Kraken2`](https://ccb.jhu.edu/software/kraken2/) -> [`Bracken`](https://ccb.jhu.edu/software/bracken/)\n 2. [`Sylph`](https://sylph-docs.github.io/)\n15. Pseudoalignment and quantification ([`Salmon`](https://combine-lab.github.io/salmon/) or ['Kallisto'](https://pachterlab.github.io/kallisto/); _optional_)\n16. Present QC for raw read, alignment, gene biotype, sample similarity, and strand-specificity checks ([`MultiQC`](http://multiqc.info/), [`R`](https://www.r-project.org/))\n\n> **Note**\n> The SRA download functionality has been removed from the pipeline (`>=3.2`) and ported to an independent workflow called [nf-core/fetchngs](https://nf-co.re/fetchngs). You can provide `--nf_core_pipeline rnaseq` when running nf-core/fetchngs to download and auto-create a samplesheet containing publicly available samples that can be accepted directly as input by this pipeline.\n\n> **Warning**\n> Quantification isn't performed if using `--aligner hisat2` due to the lack of an appropriate option to calculate accurate expression estimates from HISAT2 derived genomic alignments. However, you can use this route if you have a preference for the alignment, QC and other types of downstream analysis compatible with the output of HISAT2.\n\n## Usage\n\n> [!NOTE]\n> 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.\n\nFirst, prepare a samplesheet with your input data that looks as follows:\n\n**samplesheet.csv**:\n\n```csv\nsample,fastq_1,fastq_2,strandedness\nCONTROL_REP1,AEG588A1_S1_L002_R1_001.fastq.gz,AEG588A1_S1_L002_R2_001.fastq.gz,auto\nCONTROL_REP1,AEG588A1_S1_L003_R1_001.fastq.gz,AEG588A1_S1_L003_R2_001.fastq.gz,auto\nCONTROL_REP1,AEG588A1_S1_L004_R1_001.fastq.gz,AEG588A1_S1_L004_R2_001.fastq.gz,auto\n```\n\nEach row represents a fastq file (single-end) or a pair of fastq files (paired end). Rows with the same sample identifier are considered technical replicates and merged automatically. The strandedness refers to the library preparation and will be automatically inferred if set to `auto`.\n\nThe pipeline supports a two-step reprocessing workflow using BAM files from previous runs. Run initially with `--save_align_intermeds` to generate a samplesheet with BAM paths, then reprocess using `--skip_alignment` for efficient downstream analysis without repeating expensive alignment steps. This feature is designed specifically for pipeline-generated BAMs.\n\n> [!WARNING]\n> 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/docs/usage/getting_started/configuration#custom-configuration-files).\n\nNow, you can run the pipeline using:\n\n```bash\nnextflow run nf-core/rnaseq \\\n --input \\\n --outdir \\\n --gtf \\\n --fasta \\\n -profile \n```\n\nFor more details and further functionality, please refer to the [usage documentation](https://nf-co.re/rnaseq/usage) and the [parameter documentation](https://nf-co.re/rnaseq/parameters).\n\n## Pipeline output\n\nTo see the results of an example test run with a full size dataset refer to the [results](https://nf-co.re/rnaseq/results) tab on the nf-core website pipeline page.\nFor more details about the output files and reports, please refer to the\n[output documentation](https://nf-co.re/rnaseq/output).\n\nThis pipeline quantifies RNA-sequenced reads relative to genes/transcripts in the genome and normalizes the resulting data. It does not compare the samples statistically in order to assign significance in the form of FDR or P-values. For downstream analyses, the output files from this pipeline can be analysed directly in statistical environments like [R](https://www.r-project.org/), [Julia](https://julialang.org/) or via the [nf-core/differentialabundance](https://github.com/nf-core/differentialabundance/) pipeline.\n\n## Online videos\n\nA short talk about the history, current status and functionality on offer in this pipeline was given by Harshil Patel ([@drpatelh](https://github.com/drpatelh)) on [8th February 2022](https://nf-co.re/events/2022/bytesize-32-nf-core-rnaseq) as part of the nf-core/bytesize series.\n\nYou can find numerous talks on the [nf-core events page](https://nf-co.re/events) from various topics including writing pipelines/modules in Nextflow DSL2, using nf-core tooling, running nf-core pipelines as well as more generic content like contributing to Github. Please check them out!\n\n## Credits\n\nThese scripts were originally written for use at the [National Genomics Infrastructure](https://ngisweden.scilifelab.se), part of [SciLifeLab](http://www.scilifelab.se/) in Stockholm, Sweden, by Phil Ewels ([@ewels](https://github.com/ewels)) and Rickard Hammar\u00e9n ([@Hammarn](https://github.com/Hammarn)).\n\nThe pipeline was re-written in Nextflow DSL2 by Harshil Patel ([@drpatelh](https://github.com/drpatelh)) from [Seqera Labs, Spain](https://seqera.io/), and is currently maintained by Jonathan Manning ([@pinin4fjords](https://github.com/pinin4fjords)) and the nf-core community.\n\nThe pipeline workflow diagram was initially designed by Sarah Guinchard ([@G-Sarah](https://github.com/G-Sarah)) and James Fellows Yates ([@jfy133](https://github.com/jfy133)), further modifications where made by Harshil Patel ([@drpatelh](https://github.com/drpatelh)) and Maxime Garcia ([@maxulysse](https://github.com/maxulysse)).\n\nMany thanks to other who have helped out along the way too, including (but not limited to):\n\n- [Alex Peltzer](https://github.com/apeltzer)\n- [Colin Davenport](https://github.com/colindaven)\n- [Denis Moreno](https://github.com/Galithil)\n- [Edmund Miller](https://github.com/edmundmiller)\n- [Gregor Sturm](https://github.com/grst)\n- [Jacki Buros Novik](https://github.com/jburos)\n- [Lorena Pantano](https://github.com/lpantano)\n- [Matthias Zepper](https://github.com/MatthiasZepper)\n- [Maxime Garcia](https://github.com/maxulysse)\n- [Olga Botvinnik](https://github.com/olgabot)\n- [@orzechoj](https://github.com/orzechoj)\n- [Paolo Di Tommaso](https://github.com/pditommaso)\n- [Rob Syme](https://github.com/robsyme)\n\n## Contributions and Support\n\nIf you would like to contribute to this pipeline, please see the [contributing guidelines](.github/CONTRIBUTING.md).\n\nFor further information or help, don't hesitate to get in touch on the [Slack `#rnaseq` channel](https://nfcore.slack.com/channels/rnaseq) (you can join with [this invite](https://nf-co.re/join/slack)).\n\n## Citations\n\nIf you use nf-core/rnaseq for your analysis, please cite it using the following doi: [10.5281/zenodo.1400710](https://doi.org/10.5281/zenodo.1400710)\n\nAn extensive list of references for the tools used by the pipeline can be found in the [`CITATIONS.md`](CITATIONS.md) file.\n\nYou can cite the `nf-core` publication as follows:\n\n> **The nf-core framework for community-curated bioinformatics pipelines.**\n>\n> Philip Ewels, Alexander Peltzer, Sven Fillinger, Harshil Patel, Johannes Alneberg, Andreas Wilm, Maxime Ulysse Garcia, Paolo Di Tommaso & Sven Nahnsen.\n>\n> _Nat Biotechnol._ 2020 Feb 13. doi: [10.1038/s41587-020-0439-x](https://dx.doi.org/10.1038/s41587-020-0439-x).\n", "hasPart": [ { "@id": "main.nf" @@ -132,7 +132,7 @@ } ], "dateCreated": "", - "dateModified": "2025-12-11T10:00:00Z", + "dateModified": "2026-02-25T10:00:00Z", "dct:conformsTo": "https://bioschemas.org/profiles/ComputationalWorkflow/1.0-RELEASE/", "keywords": [ "nf-core", @@ -154,10 +154,10 @@ }, "url": [ "https://github.com/nf-core/rnaseq", - "https://nf-co.re/rnaseq/dev/" + "https://nf-co.re/rnaseq/3.23.0/" ], "version": [ - "3.22.2" + "3.23.0" ] }, { diff --git a/subworkflows/local/align_bowtie2/main.nf b/subworkflows/local/align_bowtie2/main.nf new file mode 100644 index 000000000..2f36e9543 --- /dev/null +++ b/subworkflows/local/align_bowtie2/main.nf @@ -0,0 +1,68 @@ +// +// Alignment with Bowtie2 +// +// Bowtie2 is a splice-unaware aligner, suitable for prokaryotic RNA-seq data. +// It aligns reads to the transcriptome (not genome) for Salmon quantification. +// The Bowtie2 index is built from transcript FASTA, enabling alignment-based +// Salmon quantification similar to the STAR transcriptome BAM workflow. +// + +include { BOWTIE2_ALIGN } from '../../../modules/nf-core/bowtie2/align' +include { BAM_SORT_STATS_SAMTOOLS } from '../../nf-core/bam_sort_stats_samtools' + +// +// Function that parses and returns the alignment rate from the Bowtie2 log output +// +def getBowtie2PercentMapped(align_log) { + def percent_aligned = 0 + def pattern = /(\d+\.\d+)% overall alignment rate/ + align_log.eachLine { line -> + def matcher = line =~ pattern + if (matcher) { + percent_aligned = matcher[0][1].toFloat() + } + } + return percent_aligned +} + +workflow ALIGN_BOWTIE2 { + take: + reads // channel: [ val(meta), [ reads ] ] + index // channel: /path/to/bowtie2/index/ + fasta // channel: /path/to/fasta + + main: + + // + // Map reads with Bowtie2 + // + BOWTIE2_ALIGN( + reads, + index.map { index_path -> [ [id: 'genome'], index_path ] }, + [ [:], [] ], // No fasta needed for BAM output + params.save_unaligned, // save_unaligned - enable for downstream analysis of unmapped reads + false // sort_bam - we'll sort with samtools for consistency + ) + + ch_orig_bam = BOWTIE2_ALIGN.out.bam + ch_log = BOWTIE2_ALIGN.out.log + + // Parse alignment rate from log + ch_percent_mapped = ch_log.map { meta, log_file -> [ meta, getBowtie2PercentMapped(log_file) ] } + + // + // Sort, index BAM file and run samtools stats, flagstat and idxstats + // + BAM_SORT_STATS_SAMTOOLS(ch_orig_bam, fasta) + + emit: + orig_bam = ch_orig_bam // channel: [ val(meta), bam ] + log_final = ch_log // channel: [ val(meta), log ] + bam = BAM_SORT_STATS_SAMTOOLS.out.bam // channel: [ val(meta), [ bam ] ] + bai = BAM_SORT_STATS_SAMTOOLS.out.bai // channel: [ val(meta), [ bai ] ] + csi = BAM_SORT_STATS_SAMTOOLS.out.csi // channel: [ val(meta), [ csi ] ] + stats = BAM_SORT_STATS_SAMTOOLS.out.stats // channel: [ val(meta), [ stats ] ] + flagstat = BAM_SORT_STATS_SAMTOOLS.out.flagstat // channel: [ val(meta), [ flagstat ] ] + idxstats = BAM_SORT_STATS_SAMTOOLS.out.idxstats // channel: [ val(meta), [ idxstats ] ] + percent_mapped = ch_percent_mapped // channel: [ val(meta), percent_mapped ] +} diff --git a/subworkflows/local/align_bowtie2/nextflow.config b/subworkflows/local/align_bowtie2/nextflow.config new file mode 100644 index 000000000..aff72e04f --- /dev/null +++ b/subworkflows/local/align_bowtie2/nextflow.config @@ -0,0 +1,48 @@ +process { + + // Bowtie2 alignment configuration + // Bowtie2 is a splice-unaware aligner suitable for prokaryotic RNA-seq + + withName: '.*:ALIGN_BOWTIE2:BOWTIE2_ALIGN' { + ext.args = { + def args = [ + '--very-sensitive', + '--no-discordant' + ] + + if (params.extra_bowtie2_align_args) { + args += [params.extra_bowtie2_align_args] + } + + // Read group tags - assembled once from samplesheet meta and pipeline params + // Per-sample meta values take priority over global params + def seqCenter = meta.seq_center ?: params.seq_center + def seqPlatform = meta.seq_platform ?: params.seq_platform + def rgParts = ["--rg-id ${meta.id}", "--rg SM:${meta.id}"] + if (seqPlatform) rgParts << "--rg PL:${seqPlatform}" + if (seqCenter) rgParts << "--rg CN:${seqCenter}" + args += rgParts + + args.join(' ') + } + publishDir = [ + [ + path: { "${params.outdir}/${params.aligner}/log" }, + mode: params.publish_dir_mode, + pattern: '*.log' + ], + [ + path: { params.save_align_intermeds ? "${params.outdir}/${params.aligner}" : params.outdir }, + mode: params.publish_dir_mode, + pattern: '*.bam', + saveAs: { filename -> params.save_align_intermeds ? filename : null } + ], + [ + path: { params.save_unaligned ? "${params.outdir}/${params.aligner}/unmapped" : params.outdir }, + mode: params.publish_dir_mode, + pattern: '*.fastq.gz', + saveAs: { filename -> params.save_unaligned ? filename : null } + ] + ] + } +} diff --git a/subworkflows/local/align_star/main.nf b/subworkflows/local/align_star/main.nf index 35113457a..3a8327699 100644 --- a/subworkflows/local/align_star/main.nf +++ b/subworkflows/local/align_star/main.nf @@ -2,15 +2,16 @@ // Alignment with STAR // include { SENTIEON_STARALIGN as SENTIEON_STAR_ALIGN } from '../../../modules/nf-core/sentieon/staralign/main' +include { PARABRICKS_RNAFQ2BAM as PARABRICKS_RNA_FQ2BAM } from '../../../modules/nf-core/parabricks/rnafq2bam/main' include { STAR_ALIGN } from '../../../modules/nf-core/star/align' -include { STAR_ALIGN_IGENOMES } from '../../../modules/local/star_align_igenomes' +include { STAR_ALIGN as STAR_ALIGN_IGENOMES } from '../../../modules/nf-core/star/align' include { BAM_SORT_STATS_SAMTOOLS } from '../../nf-core/bam_sort_stats_samtools' // // Function that parses and returns the alignment rate from the STAR log output // -def getStarPercentMapped(params, align_log) { +def getStarPercentMapped(_params, align_log) { def percent_aligned = 0 def pattern = /Uniquely mapped reads %\s*\|\s*([\d\.]+)%/ align_log.eachLine { line -> @@ -25,37 +26,41 @@ def getStarPercentMapped(params, align_log) { workflow ALIGN_STAR { take: - reads // channel: [ val(meta), [ reads ] ] - index // channel: [ val(meta), [ index ] ] - gtf // channel: [ val(meta), [ gtf ] ] - star_ignore_sjdbgtf // boolean: when using pre-built STAR indices do not re-extract and use splice junctions from the GTF file - seq_platform // string : sequencing platform - seq_center // string : sequencing center - is_aws_igenome // boolean: whether the genome files are from AWS iGenomes - fasta // channel: /path/to/fasta - use_sentieon_star // boolean: whether star alignment is accelerated with Sentieon + reads // channel: [ val(meta), [ reads ] ] + index // channel: [ val(meta), [ index ] ] + gtf // channel: [ val(meta), [ gtf ] ] + star_ignore_sjdbgtf // boolean: when using pre-built STAR indices do not re-extract and use splice junctions from the GTF file + is_aws_igenome // boolean: whether the genome files are from AWS iGenomes + fasta // channel: /path/to/fasta + use_sentieon_star // boolean: whether star alignment is accelerated with Sentieon + use_parabricks_star // boolean: whether star alignment (and mark duplicates) is accelerated with Parabricks + skip_markduplicates // boolean: whether to skip marking duplicates main: - ch_versions = Channel.empty() - // // Map reads with STAR // ch_star_out = null if (use_sentieon_star) { - SENTIEON_STAR_ALIGN(reads, index, gtf, star_ignore_sjdbgtf, seq_platform, seq_center) + SENTIEON_STAR_ALIGN(reads, index, gtf, star_ignore_sjdbgtf) ch_star_out = SENTIEON_STAR_ALIGN + // SENTIEON_STAR_ALIGN uses topic-based version reporting + + } else if (use_parabricks_star) { + + PARABRICKS_RNA_FQ2BAM(reads, fasta, index, true, !skip_markduplicates) + ch_star_out = PARABRICKS_RNA_FQ2BAM } else if (is_aws_igenome) { - STAR_ALIGN_IGENOMES(reads, index, gtf, star_ignore_sjdbgtf, seq_platform, seq_center) + STAR_ALIGN_IGENOMES(reads, index, gtf, star_ignore_sjdbgtf) ch_star_out = STAR_ALIGN_IGENOMES } else { - STAR_ALIGN(reads, index, gtf, star_ignore_sjdbgtf, seq_platform, seq_center) + STAR_ALIGN(reads, index, gtf, star_ignore_sjdbgtf) ch_star_out = STAR_ALIGN } @@ -68,14 +73,12 @@ workflow ALIGN_STAR { ch_bam_transcript = ch_star_out.out.bam_transcript ch_fastq = ch_star_out.out.fastq ch_tab = ch_star_out.out.tab - ch_versions = ch_versions.mix(ch_star_out.out.versions.first()) ch_percent_mapped = ch_log_final.map { meta, log -> [ meta, getStarPercentMapped(params, log) ] } // // Sort, index BAM file and run samtools stats, flagstat and idxstats // BAM_SORT_STATS_SAMTOOLS(ch_orig_bam, fasta) - ch_versions = ch_versions.mix(BAM_SORT_STATS_SAMTOOLS.out.versions) emit: orig_bam = ch_orig_bam // channel: [ val(meta), bam ] @@ -93,5 +96,4 @@ workflow ALIGN_STAR { flagstat = BAM_SORT_STATS_SAMTOOLS.out.flagstat // channel: [ val(meta), [ flagstat ] ] idxstats = BAM_SORT_STATS_SAMTOOLS.out.idxstats // channel: [ val(meta), [ idxstats ] ] percent_mapped = ch_percent_mapped // channel: [ val(meta), percent_mapped ] - versions = ch_versions // channel: [ versions.yml ] } diff --git a/subworkflows/local/align_star/nextflow.config b/subworkflows/local/align_star/nextflow.config index 41626bc7c..88dbc3e73 100644 --- a/subworkflows/local/align_star/nextflow.config +++ b/subworkflows/local/align_star/nextflow.config @@ -1,111 +1,153 @@ -def generateStarAlignArgs(save_unaligned, contaminant_screening, extra_star_align_args, quantifier = 'salmon') { - def argsToMap = { String args -> - args.split(/\s(?=--)/).collectEntries { - def parts = it.trim().split(/\s+/, 2) - [(parts[0]): parts.size() > 1 ? parts[1] : ''] - } - } - - // Common args between pipeline and RSEM - def base_args = """ - --quantMode TranscriptomeSAM - --outSAMtype BAM Unsorted - --outSAMattributes NH HI AS NM MD - --readFilesCommand zcat - """.trim() +process { - // Add quantifier-specific args - if (quantifier == 'rsem') { - // RSEM-compatible configuration - base_args += " " + """ - --outSAMunmapped Within - --outFilterType BySJout - --outFilterMultimapNmax 20 - --outFilterMismatchNmax 999 - --outFilterMismatchNoverLmax 0.04 - --alignIntronMin 20 - --alignIntronMax 1000000 - --alignMatesGapMax 1000000 - --alignSJoverhangMin 8 - --alignSJDBoverhangMin 1 - --sjdbScore 1 - """.trim() - } else { - // Standard pipeline configuration - base_args += " " + """ - --twopassMode Basic - --runRNGseed 0 - --outFilterMultimapNmax 20 - --alignSJDBoverhangMin 1 - --outSAMstrandField intronMotif - """.trim() - } + // STAR alignment configuration + // Conditionals for when these processes run are handled in the workflow - if (save_unaligned || contaminant_screening) { - base_args += " --outReadsUnmapped Fastx" - } + withName: '.*ALIGN_STAR:STAR_ALIGN|.*ALIGN_STAR:STAR_ALIGN_IGENOMES|.*ALIGN_STAR:SENTIEON_STAR_ALIGN|.*ALIGN_STAR:PARABRICKS_RNA_FQ2BAM' { + ext.args = { + def isPbrun = task.process.contains('PARABRICKS') + def quantifier = params.aligner == 'star_rsem' ? 'rsem' : 'salmon' - def final_args_map = argsToMap(base_args) + (extra_star_align_args ? argsToMap(extra_star_align_args) : [:]) - final_args_map.collect { key, value -> "${key} ${value}".trim() }.join(' ') -} + // iGenomes is pinned to STAR 2.6.1d which uses the legacy --quantTranscriptomeBan flag. + // Sentieon also uses this legacy flag for now. + // If Sentieon updates to support the STAR 2.7+ flag, remove it from this check. + def useLegacyBanFlag = task.process.endsWith(':STAR_ALIGN_IGENOMES') || task.process.endsWith(':SENTIEON_STAR_ALIGN') -if (!params.skip_alignment && (params.aligner == 'star_salmon' || params.aligner == 'star_rsem')) { - process { + def args = [] - // We have to condition this, because the args are slightly different between the latest STAR and the one compatible with iGenomes - // The Sentieon implementation also uses the older arguments version + // Common args - pbrun uses kebab-case equivalents + if (isPbrun) { + args += [ + '--quantMode TranscriptomeSAM', + '--out-sam-attributes NH HI AS NM MD', + '--read-files-command zcat', + "--read-group-sm ${task.tag}", + "--read-group-id-prefix ${task.tag}" + ] + } else { + args += [ + '--quantMode TranscriptomeSAM', + '--outSAMtype BAM Unsorted', + '--outSAMattributes NH HI AS NM MD', + '--readFilesCommand zcat' + ] + } - withName: '.*:ALIGN_STAR:STAR_ALIGN' { - ext.args = { - def quantifier = params.aligner == 'star_rsem' ? 'rsem' : 'salmon' - def extra_args = params.extra_star_align_args ?: '' - if (quantifier == 'salmon') { - extra_args += ' --quantTranscriptomeSAMoutput BanSingleEnd' + // Quantifier-specific args + // + // NOTE: pbrun rna_fq2bam is based on STAR 2.7.2a and does NOT support: + // --outFilterType BySJout : no pbrun equivalent; pbrun uses its own filtering defaults + // --sjdbScore 1 : no pbrun equivalent; affects junction scoring priority + // --quantTranscriptomeBan Singleend / --quantTranscriptomeSAMoutput BanSingleEnd : + // no pbrun equivalent; Salmon handles mixed single/paired records gracefully + // --runRNGseed 0 : no pbrun equivalent; pbrun uses deterministic alignment selection + // + if (quantifier == 'rsem') { + if (isPbrun) { + args += [ + '--out-sam-unmapped Within', + '--max-out-filter-multimap 20', + '--max-out-filter-mismatch 999', + '--max-out-filter-mismatch-ratio 0.04', + '--min-intron-size 20', + '--max-intron-size 1000000', + '--max-align-mates-gap 1000000', + '--min-align-sj-overhang 8', + '--min-align-sjdb-overhang 1' + ] + } else { + args += [ + '--outSAMunmapped Within', + '--outFilterType BySJout', + '--outFilterMultimapNmax 20', + '--outFilterMismatchNmax 999', + '--outFilterMismatchNoverLmax 0.04', + '--alignIntronMin 20', + '--alignIntronMax 1000000', + '--alignMatesGapMax 1000000', + '--alignSJoverhangMin 8', + '--alignSJDBoverhangMin 1', + '--sjdbScore 1' + ] + } + } else { + if (isPbrun) { + args += [ + '--two-pass-mode Basic', + '--max-out-filter-multimap 20', + '--min-align-sjdb-overhang 1', + '--out-sam-strand-field intronMotif' + ] + } else { + args += [ + '--twopassMode Basic', + '--runRNGseed 0', + '--outFilterMultimapNmax 20', + '--alignSJDBoverhangMin 1', + '--outSAMstrandField intronMotif', + useLegacyBanFlag ? '--quantTranscriptomeBan Singleend' : '--quantTranscriptomeSAMoutput BanSingleEnd' + ] } - generateStarAlignArgs( - params.save_unaligned, - params.contaminant_screening, - extra_args, - quantifier - ) } - } - withName: '.*:ALIGN_STAR:STAR_ALIGN_IGENOMES|.*:ALIGN_STAR:SENTIEON_STAR_ALIGN' { - ext.args = { - def quantifier = params.aligner == 'star_rsem' ? 'rsem' : 'salmon' - def extra_args = params.extra_star_align_args ?: '' - if (quantifier == 'salmon') { - extra_args += ' --quantTranscriptomeBan Singleend' + + // Unmapped reads output + if (params.save_unaligned || params.contaminant_screening) { + args += isPbrun + ? ['--out-reads-unmapped Fastx'] + : ['--outReadsUnmapped Fastx'] + } + + // Prokaryotic: disable spliced alignment + if (params.prokaryotic) { + if (isPbrun) { + args += ['--max-intron-size 1'] + } else { + args += ['--sjdbGTFfeatureExon CDS', '--alignIntronMax 1'] } - generateStarAlignArgs( - params.save_unaligned, - params.contaminant_screening, - extra_args, - quantifier - ) } + + if (params.extra_star_align_args) { + args += [params.extra_star_align_args] + } + + // Read group tags - assembled once from samplesheet meta and pipeline params + // Per-sample meta values take priority over global params + def seqCenter = meta.seq_center ?: params.seq_center + def seqPlatform = meta.seq_platform ?: params.seq_platform + if (isPbrun) { + // pbrun supports --read-group-pl but has no --read-group-cn flag + if (seqPlatform) args << "--read-group-pl ${seqPlatform}" + } else if (seqPlatform || seqCenter) { + def rgParts = ["'ID:${meta.id}'", "'SM:${meta.id}'"] + if (seqPlatform) rgParts << "'PL:${seqPlatform}'" + if (seqCenter) rgParts << "'CN:${seqCenter}'" + args += ["--outSAMattrRGline ${rgParts.join(' ')}"] + } + + args.join(' ') } - withName: '.*:ALIGN_STAR:STAR_ALIGN|.*:ALIGN_STAR:STAR_ALIGN_IGENOMES|.*:ALIGN_STAR:SENTIEON_STAR_ALIGN' { + } - publishDir = [ - [ - path: { "${params.outdir}/${params.aligner}/log" }, - mode: params.publish_dir_mode, - pattern: '*.{out,tab}' - ], - [ - path: { params.save_align_intermeds ? "${params.outdir}/${params.aligner}" : params.outdir }, - mode: params.publish_dir_mode, - pattern: '*.bam', - saveAs: { params.save_align_intermeds ? it : null } - ], - [ - path: { params.save_unaligned ? "${params.outdir}/${params.aligner}/unmapped" : params.outdir }, - mode: params.publish_dir_mode, - pattern: '*.fastq.gz', - saveAs: { params.save_unaligned ? it : null } - ] + withName: '.*ALIGN_STAR:STAR_ALIGN|.*ALIGN_STAR:STAR_ALIGN_IGENOMES|.*ALIGN_STAR:SENTIEON_STAR_ALIGN|.*ALIGN_STAR:PARABRICKS_RNA_FQ2BAM' { + publishDir = [ + [ + path: { "${params.outdir}/${params.aligner}/log" }, + mode: params.publish_dir_mode, + pattern: '*.{out,tab}' + ], + [ + path: { params.save_align_intermeds ? "${params.outdir}/${params.aligner}" : params.outdir }, + mode: params.publish_dir_mode, + pattern: '*.bam', + saveAs: { filename -> params.save_align_intermeds ? filename : null } + ], + [ + path: { params.save_unaligned ? "${params.outdir}/${params.aligner}/unmapped" : params.outdir }, + mode: params.publish_dir_mode, + pattern: '*.fastq.gz', + saveAs: { filename -> params.save_unaligned ? filename : null } ] - } + ] } + } diff --git a/subworkflows/local/align_star/tests/main.nf.test b/subworkflows/local/align_star/tests/main.nf.test index a8cc2ab02..abfa0c5c3 100644 --- a/subworkflows/local/align_star/tests/main.nf.test +++ b/subworkflows/local/align_star/tests/main.nf.test @@ -29,10 +29,10 @@ nextflow_workflow { workflow { """ star_ignore_sjdbgtf = false - seq_platform = 'illumina' - seq_center = false is_aws_igenome = false - use_sentieon_star = false + use_sentieon_star = false + use_parabricks_star = false + skip_markduplicates = false input[0] = Channel.of([ [ id:'test', single_end:false ], // meta map @@ -47,14 +47,14 @@ nextflow_workflow { [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] ]) input[3] = star_ignore_sjdbgtf - input[4] = seq_platform - input[5] = seq_center - input[6] = is_aws_igenome - input[7] = Channel.of([ + input[4] = is_aws_igenome + input[5] = Channel.of([ [ id:'test_fasta' ], [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ] ]) - input[8] = use_sentieon_star + input[6] = use_sentieon_star + input[7] = use_parabricks_star + input[8] = skip_markduplicates """ } } @@ -74,21 +74,28 @@ nextflow_workflow { workflow.out.idxstats, bam(workflow.out.orig_bam[0][1]).getReadsMD5(), workflow.out.stats, - workflow.out.tab, - workflow.out.versions).match()} + workflow.out.tab).match()} ) } } test("star - with igenomes") { + config "./nextflow.igenomes.config" + setup { - run("STAR_GENOMEGENERATE_IGENOMES") { - script "../../../../modules/local/star_genomegenerate_igenomes/main.nf" + run("STAR_GENOMEGENERATE") { + script "../../../../modules/nf-core/star/genomegenerate/main.nf" process { """ - input[0] = Channel.of([file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true)]) - input[1] = Channel.of([file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true)]) + 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) ] + ]) """ } } @@ -98,10 +105,10 @@ nextflow_workflow { workflow { """ star_ignore_sjdbgtf = false - seq_platform = 'illumina' - seq_center = false is_aws_igenome = true - use_sentieon_star = false + use_sentieon_star = false + use_parabricks_star = false + skip_markduplicates = false input[0] = Channel.of([ [ id:'test', single_end:false ], // meta map @@ -110,20 +117,20 @@ nextflow_workflow { file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/fastq/test_rnaseq_2.fastq.gz', checkIfExists: true) ] ]) - input[1] = STAR_GENOMEGENERATE_IGENOMES.out.index.map{ [ [id:'star'], it ] } + 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] = star_ignore_sjdbgtf - input[4] = seq_platform - input[5] = seq_center - input[6] = is_aws_igenome - input[7] = Channel.of([ + input[4] = is_aws_igenome + input[5] = Channel.of([ [ id:'test_fasta' ], [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ] ]) - input[8] = use_sentieon_star + input[6] = use_sentieon_star + input[7] = use_parabricks_star + input[8] = skip_markduplicates """ } } @@ -143,8 +150,7 @@ nextflow_workflow { workflow.out.idxstats, bam(workflow.out.orig_bam[0][1]).getReadsMD5(), workflow.out.stats, - workflow.out.tab, - workflow.out.versions).match()} + workflow.out.tab).match()} ) } } @@ -175,10 +181,10 @@ nextflow_workflow { workflow { """ star_ignore_sjdbgtf = false - seq_platform = 'illumina' - seq_center = false is_aws_igenome = false - use_sentieon_star = false + use_sentieon_star = false + use_parabricks_star = false + skip_markduplicates = false input[0] = Channel.of([ [ id:'test', single_end:false ], // meta map @@ -193,14 +199,14 @@ nextflow_workflow { [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] ]) input[3] = star_ignore_sjdbgtf - input[4] = seq_platform - input[5] = seq_center - input[6] = is_aws_igenome - input[7] = Channel.of([ + input[4] = is_aws_igenome + input[5] = Channel.of([ [ id:'test_fasta' ], [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ] ]) - input[8] = use_sentieon_star + input[6] = use_sentieon_star + input[7] = use_parabricks_star + input[8] = skip_markduplicates """ } } @@ -221,23 +227,29 @@ nextflow_workflow { workflow.out.log_progress, workflow.out.orig_bam, workflow.out.stats, - workflow.out.tab, - workflow.out.versions).match()} + workflow.out.tab).match()} ) } } test("star - with igenomes - stub") { + config "./nextflow.igenomes.config" options "-stub" setup { - run("STAR_GENOMEGENERATE_IGENOMES") { - script "../../../../modules/local/star_genomegenerate_igenomes/main.nf" + run("STAR_GENOMEGENERATE") { + script "../../../../modules/nf-core/star/genomegenerate/main.nf" process { """ - input[0] = Channel.of([file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true)]) - input[1] = Channel.of([file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true)]) + 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) ] + ]) """ } } @@ -247,10 +259,10 @@ nextflow_workflow { workflow { """ star_ignore_sjdbgtf = false - seq_platform = 'illumina' - seq_center = false is_aws_igenome = true - use_sentieon_star = false + use_sentieon_star = false + use_parabricks_star = false + skip_markduplicates = false input[0] = Channel.of([ [ id:'test', single_end:false ], // meta map @@ -259,20 +271,20 @@ nextflow_workflow { file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/fastq/test_rnaseq_2.fastq.gz', checkIfExists: true) ] ]) - input[1] = STAR_GENOMEGENERATE_IGENOMES.out.index.map{ [ [id:'star'], it ] } + 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] = star_ignore_sjdbgtf - input[4] = seq_platform - input[5] = seq_center - input[6] = is_aws_igenome - input[7] = Channel.of([ + input[4] = is_aws_igenome + input[5] = Channel.of([ [ id:'test_fasta' ], [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ] ]) - input[8] = use_sentieon_star + input[6] = use_sentieon_star + input[7] = use_parabricks_star + input[8] = skip_markduplicates """ } } @@ -293,8 +305,7 @@ nextflow_workflow { workflow.out.log_progress, workflow.out.orig_bam, workflow.out.stats, - workflow.out.tab, - workflow.out.versions).match()} + workflow.out.tab).match()} ) } } diff --git a/subworkflows/local/align_star/tests/main.nf.test.snap b/subworkflows/local/align_star/tests/main.nf.test.snap index 08ecfd011..9a1adc384 100644 --- a/subworkflows/local/align_star/tests/main.nf.test.snap +++ b/subworkflows/local/align_star/tests/main.nf.test.snap @@ -6,7 +6,7 @@ "test.bam.bai", "1e02b8e6b4a02ab58bfe4ee795aba815", [ - + ], [ [ @@ -18,7 +18,7 @@ ] ], [ - + ], [ [ @@ -45,7 +45,7 @@ "id": "test", "single_end": false }, - "test.stats:md5,bad7f610455554f5523eb1ae58ab7afe" + "test.stats:md5,31d57594a8d6ca076442a2c868ba241f" ] ], [ @@ -56,21 +56,13 @@ }, "test.SJ.out.tab:md5,844af19ab0fc8cd9a3f75228445aca0d" ] - ], - [ - "versions.yml:md5,5ad5e88ee4e52ccabeef61dcd368d30b", - "versions.yml:md5,74c34ed19421feef5c344d852fbbaa58", - "versions.yml:md5,92f25606f0ee994dac8c00fe49676e5a", - "versions.yml:md5,9611f602102b5aed0fe2b947f9d2270c", - "versions.yml:md5,b92d6ad60847882b0089f551c5cfc366", - "versions.yml:md5,d5e8b4d761dd85a303814239077bd666" ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.2" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-06-06T17:48:18.740399" + "timestamp": "2026-02-04T14:53:02.38163538" }, "star - no igenomes - stub": { "content": [ @@ -111,7 +103,7 @@ ] ], [ - + ], [ [ @@ -119,7 +111,7 @@ "id": "test", "single_end": false }, - "test.flagstat:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.flagstat:md5,67394650dbae96d1a4fcc70484822159" ] ], [ @@ -192,21 +184,13 @@ "test.tab:md5,d41d8cd98f00b204e9800998ecf8427e" ] ] - ], - [ - "versions.yml:md5,57e0ecbc0fd3d1f5cfc9d9ed285826e8", - "versions.yml:md5,5ad5e88ee4e52ccabeef61dcd368d30b", - "versions.yml:md5,92f25606f0ee994dac8c00fe49676e5a", - "versions.yml:md5,9611f602102b5aed0fe2b947f9d2270c", - "versions.yml:md5,b92d6ad60847882b0089f551c5cfc366", - "versions.yml:md5,d5e8b4d761dd85a303814239077bd666" ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.3" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2024-12-19T09:49:19.874380799" + "timestamp": "2026-02-04T14:53:16.837732016" }, "star - no igenomes": { "content": [ @@ -215,7 +199,7 @@ "test.bam.bai", "1e02b8e6b4a02ab58bfe4ee795aba815", [ - + ], [ [ @@ -227,7 +211,7 @@ ] ], [ - + ], [ [ @@ -254,7 +238,7 @@ "id": "test", "single_end": false }, - "test.stats:md5,bad7f610455554f5523eb1ae58ab7afe" + "test.stats:md5,31d57594a8d6ca076442a2c868ba241f" ] ], [ @@ -265,21 +249,13 @@ }, "test.SJ.out.tab:md5,844af19ab0fc8cd9a3f75228445aca0d" ] - ], - [ - "versions.yml:md5,57e0ecbc0fd3d1f5cfc9d9ed285826e8", - "versions.yml:md5,5ad5e88ee4e52ccabeef61dcd368d30b", - "versions.yml:md5,92f25606f0ee994dac8c00fe49676e5a", - "versions.yml:md5,9611f602102b5aed0fe2b947f9d2270c", - "versions.yml:md5,b92d6ad60847882b0089f551c5cfc366", - "versions.yml:md5,d5e8b4d761dd85a303814239077bd666" ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.2" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-06-06T17:36:09.274326" + "timestamp": "2026-02-04T14:52:01.125247093" }, "star - with igenomes - stub": { "content": [ @@ -307,10 +283,7 @@ "id": "test", "single_end": false }, - [ - "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" - ] + "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], [ @@ -331,7 +304,7 @@ "id": "test", "single_end": false }, - "test.flagstat:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.flagstat:md5,67394650dbae96d1a4fcc70484822159" ] ], [ @@ -404,20 +377,12 @@ "test.tab:md5,d41d8cd98f00b204e9800998ecf8427e" ] ] - ], - [ - "versions.yml:md5,5ad5e88ee4e52ccabeef61dcd368d30b", - "versions.yml:md5,74c34ed19421feef5c344d852fbbaa58", - "versions.yml:md5,92f25606f0ee994dac8c00fe49676e5a", - "versions.yml:md5,9611f602102b5aed0fe2b947f9d2270c", - "versions.yml:md5,b92d6ad60847882b0089f551c5cfc366", - "versions.yml:md5,d5e8b4d761dd85a303814239077bd666" ] ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2024-10-21T14:54:32.959245404" + "timestamp": "2026-02-04T14:53:31.235911361" } -} +} \ No newline at end of file diff --git a/subworkflows/local/align_star/tests/main.parabricks.nf.test b/subworkflows/local/align_star/tests/main.parabricks.nf.test new file mode 100644 index 000000000..cb01f6d03 --- /dev/null +++ b/subworkflows/local/align_star/tests/main.parabricks.nf.test @@ -0,0 +1,139 @@ +nextflow_workflow { + + name "Test Subworkflow ALIGN_STAR - Parabricks" + script "../main.nf" + workflow "ALIGN_STAR" + config "./parabricks.config" + tag "gpu" + + setup { + run("STAR_GENOMEGENERATE", alias: "PARABRICKS_STARGENOMEGENERATE") { + script "../../../../modules/nf-core/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) ] + ]) + """ + } + } + } + + test("parabricks star") { + when { + workflow { + """ + star_ignore_sjdbgtf = false + is_aws_igenome = false + use_sentieon_star = false + use_parabricks_star = true + skip_markduplicates = false + + 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] = PARABRICKS_STARGENOMEGENERATE.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] = star_ignore_sjdbgtf + input[4] = is_aws_igenome + input[5] = Channel.of([ + [ id:'test_fasta' ], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ] + ]) + input[6] = use_sentieon_star + input[7] = use_parabricks_star + input[8] = skip_markduplicates + """ + } + } + + then { + assertAll( + { assert workflow.success}, + { assert snapshot( + file(workflow.out.log_final[0][1]).name, + file(workflow.out.log_out[0][1]).name, + file(workflow.out.bai[0][1]).name, + bam(workflow.out.bam[0][1]).getReadsMD5(), + workflow.out.csi, + file(workflow.out.log_progress[0][1]).name, + workflow.out.fastq, + workflow.out.flagstat, + workflow.out.idxstats, + bam(workflow.out.orig_bam[0][1]).getReadsMD5(), + workflow.out.stats, + workflow.out.tab).match()} + ) + } + } + + test("parabricks star - stub") { + options "-stub" + + when { + workflow { + """ + star_ignore_sjdbgtf = false + is_aws_igenome = false + use_sentieon_star = false + use_parabricks_star = true + skip_markduplicates = false + + 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] = PARABRICKS_STARGENOMEGENERATE.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] = star_ignore_sjdbgtf + input[4] = is_aws_igenome + input[5] = Channel.of([ + [ id:'test_fasta' ], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ] + ]) + input[6] = use_sentieon_star + input[7] = use_parabricks_star + input[8] = skip_markduplicates + """ + } + } + + then { + assertAll( + { assert workflow.success}, + { assert snapshot( + workflow.out.bai, + workflow.out.bam, + workflow.out.bam_sorted, + workflow.out.bam_transcript, + workflow.out.csi, + workflow.out.flagstat, + workflow.out.idxstats, + workflow.out.log_final, + workflow.out.log_out, + workflow.out.log_progress, + workflow.out.orig_bam, + workflow.out.stats, + workflow.out.tab).match()} + ) + } + } +} diff --git a/subworkflows/local/align_star/tests/main.parabricks.nf.test.snap b/subworkflows/local/align_star/tests/main.parabricks.nf.test.snap new file mode 100644 index 000000000..c8ed0c485 --- /dev/null +++ b/subworkflows/local/align_star/tests/main.parabricks.nf.test.snap @@ -0,0 +1,186 @@ +{ + "parabricks star": { + "content": [ + "test.Log.final.out", + "test.Log.out", + "sorted_.bam.bai", + "d5861e7d7a76e47e17bfaa03be48447c", + [ + + ], + "test.Log.progress.out", + [ + + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.flagstat:md5,7ffdfbb9d18429bfaf4195936daea832" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.idxstats:md5,e05df3feaca581e80c6bb159dac585d8" + ] + ], + "d5861e7d7a76e47e17bfaa03be48447c", + [ + [ + { + "id": "test", + "single_end": false + }, + "test.stats:md5,e3dff64f76d23a44857a7dea3acf8f2f" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.SJ.out.tab:md5,9864f53ee8de98e6b3dd5bf644c3650f" + ] + ] + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.3" + }, + "timestamp": "2026-02-06T07:10:01.389880566" + }, + "parabricks star - stub": { + "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + "sorted_.bam.bai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "sorted_.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.toTranscriptome.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + [ + + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.flagstat:md5,67394650dbae96d1a4fcc70484822159" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.idxstats:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.Log.final.out:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.Log.out:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.Log.progress.out:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.stats:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ] + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.3" + }, + "timestamp": "2026-01-30T08:26:39.115374636" + } +} \ No newline at end of file diff --git a/subworkflows/local/align_star/tests/main.rg.nf.test b/subworkflows/local/align_star/tests/main.rg.nf.test new file mode 100644 index 000000000..8e53fb0b4 --- /dev/null +++ b/subworkflows/local/align_star/tests/main.rg.nf.test @@ -0,0 +1,137 @@ +nextflow_workflow { + + name "Test Subworkflow ALIGN_STAR - Read Groups" + script "../main.nf" + workflow "ALIGN_STAR" + config "./nextflow.rg.config" + + test("star - read group from params only") { + + setup { + run("STAR_GENOMEGENERATE") { + script "../../../../modules/nf-core/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 { + workflow { + """ + star_ignore_sjdbgtf = false + is_aws_igenome = false + use_sentieon_star = false + use_parabricks_star = false + skip_markduplicates = false + + input[0] = Channel.of([ + [ id:'test', single_end:false, seq_platform:'ILLUMINA' ], + [ + 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] = star_ignore_sjdbgtf + input[4] = is_aws_igenome + input[5] = Channel.of([ + [ id:'test_fasta' ], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ] + ]) + input[6] = use_sentieon_star + input[7] = use_parabricks_star + input[8] = skip_markduplicates + """ + } + } + + then { + assertAll( + { assert workflow.success }, + // params.seq_center = 'GLOBAL_CENTER' (from nextflow.rg.config), no meta.seq_center + { assert bam(workflow.out.bam[0][1]).getHeader().any { line -> line.contains('CN:GLOBAL_CENTER') } }, + { assert bam(workflow.out.bam[0][1]).getHeader().any { line -> line.contains('PL:ILLUMINA') } }, + { assert bam(workflow.out.bam[0][1]).getHeader().any { line -> line.contains('SM:test') } } + ) + } + } + + test("star - read group meta overrides params") { + + setup { + run("STAR_GENOMEGENERATE") { + script "../../../../modules/nf-core/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 { + workflow { + """ + star_ignore_sjdbgtf = false + is_aws_igenome = false + use_sentieon_star = false + use_parabricks_star = false + skip_markduplicates = false + + input[0] = Channel.of([ + [ id:'test', single_end:false, seq_platform:'ILLUMINA', seq_center:'SAMPLE_CENTER' ], + [ + 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] = star_ignore_sjdbgtf + input[4] = is_aws_igenome + input[5] = Channel.of([ + [ id:'test_fasta' ], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ] + ]) + input[6] = use_sentieon_star + input[7] = use_parabricks_star + input[8] = skip_markduplicates + """ + } + } + + then { + assertAll( + { assert workflow.success }, + // meta.seq_center = 'SAMPLE_CENTER' should override params.seq_center = 'GLOBAL_CENTER' + { assert bam(workflow.out.bam[0][1]).getHeader().any { line -> line.contains('CN:SAMPLE_CENTER') } }, + { assert !bam(workflow.out.bam[0][1]).getHeader().any { line -> line.contains('CN:GLOBAL_CENTER') } }, + { assert bam(workflow.out.bam[0][1]).getHeader().any { line -> line.contains('PL:ILLUMINA') } } + ) + } + } +} diff --git a/subworkflows/local/align_star/tests/main.sentieon.nf.test b/subworkflows/local/align_star/tests/main.sentieon.nf.test index 0bd3e410d..ea1f4b81d 100644 --- a/subworkflows/local/align_star/tests/main.sentieon.nf.test +++ b/subworkflows/local/align_star/tests/main.sentieon.nf.test @@ -3,7 +3,7 @@ nextflow_workflow { name "Test Subworkflow ALIGN_STAR - Sentieon" script "../main.nf" workflow "ALIGN_STAR" - config "./nextflow.config" + config "./sentieon.config" test("sentieon star - no igenomes") { tag "sentieon" @@ -29,10 +29,10 @@ nextflow_workflow { workflow { """ star_ignore_sjdbgtf = false - seq_platform = 'illumina' - seq_center = false is_aws_igenome = false - use_sentieon_star = true + use_sentieon_star = true + use_parabricks_star = false + skip_markduplicates = false input[0] = Channel.of([ [ id:'test', single_end:false ], // meta map @@ -47,14 +47,14 @@ nextflow_workflow { [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] ]) input[3] = star_ignore_sjdbgtf - input[4] = seq_platform - input[5] = seq_center - input[6] = is_aws_igenome - input[7] = Channel.of([ + input[4] = is_aws_igenome + input[5] = Channel.of([ [ id:'test_fasta' ], [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ] ]) - input[8] = use_sentieon_star + input[6] = use_sentieon_star + input[7] = use_parabricks_star + input[8] = skip_markduplicates """ } } @@ -74,8 +74,7 @@ nextflow_workflow { workflow.out.idxstats, bam(workflow.out.orig_bam[0][1]).getReadsMD5(), workflow.out.stats, - workflow.out.tab, - workflow.out.versions).match()} + workflow.out.tab).match()} ) } } @@ -106,10 +105,10 @@ nextflow_workflow { workflow { """ star_ignore_sjdbgtf = false - seq_platform = 'illumina' - seq_center = false is_aws_igenome = false - use_sentieon_star = true + use_sentieon_star = true + use_parabricks_star = false + skip_markduplicates = false input[0] = Channel.of([ [ id:'test', single_end:false ], // meta map @@ -124,14 +123,14 @@ nextflow_workflow { [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] ]) input[3] = star_ignore_sjdbgtf - input[4] = seq_platform - input[5] = seq_center - input[6] = is_aws_igenome - input[7] = Channel.of([ + input[4] = is_aws_igenome + input[5] = Channel.of([ [ id:'test_fasta' ], [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ] ]) - input[8] = use_sentieon_star + input[6] = use_sentieon_star + input[7] = use_parabricks_star + input[8] = skip_markduplicates """ } } @@ -152,8 +151,7 @@ nextflow_workflow { workflow.out.log_progress, workflow.out.orig_bam, workflow.out.stats, - workflow.out.tab, - workflow.out.versions).match()} + workflow.out.tab).match()} ) } } diff --git a/subworkflows/local/align_star/tests/main.sentieon.nf.test.snap b/subworkflows/local/align_star/tests/main.sentieon.nf.test.snap index bedd9b107..aaed1d1a9 100644 --- a/subworkflows/local/align_star/tests/main.sentieon.nf.test.snap +++ b/subworkflows/local/align_star/tests/main.sentieon.nf.test.snap @@ -45,7 +45,7 @@ "id": "test", "single_end": false }, - "test.stats:md5,bad7f610455554f5523eb1ae58ab7afe" + "test.stats:md5,31d57594a8d6ca076442a2c868ba241f" ] ], [ @@ -56,21 +56,13 @@ }, "test.SJ.out.tab:md5,844af19ab0fc8cd9a3f75228445aca0d" ] - ], - [ - "versions.yml:md5,5ad5e88ee4e52ccabeef61dcd368d30b", - "versions.yml:md5,92f25606f0ee994dac8c00fe49676e5a", - "versions.yml:md5,9611f602102b5aed0fe2b947f9d2270c", - "versions.yml:md5,acd96767bb59492168c6c7b75d3f984e", - "versions.yml:md5,b92d6ad60847882b0089f551c5cfc366", - "versions.yml:md5,d5e8b4d761dd85a303814239077bd666" ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.6" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-08-12T07:52:13.10736278" + "timestamp": "2025-12-18T14:55:37.838654167" }, "sentieon star - no igenomes - stub": { "content": [ @@ -119,7 +111,7 @@ "id": "test", "single_end": false }, - "test.flagstat:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.flagstat:md5,67394650dbae96d1a4fcc70484822159" ] ], [ @@ -192,20 +184,12 @@ "test.tab:md5,d41d8cd98f00b204e9800998ecf8427e" ] ] - ], - [ - "versions.yml:md5,5ad5e88ee4e52ccabeef61dcd368d30b", - "versions.yml:md5,92f25606f0ee994dac8c00fe49676e5a", - "versions.yml:md5,9611f602102b5aed0fe2b947f9d2270c", - "versions.yml:md5,acd96767bb59492168c6c7b75d3f984e", - "versions.yml:md5,b92d6ad60847882b0089f551c5cfc366", - "versions.yml:md5,d5e8b4d761dd85a303814239077bd666" ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.6" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-08-12T07:52:13.10736278" + "timestamp": "2025-12-18T14:57:01.409253112" } } diff --git a/subworkflows/local/align_star/tests/nextflow.config b/subworkflows/local/align_star/tests/nextflow.config index 7304ade5f..4711b8871 100644 --- a/subworkflows/local/align_star/tests/nextflow.config +++ b/subworkflows/local/align_star/tests/nextflow.config @@ -7,21 +7,3 @@ process { ext.args = '--readFilesCommand zcat --outSAMtype BAM SortedByCoordinate --outWigType bedGraph --outWigStrand Unstranded' } } - -// Fix chown issue for the output star folder -docker.runOptions = '-u $(id -u):$(id -g)' - -// NOTE This is how pipeline users will use Sentieon in real world use -if (System.getenv('SENTIEON_LICSRVR_IP')) { - env.SENTIEON_LICENSE = "$SENTIEON_LICSRVR_IP" -} -//NOTE This should only happen in GitHub actions or nf-core MegaTests -if (System.getenv('SENTIEON_AUTH_MECH')) { - env.SENTIEON_AUTH_MECH = "$SENTIEON_AUTH_MECH" -} -if (secrets.SENTIEON_AUTH_DATA) { - env.SENTIEON_AUTH_DATA = secrets.SENTIEON_AUTH_DATA -} - -// NOTE This is how pipeline users will test out Sentieon with a license file -// nextflow secrets set SENTIEON_LICENSE_BASE64 \$(cat | base64 -w 0) diff --git a/subworkflows/local/align_star/tests/nextflow.igenomes.config b/subworkflows/local/align_star/tests/nextflow.igenomes.config new file mode 100644 index 000000000..fddb485b7 --- /dev/null +++ b/subworkflows/local/align_star/tests/nextflow.igenomes.config @@ -0,0 +1,19 @@ +// In nf-test setup blocks, processes run with their bare name. +// The IGENOMES-suffixed processes get STAR 2.6.1d from conf/igenomes_star.config +// (loaded via nextflow.config), with ARM overrides from conf/arm.config. +// This config only handles the bare STAR_GENOMEGENERATE used in setup blocks. +// IMPORTANT: Keep conda/container values in sync with conf/igenomes_star.config +// and conf/arm.config. +process { + withName: 'STAR_GENOMEGENERATE' { + conda = 'bioconda::star=2.6.1d bioconda::samtools=1.21 conda-forge::gawk=5.1.0' + container = { + def isSingularity = workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container + if (params.arm ?: false) { + isSingularity ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/e4/e4651c6689ae3c8ae0b039c5b1279a7e2cb8ab8c40fc577a0370e6fd72d91d8e/data' : 'community.wave.seqera.io/library/star_samtools_gawk:01330987bbdd407c' + } else { + isSingularity ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/50/50bb64440689d5d7af4bf8ad1032f01aa4e1597e0bb1c82ee91e8cb43943283c/data' : 'community.wave.seqera.io/library/star_samtools_gawk:79ca42311e583cdc' + } + } + } +} diff --git a/subworkflows/local/align_star/tests/nextflow.rg.config b/subworkflows/local/align_star/tests/nextflow.rg.config new file mode 100644 index 000000000..8dc709929 --- /dev/null +++ b/subworkflows/local/align_star/tests/nextflow.rg.config @@ -0,0 +1,28 @@ +// Test config for read group assembly +// Includes the production subworkflow config so the RG closure is exercised + +params { + aligner = 'star_salmon' + outdir = 'results' + publish_dir_mode = 'copy' + save_unaligned = false + save_align_intermeds = false + contaminant_screening = null + prokaryotic = false + extra_star_align_args = '' + seq_center = 'GLOBAL_CENTER' + seq_platform = null +} + +includeConfig '../nextflow.config' + +process { + withName: 'STAR_GENOMEGENERATE.*' { + ext.args = '--genomeSAindexNbases 9' + } + + // Disable publishDir during tests + withName: '.*ALIGN_STAR:STAR_ALIGN|.*ALIGN_STAR:STAR_ALIGN_IGENOMES|.*ALIGN_STAR:SENTIEON_STAR_ALIGN|.*ALIGN_STAR:PARABRICKS_RNA_FQ2BAM' { + publishDir = [] + } +} diff --git a/subworkflows/local/align_star/tests/parabricks.config b/subworkflows/local/align_star/tests/parabricks.config new file mode 100644 index 000000000..d951c1a4a --- /dev/null +++ b/subworkflows/local/align_star/tests/parabricks.config @@ -0,0 +1,13 @@ +params { + publish_dir_mode = 'copy' + extra_star_align_args = '--low-memory --x3' +} + +includeConfig '../nextflow.config' + +process { + // Fix issue where input and output BAMs have the same name + withName: '.*SAMTOOLS_SORT.*' { + ext.prefix = 'sorted_' + } +} diff --git a/subworkflows/local/align_star/tests/sentieon.config b/subworkflows/local/align_star/tests/sentieon.config new file mode 100644 index 000000000..7f07a2e88 --- /dev/null +++ b/subworkflows/local/align_star/tests/sentieon.config @@ -0,0 +1,16 @@ +process { + withName: 'STAR_GENOMEGENERATE.*' { + ext.args = '--genomeSAindexNbases 9' + } + + withName: '.*STAR_ALIGN.*' { + ext.args = '--readFilesCommand zcat --outSAMtype BAM SortedByCoordinate --outWigType bedGraph --outWigStrand Unstranded' + } +} + +env { + // Sentieon environment configuration + SENTIEON_LICENSE = System.getenv('SENTIEON_LICSRVR_IP') + SENTIEON_AUTH_MECH = System.getenv('SENTIEON_AUTH_MECH') + SENTIEON_AUTH_DATA = secrets.SENTIEON_AUTH_DATA +} diff --git a/subworkflows/local/prepare_genome/main.nf b/subworkflows/local/prepare_genome/main.nf index 20db3067c..e85bbe457 100644 --- a/subworkflows/local/prepare_genome/main.nf +++ b/subworkflows/local/prepare_genome/main.nf @@ -16,13 +16,17 @@ include { UNTAR as UNTAR_RSEM_INDEX } from '../../../modules/nf-core/unt include { UNTAR as UNTAR_HISAT2_INDEX } from '../../../modules/nf-core/untar' include { UNTAR as UNTAR_SALMON_INDEX } from '../../../modules/nf-core/untar' include { UNTAR as UNTAR_KALLISTO_INDEX } from '../../../modules/nf-core/untar' +include { UNTAR as UNTAR_BOWTIE2_INDEX } from '../../../modules/nf-core/untar' include { CUSTOM_CATADDITIONALFASTA } from '../../../modules/nf-core/custom/catadditionalfasta' -include { CUSTOM_GETCHROMSIZES } from '../../../modules/nf-core/custom/getchromsizes' +include { SAMTOOLS_FAIDX } from '../../../modules/nf-core/samtools/faidx' include { GFFREAD } from '../../../modules/nf-core/gffread' +include { GFFREAD as GFFREAD_TRANSCRIPTS } from '../../../modules/nf-core/gffread' +include { BOWTIE2_BUILD } from '../../../modules/nf-core/bowtie2/build' include { BBMAP_BBSPLIT } from '../../../modules/nf-core/bbmap/bbsplit' include { SORTMERNA as SORTMERNA_INDEX } from '../../../modules/nf-core/sortmerna' include { STAR_GENOMEGENERATE } from '../../../modules/nf-core/star/genomegenerate' +include { STAR_GENOMEGENERATE as PARABRICKS_STARGENOMEGENERATE } from '../../../modules/nf-core/star/genomegenerate' include { HISAT2_EXTRACTSPLICESITES } from '../../../modules/nf-core/hisat2/extractsplicesites' include { HISAT2_BUILD } from '../../../modules/nf-core/hisat2/build' include { SALMON_INDEX } from '../../../modules/nf-core/salmon/index' @@ -35,7 +39,7 @@ include { SENTIEON_RSEMPREPAREREFERENCE as SENTIEON_MAKE_TRANSCRIPTS_FASTA include { PREPROCESS_TRANSCRIPTS_FASTA_GENCODE } from '../../../modules/local/preprocess_transcripts_fasta_gencode' include { GTF2BED } from '../../../modules/local/gtf2bed' include { GTF_FILTER } from '../../../modules/local/gtf_filter' -include { STAR_GENOMEGENERATE_IGENOMES } from '../../../modules/local/star_genomegenerate_igenomes' +include { STAR_GENOMEGENERATE as STAR_GENOMEGENERATE_IGENOMES } from '../../../modules/nf-core/star/genomegenerate' workflow PREPARE_GENOME { @@ -54,44 +58,44 @@ workflow PREPARE_GENOME { salmon_index // directory: /path/to/salmon/index/ kallisto_index // directory: /path/to/kallisto/index/ hisat2_index // directory: /path/to/hisat2/index/ + bowtie2_index // directory: /path/to/bowtie2/index/ bbsplit_index // directory: /path/to/bbsplit/index/ sortmerna_index // directory: /path/to/sortmerna/index/ gencode // boolean: whether the genome is from GENCODE + gffread_transcript_fasta // boolean: use gffread instead of RSEM for transcript FASTA extraction featurecounts_group_type // string: The attribute type used to group feature types in the GTF file when generating the biotype plot with featureCounts - aligner // string: Specifies the alignment algorithm to use - available options are 'star_salmon', 'star_rsem' and 'hisat2' + aligner // string: Specifies the alignment algorithm to use - available options are 'star_salmon', 'star_rsem', 'hisat2', and 'bowtie2_salmon' pseudo_aligner // string: Specifies the pseudo aligner to use - available options are 'salmon'. Runs in addition to '--aligner' skip_gtf_filter // boolean: Skip filtering of GTF for valid scaffolds and/ or transcript IDs skip_bbsplit // boolean: Skip BBSplit for removal of non-reference genome reads - skip_sortmerna // boolean: Skip sortmerna for removal of reads mapping to sequences in sortmerna_fasta_list + ribo_removal_tool // string: Tool for rRNA removal - 'sortmerna', 'ribodetector', or 'bowtie2' (null if skip) skip_alignment // boolean: Skip all of the alignment-based processes within the pipeline skip_pseudo_alignment // boolean: Skip all of the pseudoalignment-based processes within the pipeline - use_sentieon_star // boolean: whether to use sentieon STAR version + use_sentieon_star // boolean: whether to use sentieon STAR version + use_parabricks_star // boolean: whether to use parabricks STAR version main: // Versions collector - ch_versions = Channel.empty() + ch_versions = channel.empty() //--------------------------- // 1) Uncompress GTF or GFF -> GTF //--------------------------- - ch_gtf = Channel.empty() + ch_gtf = channel.empty() if (gtf) { if (gtf.endsWith('.gz')) { - ch_gtf = GUNZIP_GTF ([ [:], file(gtf, checkIfExists: true) ]).gunzip.map { it[1] } - ch_versions = ch_versions.mix(GUNZIP_GTF.out.versions) + ch_gtf = GUNZIP_GTF ([ [:], file(gtf, checkIfExists: true) ]).gunzip.map { tuple -> tuple[1] } } else { - ch_gtf = Channel.value(file(gtf, checkIfExists: true)) + ch_gtf = channel.value(file(gtf, checkIfExists: true)) } } else if (gff) { def ch_gff if (gff.endsWith('.gz')) { ch_gff = GUNZIP_GFF ([ [:], file(gff, checkIfExists: true) ]).gunzip - ch_versions = ch_versions.mix(GUNZIP_GFF.out.versions) } else { - ch_gff = Channel.value(file(gff, checkIfExists: true)).map { [ [:], it ] } + ch_gff = channel.value(file(gff, checkIfExists: true)).map { item -> [ [:], item ] } } - ch_gtf = GFFREAD(ch_gff, []).gtf.map { it[1] } - ch_versions = ch_versions.mix(GFFREAD.out.versions) + ch_gtf = GFFREAD(ch_gff, []).gtf.map { tuple -> tuple[1] } } //------------------------------------- @@ -99,14 +103,13 @@ workflow PREPARE_GENOME { //------------------------------------- def fasta_provided = (fasta ? true : false) - ch_fasta = Channel.of([]) + ch_fasta = channel.of([]) if (fasta_provided) { // Uncompress FASTA if needed if (fasta.endsWith('.gz')) { - ch_fasta = GUNZIP_FASTA ([ [:], file(fasta, checkIfExists: true) ]).gunzip.map { it[1] } - ch_versions = ch_versions.mix(GUNZIP_FASTA.out.versions) + ch_fasta = GUNZIP_FASTA ([ [:], file(fasta, checkIfExists: true) ]).gunzip.map { tuple -> tuple[1] } } else { - ch_fasta = Channel.value(file(fasta, checkIfExists: true)) + ch_fasta = channel.value(file(fasta, checkIfExists: true)) } } @@ -122,45 +125,41 @@ workflow PREPARE_GENOME { if (filter_gtf_needed) { GTF_FILTER(ch_fasta, ch_gtf) ch_gtf = GTF_FILTER.out.genome_gtf.first() - ch_versions = ch_versions.mix(GTF_FILTER.out.versions) } //--------------------------------------------------- // 4) Concatenate additional FASTA (if both are given) //--------------------------------------------------- - ch_add_fasta = Channel.empty() + ch_add_fasta = channel.empty() if (fasta_provided && additional_fasta) { if (additional_fasta.endsWith('.gz')) { - ch_add_fasta = GUNZIP_ADDITIONAL_FASTA([ [:], file(additional_fasta, checkIfExists: true) ]).gunzip.map { it[1] } - ch_versions = ch_versions.mix(GUNZIP_ADDITIONAL_FASTA.out.versions) + ch_add_fasta = GUNZIP_ADDITIONAL_FASTA([ [:], file(additional_fasta, checkIfExists: true) ]).gunzip.map { tuple -> tuple[1] } } else { - ch_add_fasta = Channel.value(file(additional_fasta, checkIfExists: true)) + ch_add_fasta = channel.value(file(additional_fasta, checkIfExists: true)) } CUSTOM_CATADDITIONALFASTA( - ch_fasta.combine(ch_gtf).map { fasta, gtf -> [ [:], fasta, gtf ] }, - ch_add_fasta.map { [ [:], it ] }, + ch_fasta.combine(ch_gtf).map { fasta_file, gtf_file -> [ [id: 'genome_transcriptome'], fasta_file, gtf_file ] }, + ch_add_fasta.map { item -> [ [id: 'genome_transcriptome'], item ] }, gencode ? "gene_type" : featurecounts_group_type ) - ch_fasta = CUSTOM_CATADDITIONALFASTA.out.fasta.map { it[1] }.first() - ch_gtf = CUSTOM_CATADDITIONALFASTA.out.gtf.map { it[1] }.first() + ch_fasta = CUSTOM_CATADDITIONALFASTA.out.fasta.map { tuple -> tuple[1] }.first() + ch_gtf = CUSTOM_CATADDITIONALFASTA.out.gtf.map { tuple -> tuple[1] }.first() ch_versions = ch_versions.mix(CUSTOM_CATADDITIONALFASTA.out.versions) } //------------------------------------------------------ // 5) Uncompress gene BED or create from GTF if not given //------------------------------------------------------ - ch_gene_bed = Channel.empty() + ch_gene_bed = channel.empty() if (gene_bed) { if (gene_bed.endsWith('.gz')) { - ch_gene_bed = GUNZIP_GENE_BED ([ [:], file(gene_bed, checkIfExists: true) ]).gunzip.map { it[1] } - ch_versions = ch_versions.mix(GUNZIP_GENE_BED.out.versions) + ch_gene_bed = GUNZIP_GENE_BED ([ [:], file(gene_bed, checkIfExists: true) ]).gunzip.map { tuple -> tuple[1] } } else { - ch_gene_bed = Channel.value(file(gene_bed, checkIfExists: true)) + ch_gene_bed = channel.value(file(gene_bed, checkIfExists: true)) } } else { ch_gene_bed = GTF2BED(ch_gtf).bed - ch_versions = ch_versions.mix(GTF2BED.out.versions) } //---------------------------------------------------------------------- @@ -168,30 +167,34 @@ workflow PREPARE_GENOME { // - If provided, decompress (optionally preprocess if GENCODE) // - If not provided but have genome+GTF, create from them //---------------------------------------------------------------------- - ch_transcript_fasta = Channel.empty() + ch_transcript_fasta = channel.empty() if (transcript_fasta) { // Use user-provided transcript FASTA if (transcript_fasta.endsWith('.gz')) { - ch_transcript_fasta = GUNZIP_TRANSCRIPT_FASTA ([ [:], file(transcript_fasta, checkIfExists: true) ]).gunzip.map { it[1] } - ch_versions = ch_versions.mix(GUNZIP_TRANSCRIPT_FASTA.out.versions) + ch_transcript_fasta = GUNZIP_TRANSCRIPT_FASTA ([ [:], file(transcript_fasta, checkIfExists: true) ]).gunzip.map { tuple -> tuple[1] } } else { - ch_transcript_fasta = Channel.value(file(transcript_fasta, checkIfExists: true)) + ch_transcript_fasta = channel.value(file(transcript_fasta, checkIfExists: true)) } if (gencode) { PREPROCESS_TRANSCRIPTS_FASTA_GENCODE(ch_transcript_fasta) ch_transcript_fasta = PREPROCESS_TRANSCRIPTS_FASTA_GENCODE.out.fasta - ch_versions = ch_versions.mix(PREPROCESS_TRANSCRIPTS_FASTA_GENCODE.out.versions) } } else if (fasta_provided) { - if(use_sentieon_star){ + if (gffread_transcript_fasta) { + // Use gffread to extract transcripts instead of RSEM + // gffread handles CDS features correctly (e.g., prokaryotic annotations lack exon features) + GFFREAD_TRANSCRIPTS( + ch_gtf.map { gtf_file -> [ [id: 'transcripts'], gtf_file ] }, + ch_fasta + ) + ch_transcript_fasta = GFFREAD_TRANSCRIPTS.out.gffread_fasta.map { meta, fasta_file -> fasta_file } + } else if (use_sentieon_star) { // Build transcripts from genome if we have it ch_transcript_fasta = SENTIEON_MAKE_TRANSCRIPTS_FASTA(ch_fasta, ch_gtf).transcript_fasta - ch_versions = ch_versions.mix(SENTIEON_MAKE_TRANSCRIPTS_FASTA.out.versions) } else { // Build transcripts from genome if we have it ch_transcript_fasta = MAKE_TRANSCRIPTS_FASTA(ch_fasta, ch_gtf).transcript_fasta - ch_versions = ch_versions.mix(MAKE_TRANSCRIPTS_FASTA.out.versions) } } @@ -199,13 +202,12 @@ workflow PREPARE_GENOME { //------------------------------------------------------- // 7) FAI / chrom.sizes only if we actually have a genome //------------------------------------------------------- - ch_fai = Channel.empty() - ch_chrom_sizes = Channel.empty() + ch_fai = channel.empty() + ch_chrom_sizes = channel.empty() if (fasta_provided) { - CUSTOM_GETCHROMSIZES(ch_fasta.map { [ [:], it ] }) - ch_fai = CUSTOM_GETCHROMSIZES.out.fai.map { it[1] } - ch_chrom_sizes = CUSTOM_GETCHROMSIZES.out.sizes.map { it[1] } - ch_versions = ch_versions.mix(CUSTOM_GETCHROMSIZES.out.versions) + SAMTOOLS_FAIDX(ch_fasta.map { item -> [ [:], item ] }, [ [:], [] ], true) + ch_fai = SAMTOOLS_FAIDX.out.fai.map { tuple -> tuple[1] } + ch_chrom_sizes = SAMTOOLS_FAIDX.out.sizes.map { tuple -> tuple[1] } } //------------------------------------------------ @@ -213,33 +215,32 @@ workflow PREPARE_GENOME { //------------------------------------------------ def prepare_tool_indices = [] if (!skip_bbsplit) { prepare_tool_indices << 'bbsplit' } - if (!skip_sortmerna) { prepare_tool_indices << 'sortmerna' } + if (ribo_removal_tool == 'sortmerna') { prepare_tool_indices << 'sortmerna' } if ((!skip_alignment && aligner) || aligner == 'star_rsem') { prepare_tool_indices << aligner } if (!skip_pseudo_alignment && pseudo_aligner) { prepare_tool_indices << pseudo_aligner } //--------------------------------------------------------- // 9) BBSplit index: uses FASTA only if we generate from scratch //--------------------------------------------------------- - ch_bbsplit_index = Channel.empty() + ch_bbsplit_index = channel.empty() if ('bbsplit' in prepare_tool_indices) { if (bbsplit_index) { // Use user-provided bbsplit index if (bbsplit_index.endsWith('.tar.gz')) { - ch_bbsplit_index = UNTAR_BBSPLIT_INDEX ([ [:], file(bbsplit_index, checkIfExists: true) ]).untar.map { it[1] } - ch_versions = ch_versions.mix(UNTAR_BBSPLIT_INDEX.out.versions) + ch_bbsplit_index = UNTAR_BBSPLIT_INDEX ([ [:], file(bbsplit_index, checkIfExists: true) ]).untar.map { tuple -> tuple[1] } } else { - ch_bbsplit_index = Channel.value(file(bbsplit_index, checkIfExists: true)) + ch_bbsplit_index = channel.value(file(bbsplit_index, checkIfExists: true)) } } else if (fasta_provided) { // Build it from scratch if we have FASTA - Channel + channel .from(file(bbsplit_fasta_list, checkIfExists: true)) .splitCsv() // Read in 2 column csv file: short_name,path_to_fasta .flatMap { id, fafile -> [ [ 'id', id ], [ 'fasta', file(fafile, checkIfExists: true) ] ] } // Flatten entries to be able to groupTuple by a common key .groupTuple() - .map { it -> it[1] } // Get rid of keys and keep grouped values - .collect { [ it ] } // Collect entries as a list to pass as "tuple val(short_names), path(path_to_fasta)" to module + .map { entry -> entry[1] } // Get rid of keys and keep grouped values + .collect { item -> [ item ] } // Collect entries as a list to pass as "tuple val(short_names), path(path_to_fasta)" to module .set { ch_bbsplit_fasta_list } ch_bbsplit_index = BBMAP_BBSPLIT( @@ -249,52 +250,52 @@ workflow PREPARE_GENOME { ch_bbsplit_fasta_list, true ).index - ch_versions = ch_versions.mix(BBMAP_BBSPLIT.out.versions) } // else: no FASTA and no user-provided index -> remains empty } //------------------------------------------------------------- - // 10) SortMeRNA index does not require the genome FASTA at all + // 10) rRNA fastas and SortMeRNA index //------------------------------------------------------------- - ch_sortmerna_index = Channel.empty() - ch_rrna_fastas = Channel.empty() - if ('sortmerna' in prepare_tool_indices) { - // We always need the rRNA FASTAs + ch_sortmerna_index = channel.empty() + ch_rrna_fastas = channel.empty() + + // Load rRNA FASTAs when using sortmerna or bowtie2 for rRNA removal + if (ribo_removal_tool in ['sortmerna', 'bowtie2']) { def ribo_db = file(sortmerna_fasta_list) - ch_rrna_fastas = Channel.from(ribo_db.readLines()) + ch_rrna_fastas = channel.from(ribo_db.readLines()) .map { row -> file(row) } + } + // Build SortMeRNA index only when using sortmerna + if ('sortmerna' in prepare_tool_indices) { if (sortmerna_index) { if (sortmerna_index.endsWith('.tar.gz')) { - ch_sortmerna_index = UNTAR_SORTMERNA_INDEX ([ [:], file(sortmerna_index, checkIfExists: true) ]).untar.map { it[1] } - ch_versions = ch_versions.mix(UNTAR_SORTMERNA_INDEX.out.versions) + ch_sortmerna_index = UNTAR_SORTMERNA_INDEX ([ [:], file(sortmerna_index, checkIfExists: true) ]).untar.map { tuple -> tuple[1] } } else { - ch_sortmerna_index = Channel.value([ [:], file(sortmerna_index, checkIfExists: true) ]) + ch_sortmerna_index = channel.value([ [:], file(sortmerna_index, checkIfExists: true) ]) } } else { // Build new SortMeRNA index from the rRNA references SORTMERNA_INDEX( - Channel.of([ [], [] ]), - ch_rrna_fastas.collect().map { [ 'rrna_refs', it ] }, - Channel.of([ [], [] ]) + channel.of([ [], [] ]), + ch_rrna_fastas.collect().map { refs -> [ 'rrna_refs', refs ] }, + channel.of([ [], [] ]) ) ch_sortmerna_index = SORTMERNA_INDEX.out.index.first() - ch_versions = ch_versions.mix(SORTMERNA_INDEX.out.versions) } } //---------------------------------------------------- // 11) STAR index (e.g. for 'star_salmon') -> needs FASTA if built //---------------------------------------------------- - ch_star_index = Channel.empty() + ch_star_index = channel.empty() if (prepare_tool_indices.intersect(['star_salmon', 'star_rsem'])) { if (star_index) { if (star_index.endsWith('.tar.gz')) { - ch_star_index = UNTAR_STAR_INDEX ([ [:], file(star_index, checkIfExists: true) ]).untar.map { it[1] } - ch_versions = ch_versions.mix(UNTAR_STAR_INDEX.out.versions) + ch_star_index = UNTAR_STAR_INDEX ([ [:], file(star_index, checkIfExists: true) ]).untar.map { tuple -> tuple[1] } } else { - ch_star_index = Channel.value(file(star_index, checkIfExists: true)) + ch_star_index = channel.value(file(star_index, checkIfExists: true)) } } else if (fasta_provided) { @@ -305,14 +306,20 @@ workflow PREPARE_GENOME { is_aws_igenome = true } if (is_aws_igenome) { - ch_star_index = STAR_GENOMEGENERATE_IGENOMES(ch_fasta, ch_gtf).index - ch_versions = ch_versions.mix(STAR_GENOMEGENERATE_IGENOMES.out.versions) + ch_star_index = STAR_GENOMEGENERATE_IGENOMES( + ch_fasta.map { item -> [ [:], item ] }, + ch_gtf.map { item -> [ [:], item ] } + ).index.map { tuple -> tuple[1] } + } else if (use_parabricks_star) { + ch_star_index = PARABRICKS_STARGENOMEGENERATE( + ch_fasta.map { item -> [ [:], item ] }, + ch_gtf.map { item -> [ [:], item ] } + ).index.map { tuple -> tuple[1] } } else { ch_star_index = STAR_GENOMEGENERATE( - ch_fasta.map { [ [:], it ] }, - ch_gtf.map { [ [:], it ] } - ).index.map { it[1] } - ch_versions = ch_versions.mix(STAR_GENOMEGENERATE.out.versions) + ch_fasta.map { item -> [ [:], item ] }, + ch_gtf.map { item -> [ [:], item ] } + ).index.map { tuple -> tuple[1] } } } } @@ -320,24 +327,21 @@ workflow PREPARE_GENOME { //------------------------------------------------ // 12) RSEM index -> needs FASTA & GTF if built //------------------------------------------------ - ch_rsem_index = Channel.empty() + ch_rsem_index = channel.empty() if ('star_rsem' in prepare_tool_indices) { if (rsem_index) { if (rsem_index.endsWith('.tar.gz')) { - ch_rsem_index = UNTAR_RSEM_INDEX ([ [:], file(rsem_index, checkIfExists: true) ]).untar.map { it[1] } - ch_versions = ch_versions.mix(UNTAR_RSEM_INDEX.out.versions) + ch_rsem_index = UNTAR_RSEM_INDEX ([ [:], file(rsem_index, checkIfExists: true) ]).untar.map { tuple -> tuple[1] } } else { - ch_rsem_index = Channel.value(file(rsem_index, checkIfExists: true)) + ch_rsem_index = channel.value(file(rsem_index, checkIfExists: true)) } } else if (fasta_provided) { if(use_sentieon_star){ ch_rsem_index = SENTIEON_RSEM_PREPAREREFERENCE_GENOME(ch_fasta, ch_gtf).index - ch_versions = ch_versions.mix(SENTIEON_RSEM_PREPAREREFERENCE_GENOME.out.versions) }else{ ch_rsem_index = RSEM_PREPAREREFERENCE_GENOME(ch_fasta, ch_gtf).index - ch_versions = ch_versions.mix(RSEM_PREPAREREFERENCE_GENOME.out.versions) } } @@ -346,81 +350,92 @@ workflow PREPARE_GENOME { //--------------------------------------------------------- // 13) HISAT2 index -> needs FASTA & GTF if built //--------------------------------------------------------- - ch_splicesites = Channel.empty() - ch_hisat2_index = Channel.empty() + ch_splicesites = channel.empty() + ch_hisat2_index = channel.empty() if ('hisat2' in prepare_tool_indices) { // splicesites if (splicesites) { - ch_splicesites = Channel.value(file(splicesites, checkIfExists: true)) + ch_splicesites = channel.value(file(splicesites, checkIfExists: true)) } else if (fasta_provided) { - ch_splicesites = HISAT2_EXTRACTSPLICESITES(ch_gtf.map { [ [:], it ] }).txt.map { it[1] } - ch_versions = ch_versions.mix(HISAT2_EXTRACTSPLICESITES.out.versions) + ch_splicesites = HISAT2_EXTRACTSPLICESITES(ch_gtf.map { item -> [ [:], item ] }).txt.map { tuple -> tuple[1] } } // the index if (hisat2_index) { if (hisat2_index.endsWith('.tar.gz')) { - ch_hisat2_index = UNTAR_HISAT2_INDEX ([ [:], file(hisat2_index, checkIfExists: true) ]).untar.map { it[1] } - ch_versions = ch_versions.mix(UNTAR_HISAT2_INDEX.out.versions) + ch_hisat2_index = UNTAR_HISAT2_INDEX ([ [:], file(hisat2_index, checkIfExists: true) ]).untar.map { tuple -> tuple[1] } } else { - ch_hisat2_index = Channel.value(file(hisat2_index, checkIfExists: true)) + ch_hisat2_index = channel.value(file(hisat2_index, checkIfExists: true)) } } else if (fasta_provided) { ch_hisat2_index = HISAT2_BUILD( - ch_fasta.map { [ [:], it ] }, - ch_gtf.map { [ [:], it ] }, - ch_splicesites.map { [ [:], it ] } - ).index.map { it[1] } - ch_versions = ch_versions.mix(HISAT2_BUILD.out.versions) + ch_fasta.map { item -> [ [:], item ] }, + ch_gtf.map { item -> [ [:], item ] }, + ch_splicesites.map { item -> [ [:], item ] } + ).index.map { tuple -> tuple[1] } + } + } + + //--------------------------------------------------------- + // 14) Bowtie2 index -> built from transcript FASTA for Salmon alignment mode + //--------------------------------------------------------- + ch_bowtie2_index = channel.empty() + if ('bowtie2_salmon' in prepare_tool_indices) { + if (bowtie2_index) { + if (bowtie2_index.endsWith('.tar.gz')) { + ch_bowtie2_index = UNTAR_BOWTIE2_INDEX ([ [:], file(bowtie2_index, checkIfExists: true) ]).untar.map { meta, index -> index } + } else { + ch_bowtie2_index = channel.value(file(bowtie2_index, checkIfExists: true)) + } + } + else if (ch_transcript_fasta) { + // Build Bowtie2 index from transcript FASTA for alignment-based Salmon quantification + BOWTIE2_BUILD( + ch_transcript_fasta.map { fasta_file -> [ [id: 'transcripts'], fasta_file ] } + ) + ch_bowtie2_index = BOWTIE2_BUILD.out.index.map { meta, index -> index } } } //------------------------------------------------------ - // 14) Salmon index -> can skip genome if transcript_fasta is enough + // 15) Salmon index -> can skip genome if transcript_fasta is enough //------------------------------------------------------ - ch_salmon_index = Channel.empty() + ch_salmon_index = channel.empty() if (salmon_index) { if (salmon_index.endsWith('.tar.gz')) { - ch_salmon_index = UNTAR_SALMON_INDEX ( [ [:], salmon_index ] ).untar.map { it[1] } - ch_versions = ch_versions.mix(UNTAR_SALMON_INDEX.out.versions) + ch_salmon_index = UNTAR_SALMON_INDEX ( [ [:], salmon_index ] ).untar.map { tuple -> tuple[1] } } else { - ch_salmon_index = Channel.value(file(salmon_index)) + ch_salmon_index = channel.value(file(salmon_index)) } } else if ('salmon' in prepare_tool_indices) { if (ch_transcript_fasta && fasta_provided) { - // build from transcript FASTA + genome FASTA ch_salmon_index = SALMON_INDEX(ch_fasta, ch_transcript_fasta).index - ch_versions = ch_versions.mix(SALMON_INDEX.out.versions) } else if (ch_transcript_fasta) { - // some Salmon module can run with just a transcript FASTA ch_salmon_index = SALMON_INDEX([], ch_transcript_fasta).index - ch_versions = ch_versions.mix(SALMON_INDEX.out.versions) } } //-------------------------------------------------- - // 15) Kallisto index -> only needs transcript FASTA + // 16) Kallisto index -> only needs transcript FASTA //-------------------------------------------------- - ch_kallisto_index = Channel.empty() + ch_kallisto_index = channel.empty() if (kallisto_index) { if (kallisto_index.endsWith('.tar.gz')) { ch_kallisto_index = UNTAR_KALLISTO_INDEX ( [ [:], kallisto_index ] ).untar - ch_versions = ch_versions.mix(UNTAR_KALLISTO_INDEX.out.versions) } else { - ch_kallisto_index = Channel.value([[:], file(kallisto_index)]) + ch_kallisto_index = channel.value([[:], file(kallisto_index)]) } } else { if ('kallisto' in prepare_tool_indices) { - ch_kallisto_index = KALLISTO_INDEX ( ch_transcript_fasta.map { [ [:], it] } ).index - ch_versions = ch_versions.mix(KALLISTO_INDEX.out.versions) + ch_kallisto_index = KALLISTO_INDEX ( ch_transcript_fasta.map { item -> [ [:], item ] } ).index } } //------------------ - // 16) Emit channels + // 17) Emit channels //------------------ emit: fasta = ch_fasta // channel: path(genome.fasta) @@ -436,7 +451,8 @@ workflow PREPARE_GENOME { star_index = ch_star_index // channel: path(star/index/) rsem_index = ch_rsem_index // channel: path(rsem/index/) hisat2_index = ch_hisat2_index // channel: path(hisat2/index/) + bowtie2_index = ch_bowtie2_index // channel: path(bowtie2/index/) salmon_index = ch_salmon_index // channel: path(salmon/index/) kallisto_index = ch_kallisto_index // channel: [ meta, path(kallisto/index/) ] - versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] + versions = ch_versions // channel: [ versions.yml ] } diff --git a/subworkflows/local/prepare_genome/nextflow.config b/subworkflows/local/prepare_genome/nextflow.config index ee8545b94..4d03e2ae4 100644 --- a/subworkflows/local/prepare_genome/nextflow.config +++ b/subworkflows/local/prepare_genome/nextflow.config @@ -11,7 +11,7 @@ process { ext.args2 = '--no-same-owner' } - withName: 'UNTAR_.*|STAR_GENOMEGENERATE|STAR_GENOMEGENERATE_IGENOMES|HISAT2_BUILD' { + withName: 'UNTAR_.*|STAR_GENOMEGENERATE|STAR_GENOMEGENERATE_IGENOMES|PARABRICKS_STARGENOMEGENERATE|HISAT2_BUILD' { publishDir = [ path: { params.save_reference ? "${params.outdir}/genome/index" : params.outdir }, mode: params.publish_dir_mode, @@ -19,6 +19,26 @@ process { ] } + withName: 'STAR_GENOMEGENERATE|STAR_GENOMEGENERATE_IGENOMES|PARABRICKS_STARGENOMEGENERATE' { + ext.args = { + def args = [] + // For prokaryotic data, use CDS features instead of exons + if (params.prokaryotic) { + args += ['--sjdbGTFfeatureExon CDS'] + } + args.join(' ') + } + } + + withName: '.*PARABRICKS_STARGENOMEGENERATE' { + conda = 'bioconda::htslib=1.21 bioconda::samtools=1.21 bioconda::star=2.7.2a conda-forge::gawk=5.1.0' + container = { + (workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container) + ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/90/90e5dfb6f785d74101a62b11668bb53a7020647ddda2df959c7c18023ee5c591/data' + : 'community.wave.seqera.io/library/htslib_samtools_star_gawk:4de2f983041d42e6' + } + } + withName: 'GFFREAD' { ext.args = '--keep-exon-attrs -F -T' ext.prefix = { gff.simpleName } @@ -29,6 +49,26 @@ process { ] } + withName: 'GFFREAD_TRANSCRIPTS' { + // Extract transcript sequences from GTF/GFF + genome FASTA + // Used for prokaryotic data where RSEM fails due to lack of exon features + ext.args = '-w' + ext.prefix = 'transcripts' + publishDir = [ + path: { params.save_reference ? "${params.outdir}/genome" : params.outdir }, + mode: params.publish_dir_mode, + saveAs: { filename -> (filename != 'versions.yml' && params.save_reference) ? filename : null } + ] + } + + withName: '.*:PREPARE_GENOME:BOWTIE2_BUILD' { + publishDir = [ + path: { params.save_reference ? "${params.outdir}/genome/index" : params.outdir }, + mode: params.publish_dir_mode, + saveAs: { filename -> (filename != 'versions.yml' && params.save_reference) ? filename : null } + ] + } + withName: 'HISAT2_EXTRACTSPLICESITES' { publishDir = [ path: { params.save_reference ? "${params.outdir}/genome/index" : params.outdir }, @@ -91,37 +131,30 @@ process { ] } - withName: 'CUSTOM_GETCHROMSIZES' { + withName: 'SAMTOOLS_FAIDX' { publishDir = [ path: { params.save_reference ? "${params.outdir}/genome" : params.outdir }, mode: params.publish_dir_mode, saveAs: { filename -> (filename != 'versions.yml' && params.save_reference) ? filename : null } ] } -} -if (!params.skip_bbsplit && params.bbsplit_fasta_list) { - process { - withName: '.*:PREPARE_GENOME:BBMAP_BBSPLIT' { - ext.args = 'build=1' - publishDir = [ - path: { params.save_reference ? "${params.outdir}/genome/index" : params.outdir }, - mode: params.publish_dir_mode, - saveAs: { filename -> (filename != 'versions.yml' && params.save_reference) ? filename : null } - ] - } + withName: '.*:PREPARE_GENOME:BBMAP_BBSPLIT' { + ext.args = 'build=1' + ext.prefix = 'genome_transcriptome' + publishDir = [ + path: { params.save_reference ? "${params.outdir}/genome/index" : params.outdir }, + mode: params.publish_dir_mode, + saveAs: { filename -> (filename != 'versions.yml' && params.save_reference) ? filename : null } + ] } -} -if (params.remove_ribo_rna && params.ribo_database_manifest) { - process { - withName: 'SORTMERNA_INDEX' { - ext.args = '--index 1' - publishDir = [ - path: { params.save_reference ? "${params.outdir}/genome/sortmerna" : params.outdir }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : params.save_reference ? filename : null } - ] - } + withName: 'SORTMERNA_INDEX' { + ext.args = '--index 1' + publishDir = [ + path: { params.save_reference ? "${params.outdir}/genome/sortmerna" : params.outdir }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : params.save_reference ? filename : null } + ] } } diff --git a/subworkflows/local/prepare_genome/tests/main.nf.test b/subworkflows/local/prepare_genome/tests/main.nf.test index 7fa2d790f..9f1f0924a 100644 --- a/subworkflows/local/prepare_genome/tests/main.nf.test +++ b/subworkflows/local/prepare_genome/tests/main.nf.test @@ -12,14 +12,15 @@ nextflow_workflow { """ gencode = false featurecounts_group_type = 'gene_biotype' - aligner = 'star_salmon,star_rsem,hisat2' - pseudo_aligner = 'salmon,kallisto' + aligner = 'star_salmon' + pseudo_aligner = 'salmon' skip_gtf_filter = false skip_bbsplit = false - skip_sortmerna = true + ribo_removal_tool = null skip_alignment = false skip_pseudo_alignment = false use_sentieon_star = false + use_parabricks_star = false input[0] = file(params.pipelines_testdata_base_path + 'reference/genome.fasta', checkIfExists: true) input[1] = file(params.pipelines_testdata_base_path + 'reference/genes_with_empty_tid.gtf', checkIfExists: true) @@ -37,16 +38,19 @@ nextflow_workflow { input[13] = file(params.pipelines_testdata_base_path + 'reference/hisat2.tar.gz', checkIfExists: true) input[14] = null input[15] = null - input[16] = gencode - input[17] = featurecounts_group_type - input[18] = aligner - input[19] = pseudo_aligner - input[20] = skip_gtf_filter - input[21] = skip_bbsplit - input[22] = skip_sortmerna - input[23] = skip_alignment - input[24] = skip_pseudo_alignment - input[25] = use_sentieon_star + input[16] = null + input[17] = gencode + input[18] = false + input[19] = featurecounts_group_type + input[20] = aligner + input[21] = pseudo_aligner + input[22] = skip_gtf_filter + input[23] = skip_bbsplit + input[24] = ribo_removal_tool + input[25] = skip_alignment + input[26] = skip_pseudo_alignment + input[27] = use_sentieon_star + input[28] = use_parabricks_star """ } } @@ -56,7 +60,7 @@ nextflow_workflow { { assert workflow.success}, { assert snapshot( workflow.out.transcript_fasta, - workflow.out.salmon_index, + workflow.out.salmon_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, workflow.out.fasta, workflow.out.gtf, workflow.out.fai, @@ -64,10 +68,11 @@ nextflow_workflow { workflow.out.chrom_sizes, workflow.out.splicesites, workflow.out.sortmerna_index, - workflow.out.star_index, - workflow.out.rsem_index, - workflow.out.hisat2_index, - workflow.out.kallisto_index, + workflow.out.star_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.rsem_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.hisat2_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.bowtie2_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.kallisto_index.collect { meta, path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, workflow.out.versions ).match() } ) @@ -81,14 +86,15 @@ nextflow_workflow { """ gencode = false featurecounts_group_type = 'gene_biotype' - aligner = 'star_salmon,star_rsem,hisat2' - pseudo_aligner = 'salmon,kallisto' + aligner = 'star_salmon' + pseudo_aligner = 'salmon' skip_gtf_filter = false skip_bbsplit = false - skip_sortmerna = true + ribo_removal_tool = null skip_alignment = false skip_pseudo_alignment = false use_sentieon_star = false + use_parabricks_star = false input[0] = file(params.pipelines_testdata_base_path + 'reference/genome.fasta', checkIfExists: true) input[1] = file(params.pipelines_testdata_base_path + 'reference/genes_with_empty_tid.gtf', checkIfExists: true) @@ -106,16 +112,19 @@ nextflow_workflow { input[13] = file(params.pipelines_testdata_base_path + 'reference/hisat2.tar.gz', checkIfExists: true) input[14] = null input[15] = null - input[16] = gencode - input[17] = featurecounts_group_type - input[18] = aligner - input[19] = pseudo_aligner - input[20] = skip_gtf_filter - input[21] = skip_bbsplit - input[22] = skip_sortmerna - input[23] = skip_alignment - input[24] = skip_pseudo_alignment - input[25] = use_sentieon_star + input[16] = null + input[17] = gencode + input[18] = false + input[19] = featurecounts_group_type + input[20] = aligner + input[21] = pseudo_aligner + input[22] = skip_gtf_filter + input[23] = skip_bbsplit + input[24] = ribo_removal_tool + input[25] = skip_alignment + input[26] = skip_pseudo_alignment + input[27] = use_sentieon_star + input[28] = use_parabricks_star """ } } @@ -125,7 +134,7 @@ nextflow_workflow { { assert workflow.success}, { assert snapshot( workflow.out.transcript_fasta, - workflow.out.salmon_index, + workflow.out.salmon_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, workflow.out.fasta, workflow.out.gtf, workflow.out.fai, @@ -133,10 +142,11 @@ nextflow_workflow { workflow.out.chrom_sizes, workflow.out.splicesites, workflow.out.sortmerna_index, - workflow.out.star_index, - workflow.out.rsem_index, - workflow.out.hisat2_index, - workflow.out.kallisto_index, + workflow.out.star_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.rsem_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.hisat2_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.bowtie2_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.kallisto_index.collect { meta, path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, workflow.out.versions ).match() } ) @@ -150,14 +160,15 @@ nextflow_workflow { """ gencode = false featurecounts_group_type = 'gene_biotype' - aligner = 'star_salmon,star_rsem,hisat2' - pseudo_aligner = 'salmon,kallisto' + aligner = 'star_salmon' + pseudo_aligner = 'salmon' skip_gtf_filter = true skip_bbsplit = false - skip_sortmerna = true + ribo_removal_tool = null skip_alignment = false skip_pseudo_alignment = false use_sentieon_star = false + use_parabricks_star = false input[0] = file(params.pipelines_testdata_base_path + 'reference/genome.fasta', checkIfExists: true) input[1] = file(params.pipelines_testdata_base_path + 'reference/genes_with_empty_tid.gtf', checkIfExists: true) @@ -175,16 +186,19 @@ nextflow_workflow { input[13] = file(params.pipelines_testdata_base_path + 'reference/hisat2.tar.gz', checkIfExists: true) input[14] = null input[15] = null - input[16] = gencode - input[17] = featurecounts_group_type - input[18] = aligner - input[19] = pseudo_aligner - input[20] = skip_gtf_filter - input[21] = skip_bbsplit - input[22] = skip_sortmerna - input[23] = skip_alignment - input[24] = skip_pseudo_alignment - input[25] = use_sentieon_star + input[16] = null + input[17] = gencode + input[18] = false + input[19] = featurecounts_group_type + input[20] = aligner + input[21] = pseudo_aligner + input[22] = skip_gtf_filter + input[23] = skip_bbsplit + input[24] = ribo_removal_tool + input[25] = skip_alignment + input[26] = skip_pseudo_alignment + input[27] = use_sentieon_star + input[28] = use_parabricks_star """ } } @@ -194,7 +208,7 @@ nextflow_workflow { { assert workflow.success}, { assert snapshot( workflow.out.transcript_fasta, - workflow.out.salmon_index, + workflow.out.salmon_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, workflow.out.fasta, workflow.out.gtf, workflow.out.fai, @@ -202,10 +216,11 @@ nextflow_workflow { workflow.out.chrom_sizes, workflow.out.splicesites, workflow.out.sortmerna_index, - workflow.out.star_index, - workflow.out.rsem_index, - workflow.out.hisat2_index, - workflow.out.kallisto_index, + workflow.out.star_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.rsem_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.hisat2_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.bowtie2_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.kallisto_index.collect { meta, path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, workflow.out.versions ).match() } ) @@ -219,14 +234,15 @@ nextflow_workflow { """ gencode = false featurecounts_group_type = 'gene_biotype' - aligner = 'star_salmon,star_rsem,hisat2' - pseudo_aligner = 'salmon,kallisto' + aligner = 'star_salmon' + pseudo_aligner = 'salmon' skip_gtf_filter = false skip_bbsplit = true - skip_sortmerna = true + ribo_removal_tool = null skip_alignment = false skip_pseudo_alignment = false use_sentieon_star = false + use_parabricks_star = false input[0] = file(params.pipelines_testdata_base_path + 'reference/genome.fasta', checkIfExists: true) input[1] = file(params.pipelines_testdata_base_path + 'reference/genes_with_empty_tid.gtf', checkIfExists: true) @@ -244,16 +260,19 @@ nextflow_workflow { input[13] = file(params.pipelines_testdata_base_path + 'reference/hisat2.tar.gz', checkIfExists: true) input[14] = null input[15] = null - input[16] = gencode - input[17] = featurecounts_group_type - input[18] = aligner - input[19] = pseudo_aligner - input[20] = skip_gtf_filter - input[21] = skip_bbsplit - input[22] = skip_sortmerna - input[23] = skip_alignment - input[24] = skip_pseudo_alignment - input[25] = use_sentieon_star + input[16] = null + input[17] = gencode + input[18] = false + input[19] = featurecounts_group_type + input[20] = aligner + input[21] = pseudo_aligner + input[22] = skip_gtf_filter + input[23] = skip_bbsplit + input[24] = ribo_removal_tool + input[25] = skip_alignment + input[26] = skip_pseudo_alignment + input[27] = use_sentieon_star + input[28] = use_parabricks_star """ } } @@ -263,7 +282,7 @@ nextflow_workflow { { assert workflow.success}, { assert snapshot( workflow.out.transcript_fasta, - workflow.out.salmon_index, + workflow.out.salmon_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, workflow.out.fasta, workflow.out.gtf, workflow.out.fai, @@ -271,10 +290,11 @@ nextflow_workflow { workflow.out.chrom_sizes, workflow.out.splicesites, workflow.out.sortmerna_index, - workflow.out.star_index, - workflow.out.rsem_index, - workflow.out.hisat2_index, - workflow.out.kallisto_index, + workflow.out.star_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.rsem_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.hisat2_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.bowtie2_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.kallisto_index.collect { meta, path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, workflow.out.versions ).match() } ) @@ -288,14 +308,15 @@ nextflow_workflow { """ gencode = false featurecounts_group_type = 'gene_biotype' - aligner = 'star_salmon,star_rsem,hisat2' - pseudo_aligner = 'salmon,kallisto' + aligner = 'star_salmon' + pseudo_aligner = 'salmon' skip_gtf_filter = false skip_bbsplit = false - skip_sortmerna = true + ribo_removal_tool = null skip_alignment = true skip_pseudo_alignment = false use_sentieon_star = false + use_parabricks_star = false input[0] = file(params.pipelines_testdata_base_path + 'reference/genome.fasta', checkIfExists: true) input[1] = file(params.pipelines_testdata_base_path + 'reference/genes_with_empty_tid.gtf', checkIfExists: true) @@ -313,16 +334,19 @@ nextflow_workflow { input[13] = file(params.pipelines_testdata_base_path + 'reference/hisat2.tar.gz', checkIfExists: true) input[14] = null input[15] = null - input[16] = gencode - input[17] = featurecounts_group_type - input[18] = aligner - input[19] = pseudo_aligner - input[20] = skip_gtf_filter - input[21] = skip_bbsplit - input[22] = skip_sortmerna - input[23] = skip_alignment - input[24] = skip_pseudo_alignment - input[25] = use_sentieon_star + input[16] = null + input[17] = gencode + input[18] = false + input[19] = featurecounts_group_type + input[20] = aligner + input[21] = pseudo_aligner + input[22] = skip_gtf_filter + input[23] = skip_bbsplit + input[24] = ribo_removal_tool + input[25] = skip_alignment + input[26] = skip_pseudo_alignment + input[27] = use_sentieon_star + input[28] = use_parabricks_star """ } } @@ -332,7 +356,7 @@ nextflow_workflow { { assert workflow.success}, { assert snapshot( workflow.out.transcript_fasta, - workflow.out.salmon_index, + workflow.out.salmon_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, workflow.out.fasta, workflow.out.gtf, workflow.out.fai, @@ -340,10 +364,11 @@ nextflow_workflow { workflow.out.chrom_sizes, workflow.out.splicesites, workflow.out.sortmerna_index, - workflow.out.star_index, - workflow.out.rsem_index, - workflow.out.hisat2_index, - workflow.out.kallisto_index, + workflow.out.star_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.rsem_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.hisat2_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.bowtie2_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.kallisto_index.collect { meta, path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, workflow.out.versions ).match() } ) @@ -357,14 +382,15 @@ nextflow_workflow { """ gencode = false featurecounts_group_type = 'gene_biotype' - aligner = 'star_salmon,star_rsem,hisat2' - pseudo_aligner = 'salmon,kallisto' + aligner = 'star_salmon' + pseudo_aligner = 'salmon' skip_gtf_filter = false skip_bbsplit = false - skip_sortmerna = true + ribo_removal_tool = null skip_alignment = false skip_pseudo_alignment = true use_sentieon_star = false + use_parabricks_star = false input[0] = file(params.pipelines_testdata_base_path + 'reference/genome.fasta', checkIfExists: true) input[1] = file(params.pipelines_testdata_base_path + 'reference/genes_with_empty_tid.gtf', checkIfExists: true) @@ -382,16 +408,19 @@ nextflow_workflow { input[13] = file(params.pipelines_testdata_base_path + 'reference/hisat2.tar.gz', checkIfExists: true) input[14] = null input[15] = null - input[16] = gencode - input[17] = featurecounts_group_type - input[18] = aligner - input[19] = pseudo_aligner - input[20] = skip_gtf_filter - input[21] = skip_bbsplit - input[22] = skip_sortmerna - input[23] = skip_alignment - input[24] = skip_pseudo_alignment - input[25] = use_sentieon_star + input[16] = null + input[17] = gencode + input[18] = false + input[19] = featurecounts_group_type + input[20] = aligner + input[21] = pseudo_aligner + input[22] = skip_gtf_filter + input[23] = skip_bbsplit + input[24] = ribo_removal_tool + input[25] = skip_alignment + input[26] = skip_pseudo_alignment + input[27] = use_sentieon_star + input[28] = use_parabricks_star """ } } @@ -401,7 +430,7 @@ nextflow_workflow { { assert workflow.success}, { assert snapshot( workflow.out.transcript_fasta, - workflow.out.salmon_index, + workflow.out.salmon_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, workflow.out.fasta, workflow.out.gtf, workflow.out.fai, @@ -409,10 +438,11 @@ nextflow_workflow { workflow.out.chrom_sizes, workflow.out.splicesites, workflow.out.sortmerna_index, - workflow.out.star_index, - workflow.out.rsem_index, - workflow.out.hisat2_index, - workflow.out.kallisto_index, + workflow.out.star_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.rsem_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.hisat2_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.bowtie2_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.kallisto_index.collect { meta, path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, workflow.out.versions ).match() } ) @@ -426,14 +456,15 @@ nextflow_workflow { """ gencode = true featurecounts_group_type = 'gene_biotype' - aligner = 'star_salmon,star_rsem,hisat2' - pseudo_aligner = 'salmon,kallisto' + aligner = 'star_salmon' + pseudo_aligner = 'salmon' skip_gtf_filter = false skip_bbsplit = false - skip_sortmerna = true + ribo_removal_tool = null skip_alignment = false skip_pseudo_alignment = false use_sentieon_star = false + use_parabricks_star = false input[0] = file(params.pipelines_testdata_base_path + 'reference/genome.fasta', checkIfExists: true) input[1] = false @@ -451,16 +482,19 @@ nextflow_workflow { input[13] = file(params.pipelines_testdata_base_path + 'reference/hisat2.tar.gz', checkIfExists: true) input[14] = null input[15] = null - input[16] = gencode - input[17] = featurecounts_group_type - input[18] = aligner - input[19] = pseudo_aligner - input[20] = skip_gtf_filter - input[21] = skip_bbsplit - input[22] = skip_sortmerna - input[23] = skip_alignment - input[24] = skip_pseudo_alignment - input[25] = use_sentieon_star + input[16] = null + input[17] = gencode + input[18] = false + input[19] = featurecounts_group_type + input[20] = aligner + input[21] = pseudo_aligner + input[22] = skip_gtf_filter + input[23] = skip_bbsplit + input[24] = ribo_removal_tool + input[25] = skip_alignment + input[26] = skip_pseudo_alignment + input[27] = use_sentieon_star + input[28] = use_parabricks_star """ } } @@ -470,7 +504,7 @@ nextflow_workflow { { assert workflow.success}, { assert snapshot( workflow.out.transcript_fasta, - workflow.out.salmon_index, + workflow.out.salmon_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, workflow.out.fasta, workflow.out.gtf, workflow.out.fai, @@ -478,10 +512,11 @@ nextflow_workflow { workflow.out.chrom_sizes, workflow.out.splicesites, workflow.out.sortmerna_index, - workflow.out.star_index, - workflow.out.rsem_index, - workflow.out.hisat2_index, - workflow.out.kallisto_index, + workflow.out.star_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.rsem_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.hisat2_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.bowtie2_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.kallisto_index.collect { meta, path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, workflow.out.versions ).match() } ) @@ -495,14 +530,15 @@ nextflow_workflow { """ gencode = false featurecounts_group_type = 'gene_biotype' - aligner = 'star_salmon,star_rsem,hisat2' - pseudo_aligner = 'salmon,kallisto' + aligner = 'star_salmon' + pseudo_aligner = 'salmon' skip_gtf_filter = false skip_bbsplit = false - skip_sortmerna = true + ribo_removal_tool = null skip_alignment = false skip_pseudo_alignment = false use_sentieon_star = false + use_parabricks_star = false input[0] = file(params.pipelines_testdata_base_path + 'reference/genome.fasta', checkIfExists: true) input[1] = file(params.pipelines_testdata_base_path + 'reference/genes_with_empty_tid.gtf', checkIfExists: true) @@ -520,16 +556,19 @@ nextflow_workflow { input[13] = file(params.pipelines_testdata_base_path + 'reference/hisat2.tar.gz', checkIfExists: true) input[14] = null input[15] = null - input[16] = gencode - input[17] = featurecounts_group_type - input[18] = aligner - input[19] = pseudo_aligner - input[20] = skip_gtf_filter - input[21] = skip_bbsplit - input[22] = skip_sortmerna - input[23] = skip_alignment - input[24] = skip_pseudo_alignment - input[25] = use_sentieon_star + input[16] = null + input[17] = gencode + input[18] = false + input[19] = featurecounts_group_type + input[20] = aligner + input[21] = pseudo_aligner + input[22] = skip_gtf_filter + input[23] = skip_bbsplit + input[24] = ribo_removal_tool + input[25] = skip_alignment + input[26] = skip_pseudo_alignment + input[27] = use_sentieon_star + input[28] = use_parabricks_star """ } } @@ -539,7 +578,7 @@ nextflow_workflow { { assert workflow.success}, { assert snapshot( workflow.out.transcript_fasta, - workflow.out.salmon_index, + workflow.out.salmon_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, workflow.out.fasta, workflow.out.gtf, workflow.out.fai, @@ -547,10 +586,11 @@ nextflow_workflow { workflow.out.chrom_sizes, workflow.out.splicesites, workflow.out.sortmerna_index, - workflow.out.star_index, - workflow.out.rsem_index, - workflow.out.hisat2_index, - workflow.out.kallisto_index, + workflow.out.star_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.rsem_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.hisat2_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.bowtie2_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.kallisto_index.collect { meta, path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, workflow.out.versions ).match() } ) @@ -564,14 +604,15 @@ nextflow_workflow { """ gencode = false featurecounts_group_type = 'gene_biotype' - aligner = 'star_salmon,star_rsem,hisat2' - pseudo_aligner = 'salmon,kallisto' + aligner = 'star_salmon' + pseudo_aligner = 'salmon' skip_gtf_filter = false skip_bbsplit = false - skip_sortmerna = true + ribo_removal_tool = null skip_alignment = false skip_pseudo_alignment = false use_sentieon_star = false + use_parabricks_star = false input[0] = file(params.pipelines_testdata_base_path + 'reference/genome.fasta', checkIfExists: true) input[1] = file(params.pipelines_testdata_base_path + 'reference/genes_with_empty_tid.gtf', checkIfExists: true) @@ -589,16 +630,19 @@ nextflow_workflow { input[13] = file(params.pipelines_testdata_base_path + 'reference/hisat2.tar.gz', checkIfExists: true) input[14] = null input[15] = null - input[16] = gencode - input[17] = featurecounts_group_type - input[18] = aligner - input[19] = pseudo_aligner - input[20] = skip_gtf_filter - input[21] = skip_bbsplit - input[22] = skip_sortmerna - input[23] = skip_alignment - input[24] = skip_pseudo_alignment - input[25] = use_sentieon_star + input[16] = null + input[17] = gencode + input[18] = false + input[19] = featurecounts_group_type + input[20] = aligner + input[21] = pseudo_aligner + input[22] = skip_gtf_filter + input[23] = skip_bbsplit + input[24] = ribo_removal_tool + input[25] = skip_alignment + input[26] = skip_pseudo_alignment + input[27] = use_sentieon_star + input[28] = use_parabricks_star """ } } @@ -608,7 +652,7 @@ nextflow_workflow { { assert workflow.success}, { assert snapshot( workflow.out.transcript_fasta, - workflow.out.salmon_index, + workflow.out.salmon_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, workflow.out.fasta, workflow.out.gtf, workflow.out.fai, @@ -616,10 +660,11 @@ nextflow_workflow { workflow.out.chrom_sizes, workflow.out.splicesites, workflow.out.sortmerna_index, - workflow.out.star_index, - workflow.out.rsem_index, - workflow.out.hisat2_index, - workflow.out.kallisto_index, + workflow.out.star_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.rsem_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.hisat2_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.bowtie2_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.kallisto_index.collect { meta, path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, workflow.out.versions ).match() } ) @@ -633,14 +678,15 @@ nextflow_workflow { """ gencode = false featurecounts_group_type = 'gene_biotype' - aligner = 'star_salmon,star_rsem,hisat2' - pseudo_aligner = 'salmon,kallisto' + aligner = 'star_salmon' + pseudo_aligner = 'salmon' skip_gtf_filter = false skip_bbsplit = false - skip_sortmerna = true + ribo_removal_tool = null skip_alignment = false skip_pseudo_alignment = false use_sentieon_star = false + use_parabricks_star = false input[0] = file(params.pipelines_testdata_base_path + 'reference/genome.fasta', checkIfExists: true) input[1] = file(params.pipelines_testdata_base_path + 'reference/genes_with_empty_tid.gtf', checkIfExists: true) @@ -658,16 +704,19 @@ nextflow_workflow { input[13] = file(params.pipelines_testdata_base_path + 'reference/hisat2.tar.gz', checkIfExists: true) input[14] = null input[15] = null - input[16] = gencode - input[17] = featurecounts_group_type - input[18] = aligner - input[19] = pseudo_aligner - input[20] = skip_gtf_filter - input[21] = skip_bbsplit - input[22] = skip_sortmerna - input[23] = skip_alignment - input[24] = skip_pseudo_alignment - input[25] = use_sentieon_star + input[16] = null + input[17] = gencode + input[18] = false + input[19] = featurecounts_group_type + input[20] = aligner + input[21] = pseudo_aligner + input[22] = skip_gtf_filter + input[23] = skip_bbsplit + input[24] = ribo_removal_tool + input[25] = skip_alignment + input[26] = skip_pseudo_alignment + input[27] = use_sentieon_star + input[28] = use_parabricks_star """ } } @@ -677,7 +726,7 @@ nextflow_workflow { { assert workflow.success}, { assert snapshot( workflow.out.transcript_fasta, - workflow.out.salmon_index, + workflow.out.salmon_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, workflow.out.fasta, workflow.out.gtf, workflow.out.fai, @@ -685,10 +734,11 @@ nextflow_workflow { workflow.out.chrom_sizes, workflow.out.splicesites, workflow.out.sortmerna_index, - workflow.out.star_index, - workflow.out.rsem_index, - workflow.out.hisat2_index, - workflow.out.kallisto_index, + workflow.out.star_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.rsem_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.hisat2_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.bowtie2_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.kallisto_index.collect { meta, path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, workflow.out.versions ).match() } ) @@ -702,14 +752,15 @@ nextflow_workflow { """ gencode = false featurecounts_group_type = 'gene_biotype' - aligner = 'star_salmon,star_rsem,hisat2' - pseudo_aligner = 'salmon,kallisto' + aligner = 'star_salmon' + pseudo_aligner = 'salmon' skip_gtf_filter = false skip_bbsplit = false - skip_sortmerna = true + ribo_removal_tool = null skip_alignment = false skip_pseudo_alignment = false use_sentieon_star = false + use_parabricks_star = false input[0] = file(params.pipelines_testdata_base_path + 'reference/genome.fasta', checkIfExists: true) input[1] = file(params.pipelines_testdata_base_path + 'reference/genes_with_empty_tid.gtf', checkIfExists: true) @@ -727,16 +778,19 @@ nextflow_workflow { input[13] = file(params.pipelines_testdata_base_path + 'reference/hisat2.tar.gz', checkIfExists: true) input[14] = null input[15] = null - input[16] = gencode - input[17] = featurecounts_group_type - input[18] = aligner - input[19] = pseudo_aligner - input[20] = skip_gtf_filter - input[21] = skip_bbsplit - input[22] = skip_sortmerna - input[23] = skip_alignment - input[24] = skip_pseudo_alignment - input[25] = use_sentieon_star + input[16] = null + input[17] = gencode + input[18] = false + input[19] = featurecounts_group_type + input[20] = aligner + input[21] = pseudo_aligner + input[22] = skip_gtf_filter + input[23] = skip_bbsplit + input[24] = ribo_removal_tool + input[25] = skip_alignment + input[26] = skip_pseudo_alignment + input[27] = use_sentieon_star + input[28] = use_parabricks_star """ } } @@ -746,7 +800,7 @@ nextflow_workflow { { assert workflow.success}, { assert snapshot( workflow.out.transcript_fasta, - workflow.out.salmon_index, + workflow.out.salmon_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, workflow.out.fasta, workflow.out.gtf, workflow.out.fai, @@ -754,10 +808,11 @@ nextflow_workflow { workflow.out.chrom_sizes, workflow.out.splicesites, workflow.out.sortmerna_index, - workflow.out.star_index, - workflow.out.rsem_index, - workflow.out.hisat2_index, - workflow.out.kallisto_index, + workflow.out.star_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.rsem_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.hisat2_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.bowtie2_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.kallisto_index.collect { meta, path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, workflow.out.versions ).match() } ) @@ -771,14 +826,15 @@ nextflow_workflow { """ gencode = false featurecounts_group_type = 'gene_biotype' - aligner = 'star_salmon,star_rsem,hisat2' - pseudo_aligner = 'salmon,kallisto' + aligner = 'star_rsem' + pseudo_aligner = 'salmon' skip_gtf_filter = false skip_bbsplit = false - skip_sortmerna = true + ribo_removal_tool = null skip_alignment = false skip_pseudo_alignment = false use_sentieon_star = false + use_parabricks_star = false input[0] = file(params.pipelines_testdata_base_path + 'reference/genome.fasta', checkIfExists: true) input[1] = file(params.pipelines_testdata_base_path + 'reference/genes_with_empty_tid.gtf', checkIfExists: true) @@ -796,16 +852,19 @@ nextflow_workflow { input[13] = file(params.pipelines_testdata_base_path + 'reference/hisat2.tar.gz', checkIfExists: true) input[14] = null input[15] = null - input[16] = gencode - input[17] = featurecounts_group_type - input[18] = aligner - input[19] = pseudo_aligner - input[20] = skip_gtf_filter - input[21] = skip_bbsplit - input[22] = skip_sortmerna - input[23] = skip_alignment - input[24] = skip_pseudo_alignment - input[25] = use_sentieon_star + input[16] = null + input[17] = gencode + input[18] = false + input[19] = featurecounts_group_type + input[20] = aligner + input[21] = pseudo_aligner + input[22] = skip_gtf_filter + input[23] = skip_bbsplit + input[24] = ribo_removal_tool + input[25] = skip_alignment + input[26] = skip_pseudo_alignment + input[27] = use_sentieon_star + input[28] = use_parabricks_star """ } } @@ -815,7 +874,7 @@ nextflow_workflow { { assert workflow.success}, { assert snapshot( workflow.out.transcript_fasta, - workflow.out.salmon_index, + workflow.out.salmon_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, workflow.out.fasta, workflow.out.gtf, workflow.out.fai, @@ -823,10 +882,11 @@ nextflow_workflow { workflow.out.chrom_sizes, workflow.out.splicesites, workflow.out.sortmerna_index, - workflow.out.star_index, - workflow.out.rsem_index, - workflow.out.hisat2_index, - workflow.out.kallisto_index, + workflow.out.star_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.rsem_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.hisat2_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.bowtie2_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.kallisto_index.collect { meta, path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, workflow.out.versions ).match() } ) @@ -840,14 +900,15 @@ nextflow_workflow { """ gencode = false featurecounts_group_type = 'gene_biotype' - aligner = 'star_salmon,star_rsem,hisat2' - pseudo_aligner = 'salmon,kallisto' + aligner = 'star_salmon' + pseudo_aligner = 'salmon' skip_gtf_filter = false skip_bbsplit = false - skip_sortmerna = true + ribo_removal_tool = null skip_alignment = false skip_pseudo_alignment = false use_sentieon_star = false + use_parabricks_star = false input[0] = file(params.pipelines_testdata_base_path + 'reference/genome.fasta', checkIfExists: true) input[1] = file(params.pipelines_testdata_base_path + 'reference/genes_with_empty_tid.gtf', checkIfExists: true) @@ -865,16 +926,19 @@ nextflow_workflow { input[13] = file(params.pipelines_testdata_base_path + 'reference/hisat2.tar.gz', checkIfExists: true) input[14] = null input[15] = null - input[16] = gencode - input[17] = featurecounts_group_type - input[18] = aligner - input[19] = pseudo_aligner - input[20] = skip_gtf_filter - input[21] = skip_bbsplit - input[22] = skip_sortmerna - input[23] = skip_alignment - input[24] = skip_pseudo_alignment - input[25] = use_sentieon_star + input[16] = null + input[17] = gencode + input[18] = false + input[19] = featurecounts_group_type + input[20] = aligner + input[21] = pseudo_aligner + input[22] = skip_gtf_filter + input[23] = skip_bbsplit + input[24] = ribo_removal_tool + input[25] = skip_alignment + input[26] = skip_pseudo_alignment + input[27] = use_sentieon_star + input[28] = use_parabricks_star """ } } @@ -884,7 +948,7 @@ nextflow_workflow { { assert workflow.success}, { assert snapshot( workflow.out.transcript_fasta, - workflow.out.salmon_index, + workflow.out.salmon_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, workflow.out.fasta, workflow.out.gtf, workflow.out.fai, @@ -892,10 +956,11 @@ nextflow_workflow { workflow.out.chrom_sizes, workflow.out.splicesites, workflow.out.sortmerna_index, - workflow.out.star_index, - workflow.out.rsem_index, - workflow.out.hisat2_index, - workflow.out.kallisto_index, + workflow.out.star_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.rsem_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.hisat2_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.bowtie2_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.kallisto_index.collect { meta, path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, workflow.out.versions ).match() } ) @@ -909,14 +974,15 @@ nextflow_workflow { """ gencode = false featurecounts_group_type = 'gene_biotype' - aligner = 'star_salmon,star_rsem,hisat2' - pseudo_aligner = 'salmon,kallisto' + aligner = 'hisat2' + pseudo_aligner = 'salmon' skip_gtf_filter = false skip_bbsplit = false - skip_sortmerna = true + ribo_removal_tool = null skip_alignment = false skip_pseudo_alignment = false use_sentieon_star = false + use_parabricks_star = false input[0] = file(params.pipelines_testdata_base_path + 'reference/genome.fasta', checkIfExists: true) input[1] = file(params.pipelines_testdata_base_path + 'reference/genes_with_empty_tid.gtf', checkIfExists: true) @@ -934,16 +1000,19 @@ nextflow_workflow { input[13] = false input[14] = null input[15] = null - input[16] = gencode - input[17] = featurecounts_group_type - input[18] = aligner - input[19] = pseudo_aligner - input[20] = skip_gtf_filter - input[21] = skip_bbsplit - input[22] = skip_sortmerna - input[23] = skip_alignment - input[24] = skip_pseudo_alignment - input[25] = use_sentieon_star + input[16] = null + input[17] = gencode + input[18] = false + input[19] = featurecounts_group_type + input[20] = aligner + input[21] = pseudo_aligner + input[22] = skip_gtf_filter + input[23] = skip_bbsplit + input[24] = ribo_removal_tool + input[25] = skip_alignment + input[26] = skip_pseudo_alignment + input[27] = use_sentieon_star + input[28] = use_parabricks_star """ } } @@ -953,7 +1022,7 @@ nextflow_workflow { { assert workflow.success}, { assert snapshot( workflow.out.transcript_fasta, - workflow.out.salmon_index, + workflow.out.salmon_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, workflow.out.fasta, workflow.out.gtf, workflow.out.fai, @@ -961,31 +1030,33 @@ nextflow_workflow { workflow.out.chrom_sizes, workflow.out.splicesites, workflow.out.sortmerna_index, - workflow.out.star_index, - workflow.out.rsem_index, - workflow.out.hisat2_index, - workflow.out.kallisto_index, + workflow.out.star_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.rsem_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.hisat2_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.bowtie2_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.kallisto_index.collect { meta, path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, workflow.out.versions ).match() } ) } } - test("gencode = true") { + test("kallisto_index = false") { when { workflow { """ - gencode = true + gencode = false featurecounts_group_type = 'gene_biotype' - aligner = 'star_salmon,star_rsem,hisat2' - pseudo_aligner = 'salmon,kallisto' + aligner = 'star_salmon' + pseudo_aligner = 'kallisto' skip_gtf_filter = false skip_bbsplit = false - skip_sortmerna = true + ribo_removal_tool = null skip_alignment = false skip_pseudo_alignment = false use_sentieon_star = false + use_parabricks_star = false input[0] = file(params.pipelines_testdata_base_path + 'reference/genome.fasta', checkIfExists: true) input[1] = file(params.pipelines_testdata_base_path + 'reference/genes_with_empty_tid.gtf', checkIfExists: true) @@ -999,20 +1070,23 @@ nextflow_workflow { input[9] = null input[10] = file(params.pipelines_testdata_base_path + 'reference/rsem.tar.gz', checkIfExists: true) input[11] = file(params.pipelines_testdata_base_path + 'reference/salmon.tar.gz', checkIfExists: true) - input[12] = null + input[12] = false input[13] = file(params.pipelines_testdata_base_path + 'reference/hisat2.tar.gz', checkIfExists: true) input[14] = null input[15] = null - input[16] = gencode - input[17] = featurecounts_group_type - input[18] = aligner - input[19] = pseudo_aligner - input[20] = skip_gtf_filter - input[21] = skip_bbsplit - input[22] = skip_sortmerna - input[23] = skip_alignment - input[24] = skip_pseudo_alignment - input[25] = use_sentieon_star + input[16] = null + input[17] = gencode + input[18] = false + input[19] = featurecounts_group_type + input[20] = aligner + input[21] = pseudo_aligner + input[22] = skip_gtf_filter + input[23] = skip_bbsplit + input[24] = ribo_removal_tool + input[25] = skip_alignment + input[26] = skip_pseudo_alignment + input[27] = use_sentieon_star + input[28] = use_parabricks_star """ } } @@ -1022,7 +1096,7 @@ nextflow_workflow { { assert workflow.success}, { assert snapshot( workflow.out.transcript_fasta, - workflow.out.salmon_index, + workflow.out.salmon_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, workflow.out.fasta, workflow.out.gtf, workflow.out.fai, @@ -1030,31 +1104,33 @@ nextflow_workflow { workflow.out.chrom_sizes, workflow.out.splicesites, workflow.out.sortmerna_index, - workflow.out.star_index, - workflow.out.rsem_index, - workflow.out.hisat2_index, - workflow.out.kallisto_index, + workflow.out.star_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.rsem_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.hisat2_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.bowtie2_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.kallisto_index.collect { meta, path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, workflow.out.versions ).match() } ) } } - test("featurecounts_group_type = 'gene_type'") { + test("gencode = true") { when { workflow { """ - gencode = false - featurecounts_group_type = 'gene_type' - aligner = 'star_salmon,star_rsem,hisat2' - pseudo_aligner = 'salmon,kallisto' + gencode = true + featurecounts_group_type = 'gene_biotype' + aligner = 'star_salmon' + pseudo_aligner = 'salmon' skip_gtf_filter = false skip_bbsplit = false - skip_sortmerna = true + ribo_removal_tool = null skip_alignment = false skip_pseudo_alignment = false use_sentieon_star = false + use_parabricks_star = false input[0] = file(params.pipelines_testdata_base_path + 'reference/genome.fasta', checkIfExists: true) input[1] = file(params.pipelines_testdata_base_path + 'reference/genes_with_empty_tid.gtf', checkIfExists: true) @@ -1072,16 +1148,19 @@ nextflow_workflow { input[13] = file(params.pipelines_testdata_base_path + 'reference/hisat2.tar.gz', checkIfExists: true) input[14] = null input[15] = null - input[16] = gencode - input[17] = featurecounts_group_type - input[18] = aligner - input[19] = pseudo_aligner - input[20] = skip_gtf_filter - input[21] = skip_bbsplit - input[22] = skip_sortmerna - input[23] = skip_alignment - input[24] = skip_pseudo_alignment - input[25] = use_sentieon_star + input[16] = null + input[17] = gencode + input[18] = false + input[19] = featurecounts_group_type + input[20] = aligner + input[21] = pseudo_aligner + input[22] = skip_gtf_filter + input[23] = skip_bbsplit + input[24] = ribo_removal_tool + input[25] = skip_alignment + input[26] = skip_pseudo_alignment + input[27] = use_sentieon_star + input[28] = use_parabricks_star """ } } @@ -1091,7 +1170,7 @@ nextflow_workflow { { assert workflow.success}, { assert snapshot( workflow.out.transcript_fasta, - workflow.out.salmon_index, + workflow.out.salmon_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, workflow.out.fasta, workflow.out.gtf, workflow.out.fai, @@ -1099,31 +1178,33 @@ nextflow_workflow { workflow.out.chrom_sizes, workflow.out.splicesites, workflow.out.sortmerna_index, - workflow.out.star_index, - workflow.out.rsem_index, - workflow.out.hisat2_index, - workflow.out.kallisto_index, + workflow.out.star_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.rsem_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.hisat2_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.bowtie2_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.kallisto_index.collect { meta, path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, workflow.out.versions ).match() } ) } } - test("skip_gtf_filter = true") { + test("featurecounts_group_type = 'gene_type'") { when { workflow { """ gencode = false - featurecounts_group_type = 'gene_biotype' - aligner = 'star_salmon,star_rsem,hisat2' - pseudo_aligner = 'salmon,kallisto' - skip_gtf_filter = true + featurecounts_group_type = 'gene_type' + aligner = 'star_salmon' + pseudo_aligner = 'salmon' + skip_gtf_filter = false skip_bbsplit = false - skip_sortmerna = true + ribo_removal_tool = null skip_alignment = false skip_pseudo_alignment = false use_sentieon_star = false + use_parabricks_star = false input[0] = file(params.pipelines_testdata_base_path + 'reference/genome.fasta', checkIfExists: true) input[1] = file(params.pipelines_testdata_base_path + 'reference/genes_with_empty_tid.gtf', checkIfExists: true) @@ -1141,16 +1222,19 @@ nextflow_workflow { input[13] = file(params.pipelines_testdata_base_path + 'reference/hisat2.tar.gz', checkIfExists: true) input[14] = null input[15] = null - input[16] = gencode - input[17] = featurecounts_group_type - input[18] = aligner - input[19] = pseudo_aligner - input[20] = skip_gtf_filter - input[21] = skip_bbsplit - input[22] = skip_sortmerna - input[23] = skip_alignment - input[24] = skip_pseudo_alignment - input[25] = use_sentieon_star + input[16] = null + input[17] = gencode + input[18] = false + input[19] = featurecounts_group_type + input[20] = aligner + input[21] = pseudo_aligner + input[22] = skip_gtf_filter + input[23] = skip_bbsplit + input[24] = ribo_removal_tool + input[25] = skip_alignment + input[26] = skip_pseudo_alignment + input[27] = use_sentieon_star + input[28] = use_parabricks_star """ } } @@ -1160,7 +1244,7 @@ nextflow_workflow { { assert workflow.success}, { assert snapshot( workflow.out.transcript_fasta, - workflow.out.salmon_index, + workflow.out.salmon_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, workflow.out.fasta, workflow.out.gtf, workflow.out.fai, @@ -1168,31 +1252,33 @@ nextflow_workflow { workflow.out.chrom_sizes, workflow.out.splicesites, workflow.out.sortmerna_index, - workflow.out.star_index, - workflow.out.rsem_index, - workflow.out.hisat2_index, - workflow.out.kallisto_index, + workflow.out.star_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.rsem_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.hisat2_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.bowtie2_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.kallisto_index.collect { meta, path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, workflow.out.versions ).match() } ) } } - test("skip_bbsplit = true") { + test("skip_gtf_filter = true") { when { workflow { """ gencode = false featurecounts_group_type = 'gene_biotype' - aligner = 'star_salmon,star_rsem,hisat2' - pseudo_aligner = 'salmon,kallisto' - skip_gtf_filter = false - skip_bbsplit = true - skip_sortmerna = true + aligner = 'star_salmon' + pseudo_aligner = 'salmon' + skip_gtf_filter = true + skip_bbsplit = false + ribo_removal_tool = null skip_alignment = false skip_pseudo_alignment = false use_sentieon_star = false + use_parabricks_star = false input[0] = file(params.pipelines_testdata_base_path + 'reference/genome.fasta', checkIfExists: true) input[1] = file(params.pipelines_testdata_base_path + 'reference/genes_with_empty_tid.gtf', checkIfExists: true) @@ -1210,16 +1296,19 @@ nextflow_workflow { input[13] = file(params.pipelines_testdata_base_path + 'reference/hisat2.tar.gz', checkIfExists: true) input[14] = null input[15] = null - input[16] = gencode - input[17] = featurecounts_group_type - input[18] = aligner - input[19] = pseudo_aligner - input[20] = skip_gtf_filter - input[21] = skip_bbsplit - input[22] = skip_sortmerna - input[23] = skip_alignment - input[24] = skip_pseudo_alignment - input[25] = use_sentieon_star + input[16] = null + input[17] = gencode + input[18] = false + input[19] = featurecounts_group_type + input[20] = aligner + input[21] = pseudo_aligner + input[22] = skip_gtf_filter + input[23] = skip_bbsplit + input[24] = ribo_removal_tool + input[25] = skip_alignment + input[26] = skip_pseudo_alignment + input[27] = use_sentieon_star + input[28] = use_parabricks_star """ } } @@ -1229,7 +1318,7 @@ nextflow_workflow { { assert workflow.success}, { assert snapshot( workflow.out.transcript_fasta, - workflow.out.salmon_index, + workflow.out.salmon_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, workflow.out.fasta, workflow.out.gtf, workflow.out.fai, @@ -1237,31 +1326,33 @@ nextflow_workflow { workflow.out.chrom_sizes, workflow.out.splicesites, workflow.out.sortmerna_index, - workflow.out.star_index, - workflow.out.rsem_index, - workflow.out.hisat2_index, - workflow.out.kallisto_index, + workflow.out.star_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.rsem_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.hisat2_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.bowtie2_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.kallisto_index.collect { meta, path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, workflow.out.versions ).match() } ) } } - test("skip_alignment = true") { + test("skip_bbsplit = true") { when { workflow { """ gencode = false featurecounts_group_type = 'gene_biotype' - aligner = 'star_salmon,star_rsem,hisat2' - pseudo_aligner = 'salmon,kallisto' + aligner = 'star_salmon' + pseudo_aligner = 'salmon' skip_gtf_filter = false - skip_bbsplit = false - skip_sortmerna = true - skip_alignment = true + skip_bbsplit = true + ribo_removal_tool = null + skip_alignment = false skip_pseudo_alignment = false use_sentieon_star = false + use_parabricks_star = false input[0] = file(params.pipelines_testdata_base_path + 'reference/genome.fasta', checkIfExists: true) input[1] = file(params.pipelines_testdata_base_path + 'reference/genes_with_empty_tid.gtf', checkIfExists: true) @@ -1279,16 +1370,19 @@ nextflow_workflow { input[13] = file(params.pipelines_testdata_base_path + 'reference/hisat2.tar.gz', checkIfExists: true) input[14] = null input[15] = null - input[16] = gencode - input[17] = featurecounts_group_type - input[18] = aligner - input[19] = pseudo_aligner - input[20] = skip_gtf_filter - input[21] = skip_bbsplit - input[22] = skip_sortmerna - input[23] = skip_alignment - input[24] = skip_pseudo_alignment - input[25] = use_sentieon_star + input[16] = null + input[17] = gencode + input[18] = false + input[19] = featurecounts_group_type + input[20] = aligner + input[21] = pseudo_aligner + input[22] = skip_gtf_filter + input[23] = skip_bbsplit + input[24] = ribo_removal_tool + input[25] = skip_alignment + input[26] = skip_pseudo_alignment + input[27] = use_sentieon_star + input[28] = use_parabricks_star """ } } @@ -1298,7 +1392,7 @@ nextflow_workflow { { assert workflow.success}, { assert snapshot( workflow.out.transcript_fasta, - workflow.out.salmon_index, + workflow.out.salmon_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, workflow.out.fasta, workflow.out.gtf, workflow.out.fai, @@ -1306,31 +1400,33 @@ nextflow_workflow { workflow.out.chrom_sizes, workflow.out.splicesites, workflow.out.sortmerna_index, - workflow.out.star_index, - workflow.out.rsem_index, - workflow.out.hisat2_index, - workflow.out.kallisto_index, + workflow.out.star_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.rsem_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.hisat2_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.bowtie2_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.kallisto_index.collect { meta, path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, workflow.out.versions ).match() } ) } } - test("skip_pseudoalignment = true") { + test("skip_alignment = true") { when { workflow { """ gencode = false featurecounts_group_type = 'gene_biotype' - aligner = 'star_salmon,star_rsem,hisat2' - pseudo_aligner = 'salmon,kallisto' + aligner = 'star_salmon' + pseudo_aligner = 'salmon' skip_gtf_filter = false skip_bbsplit = false - skip_sortmerna = true - skip_alignment = false - skip_pseudo_alignment = true + ribo_removal_tool = null + skip_alignment = true + skip_pseudo_alignment = false use_sentieon_star = false + use_parabricks_star = false input[0] = file(params.pipelines_testdata_base_path + 'reference/genome.fasta', checkIfExists: true) input[1] = file(params.pipelines_testdata_base_path + 'reference/genes_with_empty_tid.gtf', checkIfExists: true) @@ -1348,16 +1444,19 @@ nextflow_workflow { input[13] = file(params.pipelines_testdata_base_path + 'reference/hisat2.tar.gz', checkIfExists: true) input[14] = null input[15] = null - input[16] = gencode - input[17] = featurecounts_group_type - input[18] = aligner - input[19] = pseudo_aligner - input[20] = skip_gtf_filter - input[21] = skip_bbsplit - input[22] = skip_sortmerna - input[23] = skip_alignment - input[24] = skip_pseudo_alignment - input[25] = use_sentieon_star + input[16] = null + input[17] = gencode + input[18] = false + input[19] = featurecounts_group_type + input[20] = aligner + input[21] = pseudo_aligner + input[22] = skip_gtf_filter + input[23] = skip_bbsplit + input[24] = ribo_removal_tool + input[25] = skip_alignment + input[26] = skip_pseudo_alignment + input[27] = use_sentieon_star + input[28] = use_parabricks_star """ } } @@ -1367,7 +1466,7 @@ nextflow_workflow { { assert workflow.success}, { assert snapshot( workflow.out.transcript_fasta, - workflow.out.salmon_index, + workflow.out.salmon_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, workflow.out.fasta, workflow.out.gtf, workflow.out.fai, @@ -1375,31 +1474,33 @@ nextflow_workflow { workflow.out.chrom_sizes, workflow.out.splicesites, workflow.out.sortmerna_index, - workflow.out.star_index, - workflow.out.rsem_index, - workflow.out.hisat2_index, - workflow.out.kallisto_index, + workflow.out.star_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.rsem_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.hisat2_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.bowtie2_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.kallisto_index.collect { meta, path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, workflow.out.versions ).match() } ) } } - test("use_sentieon_star = true") { + test("skip_pseudoalignment = true") { when { workflow { """ gencode = false featurecounts_group_type = 'gene_biotype' - aligner = 'star_salmon,star_rsem,hisat2' - pseudo_aligner = 'salmon,kallisto' + aligner = 'star_salmon' + pseudo_aligner = 'salmon' skip_gtf_filter = false skip_bbsplit = false - skip_sortmerna = true + ribo_removal_tool = null skip_alignment = false - skip_pseudo_alignment = false - use_sentieon_star = true + skip_pseudo_alignment = true + use_sentieon_star = false + use_parabricks_star = false input[0] = file(params.pipelines_testdata_base_path + 'reference/genome.fasta', checkIfExists: true) input[1] = file(params.pipelines_testdata_base_path + 'reference/genes_with_empty_tid.gtf', checkIfExists: true) @@ -1417,16 +1518,19 @@ nextflow_workflow { input[13] = file(params.pipelines_testdata_base_path + 'reference/hisat2.tar.gz', checkIfExists: true) input[14] = null input[15] = null - input[16] = gencode - input[17] = featurecounts_group_type - input[18] = aligner - input[19] = pseudo_aligner - input[20] = skip_gtf_filter - input[21] = skip_bbsplit - input[22] = skip_sortmerna - input[23] = skip_alignment - input[24] = skip_pseudo_alignment - input[25] = use_sentieon_star + input[16] = null + input[17] = gencode + input[18] = false + input[19] = featurecounts_group_type + input[20] = aligner + input[21] = pseudo_aligner + input[22] = skip_gtf_filter + input[23] = skip_bbsplit + input[24] = ribo_removal_tool + input[25] = skip_alignment + input[26] = skip_pseudo_alignment + input[27] = use_sentieon_star + input[28] = use_parabricks_star """ } } @@ -1436,7 +1540,7 @@ nextflow_workflow { { assert workflow.success}, { assert snapshot( workflow.out.transcript_fasta, - workflow.out.salmon_index, + workflow.out.salmon_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, workflow.out.fasta, workflow.out.gtf, workflow.out.fai, @@ -1444,10 +1548,11 @@ nextflow_workflow { workflow.out.chrom_sizes, workflow.out.splicesites, workflow.out.sortmerna_index, - workflow.out.star_index, - workflow.out.rsem_index, - workflow.out.hisat2_index, - workflow.out.kallisto_index, + workflow.out.star_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.rsem_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.hisat2_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.bowtie2_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.kallisto_index.collect { meta, path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, workflow.out.versions ).match() } ) @@ -1463,14 +1568,15 @@ nextflow_workflow { """ gencode = false featurecounts_group_type = 'gene_biotype' - aligner = 'star_salmon,star_rsem,hisat2' - pseudo_aligner = 'salmon,kallisto' + aligner = 'star_salmon' + pseudo_aligner = 'salmon' skip_gtf_filter = false skip_bbsplit = false - skip_sortmerna = true + ribo_removal_tool = null skip_alignment = false skip_pseudo_alignment = false use_sentieon_star = false + use_parabricks_star = false input[0] = file(params.pipelines_testdata_base_path + 'reference/genome.fasta', checkIfExists: true) input[1] = file(params.pipelines_testdata_base_path + 'reference/genes_with_empty_tid.gtf', checkIfExists: true) @@ -1488,16 +1594,19 @@ nextflow_workflow { input[13] = file(params.pipelines_testdata_base_path + 'reference/hisat2.tar.gz', checkIfExists: true) input[14] = null input[15] = null - input[16] = gencode - input[17] = featurecounts_group_type - input[18] = aligner - input[19] = pseudo_aligner - input[20] = skip_gtf_filter - input[21] = skip_bbsplit - input[22] = skip_sortmerna - input[23] = skip_alignment - input[24] = skip_pseudo_alignment - input[25] = use_sentieon_star + input[16] = null + input[17] = gencode + input[18] = false + input[19] = featurecounts_group_type + input[20] = aligner + input[21] = pseudo_aligner + input[22] = skip_gtf_filter + input[23] = skip_bbsplit + input[24] = ribo_removal_tool + input[25] = skip_alignment + input[26] = skip_pseudo_alignment + input[27] = use_sentieon_star + input[28] = use_parabricks_star """ } } @@ -1511,13 +1620,14 @@ nextflow_workflow { workflow.out.fasta, workflow.out.gene_bed, workflow.out.gtf, - workflow.out.hisat2_index, - workflow.out.kallisto_index, - workflow.out.rsem_index, - workflow.out.salmon_index, + workflow.out.hisat2_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.bowtie2_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.kallisto_index.collect { meta, path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.rsem_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.salmon_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, workflow.out.sortmerna_index, workflow.out.splicesites, - workflow.out.star_index, + workflow.out.star_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, workflow.out.transcript_fasta, workflow.out.versions ).match() } @@ -1534,14 +1644,15 @@ nextflow_workflow { """ gencode = false featurecounts_group_type = 'gene_biotype' - aligner = 'star_salmon,star_rsem,hisat2' - pseudo_aligner = 'salmon,kallisto' + aligner = 'star_salmon' + pseudo_aligner = 'salmon' skip_gtf_filter = false skip_bbsplit = false - skip_sortmerna = true + ribo_removal_tool = null skip_alignment = false skip_pseudo_alignment = false use_sentieon_star = false + use_parabricks_star = false input[0] = file(params.pipelines_testdata_base_path + 'reference/genome.fasta', checkIfExists: true) input[1] = file(params.pipelines_testdata_base_path + 'reference/genes_with_empty_tid.gtf', checkIfExists: true) @@ -1559,16 +1670,19 @@ nextflow_workflow { input[13] = file(params.pipelines_testdata_base_path + 'reference/hisat2.tar.gz', checkIfExists: true) input[14] = null input[15] = null - input[16] = gencode - input[17] = featurecounts_group_type - input[18] = aligner - input[19] = pseudo_aligner - input[20] = skip_gtf_filter - input[21] = skip_bbsplit - input[22] = skip_sortmerna - input[23] = skip_alignment - input[24] = skip_pseudo_alignment - input[25] = use_sentieon_star + input[16] = null + input[17] = gencode + input[18] = false + input[19] = featurecounts_group_type + input[20] = aligner + input[21] = pseudo_aligner + input[22] = skip_gtf_filter + input[23] = skip_bbsplit + input[24] = ribo_removal_tool + input[25] = skip_alignment + input[26] = skip_pseudo_alignment + input[27] = use_sentieon_star + input[28] = use_parabricks_star """ } } @@ -1582,13 +1696,14 @@ nextflow_workflow { workflow.out.fasta, workflow.out.gene_bed, workflow.out.gtf, - workflow.out.hisat2_index, - workflow.out.kallisto_index, - workflow.out.rsem_index, - workflow.out.salmon_index, + workflow.out.hisat2_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.bowtie2_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.kallisto_index.collect { meta, path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.rsem_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.salmon_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, workflow.out.sortmerna_index, workflow.out.splicesites, - workflow.out.star_index, + workflow.out.star_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, workflow.out.transcript_fasta, workflow.out.versions ).match() } @@ -1605,14 +1720,15 @@ nextflow_workflow { """ gencode = false featurecounts_group_type = 'gene_biotype' - aligner = 'star_salmon,star_rsem,hisat2' - pseudo_aligner = 'salmon,kallisto' + aligner = 'star_salmon' + pseudo_aligner = 'salmon' skip_gtf_filter = true skip_bbsplit = false - skip_sortmerna = true + ribo_removal_tool = null skip_alignment = false skip_pseudo_alignment = false use_sentieon_star = false + use_parabricks_star = false input[0] = file(params.pipelines_testdata_base_path + 'reference/genome.fasta', checkIfExists: true) input[1] = file(params.pipelines_testdata_base_path + 'reference/genes_with_empty_tid.gtf', checkIfExists: true) @@ -1630,16 +1746,19 @@ nextflow_workflow { input[13] = file(params.pipelines_testdata_base_path + 'reference/hisat2.tar.gz', checkIfExists: true) input[14] = null input[15] = null - input[16] = gencode - input[17] = featurecounts_group_type - input[18] = aligner - input[19] = pseudo_aligner - input[20] = skip_gtf_filter - input[21] = skip_bbsplit - input[22] = skip_sortmerna - input[23] = skip_alignment - input[24] = skip_pseudo_alignment - input[25] = use_sentieon_star + input[16] = null + input[17] = gencode + input[18] = false + input[19] = featurecounts_group_type + input[20] = aligner + input[21] = pseudo_aligner + input[22] = skip_gtf_filter + input[23] = skip_bbsplit + input[24] = ribo_removal_tool + input[25] = skip_alignment + input[26] = skip_pseudo_alignment + input[27] = use_sentieon_star + input[28] = use_parabricks_star """ } } @@ -1653,13 +1772,14 @@ nextflow_workflow { workflow.out.fasta, workflow.out.gene_bed, workflow.out.gtf, - workflow.out.hisat2_index, - workflow.out.kallisto_index, - workflow.out.rsem_index, - workflow.out.salmon_index, + workflow.out.hisat2_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.bowtie2_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.kallisto_index.collect { meta, path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.rsem_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.salmon_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, workflow.out.sortmerna_index, workflow.out.splicesites, - workflow.out.star_index, + workflow.out.star_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, workflow.out.transcript_fasta, workflow.out.versions ).match() } @@ -1676,14 +1796,15 @@ nextflow_workflow { """ gencode = false featurecounts_group_type = 'gene_biotype' - aligner = 'star_salmon,star_rsem,hisat2' - pseudo_aligner = 'salmon,kallisto' + aligner = 'star_salmon' + pseudo_aligner = 'salmon' skip_gtf_filter = false skip_bbsplit = true - skip_sortmerna = true + ribo_removal_tool = null skip_alignment = false skip_pseudo_alignment = false use_sentieon_star = false + use_parabricks_star = false input[0] = file(params.pipelines_testdata_base_path + 'reference/genome.fasta', checkIfExists: true) input[1] = file(params.pipelines_testdata_base_path + 'reference/genes_with_empty_tid.gtf', checkIfExists: true) @@ -1701,16 +1822,19 @@ nextflow_workflow { input[13] = file(params.pipelines_testdata_base_path + 'reference/hisat2.tar.gz', checkIfExists: true) input[14] = null input[15] = null - input[16] = gencode - input[17] = featurecounts_group_type - input[18] = aligner - input[19] = pseudo_aligner - input[20] = skip_gtf_filter - input[21] = skip_bbsplit - input[22] = skip_sortmerna - input[23] = skip_alignment - input[24] = skip_pseudo_alignment - input[25] = use_sentieon_star + input[16] = null + input[17] = gencode + input[18] = false + input[19] = featurecounts_group_type + input[20] = aligner + input[21] = pseudo_aligner + input[22] = skip_gtf_filter + input[23] = skip_bbsplit + input[24] = ribo_removal_tool + input[25] = skip_alignment + input[26] = skip_pseudo_alignment + input[27] = use_sentieon_star + input[28] = use_parabricks_star """ } } @@ -1732,14 +1856,15 @@ nextflow_workflow { """ gencode = false featurecounts_group_type = 'gene_biotype' - aligner = 'star_salmon,star_rsem,hisat2' - pseudo_aligner = 'salmon,kallisto' + aligner = 'star_salmon' + pseudo_aligner = 'salmon' skip_gtf_filter = false skip_bbsplit = false - skip_sortmerna = true + ribo_removal_tool = null skip_alignment = true skip_pseudo_alignment = false use_sentieon_star = false + use_parabricks_star = false input[0] = file(params.pipelines_testdata_base_path + 'reference/genome.fasta', checkIfExists: true) input[1] = file(params.pipelines_testdata_base_path + 'reference/genes_with_empty_tid.gtf', checkIfExists: true) @@ -1757,16 +1882,19 @@ nextflow_workflow { input[13] = file(params.pipelines_testdata_base_path + 'reference/hisat2.tar.gz', checkIfExists: true) input[14] = null input[15] = null - input[16] = gencode - input[17] = featurecounts_group_type - input[18] = aligner - input[19] = pseudo_aligner - input[20] = skip_gtf_filter - input[21] = skip_bbsplit - input[22] = skip_sortmerna - input[23] = skip_alignment - input[24] = skip_pseudo_alignment - input[25] = use_sentieon_star + input[16] = null + input[17] = gencode + input[18] = false + input[19] = featurecounts_group_type + input[20] = aligner + input[21] = pseudo_aligner + input[22] = skip_gtf_filter + input[23] = skip_bbsplit + input[24] = ribo_removal_tool + input[25] = skip_alignment + input[26] = skip_pseudo_alignment + input[27] = use_sentieon_star + input[28] = use_parabricks_star """ } } @@ -1780,13 +1908,14 @@ nextflow_workflow { workflow.out.fasta, workflow.out.gene_bed, workflow.out.gtf, - workflow.out.hisat2_index, - workflow.out.kallisto_index, - workflow.out.rsem_index, - workflow.out.salmon_index, + workflow.out.hisat2_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.bowtie2_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.kallisto_index.collect { meta, path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.rsem_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.salmon_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, workflow.out.sortmerna_index, workflow.out.splicesites, - workflow.out.star_index, + workflow.out.star_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, workflow.out.transcript_fasta, workflow.out.versions ).match() } @@ -1803,14 +1932,15 @@ nextflow_workflow { """ gencode = false featurecounts_group_type = 'gene_biotype' - aligner = 'star_salmon,star_rsem,hisat2' - pseudo_aligner = 'salmon,kallisto' + aligner = 'star_salmon' + pseudo_aligner = 'salmon' skip_gtf_filter = false skip_bbsplit = false - skip_sortmerna = true + ribo_removal_tool = null skip_alignment = false skip_pseudo_alignment = true use_sentieon_star = false + use_parabricks_star = false input[0] = file(params.pipelines_testdata_base_path + 'reference/genome.fasta', checkIfExists: true) input[1] = file(params.pipelines_testdata_base_path + 'reference/genes_with_empty_tid.gtf', checkIfExists: true) @@ -1828,16 +1958,19 @@ nextflow_workflow { input[13] = file(params.pipelines_testdata_base_path + 'reference/hisat2.tar.gz', checkIfExists: true) input[14] = null input[15] = null - input[16] = gencode - input[17] = featurecounts_group_type - input[18] = aligner - input[19] = pseudo_aligner - input[20] = skip_gtf_filter - input[21] = skip_bbsplit - input[22] = skip_sortmerna - input[23] = skip_alignment - input[24] = skip_pseudo_alignment - input[25] = use_sentieon_star + input[16] = null + input[17] = gencode + input[18] = false + input[19] = featurecounts_group_type + input[20] = aligner + input[21] = pseudo_aligner + input[22] = skip_gtf_filter + input[23] = skip_bbsplit + input[24] = ribo_removal_tool + input[25] = skip_alignment + input[26] = skip_pseudo_alignment + input[27] = use_sentieon_star + input[28] = use_parabricks_star """ } } @@ -1851,13 +1984,14 @@ nextflow_workflow { workflow.out.fasta, workflow.out.gene_bed, workflow.out.gtf, - workflow.out.hisat2_index, - workflow.out.kallisto_index, - workflow.out.rsem_index, - workflow.out.salmon_index, + workflow.out.hisat2_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.bowtie2_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.kallisto_index.collect { meta, path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.rsem_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.salmon_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, workflow.out.sortmerna_index, workflow.out.splicesites, - workflow.out.star_index, + workflow.out.star_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, workflow.out.transcript_fasta, workflow.out.versions ).match() } @@ -1874,14 +2008,15 @@ nextflow_workflow { """ gencode = true featurecounts_group_type = 'gene_biotype' - aligner = 'star_salmon,star_rsem,hisat2' - pseudo_aligner = 'salmon,kallisto' + aligner = 'star_salmon' + pseudo_aligner = 'salmon' skip_gtf_filter = false skip_bbsplit = false - skip_sortmerna = true + ribo_removal_tool = null skip_alignment = false skip_pseudo_alignment = false use_sentieon_star = false + use_parabricks_star = false input[0] = file(params.pipelines_testdata_base_path + 'reference/genome.fasta', checkIfExists: true) input[1] = false @@ -1899,16 +2034,19 @@ nextflow_workflow { input[13] = file(params.pipelines_testdata_base_path + 'reference/hisat2.tar.gz', checkIfExists: true) input[14] = null input[15] = null - input[16] = gencode - input[17] = featurecounts_group_type - input[18] = aligner - input[19] = pseudo_aligner - input[20] = skip_gtf_filter - input[21] = skip_bbsplit - input[22] = skip_sortmerna - input[23] = skip_alignment - input[24] = skip_pseudo_alignment - input[25] = use_sentieon_star + input[16] = null + input[17] = gencode + input[18] = false + input[19] = featurecounts_group_type + input[20] = aligner + input[21] = pseudo_aligner + input[22] = skip_gtf_filter + input[23] = skip_bbsplit + input[24] = ribo_removal_tool + input[25] = skip_alignment + input[26] = skip_pseudo_alignment + input[27] = use_sentieon_star + input[28] = use_parabricks_star """ } } @@ -1922,13 +2060,14 @@ nextflow_workflow { workflow.out.fasta, workflow.out.gene_bed, workflow.out.gtf, - workflow.out.hisat2_index, - workflow.out.kallisto_index, - workflow.out.rsem_index, - workflow.out.salmon_index, + workflow.out.hisat2_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.bowtie2_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.kallisto_index.collect { meta, path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.rsem_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.salmon_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, workflow.out.sortmerna_index, workflow.out.splicesites, - workflow.out.star_index, + workflow.out.star_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, workflow.out.transcript_fasta, workflow.out.versions ).match() } @@ -1945,14 +2084,15 @@ nextflow_workflow { """ gencode = false featurecounts_group_type = 'gene_biotype' - aligner = 'star_salmon,star_rsem,hisat2' - pseudo_aligner = 'salmon,kallisto' + aligner = 'star_salmon' + pseudo_aligner = 'salmon' skip_gtf_filter = false skip_bbsplit = false - skip_sortmerna = true + ribo_removal_tool = null skip_alignment = false skip_pseudo_alignment = false use_sentieon_star = false + use_parabricks_star = false input[0] = file(params.pipelines_testdata_base_path + 'reference/genome.fasta', checkIfExists: true) input[1] = file(params.pipelines_testdata_base_path + 'reference/genes_with_empty_tid.gtf', checkIfExists: true) @@ -1970,16 +2110,19 @@ nextflow_workflow { input[13] = file(params.pipelines_testdata_base_path + 'reference/hisat2.tar.gz', checkIfExists: true) input[14] = null input[15] = null - input[16] = gencode - input[17] = featurecounts_group_type - input[18] = aligner - input[19] = pseudo_aligner - input[20] = skip_gtf_filter - input[21] = skip_bbsplit - input[22] = skip_sortmerna - input[23] = skip_alignment - input[24] = skip_pseudo_alignment - input[25] = use_sentieon_star + input[16] = null + input[17] = gencode + input[18] = false + input[19] = featurecounts_group_type + input[20] = aligner + input[21] = pseudo_aligner + input[22] = skip_gtf_filter + input[23] = skip_bbsplit + input[24] = ribo_removal_tool + input[25] = skip_alignment + input[26] = skip_pseudo_alignment + input[27] = use_sentieon_star + input[28] = use_parabricks_star """ } } @@ -1993,13 +2136,14 @@ nextflow_workflow { workflow.out.fasta, workflow.out.gene_bed, workflow.out.gtf, - workflow.out.hisat2_index, - workflow.out.kallisto_index, - workflow.out.rsem_index, - workflow.out.salmon_index, + workflow.out.hisat2_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.bowtie2_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.kallisto_index.collect { meta, path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.rsem_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.salmon_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, workflow.out.sortmerna_index, workflow.out.splicesites, - workflow.out.star_index, + workflow.out.star_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, workflow.out.transcript_fasta, workflow.out.versions ).match() } @@ -2016,14 +2160,15 @@ nextflow_workflow { """ gencode = false featurecounts_group_type = 'gene_biotype' - aligner = 'star_salmon,star_rsem,hisat2' - pseudo_aligner = 'salmon,kallisto' + aligner = 'star_salmon' + pseudo_aligner = 'salmon' skip_gtf_filter = false skip_bbsplit = false - skip_sortmerna = true + ribo_removal_tool = null skip_alignment = false skip_pseudo_alignment = false use_sentieon_star = false + use_parabricks_star = false input[0] = file(params.pipelines_testdata_base_path + 'reference/genome.fasta', checkIfExists: true) input[1] = file(params.pipelines_testdata_base_path + 'reference/genes_with_empty_tid.gtf', checkIfExists: true) @@ -2041,16 +2186,19 @@ nextflow_workflow { input[13] = file(params.pipelines_testdata_base_path + 'reference/hisat2.tar.gz', checkIfExists: true) input[14] = null input[15] = null - input[16] = gencode - input[17] = featurecounts_group_type - input[18] = aligner - input[19] = pseudo_aligner - input[20] = skip_gtf_filter - input[21] = skip_bbsplit - input[22] = skip_sortmerna - input[23] = skip_alignment - input[24] = skip_pseudo_alignment - input[25] = use_sentieon_star + input[16] = null + input[17] = gencode + input[18] = false + input[19] = featurecounts_group_type + input[20] = aligner + input[21] = pseudo_aligner + input[22] = skip_gtf_filter + input[23] = skip_bbsplit + input[24] = ribo_removal_tool + input[25] = skip_alignment + input[26] = skip_pseudo_alignment + input[27] = use_sentieon_star + input[28] = use_parabricks_star """ } } @@ -2064,13 +2212,14 @@ nextflow_workflow { workflow.out.fasta, workflow.out.gene_bed, workflow.out.gtf, - workflow.out.hisat2_index, - workflow.out.kallisto_index, - workflow.out.rsem_index, - workflow.out.salmon_index, + workflow.out.hisat2_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.bowtie2_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.kallisto_index.collect { meta, path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.rsem_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.salmon_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, workflow.out.sortmerna_index, workflow.out.splicesites, - workflow.out.star_index, + workflow.out.star_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, workflow.out.transcript_fasta, workflow.out.versions ).match() } @@ -2087,14 +2236,15 @@ nextflow_workflow { """ gencode = false featurecounts_group_type = 'gene_biotype' - aligner = 'star_salmon,star_rsem,hisat2' - pseudo_aligner = 'salmon,kallisto' + aligner = 'star_salmon' + pseudo_aligner = 'salmon' skip_gtf_filter = false skip_bbsplit = false - skip_sortmerna = true + ribo_removal_tool = null skip_alignment = false skip_pseudo_alignment = false use_sentieon_star = false + use_parabricks_star = false input[0] = file(params.pipelines_testdata_base_path + 'reference/genome.fasta', checkIfExists: true) input[1] = file(params.pipelines_testdata_base_path + 'reference/genes_with_empty_tid.gtf', checkIfExists: true) @@ -2112,16 +2262,19 @@ nextflow_workflow { input[13] = file(params.pipelines_testdata_base_path + 'reference/hisat2.tar.gz', checkIfExists: true) input[14] = null input[15] = null - input[16] = gencode - input[17] = featurecounts_group_type - input[18] = aligner - input[19] = pseudo_aligner - input[20] = skip_gtf_filter - input[21] = skip_bbsplit - input[22] = skip_sortmerna - input[23] = skip_alignment - input[24] = skip_pseudo_alignment - input[25] = use_sentieon_star + input[16] = null + input[17] = gencode + input[18] = false + input[19] = featurecounts_group_type + input[20] = aligner + input[21] = pseudo_aligner + input[22] = skip_gtf_filter + input[23] = skip_bbsplit + input[24] = ribo_removal_tool + input[25] = skip_alignment + input[26] = skip_pseudo_alignment + input[27] = use_sentieon_star + input[28] = use_parabricks_star """ } } @@ -2135,13 +2288,14 @@ nextflow_workflow { workflow.out.fasta, workflow.out.gene_bed, workflow.out.gtf, - workflow.out.hisat2_index, - workflow.out.kallisto_index, - workflow.out.rsem_index, - workflow.out.salmon_index, + workflow.out.hisat2_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.bowtie2_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.kallisto_index.collect { meta, path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.rsem_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.salmon_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, workflow.out.sortmerna_index, workflow.out.splicesites, - workflow.out.star_index, + workflow.out.star_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, workflow.out.transcript_fasta, workflow.out.versions ).match() } @@ -2158,14 +2312,15 @@ nextflow_workflow { """ gencode = false featurecounts_group_type = 'gene_biotype' - aligner = 'star_salmon,star_rsem,hisat2' - pseudo_aligner = 'salmon,kallisto' + aligner = 'star_salmon' + pseudo_aligner = 'salmon' skip_gtf_filter = false skip_bbsplit = false - skip_sortmerna = true + ribo_removal_tool = null skip_alignment = false skip_pseudo_alignment = false use_sentieon_star = false + use_parabricks_star = false input[0] = file(params.pipelines_testdata_base_path + 'reference/genome.fasta', checkIfExists: true) input[1] = file(params.pipelines_testdata_base_path + 'reference/genes_with_empty_tid.gtf', checkIfExists: true) @@ -2183,16 +2338,19 @@ nextflow_workflow { input[13] = file(params.pipelines_testdata_base_path + 'reference/hisat2.tar.gz', checkIfExists: true) input[14] = null input[15] = null - input[16] = gencode - input[17] = featurecounts_group_type - input[18] = aligner - input[19] = pseudo_aligner - input[20] = skip_gtf_filter - input[21] = skip_bbsplit - input[22] = skip_sortmerna - input[23] = skip_alignment - input[24] = skip_pseudo_alignment - input[25] = use_sentieon_star + input[16] = null + input[17] = gencode + input[18] = false + input[19] = featurecounts_group_type + input[20] = aligner + input[21] = pseudo_aligner + input[22] = skip_gtf_filter + input[23] = skip_bbsplit + input[24] = ribo_removal_tool + input[25] = skip_alignment + input[26] = skip_pseudo_alignment + input[27] = use_sentieon_star + input[28] = use_parabricks_star """ } } @@ -2206,13 +2364,14 @@ nextflow_workflow { workflow.out.fasta, workflow.out.gene_bed, workflow.out.gtf, - workflow.out.hisat2_index, - workflow.out.kallisto_index, - workflow.out.rsem_index, - workflow.out.salmon_index, + workflow.out.hisat2_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.bowtie2_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.kallisto_index.collect { meta, path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.rsem_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.salmon_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, workflow.out.sortmerna_index, workflow.out.splicesites, - workflow.out.star_index, + workflow.out.star_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, workflow.out.transcript_fasta, workflow.out.versions ).match() } @@ -2229,14 +2388,15 @@ nextflow_workflow { """ gencode = false featurecounts_group_type = 'gene_biotype' - aligner = 'star_salmon,star_rsem,hisat2' - pseudo_aligner = 'salmon,kallisto' + aligner = 'star_rsem' + pseudo_aligner = 'salmon' skip_gtf_filter = false skip_bbsplit = false - skip_sortmerna = true + ribo_removal_tool = null skip_alignment = false skip_pseudo_alignment = false use_sentieon_star = false + use_parabricks_star = false input[0] = file(params.pipelines_testdata_base_path + 'reference/genome.fasta', checkIfExists: true) input[1] = file(params.pipelines_testdata_base_path + 'reference/genes_with_empty_tid.gtf', checkIfExists: true) @@ -2254,16 +2414,19 @@ nextflow_workflow { input[13] = file(params.pipelines_testdata_base_path + 'reference/hisat2.tar.gz', checkIfExists: true) input[14] = null input[15] = null - input[16] = gencode - input[17] = featurecounts_group_type - input[18] = aligner - input[19] = pseudo_aligner - input[20] = skip_gtf_filter - input[21] = skip_bbsplit - input[22] = skip_sortmerna - input[23] = skip_alignment - input[24] = skip_pseudo_alignment - input[25] = use_sentieon_star + input[16] = null + input[17] = gencode + input[18] = false + input[19] = featurecounts_group_type + input[20] = aligner + input[21] = pseudo_aligner + input[22] = skip_gtf_filter + input[23] = skip_bbsplit + input[24] = ribo_removal_tool + input[25] = skip_alignment + input[26] = skip_pseudo_alignment + input[27] = use_sentieon_star + input[28] = use_parabricks_star """ } } @@ -2277,13 +2440,14 @@ nextflow_workflow { workflow.out.fasta, workflow.out.gene_bed, workflow.out.gtf, - workflow.out.hisat2_index, - workflow.out.kallisto_index, - workflow.out.rsem_index, - workflow.out.salmon_index, + workflow.out.hisat2_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.bowtie2_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.kallisto_index.collect { meta, path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.rsem_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.salmon_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, workflow.out.sortmerna_index, workflow.out.splicesites, - workflow.out.star_index, + workflow.out.star_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, workflow.out.transcript_fasta, workflow.out.versions ).match() } @@ -2300,14 +2464,15 @@ nextflow_workflow { """ gencode = false featurecounts_group_type = 'gene_biotype' - aligner = 'star_salmon,star_rsem,hisat2' - pseudo_aligner = 'salmon,kallisto' + aligner = 'star_salmon' + pseudo_aligner = 'salmon' skip_gtf_filter = false skip_bbsplit = false - skip_sortmerna = true + ribo_removal_tool = null skip_alignment = false skip_pseudo_alignment = false use_sentieon_star = false + use_parabricks_star = false input[0] = file(params.pipelines_testdata_base_path + 'reference/genome.fasta', checkIfExists: true) input[1] = file(params.pipelines_testdata_base_path + 'reference/genes_with_empty_tid.gtf', checkIfExists: true) @@ -2325,16 +2490,19 @@ nextflow_workflow { input[13] = file(params.pipelines_testdata_base_path + 'reference/hisat2.tar.gz', checkIfExists: true) input[14] = null input[15] = null - input[16] = gencode - input[17] = featurecounts_group_type - input[18] = aligner - input[19] = pseudo_aligner - input[20] = skip_gtf_filter - input[21] = skip_bbsplit - input[22] = skip_sortmerna - input[23] = skip_alignment - input[24] = skip_pseudo_alignment - input[25] = use_sentieon_star + input[16] = null + input[17] = gencode + input[18] = false + input[19] = featurecounts_group_type + input[20] = aligner + input[21] = pseudo_aligner + input[22] = skip_gtf_filter + input[23] = skip_bbsplit + input[24] = ribo_removal_tool + input[25] = skip_alignment + input[26] = skip_pseudo_alignment + input[27] = use_sentieon_star + input[28] = use_parabricks_star """ } } @@ -2348,13 +2516,14 @@ nextflow_workflow { workflow.out.fasta, workflow.out.gene_bed, workflow.out.gtf, - workflow.out.hisat2_index, - workflow.out.kallisto_index, - workflow.out.rsem_index, - workflow.out.salmon_index, + workflow.out.hisat2_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.bowtie2_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.kallisto_index.collect { meta, path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.rsem_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.salmon_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, workflow.out.sortmerna_index, workflow.out.splicesites, - workflow.out.star_index, + workflow.out.star_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, workflow.out.transcript_fasta, workflow.out.versions ).match() } @@ -2371,14 +2540,15 @@ nextflow_workflow { """ gencode = false featurecounts_group_type = 'gene_biotype' - aligner = 'star_salmon,star_rsem,hisat2' - pseudo_aligner = 'salmon,kallisto' + aligner = 'hisat2' + pseudo_aligner = 'salmon' skip_gtf_filter = false skip_bbsplit = false - skip_sortmerna = true + ribo_removal_tool = null skip_alignment = false skip_pseudo_alignment = false use_sentieon_star = false + use_parabricks_star = false input[0] = file(params.pipelines_testdata_base_path + 'reference/genome.fasta', checkIfExists: true) input[1] = file(params.pipelines_testdata_base_path + 'reference/genes_with_empty_tid.gtf', checkIfExists: true) @@ -2396,16 +2566,19 @@ nextflow_workflow { input[13] = false input[14] = null input[15] = null - input[16] = gencode - input[17] = featurecounts_group_type - input[18] = aligner - input[19] = pseudo_aligner - input[20] = skip_gtf_filter - input[21] = skip_bbsplit - input[22] = skip_sortmerna - input[23] = skip_alignment - input[24] = skip_pseudo_alignment - input[25] = use_sentieon_star + input[16] = null + input[17] = gencode + input[18] = false + input[19] = featurecounts_group_type + input[20] = aligner + input[21] = pseudo_aligner + input[22] = skip_gtf_filter + input[23] = skip_bbsplit + input[24] = ribo_removal_tool + input[25] = skip_alignment + input[26] = skip_pseudo_alignment + input[27] = use_sentieon_star + input[28] = use_parabricks_star """ } } @@ -2419,13 +2592,14 @@ nextflow_workflow { workflow.out.fasta, workflow.out.gene_bed, workflow.out.gtf, - workflow.out.hisat2_index, - workflow.out.kallisto_index, - workflow.out.rsem_index, - workflow.out.salmon_index, + workflow.out.hisat2_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.bowtie2_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.kallisto_index.collect { meta, path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.rsem_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.salmon_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, workflow.out.sortmerna_index, workflow.out.splicesites, - workflow.out.star_index, + workflow.out.star_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, workflow.out.transcript_fasta, workflow.out.versions ).match() } @@ -2433,23 +2607,24 @@ nextflow_workflow { } } - test("gencode = true - stub") { + test("kallisto_index = false - stub") { options "-stub" when { workflow { """ - gencode = true + gencode = false featurecounts_group_type = 'gene_biotype' - aligner = 'star_salmon,star_rsem,hisat2' - pseudo_aligner = 'salmon,kallisto' + aligner = 'star_salmon' + pseudo_aligner = 'kallisto' skip_gtf_filter = false skip_bbsplit = false - skip_sortmerna = true + ribo_removal_tool = null skip_alignment = false skip_pseudo_alignment = false use_sentieon_star = false + use_parabricks_star = false input[0] = file(params.pipelines_testdata_base_path + 'reference/genome.fasta', checkIfExists: true) input[1] = file(params.pipelines_testdata_base_path + 'reference/genes_with_empty_tid.gtf', checkIfExists: true) @@ -2463,20 +2638,23 @@ nextflow_workflow { input[9] = null input[10] = file(params.pipelines_testdata_base_path + 'reference/rsem.tar.gz', checkIfExists: true) input[11] = file(params.pipelines_testdata_base_path + 'reference/salmon.tar.gz', checkIfExists: true) - input[12] = null + input[12] = false input[13] = file(params.pipelines_testdata_base_path + 'reference/hisat2.tar.gz', checkIfExists: true) input[14] = null input[15] = null - input[16] = gencode - input[17] = featurecounts_group_type - input[18] = aligner - input[19] = pseudo_aligner - input[20] = skip_gtf_filter - input[21] = skip_bbsplit - input[22] = skip_sortmerna - input[23] = skip_alignment - input[24] = skip_pseudo_alignment - input[25] = use_sentieon_star + input[16] = null + input[17] = gencode + input[18] = false + input[19] = featurecounts_group_type + input[20] = aligner + input[21] = pseudo_aligner + input[22] = skip_gtf_filter + input[23] = skip_bbsplit + input[24] = ribo_removal_tool + input[25] = skip_alignment + input[26] = skip_pseudo_alignment + input[27] = use_sentieon_star + input[28] = use_parabricks_star """ } } @@ -2490,13 +2668,14 @@ nextflow_workflow { workflow.out.fasta, workflow.out.gene_bed, workflow.out.gtf, - workflow.out.hisat2_index, - workflow.out.kallisto_index, - workflow.out.rsem_index, - workflow.out.salmon_index, + workflow.out.hisat2_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.bowtie2_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.kallisto_index.collect { meta, path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.rsem_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.salmon_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, workflow.out.sortmerna_index, workflow.out.splicesites, - workflow.out.star_index, + workflow.out.star_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, workflow.out.transcript_fasta, workflow.out.versions ).match() } @@ -2504,23 +2683,24 @@ nextflow_workflow { } } - test("featurecounts_group_type = 'gene_type' - stub") { + test("gencode = true - stub") { options "-stub" when { workflow { """ - gencode = false - featurecounts_group_type = 'gene_type' - aligner = 'star_salmon,star_rsem,hisat2' - pseudo_aligner = 'salmon,kallisto' + gencode = true + featurecounts_group_type = 'gene_biotype' + aligner = 'star_salmon' + pseudo_aligner = 'salmon' skip_gtf_filter = false skip_bbsplit = false - skip_sortmerna = true + ribo_removal_tool = null skip_alignment = false skip_pseudo_alignment = false use_sentieon_star = false + use_parabricks_star = false input[0] = file(params.pipelines_testdata_base_path + 'reference/genome.fasta', checkIfExists: true) input[1] = file(params.pipelines_testdata_base_path + 'reference/genes_with_empty_tid.gtf', checkIfExists: true) @@ -2538,16 +2718,19 @@ nextflow_workflow { input[13] = file(params.pipelines_testdata_base_path + 'reference/hisat2.tar.gz', checkIfExists: true) input[14] = null input[15] = null - input[16] = gencode - input[17] = featurecounts_group_type - input[18] = aligner - input[19] = pseudo_aligner - input[20] = skip_gtf_filter - input[21] = skip_bbsplit - input[22] = skip_sortmerna - input[23] = skip_alignment - input[24] = skip_pseudo_alignment - input[25] = use_sentieon_star + input[16] = null + input[17] = gencode + input[18] = false + input[19] = featurecounts_group_type + input[20] = aligner + input[21] = pseudo_aligner + input[22] = skip_gtf_filter + input[23] = skip_bbsplit + input[24] = ribo_removal_tool + input[25] = skip_alignment + input[26] = skip_pseudo_alignment + input[27] = use_sentieon_star + input[28] = use_parabricks_star """ } } @@ -2561,13 +2744,14 @@ nextflow_workflow { workflow.out.fasta, workflow.out.gene_bed, workflow.out.gtf, - workflow.out.hisat2_index, - workflow.out.kallisto_index, - workflow.out.rsem_index, - workflow.out.salmon_index, + workflow.out.hisat2_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.bowtie2_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.kallisto_index.collect { meta, path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.rsem_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.salmon_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, workflow.out.sortmerna_index, workflow.out.splicesites, - workflow.out.star_index, + workflow.out.star_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, workflow.out.transcript_fasta, workflow.out.versions ).match() } @@ -2575,7 +2759,7 @@ nextflow_workflow { } } - test("skip_gtf_filter = true - stub") { + test("featurecounts_group_type = 'gene_type' - stub") { options "-stub" @@ -2583,15 +2767,16 @@ nextflow_workflow { workflow { """ gencode = false - featurecounts_group_type = 'gene_biotype' - aligner = 'star_salmon,star_rsem,hisat2' - pseudo_aligner = 'salmon,kallisto' - skip_gtf_filter = true + featurecounts_group_type = 'gene_type' + aligner = 'star_salmon' + pseudo_aligner = 'salmon' + skip_gtf_filter = false skip_bbsplit = false - skip_sortmerna = true + ribo_removal_tool = null skip_alignment = false skip_pseudo_alignment = false use_sentieon_star = false + use_parabricks_star = false input[0] = file(params.pipelines_testdata_base_path + 'reference/genome.fasta', checkIfExists: true) input[1] = file(params.pipelines_testdata_base_path + 'reference/genes_with_empty_tid.gtf', checkIfExists: true) @@ -2609,16 +2794,19 @@ nextflow_workflow { input[13] = file(params.pipelines_testdata_base_path + 'reference/hisat2.tar.gz', checkIfExists: true) input[14] = null input[15] = null - input[16] = gencode - input[17] = featurecounts_group_type - input[18] = aligner - input[19] = pseudo_aligner - input[20] = skip_gtf_filter - input[21] = skip_bbsplit - input[22] = skip_sortmerna - input[23] = skip_alignment - input[24] = skip_pseudo_alignment - input[25] = use_sentieon_star + input[16] = null + input[17] = gencode + input[18] = false + input[19] = featurecounts_group_type + input[20] = aligner + input[21] = pseudo_aligner + input[22] = skip_gtf_filter + input[23] = skip_bbsplit + input[24] = ribo_removal_tool + input[25] = skip_alignment + input[26] = skip_pseudo_alignment + input[27] = use_sentieon_star + input[28] = use_parabricks_star """ } } @@ -2632,13 +2820,14 @@ nextflow_workflow { workflow.out.fasta, workflow.out.gene_bed, workflow.out.gtf, - workflow.out.hisat2_index, - workflow.out.kallisto_index, - workflow.out.rsem_index, - workflow.out.salmon_index, + workflow.out.hisat2_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.bowtie2_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.kallisto_index.collect { meta, path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.rsem_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.salmon_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, workflow.out.sortmerna_index, workflow.out.splicesites, - workflow.out.star_index, + workflow.out.star_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, workflow.out.transcript_fasta, workflow.out.versions ).match() } @@ -2646,7 +2835,7 @@ nextflow_workflow { } } - test("skip_bbsplit = true - stub") { + test("skip_gtf_filter = true - stub") { options "-stub" @@ -2655,14 +2844,15 @@ nextflow_workflow { """ gencode = false featurecounts_group_type = 'gene_biotype' - aligner = 'star_salmon,star_rsem,hisat2' - pseudo_aligner = 'salmon,kallisto' - skip_gtf_filter = false - skip_bbsplit = true - skip_sortmerna = true + aligner = 'star_salmon' + pseudo_aligner = 'salmon' + skip_gtf_filter = true + skip_bbsplit = false + ribo_removal_tool = null skip_alignment = false skip_pseudo_alignment = false use_sentieon_star = false + use_parabricks_star = false input[0] = file(params.pipelines_testdata_base_path + 'reference/genome.fasta', checkIfExists: true) input[1] = file(params.pipelines_testdata_base_path + 'reference/genes_with_empty_tid.gtf', checkIfExists: true) @@ -2680,16 +2870,19 @@ nextflow_workflow { input[13] = file(params.pipelines_testdata_base_path + 'reference/hisat2.tar.gz', checkIfExists: true) input[14] = null input[15] = null - input[16] = gencode - input[17] = featurecounts_group_type - input[18] = aligner - input[19] = pseudo_aligner - input[20] = skip_gtf_filter - input[21] = skip_bbsplit - input[22] = skip_sortmerna - input[23] = skip_alignment - input[24] = skip_pseudo_alignment - input[25] = use_sentieon_star + input[16] = null + input[17] = gencode + input[18] = false + input[19] = featurecounts_group_type + input[20] = aligner + input[21] = pseudo_aligner + input[22] = skip_gtf_filter + input[23] = skip_bbsplit + input[24] = ribo_removal_tool + input[25] = skip_alignment + input[26] = skip_pseudo_alignment + input[27] = use_sentieon_star + input[28] = use_parabricks_star """ } } @@ -2697,12 +2890,28 @@ nextflow_workflow { then { assertAll( { assert workflow.success}, - { assert snapshot(workflow.out).match() } + { assert snapshot( + workflow.out.chrom_sizes, + workflow.out.fai, + workflow.out.fasta, + workflow.out.gene_bed, + workflow.out.gtf, + workflow.out.hisat2_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.bowtie2_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.kallisto_index.collect { meta, path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.rsem_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.salmon_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.sortmerna_index, + workflow.out.splicesites, + workflow.out.star_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.transcript_fasta, + workflow.out.versions + ).match() } ) } } - test("skip_alignment = true - stub") { + test("skip_bbsplit = true - stub") { options "-stub" @@ -2711,14 +2920,15 @@ nextflow_workflow { """ gencode = false featurecounts_group_type = 'gene_biotype' - aligner = 'star_salmon,star_rsem,hisat2' - pseudo_aligner = 'salmon,kallisto' + aligner = 'star_salmon' + pseudo_aligner = 'salmon' skip_gtf_filter = false - skip_bbsplit = false - skip_sortmerna = true - skip_alignment = true + skip_bbsplit = true + ribo_removal_tool = null + skip_alignment = false skip_pseudo_alignment = false use_sentieon_star = false + use_parabricks_star = false input[0] = file(params.pipelines_testdata_base_path + 'reference/genome.fasta', checkIfExists: true) input[1] = file(params.pipelines_testdata_base_path + 'reference/genes_with_empty_tid.gtf', checkIfExists: true) @@ -2736,16 +2946,19 @@ nextflow_workflow { input[13] = file(params.pipelines_testdata_base_path + 'reference/hisat2.tar.gz', checkIfExists: true) input[14] = null input[15] = null - input[16] = gencode - input[17] = featurecounts_group_type - input[18] = aligner - input[19] = pseudo_aligner - input[20] = skip_gtf_filter - input[21] = skip_bbsplit - input[22] = skip_sortmerna - input[23] = skip_alignment - input[24] = skip_pseudo_alignment - input[25] = use_sentieon_star + input[16] = null + input[17] = gencode + input[18] = false + input[19] = featurecounts_group_type + input[20] = aligner + input[21] = pseudo_aligner + input[22] = skip_gtf_filter + input[23] = skip_bbsplit + input[24] = ribo_removal_tool + input[25] = skip_alignment + input[26] = skip_pseudo_alignment + input[27] = use_sentieon_star + input[28] = use_parabricks_star """ } } @@ -2753,27 +2966,12 @@ nextflow_workflow { then { assertAll( { assert workflow.success}, - { assert snapshot( - workflow.out.chrom_sizes, - workflow.out.fai, - workflow.out.fasta, - workflow.out.gene_bed, - workflow.out.gtf, - workflow.out.hisat2_index, - workflow.out.kallisto_index, - workflow.out.rsem_index, - workflow.out.salmon_index, - workflow.out.sortmerna_index, - workflow.out.splicesites, - workflow.out.star_index, - workflow.out.transcript_fasta, - workflow.out.versions - ).match() } + { assert snapshot(workflow.out).match() } ) } } - test("skip_pseudoalignment = true - stub") { + test("skip_alignment = true - stub") { options "-stub" @@ -2782,14 +2980,15 @@ nextflow_workflow { """ gencode = false featurecounts_group_type = 'gene_biotype' - aligner = 'star_salmon,star_rsem,hisat2' - pseudo_aligner = 'salmon,kallisto' + aligner = 'star_salmon' + pseudo_aligner = 'salmon' skip_gtf_filter = false skip_bbsplit = false - skip_sortmerna = true - skip_alignment = false - skip_pseudo_alignment = true + ribo_removal_tool = null + skip_alignment = true + skip_pseudo_alignment = false use_sentieon_star = false + use_parabricks_star = false input[0] = file(params.pipelines_testdata_base_path + 'reference/genome.fasta', checkIfExists: true) input[1] = file(params.pipelines_testdata_base_path + 'reference/genes_with_empty_tid.gtf', checkIfExists: true) @@ -2807,16 +3006,19 @@ nextflow_workflow { input[13] = file(params.pipelines_testdata_base_path + 'reference/hisat2.tar.gz', checkIfExists: true) input[14] = null input[15] = null - input[16] = gencode - input[17] = featurecounts_group_type - input[18] = aligner - input[19] = pseudo_aligner - input[20] = skip_gtf_filter - input[21] = skip_bbsplit - input[22] = skip_sortmerna - input[23] = skip_alignment - input[24] = skip_pseudo_alignment - input[25] = use_sentieon_star + input[16] = null + input[17] = gencode + input[18] = false + input[19] = featurecounts_group_type + input[20] = aligner + input[21] = pseudo_aligner + input[22] = skip_gtf_filter + input[23] = skip_bbsplit + input[24] = ribo_removal_tool + input[25] = skip_alignment + input[26] = skip_pseudo_alignment + input[27] = use_sentieon_star + input[28] = use_parabricks_star """ } } @@ -2830,13 +3032,14 @@ nextflow_workflow { workflow.out.fasta, workflow.out.gene_bed, workflow.out.gtf, - workflow.out.hisat2_index, - workflow.out.kallisto_index, - workflow.out.rsem_index, - workflow.out.salmon_index, + workflow.out.hisat2_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.bowtie2_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.kallisto_index.collect { meta, path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.rsem_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.salmon_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, workflow.out.sortmerna_index, workflow.out.splicesites, - workflow.out.star_index, + workflow.out.star_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, workflow.out.transcript_fasta, workflow.out.versions ).match() } @@ -2844,7 +3047,7 @@ nextflow_workflow { } } - test("use_sentieon_star - stub") { + test("skip_pseudoalignment = true - stub") { options "-stub" @@ -2853,14 +3056,15 @@ nextflow_workflow { """ gencode = false featurecounts_group_type = 'gene_biotype' - aligner = 'star_salmon,star_rsem,hisat2' - pseudo_aligner = 'salmon,kallisto' + aligner = 'star_salmon' + pseudo_aligner = 'salmon' skip_gtf_filter = false skip_bbsplit = false - skip_sortmerna = true + ribo_removal_tool = null skip_alignment = false - skip_pseudo_alignment = false - use_sentieon_star = true + skip_pseudo_alignment = true + use_sentieon_star = false + use_parabricks_star = false input[0] = file(params.pipelines_testdata_base_path + 'reference/genome.fasta', checkIfExists: true) input[1] = file(params.pipelines_testdata_base_path + 'reference/genes_with_empty_tid.gtf', checkIfExists: true) @@ -2878,16 +3082,19 @@ nextflow_workflow { input[13] = file(params.pipelines_testdata_base_path + 'reference/hisat2.tar.gz', checkIfExists: true) input[14] = null input[15] = null - input[16] = gencode - input[17] = featurecounts_group_type - input[18] = aligner - input[19] = pseudo_aligner - input[20] = skip_gtf_filter - input[21] = skip_bbsplit - input[22] = skip_sortmerna - input[23] = skip_alignment - input[24] = skip_pseudo_alignment - input[25] = use_sentieon_star + input[16] = null + input[17] = gencode + input[18] = false + input[19] = featurecounts_group_type + input[20] = aligner + input[21] = pseudo_aligner + input[22] = skip_gtf_filter + input[23] = skip_bbsplit + input[24] = ribo_removal_tool + input[25] = skip_alignment + input[26] = skip_pseudo_alignment + input[27] = use_sentieon_star + input[28] = use_parabricks_star """ } } @@ -2901,13 +3108,14 @@ nextflow_workflow { workflow.out.fasta, workflow.out.gene_bed, workflow.out.gtf, - workflow.out.hisat2_index, - workflow.out.kallisto_index, - workflow.out.rsem_index, - workflow.out.salmon_index, + workflow.out.hisat2_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.bowtie2_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.kallisto_index.collect { meta, path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.rsem_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.salmon_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, workflow.out.sortmerna_index, workflow.out.splicesites, - workflow.out.star_index, + workflow.out.star_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, workflow.out.transcript_fasta, workflow.out.versions ).match() } diff --git a/subworkflows/local/prepare_genome/tests/main.nf.test.snap b/subworkflows/local/prepare_genome/tests/main.nf.test.snap index ff65eefee..00c9e42b4 100644 --- a/subworkflows/local/prepare_genome/tests/main.nf.test.snap +++ b/subworkflows/local/prepare_genome/tests/main.nf.test.snap @@ -26,32 +26,32 @@ ], [ - "/ngi-igenomes/testdata/nf-core/pipelines/rnaseq/3.15/reference/salmon.tar.gz" + ], [ - + "[]" ], [ ], [ + ], + [ + "[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]" ], [ "/ngi-igenomes/testdata/nf-core/pipelines/rnaseq/3.15/reference/transcriptome.fasta" ], [ - "versions.yml:md5,71252f1a221be05593361acccb99506b", - "versions.yml:md5,cc5444e21efd35d6322702dbef835fb5", - "versions.yml:md5,cc8f32b7c37c35a075d38cb773004eaa", - "versions.yml:md5,ccf59b1e546d2b873f052f6a2d8a0d1a" + "versions.yml:md5,d475dace58c4e9b4911e8a60bda85041" ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.2" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-06-04T14:57:52.98761697" + "timestamp": "2026-02-05T15:18:02.907387483" }, "skip_pseudo_alignment - stub": { "content": [ @@ -80,7 +80,10 @@ ], [ - "/ngi-igenomes/testdata/nf-core/pipelines/rnaseq/3.15/reference/salmon.tar.gz" + + ], + [ + "[]" ], [ @@ -89,24 +92,20 @@ ], [ - + "[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]" ], [ "/ngi-igenomes/testdata/nf-core/pipelines/rnaseq/3.15/reference/transcriptome.fasta" ], [ - "versions.yml:md5,71252f1a221be05593361acccb99506b", - "versions.yml:md5,80e9dd350be8cd4c11909d75c914757a", - "versions.yml:md5,cc5444e21efd35d6322702dbef835fb5", - "versions.yml:md5,cc8f32b7c37c35a075d38cb773004eaa", - "versions.yml:md5,ccf59b1e546d2b873f052f6a2d8a0d1a" + "versions.yml:md5,d475dace58c4e9b4911e8a60bda85041" ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.2" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-06-04T14:53:39.775739141" + "timestamp": "2026-02-05T15:14:59.778250245" }, "skip_gtf_filter": { "content": [ @@ -114,7 +113,7 @@ "/ngi-igenomes/testdata/nf-core/pipelines/rnaseq/3.15/reference/transcriptome.fasta" ], [ - "/ngi-igenomes/testdata/nf-core/pipelines/rnaseq/3.15/reference/salmon.tar.gz" + "[]" ], [ "genome_gfp.fasta:md5,e23e302af63736a199985a169fdac055" @@ -136,6 +135,9 @@ ], [ + ], + [ + "[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]" ], [ @@ -150,17 +152,14 @@ ], [ - "versions.yml:md5,04400316552e6253e0008f052b20d866", - "versions.yml:md5,71252f1a221be05593361acccb99506b", - "versions.yml:md5,cc5444e21efd35d6322702dbef835fb5", - "versions.yml:md5,ccf59b1e546d2b873f052f6a2d8a0d1a" + "versions.yml:md5,04400316552e6253e0008f052b20d866" ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.2" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-06-04T14:44:13.957481433" + "timestamp": "2026-02-05T15:08:41.40483402" }, "gencode = false - stub": { "content": [ @@ -189,33 +188,32 @@ ], [ - "/ngi-igenomes/testdata/nf-core/pipelines/rnaseq/3.15/reference/salmon.tar.gz" + ], [ - + "[]" ], [ ], [ + ], + [ + "[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]" ], [ "/ngi-igenomes/testdata/nf-core/pipelines/rnaseq/3.15/reference/transcriptome.fasta" ], [ - "versions.yml:md5,71252f1a221be05593361acccb99506b", - "versions.yml:md5,80e9dd350be8cd4c11909d75c914757a", - "versions.yml:md5,cc5444e21efd35d6322702dbef835fb5", - "versions.yml:md5,cc8f32b7c37c35a075d38cb773004eaa", - "versions.yml:md5,ccf59b1e546d2b873f052f6a2d8a0d1a" + "versions.yml:md5,d475dace58c4e9b4911e8a60bda85041" ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.2" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-06-04T14:52:08.436697444" + "timestamp": "2026-02-05T15:13:58.848517702" }, "gff = false - stub": { "content": [ @@ -244,7 +242,10 @@ ], [ - "/ngi-igenomes/testdata/nf-core/pipelines/rnaseq/3.15/reference/salmon.tar.gz" + + ], + [ + "[]" ], [ @@ -253,24 +254,20 @@ ], [ - + "[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]" ], [ "/ngi-igenomes/testdata/nf-core/pipelines/rnaseq/3.15/reference/transcriptome.fasta" ], [ - "versions.yml:md5,71252f1a221be05593361acccb99506b", - "versions.yml:md5,80e9dd350be8cd4c11909d75c914757a", - "versions.yml:md5,cc5444e21efd35d6322702dbef835fb5", - "versions.yml:md5,cc8f32b7c37c35a075d38cb773004eaa", - "versions.yml:md5,ccf59b1e546d2b873f052f6a2d8a0d1a" + "versions.yml:md5,d475dace58c4e9b4911e8a60bda85041" ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.2" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-06-04T14:54:27.239992911" + "timestamp": "2026-02-05T15:15:30.9437002" }, "skip_pseudoalignment = true - stub": { "content": [ @@ -299,33 +296,32 @@ ], [ - "/ngi-igenomes/testdata/nf-core/pipelines/rnaseq/3.15/reference/salmon.tar.gz" + ], [ - + "[]" ], [ ], [ + ], + [ + "[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]" ], [ "/ngi-igenomes/testdata/nf-core/pipelines/rnaseq/3.15/reference/transcriptome.fasta" ], [ - "versions.yml:md5,71252f1a221be05593361acccb99506b", - "versions.yml:md5,80e9dd350be8cd4c11909d75c914757a", - "versions.yml:md5,cc5444e21efd35d6322702dbef835fb5", - "versions.yml:md5,cc8f32b7c37c35a075d38cb773004eaa", - "versions.yml:md5,ccf59b1e546d2b873f052f6a2d8a0d1a" + "versions.yml:md5,d475dace58c4e9b4911e8a60bda85041" ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.2" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-06-04T14:59:01.558025917" + "timestamp": "2026-02-05T15:18:49.000402027" }, "featurecounts_group_type = 'gene_type' - stub": { "content": [ @@ -354,33 +350,32 @@ ], [ - "/ngi-igenomes/testdata/nf-core/pipelines/rnaseq/3.15/reference/salmon.tar.gz" + ], [ - + "[]" ], [ ], [ + ], + [ + "[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]" ], [ "/ngi-igenomes/testdata/nf-core/pipelines/rnaseq/3.15/reference/transcriptome.fasta" ], [ - "versions.yml:md5,71252f1a221be05593361acccb99506b", - "versions.yml:md5,80e9dd350be8cd4c11909d75c914757a", - "versions.yml:md5,cc5444e21efd35d6322702dbef835fb5", - "versions.yml:md5,cc8f32b7c37c35a075d38cb773004eaa", - "versions.yml:md5,ccf59b1e546d2b873f052f6a2d8a0d1a" + "versions.yml:md5,d475dace58c4e9b4911e8a60bda85041" ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.2" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-06-04T14:57:30.535714657" + "timestamp": "2026-02-05T15:17:48.228724117" }, "gtf = false": { "content": [ @@ -388,7 +383,7 @@ "transcriptome.fixed.fa:md5,faf3a64453ae73983bbf2743387fbdf2" ], [ - "/ngi-igenomes/testdata/nf-core/pipelines/rnaseq/3.15/reference/salmon.tar.gz" + "[]" ], [ "genome_gfp.fasta:md5,e23e302af63736a199985a169fdac055" @@ -410,6 +405,9 @@ ], [ + ], + [ + "[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]" ], [ @@ -424,20 +422,14 @@ ], [ - "versions.yml:md5,04400316552e6253e0008f052b20d866", - "versions.yml:md5,2a3ed31ad34b8864fb9278dcdef596ec", - "versions.yml:md5,71252f1a221be05593361acccb99506b", - "versions.yml:md5,80e9dd350be8cd4c11909d75c914757a", - "versions.yml:md5,961ab91198c4e6ec9d795b95e3f61fda", - "versions.yml:md5,cc5444e21efd35d6322702dbef835fb5", - "versions.yml:md5,ccf59b1e546d2b873f052f6a2d8a0d1a" + "versions.yml:md5,04400316552e6253e0008f052b20d866" ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.2" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-06-04T14:45:56.724444373" + "timestamp": "2026-02-05T15:09:45.361003981" }, "gfp = false": { "content": [ @@ -445,7 +437,7 @@ "/ngi-igenomes/testdata/nf-core/pipelines/rnaseq/3.15/reference/transcriptome.fasta" ], [ - "/ngi-igenomes/testdata/nf-core/pipelines/rnaseq/3.15/reference/salmon.tar.gz" + "[]" ], [ "/ngi-igenomes/testdata/nf-core/pipelines/rnaseq/3.15/reference/genome.fasta" @@ -467,6 +459,9 @@ ], [ + ], + [ + "[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]" ], [ @@ -481,17 +476,14 @@ ], [ - "versions.yml:md5,71252f1a221be05593361acccb99506b", - "versions.yml:md5,80e9dd350be8cd4c11909d75c914757a", - "versions.yml:md5,cc5444e21efd35d6322702dbef835fb5", - "versions.yml:md5,ccf59b1e546d2b873f052f6a2d8a0d1a" + ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.2" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-06-04T14:46:47.57586012" + "timestamp": "2026-02-05T15:10:16.088175973" }, "skip_bbsplit = true": { "content": [ @@ -499,7 +491,7 @@ "/ngi-igenomes/testdata/nf-core/pipelines/rnaseq/3.15/reference/transcriptome.fasta" ], [ - "/ngi-igenomes/testdata/nf-core/pipelines/rnaseq/3.15/reference/salmon.tar.gz" + "[]" ], [ "genome_gfp.fasta:md5,e23e302af63736a199985a169fdac055" @@ -521,6 +513,9 @@ ], [ + ], + [ + "[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]" ], [ @@ -535,17 +530,14 @@ ], [ - "versions.yml:md5,04400316552e6253e0008f052b20d866", - "versions.yml:md5,71252f1a221be05593361acccb99506b", - "versions.yml:md5,80e9dd350be8cd4c11909d75c914757a", - "versions.yml:md5,ccf59b1e546d2b873f052f6a2d8a0d1a" + "versions.yml:md5,04400316552e6253e0008f052b20d866" ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.4" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-01-22T16:23:43.324382545" + "timestamp": "2026-02-05T15:12:56.117595679" }, "salmon_index = false - stub": { "content": [ @@ -577,30 +569,29 @@ ], [ - + "[complete_ref_lens.bin, ctable.bin, ctg_offsets.bin, duplicate_clusters.tsv, info.json, mphf.bin, pos.bin, pre_indexing.log, rank.bin, refAccumLengths.bin, ref_indexing.log, reflengths.bin, refseq.bin, seq.bin, versionInfo.json]" ], [ ], [ + ], + [ + "[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]" ], [ "/ngi-igenomes/testdata/nf-core/pipelines/rnaseq/3.15/reference/transcriptome.fasta" ], [ - "versions.yml:md5,71252f1a221be05593361acccb99506b", - "versions.yml:md5,80e9dd350be8cd4c11909d75c914757a", - "versions.yml:md5,cc5444e21efd35d6322702dbef835fb5", - "versions.yml:md5,cc8f32b7c37c35a075d38cb773004eaa", - "versions.yml:md5,ccf59b1e546d2b873f052f6a2d8a0d1a" + "versions.yml:md5,d475dace58c4e9b4911e8a60bda85041" ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.2" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-06-04T14:56:20.77479328" + "timestamp": "2026-02-05T15:16:46.098242334" }, "skip_alignment": { "content": [ @@ -608,7 +599,7 @@ "/ngi-igenomes/testdata/nf-core/pipelines/rnaseq/3.15/reference/transcriptome.fasta" ], [ - "/ngi-igenomes/testdata/nf-core/pipelines/rnaseq/3.15/reference/salmon.tar.gz" + "[]" ], [ "genome_gfp.fasta:md5,e23e302af63736a199985a169fdac055" @@ -644,18 +635,17 @@ ], [ - "versions.yml:md5,04400316552e6253e0008f052b20d866", - "versions.yml:md5,71252f1a221be05593361acccb99506b", - "versions.yml:md5,80e9dd350be8cd4c11909d75c914757a", - "versions.yml:md5,cc5444e21efd35d6322702dbef835fb5", - "versions.yml:md5,ccf59b1e546d2b873f052f6a2d8a0d1a" + + ], + [ + "versions.yml:md5,04400316552e6253e0008f052b20d866" ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.2" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-06-04T14:45:01.819751959" + "timestamp": "2026-02-05T15:09:12.693658325" }, "gfp = false - stub": { "content": [ @@ -684,32 +674,32 @@ ], [ - "/ngi-igenomes/testdata/nf-core/pipelines/rnaseq/3.15/reference/salmon.tar.gz" + ], [ - + "[]" ], [ ], [ + ], + [ + "[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]" ], [ "/ngi-igenomes/testdata/nf-core/pipelines/rnaseq/3.15/reference/transcriptome.fasta" ], [ - "versions.yml:md5,71252f1a221be05593361acccb99506b", - "versions.yml:md5,80e9dd350be8cd4c11909d75c914757a", - "versions.yml:md5,cc5444e21efd35d6322702dbef835fb5", - "versions.yml:md5,ccf59b1e546d2b873f052f6a2d8a0d1a" + ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.2" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-06-04T14:54:49.884282974" + "timestamp": "2026-02-05T15:15:45.518394466" }, "gencode = false": { "content": [ @@ -717,7 +707,7 @@ "/ngi-igenomes/testdata/nf-core/pipelines/rnaseq/3.15/reference/transcriptome.fasta" ], [ - "/ngi-igenomes/testdata/nf-core/pipelines/rnaseq/3.15/reference/salmon.tar.gz" + "[]" ], [ "genome_gfp.fasta:md5,e23e302af63736a199985a169fdac055" @@ -739,6 +729,9 @@ ], [ + ], + [ + "[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]" ], [ @@ -753,18 +746,14 @@ ], [ - "versions.yml:md5,04400316552e6253e0008f052b20d866", - "versions.yml:md5,71252f1a221be05593361acccb99506b", - "versions.yml:md5,80e9dd350be8cd4c11909d75c914757a", - "versions.yml:md5,cc5444e21efd35d6322702dbef835fb5", - "versions.yml:md5,ccf59b1e546d2b873f052f6a2d8a0d1a" + "versions.yml:md5,04400316552e6253e0008f052b20d866" ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.2" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-06-04T14:43:49.834120448" + "timestamp": "2026-02-05T15:08:25.920430446" }, "default options": { "content": [ @@ -772,7 +761,7 @@ "/ngi-igenomes/testdata/nf-core/pipelines/rnaseq/3.15/reference/transcriptome.fasta" ], [ - "/ngi-igenomes/testdata/nf-core/pipelines/rnaseq/3.15/reference/salmon.tar.gz" + "[]" ], [ "genome_gfp.fasta:md5,e23e302af63736a199985a169fdac055" @@ -794,6 +783,9 @@ ], [ + ], + [ + "[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]" ], [ @@ -808,18 +800,14 @@ ], [ - "versions.yml:md5,04400316552e6253e0008f052b20d866", - "versions.yml:md5,71252f1a221be05593361acccb99506b", - "versions.yml:md5,80e9dd350be8cd4c11909d75c914757a", - "versions.yml:md5,cc5444e21efd35d6322702dbef835fb5", - "versions.yml:md5,ccf59b1e546d2b873f052f6a2d8a0d1a" + "versions.yml:md5,04400316552e6253e0008f052b20d866" ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.2" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-06-04T14:43:23.956364009" + "timestamp": "2026-02-05T15:08:09.71990742" }, "gencode = true - stub": { "content": [ @@ -848,34 +836,32 @@ ], [ - "/ngi-igenomes/testdata/nf-core/pipelines/rnaseq/3.15/reference/salmon.tar.gz" + ], [ - + "[]" ], [ ], [ + ], + [ + "[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]" ], [ "transcriptome.fixed.fa:md5,d41d8cd98f00b204e9800998ecf8427e" ], [ - "versions.yml:md5,71252f1a221be05593361acccb99506b", - "versions.yml:md5,80e9dd350be8cd4c11909d75c914757a", - "versions.yml:md5,961ab91198c4e6ec9d795b95e3f61fda", - "versions.yml:md5,cc5444e21efd35d6322702dbef835fb5", - "versions.yml:md5,cc8f32b7c37c35a075d38cb773004eaa", - "versions.yml:md5,ccf59b1e546d2b873f052f6a2d8a0d1a" + "versions.yml:md5,d475dace58c4e9b4911e8a60bda85041" ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.2" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-06-04T14:57:07.558265667" + "timestamp": "2026-02-05T15:17:32.9227987" }, "skip_alignment - stub": { "content": [ @@ -904,7 +890,10 @@ ], [ - "/ngi-igenomes/testdata/nf-core/pipelines/rnaseq/3.15/reference/salmon.tar.gz" + + ], + [ + "[]" ], [ @@ -919,18 +908,14 @@ "/ngi-igenomes/testdata/nf-core/pipelines/rnaseq/3.15/reference/transcriptome.fasta" ], [ - "versions.yml:md5,71252f1a221be05593361acccb99506b", - "versions.yml:md5,80e9dd350be8cd4c11909d75c914757a", - "versions.yml:md5,cc5444e21efd35d6322702dbef835fb5", - "versions.yml:md5,cc8f32b7c37c35a075d38cb773004eaa", - "versions.yml:md5,ccf59b1e546d2b873f052f6a2d8a0d1a" + "versions.yml:md5,d475dace58c4e9b4911e8a60bda85041" ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.2" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-06-04T14:53:16.702413442" + "timestamp": "2026-02-05T15:14:44.63644103" }, "skip_bbsplit = true - stub": { "content": [ @@ -942,7 +927,24 @@ "genome_transcriptome.gtf:md5,d41d8cd98f00b204e9800998ecf8427e" ], "10": [ - + [ + "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" + ] ], "11": [ @@ -951,16 +953,16 @@ ], "13": [ - "/ngi-igenomes/testdata/nf-core/pipelines/rnaseq/3.15/reference/salmon.tar.gz" + ], "14": [ - + "/ngi-igenomes/testdata/nf-core/pipelines/rnaseq/3.15/reference/salmon.tar.gz" ], "15": [ - "versions.yml:md5,71252f1a221be05593361acccb99506b", - "versions.yml:md5,80e9dd350be8cd4c11909d75c914757a", - "versions.yml:md5,cc8f32b7c37c35a075d38cb773004eaa", - "versions.yml:md5,ccf59b1e546d2b873f052f6a2d8a0d1a" + + ], + "16": [ + "versions.yml:md5,d475dace58c4e9b4911e8a60bda85041" ], "2": [ "genome_transcriptome.fasta.fai:md5,d41d8cd98f00b204e9800998ecf8427e" @@ -988,6 +990,9 @@ ], "bbsplit_index": [ + ], + "bowtie2_index": [ + ], "chrom_sizes": [ "genome_transcriptome.fasta.sizes:md5,d41d8cd98f00b204e9800998ecf8427e" @@ -1026,24 +1031,38 @@ ], "star_index": [ - + [ + "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" + ] ], "transcript_fasta": [ "/ngi-igenomes/testdata/nf-core/pipelines/rnaseq/3.15/reference/transcriptome.fasta" ], "versions": [ - "versions.yml:md5,71252f1a221be05593361acccb99506b", - "versions.yml:md5,80e9dd350be8cd4c11909d75c914757a", - "versions.yml:md5,cc8f32b7c37c35a075d38cb773004eaa", - "versions.yml:md5,ccf59b1e546d2b873f052f6a2d8a0d1a" + "versions.yml:md5,d475dace58c4e9b4911e8a60bda85041" ] } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.4" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-01-22T16:31:58.139538299" + "timestamp": "2026-02-05T15:18:18.136305391" }, "transcriptome = false": { "content": [ @@ -1051,7 +1070,7 @@ "genome.transcripts.fa:md5,b89a3e02ad30ba3fd600f98c8e2f58d4" ], [ - "/ngi-igenomes/testdata/nf-core/pipelines/rnaseq/3.15/reference/salmon.tar.gz" + "[]" ], [ "genome_gfp.fasta:md5,e23e302af63736a199985a169fdac055" @@ -1073,6 +1092,9 @@ ], [ + ], + [ + "[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]" ], [ @@ -1087,19 +1109,14 @@ ], [ - "versions.yml:md5,04400316552e6253e0008f052b20d866", - "versions.yml:md5,71252f1a221be05593361acccb99506b", - "versions.yml:md5,80e9dd350be8cd4c11909d75c914757a", - "versions.yml:md5,918fe0b59c0986eb602ace85841c5ab3", - "versions.yml:md5,cc5444e21efd35d6322702dbef835fb5", - "versions.yml:md5,ccf59b1e546d2b873f052f6a2d8a0d1a" + "versions.yml:md5,04400316552e6253e0008f052b20d866" ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.2" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-06-04T14:47:14.183598459" + "timestamp": "2026-02-05T15:10:32.275536723" }, "skip_pseudoalignment = true": { "content": [ @@ -1107,7 +1124,7 @@ "/ngi-igenomes/testdata/nf-core/pipelines/rnaseq/3.15/reference/transcriptome.fasta" ], [ - "/ngi-igenomes/testdata/nf-core/pipelines/rnaseq/3.15/reference/salmon.tar.gz" + "[]" ], [ "genome_gfp.fasta:md5,e23e302af63736a199985a169fdac055" @@ -1129,6 +1146,9 @@ ], [ + ], + [ + "[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]" ], [ @@ -1143,18 +1163,14 @@ ], [ - "versions.yml:md5,04400316552e6253e0008f052b20d866", - "versions.yml:md5,71252f1a221be05593361acccb99506b", - "versions.yml:md5,80e9dd350be8cd4c11909d75c914757a", - "versions.yml:md5,cc5444e21efd35d6322702dbef835fb5", - "versions.yml:md5,ccf59b1e546d2b873f052f6a2d8a0d1a" + "versions.yml:md5,04400316552e6253e0008f052b20d866" ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.2" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-06-04T14:51:22.172487178" + "timestamp": "2026-02-05T15:13:28.455466062" }, "skip_gtf_filter - stub": { "content": [ @@ -1183,32 +1199,32 @@ ], [ - "/ngi-igenomes/testdata/nf-core/pipelines/rnaseq/3.15/reference/salmon.tar.gz" + ], [ - + "[]" ], [ ], [ + ], + [ + "[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]" ], [ "/ngi-igenomes/testdata/nf-core/pipelines/rnaseq/3.15/reference/transcriptome.fasta" ], [ - "versions.yml:md5,71252f1a221be05593361acccb99506b", - "versions.yml:md5,cc5444e21efd35d6322702dbef835fb5", - "versions.yml:md5,cc8f32b7c37c35a075d38cb773004eaa", - "versions.yml:md5,ccf59b1e546d2b873f052f6a2d8a0d1a" + "versions.yml:md5,d475dace58c4e9b4911e8a60bda85041" ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.2" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-06-04T14:52:31.530405585" + "timestamp": "2026-02-05T15:14:13.428713931" }, "gencode = true": { "content": [ @@ -1216,7 +1232,7 @@ "transcriptome.fixed.fa:md5,faf3a64453ae73983bbf2743387fbdf2" ], [ - "/ngi-igenomes/testdata/nf-core/pipelines/rnaseq/3.15/reference/salmon.tar.gz" + "[]" ], [ "genome_gfp.fasta:md5,e23e302af63736a199985a169fdac055" @@ -1238,6 +1254,9 @@ ], [ + ], + [ + "[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]" ], [ @@ -1252,27 +1271,22 @@ ], [ - "versions.yml:md5,04400316552e6253e0008f052b20d866", - "versions.yml:md5,71252f1a221be05593361acccb99506b", - "versions.yml:md5,80e9dd350be8cd4c11909d75c914757a", - "versions.yml:md5,961ab91198c4e6ec9d795b95e3f61fda", - "versions.yml:md5,cc5444e21efd35d6322702dbef835fb5", - "versions.yml:md5,ccf59b1e546d2b873f052f6a2d8a0d1a" + "versions.yml:md5,04400316552e6253e0008f052b20d866" ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.2" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-06-04T14:49:20.128406093" + "timestamp": "2026-02-05T15:12:09.515995661" }, - "hisat2_index = false": { + "kallisto_index = false": { "content": [ [ "/ngi-igenomes/testdata/nf-core/pipelines/rnaseq/3.15/reference/transcriptome.fasta" ], [ - + "[]" ], [ "genome_gfp.fasta:md5,e23e302af63736a199985a169fdac055" @@ -1294,9 +1308,57 @@ ], [ + ], + [ + "[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,04400316552e6253e0008f052b20d866" + ] + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.2" + }, + "timestamp": "2026-02-05T15:11:53.504856464" + }, + "hisat2_index = false": { + "content": [ + [ + "/ngi-igenomes/testdata/nf-core/pipelines/rnaseq/3.15/reference/transcriptome.fasta" + ], + [ + "[complete_ref_lens.bin, ctable.bin, ctg_offsets.bin, duplicate_clusters.tsv, info.json, mphf.bin, pos.bin, pre_indexing.log, rank.bin, refAccumLengths.bin, ref_indexing.log, reflengths.bin, refseq.bin, seq.bin, versionInfo.json]" + ], + [ + "genome_gfp.fasta:md5,e23e302af63736a199985a169fdac055" + ], + [ + "genome_gfp.gtf:md5,c98b12c302f15731bfc36bcf297cfe28" + ], + [ + "genome_gfp.fasta.fai:md5,8fa54c6bd2ea6a369efbb8ab4f30156a" + ], + [ + "genome_gfp.bed:md5,991993ebef1def1d5823632c21177ec3" + ], + [ + "genome_gfp.fasta.sizes:md5,9b755f8f349b14accefb4d859f84de26" + ], + [ + "genome_gfp.splice_sites.txt:md5,4e9620ff904f32dfe6e7897a9acdc15b" ], [ @@ -1308,18 +1370,23 @@ ], [ - "versions.yml:md5,04400316552e6253e0008f052b20d866", - "versions.yml:md5,71252f1a221be05593361acccb99506b", - "versions.yml:md5,80e9dd350be8cd4c11909d75c914757a", - "versions.yml:md5,cc5444e21efd35d6322702dbef835fb5", - "versions.yml:md5,ccf59b1e546d2b873f052f6a2d8a0d1a" + "[genome_gfp.1.ht2, genome_gfp.2.ht2, genome_gfp.3.ht2, genome_gfp.4.ht2, genome_gfp.5.ht2, genome_gfp.6.ht2, genome_gfp.7.ht2, genome_gfp.8.ht2]" + ], + [ + + ], + [ + + ], + [ + "versions.yml:md5,04400316552e6253e0008f052b20d866" ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.2" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-06-04T14:48:54.242451442" + "timestamp": "2026-02-05T15:11:37.493884502" }, "rsem_index = false - stub": { "content": [ @@ -1348,33 +1415,32 @@ ], [ - "/ngi-igenomes/testdata/nf-core/pipelines/rnaseq/3.15/reference/salmon.tar.gz" + "[genome_transcriptome.fasta]" ], [ - + "[]" ], [ ], [ + ], + [ + "[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]" ], [ "/ngi-igenomes/testdata/nf-core/pipelines/rnaseq/3.15/reference/transcriptome.fasta" ], [ - "versions.yml:md5,71252f1a221be05593361acccb99506b", - "versions.yml:md5,80e9dd350be8cd4c11909d75c914757a", - "versions.yml:md5,cc5444e21efd35d6322702dbef835fb5", - "versions.yml:md5,cc8f32b7c37c35a075d38cb773004eaa", - "versions.yml:md5,ccf59b1e546d2b873f052f6a2d8a0d1a" + "versions.yml:md5,d475dace58c4e9b4911e8a60bda85041" ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.2" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-06-04T14:55:57.846202856" + "timestamp": "2026-02-05T15:16:30.758215437" }, "featurecounts_group_type = 'gene_type'": { "content": [ @@ -1382,7 +1448,7 @@ "/ngi-igenomes/testdata/nf-core/pipelines/rnaseq/3.15/reference/transcriptome.fasta" ], [ - "/ngi-igenomes/testdata/nf-core/pipelines/rnaseq/3.15/reference/salmon.tar.gz" + "[]" ], [ "genome_gfp.fasta:md5,e23e302af63736a199985a169fdac055" @@ -1404,6 +1470,9 @@ ], [ + ], + [ + "[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]" ], [ @@ -1418,18 +1487,14 @@ ], [ - "versions.yml:md5,04400316552e6253e0008f052b20d866", - "versions.yml:md5,71252f1a221be05593361acccb99506b", - "versions.yml:md5,80e9dd350be8cd4c11909d75c914757a", - "versions.yml:md5,cc5444e21efd35d6322702dbef835fb5", - "versions.yml:md5,ccf59b1e546d2b873f052f6a2d8a0d1a" + "versions.yml:md5,04400316552e6253e0008f052b20d866" ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.2" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-06-04T14:49:45.433606158" + "timestamp": "2026-02-05T15:12:25.47430627" }, "with bed - stub": { "content": [ @@ -1458,32 +1523,86 @@ ], [ - "/ngi-igenomes/testdata/nf-core/pipelines/rnaseq/3.15/reference/salmon.tar.gz" + + ], + [ + "[]" + ], + [ + + ], + [ + + ], + [ + "[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]" + ], + [ + "/ngi-igenomes/testdata/nf-core/pipelines/rnaseq/3.15/reference/transcriptome.fasta" + ], + [ + "versions.yml:md5,d475dace58c4e9b4911e8a60bda85041" + ] + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.2" + }, + "timestamp": "2026-02-05T15:16:15.524125356" + }, + "kallisto_index = false - stub": { + "content": [ + [ + "genome_transcriptome.fasta.sizes:md5,d41d8cd98f00b204e9800998ecf8427e" + ], + [ + "genome_transcriptome.fasta.fai:md5,d41d8cd98f00b204e9800998ecf8427e" + ], + [ + "genome_transcriptome.fasta:md5,d41d8cd98f00b204e9800998ecf8427e" + ], + [ + "genome_transcriptome.bed:md5,d41d8cd98f00b204e9800998ecf8427e" + ], + [ + "genome_transcriptome.gtf:md5,d41d8cd98f00b204e9800998ecf8427e" + ], + [ + + ], + [ + + ], + [ + "[]" ], [ + ], + [ + "[]" ], [ ], [ + ], + [ + "[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]" ], [ "/ngi-igenomes/testdata/nf-core/pipelines/rnaseq/3.15/reference/transcriptome.fasta" ], [ - "versions.yml:md5,80e9dd350be8cd4c11909d75c914757a", - "versions.yml:md5,cc5444e21efd35d6322702dbef835fb5", - "versions.yml:md5,cc8f32b7c37c35a075d38cb773004eaa", - "versions.yml:md5,ccf59b1e546d2b873f052f6a2d8a0d1a" + "versions.yml:md5,d475dace58c4e9b4911e8a60bda85041" ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.2" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-06-04T14:55:34.143684831" + "timestamp": "2026-02-05T15:17:16.672035485" }, "skip_pseudo_alignment": { "content": [ @@ -1491,7 +1610,7 @@ "/ngi-igenomes/testdata/nf-core/pipelines/rnaseq/3.15/reference/transcriptome.fasta" ], [ - "/ngi-igenomes/testdata/nf-core/pipelines/rnaseq/3.15/reference/salmon.tar.gz" + "[]" ], [ "genome_gfp.fasta:md5,e23e302af63736a199985a169fdac055" @@ -1513,6 +1632,9 @@ ], [ + ], + [ + "[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]" ], [ @@ -1527,18 +1649,14 @@ ], [ - "versions.yml:md5,04400316552e6253e0008f052b20d866", - "versions.yml:md5,71252f1a221be05593361acccb99506b", - "versions.yml:md5,80e9dd350be8cd4c11909d75c914757a", - "versions.yml:md5,cc5444e21efd35d6322702dbef835fb5", - "versions.yml:md5,ccf59b1e546d2b873f052f6a2d8a0d1a" + "versions.yml:md5,04400316552e6253e0008f052b20d866" ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.2" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-06-04T14:45:27.101871042" + "timestamp": "2026-02-05T15:09:28.730151387" }, "skip_bbsplit": { "content": [ @@ -1546,7 +1664,7 @@ "/ngi-igenomes/testdata/nf-core/pipelines/rnaseq/3.15/reference/transcriptome.fasta" ], [ - "/ngi-igenomes/testdata/nf-core/pipelines/rnaseq/3.15/reference/salmon.tar.gz" + "[]" ], [ "genome_gfp.fasta:md5,e23e302af63736a199985a169fdac055" @@ -1568,6 +1686,9 @@ ], [ + ], + [ + "[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]" ], [ @@ -1582,17 +1703,14 @@ ], [ - "versions.yml:md5,04400316552e6253e0008f052b20d866", - "versions.yml:md5,71252f1a221be05593361acccb99506b", - "versions.yml:md5,80e9dd350be8cd4c11909d75c914757a", - "versions.yml:md5,ccf59b1e546d2b873f052f6a2d8a0d1a" + "versions.yml:md5,04400316552e6253e0008f052b20d866" ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.4" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-01-22T16:18:03.05536554" + "timestamp": "2026-02-05T15:08:56.822209444" }, "with bed": { "content": [ @@ -1600,7 +1718,7 @@ "/ngi-igenomes/testdata/nf-core/pipelines/rnaseq/3.15/reference/transcriptome.fasta" ], [ - "/ngi-igenomes/testdata/nf-core/pipelines/rnaseq/3.15/reference/salmon.tar.gz" + "[]" ], [ "genome_gfp.fasta:md5,e23e302af63736a199985a169fdac055" @@ -1622,6 +1740,9 @@ ], [ + ], + [ + "[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]" ], [ @@ -1636,17 +1757,14 @@ ], [ - "versions.yml:md5,04400316552e6253e0008f052b20d866", - "versions.yml:md5,80e9dd350be8cd4c11909d75c914757a", - "versions.yml:md5,cc5444e21efd35d6322702dbef835fb5", - "versions.yml:md5,ccf59b1e546d2b873f052f6a2d8a0d1a" + "versions.yml:md5,04400316552e6253e0008f052b20d866" ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.2" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-06-04T14:47:38.077587168" + "timestamp": "2026-02-05T15:10:48.544567099" }, "gtf = false - stub": { "content": [ @@ -1675,35 +1793,32 @@ ], [ - "/ngi-igenomes/testdata/nf-core/pipelines/rnaseq/3.15/reference/salmon.tar.gz" + ], [ - + "[]" ], [ ], [ + ], + [ + "[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]" ], [ "transcriptome.fixed.fa:md5,d41d8cd98f00b204e9800998ecf8427e" ], [ - "versions.yml:md5,2a3ed31ad34b8864fb9278dcdef596ec", - "versions.yml:md5,71252f1a221be05593361acccb99506b", - "versions.yml:md5,80e9dd350be8cd4c11909d75c914757a", - "versions.yml:md5,961ab91198c4e6ec9d795b95e3f61fda", - "versions.yml:md5,cc5444e21efd35d6322702dbef835fb5", - "versions.yml:md5,cc8f32b7c37c35a075d38cb773004eaa", - "versions.yml:md5,ccf59b1e546d2b873f052f6a2d8a0d1a" + "versions.yml:md5,d475dace58c4e9b4911e8a60bda85041" ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.2" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-06-04T14:54:03.877089997" + "timestamp": "2026-02-05T15:15:15.712030364" }, "gff = false": { "content": [ @@ -1711,7 +1826,7 @@ "/ngi-igenomes/testdata/nf-core/pipelines/rnaseq/3.15/reference/transcriptome.fasta" ], [ - "/ngi-igenomes/testdata/nf-core/pipelines/rnaseq/3.15/reference/salmon.tar.gz" + "[]" ], [ "genome_gfp.fasta:md5,e23e302af63736a199985a169fdac055" @@ -1733,6 +1848,9 @@ ], [ + ], + [ + "[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]" ], [ @@ -1747,18 +1865,14 @@ ], [ - "versions.yml:md5,04400316552e6253e0008f052b20d866", - "versions.yml:md5,71252f1a221be05593361acccb99506b", - "versions.yml:md5,80e9dd350be8cd4c11909d75c914757a", - "versions.yml:md5,cc5444e21efd35d6322702dbef835fb5", - "versions.yml:md5,ccf59b1e546d2b873f052f6a2d8a0d1a" + "versions.yml:md5,04400316552e6253e0008f052b20d866" ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.2" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-06-04T14:46:21.818373651" + "timestamp": "2026-02-05T15:10:01.340639858" }, "default options - stub": { "content": [ @@ -1787,33 +1901,32 @@ ], [ - "/ngi-igenomes/testdata/nf-core/pipelines/rnaseq/3.15/reference/salmon.tar.gz" + ], [ - + "[]" ], [ ], [ + ], + [ + "[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]" ], [ "/ngi-igenomes/testdata/nf-core/pipelines/rnaseq/3.15/reference/transcriptome.fasta" ], [ - "versions.yml:md5,71252f1a221be05593361acccb99506b", - "versions.yml:md5,80e9dd350be8cd4c11909d75c914757a", - "versions.yml:md5,cc5444e21efd35d6322702dbef835fb5", - "versions.yml:md5,cc8f32b7c37c35a075d38cb773004eaa", - "versions.yml:md5,ccf59b1e546d2b873f052f6a2d8a0d1a" + "versions.yml:md5,d475dace58c4e9b4911e8a60bda85041" ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.2" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-06-04T14:51:45.456290803" + "timestamp": "2026-02-05T15:13:43.57191866" }, "salmon_index = false": { "content": [ @@ -1821,7 +1934,7 @@ "/ngi-igenomes/testdata/nf-core/pipelines/rnaseq/3.15/reference/transcriptome.fasta" ], [ - + "[complete_ref_lens.bin, ctable.bin, ctg_offsets.bin, duplicate_clusters.tsv, info.json, mphf.bin, pos.bin, pre_indexing.log, rank.bin, refAccumLengths.bin, ref_indexing.log, reflengths.bin, refseq.bin, seq.bin, versionInfo.json]" ], [ "genome_gfp.fasta:md5,e23e302af63736a199985a169fdac055" @@ -1843,6 +1956,9 @@ ], [ + ], + [ + "[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]" ], [ @@ -1857,18 +1973,14 @@ ], [ - "versions.yml:md5,04400316552e6253e0008f052b20d866", - "versions.yml:md5,71252f1a221be05593361acccb99506b", - "versions.yml:md5,80e9dd350be8cd4c11909d75c914757a", - "versions.yml:md5,cc5444e21efd35d6322702dbef835fb5", - "versions.yml:md5,ccf59b1e546d2b873f052f6a2d8a0d1a" + "versions.yml:md5,04400316552e6253e0008f052b20d866" ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.2" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-06-04T14:48:29.521043084" + "timestamp": "2026-02-05T15:11:20.554766453" }, "rsem_index = false": { "content": [ @@ -1876,7 +1988,7 @@ "/ngi-igenomes/testdata/nf-core/pipelines/rnaseq/3.15/reference/transcriptome.fasta" ], [ - "/ngi-igenomes/testdata/nf-core/pipelines/rnaseq/3.15/reference/salmon.tar.gz" + "[]" ], [ "genome_gfp.fasta:md5,e23e302af63736a199985a169fdac055" @@ -1900,7 +2012,10 @@ ], [ - + "[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]" + ], + [ + "[Genome, Log.out, SA, SAindex, chrLength.txt, chrName.txt, chrNameLength.txt, chrStart.txt, exonGeTrInfo.tab, exonInfo.tab, geneInfo.tab, genome.chrlist, genome.grp, genome.idx.fa, genome.n2g.idx.fa, genome.seq, genome.ti, genome.transcripts.fa, genomeParameters.txt, genome_gfp.fasta, sjdbInfo.txt, sjdbList.fromGTF.out.tab, sjdbList.out.tab, transcriptInfo.tab]" ], [ @@ -1912,18 +2027,14 @@ ], [ - "versions.yml:md5,04400316552e6253e0008f052b20d866", - "versions.yml:md5,71252f1a221be05593361acccb99506b", - "versions.yml:md5,80e9dd350be8cd4c11909d75c914757a", - "versions.yml:md5,cc5444e21efd35d6322702dbef835fb5", - "versions.yml:md5,ccf59b1e546d2b873f052f6a2d8a0d1a" + "versions.yml:md5,04400316552e6253e0008f052b20d866" ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.2" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-06-04T14:48:03.354635622" + "timestamp": "2026-02-05T15:11:04.601791971" }, "skip_alignment = true - stub": { "content": [ @@ -1952,7 +2063,10 @@ ], [ - "/ngi-igenomes/testdata/nf-core/pipelines/rnaseq/3.15/reference/salmon.tar.gz" + + ], + [ + "[]" ], [ @@ -1967,18 +2081,14 @@ "/ngi-igenomes/testdata/nf-core/pipelines/rnaseq/3.15/reference/transcriptome.fasta" ], [ - "versions.yml:md5,71252f1a221be05593361acccb99506b", - "versions.yml:md5,80e9dd350be8cd4c11909d75c914757a", - "versions.yml:md5,cc5444e21efd35d6322702dbef835fb5", - "versions.yml:md5,cc8f32b7c37c35a075d38cb773004eaa", - "versions.yml:md5,ccf59b1e546d2b873f052f6a2d8a0d1a" + "versions.yml:md5,d475dace58c4e9b4911e8a60bda85041" ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.2" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-06-04T14:58:38.931672786" + "timestamp": "2026-02-05T15:18:33.384723589" }, "transcriptome = false - stub": { "content": [ @@ -2007,34 +2117,32 @@ ], [ - "/ngi-igenomes/testdata/nf-core/pipelines/rnaseq/3.15/reference/salmon.tar.gz" + ], [ - + "[]" ], [ ], [ + ], + [ + "[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]" ], [ "genome.transcripts.fa:md5,d41d8cd98f00b204e9800998ecf8427e" ], [ - "versions.yml:md5,71252f1a221be05593361acccb99506b", - "versions.yml:md5,80e9dd350be8cd4c11909d75c914757a", - "versions.yml:md5,918fe0b59c0986eb602ace85841c5ab3", - "versions.yml:md5,cc5444e21efd35d6322702dbef835fb5", - "versions.yml:md5,cc8f32b7c37c35a075d38cb773004eaa", - "versions.yml:md5,ccf59b1e546d2b873f052f6a2d8a0d1a" + "versions.yml:md5,d475dace58c4e9b4911e8a60bda85041" ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.2" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-06-04T14:55:12.976388984" + "timestamp": "2026-02-05T15:16:00.857080017" }, "skip_alignment = true": { "content": [ @@ -2042,7 +2150,7 @@ "/ngi-igenomes/testdata/nf-core/pipelines/rnaseq/3.15/reference/transcriptome.fasta" ], [ - "/ngi-igenomes/testdata/nf-core/pipelines/rnaseq/3.15/reference/salmon.tar.gz" + "[]" ], [ "genome_gfp.fasta:md5,e23e302af63736a199985a169fdac055" @@ -2078,18 +2186,17 @@ ], [ - "versions.yml:md5,04400316552e6253e0008f052b20d866", - "versions.yml:md5,71252f1a221be05593361acccb99506b", - "versions.yml:md5,80e9dd350be8cd4c11909d75c914757a", - "versions.yml:md5,cc5444e21efd35d6322702dbef835fb5", - "versions.yml:md5,ccf59b1e546d2b873f052f6a2d8a0d1a" + + ], + [ + "versions.yml:md5,04400316552e6253e0008f052b20d866" ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.2" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-06-04T14:50:56.910297541" + "timestamp": "2026-02-05T15:13:12.237316243" }, "skip_gtf_filter = true": { "content": [ @@ -2097,7 +2204,7 @@ "/ngi-igenomes/testdata/nf-core/pipelines/rnaseq/3.15/reference/transcriptome.fasta" ], [ - "/ngi-igenomes/testdata/nf-core/pipelines/rnaseq/3.15/reference/salmon.tar.gz" + "[]" ], [ "genome_gfp.fasta:md5,e23e302af63736a199985a169fdac055" @@ -2119,6 +2226,9 @@ ], [ + ], + [ + "[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]" ], [ @@ -2133,17 +2243,14 @@ ], [ - "versions.yml:md5,04400316552e6253e0008f052b20d866", - "versions.yml:md5,71252f1a221be05593361acccb99506b", - "versions.yml:md5,cc5444e21efd35d6322702dbef835fb5", - "versions.yml:md5,ccf59b1e546d2b873f052f6a2d8a0d1a" + "versions.yml:md5,04400316552e6253e0008f052b20d866" ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.2" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-06-04T14:50:09.889765699" + "timestamp": "2026-02-05T15:12:40.806443339" }, "hisat2_index = false - stub": { "content": [ @@ -2163,7 +2270,7 @@ "genome_transcriptome.gtf:md5,d41d8cd98f00b204e9800998ecf8427e" ], [ - + "[]" ], [ @@ -2175,10 +2282,13 @@ ], [ - + "[complete_ref_lens.bin, ctable.bin, ctg_offsets.bin, duplicate_clusters.tsv, info.json, mphf.bin, pos.bin, pre_indexing.log, rank.bin, refAccumLengths.bin, ref_indexing.log, reflengths.bin, refseq.bin, seq.bin, versionInfo.json]" ], [ + ], + [ + "genome_transcriptome.splice_sites.txt:md5,d41d8cd98f00b204e9800998ecf8427e" ], [ @@ -2187,18 +2297,14 @@ "/ngi-igenomes/testdata/nf-core/pipelines/rnaseq/3.15/reference/transcriptome.fasta" ], [ - "versions.yml:md5,71252f1a221be05593361acccb99506b", - "versions.yml:md5,80e9dd350be8cd4c11909d75c914757a", - "versions.yml:md5,cc5444e21efd35d6322702dbef835fb5", - "versions.yml:md5,cc8f32b7c37c35a075d38cb773004eaa", - "versions.yml:md5,ccf59b1e546d2b873f052f6a2d8a0d1a" + "versions.yml:md5,d475dace58c4e9b4911e8a60bda85041" ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.2" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-06-04T14:56:44.165842743" + "timestamp": "2026-02-05T15:17:01.422677699" }, "skip_bbsplit - stub": { "content": [ @@ -2210,7 +2316,24 @@ "genome_transcriptome.gtf:md5,d41d8cd98f00b204e9800998ecf8427e" ], "10": [ - + [ + "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" + ] ], "11": [ @@ -2219,16 +2342,16 @@ ], "13": [ - "/ngi-igenomes/testdata/nf-core/pipelines/rnaseq/3.15/reference/salmon.tar.gz" + ], "14": [ - + "/ngi-igenomes/testdata/nf-core/pipelines/rnaseq/3.15/reference/salmon.tar.gz" ], "15": [ - "versions.yml:md5,71252f1a221be05593361acccb99506b", - "versions.yml:md5,80e9dd350be8cd4c11909d75c914757a", - "versions.yml:md5,cc8f32b7c37c35a075d38cb773004eaa", - "versions.yml:md5,ccf59b1e546d2b873f052f6a2d8a0d1a" + + ], + "16": [ + "versions.yml:md5,d475dace58c4e9b4911e8a60bda85041" ], "2": [ "genome_transcriptome.fasta.fai:md5,d41d8cd98f00b204e9800998ecf8427e" @@ -2256,6 +2379,9 @@ ], "bbsplit_index": [ + ], + "bowtie2_index": [ + ], "chrom_sizes": [ "genome_transcriptome.fasta.sizes:md5,d41d8cd98f00b204e9800998ecf8427e" @@ -2294,133 +2420,37 @@ ], "star_index": [ - + [ + "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" + ] ], "transcript_fasta": [ "/ngi-igenomes/testdata/nf-core/pipelines/rnaseq/3.15/reference/transcriptome.fasta" ], "versions": [ - "versions.yml:md5,71252f1a221be05593361acccb99506b", - "versions.yml:md5,80e9dd350be8cd4c11909d75c914757a", - "versions.yml:md5,cc8f32b7c37c35a075d38cb773004eaa", - "versions.yml:md5,ccf59b1e546d2b873f052f6a2d8a0d1a" + "versions.yml:md5,d475dace58c4e9b4911e8a60bda85041" ] } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.4" - }, - "timestamp": "2025-01-22T16:25:54.053589157" - }, - "use_sentieon_star = true": { - "content": [ - [ - "/ngi-igenomes/testdata/nf-core/pipelines/rnaseq/3.15/reference/transcriptome.fasta" - ], - [ - "/ngi-igenomes/testdata/nf-core/pipelines/rnaseq/3.15/reference/salmon.tar.gz" - ], - [ - "genome_gfp.fasta:md5,e23e302af63736a199985a169fdac055" - ], - [ - "genome_gfp.gtf:md5,c98b12c302f15731bfc36bcf297cfe28" - ], - [ - "genome_gfp.fasta.fai:md5,8fa54c6bd2ea6a369efbb8ab4f30156a" - ], - [ - "genome_gfp.bed:md5,991993ebef1def1d5823632c21177ec3" - ], - [ - "genome_gfp.fasta.sizes:md5,9b755f8f349b14accefb4d859f84de26" - ], - [ - - ], - [ - - ], - [ - - ], - [ - - ], - [ - - ], - [ - - ], - [ - "versions.yml:md5,04400316552e6253e0008f052b20d866", - "versions.yml:md5,71252f1a221be05593361acccb99506b", - "versions.yml:md5,80e9dd350be8cd4c11909d75c914757a", - "versions.yml:md5,cc5444e21efd35d6322702dbef835fb5", - "versions.yml:md5,ccf59b1e546d2b873f052f6a2d8a0d1a" - ] - ], - "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.2" - }, - "timestamp": "2025-06-04T14:43:23.956364009" - }, - "use_sentieon_star - stub": { - "content": [ - [ - "genome_transcriptome.fasta.sizes:md5,d41d8cd98f00b204e9800998ecf8427e" - ], - [ - "genome_transcriptome.fasta.fai:md5,d41d8cd98f00b204e9800998ecf8427e" - ], - [ - "genome_transcriptome.fasta:md5,d41d8cd98f00b204e9800998ecf8427e" - ], - [ - "genome_transcriptome.bed:md5,d41d8cd98f00b204e9800998ecf8427e" - ], - [ - "genome_transcriptome.gtf:md5,d41d8cd98f00b204e9800998ecf8427e" - ], - [ - - ], - [ - - ], - [ - - ], - [ - "/ngi-igenomes/testdata/nf-core/pipelines/rnaseq/3.15/reference/salmon.tar.gz" - ], - [ - - ], - [ - - ], - [ - - ], - [ - "/ngi-igenomes/testdata/nf-core/pipelines/rnaseq/3.15/reference/transcriptome.fasta" - ], - [ - "versions.yml:md5,71252f1a221be05593361acccb99506b", - "versions.yml:md5,80e9dd350be8cd4c11909d75c914757a", - "versions.yml:md5,cc5444e21efd35d6322702dbef835fb5", - "versions.yml:md5,cc8f32b7c37c35a075d38cb773004eaa", - "versions.yml:md5,ccf59b1e546d2b873f052f6a2d8a0d1a" - ] - ], - "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.2" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-06-04T14:51:45.456290803" + "timestamp": "2026-02-05T15:14:28.695815078" } } \ No newline at end of file diff --git a/subworkflows/local/prepare_genome/tests/main.parabricks.nf.test b/subworkflows/local/prepare_genome/tests/main.parabricks.nf.test new file mode 100644 index 000000000..af04c53f6 --- /dev/null +++ b/subworkflows/local/prepare_genome/tests/main.parabricks.nf.test @@ -0,0 +1,146 @@ +nextflow_workflow { + + name "Test Subworkflow PREPARE_GENOME - Parabricks" + script "../main.nf" + workflow "PREPARE_GENOME" + config "./nextflow.config" + tag "gpu" + + test("use_parabricks_star = true") { + + when { + workflow { + """ + gencode = false + gffread_transcript_fasta = false + featurecounts_group_type = 'gene_biotype' + aligner = 'star_salmon' + pseudo_aligner = null + skip_gtf_filter = false + skip_bbsplit = true + ribo_removal_tool = null + skip_alignment = false + skip_pseudo_alignment = true + use_sentieon_star = false + use_parabricks_star = true + + input[0] = file(params.pipelines_testdata_base_path + 'reference/genome.fasta', checkIfExists: true) + input[1] = file(params.pipelines_testdata_base_path + 'reference/genes_with_empty_tid.gtf', checkIfExists: true) + input[2] = null // gff + input[3] = null // additional_fasta + input[4] = null // transcript_fasta + input[5] = null // gene_bed + input[6] = null // splicesites + input[7] = null // bbsplit_fasta_list + input[8] = null // sortmerna_fasta_list + input[9] = null // star_index + input[10] = null // rsem_index + input[11] = null // salmon_index + input[12] = null // kallisto_index + input[13] = null // hisat2_index + input[14] = null // bowtie2_index + input[15] = null // bbsplit_index + input[16] = null // sortmerna_index + input[17] = gencode + input[18] = gffread_transcript_fasta + input[19] = featurecounts_group_type + input[20] = aligner + input[21] = pseudo_aligner + input[22] = skip_gtf_filter + input[23] = skip_bbsplit + input[24] = ribo_removal_tool + input[25] = skip_alignment + input[26] = skip_pseudo_alignment + input[27] = use_sentieon_star + input[28] = use_parabricks_star + """ + } + } + + then { + assertAll( + { assert workflow.success}, + { assert snapshot( + workflow.out.transcript_fasta, + workflow.out.fasta, + workflow.out.gtf, + workflow.out.fai, + workflow.out.gene_bed, + workflow.out.chrom_sizes, + workflow.out.star_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.versions + ).match() } + ) + } + } + + test("use_parabricks_star = true - stub") { + + options "-stub" + + when { + workflow { + """ + gencode = false + gffread_transcript_fasta = false + featurecounts_group_type = 'gene_biotype' + aligner = 'star_salmon' + pseudo_aligner = null + skip_gtf_filter = false + skip_bbsplit = true + ribo_removal_tool = null + skip_alignment = false + skip_pseudo_alignment = true + use_sentieon_star = false + use_parabricks_star = true + + input[0] = file(params.pipelines_testdata_base_path + 'reference/genome.fasta', checkIfExists: true) + input[1] = file(params.pipelines_testdata_base_path + 'reference/genes_with_empty_tid.gtf', checkIfExists: true) + input[2] = null // gff + input[3] = null // additional_fasta + input[4] = null // transcript_fasta + input[5] = null // gene_bed + input[6] = null // splicesites + input[7] = null // bbsplit_fasta_list + input[8] = null // sortmerna_fasta_list + input[9] = null // star_index + input[10] = null // rsem_index + input[11] = null // salmon_index + input[12] = null // kallisto_index + input[13] = null // hisat2_index + input[14] = null // bowtie2_index + input[15] = null // bbsplit_index + input[16] = null // sortmerna_index + input[17] = gencode + input[18] = gffread_transcript_fasta + input[19] = featurecounts_group_type + input[20] = aligner + input[21] = pseudo_aligner + input[22] = skip_gtf_filter + input[23] = skip_bbsplit + input[24] = ribo_removal_tool + input[25] = skip_alignment + input[26] = skip_pseudo_alignment + input[27] = use_sentieon_star + input[28] = use_parabricks_star + """ + } + } + + then { + assertAll( + { assert workflow.success}, + { assert snapshot( + workflow.out.chrom_sizes, + workflow.out.fai, + workflow.out.fasta, + workflow.out.gene_bed, + workflow.out.gtf, + workflow.out.star_index.collect { path -> file(path).listFiles().collect { f -> f.getName() }.sort().toString() }, + workflow.out.transcript_fasta, + workflow.out.versions + ).match() } + ) + } + } +} diff --git a/subworkflows/local/prepare_genome/tests/main.parabricks.nf.test.snap b/subworkflows/local/prepare_genome/tests/main.parabricks.nf.test.snap new file mode 100644 index 000000000..5addbc8a2 --- /dev/null +++ b/subworkflows/local/prepare_genome/tests/main.parabricks.nf.test.snap @@ -0,0 +1,68 @@ +{ + "use_parabricks_star = true": { + "content": [ + [ + "genome.transcripts.fa:md5,adf2cb5733dd37ea27dead3b99ec7726" + ], + [ + "/ngi-igenomes/testdata/nf-core/pipelines/rnaseq/3.15/reference/genome.fasta" + ], + [ + "genes_with_empty_tid.filtered.gtf:md5,ef6fccd153a21c329670462d602ed2d0" + ], + [ + "genome.fasta.fai:md5,2cd76d936cbfa386b14154506c2041b2" + ], + [ + "genes_with_empty_tid.filtered.bed:md5,e507dc33673e76c32abe344f4dc07952" + ], + [ + "genome.fasta.sizes:md5,29218009212157c49dbc6596621ec780" + ], + [ + "[Genome, 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.9.3", + "nextflow": "25.10.3" + }, + "timestamp": "2026-02-09T12:05:21.682389751" + }, + "use_parabricks_star = true - stub": { + "content": [ + [ + "genome.fasta.sizes:md5,d41d8cd98f00b204e9800998ecf8427e" + ], + [ + "genome.fasta.fai:md5,d41d8cd98f00b204e9800998ecf8427e" + ], + [ + "/ngi-igenomes/testdata/nf-core/pipelines/rnaseq/3.15/reference/genome.fasta" + ], + [ + "genome.filtered.bed:md5,d41d8cd98f00b204e9800998ecf8427e" + ], + [ + "genome.filtered.gtf:md5,d41d8cd98f00b204e9800998ecf8427e" + ], + [ + "[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]" + ], + [ + "genome.transcripts.fa:md5,d41d8cd98f00b204e9800998ecf8427e" + ], + [ + + ] + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.3" + }, + "timestamp": "2026-02-09T12:05:43.914011531" + } +} \ No newline at end of file diff --git a/subworkflows/local/prepare_genome/tests/nextflow.config b/subworkflows/local/prepare_genome/tests/nextflow.config index fed8f030a..db0b75485 100644 --- a/subworkflows/local/prepare_genome/tests/nextflow.config +++ b/subworkflows/local/prepare_genome/tests/nextflow.config @@ -19,21 +19,3 @@ process { ext.args2 = '--no-same-owner' } } - -// Fix chown issue for the output star folder -docker.runOptions = '-u $(id -u):$(id -g)' - -// NOTE This is how pipeline users will use Sentieon in real world use -if (System.getenv('SENTIEON_LICSRVR_IP')) { - env.SENTIEON_LICENSE = "$SENTIEON_LICSRVR_IP" -} -//NOTE This should only happen in GitHub actions or nf-core MegaTests -if (System.getenv('SENTIEON_AUTH_MECH')) { - env.SENTIEON_AUTH_MECH = "$SENTIEON_AUTH_MECH" -} -if (secrets.SENTIEON_AUTH_DATA) { - env.SENTIEON_AUTH_DATA = secrets.SENTIEON_AUTH_DATA -} - -// NOTE This is how pipeline users will test out Sentieon with a license file -// nextflow secrets set SENTIEON_LICENSE_BASE64 \$(cat | base64 -w 0) diff --git a/subworkflows/local/quantify_rsem/main.nf b/subworkflows/local/quantify_rsem/main.nf deleted file mode 100644 index db5628136..000000000 --- a/subworkflows/local/quantify_rsem/main.nf +++ /dev/null @@ -1,58 +0,0 @@ -// -// Gene/transcript quantification with RSEM -// - -include { RSEM_CALCULATEEXPRESSION } from '../../../modules/nf-core/rsem/calculateexpression' -include { RSEM_MERGE_COUNTS } from '../../../modules/local/rsem_merge_counts' -include { SENTIEON_RSEMCALCULATEEXPRESSION } from '../../../modules/nf-core/sentieon/rsemcalculateexpression' - -workflow QUANTIFY_RSEM { - take: - reads // channel: [ val(meta), [ reads ] ] - FASTQ or BAM files - index // channel: /path/to/rsem/index/ - use_sentieon_star // boolean: determines whether RSEM is run with Sentieon accelerated STAR - - main: - - ch_versions = Channel.empty() - - // - // Quantify reads with RSEM - // - ch_rsem_out = null - if (use_sentieon_star){ - SENTIEON_RSEMCALCULATEEXPRESSION ( reads, index ) - ch_rsem_out = SENTIEON_RSEMCALCULATEEXPRESSION - } else { - RSEM_CALCULATEEXPRESSION ( reads, index ) - ch_rsem_out = RSEM_CALCULATEEXPRESSION - } - - ch_counts_gene = ch_rsem_out.out.counts_gene - ch_counts_transcript = ch_rsem_out.out.counts_transcript - ch_stat = ch_rsem_out.out.stat - ch_logs = ch_rsem_out.out.logs - ch_versions = ch_versions.mix(ch_rsem_out.out.versions.first()) - - // - // Merge counts across samples - // - RSEM_MERGE_COUNTS ( - ch_counts_gene.collect{it[1]}, // [meta, counts]: Collect the second element (counts files) in the channel across all samples - ch_counts_transcript.collect{it[1]} - ) - ch_versions = ch_versions.mix(RSEM_MERGE_COUNTS.out.versions) - - emit: - counts_gene = ch_counts_gene // channel: [ val(meta), counts ] - counts_transcript = ch_counts_transcript // channel: [ val(meta), counts ] - stat = ch_stat // channel: [ val(meta), stat ] - logs = ch_logs // channel: [ val(meta), logs ] - - merged_counts_gene = RSEM_MERGE_COUNTS.out.counts_gene // path: *.gene_counts.tsv - merged_tpm_gene = RSEM_MERGE_COUNTS.out.tpm_gene // path: *.gene_tpm.tsv - merged_counts_transcript = RSEM_MERGE_COUNTS.out.counts_transcript // path: *.transcript_counts.tsv - merged_tpm_transcript = RSEM_MERGE_COUNTS.out.tpm_transcript // path: *.transcript_tpm.tsv - - versions = ch_versions // channel: [ versions.yml ] -} diff --git a/subworkflows/local/quantify_rsem/nextflow.config b/subworkflows/local/quantify_rsem/nextflow.config deleted file mode 100644 index 0ade162ae..000000000 --- a/subworkflows/local/quantify_rsem/nextflow.config +++ /dev/null @@ -1,30 +0,0 @@ -if (!params.skip_alignment && params.aligner == 'star_rsem') { - process { - withName: '.*:QUANTIFY_RSEM:RSEM_CALCULATEEXPRESSION|.*:QUANTIFY_RSEM:SENTIEON_RSEMCALCULATEEXPRESSION' { - ext.args = [ - '--estimate-rspd', - '--seed 1' - ].join(' ').trim() - publishDir = [ - [ - path: { "${params.outdir}/${params.aligner}" }, - mode: params.publish_dir_mode, - pattern: "*.{stat,results}" - ], - [ - path: { "${params.outdir}/${params.aligner}/log" }, - mode: params.publish_dir_mode, - pattern: "*.log" - ] - ] - } - - withName: '.*:QUANTIFY_RSEM:RSEM_MERGE_COUNTS' { - publishDir = [ - path: { "${params.outdir}/${params.aligner}" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } - } -} diff --git a/subworkflows/local/quantify_rsem/tests/main.nf.test b/subworkflows/local/quantify_rsem/tests/main.nf.test deleted file mode 100644 index bfe278c87..000000000 --- a/subworkflows/local/quantify_rsem/tests/main.nf.test +++ /dev/null @@ -1,92 +0,0 @@ -nextflow_workflow { - - name "Test Workflow QUANTIFY_RSEM" - script "../main.nf" - workflow "QUANTIFY_RSEM" - config "./nextflow.config" - - test("homo_sapiens") { - tag "test" - setup { - run("RSEM_PREPAREREFERENCE") { - script "../../../../modules/nf-core/rsem/preparereference/main.nf" - process { - """ - input[0] = Channel.of(file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true)) - input[1] = Channel.of(file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true)) - """ - } - } - } - - when { - workflow { - """ - use_sentieon_star = false - - input[0] = Channel.of([ - [ id:'test', strandedness: 'forward' ], // meta map - file('https://raw.githubusercontent.com/nf-core/test-datasets/modules/data/' + 'genomics/homo_sapiens/illumina/bam/rsem.transcript.bam', checkIfExists: true) - ]) - input[1] = RSEM_PREPAREREFERENCE.out.index - input[2] = use_sentieon_star - """ - } - } - - then { - assertAll( - { assert workflow.success }, - { assert snapshot( - workflow.out.counts_gene, - workflow.out.counts_transcript, - workflow.out.stat, - workflow.out.merged_counts_gene, - workflow.out.merged_tpm_gene, - workflow.out.merged_counts_transcript, - workflow.out.merged_tpm_transcript, - workflow.out.versions - ).match()} - ) - } - } - - test("homo_sapiens - stub") { - - options "-stub" - - setup { - run("RSEM_PREPAREREFERENCE") { - script "../../../../modules/nf-core/rsem/preparereference/main.nf" - process { - """ - input[0] = Channel.of(file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true)) - input[1] = Channel.of(file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true)) - """ - } - } - } - - when { - workflow { - """ - use_sentieon_star = false - - input[0] = Channel.of([ - [ id:'test', strandedness: 'forward' ], // meta map - file('https://raw.githubusercontent.com/nf-core/test-datasets/modules/data/' + 'genomics/homo_sapiens/illumina/bam/rsem.transcript.bam', checkIfExists: true) - ]) - input[1] = RSEM_PREPAREREFERENCE.out.index - input[2] = use_sentieon_star - """ - } - } - - then { - assertAll( - { assert workflow.success }, - { assert snapshot(workflow.out).match()} - ) - } - } -} diff --git a/subworkflows/local/quantify_rsem/tests/main.nf.test.snap b/subworkflows/local/quantify_rsem/tests/main.nf.test.snap deleted file mode 100644 index 3c85e78c2..000000000 --- a/subworkflows/local/quantify_rsem/tests/main.nf.test.snap +++ /dev/null @@ -1,288 +0,0 @@ -{ - "homo_sapiens - sentieon - stub": { - "content": [ - { - "0": [ - [ - { - "id": "test", - "strandedness": "forward" - }, - "test.genes.results:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "1": [ - [ - { - "id": "test", - "strandedness": "forward" - }, - "test.isoforms.results:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "2": [ - [ - { - "id": "test", - "strandedness": "forward" - }, - "test.stat:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "3": [ - [ - { - "id": "test", - "strandedness": "forward" - }, - "test.log:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "4": [ - "rsem.merged.gene_counts.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" - ], - "5": [ - "rsem.merged.gene_tpm.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" - ], - "6": [ - "rsem.merged.transcript_counts.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" - ], - "7": [ - "rsem.merged.transcript_tpm.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" - ], - "8": [ - "versions.yml:md5,2aa5252eb2ffb409cf556a165d40f8a9", - "versions.yml:md5,773c15c4ecb7d486a4bdd8ef73e7ac5d" - ], - "counts_gene": [ - [ - { - "id": "test", - "strandedness": "forward" - }, - "test.genes.results:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "counts_transcript": [ - [ - { - "id": "test", - "strandedness": "forward" - }, - "test.isoforms.results:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "logs": [ - [ - { - "id": "test", - "strandedness": "forward" - }, - "test.log:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "merged_counts_gene": [ - "rsem.merged.gene_counts.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" - ], - "merged_counts_transcript": [ - "rsem.merged.transcript_counts.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" - ], - "merged_tpm_gene": [ - "rsem.merged.gene_tpm.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" - ], - "merged_tpm_transcript": [ - "rsem.merged.transcript_tpm.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" - ], - "stat": [ - [ - { - "id": "test", - "strandedness": "forward" - }, - "test.stat:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "versions": [ - "versions.yml:md5,2aa5252eb2ffb409cf556a165d40f8a9", - "versions.yml:md5,773c15c4ecb7d486a4bdd8ef73e7ac5d" - ] - } - ], - "meta": { - "nf-test": "0.9.3", - "nextflow": "25.04.6" - }, - "timestamp": "2025-11-27T16:26:57.604104651" - }, - "homo_sapiens - stub": { - "content": [ - { - "0": [ - [ - { - "id": "test", - "strandedness": "forward" - }, - "test.genes.results:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "1": [ - [ - { - "id": "test", - "strandedness": "forward" - }, - "test.isoforms.results:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "2": [ - [ - { - "id": "test", - "strandedness": "forward" - }, - "test.stat:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "3": [ - [ - { - "id": "test", - "strandedness": "forward" - }, - "test.log:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "4": [ - "rsem.merged.gene_counts.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" - ], - "5": [ - "rsem.merged.gene_tpm.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" - ], - "6": [ - "rsem.merged.transcript_counts.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" - ], - "7": [ - "rsem.merged.transcript_tpm.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" - ], - "8": [ - "versions.yml:md5,2aa5252eb2ffb409cf556a165d40f8a9", - "versions.yml:md5,ae1676b60b6335fff8f1188288103a1c" - ], - "counts_gene": [ - [ - { - "id": "test", - "strandedness": "forward" - }, - "test.genes.results:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "counts_transcript": [ - [ - { - "id": "test", - "strandedness": "forward" - }, - "test.isoforms.results:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "logs": [ - [ - { - "id": "test", - "strandedness": "forward" - }, - "test.log:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "merged_counts_gene": [ - "rsem.merged.gene_counts.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" - ], - "merged_counts_transcript": [ - "rsem.merged.transcript_counts.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" - ], - "merged_tpm_gene": [ - "rsem.merged.gene_tpm.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" - ], - "merged_tpm_transcript": [ - "rsem.merged.transcript_tpm.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" - ], - "stat": [ - [ - { - "id": "test", - "strandedness": "forward" - }, - "test.stat:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "versions": [ - "versions.yml:md5,2aa5252eb2ffb409cf556a165d40f8a9", - "versions.yml:md5,ae1676b60b6335fff8f1188288103a1c" - ] - } - ], - "meta": { - "nf-test": "0.9.3", - "nextflow": "25.04.6" - }, - "timestamp": "2025-11-27T16:26:03.792661891" - }, - "homo_sapiens": { - "content": [ - [ - [ - { - "id": "test", - "strandedness": "forward" - }, - "test.genes.results:md5,c7ec226f76736ea805771e73553ae359" - ] - ], - [ - [ - { - "id": "test", - "strandedness": "forward" - }, - "test.isoforms.results:md5,99f7f80aa505b44ca429fdebbd7dd5d8" - ] - ], - [ - [ - { - "id": "test", - "strandedness": "forward" - }, - [ - "test.cnt:md5,76249e6b2f3c104f414aae596ba2c2f4", - "test.model:md5,a7a4bc1734918ef5848604e3362b83e2", - "test.theta:md5,de2e4490c98cc5383a86ae8225fd0a28" - ] - ] - ], - [ - "rsem.merged.gene_counts.tsv:md5,f3b586000c97c89aec45360772e73df1" - ], - [ - "rsem.merged.gene_tpm.tsv:md5,e6ae3dfa9913a7c15b705ec27c376212" - ], - [ - "rsem.merged.transcript_counts.tsv:md5,235c002b811360183494a2aac74d1f5b" - ], - [ - "rsem.merged.transcript_tpm.tsv:md5,d38f22667e3b8012f1d783b8d5159ccc" - ], - [ - "versions.yml:md5,2aa5252eb2ffb409cf556a165d40f8a9", - "versions.yml:md5,ae1676b60b6335fff8f1188288103a1c" - ] - ], - "meta": { - "nf-test": "0.9.3", - "nextflow": "25.04.6" - }, - "timestamp": "2025-11-27T17:10:37.825495549" - } -} diff --git a/subworkflows/local/quantify_rsem/tests/main.sentieon.nf.test b/subworkflows/local/quantify_rsem/tests/main.sentieon.nf.test deleted file mode 100644 index da021c635..000000000 --- a/subworkflows/local/quantify_rsem/tests/main.sentieon.nf.test +++ /dev/null @@ -1,46 +0,0 @@ -nextflow_workflow { - - name "Test Workflow QUANTIFY_RSEM - Sentieon" - script "../main.nf" - workflow "QUANTIFY_RSEM" - config "./nextflow.config" - - test("homo_sapiens - sentieon - stub") { - - options "-stub" - - setup { - run("SENTIEON_RSEMPREPAREREFERENCE") { - script "../../../../modules/nf-core/sentieon/rsempreparereference/main.nf" - process { - """ - input[0] = Channel.of(file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true)) - input[1] = Channel.of(file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true)) - """ - } - } - } - - when { - workflow { - """ - use_sentieon_star = true - - input[0] = Channel.of([ - [ id:'test', strandedness: 'forward' ], // meta map - file('https://raw.githubusercontent.com/nf-core/test-datasets/modules/data/' + 'genomics/homo_sapiens/illumina/bam/rsem.transcript.bam', checkIfExists: true) - ]) - input[1] = SENTIEON_RSEMPREPAREREFERENCE.out.index - input[2] = use_sentieon_star - """ - } - } - - then { - assertAll( - { assert workflow.success }, - { assert snapshot(workflow.out).match()} - ) - } - } -} diff --git a/subworkflows/local/quantify_rsem/tests/main.sentieon.nf.test.snap b/subworkflows/local/quantify_rsem/tests/main.sentieon.nf.test.snap deleted file mode 100644 index b3d71efd8..000000000 --- a/subworkflows/local/quantify_rsem/tests/main.sentieon.nf.test.snap +++ /dev/null @@ -1,117 +0,0 @@ -{ - "homo_sapiens - sentieon - stub": { - "content": [ - { - "0": [ - [ - { - "id": "test", - "strandedness": "forward" - }, - "test.genes.results:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "1": [ - [ - { - "id": "test", - "strandedness": "forward" - }, - "test.isoforms.results:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "2": [ - [ - { - "id": "test", - "strandedness": "forward" - }, - "test.stat:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "3": [ - [ - { - "id": "test", - "strandedness": "forward" - }, - "test.log:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "4": [ - "rsem.merged.gene_counts.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" - ], - "5": [ - "rsem.merged.gene_tpm.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" - ], - "6": [ - "rsem.merged.transcript_counts.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" - ], - "7": [ - "rsem.merged.transcript_tpm.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" - ], - "8": [ - "versions.yml:md5,2aa5252eb2ffb409cf556a165d40f8a9", - "versions.yml:md5,773c15c4ecb7d486a4bdd8ef73e7ac5d" - ], - "counts_gene": [ - [ - { - "id": "test", - "strandedness": "forward" - }, - "test.genes.results:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "counts_transcript": [ - [ - { - "id": "test", - "strandedness": "forward" - }, - "test.isoforms.results:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "logs": [ - [ - { - "id": "test", - "strandedness": "forward" - }, - "test.log:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "merged_counts_gene": [ - "rsem.merged.gene_counts.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" - ], - "merged_counts_transcript": [ - "rsem.merged.transcript_counts.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" - ], - "merged_tpm_gene": [ - "rsem.merged.gene_tpm.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" - ], - "merged_tpm_transcript": [ - "rsem.merged.transcript_tpm.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" - ], - "stat": [ - [ - { - "id": "test", - "strandedness": "forward" - }, - "test.stat:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "versions": [ - "versions.yml:md5,2aa5252eb2ffb409cf556a165d40f8a9", - "versions.yml:md5,773c15c4ecb7d486a4bdd8ef73e7ac5d" - ] - } - ], - "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.6" - }, - "timestamp": "2025-09-15T16:59:19.581004" - } -} diff --git a/subworkflows/local/quantify_rsem/tests/nextflow.config b/subworkflows/local/quantify_rsem/tests/nextflow.config deleted file mode 100644 index 6318bc5a8..000000000 --- a/subworkflows/local/quantify_rsem/tests/nextflow.config +++ /dev/null @@ -1,14 +0,0 @@ -// NOTE This is how pipeline users will use Sentieon in real world use -if (System.getenv('SENTIEON_LICSRVR_IP')) { - env.SENTIEON_LICENSE = "$SENTIEON_LICSRVR_IP" -} -//NOTE This should only happen in GitHub actions or nf-core MegaTests -if (System.getenv('SENTIEON_AUTH_MECH')) { - env.SENTIEON_AUTH_MECH = "$SENTIEON_AUTH_MECH" -} -if (secrets.SENTIEON_AUTH_DATA) { - env.SENTIEON_AUTH_DATA = secrets.SENTIEON_AUTH_DATA -} - -// NOTE This is how pipeline users will test out Sentieon with a license file -// nextflow secrets set SENTIEON_LICENSE_BASE64 \$(cat | base64 -w 0) diff --git a/subworkflows/local/utils_nfcore_rnaseq_pipeline/main.nf b/subworkflows/local/utils_nfcore_rnaseq_pipeline/main.nf index a94cac101..5ef56fe5f 100644 --- a/subworkflows/local/utils_nfcore_rnaseq_pipeline/main.nf +++ b/subworkflows/local/utils_nfcore_rnaseq_pipeline/main.nf @@ -34,15 +34,13 @@ workflow PIPELINE_INITIALISATION { 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 + _input // string: Path to input samplesheet help // boolean: Display help message and exit help_full // boolean: Show the full help message show_hidden // boolean: Show hidden parameters in the help message main: - ch_versions = channel.empty() - // // Print version and exit if required and dump pipeline parameters to JSON file // @@ -56,15 +54,16 @@ workflow PIPELINE_INITIALISATION { // // Validate parameters and generate parameter summary to stdout // + def colors = logColours(monochrome_logs) before_text = """ --\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/rnaseq ${workflow.manifest.version}\033[0m --\033[2m----------------------------------------------------\033[0m- +-${colors.dim}----------------------------------------------------${colors.reset}- + ${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} nf-core/rnaseq ${workflow.manifest.version}${colors.reset} +-${colors.dim}----------------------------------------------------${colors.reset}- """ after_text = """${workflow.manifest.doi ? "\n* The pipeline\n" : ""}${workflow.manifest.doi.tokenize(",").collect { doi -> " https://doi.org/${doi.trim().replace('https://doi.org/','')}"}.join("\n")}${workflow.manifest.doi ? "\n" : ""} * The nf-core framework @@ -98,9 +97,6 @@ workflow PIPELINE_INITIALISATION { // Custom validation for pipeline parameters // validateInputParameters() - - emit: - versions = ch_versions } /* @@ -185,28 +181,46 @@ workflow PIPELINE_COMPLETION { // def checkSamplesAfterGrouping(input) { // Handle both old format [id, metas, fastqs] and new format with BAMs [id, metas, fastqs, genome_bams, transcriptome_bams] - def id = input[0] + def _id = input[0] def metas = input[1] def fastqs = input[2] def genome_bams = input.size() > 3 ? input[3] : null def transcriptome_bams = input.size() > 4 ? input[4] : null // Check that multiple runs of the same sample are of the same strandedness - def strandedness_ok = metas.collect{ it.strandedness }.unique().size == 1 + def strandedness_ok = metas.collect{ meta -> meta.strandedness }.unique().size == 1 if (!strandedness_ok) { error("Please check input samplesheet -> Multiple runs of a sample must have the same strandedness!: ${metas[0].id}") } + // Check that multiple runs of the same sample have the same sequencing platform + def seq_platform_ok = metas.collect { meta -> meta.seq_platform ?: '' }.unique().size == 1 + if (!seq_platform_ok) { + error("Please check input samplesheet -> Multiple runs of a sample must have the same seq_platform!: ${metas[0].id}") + } + + // Check that multiple runs of the same sample have the same sequencing center + def seq_center_ok = metas.collect { meta -> meta.seq_center ?: '' }.unique().size == 1 + if (!seq_center_ok) { + error("Please check input samplesheet -> Multiple runs of a sample must have the same seq_center!: ${metas[0].id}") + } + // Check that multiple runs of the same sample are of the same datatype i.e. single-end / paired-end def endedness_ok = metas.collect{ meta -> meta.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}") } + // Check that multiple runs of the same sample are not mixed compressed/uncompressed + def compression_ok = fastqs.flatten().collect{ fq -> fq.name.endsWith('.gz') }.unique().size == 1 + if (!compression_ok) { + error("Please check input samplesheet -> Multiple runs of a sample must not mix compressed and uncompressed FASTQ files: ${metas[0].id}") + } + // Return format depends on whether BAM data was provided if (genome_bams != null || transcriptome_bams != null) { - def genome_bam = genome_bams?.find { it != null } - def transcriptome_bam = transcriptome_bams?.find { it != null } + def genome_bam = genome_bams?.find { bam -> bam != null } + def transcriptome_bam = transcriptome_bams?.find { bam -> bam != null } // Add BAM flags and original paths to meta def meta_with_bams = metas[0] + [ @@ -236,14 +250,19 @@ def validateInputParameters() { genomeExistsError() + def pseudo_index_provided = ( + (params.pseudo_aligner == 'salmon' && params.salmon_index) || + (params.pseudo_aligner == 'kallisto' && params.kallisto_index) + ) + if ( !params.fasta && ( ! params.skip_alignment || // Alignment needs fasta - ! params.transcript_fasta // Dynamically making a transcript fasta needs the fasta + (! params.transcript_fasta && !pseudo_index_provided) // Dynamically making a transcript fasta needs the fasta (unless a pre-built index is provided) ) ) { - error("Genome fasta file not specified with e.g. '--fasta genome.fa' or via a detectable config file. You must supply a genome FASTA file or use --skip_alignment and provide your own transcript fasta using --transcript_fasta for use in quantification.") + error("Genome fasta file not specified with e.g. '--fasta genome.fa' or via a detectable config file. You must supply a genome FASTA file, use --skip_alignment with --transcript_fasta, or use --skip_alignment with a pre-built pseudo-aligner index (--salmon_index / --kallisto_index).") } if (!params.gtf && !params.gff) { @@ -287,8 +306,20 @@ def validateInputParameters() { error("Please provide either --bbsplit_fasta_list / --bbsplit_index to run BBSplit.") } - if (params.remove_ribo_rna && !params.ribo_database_manifest) { - error("Please provide --ribo_database_manifest to remove ribosomal RNA with SortMeRNA.") + if (params.remove_ribo_rna && params.ribo_removal_tool in ['sortmerna', 'bowtie2'] && !params.ribo_database_manifest) { + error("Please provide --ribo_database_manifest to remove ribosomal RNA with SortMeRNA or Bowtie2.") + } + + if (params.use_parabricks_star && (params.arm ?: false)) { + error("Parabricks (--use_parabricks_star) is not supported on ARM architecture. Parabricks requires an x86_64 host with NVIDIA GPUs.") + } + + if (params.use_parabricks_star && params.use_sentieon_star) { + error("Cannot use both --use_parabricks_star and --use_sentieon_star. Please choose one accelerator.") + } + + if (params.use_parabricks_star && (params.prokaryotic ?: false)) { + error("Parabricks rna_fq2bam does not support --sjdbGTFfeatureExon CDS, which is required for prokaryotic alignment. Please use standard STAR instead.") } if (params.with_umi && !params.skip_umi_extract) { @@ -313,15 +344,20 @@ def validateInputParameters() { // Checks when running --aligner star_rsem if (!params.skip_alignment && params.aligner == 'star_rsem') { - if (params.with_umi) { - rsemUmiError() - } if (params.rsem_index && params.star_index) { rsemStarIndexWarn() } if (params.aligner == 'star_rsem' && params.extra_star_align_args) { rsemStarExtraArgumentsWarn() } + if (params.prokaryotic || params.gffread_transcript_fasta) { + rsemProkaryoticError() + } + } + + // Checks for prokaryotic mode with untested aligners + if ((params.prokaryotic || params.gffread_transcript_fasta) && params.aligner == 'hisat2') { + untestedProkaryoticAlignerWarn() } // Warn if --additional_fasta provided with aligner index @@ -341,32 +377,24 @@ def validateInputParameters() { } } - //General checks for if contaminant screening is used - if (params.contaminant_screening) { - if (params.aligner == 'star_rsem') { - error("Contaminant screening cannot be done with --aligner star_rsem since unaligned reads are not saved. Please use --aligner star_salmon or --aligner hisat2.") - } + // Check that Kraken/Bracken database provided if using kraken2/bracken + if (params.contaminant_screening in ['kraken2', 'kraken2_bracken'] && !params.kraken_db) { + error("Contaminant screening set to kraken2 but no database was provided. Please provide a database with the --kraken_db option.") } - // Check that Kraken/Bracken database provided if using kraken2/bracken - if (params.contaminant_screening in ['kraken2', 'kraken2_bracken']) { - if (!params.kraken_db) { - error("Contaminant screening set to kraken2 but not database is provided. Please provide a database with the --kraken_db option.") + // Check that Sylph database and taxonomy is provided if using Sylph + if (params.contaminant_screening == 'sylph') { + if (!params.sylph_db) { + error("Contaminant screening is set to Sylph but no database was provided. Please provide a database with the --sylph_db option.") } - // Check that Kraken/Bracken parameters are not provided when Kraken2 is not being used - } else { - if (!params.bracken_precision.equals('S')) { - brackenPrecisionWithoutKrakenDBWarn() - } - - if (params.save_kraken_assignments || params.save_kraken_unassigned || params.kraken_db) { - krakenArgumentsWithoutKrakenDBWarn() + if (!params.sylph_taxonomy) { + error("Contaminant screening is set to Sylph but no taxonomy was provided. Please provide a taxonomy with the --sylph_taxonomy option.") } } // Check which RSeQC modules we are running def valid_rseqc_modules = ['bam_stat', 'inner_distance', 'infer_experiment', 'junction_annotation', 'junction_saturation', 'read_distribution', 'read_duplication', 'tin'] - def rseqc_modules = params.rseqc_modules ? params.rseqc_modules.split(',').collect{ it.trim().toLowerCase() } : [] + def rseqc_modules = params.rseqc_modules ? params.rseqc_modules.split(',').collect{ module -> module.trim().toLowerCase() } : [] if ((valid_rseqc_modules + rseqc_modules).unique().size() != valid_rseqc_modules.size()) { error("Invalid option: ${params.rseqc_modules}. Valid options for '--rseqc_modules': ${valid_rseqc_modules.join(', ')}") } @@ -545,19 +573,6 @@ def skipAlignmentWarn() { "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" } -// -// Print a warning if using '--aligner star_rsem' and '--with_umi' -// -def rsemUmiError() { - def error_string = "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + - " When using '--aligner star_rsem', STAR is run by RSEM itself and so it is\n" + - " not possible to remove UMIs before the quantification.\n\n" + - " If you would like to remove UMI barcodes using the '--with_umi' option\n" + - " please use either '--aligner star_salmon' or '--aligner hisat2'.\n" + - "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" - error(error_string) -} - // // Print a warning if using '--aligner star_rsem' and providing both '--rsem_index' and '--star_index' // @@ -585,6 +600,36 @@ def rsemStarExtraArgumentsWarn() { "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" } +// +// Print an error if using '--aligner star_rsem' with prokaryotic settings +// +def rsemProkaryoticError() { + def error_string = "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + + " '--aligner star_rsem' is incompatible with prokaryotic RNA-seq settings.\n\n" + + " RSEM's rsem-prepare-reference cannot handle GTF/GFF files that use CDS\n" + + " features instead of exon features, which is typical for prokaryotic\n" + + " annotations.\n\n" + + " Please use one of the following aligners instead:\n" + + " - '--aligner star_salmon' (alternative with '-profile prokaryotic')\n" + + " - '--aligner bowtie2_salmon' (default for '-profile prokaryotic')\n" + + "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" + error(error_string) +} + +// +// Print a warning if using prokaryotic settings with an untested aligner +// +def untestedProkaryoticAlignerWarn() { + log.warn "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + + " Using prokaryotic settings with '--aligner hisat2'.\n\n" + + " This aligner combination has not been extensively tested with\n" + + " prokaryotic data. The recommended aligners for prokaryotic RNA-seq are:\n" + + " - '--aligner bowtie2_salmon' (default for '-profile prokaryotic')\n" + + " - '--aligner star_salmon'\n\n" + + " Proceed with caution and verify your results.\n" + + "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" +} + // // Print a warning if using '--additional_fasta' and '--_index' // @@ -602,26 +647,6 @@ def additionaFastaIndexWarn(index) { "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" } -// -// Print a warning if --save_kraken_assignments or --save_kraken_unassigned is provided without --kraken_db -// -def krakenArgumentsWithoutKrakenDBWarn() { - log.warn "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + - " 'Kraken2 related arguments have been provided without setting contaminant\n" + - " screening to Kraken2. Kraken2 is not being run so these will not be used.\n" + - "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" -} - -/// -/// Print a warning if --bracken-precision is provided without --kraken_db -/// -def brackenPrecisionWithoutKrakenDBWarn() { - log.warn "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + - " '--bracken-precision' parameter has been provided without Kraken2 contaminant screening.\n" + - " Bracken will not run so precision will not be set.\n" + - "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" -} - // // Function to generate an error if contigs in genome fasta file > 512 Mbp // @@ -730,9 +755,9 @@ def mapBamToPublishedPath(bam_path, sample_id, aligner, outdir) { def rnaseqSummary(monochrome_logs=true, pass_mapped_reads=[:], pass_trimmed_reads=[:], pass_strand_check=[:]) { def colors = logColours(monochrome_logs) - def fail_mapped_count = pass_mapped_reads.count { key, value -> value == false } - def fail_trimmed_count = pass_trimmed_reads.count { key, value -> value == false } - def fail_strand_count = pass_strand_check.count { key, value -> value == false } + def fail_mapped_count = pass_mapped_reads.count { _key, value -> value == false } + def fail_trimmed_count = pass_trimmed_reads.count { _key, value -> value == false } + def fail_strand_count = pass_strand_check.count { _key, value -> value == false } if (workflow.success) { def color = colors.green def status = [] diff --git a/subworkflows/local/utils_nfcore_rnaseq_pipeline/tests/main.function.nf.test b/subworkflows/local/utils_nfcore_rnaseq_pipeline/tests/main.function.nf.test index 036132a49..156308cf6 100644 --- a/subworkflows/local/utils_nfcore_rnaseq_pipeline/tests/main.function.nf.test +++ b/subworkflows/local/utils_nfcore_rnaseq_pipeline/tests/main.function.nf.test @@ -281,21 +281,6 @@ nextflow_function { - test("Test Function rsemUmiError") { - - function "rsemUmiError" - - then { - assertAll( - { assert function.failed }, - { assert snapshot(function.result).match() } - ) - } - - } - - - test("Test Function rsemStarIndexWarn") { function "rsemStarIndexWarn" diff --git a/subworkflows/local/utils_nfcore_rnaseq_pipeline/tests/main.function.nf.test.snap b/subworkflows/local/utils_nfcore_rnaseq_pipeline/tests/main.function.nf.test.snap index b0e9e611d..6aec8360c 100644 --- a/subworkflows/local/utils_nfcore_rnaseq_pipeline/tests/main.function.nf.test.snap +++ b/subworkflows/local/utils_nfcore_rnaseq_pipeline/tests/main.function.nf.test.snap @@ -37,14 +37,6 @@ }, "timestamp": "2024-03-06T14:33:04.677913" }, - "Test Function rsemUmiError": { - "content": null, - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-03-06T14:33:26.903306" - }, "Test Function checkSamplesAfterGrouping invalid strandedness": { "content": null, "meta": { diff --git a/subworkflows/nf-core/bam_dedup_stats_samtools_umicollapse/main.nf b/subworkflows/nf-core/bam_dedup_stats_samtools_umicollapse/main.nf index 54c42b986..68c11f711 100644 --- a/subworkflows/nf-core/bam_dedup_stats_samtools_umicollapse/main.nf +++ b/subworkflows/nf-core/bam_dedup_stats_samtools_umicollapse/main.nf @@ -11,20 +11,15 @@ workflow BAM_DEDUP_STATS_SAMTOOLS_UMICOLLAPSE { ch_bam_bai // channel: [ val(meta), path(bam), path(bai/csi) ] main: - - ch_versions = Channel.empty() - // // umicollapse in bam mode (thus hardcode mode input channel to 'bam') // UMICOLLAPSE ( ch_bam_bai, channel.value( 'bam' )) - ch_versions = ch_versions.mix(UMICOLLAPSE.out.versions.first()) // // Index BAM file and run samtools stats, flagstat and idxstats // SAMTOOLS_INDEX ( UMICOLLAPSE.out.bam ) - ch_versions = ch_versions.mix(SAMTOOLS_INDEX.out.versions.first()) ch_bam_bai_dedup = UMICOLLAPSE.out.bam .join(SAMTOOLS_INDEX.out.bai, by: [0], remainder: true) @@ -39,7 +34,6 @@ workflow BAM_DEDUP_STATS_SAMTOOLS_UMICOLLAPSE { } BAM_STATS_SAMTOOLS ( ch_bam_bai_dedup, [ [:], [] ] ) - ch_versions = ch_versions.mix(BAM_STATS_SAMTOOLS.out.versions) emit: bam = UMICOLLAPSE.out.bam // channel: [ val(meta), path(bam) ] @@ -50,6 +44,4 @@ workflow BAM_DEDUP_STATS_SAMTOOLS_UMICOLLAPSE { stats = BAM_STATS_SAMTOOLS.out.stats // channel: [ val(meta), path(stats) ] flagstat = BAM_STATS_SAMTOOLS.out.flagstat // channel: [ val(meta), path(flagstat) ] idxstats = BAM_STATS_SAMTOOLS.out.idxstats // channel: [ val(meta), path(idxstats) ] - - versions = ch_versions // channel: [ path(versions.yml) ] } diff --git a/subworkflows/nf-core/bam_dedup_stats_samtools_umicollapse/tests/main.nf.test b/subworkflows/nf-core/bam_dedup_stats_samtools_umicollapse/tests/main.nf.test index 53041d20a..f77f4665e 100644 --- a/subworkflows/nf-core/bam_dedup_stats_samtools_umicollapse/tests/main.nf.test +++ b/subworkflows/nf-core/bam_dedup_stats_samtools_umicollapse/tests/main.nf.test @@ -5,6 +5,20 @@ nextflow_workflow { script "../main.nf" workflow "BAM_DEDUP_STATS_SAMTOOLS_UMICOLLAPSE" + tag "subworkflows" + tag "subworkflows_nfcore" + tag "subworkflows/bam_dedup_stats_samtools_umicollapse" + tag "subworkflows/bam_stats_samtools" + tag "bam_stats_samtools" + tag "bwa/index" + tag "bwa/mem" + tag "samtools" + tag "samtools/index" + tag "samtools/stats" + tag "samtools/idxstats" + tag "samtools/flagstat" + tag "umicollapse" + tag "umitools/extract" test("sarscov2_bam_bai") { @@ -28,7 +42,6 @@ nextflow_workflow { assertAll( { assert workflow.success}, { assert snapshot(bam(workflow.out.bam[0][1]).getSamLinesMD5()).match("test_bam_dedup_stats_samtools_umicollapse_bam")}, // separate, because of linting error otherwise - { assert snapshot(workflow.out.versions).match("test_bam_dedup_stats_samtools_umicollapse_versions") }, { assert workflow.out.bam.get(0).get(1) ==~ ".*.bam"}, { assert workflow.out.bai.get(0).get(1) ==~ ".*.bai"}, { assert workflow.out.dedup_stats.get(0).get(1) ==~ ".*_UMICollapse.log"}, @@ -40,4 +53,3 @@ nextflow_workflow { } } - diff --git a/subworkflows/nf-core/bam_dedup_stats_samtools_umicollapse/tests/main.nf.test.snap b/subworkflows/nf-core/bam_dedup_stats_samtools_umicollapse/tests/main.nf.test.snap index 9694c6d5f..a6c620958 100644 --- a/subworkflows/nf-core/bam_dedup_stats_samtools_umicollapse/tests/main.nf.test.snap +++ b/subworkflows/nf-core/bam_dedup_stats_samtools_umicollapse/tests/main.nf.test.snap @@ -6,31 +6,15 @@ { "id": "test" }, - "test.stats:md5,498621f92e86d55e4f7ae93170e6e733" + "test.stats:md5,cb919b8d6e2c4a6277bb2e5bd95013f2" ] ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.10.1" + "nf-test": "0.9.3", + "nextflow": "25.10.3" }, - "timestamp": "2024-11-24T13:57:02.323104" - }, - "test_bam_dedup_stats_samtools_umicollapse_versions": { - "content": [ - [ - "versions.yml:md5,20605eb79c410c0ed179ba660d82f75b", - "versions.yml:md5,23617661d2c899996bee2b05db027e25", - "versions.yml:md5,657bce03545b4c57f9c5fc4314bf85f7", - "versions.yml:md5,e02a62a393a833778e16542eeed0d148", - "versions.yml:md5,ef00762e264b99ac45713dc0dedf4060" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.10.1" - }, - "timestamp": "2024-11-25T18:39:15.637444" + "timestamp": "2026-02-03T09:58:09.220141052" }, "test_bam_dedup_stats_samtools_umicollapse_flagstats": { "content": [ @@ -44,10 +28,10 @@ ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.10.1" + "nf-test": "0.9.3", + "nextflow": "25.10.3" }, - "timestamp": "2024-11-24T13:57:02.366866" + "timestamp": "2026-02-03T09:58:09.226353172" }, "test_bam_dedup_stats_samtools_umicollapse_idxstats": { "content": [ @@ -61,19 +45,19 @@ ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.10.1" + "nf-test": "0.9.3", + "nextflow": "25.10.3" }, - "timestamp": "2024-11-24T13:57:02.410712" + "timestamp": "2026-02-03T09:58:09.233354058" }, "test_bam_dedup_stats_samtools_umicollapse_bam": { "content": [ "b7be15ac7aae194b04bdbb56f3534495" ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.10.1" + "nf-test": "0.9.3", + "nextflow": "25.10.3" }, - "timestamp": "2024-11-25T18:39:15.613319" + "timestamp": "2026-02-03T09:58:09.209299524" } } \ No newline at end of file diff --git a/subworkflows/nf-core/bam_dedup_stats_samtools_umitools/main.nf b/subworkflows/nf-core/bam_dedup_stats_samtools_umitools/main.nf index fe6ff312f..28e192586 100644 --- a/subworkflows/nf-core/bam_dedup_stats_samtools_umitools/main.nf +++ b/subworkflows/nf-core/bam_dedup_stats_samtools_umitools/main.nf @@ -12,20 +12,15 @@ workflow BAM_DEDUP_STATS_SAMTOOLS_UMITOOLS { val_get_dedup_stats // boolean: true/false main: - - ch_versions = Channel.empty() - // // UMI-tools dedup // UMITOOLS_DEDUP ( ch_bam_bai, val_get_dedup_stats ) - ch_versions = ch_versions.mix(UMITOOLS_DEDUP.out.versions.first()) // // Index BAM file and run samtools stats, flagstat and idxstats // SAMTOOLS_INDEX ( UMITOOLS_DEDUP.out.bam ) - ch_versions = ch_versions.mix(SAMTOOLS_INDEX.out.versions.first()) ch_bam_bai_dedup = UMITOOLS_DEDUP.out.bam .join(SAMTOOLS_INDEX.out.bai, by: [0], remainder: true) @@ -40,17 +35,17 @@ workflow BAM_DEDUP_STATS_SAMTOOLS_UMITOOLS { } BAM_STATS_SAMTOOLS ( ch_bam_bai_dedup, [ [:], [] ] ) - ch_versions = ch_versions.mix(BAM_STATS_SAMTOOLS.out.versions) emit: - bam = UMITOOLS_DEDUP.out.bam // channel: [ val(meta), path(bam) ] - deduplog = UMITOOLS_DEDUP.out.log // channel: [ val(meta), path(log) ] - - bai = SAMTOOLS_INDEX.out.bai // channel: [ val(meta), path(bai) ] - csi = SAMTOOLS_INDEX.out.csi // channel: [ val(meta), path(csi) ] - stats = BAM_STATS_SAMTOOLS.out.stats // channel: [ val(meta), path(stats) ] - flagstat = BAM_STATS_SAMTOOLS.out.flagstat // channel: [ val(meta), path(flagstat) ] - idxstats = BAM_STATS_SAMTOOLS.out.idxstats // channel: [ val(meta), path(idxstats) ] - - versions = ch_versions // channel: [ path(versions.yml) ] + bam = UMITOOLS_DEDUP.out.bam // channel: [ val(meta), path(bam) ] + deduplog = UMITOOLS_DEDUP.out.log // channel: [ val(meta), path(log) ] + tsv_edit_distance = UMITOOLS_DEDUP.out.tsv_edit_distance // channel: [ val(meta), path(tsv) ] + tsv_per_umi = UMITOOLS_DEDUP.out.tsv_per_umi // channel: [ val(meta), path(tsv) ] + tsv_umi_per_position = UMITOOLS_DEDUP.out.tsv_umi_per_position // channel: [ val(meta), path(tsv) ] + + bai = SAMTOOLS_INDEX.out.bai // channel: [ val(meta), path(bai) ] + csi = SAMTOOLS_INDEX.out.csi // channel: [ val(meta), path(csi) ] + stats = BAM_STATS_SAMTOOLS.out.stats // channel: [ val(meta), path(stats) ] + flagstat = BAM_STATS_SAMTOOLS.out.flagstat // channel: [ val(meta), path(flagstat) ] + idxstats = BAM_STATS_SAMTOOLS.out.idxstats // channel: [ val(meta), path(idxstats) ] } diff --git a/subworkflows/nf-core/bam_dedup_stats_samtools_umitools/tests/main.nf.test b/subworkflows/nf-core/bam_dedup_stats_samtools_umitools/tests/main.nf.test index f7d63d3d0..176c5d32a 100644 --- a/subworkflows/nf-core/bam_dedup_stats_samtools_umitools/tests/main.nf.test +++ b/subworkflows/nf-core/bam_dedup_stats_samtools_umitools/tests/main.nf.test @@ -3,6 +3,19 @@ nextflow_workflow { name "Test Workflow BAM_DEDUP_STATS_SAMTOOLS_UMITOOLS" script "../main.nf" workflow "BAM_DEDUP_STATS_SAMTOOLS_UMITOOLS" + tag "subworkflows" + tag "subworkflows_nfcore" + tag "subworkflows/bam_dedup_stats_samtools_umitools" + tag "subworkflows/bam_stats_samtools" + tag "bam_dedup_stats_samtools_umitools" + tag "bam_stats_samtools" + tag "samtools" + tag "samtools/index" + tag "samtools/stats" + tag "samtools/idxstats" + tag "samtools/flagstat" + tag "umitools" + tag "umitools/dedup" test("sarscov2_bam_bai") { @@ -31,8 +44,7 @@ nextflow_workflow { bam(workflow.out.bam[0][1]).getSamLinesMD5(), workflow.out.stats, workflow.out.flagstat, - workflow.out.idxstats, - workflow.out.versions + workflow.out.idxstats ).match() } ) } diff --git a/subworkflows/nf-core/bam_dedup_stats_samtools_umitools/tests/main.nf.test.snap b/subworkflows/nf-core/bam_dedup_stats_samtools_umitools/tests/main.nf.test.snap index 3b3613572..2adfe9ea0 100644 --- a/subworkflows/nf-core/bam_dedup_stats_samtools_umitools/tests/main.nf.test.snap +++ b/subworkflows/nf-core/bam_dedup_stats_samtools_umitools/tests/main.nf.test.snap @@ -7,7 +7,7 @@ { "id": "test" }, - "test.stats:md5,41ba57a9b90b54587e7d154e5405ea5e" + "test.stats:md5,d380f38aa5cdd1dba32f84f6c152f490" ] ], [ @@ -25,20 +25,13 @@ }, "test.idxstats:md5,85d20a901eef23ca50c323638a2eb602" ] - ], - [ - "versions.yml:md5,2bf4310f1d49429016f5633f965e9ed0", - "versions.yml:md5,306b85f2109aeac87f1bf0eed94e6940", - "versions.yml:md5,db76f947845712952426efae5356018f", - "versions.yml:md5,eb35d8fd0745ef0ebacb9e26d4124e1d", - "versions.yml:md5,f4935d4e563646266cc6bb4d75d0fb7d" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.10.1" + "nf-test": "0.9.3", + "nextflow": "25.10.3" }, - "timestamp": "2024-11-25T17:23:13.841219" + "timestamp": "2026-02-03T11:34:24.268180227" }, "sarscov2_bam_bai - stub": { "content": [ @@ -64,18 +57,23 @@ { "id": "test" }, - "test.bam.bai:md5,d41d8cd98f00b204e9800998ecf8427e" + "test_edit_distance.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "3": [ - + [ + { + "id": "test" + }, + "test_per_umi.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "4": [ [ { "id": "test" }, - "test.stats:md5,d41d8cd98f00b204e9800998ecf8427e" + "test_per_position.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "5": [ @@ -83,23 +81,35 @@ { "id": "test" }, - "test.flagstat:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.bam.bai:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "6": [ + + ], + "7": [ [ { "id": "test" }, - "test.idxstats:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.stats:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "7": [ - "versions.yml:md5,2bf4310f1d49429016f5633f965e9ed0", - "versions.yml:md5,306b85f2109aeac87f1bf0eed94e6940", - "versions.yml:md5,db76f947845712952426efae5356018f", - "versions.yml:md5,eb35d8fd0745ef0ebacb9e26d4124e1d", - "versions.yml:md5,f4935d4e563646266cc6bb4d75d0fb7d" + "8": [ + [ + { + "id": "test" + }, + "test.flagstat:md5,67394650dbae96d1a4fcc70484822159" + ] + ], + "9": [ + [ + { + "id": "test" + }, + "test.idxstats:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "bai": [ [ @@ -133,7 +143,7 @@ { "id": "test" }, - "test.flagstat:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.flagstat:md5,67394650dbae96d1a4fcc70484822159" ] ], "idxstats": [ @@ -152,19 +162,36 @@ "test.stats:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "versions": [ - "versions.yml:md5,2bf4310f1d49429016f5633f965e9ed0", - "versions.yml:md5,306b85f2109aeac87f1bf0eed94e6940", - "versions.yml:md5,db76f947845712952426efae5356018f", - "versions.yml:md5,eb35d8fd0745ef0ebacb9e26d4124e1d", - "versions.yml:md5,f4935d4e563646266cc6bb4d75d0fb7d" + "tsv_edit_distance": [ + [ + { + "id": "test" + }, + "test_edit_distance.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "tsv_per_umi": [ + [ + { + "id": "test" + }, + "test_per_umi.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "tsv_umi_per_position": [ + [ + { + "id": "test" + }, + "test_per_position.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ] } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.3", + "nextflow": "25.10.3" }, - "timestamp": "2024-09-16T08:04:43.790052381" + "timestamp": "2026-02-03T11:13:20.927345248" } } \ No newline at end of file diff --git a/subworkflows/nf-core/bam_dedup_umi/main.nf b/subworkflows/nf-core/bam_dedup_umi/main.nf index d0a1ddb13..5cfc02649 100644 --- a/subworkflows/nf-core/bam_dedup_umi/main.nf +++ b/subworkflows/nf-core/bam_dedup_umi/main.nf @@ -22,7 +22,11 @@ workflow BAM_DEDUP_UMI { ch_transcript_fasta // channel: [ val(meta), path(fasta) ] main: - ch_versions = Channel.empty() + ch_tsv_edit_distance = channel.empty() + ch_tsv_per_umi = channel.empty() + ch_tsv_umi_per_position = channel.empty() + ch_genomic_dedup_log = channel.empty() + ch_transcriptomic_dedup_log = channel.empty() if (umi_dedup_tool != "umicollapse" && umi_dedup_tool != "umitools"){ error("Unknown umi_dedup_tool '${umi_dedup_tool}'") @@ -34,7 +38,7 @@ workflow BAM_DEDUP_UMI { ch_genome_bam ) UMI_DEDUP_GENOME = BAM_DEDUP_STATS_SAMTOOLS_UMICOLLAPSE_GENOME - ch_dedup_log = UMI_DEDUP_GENOME.out.dedup_stats + ch_genomic_dedup_log = UMI_DEDUP_GENOME.out.dedup_stats } else if (umi_dedup_tool == "umitools") { BAM_DEDUP_STATS_SAMTOOLS_UMITOOLS_GENOME ( @@ -42,7 +46,10 @@ workflow BAM_DEDUP_UMI { umitools_dedup_stats ) UMI_DEDUP_GENOME = BAM_DEDUP_STATS_SAMTOOLS_UMITOOLS_GENOME - ch_dedup_log = UMI_DEDUP_GENOME.out.deduplog + ch_genomic_dedup_log = UMI_DEDUP_GENOME.out.deduplog + ch_tsv_edit_distance = UMI_DEDUP_GENOME.out.tsv_edit_distance + ch_tsv_per_umi = UMI_DEDUP_GENOME.out.tsv_per_umi + ch_tsv_umi_per_position = UMI_DEDUP_GENOME.out.tsv_umi_per_position } // Co-ordinate sort, index and run stats on transcriptome BAM. This takes @@ -65,7 +72,7 @@ workflow BAM_DEDUP_UMI { ch_sorted_transcriptome_bam ) UMI_DEDUP_TRANSCRIPTOME = BAM_DEDUP_STATS_SAMTOOLS_UMICOLLAPSE_TRANSCRIPTOME - ch_dedup_log = ch_dedup_log.mix(UMI_DEDUP_TRANSCRIPTOME.out.dedup_stats) + ch_transcriptomic_dedup_log = UMI_DEDUP_TRANSCRIPTOME.out.dedup_stats } else if (umi_dedup_tool == "umitools") { BAM_DEDUP_STATS_SAMTOOLS_UMITOOLS_TRANSCRIPTOME ( @@ -73,13 +80,17 @@ workflow BAM_DEDUP_UMI { umitools_dedup_stats ) UMI_DEDUP_TRANSCRIPTOME = BAM_DEDUP_STATS_SAMTOOLS_UMITOOLS_TRANSCRIPTOME - ch_dedup_log = ch_dedup_log.mix(UMI_DEDUP_TRANSCRIPTOME.out.deduplog) + ch_transcriptomic_dedup_log = UMI_DEDUP_TRANSCRIPTOME.out.deduplog + ch_tsv_edit_distance = ch_tsv_edit_distance.mix(UMI_DEDUP_TRANSCRIPTOME.out.tsv_edit_distance) + ch_tsv_per_umi = ch_tsv_per_umi.mix(UMI_DEDUP_TRANSCRIPTOME.out.tsv_per_umi) + ch_tsv_umi_per_position = ch_tsv_umi_per_position.mix(UMI_DEDUP_TRANSCRIPTOME.out.tsv_umi_per_position) } // 3. Restore name sorting SAMTOOLS_SORT ( UMI_DEDUP_TRANSCRIPTOME.out.bam, - ch_fasta + ch_fasta, + '' ) // 4. Run prepare_for_rsem.py on paired-end BAM files @@ -106,27 +117,29 @@ workflow BAM_DEDUP_UMI { // automatically add transcriptome stats- difficult to separate in multiqc // without a bit more work - ch_multiqc_files = ch_dedup_log + ch_multiqc_files = ch_genomic_dedup_log .mix(UMI_DEDUP_GENOME.out.stats) .mix(UMI_DEDUP_GENOME.out.flagstat) .mix(UMI_DEDUP_GENOME.out.idxstats) .transpose() - .map{it[1]} - - // Record versions - - ch_versions = UMI_DEDUP_GENOME.out.versions - .mix(BAM_SORT_STATS_SAMTOOLS.out.versions) - .mix(UMITOOLS_PREPAREFORRSEM.out.versions) + .map{ item -> item[1] } emit: - bam = UMI_DEDUP_GENOME.out.bam // channel: [ val(meta), path(bam) ] - bai = bam_csi_index ? UMI_DEDUP_GENOME.out.csi : UMI_DEDUP_GENOME.out.bai // channel: [ val(meta), path(bai) ] - dedup_log = ch_dedup_log // channel: [ val(meta), path(log) ] - stats = UMI_DEDUP_GENOME.out.stats.mix(UMI_DEDUP_TRANSCRIPTOME.out.stats) // channel: [ val(meta), path(stats)] - flagstat = UMI_DEDUP_GENOME.out.flagstat.mix(UMI_DEDUP_TRANSCRIPTOME.out.flagstat) // channel: [ val(meta), path(flagstat)] - idxstats = UMI_DEDUP_GENOME.out.idxstats.mix(UMI_DEDUP_TRANSCRIPTOME.out.idxstats) // channel: [ val(meta), path(idxstats)] - multiqc_files = ch_multiqc_files // channel: file - transcriptome_bam = ch_dedup_transcriptome_bam // channel: [ val(meta), path(bam) ] - versions = ch_versions // channel: [ path(versions.yml) ] + bam = UMI_DEDUP_GENOME.out.bam // channel: [ val(meta), path(bam) ] + bai = bam_csi_index ? UMI_DEDUP_GENOME.out.csi : UMI_DEDUP_GENOME.out.bai // channel: [ val(meta), path(bai) ] + genomic_dedup_log = ch_genomic_dedup_log // channel: [ val(meta), path(log) ] + transcriptomic_dedup_log = ch_transcriptomic_dedup_log // channel: [ val(meta), path(log) ] + prepare_for_rsem_log = UMITOOLS_PREPAREFORRSEM.out.log // channel: [ val(meta), path(log) ] + stats = UMI_DEDUP_GENOME.out.stats.mix(UMI_DEDUP_TRANSCRIPTOME.out.stats) // channel: [ val(meta), path(stats)] + flagstat = UMI_DEDUP_GENOME.out.flagstat.mix(UMI_DEDUP_TRANSCRIPTOME.out.flagstat) // channel: [ val(meta), path(flagstat)] + idxstats = UMI_DEDUP_GENOME.out.idxstats.mix(UMI_DEDUP_TRANSCRIPTOME.out.idxstats) // channel: [ val(meta), path(idxstats)] + tsv_edit_distance = ch_tsv_edit_distance // channel: [ val(meta), path(tsv) ] + tsv_per_umi = ch_tsv_per_umi // channel: [ val(meta), path(tsv) ] + tsv_umi_per_position = ch_tsv_umi_per_position // channel: [ val(meta), path(tsv) ] + multiqc_files = ch_multiqc_files // channel: file + transcriptome_bam = ch_dedup_transcriptome_bam // channel: [ val(meta), path(bam) ] - final output + transcriptome_dedup_bam = UMI_DEDUP_TRANSCRIPTOME.out.bam // channel: [ val(meta), path(bam) ] - after dedup, before name sort + transcriptome_sorted_bam = SAMTOOLS_SORT.out.bam // channel: [ val(meta), path(bam) ] - name-sorted + transcriptome_sorted_bam_bai = UMI_DEDUP_TRANSCRIPTOME.out.bai // channel: [ val(meta), path(bai) ] - coordinate-sorted dedup index + transcriptome_filtered_bam = UMITOOLS_PREPAREFORRSEM.out.bam // channel: [ val(meta), path(bam) ] - paired-end filtered } diff --git a/subworkflows/nf-core/bam_dedup_umi/tests/main.nf.test b/subworkflows/nf-core/bam_dedup_umi/tests/main.nf.test index c0600c2c7..f3c21c357 100644 --- a/subworkflows/nf-core/bam_dedup_umi/tests/main.nf.test +++ b/subworkflows/nf-core/bam_dedup_umi/tests/main.nf.test @@ -5,6 +5,15 @@ nextflow_workflow { workflow "BAM_DEDUP_UMI" config "./nextflow.config" + tag "subworkflows" + tag "subworkflows_nfcore" + tag "subworkflows/bam_dedup_umi" + tag "subworkflows/bam_dedup_stats_samtools_umicollapse" + tag "subworkflows/bam_dedup_stats_samtools_umitools" + tag "subworkflows/bam_sort_stats_samtools" + tag "umitools/prepareforrsem" + tag "samtools/sort" + test("sarscov2_bam_bai - umitools - with transcriptome bams") { when { @@ -41,8 +50,7 @@ nextflow_workflow { bam(workflow.out.transcriptome_bam[0][1]).getReadsMD5(), workflow.out.stats, workflow.out.flagstat, - workflow.out.idxstats, - workflow.out.versions + workflow.out.idxstats ).match() }, { assert path(workflow.out.bai.get(0).get(1)).exists() } ) @@ -80,8 +88,7 @@ nextflow_workflow { bam(workflow.out.bam[0][1]).getReadsMD5(), workflow.out.stats, workflow.out.flagstat, - workflow.out.idxstats, - workflow.out.versions + workflow.out.idxstats ).match() }, { assert path(workflow.out.bai.get(0).get(1)).exists() } ) diff --git a/subworkflows/nf-core/bam_dedup_umi/tests/main.nf.test.snap b/subworkflows/nf-core/bam_dedup_umi/tests/main.nf.test.snap index 94151f04b..4745c076f 100644 --- a/subworkflows/nf-core/bam_dedup_umi/tests/main.nf.test.snap +++ b/subworkflows/nf-core/bam_dedup_umi/tests/main.nf.test.snap @@ -7,7 +7,7 @@ { "id": "test" }, - "test.umi_dedup.genome.sorted.bam.stats:md5,a03e635b85a846a2650c7b747926c7ed" + "test.umi_dedup.genome.sorted.bam.stats:md5,557ea05b85a50181053fab977b219c6b" ] ], [ @@ -25,20 +25,13 @@ }, "test.umi_dedup.genome.sorted.bam.idxstats:md5,85d20a901eef23ca50c323638a2eb602" ] - ], - [ - "versions.yml:md5,3fe6727d1a90130a932400464233ab5d", - "versions.yml:md5,5d91176bd409dc54816e7e3a7773b5ef", - "versions.yml:md5,7eaf0c81f627dde8e2710a57e19b4d87", - "versions.yml:md5,d6bba04463b79564f053e7e5033025dd", - "versions.yml:md5,f90574f645fd8876ba52b89b2272afc1" ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.2" + "nf-test": "0.9.3", + "nextflow": "25.10.3" }, - "timestamp": "2024-12-12T13:04:25.48875" + "timestamp": "2026-02-03T11:36:10.619537296" }, "sarscov2_bam_bai - umitools - with transcriptome bams": { "content": [ @@ -49,13 +42,13 @@ { "id": "test" }, - "test.umi_dedup.genome.sorted.bam.stats:md5,a03e635b85a846a2650c7b747926c7ed" + "test.umi_dedup.genome.sorted.bam.stats:md5,557ea05b85a50181053fab977b219c6b" ], [ { "id": "test" }, - "test.umi_dedup.transcriptome.sorted.bam.stats:md5,720f03daf649606a50c2cccbf135edc5" + "test.umi_dedup.transcriptome.sorted.bam.stats:md5,2244c40fb943c917aaa00232a2617223" ] ], [ @@ -85,25 +78,12 @@ }, "test.umi_dedup.transcriptome.sorted.bam.idxstats:md5,85d20a901eef23ca50c323638a2eb602" ] - ], - [ - "versions.yml:md5,017dce06e6fadba312ce46808e2b19ff", - "versions.yml:md5,0ca2bd583dd1951c792b526f768db343", - "versions.yml:md5,1e761d924c3e0f35284799aa566e7c1a", - "versions.yml:md5,43e34c4518b8d546b632b372bc282ac4", - "versions.yml:md5,9d7724974d6dc288b485b5509c89297b", - "versions.yml:md5,a4562f4cc5d04041a79ba57761e231d9", - "versions.yml:md5,acfef82b716e50563fb22f47f33de00a", - "versions.yml:md5,afd68b9511aecba9cc5d6f7dd4c34bbd", - "versions.yml:md5,c2fda58ea2b120a510502b9db24d8a16", - "versions.yml:md5,d531cd7e744b2f95659bdb544f2cd8a5", - "versions.yml:md5,e22174a7d3003395e8e8c34ebfba1719" ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.2" + "nf-test": "0.9.3", + "nextflow": "25.10.3" }, - "timestamp": "2024-12-12T13:04:12.182087" + "timestamp": "2026-02-03T11:36:02.170476803" } } \ No newline at end of file diff --git a/subworkflows/nf-core/bam_markduplicates_picard/main.nf b/subworkflows/nf-core/bam_markduplicates_picard/main.nf index 4ea7416cc..c33064eb8 100644 --- a/subworkflows/nf-core/bam_markduplicates_picard/main.nf +++ b/subworkflows/nf-core/bam_markduplicates_picard/main.nf @@ -14,16 +14,11 @@ workflow BAM_MARKDUPLICATES_PICARD { ch_fai // channel: [ val(meta), path(fai) ] main: - - ch_versions = Channel.empty() - PICARD_MARKDUPLICATES ( ch_reads, ch_fasta, ch_fai ) - ch_versions = ch_versions.mix(PICARD_MARKDUPLICATES.out.versions.first()) ch_markdup = PICARD_MARKDUPLICATES.out.bam.mix(PICARD_MARKDUPLICATES.out.cram) SAMTOOLS_INDEX ( ch_markdup ) - ch_versions = ch_versions.mix(SAMTOOLS_INDEX.out.versions.first()) ch_reads_index = ch_markdup .join(SAMTOOLS_INDEX.out.bai, by: [0], remainder: true) @@ -36,7 +31,6 @@ workflow BAM_MARKDUPLICATES_PICARD { } BAM_STATS_SAMTOOLS ( ch_reads_index, ch_fasta ) - ch_versions = ch_versions.mix(BAM_STATS_SAMTOOLS.out.versions) emit: bam = PICARD_MARKDUPLICATES.out.bam // channel: [ val(meta), path(bam) ] @@ -49,6 +43,4 @@ workflow BAM_MARKDUPLICATES_PICARD { stats = BAM_STATS_SAMTOOLS.out.stats // channel: [ val(meta), path(stats) ] flagstat = BAM_STATS_SAMTOOLS.out.flagstat // channel: [ val(meta), path(flagstat) ] idxstats = BAM_STATS_SAMTOOLS.out.idxstats // channel: [ val(meta), path(idxstats) ] - - versions = ch_versions // channel: [ versions.yml ] } diff --git a/subworkflows/nf-core/bam_markduplicates_picard/nextflow.config b/subworkflows/nf-core/bam_markduplicates_picard/nextflow.config index b73b711df..f8a322ac2 100644 --- a/subworkflows/nf-core/bam_markduplicates_picard/nextflow.config +++ b/subworkflows/nf-core/bam_markduplicates_picard/nextflow.config @@ -1,39 +1,37 @@ -if (!params.skip_markduplicates && !params.with_umi) { - process { - withName: '.*:BAM_MARKDUPLICATES_PICARD:PICARD_MARKDUPLICATES' { - ext.args = '--ASSUME_SORTED true --REMOVE_DUPLICATES false --VALIDATION_STRINGENCY LENIENT --TMP_DIR tmp' - ext.prefix = { "${meta.id}.markdup.sorted" } - publishDir = [ - [ - path: { "${params.outdir}/${params.aligner}/picard_metrics" }, - mode: params.publish_dir_mode, - pattern: '*metrics.txt' - ], - [ - path: { "${params.outdir}/${params.aligner}" }, - mode: params.publish_dir_mode, - pattern: '*.bam' - ] - ] - } - - withName: '.*:BAM_MARKDUPLICATES_PICARD:SAMTOOLS_INDEX' { - ext.args = { params.bam_csi_index ? '-c' : '' } - ext.prefix = { "${meta.id}.markdup.sorted" } - publishDir = [ +process { + withName: '.*:BAM_MARKDUPLICATES_PICARD:PICARD_MARKDUPLICATES' { + ext.args = '--ASSUME_SORTED true --REMOVE_DUPLICATES false --VALIDATION_STRINGENCY LENIENT --TMP_DIR tmp' + ext.prefix = { "${meta.id}.markdup.sorted" } + publishDir = [ + [ + path: { "${params.outdir}/${params.aligner}/picard_metrics" }, + mode: params.publish_dir_mode, + pattern: '*metrics.txt' + ], + [ path: { "${params.outdir}/${params.aligner}" }, mode: params.publish_dir_mode, - pattern: '*.{bai,csi}' + pattern: '*.bam' ] - } + ] + } - withName: '.*:BAM_MARKDUPLICATES_PICARD:BAM_STATS_SAMTOOLS:.*' { - ext.prefix = { "${meta.id}.markdup.sorted.bam" } - publishDir = [ - path: { "${params.outdir}/${params.aligner}/samtools_stats" }, - mode: params.publish_dir_mode, - pattern: '*.{stats,flagstat,idxstats}' - ] - } + withName: '.*:BAM_MARKDUPLICATES_PICARD:SAMTOOLS_INDEX' { + ext.args = { params.bam_csi_index ? '-c' : '' } + ext.prefix = { "${meta.id}.markdup.sorted" } + publishDir = [ + path: { "${params.outdir}/${params.aligner}" }, + mode: params.publish_dir_mode, + pattern: '*.{bai,csi}' + ] + } + + withName: '.*:BAM_MARKDUPLICATES_PICARD:BAM_STATS_SAMTOOLS:.*' { + ext.prefix = { "${meta.id}.markdup.sorted.bam" } + publishDir = [ + path: { "${params.outdir}/${params.aligner}/samtools_stats" }, + mode: params.publish_dir_mode, + pattern: '*.{stats,flagstat,idxstats}' + ] } } diff --git a/subworkflows/nf-core/bam_markduplicates_picard/tests/main.nf.test b/subworkflows/nf-core/bam_markduplicates_picard/tests/main.nf.test index 48dbcf2f0..982f41f29 100644 --- a/subworkflows/nf-core/bam_markduplicates_picard/tests/main.nf.test +++ b/subworkflows/nf-core/bam_markduplicates_picard/tests/main.nf.test @@ -4,6 +4,19 @@ nextflow_workflow { script "../main.nf" workflow "BAM_MARKDUPLICATES_PICARD" + tag "picard" + tag "picard/markduplicates" + tag "subworkflows" + tag "subworkflows_nfcore" + tag "bam_markduplicates_picard" + tag "subworkflows/bam_markduplicates_picard" + tag "subworkflows/bam_stats_samtools" + tag "bam_stats_samtools" + tag "samtools" + tag "samtools/flagstat" + tag "samtools/idxstats" + tag "samtools/index" + tag "samtools/stats" test("sarscov2 - bam") { @@ -35,8 +48,7 @@ nextflow_workflow { path(workflow.out.bai[0][1]), path(workflow.out.flagstat[0][1]), path(workflow.out.idxstats[0][1]), - path(workflow.out.stats[0][1]), - workflow.out.versions + path(workflow.out.stats[0][1]) ).match() } ) } @@ -72,8 +84,7 @@ nextflow_workflow { path(workflow.out.crai[0][1]), path(workflow.out.flagstat[0][1]), path(workflow.out.idxstats[0][1]), - path(workflow.out.stats[0][1]), - workflow.out.versions + path(workflow.out.stats[0][1]) ).match() } ) } diff --git a/subworkflows/nf-core/bam_markduplicates_picard/tests/main.nf.test.snap b/subworkflows/nf-core/bam_markduplicates_picard/tests/main.nf.test.snap index 50ecf675d..806758484 100644 --- a/subworkflows/nf-core/bam_markduplicates_picard/tests/main.nf.test.snap +++ b/subworkflows/nf-core/bam_markduplicates_picard/tests/main.nf.test.snap @@ -2,23 +2,16 @@ "homo_sapiens - cram": { "content": [ "test.cram", - "test.cram.crai:md5,9a74bf028b7146d8ef285442a14bbc8f", + "test.cram.crai:md5,77e0b15d73ba9d9cc3bec25356f4b5ff", "test.flagstat:md5,93b0ef463df947ede1f42ff60396c34d", "test.idxstats:md5,e179601fa7b8ebce81ac3765206f6c15", - "test.stats:md5,1a4569080c6f73546a863b0c3bc72c49", - [ - "versions.yml:md5,39f93ad916207c307cdb142959a19e95", - "versions.yml:md5,5a97b3ae2f98b3fd84c475f26a7e01b7", - "versions.yml:md5,6f95a91fadb30bd32b77143d18f2e1f9", - "versions.yml:md5,a54e44823e415885a18a6b62e3087fca", - "versions.yml:md5,b867241d6184a7ff9312f6f493f1b49c" - ] + "test.stats:md5,a61e467c4ecbc0baebb2ce29abb6fb9d" ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.3", + "nextflow": "25.10.3" }, - "timestamp": "2024-10-18T10:59:53.440891602" + "timestamp": "2026-02-03T11:33:49.023622117" }, "sarscov2 - bam - stub": { "content": [ @@ -74,7 +67,7 @@ "id": "test", "single_end": false }, - "test.flagstat:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.flagstat:md5,67394650dbae96d1a4fcc70484822159" ] ], "8": [ @@ -86,13 +79,6 @@ "test.idxstats:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "9": [ - "versions.yml:md5,39f93ad916207c307cdb142959a19e95", - "versions.yml:md5,5a97b3ae2f98b3fd84c475f26a7e01b7", - "versions.yml:md5,6f95a91fadb30bd32b77143d18f2e1f9", - "versions.yml:md5,a54e44823e415885a18a6b62e3087fca", - "versions.yml:md5,b867241d6184a7ff9312f6f493f1b49c" - ], "bai": [ [ { @@ -126,7 +112,7 @@ "id": "test", "single_end": false }, - "test.flagstat:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.flagstat:md5,67394650dbae96d1a4fcc70484822159" ] ], "idxstats": [ @@ -155,21 +141,14 @@ }, "test.stats:md5,d41d8cd98f00b204e9800998ecf8427e" ] - ], - "versions": [ - "versions.yml:md5,39f93ad916207c307cdb142959a19e95", - "versions.yml:md5,5a97b3ae2f98b3fd84c475f26a7e01b7", - "versions.yml:md5,6f95a91fadb30bd32b77143d18f2e1f9", - "versions.yml:md5,a54e44823e415885a18a6b62e3087fca", - "versions.yml:md5,b867241d6184a7ff9312f6f493f1b49c" ] } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.3", + "nextflow": "25.10.3" }, - "timestamp": "2024-10-18T11:00:20.860494683" + "timestamp": "2026-02-03T11:12:13.523887136" }, "homo_sapiens - cram - stub": { "content": [ @@ -220,7 +199,7 @@ { "id": "test" }, - "test.flagstat:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.flagstat:md5,67394650dbae96d1a4fcc70484822159" ] ], "8": [ @@ -231,13 +210,6 @@ "test.idxstats:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "9": [ - "versions.yml:md5,39f93ad916207c307cdb142959a19e95", - "versions.yml:md5,5a97b3ae2f98b3fd84c475f26a7e01b7", - "versions.yml:md5,6f95a91fadb30bd32b77143d18f2e1f9", - "versions.yml:md5,a54e44823e415885a18a6b62e3087fca", - "versions.yml:md5,b867241d6184a7ff9312f6f493f1b49c" - ], "bai": [ ], @@ -268,7 +240,7 @@ { "id": "test" }, - "test.flagstat:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.flagstat:md5,67394650dbae96d1a4fcc70484822159" ] ], "idxstats": [ @@ -294,41 +266,27 @@ }, "test.stats:md5,d41d8cd98f00b204e9800998ecf8427e" ] - ], - "versions": [ - "versions.yml:md5,39f93ad916207c307cdb142959a19e95", - "versions.yml:md5,5a97b3ae2f98b3fd84c475f26a7e01b7", - "versions.yml:md5,6f95a91fadb30bd32b77143d18f2e1f9", - "versions.yml:md5,a54e44823e415885a18a6b62e3087fca", - "versions.yml:md5,b867241d6184a7ff9312f6f493f1b49c" ] } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.3", + "nextflow": "25.10.3" }, - "timestamp": "2024-10-18T11:00:42.042387118" + "timestamp": "2026-02-03T11:12:22.591553383" }, "sarscov2 - bam": { "content": [ - "test.bam:md5,c8a3a56d56bf2c87f09e143ed2f78a7d", + "test.bam:md5,71b5b5ab3e970477179b934c564b3184", "test.bam.bai:md5,7d205e4e0b3d98887b1eafb5c50a3363", "test.flagstat:md5,4f7ffd1e6a5e85524d443209ac97d783", "test.idxstats:md5,df60a8c8d6621100d05178c93fb053a2", - "test.stats:md5,ba007b13981dad548358c7c957d41e12", - [ - "versions.yml:md5,39f93ad916207c307cdb142959a19e95", - "versions.yml:md5,5a97b3ae2f98b3fd84c475f26a7e01b7", - "versions.yml:md5,6f95a91fadb30bd32b77143d18f2e1f9", - "versions.yml:md5,a54e44823e415885a18a6b62e3087fca", - "versions.yml:md5,b867241d6184a7ff9312f6f493f1b49c" - ] + "test.stats:md5,f26c554c244ee86c89d62ebed509fd95" ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.3", + "nextflow": "25.10.3" }, - "timestamp": "2024-10-18T10:59:22.840531827" + "timestamp": "2026-02-03T11:33:38.150709728" } } \ No newline at end of file diff --git a/subworkflows/nf-core/bam_rseqc/main.nf b/subworkflows/nf-core/bam_rseqc/main.nf index 043321a13..bfc93f900 100644 --- a/subworkflows/nf-core/bam_rseqc/main.nf +++ b/subworkflows/nf-core/bam_rseqc/main.nf @@ -19,30 +19,28 @@ workflow BAM_RSEQC { main: - bam = bam_bai.map{ [ it[0], it[1] ] } - - versions = Channel.empty() + // bam = bam_bai.map{ [ it[0], it[1][0], it[1][1] ] } + bam = bam_bai.map{ it -> [ it[0], it[1][0], it[1][1] ] } // // Run RSeQC bam_stat.py // - bamstat_txt = Channel.empty() + bamstat_txt = channel.empty() if ('bam_stat' in rseqc_modules) { RSEQC_BAMSTAT(bam) bamstat_txt = RSEQC_BAMSTAT.out.txt - versions = versions.mix(RSEQC_BAMSTAT.out.versions.first()) } // // Run RSeQC inner_distance.py // - innerdistance_all = Channel.empty() - innerdistance_distance = Channel.empty() - innerdistance_freq = Channel.empty() - innerdistance_mean = Channel.empty() - innerdistance_pdf = Channel.empty() - innerdistance_rscript = Channel.empty() + innerdistance_all = channel.empty() + innerdistance_distance = channel.empty() + innerdistance_freq = channel.empty() + innerdistance_mean = channel.empty() + innerdistance_pdf = channel.empty() + innerdistance_rscript = channel.empty() if ('inner_distance' in rseqc_modules) { RSEQC_INNERDISTANCE(bam, bed) @@ -52,30 +50,28 @@ workflow BAM_RSEQC { innerdistance_pdf = RSEQC_INNERDISTANCE.out.pdf innerdistance_rscript = RSEQC_INNERDISTANCE.out.rscript innerdistance_all = innerdistance_distance.mix(innerdistance_freq, innerdistance_mean, innerdistance_pdf, innerdistance_rscript) - versions = versions.mix(RSEQC_INNERDISTANCE.out.versions.first()) } // // Run RSeQC infer_experiment.py // - inferexperiment_txt = Channel.empty() + inferexperiment_txt = channel.empty() if ('infer_experiment' in rseqc_modules) { RSEQC_INFEREXPERIMENT(bam, bed) inferexperiment_txt = RSEQC_INFEREXPERIMENT.out.txt - versions = versions.mix(RSEQC_INFEREXPERIMENT.out.versions.first()) } // // Run RSeQC junction_annotation.py // - junctionannotation_all = Channel.empty() - junctionannotation_bed = Channel.empty() - junctionannotation_interact_bed = Channel.empty() - junctionannotation_xls = Channel.empty() - junctionannotation_pdf = Channel.empty() - junctionannotation_events_pdf = Channel.empty() - junctionannotation_rscript = Channel.empty() - junctionannotation_log = Channel.empty() + junctionannotation_all = channel.empty() + junctionannotation_bed = channel.empty() + junctionannotation_interact_bed = channel.empty() + junctionannotation_xls = channel.empty() + junctionannotation_pdf = channel.empty() + junctionannotation_events_pdf = channel.empty() + junctionannotation_rscript = channel.empty() + junctionannotation_log = channel.empty() if ('junction_annotation' in rseqc_modules) { RSEQC_JUNCTIONANNOTATION(bam, bed) @@ -87,43 +83,40 @@ workflow BAM_RSEQC { junctionannotation_rscript = RSEQC_JUNCTIONANNOTATION.out.rscript junctionannotation_log = RSEQC_JUNCTIONANNOTATION.out.log junctionannotation_all = junctionannotation_bed.mix(junctionannotation_interact_bed, junctionannotation_xls, junctionannotation_pdf, junctionannotation_events_pdf, junctionannotation_rscript, junctionannotation_log) - versions = versions.mix(RSEQC_JUNCTIONANNOTATION.out.versions.first()) } // // Run RSeQC junction_saturation.py // - junctionsaturation_all = Channel.empty() - junctionsaturation_pdf = Channel.empty() - junctionsaturation_rscript = Channel.empty() + junctionsaturation_all = channel.empty() + junctionsaturation_pdf = channel.empty() + junctionsaturation_rscript = channel.empty() if ('junction_saturation' in rseqc_modules) { RSEQC_JUNCTIONSATURATION(bam, bed) junctionsaturation_pdf = RSEQC_JUNCTIONSATURATION.out.pdf junctionsaturation_rscript = RSEQC_JUNCTIONSATURATION.out.rscript junctionsaturation_all = junctionsaturation_pdf.mix(junctionsaturation_rscript) - versions = versions.mix(RSEQC_JUNCTIONSATURATION.out.versions.first()) } // // Run RSeQC read_distribution.py // - readdistribution_txt = Channel.empty() + readdistribution_txt = channel.empty() if ('read_distribution' in rseqc_modules) { RSEQC_READDISTRIBUTION(bam, bed) readdistribution_txt = RSEQC_READDISTRIBUTION.out.txt - versions = versions.mix(RSEQC_READDISTRIBUTION.out.versions.first()) } // // Run RSeQC read_duplication.py // - readduplication_all = Channel.empty() - readduplication_seq_xls = Channel.empty() - readduplication_pos_xls = Channel.empty() - readduplication_pdf = Channel.empty() - readduplication_rscript = Channel.empty() + readduplication_all = channel.empty() + readduplication_seq_xls = channel.empty() + readduplication_pos_xls = channel.empty() + readduplication_pdf = channel.empty() + readduplication_rscript = channel.empty() if ('read_duplication' in rseqc_modules) { RSEQC_READDUPLICATION(bam ) @@ -132,18 +125,16 @@ workflow BAM_RSEQC { readduplication_pdf = RSEQC_READDUPLICATION.out.pdf readduplication_rscript = RSEQC_READDUPLICATION.out.rscript readduplication_all = readduplication_seq_xls.mix(readduplication_pos_xls, readduplication_pdf, readduplication_rscript) - versions = versions.mix(RSEQC_READDUPLICATION.out.versions.first()) } // // Run RSeQC tin.py // - tin_txt = Channel.empty() + tin_txt = channel.empty() if ('tin' in rseqc_modules) { - RSEQC_TIN(bam_bai, bed) + RSEQC_TIN(bam, bed) tin_txt = RSEQC_TIN.out.txt - versions = versions.mix(RSEQC_TIN.out.versions.first()) } emit: @@ -180,6 +171,4 @@ workflow BAM_RSEQC { readduplication_rscript // channel: [ val(meta), r ] tin_txt // channel: [ val(meta), txt ] - - versions // channel: [ versions.yml ] } diff --git a/subworkflows/nf-core/bam_rseqc/nextflow.config b/subworkflows/nf-core/bam_rseqc/nextflow.config index 312d9d8a2..4452ebb6f 100644 --- a/subworkflows/nf-core/bam_rseqc/nextflow.config +++ b/subworkflows/nf-core/bam_rseqc/nextflow.config @@ -1,153 +1,119 @@ -def rseqc_modules = params.rseqc_modules ? params.rseqc_modules.split(',').collect{ it.trim().toLowerCase() } : [] - -if (!params.skip_qc && !params.skip_rseqc) { - if ('bam_stat' in rseqc_modules) { - process { - withName: '.*:BAM_RSEQC:RSEQC_BAMSTAT' { - publishDir = [ - path: { "${params.outdir}/${params.aligner}/rseqc/bam_stat" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } - } +process { + withName: '.*:BAM_RSEQC:RSEQC_BAMSTAT' { + publishDir = [ + path: { "${params.outdir}/${params.aligner}/rseqc/bam_stat" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] } - if ('infer_experiment' in rseqc_modules) { - process { - withName: '.*:BAM_RSEQC:RSEQC_INFEREXPERIMENT' { - publishDir = [ - path: { "${params.outdir}/${params.aligner}/rseqc/infer_experiment" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } - } + withName: '.*:BAM_RSEQC:RSEQC_INFEREXPERIMENT' { + publishDir = [ + path: { "${params.outdir}/${params.aligner}/rseqc/infer_experiment" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] } - if ('junction_annotation' in rseqc_modules) { - process { - withName: '.*:BAM_RSEQC:RSEQC_JUNCTIONANNOTATION' { - publishDir = [ - [ - path: { "${params.outdir}/${params.aligner}/rseqc/junction_annotation/pdf" }, - mode: params.publish_dir_mode, - pattern: '*.pdf' - ], - [ - path: { "${params.outdir}/${params.aligner}/rseqc/junction_annotation/bed" }, - mode: params.publish_dir_mode, - pattern: '*.bed' - ], - [ - path: { "${params.outdir}/${params.aligner}/rseqc/junction_annotation/xls" }, - mode: params.publish_dir_mode, - pattern: '*.xls' - ], - [ - path: { "${params.outdir}/${params.aligner}/rseqc/junction_annotation/log" }, - mode: params.publish_dir_mode, - pattern: '*.log' - ], - [ - path: { "${params.outdir}/${params.aligner}/rseqc/junction_annotation/rscript" }, - mode: params.publish_dir_mode, - pattern: '*.r' - ] - ] - } - } + withName: '.*:BAM_RSEQC:RSEQC_JUNCTIONANNOTATION' { + publishDir = [ + [ + path: { "${params.outdir}/${params.aligner}/rseqc/junction_annotation/pdf" }, + mode: params.publish_dir_mode, + pattern: '*.pdf' + ], + [ + path: { "${params.outdir}/${params.aligner}/rseqc/junction_annotation/bed" }, + mode: params.publish_dir_mode, + pattern: '*.bed' + ], + [ + path: { "${params.outdir}/${params.aligner}/rseqc/junction_annotation/xls" }, + mode: params.publish_dir_mode, + pattern: '*.xls' + ], + [ + path: { "${params.outdir}/${params.aligner}/rseqc/junction_annotation/log" }, + mode: params.publish_dir_mode, + pattern: '*.log' + ], + [ + path: { "${params.outdir}/${params.aligner}/rseqc/junction_annotation/rscript" }, + mode: params.publish_dir_mode, + pattern: '*.r' + ] + ] } - if ('junction_saturation' in rseqc_modules) { - process { - withName: '.*:BAM_RSEQC:RSEQC_JUNCTIONSATURATION' { - publishDir = [ - [ - path: { "${params.outdir}/${params.aligner}/rseqc/junction_saturation/pdf" }, - mode: params.publish_dir_mode, - pattern: '*.pdf' - ], - [ - path: { "${params.outdir}/${params.aligner}/rseqc/junction_saturation/rscript" }, - mode: params.publish_dir_mode, - pattern: '*.r' - ] - ] - } - } + withName: '.*:BAM_RSEQC:RSEQC_JUNCTIONSATURATION' { + publishDir = [ + [ + path: { "${params.outdir}/${params.aligner}/rseqc/junction_saturation/pdf" }, + mode: params.publish_dir_mode, + pattern: '*.pdf' + ], + [ + path: { "${params.outdir}/${params.aligner}/rseqc/junction_saturation/rscript" }, + mode: params.publish_dir_mode, + pattern: '*.r' + ] + ] } - if ('read_duplication' in rseqc_modules) { - process { - withName: '.*:BAM_RSEQC:RSEQC_READDUPLICATION' { - publishDir = [ - [ - path: { "${params.outdir}/${params.aligner}/rseqc/read_duplication/pdf" }, - mode: params.publish_dir_mode, - pattern: '*.pdf' - ], - [ - path: { "${params.outdir}/${params.aligner}/rseqc/read_duplication/xls" }, - mode: params.publish_dir_mode, - pattern: '*.xls' - ], - [ - path: { "${params.outdir}/${params.aligner}/rseqc/read_duplication/rscript" }, - mode: params.publish_dir_mode, - pattern: '*.r' - ] - ] - } - } + withName: '.*:BAM_RSEQC:RSEQC_READDUPLICATION' { + publishDir = [ + [ + path: { "${params.outdir}/${params.aligner}/rseqc/read_duplication/pdf" }, + mode: params.publish_dir_mode, + pattern: '*.pdf' + ], + [ + path: { "${params.outdir}/${params.aligner}/rseqc/read_duplication/xls" }, + mode: params.publish_dir_mode, + pattern: '*.xls' + ], + [ + path: { "${params.outdir}/${params.aligner}/rseqc/read_duplication/rscript" }, + mode: params.publish_dir_mode, + pattern: '*.r' + ] + ] } - if ('read_distribution' in rseqc_modules && !params.bam_csi_index) { - process { - withName: '.*:BAM_RSEQC:RSEQC_READDISTRIBUTION' { - publishDir = [ - path: { "${params.outdir}/${params.aligner}/rseqc/read_distribution" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } - } + withName: '.*:BAM_RSEQC:RSEQC_READDISTRIBUTION' { + publishDir = [ + path: { "${params.outdir}/${params.aligner}/rseqc/read_distribution" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] } - if ('inner_distance' in rseqc_modules && !params.bam_csi_index) { - process { - withName: '.*:BAM_RSEQC:RSEQC_INNERDISTANCE' { - publishDir = [ - [ - path: { "${params.outdir}/${params.aligner}/rseqc/inner_distance/txt" }, - mode: params.publish_dir_mode, - pattern: '*.txt', - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ], - [ - path: { "${params.outdir}/${params.aligner}/rseqc/inner_distance/pdf" }, - mode: params.publish_dir_mode, - pattern: '*.pdf' - ], - [ - path: { "${params.outdir}/${params.aligner}/rseqc/inner_distance/rscript" }, - mode: params.publish_dir_mode, - pattern: '*.r' - ] - ] - } - } + withName: '.*:BAM_RSEQC:RSEQC_INNERDISTANCE' { + publishDir = [ + [ + path: { "${params.outdir}/${params.aligner}/rseqc/inner_distance/txt" }, + mode: params.publish_dir_mode, + pattern: '*.txt', + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ], + [ + path: { "${params.outdir}/${params.aligner}/rseqc/inner_distance/pdf" }, + mode: params.publish_dir_mode, + pattern: '*.pdf' + ], + [ + path: { "${params.outdir}/${params.aligner}/rseqc/inner_distance/rscript" }, + mode: params.publish_dir_mode, + pattern: '*.r' + ] + ] } - if ('tin' in rseqc_modules && !params.bam_csi_index) { - process { - withName: '.*:BAM_RSEQC:RSEQC_TIN' { - publishDir = [ - path: { "${params.outdir}/${params.aligner}/rseqc/tin" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } - } + withName: '.*:BAM_RSEQC:RSEQC_TIN' { + publishDir = [ + path: { "${params.outdir}/${params.aligner}/rseqc/tin" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] } } diff --git a/subworkflows/nf-core/bam_rseqc/tests/main.nf.test b/subworkflows/nf-core/bam_rseqc/tests/main.nf.test index 492cfb6fe..8e18dd947 100644 --- a/subworkflows/nf-core/bam_rseqc/tests/main.nf.test +++ b/subworkflows/nf-core/bam_rseqc/tests/main.nf.test @@ -3,6 +3,19 @@ nextflow_workflow { name "Test Workflow BAM_RSEQC" script "../main.nf" workflow "BAM_RSEQC" + tag "subworkflows" + tag "subworkflows_nfcore" + tag "subworkflows/bam_rseqc" + tag "bam_rseqc" + tag "rseqc" + tag "rseqc/bamstat" + tag "rseqc/inferexperiment" + tag "rseqc/innerdistance" + tag "rseqc/junctionannotation" + tag "rseqc/junctionsaturation" + tag "rseqc/readdistribution" + tag "rseqc/readduplication" + tag "rseqc/tin" test("sarscov2 paired-end [bam]") { @@ -11,12 +24,14 @@ nextflow_workflow { """ input[0] = Channel.of([ [ id:'test' ], // meta map - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true) + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true) + ] ]) - input[1] = Channel.of([ + input[1] = Channel.of( file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/bed/test.bed12', checkIfExists: true) - ]) + ) input[2] = ['bam_stat', 'inner_distance', 'infer_experiment', 'junction_annotation', 'junction_saturation', 'read_distribution', 'read_duplication', 'tin'] """ } @@ -36,8 +51,7 @@ nextflow_workflow { workflow.out.junctionsaturation_all.findAll { it[1].endsWith('.pdf') == false }, workflow.out.readdistribution_txt, workflow.out.readduplication_all.findAll { it[1].endsWith('.pdf') == false }, - workflow.out.tin_txt, - workflow.out.versions).match()} + workflow.out.tin_txt).match()} ) } } @@ -49,12 +63,14 @@ nextflow_workflow { """ input[0] = Channel.of([ [ id:'test' ], // meta map - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true) + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true) + ] ]) - input[1] = Channel.of([ + input[1] = Channel.of( file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/bed/test.bed12', checkIfExists: true) - ]) + ) input[2] = [] """ } @@ -63,15 +79,14 @@ nextflow_workflow { then { assertAll( { assert workflow.success }, - { assert workflow.out.bamstat_txt.size() == 0 }, - { assert workflow.out.innerdistance_all.size() == 0 }, - { assert workflow.out.inferexperiment_txt.size() == 0 }, - { assert workflow.out.junctionannotation_all.size() == 0 }, - { assert workflow.out.junctionsaturation_all.size() == 0 }, - { assert workflow.out.readdistribution_txt.size() == 0 }, - { assert workflow.out.readduplication_all.size() == 0 }, - { assert workflow.out.tin_txt.size() == 0 }, - { assert workflow.out.versions.size() == 0 } + { assert workflow.out.bamstat_txt == null || workflow.out.bamstat_txt.size() == 0 }, + { assert workflow.out.innerdistance_all == null || workflow.out.innerdistance_all.size() == 0 }, + { assert workflow.out.inferexperiment_txt == null || workflow.out.inferexperiment_txt.size() == 0 }, + { assert workflow.out.junctionannotation_all == null || workflow.out.junctionannotation_all.size() == 0 }, + { assert workflow.out.junctionsaturation_all == null || workflow.out.junctionsaturation_all.size() == 0 }, + { assert workflow.out.readdistribution_txt == null || workflow.out.readdistribution_txt.size() == 0 }, + { assert workflow.out.readduplication_all == null || workflow.out.readduplication_all.size() == 0 }, + { assert workflow.out.tin_txt == null || workflow.out.tin_txt.size() == 0 } ) } } @@ -85,12 +100,14 @@ nextflow_workflow { """ input[0] = Channel.of([ [ id:'test' ], // meta map - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true) + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true) + ] ]) - input[1] = Channel.of([ + input[1] = Channel.of( file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/bed/test.bed12', checkIfExists: true) - ]) + ) input[2] = ['bam_stat', 'inner_distance', 'infer_experiment', 'junction_annotation', 'junction_saturation', 'read_distribution', 'read_duplication', 'tin'] """ } @@ -113,12 +130,14 @@ nextflow_workflow { """ input[0] = Channel.of([ [ id:'test' ], // meta map - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true) + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true) + ] ]) - input[1] = Channel.of([ + input[1] = Channel.of( file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/bed/test.bed12', checkIfExists: true) - ]) + ) input[2] = [] """ } diff --git a/subworkflows/nf-core/bam_rseqc/tests/main.nf.test.snap b/subworkflows/nf-core/bam_rseqc/tests/main.nf.test.snap index 0040810cc..3bcb9d47d 100644 --- a/subworkflows/nf-core/bam_rseqc/tests/main.nf.test.snap +++ b/subworkflows/nf-core/bam_rseqc/tests/main.nf.test.snap @@ -92,25 +92,15 @@ { "id": "test" }, - "test.paired_end.sorted.summary.txt:md5,9d98447e178b89a89f6f5aba7a772fe6" + "test.summary.txt:md5,9d98447e178b89a89f6f5aba7a772fe6" ] - ], - [ - "versions.yml:md5,60dc1afce7fecb7270e998a00ee393e2", - "versions.yml:md5,9bc3caee6aeb54f23f5296b499546515", - "versions.yml:md5,a25161998ca60d5ce4e9a86abbf1bcb8", - "versions.yml:md5,c175b92f50b5be38a8808cbf7ac7452e", - "versions.yml:md5,ca7e95cf7ff7cff5d052b890729f7ead", - "versions.yml:md5,d03beea3c68934c3f3623a005c1424d2", - "versions.yml:md5,f2f3ecd549045f7595245f904f5d9414", - "versions.yml:md5,fd16f1098b9c285f3ea7bd3daf4e8f10" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" + "nf-test": "0.9.2", + "nextflow": "25.10.2" }, - "timestamp": "2024-07-03T12:07:54.452949" + "timestamp": "2025-12-16T10:27:40.098579318" }, "sarscov2 paired-end [bam] - stub": { "content": [ @@ -312,19 +302,9 @@ { "id": "test" }, - "test.paired_end.sorted.bam.summary.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.summary.txt:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "26": [ - "versions.yml:md5,60dc1afce7fecb7270e998a00ee393e2", - "versions.yml:md5,9bc3caee6aeb54f23f5296b499546515", - "versions.yml:md5,a25161998ca60d5ce4e9a86abbf1bcb8", - "versions.yml:md5,c175b92f50b5be38a8808cbf7ac7452e", - "versions.yml:md5,ca7e95cf7ff7cff5d052b890729f7ead", - "versions.yml:md5,d03beea3c68934c3f3623a005c1424d2", - "versions.yml:md5,f2f3ecd549045f7595245f904f5d9414", - "versions.yml:md5,fd16f1098b9c285f3ea7bd3daf4e8f10" - ], "3": [ [ { @@ -706,26 +686,16 @@ { "id": "test" }, - "test.paired_end.sorted.bam.summary.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.summary.txt:md5,d41d8cd98f00b204e9800998ecf8427e" ] - ], - "versions": [ - "versions.yml:md5,60dc1afce7fecb7270e998a00ee393e2", - "versions.yml:md5,9bc3caee6aeb54f23f5296b499546515", - "versions.yml:md5,a25161998ca60d5ce4e9a86abbf1bcb8", - "versions.yml:md5,c175b92f50b5be38a8808cbf7ac7452e", - "versions.yml:md5,ca7e95cf7ff7cff5d052b890729f7ead", - "versions.yml:md5,d03beea3c68934c3f3623a005c1424d2", - "versions.yml:md5,f2f3ecd549045f7595245f904f5d9414", - "versions.yml:md5,fd16f1098b9c285f3ea7bd3daf4e8f10" ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" + "nf-test": "0.9.2", + "nextflow": "25.10.2" }, - "timestamp": "2024-07-03T12:08:17.304769" + "timestamp": "2025-12-16T10:03:03.811447426" }, "sarscov2 paired-end [bam] no modules - stub": { "content": [ @@ -786,9 +756,6 @@ ], "25": [ - ], - "26": [ - ], "3": [ @@ -888,16 +855,13 @@ ], "tin_txt": [ - ], - "versions": [ - ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" + "nf-test": "0.9.2", + "nextflow": "25.10.2" }, - "timestamp": "2024-07-03T12:08:24.443731" + "timestamp": "2025-12-16T10:03:08.860494145" } } \ No newline at end of file diff --git a/subworkflows/nf-core/bam_sort_stats_samtools/main.nf b/subworkflows/nf-core/bam_sort_stats_samtools/main.nf index b716375b0..312c2d244 100644 --- a/subworkflows/nf-core/bam_sort_stats_samtools/main.nf +++ b/subworkflows/nf-core/bam_sort_stats_samtools/main.nf @@ -12,14 +12,9 @@ workflow BAM_SORT_STATS_SAMTOOLS { ch_fasta // channel: [ val(meta), path(fasta) ] main: - - ch_versions = Channel.empty() - - SAMTOOLS_SORT ( ch_bam, ch_fasta ) - ch_versions = ch_versions.mix(SAMTOOLS_SORT.out.versions.first()) + SAMTOOLS_SORT ( ch_bam, ch_fasta, '' ) SAMTOOLS_INDEX ( SAMTOOLS_SORT.out.bam ) - ch_versions = ch_versions.mix(SAMTOOLS_INDEX.out.versions.first()) SAMTOOLS_SORT.out.bam .join(SAMTOOLS_INDEX.out.bai, by: [0], remainder: true) @@ -35,7 +30,6 @@ workflow BAM_SORT_STATS_SAMTOOLS { .set { ch_bam_bai } BAM_STATS_SAMTOOLS ( ch_bam_bai, ch_fasta ) - ch_versions = ch_versions.mix(BAM_STATS_SAMTOOLS.out.versions) emit: bam = SAMTOOLS_SORT.out.bam // channel: [ val(meta), [ bam ] ] @@ -45,6 +39,4 @@ workflow BAM_SORT_STATS_SAMTOOLS { stats = BAM_STATS_SAMTOOLS.out.stats // channel: [ val(meta), [ stats ] ] flagstat = BAM_STATS_SAMTOOLS.out.flagstat // channel: [ val(meta), [ flagstat ] ] idxstats = BAM_STATS_SAMTOOLS.out.idxstats // channel: [ val(meta), [ idxstats ] ] - - versions = ch_versions // channel: [ versions.yml ] } diff --git a/subworkflows/nf-core/bam_sort_stats_samtools/tests/main.nf.test b/subworkflows/nf-core/bam_sort_stats_samtools/tests/main.nf.test index a21782114..c58412894 100644 --- a/subworkflows/nf-core/bam_sort_stats_samtools/tests/main.nf.test +++ b/subworkflows/nf-core/bam_sort_stats_samtools/tests/main.nf.test @@ -3,6 +3,18 @@ nextflow_workflow { name "Test Workflow BAM_SORT_STATS_SAMTOOLS" script "../main.nf" workflow "BAM_SORT_STATS_SAMTOOLS" + tag "subworkflows" + tag "subworkflows_nfcore" + tag "subworkflows/bam_sort_stats_samtools" + tag "bam_sort_stats_samtools" + tag "subworkflows/bam_stats_samtools" + tag "bam_stats_samtools" + tag "samtools" + tag "samtools/index" + tag "samtools/sort" + tag "samtools/stats" + tag "samtools/idxstats" + tag "samtools/flagstat" test("test_bam_sort_stats_samtools_single_end") { @@ -29,8 +41,7 @@ nextflow_workflow { { assert snapshot( workflow.out.flagstat, workflow.out.idxstats, - workflow.out.stats, - workflow.out.versions).match() } + workflow.out.stats).match() } ) } } @@ -60,8 +71,7 @@ nextflow_workflow { { assert snapshot( workflow.out.flagstat, workflow.out.idxstats, - workflow.out.stats, - workflow.out.versions).match() } + workflow.out.stats).match() } ) } } diff --git a/subworkflows/nf-core/bam_sort_stats_samtools/tests/main.nf.test.snap b/subworkflows/nf-core/bam_sort_stats_samtools/tests/main.nf.test.snap index c3c9a0492..f62d68c93 100644 --- a/subworkflows/nf-core/bam_sort_stats_samtools/tests/main.nf.test.snap +++ b/subworkflows/nf-core/bam_sort_stats_samtools/tests/main.nf.test.snap @@ -25,22 +25,15 @@ "id": "test", "single_end": false }, - "test.stats:md5,2fe0f3a7a1f07906061c1dadb62e0d05" + "test.stats:md5,1101fe711c4a389fdb5c4a1532107d1f" ] - ], - [ - "versions.yml:md5,032c89015461d597fcc5a5331b619d0a", - "versions.yml:md5,416c5e4a374c61167db999b0e400e3cf", - "versions.yml:md5,721391fd94c417808516480c9451c6fd", - "versions.yml:md5,9e12386b91a2977d23292754e3bcb522", - "versions.yml:md5,c294c162aeb09862cc5e55b602647452" ] ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.3", + "nextflow": "25.10.3" }, - "timestamp": "2024-09-16T08:26:24.36986488" + "timestamp": "2026-02-03T11:33:01.647190952" }, "test_bam_sort_stats_samtools_paired_end": { "content": [ @@ -68,22 +61,15 @@ "id": "test", "single_end": false }, - "test.stats:md5,ba007b13981dad548358c7c957d41e12" + "test.stats:md5,f26c554c244ee86c89d62ebed509fd95" ] - ], - [ - "versions.yml:md5,032c89015461d597fcc5a5331b619d0a", - "versions.yml:md5,416c5e4a374c61167db999b0e400e3cf", - "versions.yml:md5,721391fd94c417808516480c9451c6fd", - "versions.yml:md5,9e12386b91a2977d23292754e3bcb522", - "versions.yml:md5,c294c162aeb09862cc5e55b602647452" ] ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.3", + "nextflow": "25.10.3" }, - "timestamp": "2024-09-16T08:26:38.683996037" + "timestamp": "2026-02-03T11:33:08.706742267" }, "test_bam_sort_stats_samtools_single_end - stub": { "content": [ @@ -124,7 +110,7 @@ "id": "test", "single_end": false }, - "test.flagstat:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.flagstat:md5,67394650dbae96d1a4fcc70484822159" ] ], "5": [ @@ -136,13 +122,6 @@ "test.idxstats:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "6": [ - "versions.yml:md5,032c89015461d597fcc5a5331b619d0a", - "versions.yml:md5,416c5e4a374c61167db999b0e400e3cf", - "versions.yml:md5,721391fd94c417808516480c9451c6fd", - "versions.yml:md5,9e12386b91a2977d23292754e3bcb522", - "versions.yml:md5,c294c162aeb09862cc5e55b602647452" - ], "bai": [ [ { @@ -170,7 +149,7 @@ "id": "test", "single_end": false }, - "test.flagstat:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.flagstat:md5,67394650dbae96d1a4fcc70484822159" ] ], "idxstats": [ @@ -190,21 +169,14 @@ }, "test.stats:md5,d41d8cd98f00b204e9800998ecf8427e" ] - ], - "versions": [ - "versions.yml:md5,032c89015461d597fcc5a5331b619d0a", - "versions.yml:md5,416c5e4a374c61167db999b0e400e3cf", - "versions.yml:md5,721391fd94c417808516480c9451c6fd", - "versions.yml:md5,9e12386b91a2977d23292754e3bcb522", - "versions.yml:md5,c294c162aeb09862cc5e55b602647452" ] } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.3", + "nextflow": "25.10.3" }, - "timestamp": "2024-09-16T08:07:18.896460047" + "timestamp": "2026-02-03T11:11:02.1412136" }, "test_bam_sort_stats_samtools_paired_end - stub": { "content": [ @@ -245,7 +217,7 @@ "id": "test", "single_end": false }, - "test.flagstat:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.flagstat:md5,67394650dbae96d1a4fcc70484822159" ] ], "5": [ @@ -257,13 +229,6 @@ "test.idxstats:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "6": [ - "versions.yml:md5,032c89015461d597fcc5a5331b619d0a", - "versions.yml:md5,416c5e4a374c61167db999b0e400e3cf", - "versions.yml:md5,721391fd94c417808516480c9451c6fd", - "versions.yml:md5,9e12386b91a2977d23292754e3bcb522", - "versions.yml:md5,c294c162aeb09862cc5e55b602647452" - ], "bai": [ [ { @@ -291,7 +256,7 @@ "id": "test", "single_end": false }, - "test.flagstat:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.flagstat:md5,67394650dbae96d1a4fcc70484822159" ] ], "idxstats": [ @@ -311,20 +276,13 @@ }, "test.stats:md5,d41d8cd98f00b204e9800998ecf8427e" ] - ], - "versions": [ - "versions.yml:md5,032c89015461d597fcc5a5331b619d0a", - "versions.yml:md5,416c5e4a374c61167db999b0e400e3cf", - "versions.yml:md5,721391fd94c417808516480c9451c6fd", - "versions.yml:md5,9e12386b91a2977d23292754e3bcb522", - "versions.yml:md5,c294c162aeb09862cc5e55b602647452" ] } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.3", + "nextflow": "25.10.3" }, - "timestamp": "2024-09-16T08:07:39.028688324" + "timestamp": "2026-02-03T11:11:09.165267895" } } \ No newline at end of file diff --git a/subworkflows/nf-core/bam_stats_samtools/main.nf b/subworkflows/nf-core/bam_stats_samtools/main.nf index 44d4c010a..34e8fe104 100644 --- a/subworkflows/nf-core/bam_stats_samtools/main.nf +++ b/subworkflows/nf-core/bam_stats_samtools/main.nf @@ -12,21 +12,14 @@ workflow BAM_STATS_SAMTOOLS { ch_fasta // channel: [ val(meta), path(fasta) ] main: - ch_versions = Channel.empty() - SAMTOOLS_STATS ( ch_bam_bai, ch_fasta ) - ch_versions = ch_versions.mix(SAMTOOLS_STATS.out.versions) SAMTOOLS_FLAGSTAT ( ch_bam_bai ) - ch_versions = ch_versions.mix(SAMTOOLS_FLAGSTAT.out.versions) SAMTOOLS_IDXSTATS ( ch_bam_bai ) - ch_versions = ch_versions.mix(SAMTOOLS_IDXSTATS.out.versions) emit: stats = SAMTOOLS_STATS.out.stats // channel: [ val(meta), path(stats) ] flagstat = SAMTOOLS_FLAGSTAT.out.flagstat // channel: [ val(meta), path(flagstat) ] idxstats = SAMTOOLS_IDXSTATS.out.idxstats // channel: [ val(meta), path(idxstats) ] - - versions = ch_versions // channel: [ path(versions.yml) ] } diff --git a/subworkflows/nf-core/bam_stats_samtools/tests/main.nf.test b/subworkflows/nf-core/bam_stats_samtools/tests/main.nf.test index 4597aea27..2f329695b 100644 --- a/subworkflows/nf-core/bam_stats_samtools/tests/main.nf.test +++ b/subworkflows/nf-core/bam_stats_samtools/tests/main.nf.test @@ -3,6 +3,14 @@ nextflow_workflow { name "Test Workflow BAM_STATS_SAMTOOLS" script "../main.nf" workflow "BAM_STATS_SAMTOOLS" + tag "subworkflows" + tag "subworkflows_nfcore" + tag "bam_stats_samtools" + tag "subworkflows/bam_stats_samtools" + tag "samtools" + tag "samtools/flagstat" + tag "samtools/idxstats" + tag "samtools/stats" test("test_bam_stats_samtools_single_end") { @@ -28,8 +36,7 @@ nextflow_workflow { { assert snapshot( workflow.out.flagstat, workflow.out.idxstats, - workflow.out.stats, - workflow.out.versions).match() } + workflow.out.stats).match() } ) } } @@ -58,8 +65,7 @@ nextflow_workflow { { assert snapshot( workflow.out.flagstat, workflow.out.idxstats, - workflow.out.stats, - workflow.out.versions).match() } + workflow.out.stats).match() } ) } } @@ -88,8 +94,7 @@ nextflow_workflow { { assert snapshot( workflow.out.flagstat, workflow.out.idxstats, - workflow.out.stats, - workflow.out.versions).match() } + workflow.out.stats).match() } ) } } diff --git a/subworkflows/nf-core/bam_stats_samtools/tests/main.nf.test.snap b/subworkflows/nf-core/bam_stats_samtools/tests/main.nf.test.snap index 8ca225263..9c8ff1b51 100644 --- a/subworkflows/nf-core/bam_stats_samtools/tests/main.nf.test.snap +++ b/subworkflows/nf-core/bam_stats_samtools/tests/main.nf.test.snap @@ -17,7 +17,7 @@ "id": "test", "single_end": true }, - "test.flagstat:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.flagstat:md5,67394650dbae96d1a4fcc70484822159" ] ], "2": [ @@ -29,18 +29,13 @@ "test.idxstats:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "3": [ - "versions.yml:md5,73c55059ed478cd2f9cd93dd3185da3a", - "versions.yml:md5,80d8653e01575b3c381d87073f672fb5", - "versions.yml:md5,cb889532237a2f3d813978ac14a12d51" - ], "flagstat": [ [ { "id": "test", "single_end": true }, - "test.flagstat:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.flagstat:md5,67394650dbae96d1a4fcc70484822159" ] ], "idxstats": [ @@ -60,19 +55,14 @@ }, "test.stats:md5,d41d8cd98f00b204e9800998ecf8427e" ] - ], - "versions": [ - "versions.yml:md5,73c55059ed478cd2f9cd93dd3185da3a", - "versions.yml:md5,80d8653e01575b3c381d87073f672fb5", - "versions.yml:md5,cb889532237a2f3d813978ac14a12d51" ] } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.3", + "nextflow": "25.10.3" }, - "timestamp": "2024-09-16T08:08:35.660286921" + "timestamp": "2026-02-03T11:10:30.076183827" }, "test_bam_stats_samtools_single_end - stub": { "content": [ @@ -92,7 +82,7 @@ "id": "test", "single_end": true }, - "test.flagstat:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.flagstat:md5,67394650dbae96d1a4fcc70484822159" ] ], "2": [ @@ -104,18 +94,13 @@ "test.idxstats:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "3": [ - "versions.yml:md5,73c55059ed478cd2f9cd93dd3185da3a", - "versions.yml:md5,80d8653e01575b3c381d87073f672fb5", - "versions.yml:md5,cb889532237a2f3d813978ac14a12d51" - ], "flagstat": [ [ { "id": "test", "single_end": true }, - "test.flagstat:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.flagstat:md5,67394650dbae96d1a4fcc70484822159" ] ], "idxstats": [ @@ -135,19 +120,14 @@ }, "test.stats:md5,d41d8cd98f00b204e9800998ecf8427e" ] - ], - "versions": [ - "versions.yml:md5,73c55059ed478cd2f9cd93dd3185da3a", - "versions.yml:md5,80d8653e01575b3c381d87073f672fb5", - "versions.yml:md5,cb889532237a2f3d813978ac14a12d51" ] } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.3", + "nextflow": "25.10.3" }, - "timestamp": "2024-09-16T08:08:24.220305512" + "timestamp": "2026-02-03T11:10:24.379362883" }, "test_bam_stats_samtools_paired_end_cram - stub": { "content": [ @@ -167,7 +147,7 @@ "id": "test", "single_end": false }, - "test.flagstat:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.flagstat:md5,67394650dbae96d1a4fcc70484822159" ] ], "2": [ @@ -179,18 +159,13 @@ "test.idxstats:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "3": [ - "versions.yml:md5,73c55059ed478cd2f9cd93dd3185da3a", - "versions.yml:md5,80d8653e01575b3c381d87073f672fb5", - "versions.yml:md5,cb889532237a2f3d813978ac14a12d51" - ], "flagstat": [ [ { "id": "test", "single_end": false }, - "test.flagstat:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.flagstat:md5,67394650dbae96d1a4fcc70484822159" ] ], "idxstats": [ @@ -210,19 +185,14 @@ }, "test.stats:md5,d41d8cd98f00b204e9800998ecf8427e" ] - ], - "versions": [ - "versions.yml:md5,73c55059ed478cd2f9cd93dd3185da3a", - "versions.yml:md5,80d8653e01575b3c381d87073f672fb5", - "versions.yml:md5,cb889532237a2f3d813978ac14a12d51" ] } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.3", + "nextflow": "25.10.3" }, - "timestamp": "2024-09-16T08:08:54.206770141" + "timestamp": "2026-02-03T11:10:35.91658956" }, "test_bam_stats_samtools_single_end": { "content": [ @@ -250,20 +220,15 @@ "id": "test", "single_end": true }, - "test.stats:md5,291bb2393ec947140d12d42c2795b222" + "test.stats:md5,7a05a22bdb17e8df6e8c2d100ff09a31" ] - ], - [ - "versions.yml:md5,73c55059ed478cd2f9cd93dd3185da3a", - "versions.yml:md5,80d8653e01575b3c381d87073f672fb5", - "versions.yml:md5,cb889532237a2f3d813978ac14a12d51" ] ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.3", + "nextflow": "25.10.3" }, - "timestamp": "2024-09-16T08:07:49.731645858" + "timestamp": "2026-02-03T11:32:20.243663217" }, "test_bam_stats_samtools_paired_end": { "content": [ @@ -291,20 +256,15 @@ "id": "test", "single_end": true }, - "test.stats:md5,8140d69cdedd77570ca1d7618a744e16" + "test.stats:md5,a391612b5ef5b181e854ccaad8c8a068" ] - ], - [ - "versions.yml:md5,73c55059ed478cd2f9cd93dd3185da3a", - "versions.yml:md5,80d8653e01575b3c381d87073f672fb5", - "versions.yml:md5,cb889532237a2f3d813978ac14a12d51" ] ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.3", + "nextflow": "25.10.3" }, - "timestamp": "2024-09-16T08:08:01.421996172" + "timestamp": "2026-02-03T11:32:26.434187887" }, "test_bam_stats_samtools_paired_end_cram": { "content": [ @@ -332,19 +292,14 @@ "id": "test", "single_end": false }, - "test.stats:md5,1622856127bafd6cdbadee9cd64ec9b7" + "test.stats:md5,2b0e31ab01b867a6ff312023ae03838d" ] - ], - [ - "versions.yml:md5,73c55059ed478cd2f9cd93dd3185da3a", - "versions.yml:md5,80d8653e01575b3c381d87073f672fb5", - "versions.yml:md5,cb889532237a2f3d813978ac14a12d51" ] ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.3", + "nextflow": "25.10.3" }, - "timestamp": "2024-09-16T08:08:12.640915756" + "timestamp": "2026-02-03T11:32:32.441454186" } } \ No newline at end of file diff --git a/subworkflows/nf-core/bedgraph_bedclip_bedgraphtobigwig/main.nf b/subworkflows/nf-core/bedgraph_bedclip_bedgraphtobigwig/main.nf index 6c3b7b0cb..c966d3025 100644 --- a/subworkflows/nf-core/bedgraph_bedclip_bedgraphtobigwig/main.nf +++ b/subworkflows/nf-core/bedgraph_bedclip_bedgraphtobigwig/main.nf @@ -12,23 +12,17 @@ workflow BEDGRAPH_BEDCLIP_BEDGRAPHTOBIGWIG { main: - ch_versions = Channel.empty() - // // Clip bedGraph file // UCSC_BEDCLIP ( bedgraph, sizes ) - ch_versions = ch_versions.mix(UCSC_BEDCLIP.out.versions.first()) // // Convert bedGraph to bigWig // UCSC_BEDGRAPHTOBIGWIG ( UCSC_BEDCLIP.out.bedgraph, sizes ) - ch_versions = ch_versions.mix(UCSC_BEDGRAPHTOBIGWIG.out.versions.first()) emit: bigwig = UCSC_BEDGRAPHTOBIGWIG.out.bigwig // channel: [ val(meta), [ bigwig ] ] bedgraph = UCSC_BEDCLIP.out.bedgraph // channel: [ val(meta), [ bedgraph ] ] - - versions = ch_versions // channel: [ versions.yml ] } diff --git a/subworkflows/nf-core/bedgraph_bedclip_bedgraphtobigwig/tests/main.nf.test b/subworkflows/nf-core/bedgraph_bedclip_bedgraphtobigwig/tests/main.nf.test index 17ec676ca..79edf9b9d 100644 --- a/subworkflows/nf-core/bedgraph_bedclip_bedgraphtobigwig/tests/main.nf.test +++ b/subworkflows/nf-core/bedgraph_bedclip_bedgraphtobigwig/tests/main.nf.test @@ -4,6 +4,13 @@ nextflow_workflow { script "../main.nf" workflow "BEDGRAPH_BEDCLIP_BEDGRAPHTOBIGWIG" config "./nextflow.config" + tag "subworkflows" + tag "subworkflows_nfcore" + tag "subworkflows/bedgraph_bedclip_bedgraphtobigwig" + tag "bedgraph_bedclip_bedgraphtobigwig" + tag "ucsc" + tag "ucsc/bedclip" + tag "ucsc/bedgraphtobigwig" test("sarscov2 [bedgraph] [genome_sizes]") { diff --git a/subworkflows/nf-core/bedgraph_bedclip_bedgraphtobigwig/tests/main.nf.test.snap b/subworkflows/nf-core/bedgraph_bedclip_bedgraphtobigwig/tests/main.nf.test.snap index 7bbcf72b7..7d659211e 100644 --- a/subworkflows/nf-core/bedgraph_bedclip_bedgraphtobigwig/tests/main.nf.test.snap +++ b/subworkflows/nf-core/bedgraph_bedclip_bedgraphtobigwig/tests/main.nf.test.snap @@ -20,10 +20,6 @@ "test.clip.bedGraph:md5,e02395e1f7c593b3f79563067159ebc2" ] ], - "2": [ - "versions.yml:md5,1202cdc73b5829361d5b150dcf7fe865", - "versions.yml:md5,72a7b07bc0e796ff6805c57f7340337f" - ], "bedgraph": [ [ { @@ -41,18 +37,14 @@ }, "test.bigWig:md5,910ecc7f57e3bbd5fac5a8edba4f615d" ] - ], - "versions": [ - "versions.yml:md5,1202cdc73b5829361d5b150dcf7fe865", - "versions.yml:md5,72a7b07bc0e796ff6805c57f7340337f" ] } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2024-10-18T10:48:23.095911334" + "timestamp": "2026-01-19T15:37:58.66559" }, "sarscov2 [bedgraph] [genome_sizes] - stub": { "content": [ @@ -75,10 +67,6 @@ "test.clip.bedGraph:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "2": [ - "versions.yml:md5,1202cdc73b5829361d5b150dcf7fe865", - "versions.yml:md5,72a7b07bc0e796ff6805c57f7340337f" - ], "bedgraph": [ [ { @@ -96,17 +84,13 @@ }, "test.bigWig:md5,d41d8cd98f00b204e9800998ecf8427e" ] - ], - "versions": [ - "versions.yml:md5,1202cdc73b5829361d5b150dcf7fe865", - "versions.yml:md5,72a7b07bc0e796ff6805c57f7340337f" ] } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2024-10-18T10:48:45.587883209" + "timestamp": "2026-01-19T15:38:05.023743" } } \ No newline at end of file diff --git a/subworkflows/nf-core/fastq_align_hisat2/main.nf b/subworkflows/nf-core/fastq_align_hisat2/main.nf index 511fe035c..5376403d6 100644 --- a/subworkflows/nf-core/fastq_align_hisat2/main.nf +++ b/subworkflows/nf-core/fastq_align_hisat2/main.nf @@ -4,28 +4,22 @@ include { BAM_SORT_STATS_SAMTOOLS } from '../bam_sort_stats_samtools/main' workflow FASTQ_ALIGN_HISAT2 { take: - reads // channel: [ val(meta), [ reads ] ] - index // channel: /path/to/hisat2/index - splicesites // channel: /path/to/genome.splicesites.txt - ch_fasta // channel: [ fasta ] + reads // channel: [ val(meta), [ reads ] ] + index // channel: /path/to/hisat2/index + splicesites // channel: /path/to/genome.splicesites.txt + ch_fasta // channel: [ fasta ] + save_unaligned // val: boolean main: - - ch_versions = Channel.empty() - - // // Map reads with HISAT2 // - HISAT2_ALIGN ( reads, index, splicesites ) - ch_versions = ch_versions.mix(HISAT2_ALIGN.out.versions.first()) + HISAT2_ALIGN ( reads, index, splicesites, save_unaligned ) // // Sort, index BAM file and run samtools stats, flagstat and idxstats // BAM_SORT_STATS_SAMTOOLS ( HISAT2_ALIGN.out.bam, ch_fasta ) - ch_versions = ch_versions.mix(BAM_SORT_STATS_SAMTOOLS.out.versions) - emit: orig_bam = HISAT2_ALIGN.out.bam // channel: [ val(meta), bam ] @@ -38,6 +32,4 @@ workflow FASTQ_ALIGN_HISAT2 { stats = BAM_SORT_STATS_SAMTOOLS.out.stats // channel: [ val(meta), [ stats ] ] flagstat = BAM_SORT_STATS_SAMTOOLS.out.flagstat // channel: [ val(meta), [ flagstat ] ] idxstats = BAM_SORT_STATS_SAMTOOLS.out.idxstats // channel: [ val(meta), [ idxstats ] ] - - versions = ch_versions // channel: [ versions.yml ] } diff --git a/subworkflows/nf-core/fastq_align_hisat2/meta.yml b/subworkflows/nf-core/fastq_align_hisat2/meta.yml index 032144af5..023aef9bb 100644 --- a/subworkflows/nf-core/fastq_align_hisat2/meta.yml +++ b/subworkflows/nf-core/fastq_align_hisat2/meta.yml @@ -39,6 +39,9 @@ input: type: file description: Reference genome fasta file pattern: "*.{fasta,fa}" + - save_unaligned: + type: boolean + description: Save unaligned reads to FastQ files output: - meta: type: map diff --git a/subworkflows/nf-core/fastq_align_hisat2/nextflow.config b/subworkflows/nf-core/fastq_align_hisat2/nextflow.config index 0f6d1abdc..b0451746c 100644 --- a/subworkflows/nf-core/fastq_align_hisat2/nextflow.config +++ b/subworkflows/nf-core/fastq_align_hisat2/nextflow.config @@ -1,26 +1,39 @@ -if (!params.skip_alignment && params.aligner == 'hisat2') { - process { - withName: '.*:FASTQ_ALIGN_HISAT2:HISAT2_ALIGN' { - ext.args = '--met-stderr --new-summary --dta' - publishDir = [ - [ - path: { "${params.outdir}/${params.aligner}/log" }, - mode: params.publish_dir_mode, - pattern: '*.log' - ], - [ - path: { params.save_align_intermeds ? "${params.outdir}/${params.aligner}" : params.outdir }, - mode: params.publish_dir_mode, - pattern: '*.bam', - saveAs: { params.save_align_intermeds ? it : null } - ], - [ - path: { params.save_unaligned ? "${params.outdir}/${params.aligner}/unmapped" : params.outdir }, - mode: params.publish_dir_mode, - pattern: '*.fastq.gz', - saveAs: { params.save_unaligned ? it : null } - ] - ] +process { + withName: '.*:FASTQ_ALIGN_HISAT2:HISAT2_ALIGN' { + ext.args = { + def argsList = ['--met-stderr', '--new-summary', '--dta'] + + // Read group tags - assembled once from samplesheet meta and pipeline params + // Per-sample meta values take priority over global params + def seqCenter = meta.seq_center ?: params.seq_center + def seqPlatform = meta.seq_platform ?: params.seq_platform + if (seqPlatform || seqCenter) { + argsList << "--rg-id ${meta.id}" + argsList << "--rg SM:${meta.id}" + if (seqPlatform) argsList << "--rg PL:${seqPlatform}" + if (seqCenter) argsList << "--rg CN:${seqCenter}" + } + + argsList.join(' ') } + publishDir = [ + [ + path: { "${params.outdir}/${params.aligner}/log" }, + mode: params.publish_dir_mode, + pattern: '*.log' + ], + [ + path: { params.save_align_intermeds ? "${params.outdir}/${params.aligner}" : params.outdir }, + mode: params.publish_dir_mode, + pattern: '*.bam', + saveAs: { filename -> params.save_align_intermeds ? filename : null } + ], + [ + path: { params.save_unaligned ? "${params.outdir}/${params.aligner}/unmapped" : params.outdir }, + mode: params.publish_dir_mode, + pattern: '*.fastq.gz', + saveAs: { filename -> params.save_unaligned ? filename : null } + ] + ] } } diff --git a/subworkflows/nf-core/fastq_align_hisat2/tests/main.nf.test b/subworkflows/nf-core/fastq_align_hisat2/tests/main.nf.test index 37dd098cd..4fef033b4 100644 --- a/subworkflows/nf-core/fastq_align_hisat2/tests/main.nf.test +++ b/subworkflows/nf-core/fastq_align_hisat2/tests/main.nf.test @@ -5,8 +5,20 @@ nextflow_workflow { workflow "FASTQ_ALIGN_HISAT2" config "./nextflow.config" + tag "subworkflows" + tag "subworkflows_nfcore" + tag "subworkflows/fastq_align_hisat2" + tag "hisat2/align" + tag "hisat2/build" + tag "hisat2/extractsplicesites" + tag "samtools/flagstat" + tag "samtools/idxstats" + tag "samtools/index" + tag "samtools/sort" + tag "samtools/stats" + tag "subworkflows/bam_sort_stats_samtools" setup { run("HISAT2_EXTRACTSPLICESITES") { @@ -85,6 +97,7 @@ nextflow_workflow { [ id:'test' ], file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.fasta", checkIfExists: true) ]) + input[4] = false """ } } @@ -101,8 +114,7 @@ nextflow_workflow { workflow.out.flagstat, workflow.out.idxstats, workflow.out.stats, - workflow.out.summary, - workflow.out.versions).match()} + workflow.out.summary).match()} ) } } @@ -124,6 +136,7 @@ nextflow_workflow { [ id:'test' ], file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.fasta", checkIfExists: true) ]) + input[4] = false """ } } @@ -140,8 +153,7 @@ nextflow_workflow { workflow.out.flagstat, workflow.out.idxstats, workflow.out.stats, - workflow.out.summary, - workflow.out.versions).match()} + workflow.out.summary).match()} ) } } @@ -165,6 +177,7 @@ nextflow_workflow { [ id:'test' ], file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.fasta", checkIfExists: true) ]) + input[4] = false """ } } @@ -196,6 +209,7 @@ nextflow_workflow { [ id:'test' ], file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.fasta", checkIfExists: true) ]) + input[4] = false """ } } diff --git a/subworkflows/nf-core/fastq_align_hisat2/tests/main.nf.test.snap b/subworkflows/nf-core/fastq_align_hisat2/tests/main.nf.test.snap index 6e0044c74..29d45a218 100644 --- a/subworkflows/nf-core/fastq_align_hisat2/tests/main.nf.test.snap +++ b/subworkflows/nf-core/fastq_align_hisat2/tests/main.nf.test.snap @@ -34,7 +34,7 @@ "id": "test", "single_end": true }, - "test.stats:md5,0ebab7bf6149e6378b263997d7073067" + "test.stats:md5,77fb048bfff1ac8f1e8c8f1e916303a6" ] ], [ @@ -45,21 +45,13 @@ }, "test.hisat2.summary.log:md5,7b8a9e61b7646da1089b041333c41a87" ] - ], - [ - "versions.yml:md5,60b3d72afae0af5e6ba9d522ed2a865d", - "versions.yml:md5,6d9f7a6b7da221197ec81a78012dd306", - "versions.yml:md5,9bb4be2b6931086977d43355fd7c9edb", - "versions.yml:md5,e0481c30dd24b96ee2ace998a360ea29", - "versions.yml:md5,e5ba15fd38b21e5c3050edc8cf2ab665", - "versions.yml:md5,e65b217d1cb47f1c163fdc37023c0909" ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.2" + "nf-test": "0.9.3", + "nextflow": "25.10.3" }, - "timestamp": "2025-06-02T15:25:13.627107" + "timestamp": "2026-02-03T11:36:26.527357225" }, "sarscov2 - bam - single_end - stub": { "content": [ @@ -121,7 +113,7 @@ "id": "test", "single_end": true }, - "test.flagstat:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.flagstat:md5,67394650dbae96d1a4fcc70484822159" ] ], "8": [ @@ -133,14 +125,6 @@ "test.idxstats:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "9": [ - "versions.yml:md5,60b3d72afae0af5e6ba9d522ed2a865d", - "versions.yml:md5,6d9f7a6b7da221197ec81a78012dd306", - "versions.yml:md5,9bb4be2b6931086977d43355fd7c9edb", - "versions.yml:md5,e0481c30dd24b96ee2ace998a360ea29", - "versions.yml:md5,e5ba15fd38b21e5c3050edc8cf2ab665", - "versions.yml:md5,e65b217d1cb47f1c163fdc37023c0909" - ], "bai": [ [ { @@ -171,7 +155,7 @@ "id": "test", "single_end": true }, - "test.flagstat:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.flagstat:md5,67394650dbae96d1a4fcc70484822159" ] ], "idxstats": [ @@ -209,22 +193,14 @@ }, "test.hisat2.summary.log:md5,d41d8cd98f00b204e9800998ecf8427e" ] - ], - "versions": [ - "versions.yml:md5,60b3d72afae0af5e6ba9d522ed2a865d", - "versions.yml:md5,6d9f7a6b7da221197ec81a78012dd306", - "versions.yml:md5,9bb4be2b6931086977d43355fd7c9edb", - "versions.yml:md5,e0481c30dd24b96ee2ace998a360ea29", - "versions.yml:md5,e5ba15fd38b21e5c3050edc8cf2ab665", - "versions.yml:md5,e65b217d1cb47f1c163fdc37023c0909" ] } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.2" + "nf-test": "0.9.3", + "nextflow": "25.10.3" }, - "timestamp": "2025-06-02T15:25:50.957335" + "timestamp": "2026-02-03T11:15:05.927269028" }, "sarscov2 - bam - paired_end": { "content": [ @@ -261,7 +237,7 @@ "id": "test", "single_end": false }, - "test.stats:md5,74b78cbd41df459e1037735f714cda4f" + "test.stats:md5,4ecf87d51168df1d38cf3620afe6e2d2" ] ], [ @@ -272,21 +248,13 @@ }, "test.hisat2.summary.log:md5,9839b31db795958cc4b70711a3414e9c" ] - ], - [ - "versions.yml:md5,60b3d72afae0af5e6ba9d522ed2a865d", - "versions.yml:md5,6d9f7a6b7da221197ec81a78012dd306", - "versions.yml:md5,9bb4be2b6931086977d43355fd7c9edb", - "versions.yml:md5,e0481c30dd24b96ee2ace998a360ea29", - "versions.yml:md5,e5ba15fd38b21e5c3050edc8cf2ab665", - "versions.yml:md5,e65b217d1cb47f1c163fdc37023c0909" ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.2" + "nf-test": "0.9.3", + "nextflow": "25.10.3" }, - "timestamp": "2025-06-02T15:25:32.205573" + "timestamp": "2026-02-03T11:36:36.208310057" }, "sarscov2 - bam - paired_end - stub": { "content": [ @@ -348,7 +316,7 @@ "id": "test", "single_end": false }, - "test.flagstat:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.flagstat:md5,67394650dbae96d1a4fcc70484822159" ] ], "8": [ @@ -360,14 +328,6 @@ "test.idxstats:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "9": [ - "versions.yml:md5,60b3d72afae0af5e6ba9d522ed2a865d", - "versions.yml:md5,6d9f7a6b7da221197ec81a78012dd306", - "versions.yml:md5,9bb4be2b6931086977d43355fd7c9edb", - "versions.yml:md5,e0481c30dd24b96ee2ace998a360ea29", - "versions.yml:md5,e5ba15fd38b21e5c3050edc8cf2ab665", - "versions.yml:md5,e65b217d1cb47f1c163fdc37023c0909" - ], "bai": [ [ { @@ -398,7 +358,7 @@ "id": "test", "single_end": false }, - "test.flagstat:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.flagstat:md5,67394650dbae96d1a4fcc70484822159" ] ], "idxstats": [ @@ -436,21 +396,13 @@ }, "test.hisat2.summary.log:md5,d41d8cd98f00b204e9800998ecf8427e" ] - ], - "versions": [ - "versions.yml:md5,60b3d72afae0af5e6ba9d522ed2a865d", - "versions.yml:md5,6d9f7a6b7da221197ec81a78012dd306", - "versions.yml:md5,9bb4be2b6931086977d43355fd7c9edb", - "versions.yml:md5,e0481c30dd24b96ee2ace998a360ea29", - "versions.yml:md5,e5ba15fd38b21e5c3050edc8cf2ab665", - "versions.yml:md5,e65b217d1cb47f1c163fdc37023c0909" ] } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.2" + "nf-test": "0.9.3", + "nextflow": "25.10.3" }, - "timestamp": "2025-06-02T15:26:10.919132" + "timestamp": "2026-02-03T11:15:15.626108796" } } \ No newline at end of file diff --git a/subworkflows/nf-core/fastq_fastqc_umitools_fastp/main.nf b/subworkflows/nf-core/fastq_fastqc_umitools_fastp/main.nf index 170ce78c3..04e03c645 100644 --- a/subworkflows/nf-core/fastq_fastqc_umitools_fastp/main.nf +++ b/subworkflows/nf-core/fastq_fastqc_umitools_fastp/main.nf @@ -30,56 +30,57 @@ def getFastpAdapterSequence(json_file) { try { return json['adapter_cutting']['read1_adapter_sequence'] } - catch (Exception ex) { + catch (Exception _ex) { return "" } } workflow FASTQ_FASTQC_UMITOOLS_FASTP { take: - reads // channel: [ val(meta), [ reads ] ] + reads // channel: [ val(meta), [ reads ], adapter_fasta ] 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() - umi_log = Channel.empty() - 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() + fastqc_raw_html = channel.empty() + fastqc_raw_zip = channel.empty() + umi_log = channel.empty() + 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() + + // Split input channel for reads-only operations + reads_only = reads.map { meta, reads_files, _adapter_fasta -> [ meta, reads_files ] } if (!skip_fastqc) { FASTQC_RAW( - reads + reads_only ) 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 + trimmer_reads = reads_only + umi_reads = channel.empty() if (with_umi && !skip_umi_extract) { UMITOOLS_EXTRACT( - reads + reads_only ) + trimmer_reads = UMITOOLS_EXTRACT.out.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]) { @@ -87,25 +88,32 @@ workflow FASTQ_FASTQC_UMITOOLS_FASTP { .map { meta, _reads -> meta.single_end ? [meta, _reads] : [meta + [single_end: true], _reads[umi_discard_read % 2]] } - .set { umi_reads } + .set { trimmer_reads } } } - trim_reads = umi_reads + trim_reads = trimmer_reads if (!skip_trimming) { + // Rejoin trimmer_reads with adapter info from original input + // Use ID-based join to handle metadata modifications from UMI processing + umi_reads_with_adapters = trimmer_reads + .map { meta, reads_files -> [meta.id, meta, reads_files] } + .join( + reads.map { meta, _original_reads, adapter_fasta -> [meta.id, adapter_fasta ?: []] } + ) + .map { _sample_id, meta, umi_reads_files, adapter_fasta -> [meta, umi_reads_files, adapter_fasta] } + FASTP( - umi_reads, - adapter_fasta, + umi_reads_with_adapters, false, save_trimmed_fail, - save_merged, + 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 @@ -131,7 +139,6 @@ workflow FASTQ_FASTQC_UMITOOLS_FASTP { ) fastqc_trim_html = FASTQC_TRIM.out.html fastqc_trim_zip = FASTQC_TRIM.out.zip - ch_versions = ch_versions.mix(FASTQC_TRIM.out.versions.first()) } } @@ -140,6 +147,7 @@ workflow FASTQ_FASTQC_UMITOOLS_FASTP { fastqc_raw_html // channel: [ val(meta), [ html ] ] fastqc_raw_zip // channel: [ val(meta), [ zip ] ] umi_log // channel: [ val(meta), [ log ] ] + umi_reads // channel: [ val(meta), [ reads ] ] adapter_seq // channel: [ val(meta), [ adapter_seq] ] trim_json // channel: [ val(meta), [ json ] ] trim_html // channel: [ val(meta), [ html ] ] @@ -149,5 +157,4 @@ workflow FASTQ_FASTQC_UMITOOLS_FASTP { 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 // channel: [ versions.yml ] } diff --git a/subworkflows/nf-core/fastq_fastqc_umitools_fastp/nextflow.config b/subworkflows/nf-core/fastq_fastqc_umitools_fastp/nextflow.config index 38685f1d0..70b538622 100644 --- a/subworkflows/nf-core/fastq_fastqc_umitools_fastp/nextflow.config +++ b/subworkflows/nf-core/fastq_fastqc_umitools_fastp/nextflow.config @@ -1,79 +1,65 @@ -if (!(params.skip_fastqc || params.skip_qc)) { - if (params.trimmer == 'fastp') { - process { - withName: '.*:FASTQ_FASTQC_UMITOOLS_FASTP:FASTQC_RAW' { - ext.args = '--quiet' - ext.prefix = { "${meta.id}_raw" } - publishDir = [ - path: { "${params.outdir}/fastqc/raw" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } +process { + withName: '.*:FASTQ_FASTQC_UMITOOLS_FASTP:FASTQC_RAW' { + ext.args = '--quiet' + ext.prefix = { "${meta.id}_raw" } + publishDir = [ + path: { "${params.outdir}/fastqc/raw" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } - withName: '.*:FASTQ_FASTQC_UMITOOLS_FASTP:FASTQC_TRIM' { - ext.args = '--quiet' - ext.prefix = { "${meta.id}_trimmed" } - publishDir = [ - path: { "${params.outdir}/fastqc/trim" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } - } + withName: '.*:FASTQ_FASTQC_UMITOOLS_FASTP:FASTQC_TRIM' { + ext.args = '--quiet' + ext.prefix = { "${meta.id}_trimmed" } + publishDir = [ + path: { "${params.outdir}/fastqc/trim" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] } -} -if (!params.skip_trimming) { - if (params.trimmer == 'fastp') { - process { - withName: '.*:FASTQ_FASTQC_UMITOOLS_FASTP:FASTP' { - ext.args = { params.extra_fastp_args ?: '' } - publishDir = [ - [ - path: { "${params.outdir}/${params.trimmer}" }, - mode: params.publish_dir_mode, - pattern: "*.{json,html}" - ], - [ - path: { "${params.outdir}/${params.trimmer}/log" }, - mode: params.publish_dir_mode, - pattern: "*.log" - ], - [ - path: { params.save_trimmed ? "${params.outdir}/${params.trimmer}" : params.outdir }, - mode: params.publish_dir_mode, - pattern: "*.fastq.gz", - saveAs: { params.save_trimmed ? it : null } - ] - ] - } - } + withName: '.*:FASTQ_FASTQC_UMITOOLS_FASTP:FASTP' { + ext.args = { params.extra_fastp_args ?: '' } + publishDir = [ + [ + path: { "${params.outdir}/${params.trimmer}" }, + mode: params.publish_dir_mode, + pattern: "*.{json,html}" + ], + [ + path: { "${params.outdir}/${params.trimmer}/log" }, + mode: params.publish_dir_mode, + pattern: "*.log" + ], + [ + path: { params.save_trimmed ? "${params.outdir}/${params.trimmer}" : params.outdir }, + mode: params.publish_dir_mode, + pattern: "*.fastq.gz", + saveAs: { filename -> params.save_trimmed ? filename : null } + ] + ] } -} -if (params.with_umi && !params.skip_umi_extract) { - process { - withName: '.*:FASTQ_FASTQC_UMITOOLS_FASTP:UMITOOLS_EXTRACT' { - ext.args = { [ - params.umitools_extract_method ? "--extract-method=${params.umitools_extract_method}" : '', - params.umitools_bc_pattern ? "--bc-pattern='${params.umitools_bc_pattern}'" : '', - params.umitools_bc_pattern2 ? "--bc-pattern2='${params.umitools_bc_pattern2}'" : '', - params.umitools_umi_separator ? "--umi-separator='${params.umitools_umi_separator}'" : '' - ].join(' ').trim() } - publishDir = [ - [ - path: { "${params.outdir}/umitools" }, - mode: params.publish_dir_mode, - pattern: "*.log" - ], - [ - path: { params.save_umi_intermeds ? "${params.outdir}/umitools" : params.outdir }, - mode: params.publish_dir_mode, - pattern: "*.fastq.gz", - saveAs: { params.save_umi_intermeds ? it : null } - ] + withName: '.*:FASTQ_FASTQC_UMITOOLS_FASTP:UMITOOLS_EXTRACT' { + ext.args = { [ + params.umitools_extract_method ? "--extract-method=${params.umitools_extract_method}" : '', + params.umitools_bc_pattern ? "--bc-pattern='${params.umitools_bc_pattern}'" : '', + params.umitools_bc_pattern2 ? "--bc-pattern2='${params.umitools_bc_pattern2}'" : '', + params.umitools_umi_separator ? "--umi-separator='${params.umitools_umi_separator}'" : '' + ].join(' ').trim() } + publishDir = [ + [ + path: { "${params.outdir}/umitools" }, + mode: params.publish_dir_mode, + pattern: "*.log" + ], + [ + path: { params.save_umi_intermeds ? "${params.outdir}/umitools" : params.outdir }, + mode: params.publish_dir_mode, + pattern: "*.fastq.gz", + saveAs: { filename -> params.save_umi_intermeds ? filename : null } ] - } + ] } } 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 b16f869cc..2daf04102 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 @@ -5,6 +5,13 @@ nextflow_workflow { 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]") { @@ -16,7 +23,6 @@ nextflow_workflow { skip_umi_extract = false umi_discard_read = 1 skip_trimming = false - adapter_fasta = [] save_trimmed_fail = false save_merged = false min_trimmed_reads = 1 @@ -29,24 +35,24 @@ nextflow_workflow { [ 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] = params.skip_fastqc input[2] = params.with_umi input[3] = params.skip_umi_extract input[4] = params.umi_discard_read input[5] = params.skip_trimming - input[6] = params.adapter_fasta - input[7] = params.save_trimmed_fail - input[8] = params.save_merged - input[9] = params.min_trimmed_reads + input[6] = params.save_trimmed_fail + input[7] = params.save_merged + input[8] = params.min_trimmed_reads """ } } then { + assert workflow.success assertAll( - { assert workflow.success }, { assert workflow.out.fastqc_raw_html }, { assert workflow.out.fastqc_raw_zip }, { assert workflow.out.fastqc_trim_html }, @@ -56,12 +62,10 @@ nextflow_workflow { { 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 + workflow.out.umi_log ).match() } ) @@ -77,7 +81,6 @@ nextflow_workflow { skip_umi_extract = false umi_discard_read = 1 skip_trimming = false - adapter_fasta = [] save_trimmed_fail = false save_merged = false min_trimmed_reads = 1 @@ -90,24 +93,24 @@ nextflow_workflow { [ 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] = params.skip_fastqc input[2] = params.with_umi input[3] = params.skip_umi_extract input[4] = params.umi_discard_read input[5] = params.skip_trimming - input[6] = params.adapter_fasta - input[7] = params.save_trimmed_fail - input[8] = params.save_merged - input[9] = params.min_trimmed_reads + input[6] = params.save_trimmed_fail + input[7] = params.save_merged + input[8] = params.min_trimmed_reads """ } } then { + assert workflow.success assertAll( - { assert workflow.success }, { assert workflow.out.trim_html }, { assert workflow.out.trim_log }, { assert !workflow.out.fastqc_raw_html }, @@ -117,12 +120,10 @@ nextflow_workflow { { 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 + workflow.out.umi_log ).match() } ) @@ -138,7 +139,6 @@ nextflow_workflow { skip_umi_extract = false umi_discard_read = 1 skip_trimming = false - adapter_fasta = [] save_trimmed_fail = false save_merged = false min_trimmed_reads = 1 @@ -151,38 +151,34 @@ nextflow_workflow { [ 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] = params.skip_fastqc input[2] = params.with_umi input[3] = params.skip_umi_extract input[4] = params.umi_discard_read input[5] = params.skip_trimming - input[6] = params.adapter_fasta - input[7] = params.save_trimmed_fail - input[8] = params.save_merged - input[9] = params.min_trimmed_reads + input[6] = params.save_trimmed_fail + input[7] = params.save_merged + input[8] = params.min_trimmed_reads """ } } then { + assert workflow.success 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 + workflow.out.trim_reads_merged ).match() } ) @@ -199,7 +195,6 @@ nextflow_workflow { skip_umi_extract = true umi_discard_read = 1 skip_trimming = false - adapter_fasta = [] save_trimmed_fail = false save_merged = false min_trimmed_reads = 1 @@ -212,24 +207,24 @@ nextflow_workflow { [ 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] = params.skip_fastqc input[2] = params.with_umi input[3] = params.skip_umi_extract input[4] = params.umi_discard_read input[5] = params.skip_trimming - input[6] = params.adapter_fasta - input[7] = params.save_trimmed_fail - input[8] = params.save_merged - input[9] = params.min_trimmed_reads + input[6] = params.save_trimmed_fail + input[7] = params.save_merged + input[8] = params.min_trimmed_reads """ } } then { + assert workflow.success assertAll( - { assert workflow.success }, { assert workflow.out.fastqc_raw_html }, { assert workflow.out.fastqc_raw_zip }, { assert workflow.out.fastqc_trim_html }, @@ -239,12 +234,10 @@ nextflow_workflow { { 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 + workflow.out.umi_log ).match() } ) @@ -260,7 +253,6 @@ nextflow_workflow { skip_umi_extract = true umi_discard_read = 2 skip_trimming = false - adapter_fasta = [] save_trimmed_fail = false save_merged = false min_trimmed_reads = 1 @@ -273,24 +265,24 @@ nextflow_workflow { [ 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] = params.skip_fastqc input[2] = params.with_umi input[3] = params.skip_umi_extract input[4] = params.umi_discard_read input[5] = params.skip_trimming - input[6] = params.adapter_fasta - input[7] = params.save_trimmed_fail - input[8] = params.save_merged - input[9] = params.min_trimmed_reads + input[6] = params.save_trimmed_fail + input[7] = params.save_merged + input[8] = params.min_trimmed_reads """ } } then { + assert workflow.success assertAll( - { assert workflow.success }, { assert workflow.out.fastqc_raw_html }, { assert workflow.out.fastqc_raw_zip }, { assert workflow.out.fastqc_trim_html }, @@ -300,12 +292,10 @@ nextflow_workflow { { 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 + workflow.out.umi_log ).match() } ) @@ -321,7 +311,6 @@ nextflow_workflow { skip_umi_extract = false umi_discard_read = 1 skip_trimming = true - adapter_fasta = [] save_trimmed_fail = false save_merged = false min_trimmed_reads = 1 @@ -334,24 +323,24 @@ nextflow_workflow { [ 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] = params.skip_fastqc input[2] = params.with_umi input[3] = params.skip_umi_extract input[4] = params.umi_discard_read input[5] = params.skip_trimming - input[6] = params.adapter_fasta - input[7] = params.save_trimmed_fail - input[8] = params.save_merged - input[9] = params.min_trimmed_reads + input[6] = params.save_trimmed_fail + input[7] = params.save_merged + input[8] = params.min_trimmed_reads """ } } then { + assert workflow.success assertAll( - { assert workflow.success }, { assert workflow.out.fastqc_raw_html }, { assert workflow.out.fastqc_raw_zip }, { assert !workflow.out.fastqc_trim_html }, @@ -362,12 +351,10 @@ nextflow_workflow { // 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 + workflow.out.umi_log ).match() } ) @@ -383,7 +370,6 @@ nextflow_workflow { skip_umi_extract = false umi_discard_read = 1 skip_trimming = false - adapter_fasta = [] save_trimmed_fail = true save_merged = false min_trimmed_reads = 1 @@ -396,24 +382,24 @@ nextflow_workflow { [ 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] = params.skip_fastqc input[2] = params.with_umi input[3] = params.skip_umi_extract input[4] = params.umi_discard_read input[5] = params.skip_trimming - input[6] = params.adapter_fasta - input[7] = params.save_trimmed_fail - input[8] = params.save_merged - input[9] = params.min_trimmed_reads + input[6] = params.save_trimmed_fail + input[7] = params.save_merged + input[8] = params.min_trimmed_reads """ } } then { + assert workflow.success assertAll( - { assert workflow.success }, { assert workflow.out.fastqc_raw_html }, { assert workflow.out.fastqc_raw_zip }, { assert workflow.out.fastqc_trim_html }, @@ -423,12 +409,10 @@ nextflow_workflow { { 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 + workflow.out.umi_log ).match() } ) @@ -444,7 +428,6 @@ nextflow_workflow { skip_umi_extract = false umi_discard_read = 1 skip_trimming = false - adapter_fasta = [] save_trimmed_fail = false save_merged = true min_trimmed_reads = 1 @@ -457,24 +440,24 @@ nextflow_workflow { [ 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] = params.skip_fastqc input[2] = params.with_umi input[3] = params.skip_umi_extract input[4] = params.umi_discard_read input[5] = params.skip_trimming - input[6] = params.adapter_fasta - input[7] = params.save_trimmed_fail - input[8] = params.save_merged - input[9] = params.min_trimmed_reads + input[6] = params.save_trimmed_fail + input[7] = params.save_merged + input[8] = params.min_trimmed_reads """ } } then { + assert workflow.success assertAll( - { assert workflow.success }, { assert workflow.out.fastqc_raw_html }, { assert workflow.out.fastqc_raw_zip }, { assert workflow.out.fastqc_trim_html }, @@ -484,12 +467,10 @@ nextflow_workflow { { 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 + workflow.out.umi_log ).match() } ) @@ -506,7 +487,6 @@ nextflow_workflow { skip_umi_extract = false umi_discard_read = 1 skip_trimming = false - adapter_fasta = [] save_trimmed_fail = false save_merged = true min_trimmed_reads = 26 @@ -519,24 +499,24 @@ nextflow_workflow { [ 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] = params.skip_fastqc input[2] = params.with_umi input[3] = params.skip_umi_extract input[4] = params.umi_discard_read input[5] = params.skip_trimming - input[6] = params.adapter_fasta - input[7] = params.save_trimmed_fail - input[8] = params.save_merged - input[9] = params.min_trimmed_reads + input[6] = params.save_trimmed_fail + input[7] = params.save_merged + input[8] = params.min_trimmed_reads """ } } then { + assert workflow.success assertAll( - { assert workflow.success }, { assert workflow.out.fastqc_raw_html }, { assert workflow.out.fastqc_raw_zip }, { assert workflow.out.fastqc_trim_html }, @@ -546,12 +526,10 @@ nextflow_workflow { { 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 + workflow.out.umi_log ).match() } ) @@ -568,7 +546,6 @@ nextflow_workflow { skip_umi_extract = false umi_discard_read = 1 skip_trimming = false - adapter_fasta = [] save_trimmed_fail = false save_merged = false min_trimmed_reads = 1 @@ -581,24 +558,24 @@ nextflow_workflow { [ 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] = params.skip_fastqc input[2] = params.with_umi input[3] = params.skip_umi_extract input[4] = params.umi_discard_read input[5] = params.skip_trimming - input[6] = params.adapter_fasta - input[7] = params.save_trimmed_fail - input[8] = params.save_merged - input[9] = params.min_trimmed_reads + input[6] = params.save_trimmed_fail + input[7] = params.save_merged + input[8] = params.min_trimmed_reads """ } } then { + assert workflow.success assertAll( - { assert workflow.success }, { assert snapshot(workflow.out).match() } ) } @@ -614,7 +591,6 @@ nextflow_workflow { skip_umi_extract = false umi_discard_read = 1 skip_trimming = false - adapter_fasta = [] save_trimmed_fail = false save_merged = false min_trimmed_reads = 1 @@ -627,24 +603,24 @@ nextflow_workflow { [ 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] = params.skip_fastqc input[2] = params.with_umi input[3] = params.skip_umi_extract input[4] = params.umi_discard_read input[5] = params.skip_trimming - input[6] = params.adapter_fasta - input[7] = params.save_trimmed_fail - input[8] = params.save_merged - input[9] = params.min_trimmed_reads + input[6] = params.save_trimmed_fail + input[7] = params.save_merged + input[8] = params.min_trimmed_reads """ } } then { + assert workflow.success assertAll( - { assert workflow.success }, { assert snapshot(workflow.out).match() } ) } @@ -660,7 +636,6 @@ nextflow_workflow { skip_umi_extract = false umi_discard_read = 1 skip_trimming = false - adapter_fasta = [] save_trimmed_fail = false save_merged = false min_trimmed_reads = 1 @@ -673,17 +648,17 @@ nextflow_workflow { [ 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] = params.skip_fastqc input[2] = params.with_umi input[3] = params.skip_umi_extract input[4] = params.umi_discard_read input[5] = params.skip_trimming - input[6] = params.adapter_fasta - input[7] = params.save_trimmed_fail - input[8] = params.save_merged - input[9] = params.min_trimmed_reads + input[6] = params.save_trimmed_fail + input[7] = params.save_merged + input[8] = params.min_trimmed_reads """ } } @@ -707,7 +682,6 @@ nextflow_workflow { skip_umi_extract = true umi_discard_read = 1 skip_trimming = false - adapter_fasta = [] save_trimmed_fail = false save_merged = false min_trimmed_reads = 1 @@ -720,24 +694,24 @@ nextflow_workflow { [ 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] = params.skip_fastqc input[2] = params.with_umi input[3] = params.skip_umi_extract input[4] = params.umi_discard_read input[5] = params.skip_trimming - input[6] = params.adapter_fasta - input[7] = params.save_trimmed_fail - input[8] = params.save_merged - input[9] = params.min_trimmed_reads + input[6] = params.save_trimmed_fail + input[7] = params.save_merged + input[8] = params.min_trimmed_reads """ } } then { + assert workflow.success assertAll( - { assert workflow.success }, { assert snapshot(workflow.out).match() } ) } @@ -753,7 +727,6 @@ nextflow_workflow { skip_umi_extract = true umi_discard_read = 2 skip_trimming = false - adapter_fasta = [] save_trimmed_fail = false save_merged = false min_trimmed_reads = 1 @@ -766,24 +739,24 @@ nextflow_workflow { [ 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] = params.skip_fastqc input[2] = params.with_umi input[3] = params.skip_umi_extract input[4] = params.umi_discard_read input[5] = params.skip_trimming - input[6] = params.adapter_fasta - input[7] = params.save_trimmed_fail - input[8] = params.save_merged - input[9] = params.min_trimmed_reads + input[6] = params.save_trimmed_fail + input[7] = params.save_merged + input[8] = params.min_trimmed_reads """ } } then { + assert workflow.success assertAll( - { assert workflow.success }, { assert snapshot(workflow.out).match() } ) } @@ -799,7 +772,6 @@ nextflow_workflow { skip_umi_extract = false umi_discard_read = 1 skip_trimming = true - adapter_fasta = [] save_trimmed_fail = false save_merged = false min_trimmed_reads = 1 @@ -812,17 +784,17 @@ nextflow_workflow { [ 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] = params.skip_fastqc input[2] = params.with_umi input[3] = params.skip_umi_extract input[4] = params.umi_discard_read input[5] = params.skip_trimming - input[6] = params.adapter_fasta - input[7] = params.save_trimmed_fail - input[8] = params.save_merged - input[9] = params.min_trimmed_reads + input[6] = params.save_trimmed_fail + input[7] = params.save_merged + input[8] = params.min_trimmed_reads """ } } @@ -842,8 +814,7 @@ nextflow_workflow { workflow.out.trim_read_count, workflow.out.trim_reads_fail, workflow.out.trim_reads_merged, - workflow.out.umi_log, - workflow.out.versions).match() } + workflow.out.umi_log).match() } ) } } @@ -858,7 +829,6 @@ nextflow_workflow { skip_umi_extract = false umi_discard_read = 1 skip_trimming = false - adapter_fasta = [] save_trimmed_fail = true save_merged = false min_trimmed_reads = 1 @@ -871,24 +841,24 @@ nextflow_workflow { [ 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] = params.skip_fastqc input[2] = params.with_umi input[3] = params.skip_umi_extract input[4] = params.umi_discard_read input[5] = params.skip_trimming - input[6] = params.adapter_fasta - input[7] = params.save_trimmed_fail - input[8] = params.save_merged - input[9] = params.min_trimmed_reads + input[6] = params.save_trimmed_fail + input[7] = params.save_merged + input[8] = params.min_trimmed_reads """ } } then { + assert workflow.success assertAll( - { assert workflow.success }, { assert snapshot(workflow.out).match() } ) } @@ -904,7 +874,6 @@ nextflow_workflow { skip_umi_extract = false umi_discard_read = 1 skip_trimming = false - adapter_fasta = [] save_trimmed_fail = false save_merged = true min_trimmed_reads = 1 @@ -917,17 +886,17 @@ nextflow_workflow { [ 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] = params.skip_fastqc input[2] = params.with_umi input[3] = params.skip_umi_extract input[4] = params.umi_discard_read input[5] = params.skip_trimming - input[6] = params.adapter_fasta - input[7] = params.save_trimmed_fail - input[8] = params.save_merged - input[9] = params.min_trimmed_reads + input[6] = params.save_trimmed_fail + input[7] = params.save_merged + input[8] = params.min_trimmed_reads """ } } @@ -951,7 +920,6 @@ nextflow_workflow { skip_umi_extract = false umi_discard_read = 1 skip_trimming = false - adapter_fasta = [] save_trimmed_fail = false save_merged = true min_trimmed_reads = 26 @@ -964,24 +932,24 @@ nextflow_workflow { [ 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] = params.skip_fastqc input[2] = params.with_umi input[3] = params.skip_umi_extract input[4] = params.umi_discard_read input[5] = params.skip_trimming - input[6] = params.adapter_fasta - input[7] = params.save_trimmed_fail - input[8] = params.save_merged - input[9] = params.min_trimmed_reads + input[6] = params.save_trimmed_fail + input[7] = params.save_merged + input[8] = params.min_trimmed_reads """ } } then { + assert workflow.success 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 47c8b1d55..37955fbb9 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 @@ -17,20 +17,11 @@ "single_end": false }, [ - "test_1.fastp.fastq.gz:md5,67b2bbae47f073e05a97a9c2edce23c7", - "test_2.fastp.fastq.gz:md5,25cbdca08e2083dbd4f0502de6b62f39" + "test_R1.fastp.fastq.gz:md5,67b2bbae47f073e05a97a9c2edce23c7", + "test_R2.fastp.fastq.gz:md5,25cbdca08e2083dbd4f0502de6b62f39" ] ] ], - [ - [ - { - "id": "test", - "single_end": false - }, - "test.fastp.json:md5,7cf3bff1922b512bcca58439eb2d3679" - ] - ], [ [ { @@ -48,18 +39,13 @@ ], [ - ], - [ - "versions.yml:md5,20ceba9ff7bc15c1fbe2b369022178ce", - "versions.yml:md5,c50aa59475ab901bc6f9a2cf7b1a14e0", - "versions.yml:md5,f3dcaae948e8eed92b4a5557b4c6668e" ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nf-test": "0.9.3", + "nextflow": "25.10.3" }, - "timestamp": "2025-03-31T13:42:42.262180451" + "timestamp": "2026-02-03T13:18:53.838884403" }, "sarscov2 paired-end [fastq] | with_umi": { "content": [ @@ -81,15 +67,6 @@ "test.fastp.fastq.gz:md5,ba8c6c3a7ce718d9a2c5857e2edf53bc" ] ], - [ - [ - { - "id": "test", - "single_end": true - }, - "test.fastp.json:md5,da0403af3eb7d950f209a1e758de2db0" - ] - ], [ [ { @@ -104,19 +81,13 @@ ], [ - ], - [ - "versions.yml:md5,01f264f78de3c6d893c449cc6d3cd721", - "versions.yml:md5,20ceba9ff7bc15c1fbe2b369022178ce", - "versions.yml:md5,c50aa59475ab901bc6f9a2cf7b1a14e0", - "versions.yml:md5,f3dcaae948e8eed92b4a5557b4c6668e" ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nf-test": "0.9.3", + "nextflow": "25.10.3" }, - "timestamp": "2025-03-31T13:42:31.905020586" + "timestamp": "2026-02-03T13:18:44.18362126" }, "sarscov2 paired-end [fastq] | umi_discard_read = 2 - stub": { "content": [ @@ -128,8 +99,8 @@ "single_end": false }, [ - "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", - "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + "test_R1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_R2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" ] ] ], @@ -143,6 +114,9 @@ ] ], "10": [ + + ], + "11": [ [ { "id": "test", @@ -151,7 +125,7 @@ 1 ] ], - "11": [ + "12": [ [ { "id": "test", @@ -160,7 +134,7 @@ "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "12": [ + "13": [ [ { "id": "test", @@ -169,11 +143,6 @@ "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "13": [ - "versions.yml:md5,20ceba9ff7bc15c1fbe2b369022178ce", - "versions.yml:md5,c50aa59475ab901bc6f9a2cf7b1a14e0", - "versions.yml:md5,f3dcaae948e8eed92b4a5557b4c6668e" - ], "2": [ [ { @@ -187,6 +156,9 @@ ], "4": [ + + ], + "5": [ [ { "id": "test", @@ -195,7 +167,7 @@ "" ] ], - "5": [ + "6": [ [ { "id": "test", @@ -204,7 +176,7 @@ "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "6": [ + "7": [ [ { "id": "test", @@ -213,7 +185,7 @@ "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "7": [ + "8": [ [ { "id": "test", @@ -221,9 +193,6 @@ }, "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" ] - ], - "8": [ - ], "9": [ @@ -280,8 +249,8 @@ "single_end": false }, [ - "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", - "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + "test_R1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_R2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" ] ] ], @@ -330,18 +299,16 @@ "umi_log": [ ], - "versions": [ - "versions.yml:md5,20ceba9ff7bc15c1fbe2b369022178ce", - "versions.yml:md5,c50aa59475ab901bc6f9a2cf7b1a14e0", - "versions.yml:md5,f3dcaae948e8eed92b4a5557b4c6668e" + "umi_reads": [ + ] } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nf-test": "0.9.3", + "nextflow": "25.10.3" }, - "timestamp": "2025-03-31T14:19:10.965815964" + "timestamp": "2026-02-03T13:20:16.937742298" }, "sarscov2 paired-end [fastq] | skip_trimming - stub": { "content": [ @@ -392,16 +359,13 @@ ], [ - ], - [ - "versions.yml:md5,f3dcaae948e8eed92b4a5557b4c6668e" ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.2" + "nf-test": "0.9.3", + "nextflow": "25.10.3" }, - "timestamp": "2024-12-12T14:32:15.355312216" + "timestamp": "2026-02-03T13:20:23.046804125" }, "sarscov2 paired-end [fastq] | skip_trimming": { "content": [ @@ -423,19 +387,13 @@ ], [ - ], - [ - - ], - [ - "versions.yml:md5,f3dcaae948e8eed92b4a5557b4c6668e" ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.2" + "nf-test": "0.9.3", + "nextflow": "25.10.3" }, - "timestamp": "2024-12-12T14:24:19.774510678" + "timestamp": "2026-02-03T13:19:12.020305151" }, "sarscov2 paired-end [fastq] | umi_discard_read = 2": { "content": [ @@ -455,20 +413,11 @@ "single_end": false }, [ - "test_1.fastp.fastq.gz:md5,67b2bbae47f073e05a97a9c2edce23c7", - "test_2.fastp.fastq.gz:md5,25cbdca08e2083dbd4f0502de6b62f39" + "test_R1.fastp.fastq.gz:md5,67b2bbae47f073e05a97a9c2edce23c7", + "test_R2.fastp.fastq.gz:md5,25cbdca08e2083dbd4f0502de6b62f39" ] ] ], - [ - [ - { - "id": "test", - "single_end": false - }, - "test.fastp.json:md5,7cf3bff1922b512bcca58439eb2d3679" - ] - ], [ [ { @@ -486,18 +435,13 @@ ], [ - ], - [ - "versions.yml:md5,20ceba9ff7bc15c1fbe2b369022178ce", - "versions.yml:md5,c50aa59475ab901bc6f9a2cf7b1a14e0", - "versions.yml:md5,f3dcaae948e8eed92b4a5557b4c6668e" ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nf-test": "0.9.3", + "nextflow": "25.10.3" }, - "timestamp": "2025-03-31T13:42:49.469455815" + "timestamp": "2026-02-03T13:19:03.546158761" }, "sarscov2 paired-end [fastq] | min_trimmed_reads = 26 - stub": { "content": [ @@ -509,8 +453,8 @@ "single_end": false }, [ - "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", - "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + "test_R1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_R2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" ] ] ], @@ -529,7 +473,7 @@ "id": "test", "single_end": false }, - 26 + "test.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" ] ], "11": [ @@ -538,7 +482,7 @@ "id": "test", "single_end": false }, - "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + 26 ] ], "12": [ @@ -547,13 +491,17 @@ "id": "test", "single_end": false }, - "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "13": [ - "versions.yml:md5,20ceba9ff7bc15c1fbe2b369022178ce", - "versions.yml:md5,c50aa59475ab901bc6f9a2cf7b1a14e0", - "versions.yml:md5,f3dcaae948e8eed92b4a5557b4c6668e" + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "2": [ [ @@ -568,6 +516,9 @@ ], "4": [ + + ], + "5": [ [ { "id": "test", @@ -576,7 +527,7 @@ "" ] ], - "5": [ + "6": [ [ { "id": "test", @@ -585,7 +536,7 @@ "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "6": [ + "7": [ [ { "id": "test", @@ -594,7 +545,7 @@ "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "7": [ + "8": [ [ { "id": "test", @@ -602,18 +553,9 @@ }, "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" ] - ], - "8": [ - ], "9": [ - [ - { - "id": "test", - "single_end": false - }, - "test.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" - ] + ], "adapter_seq": [ [ @@ -667,8 +609,8 @@ "single_end": false }, [ - "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", - "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + "test_R1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_R2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" ] ] ], @@ -723,18 +665,16 @@ "umi_log": [ ], - "versions": [ - "versions.yml:md5,20ceba9ff7bc15c1fbe2b369022178ce", - "versions.yml:md5,c50aa59475ab901bc6f9a2cf7b1a14e0", - "versions.yml:md5,f3dcaae948e8eed92b4a5557b4c6668e" + "umi_reads": [ + ] } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nf-test": "0.9.3", + "nextflow": "25.10.3" }, - "timestamp": "2025-03-31T14:19:34.087570563" + "timestamp": "2026-02-03T13:20:43.232621634" }, "sarscov2 paired-end [fastq] | save_trimmed_fail": { "content": [ @@ -754,20 +694,11 @@ "single_end": false }, [ - "test_1.fastp.fastq.gz:md5,6ff32a64c5188b9a9192be1398c262c7", - "test_2.fastp.fastq.gz:md5,db0cb7c9977e94ac2b4b446ebd017a8a" + "test_R1.fastp.fastq.gz:md5,6ff32a64c5188b9a9192be1398c262c7", + "test_R2.fastp.fastq.gz:md5,db0cb7c9977e94ac2b4b446ebd017a8a" ] ] ], - [ - [ - { - "id": "test", - "single_end": false - }, - "test.fastp.json:md5,5009a892192f2084c2af69c153d88d6c" - ] - ], [ [ { @@ -785,8 +716,8 @@ }, [ "test.paired.fail.fastq.gz:md5,409b687c734cedd7a1fec14d316e1366", - "test_1.fail.fastq.gz:md5,4f273cf3159c13f79e8ffae12f5661f6", - "test_2.fail.fastq.gz:md5,f97b9edefb5649aab661fbc9e71fc995" + "test_R1.fail.fastq.gz:md5,4f273cf3159c13f79e8ffae12f5661f6", + "test_R2.fail.fastq.gz:md5,f97b9edefb5649aab661fbc9e71fc995" ] ] ], @@ -795,18 +726,13 @@ ], [ - ], - [ - "versions.yml:md5,20ceba9ff7bc15c1fbe2b369022178ce", - "versions.yml:md5,c50aa59475ab901bc6f9a2cf7b1a14e0", - "versions.yml:md5,f3dcaae948e8eed92b4a5557b4c6668e" ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nf-test": "0.9.3", + "nextflow": "25.10.3" }, - "timestamp": "2025-03-31T13:43:06.081852222" + "timestamp": "2026-02-03T13:19:21.78045793" }, "sarscov2 paired-end [fastq] | skip_fastqc": { "content": [ @@ -826,20 +752,11 @@ "single_end": false }, [ - "test_1.fastp.fastq.gz:md5,67b2bbae47f073e05a97a9c2edce23c7", - "test_2.fastp.fastq.gz:md5,25cbdca08e2083dbd4f0502de6b62f39" + "test_R1.fastp.fastq.gz:md5,67b2bbae47f073e05a97a9c2edce23c7", + "test_R2.fastp.fastq.gz:md5,25cbdca08e2083dbd4f0502de6b62f39" ] ] ], - [ - [ - { - "id": "test", - "single_end": false - }, - "test.fastp.json:md5,7cf3bff1922b512bcca58439eb2d3679" - ] - ], [ [ { @@ -857,16 +774,13 @@ ], [ - ], - [ - "versions.yml:md5,20ceba9ff7bc15c1fbe2b369022178ce" ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nf-test": "0.9.3", + "nextflow": "25.10.3" }, - "timestamp": "2025-03-31T13:41:40.619624901" + "timestamp": "2026-02-03T13:18:28.968763192" }, "sarscov2 paired-end [fastq] | save_trimmed_fail - stub": { "content": [ @@ -878,8 +792,8 @@ "single_end": false }, [ - "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", - "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + "test_R1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_R2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" ] ] ], @@ -893,6 +807,9 @@ ] ], "10": [ + + ], + "11": [ [ { "id": "test", @@ -901,7 +818,7 @@ 1 ] ], - "11": [ + "12": [ [ { "id": "test", @@ -910,7 +827,7 @@ "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "12": [ + "13": [ [ { "id": "test", @@ -919,11 +836,6 @@ "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "13": [ - "versions.yml:md5,20ceba9ff7bc15c1fbe2b369022178ce", - "versions.yml:md5,c50aa59475ab901bc6f9a2cf7b1a14e0", - "versions.yml:md5,f3dcaae948e8eed92b4a5557b4c6668e" - ], "2": [ [ { @@ -937,6 +849,9 @@ ], "4": [ + + ], + "5": [ [ { "id": "test", @@ -945,7 +860,7 @@ "" ] ], - "5": [ + "6": [ [ { "id": "test", @@ -954,7 +869,7 @@ "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "6": [ + "7": [ [ { "id": "test", @@ -963,7 +878,7 @@ "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "7": [ + "8": [ [ { "id": "test", @@ -972,7 +887,7 @@ "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "8": [ + "9": [ [ { "id": "test", @@ -980,13 +895,10 @@ }, [ "test.paired.fail.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", - "test_1.fail.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", - "test_2.fail.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + "test_R1.fail.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_R2.fail.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" ] ] - ], - "9": [ - ], "adapter_seq": [ [ @@ -1040,8 +952,8 @@ "single_end": false }, [ - "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", - "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + "test_R1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_R2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" ] ] ], @@ -1089,8 +1001,8 @@ }, [ "test.paired.fail.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", - "test_1.fail.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", - "test_2.fail.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + "test_R1.fail.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_R2.fail.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" ] ] ], @@ -1100,18 +1012,16 @@ "umi_log": [ ], - "versions": [ - "versions.yml:md5,20ceba9ff7bc15c1fbe2b369022178ce", - "versions.yml:md5,c50aa59475ab901bc6f9a2cf7b1a14e0", - "versions.yml:md5,f3dcaae948e8eed92b4a5557b4c6668e" + "umi_reads": [ + ] } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nf-test": "0.9.3", + "nextflow": "25.10.3" }, - "timestamp": "2025-03-31T14:19:23.614397633" + "timestamp": "2026-02-03T13:20:29.76860289" }, "sarscov2 paired-end [fastq] | skip_fastqc - stub": { "content": [ @@ -1123,8 +1033,8 @@ "single_end": false }, [ - "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", - "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + "test_R1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_R2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" ] ] ], @@ -1132,6 +1042,9 @@ ], "10": [ + + ], + "11": [ [ { "id": "test", @@ -1139,15 +1052,12 @@ }, 1 ] - ], - "11": [ - ], "12": [ ], "13": [ - "versions.yml:md5,20ceba9ff7bc15c1fbe2b369022178ce" + ], "2": [ @@ -1156,6 +1066,9 @@ ], "4": [ + + ], + "5": [ [ { "id": "test", @@ -1164,7 +1077,7 @@ "" ] ], - "5": [ + "6": [ [ { "id": "test", @@ -1173,7 +1086,7 @@ "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "6": [ + "7": [ [ { "id": "test", @@ -1182,7 +1095,7 @@ "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "7": [ + "8": [ [ { "id": "test", @@ -1190,9 +1103,6 @@ }, "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" ] - ], - "8": [ - ], "9": [ @@ -1225,8 +1135,8 @@ "single_end": false }, [ - "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", - "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + "test_R1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_R2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" ] ] ], @@ -1275,16 +1185,16 @@ "umi_log": [ ], - "versions": [ - "versions.yml:md5,20ceba9ff7bc15c1fbe2b369022178ce" + "umi_reads": [ + ] } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nf-test": "0.9.3", + "nextflow": "25.10.3" }, - "timestamp": "2025-03-31T14:18:50.988594099" + "timestamp": "2026-02-03T13:19:54.094320651" }, "sarscov2 paired-end [fastq] | save_merged - stub": { "content": [ @@ -1296,8 +1206,8 @@ "single_end": false }, [ - "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", - "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + "test_R1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_R2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" ] ] ], @@ -1316,7 +1226,7 @@ "id": "test", "single_end": false }, - 1 + "test.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" ] ], "11": [ @@ -1325,7 +1235,7 @@ "id": "test", "single_end": false }, - "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + 1 ] ], "12": [ @@ -1334,13 +1244,17 @@ "id": "test", "single_end": false }, - "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "13": [ - "versions.yml:md5,20ceba9ff7bc15c1fbe2b369022178ce", - "versions.yml:md5,c50aa59475ab901bc6f9a2cf7b1a14e0", - "versions.yml:md5,f3dcaae948e8eed92b4a5557b4c6668e" + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "2": [ [ @@ -1355,6 +1269,9 @@ ], "4": [ + + ], + "5": [ [ { "id": "test", @@ -1363,7 +1280,7 @@ "" ] ], - "5": [ + "6": [ [ { "id": "test", @@ -1372,7 +1289,7 @@ "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "6": [ + "7": [ [ { "id": "test", @@ -1381,7 +1298,7 @@ "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "7": [ + "8": [ [ { "id": "test", @@ -1389,18 +1306,9 @@ }, "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" ] - ], - "8": [ - ], "9": [ - [ - { - "id": "test", - "single_end": false - }, - "test.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" - ] + ], "adapter_seq": [ [ @@ -1454,8 +1362,8 @@ "single_end": false }, [ - "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", - "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + "test_R1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_R2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" ] ] ], @@ -1510,18 +1418,16 @@ "umi_log": [ ], - "versions": [ - "versions.yml:md5,20ceba9ff7bc15c1fbe2b369022178ce", - "versions.yml:md5,c50aa59475ab901bc6f9a2cf7b1a14e0", - "versions.yml:md5,f3dcaae948e8eed92b4a5557b4c6668e" + "umi_reads": [ + ] } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nf-test": "0.9.3", + "nextflow": "25.10.3" }, - "timestamp": "2025-03-31T14:19:28.872773752" + "timestamp": "2026-02-03T13:20:36.446963981" }, "sarscov2 paired-end [fastq] | min_trimmed_reads = 26": { "content": [ @@ -1541,20 +1447,11 @@ "single_end": false }, [ - "test_1.fastp.fastq.gz:md5,54b726a55e992a869fd3fa778afe1672", - "test_2.fastp.fastq.gz:md5,29d3b33b869f7b63417b8ff07bb128ba" + "test_R1.fastp.fastq.gz:md5,54b726a55e992a869fd3fa778afe1672", + "test_R2.fastp.fastq.gz:md5,29d3b33b869f7b63417b8ff07bb128ba" ] ] ], - [ - [ - { - "id": "test", - "single_end": false - }, - "test.fastp.json:md5,8f99097bfa04b629891105b8af9c429f" - ] - ], [ [ { @@ -1578,18 +1475,13 @@ ], [ - ], - [ - "versions.yml:md5,20ceba9ff7bc15c1fbe2b369022178ce", - "versions.yml:md5,c50aa59475ab901bc6f9a2cf7b1a14e0", - "versions.yml:md5,f3dcaae948e8eed92b4a5557b4c6668e" ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nf-test": "0.9.3", + "nextflow": "25.10.3" }, - "timestamp": "2025-03-31T13:43:23.073649509" + "timestamp": "2026-02-03T13:19:41.14746713" }, "sarscov2 paired-end [fastq]": { "content": [ @@ -1609,20 +1501,11 @@ "single_end": false }, [ - "test_1.fastp.fastq.gz:md5,67b2bbae47f073e05a97a9c2edce23c7", - "test_2.fastp.fastq.gz:md5,25cbdca08e2083dbd4f0502de6b62f39" + "test_R1.fastp.fastq.gz:md5,67b2bbae47f073e05a97a9c2edce23c7", + "test_R2.fastp.fastq.gz:md5,25cbdca08e2083dbd4f0502de6b62f39" ] ] ], - [ - [ - { - "id": "test", - "single_end": false - }, - "test.fastp.json:md5,7cf3bff1922b512bcca58439eb2d3679" - ] - ], [ [ { @@ -1640,18 +1523,13 @@ ], [ - ], - [ - "versions.yml:md5,20ceba9ff7bc15c1fbe2b369022178ce", - "versions.yml:md5,c50aa59475ab901bc6f9a2cf7b1a14e0", - "versions.yml:md5,f3dcaae948e8eed92b4a5557b4c6668e" ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nf-test": "0.9.3", + "nextflow": "25.10.3" }, - "timestamp": "2025-03-31T13:41:35.19441141" + "timestamp": "2026-02-03T13:18:22.011891063" }, "sarscov2 paired-end [fastq] - stub": { "content": [ @@ -1663,8 +1541,8 @@ "single_end": false }, [ - "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", - "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + "test_R1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_R2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" ] ] ], @@ -1678,6 +1556,9 @@ ] ], "10": [ + + ], + "11": [ [ { "id": "test", @@ -1686,7 +1567,7 @@ 1 ] ], - "11": [ + "12": [ [ { "id": "test", @@ -1695,7 +1576,7 @@ "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "12": [ + "13": [ [ { "id": "test", @@ -1704,11 +1585,6 @@ "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "13": [ - "versions.yml:md5,20ceba9ff7bc15c1fbe2b369022178ce", - "versions.yml:md5,c50aa59475ab901bc6f9a2cf7b1a14e0", - "versions.yml:md5,f3dcaae948e8eed92b4a5557b4c6668e" - ], "2": [ [ { @@ -1722,6 +1598,9 @@ ], "4": [ + + ], + "5": [ [ { "id": "test", @@ -1730,7 +1609,7 @@ "" ] ], - "5": [ + "6": [ [ { "id": "test", @@ -1739,7 +1618,7 @@ "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "6": [ + "7": [ [ { "id": "test", @@ -1748,7 +1627,7 @@ "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "7": [ + "8": [ [ { "id": "test", @@ -1756,9 +1635,6 @@ }, "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" ] - ], - "8": [ - ], "9": [ @@ -1815,8 +1691,8 @@ "single_end": false }, [ - "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", - "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + "test_R1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_R2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" ] ] ], @@ -1865,18 +1741,16 @@ "umi_log": [ ], - "versions": [ - "versions.yml:md5,20ceba9ff7bc15c1fbe2b369022178ce", - "versions.yml:md5,c50aa59475ab901bc6f9a2cf7b1a14e0", - "versions.yml:md5,f3dcaae948e8eed92b4a5557b4c6668e" + "umi_reads": [ + ] } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nf-test": "0.9.3", + "nextflow": "25.10.3" }, - "timestamp": "2025-03-31T13:43:31.664576438" + "timestamp": "2026-02-03T13:19:47.918568452" }, "sarscov2 paired-end [fastq] | save_merged": { "content": [ @@ -1896,20 +1770,11 @@ "single_end": false }, [ - "test_1.fastp.fastq.gz:md5,54b726a55e992a869fd3fa778afe1672", - "test_2.fastp.fastq.gz:md5,29d3b33b869f7b63417b8ff07bb128ba" + "test_R1.fastp.fastq.gz:md5,54b726a55e992a869fd3fa778afe1672", + "test_R2.fastp.fastq.gz:md5,29d3b33b869f7b63417b8ff07bb128ba" ] ] ], - [ - [ - { - "id": "test", - "single_end": false - }, - "test.fastp.json:md5,8f99097bfa04b629891105b8af9c429f" - ] - ], [ [ { @@ -1933,18 +1798,13 @@ ], [ - ], - [ - "versions.yml:md5,20ceba9ff7bc15c1fbe2b369022178ce", - "versions.yml:md5,c50aa59475ab901bc6f9a2cf7b1a14e0", - "versions.yml:md5,f3dcaae948e8eed92b4a5557b4c6668e" ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nf-test": "0.9.3", + "nextflow": "25.10.3" }, - "timestamp": "2025-03-31T13:43:16.218890529" + "timestamp": "2026-02-03T13:19:31.453483505" }, "sarscov2 paired-end [fastq] | with_umi - stub": { "content": [ @@ -1968,6 +1828,9 @@ ] ], "10": [ + + ], + "11": [ [ { "id": "test", @@ -1976,7 +1839,7 @@ 1 ] ], - "11": [ + "12": [ [ { "id": "test", @@ -1985,7 +1848,7 @@ "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "12": [ + "13": [ [ { "id": "test", @@ -1994,12 +1857,6 @@ "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "13": [ - "versions.yml:md5,01f264f78de3c6d893c449cc6d3cd721", - "versions.yml:md5,20ceba9ff7bc15c1fbe2b369022178ce", - "versions.yml:md5,c50aa59475ab901bc6f9a2cf7b1a14e0", - "versions.yml:md5,f3dcaae948e8eed92b4a5557b4c6668e" - ], "2": [ [ { @@ -2022,9 +1879,12 @@ [ { "id": "test", - "single_end": true + "single_end": false }, - "" + [ + "test.umi_extract_1.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test.umi_extract_2.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] ] ], "5": [ @@ -2033,7 +1893,7 @@ "id": "test", "single_end": true }, - "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + "" ] ], "6": [ @@ -2042,7 +1902,7 @@ "id": "test", "single_end": true }, - "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "7": [ @@ -2051,11 +1911,17 @@ "id": "test", "single_end": true }, - "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "8": [ - + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "9": [ @@ -2165,19 +2031,25 @@ "test.umi_extract.log:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "versions": [ - "versions.yml:md5,01f264f78de3c6d893c449cc6d3cd721", - "versions.yml:md5,20ceba9ff7bc15c1fbe2b369022178ce", - "versions.yml:md5,c50aa59475ab901bc6f9a2cf7b1a14e0", - "versions.yml:md5,f3dcaae948e8eed92b4a5557b4c6668e" + "umi_reads": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.umi_extract_1.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test.umi_extract_2.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] ] } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nf-test": "0.9.3", + "nextflow": "25.10.3" }, - "timestamp": "2025-03-31T14:19:00.760820449" + "timestamp": "2026-02-03T13:20:03.594981453" }, "sarscov2 paired-end [fastq] | skip_umi_extract - stub": { "content": [ @@ -2189,8 +2061,8 @@ "single_end": false }, [ - "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", - "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + "test_R1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_R2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" ] ] ], @@ -2204,6 +2076,9 @@ ] ], "10": [ + + ], + "11": [ [ { "id": "test", @@ -2212,7 +2087,7 @@ 1 ] ], - "11": [ + "12": [ [ { "id": "test", @@ -2221,7 +2096,7 @@ "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "12": [ + "13": [ [ { "id": "test", @@ -2230,11 +2105,6 @@ "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "13": [ - "versions.yml:md5,20ceba9ff7bc15c1fbe2b369022178ce", - "versions.yml:md5,c50aa59475ab901bc6f9a2cf7b1a14e0", - "versions.yml:md5,f3dcaae948e8eed92b4a5557b4c6668e" - ], "2": [ [ { @@ -2248,6 +2118,9 @@ ], "4": [ + + ], + "5": [ [ { "id": "test", @@ -2256,7 +2129,7 @@ "" ] ], - "5": [ + "6": [ [ { "id": "test", @@ -2265,7 +2138,7 @@ "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "6": [ + "7": [ [ { "id": "test", @@ -2274,7 +2147,7 @@ "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "7": [ + "8": [ [ { "id": "test", @@ -2282,9 +2155,6 @@ }, "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" ] - ], - "8": [ - ], "9": [ @@ -2341,8 +2211,8 @@ "single_end": false }, [ - "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", - "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + "test_R1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_R2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" ] ] ], @@ -2391,17 +2261,15 @@ "umi_log": [ ], - "versions": [ - "versions.yml:md5,20ceba9ff7bc15c1fbe2b369022178ce", - "versions.yml:md5,c50aa59475ab901bc6f9a2cf7b1a14e0", - "versions.yml:md5,f3dcaae948e8eed92b4a5557b4c6668e" + "umi_reads": [ + ] } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nf-test": "0.9.3", + "nextflow": "25.10.3" }, - "timestamp": "2025-03-31T14:19:05.849804123" + "timestamp": "2026-02-03T13:20:10.2749087" } } \ No newline at end of file diff --git a/subworkflows/nf-core/fastq_fastqc_umitools_trimgalore/main.nf b/subworkflows/nf-core/fastq_fastqc_umitools_trimgalore/main.nf index c020c173b..262cbf530 100644 --- a/subworkflows/nf-core/fastq_fastqc_umitools_trimgalore/main.nf +++ b/subworkflows/nf-core/fastq_fastqc_umitools_trimgalore/main.nf @@ -36,47 +36,45 @@ workflow FASTQ_FASTQC_UMITOOLS_TRIMGALORE { min_trimmed_reads // integer: > 0 main: - ch_versions = Channel.empty() - fastqc_html = Channel.empty() - fastqc_zip = Channel.empty() + fastqc_html = channel.empty() + fastqc_zip = channel.empty() if (!skip_fastqc) { FASTQC(reads) fastqc_html = FASTQC.out.html fastqc_zip = FASTQC.out.zip - ch_versions = ch_versions.mix(FASTQC.out.versions.first()) } - umi_reads = reads - umi_log = Channel.empty() + trimmer_reads = reads + umi_log = channel.empty() + umi_reads = channel.empty() if (with_umi && !skip_umi_extract) { UMITOOLS_EXTRACT(reads) + trimmer_reads = UMITOOLS_EXTRACT.out.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]] + .map { meta, reads_ -> + meta.single_end ? [meta, reads_] : [meta + ['single_end': true], reads_[umi_discard_read % 2]] } - .set { umi_reads } + .set { trimmer_reads } } } - trim_reads = umi_reads - trim_unpaired = Channel.empty() - trim_html = Channel.empty() - trim_zip = Channel.empty() - trim_log = Channel.empty() - trim_read_count = Channel.empty() + trim_reads = trimmer_reads + trim_unpaired = channel.empty() + trim_html = channel.empty() + trim_zip = channel.empty() + trim_log = channel.empty() + trim_read_count = channel.empty() if (!skip_trimming) { - TRIMGALORE(umi_reads) + TRIMGALORE(trimmer_reads) trim_unpaired = TRIMGALORE.out.unpaired trim_html = TRIMGALORE.out.html trim_zip = TRIMGALORE.out.zip trim_log = TRIMGALORE.out.log - ch_versions = ch_versions.mix(TRIMGALORE.out.versions.first()) // // Filter FastQ files based on minimum trimmed read count after adapter trimming @@ -109,10 +107,10 @@ workflow FASTQ_FASTQC_UMITOOLS_TRIMGALORE { fastqc_html // channel: [ val(meta), [ html ] ] fastqc_zip // channel: [ val(meta), [ zip ] ] umi_log // channel: [ val(meta), [ log ] ] + umi_reads // channel: [ val(meta), [ reads ] ] trim_unpaired // channel: [ val(meta), [ reads ] ] trim_html // channel: [ val(meta), [ html ] ] trim_zip // channel: [ val(meta), [ zip ] ] trim_log // channel: [ val(meta), [ txt ] ] trim_read_count // channel: [ val(meta), val(count) ] - versions = ch_versions // channel: [ versions.yml ] } diff --git a/subworkflows/nf-core/fastq_fastqc_umitools_trimgalore/nextflow.config b/subworkflows/nf-core/fastq_fastqc_umitools_trimgalore/nextflow.config index 46c7a72b6..221f16dff 100644 --- a/subworkflows/nf-core/fastq_fastqc_umitools_trimgalore/nextflow.config +++ b/subworkflows/nf-core/fastq_fastqc_umitools_trimgalore/nextflow.config @@ -1,89 +1,74 @@ -if (!(params.skip_fastqc || params.skip_qc)) { - if (params.trimmer == 'trimgalore') { - process { - withName: '.*:FASTQ_FASTQC_UMITOOLS_TRIMGALORE:FASTQC' { - ext.args = '--quiet' - ext.prefix = { "${meta.id}_raw" } - publishDir = [ - path: { "${params.outdir}/fastqc/raw" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } - } +process { + withName: '.*:FASTQ_FASTQC_UMITOOLS_TRIMGALORE:FASTQC' { + ext.args = '--quiet' + ext.prefix = { "${meta.id}_raw" } + publishDir = [ + path: { "${params.outdir}/fastqc/raw" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] } -} - -if (!params.skip_trimming) { - if (params.trimmer == 'trimgalore') { - process { - withName: '.*:FASTQ_FASTQC_UMITOOLS_TRIMGALORE:TRIMGALORE' { - ext.args = { - // Function to convert argument strings into a map - def argsToMap = { String args -> - args.split("\\s(?=--)").collectEntries { - def parts = it.trim().split(/\s+/, 2) - [(parts.first()): parts.last()] - } - } - - // Initialize the map with preconfigured values - def preset_args_map = argsToMap(""" - --fastqc_args '-t ${task.cpus}' - """.trim()) - // Consolidate the extra arguments - def final_args_map = preset_args_map + (params.extra_trimgalore_args ? argsToMap(params.extra_trimgalore_args) : [:]) + withName: '.*:FASTQ_FASTQC_UMITOOLS_TRIMGALORE:TRIMGALORE' { + ext.args = { + // Initialize the map with preconfigured values + def preset_args_map = ["--fastqc_args": "'-t ${task.cpus}'"] - // Convert the map back to a list and then to a single string - final_args_map.collect { key, value -> "${key} ${value}" }.join(' ').trim() + // Parse extra args if provided + def extra_args_map = [:] + if (params.extra_trimgalore_args) { + params.extra_trimgalore_args.split("\\s(?=--)").each { arg -> + def parts = arg.trim().split(/\s+/, 2) + extra_args_map[parts.first()] = parts.last() } - ext.prefix = { "${meta.id}_trimmed" } - publishDir = [ - [ - path: { "${params.outdir}/fastqc/trim" }, - mode: params.publish_dir_mode, - pattern: "*.{html,zip}" - ], - [ - path: { params.save_trimmed ? "${params.outdir}/${params.trimmer}" : params.outdir }, - mode: params.publish_dir_mode, - pattern: "*.fq.gz", - saveAs: { params.save_trimmed ? it : null } - ], - [ - path: { "${params.outdir}/${params.trimmer}" }, - mode: params.publish_dir_mode, - pattern: "*.txt" - ] - ] } + + // Consolidate the arguments (extra args override preset) + def final_args_map = preset_args_map + extra_args_map + + // Convert the map back to a single string + final_args_map.collect { key, value -> "${key} ${value}" }.join(' ').trim() } + ext.prefix = { "${meta.id}_trimmed" } + publishDir = [ + [ + path: { "${params.outdir}/fastqc/trim" }, + mode: params.publish_dir_mode, + pattern: "*.{html,zip}" + ], + [ + path: { params.save_trimmed ? "${params.outdir}/${params.trimmer}" : params.outdir }, + mode: params.publish_dir_mode, + pattern: "*.fq.gz", + saveAs: { filename -> params.save_trimmed ? filename : null } + ], + [ + path: { "${params.outdir}/${params.trimmer}" }, + mode: params.publish_dir_mode, + pattern: "*.txt" + ] + ] } -} -if (params.with_umi && !params.skip_umi_extract) { - process { - withName: '.*:FASTQ_FASTQC_UMITOOLS_TRIMGALORE:UMITOOLS_EXTRACT' { - ext.args = { [ - params.umitools_extract_method ? "--extract-method=${params.umitools_extract_method}" : '', - params.umitools_bc_pattern ? "--bc-pattern='${params.umitools_bc_pattern}'" : '', - params.umitools_bc_pattern2 ? "--bc-pattern2='${params.umitools_bc_pattern2}'" : '', - params.umitools_umi_separator ? "--umi-separator='${params.umitools_umi_separator}'" : '' - ].join(' ').trim() } - publishDir = [ - [ - path: { "${params.outdir}/umitools" }, - mode: params.publish_dir_mode, - pattern: "*.log" - ], - [ - path: { params.save_umi_intermeds ? "${params.outdir}/umitools" : params.outdir }, - mode: params.publish_dir_mode, - pattern: "*.fastq.gz", - saveAs: { params.save_umi_intermeds ? it : null } - ] + withName: '.*:FASTQ_FASTQC_UMITOOLS_TRIMGALORE:UMITOOLS_EXTRACT' { + ext.args = { [ + params.umitools_extract_method ? "--extract-method=${params.umitools_extract_method}" : '', + params.umitools_bc_pattern ? "--bc-pattern='${params.umitools_bc_pattern}'" : '', + params.umitools_bc_pattern2 ? "--bc-pattern2='${params.umitools_bc_pattern2}'" : '', + params.umitools_umi_separator ? "--umi-separator='${params.umitools_umi_separator}'" : '' + ].join(' ').trim() } + publishDir = [ + [ + path: { "${params.outdir}/umitools" }, + mode: params.publish_dir_mode, + pattern: "*.log" + ], + [ + path: { params.save_umi_intermeds ? "${params.outdir}/umitools" : params.outdir }, + mode: params.publish_dir_mode, + pattern: "*.fastq.gz", + saveAs: { filename -> params.save_umi_intermeds ? filename : null } ] - } + ] } } diff --git a/subworkflows/nf-core/fastq_fastqc_umitools_trimgalore/tests/main.nf.test b/subworkflows/nf-core/fastq_fastqc_umitools_trimgalore/tests/main.nf.test index 3fffd234b..1c66c0687 100644 --- a/subworkflows/nf-core/fastq_fastqc_umitools_trimgalore/tests/main.nf.test +++ b/subworkflows/nf-core/fastq_fastqc_umitools_trimgalore/tests/main.nf.test @@ -5,6 +5,17 @@ nextflow_workflow { workflow "FASTQ_FASTQC_UMITOOLS_TRIMGALORE" config './nextflow.config' + tag "subworkflows" + tag "subworkflows_nfcore" + tag "subworkflows/fastq_fastqc_umitools_trimgalore" + tag "fastqc" + tag "umitools/extract" + tag "trimgalore" + + tag "FASTQC" + tag "UMITOOLS_EXTRACT" + tag "TRIMGALORE" + test("test single end read with UMI") { when { @@ -32,7 +43,7 @@ nextflow_workflow { workflow.out.reads, workflow.out.trim_read_count, workflow.out.trim_unpaired, - workflow.out.versions).match() } +).match() } ) } } @@ -66,7 +77,7 @@ nextflow_workflow { workflow.out.reads, workflow.out.trim_read_count, workflow.out.trim_unpaired, - workflow.out.versions).match() } +).match() } ) } } @@ -99,7 +110,7 @@ nextflow_workflow { workflow.out.reads, workflow.out.trim_read_count, workflow.out.trim_unpaired, - workflow.out.versions).match() } +).match() } ) } } @@ -132,7 +143,7 @@ nextflow_workflow { { assert snapshot( workflow.out.trim_read_count, workflow.out.trim_unpaired, - workflow.out.versions).match() } +).match() } ) } } diff --git a/subworkflows/nf-core/fastq_fastqc_umitools_trimgalore/tests/main.nf.test.snap b/subworkflows/nf-core/fastq_fastqc_umitools_trimgalore/tests/main.nf.test.snap index f4e3f408c..a22db98bc 100644 --- a/subworkflows/nf-core/fastq_fastqc_umitools_trimgalore/tests/main.nf.test.snap +++ b/subworkflows/nf-core/fastq_fastqc_umitools_trimgalore/tests/main.nf.test.snap @@ -33,7 +33,16 @@ ] ], "4": [ - + [ + { + "id": "test", + "single_end": false + }, + [ + "test.umi_extract_1.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test.umi_extract_2.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] ], "5": [ @@ -42,6 +51,9 @@ ], "7": [ + + ], + "8": [ [ { "id": "test", @@ -50,7 +62,7 @@ "test.fastq.gz_trimming_report.txt:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "8": [ + "9": [ [ { "id": "test", @@ -59,11 +71,6 @@ 0 ] ], - "9": [ - "versions.yml:md5,3e4b7f058c0aa96ba41c3e4d6df6e839", - "versions.yml:md5,6bcfe4e08308ca239c09bbd6cbcef429", - "versions.yml:md5,7e740129a23c5ac21c27476e30f8a6d2" - ], "fastqc_html": [ [ { @@ -121,18 +128,25 @@ "test.umi_extract.log:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "versions": [ - "versions.yml:md5,3e4b7f058c0aa96ba41c3e4d6df6e839", - "versions.yml:md5,6bcfe4e08308ca239c09bbd6cbcef429", - "versions.yml:md5,7e740129a23c5ac21c27476e30f8a6d2" + "umi_reads": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.umi_extract_1.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test.umi_extract_2.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] ] } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.2" + "nf-test": "0.9.3", + "nextflow": "25.10.3" }, - "timestamp": "2024-12-05T22:45:22.365353" + "timestamp": "2026-02-03T13:21:45.022632239" }, "test paired end read without UMI - stub": { "content": [ @@ -171,6 +185,9 @@ ], "7": [ + + ], + "8": [ [ { "id": "test", @@ -182,7 +199,7 @@ ] ] ], - "8": [ + "9": [ [ { "id": "test", @@ -191,10 +208,6 @@ 0 ] ], - "9": [ - "versions.yml:md5,6bcfe4e08308ca239c09bbd6cbcef429", - "versions.yml:md5,7e740129a23c5ac21c27476e30f8a6d2" - ], "fastqc_html": [ [ { @@ -249,17 +262,16 @@ "umi_log": [ ], - "versions": [ - "versions.yml:md5,6bcfe4e08308ca239c09bbd6cbcef429", - "versions.yml:md5,7e740129a23c5ac21c27476e30f8a6d2" + "umi_reads": [ + ] } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.2" + "nf-test": "0.9.3", + "nextflow": "25.10.3" }, - "timestamp": "2024-12-05T22:45:26.514305" + "timestamp": "2026-02-03T13:21:51.075428076" }, "test paired end read without UMI": { "content": [ @@ -286,17 +298,13 @@ ], [ - ], - [ - "versions.yml:md5,6bcfe4e08308ca239c09bbd6cbcef429", - "versions.yml:md5,7e740129a23c5ac21c27476e30f8a6d2" ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.2" + "nf-test": "0.9.3", + "nextflow": "25.10.3" }, - "timestamp": "2024-12-05T22:45:06.899923" + "timestamp": "2026-02-03T13:21:22.252381045" }, "test single end read with UMI": { "content": [ @@ -320,18 +328,13 @@ ], [ - ], - [ - "versions.yml:md5,3e4b7f058c0aa96ba41c3e4d6df6e839", - "versions.yml:md5,6bcfe4e08308ca239c09bbd6cbcef429", - "versions.yml:md5,7e740129a23c5ac21c27476e30f8a6d2" ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.2" + "nf-test": "0.9.3", + "nextflow": "25.10.3" }, - "timestamp": "2024-12-05T22:44:50.05749" + "timestamp": "2026-02-03T13:21:01.887880112" }, "test paired end read with UMI": { "content": [ @@ -355,18 +358,13 @@ ], [ - ], - [ - "versions.yml:md5,3e4b7f058c0aa96ba41c3e4d6df6e839", - "versions.yml:md5,6bcfe4e08308ca239c09bbd6cbcef429", - "versions.yml:md5,7e740129a23c5ac21c27476e30f8a6d2" ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.2" + "nf-test": "0.9.3", + "nextflow": "25.10.3" }, - "timestamp": "2024-12-05T22:45:00.015694" + "timestamp": "2026-02-03T13:21:13.989761245" }, "test skip all steps": { "content": [ @@ -375,16 +373,13 @@ ], [ - ], - [ - ] ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.09.0" + "nf-test": "0.9.3", + "nextflow": "25.10.3" }, - "timestamp": "2024-10-09T19:19:22.192915" + "timestamp": "2026-02-03T13:21:27.191712947" }, "test single end read with UMI - stub": { "content": [ @@ -420,7 +415,13 @@ ] ], "4": [ - + [ + { + "id": "test", + "single_end": true + }, + "test.umi_extract.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] ], "5": [ @@ -429,6 +430,9 @@ ], "7": [ + + ], + "8": [ [ { "id": "test", @@ -437,7 +441,7 @@ "test.fastq.gz_trimming_report.txt:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "8": [ + "9": [ [ { "id": "test", @@ -446,11 +450,6 @@ 0 ] ], - "9": [ - "versions.yml:md5,3e4b7f058c0aa96ba41c3e4d6df6e839", - "versions.yml:md5,6bcfe4e08308ca239c09bbd6cbcef429", - "versions.yml:md5,7e740129a23c5ac21c27476e30f8a6d2" - ], "fastqc_html": [ [ { @@ -508,17 +507,21 @@ "test.umi_extract.log:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "versions": [ - "versions.yml:md5,3e4b7f058c0aa96ba41c3e4d6df6e839", - "versions.yml:md5,6bcfe4e08308ca239c09bbd6cbcef429", - "versions.yml:md5,7e740129a23c5ac21c27476e30f8a6d2" + "umi_reads": [ + [ + { + "id": "test", + "single_end": true + }, + "test.umi_extract.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] ] } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.2" + "nf-test": "0.9.3", + "nextflow": "25.10.3" }, - "timestamp": "2024-12-05T22:45:15.763472" + "timestamp": "2026-02-03T13:21:36.092099503" } } \ No newline at end of file diff --git a/subworkflows/nf-core/fastq_qc_trim_filter_setstrandedness/main.nf b/subworkflows/nf-core/fastq_qc_trim_filter_setstrandedness/main.nf index a418a1a24..381ecccc6 100644 --- a/subworkflows/nf-core/fastq_qc_trim_filter_setstrandedness/main.nf +++ b/subworkflows/nf-core/fastq_qc_trim_filter_setstrandedness/main.nf @@ -1,15 +1,14 @@ -include { BBMAP_BBSPLIT } from '../../../modules/nf-core/bbmap/bbsplit' -include { CAT_FASTQ } from '../../../modules/nf-core/cat/fastq/main' -include { SORTMERNA } from '../../../modules/nf-core/sortmerna/main' -include { SORTMERNA as SORTMERNA_INDEX } from '../../../modules/nf-core/sortmerna/main' -include { FQ_LINT } from '../../../modules/nf-core/fq/lint/main' -include { FQ_LINT as FQ_LINT_AFTER_TRIMMING } from '../../../modules/nf-core/fq/lint/main' -include { FQ_LINT as FQ_LINT_AFTER_BBSPLIT } from '../../../modules/nf-core/fq/lint/main' -include { FQ_LINT as FQ_LINT_AFTER_SORTMERNA } from '../../../modules/nf-core/fq/lint/main' - -include { FASTQ_SUBSAMPLE_FQ_SALMON } from '../fastq_subsample_fq_salmon' -include { FASTQ_FASTQC_UMITOOLS_TRIMGALORE } from '../fastq_fastqc_umitools_trimgalore' -include { FASTQ_FASTQC_UMITOOLS_FASTP } from '../fastq_fastqc_umitools_fastp' +include { BBMAP_BBSPLIT } from '../../../modules/nf-core/bbmap/bbsplit' +include { FASTQC as FASTQC_FILTERED } from '../../../modules/nf-core/fastqc' +include { CAT_FASTQ } from '../../../modules/nf-core/cat/fastq/main' +include { FQ_LINT } from '../../../modules/nf-core/fq/lint/main' +include { FQ_LINT as FQ_LINT_AFTER_TRIMMING } from '../../../modules/nf-core/fq/lint/main' +include { FQ_LINT as FQ_LINT_AFTER_BBSPLIT } from '../../../modules/nf-core/fq/lint/main' +include { FQ_LINT as FQ_LINT_AFTER_RIBO_REMOVAL } from '../../../modules/nf-core/fq/lint/main' +include { FASTQ_REMOVE_RRNA } from '../fastq_remove_rrna' +include { FASTQ_SUBSAMPLE_FQ_SALMON } from '../fastq_subsample_fq_salmon' +include { FASTQ_FASTQC_UMITOOLS_TRIMGALORE } from '../fastq_fastqc_umitools_trimgalore' +include { FASTQ_FASTQC_UMITOOLS_FASTP } from '../fastq_fastqc_umitools_fastp' // // Function to determine library type by comparing type counts. @@ -63,9 +62,9 @@ def getSalmonInferredStrandedness(json_file, stranded_threshold = 0.8, unstrande // https://groups.google.com/g/sailfish-users/c/yxzBDv6NB6I def unstrandedKeys = ['IU', 'U', 'MU'] - def forwardFragments = forwardKeys.collect { libCounts[it] ?: 0 }.sum() - def reverseFragments = reverseKeys.collect { libCounts[it] ?: 0 }.sum() - def unstrandedFragments = unstrandedKeys.collect { libCounts[it] ?: 0 }.sum() + def forwardFragments = forwardKeys.collect { key -> libCounts[key] ?: 0 }.sum() + def reverseFragments = reverseKeys.collect { key -> libCounts[key] ?: 0 }.sum() + def unstrandedFragments = unstrandedKeys.collect { key -> libCounts[key] ?: 0 }.sum() // Use shared calculation function to determine strandedness return calculateStrandedness(forwardFragments, reverseFragments, unstrandedFragments, stranded_threshold, unstranded_threshold) @@ -85,44 +84,88 @@ def multiqcTsvFromList(tsv_data, header) { workflow FASTQ_QC_TRIM_FILTER_SETSTRANDEDNESS { take: + // Input channels ch_reads // channel: [ val(meta), [ reads ] ] ch_fasta // channel: /path/to/genome.fasta ch_transcript_fasta // channel: /path/to/transcript.fasta ch_gtf // channel: /path/to/genome.gtf ch_salmon_index // channel: /path/to/salmon/index/ (optional) ch_sortmerna_index // channel: /path/to/sortmerna/index/ (optional) + ch_bowtie2_index // channel: /path/to/bowtie2/index/ (optional) ch_bbsplit_index // channel: /path/to/bbsplit/index/ (optional) - ch_rrna_fastas // channel: one or more fasta files containing rrna sequences to be passed to SortMeRNA (optional) + ch_rrna_fastas // channel: one or more fasta files containing rrna sequences to be passed to SortMeRNA/Bowtie2 (optional) + + // Skip options skip_bbsplit // boolean: Skip BBSplit for removal of non-reference genome reads. skip_fastqc // boolean: true/false skip_trimming // boolean: true/false skip_umi_extract // boolean: true/false + skip_linting // boolean: true/false + + // Index generation make_salmon_index // boolean: Whether to create salmon index before running salmon quant make_sortmerna_index // boolean: Whether to create a sortmerna index before running sortmerna + make_bowtie2_index // boolean: Whether to create a bowtie2 index before running bowtie2 + + // Trimming options trimmer // string (enum): 'fastp' or 'trimgalore' min_trimmed_reads // integer: > 0 save_trimmed // boolean: true/false - remove_ribo_rna // boolean: true/false: whether to run sortmerna to remove rrnas + fastp_merge // boolean: true/false: whether to stitch paired end reads together in FASTP output + + // rRNA removal options + remove_ribo_rna // boolean: true/false: whether to remove rRNA + ribo_removal_tool // string (enum): 'sortmerna', 'ribodetector', or 'bowtie2' + + // UMI options with_umi // boolean: true/false: Enable UMI-based read deduplication. umi_discard_read // integer: 0, 1 or 2 + + // Merging options + save_merged_fastq // boolean: true/false: Save merged FastQ files even for single-library samples + + // Strandedness thresholds stranded_threshold // float: The fraction of stranded reads that must be assigned to a strandedness for confident assignment. Must be at least 0.5 unstranded_threshold // float: The difference in fraction of stranded reads assigned to 'forward' and 'reverse' below which a sample is classified as 'unstranded' - skip_linting // boolean: true/false - fastp_merge // boolean: true/false: whether to stitch paired end reads together in FASTP output main: - ch_versions = Channel.empty() - ch_filtered_reads = Channel.empty() - ch_trim_read_count = Channel.empty() - ch_multiqc_files = Channel.empty() - ch_lint_log = Channel.empty() + ch_filtered_reads = channel.empty() + ch_trim_read_count = channel.empty() + ch_multiqc_files = channel.empty() + ch_lint_log_raw = channel.empty() + ch_lint_log_trimmed = channel.empty() + ch_lint_log_bbsplit = channel.empty() + ch_lint_log_ribo = channel.empty() + + // Individual output channels for workflow outputs + ch_fastqc_raw_html = channel.empty() + ch_fastqc_raw_zip = channel.empty() + ch_fastqc_trim_html = channel.empty() + ch_fastqc_trim_zip = channel.empty() + ch_trim_html = channel.empty() + ch_trim_zip = channel.empty() + ch_trim_log = channel.empty() + ch_trim_json = channel.empty() + ch_trim_unpaired = channel.empty() + ch_umi_log = channel.empty() + ch_umi_reads = channel.empty() + ch_bbsplit_stats = channel.empty() + ch_sortmerna_log = channel.empty() + ch_ribodetector_log = channel.empty() + ch_seqkit_stats = channel.empty() + ch_bowtie2_log = channel.empty() + ch_bowtie2_index = channel.empty() + ch_seqkit_prefixed = channel.empty() + ch_seqkit_converted = channel.empty() + ch_fastqc_filtered_html = channel.empty() + ch_fastqc_filtered_zip = channel.empty() ch_reads .branch { meta, fastqs -> - single: fastqs.size() == 1 + single: fastqs.size() == 1 && fastqs.flatten()[0].name.endsWith('.gz') && !save_merged_fastq return [meta, fastqs.flatten()] - multiple: fastqs.size() > 1 + multiple: true return [meta, fastqs.flatten()] } .set { ch_fastq } @@ -134,8 +177,6 @@ workflow FASTQ_QC_TRIM_FILTER_SETSTRANDEDNESS { ch_fastq.multiple ).reads.mix(ch_fastq.single).set { ch_filtered_reads } - ch_versions = ch_versions.mix(CAT_FASTQ.out.versions.first()) - // // MODULE: Lint FastQ files // @@ -144,9 +185,8 @@ workflow FASTQ_QC_TRIM_FILTER_SETSTRANDEDNESS { FQ_LINT( ch_filtered_reads ) - ch_versions = ch_versions.mix(FQ_LINT.out.versions.first()) - ch_lint_log = ch_lint_log.mix(FQ_LINT.out.lint) - ch_filtered_reads = ch_filtered_reads.join(FQ_LINT.out.lint.map { it[0] }) + ch_lint_log_raw = FQ_LINT.out.lint + ch_filtered_reads = ch_filtered_reads.join(FQ_LINT.out.lint.map { meta, _lint -> meta }) } // @@ -165,10 +205,20 @@ workflow FASTQ_QC_TRIM_FILTER_SETSTRANDEDNESS { ch_filtered_reads = FASTQ_FASTQC_UMITOOLS_TRIMGALORE.out.reads ch_trim_read_count = FASTQ_FASTQC_UMITOOLS_TRIMGALORE.out.trim_read_count - ch_versions = ch_versions.mix(FASTQ_FASTQC_UMITOOLS_TRIMGALORE.out.versions) + // Capture individual outputs for workflow outputs + ch_fastqc_raw_html = FASTQ_FASTQC_UMITOOLS_TRIMGALORE.out.fastqc_html + ch_fastqc_raw_zip = FASTQ_FASTQC_UMITOOLS_TRIMGALORE.out.fastqc_zip + ch_fastqc_trim_html = FASTQ_FASTQC_UMITOOLS_TRIMGALORE.out.trim_html + ch_fastqc_trim_zip = FASTQ_FASTQC_UMITOOLS_TRIMGALORE.out.trim_zip + ch_trim_log = FASTQ_FASTQC_UMITOOLS_TRIMGALORE.out.trim_log + ch_trim_unpaired = FASTQ_FASTQC_UMITOOLS_TRIMGALORE.out.trim_unpaired + ch_umi_log = FASTQ_FASTQC_UMITOOLS_TRIMGALORE.out.umi_log + ch_umi_reads = FASTQ_FASTQC_UMITOOLS_TRIMGALORE.out.umi_reads + ch_multiqc_files = FASTQ_FASTQC_UMITOOLS_TRIMGALORE.out.fastqc_zip .mix(FASTQ_FASTQC_UMITOOLS_TRIMGALORE.out.trim_zip) .mix(FASTQ_FASTQC_UMITOOLS_TRIMGALORE.out.trim_log) + .mix(FASTQ_FASTQC_UMITOOLS_TRIMGALORE.out.umi_log) .mix(ch_multiqc_files) } @@ -177,13 +227,12 @@ workflow FASTQ_QC_TRIM_FILTER_SETSTRANDEDNESS { // if (trimmer == 'fastp') { FASTQ_FASTQC_UMITOOLS_FASTP( - ch_filtered_reads, + ch_filtered_reads.map { meta, reads -> tuple(meta, reads, []) }, // Add empty adapter sequence skip_fastqc, with_umi, skip_umi_extract, umi_discard_read, skip_trimming, - [], save_trimmed, fastp_merge, min_trimmed_reads, @@ -191,10 +240,21 @@ workflow FASTQ_QC_TRIM_FILTER_SETSTRANDEDNESS { ch_filtered_reads = FASTQ_FASTQC_UMITOOLS_FASTP.out.reads ch_trim_read_count = FASTQ_FASTQC_UMITOOLS_FASTP.out.trim_read_count - ch_versions = ch_versions.mix(FASTQ_FASTQC_UMITOOLS_FASTP.out.versions) + // Capture individual outputs for workflow outputs + ch_fastqc_raw_html = FASTQ_FASTQC_UMITOOLS_FASTP.out.fastqc_raw_html + ch_fastqc_raw_zip = FASTQ_FASTQC_UMITOOLS_FASTP.out.fastqc_raw_zip + ch_fastqc_trim_html = FASTQ_FASTQC_UMITOOLS_FASTP.out.fastqc_trim_html + ch_fastqc_trim_zip = FASTQ_FASTQC_UMITOOLS_FASTP.out.fastqc_trim_zip + ch_trim_json = FASTQ_FASTQC_UMITOOLS_FASTP.out.trim_json + ch_trim_html = FASTQ_FASTQC_UMITOOLS_FASTP.out.trim_html + ch_trim_log = FASTQ_FASTQC_UMITOOLS_FASTP.out.trim_log + ch_umi_log = FASTQ_FASTQC_UMITOOLS_FASTP.out.umi_log + ch_umi_reads = FASTQ_FASTQC_UMITOOLS_FASTP.out.umi_reads + ch_multiqc_files = FASTQ_FASTQC_UMITOOLS_FASTP.out.fastqc_raw_zip .mix(FASTQ_FASTQC_UMITOOLS_FASTP.out.fastqc_trim_zip) .mix(FASTQ_FASTQC_UMITOOLS_FASTP.out.trim_json) + .mix(FASTQ_FASTQC_UMITOOLS_FASTP.out.umi_log) .mix(ch_multiqc_files) } @@ -220,15 +280,15 @@ workflow FASTQ_QC_TRIM_FILTER_SETSTRANDEDNESS { .set { ch_fail_trimming_multiqc } ch_multiqc_files = ch_multiqc_files.mix( - ch_fail_trimming_multiqc.collectFile(name: 'fail_trimmed_samples_mqc.tsv').map { [[:], it] } + ch_fail_trimming_multiqc.collectFile(name: 'fail_trimmed_samples_mqc.tsv').map { file -> [[:], file] } ) if ((!skip_linting) && (!skip_trimming)) { FQ_LINT_AFTER_TRIMMING( ch_filtered_reads ) - ch_lint_log = ch_lint_log.mix(FQ_LINT_AFTER_TRIMMING.out.lint) - ch_filtered_reads = ch_filtered_reads.join(FQ_LINT_AFTER_TRIMMING.out.lint.map { it[0] }) + ch_lint_log_trimmed = FQ_LINT_AFTER_TRIMMING.out.lint + ch_filtered_reads = ch_filtered_reads.join(FQ_LINT_AFTER_TRIMMING.out.lint.map { meta, _lint -> meta }) } // @@ -245,55 +305,63 @@ workflow FASTQ_QC_TRIM_FILTER_SETSTRANDEDNESS { BBMAP_BBSPLIT.out.primary_fastq.set { ch_filtered_reads } - ch_versions = ch_versions.mix(BBMAP_BBSPLIT.out.versions.first()) + ch_bbsplit_stats = BBMAP_BBSPLIT.out.stats + ch_multiqc_files = ch_multiqc_files.mix(BBMAP_BBSPLIT.out.stats) if (!skip_linting) { FQ_LINT_AFTER_BBSPLIT( ch_filtered_reads ) - ch_lint_log = ch_lint_log.mix(FQ_LINT_AFTER_BBSPLIT.out.lint) - ch_filtered_reads = ch_filtered_reads.join(FQ_LINT_AFTER_BBSPLIT.out.lint.map { it[0] }) + ch_lint_log_bbsplit = FQ_LINT_AFTER_BBSPLIT.out.lint + ch_filtered_reads = ch_filtered_reads.join(FQ_LINT_AFTER_BBSPLIT.out.lint.map { meta, _lint -> meta }) } } // - // MODULE: Remove ribosomal RNA reads + // SUBWORKFLOW: Remove ribosomal RNA reads // if (remove_ribo_rna) { - ch_sortmerna_fastas = ch_rrna_fastas - .collect() - .map { ['rrna_refs', it] } - - if (make_sortmerna_index) { - SORTMERNA_INDEX( - [[], []], - ch_sortmerna_fastas, - [[], []], - ) - ch_sortmerna_index = SORTMERNA_INDEX.out.index.first() - } - - SORTMERNA( + FASTQ_REMOVE_RRNA( ch_filtered_reads, - ch_sortmerna_fastas, + ch_rrna_fastas, ch_sortmerna_index, + ch_bowtie2_index, + ribo_removal_tool, + make_sortmerna_index, + make_bowtie2_index, ) - SORTMERNA.out.reads.set { ch_filtered_reads } - - ch_multiqc_files = ch_multiqc_files.mix(SORTMERNA.out.log) - - ch_versions = ch_versions.mix(SORTMERNA.out.versions.first()) + ch_filtered_reads = FASTQ_REMOVE_RRNA.out.reads + ch_sortmerna_log = FASTQ_REMOVE_RRNA.out.sortmerna_log + ch_ribodetector_log = FASTQ_REMOVE_RRNA.out.ribodetector_log + ch_seqkit_stats = FASTQ_REMOVE_RRNA.out.seqkit_stats + ch_bowtie2_log = FASTQ_REMOVE_RRNA.out.bowtie2_log + ch_bowtie2_index = FASTQ_REMOVE_RRNA.out.bowtie2_index + ch_seqkit_prefixed = FASTQ_REMOVE_RRNA.out.seqkit_prefixed + ch_seqkit_converted = FASTQ_REMOVE_RRNA.out.seqkit_converted + ch_multiqc_files = ch_multiqc_files.mix(FASTQ_REMOVE_RRNA.out.multiqc_files) if (!skip_linting) { - FQ_LINT_AFTER_SORTMERNA( + FQ_LINT_AFTER_RIBO_REMOVAL( ch_filtered_reads ) - ch_lint_log = ch_lint_log.mix(FQ_LINT_AFTER_SORTMERNA.out.lint) - ch_filtered_reads = ch_filtered_reads.join(FQ_LINT_AFTER_SORTMERNA.out.lint.map { it[0] }) + ch_lint_log_ribo = FQ_LINT_AFTER_RIBO_REMOVAL.out.lint + ch_filtered_reads = ch_filtered_reads.join(FQ_LINT_AFTER_RIBO_REMOVAL.out.lint.map { meta, _lint -> meta }) } } + // + // MODULE: Run FastQC on filtered reads (after BBSplit and/or rRNA removal) + // + if (!skip_fastqc && (!skip_bbsplit || remove_ribo_rna)) { + FASTQC_FILTERED( + ch_filtered_reads + ) + ch_fastqc_filtered_html = FASTQC_FILTERED.out.html + ch_fastqc_filtered_zip = FASTQC_FILTERED.out.zip + ch_multiqc_files = ch_multiqc_files.mix(FASTQC_FILTERED.out.zip) + } + // Branch FastQ channels if 'auto' specified to infer strandedness ch_filtered_reads .branch { meta, fastq -> @@ -311,7 +379,7 @@ workflow FASTQ_QC_TRIM_FILTER_SETSTRANDEDNESS { ch_fasta .combine(ch_strand_fastq.auto_strand) - .map { it.first() } + .map { items -> items.first() } .first() .set { ch_genome_fasta } @@ -323,11 +391,15 @@ workflow FASTQ_QC_TRIM_FILTER_SETSTRANDEDNESS { ch_salmon_index, make_salmon_index, ) - ch_versions = ch_versions.mix(FASTQ_SUBSAMPLE_FQ_SALMON.out.versions) FASTQ_SUBSAMPLE_FQ_SALMON.out.lib_format_counts - .join(ch_strand_fastq.auto_strand) + .join(ch_strand_fastq.auto_strand, remainder: true) .map { meta, json, reads -> + if (json == null) { + error("Salmon failed to produce lib_format_counts for sample '${meta.id}' " + + "which was set to 'auto' strandedness. Check that the Salmon " + + "index matches your input reads, or set strandedness explicitly in the samplesheet.") + } def salmon_strand_analysis = getSalmonInferredStrandedness(json, stranded_threshold, unstranded_threshold) def strandedness = salmon_strand_analysis.inferred_strandedness if (strandedness == 'undetermined') { @@ -339,9 +411,34 @@ workflow FASTQ_QC_TRIM_FILTER_SETSTRANDEDNESS { .set { ch_strand_inferred_fastq } emit: - lint_log = ch_lint_log - reads = ch_strand_inferred_fastq - trim_read_count = ch_trim_read_count - multiqc_files = ch_multiqc_files.transpose().map { it[1] } - versions = ch_versions // channel: [ versions.yml ] + reads = ch_strand_inferred_fastq + trim_read_count = ch_trim_read_count + multiqc_files = ch_multiqc_files.transpose().map { _meta, file -> file } + + // Individual outputs for workflow outputs + lint_log_raw = ch_lint_log_raw + lint_log_trimmed = ch_lint_log_trimmed + lint_log_bbsplit = ch_lint_log_bbsplit + lint_log_ribo = ch_lint_log_ribo + fastqc_raw_html = ch_fastqc_raw_html + fastqc_raw_zip = ch_fastqc_raw_zip + fastqc_trim_html = ch_fastqc_trim_html + fastqc_trim_zip = ch_fastqc_trim_zip + trim_html = ch_trim_html + trim_zip = ch_trim_zip + trim_log = ch_trim_log + trim_json = ch_trim_json + trim_unpaired = ch_trim_unpaired + umi_log = ch_umi_log + umi_reads = ch_umi_reads + bbsplit_stats = ch_bbsplit_stats + sortmerna_log = ch_sortmerna_log + ribodetector_log = ch_ribodetector_log + seqkit_stats = ch_seqkit_stats + bowtie2_log = ch_bowtie2_log + bowtie2_index = ch_bowtie2_index + fastqc_filtered_html = ch_fastqc_filtered_html + fastqc_filtered_zip = ch_fastqc_filtered_zip + seqkit_prefixed = ch_seqkit_prefixed + seqkit_converted = ch_seqkit_converted } diff --git a/subworkflows/nf-core/fastq_qc_trim_filter_setstrandedness/meta.yml b/subworkflows/nf-core/fastq_qc_trim_filter_setstrandedness/meta.yml index d9a5be020..113bc5add 100644 --- a/subworkflows/nf-core/fastq_qc_trim_filter_setstrandedness/meta.yml +++ b/subworkflows/nf-core/fastq_qc_trim_filter_setstrandedness/meta.yml @@ -9,12 +9,10 @@ keywords: - strandedness components: - bbmap/bbsplit - - samtools/sort - - samtools/index - - cat - cat/fastq + - fastqc - fq/lint - - sortmerna + - fastq_remove_rrna - fastq_subsample_fq_salmon - fastq_fastqc_umitools_trimgalore - fastq_fastqc_umitools_fastp @@ -77,6 +75,15 @@ input: - index: type: directory description: SortMeRNA index directory + - ch_bowtie2_index: + description: Directory containing bowtie2 index for rRNA removal + structure: + - meta: + type: map + description: Metadata for the Bowtie2 index + - index: + type: directory + description: Bowtie2 index directory - ch_bbsplit_index: description: Path to directory or tar.gz archive for pre-built BBSplit index structure: @@ -88,7 +95,7 @@ input: description: BBSplit index directory or tar.gz archive pattern: "{*,*.tar.gz}" - ch_rrna_fastas: - description: Channel containing one or more FASTA files containing rRNA sequences for use with SortMeRNA + description: Channel containing one or more FASTA files containing rRNA sequences for use with SortMeRNA or Bowtie2 structure: - meta: type: map @@ -109,24 +116,39 @@ input: - skip_umi_extract: type: boolean description: Skip the UMI extraction from the read in case the UMIs have been moved to the headers in advance of the pipeline run + - skip_linting: + type: boolean + description: Whether to skip linting of FastQ files - make_salmon_index: type: boolean description: Whether to create salmon index before running salmon quant - make_sortmerna_index: type: boolean description: Whether to create sortmerna index before running sortmerna + - make_bowtie2_index: + type: boolean + description: Whether to create bowtie2 index before running bowtie2 for rRNA removal - trimmer: type: string - description: Specifies the trimming tool to use - available options are 'trimgalore' and 'fastp' + description: Specifies the trimming tool to use + enum: ["trimgalore", "fastp"] - min_trimmed_reads: type: integer description: Minimum number of trimmed reads below which samples are removed from further processing - save_trimmed: type: boolean description: Save the trimmed FastQ files in the results directory? + - fastp_merge: + type: boolean + description: | + For FASTP, save merged fastqs stitching together read1 and read2 for paired end reads - remove_ribo_rna: type: boolean - description: Enable the removal of reads derived from ribosomal RNA using SortMeRNA? + description: Enable the removal of reads derived from ribosomal RNA + - ribo_removal_tool: + type: string + description: Specifies the rRNA removal tool to use + enum: ["sortmerna", "ribodetector", "bowtie2"] - with_umi: type: boolean description: Enable UMI-based read deduplication @@ -140,13 +162,6 @@ input: - unstranded_threshold: type: float description: The difference in fraction of stranded reads assigned to 'forward' and 'reverse' below which a sample is classified as 'unstranded'. - - skip_linting: - type: boolean - description: Whether to skip linting of FastQ files - - fastp_merge: - type: boolean - description: | - For FASTP, save merged fastqs stitching together read1 and read2 for paired end reads output: - reads: @@ -178,13 +193,6 @@ output: - count: type: integer description: Number of reads after trimming - - versions: - description: File containing software versions - structure: - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - lint_log: description: Log files from FastQ linting structure: @@ -195,6 +203,26 @@ output: type: file description: FastQ lint log file pattern: "*.log" + - fastqc_filtered_html: + description: FastQC report HTML files for filtered reads (after BBSplit and/or rRNA removal) + structure: + - meta: + type: map + description: Groovy Map containing sample information + - html: + type: file + description: FastQC report HTML file + pattern: "*.html" + - fastqc_filtered_zip: + description: FastQC report ZIP files for filtered reads (after BBSplit and/or rRNA removal) + structure: + - meta: + type: map + description: Groovy Map containing sample information + - zip: + type: file + description: FastQC report ZIP file + pattern: "*.zip" authors: - "@pinin4fjords" diff --git a/subworkflows/nf-core/fastq_qc_trim_filter_setstrandedness/nextflow.config b/subworkflows/nf-core/fastq_qc_trim_filter_setstrandedness/nextflow.config index 05d9e8f94..759b3d9e3 100644 --- a/subworkflows/nf-core/fastq_qc_trim_filter_setstrandedness/nextflow.config +++ b/subworkflows/nf-core/fastq_qc_trim_filter_setstrandedness/nextflow.config @@ -19,18 +19,140 @@ process { withName: 'FQ_LINT_AFTER_BBSPLIT' { publishDir = [ - path: { "${params.outdir}/fq_lint/sortmerna" }, + path: { "${params.outdir}/fq_lint/bbsplit" }, mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] } - withName: 'FQ_LINT_AFTER_SORTMERNA' { + withName: 'FQ_LINT_AFTER_RIBO_REMOVAL' { publishDir = [ - path: { "${params.outdir}/fq_lint/trimmed" }, + path: { "${params.outdir}/fq_lint/${params.ribo_removal_tool ?: 'sortmerna'}" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + + // + // FastQC on filtered reads (after BBSplit and/or rRNA removal) + // + + withName: '.*:FASTQ_QC_TRIM_FILTER_SETSTRANDEDNESS:FASTQC_FILTERED' { + ext.args = '--quiet' + ext.prefix = { "${meta.id}_filtered" } + publishDir = [ + path: { "${params.outdir}/fastqc/filtered" }, mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] } + // + // rRNA FASTA preparation (for SortMeRNA and Bowtie2) + // + + withName: '.*:FASTQ_QC_TRIM_FILTER_SETSTRANDEDNESS:.*:SEQKIT_REPLACE' { + ext.args = '--pattern "^(.+)" --replacement "{fbn}_\\$1"' + ext.prefix = { "${meta.id}_prefixed" } + } + + withName: '.*:FASTQ_QC_TRIM_FILTER_SETSTRANDEDNESS:.*:SEQKIT_REPLACE_U2T' { + ext.args = '--by-seq --pattern "[Uu]" --replacement "T"' + ext.prefix = { "${meta.id}_converted" } + } + + // + // Ribodetector rRNA removal options + // + + withName: '.*:FASTQ_QC_TRIM_FILTER_SETSTRANDEDNESS:.*:SEQKIT_STATS' { + ext.args = '--all' + ext.prefix = { "${meta.id}.rrna_removal_stats" } + publishDir = [ + path: { "${params.outdir}/ribodetector" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + + withName: '.*:FASTQ_QC_TRIM_FILTER_SETSTRANDEDNESS:.*:RIBODETECTOR' { + ext.args = '-e rrna' + cpus = 1 + publishDir = [ + [ + path: { "${params.outdir}/ribodetector" }, + mode: params.publish_dir_mode, + pattern: "*.log" + ], + [ + path: { params.save_non_ribo_reads ? "${params.outdir}/ribodetector" : params.outdir }, + mode: params.publish_dir_mode, + pattern: "*.fastq.gz", + saveAs: { filename -> params.save_non_ribo_reads ? filename : null } + ] + ] + } + + // + // Bowtie2 rRNA removal options + // + + withName: '.*:FASTQ_QC_TRIM_FILTER_SETSTRANDEDNESS:.*:BOWTIE2_BUILD' { + publishDir = [ + path: { "${params.outdir}/bowtie2_rrna/index" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : params.save_reference ? filename : null } + ] + } + + withName: '.*:FASTQ_QC_TRIM_FILTER_SETSTRANDEDNESS:.*:BOWTIE2_ALIGN$' { + ext.args = '--very-sensitive-local' + ext.prefix = { "${meta.id}.bowtie2_rrna" } + publishDir = [ + [ + path: { "${params.outdir}/bowtie2_rrna" }, + mode: params.publish_dir_mode, + pattern: "*.log" + ], + [ + path: { params.save_non_ribo_reads ? "${params.outdir}/bowtie2_rrna" : params.outdir }, + mode: params.publish_dir_mode, + pattern: "*.fastq.gz", + saveAs: { filename -> params.save_non_ribo_reads ? filename : null } + ] + ] + } + + withName: '.*:FASTQ_QC_TRIM_FILTER_SETSTRANDEDNESS:.*:BOWTIE2_ALIGN_PE$' { + ext.args = '--very-sensitive-local' + ext.prefix = { "${meta.id}.bowtie2_rrna" } + publishDir = [ + [ + path: { "${params.outdir}/bowtie2_rrna" }, + mode: params.publish_dir_mode, + pattern: "*.log" + ], + [ + path: { params.save_non_ribo_reads ? "${params.outdir}/bowtie2_rrna" : params.outdir }, + mode: params.publish_dir_mode, + pattern: "*.fastq.gz", + saveAs: { filename -> params.save_non_ribo_reads ? filename : null } + ] + ] + } + + withName: '.*:FASTQ_QC_TRIM_FILTER_SETSTRANDEDNESS:.*:SAMTOOLS_VIEW_BOWTIE2' { + ext.prefix = { "${meta.id}.bowtie2_unmapped" } + ext.args = '-f 12' // Keep only pairs where BOTH mates are unmapped + publishDir = [ + enabled: false + ] + } + + withName: '.*:FASTQ_QC_TRIM_FILTER_SETSTRANDEDNESS:.*:SAMTOOLS_FASTQ_BOWTIE2' { + ext.prefix = { "${meta.id}.bowtie2_filtered" } + publishDir = [ + enabled: false + ] + } } diff --git a/subworkflows/nf-core/fastq_qc_trim_filter_setstrandedness/tests/main.function.nf.test b/subworkflows/nf-core/fastq_qc_trim_filter_setstrandedness/tests/main.function.nf.test index 57fcd302b..3f0ee1513 100644 --- a/subworkflows/nf-core/fastq_qc_trim_filter_setstrandedness/tests/main.function.nf.test +++ b/subworkflows/nf-core/fastq_qc_trim_filter_setstrandedness/tests/main.function.nf.test @@ -2,7 +2,7 @@ nextflow_function { name "Test Functions" script "../main.nf" - + // // Test function for deriving strandedness from Salmon numbers // diff --git a/subworkflows/nf-core/fastq_qc_trim_filter_setstrandedness/tests/main.nf.test b/subworkflows/nf-core/fastq_qc_trim_filter_setstrandedness/tests/main.nf.test index 7a1ae8131..2c30888c7 100644 --- a/subworkflows/nf-core/fastq_qc_trim_filter_setstrandedness/tests/main.nf.test +++ b/subworkflows/nf-core/fastq_qc_trim_filter_setstrandedness/tests/main.nf.test @@ -1,3 +1,4 @@ + nextflow_workflow { name "Test Subworkflow FASTQ_QC_TRIM_FILTER_SETSTRANDEDNESS" @@ -5,47 +6,92 @@ nextflow_workflow { workflow "FASTQ_QC_TRIM_FILTER_SETSTRANDEDNESS" config "./nextflow.config" + tag "subworkflows" + tag "subworkflows_nfcore" + tag "subworkflows/fastq_qc_trim_filter_setstrandedness" + tag "bbmap/bbsplit" + tag "cat/fastq" + tag "fastqc" + tag "fq/lint" + tag "subworkflows/fastq_remove_rrna" + tag "subworkflows/fastq_fastqc_umitools_trimgalore" + tag "subworkflows/fastq_fastqc_umitools_fastp" + tag "subworkflows/fastq_subsample_fq_salmon" - - test("homo_sapiens paired-end [fastq] fastp") { - - when { - workflow { + // Global setup: Inject synthetic rRNA reads into test data using CAT_FASTQ + // The rRNA reads (from generic/fastq/) are 5.8S rRNA sequences that will be detected + // by both SortMeRNA (alignment-based, 100% detection) and RiboDetector (ML-based, ~70% detection) + setup { + run("CAT_FASTQ") { + script "../../../../modules/nf-core/cat/fastq/main.nf" + process { """ - ch_reads = Channel.of([ - [ id:'test', single_end:false, strandedness:'auto' ], // meta map + // CAT_FASTQ input: alternating R1/R2 files [r1_a, r2_a, r1_b, r2_b, ...] + // Even indices -> R1 files, odd indices -> R2 files + input[0] = Channel.of([ + [ id:'test', single_end:false, strandedness:'auto' ], [ 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_2.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'generic/fastq/rrna_reads_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'generic/fastq/rrna_reads_2.fastq.gz', checkIfExists: true) ] ]) + """ + } + } + } - input[0] = ch_reads + test("homo_sapiens paired-end [fastq] fastp sortmerna") { + + when { + workflow { + """ + // Input channels + input[0] = CAT_FASTQ.out.reads input[1] = Channel.of(file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true)) // ch_fasta input[2] = Channel.of(file(params.modules_testdata_base_path + "genomics/homo_sapiens/genome/transcriptome.fasta", checkIfExists: true)) // ch_transcript_fasta input[3] = Channel.of(file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true)) // ch_gtf input[4] = [] // ch_salmon_index input[5] = [] // ch_sortmerna_index - input[6] = [] // ch_bbsplit_index - input[7] = Channel.of(file('https://raw.githubusercontent.com/biocore/sortmerna/v4.3.4/data/rRNA_databases/rfam-5.8s-database-id98.fasta', checkIfExists: true)) // ch_rrna_fastas - input[8] = true // skip_bbsplit - input[9] = false // skip_fastqc - input[10] = false // skip_trimming - input[11] = true // skip_umi_extract - input[12] = true // make_salmon_index - input[13] = true // make_sortmerna_index - input[14] = 'fastp' // trimmer - input[15] = 10 // min_trimmed_reads - input[16] = true // save_trimmed - input[17] = true // remove_ribo_rna - input[18] = false // with_umi - input[19] = 0 // umi_discard_read - input[20] = 0.8 // stranded_threshold - input[21] = 0.1 // unstranded_threshold - input[22] = false // skip_linting - input[23] = true // fastp_merge + input[6] = [] // ch_bowtie2_index + input[7] = [] // ch_bbsplit_index + input[8] = Channel.of(file('https://raw.githubusercontent.com/biocore/sortmerna/v4.3.4/data/rRNA_databases/rfam-5.8s-database-id98.fasta', checkIfExists: true)) // ch_rrna_fastas + + // Skip options + input[9] = true // skip_bbsplit + input[10] = false // skip_fastqc + input[11] = false // skip_trimming + input[12] = true // skip_umi_extract + input[13] = false // skip_linting + + // Index generation + input[14] = true // make_salmon_index + input[15] = true // make_sortmerna_index + input[16] = false // make_bowtie2_index + + // Trimming options + input[17] = 'fastp' // trimmer + input[18] = 10 // min_trimmed_reads + input[19] = true // save_trimmed + input[20] = true // fastp_merge + + // rRNA removal options + input[21] = true // remove_ribo_rna + input[22] = 'sortmerna' // ribo_removal_tool + + // UMI options + input[23] = false // with_umi + input[24] = 0 // umi_discard_read + + // Merging options + input[25] = false // save_merged_fastq + + // Strandedness thresholds + input[26] = 0.8 // stranded_threshold + input[27] = 0.1 // unstranded_threshold """ } } @@ -55,63 +101,272 @@ nextflow_workflow { def pelines2 = path(workflow.out.reads[0][1][1]).linesGzip // First part of each fq lint report line is a timestamp, remove it before snapshotting - def processed_sortmerna_lint_report = path(workflow.out.lint_log.find { entry -> entry[1].contains('sortmerna')}?.getAt(1)) + def processed_ribo_removal_lint_report = path(workflow.out.lint_log_ribo[0][1]) .getText() .readLines() .collect { line -> line.split(' ', 2)[1] } // Split by the first space and take everything after it .join('\n') // Join the processed lines back into a single text block + // Parse sortmerna log for rRNA detection stats + def sortmernaLog = path(workflow.out.multiqc_files.find { it.toString().endsWith('.sortmerna.log') }) + .getText() + def sortmernaRrnaMatch = (sortmernaLog =~ /Total reads passing E-value threshold = (\d+)/) + def sortmernaRrnaCount = sortmernaRrnaMatch ? sortmernaRrnaMatch[0][1].toInteger() : -1 + + // Input: 4159 original + 10 synthetic rRNA = 4169 read pairs + // After fastp merge: 1137 pairs (3022 merged reads) + // SortMeRNA removes all 10 synthetic rRNA pairs (20 individual reads), leaving 1127 pairs assertAll( - { assert workflow.success}, - { assert snapshot(pelines1).md5().match("fastp_test_pe_reads_1_lines") }, - { assert snapshot(pelines1.size()).match("fastp_test_pe_reads_1_size") }, - { assert snapshot(pelines2).md5().match("fastp_test_pe_reads_2_lines") }, - { assert snapshot(pelines2.size()).match("fastp_test_pe_reads_2_size") }, - { assert snapshot(workflow.out.trim_read_count).match("fastp_read_count") }, - { assert snapshot(processed_sortmerna_lint_report).md5().match("fastp_lint") } - // This doesn't work- 'cat' changes between Conda and Docker - - // leaving it here until we find a way to address that - // { assert snapshot(workflow.out.versions).match("fastp_versions") } + { assert workflow.success }, + { assert pelines1.size() == 4508 }, // 1127 pairs × 4 lines/read + { assert pelines2.size() == 4508 }, + { assert workflow.out.trim_read_count[0][1] == 3022 }, + { assert sortmernaRrnaCount == 20 }, // 10 pairs = 20 individual reads (100% detection) + { assert snapshot( + pelines1.join('\n').md5(), + pelines2.join('\n').md5(), + processed_ribo_removal_lint_report, + file(workflow.out.fastqc_filtered_html[0][1][0]).name, + file(workflow.out.fastqc_filtered_html[0][1][1]).name, + file(workflow.out.fastqc_filtered_zip[0][1][0]).name, + file(workflow.out.fastqc_filtered_zip[0][1][1]).name, + ).match() } ) } } - test("homo_sapiens paired-end [fastq] trimgalore") { + + test("homo_sapiens paired-end [fastq] fastp ribodetector") { when { workflow { """ - ch_reads = Channel.of([ - [ id:'test', single_end:false, strandedness:'auto' ], // 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 channels + input[0] = CAT_FASTQ.out.reads + input[1] = Channel.of(file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true)) // ch_fasta + input[2] = Channel.of(file(params.modules_testdata_base_path + "genomics/homo_sapiens/genome/transcriptome.fasta", checkIfExists: true)) // ch_transcript_fasta + input[3] = Channel.of(file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true)) // ch_gtf + input[4] = [] // ch_salmon_index + input[5] = [] // ch_sortmerna_index + input[6] = [] // ch_bowtie2_index + input[7] = [] // ch_bbsplit_index + input[8] = [] // ch_rrna_fastas (not needed for ribodetector) + + // Skip options + input[9] = true // skip_bbsplit + input[10] = false // skip_fastqc + input[11] = false // skip_trimming + input[12] = true // skip_umi_extract + input[13] = false // skip_linting + + // Index generation + input[14] = true // make_salmon_index + input[15] = false // make_sortmerna_index (not needed for ribodetector) + input[16] = false // make_bowtie2_index + + // Trimming options + input[17] = 'fastp' // trimmer + input[18] = 10 // min_trimmed_reads + input[19] = true // save_trimmed + input[20] = true // fastp_merge + + // rRNA removal options + input[21] = true // remove_ribo_rna + input[22] = 'ribodetector' // ribo_removal_tool + + // UMI options + input[23] = false // with_umi + input[24] = 0 // umi_discard_read + + // Merging options + input[25] = false // save_merged_fastq + + // Strandedness thresholds + input[26] = 0.8 // stranded_threshold + input[27] = 0.1 // unstranded_threshold + """ + } + } + + then { + def pelines1 = path(workflow.out.reads[0][1][0]).linesGzip + def pelines2 = path(workflow.out.reads[0][1][1]).linesGzip + + // First part of each fq lint report line is a timestamp, remove it before snapshotting + def processed_ribo_removal_lint_report = path(workflow.out.lint_log_ribo[0][1]) + .getText() + .readLines() + .collect { line -> line.split(' ', 2)[1] } // Split by the first space and take everything after it + .join('\n') // Join the processed lines back into a single text block + + // Parse ribodetector log for rRNA detection stats + // Note: ribodetector log contains ANSI color codes that must be stripped before regex matching + def ribodetectorLog = path(workflow.out.multiqc_files.find { it.toString().endsWith('.ribodetector.log') }) + .getText() + .replaceAll(/\u001b\[[0-9;]*m/, '') // Strip ANSI escape codes + def ribodetectorRrnaMatch = (ribodetectorLog =~ /Detected (\d+) rRNA sequences/) + def ribodetectorRrnaCount = ribodetectorRrnaMatch ? ribodetectorRrnaMatch[0][1].toInteger() : -1 + + // Input: 4159 original + 10 synthetic rRNA = 4169 read pairs + // After fastp merge: 1137 pairs (3022 merged reads) + // RiboDetector removes 7 of 10 synthetic rRNA pairs (70% detection), leaving 1130 pairs + assertAll( + { assert workflow.success }, + { assert pelines1.size() == 4520 }, // 1130 pairs × 4 lines/read + { assert pelines2.size() == 4520 }, + { assert workflow.out.trim_read_count[0][1] == 3022 }, + { assert ribodetectorRrnaCount == 7 }, // 7 pairs detected (70% - ML model misses some) + { assert snapshot( + pelines1.join('\n').md5(), + pelines2.join('\n').md5(), + processed_ribo_removal_lint_report.md5(), + file(workflow.out.fastqc_filtered_html[0][1][0]).name, + file(workflow.out.fastqc_filtered_html[0][1][1]).name, + file(workflow.out.fastqc_filtered_zip[0][1][0]).name, + file(workflow.out.fastqc_filtered_zip[0][1][1]).name, + ).match() } + ) + } + } + + test("homo_sapiens paired-end [fastq] trimgalore sortmerna") { + + when { + workflow { + """ + // Input channels + input[0] = CAT_FASTQ.out.reads + input[1] = Channel.of(file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true)) // ch_fasta + input[2] = Channel.of(file(params.modules_testdata_base_path + "genomics/homo_sapiens/genome/transcriptome.fasta", checkIfExists: true)) // ch_transcript_fasta + input[3] = Channel.of(file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true)) // ch_gtf + input[4] = [] // ch_salmon_index + input[5] = [] // ch_sortmerna_index + input[6] = [] // ch_bowtie2_index + input[7] = [] // ch_bbsplit_index + input[8] = Channel.of(file('https://raw.githubusercontent.com/biocore/sortmerna/v4.3.4/data/rRNA_databases/rfam-5.8s-database-id98.fasta', checkIfExists: true)) // ch_rrna_fastas + + // Skip options + input[9] = true // skip_bbsplit + input[10] = false // skip_fastqc + input[11] = false // skip_trimming + input[12] = true // skip_umi_extract + input[13] = false // skip_linting + + // Index generation + input[14] = true // make_salmon_index + input[15] = true // make_sortmerna_index + input[16] = false // make_bowtie2_index + + // Trimming options + input[17] = 'trimgalore' // trimmer + input[18] = 10 // min_trimmed_reads + input[19] = true // save_trimmed + input[20] = true // fastp_merge + + // rRNA removal options + input[21] = true // remove_ribo_rna + input[22] = 'sortmerna' // ribo_removal_tool + + // UMI options + input[23] = false // with_umi + input[24] = 0 // umi_discard_read + + // Merging options + input[25] = false // save_merged_fastq + + // Strandedness thresholds + input[26] = 0.8 // stranded_threshold + input[27] = 0.1 // unstranded_threshold + """ + } + } + + then { + def pelines1 = path(workflow.out.reads[0][1][0]).linesGzip + def pelines2 = path(workflow.out.reads[0][1][1]).linesGzip + + // First part of each fq lint report line is a timestamp, remove it before snapshotting + def processed_ribo_removal_lint_report = path(workflow.out.lint_log_ribo[0][1]) + .getText() + .readLines() + .collect { line -> line.split(' ', 2)[1] } // Split by the first space and take everything after it + .join('\n') // Join the processed lines back into a single text block + + // Parse sortmerna log for rRNA detection stats + def sortmernaLog = path(workflow.out.multiqc_files.find { it.toString().endsWith('.sortmerna.log') }) + .getText() + def sortmernaRrnaMatch = (sortmernaLog =~ /Total reads passing E-value threshold = (\d+)/) + def sortmernaRrnaCount = sortmernaRrnaMatch ? sortmernaRrnaMatch[0][1].toInteger() : -1 + + // Input: 4159 original + 10 synthetic rRNA = 4169 read pairs + // After trimgalore: 4169 pairs (no merging, unlike fastp) + // SortMeRNA removes all 10 synthetic rRNA pairs (20 individual reads), leaving 4159 pairs + assertAll( + { assert workflow.success }, + { assert pelines1.size() == 16636 }, // 4159 pairs × 4 lines/read + { assert pelines2.size() == 16636 }, + { assert workflow.out.trim_read_count[0][1] == 4169.0 }, + { assert sortmernaRrnaCount == 20 }, // 10 pairs = 20 individual reads (100% detection) + { assert snapshot( + pelines1.join('\n').md5(), + pelines2.join('\n').md5(), + processed_ribo_removal_lint_report.md5(), + file(workflow.out.fastqc_filtered_html[0][1][0]).name, + file(workflow.out.fastqc_filtered_html[0][1][1]).name, + file(workflow.out.fastqc_filtered_zip[0][1][0]).name, + file(workflow.out.fastqc_filtered_zip[0][1][1]).name, + ).match() } + ) + } + } + + test("homo_sapiens paired-end [fastq] fastp bowtie2") { - input[0] = ch_reads + when { + workflow { + """ + // Input channels + input[0] = CAT_FASTQ.out.reads input[1] = Channel.of(file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true)) // ch_fasta input[2] = Channel.of(file(params.modules_testdata_base_path + "genomics/homo_sapiens/genome/transcriptome.fasta", checkIfExists: true)) // ch_transcript_fasta input[3] = Channel.of(file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true)) // ch_gtf input[4] = [] // ch_salmon_index input[5] = [] // ch_sortmerna_index - input[6] = [] // ch_bbsplit_index - input[7] = Channel.of(file('https://raw.githubusercontent.com/biocore/sortmerna/v4.3.4/data/rRNA_databases/rfam-5.8s-database-id98.fasta', checkIfExists: true)) // ch_rrna_fastas - input[8] = true // skip_bbsplit - input[9] = false // skip_fastqc - input[10] = false // skip_trimming - input[11] = true // skip_umi_extract - input[12] = true // make_salmon_index - input[13] = true // make_sortmerna_index - input[14] = 'fastp' // trimmer - input[15] = 10 // min_trimmed_reads - input[16] = true // save_trimmed - input[17] = true // remove_ribo_rna - input[18] = false // with_umi - input[19] = 0 // umi_discard_read - input[20] = 0.8 // stranded_threshold - input[21] = 0.1 // unstranded_threshold - input[22] = false // skip_linting - input[23] = true // fastp_merge + input[6] = [] // ch_bowtie2_index + input[7] = [] // ch_bbsplit_index + input[8] = Channel.of(file('https://raw.githubusercontent.com/biocore/sortmerna/v4.3.4/data/rRNA_databases/rfam-5.8s-database-id98.fasta', checkIfExists: true)) // ch_rrna_fastas + + // Skip options + input[9] = true // skip_bbsplit + input[10] = false // skip_fastqc + input[11] = false // skip_trimming + input[12] = true // skip_umi_extract + input[13] = false // skip_linting + + // Index generation + input[14] = true // make_salmon_index + input[15] = false // make_sortmerna_index (not needed for bowtie2) + input[16] = true // make_bowtie2_index + + // Trimming options + input[17] = 'fastp' // trimmer + input[18] = 10 // min_trimmed_reads + input[19] = true // save_trimmed + input[20] = true // fastp_merge + + // rRNA removal options + input[21] = true // remove_ribo_rna + input[22] = 'bowtie2' // ribo_removal_tool + + // UMI options + input[23] = false // with_umi + input[24] = 0 // umi_discard_read + + // Merging options + input[25] = false // save_merged_fastq + + // Strandedness thresholds + input[26] = 0.8 // stranded_threshold + input[27] = 0.1 // unstranded_threshold """ } } @@ -121,26 +376,221 @@ nextflow_workflow { def pelines2 = path(workflow.out.reads[0][1][1]).linesGzip // First part of each fq lint report line is a timestamp, remove it before snapshotting - def processed_sortmerna_lint_report = path(workflow.out.lint_log.find { entry -> entry[1].contains('sortmerna')}?.getAt(1)) + def processed_ribo_removal_lint_report = path(workflow.out.lint_log_ribo[0][1]) .getText() .readLines() .collect { line -> line.split(' ', 2)[1] } // Split by the first space and take everything after it .join('\n') // Join the processed lines back into a single text block + // Parse bowtie2 log for alignment stats - count mates that aligned to rRNA + def bowtie2Log = path(workflow.out.multiqc_files.find { it.toString().endsWith('.bowtie2.log') }) + .getText() + def exactMatch = (bowtie2Log =~ /(\d+) \(\d+\.\d+%\) aligned exactly 1 time/) + def multiMatch = (bowtie2Log =~ /(\d+) \(\d+\.\d+%\) aligned >1 times/) + def exactCount = exactMatch ? exactMatch[0][1].toInteger() : 0 + def multiCount = multiMatch ? multiMatch[0][1].toInteger() : 0 + def bowtie2RrnaCount = exactCount + multiCount + + // Input: 4159 original + 10 synthetic rRNA = 4169 read pairs + // After fastp merge: 1137 pairs (3022 merged reads) + // Bowtie2 aligns 17 individual mates to rRNA (vs SortMeRNA's 20 - less sensitive) + // These 17 mates come from 10 pairs: 7 pairs had both mates align, 3 pairs had one mate align + // Using samtools -f 12 removes any pair where EITHER mate aligned, leaving 1127 pairs + // (same result as SortMeRNA despite detecting fewer individual mates) + assertAll( + { assert workflow.success }, + { assert pelines1.size() == 4508 }, // 1127 pairs × 4 lines/read + { assert pelines2.size() == 4508 }, + { assert workflow.out.trim_read_count[0][1] == 3022 }, + { assert bowtie2RrnaCount == 17 }, // 17 mates aligned to rRNA reference + { assert snapshot( + pelines1.join('\n').md5(), + pelines2.join('\n').md5(), + processed_ribo_removal_lint_report.md5(), + file(workflow.out.fastqc_filtered_html[0][1][0]).name, + file(workflow.out.fastqc_filtered_html[0][1][1]).name, + file(workflow.out.fastqc_filtered_zip[0][1][0]).name, + file(workflow.out.fastqc_filtered_zip[0][1][1]).name, + ).match() } + ) + } + } + + test("auto strandedness - should fail when salmon produces no lib_format_counts") { + + config "./nextflow_salmon_fail.config" + + when { + workflow { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false, strandedness:'auto' ], + [ + 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] = Channel.of(file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true)) + input[2] = Channel.of(file(params.modules_testdata_base_path + "genomics/homo_sapiens/genome/transcriptome.fasta", checkIfExists: true)) + input[3] = Channel.of(file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true)) + input[4] = [] // ch_salmon_index + input[5] = [] // ch_sortmerna_index + input[6] = [] // ch_bowtie2_index + input[7] = [] // ch_bbsplit_index + input[8] = [] // ch_rrna_fastas + + // Skip options + input[9] = true // skip_bbsplit + input[10] = true // skip_fastqc + input[11] = true // skip_trimming + input[12] = true // skip_umi_extract + input[13] = true // skip_linting + + // Index generation + input[14] = true // make_salmon_index + input[15] = false // make_sortmerna_index + input[16] = false // make_bowtie2_index + + // Trimming options + input[17] = 'fastp' // trimmer + input[18] = 10 // min_trimmed_reads + input[19] = false // save_trimmed + input[20] = false // fastp_merge + + // rRNA removal options + input[21] = false // remove_ribo_rna + input[22] = 'sortmerna' // ribo_removal_tool + + // UMI options + input[23] = false // with_umi + input[24] = 0 // umi_discard_read + + // Merging options + input[25] = false // save_merged_fastq + + // Strandedness thresholds + input[26] = 0.8 // stranded_threshold + input[27] = 0.1 // unstranded_threshold + """ + } + } + + then { assertAll( - { assert workflow.success}, - { assert snapshot(pelines1).md5().match("trimgalore_test_pe_reads_1_lines") }, - { assert snapshot(pelines1.size()).match("trimgalore_test_pe_reads_1_size") }, - { assert snapshot(pelines2).md5().match("trimgalore_test_pe_reads_2_lines") }, - { assert snapshot(pelines2.size()).match("trimgalore_test_pe_reads_2_size") }, - { assert snapshot(workflow.out.trim_read_count).match("trimgalore_read_count") }, - { assert snapshot(processed_sortmerna_lint_report).md5().match("trimgalore_lint") } - // This doesn't work- 'cat' changes between Conda and Docker - - // leaving it here until we find a way to address that - //{ assert snapshot(workflow.out.versions).match("trimgalore_versions") } + { assert workflow.failed }, + { assert workflow.errorMessage.contains("Salmon failed to produce lib_format_counts for sample 'test'") }, + { assert workflow.errorMessage.contains("set strandedness explicitly in the samplesheet") } ) } } + test("homo_sapiens single-end [fastq] fastp bowtie2") { + + setup { + run("CAT_FASTQ", alias: "CAT_FASTQ_SE") { + script "../../../../modules/nf-core/cat/fastq/main.nf" + process { + """ + // Single-end test data with synthetic rRNA reads + input[0] = Channel.of([ + [ id:'test_se', single_end:true, strandedness:'auto' ], + [ + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/fastq/test_rnaseq_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'generic/fastq/rrna_reads_1.fastq.gz', checkIfExists: true) + ] + ]) + """ + } + } + } + + when { + workflow { + """ + // Input channels - wrap single file in list to match expected format + input[0] = CAT_FASTQ_SE.out.reads.map { meta, reads -> [meta, reads instanceof List ? reads : [reads]] } + input[1] = Channel.of(file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true)) // ch_fasta + input[2] = Channel.of(file(params.modules_testdata_base_path + "genomics/homo_sapiens/genome/transcriptome.fasta", checkIfExists: true)) // ch_transcript_fasta + input[3] = Channel.of(file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true)) // ch_gtf + input[4] = [] // ch_salmon_index + input[5] = [] // ch_sortmerna_index + input[6] = [] // ch_bowtie2_index + input[7] = [] // ch_bbsplit_index + input[8] = Channel.of(file('https://raw.githubusercontent.com/biocore/sortmerna/v4.3.4/data/rRNA_databases/rfam-5.8s-database-id98.fasta', checkIfExists: true)) // ch_rrna_fastas + + // Skip options + input[9] = true // skip_bbsplit + input[10] = false // skip_fastqc + input[11] = false // skip_trimming + input[12] = true // skip_umi_extract + input[13] = false // skip_linting + + // Index generation + input[14] = true // make_salmon_index + input[15] = false // make_sortmerna_index (not needed for bowtie2) + input[16] = true // make_bowtie2_index + + // Trimming options + input[17] = 'fastp' // trimmer + input[18] = 10 // min_trimmed_reads + input[19] = true // save_trimmed + input[20] = false // fastp_merge (not applicable for single-end) + + // rRNA removal options + input[21] = true // remove_ribo_rna + input[22] = 'bowtie2' // ribo_removal_tool + + // UMI options + input[23] = false // with_umi + input[24] = 0 // umi_discard_read + + // Merging options + input[25] = false // save_merged_fastq + + // Strandedness thresholds + input[26] = 0.8 // stranded_threshold + input[27] = 0.1 // unstranded_threshold + """ + } + } + + then { + // For single-end, reads output is a single file, not a list + def selines = path(workflow.out.reads[0][1]).linesGzip + + // First part of each fq lint report line is a timestamp, remove it before snapshotting + def processed_ribo_removal_lint_report = path(workflow.out.lint_log_ribo[0][1]) + .getText() + .readLines() + .collect { line -> line.split(' ', 2)[1] } + .join('\n') + + // Parse bowtie2 log for alignment stats + def bowtie2Log = path(workflow.out.multiqc_files.find { it.toString().endsWith('.bowtie2.log') }) + .getText() + def exactMatch = (bowtie2Log =~ /(\d+) \(\d+\.\d+%\) aligned exactly 1 time/) + def multiMatch = (bowtie2Log =~ /(\d+) \(\d+\.\d+%\) aligned >1 times/) + def exactCount = exactMatch ? exactMatch[0][1].toInteger() : 0 + def multiCount = multiMatch ? multiMatch[0][1].toInteger() : 0 + def bowtie2RrnaCount = exactCount + multiCount + + // Input: 4159 original reads + 10 synthetic rRNA = 4169 reads + // After fastp trimming: 4162 reads (7 removed by quality filtering) + // Bowtie2 aligns 10 reads to rRNA (all with multiple alignments) + // Using --un-gz outputs unmapped reads directly: 4152 reads remain + assertAll( + { assert workflow.success }, + { assert selines.size() == 16608 }, // 4152 reads × 4 lines/read + { assert workflow.out.trim_read_count[0][1] == 4162 }, + { assert bowtie2RrnaCount == 10 }, // 10 reads aligned to rRNA reference + { assert snapshot( + selines.join('\n').md5(), + processed_ribo_removal_lint_report.md5(), + file(workflow.out.fastqc_filtered_html[0][1]).name, + file(workflow.out.fastqc_filtered_zip[0][1]).name, + ).match() } + ) + } + } } diff --git a/subworkflows/nf-core/fastq_qc_trim_filter_setstrandedness/tests/main.nf.test.snap b/subworkflows/nf-core/fastq_qc_trim_filter_setstrandedness/tests/main.nf.test.snap index b02450659..69a3a2126 100644 --- a/subworkflows/nf-core/fastq_qc_trim_filter_setstrandedness/tests/main.nf.test.snap +++ b/subworkflows/nf-core/fastq_qc_trim_filter_setstrandedness/tests/main.nf.test.snap @@ -1,128 +1,79 @@ { - "fastp_read_count": { + "homo_sapiens paired-end [fastq] fastp sortmerna": { "content": [ - [ - [ - { - "id": "test", - "single_end": false, - "strandedness": "auto" - }, - 3022 - ] - ] + "427d190cd40caeff5e2bd1967a21facb", + "5d74b788577eb11cf8c858ca94e2f787", + "\u001b[32m INFO\u001b[0m \u001b[2mfq::commands::lint\u001b[0m\u001b[2m:\u001b[0m fq-lint start\n\u001b[32m INFO\u001b[0m \u001b[2mfq::commands::lint\u001b[0m\u001b[2m:\u001b[0m validating paired end reads\n\u001b[32m INFO\u001b[0m \u001b[2mfq::validators\u001b[0m\u001b[2m:\u001b[0m disabled validators: []\n\u001b[32m INFO\u001b[0m \u001b[2mfq::validators\u001b[0m\u001b[2m:\u001b[0m enabled single read validators: [\"[S003] NameValidator\", \"[S004] CompleteValidator\", \"[S002] AlphabetValidator\", \"[S001] PlusLineValidator\", \"[S005] ConsistentSeqQualValidator\", \"[S006] QualityStringValidator\"]\n\u001b[32m INFO\u001b[0m \u001b[2mfq::validators\u001b[0m\u001b[2m:\u001b[0m enabled paired read validators: [\"[P001] NamesValidator\"]\n\u001b[32m INFO\u001b[0m \u001b[2mfq::commands::lint\u001b[0m\u001b[2m:\u001b[0m enabled special validators: [\"[S007] DuplicateNameValidator\"]\n\u001b[32m INFO\u001b[0m \u001b[2mfq::commands::lint\u001b[0m\u001b[2m:\u001b[0m starting validation (pass 1)\n\u001b[32m INFO\u001b[0m \u001b[2mfq::commands::lint\u001b[0m\u001b[2m:\u001b[0m read 1127 * 2 records\n\u001b[32m INFO\u001b[0m \u001b[2mfq::commands::lint\u001b[0m\u001b[2m:\u001b[0m starting validation (pass 2)\n\u001b[32m INFO\u001b[0m \u001b[2mfq::commands::lint\u001b[0m\u001b[2m:\u001b[0m read 1127 records\n\u001b[32m INFO\u001b[0m \u001b[2mfq::commands::lint\u001b[0m\u001b[2m:\u001b[0m fq-lint end", + "test_1_fastqc.html", + "test_2_fastqc.html", + "test_1_fastqc.zip", + "test_2_fastqc.zip" ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.2" + "nf-test": "0.9.3", + "nextflow": "25.10.3" }, - "timestamp": "2024-12-02T12:56:09.941793" + "timestamp": "2026-02-12T09:05:53.923664771" }, - "trimgalore_test_pe_reads_2_lines": { - "content": "eccf3e9e74589ff01c77fce7f4548e41", - "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.2" - }, - "timestamp": "2024-12-02T12:56:34.948679" - }, - "fastp_test_pe_reads_1_size": { + "homo_sapiens paired-end [fastq] fastp ribodetector": { "content": [ - 4508 + "5f14496c2cc20412609a0005ac6d10c4", + "888d06ce2b2c67c8b8fc94eae65870ed", + "13bd489c0acd9f79cfa291e982c6ba21", + "test_1_fastqc.html", + "test_2_fastqc.html", + "test_1_fastqc.zip", + "test_2_fastqc.zip" ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.2" + "nf-test": "0.9.3", + "nextflow": "25.10.3" }, - "timestamp": "2024-12-02T12:56:09.889501" + "timestamp": "2026-02-12T09:06:16.903127796" }, - "trimgalore_test_pe_reads_1_size": { + "homo_sapiens paired-end [fastq] trimgalore sortmerna": { "content": [ - 4508 + "d4b38548c21fb1a703204a38df4f6577", + "546d6903d24642870c2ef7bdbc435758", + "42c4b902767edb12752797e908f66d6c", + "test_1_fastqc.html", + "test_2_fastqc.html", + "test_1_fastqc.zip", + "test_2_fastqc.zip" ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.2" - }, - "timestamp": "2024-12-02T12:56:34.91497" - }, - "trimgalore_lint": { - "content": "daec499818124330ef90e5af47383f00", - "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.2" - }, - "timestamp": "2024-12-02T12:56:34.952929" - }, - "trimgalore_test_pe_reads_1_lines": { - "content": "3868fc1caf09367141d2bbf47e158823", - "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.2" - }, - "timestamp": "2024-12-02T12:56:34.913312" - }, - "fastp_lint": { - "content": "daec499818124330ef90e5af47383f00", - "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.2" + "nf-test": "0.9.3", + "nextflow": "25.10.3" }, - "timestamp": "2024-12-02T12:56:09.943788" + "timestamp": "2026-02-12T09:06:33.867211398" }, - "fastp_test_pe_reads_2_lines": { - "content": "eccf3e9e74589ff01c77fce7f4548e41", - "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.2" - }, - "timestamp": "2024-12-02T12:56:09.93962" - }, - "fastp_test_pe_reads_2_size": { + "homo_sapiens paired-end [fastq] fastp bowtie2": { "content": [ - 4508 + "e4b3f501156cf176093c712e7a1bc0e1", + "f79feea1f5d509b4bcfd0a637b5d8558", + "0a6ee69d1a42f5e38ad2d4dfe9faf5a6", + "test_1_fastqc.html", + "test_2_fastqc.html", + "test_1_fastqc.zip", + "test_2_fastqc.zip" ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.2" - }, - "timestamp": "2024-12-02T12:56:09.940673" - }, - "trimgalore_test_pe_reads_2_size": { - "content": [ - 4508 - ], - "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.2" - }, - "timestamp": "2024-12-02T12:56:34.949981" - }, - "fastp_test_pe_reads_1_lines": { - "content": "3868fc1caf09367141d2bbf47e158823", - "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.2" + "nf-test": "0.9.3", + "nextflow": "25.10.3" }, - "timestamp": "2024-12-02T12:56:09.887546" + "timestamp": "2026-02-12T09:06:51.756578633" }, - "trimgalore_read_count": { + "homo_sapiens single-end [fastq] fastp bowtie2": { "content": [ - [ - [ - { - "id": "test", - "single_end": false, - "strandedness": "auto" - }, - 3022 - ] - ] + "b423f619ae31c22b2bf99bdcb89bf852", + "5c1e74518dd70e4f1506b4f64da7b5f3", + "test_se_fastqc.html", + "test_se_fastqc.zip" ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.2" + "nf-test": "0.9.3", + "nextflow": "25.10.3" }, - "timestamp": "2024-12-02T12:56:34.951137" + "timestamp": "2026-02-12T09:07:08.160495752" } } \ No newline at end of file diff --git a/subworkflows/nf-core/fastq_qc_trim_filter_setstrandedness/tests/nextflow.config b/subworkflows/nf-core/fastq_qc_trim_filter_setstrandedness/tests/nextflow.config index 71f2d0d25..b8c40423f 100644 --- a/subworkflows/nf-core/fastq_qc_trim_filter_setstrandedness/tests/nextflow.config +++ b/subworkflows/nf-core/fastq_qc_trim_filter_setstrandedness/tests/nextflow.config @@ -8,12 +8,12 @@ process { ext.prefix = { "${meta.id}.trimmed" } } - withName: 'FQ_LINT_AFTER_BBMAP' { - ext.prefix = { "${meta.id}.bbmap" } + withName: 'FQ_LINT_AFTER_BBSPLIT' { + ext.prefix = { "${meta.id}.bbsplit" } } - withName: 'FQ_LINT_AFTER_SORTMERNA' { - ext.prefix = { "${meta.id}.sortmerna" } + withName: 'FQ_LINT_AFTER_RIBO_REMOVAL' { + ext.prefix = { "${meta.id}.fq_lint_after_ribo_removal" } } withName: 'FQ_SUBSAMPLE' { @@ -36,5 +36,31 @@ process { withName: 'SORTMERNA_INDEX' { ext.args = '--index 1' } + withName: 'RIBODETECTOR' { + ext.prefix = { "${meta.id}.ribodetector" } + ext.args = '--seed 1' + } + withName: 'BOWTIE2_ALIGN' { + ext.prefix = { "${meta.id}.bowtie2_rrna" } + ext.args = '--very-sensitive-local --seed 1 --reorder' + } + withName: 'BOWTIE2_ALIGN_PE' { + ext.prefix = { "${meta.id}.bowtie2_rrna" } + ext.args = '--very-sensitive-local --seed 1 --reorder' + } + withName: 'SAMTOOLS_VIEW_BOWTIE2' { + ext.prefix = { "${meta.id}.bowtie2_unmapped" } + ext.args = '-f 12' // Keep only pairs where BOTH mates are unmapped + } + withName: 'SAMTOOLS_FASTQ_BOWTIE2' { + ext.prefix = { "${meta.id}.bowtie2_filtered" } + } + withName: 'SEQKIT_REPLACE' { + ext.args = '--pattern "^(.+)" --replacement "{fbn}_\\$1"' + ext.prefix = { "${meta.id}_prefixed" } + } + withName: 'SEQKIT_REPLACE_U2T' { + ext.args = '--by-seq --pattern "[Uu]" --replacement "T"' + ext.prefix = { "${meta.id}_converted" } + } } - diff --git a/subworkflows/nf-core/fastq_qc_trim_filter_setstrandedness/tests/nextflow_salmon_fail.config b/subworkflows/nf-core/fastq_qc_trim_filter_setstrandedness/tests/nextflow_salmon_fail.config new file mode 100644 index 000000000..b79e8d98c --- /dev/null +++ b/subworkflows/nf-core/fastq_qc_trim_filter_setstrandedness/tests/nextflow_salmon_fail.config @@ -0,0 +1,15 @@ +includeConfig 'nextflow.config' + +// +// Disable SALMON processes within FASTQ_SUBSAMPLE_FQ_SALMON to simulate +// a scenario where Salmon fails to produce lib_format_counts output +// + +process { + withName: '.*:FASTQ_SUBSAMPLE_FQ_SALMON:SALMON_INDEX' { + ext.when = false + } + withName: '.*:FASTQ_SUBSAMPLE_FQ_SALMON:SALMON_QUANT' { + ext.when = false + } +} diff --git a/subworkflows/nf-core/fastq_remove_rrna/main.nf b/subworkflows/nf-core/fastq_remove_rrna/main.nf new file mode 100644 index 000000000..9a2a3f0d6 --- /dev/null +++ b/subworkflows/nf-core/fastq_remove_rrna/main.nf @@ -0,0 +1,218 @@ +include { BOWTIE2_ALIGN } from '../../../modules/nf-core/bowtie2/align/main' +include { BOWTIE2_ALIGN as BOWTIE2_ALIGN_PE } from '../../../modules/nf-core/bowtie2/align/main' +include { BOWTIE2_BUILD } from '../../../modules/nf-core/bowtie2/build/main' +include { RIBODETECTOR } from '../../../modules/nf-core/ribodetector/main' +include { SAMTOOLS_FASTQ as SAMTOOLS_FASTQ_BOWTIE2 } from '../../../modules/nf-core/samtools/fastq/main' +include { SAMTOOLS_VIEW as SAMTOOLS_VIEW_BOWTIE2 } from '../../../modules/nf-core/samtools/view/main' +include { SEQKIT_REPLACE } from '../../../modules/nf-core/seqkit/replace/main' +include { SEQKIT_REPLACE as SEQKIT_REPLACE_U2T } from '../../../modules/nf-core/seqkit/replace/main' +include { SEQKIT_STATS } from '../../../modules/nf-core/seqkit/stats/main' +include { SORTMERNA } from '../../../modules/nf-core/sortmerna/main' +include { SORTMERNA as SORTMERNA_INDEX } from '../../../modules/nf-core/sortmerna/main' + +// +// Function that parses seqkit stats TSV output to extract the mean read length +// for use with RiboDetector's -l parameter +// +def getReadLengthFromSeqkitStats(stats_file) { + def lines = stats_file.text.readLines() + if (lines.size() < 2) { + return 100 // Default fallback + } + + def header = lines[0].split('\t') + def avgLenIdx = header.findIndexOf { col -> col == 'avg_len' } + if (avgLenIdx < 0) { + return 100 // Default fallback if column not found + } + + // Calculate mean avg_len across all files in the stats output + def avgLens = lines[1..-1].collect { line -> line.split('\t')[avgLenIdx] as float } + def meanAvgLen = avgLens.sum() / avgLens.size() + + return Math.round(meanAvgLen) as int +} + +workflow FASTQ_REMOVE_RRNA { + take: + ch_reads // channel: [ val(meta), [ reads ] ] + ch_rrna_fastas // channel: one or more fasta files containing rrna sequences + ch_sortmerna_index // channel: /path/to/sortmerna/index/ (optional) + ch_bowtie2_index // channel: /path/to/bowtie2/index/ (optional) + ribo_removal_tool // string (enum): 'sortmerna', 'ribodetector', or 'bowtie2' + make_sortmerna_index // boolean: Whether to create a sortmerna index before running sortmerna + make_bowtie2_index // boolean: Whether to create a bowtie2 index before running bowtie2 + + main: + + ch_multiqc_files = channel.empty() + ch_filtered_reads = ch_reads + + // Individual output channels for workflow outputs + ch_sortmerna_log = channel.empty() + ch_ribodetector_log = channel.empty() + ch_seqkit_stats = channel.empty() + ch_bowtie2_log = channel.empty() + ch_bowtie2_index_out = channel.empty() + ch_seqkit_prefixed = channel.empty() + ch_seqkit_converted = channel.empty() + + if (ribo_removal_tool == 'sortmerna') { + ch_sortmerna_fastas = ch_rrna_fastas + .collect() + .map { fastas -> [[id: 'rrna_refs'], fastas] } + + if (make_sortmerna_index) { + SORTMERNA_INDEX( + [[], []], + ch_sortmerna_fastas, + [[], []], + ) + ch_sortmerna_index = SORTMERNA_INDEX.out.index.first() + } + + SORTMERNA( + ch_filtered_reads, + ch_sortmerna_fastas, + ch_sortmerna_index, + ) + + ch_filtered_reads = SORTMERNA.out.reads + ch_sortmerna_log = SORTMERNA.out.log + ch_multiqc_files = ch_multiqc_files.mix(SORTMERNA.out.log) + } + else if (ribo_removal_tool == 'ribodetector') { + // Run seqkit stats to determine average read length + SEQKIT_STATS( + ch_filtered_reads + ) + + ch_seqkit_stats = SEQKIT_STATS.out.stats + ch_multiqc_files = ch_multiqc_files.mix(SEQKIT_STATS.out.stats) + + // Join stats with reads and calculate read length for RiboDetector + ch_filtered_reads + .join(SEQKIT_STATS.out.stats) + .multiMap { meta, reads, stats -> + def readLength = getReadLengthFromSeqkitStats(stats) + reads: [meta, reads] + length: readLength + } + .set { ch_reads_with_length } + + RIBODETECTOR( + ch_reads_with_length.reads, + ch_reads_with_length.length, + ) + + ch_filtered_reads = RIBODETECTOR.out.fastq + ch_ribodetector_log = RIBODETECTOR.out.log + ch_multiqc_files = ch_multiqc_files.mix(RIBODETECTOR.out.log) + // Note: ribodetector versions collected via topic + } + else if (ribo_removal_tool == 'bowtie2') { + if (make_bowtie2_index) { + // Process each rRNA file to add unique prefixes and convert U to T + // This prevents duplicate sequence IDs in SAM header when combining databases + ch_rrna_fastas + .map { fasta_file -> [[id: fasta_file.baseName], fasta_file] } + .set { ch_rrna_with_meta } + + // Step 1: Add filename prefixes to sequence headers + SEQKIT_REPLACE( + ch_rrna_with_meta + ) + ch_seqkit_prefixed = SEQKIT_REPLACE.out.fastx + + // Step 2: Convert U to T in sequences (RNA to DNA) + SEQKIT_REPLACE.out.fastx + .map { meta, fasta_file -> [[id: "${meta.id}_dna"], fasta_file] } + .set { ch_prefixed_fastas } + + SEQKIT_REPLACE_U2T( + ch_prefixed_fastas + ) + ch_seqkit_converted = SEQKIT_REPLACE_U2T.out.fastx + + // Collect processed files (already prefixed and U->T converted) + SEQKIT_REPLACE_U2T.out.fastx + .map { _meta, fasta_file -> fasta_file } + .collectFile(name: 'rrna_combined_dna.fasta', newLine: true) + .map { fasta_file -> [[id: 'rrna_refs'], fasta_file] } + .set { ch_combined_fasta } + + BOWTIE2_BUILD( + ch_combined_fasta + ) + ch_bowtie2_index = BOWTIE2_BUILD.out.index.first() + ch_bowtie2_index_out = BOWTIE2_BUILD.out.index + } + + // Branch reads by single-end vs paired-end for different filtering strategies + ch_filtered_reads + .branch { meta, _reads -> + single_end: meta.single_end + paired_end: !meta.single_end + } + .set { ch_reads_for_bowtie2 } + + // For single-end reads: bowtie2's --un-gz works correctly + // save_unaligned=true outputs unmapped reads directly + BOWTIE2_ALIGN( + ch_reads_for_bowtie2.single_end, + ch_bowtie2_index, + [[], []], // No reference fasta needed + true, // save_unaligned - for single-end this works correctly + false, // sort_bam - not needed + ) + + ch_bowtie2_log = BOWTIE2_ALIGN.out.log + ch_multiqc_files = ch_multiqc_files.mix(BOWTIE2_ALIGN.out.log) + + // For paired-end reads: bowtie2's --un-conc-gz outputs pairs that didn't + // align concordantly, which INCLUDES pairs where one mate aligned. + // We need to filter via samtools to get pairs where BOTH mates are unmapped. + BOWTIE2_ALIGN_PE( + ch_reads_for_bowtie2.paired_end, + ch_bowtie2_index, + [[], []], // No reference fasta needed for BAM output + false, // save_unaligned - we'll extract from BAM instead + false, // sort_bam - not needed + ) + + ch_bowtie2_log = ch_bowtie2_log.mix(BOWTIE2_ALIGN_PE.out.log) + ch_multiqc_files = ch_multiqc_files.mix(BOWTIE2_ALIGN_PE.out.log) + + // Filter BAM for read pairs where BOTH mates are unmapped (flag 12 = 4 + 8) + // This removes any pair where at least one mate aligned to rRNA + SAMTOOLS_VIEW_BOWTIE2( + BOWTIE2_ALIGN_PE.out.bam.map { meta, bam_file -> [meta, bam_file, []] }, + [[], []], // No reference fasta + [], // No qname file + [] // No index format + ) + // Note: samtools/view versions collected via topic + + // Convert filtered BAM back to paired FASTQ + SAMTOOLS_FASTQ_BOWTIE2( + SAMTOOLS_VIEW_BOWTIE2.out.bam, + false // not interleaved + ) + + // Combine single-end and paired-end results + BOWTIE2_ALIGN.out.fastq + .mix(SAMTOOLS_FASTQ_BOWTIE2.out.fastq) + .set { ch_filtered_reads } + } + + emit: + reads = ch_filtered_reads // channel: [ val(meta), [ reads ] ] + multiqc_files = ch_multiqc_files // channel: [ val(meta), [ log files ] ] + sortmerna_log = ch_sortmerna_log // channel: [ val(meta), [ log ] ] + ribodetector_log = ch_ribodetector_log // channel: [ val(meta), [ log ] ] + seqkit_stats = ch_seqkit_stats // channel: [ val(meta), [ stats ] ] + bowtie2_log = ch_bowtie2_log // channel: [ val(meta), [ log ] ] + bowtie2_index = ch_bowtie2_index_out // channel: [ val(meta), [ index ] ] + seqkit_prefixed = ch_seqkit_prefixed // channel: [ val(meta), [ fasta ] ] + seqkit_converted = ch_seqkit_converted // channel: [ val(meta), [ fasta ] ] +} diff --git a/subworkflows/nf-core/fastq_remove_rrna/meta.yml b/subworkflows/nf-core/fastq_remove_rrna/meta.yml new file mode 100644 index 000000000..8bc40437c --- /dev/null +++ b/subworkflows/nf-core/fastq_remove_rrna/meta.yml @@ -0,0 +1,104 @@ +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/subworkflows/yaml-schema.json +name: "fastq_remove_rrna" +description: Remove ribosomal RNA reads from FASTQ files using SortMeRNA, RiboDetector, or Bowtie2 +keywords: + - fastq + - rrna + - ribosomal + - filter + - sortmerna + - ribodetector + - bowtie2 +components: + - bowtie2/align + - bowtie2/build + - ribodetector + - samtools/fastq + - samtools/view + - seqkit/replace + - seqkit/stats + - sortmerna +input: + - ch_reads: + type: file + description: | + List of FastQ files of size 1 and 2 for single-end and paired-end data, respectively. + structure: + - meta: + type: map + description: Groovy Map containing sample information e.g. [ id:'test', single_end:false ] + - reads: + type: file + description: FastQ files + pattern: "*.{fq,fastq}{,.gz}" + - ch_rrna_fastas: + type: file + description: | + Channel containing one or more FASTA files with rRNA sequences for use with SortMeRNA or Bowtie2. + Not required for RiboDetector which uses built-in models. + structure: + - fasta: + type: file + description: rRNA reference fasta files + pattern: "*.{fa,fasta}{,.gz}" + - ch_sortmerna_index: + type: directory + description: | + Pre-built SortMeRNA index directory. Optional - can be built on-the-fly if make_sortmerna_index is true. + structure: + - meta: + type: map + description: Metadata for the SortMeRNA index + - index: + type: directory + description: SortMeRNA index directory + - ch_bowtie2_index: + type: directory + description: | + Pre-built Bowtie2 index directory. Optional - can be built on-the-fly if make_bowtie2_index is true. + structure: + - meta: + type: map + description: Metadata for the Bowtie2 index + - index: + type: directory + description: Bowtie2 index directory + - ribo_removal_tool: + type: string + description: Specifies the rRNA removal tool to use + enum: ["sortmerna", "ribodetector", "bowtie2"] + - make_sortmerna_index: + type: boolean + description: Whether to create SortMeRNA index before running SortMeRNA + - make_bowtie2_index: + type: boolean + description: Whether to create Bowtie2 index before running Bowtie2 for rRNA removal +output: + - reads: + type: file + description: | + FASTQ files with rRNA reads removed. + structure: + - meta: + type: map + description: Groovy Map containing sample information + - reads: + type: file + description: Filtered FastQ files + pattern: "*.{fq,fastq}{,.gz}" + - multiqc_files: + type: file + description: | + Log files from the rRNA removal tool, compatible with MultiQC. + structure: + - meta: + type: map + description: Metadata for the log files + - log: + type: file + description: Tool-specific log files + pattern: "*.log" +authors: + - "@pinin4fjords" +maintainers: + - "@pinin4fjords" diff --git a/subworkflows/nf-core/fastq_remove_rrna/tests/main.nf.test b/subworkflows/nf-core/fastq_remove_rrna/tests/main.nf.test new file mode 100644 index 000000000..f0ea51d5d --- /dev/null +++ b/subworkflows/nf-core/fastq_remove_rrna/tests/main.nf.test @@ -0,0 +1,344 @@ + +nextflow_workflow { + + name "Test Subworkflow FASTQ_REMOVE_RRNA" + script "../main.nf" + workflow "FASTQ_REMOVE_RRNA" + config "./nextflow.config" + + tag "subworkflows" + tag "subworkflows_nfcore" + tag "subworkflows/fastq_remove_rrna" + + tag "cat/fastq" + tag "bowtie2/align" + tag "bowtie2/build" + tag "ribodetector" + tag "samtools/view" + tag "samtools/fastq" + tag "seqkit/replace" + tag "seqkit/stats" + tag "sortmerna" + + // Global setup: Create test data with synthetic rRNA reads using CAT_FASTQ + // The rRNA reads (from generic/fastq/) are 5.8S rRNA sequences that will be detected + // by SortMeRNA (alignment-based, 100% detection), RiboDetector (ML-based, ~70% detection), + // and Bowtie2 (alignment-based) + setup { + run("CAT_FASTQ") { + script "../../../../modules/nf-core/cat/fastq/main.nf" + process { + """ + // CAT_FASTQ input: alternating R1/R2 files [r1_a, r2_a, r1_b, r2_b, ...] + input[0] = Channel.of([ + [ id:'test', single_end:false ], + [ + 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 + 'generic/fastq/rrna_reads_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'generic/fastq/rrna_reads_2.fastq.gz', checkIfExists: true) + ] + ]) + """ + } + } + } + + test("homo_sapiens paired-end [fastq] sortmerna") { + + when { + workflow { + """ + input[0] = CAT_FASTQ.out.reads // ch_reads + input[1] = Channel.of(file('https://raw.githubusercontent.com/biocore/sortmerna/v4.3.4/data/rRNA_databases/rfam-5.8s-database-id98.fasta', checkIfExists: true)) // ch_rrna_fastas + input[2] = [] // ch_sortmerna_index + input[3] = [] // ch_bowtie2_index + input[4] = 'sortmerna' // ribo_removal_tool + input[5] = true // make_sortmerna_index + input[6] = false // make_bowtie2_index + """ + } + } + + then { + def pelines1 = path(workflow.out.reads[0][1][0]).linesGzip + def pelines2 = path(workflow.out.reads[0][1][1]).linesGzip + + // Parse sortmerna log for rRNA detection stats + def sortmernaLog = path(workflow.out.multiqc_files.find { entry -> entry[1].toString().endsWith('.sortmerna.log') }?.getAt(1)) + .getText() + def sortmernaRrnaMatch = (sortmernaLog =~ /Total reads passing E-value threshold = (\d+)/) + def sortmernaRrnaCount = sortmernaRrnaMatch ? sortmernaRrnaMatch[0][1].toInteger() : -1 + + // Input: 4159 original + 10 synthetic rRNA = 4169 read pairs + // SortMeRNA removes all 10 synthetic rRNA pairs (20 individual reads), leaving 4159 pairs + assertAll( + { assert workflow.success }, + { assert pelines1.size() == 16636 }, // 4159 pairs × 4 lines/read + { assert pelines2.size() == 16636 }, + { assert sortmernaRrnaCount == 20 }, // 10 pairs = 20 individual reads (100% detection) + { assert snapshot( + pelines1.join('\n').md5(), + pelines2.join('\n').md5() + ).match() } + ) + } + } + + test("homo_sapiens paired-end [fastq] ribodetector") { + + when { + workflow { + """ + input[0] = CAT_FASTQ.out.reads // ch_reads + input[1] = [] // ch_rrna_fastas (not needed for ribodetector) + input[2] = [] // ch_sortmerna_index + input[3] = [] // ch_bowtie2_index + input[4] = 'ribodetector' // ribo_removal_tool + input[5] = false // make_sortmerna_index + input[6] = false // make_bowtie2_index + """ + } + } + + then { + def pelines1 = path(workflow.out.reads[0][1][0]).linesGzip + def pelines2 = path(workflow.out.reads[0][1][1]).linesGzip + + // Parse ribodetector log for rRNA detection stats + // Note: ribodetector log contains ANSI color codes that must be stripped before regex matching + def ribodetectorLog = path(workflow.out.multiqc_files.find { entry -> entry[1].toString().endsWith('.ribodetector.log') }?.getAt(1)) + .getText() + .replaceAll(/\u001b\[[0-9;]*m/, '') // Strip ANSI escape codes + def ribodetectorRrnaMatch = (ribodetectorLog =~ /Detected (\d+) rRNA sequences/) + def ribodetectorRrnaCount = ribodetectorRrnaMatch ? ribodetectorRrnaMatch[0][1].toInteger() : -1 + + // Sort FASTQ reads before MD5 to handle ribodetector's non-deterministic output order + // (multiprocessing causes variable read ordering even with --seed set) + def sortedLines1 = pelines1.collate(4).sort { it[0] }.flatten() + def sortedLines2 = pelines2.collate(4).sort { it[0] }.flatten() + + // Input: 4159 original + 10 synthetic rRNA = 4169 read pairs + // RiboDetector removes 7 of 10 synthetic rRNA pairs (70% detection), leaving 4162 pairs + assertAll( + { assert workflow.success }, + { assert pelines1.size() == 16648 }, // 4162 pairs × 4 lines/read + { assert pelines2.size() == 16648 }, + { assert ribodetectorRrnaCount == 7 }, // 7 pairs detected (70% - ML model misses some) + { assert snapshot( + sortedLines1.join('\n').md5(), + sortedLines2.join('\n').md5() + ).match() } + ) + } + } + + test("homo_sapiens paired-end [fastq] bowtie2") { + + when { + workflow { + """ + input[0] = CAT_FASTQ.out.reads // ch_reads + input[1] = Channel.of(file('https://raw.githubusercontent.com/biocore/sortmerna/v4.3.4/data/rRNA_databases/rfam-5.8s-database-id98.fasta', checkIfExists: true)) // ch_rrna_fastas + input[2] = [] // ch_sortmerna_index + input[3] = [] // ch_bowtie2_index + input[4] = 'bowtie2' // ribo_removal_tool + input[5] = false // make_sortmerna_index + input[6] = true // make_bowtie2_index + """ + } + } + + then { + def pelines1 = path(workflow.out.reads[0][1][0]).linesGzip + def pelines2 = path(workflow.out.reads[0][1][1]).linesGzip + + // Parse bowtie2 log for alignment stats - count mates that aligned to rRNA + def bowtie2Log = path(workflow.out.multiqc_files.find { entry -> entry[1].toString().endsWith('.bowtie2.log') }?.getAt(1)) + .getText() + def exactMatch = (bowtie2Log =~ /(\d+) \(\d+\.\d+%\) aligned exactly 1 time/) + def multiMatch = (bowtie2Log =~ /(\d+) \(\d+\.\d+%\) aligned >1 times/) + def exactCount = exactMatch ? exactMatch[0][1].toInteger() : 0 + def multiCount = multiMatch ? multiMatch[0][1].toInteger() : 0 + def bowtie2RrnaCount = exactCount + multiCount + + // Input: 4159 original + 10 synthetic rRNA = 4169 read pairs + // Bowtie2 aligns 17 individual mates to rRNA + // Using samtools -f 12 keeps only pairs where BOTH mates are unmapped, leaving 4159 pairs + assertAll( + { assert workflow.success }, + { assert pelines1.size() == 16636 }, // 4159 pairs × 4 lines/read + { assert pelines2.size() == 16636 }, + { assert bowtie2RrnaCount == 17 }, // 17 mates aligned to rRNA reference + { assert snapshot( + pelines1.join('\n').md5(), + pelines2.join('\n').md5() + ).match() } + ) + } + } + + test("homo_sapiens single-end [fastq] bowtie2") { + + setup { + run("CAT_FASTQ", alias: "CAT_FASTQ_SE") { + script "../../../../modules/nf-core/cat/fastq/main.nf" + process { + """ + // Single-end test data with synthetic rRNA reads + input[0] = Channel.of([ + [ id:'test_se', single_end: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 + 'generic/fastq/rrna_reads_1.fastq.gz', checkIfExists: true) + ] + ]) + """ + } + } + } + + when { + workflow { + """ + input[0] = CAT_FASTQ_SE.out.reads.map { meta, reads -> [meta, reads instanceof List ? reads : [reads]] } + input[1] = Channel.of(file('https://raw.githubusercontent.com/biocore/sortmerna/v4.3.4/data/rRNA_databases/rfam-5.8s-database-id98.fasta', checkIfExists: true)) // ch_rrna_fastas + input[2] = [] // ch_sortmerna_index + input[3] = [] // ch_bowtie2_index + input[4] = 'bowtie2' // ribo_removal_tool + input[5] = false // make_sortmerna_index + input[6] = true // make_bowtie2_index + """ + } + } + + then { + // For single-end, reads output is a single file, not a list + def selines = path(workflow.out.reads[0][1]).linesGzip + + // Parse bowtie2 log for alignment stats + def bowtie2Log = path(workflow.out.multiqc_files.find { entry -> entry[1].toString().endsWith('.bowtie2.log') }?.getAt(1)) + .getText() + def exactMatch = (bowtie2Log =~ /(\d+) \(\d+\.\d+%\) aligned exactly 1 time/) + def multiMatch = (bowtie2Log =~ /(\d+) \(\d+\.\d+%\) aligned >1 times/) + def exactCount = exactMatch ? exactMatch[0][1].toInteger() : 0 + def multiCount = multiMatch ? multiMatch[0][1].toInteger() : 0 + def bowtie2RrnaCount = exactCount + multiCount + + // Input: 4159 original reads + 10 synthetic rRNA = 4169 reads + // Bowtie2 aligns 10 reads to rRNA + // Using --un-gz outputs unmapped reads directly: 4159 reads remain + assertAll( + { assert workflow.success }, + { assert selines.size() == 16636 }, // 4159 reads × 4 lines/read + { assert bowtie2RrnaCount == 10 }, // 10 reads aligned to rRNA reference + { assert snapshot( + selines.join('\n').md5() + ).match() } + ) + } + } + + test("homo_sapiens single-end [fastq] sortmerna") { + + setup { + run("CAT_FASTQ", alias: "CAT_FASTQ_SE") { + script "../../../../modules/nf-core/cat/fastq/main.nf" + process { + """ + // Single-end test data with synthetic rRNA reads + input[0] = Channel.of([ + [ id:'test_se', single_end: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 + 'generic/fastq/rrna_reads_1.fastq.gz', checkIfExists: true) + ] + ]) + """ + } + } + } + + when { + workflow { + """ + input[0] = CAT_FASTQ_SE.out.reads.map { meta, reads -> [meta, reads instanceof List ? reads : [reads]] } + input[1] = Channel.of(file('https://raw.githubusercontent.com/biocore/sortmerna/v4.3.4/data/rRNA_databases/rfam-5.8s-database-id98.fasta', checkIfExists: true)) // ch_rrna_fastas + input[2] = [] // ch_sortmerna_index + input[3] = [] // ch_bowtie2_index + input[4] = 'sortmerna' // ribo_removal_tool + input[5] = true // make_sortmerna_index + input[6] = false // make_bowtie2_index + """ + } + } + + then { + // For single-end, reads output is a single file, not a list + def selines = path(workflow.out.reads[0][1]).linesGzip + + // Parse sortmerna log for rRNA detection stats + def sortmernaLog = path(workflow.out.multiqc_files.find { entry -> entry[1].toString().endsWith('.sortmerna.log') }?.getAt(1)) + .getText() + def sortmernaRrnaMatch = (sortmernaLog =~ /Total reads passing E-value threshold = (\d+)/) + def sortmernaRrnaCount = sortmernaRrnaMatch ? sortmernaRrnaMatch[0][1].toInteger() : -1 + + // Input: 4159 original reads + 10 synthetic rRNA = 4169 reads + // SortMeRNA removes all 10 synthetic rRNA reads (100% detection), leaving 4159 reads + assertAll( + { assert workflow.success }, + { assert selines.size() == 16636 }, // 4159 reads × 4 lines/read + { assert sortmernaRrnaCount == 10 }, // 10 reads detected (100% detection) + { assert snapshot( + selines.join('\n').md5() + ).match() } + ) + } + } + + test("homo_sapiens paired-end [fastq] bowtie2 with duplicate rrna databases") { + + when { + workflow { + """ + input[0] = CAT_FASTQ.out.reads // ch_reads + // Test with multiple rRNA databases that contain clustered sequences with + // duplicate identifiers. SILVA databases use clustered sequences where the sequence ID + // (the part before the first space) can be the same across different databases, causing + // "Duplicate entry in sam header" errors when building Bowtie2 indexes. This test ensures + // the SEQKIT_REPLACE preprocessing correctly prefixes sequence IDs with their source + // filename to create unique identifiers while preserving all sequences. + input[1] = Channel.of( + file('https://raw.githubusercontent.com/biocore/sortmerna/v4.3.4/data/rRNA_databases/silva-euk-18s-id95.fasta', checkIfExists: true), + file('https://raw.githubusercontent.com/biocore/sortmerna/v4.3.4/data/rRNA_databases/silva-euk-28s-id98.fasta', checkIfExists: true) + ) // ch_rrna_fastas + input[2] = [] // ch_sortmerna_index + input[3] = [] // ch_bowtie2_index + input[4] = 'bowtie2' // ribo_removal_tool + input[5] = false // make_sortmerna_index + input[6] = true // make_bowtie2_index + """ + } + } + + then { + def pelines1 = path(workflow.out.reads[0][1][0]).linesGzip + def pelines2 = path(workflow.out.reads[0][1][1]).linesGzip + + // Parse bowtie2 log for alignment stats + def bowtie2Log = path(workflow.out.multiqc_files.find { entry -> entry[1].toString().endsWith('.bowtie2.log') }?.getAt(1)) + .getText() + + // The key test: workflow should complete successfully without SAM header duplicate errors + // even when the same rRNA databases are provided multiple times + assertAll( + { assert workflow.success }, + { assert pelines1.size() >= 0 }, // Should have some reads + { assert pelines2.size() >= 0 }, // Should have some reads + { assert !workflow.stderr.contains("Duplicate entry") }, // No duplicate header errors in stderr + { assert !workflow.stderr.contains("failed to add PG line") } // No SAM header errors in stderr + ) + } + } + +} diff --git a/subworkflows/nf-core/fastq_remove_rrna/tests/main.nf.test.snap b/subworkflows/nf-core/fastq_remove_rrna/tests/main.nf.test.snap new file mode 100644 index 000000000..a9b39b90e --- /dev/null +++ b/subworkflows/nf-core/fastq_remove_rrna/tests/main.nf.test.snap @@ -0,0 +1,55 @@ +{ + "homo_sapiens single-end [fastq] bowtie2": { + "content": [ + "bdea4e3bbdbb7c301ff578b9d8976fb6" + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.3" + }, + "timestamp": "2026-02-03T16:41:53.175993721" + }, + "homo_sapiens single-end [fastq] sortmerna": { + "content": [ + "bdea4e3bbdbb7c301ff578b9d8976fb6" + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.2" + }, + "timestamp": "2026-01-19T15:59:26.891896799" + }, + "homo_sapiens paired-end [fastq] sortmerna": { + "content": [ + "bdea4e3bbdbb7c301ff578b9d8976fb6", + "1b83618177abebeb38c29d2258efdd4f" + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.2" + }, + "timestamp": "2026-01-19T15:58:00.962491308" + }, + "homo_sapiens paired-end [fastq] ribodetector": { + "content": [ + "ec0260bcdeef6af8a9b6d470eafb5603", + "a0ef8564218df5741dee81f03db13600" + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.3" + }, + "timestamp": "2026-02-03T13:31:06.238303048" + }, + "homo_sapiens paired-end [fastq] bowtie2": { + "content": [ + "4ef4e259208497288aaefaa88770975d", + "63198a2af4a4a8fb949b01a8b2c4cb7c" + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.3" + }, + "timestamp": "2026-02-03T16:41:41.386593991" + } +} \ No newline at end of file diff --git a/subworkflows/nf-core/fastq_remove_rrna/tests/nextflow.config b/subworkflows/nf-core/fastq_remove_rrna/tests/nextflow.config new file mode 100644 index 000000000..c3aa384e2 --- /dev/null +++ b/subworkflows/nf-core/fastq_remove_rrna/tests/nextflow.config @@ -0,0 +1,40 @@ +// +// rRNA removal subworkflow options +// + +process { + + withName: 'SORTMERNA' { + ext.args = '--index 0' + } + withName: 'SORTMERNA_INDEX' { + ext.args = '--index 1' + } + withName: 'RIBODETECTOR' { + ext.prefix = { "${meta.id}.ribodetector" } + ext.args = '--seed 1' + } + withName: 'BOWTIE2_ALIGN' { + ext.prefix = { "${meta.id}.bowtie2_rrna" } + ext.args = '--very-sensitive-local --seed 1 --reorder' + } + withName: 'BOWTIE2_ALIGN_PE' { + ext.prefix = { "${meta.id}.bowtie2_rrna" } + ext.args = '--very-sensitive-local --seed 1 --reorder' + } + withName: 'SAMTOOLS_VIEW_BOWTIE2' { + ext.prefix = { "${meta.id}.bowtie2_unmapped" } + ext.args = '-f 12' // Keep only pairs where BOTH mates are unmapped + } + withName: 'SAMTOOLS_FASTQ_BOWTIE2' { + ext.prefix = { "${meta.id}.bowtie2_filtered" } + } + withName: 'SEQKIT_REPLACE' { + ext.args = '--pattern "^(.+)" --replacement "{fbn}_\\$1"' + ext.prefix = { "${meta.id}_prefixed" } + } + withName: 'SEQKIT_REPLACE_U2T' { + ext.args = '--by-seq --pattern "[Uu]" --replacement "T"' + ext.prefix = { "${meta.id}_converted" } + } +} diff --git a/subworkflows/nf-core/fastq_subsample_fq_salmon/main.nf b/subworkflows/nf-core/fastq_subsample_fq_salmon/main.nf index bac581cfa..1dc639a6d 100644 --- a/subworkflows/nf-core/fastq_subsample_fq_salmon/main.nf +++ b/subworkflows/nf-core/fastq_subsample_fq_salmon/main.nf @@ -18,21 +18,17 @@ workflow FASTQ_SUBSAMPLE_FQ_SALMON { main: - ch_versions = Channel.empty() - // // Create Salmon index if required // if (make_index) { ch_index = SALMON_INDEX ( ch_genome_fasta, ch_transcript_fasta ).index - ch_versions = ch_versions.mix(SALMON_INDEX.out.versions) } // // Sub-sample FastQ files with fq // FQ_SUBSAMPLE ( ch_reads ) - ch_versions = ch_versions.mix(FQ_SUBSAMPLE.out.versions.first()) // // Pseudo-alignment with Salmon @@ -40,7 +36,6 @@ workflow FASTQ_SUBSAMPLE_FQ_SALMON { def lib_type = 'A' def alignment_mode = false SALMON_QUANT ( FQ_SUBSAMPLE.out.fastq, ch_index, ch_gtf, ch_transcript_fasta, alignment_mode, lib_type ) - ch_versions = ch_versions.mix(SALMON_QUANT.out.versions.first()) emit: index = ch_index // channel: [ index ] @@ -50,6 +45,4 @@ workflow FASTQ_SUBSAMPLE_FQ_SALMON { results = SALMON_QUANT.out.results // channel: [ val(meta), results_dir ] json_info = SALMON_QUANT.out.json_info // channel: [ val(meta), json_info lib_format_counts = SALMON_QUANT.out.lib_format_counts // channel: [ val(meta), json_info - - versions = ch_versions // channel: [ versions.yml ] } diff --git a/subworkflows/nf-core/fastq_subsample_fq_salmon/meta.yml b/subworkflows/nf-core/fastq_subsample_fq_salmon/meta.yml index 7e2f10966..187804956 100644 --- a/subworkflows/nf-core/fastq_subsample_fq_salmon/meta.yml +++ b/subworkflows/nf-core/fastq_subsample_fq_salmon/meta.yml @@ -58,10 +58,6 @@ output: File containing meta information from Salmon quant Which could be used to infer strandedness among other things pattern: "*info.json" - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" authors: - "@robsyme" - "@drpatelh" diff --git a/subworkflows/nf-core/fastq_subsample_fq_salmon/tests/main.nf.test b/subworkflows/nf-core/fastq_subsample_fq_salmon/tests/main.nf.test index 077d9c758..60017f2d8 100644 --- a/subworkflows/nf-core/fastq_subsample_fq_salmon/tests/main.nf.test +++ b/subworkflows/nf-core/fastq_subsample_fq_salmon/tests/main.nf.test @@ -4,6 +4,13 @@ nextflow_workflow { script "../main.nf" workflow "FASTQ_SUBSAMPLE_FQ_SALMON" config "./nextflow.config" + tag "subworkflows" + tag "subworkflows_nfcore" + tag "subworkflows/fastq_subsample_fq_salmon" + tag "fastq_subsample_fq_salmon" + tag "salmon/index" + tag "fq/subsample" + tag "salmon/quant" test("homo_sapiens paired-end [fastq]") { @@ -51,8 +58,7 @@ nextflow_workflow { readlines1.size(), readlines2[0..5], readlines2.size(), - workflow.out.lib_format_counts, - workflow.out.versions).match() } + workflow.out.lib_format_counts).match() } ) } } diff --git a/subworkflows/nf-core/fastq_subsample_fq_salmon/tests/main.nf.test.snap b/subworkflows/nf-core/fastq_subsample_fq_salmon/tests/main.nf.test.snap index d0509e559..38c5de1ab 100644 --- a/subworkflows/nf-core/fastq_subsample_fq_salmon/tests/main.nf.test.snap +++ b/subworkflows/nf-core/fastq_subsample_fq_salmon/tests/main.nf.test.snap @@ -27,17 +27,13 @@ }, "test_lib_format_counts.json:md5,0b0e2dc090e5ad88f9a9d6dbe9c3e4a0" ] - ], - [ - "versions.yml:md5,acbe540e7ede18f7999975729fde869c", - "versions.yml:md5,eb47b2c20a3565e58b613f66521da320" ] ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2024-10-19T17:28:10.525956442" + "timestamp": "2026-02-02T17:19:36.509463" }, "homo_sapiens paired-end [fastq] - stub": { "content": [ @@ -102,10 +98,6 @@ "test_lib_format_counts.json:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "5": [ - "versions.yml:md5,acbe540e7ede18f7999975729fde869c", - "versions.yml:md5,eb47b2c20a3565e58b613f66521da320" - ], "index": [ [ "complete_ref_lens.bin:md5,d41d8cd98f00b204e9800998ecf8427e", @@ -162,20 +154,16 @@ "single_end": false }, [ - + ] ] - ], - "versions": [ - "versions.yml:md5,acbe540e7ede18f7999975729fde869c", - "versions.yml:md5,eb47b2c20a3565e58b613f66521da320" ] } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2024-10-19T17:28:28.896824153" + "timestamp": "2026-02-02T17:19:51.908726" } } \ No newline at end of file diff --git a/subworkflows/nf-core/quant_tximport_summarizedexperiment/main.nf b/subworkflows/nf-core/quant_tximport_summarizedexperiment/main.nf new file mode 100644 index 000000000..6f7c895c9 --- /dev/null +++ b/subworkflows/nf-core/quant_tximport_summarizedexperiment/main.nf @@ -0,0 +1,93 @@ +// +// Quantification post-processing with tximport and SummarizedExperiment +// + +include { CUSTOM_TX2GENE } from '../../../modules/nf-core/custom/tx2gene' +include { TXIMETA_TXIMPORT } from '../../../modules/nf-core/tximeta/tximport' + +include { SUMMARIZEDEXPERIMENT_SUMMARIZEDEXPERIMENT as SE_GENE_UNIFIED } from '../../../modules/nf-core/summarizedexperiment/summarizedexperiment' +include { SUMMARIZEDEXPERIMENT_SUMMARIZEDEXPERIMENT as SE_TRANSCRIPT_UNIFIED } from '../../../modules/nf-core/summarizedexperiment/summarizedexperiment' + +workflow QUANT_TXIMPORT_SUMMARIZEDEXPERIMENT { + take: + samplesheet // channel: [ val(meta), /path/to/samplesheet ] + quant_results // channel: [ val(meta), /path/to/results ] - per-sample quant files + gtf // channel: /path/to/genome.gtf + gtf_id_attribute // val: GTF gene ID attribute + gtf_extra_attribute // val: GTF alternative gene attribute (e.g. gene_name) + quant_type // val: 'salmon', 'kallisto', or 'rsem' + + main: + ch_versions = channel.empty() + + // + // Create tx2gene mapping from GTF + quantification files + // + CUSTOM_TX2GENE ( + gtf.map { gtf_file -> [ [:], gtf_file ] }, + quant_results.collect{ meta_results -> meta_results[1] }.map { results -> [ [:], results ] }, + quant_type, + gtf_id_attribute, + gtf_extra_attribute + ) + ch_versions = ch_versions.mix(CUSTOM_TX2GENE.out.versions) + + // + // Import and summarize quantifications with tximport + // + TXIMETA_TXIMPORT ( + quant_results.collect{ meta_results -> meta_results[1] }.map { results -> [ ['id': 'all_samples'], results ] }, + CUSTOM_TX2GENE.out.tx2gene, + quant_type + ) + ch_versions = ch_versions.mix(TXIMETA_TXIMPORT.out.versions) + + // + // Build gene-level SummarizedExperiment + // + ch_gene_unified = TXIMETA_TXIMPORT.out.counts_gene + .join(TXIMETA_TXIMPORT.out.counts_gene_length_scaled, failOnMismatch: true, failOnDuplicate: true) + .join(TXIMETA_TXIMPORT.out.counts_gene_scaled, failOnMismatch: true, failOnDuplicate: true) + .join(TXIMETA_TXIMPORT.out.lengths_gene, failOnMismatch: true, failOnDuplicate: true) + .join(TXIMETA_TXIMPORT.out.tpm_gene, failOnMismatch: true, failOnDuplicate: true) + .map { row -> tuple(row[0], row.tail()) } + + SE_GENE_UNIFIED ( + ch_gene_unified, + CUSTOM_TX2GENE.out.tx2gene, + samplesheet + ) + ch_versions = ch_versions.mix(SE_GENE_UNIFIED.out.versions) + + // + // Build transcript-level SummarizedExperiment + // + ch_transcript_unified = TXIMETA_TXIMPORT.out.counts_transcript + .join(TXIMETA_TXIMPORT.out.lengths_transcript, failOnMismatch: true, failOnDuplicate: true) + .join(TXIMETA_TXIMPORT.out.tpm_transcript, failOnMismatch: true, failOnDuplicate: true) + .map { row -> tuple(row[0], row.tail()) } + + SE_TRANSCRIPT_UNIFIED ( + ch_transcript_unified, + CUSTOM_TX2GENE.out.tx2gene, + samplesheet + ) + ch_versions = ch_versions.mix(SE_TRANSCRIPT_UNIFIED.out.versions) + + emit: + tx2gene = CUSTOM_TX2GENE.out.tx2gene // channel: [ val(meta), tx2gene.tsv ] + + tpm_gene = TXIMETA_TXIMPORT.out.tpm_gene // path: *gene_tpm.tsv + counts_gene = TXIMETA_TXIMPORT.out.counts_gene // path: *gene_counts.tsv + lengths_gene = TXIMETA_TXIMPORT.out.lengths_gene // path: *gene_lengths.tsv + counts_gene_length_scaled = TXIMETA_TXIMPORT.out.counts_gene_length_scaled // path: *gene_counts_length_scaled.tsv + counts_gene_scaled = TXIMETA_TXIMPORT.out.counts_gene_scaled // path: *gene_counts_scaled.tsv + tpm_transcript = TXIMETA_TXIMPORT.out.tpm_transcript // path: *transcript_tpm.tsv + counts_transcript = TXIMETA_TXIMPORT.out.counts_transcript // path: *transcript_counts.tsv + lengths_transcript = TXIMETA_TXIMPORT.out.lengths_transcript // path: *transcript_lengths.tsv + + merged_gene_rds = SE_GENE_UNIFIED.out.rds // path: *.rds + merged_transcript_rds = SE_TRANSCRIPT_UNIFIED.out.rds // path: *.rds + + versions = ch_versions // channel: [ versions.yml ] +} diff --git a/subworkflows/nf-core/quant_tximport_summarizedexperiment/meta.yml b/subworkflows/nf-core/quant_tximport_summarizedexperiment/meta.yml new file mode 100644 index 000000000..ab987a3bb --- /dev/null +++ b/subworkflows/nf-core/quant_tximport_summarizedexperiment/meta.yml @@ -0,0 +1,124 @@ +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/subworkflows/yaml-schema.json +name: "quant_tximport_summarizedexperiment" +description: Post-process transcript-level quantification results using tximport to produce count matrices and SummarizedExperiment objects +keywords: + - rnaseq + - quantification + - tximport + - summarizedexperiment + - salmon + - kallisto + - rsem +components: + - custom/tx2gene + - tximeta/tximport + - summarizedexperiment/summarizedexperiment +input: + - meta: + type: map + description: | + Groovy Map containing study-level sample sheet information. e.g. [ + id:'SRP1234' ]. + - samplesheet: + type: file + description: | + Sample sheet, to be baked into the `colData` of SummarizedExperiment + objects. + pattern: "*.{csv,tsv}" + - quant_results: + type: file + description: | + Per-sample quantification results. For Salmon these are result + directories containing quant.sf, for Kallisto directories containing + abundance.tsv, and for RSEM the .isoforms.results files. + - gtf: + type: file + description: | + Channel with features in GTF format, used to generate transcript/gene + mappings via tx2gene. + - gtf_id_attribute: + type: string + description: | + Attribute in GTF file corresponding to the gene identifier. + - gtf_extra_attribute: + type: string + description: GTF alternative gene attribute (e.g. gene_name) + - quant_type: + type: string + description: | + Quantification tool type. One of 'salmon', 'kallisto', or 'rsem'. +output: + - tx2gene: + type: file + description: | + Transcript-to-gene mapping file generated from the GTF. + pattern: "*.tx2gene.tsv" + - tpm_gene: + type: file + description: | + Gene-level matrix of abundance values in TPM. + pattern: "*.gene_tpm.tsv" + - counts_gene: + type: file + description: | + Gene-level matrix of unadjusted estimated counts from tximport + (`countsFromAbundance = 'no'`). + pattern: "*.gene_counts.tsv" + - lengths_gene: + type: file + description: | + Gene-level matrix of effective length values. + pattern: "*.gene_lengths.tsv" + - counts_gene_length_scaled: + type: file + description: | + Gene-level matrix of estimated counts, generated from abundance (TPM) + values by scaling to library size, additionally scaled using the + average transcript length, using tximport + `countsFromAbundance = 'lengthScaledTPM'`. + pattern: "*.gene_counts_length_scaled.tsv" + - counts_gene_scaled: + type: file + description: | + Gene-level matrix of estimated counts, generated from abundance (TPM) + values by scaling to library size with tximport + `countsFromAbundance = 'scaledTPM'`. + pattern: "*.gene_counts_scaled.tsv" + - tpm_transcript: + type: file + description: | + Transcript-level matrix of abundance values in TPM. + pattern: "*.transcript_tpm.tsv" + - counts_transcript: + type: file + description: | + Transcript-level matrix of unadjusted estimated counts from tximport + (`countsFromAbundance = 'no'`). + pattern: "*.transcript_counts.tsv" + - lengths_transcript: + type: file + description: | + Transcript-level matrix of effective length values. + pattern: "*.transcript_lengths.tsv" + - merged_gene_rds: + type: file + description: | + Serialised SummarizedExperiment object containing gene-level assays + (counts, length-scaled counts, scaled counts, lengths, TPM). + pattern: "*.rds" + - merged_transcript_rds: + type: file + description: | + Serialised SummarizedExperiment object containing transcript-level + assays (counts, lengths, TPM). + pattern: "*.rds" + - versions: + type: file + description: | + File containing software versions + Structure: [ path(versions.yml) ] + pattern: "versions.yml" +authors: + - "@pinin4fjords" +maintainers: + - "@pinin4fjords" diff --git a/subworkflows/nf-core/quant_tximport_summarizedexperiment/nextflow.config b/subworkflows/nf-core/quant_tximport_summarizedexperiment/nextflow.config new file mode 100644 index 000000000..aad2da083 --- /dev/null +++ b/subworkflows/nf-core/quant_tximport_summarizedexperiment/nextflow.config @@ -0,0 +1,19 @@ +process { + withName: '.*:QUANT_TXIMPORT_SUMMARIZEDEXPERIMENT:CUSTOM_TX2GENE' { + ext.prefix = { "${quant_type}.merged" } + } + + withName: '.*:QUANT_TXIMPORT_SUMMARIZEDEXPERIMENT:TXIMETA_TXIMPORT' { + ext.prefix = { "${quant_type}.merged" } + } + + withName: '.*:QUANT_TXIMPORT_SUMMARIZEDEXPERIMENT:SE_GENE_UNIFIED' { + ext.prefix = { "${meta.id}_gene" } + ext.args = '--assay_names counts,counts_length_scaled,counts_scaled,lengths,tpm' + } + + withName: '.*:QUANT_TXIMPORT_SUMMARIZEDEXPERIMENT:SE_TRANSCRIPT_UNIFIED' { + ext.prefix = { "${meta.id}_transcript" } + ext.args = '--assay_names counts,lengths,tpm' + } +} diff --git a/subworkflows/nf-core/quant_tximport_summarizedexperiment/tests/main.nf.test b/subworkflows/nf-core/quant_tximport_summarizedexperiment/tests/main.nf.test new file mode 100644 index 000000000..f4e9264ef --- /dev/null +++ b/subworkflows/nf-core/quant_tximport_summarizedexperiment/tests/main.nf.test @@ -0,0 +1,288 @@ +nextflow_workflow { + + name "Test Workflow QUANT_TXIMPORT_SUMMARIZEDEXPERIMENT" + script "../main.nf" + config "./nextflow.config" + workflow "QUANT_TXIMPORT_SUMMARIZEDEXPERIMENT" + + tag "subworkflows" + tag "subworkflows_nfcore" + tag "subworkflows/quant_tximport_summarizedexperiment" + + tag "custom/tx2gene" + tag "tximeta/tximport" + tag "summarizedexperiment/summarizedexperiment" + tag "untar" + + test("salmon") { + + setup { + run("UNTAR") { + script "../../../../modules/nf-core/untar/main.nf" + process { + """ + input[0] = Channel.of([ + [ id: 'salmon_results' ], + file(params.modules_testdata_base_path + 'genomics/eukaryotes/saccharomyces_cerevisiae/salmon_results.tar.gz', checkIfExists: true) + ]) + """ + } + } + } + + when { + workflow { + """ + input[0] = [ + [ id: 'samplesheet' ], + file(params.modules_testdata_base_path + 'genomics/eukaryotes/saccharomyces_cerevisiae/samplesheet.csv', checkIfExists: true) + ] + input[1] = UNTAR.out.untar.flatMap { meta, dir -> + def entries = [] + dir.toFile().eachDir { d -> + entries << [[ id: d.name ], d.toPath()] + } + entries + } + input[2] = Channel.of(file(params.modules_testdata_base_path + 'genomics/eukaryotes/saccharomyces_cerevisiae/genome_gfp.gtf', checkIfExists: true)) + input[3] = 'gene_id' + input[4] = 'gene_name' + input[5] = 'salmon' + """ + } + } + + then { + assertAll( + { assert workflow.success }, + { assert snapshot( + file(workflow.out.merged_gene_rds[0][1]).name, + file(workflow.out.merged_transcript_rds[0][1]).name, + workflow.out.counts_gene, + workflow.out.counts_gene_length_scaled, + workflow.out.counts_gene_scaled, + workflow.out.lengths_gene, + workflow.out.lengths_transcript, + workflow.out.tpm_gene, + workflow.out.tpm_transcript, + workflow.out.counts_transcript, + workflow.out.tx2gene, + workflow.out.versions + ).match() + } + ) + } + } + + test("kallisto") { + + setup { + run("UNTAR") { + script "../../../../modules/nf-core/untar/main.nf" + process { + """ + input[0] = Channel.of([ + [ id: 'kallisto_results' ], + file(params.modules_testdata_base_path + 'genomics/eukaryotes/saccharomyces_cerevisiae/kallisto_results.tar.gz', checkIfExists: true) + ]) + """ + } + } + } + + when { + workflow { + """ + input[0] = [ + [ id: 'samplesheet' ], + file(params.modules_testdata_base_path + 'genomics/eukaryotes/saccharomyces_cerevisiae/samplesheet.csv', checkIfExists: true) + ] + input[1] = UNTAR.out.untar.flatMap { meta, dir -> + def entries = [] + dir.toFile().eachDir { d -> + entries << [[ id: d.name ], d.toPath()] + } + entries + } + input[2] = Channel.of(file(params.modules_testdata_base_path + 'genomics/eukaryotes/saccharomyces_cerevisiae/genome_gfp.gtf', checkIfExists: true)) + input[3] = 'gene_id' + input[4] = 'gene_name' + input[5] = 'kallisto' + """ + } + } + + then { + assertAll( + { assert workflow.success }, + { assert snapshot( + file(workflow.out.merged_gene_rds[0][1]).name, + file(workflow.out.merged_transcript_rds[0][1]).name, + workflow.out.counts_gene, + workflow.out.counts_gene_length_scaled, + workflow.out.counts_gene_scaled, + workflow.out.lengths_gene, + workflow.out.lengths_transcript, + workflow.out.tpm_gene, + workflow.out.tpm_transcript, + workflow.out.counts_transcript, + workflow.out.tx2gene, + workflow.out.versions + ).match() + } + ) + } + } + + test("rsem") { + + setup { + run("UNTAR") { + script "../../../../modules/nf-core/untar/main.nf" + process { + """ + input[0] = Channel.of([ + [ id: 'rsem_results' ], + file(params.modules_testdata_base_path + 'genomics/eukaryotes/saccharomyces_cerevisiae/rsem_results.tar.gz', checkIfExists: true) + ]) + """ + } + } + } + + when { + workflow { + """ + input[0] = [ + [ id: 'samplesheet' ], + file(params.modules_testdata_base_path + 'genomics/eukaryotes/saccharomyces_cerevisiae/samplesheet.csv', checkIfExists: true) + ] + input[1] = UNTAR.out.untar.flatMap { meta, dir -> + def entries = [] + dir.toFile().eachFileRecurse { f -> + if (f.name.endsWith('.isoforms.results')) { + entries << [[ id: f.parentFile.name ], f.toPath()] + } + } + entries + } + input[2] = Channel.of(file(params.modules_testdata_base_path + 'genomics/eukaryotes/saccharomyces_cerevisiae/genome_gfp.gtf', checkIfExists: true)) + input[3] = 'gene_id' + input[4] = 'gene_name' + input[5] = 'rsem' + """ + } + } + + then { + assertAll( + { assert workflow.success }, + { assert snapshot( + file(workflow.out.merged_gene_rds[0][1]).name, + file(workflow.out.merged_transcript_rds[0][1]).name, + workflow.out.counts_gene, + workflow.out.counts_gene_length_scaled, + workflow.out.counts_gene_scaled, + workflow.out.lengths_gene, + workflow.out.lengths_transcript, + workflow.out.tpm_gene, + workflow.out.tpm_transcript, + workflow.out.counts_transcript, + workflow.out.tx2gene, + workflow.out.versions + ).match() + } + ) + } + } + + test("salmon - stub") { + + options "-stub" + + when { + workflow { + """ + input[0] = [ + [ id: 'samplesheet' ], + file(params.modules_testdata_base_path + 'genomics/eukaryotes/saccharomyces_cerevisiae/samplesheet.csv', checkIfExists: true) + ] + input[1] = Channel.of( + [[ id: 'sample1' ], file(params.modules_testdata_base_path + 'genomics/eukaryotes/saccharomyces_cerevisiae/genome_gfp.gtf', checkIfExists: true)] + ) + input[2] = Channel.of(file(params.modules_testdata_base_path + 'genomics/eukaryotes/saccharomyces_cerevisiae/genome_gfp.gtf', checkIfExists: true)) + input[3] = 'gene_id' + input[4] = 'gene_name' + input[5] = 'salmon' + """ + } + } + + then { + assertAll( + { assert workflow.success }, + { assert snapshot(workflow.out).match() } + ) + } + } + + test("kallisto - stub") { + + options "-stub" + + when { + workflow { + """ + input[0] = [ + [ id: 'samplesheet' ], + file(params.modules_testdata_base_path + 'genomics/eukaryotes/saccharomyces_cerevisiae/samplesheet.csv', checkIfExists: true) + ] + input[1] = Channel.of( + [[ id: 'sample1' ], file(params.modules_testdata_base_path + 'genomics/eukaryotes/saccharomyces_cerevisiae/genome_gfp.gtf', checkIfExists: true)] + ) + input[2] = Channel.of(file(params.modules_testdata_base_path + 'genomics/eukaryotes/saccharomyces_cerevisiae/genome_gfp.gtf', checkIfExists: true)) + input[3] = 'gene_id' + input[4] = 'gene_name' + input[5] = 'kallisto' + """ + } + } + + then { + assertAll( + { assert workflow.success }, + { assert snapshot(workflow.out).match() } + ) + } + } + + test("rsem - stub") { + + options "-stub" + + when { + workflow { + """ + input[0] = [ + [ id: 'samplesheet' ], + file(params.modules_testdata_base_path + 'genomics/eukaryotes/saccharomyces_cerevisiae/samplesheet.csv', checkIfExists: true) + ] + input[1] = Channel.of( + [[ id: 'sample1' ], file(params.modules_testdata_base_path + 'genomics/eukaryotes/saccharomyces_cerevisiae/genome_gfp.gtf', checkIfExists: true)] + ) + input[2] = Channel.of(file(params.modules_testdata_base_path + 'genomics/eukaryotes/saccharomyces_cerevisiae/genome_gfp.gtf', checkIfExists: true)) + input[3] = 'gene_id' + input[4] = 'gene_name' + input[5] = 'rsem' + """ + } + } + + then { + assertAll( + { assert workflow.success }, + { assert snapshot(workflow.out).match() } + ) + } + } +} diff --git a/subworkflows/nf-core/quant_tximport_summarizedexperiment/tests/main.nf.test.snap b/subworkflows/nf-core/quant_tximport_summarizedexperiment/tests/main.nf.test.snap new file mode 100644 index 000000000..024aa8da1 --- /dev/null +++ b/subworkflows/nf-core/quant_tximport_summarizedexperiment/tests/main.nf.test.snap @@ -0,0 +1,866 @@ +{ + "kallisto": { + "content": [ + "all_samples_gene.SummarizedExperiment.rds", + "all_samples_transcript.SummarizedExperiment.rds", + [ + [ + { + "id": "all_samples" + }, + "kallisto.merged.gene_counts.tsv:md5,e89c28692ea214396b2d4cb702a804c3" + ] + ], + [ + [ + { + "id": "all_samples" + }, + "kallisto.merged.gene_counts_length_scaled.tsv:md5,4944841ac711124d29673b6b6ed16ef3" + ] + ], + [ + [ + { + "id": "all_samples" + }, + "kallisto.merged.gene_counts_scaled.tsv:md5,39d14e361434978b3cadae901a26a028" + ] + ], + [ + [ + { + "id": "all_samples" + }, + "kallisto.merged.gene_lengths.tsv:md5,db6becdf807fd164a9c63dd1dd916d9c" + ] + ], + [ + [ + { + "id": "all_samples" + }, + "kallisto.merged.transcript_lengths.tsv:md5,f974b52840431a5dae57bcb615badbf1" + ] + ], + [ + [ + { + "id": "all_samples" + }, + "kallisto.merged.gene_tpm.tsv:md5,85d108269769ae0d841247b9b9ed922d" + ] + ], + [ + [ + { + "id": "all_samples" + }, + "kallisto.merged.transcript_tpm.tsv:md5,65862ed9d4a05abfab952e680dc0e49d" + ] + ], + [ + [ + { + "id": "all_samples" + }, + "kallisto.merged.transcript_counts.tsv:md5,42e0106e75fa97c1c684c6d9060f1724" + ] + ], + [ + [ + { + + }, + "kallisto.merged.tx2gene.tsv:md5,0e2418a69d2eba45097ebffc2f700bfe" + ] + ], + [ + "versions.yml:md5,2c734f0be55dbd9c1b5d893cbc5d29a0", + "versions.yml:md5,3926cde3d17a8b77579d430e7d21a7dd", + "versions.yml:md5,928c1a88044f1b300485c2d53c915921", + "versions.yml:md5,e993f80a1812e9571beb47a5a0fbacf6" + ] + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.2" + }, + "timestamp": "2026-02-11T10:09:49.077814425" + }, + "salmon - stub": { + "content": [ + { + "0": [ + [ + { + + }, + "salmon.merged.tx2gene.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "all_samples" + }, + "all_samples.gene_tpm.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "10": [ + [ + { + "id": "all_samples" + }, + "all_samples.SummarizedExperiment.rds" + ] + ], + "11": [ + "versions.yml:md5,2c734f0be55dbd9c1b5d893cbc5d29a0", + "versions.yml:md5,3926cde3d17a8b77579d430e7d21a7dd", + "versions.yml:md5,dbc2adfb72a3242fb84dee5e78a6c39b", + "versions.yml:md5,e993f80a1812e9571beb47a5a0fbacf6" + ], + "2": [ + [ + { + "id": "all_samples" + }, + "all_samples.gene_counts.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + [ + { + "id": "all_samples" + }, + "all_samples.gene_lengths.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "4": [ + [ + { + "id": "all_samples" + }, + "all_samples.gene_counts_length_scaled.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "5": [ + [ + { + "id": "all_samples" + }, + "all_samples.gene_counts_scaled.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "6": [ + [ + { + "id": "all_samples" + }, + "all_samples.transcript_tpm.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "7": [ + [ + { + "id": "all_samples" + }, + "all_samples.transcript_counts.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "8": [ + [ + { + "id": "all_samples" + }, + "all_samples.transcript_lengths.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "9": [ + [ + { + "id": "all_samples" + }, + "all_samples.SummarizedExperiment.rds" + ] + ], + "counts_gene": [ + [ + { + "id": "all_samples" + }, + "all_samples.gene_counts.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "counts_gene_length_scaled": [ + [ + { + "id": "all_samples" + }, + "all_samples.gene_counts_length_scaled.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "counts_gene_scaled": [ + [ + { + "id": "all_samples" + }, + "all_samples.gene_counts_scaled.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "counts_transcript": [ + [ + { + "id": "all_samples" + }, + "all_samples.transcript_counts.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "lengths_gene": [ + [ + { + "id": "all_samples" + }, + "all_samples.gene_lengths.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "lengths_transcript": [ + [ + { + "id": "all_samples" + }, + "all_samples.transcript_lengths.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "merged_gene_rds": [ + [ + { + "id": "all_samples" + }, + "all_samples.SummarizedExperiment.rds" + ] + ], + "merged_transcript_rds": [ + [ + { + "id": "all_samples" + }, + "all_samples.SummarizedExperiment.rds" + ] + ], + "tpm_gene": [ + [ + { + "id": "all_samples" + }, + "all_samples.gene_tpm.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "tpm_transcript": [ + [ + { + "id": "all_samples" + }, + "all_samples.transcript_tpm.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "tx2gene": [ + [ + { + + }, + "salmon.merged.tx2gene.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,2c734f0be55dbd9c1b5d893cbc5d29a0", + "versions.yml:md5,3926cde3d17a8b77579d430e7d21a7dd", + "versions.yml:md5,dbc2adfb72a3242fb84dee5e78a6c39b", + "versions.yml:md5,e993f80a1812e9571beb47a5a0fbacf6" + ] + } + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.2" + }, + "timestamp": "2026-02-11T10:10:26.820987278" + }, + "kallisto - stub": { + "content": [ + { + "0": [ + [ + { + + }, + "kallisto.merged.tx2gene.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "all_samples" + }, + "all_samples.gene_tpm.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "10": [ + [ + { + "id": "all_samples" + }, + "all_samples.SummarizedExperiment.rds" + ] + ], + "11": [ + "versions.yml:md5,2c734f0be55dbd9c1b5d893cbc5d29a0", + "versions.yml:md5,3926cde3d17a8b77579d430e7d21a7dd", + "versions.yml:md5,dbc2adfb72a3242fb84dee5e78a6c39b", + "versions.yml:md5,e993f80a1812e9571beb47a5a0fbacf6" + ], + "2": [ + [ + { + "id": "all_samples" + }, + "all_samples.gene_counts.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + [ + { + "id": "all_samples" + }, + "all_samples.gene_lengths.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "4": [ + [ + { + "id": "all_samples" + }, + "all_samples.gene_counts_length_scaled.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "5": [ + [ + { + "id": "all_samples" + }, + "all_samples.gene_counts_scaled.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "6": [ + [ + { + "id": "all_samples" + }, + "all_samples.transcript_tpm.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "7": [ + [ + { + "id": "all_samples" + }, + "all_samples.transcript_counts.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "8": [ + [ + { + "id": "all_samples" + }, + "all_samples.transcript_lengths.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "9": [ + [ + { + "id": "all_samples" + }, + "all_samples.SummarizedExperiment.rds" + ] + ], + "counts_gene": [ + [ + { + "id": "all_samples" + }, + "all_samples.gene_counts.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "counts_gene_length_scaled": [ + [ + { + "id": "all_samples" + }, + "all_samples.gene_counts_length_scaled.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "counts_gene_scaled": [ + [ + { + "id": "all_samples" + }, + "all_samples.gene_counts_scaled.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "counts_transcript": [ + [ + { + "id": "all_samples" + }, + "all_samples.transcript_counts.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "lengths_gene": [ + [ + { + "id": "all_samples" + }, + "all_samples.gene_lengths.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "lengths_transcript": [ + [ + { + "id": "all_samples" + }, + "all_samples.transcript_lengths.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "merged_gene_rds": [ + [ + { + "id": "all_samples" + }, + "all_samples.SummarizedExperiment.rds" + ] + ], + "merged_transcript_rds": [ + [ + { + "id": "all_samples" + }, + "all_samples.SummarizedExperiment.rds" + ] + ], + "tpm_gene": [ + [ + { + "id": "all_samples" + }, + "all_samples.gene_tpm.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "tpm_transcript": [ + [ + { + "id": "all_samples" + }, + "all_samples.transcript_tpm.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "tx2gene": [ + [ + { + + }, + "kallisto.merged.tx2gene.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,2c734f0be55dbd9c1b5d893cbc5d29a0", + "versions.yml:md5,3926cde3d17a8b77579d430e7d21a7dd", + "versions.yml:md5,dbc2adfb72a3242fb84dee5e78a6c39b", + "versions.yml:md5,e993f80a1812e9571beb47a5a0fbacf6" + ] + } + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.2" + }, + "timestamp": "2026-02-11T10:10:54.171727044" + }, + "rsem - stub": { + "content": [ + { + "0": [ + [ + { + + }, + "rsem.merged.tx2gene.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "all_samples" + }, + "all_samples.gene_tpm.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "10": [ + [ + { + "id": "all_samples" + }, + "all_samples.SummarizedExperiment.rds" + ] + ], + "11": [ + "versions.yml:md5,2c734f0be55dbd9c1b5d893cbc5d29a0", + "versions.yml:md5,3926cde3d17a8b77579d430e7d21a7dd", + "versions.yml:md5,dbc2adfb72a3242fb84dee5e78a6c39b", + "versions.yml:md5,e993f80a1812e9571beb47a5a0fbacf6" + ], + "2": [ + [ + { + "id": "all_samples" + }, + "all_samples.gene_counts.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + [ + { + "id": "all_samples" + }, + "all_samples.gene_lengths.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "4": [ + [ + { + "id": "all_samples" + }, + "all_samples.gene_counts_length_scaled.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "5": [ + [ + { + "id": "all_samples" + }, + "all_samples.gene_counts_scaled.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "6": [ + [ + { + "id": "all_samples" + }, + "all_samples.transcript_tpm.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "7": [ + [ + { + "id": "all_samples" + }, + "all_samples.transcript_counts.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "8": [ + [ + { + "id": "all_samples" + }, + "all_samples.transcript_lengths.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "9": [ + [ + { + "id": "all_samples" + }, + "all_samples.SummarizedExperiment.rds" + ] + ], + "counts_gene": [ + [ + { + "id": "all_samples" + }, + "all_samples.gene_counts.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "counts_gene_length_scaled": [ + [ + { + "id": "all_samples" + }, + "all_samples.gene_counts_length_scaled.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "counts_gene_scaled": [ + [ + { + "id": "all_samples" + }, + "all_samples.gene_counts_scaled.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "counts_transcript": [ + [ + { + "id": "all_samples" + }, + "all_samples.transcript_counts.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "lengths_gene": [ + [ + { + "id": "all_samples" + }, + "all_samples.gene_lengths.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "lengths_transcript": [ + [ + { + "id": "all_samples" + }, + "all_samples.transcript_lengths.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "merged_gene_rds": [ + [ + { + "id": "all_samples" + }, + "all_samples.SummarizedExperiment.rds" + ] + ], + "merged_transcript_rds": [ + [ + { + "id": "all_samples" + }, + "all_samples.SummarizedExperiment.rds" + ] + ], + "tpm_gene": [ + [ + { + "id": "all_samples" + }, + "all_samples.gene_tpm.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "tpm_transcript": [ + [ + { + "id": "all_samples" + }, + "all_samples.transcript_tpm.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "tx2gene": [ + [ + { + + }, + "rsem.merged.tx2gene.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,2c734f0be55dbd9c1b5d893cbc5d29a0", + "versions.yml:md5,3926cde3d17a8b77579d430e7d21a7dd", + "versions.yml:md5,dbc2adfb72a3242fb84dee5e78a6c39b", + "versions.yml:md5,e993f80a1812e9571beb47a5a0fbacf6" + ] + } + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.2" + }, + "timestamp": "2026-02-11T10:11:21.45224016" + }, + "salmon": { + "content": [ + "all_samples_gene.SummarizedExperiment.rds", + "all_samples_transcript.SummarizedExperiment.rds", + [ + [ + { + "id": "all_samples" + }, + "salmon.merged.gene_counts.tsv:md5,c14cab7e15cfac73ec0602dc2c404551" + ] + ], + [ + [ + { + "id": "all_samples" + }, + "salmon.merged.gene_counts_length_scaled.tsv:md5,5f92a6784f6edc5e3b336c71c3ee7daf" + ] + ], + [ + [ + { + "id": "all_samples" + }, + "salmon.merged.gene_counts_scaled.tsv:md5,fdfb3d23aaf5d4316d81247ec4664ca0" + ] + ], + [ + [ + { + "id": "all_samples" + }, + "salmon.merged.gene_lengths.tsv:md5,1691ea2677612805cd699265c83024d7" + ] + ], + [ + [ + { + "id": "all_samples" + }, + "salmon.merged.transcript_lengths.tsv:md5,db6d8ab9f8e1123d5984fd534b4347dc" + ] + ], + [ + [ + { + "id": "all_samples" + }, + "salmon.merged.gene_tpm.tsv:md5,6076364cc78741a4f8bc8935a045d13d" + ] + ], + [ + [ + { + "id": "all_samples" + }, + "salmon.merged.transcript_tpm.tsv:md5,7a334b565e1e865efb1caf615f194ef7" + ] + ], + [ + [ + { + "id": "all_samples" + }, + "salmon.merged.transcript_counts.tsv:md5,ff0f5be09ca7a322672c0074ba35da17" + ] + ], + [ + [ + { + + }, + "salmon.merged.tx2gene.tsv:md5,0e2418a69d2eba45097ebffc2f700bfe" + ] + ], + [ + "versions.yml:md5,2c734f0be55dbd9c1b5d893cbc5d29a0", + "versions.yml:md5,3926cde3d17a8b77579d430e7d21a7dd", + "versions.yml:md5,928c1a88044f1b300485c2d53c915921", + "versions.yml:md5,e993f80a1812e9571beb47a5a0fbacf6" + ] + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.2" + }, + "timestamp": "2026-02-11T10:09:25.366934801" + }, + "rsem": { + "content": [ + "all_samples_gene.SummarizedExperiment.rds", + "all_samples_transcript.SummarizedExperiment.rds", + [ + [ + { + "id": "all_samples" + }, + "rsem.merged.gene_counts.tsv:md5,ad4efd41deb638388e7e5271830c5dd1" + ] + ], + [ + [ + { + "id": "all_samples" + }, + "rsem.merged.gene_counts_length_scaled.tsv:md5,98dcb9117568e334a8c8a3fbdfc35496" + ] + ], + [ + [ + { + "id": "all_samples" + }, + "rsem.merged.gene_counts_scaled.tsv:md5,5217eb788b345c8d1240acebe432542b" + ] + ], + [ + [ + { + "id": "all_samples" + }, + "rsem.merged.gene_lengths.tsv:md5,3885932ab6bb723b2d258b5aa54e9091" + ] + ], + [ + [ + { + "id": "all_samples" + }, + "rsem.merged.transcript_lengths.tsv:md5,d04b3ee72b6b3f93436fd6bcccd1e41a" + ] + ], + [ + [ + { + "id": "all_samples" + }, + "rsem.merged.gene_tpm.tsv:md5,9cecb0af52c53cc0807a2319dcd8ea6e" + ] + ], + [ + [ + { + "id": "all_samples" + }, + "rsem.merged.transcript_tpm.tsv:md5,ba50c1a86bde2987572433c055e6559b" + ] + ], + [ + [ + { + "id": "all_samples" + }, + "rsem.merged.transcript_counts.tsv:md5,4049fc5545452e4a1e3bc9a75b060fc6" + ] + ], + [ + [ + { + + }, + "rsem.merged.tx2gene.tsv:md5,0e2418a69d2eba45097ebffc2f700bfe" + ] + ], + [ + "versions.yml:md5,2c734f0be55dbd9c1b5d893cbc5d29a0", + "versions.yml:md5,3926cde3d17a8b77579d430e7d21a7dd", + "versions.yml:md5,928c1a88044f1b300485c2d53c915921", + "versions.yml:md5,e993f80a1812e9571beb47a5a0fbacf6" + ] + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.2" + }, + "timestamp": "2026-02-11T10:14:57.262417912" + } +} \ No newline at end of file diff --git a/subworkflows/nf-core/quant_tximport_summarizedexperiment/tests/nextflow.config b/subworkflows/nf-core/quant_tximport_summarizedexperiment/tests/nextflow.config new file mode 100644 index 000000000..b4bda3fa7 --- /dev/null +++ b/subworkflows/nf-core/quant_tximport_summarizedexperiment/tests/nextflow.config @@ -0,0 +1,19 @@ +process { + withName: 'QUANT_TXIMPORT_SUMMARIZEDEXPERIMENT:CUSTOM_TX2GENE' { + ext.prefix = { "${quant_type}.merged" } + } + + withName: 'QUANT_TXIMPORT_SUMMARIZEDEXPERIMENT:TXIMETA_TXIMPORT' { + ext.prefix = { "${quant_type}.merged" } + } + + withName: 'QUANT_TXIMPORT_SUMMARIZEDEXPERIMENT:SE_GENE_UNIFIED' { + ext.prefix = { "${meta.id}_gene" } + ext.args = '--assay_names counts,counts_length_scaled,counts_scaled,lengths,tpm' + } + + withName: 'QUANT_TXIMPORT_SUMMARIZEDEXPERIMENT:SE_TRANSCRIPT_UNIFIED' { + ext.prefix = { "${meta.id}_transcript" } + ext.args = '--assay_names counts,lengths,tpm' + } +} diff --git a/subworkflows/nf-core/quantify_pseudo_alignment/main.nf b/subworkflows/nf-core/quantify_pseudo_alignment/main.nf index ba8e91ac0..91645dfe0 100644 --- a/subworkflows/nf-core/quantify_pseudo_alignment/main.nf +++ b/subworkflows/nf-core/quantify_pseudo_alignment/main.nf @@ -4,11 +4,8 @@ include { SALMON_QUANT } from '../../../modules/nf-core/salmon/quant' include { KALLISTO_QUANT } from '../../../modules/nf-core/kallisto/quant' -include { CUSTOM_TX2GENE } from '../../../modules/nf-core/custom/tx2gene' -include { TXIMETA_TXIMPORT } from '../../../modules/nf-core/tximeta/tximport' -include { SUMMARIZEDEXPERIMENT_SUMMARIZEDEXPERIMENT as SE_GENE_UNIFIED } from '../../../modules/nf-core/summarizedexperiment/summarizedexperiment' -include { SUMMARIZEDEXPERIMENT_SUMMARIZEDEXPERIMENT as SE_TRANSCRIPT_UNIFIED } from '../../../modules/nf-core/summarizedexperiment/summarizedexperiment' +include { QUANT_TXIMPORT_SUMMARIZEDEXPERIMENT } from '../quant_tximport_summarizedexperiment' workflow QUANTIFY_PSEUDO_ALIGNMENT { take: @@ -26,7 +23,7 @@ workflow QUANTIFY_PSEUDO_ALIGNMENT { kallisto_quant_fraglen_sd // val: Estimated standard error for fragment length required by Kallisto in single-end mode main: - ch_versions = Channel.empty() + ch_versions = channel.empty() // // Quantify and merge counts across samples @@ -43,7 +40,6 @@ workflow QUANTIFY_PSEUDO_ALIGNMENT { ) ch_pseudo_results = SALMON_QUANT.out.results ch_pseudo_multiqc = ch_pseudo_results - ch_versions = ch_versions.mix(SALMON_QUANT.out.versions.first()) } else { KALLISTO_QUANT ( reads, @@ -55,66 +51,37 @@ workflow QUANTIFY_PSEUDO_ALIGNMENT { ) ch_pseudo_results = KALLISTO_QUANT.out.results ch_pseudo_multiqc = KALLISTO_QUANT.out.log - ch_versions = ch_versions.mix(KALLISTO_QUANT.out.versions.first()) } - CUSTOM_TX2GENE ( - gtf.map { [ [:], it ] }, - ch_pseudo_results.collect{ it[1] }.map { [ [:], it ] }, - pseudo_aligner, + // + // Post-process quantifications with tximport and SummarizedExperiment + // + QUANT_TXIMPORT_SUMMARIZEDEXPERIMENT ( + samplesheet, + ch_pseudo_results, + gtf, gtf_id_attribute, - gtf_extra_attribute - ) - ch_versions = ch_versions.mix(CUSTOM_TX2GENE.out.versions) - - TXIMETA_TXIMPORT ( - ch_pseudo_results.collect{ it[1] }.map { [ ['id': 'all_samples'], it ] }, - CUSTOM_TX2GENE.out.tx2gene, + gtf_extra_attribute, pseudo_aligner ) - ch_versions = ch_versions.mix(TXIMETA_TXIMPORT.out.versions) - - ch_gene_unified = TXIMETA_TXIMPORT.out.counts_gene - .join(TXIMETA_TXIMPORT.out.counts_gene_length_scaled) - .join(TXIMETA_TXIMPORT.out.counts_gene_scaled) - .join(TXIMETA_TXIMPORT.out.lengths_gene) - .join(TXIMETA_TXIMPORT.out.tpm_gene) - .map{tuple(it[0], it.tail())} - - SE_GENE_UNIFIED ( - ch_gene_unified, - CUSTOM_TX2GENE.out.tx2gene, - samplesheet - ) - ch_versions = ch_versions.mix(SE_GENE_UNIFIED.out.versions) - - ch_transcript_unified = TXIMETA_TXIMPORT.out.counts_transcript - .join(TXIMETA_TXIMPORT.out.lengths_transcript) - .join(TXIMETA_TXIMPORT.out.tpm_transcript) - .map{tuple(it[0], it.tail())} - - SE_TRANSCRIPT_UNIFIED ( - ch_transcript_unified, - CUSTOM_TX2GENE.out.tx2gene, - samplesheet - ) - ch_versions = ch_versions.mix(SE_TRANSCRIPT_UNIFIED.out.versions) + ch_versions = ch_versions.mix(QUANT_TXIMPORT_SUMMARIZEDEXPERIMENT.out.versions) emit: - results = ch_pseudo_results // channel: [ val(meta), results_dir ] - multiqc = ch_pseudo_multiqc // channel: [ val(meta), files_for_multiqc ] + results = ch_pseudo_results // channel: [ val(meta), results_dir ] + multiqc = ch_pseudo_multiqc // channel: [ val(meta), files_for_multiqc ] + tx2gene = QUANT_TXIMPORT_SUMMARIZEDEXPERIMENT.out.tx2gene // channel: [ val(meta), tx2gene.tsv ] - tpm_gene = TXIMETA_TXIMPORT.out.tpm_gene // path: *gene_tpm.tsv - counts_gene = TXIMETA_TXIMPORT.out.counts_gene // path: *gene_counts.tsv - lengths_gene = TXIMETA_TXIMPORT.out.lengths_gene // path: *gene_lengths.tsv - counts_gene_length_scaled = TXIMETA_TXIMPORT.out.counts_gene_length_scaled // path: *gene_counts_length_scaled.tsv - counts_gene_scaled = TXIMETA_TXIMPORT.out.counts_gene_scaled // path: *gene_counts_scaled.tsv - tpm_transcript = TXIMETA_TXIMPORT.out.tpm_transcript // path: *gene_tpm.tsv - counts_transcript = TXIMETA_TXIMPORT.out.counts_transcript // path: *transcript_counts.tsv - lengths_transcript = TXIMETA_TXIMPORT.out.lengths_transcript // path: *transcript_lengths.tsv + tpm_gene = QUANT_TXIMPORT_SUMMARIZEDEXPERIMENT.out.tpm_gene // path: *gene_tpm.tsv + counts_gene = QUANT_TXIMPORT_SUMMARIZEDEXPERIMENT.out.counts_gene // path: *gene_counts.tsv + lengths_gene = QUANT_TXIMPORT_SUMMARIZEDEXPERIMENT.out.lengths_gene // path: *gene_lengths.tsv + counts_gene_length_scaled = QUANT_TXIMPORT_SUMMARIZEDEXPERIMENT.out.counts_gene_length_scaled // path: *gene_counts_length_scaled.tsv + counts_gene_scaled = QUANT_TXIMPORT_SUMMARIZEDEXPERIMENT.out.counts_gene_scaled // path: *gene_counts_scaled.tsv + tpm_transcript = QUANT_TXIMPORT_SUMMARIZEDEXPERIMENT.out.tpm_transcript // path: *transcript_tpm.tsv + counts_transcript = QUANT_TXIMPORT_SUMMARIZEDEXPERIMENT.out.counts_transcript // path: *transcript_counts.tsv + lengths_transcript = QUANT_TXIMPORT_SUMMARIZEDEXPERIMENT.out.lengths_transcript // path: *transcript_lengths.tsv - merged_gene_rds_unified = SE_GENE_UNIFIED.out.rds // path: *.rds - merged_transcript_rds_unified = SE_TRANSCRIPT_UNIFIED.out.rds // path: *.rds + merged_gene_rds_unified = QUANT_TXIMPORT_SUMMARIZEDEXPERIMENT.out.merged_gene_rds // path: *.rds + merged_transcript_rds_unified = QUANT_TXIMPORT_SUMMARIZEDEXPERIMENT.out.merged_transcript_rds // path: *.rds - versions = ch_versions // channel: [ versions.yml ] + versions = ch_versions // channel: [ versions.yml ] } diff --git a/subworkflows/nf-core/quantify_pseudo_alignment/meta.yml b/subworkflows/nf-core/quantify_pseudo_alignment/meta.yml index 419bd3cc3..5513b3da7 100644 --- a/subworkflows/nf-core/quantify_pseudo_alignment/meta.yml +++ b/subworkflows/nf-core/quantify_pseudo_alignment/meta.yml @@ -7,11 +7,9 @@ keywords: - kallisto - salmon components: - - custom/tx2gene - kallisto/quant + - quant_tximport_summarizedexperiment - salmon/quant - - summarizedexperiment/summarizedexperiment - - tximeta/tximport input: - meta: type: map @@ -132,33 +130,17 @@ output: Transcript-level matrix of length values for modelling in downstream analysis. pattern: "transcript_lengths.tsv" - - merged_gene_rds: + - merged_gene_rds_unified: type: file description: | - Serialised SummarizedExperiment object containing gene level TPM - abundance values and counts generated from tximport with - `countsFromAbundance = 'no'`. + Serialised SummarizedExperiment object containing gene level + abundance, count, and length matrices generated from tximport. pattern: "*.rds" - - merged_gene_rds_length_scaled: + - merged_transcript_rds_unified: type: file description: | - Serialised SummarizedExperiment object containing gene level TPM - abundance values and counts generated from tximport with - `countsFromAbundance='lengthScaledTPM'`. - pattern: "*.rds" - - merged_gene_rds_scaled: - type: file - description: | - Serialised SummarizedExperiment object containing gene level TPM - abundance values and counts generated from tximport with - `countsFromAbundance='scaledTPM'`. - pattern: "*.rds" - - merged_transcript_rds: - type: file - description: | - Serialised SummarizedExperiment object containing transcript level TPM - abundance values and counts generated from tximport with - `countsFromAbundance = 'no'`. + Serialised SummarizedExperiment object containing transcript level + abundance, count, and length matrices generated from tximport. pattern: "*.rds" - versions: type: file diff --git a/subworkflows/nf-core/quantify_pseudo_alignment/nextflow.config b/subworkflows/nf-core/quantify_pseudo_alignment/nextflow.config index b82edff51..5bb9d35bb 100644 --- a/subworkflows/nf-core/quantify_pseudo_alignment/nextflow.config +++ b/subworkflows/nf-core/quantify_pseudo_alignment/nextflow.config @@ -1,63 +1,11 @@ -if (!params.skip_pseudo_alignment && params.pseudo_aligner == 'salmon') { - process { - withName: '.*:QUANTIFY_PSEUDO_ALIGNMENT:SALMON_QUANT' { - ext.args = { params.extra_salmon_quant_args ?: '' } - publishDir = [ - path: { "${params.outdir}/${params.pseudo_aligner}" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') || filename.endsWith('_meta_info.json') || filename.endsWith('_format_counts.json') ? null : filename } - ] - } - } -} +// IMPORTANT: Add this configuration to your modules.config -if (!params.skip_pseudo_alignment && params.pseudo_aligner == 'kallisto') { - process { - withName: '.*:QUANTIFY_PSEUDO_ALIGNMENT:KALLISTO_QUANT' { - ext.args = params.extra_kallisto_quant_args ?: '' - publishDir = [ - path: { "${params.outdir}/${params.pseudo_aligner}" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') || filename.endsWith('.run_info.json') || filename.endsWith('.log') ? null : filename } - ] - } +process { + withName: '.*:QUANTIFY_PSEUDO_ALIGNMENT:SALMON_QUANT' { + ext.args = { params.extra_salmon_quant_args ?: '' } } -} - -if (!params.skip_pseudo_alignment && params.pseudo_aligner) { - process { - withName: '.*:QUANTIFY_PSEUDO_ALIGNMENT:CUSTOM_TX2GENE' { - publishDir = [ - path: { "${params.outdir}/${params.pseudo_aligner}" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } - - withName: '.*:QUANTIFY_PSEUDO_ALIGNMENT:TXIMETA_TXIMPORT' { - ext.prefix = { "${quant_type}.merged" } - publishDir = [ - path: { "${params.outdir}/${params.pseudo_aligner}" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } - - withName: '.*:QUANTIFY_PSEUDO_ALIGNMENT:SE_.*' { - publishDir = [ - path: { "${params.outdir}/${params.pseudo_aligner}" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') || filename.endsWith('.log') ? null : filename } - ] - } - withName: '.*:QUANTIFY_PSEUDO_ALIGNMENT:SE_GENE_UNIFIED' { - ext.prefix = { "${meta.id}_gene" } - ext.args = '--assay_names counts,counts_length_scaled,counts_scaled,lengths,tpm' - } - withName: '.*:QUANTIFY_PSEUDO_ALIGNMENT:SE_TRANSCRIPT_UNIFIED' { - ext.prefix = { "${meta.id}_transcript" } - ext.args = '--assay_names counts,lengths,tpm' - } + withName: '.*:QUANTIFY_PSEUDO_ALIGNMENT:KALLISTO_QUANT' { + ext.args = params.extra_kallisto_quant_args ?: '' } } diff --git a/subworkflows/nf-core/quantify_pseudo_alignment/tests/main.nf.test b/subworkflows/nf-core/quantify_pseudo_alignment/tests/main.nf.test index e35b65292..3036b86b0 100644 --- a/subworkflows/nf-core/quantify_pseudo_alignment/tests/main.nf.test +++ b/subworkflows/nf-core/quantify_pseudo_alignment/tests/main.nf.test @@ -5,7 +5,18 @@ nextflow_workflow { config "./nextflow.config" workflow "QUANTIFY_PSEUDO_ALIGNMENT" - + tag "subworkflows" + tag "subworkflows_nfcore" + tag "subworkflows/quantify_pseudo_alignment" + + tag "salmon/index" + tag "salmon/quant" + tag "kallisto/index" + tag "kallisto/quant" + tag "subworkflows/quant_tximport_summarizedexperiment" + tag "custom/tx2gene" + tag "tximeta/tximport" + tag "summarizedexperiment/summarizedexperiment" test("salmon") { @@ -59,8 +70,7 @@ nextflow_workflow { workflow.out.counts_gene_length_scaled, workflow.out.lengths_gene, workflow.out.lengths_transcript, - workflow.out.merged_counts_transcript, - workflow.out.merged_tpm_transcript, + workflow.out.counts_transcript, workflow.out.tpm_gene, workflow.out.tpm_transcript, workflow.out.versions @@ -238,4 +248,4 @@ nextflow_workflow { ) } } -} \ No newline at end of file +} diff --git a/subworkflows/nf-core/quantify_pseudo_alignment/tests/main.nf.test.snap b/subworkflows/nf-core/quantify_pseudo_alignment/tests/main.nf.test.snap index 73bf4a9a7..d6a425794 100644 --- a/subworkflows/nf-core/quantify_pseudo_alignment/tests/main.nf.test.snap +++ b/subworkflows/nf-core/quantify_pseudo_alignment/tests/main.nf.test.snap @@ -8,7 +8,7 @@ { "id": "all_samples" }, - "all_samples.gene_counts.tsv:md5,4ba44e5ebc9ed0ca2ca008d10a1dddc3" + "kallisto.merged.gene_counts.tsv:md5,4ba44e5ebc9ed0ca2ca008d10a1dddc3" ] ], [ @@ -16,7 +16,7 @@ { "id": "all_samples" }, - "all_samples.gene_counts_length_scaled.tsv:md5,078746568e3fd0c995559352b661b2d9" + "kallisto.merged.gene_counts_length_scaled.tsv:md5,078746568e3fd0c995559352b661b2d9" ] ], [ @@ -24,7 +24,7 @@ { "id": "all_samples" }, - "all_samples.gene_lengths.tsv:md5,b031192af7a8f64dcc887978a69fdbb7" + "kallisto.merged.gene_lengths.tsv:md5,b031192af7a8f64dcc887978a69fdbb7" ] ], [ @@ -32,7 +32,7 @@ { "id": "all_samples" }, - "all_samples.transcript_lengths.tsv:md5,131952a97905469ab012f0f46e52405c" + "kallisto.merged.transcript_lengths.tsv:md5,131952a97905469ab012f0f46e52405c" ] ], [ @@ -40,7 +40,7 @@ { "id": "all_samples" }, - "all_samples.gene_tpm.tsv:md5,23fa0c64cfbd198806b53897de791b8b" + "kallisto.merged.gene_tpm.tsv:md5,23fa0c64cfbd198806b53897de791b8b" ] ], [ @@ -48,22 +48,21 @@ { "id": "all_samples" }, - "all_samples.transcript_tpm.tsv:md5,de458e1c2a579e53bd7671c5176f5d0c" + "kallisto.merged.transcript_tpm.tsv:md5,de458e1c2a579e53bd7671c5176f5d0c" ] ], [ - "versions.yml:md5,91a01dde9c54db9929e15cad7ebb94c2", - "versions.yml:md5,be28c034506b52fd01f9b2fb0fc678e3", - "versions.yml:md5,c62905e3a7ad1dc887639b9c7bb1e0cb", - "versions.yml:md5,d5243289a32cde9e90e20f1a202bb566", - "versions.yml:md5,efbc421f11a829423221fc2e67e03892" + "versions.yml:md5,7310ce1ed08d45a1a2730ab3602b863a", + "versions.yml:md5,b13d44458ef56ce1bd8b2b18fcc13004", + "versions.yml:md5,bf7fa0a1d22a37bd535f7f71060fad26", + "versions.yml:md5,f3e61130fc276669694f901feac8287c" ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-04-22T17:47:52.21696356" + "timestamp": "2026-02-11T10:00:30.637566635" }, "salmon - stub": { "content": [ @@ -93,7 +92,7 @@ { "id": "all_samples" }, - "all_samples.SummarizedExperiment.rds:md5,d41d8cd98f00b204e9800998ecf8427e" + "all_samples.transcript_lengths.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "11": [ @@ -101,22 +100,29 @@ { "id": "all_samples" }, - "all_samples.SummarizedExperiment.rds:md5,d41d8cd98f00b204e9800998ecf8427e" + "all_samples.SummarizedExperiment.rds" ] ], "12": [ - "versions.yml:md5,91a01dde9c54db9929e15cad7ebb94c2", - "versions.yml:md5,c10c51dad5b22c80ebacb805645137ad", - "versions.yml:md5,c62905e3a7ad1dc887639b9c7bb1e0cb", - "versions.yml:md5,d5243289a32cde9e90e20f1a202bb566", - "versions.yml:md5,df9cd6573913e1c58ebc6714e6318432" + [ + { + "id": "all_samples" + }, + "all_samples.SummarizedExperiment.rds" + ] + ], + "13": [ + "versions.yml:md5,6a3d19a27db2790f89232d505313894c", + "versions.yml:md5,b13d44458ef56ce1bd8b2b18fcc13004", + "versions.yml:md5,bf7fa0a1d22a37bd535f7f71060fad26", + "versions.yml:md5,f3e61130fc276669694f901feac8287c" ], "2": [ [ { - "id": "all_samples" + }, - "all_samples.gene_tpm.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + "salmon.merged.tx2gene.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "3": [ @@ -124,7 +130,7 @@ { "id": "all_samples" }, - "all_samples.gene_counts.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + "all_samples.gene_tpm.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "4": [ @@ -132,7 +138,7 @@ { "id": "all_samples" }, - "all_samples.gene_lengths.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + "all_samples.gene_counts.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "5": [ @@ -140,7 +146,7 @@ { "id": "all_samples" }, - "all_samples.gene_counts_length_scaled.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + "all_samples.gene_lengths.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "6": [ @@ -148,7 +154,7 @@ { "id": "all_samples" }, - "all_samples.gene_counts_scaled.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + "all_samples.gene_counts_length_scaled.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "7": [ @@ -156,7 +162,7 @@ { "id": "all_samples" }, - "all_samples.transcript_tpm.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + "all_samples.gene_counts_scaled.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "8": [ @@ -164,7 +170,7 @@ { "id": "all_samples" }, - "all_samples.transcript_counts.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + "all_samples.transcript_tpm.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "9": [ @@ -172,7 +178,7 @@ { "id": "all_samples" }, - "all_samples.transcript_lengths.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + "all_samples.transcript_counts.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "counts_gene": [ @@ -228,7 +234,7 @@ { "id": "all_samples" }, - "all_samples.SummarizedExperiment.rds:md5,d41d8cd98f00b204e9800998ecf8427e" + "all_samples.SummarizedExperiment.rds" ] ], "merged_transcript_rds_unified": [ @@ -236,7 +242,7 @@ { "id": "all_samples" }, - "all_samples.SummarizedExperiment.rds:md5,d41d8cd98f00b204e9800998ecf8427e" + "all_samples.SummarizedExperiment.rds" ] ], "multiqc": [ @@ -275,20 +281,27 @@ "all_samples.transcript_tpm.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], + "tx2gene": [ + [ + { + + }, + "salmon.merged.tx2gene.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], "versions": [ - "versions.yml:md5,91a01dde9c54db9929e15cad7ebb94c2", - "versions.yml:md5,c10c51dad5b22c80ebacb805645137ad", - "versions.yml:md5,c62905e3a7ad1dc887639b9c7bb1e0cb", - "versions.yml:md5,d5243289a32cde9e90e20f1a202bb566", - "versions.yml:md5,df9cd6573913e1c58ebc6714e6318432" + "versions.yml:md5,6a3d19a27db2790f89232d505313894c", + "versions.yml:md5,b13d44458ef56ce1bd8b2b18fcc13004", + "versions.yml:md5,bf7fa0a1d22a37bd535f7f71060fad26", + "versions.yml:md5,f3e61130fc276669694f901feac8287c" ] } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-04-22T14:11:41.843291814" + "timestamp": "2026-02-11T10:01:00.048270164" }, "kallisto - stub": { "content": [ @@ -316,7 +329,7 @@ { "id": "all_samples" }, - "all_samples.SummarizedExperiment.rds:md5,d41d8cd98f00b204e9800998ecf8427e" + "all_samples.transcript_lengths.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "11": [ @@ -324,22 +337,29 @@ { "id": "all_samples" }, - "all_samples.SummarizedExperiment.rds:md5,d41d8cd98f00b204e9800998ecf8427e" + "all_samples.SummarizedExperiment.rds" ] ], "12": [ - "versions.yml:md5,91a01dde9c54db9929e15cad7ebb94c2", - "versions.yml:md5,c10c51dad5b22c80ebacb805645137ad", - "versions.yml:md5,c62905e3a7ad1dc887639b9c7bb1e0cb", - "versions.yml:md5,d5243289a32cde9e90e20f1a202bb566", - "versions.yml:md5,efbc421f11a829423221fc2e67e03892" + [ + { + "id": "all_samples" + }, + "all_samples.SummarizedExperiment.rds" + ] + ], + "13": [ + "versions.yml:md5,6a3d19a27db2790f89232d505313894c", + "versions.yml:md5,b13d44458ef56ce1bd8b2b18fcc13004", + "versions.yml:md5,bf7fa0a1d22a37bd535f7f71060fad26", + "versions.yml:md5,f3e61130fc276669694f901feac8287c" ], "2": [ [ { - "id": "all_samples" + }, - "all_samples.gene_tpm.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + "kallisto.merged.tx2gene.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "3": [ @@ -347,7 +367,7 @@ { "id": "all_samples" }, - "all_samples.gene_counts.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + "all_samples.gene_tpm.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "4": [ @@ -355,7 +375,7 @@ { "id": "all_samples" }, - "all_samples.gene_lengths.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + "all_samples.gene_counts.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "5": [ @@ -363,7 +383,7 @@ { "id": "all_samples" }, - "all_samples.gene_counts_length_scaled.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + "all_samples.gene_lengths.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "6": [ @@ -371,7 +391,7 @@ { "id": "all_samples" }, - "all_samples.gene_counts_scaled.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + "all_samples.gene_counts_length_scaled.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "7": [ @@ -379,7 +399,7 @@ { "id": "all_samples" }, - "all_samples.transcript_tpm.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + "all_samples.gene_counts_scaled.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "8": [ @@ -387,7 +407,7 @@ { "id": "all_samples" }, - "all_samples.transcript_counts.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + "all_samples.transcript_tpm.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "9": [ @@ -395,7 +415,7 @@ { "id": "all_samples" }, - "all_samples.transcript_lengths.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + "all_samples.transcript_counts.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "counts_gene": [ @@ -451,7 +471,7 @@ { "id": "all_samples" }, - "all_samples.SummarizedExperiment.rds:md5,d41d8cd98f00b204e9800998ecf8427e" + "all_samples.SummarizedExperiment.rds" ] ], "merged_transcript_rds_unified": [ @@ -459,7 +479,7 @@ { "id": "all_samples" }, - "all_samples.SummarizedExperiment.rds:md5,d41d8cd98f00b204e9800998ecf8427e" + "all_samples.SummarizedExperiment.rds" ] ], "multiqc": [ @@ -496,20 +516,27 @@ "all_samples.transcript_tpm.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], + "tx2gene": [ + [ + { + + }, + "kallisto.merged.tx2gene.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], "versions": [ - "versions.yml:md5,91a01dde9c54db9929e15cad7ebb94c2", - "versions.yml:md5,c10c51dad5b22c80ebacb805645137ad", - "versions.yml:md5,c62905e3a7ad1dc887639b9c7bb1e0cb", - "versions.yml:md5,d5243289a32cde9e90e20f1a202bb566", - "versions.yml:md5,efbc421f11a829423221fc2e67e03892" + "versions.yml:md5,6a3d19a27db2790f89232d505313894c", + "versions.yml:md5,b13d44458ef56ce1bd8b2b18fcc13004", + "versions.yml:md5,bf7fa0a1d22a37bd535f7f71060fad26", + "versions.yml:md5,f3e61130fc276669694f901feac8287c" ] } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-04-22T14:12:11.830570877" + "timestamp": "2026-02-11T10:01:29.303060205" }, "salmon": { "content": [ @@ -520,7 +547,15 @@ { "id": "all_samples" }, - "all_samples.gene_counts.tsv:md5,865a4706b8bf47f476d8298fdd344902" + "salmon.merged.gene_counts.tsv:md5,865a4706b8bf47f476d8298fdd344902" + ] + ], + [ + [ + { + "id": "all_samples" + }, + "salmon.merged.gene_counts_length_scaled.tsv:md5,46194b28815747fe3c3d5a619fa994a7" ] ], [ @@ -528,7 +563,7 @@ { "id": "all_samples" }, - "all_samples.gene_counts_length_scaled.tsv:md5,46194b28815747fe3c3d5a619fa994a7" + "salmon.merged.gene_lengths.tsv:md5,158e17a7bda7827b3d528f379e81d2bd" ] ], [ @@ -536,7 +571,7 @@ { "id": "all_samples" }, - "all_samples.gene_lengths.tsv:md5,158e17a7bda7827b3d528f379e81d2bd" + "salmon.merged.transcript_lengths.tsv:md5,f39a15fea56a5a8e5776dcdda0c8f102" ] ], [ @@ -544,17 +579,15 @@ { "id": "all_samples" }, - "all_samples.transcript_lengths.tsv:md5,f39a15fea56a5a8e5776dcdda0c8f102" + "salmon.merged.transcript_counts.tsv:md5,f68224a34261b93f432ef4f97dfabe15" ] ], - null, - null, [ [ { "id": "all_samples" }, - "all_samples.gene_tpm.tsv:md5,9711ed8364c3a1ea4fc87bd5e0780835" + "salmon.merged.gene_tpm.tsv:md5,9711ed8364c3a1ea4fc87bd5e0780835" ] ], [ @@ -562,21 +595,20 @@ { "id": "all_samples" }, - "all_samples.transcript_tpm.tsv:md5,e0c16bf083ebb88bcfaf27cfba12d3e9" + "salmon.merged.transcript_tpm.tsv:md5,e0c16bf083ebb88bcfaf27cfba12d3e9" ] ], [ - "versions.yml:md5,91a01dde9c54db9929e15cad7ebb94c2", - "versions.yml:md5,be28c034506b52fd01f9b2fb0fc678e3", - "versions.yml:md5,c62905e3a7ad1dc887639b9c7bb1e0cb", - "versions.yml:md5,d5243289a32cde9e90e20f1a202bb566", - "versions.yml:md5,df9cd6573913e1c58ebc6714e6318432" + "versions.yml:md5,7310ce1ed08d45a1a2730ab3602b863a", + "versions.yml:md5,b13d44458ef56ce1bd8b2b18fcc13004", + "versions.yml:md5,bf7fa0a1d22a37bd535f7f71060fad26", + "versions.yml:md5,f3e61130fc276669694f901feac8287c" ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-04-22T17:47:14.235741773" + "timestamp": "2026-02-11T09:59:56.582451163" } } \ No newline at end of file diff --git a/subworkflows/nf-core/quantify_pseudo_alignment/tests/nextflow.config b/subworkflows/nf-core/quantify_pseudo_alignment/tests/nextflow.config index 7f80571e2..419b4d412 100644 --- a/subworkflows/nf-core/quantify_pseudo_alignment/tests/nextflow.config +++ b/subworkflows/nf-core/quantify_pseudo_alignment/tests/nextflow.config @@ -1,10 +1,18 @@ process { - withName: 'QUANTIFY_PSEUDO_ALIGNMENT:SE_GENE_UNIFIED' { + withName: 'QUANTIFY_PSEUDO_ALIGNMENT:QUANT_TXIMPORT_SUMMARIZEDEXPERIMENT:CUSTOM_TX2GENE' { + ext.prefix = { "${quant_type}.merged" } + } + + withName: 'QUANTIFY_PSEUDO_ALIGNMENT:QUANT_TXIMPORT_SUMMARIZEDEXPERIMENT:TXIMETA_TXIMPORT' { + ext.prefix = { "${quant_type}.merged" } + } + + withName: 'QUANTIFY_PSEUDO_ALIGNMENT:QUANT_TXIMPORT_SUMMARIZEDEXPERIMENT:SE_GENE_UNIFIED' { ext.prefix = { "${meta.id}_gene" } ext.args = '--assay_names counts,counts_length_scaled,counts_scaled,lengths,tpm' } - withName: 'QUANTIFY_PSEUDO_ALIGNMENT:SE_TRANSCRIPT_UNIFIED' { + withName: 'QUANTIFY_PSEUDO_ALIGNMENT:QUANT_TXIMPORT_SUMMARIZEDEXPERIMENT:SE_TRANSCRIPT_UNIFIED' { ext.prefix = { "${meta.id}_transcript" } ext.args = '--assay_names counts,lengths,tpm' } diff --git a/subworkflows/nf-core/quantify_rsem/main.nf b/subworkflows/nf-core/quantify_rsem/main.nf new file mode 100644 index 000000000..5ab6862d0 --- /dev/null +++ b/subworkflows/nf-core/quantify_rsem/main.nf @@ -0,0 +1,96 @@ +// +// Gene/transcript quantification with RSEM +// + +include { RSEM_CALCULATEEXPRESSION } from '../../../modules/nf-core/rsem/calculateexpression' +include { CUSTOM_RSEMMERGECOUNTS } from '../../../modules/nf-core/custom/rsemmergecounts' +include { SENTIEON_RSEMCALCULATEEXPRESSION } from '../../../modules/nf-core/sentieon/rsemcalculateexpression' + +include { QUANT_TXIMPORT_SUMMARIZEDEXPERIMENT } from '../quant_tximport_summarizedexperiment' + +workflow QUANTIFY_RSEM { + take: + samplesheet // channel: [ val(meta), /path/to/samplesheet ] + reads // channel: [ val(meta), [ reads ] ] - FASTQ or BAM files + index // channel: /path/to/rsem/index/ + gtf // channel: /path/to/genome.gtf + gtf_id_attribute // val: GTF gene ID attribute + gtf_extra_attribute // val: GTF alternative gene attribute (e.g. gene_name) + use_sentieon_star // boolean: use Sentieon-accelerated STAR (FASTQ mode only) + + main: + + ch_versions = channel.empty() + + // + // Quantify reads with RSEM + // + ch_rsem_out = null + if (use_sentieon_star) { + SENTIEON_RSEMCALCULATEEXPRESSION ( reads, index ) + ch_rsem_out = SENTIEON_RSEMCALCULATEEXPRESSION + } else { + RSEM_CALCULATEEXPRESSION ( reads, index ) + ch_rsem_out = RSEM_CALCULATEEXPRESSION + } + + ch_counts_gene = ch_rsem_out.out.counts_gene + ch_counts_transcript = ch_rsem_out.out.counts_transcript + ch_stat = ch_rsem_out.out.stat + ch_logs = ch_rsem_out.out.logs + + // + // Merge counts across samples + // + CUSTOM_RSEMMERGECOUNTS ( + ch_counts_gene.collect{ it[1] }.map { results -> [ ['id': 'all_samples'], results ] }, + ch_counts_transcript.collect{ it[1] } + ) + + // + // Post-process quantifications with tximport and SummarizedExperiment + // + QUANT_TXIMPORT_SUMMARIZEDEXPERIMENT ( + samplesheet, + ch_counts_transcript, + gtf, + gtf_id_attribute, + gtf_extra_attribute, + 'rsem' + ) + ch_versions = ch_versions.mix(QUANT_TXIMPORT_SUMMARIZEDEXPERIMENT.out.versions) + + emit: + // Per-sample outputs + raw_counts_gene = ch_counts_gene // channel: [ val(meta), counts ] + raw_counts_transcript = ch_counts_transcript // channel: [ val(meta), counts ] + stat = ch_stat // channel: [ val(meta), stat ] + logs = ch_logs // channel: [ val(meta), logs ] + + // RSEM merge outputs + merged_counts_gene = CUSTOM_RSEMMERGECOUNTS.out.counts_gene // channel: [ val(meta), counts ] + merged_tpm_gene = CUSTOM_RSEMMERGECOUNTS.out.tpm_gene // channel: [ val(meta), tpm ] + merged_counts_transcript = CUSTOM_RSEMMERGECOUNTS.out.counts_transcript // channel: [ val(meta), counts ] + merged_tpm_transcript = CUSTOM_RSEMMERGECOUNTS.out.tpm_transcript // channel: [ val(meta), tpm ] + merged_genes_long = CUSTOM_RSEMMERGECOUNTS.out.genes_long // channel: [ val(meta), genes_long ] + merged_isoforms_long = CUSTOM_RSEMMERGECOUNTS.out.isoforms_long // channel: [ val(meta), isoforms_long ] + + // tximport outputs + tpm_gene = QUANT_TXIMPORT_SUMMARIZEDEXPERIMENT.out.tpm_gene // path: *gene_tpm.tsv + counts_gene = QUANT_TXIMPORT_SUMMARIZEDEXPERIMENT.out.counts_gene // path: *gene_counts.tsv + counts_gene_length_scaled = QUANT_TXIMPORT_SUMMARIZEDEXPERIMENT.out.counts_gene_length_scaled // path: *gene_counts_length_scaled.tsv + counts_gene_scaled = QUANT_TXIMPORT_SUMMARIZEDEXPERIMENT.out.counts_gene_scaled // path: *gene_counts_scaled.tsv + lengths_gene = QUANT_TXIMPORT_SUMMARIZEDEXPERIMENT.out.lengths_gene // path: *gene_lengths.tsv + tpm_transcript = QUANT_TXIMPORT_SUMMARIZEDEXPERIMENT.out.tpm_transcript // path: *transcript_tpm.tsv + counts_transcript = QUANT_TXIMPORT_SUMMARIZEDEXPERIMENT.out.counts_transcript // path: *transcript_counts.tsv + lengths_transcript = QUANT_TXIMPORT_SUMMARIZEDEXPERIMENT.out.lengths_transcript // path: *transcript_lengths.tsv + + // SummarizedExperiment objects + merged_gene_rds_unified = QUANT_TXIMPORT_SUMMARIZEDEXPERIMENT.out.merged_gene_rds // path: *.rds + merged_transcript_rds_unified = QUANT_TXIMPORT_SUMMARIZEDEXPERIMENT.out.merged_transcript_rds // path: *.rds + + // tx2gene + tx2gene = QUANT_TXIMPORT_SUMMARIZEDEXPERIMENT.out.tx2gene // path: *tx2gene.tsv + + versions = ch_versions // channel: [ versions.yml ] +} diff --git a/subworkflows/nf-core/quantify_rsem/meta.yml b/subworkflows/nf-core/quantify_rsem/meta.yml new file mode 100644 index 000000000..75215dd4e --- /dev/null +++ b/subworkflows/nf-core/quantify_rsem/meta.yml @@ -0,0 +1,179 @@ +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/subworkflows/yaml-schema.json +name: "quantify_rsem" +description: Perform quantification with RSEM to produce count tables, legacy merge matrices, and SummarizedExperiment objects +keywords: + - rnaseq + - quantification + - rsem + - tximport +components: + - rsem/calculateexpression + - sentieon/rsemcalculateexpression + - custom/rsemmergecounts + - quant_tximport_summarizedexperiment +input: + - meta: + type: map + description: | + Groovy Map containing study-level sample sheet information. e.g. [ + id:'SRP1234' ]. + - samplesheet: + type: file + description: | + Sample sheet, to be baked into the `colData` of summarizedexperiment + objects. + pattern: "*.{csv,tsv}" + - reads: + type: file + description: | + Channel with input FastQ files of size 1 and 2 for single-end and + paired-end data, respectively. OR a transcriptome-level BAM file if + running RSEM in alignment mode. + - index: + type: path + description: | + Path to RSEM index directory. + - gtf: + type: file + description: | + Channel with features in GTF format. Used to generate transcript/gene + mappings. + - gtf_id_attribute: + type: string + description: | + Attribute in GTF file corresponding to the gene identifier. + - gtf_extra_attribute: + type: string + description: GTF alternative gene attribute (e.g. gene_name) + - use_sentieon_star: + type: boolean + description: | + Use Sentieon-accelerated STAR for alignment within RSEM. Only + meaningful in FASTQ input mode; set to `false` for BAM-mode consumers. + +output: + - meta: + type: map + description: | + Groovy Map containing sample information. e.g. [ id:'test' ]. + - raw_counts_gene: + type: file + description: | + Per-sample RSEM gene-level results files. + pattern: "*.genes.results" + - raw_counts_transcript: + type: file + description: | + Per-sample RSEM transcript-level results files. + pattern: "*.isoforms.results" + - stat: + type: file + description: | + Per-sample RSEM statistics files. + pattern: "*.stat" + - logs: + type: file + description: | + Per-sample RSEM log files (optional, FASTQ mode only). + pattern: "*.log" + - merged_counts_gene: + type: file + description: | + Wide-format gene-level count matrix from RSEM merge. + pattern: "*.gene_counts.tsv" + - merged_tpm_gene: + type: file + description: | + Wide-format gene-level TPM matrix from RSEM merge. + pattern: "*.gene_tpm.tsv" + - merged_counts_transcript: + type: file + description: | + Wide-format transcript-level count matrix from RSEM merge. + pattern: "*.transcript_counts.tsv" + - merged_tpm_transcript: + type: file + description: | + Wide-format transcript-level TPM matrix from RSEM merge. + pattern: "*.transcript_tpm.tsv" + - merged_genes_long: + type: file + description: | + Long-format gene-level results from RSEM merge. + pattern: "*.genes_long.tsv" + - merged_isoforms_long: + type: file + description: | + Long-format isoform-level results from RSEM merge. + pattern: "*.isoforms_long.tsv" + - tpm_gene: + type: file + description: | + Gene-level matrix of abundance values in TPM from tximport. + pattern: "*.gene_tpm.tsv" + - counts_gene: + type: file + description: | + Gene-level matrix of unadjusted estimated counts from tximport + (`countsFromAbundance = 'no'`). + pattern: "*.gene_counts.tsv" + - counts_gene_length_scaled: + type: file + description: | + Gene-level matrix of estimated counts from tximport using + `countsFromAbundance = 'lengthScaledTPM'`. + pattern: "*.gene_counts_length_scaled.tsv" + - counts_gene_scaled: + type: file + description: | + Gene-level matrix of estimated counts from tximport using + `countsFromAbundance = 'scaledTPM'`. + pattern: "*.gene_counts_scaled.tsv" + - lengths_gene: + type: file + description: | + Gene-level matrix of length values from tximport. + pattern: "*.gene_lengths.tsv" + - tpm_transcript: + type: file + description: | + Transcript-level matrix of abundance values in TPM from tximport. + pattern: "*.transcript_tpm.tsv" + - counts_transcript: + type: file + description: | + Transcript-level matrix of unadjusted estimated counts from tximport + (`countsFromAbundance = 'no'`). + pattern: "*.transcript_counts.tsv" + - lengths_transcript: + type: file + description: | + Transcript-level matrix of length values from tximport. + pattern: "*.transcript_lengths.tsv" + - merged_gene_rds_unified: + type: file + description: | + Serialised SummarizedExperiment object containing gene level + abundance, count, and length matrices generated from tximport. + pattern: "*.rds" + - merged_transcript_rds_unified: + type: file + description: | + Serialised SummarizedExperiment object containing transcript level + abundance, count, and length matrices generated from tximport. + pattern: "*.rds" + - tx2gene: + type: file + description: | + Transcript to gene mapping table. + pattern: "*.tx2gene.tsv" + - versions: + type: file + description: | + File containing software versions + Structure: [ path(versions.yml) ] + pattern: "versions.yml" +authors: + - "@pinin4fjords" +maintainers: + - "@pinin4fjords" diff --git a/subworkflows/nf-core/quantify_rsem/nextflow.config b/subworkflows/nf-core/quantify_rsem/nextflow.config new file mode 100644 index 000000000..edc31e9e5 --- /dev/null +++ b/subworkflows/nf-core/quantify_rsem/nextflow.config @@ -0,0 +1,11 @@ +// IMPORTANT: Add this configuration to your modules.config + +process { + withName: '.*:QUANTIFY_RSEM:RSEM_CALCULATEEXPRESSION|.*:QUANTIFY_RSEM:SENTIEON_RSEMCALCULATEEXPRESSION' { + ext.args = '--estimate-rspd --seed 1' + } + + withName: '.*:QUANTIFY_RSEM:CUSTOM_RSEMMERGECOUNTS' { + ext.prefix = { "rsem.merged" } + } +} diff --git a/subworkflows/nf-core/quantify_rsem/tests/main.nf.test b/subworkflows/nf-core/quantify_rsem/tests/main.nf.test new file mode 100644 index 000000000..972c34749 --- /dev/null +++ b/subworkflows/nf-core/quantify_rsem/tests/main.nf.test @@ -0,0 +1,235 @@ +nextflow_workflow { + + name "Test Workflow QUANTIFY_RSEM" + script "../main.nf" + workflow "QUANTIFY_RSEM" + + tag "subworkflows" + tag "subworkflows_nfcore" + tag "subworkflows/quantify_rsem" + + tag "rsem/preparereference" + tag "rsem/calculateexpression" + tag "sentieon/rsemcalculateexpression" + tag "custom/rsemmergecounts" + tag "subworkflows/quant_tximport_summarizedexperiment" + tag "custom/tx2gene" + tag "tximeta/tximport" + tag "summarizedexperiment/summarizedexperiment" + + test("homo_sapiens - bam") { + + config "./nextflow.config" + + setup { + run("RSEM_PREPAREREFERENCE") { + script "../../../../modules/nf-core/rsem/preparereference/main.nf" + process { + """ + input[0] = Channel.of(file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true)) + input[1] = Channel.of(file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true)) + """ + } + } + } + + when { + workflow { + """ + input[0] = [ + [ id: 'samplesheet' ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/csv/samplesheet_micro.csv', checkIfExists: true) + ] + input[1] = [ + [ id: 'test', strandedness: 'forward' ], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/rsem.transcript.bam', checkIfExists: true) + ] + input[2] = RSEM_PREPAREREFERENCE.out.index + input[3] = Channel.of(file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true)) + input[4] = 'gene_id' + input[5] = 'gene_name' + input[6] = false + """ + } + } + + then { + assertAll( + { assert workflow.success }, + { assert snapshot( + file(workflow.out.merged_gene_rds_unified[0][1]).name, + file(workflow.out.merged_transcript_rds_unified[0][1]).name, + workflow.out.tpm_gene, + workflow.out.counts_gene, + workflow.out.counts_gene_length_scaled, + workflow.out.counts_gene_scaled, + workflow.out.lengths_gene, + workflow.out.tpm_transcript, + workflow.out.counts_transcript, + workflow.out.lengths_transcript, + workflow.out.merged_counts_gene, + workflow.out.merged_tpm_gene, + workflow.out.merged_counts_transcript, + workflow.out.merged_tpm_transcript, + workflow.out.versions + ).match() } + ) + } + } + + test("homo_sapiens - fastq") { + + config "./nextflow_fastq.config" + + setup { + run("RSEM_PREPAREREFERENCE") { + script "../../../../modules/nf-core/rsem/preparereference/main.nf" + process { + """ + input[0] = Channel.of(file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true)) + input[1] = Channel.of(file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true)) + """ + } + } + } + + when { + workflow { + """ + input[0] = [ + [ id: 'samplesheet' ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/csv/samplesheet_micro.csv', checkIfExists: true) + ] + input[1] = [ + [ id: 'test', strandedness: 'forward' ], + [ + 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[2] = RSEM_PREPAREREFERENCE.out.index + input[3] = Channel.of(file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true)) + input[4] = 'gene_id' + input[5] = 'gene_name' + input[6] = false + """ + } + } + + then { + assertAll( + { assert workflow.success }, + { assert snapshot( + file(workflow.out.merged_gene_rds_unified[0][1]).name, + file(workflow.out.merged_transcript_rds_unified[0][1]).name, + workflow.out.tpm_gene, + workflow.out.counts_gene, + workflow.out.counts_gene_length_scaled, + workflow.out.counts_gene_scaled, + workflow.out.lengths_gene, + workflow.out.tpm_transcript, + workflow.out.counts_transcript, + workflow.out.lengths_transcript, + workflow.out.merged_counts_gene, + workflow.out.merged_tpm_gene, + workflow.out.merged_counts_transcript, + workflow.out.merged_tpm_transcript, + workflow.out.versions + ).match() } + ) + } + } + + test("homo_sapiens - bam - stub") { + + options "-stub" + config "./nextflow.config" + + setup { + run("RSEM_PREPAREREFERENCE") { + script "../../../../modules/nf-core/rsem/preparereference/main.nf" + process { + """ + input[0] = Channel.of(file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true)) + input[1] = Channel.of(file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true)) + """ + } + } + } + + when { + workflow { + """ + input[0] = [ + [ id: 'samplesheet' ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/csv/samplesheet_micro.csv', checkIfExists: true) + ] + input[1] = [ + [ id: 'test', strandedness: 'forward' ], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/rsem.transcript.bam', checkIfExists: true) + ] + input[2] = RSEM_PREPAREREFERENCE.out.index + input[3] = Channel.of(file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true)) + input[4] = 'gene_id' + input[5] = 'gene_name' + input[6] = false + """ + } + } + + then { + assertAll( + { assert workflow.success }, + { assert snapshot(workflow.out).match() } + ) + } + } + + test("homo_sapiens - fastq - stub") { + + options "-stub" + config "./nextflow_fastq.config" + + setup { + run("RSEM_PREPAREREFERENCE") { + script "../../../../modules/nf-core/rsem/preparereference/main.nf" + process { + """ + input[0] = Channel.of(file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true)) + input[1] = Channel.of(file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true)) + """ + } + } + } + + when { + workflow { + """ + input[0] = [ + [ id: 'samplesheet' ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/csv/samplesheet_micro.csv', checkIfExists: true) + ] + input[1] = [ + [ id: 'test', strandedness: 'forward' ], + [ + 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[2] = RSEM_PREPAREREFERENCE.out.index + input[3] = Channel.of(file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true)) + input[4] = 'gene_id' + input[5] = 'gene_name' + input[6] = false + """ + } + } + + then { + assertAll( + { assert workflow.success }, + { assert snapshot(workflow.out).match() } + ) + } + } +} diff --git a/subworkflows/nf-core/quantify_rsem/tests/main.nf.test.snap b/subworkflows/nf-core/quantify_rsem/tests/main.nf.test.snap new file mode 100644 index 000000000..b530d409f --- /dev/null +++ b/subworkflows/nf-core/quantify_rsem/tests/main.nf.test.snap @@ -0,0 +1,962 @@ +{ + "homo_sapiens - fastq - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "strandedness": "forward" + }, + "test.genes.results:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test", + "strandedness": "forward" + }, + "test.isoforms.results:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "10": [ + [ + { + "id": "all_samples" + }, + "all_samples.gene_tpm.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "11": [ + [ + { + "id": "all_samples" + }, + "all_samples.gene_counts.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "12": [ + [ + { + "id": "all_samples" + }, + "all_samples.gene_counts_length_scaled.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "13": [ + [ + { + "id": "all_samples" + }, + "all_samples.gene_counts_scaled.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "14": [ + [ + { + "id": "all_samples" + }, + "all_samples.gene_lengths.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "15": [ + [ + { + "id": "all_samples" + }, + "all_samples.transcript_tpm.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "16": [ + [ + { + "id": "all_samples" + }, + "all_samples.transcript_counts.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "17": [ + [ + { + "id": "all_samples" + }, + "all_samples.transcript_lengths.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "18": [ + [ + { + "id": "all_samples" + }, + "all_samples.SummarizedExperiment.rds" + ] + ], + "19": [ + [ + { + "id": "all_samples" + }, + "all_samples.SummarizedExperiment.rds" + ] + ], + "2": [ + [ + { + "id": "test", + "strandedness": "forward" + }, + "test.stat:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "20": [ + [ + { + + }, + "rsem.merged.tx2gene.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "21": [ + "versions.yml:md5,06462f0acfe182a5b229d6921255e503", + "versions.yml:md5,48f5d583d45f72f1affcfa7148f8713a", + "versions.yml:md5,e91394edec7b4a9d000e7d5918c73b6a", + "versions.yml:md5,eea9eb3ab29ffe5ab879224a1fc2024d" + ], + "3": [ + [ + { + "id": "test", + "strandedness": "forward" + }, + "test.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "4": [ + [ + { + "id": "all_samples" + }, + "rsem.merged.gene_counts.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "5": [ + [ + { + "id": "all_samples" + }, + "rsem.merged.gene_tpm.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "6": [ + [ + { + "id": "all_samples" + }, + "rsem.merged.transcript_counts.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "7": [ + [ + { + "id": "all_samples" + }, + "rsem.merged.transcript_tpm.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "8": [ + [ + { + "id": "all_samples" + }, + "rsem.merged.genes_long.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "9": [ + [ + { + "id": "all_samples" + }, + "rsem.merged.isoforms_long.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "counts_gene": [ + [ + { + "id": "all_samples" + }, + "all_samples.gene_counts.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "counts_gene_length_scaled": [ + [ + { + "id": "all_samples" + }, + "all_samples.gene_counts_length_scaled.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "counts_gene_scaled": [ + [ + { + "id": "all_samples" + }, + "all_samples.gene_counts_scaled.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "counts_transcript": [ + [ + { + "id": "all_samples" + }, + "all_samples.transcript_counts.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "lengths_gene": [ + [ + { + "id": "all_samples" + }, + "all_samples.gene_lengths.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "lengths_transcript": [ + [ + { + "id": "all_samples" + }, + "all_samples.transcript_lengths.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "logs": [ + [ + { + "id": "test", + "strandedness": "forward" + }, + "test.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "merged_counts_gene": [ + [ + { + "id": "all_samples" + }, + "rsem.merged.gene_counts.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "merged_counts_transcript": [ + [ + { + "id": "all_samples" + }, + "rsem.merged.transcript_counts.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "merged_gene_rds_unified": [ + [ + { + "id": "all_samples" + }, + "all_samples.SummarizedExperiment.rds" + ] + ], + "merged_genes_long": [ + [ + { + "id": "all_samples" + }, + "rsem.merged.genes_long.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "merged_isoforms_long": [ + [ + { + "id": "all_samples" + }, + "rsem.merged.isoforms_long.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "merged_tpm_gene": [ + [ + { + "id": "all_samples" + }, + "rsem.merged.gene_tpm.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "merged_tpm_transcript": [ + [ + { + "id": "all_samples" + }, + "rsem.merged.transcript_tpm.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "merged_transcript_rds_unified": [ + [ + { + "id": "all_samples" + }, + "all_samples.SummarizedExperiment.rds" + ] + ], + "raw_counts_gene": [ + [ + { + "id": "test", + "strandedness": "forward" + }, + "test.genes.results:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "raw_counts_transcript": [ + [ + { + "id": "test", + "strandedness": "forward" + }, + "test.isoforms.results:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "stat": [ + [ + { + "id": "test", + "strandedness": "forward" + }, + "test.stat:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "tpm_gene": [ + [ + { + "id": "all_samples" + }, + "all_samples.gene_tpm.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "tpm_transcript": [ + [ + { + "id": "all_samples" + }, + "all_samples.transcript_tpm.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "tx2gene": [ + [ + { + + }, + "rsem.merged.tx2gene.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,06462f0acfe182a5b229d6921255e503", + "versions.yml:md5,48f5d583d45f72f1affcfa7148f8713a", + "versions.yml:md5,e91394edec7b4a9d000e7d5918c73b6a", + "versions.yml:md5,eea9eb3ab29ffe5ab879224a1fc2024d" + ] + } + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.3" + }, + "timestamp": "2026-02-13T10:29:38.21920929" + }, + "homo_sapiens - fastq": { + "content": [ + "all_samples_gene.SummarizedExperiment.rds", + "all_samples_transcript.SummarizedExperiment.rds", + [ + [ + { + "id": "all_samples" + }, + "rsem.merged.gene_tpm.tsv:md5,73d3b2edcdbc7542254adb0002206c8e" + ] + ], + [ + [ + { + "id": "all_samples" + }, + "rsem.merged.gene_counts.tsv:md5,c7534e0307cf03977e691492ea676276" + ] + ], + [ + [ + { + "id": "all_samples" + }, + "rsem.merged.gene_counts_length_scaled.tsv:md5,c7534e0307cf03977e691492ea676276" + ] + ], + [ + [ + { + "id": "all_samples" + }, + "rsem.merged.gene_counts_scaled.tsv:md5,c7534e0307cf03977e691492ea676276" + ] + ], + [ + [ + { + "id": "all_samples" + }, + "rsem.merged.gene_lengths.tsv:md5,5e020fb7578a6f273274ee62e2b8572e" + ] + ], + [ + [ + { + "id": "all_samples" + }, + "rsem.merged.transcript_tpm.tsv:md5,7d8ddc9830b4d6ba23e444d5c96a1187" + ] + ], + [ + [ + { + "id": "all_samples" + }, + "rsem.merged.transcript_counts.tsv:md5,ee15b83b2e680b8ba131ceea40a319bb" + ] + ], + [ + [ + { + "id": "all_samples" + }, + "rsem.merged.transcript_lengths.tsv:md5,1fe09362b8bfa54fbe3fc7e8820bbeb5" + ] + ], + [ + [ + { + "id": "all_samples" + }, + "rsem.merged.gene_counts.tsv:md5,f3b586000c97c89aec45360772e73df1" + ] + ], + [ + [ + { + "id": "all_samples" + }, + "rsem.merged.gene_tpm.tsv:md5,e6ae3dfa9913a7c15b705ec27c376212" + ] + ], + [ + [ + { + "id": "all_samples" + }, + "rsem.merged.transcript_counts.tsv:md5,235c002b811360183494a2aac74d1f5b" + ] + ], + [ + [ + { + "id": "all_samples" + }, + "rsem.merged.transcript_tpm.tsv:md5,d38f22667e3b8012f1d783b8d5159ccc" + ] + ], + [ + "versions.yml:md5,06462f0acfe182a5b229d6921255e503", + "versions.yml:md5,48f5d583d45f72f1affcfa7148f8713a", + "versions.yml:md5,8220852da982162f4ce0899b9361b095", + "versions.yml:md5,eea9eb3ab29ffe5ab879224a1fc2024d" + ] + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.3" + }, + "timestamp": "2026-02-13T10:28:51.879652676" + }, + "homo_sapiens - bam": { + "content": [ + "all_samples_gene.SummarizedExperiment.rds", + "all_samples_transcript.SummarizedExperiment.rds", + [ + [ + { + "id": "all_samples" + }, + "rsem.merged.gene_tpm.tsv:md5,73d3b2edcdbc7542254adb0002206c8e" + ] + ], + [ + [ + { + "id": "all_samples" + }, + "rsem.merged.gene_counts.tsv:md5,c7534e0307cf03977e691492ea676276" + ] + ], + [ + [ + { + "id": "all_samples" + }, + "rsem.merged.gene_counts_length_scaled.tsv:md5,c7534e0307cf03977e691492ea676276" + ] + ], + [ + [ + { + "id": "all_samples" + }, + "rsem.merged.gene_counts_scaled.tsv:md5,c7534e0307cf03977e691492ea676276" + ] + ], + [ + [ + { + "id": "all_samples" + }, + "rsem.merged.gene_lengths.tsv:md5,5e020fb7578a6f273274ee62e2b8572e" + ] + ], + [ + [ + { + "id": "all_samples" + }, + "rsem.merged.transcript_tpm.tsv:md5,7d8ddc9830b4d6ba23e444d5c96a1187" + ] + ], + [ + [ + { + "id": "all_samples" + }, + "rsem.merged.transcript_counts.tsv:md5,ee15b83b2e680b8ba131ceea40a319bb" + ] + ], + [ + [ + { + "id": "all_samples" + }, + "rsem.merged.transcript_lengths.tsv:md5,1fe09362b8bfa54fbe3fc7e8820bbeb5" + ] + ], + [ + [ + { + "id": "all_samples" + }, + "rsem.merged.gene_counts.tsv:md5,f3b586000c97c89aec45360772e73df1" + ] + ], + [ + [ + { + "id": "all_samples" + }, + "rsem.merged.gene_tpm.tsv:md5,e6ae3dfa9913a7c15b705ec27c376212" + ] + ], + [ + [ + { + "id": "all_samples" + }, + "rsem.merged.transcript_counts.tsv:md5,235c002b811360183494a2aac74d1f5b" + ] + ], + [ + [ + { + "id": "all_samples" + }, + "rsem.merged.transcript_tpm.tsv:md5,d38f22667e3b8012f1d783b8d5159ccc" + ] + ], + [ + "versions.yml:md5,06462f0acfe182a5b229d6921255e503", + "versions.yml:md5,48f5d583d45f72f1affcfa7148f8713a", + "versions.yml:md5,8220852da982162f4ce0899b9361b095", + "versions.yml:md5,eea9eb3ab29ffe5ab879224a1fc2024d" + ] + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.3" + }, + "timestamp": "2026-02-13T10:26:52.287784486" + }, + "homo_sapiens - bam - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "strandedness": "forward" + }, + "test.genes.results:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test", + "strandedness": "forward" + }, + "test.isoforms.results:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "10": [ + [ + { + "id": "all_samples" + }, + "all_samples.gene_tpm.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "11": [ + [ + { + "id": "all_samples" + }, + "all_samples.gene_counts.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "12": [ + [ + { + "id": "all_samples" + }, + "all_samples.gene_counts_length_scaled.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "13": [ + [ + { + "id": "all_samples" + }, + "all_samples.gene_counts_scaled.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "14": [ + [ + { + "id": "all_samples" + }, + "all_samples.gene_lengths.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "15": [ + [ + { + "id": "all_samples" + }, + "all_samples.transcript_tpm.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "16": [ + [ + { + "id": "all_samples" + }, + "all_samples.transcript_counts.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "17": [ + [ + { + "id": "all_samples" + }, + "all_samples.transcript_lengths.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "18": [ + [ + { + "id": "all_samples" + }, + "all_samples.SummarizedExperiment.rds" + ] + ], + "19": [ + [ + { + "id": "all_samples" + }, + "all_samples.SummarizedExperiment.rds" + ] + ], + "2": [ + [ + { + "id": "test", + "strandedness": "forward" + }, + "test.stat:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "20": [ + [ + { + + }, + "rsem.merged.tx2gene.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "21": [ + "versions.yml:md5,06462f0acfe182a5b229d6921255e503", + "versions.yml:md5,48f5d583d45f72f1affcfa7148f8713a", + "versions.yml:md5,e91394edec7b4a9d000e7d5918c73b6a", + "versions.yml:md5,eea9eb3ab29ffe5ab879224a1fc2024d" + ], + "3": [ + [ + { + "id": "test", + "strandedness": "forward" + }, + "test.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "4": [ + [ + { + "id": "all_samples" + }, + "rsem.merged.gene_counts.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "5": [ + [ + { + "id": "all_samples" + }, + "rsem.merged.gene_tpm.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "6": [ + [ + { + "id": "all_samples" + }, + "rsem.merged.transcript_counts.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "7": [ + [ + { + "id": "all_samples" + }, + "rsem.merged.transcript_tpm.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "8": [ + [ + { + "id": "all_samples" + }, + "rsem.merged.genes_long.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "9": [ + [ + { + "id": "all_samples" + }, + "rsem.merged.isoforms_long.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "counts_gene": [ + [ + { + "id": "all_samples" + }, + "all_samples.gene_counts.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "counts_gene_length_scaled": [ + [ + { + "id": "all_samples" + }, + "all_samples.gene_counts_length_scaled.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "counts_gene_scaled": [ + [ + { + "id": "all_samples" + }, + "all_samples.gene_counts_scaled.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "counts_transcript": [ + [ + { + "id": "all_samples" + }, + "all_samples.transcript_counts.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "lengths_gene": [ + [ + { + "id": "all_samples" + }, + "all_samples.gene_lengths.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "lengths_transcript": [ + [ + { + "id": "all_samples" + }, + "all_samples.transcript_lengths.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "logs": [ + [ + { + "id": "test", + "strandedness": "forward" + }, + "test.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "merged_counts_gene": [ + [ + { + "id": "all_samples" + }, + "rsem.merged.gene_counts.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "merged_counts_transcript": [ + [ + { + "id": "all_samples" + }, + "rsem.merged.transcript_counts.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "merged_gene_rds_unified": [ + [ + { + "id": "all_samples" + }, + "all_samples.SummarizedExperiment.rds" + ] + ], + "merged_genes_long": [ + [ + { + "id": "all_samples" + }, + "rsem.merged.genes_long.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "merged_isoforms_long": [ + [ + { + "id": "all_samples" + }, + "rsem.merged.isoforms_long.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "merged_tpm_gene": [ + [ + { + "id": "all_samples" + }, + "rsem.merged.gene_tpm.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "merged_tpm_transcript": [ + [ + { + "id": "all_samples" + }, + "rsem.merged.transcript_tpm.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "merged_transcript_rds_unified": [ + [ + { + "id": "all_samples" + }, + "all_samples.SummarizedExperiment.rds" + ] + ], + "raw_counts_gene": [ + [ + { + "id": "test", + "strandedness": "forward" + }, + "test.genes.results:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "raw_counts_transcript": [ + [ + { + "id": "test", + "strandedness": "forward" + }, + "test.isoforms.results:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "stat": [ + [ + { + "id": "test", + "strandedness": "forward" + }, + "test.stat:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "tpm_gene": [ + [ + { + "id": "all_samples" + }, + "all_samples.gene_tpm.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "tpm_transcript": [ + [ + { + "id": "all_samples" + }, + "all_samples.transcript_tpm.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "tx2gene": [ + [ + { + + }, + "rsem.merged.tx2gene.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,06462f0acfe182a5b229d6921255e503", + "versions.yml:md5,48f5d583d45f72f1affcfa7148f8713a", + "versions.yml:md5,e91394edec7b4a9d000e7d5918c73b6a", + "versions.yml:md5,eea9eb3ab29ffe5ab879224a1fc2024d" + ] + } + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.3" + }, + "timestamp": "2026-02-13T10:29:15.137497991" + } +} \ No newline at end of file diff --git a/subworkflows/nf-core/quantify_rsem/tests/nextflow.config b/subworkflows/nf-core/quantify_rsem/tests/nextflow.config new file mode 100644 index 000000000..2cf320224 --- /dev/null +++ b/subworkflows/nf-core/quantify_rsem/tests/nextflow.config @@ -0,0 +1,23 @@ +process { + withName: 'QUANTIFY_RSEM:CUSTOM_RSEMMERGECOUNTS' { + ext.prefix = { "rsem.merged" } + } + + withName: 'QUANTIFY_RSEM:QUANT_TXIMPORT_SUMMARIZEDEXPERIMENT:CUSTOM_TX2GENE' { + ext.prefix = { "rsem.merged" } + } + + withName: 'QUANTIFY_RSEM:QUANT_TXIMPORT_SUMMARIZEDEXPERIMENT:TXIMETA_TXIMPORT' { + ext.prefix = { "rsem.merged" } + } + + withName: 'QUANTIFY_RSEM:QUANT_TXIMPORT_SUMMARIZEDEXPERIMENT:SE_GENE_UNIFIED' { + ext.prefix = { "${meta.id}_gene" } + ext.args = '--assay_names counts,counts_length_scaled,counts_scaled,lengths,tpm' + } + + withName: 'QUANTIFY_RSEM:QUANT_TXIMPORT_SUMMARIZEDEXPERIMENT:SE_TRANSCRIPT_UNIFIED' { + ext.prefix = { "${meta.id}_transcript" } + ext.args = '--assay_names counts,lengths,tpm' + } +} diff --git a/subworkflows/nf-core/quantify_rsem/tests/nextflow_fastq.config b/subworkflows/nf-core/quantify_rsem/tests/nextflow_fastq.config new file mode 100644 index 000000000..b919b4e14 --- /dev/null +++ b/subworkflows/nf-core/quantify_rsem/tests/nextflow_fastq.config @@ -0,0 +1,31 @@ +process { + withName: 'RSEM_PREPAREREFERENCE' { + ext.args = '--star' + } + + withName: 'QUANTIFY_RSEM:RSEM_CALCULATEEXPRESSION' { + ext.args = '--star --star-gzipped-read-file' + } + + withName: 'QUANTIFY_RSEM:CUSTOM_RSEMMERGECOUNTS' { + ext.prefix = { "rsem.merged" } + } + + withName: 'QUANTIFY_RSEM:QUANT_TXIMPORT_SUMMARIZEDEXPERIMENT:CUSTOM_TX2GENE' { + ext.prefix = { "rsem.merged" } + } + + withName: 'QUANTIFY_RSEM:QUANT_TXIMPORT_SUMMARIZEDEXPERIMENT:TXIMETA_TXIMPORT' { + ext.prefix = { "rsem.merged" } + } + + withName: 'QUANTIFY_RSEM:QUANT_TXIMPORT_SUMMARIZEDEXPERIMENT:SE_GENE_UNIFIED' { + ext.prefix = { "${meta.id}_gene" } + ext.args = '--assay_names counts,counts_length_scaled,counts_scaled,lengths,tpm' + } + + withName: 'QUANTIFY_RSEM:QUANT_TXIMPORT_SUMMARIZEDEXPERIMENT:SE_TRANSCRIPT_UNIFIED' { + ext.prefix = { "${meta.id}_transcript" } + ext.args = '--assay_names counts,lengths,tpm' + } +} 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 index e7cc3f5cd..f117040cb 100644 --- a/subworkflows/nf-core/utils_nfcore_pipeline/tests/main.function.nf.test +++ b/subworkflows/nf-core/utils_nfcore_pipeline/tests/main.function.nf.test @@ -4,6 +4,10 @@ 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") { 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 index ff1ae72a9..8940d32d1 100644 --- a/subworkflows/nf-core/utils_nfcore_pipeline/tests/main.workflow.nf.test +++ b/subworkflows/nf-core/utils_nfcore_pipeline/tests/main.workflow.nf.test @@ -4,6 +4,10 @@ nextflow_workflow { 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") { diff --git a/subworkflows/nf-core/utils_nfschema_plugin/main.nf b/subworkflows/nf-core/utils_nfschema_plugin/main.nf index ee4738c8d..1df8b76fb 100644 --- a/subworkflows/nf-core/utils_nfschema_plugin/main.nf +++ b/subworkflows/nf-core/utils_nfschema_plugin/main.nf @@ -38,7 +38,7 @@ workflow UTILS_NFSCHEMA_PLUGIN { } log.info paramsHelp( help_options, - params.help instanceof String ? params.help : "", + (params.help instanceof String && params.help != "true") ? params.help : "", ) exit 0 } @@ -71,4 +71,3 @@ workflow UTILS_NFSCHEMA_PLUGIN { emit: dummy_emit = true } - diff --git a/subworkflows/nf-core/utils_nfschema_plugin/tests/main.nf.test b/subworkflows/nf-core/utils_nfschema_plugin/tests/main.nf.test index 5202f1677..c977917aa 100644 --- a/subworkflows/nf-core/utils_nfschema_plugin/tests/main.nf.test +++ b/subworkflows/nf-core/utils_nfschema_plugin/tests/main.nf.test @@ -4,6 +4,10 @@ nextflow_workflow { script "../main.nf" workflow "UTILS_NFSCHEMA_PLUGIN" + tag "subworkflows" + tag "subworkflows_nfcore" + tag "subworkflows/utils_nfschema_plugin" + tag "plugin/nf-schema" config "./nextflow.config" diff --git a/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow.config b/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow.config index 8d8c73718..f6537cc33 100644 --- a/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow.config +++ b/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow.config @@ -1,5 +1,5 @@ plugins { - id "nf-schema@2.5.1" + id "nf-schema@2.6.1" } validation { diff --git a/tests/.nftignore b/tests/.nftignore index 0de3d11ed..903e688bb 100644 --- a/tests/.nftignore +++ b/tests/.nftignore @@ -1,5 +1,6 @@ .DS_Store +**/*.rds bbsplit/*.stats.txt fastqc/*/*.{html,zip} fastqc/*_fastqc.{html,zip} @@ -8,7 +9,14 @@ hisat2/log/*.hisat2.summary.log kallisto/*/abundance.{h5,tsv} kallisto/*/kallisto_quant.log kallisto/*/run_info.json -kallisto/kallisto.* +kallisto/kallisto.merged.gene_counts.tsv +kallisto/kallisto.merged.gene_counts_length_scaled.tsv +kallisto/kallisto.merged.gene_counts_scaled.tsv +kallisto/kallisto.merged.gene_lengths.tsv +kallisto/kallisto.merged.gene_tpm.tsv +kallisto/kallisto.merged.transcript_counts.tsv +kallisto/kallisto.merged.transcript_lengths.tsv +kallisto/kallisto.merged.transcript_tpm.tsv multiqc/multiqc_data/fastqc_top_overrepresented_sequences_table.txt multiqc/multiqc_data/multiqc.parquet multiqc/multiqc_data/multiqc.log @@ -19,6 +27,10 @@ multiqc/multiqc_data/llms-full.txt multiqc/multiqc_plots/{svg,pdf,png}/*.{svg,pdf,png} multiqc/multiqc_report.html pipeline_info/*.{html,json,txt,yml} +bowtie2_rrna/*.bowtie2.log +bowtie2_salmon/*.bowtie2.log +bowtie2_salmon/log/*.bowtie2.log +ribodetector/*.ribodetector.log sortmerna/*.sortmerna.log star_rsem/*.stat/*.{cnt,model,theta} star_rsem/*.{genes,isoforms}.results @@ -26,31 +38,34 @@ star_rsem/log/*.log star_{salmon,rsem}/log/*.Log.{final.out,out,progress.out} trimgalore/*fastq.gz_trimming_report.txt umitools/*.umi_extract.log -{hisat2,star_rsem,star_salmon}/*.{bam,bam.bai} -{hisat2,star_rsem,star_salmon}/bigwig/*.{forward,reverse}.bigWig -{hisat2,star_rsem,star_salmon}/dupradar/box_plot/*_duprateExpBoxplot.pdf -{hisat2,star_rsem,star_salmon}/dupradar/gene_data/*_dupMatrix.txt -{hisat2,star_rsem,star_salmon}/dupradar/histogram/*_expressionHist.pdf -{hisat2,star_rsem,star_salmon}/dupradar/intercepts_slope/*_intercept_slope.txt -{hisat2,star_rsem,star_salmon}/dupradar/scatter_plot/*_duprateExpDens.pdf -{hisat2,star_rsem,star_salmon}/featurecounts/*.featureCounts.{txt,tsv}.summary -{hisat2,star_rsem,star_salmon}/picard_metrics/*.MarkDuplicates.metrics.txt -{hisat2,star_rsem,star_salmon}/qualimap/*/css/* -{hisat2,star_rsem,star_salmon}/qualimap/*/images_qualimapReport/* -{hisat2,star_rsem,star_salmon}/qualimap/*/qualimapReport.html -{hisat2,star_rsem,star_salmon}/qualimap/*/rnaseq_qc_results.txt -{hisat2,star_rsem,star_salmon}/rseqc/bam_stat/*.bam_stat.txt -{hisat2,star_rsem,star_salmon}/rseqc/read_distribution/*.read_distribution.txt -{hisat2,star_rsem,star_salmon}/rseqc/{inner_distance,junction_annotation,junction_saturation,read_duplication}/{bed,log,pdf,rscript,txt,xls}/* -{hisat2,star_rsem,star_salmon}/samtools_stats/*.bam.{flagstat,idxstats,stats} -{hisat2,star_rsem,star_salmon}/stringtie/*.ballgown/t_data.ctab -{hisat2,star_rsem,star_salmon}/stringtie/*.gene.abundance.txt -{hisat2,star_rsem,star_salmon}/stringtie/*.{coverage,transcripts}.gtf -{hisat2,star_rsem,star_salmon}/{umitools,umicollapse}/{genomic,transcriptomic}_dedup_log/*.log +{hisat2,star_rsem,star_salmon,bowtie2_salmon}/*.{bam,bam.bai} +{hisat2,star_rsem,star_salmon,bowtie2_salmon}/bigwig/*.{forward,reverse}.bigWig +{hisat2,star_rsem,star_salmon,bowtie2_salmon}/dupradar/box_plot/*_duprateExpBoxplot.pdf +{hisat2,star_rsem,star_salmon,bowtie2_salmon}/dupradar/gene_data/*_dupMatrix.txt +{hisat2,star_rsem,star_salmon,bowtie2_salmon}/dupradar/histogram/*_expressionHist.pdf +{hisat2,star_rsem,star_salmon,bowtie2_salmon}/dupradar/intercepts_slope/*_intercept_slope.txt +{hisat2,star_rsem,star_salmon,bowtie2_salmon}/dupradar/scatter_plot/*_duprateExpDens.pdf +{hisat2,star_rsem,star_salmon,bowtie2_salmon}/featurecounts/*.featureCounts.{txt,tsv}.summary +{hisat2,star_rsem,star_salmon,bowtie2_salmon}/picard_metrics/*.MarkDuplicates.metrics.txt +{hisat2,star_rsem,star_salmon,bowtie2_salmon}/qualimap/*/css/* +{hisat2,star_rsem,star_salmon,bowtie2_salmon}/qualimap/*/images_qualimapReport/* +{hisat2,star_rsem,star_salmon,bowtie2_salmon}/qualimap/*/qualimapReport.html +{hisat2,star_rsem,star_salmon,bowtie2_salmon}/qualimap/*/rnaseq_qc_results.txt +{hisat2,star_rsem,star_salmon,bowtie2_salmon}/rseqc/bam_stat/*.bam_stat.txt +{hisat2,star_rsem,star_salmon,bowtie2_salmon}/rseqc/read_distribution/*.read_distribution.txt +{hisat2,star_rsem,star_salmon,bowtie2_salmon}/rseqc/{inner_distance,junction_annotation,junction_saturation,read_duplication}/{bed,log,pdf,rscript,txt,xls}/* +{hisat2,star_rsem,star_salmon,bowtie2_salmon}/samtools_stats/*.bam.{flagstat,idxstats,stats} +{hisat2,star_rsem,star_salmon,bowtie2_salmon}/stringtie/*.ballgown/t_data.ctab +{hisat2,star_rsem,star_salmon,bowtie2_salmon}/stringtie/*.gene.abundance.txt +{hisat2,star_rsem,star_salmon,bowtie2_salmon}/stringtie/*.{coverage,transcripts}.gtf +{hisat2,star_rsem,star_salmon,bowtie2_salmon}/{umitools,umicollapse}/{genomic,transcriptomic}_dedup_log/*.log {multiqc,multiqc/**}/.stub {multiqc,multiqc/**}/multiqc_report.html {multiqc,multiqc/**}/multiqc_report_data/multiqc.parquet +{multiqc,multiqc/**}/multiqc_report_data/fastqc_filtered*.txt +{multiqc,multiqc/**}/multiqc_report_data/fastqc_sequence_length_distribution_plot.txt {multiqc,multiqc/**}/multiqc_report_data/fastqc_{raw,trimmed}_top_overrepresented_sequences_table.txt +{multiqc,multiqc/**}/multiqc_report_data/multiqc_fastqc_fastqc_filtered.txt {multiqc,multiqc/**}/multiqc_report_data/hisat2_pe_plot.txt {multiqc,multiqc/**}/multiqc_report_data/hisat2_se_plot.txt {multiqc,multiqc/**}/multiqc_report_data/junction_saturation_known.txt @@ -76,9 +91,16 @@ umitools/*.umi_extract.log {multiqc,multiqc/**}/multiqc_report_data/multiqc_sample-relationships*.txt {multiqc,multiqc/**}/multiqc_report_data/multiqc_samtools_{flagstat,stats}.txt {multiqc,multiqc/**}/multiqc_report_data/multiqc_software_versions.txt +{multiqc,multiqc/**}/multiqc_report_data/multiqc_bowtie2_rrna.txt +{multiqc,multiqc/**}/multiqc_report_data/multiqc_bowtie2_bowtie2_rrna.txt +{multiqc,multiqc/**}/multiqc_report_data/multiqc_cutadapt.txt +{multiqc,multiqc/**}/multiqc_report_data/multiqc_ribodetector.txt {multiqc,multiqc/**}/multiqc_report_data/multiqc_sortmerna.txt {multiqc,multiqc/**}/multiqc_report_data/multiqc_sources.txt {multiqc,multiqc/**}/multiqc_report_data/multiqc_star.txt +{multiqc,multiqc/**}/multiqc_report_data/bbmap-bbsplit_plot.txt +{multiqc,multiqc/**}/multiqc_report_data/bbmap.txt +{multiqc,multiqc/**}/multiqc_report_data/bbsplit_stats_table.txt {multiqc,multiqc/**}/multiqc_report_data/multiqc_star_rsem_deseq2_clustering.txt {multiqc,multiqc/**}/multiqc_report_data/multiqc_star_rsem_deseq2_pca.txt {multiqc,multiqc/**}/multiqc_report_data/multiqc_star_salmon_deseq2_clustering.txt @@ -99,6 +121,13 @@ umitools/*.umi_extract.log {multiqc,multiqc/**}/multiqc_report_data/samtools-flagstat-table.txt {multiqc,multiqc/**}/multiqc_report_data/samtools-stats-dp.txt {multiqc,multiqc/**}/multiqc_report_data/samtools_alignment_plot.txt +{multiqc,multiqc/**}/multiqc_report_data/bowtie2_pe_plot.txt +{multiqc,multiqc/**}/multiqc_report_data/bowtie2_se_plot.txt +{multiqc,multiqc/**}/multiqc_report_data/multiqc_bowtie2.txt +{multiqc,multiqc/**}/multiqc_report_data/multiqc_bowtie2_salmon_deseq2_clustering.txt +{multiqc,multiqc/**}/multiqc_report_data/multiqc_bowtie2_salmon_deseq2_pca.txt +{multiqc,multiqc/**}/multiqc_report_data/bowtie2_rrna-*.txt +{multiqc,multiqc/**}/multiqc_report_data/ribodetector-*.txt {multiqc,multiqc/**}/multiqc_report_data/sortmerna-detailed-plot.txt {multiqc,multiqc/**}/multiqc_report_data/star_alignment_plot.txt {multiqc,multiqc/**}/multiqc_report_data/star_summary_table.txt @@ -106,20 +135,26 @@ umitools/*.umi_extract.log {multiqc,multiqc/**}/multiqc_report_data/umitools_stats_violin.txt {multiqc,multiqc/**}/multiqc_report_data/picard_MeanQualityByCycle_histogram_1.txt {multiqc,multiqc/**}/multiqc_report_plots/{pdf,png,svg}/*.{pdf,png,svg} -{salmon,kallisto}/all_samples_{gene,transcript}.SummarizedExperiment.rds -{salmon,star_rsem,star_salmon}/deseq2_qc/R_sessionInfo.log -{salmon,star_rsem,star_salmon}/deseq2_qc/deseq2.dds.RData -{salmon,star_rsem,star_salmon}/deseq2_qc/deseq2.pca.vals.txt -{salmon,star_rsem,star_salmon}/deseq2_qc/deseq2.plots.pdf -{salmon,star_rsem,star_salmon}/deseq2_qc/deseq2.sample.dists.txt -{salmon,star_rsem,star_salmon}/deseq2_qc/size_factors/*.txt -{salmon,star_rsem,star_salmon}/deseq2_qc/size_factors/deseq2.size_factors.RData -{salmon,star_rsem,star_salmon}/umitools/prepare_for_salmon_log/* -{salmon,star_rsem,star_salmon}/umitools/{genomic,transcriptomic}_dedup_log/* -{salmon,star_salmon}/*/aux_info/fld.gz -{salmon,star_salmon}/*/aux_info/meta_info.json -{salmon,star_salmon}/*/libParams/flenDist.txt -{salmon,star_salmon}/*/logs/salmon_quant.log -{salmon,star_salmon}/*/quant.genes.sf -{salmon,star_salmon}/*/quant.sf -{salmon,star_salmon}/salmon.* +{salmon,star_rsem,star_salmon,bowtie2_salmon}/deseq2_qc/R_sessionInfo.log +{salmon,star_rsem,star_salmon,bowtie2_salmon}/deseq2_qc/deseq2.dds.RData +{salmon,star_rsem,star_salmon,bowtie2_salmon}/deseq2_qc/deseq2.pca.vals.txt +{salmon,star_rsem,star_salmon,bowtie2_salmon}/deseq2_qc/deseq2.plots.pdf +{salmon,star_rsem,star_salmon,bowtie2_salmon}/deseq2_qc/deseq2.sample.dists.txt +{salmon,star_rsem,star_salmon,bowtie2_salmon}/deseq2_qc/size_factors/*.txt +{salmon,star_rsem,star_salmon,bowtie2_salmon}/deseq2_qc/size_factors/deseq2.size_factors.RData +{salmon,star_rsem,star_salmon,bowtie2_salmon}/umitools/prepare_for_quantification_log/* +{salmon,star_rsem,star_salmon,bowtie2_salmon}/umitools/{genomic,transcriptomic}_dedup_log/* +{salmon,star_salmon,bowtie2_salmon}/*/aux_info/fld.gz +{salmon,star_salmon,bowtie2_salmon}/*/aux_info/meta_info.json +{salmon,star_salmon,bowtie2_salmon}/*/libParams/flenDist.txt +{salmon,star_salmon,bowtie2_salmon}/*/logs/salmon_quant.log +{salmon,star_salmon,bowtie2_salmon}/*/quant.genes.sf +{salmon,star_salmon,bowtie2_salmon}/*/quant.sf +{salmon,star_salmon,bowtie2_salmon}/salmon.merged.gene_counts.tsv +{salmon,star_salmon,bowtie2_salmon}/salmon.merged.gene_counts_length_scaled.tsv +{salmon,star_salmon,bowtie2_salmon}/salmon.merged.gene_counts_scaled.tsv +{salmon,star_salmon,bowtie2_salmon}/salmon.merged.gene_lengths.tsv +{salmon,star_salmon,bowtie2_salmon}/salmon.merged.gene_tpm.tsv +{salmon,star_salmon,bowtie2_salmon}/salmon.merged.transcript_counts.tsv +{salmon,star_salmon,bowtie2_salmon}/salmon.merged.transcript_lengths.tsv +{salmon,star_salmon,bowtie2_salmon}/salmon.merged.transcript_tpm.tsv diff --git a/tests/bam_input.nf.test.snap b/tests/bam_input.nf.test.snap index 37fd83852..9477fb219 100644 --- a/tests/bam_input.nf.test.snap +++ b/tests/bam_input.nf.test.snap @@ -9,21 +9,21 @@ "BEDTOOLS_GENOMECOV_FW": { "bedtools": "2.31.1" }, + "BEDTOOLS_GENOMECOV_REV": { + "bedtools": "2.31.1" + }, "CUSTOM_CATADDITIONALFASTA": { "python": "3.12.2" }, - "CUSTOM_GETCHROMSIZES": { - "getchromsizes": 1.21 - }, "CUSTOM_TX2GENE": { "python": "3.10.4" }, - "DESEQ2_QC_STAR_SALMON": { + "DESEQ2_QC_BAM_SALMON": { "bioconductor-deseq2": "1.46.0", "r-base": "4.4.2" }, "DUPRADAR": { - "bioconductor-dupradar": "1.32.0" + "bioconductor-dupradar": "1.38.0" }, "GTF2BED": { "perl": "5.26.2" @@ -41,49 +41,52 @@ "python": "3.9.5" }, "PICARD_MARKDUPLICATES": { - "picard": "3.1.1" + "picard": "3.4.0" }, "QUALIMAP_RNASEQ": { "qualimap": 2.3 }, "RSEQC_BAMSTAT": { - "rseqc": "5.0.2" + "rseqc": "5.0.4" }, "RSEQC_INFEREXPERIMENT": { - "rseqc": "5.0.2" + "rseqc": "5.0.4" }, "RSEQC_INNERDISTANCE": { - "rseqc": "5.0.2" + "rseqc": "5.0.4" }, "RSEQC_JUNCTIONANNOTATION": { - "rseqc": "5.0.2" + "rseqc": "5.0.4" }, "RSEQC_JUNCTIONSATURATION": { - "rseqc": "5.0.2" + "rseqc": "5.0.4" }, "RSEQC_READDISTRIBUTION": { - "rseqc": "5.0.2" + "rseqc": "5.0.4" }, "RSEQC_READDUPLICATION": { - "rseqc": "5.0.2" + "rseqc": "5.0.4" }, "SALMON_QUANT": { "salmon": "1.10.3" }, + "SAMTOOLS_FAIDX": { + "samtools": "1.22.1" + }, "SAMTOOLS_FLAGSTAT": { - "samtools": 1.21 + "samtools": "1.22.1" }, "SAMTOOLS_IDXSTATS": { - "samtools": 1.21 + "samtools": "1.22.1" }, "SAMTOOLS_INDEX": { - "samtools": 1.21 + "samtools": "1.22.1" }, "SAMTOOLS_SORT_QUALIMAP": { - "samtools": 1.21 + "samtools": "1.22.1" }, "SAMTOOLS_STATS": { - "samtools": 1.21 + "samtools": "1.22.1" }, "SE_GENE_UNIFIED": { "bioconductor-summarizedexperiment": "1.32.0" @@ -680,6 +683,8 @@ "star_salmon/rseqc/inner_distance/txt/RAP1_IAA_30M_REP1.inner_distance.txt", "star_salmon/rseqc/inner_distance/txt/RAP1_IAA_30M_REP1.inner_distance_freq.txt", "star_salmon/rseqc/inner_distance/txt/RAP1_IAA_30M_REP1.inner_distance_mean.txt", + "star_salmon/rseqc/inner_distance/txt/RAP1_UNINDUCED_REP1.inner_distance.txt", + "star_salmon/rseqc/inner_distance/txt/RAP1_UNINDUCED_REP2.inner_distance.txt", "star_salmon/rseqc/inner_distance/txt/WT_REP1.inner_distance.txt", "star_salmon/rseqc/inner_distance/txt/WT_REP1.inner_distance_freq.txt", "star_salmon/rseqc/inner_distance/txt/WT_REP1.inner_distance_mean.txt", @@ -780,6 +785,7 @@ "star_salmon/salmon.merged.transcript_counts.tsv", "star_salmon/salmon.merged.transcript_lengths.tsv", "star_salmon/salmon.merged.transcript_tpm.tsv", + "star_salmon/salmon.merged.tx2gene.tsv", "star_salmon/samtools_stats", "star_salmon/samtools_stats/RAP1_IAA_30M_REP1.markdup.sorted.bam.flagstat", "star_salmon/samtools_stats/RAP1_IAA_30M_REP1.markdup.sorted.bam.idxstats", @@ -841,8 +847,7 @@ "star_salmon/stringtie/WT_REP2.ballgown/t_data.ctab", "star_salmon/stringtie/WT_REP2.coverage.gtf", "star_salmon/stringtie/WT_REP2.gene.abundance.txt", - "star_salmon/stringtie/WT_REP2.transcripts.gtf", - "star_salmon/tx2gene.tsv" + "star_salmon/stringtie/WT_REP2.transcripts.gtf" ], [ "genome_gfp.fasta:md5,e23e302af63736a199985a169fdac055", @@ -925,6 +930,7 @@ "RAP1_UNINDUCED_REP2.infer_experiment.txt:md5,688cf8ef4b0069d8c426420e9a27b732", "WT_REP1.infer_experiment.txt:md5,bf0c137f5fca06e7c40e1984a1acb06d", "WT_REP2.infer_experiment.txt:md5,82e23b329ee60709f343bc2d17d43b14", + "salmon.merged.tx2gene.tsv:md5,0e2418a69d2eba45097ebffc2f700bfe", "e2t.ctab:md5,54dd6de2daa90e973f47524a738a3d69", "e_data.ctab:md5,98a2b6a7555e58c7f21b45a1f48e5cbf", "i2t.ctab:md5,dda3d3ccd7d4184d947c654ae73efb7b", @@ -944,19 +950,18 @@ "e2t.ctab:md5,54dd6de2daa90e973f47524a738a3d69", "e_data.ctab:md5,b03f3118d1aa58fceadcb3311028e856", "i2t.ctab:md5,dda3d3ccd7d4184d947c654ae73efb7b", - "i_data.ctab:md5,041edee3193df311f621c09f4991892b", - "tx2gene.tsv:md5,0e2418a69d2eba45097ebffc2f700bfe" + "i_data.ctab:md5,041edee3193df311f621c09f4991892b" ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.3" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-09-15T20:12:59.270445702" + "timestamp": "2026-02-26T13:51:27.63099365" }, "BAM input for RSEM": { "content": [ - 143, + 147, { "BBMAP_BBSPLIT": { "bbmap": 39.18 @@ -964,18 +969,24 @@ "BEDTOOLS_GENOMECOV_FW": { "bedtools": "2.31.1" }, + "BEDTOOLS_GENOMECOV_REV": { + "bedtools": "2.31.1" + }, "CUSTOM_CATADDITIONALFASTA": { "python": "3.12.2" }, - "CUSTOM_GETCHROMSIZES": { - "getchromsizes": 1.21 + "CUSTOM_RSEMMERGECOUNTS": { + "sed": 4.7 + }, + "CUSTOM_TX2GENE": { + "python": "3.10.4" }, "DESEQ2_QC_RSEM": { "bioconductor-deseq2": "1.46.0", "r-base": "4.4.2" }, "DUPRADAR": { - "bioconductor-dupradar": "1.32.0" + "bioconductor-dupradar": "1.38.0" }, "GTF2BED": { "perl": "5.26.2" @@ -993,7 +1004,7 @@ "python": "3.9.5" }, "PICARD_MARKDUPLICATES": { - "picard": "3.1.1" + "picard": "3.4.0" }, "QUALIMAP_RNASEQ": { "qualimap": 2.3 @@ -1002,48 +1013,54 @@ "rsem": "1.3.1", "star": "2.7.10a" }, - "RSEM_MERGE_COUNTS": { - "sed": 4.7 - }, "RSEM_PREPAREREFERENCE_GENOME": { "rsem": "1.3.1", "star": "2.7.10a" }, "RSEQC_BAMSTAT": { - "rseqc": "5.0.2" + "rseqc": "5.0.4" }, "RSEQC_INFEREXPERIMENT": { - "rseqc": "5.0.2" + "rseqc": "5.0.4" }, "RSEQC_INNERDISTANCE": { - "rseqc": "5.0.2" + "rseqc": "5.0.4" }, "RSEQC_JUNCTIONANNOTATION": { - "rseqc": "5.0.2" + "rseqc": "5.0.4" }, "RSEQC_JUNCTIONSATURATION": { - "rseqc": "5.0.2" + "rseqc": "5.0.4" }, "RSEQC_READDISTRIBUTION": { - "rseqc": "5.0.2" + "rseqc": "5.0.4" }, "RSEQC_READDUPLICATION": { - "rseqc": "5.0.2" + "rseqc": "5.0.4" + }, + "SAMTOOLS_FAIDX": { + "samtools": "1.22.1" }, "SAMTOOLS_FLAGSTAT": { - "samtools": 1.21 + "samtools": "1.22.1" }, "SAMTOOLS_IDXSTATS": { - "samtools": 1.21 + "samtools": "1.22.1" }, "SAMTOOLS_INDEX": { - "samtools": 1.21 + "samtools": "1.22.1" }, "SAMTOOLS_SORT_QUALIMAP": { - "samtools": 1.21 + "samtools": "1.22.1" }, "SAMTOOLS_STATS": { - "samtools": 1.21 + "samtools": "1.22.1" + }, + "SE_GENE_UNIFIED": { + "bioconductor-summarizedexperiment": "1.32.0" + }, + "SE_TRANSCRIPT_UNIFIED": { + "bioconductor-summarizedexperiment": "1.32.0" }, "STAR_GENOMEGENERATE": { "gawk": "5.1.0", @@ -1056,6 +1073,9 @@ "SUBREAD_FEATURECOUNTS": { "subread": "2.0.6" }, + "TXIMETA_TXIMPORT": { + "bioconductor-tximeta": "1.20.1" + }, "UCSC_BEDCLIP": { "ucsc": 377 }, @@ -1257,48 +1277,6 @@ "multiqc/multiqc_report_plots/svg/star_rsem_deseq2_pca.svg", "pipeline_info", "pipeline_info/nf_core_rnaseq_software_mqc_versions.yml", - "rsem", - "rsem/RAP1_IAA_30M_REP1.genes.results", - "rsem/RAP1_IAA_30M_REP1.isoforms.results", - "rsem/RAP1_IAA_30M_REP1.stat", - "rsem/RAP1_IAA_30M_REP1.stat/RAP1_IAA_30M_REP1.cnt", - "rsem/RAP1_IAA_30M_REP1.stat/RAP1_IAA_30M_REP1.model", - "rsem/RAP1_IAA_30M_REP1.stat/RAP1_IAA_30M_REP1.theta", - "rsem/RAP1_IAA_30M_REP1.transcript.bam", - "rsem/RAP1_UNINDUCED_REP1.genes.results", - "rsem/RAP1_UNINDUCED_REP1.isoforms.results", - "rsem/RAP1_UNINDUCED_REP1.stat", - "rsem/RAP1_UNINDUCED_REP1.stat/RAP1_UNINDUCED_REP1.cnt", - "rsem/RAP1_UNINDUCED_REP1.stat/RAP1_UNINDUCED_REP1.model", - "rsem/RAP1_UNINDUCED_REP1.stat/RAP1_UNINDUCED_REP1.theta", - "rsem/RAP1_UNINDUCED_REP1.transcript.bam", - "rsem/RAP1_UNINDUCED_REP2.genes.results", - "rsem/RAP1_UNINDUCED_REP2.isoforms.results", - "rsem/RAP1_UNINDUCED_REP2.stat", - "rsem/RAP1_UNINDUCED_REP2.stat/RAP1_UNINDUCED_REP2.cnt", - "rsem/RAP1_UNINDUCED_REP2.stat/RAP1_UNINDUCED_REP2.model", - "rsem/RAP1_UNINDUCED_REP2.stat/RAP1_UNINDUCED_REP2.theta", - "rsem/RAP1_UNINDUCED_REP2.transcript.bam", - "rsem/WT_REP1.genes.results", - "rsem/WT_REP1.isoforms.results", - "rsem/WT_REP1.stat", - "rsem/WT_REP1.stat/WT_REP1.cnt", - "rsem/WT_REP1.stat/WT_REP1.model", - "rsem/WT_REP1.stat/WT_REP1.theta", - "rsem/WT_REP1.transcript.bam", - "rsem/WT_REP2.genes.results", - "rsem/WT_REP2.isoforms.results", - "rsem/WT_REP2.stat", - "rsem/WT_REP2.stat/WT_REP2.cnt", - "rsem/WT_REP2.stat/WT_REP2.model", - "rsem/WT_REP2.stat/WT_REP2.theta", - "rsem/WT_REP2.transcript.bam", - "rsem/rsem.merged.gene_counts.tsv", - "rsem/rsem.merged.gene_tpm.tsv", - "rsem/rsem.merged.genes_long.tsv", - "rsem/rsem.merged.isoforms_long.tsv", - "rsem/rsem.merged.transcript_counts.tsv", - "rsem/rsem.merged.transcript_tpm.tsv", "samtools", "samtools/RAP1_IAA_30M_REP1.sorted.bam.bai", "samtools/RAP1_UNINDUCED_REP1.sorted.bam.bai", @@ -1306,16 +1284,46 @@ "samtools/WT_REP1.sorted.bam.bai", "samtools/WT_REP2.sorted.bam.bai", "star_rsem", + "star_rsem/RAP1_IAA_30M_REP1.genes.results", + "star_rsem/RAP1_IAA_30M_REP1.isoforms.results", "star_rsem/RAP1_IAA_30M_REP1.markdup.sorted.bam", "star_rsem/RAP1_IAA_30M_REP1.markdup.sorted.bam.bai", + "star_rsem/RAP1_IAA_30M_REP1.stat", + "star_rsem/RAP1_IAA_30M_REP1.stat/RAP1_IAA_30M_REP1.cnt", + "star_rsem/RAP1_IAA_30M_REP1.stat/RAP1_IAA_30M_REP1.model", + "star_rsem/RAP1_IAA_30M_REP1.stat/RAP1_IAA_30M_REP1.theta", + "star_rsem/RAP1_UNINDUCED_REP1.genes.results", + "star_rsem/RAP1_UNINDUCED_REP1.isoforms.results", "star_rsem/RAP1_UNINDUCED_REP1.markdup.sorted.bam", "star_rsem/RAP1_UNINDUCED_REP1.markdup.sorted.bam.bai", + "star_rsem/RAP1_UNINDUCED_REP1.stat", + "star_rsem/RAP1_UNINDUCED_REP1.stat/RAP1_UNINDUCED_REP1.cnt", + "star_rsem/RAP1_UNINDUCED_REP1.stat/RAP1_UNINDUCED_REP1.model", + "star_rsem/RAP1_UNINDUCED_REP1.stat/RAP1_UNINDUCED_REP1.theta", + "star_rsem/RAP1_UNINDUCED_REP2.genes.results", + "star_rsem/RAP1_UNINDUCED_REP2.isoforms.results", "star_rsem/RAP1_UNINDUCED_REP2.markdup.sorted.bam", "star_rsem/RAP1_UNINDUCED_REP2.markdup.sorted.bam.bai", + "star_rsem/RAP1_UNINDUCED_REP2.stat", + "star_rsem/RAP1_UNINDUCED_REP2.stat/RAP1_UNINDUCED_REP2.cnt", + "star_rsem/RAP1_UNINDUCED_REP2.stat/RAP1_UNINDUCED_REP2.model", + "star_rsem/RAP1_UNINDUCED_REP2.stat/RAP1_UNINDUCED_REP2.theta", + "star_rsem/WT_REP1.genes.results", + "star_rsem/WT_REP1.isoforms.results", "star_rsem/WT_REP1.markdup.sorted.bam", "star_rsem/WT_REP1.markdup.sorted.bam.bai", + "star_rsem/WT_REP1.stat", + "star_rsem/WT_REP1.stat/WT_REP1.cnt", + "star_rsem/WT_REP1.stat/WT_REP1.model", + "star_rsem/WT_REP1.stat/WT_REP1.theta", + "star_rsem/WT_REP2.genes.results", + "star_rsem/WT_REP2.isoforms.results", "star_rsem/WT_REP2.markdup.sorted.bam", "star_rsem/WT_REP2.markdup.sorted.bam.bai", + "star_rsem/WT_REP2.stat", + "star_rsem/WT_REP2.stat/WT_REP2.cnt", + "star_rsem/WT_REP2.stat/WT_REP2.model", + "star_rsem/WT_REP2.stat/WT_REP2.theta", "star_rsem/bigwig", "star_rsem/bigwig/RAP1_IAA_30M_REP1.forward.bigWig", "star_rsem/bigwig/RAP1_IAA_30M_REP1.reverse.bigWig", @@ -1392,6 +1400,7 @@ "star_rsem/featurecounts/WT_REP2.biotype_counts_rrna_mqc.tsv", "star_rsem/featurecounts/WT_REP2.featureCounts.tsv", "star_rsem/featurecounts/WT_REP2.featureCounts.tsv.summary", + "star_rsem/log", "star_rsem/picard_metrics", "star_rsem/picard_metrics/RAP1_IAA_30M_REP1.markdup.sorted.MarkDuplicates.metrics.txt", "star_rsem/picard_metrics/RAP1_UNINDUCED_REP1.markdup.sorted.MarkDuplicates.metrics.txt", @@ -1589,6 +1598,24 @@ "star_rsem/qualimap/WT_REP2/raw_data_qualimapReport/coverage_profile_along_genes_(low).txt", "star_rsem/qualimap/WT_REP2/raw_data_qualimapReport/coverage_profile_along_genes_(total).txt", "star_rsem/qualimap/WT_REP2/rnaseq_qc_results.txt", + "star_rsem/rsem.merged.gene.SummarizedExperiment.rds", + "star_rsem/rsem.merged.gene_counts.tsv", + "star_rsem/rsem.merged.gene_counts_length_scaled.tsv", + "star_rsem/rsem.merged.gene_counts_scaled.tsv", + "star_rsem/rsem.merged.gene_lengths.tsv", + "star_rsem/rsem.merged.gene_tpm.tsv", + "star_rsem/rsem.merged.transcript.SummarizedExperiment.rds", + "star_rsem/rsem.merged.transcript_counts.tsv", + "star_rsem/rsem.merged.transcript_lengths.tsv", + "star_rsem/rsem.merged.transcript_tpm.tsv", + "star_rsem/rsem.merged.tx2gene.tsv", + "star_rsem/rsem_merge_counts", + "star_rsem/rsem_merge_counts/rsem.merged.gene_counts.tsv", + "star_rsem/rsem_merge_counts/rsem.merged.gene_tpm.tsv", + "star_rsem/rsem_merge_counts/rsem.merged.genes_long.tsv", + "star_rsem/rsem_merge_counts/rsem.merged.isoforms_long.tsv", + "star_rsem/rsem_merge_counts/rsem.merged.transcript_counts.tsv", + "star_rsem/rsem_merge_counts/rsem.merged.transcript_tpm.tsv", "star_rsem/rseqc", "star_rsem/rseqc/bam_stat", "star_rsem/rseqc/bam_stat/RAP1_IAA_30M_REP1.bam_stat.txt", @@ -1615,6 +1642,8 @@ "star_rsem/rseqc/inner_distance/txt/RAP1_IAA_30M_REP1.inner_distance.txt", "star_rsem/rseqc/inner_distance/txt/RAP1_IAA_30M_REP1.inner_distance_freq.txt", "star_rsem/rseqc/inner_distance/txt/RAP1_IAA_30M_REP1.inner_distance_mean.txt", + "star_rsem/rseqc/inner_distance/txt/RAP1_UNINDUCED_REP1.inner_distance.txt", + "star_rsem/rseqc/inner_distance/txt/RAP1_UNINDUCED_REP2.inner_distance.txt", "star_rsem/rseqc/inner_distance/txt/WT_REP1.inner_distance.txt", "star_rsem/rseqc/inner_distance/txt/WT_REP1.inner_distance_freq.txt", "star_rsem/rseqc/inner_distance/txt/WT_REP1.inner_distance_mean.txt", @@ -1784,42 +1813,6 @@ "samtools-idxstats-mapped-reads-plot_Normalised_Counts.txt:md5,75acd04232d1804b5f960ee4c5db4722", "samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts.txt:md5,ae45731d8d4595f77e6b271004f3a070", "samtools-idxstats-mapped-reads-plot_Raw_Counts.txt:md5,f84395a5a5aaeafac758a65f69e1fd8f", - "RAP1_IAA_30M_REP1.genes.results:md5,b46d4654bbd0d5305a75d9016675a285", - "RAP1_IAA_30M_REP1.isoforms.results:md5,a5515b36cc21248d758d4ed6986baed7", - "RAP1_IAA_30M_REP1.cnt:md5,34ba9a3404b025d94c89c78282c41c24", - "RAP1_IAA_30M_REP1.model:md5,53efb6613526edea16b1ca771f08268c", - "RAP1_IAA_30M_REP1.theta:md5,135a34f68fd1f9084658bb683b3442d2", - "RAP1_IAA_30M_REP1.transcript.bam:md5,84d1b1c0a611f0870d68508efe7fc0c9", - "RAP1_UNINDUCED_REP1.genes.results:md5,b48a19e3e7156d900b2c89da344f080f", - "RAP1_UNINDUCED_REP1.isoforms.results:md5,4578b1e83097e08f7f9fd6c05aae15f2", - "RAP1_UNINDUCED_REP1.cnt:md5,20b871f8f5bfd2394672dffe68f64628", - "RAP1_UNINDUCED_REP1.model:md5,ce88ff398f4737760a5eb423e034ed7f", - "RAP1_UNINDUCED_REP1.theta:md5,3803fd0acd3c328c76bbbb72b57639ef", - "RAP1_UNINDUCED_REP1.transcript.bam:md5,d51a63724c393072c5a73850601ef727", - "RAP1_UNINDUCED_REP2.genes.results:md5,b7527ddb0be1fea09125a13727a1e725", - "RAP1_UNINDUCED_REP2.isoforms.results:md5,a818e6b510912edee1fd97320f61405f", - "RAP1_UNINDUCED_REP2.cnt:md5,c14af602b0077d47fab45efe0c2aed91", - "RAP1_UNINDUCED_REP2.model:md5,0774306712bb4e1c95dc0489cbfa9017", - "RAP1_UNINDUCED_REP2.theta:md5,268e1d8ee9208c3812de22906794350b", - "RAP1_UNINDUCED_REP2.transcript.bam:md5,f891a2cc2862fea358a1707ae230fae4", - "WT_REP1.genes.results:md5,c3aaa802abfb3ac7168d911b232bd8a5", - "WT_REP1.isoforms.results:md5,9f3423606100c7661981416de4060a84", - "WT_REP1.cnt:md5,12a159048405c34a1ec2dc469707350f", - "WT_REP1.model:md5,342497fe7473520080a75dbf50e3f3ed", - "WT_REP1.theta:md5,44dbdecbeccfb0d8ece9e4f08849f176", - "WT_REP1.transcript.bam:md5,f010eef21c129a90be9f3fc6188cf6be", - "WT_REP2.genes.results:md5,fcea4e1e1a34bca6f845c66a852c2039", - "WT_REP2.isoforms.results:md5,b9e21a8e6e68aed11e75f31a1feda672", - "WT_REP2.cnt:md5,45ddb6ee6d468a0aafa9f6e0e26f2973", - "WT_REP2.model:md5,2f4eec1b6a7010b056532c55acf10a46", - "WT_REP2.theta:md5,f6668ded53d0741134058dd9e64571d0", - "WT_REP2.transcript.bam:md5,a5f965731a3fd6e523f4960d7d462f97", - "rsem.merged.gene_counts.tsv:md5,47a75de167a1b72d3a20789df389a3f7", - "rsem.merged.gene_tpm.tsv:md5,18a6dd460737434f6da1c17c1dc8aafa", - "rsem.merged.genes_long.tsv:md5,24767425e5d9d914ed0b1eca431182ac", - "rsem.merged.isoforms_long.tsv:md5,1363e166497e4574793a9f4704841767", - "rsem.merged.transcript_counts.tsv:md5,d3a4fa1f3bde89ee9d30114af2db3b48", - "rsem.merged.transcript_tpm.tsv:md5,efa563d0402cae35b96380592d147a72", "RAP1_IAA_30M_REP1.sorted.bam.bai:md5,4460948fc194ba7c7fe7ad92e68132a0", "RAP1_UNINDUCED_REP1.sorted.bam.bai:md5,ec51d038a5836721edc9f44d27c06542", "RAP1_UNINDUCED_REP2.sorted.bam.bai:md5,21a49b49cd6afb56c387fb645d50c3e4", @@ -1855,6 +1848,21 @@ "coverage_profile_along_genes_(high).txt:md5,a73462b9ecbd1d2c45d7ca84b5f7925b", "coverage_profile_along_genes_(low).txt:md5,7adc228bc15e344abb7938ea4d35a846", "coverage_profile_along_genes_(total).txt:md5,7adc228bc15e344abb7938ea4d35a846", + "rsem.merged.gene_counts.tsv:md5,060949cead024e393378bec58c82c976", + "rsem.merged.gene_counts_length_scaled.tsv:md5,8ceb1a2f0662630ad658d565db50c852", + "rsem.merged.gene_counts_scaled.tsv:md5,fdc2bb1618019953151b053107293543", + "rsem.merged.gene_lengths.tsv:md5,5b43d4327096c8714351fa3b147ace4b", + "rsem.merged.gene_tpm.tsv:md5,b4b1a0f093a5be3f43e2a5f583138709", + "rsem.merged.transcript_counts.tsv:md5,058a1780f4e0622c0cffb38ff7dcb66a", + "rsem.merged.transcript_lengths.tsv:md5,abcbf186029d6accc817a5b84a71e650", + "rsem.merged.transcript_tpm.tsv:md5,2368b7b8e5561ff2d5a0672bb2f0301b", + "rsem.merged.tx2gene.tsv:md5,0e2418a69d2eba45097ebffc2f700bfe", + "rsem.merged.gene_counts.tsv:md5,e1094c70c24d144681828840da3d968d", + "rsem.merged.gene_tpm.tsv:md5,7f78363b53c3d46bbab8976fb65c24ba", + "rsem.merged.genes_long.tsv:md5,e276f036e78bb06241f8f252b0aa57cb", + "rsem.merged.isoforms_long.tsv:md5,36da5d2b5cc6c1b89166f78a3b15a209", + "rsem.merged.transcript_counts.tsv:md5,7824ce210648c77a99dd49c4b26eb127", + "rsem.merged.transcript_tpm.tsv:md5,dd6879b53eb021ec5df3d351aced8ace", "RAP1_IAA_30M_REP1.infer_experiment.txt:md5,1f31ddae1f98e779e30d846cde3834de", "RAP1_UNINDUCED_REP1.infer_experiment.txt:md5,a2a8e31dbd0ebd0c12f3f968ffd5391b", "RAP1_UNINDUCED_REP2.infer_experiment.txt:md5,9ec058d3a4162fd1b4c6175e2106eef4", @@ -1883,9 +1891,9 @@ ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.3" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-09-15T20:20:27.355744216" + "timestamp": "2026-02-13T14:58:30.502549129" } } \ No newline at end of file diff --git a/tests/default.nf.test.snap b/tests/default.nf.test.snap index 9f80be5e6..5138daf98 100644 --- a/tests/default.nf.test.snap +++ b/tests/default.nf.test.snap @@ -10,16 +10,13 @@ "cat": 9.5 }, "CUSTOM_CATADDITIONALFASTA": { - "python": null - }, - "CUSTOM_GETCHROMSIZES": { - "getchromsizes": 1.21 + "python": "3.12.2" }, "FASTQC": { "fastqc": "0.12.1" }, "FQ_LINT": { - "fq": "0.12.0 (2024-07-08)" + "fq": "0.12.0" }, "GTF2BED": { "perl": "5.26.2" @@ -33,14 +30,15 @@ "GUNZIP_GTF": { "gunzip": 1.13 }, + "SAMTOOLS_FAIDX": { + "samtools": "1.22.1" + }, "STAR_GENOMEGENERATE": { "gawk": "5.1.0", "samtools": 1.21, "star": "2.7.11b" }, "TRIMGALORE": { - "cutadapt": 4.9, - "pigz": 2.8, "trimgalore": "0.6.10" }, "UNTAR_SALMON_INDEX": { @@ -96,14 +94,14 @@ ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.4" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-01-28T13:26:07.890871152" + "timestamp": "2026-02-04T16:55:44.46471142" }, "Params: default": { "content": [ - 214, + 219, { "BBMAP_BBSPLIT": { "bbmap": 39.18 @@ -111,37 +109,46 @@ "BEDTOOLS_GENOMECOV_FW": { "bedtools": "2.31.1" }, + "BEDTOOLS_GENOMECOV_REV": { + "bedtools": "2.31.1" + }, "CAT_FASTQ": { "cat": 9.5 }, "CUSTOM_CATADDITIONALFASTA": { "python": "3.12.2" }, - "CUSTOM_GETCHROMSIZES": { - "getchromsizes": 1.21 - }, "CUSTOM_TX2GENE": { "python": "3.10.4" }, - "DESEQ2_QC_PSEUDO": { + "DESEQ2_QC_BAM_SALMON": { "bioconductor-deseq2": "1.46.0", "r-base": "4.4.2" }, - "DESEQ2_QC_STAR_SALMON": { + "DESEQ2_QC_PSEUDO": { "bioconductor-deseq2": "1.46.0", "r-base": "4.4.2" }, "DUPRADAR": { - "bioconductor-dupradar": "1.32.0" + "bioconductor-dupradar": "1.38.0" }, "FASTQC": { "fastqc": "0.12.1" }, + "FASTQC_FILTERED": { + "fastqc": "0.12.1" + }, "FQ_LINT": { - "fq": "0.12.0 (2024-07-08)" + "fq": "0.12.0" + }, + "FQ_LINT_AFTER_BBSPLIT": { + "fq": "0.12.0" + }, + "FQ_LINT_AFTER_TRIMMING": { + "fq": "0.12.0" }, "FQ_SUBSAMPLE": { - "fq": "0.12.0 (2024-07-08)" + "fq": "0.12.0" }, "GTF2BED": { "perl": "5.26.2" @@ -159,52 +166,55 @@ "python": "3.9.5" }, "PICARD_MARKDUPLICATES": { - "picard": "3.1.1" + "picard": "3.4.0" }, "QUALIMAP_RNASEQ": { "qualimap": 2.3 }, "RSEQC_BAMSTAT": { - "rseqc": "5.0.2" + "rseqc": "5.0.4" }, "RSEQC_INFEREXPERIMENT": { - "rseqc": "5.0.2" + "rseqc": "5.0.4" }, "RSEQC_INNERDISTANCE": { - "rseqc": "5.0.2" + "rseqc": "5.0.4" }, "RSEQC_JUNCTIONANNOTATION": { - "rseqc": "5.0.2" + "rseqc": "5.0.4" }, "RSEQC_JUNCTIONSATURATION": { - "rseqc": "5.0.2" + "rseqc": "5.0.4" }, "RSEQC_READDISTRIBUTION": { - "rseqc": "5.0.2" + "rseqc": "5.0.4" }, "RSEQC_READDUPLICATION": { - "rseqc": "5.0.2" + "rseqc": "5.0.4" }, "SALMON_QUANT": { "salmon": "1.10.3" }, + "SAMTOOLS_FAIDX": { + "samtools": "1.22.1" + }, "SAMTOOLS_FLAGSTAT": { - "samtools": 1.21 + "samtools": "1.22.1" }, "SAMTOOLS_IDXSTATS": { - "samtools": 1.21 + "samtools": "1.22.1" }, "SAMTOOLS_INDEX": { - "samtools": 1.21 + "samtools": "1.22.1" }, "SAMTOOLS_SORT": { - "samtools": 1.21 + "samtools": "1.22.1" }, "SAMTOOLS_SORT_QUALIMAP": { - "samtools": 1.21 + "samtools": "1.22.1" }, "SAMTOOLS_STATS": { - "samtools": 1.21 + "samtools": "1.22.1" }, "SE_GENE_UNIFIED": { "bioconductor-summarizedexperiment": "1.32.0" @@ -229,8 +239,6 @@ "subread": "2.0.6" }, "TRIMGALORE": { - "cutadapt": 4.9, - "pigz": 2.8, "trimgalore": "0.6.10" }, "TXIMETA_TXIMPORT": { @@ -258,6 +266,23 @@ "custom/out/genome_gfp.fasta", "custom/out/genome_gfp.gtf", "fastqc", + "fastqc/filtered", + "fastqc/filtered/RAP1_IAA_30M_REP1_filtered_1_fastqc.html", + "fastqc/filtered/RAP1_IAA_30M_REP1_filtered_1_fastqc.zip", + "fastqc/filtered/RAP1_IAA_30M_REP1_filtered_2_fastqc.html", + "fastqc/filtered/RAP1_IAA_30M_REP1_filtered_2_fastqc.zip", + "fastqc/filtered/RAP1_UNINDUCED_REP1_filtered_fastqc.html", + "fastqc/filtered/RAP1_UNINDUCED_REP1_filtered_fastqc.zip", + "fastqc/filtered/RAP1_UNINDUCED_REP2_filtered_fastqc.html", + "fastqc/filtered/RAP1_UNINDUCED_REP2_filtered_fastqc.zip", + "fastqc/filtered/WT_REP1_filtered_1_fastqc.html", + "fastqc/filtered/WT_REP1_filtered_1_fastqc.zip", + "fastqc/filtered/WT_REP1_filtered_2_fastqc.html", + "fastqc/filtered/WT_REP1_filtered_2_fastqc.zip", + "fastqc/filtered/WT_REP2_filtered_1_fastqc.html", + "fastqc/filtered/WT_REP2_filtered_1_fastqc.zip", + "fastqc/filtered/WT_REP2_filtered_2_fastqc.html", + "fastqc/filtered/WT_REP2_filtered_2_fastqc.zip", "fastqc/raw", "fastqc/raw/RAP1_IAA_30M_REP1_raw_1_fastqc.html", "fastqc/raw/RAP1_IAA_30M_REP1_raw_1_fastqc.zip", @@ -293,18 +318,18 @@ "fastqc/trim/WT_REP2_trimmed_2_val_2_fastqc.html", "fastqc/trim/WT_REP2_trimmed_2_val_2_fastqc.zip", "fq_lint", + "fq_lint/bbsplit", + "fq_lint/bbsplit/RAP1_IAA_30M_REP1.fq_lint.txt", + "fq_lint/bbsplit/RAP1_UNINDUCED_REP1.fq_lint.txt", + "fq_lint/bbsplit/RAP1_UNINDUCED_REP2.fq_lint.txt", + "fq_lint/bbsplit/WT_REP1.fq_lint.txt", + "fq_lint/bbsplit/WT_REP2.fq_lint.txt", "fq_lint/raw", "fq_lint/raw/RAP1_IAA_30M_REP1.fq_lint.txt", "fq_lint/raw/RAP1_UNINDUCED_REP1.fq_lint.txt", "fq_lint/raw/RAP1_UNINDUCED_REP2.fq_lint.txt", "fq_lint/raw/WT_REP1.fq_lint.txt", "fq_lint/raw/WT_REP2.fq_lint.txt", - "fq_lint/sortmerna", - "fq_lint/sortmerna/RAP1_IAA_30M_REP1.fq_lint.txt", - "fq_lint/sortmerna/RAP1_UNINDUCED_REP1.fq_lint.txt", - "fq_lint/sortmerna/RAP1_UNINDUCED_REP2.fq_lint.txt", - "fq_lint/sortmerna/WT_REP1.fq_lint.txt", - "fq_lint/sortmerna/WT_REP2.fq_lint.txt", "fq_lint/trimmed", "fq_lint/trimmed/RAP1_IAA_30M_REP1.fq_lint.txt", "fq_lint/trimmed/RAP1_UNINDUCED_REP1.fq_lint.txt", @@ -315,9 +340,22 @@ "multiqc/star_salmon", "multiqc/star_salmon/multiqc_report.html", "multiqc/star_salmon/multiqc_report_data", + "multiqc/star_salmon/multiqc_report_data/bbmap-bbsplit_plot.txt", + "multiqc/star_salmon/multiqc_report_data/bbmap.txt", + "multiqc/star_salmon/multiqc_report_data/bbsplit_stats_table.txt", "multiqc/star_salmon/multiqc_report_data/cutadapt_filtered_reads_plot.txt", "multiqc/star_salmon/multiqc_report_data/cutadapt_trimmed_sequences_plot_3_Counts.txt", "multiqc/star_salmon/multiqc_report_data/cutadapt_trimmed_sequences_plot_3_Obs_Exp.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_filtered-status-check-heatmap.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_filtered_overrepresented_sequences_plot.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_filtered_per_base_n_content_plot.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_filtered_per_base_sequence_quality_plot.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_filtered_per_sequence_gc_content_plot_Counts.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_filtered_per_sequence_gc_content_plot_Percentages.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_filtered_per_sequence_quality_scores_plot.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_filtered_sequence_counts_plot.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_filtered_sequence_duplication_levels_plot.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_filtered_top_overrepresented_sequences_table.txt", "multiqc/star_salmon/multiqc_report_data/fastqc_raw-status-check-heatmap.txt", "multiqc/star_salmon/multiqc_report_data/fastqc_raw_adapter_content_plot.txt", "multiqc/star_salmon/multiqc_report_data/fastqc_raw_overrepresented_sequences_plot.txt", @@ -350,6 +388,7 @@ "multiqc/star_salmon/multiqc_report_data/multiqc_data.json", "multiqc/star_salmon/multiqc_report_data/multiqc_dupradar.txt", "multiqc/star_salmon/multiqc_report_data/multiqc_fail_strand_check_table.txt", + "multiqc/star_salmon/multiqc_report_data/multiqc_fastqc_fastqc_filtered.txt", "multiqc/star_salmon/multiqc_report_data/multiqc_fastqc_fastqc_raw.txt", "multiqc/star_salmon/multiqc_report_data/multiqc_fastqc_fastqc_trimmed.txt", "multiqc/star_salmon/multiqc_report_data/multiqc_featurecounts_biotype_plot.txt", @@ -406,12 +445,26 @@ "multiqc/star_salmon/multiqc_report_data/star_summary_table.txt", "multiqc/star_salmon/multiqc_report_plots", "multiqc/star_salmon/multiqc_report_plots/pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/bbmap-bbsplit_plot-cnt.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/bbmap-bbsplit_plot-pct.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/bbsplit_stats_table.pdf", "multiqc/star_salmon/multiqc_report_plots/pdf/cutadapt_filtered_reads_plot-cnt.pdf", "multiqc/star_salmon/multiqc_report_plots/pdf/cutadapt_filtered_reads_plot-pct.pdf", "multiqc/star_salmon/multiqc_report_plots/pdf/cutadapt_trimmed_sequences_plot_3_Counts.pdf", "multiqc/star_salmon/multiqc_report_plots/pdf/cutadapt_trimmed_sequences_plot_3_Obs_Exp.pdf", "multiqc/star_salmon/multiqc_report_plots/pdf/dupradar.pdf", "multiqc/star_salmon/multiqc_report_plots/pdf/fail_strand_check_table.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_filtered-status-check-heatmap.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_filtered_overrepresented_sequences_plot.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_filtered_per_base_n_content_plot.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_filtered_per_base_sequence_quality_plot.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_filtered_per_sequence_gc_content_plot_Counts.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_filtered_per_sequence_gc_content_plot_Percentages.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_filtered_per_sequence_quality_scores_plot.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_filtered_sequence_counts_plot-cnt.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_filtered_sequence_counts_plot-pct.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_filtered_sequence_duplication_levels_plot.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_filtered_top_overrepresented_sequences_table.pdf", "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_raw-status-check-heatmap.pdf", "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_raw_adapter_content_plot.pdf", "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_raw_overrepresented_sequences_plot.pdf", @@ -478,12 +531,26 @@ "multiqc/star_salmon/multiqc_report_plots/pdf/star_salmon_deseq2_pca.pdf", "multiqc/star_salmon/multiqc_report_plots/pdf/star_summary_table.pdf", "multiqc/star_salmon/multiqc_report_plots/png", + "multiqc/star_salmon/multiqc_report_plots/png/bbmap-bbsplit_plot-cnt.png", + "multiqc/star_salmon/multiqc_report_plots/png/bbmap-bbsplit_plot-pct.png", + "multiqc/star_salmon/multiqc_report_plots/png/bbsplit_stats_table.png", "multiqc/star_salmon/multiqc_report_plots/png/cutadapt_filtered_reads_plot-cnt.png", "multiqc/star_salmon/multiqc_report_plots/png/cutadapt_filtered_reads_plot-pct.png", "multiqc/star_salmon/multiqc_report_plots/png/cutadapt_trimmed_sequences_plot_3_Counts.png", "multiqc/star_salmon/multiqc_report_plots/png/cutadapt_trimmed_sequences_plot_3_Obs_Exp.png", "multiqc/star_salmon/multiqc_report_plots/png/dupradar.png", "multiqc/star_salmon/multiqc_report_plots/png/fail_strand_check_table.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_filtered-status-check-heatmap.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_filtered_overrepresented_sequences_plot.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_filtered_per_base_n_content_plot.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_filtered_per_base_sequence_quality_plot.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_filtered_per_sequence_gc_content_plot_Counts.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_filtered_per_sequence_gc_content_plot_Percentages.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_filtered_per_sequence_quality_scores_plot.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_filtered_sequence_counts_plot-cnt.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_filtered_sequence_counts_plot-pct.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_filtered_sequence_duplication_levels_plot.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_filtered_top_overrepresented_sequences_table.png", "multiqc/star_salmon/multiqc_report_plots/png/fastqc_raw-status-check-heatmap.png", "multiqc/star_salmon/multiqc_report_plots/png/fastqc_raw_adapter_content_plot.png", "multiqc/star_salmon/multiqc_report_plots/png/fastqc_raw_overrepresented_sequences_plot.png", @@ -550,12 +617,26 @@ "multiqc/star_salmon/multiqc_report_plots/png/star_salmon_deseq2_pca.png", "multiqc/star_salmon/multiqc_report_plots/png/star_summary_table.png", "multiqc/star_salmon/multiqc_report_plots/svg", + "multiqc/star_salmon/multiqc_report_plots/svg/bbmap-bbsplit_plot-cnt.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/bbmap-bbsplit_plot-pct.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/bbsplit_stats_table.svg", "multiqc/star_salmon/multiqc_report_plots/svg/cutadapt_filtered_reads_plot-cnt.svg", "multiqc/star_salmon/multiqc_report_plots/svg/cutadapt_filtered_reads_plot-pct.svg", "multiqc/star_salmon/multiqc_report_plots/svg/cutadapt_trimmed_sequences_plot_3_Counts.svg", "multiqc/star_salmon/multiqc_report_plots/svg/cutadapt_trimmed_sequences_plot_3_Obs_Exp.svg", "multiqc/star_salmon/multiqc_report_plots/svg/dupradar.svg", "multiqc/star_salmon/multiqc_report_plots/svg/fail_strand_check_table.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_filtered-status-check-heatmap.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_filtered_overrepresented_sequences_plot.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_filtered_per_base_n_content_plot.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_filtered_per_base_sequence_quality_plot.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_filtered_per_sequence_gc_content_plot_Counts.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_filtered_per_sequence_gc_content_plot_Percentages.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_filtered_per_sequence_quality_scores_plot.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_filtered_sequence_counts_plot-cnt.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_filtered_sequence_counts_plot-pct.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_filtered_sequence_duplication_levels_plot.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_filtered_top_overrepresented_sequences_table.svg", "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_raw-status-check-heatmap.svg", "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_raw_adapter_content_plot.svg", "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_raw_overrepresented_sequences_plot.svg", @@ -727,7 +808,7 @@ "salmon/salmon.merged.transcript_counts.tsv", "salmon/salmon.merged.transcript_lengths.tsv", "salmon/salmon.merged.transcript_tpm.tsv", - "salmon/tx2gene.tsv", + "salmon/salmon.merged.tx2gene.tsv", "star_salmon", "star_salmon/RAP1_IAA_30M_REP1", "star_salmon/RAP1_IAA_30M_REP1.markdup.sorted.bam", @@ -1134,6 +1215,8 @@ "star_salmon/rseqc/inner_distance/txt/RAP1_IAA_30M_REP1.inner_distance.txt", "star_salmon/rseqc/inner_distance/txt/RAP1_IAA_30M_REP1.inner_distance_freq.txt", "star_salmon/rseqc/inner_distance/txt/RAP1_IAA_30M_REP1.inner_distance_mean.txt", + "star_salmon/rseqc/inner_distance/txt/RAP1_UNINDUCED_REP1.inner_distance.txt", + "star_salmon/rseqc/inner_distance/txt/RAP1_UNINDUCED_REP2.inner_distance.txt", "star_salmon/rseqc/inner_distance/txt/WT_REP1.inner_distance.txt", "star_salmon/rseqc/inner_distance/txt/WT_REP1.inner_distance_freq.txt", "star_salmon/rseqc/inner_distance/txt/WT_REP1.inner_distance_mean.txt", @@ -1234,6 +1317,7 @@ "star_salmon/salmon.merged.transcript_counts.tsv", "star_salmon/salmon.merged.transcript_lengths.tsv", "star_salmon/salmon.merged.transcript_tpm.tsv", + "star_salmon/salmon.merged.tx2gene.tsv", "star_salmon/samtools_stats", "star_salmon/samtools_stats/RAP1_IAA_30M_REP1.markdup.sorted.bam.flagstat", "star_salmon/samtools_stats/RAP1_IAA_30M_REP1.markdup.sorted.bam.idxstats", @@ -1311,7 +1395,6 @@ "star_salmon/stringtie/WT_REP2.coverage.gtf", "star_salmon/stringtie/WT_REP2.gene.abundance.txt", "star_salmon/stringtie/WT_REP2.transcripts.gtf", - "star_salmon/tx2gene.tsv", "trimgalore", "trimgalore/RAP1_IAA_30M_REP1_trimmed_1.fastq.gz_trimming_report.txt", "trimgalore/RAP1_IAA_30M_REP1_trimmed_2.fastq.gz_trimming_report.txt", @@ -1338,7 +1421,6 @@ "fastqc_raw_per_sequence_quality_scores_plot.txt:md5,b5f9a02933e3065952237afd2ec9ce82", "fastqc_raw_sequence_counts_plot.txt:md5,cbae4979d5db66d3b894abcf8d1c453c", "fastqc_raw_sequence_duplication_levels_plot.txt:md5,8812cee16f6ca65e2c33635754de1772", - "fastqc_sequence_length_distribution_plot.txt:md5,6fe2c985606abad947bcca99b015ae33", "fastqc_trimmed-status-check-heatmap.txt:md5,22a03548736b88b23be6bc0c9ef1b4a6", "fastqc_trimmed_overrepresented_sequences_plot.txt:md5,c755e9d044ea1a82b2c8edde867b4878", "fastqc_trimmed_per_base_n_content_plot.txt:md5,418610c1ce119cb786ad434db75d366e", @@ -1349,7 +1431,6 @@ "fastqc_trimmed_sequence_counts_plot.txt:md5,9fd642bdd1da354f296bb8092205608f", "fastqc_trimmed_sequence_duplication_levels_plot.txt:md5,0758257b497283b1ef28171e694db6db", "multiqc_citations.txt:md5,2d2ab6df367e36e98e081c33dec187a0", - "multiqc_cutadapt.txt:md5,583b7b9ba76b26162bb9610ed746454b", "multiqc_fastqc_fastqc_raw.txt:md5,81c3c1a2575a1891a7f2a9637a0f2cc0", "multiqc_fastqc_fastqc_trimmed.txt:md5,54743154d0e8858980acffeb5b6f6a97", "multiqc_featurecounts_biotype_plot.txt:md5,fb9db2fca737fbdcd1a921e683805d77", @@ -1394,7 +1475,7 @@ "observed_bias_3p.gz:md5,92bcd0592d22a6a58d0360fc76103e56", "cmd_info.json:md5,fe66c9d876645b9260d8c2488157d4d4", "lib_format_counts.json:md5,088fd51db07022ffde47033bbd029400", - "tx2gene.tsv:md5,0e2418a69d2eba45097ebffc2f700bfe", + "salmon.merged.tx2gene.tsv:md5,0e2418a69d2eba45097ebffc2f700bfe", "ambig_info.tsv:md5,f9a605d54a0a103566f7a9b8e0867a73", "expected_bias.gz:md5,3407f87245d0003e0ffbfdf6d8c04f20", "observed_bias.gz:md5,92bcd0592d22a6a58d0360fc76103e56", @@ -1460,6 +1541,7 @@ "RAP1_UNINDUCED_REP2.infer_experiment.txt:md5,7d5705880188f9beab1939e08d6b8f40", "WT_REP1.infer_experiment.txt:md5,bf0c137f5fca06e7c40e1984a1acb06d", "WT_REP2.infer_experiment.txt:md5,82e23b329ee60709f343bc2d17d43b14", + "salmon.merged.tx2gene.tsv:md5,0e2418a69d2eba45097ebffc2f700bfe", "e2t.ctab:md5,54dd6de2daa90e973f47524a738a3d69", "e_data.ctab:md5,3f149502efe2a9d4bac98b1dd18c15e7", "i2t.ctab:md5,dda3d3ccd7d4184d947c654ae73efb7b", @@ -1479,14 +1561,13 @@ "e2t.ctab:md5,54dd6de2daa90e973f47524a738a3d69", "e_data.ctab:md5,b03f3118d1aa58fceadcb3311028e856", "i2t.ctab:md5,dda3d3ccd7d4184d947c654ae73efb7b", - "i_data.ctab:md5,041edee3193df311f621c09f4991892b", - "tx2gene.tsv:md5,0e2418a69d2eba45097ebffc2f700bfe" + "i_data.ctab:md5,041edee3193df311f621c09f4991892b" ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.6" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-08-12T11:31:43.21579283" + "timestamp": "2026-02-13T15:02:38.153367571" } } \ No newline at end of file diff --git a/tests/featurecounts_group_type.nf.test.snap b/tests/featurecounts_group_type.nf.test.snap index 1c26e8f06..cf65a0a8e 100644 --- a/tests/featurecounts_group_type.nf.test.snap +++ b/tests/featurecounts_group_type.nf.test.snap @@ -10,13 +10,10 @@ "cat": 9.5 }, "CUSTOM_CATADDITIONALFASTA": { - "python": null - }, - "CUSTOM_GETCHROMSIZES": { - "getchromsizes": 1.21 + "python": "3.12.2" }, "FQ_LINT": { - "fq": "0.12.0 (2024-07-08)" + "fq": "0.12.0" }, "GTF2BED": { "perl": "5.26.2" @@ -30,14 +27,15 @@ "GUNZIP_GTF": { "gunzip": 1.13 }, + "SAMTOOLS_FAIDX": { + "samtools": "1.22.1" + }, "STAR_GENOMEGENERATE": { "gawk": "5.1.0", "samtools": 1.21, "star": "2.7.11b" }, "TRIMGALORE": { - "cutadapt": 4.9, - "pigz": 2.8, "trimgalore": "0.6.10" }, "UNTAR_SALMON_INDEX": { @@ -85,7 +83,7 @@ "nf-test": "0.9.3", "nextflow": "25.10.2" }, - "timestamp": "2025-12-04T15:39:08.789608161" + "timestamp": "2026-02-04T16:59:46.520896834" }, "Params: --featurecounts_group_type false": { "content": [ @@ -100,17 +98,20 @@ "CUSTOM_CATADDITIONALFASTA": { "python": "3.12.2" }, - "CUSTOM_GETCHROMSIZES": { - "getchromsizes": 1.21 - }, "CUSTOM_TX2GENE": { "python": "3.10.4" }, "FQ_LINT": { - "fq": "0.12.0 (2024-07-08)" + "fq": "0.12.0" + }, + "FQ_LINT_AFTER_BBSPLIT": { + "fq": "0.12.0" + }, + "FQ_LINT_AFTER_TRIMMING": { + "fq": "0.12.0" }, "FQ_SUBSAMPLE": { - "fq": "0.12.0 (2024-07-08)" + "fq": "0.12.0" }, "GTF2BED": { "perl": "5.26.2" @@ -125,25 +126,28 @@ "gunzip": 1.13 }, "PICARD_MARKDUPLICATES": { - "picard": "3.1.1" + "picard": "3.4.0" }, "SALMON_QUANT": { "salmon": "1.10.3" }, + "SAMTOOLS_FAIDX": { + "samtools": "1.22.1" + }, "SAMTOOLS_FLAGSTAT": { - "samtools": 1.21 + "samtools": "1.22.1" }, "SAMTOOLS_IDXSTATS": { - "samtools": 1.21 + "samtools": "1.22.1" }, "SAMTOOLS_INDEX": { - "samtools": 1.21 + "samtools": "1.22.1" }, "SAMTOOLS_SORT": { - "samtools": 1.21 + "samtools": "1.22.1" }, "SAMTOOLS_STATS": { - "samtools": 1.21 + "samtools": "1.22.1" }, "SE_GENE_UNIFIED": { "bioconductor-summarizedexperiment": "1.32.0" @@ -162,8 +166,6 @@ "star": "2.7.11b" }, "TRIMGALORE": { - "cutadapt": 4.9, - "pigz": 2.8, "trimgalore": "0.6.10" }, "TXIMETA_TXIMPORT": { @@ -203,18 +205,18 @@ "fastqc/trim/WT_REP2_trimmed_2_val_2_fastqc.html", "fastqc/trim/WT_REP2_trimmed_2_val_2_fastqc.zip", "fq_lint", + "fq_lint/bbsplit", + "fq_lint/bbsplit/RAP1_IAA_30M_REP1.fq_lint.txt", + "fq_lint/bbsplit/RAP1_UNINDUCED_REP1.fq_lint.txt", + "fq_lint/bbsplit/RAP1_UNINDUCED_REP2.fq_lint.txt", + "fq_lint/bbsplit/WT_REP1.fq_lint.txt", + "fq_lint/bbsplit/WT_REP2.fq_lint.txt", "fq_lint/raw", "fq_lint/raw/RAP1_IAA_30M_REP1.fq_lint.txt", "fq_lint/raw/RAP1_UNINDUCED_REP1.fq_lint.txt", "fq_lint/raw/RAP1_UNINDUCED_REP2.fq_lint.txt", "fq_lint/raw/WT_REP1.fq_lint.txt", "fq_lint/raw/WT_REP2.fq_lint.txt", - "fq_lint/sortmerna", - "fq_lint/sortmerna/RAP1_IAA_30M_REP1.fq_lint.txt", - "fq_lint/sortmerna/RAP1_UNINDUCED_REP1.fq_lint.txt", - "fq_lint/sortmerna/RAP1_UNINDUCED_REP2.fq_lint.txt", - "fq_lint/sortmerna/WT_REP1.fq_lint.txt", - "fq_lint/sortmerna/WT_REP2.fq_lint.txt", "fq_lint/trimmed", "fq_lint/trimmed/RAP1_IAA_30M_REP1.fq_lint.txt", "fq_lint/trimmed/RAP1_UNINDUCED_REP1.fq_lint.txt", @@ -225,6 +227,9 @@ "multiqc/star_salmon", "multiqc/star_salmon/multiqc_report.html", "multiqc/star_salmon/multiqc_report_data", + "multiqc/star_salmon/multiqc_report_data/bbmap-bbsplit_plot.txt", + "multiqc/star_salmon/multiqc_report_data/bbmap.txt", + "multiqc/star_salmon/multiqc_report_data/bbsplit_stats_table.txt", "multiqc/star_salmon/multiqc_report_data/cutadapt_filtered_reads_plot.txt", "multiqc/star_salmon/multiqc_report_data/cutadapt_trimmed_sequences_plot_3_Counts.txt", "multiqc/star_salmon/multiqc_report_data/cutadapt_trimmed_sequences_plot_3_Obs_Exp.txt", @@ -272,6 +277,9 @@ "multiqc/star_salmon/multiqc_report_data/star_summary_table.txt", "multiqc/star_salmon/multiqc_report_plots", "multiqc/star_salmon/multiqc_report_plots/pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/bbmap-bbsplit_plot-cnt.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/bbmap-bbsplit_plot-pct.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/bbsplit_stats_table.pdf", "multiqc/star_salmon/multiqc_report_plots/pdf/cutadapt_filtered_reads_plot-cnt.pdf", "multiqc/star_salmon/multiqc_report_plots/pdf/cutadapt_filtered_reads_plot-pct.pdf", "multiqc/star_salmon/multiqc_report_plots/pdf/cutadapt_trimmed_sequences_plot_3_Counts.pdf", @@ -306,6 +314,9 @@ "multiqc/star_salmon/multiqc_report_plots/pdf/star_alignment_plot-pct.pdf", "multiqc/star_salmon/multiqc_report_plots/pdf/star_summary_table.pdf", "multiqc/star_salmon/multiqc_report_plots/png", + "multiqc/star_salmon/multiqc_report_plots/png/bbmap-bbsplit_plot-cnt.png", + "multiqc/star_salmon/multiqc_report_plots/png/bbmap-bbsplit_plot-pct.png", + "multiqc/star_salmon/multiqc_report_plots/png/bbsplit_stats_table.png", "multiqc/star_salmon/multiqc_report_plots/png/cutadapt_filtered_reads_plot-cnt.png", "multiqc/star_salmon/multiqc_report_plots/png/cutadapt_filtered_reads_plot-pct.png", "multiqc/star_salmon/multiqc_report_plots/png/cutadapt_trimmed_sequences_plot_3_Counts.png", @@ -340,6 +351,9 @@ "multiqc/star_salmon/multiqc_report_plots/png/star_alignment_plot-pct.png", "multiqc/star_salmon/multiqc_report_plots/png/star_summary_table.png", "multiqc/star_salmon/multiqc_report_plots/svg", + "multiqc/star_salmon/multiqc_report_plots/svg/bbmap-bbsplit_plot-cnt.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/bbmap-bbsplit_plot-pct.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/bbsplit_stats_table.svg", "multiqc/star_salmon/multiqc_report_plots/svg/cutadapt_filtered_reads_plot-cnt.svg", "multiqc/star_salmon/multiqc_report_plots/svg/cutadapt_filtered_reads_plot-pct.svg", "multiqc/star_salmon/multiqc_report_plots/svg/cutadapt_trimmed_sequences_plot_3_Counts.svg", @@ -466,7 +480,7 @@ "salmon/salmon.merged.transcript_counts.tsv", "salmon/salmon.merged.transcript_lengths.tsv", "salmon/salmon.merged.transcript_tpm.tsv", - "salmon/tx2gene.tsv", + "salmon/salmon.merged.tx2gene.tsv", "star_salmon", "star_salmon/RAP1_IAA_30M_REP1", "star_salmon/RAP1_IAA_30M_REP1.markdup.sorted.bam", @@ -590,6 +604,7 @@ "star_salmon/salmon.merged.transcript_counts.tsv", "star_salmon/salmon.merged.transcript_lengths.tsv", "star_salmon/salmon.merged.transcript_tpm.tsv", + "star_salmon/salmon.merged.tx2gene.tsv", "star_salmon/samtools_stats", "star_salmon/samtools_stats/RAP1_IAA_30M_REP1.markdup.sorted.bam.flagstat", "star_salmon/samtools_stats/RAP1_IAA_30M_REP1.markdup.sorted.bam.idxstats", @@ -621,7 +636,6 @@ "star_salmon/samtools_stats/WT_REP2.sorted.bam.flagstat", "star_salmon/samtools_stats/WT_REP2.sorted.bam.idxstats", "star_salmon/samtools_stats/WT_REP2.sorted.bam.stats", - "star_salmon/tx2gene.tsv", "trimgalore", "trimgalore/RAP1_IAA_30M_REP1_trimmed_1.fastq.gz_trimming_report.txt", "trimgalore/RAP1_IAA_30M_REP1_trimmed_2.fastq.gz_trimming_report.txt", @@ -638,7 +652,6 @@ "cutadapt_filtered_reads_plot.txt:md5,6fa381627f7c1f664f3d4b2cb79cce90", "cutadapt_trimmed_sequences_plot_3_Counts.txt:md5,13dfa866fd91dbb072689efe9aa83b1f", "cutadapt_trimmed_sequences_plot_3_Obs_Exp.txt:md5,07145dd8dd3db654859b18eb0389046c", - "fastqc_sequence_length_distribution_plot.txt:md5,6fe2c985606abad947bcca99b015ae33", "fastqc_trimmed-status-check-heatmap.txt:md5,22a03548736b88b23be6bc0c9ef1b4a6", "fastqc_trimmed_overrepresented_sequences_plot.txt:md5,c755e9d044ea1a82b2c8edde867b4878", "fastqc_trimmed_per_base_n_content_plot.txt:md5,418610c1ce119cb786ad434db75d366e", @@ -649,7 +662,6 @@ "fastqc_trimmed_sequence_counts_plot.txt:md5,9fd642bdd1da354f296bb8092205608f", "fastqc_trimmed_sequence_duplication_levels_plot.txt:md5,0758257b497283b1ef28171e694db6db", "multiqc_citations.txt:md5,ef51c78faebdd32bad296ba14406b41e", - "multiqc_cutadapt.txt:md5,583b7b9ba76b26162bb9610ed746454b", "multiqc_fastqc_fastqc_trimmed.txt:md5,54743154d0e8858980acffeb5b6f6a97", "multiqc_samtools_idxstats.txt:md5,8b8f6cb092004918c18319a8cd64eb4c", "picard_MarkIlluminaAdapters_histogram.txt:md5,d41d8cd98f00b204e9800998ecf8427e", @@ -688,7 +700,7 @@ "observed_bias_3p.gz:md5,92bcd0592d22a6a58d0360fc76103e56", "cmd_info.json:md5,fe66c9d876645b9260d8c2488157d4d4", "lib_format_counts.json:md5,088fd51db07022ffde47033bbd029400", - "tx2gene.tsv:md5,0e2418a69d2eba45097ebffc2f700bfe", + "salmon.merged.tx2gene.tsv:md5,0e2418a69d2eba45097ebffc2f700bfe", "ambig_info.tsv:md5,f9a605d54a0a103566f7a9b8e0867a73", "expected_bias.gz:md5,3407f87245d0003e0ffbfdf6d8c04f20", "observed_bias.gz:md5,92bcd0592d22a6a58d0360fc76103e56", @@ -719,13 +731,13 @@ "RAP1_UNINDUCED_REP2.SJ.out.tab:md5,1f294365343a1a5e95682792fdb77033", "WT_REP1.SJ.out.tab:md5,1350c2fa6a675bf107386c6cd3fc5204", "WT_REP2.SJ.out.tab:md5,f6cc03643a5e3c1025a5b4754eb1be23", - "tx2gene.tsv:md5,0e2418a69d2eba45097ebffc2f700bfe" + "salmon.merged.tx2gene.tsv:md5,0e2418a69d2eba45097ebffc2f700bfe" ] ], "meta": { "nf-test": "0.9.3", "nextflow": "25.10.2" }, - "timestamp": "2025-12-04T15:38:38.907598452" + "timestamp": "2026-02-26T13:59:39.142726629" } } \ No newline at end of file diff --git a/tests/hisat2.nf.test.snap b/tests/hisat2.nf.test.snap index 8144335d7..d3bac5ef6 100644 --- a/tests/hisat2.nf.test.snap +++ b/tests/hisat2.nf.test.snap @@ -10,16 +10,13 @@ "cat": 9.5 }, "CUSTOM_CATADDITIONALFASTA": { - "python": null - }, - "CUSTOM_GETCHROMSIZES": { - "getchromsizes": 1.21 + "python": "3.12.2" }, "FASTQC": { "fastqc": "0.12.1" }, "FQ_LINT": { - "fq": "0.12.0 (2024-07-08)" + "fq": "0.12.0" }, "GTF2BED": { "perl": "5.26.2" @@ -36,9 +33,10 @@ "HISAT2_EXTRACTSPLICESITES": { "hisat2": "2.2.1" }, + "SAMTOOLS_FAIDX": { + "samtools": "1.22.1" + }, "TRIMGALORE": { - "cutadapt": 4.9, - "pigz": 2.8, "trimgalore": "0.6.10" }, "UNTAR_HISAT2_INDEX": { @@ -97,14 +95,14 @@ ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.4" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-01-28T13:46:14.476085587" + "timestamp": "2026-02-04T17:02:38.159554469" }, "Params: --aligner hisat2": { "content": [ - 175, + 180, { "BBMAP_BBSPLIT": { "bbmap": 39.18 @@ -115,9 +113,6 @@ "CUSTOM_CATADDITIONALFASTA": { "python": "3.12.2" }, - "CUSTOM_GETCHROMSIZES": { - "getchromsizes": 1.21 - }, "CUSTOM_TX2GENE": { "python": "3.10.4" }, @@ -126,16 +121,25 @@ "r-base": "4.4.2" }, "DUPRADAR": { - "bioconductor-dupradar": "1.32.0" + "bioconductor-dupradar": "1.38.0" }, "FASTQC": { "fastqc": "0.12.1" }, + "FASTQC_FILTERED": { + "fastqc": "0.12.1" + }, "FQ_LINT": { - "fq": "0.12.0 (2024-07-08)" + "fq": "0.12.0" + }, + "FQ_LINT_AFTER_BBSPLIT": { + "fq": "0.12.0" + }, + "FQ_LINT_AFTER_TRIMMING": { + "fq": "0.12.0" }, "FQ_SUBSAMPLE": { - "fq": "0.12.0 (2024-07-08)" + "fq": "0.12.0" }, "GTF2BED": { "perl": "5.26.2" @@ -160,52 +164,55 @@ "python": "3.9.5" }, "PICARD_MARKDUPLICATES": { - "picard": "3.1.1" + "picard": "3.4.0" }, "QUALIMAP_RNASEQ": { "qualimap": 2.3 }, "RSEQC_BAMSTAT": { - "rseqc": "5.0.2" + "rseqc": "5.0.4" }, "RSEQC_INFEREXPERIMENT": { - "rseqc": "5.0.2" + "rseqc": "5.0.4" }, "RSEQC_INNERDISTANCE": { - "rseqc": "5.0.2" + "rseqc": "5.0.4" }, "RSEQC_JUNCTIONANNOTATION": { - "rseqc": "5.0.2" + "rseqc": "5.0.4" }, "RSEQC_JUNCTIONSATURATION": { - "rseqc": "5.0.2" + "rseqc": "5.0.4" }, "RSEQC_READDISTRIBUTION": { - "rseqc": "5.0.2" + "rseqc": "5.0.4" }, "RSEQC_READDUPLICATION": { - "rseqc": "5.0.2" + "rseqc": "5.0.4" }, "SALMON_QUANT": { "salmon": "1.10.3" }, + "SAMTOOLS_FAIDX": { + "samtools": "1.22.1" + }, "SAMTOOLS_FLAGSTAT": { - "samtools": 1.21 + "samtools": "1.22.1" }, "SAMTOOLS_IDXSTATS": { - "samtools": 1.21 + "samtools": "1.22.1" }, "SAMTOOLS_INDEX": { - "samtools": 1.21 + "samtools": "1.22.1" }, "SAMTOOLS_SORT": { - "samtools": 1.21 + "samtools": "1.22.1" }, "SAMTOOLS_SORT_QUALIMAP": { - "samtools": 1.21 + "samtools": "1.22.1" }, "SAMTOOLS_STATS": { - "samtools": 1.21 + "samtools": "1.22.1" }, "SE_GENE_UNIFIED": { "bioconductor-summarizedexperiment": "1.32.0" @@ -220,8 +227,6 @@ "subread": "2.0.6" }, "TRIMGALORE": { - "cutadapt": 4.9, - "pigz": 2.8, "trimgalore": "0.6.10" }, "TXIMETA_TXIMPORT": { @@ -246,6 +251,23 @@ "custom/out/genome_gfp.fasta", "custom/out/genome_gfp.gtf", "fastqc", + "fastqc/filtered", + "fastqc/filtered/RAP1_IAA_30M_REP1_filtered_1_fastqc.html", + "fastqc/filtered/RAP1_IAA_30M_REP1_filtered_1_fastqc.zip", + "fastqc/filtered/RAP1_IAA_30M_REP1_filtered_2_fastqc.html", + "fastqc/filtered/RAP1_IAA_30M_REP1_filtered_2_fastqc.zip", + "fastqc/filtered/RAP1_UNINDUCED_REP1_filtered_fastqc.html", + "fastqc/filtered/RAP1_UNINDUCED_REP1_filtered_fastqc.zip", + "fastqc/filtered/RAP1_UNINDUCED_REP2_filtered_fastqc.html", + "fastqc/filtered/RAP1_UNINDUCED_REP2_filtered_fastqc.zip", + "fastqc/filtered/WT_REP1_filtered_1_fastqc.html", + "fastqc/filtered/WT_REP1_filtered_1_fastqc.zip", + "fastqc/filtered/WT_REP1_filtered_2_fastqc.html", + "fastqc/filtered/WT_REP1_filtered_2_fastqc.zip", + "fastqc/filtered/WT_REP2_filtered_1_fastqc.html", + "fastqc/filtered/WT_REP2_filtered_1_fastqc.zip", + "fastqc/filtered/WT_REP2_filtered_2_fastqc.html", + "fastqc/filtered/WT_REP2_filtered_2_fastqc.zip", "fastqc/raw", "fastqc/raw/RAP1_IAA_30M_REP1_raw_1_fastqc.html", "fastqc/raw/RAP1_IAA_30M_REP1_raw_1_fastqc.zip", @@ -281,18 +303,18 @@ "fastqc/trim/WT_REP2_trimmed_2_val_2_fastqc.html", "fastqc/trim/WT_REP2_trimmed_2_val_2_fastqc.zip", "fq_lint", + "fq_lint/bbsplit", + "fq_lint/bbsplit/RAP1_IAA_30M_REP1.fq_lint.txt", + "fq_lint/bbsplit/RAP1_UNINDUCED_REP1.fq_lint.txt", + "fq_lint/bbsplit/RAP1_UNINDUCED_REP2.fq_lint.txt", + "fq_lint/bbsplit/WT_REP1.fq_lint.txt", + "fq_lint/bbsplit/WT_REP2.fq_lint.txt", "fq_lint/raw", "fq_lint/raw/RAP1_IAA_30M_REP1.fq_lint.txt", "fq_lint/raw/RAP1_UNINDUCED_REP1.fq_lint.txt", "fq_lint/raw/RAP1_UNINDUCED_REP2.fq_lint.txt", "fq_lint/raw/WT_REP1.fq_lint.txt", "fq_lint/raw/WT_REP2.fq_lint.txt", - "fq_lint/sortmerna", - "fq_lint/sortmerna/RAP1_IAA_30M_REP1.fq_lint.txt", - "fq_lint/sortmerna/RAP1_UNINDUCED_REP1.fq_lint.txt", - "fq_lint/sortmerna/RAP1_UNINDUCED_REP2.fq_lint.txt", - "fq_lint/sortmerna/WT_REP1.fq_lint.txt", - "fq_lint/sortmerna/WT_REP2.fq_lint.txt", "fq_lint/trimmed", "fq_lint/trimmed/RAP1_IAA_30M_REP1.fq_lint.txt", "fq_lint/trimmed/RAP1_UNINDUCED_REP1.fq_lint.txt", @@ -591,6 +613,8 @@ "hisat2/rseqc/inner_distance/txt/RAP1_IAA_30M_REP1.inner_distance.txt", "hisat2/rseqc/inner_distance/txt/RAP1_IAA_30M_REP1.inner_distance_freq.txt", "hisat2/rseqc/inner_distance/txt/RAP1_IAA_30M_REP1.inner_distance_mean.txt", + "hisat2/rseqc/inner_distance/txt/RAP1_UNINDUCED_REP1.inner_distance.txt", + "hisat2/rseqc/inner_distance/txt/RAP1_UNINDUCED_REP2.inner_distance.txt", "hisat2/rseqc/inner_distance/txt/WT_REP1.inner_distance.txt", "hisat2/rseqc/inner_distance/txt/WT_REP1.inner_distance_freq.txt", "hisat2/rseqc/inner_distance/txt/WT_REP1.inner_distance_mean.txt", @@ -762,9 +786,22 @@ "multiqc/hisat2", "multiqc/hisat2/multiqc_report.html", "multiqc/hisat2/multiqc_report_data", + "multiqc/hisat2/multiqc_report_data/bbmap-bbsplit_plot.txt", + "multiqc/hisat2/multiqc_report_data/bbmap.txt", + "multiqc/hisat2/multiqc_report_data/bbsplit_stats_table.txt", "multiqc/hisat2/multiqc_report_data/cutadapt_filtered_reads_plot.txt", "multiqc/hisat2/multiqc_report_data/cutadapt_trimmed_sequences_plot_3_Counts.txt", "multiqc/hisat2/multiqc_report_data/cutadapt_trimmed_sequences_plot_3_Obs_Exp.txt", + "multiqc/hisat2/multiqc_report_data/fastqc_filtered-status-check-heatmap.txt", + "multiqc/hisat2/multiqc_report_data/fastqc_filtered_overrepresented_sequences_plot.txt", + "multiqc/hisat2/multiqc_report_data/fastqc_filtered_per_base_n_content_plot.txt", + "multiqc/hisat2/multiqc_report_data/fastqc_filtered_per_base_sequence_quality_plot.txt", + "multiqc/hisat2/multiqc_report_data/fastqc_filtered_per_sequence_gc_content_plot_Counts.txt", + "multiqc/hisat2/multiqc_report_data/fastqc_filtered_per_sequence_gc_content_plot_Percentages.txt", + "multiqc/hisat2/multiqc_report_data/fastqc_filtered_per_sequence_quality_scores_plot.txt", + "multiqc/hisat2/multiqc_report_data/fastqc_filtered_sequence_counts_plot.txt", + "multiqc/hisat2/multiqc_report_data/fastqc_filtered_sequence_duplication_levels_plot.txt", + "multiqc/hisat2/multiqc_report_data/fastqc_filtered_top_overrepresented_sequences_table.txt", "multiqc/hisat2/multiqc_report_data/fastqc_raw-status-check-heatmap.txt", "multiqc/hisat2/multiqc_report_data/fastqc_raw_adapter_content_plot.txt", "multiqc/hisat2/multiqc_report_data/fastqc_raw_overrepresented_sequences_plot.txt", @@ -799,6 +836,7 @@ "multiqc/hisat2/multiqc_report_data/multiqc_data.json", "multiqc/hisat2/multiqc_report_data/multiqc_dupradar.txt", "multiqc/hisat2/multiqc_report_data/multiqc_fail_strand_check_table.txt", + "multiqc/hisat2/multiqc_report_data/multiqc_fastqc_fastqc_filtered.txt", "multiqc/hisat2/multiqc_report_data/multiqc_fastqc_fastqc_raw.txt", "multiqc/hisat2/multiqc_report_data/multiqc_fastqc_fastqc_trimmed.txt", "multiqc/hisat2/multiqc_report_data/multiqc_featurecounts_biotype_plot.txt", @@ -851,12 +889,26 @@ "multiqc/hisat2/multiqc_report_data/samtools_alignment_plot.txt", "multiqc/hisat2/multiqc_report_plots", "multiqc/hisat2/multiqc_report_plots/pdf", + "multiqc/hisat2/multiqc_report_plots/pdf/bbmap-bbsplit_plot-cnt.pdf", + "multiqc/hisat2/multiqc_report_plots/pdf/bbmap-bbsplit_plot-pct.pdf", + "multiqc/hisat2/multiqc_report_plots/pdf/bbsplit_stats_table.pdf", "multiqc/hisat2/multiqc_report_plots/pdf/cutadapt_filtered_reads_plot-cnt.pdf", "multiqc/hisat2/multiqc_report_plots/pdf/cutadapt_filtered_reads_plot-pct.pdf", "multiqc/hisat2/multiqc_report_plots/pdf/cutadapt_trimmed_sequences_plot_3_Counts.pdf", "multiqc/hisat2/multiqc_report_plots/pdf/cutadapt_trimmed_sequences_plot_3_Obs_Exp.pdf", "multiqc/hisat2/multiqc_report_plots/pdf/dupradar.pdf", "multiqc/hisat2/multiqc_report_plots/pdf/fail_strand_check_table.pdf", + "multiqc/hisat2/multiqc_report_plots/pdf/fastqc_filtered-status-check-heatmap.pdf", + "multiqc/hisat2/multiqc_report_plots/pdf/fastqc_filtered_overrepresented_sequences_plot.pdf", + "multiqc/hisat2/multiqc_report_plots/pdf/fastqc_filtered_per_base_n_content_plot.pdf", + "multiqc/hisat2/multiqc_report_plots/pdf/fastqc_filtered_per_base_sequence_quality_plot.pdf", + "multiqc/hisat2/multiqc_report_plots/pdf/fastqc_filtered_per_sequence_gc_content_plot_Counts.pdf", + "multiqc/hisat2/multiqc_report_plots/pdf/fastqc_filtered_per_sequence_gc_content_plot_Percentages.pdf", + "multiqc/hisat2/multiqc_report_plots/pdf/fastqc_filtered_per_sequence_quality_scores_plot.pdf", + "multiqc/hisat2/multiqc_report_plots/pdf/fastqc_filtered_sequence_counts_plot-cnt.pdf", + "multiqc/hisat2/multiqc_report_plots/pdf/fastqc_filtered_sequence_counts_plot-pct.pdf", + "multiqc/hisat2/multiqc_report_plots/pdf/fastqc_filtered_sequence_duplication_levels_plot.pdf", + "multiqc/hisat2/multiqc_report_plots/pdf/fastqc_filtered_top_overrepresented_sequences_table.pdf", "multiqc/hisat2/multiqc_report_plots/pdf/fastqc_raw-status-check-heatmap.pdf", "multiqc/hisat2/multiqc_report_plots/pdf/fastqc_raw_adapter_content_plot.pdf", "multiqc/hisat2/multiqc_report_plots/pdf/fastqc_raw_overrepresented_sequences_plot.pdf", @@ -922,12 +974,26 @@ "multiqc/hisat2/multiqc_report_plots/pdf/samtools_alignment_plot-cnt.pdf", "multiqc/hisat2/multiqc_report_plots/pdf/samtools_alignment_plot-pct.pdf", "multiqc/hisat2/multiqc_report_plots/png", + "multiqc/hisat2/multiqc_report_plots/png/bbmap-bbsplit_plot-cnt.png", + "multiqc/hisat2/multiqc_report_plots/png/bbmap-bbsplit_plot-pct.png", + "multiqc/hisat2/multiqc_report_plots/png/bbsplit_stats_table.png", "multiqc/hisat2/multiqc_report_plots/png/cutadapt_filtered_reads_plot-cnt.png", "multiqc/hisat2/multiqc_report_plots/png/cutadapt_filtered_reads_plot-pct.png", "multiqc/hisat2/multiqc_report_plots/png/cutadapt_trimmed_sequences_plot_3_Counts.png", "multiqc/hisat2/multiqc_report_plots/png/cutadapt_trimmed_sequences_plot_3_Obs_Exp.png", "multiqc/hisat2/multiqc_report_plots/png/dupradar.png", "multiqc/hisat2/multiqc_report_plots/png/fail_strand_check_table.png", + "multiqc/hisat2/multiqc_report_plots/png/fastqc_filtered-status-check-heatmap.png", + "multiqc/hisat2/multiqc_report_plots/png/fastqc_filtered_overrepresented_sequences_plot.png", + "multiqc/hisat2/multiqc_report_plots/png/fastqc_filtered_per_base_n_content_plot.png", + "multiqc/hisat2/multiqc_report_plots/png/fastqc_filtered_per_base_sequence_quality_plot.png", + "multiqc/hisat2/multiqc_report_plots/png/fastqc_filtered_per_sequence_gc_content_plot_Counts.png", + "multiqc/hisat2/multiqc_report_plots/png/fastqc_filtered_per_sequence_gc_content_plot_Percentages.png", + "multiqc/hisat2/multiqc_report_plots/png/fastqc_filtered_per_sequence_quality_scores_plot.png", + "multiqc/hisat2/multiqc_report_plots/png/fastqc_filtered_sequence_counts_plot-cnt.png", + "multiqc/hisat2/multiqc_report_plots/png/fastqc_filtered_sequence_counts_plot-pct.png", + "multiqc/hisat2/multiqc_report_plots/png/fastqc_filtered_sequence_duplication_levels_plot.png", + "multiqc/hisat2/multiqc_report_plots/png/fastqc_filtered_top_overrepresented_sequences_table.png", "multiqc/hisat2/multiqc_report_plots/png/fastqc_raw-status-check-heatmap.png", "multiqc/hisat2/multiqc_report_plots/png/fastqc_raw_adapter_content_plot.png", "multiqc/hisat2/multiqc_report_plots/png/fastqc_raw_overrepresented_sequences_plot.png", @@ -993,12 +1059,26 @@ "multiqc/hisat2/multiqc_report_plots/png/samtools_alignment_plot-cnt.png", "multiqc/hisat2/multiqc_report_plots/png/samtools_alignment_plot-pct.png", "multiqc/hisat2/multiqc_report_plots/svg", + "multiqc/hisat2/multiqc_report_plots/svg/bbmap-bbsplit_plot-cnt.svg", + "multiqc/hisat2/multiqc_report_plots/svg/bbmap-bbsplit_plot-pct.svg", + "multiqc/hisat2/multiqc_report_plots/svg/bbsplit_stats_table.svg", "multiqc/hisat2/multiqc_report_plots/svg/cutadapt_filtered_reads_plot-cnt.svg", "multiqc/hisat2/multiqc_report_plots/svg/cutadapt_filtered_reads_plot-pct.svg", "multiqc/hisat2/multiqc_report_plots/svg/cutadapt_trimmed_sequences_plot_3_Counts.svg", "multiqc/hisat2/multiqc_report_plots/svg/cutadapt_trimmed_sequences_plot_3_Obs_Exp.svg", "multiqc/hisat2/multiqc_report_plots/svg/dupradar.svg", "multiqc/hisat2/multiqc_report_plots/svg/fail_strand_check_table.svg", + "multiqc/hisat2/multiqc_report_plots/svg/fastqc_filtered-status-check-heatmap.svg", + "multiqc/hisat2/multiqc_report_plots/svg/fastqc_filtered_overrepresented_sequences_plot.svg", + "multiqc/hisat2/multiqc_report_plots/svg/fastqc_filtered_per_base_n_content_plot.svg", + "multiqc/hisat2/multiqc_report_plots/svg/fastqc_filtered_per_base_sequence_quality_plot.svg", + "multiqc/hisat2/multiqc_report_plots/svg/fastqc_filtered_per_sequence_gc_content_plot_Counts.svg", + "multiqc/hisat2/multiqc_report_plots/svg/fastqc_filtered_per_sequence_gc_content_plot_Percentages.svg", + "multiqc/hisat2/multiqc_report_plots/svg/fastqc_filtered_per_sequence_quality_scores_plot.svg", + "multiqc/hisat2/multiqc_report_plots/svg/fastqc_filtered_sequence_counts_plot-cnt.svg", + "multiqc/hisat2/multiqc_report_plots/svg/fastqc_filtered_sequence_counts_plot-pct.svg", + "multiqc/hisat2/multiqc_report_plots/svg/fastqc_filtered_sequence_duplication_levels_plot.svg", + "multiqc/hisat2/multiqc_report_plots/svg/fastqc_filtered_top_overrepresented_sequences_table.svg", "multiqc/hisat2/multiqc_report_plots/svg/fastqc_raw-status-check-heatmap.svg", "multiqc/hisat2/multiqc_report_plots/svg/fastqc_raw_adapter_content_plot.svg", "multiqc/hisat2/multiqc_report_plots/svg/fastqc_raw_overrepresented_sequences_plot.svg", @@ -1169,7 +1249,7 @@ "salmon/salmon.merged.transcript_counts.tsv", "salmon/salmon.merged.transcript_lengths.tsv", "salmon/salmon.merged.transcript_tpm.tsv", - "salmon/tx2gene.tsv", + "salmon/salmon.merged.tx2gene.tsv", "trimgalore", "trimgalore/RAP1_IAA_30M_REP1_trimmed_1.fastq.gz_trimming_report.txt", "trimgalore/RAP1_IAA_30M_REP1_trimmed_2.fastq.gz_trimming_report.txt", @@ -1251,7 +1331,6 @@ "fastqc_raw_per_sequence_quality_scores_plot.txt:md5,b5f9a02933e3065952237afd2ec9ce82", "fastqc_raw_sequence_counts_plot.txt:md5,cbae4979d5db66d3b894abcf8d1c453c", "fastqc_raw_sequence_duplication_levels_plot.txt:md5,8812cee16f6ca65e2c33635754de1772", - "fastqc_sequence_length_distribution_plot.txt:md5,6fe2c985606abad947bcca99b015ae33", "fastqc_trimmed-status-check-heatmap.txt:md5,22a03548736b88b23be6bc0c9ef1b4a6", "fastqc_trimmed_overrepresented_sequences_plot.txt:md5,c755e9d044ea1a82b2c8edde867b4878", "fastqc_trimmed_per_base_n_content_plot.txt:md5,418610c1ce119cb786ad434db75d366e", @@ -1262,7 +1341,6 @@ "fastqc_trimmed_sequence_counts_plot.txt:md5,9fd642bdd1da354f296bb8092205608f", "fastqc_trimmed_sequence_duplication_levels_plot.txt:md5,0758257b497283b1ef28171e694db6db", "multiqc_citations.txt:md5,da5043f8ab9b5bd51d91ccf3111c655e", - "multiqc_cutadapt.txt:md5,583b7b9ba76b26162bb9610ed746454b", "multiqc_fastqc_fastqc_raw.txt:md5,81c3c1a2575a1891a7f2a9637a0f2cc0", "multiqc_fastqc_fastqc_trimmed.txt:md5,54743154d0e8858980acffeb5b6f6a97", "multiqc_featurecounts_biotype_plot.txt:md5,6d251bec0231afccd0682e454a3b17bc", @@ -1307,13 +1385,13 @@ "observed_bias_3p.gz:md5,92bcd0592d22a6a58d0360fc76103e56", "cmd_info.json:md5,fe66c9d876645b9260d8c2488157d4d4", "lib_format_counts.json:md5,088fd51db07022ffde47033bbd029400", - "tx2gene.tsv:md5,0e2418a69d2eba45097ebffc2f700bfe" + "salmon.merged.tx2gene.tsv:md5,0e2418a69d2eba45097ebffc2f700bfe" ] ], "meta": { "nf-test": "0.9.3", "nextflow": "25.10.2" }, - "timestamp": "2025-12-04T15:43:24.360940596" + "timestamp": "2026-02-26T14:02:51.500913235" } } \ No newline at end of file diff --git a/tests/kallisto.nf.test.snap b/tests/kallisto.nf.test.snap index c961527ec..02415a48d 100644 --- a/tests/kallisto.nf.test.snap +++ b/tests/kallisto.nf.test.snap @@ -9,17 +9,20 @@ "CAT_FASTQ": { "cat": 9.5 }, - "CUSTOM_GETCHROMSIZES": { - "getchromsizes": 1.21 - }, "CUSTOM_TX2GENE": { "python": "3.10.4" }, "FQ_LINT": { - "fq": "0.12.0 (2024-07-08)" + "fq": "0.12.0" + }, + "FQ_LINT_AFTER_BBSPLIT": { + "fq": "0.12.0" + }, + "FQ_LINT_AFTER_TRIMMING": { + "fq": "0.12.0" }, "FQ_SUBSAMPLE": { - "fq": "0.12.0 (2024-07-08)" + "fq": "0.12.0" }, "GTF2BED": { "perl": "5.26.2" @@ -43,6 +46,9 @@ "SALMON_QUANT": { "salmon": "1.10.3" }, + "SAMTOOLS_FAIDX": { + "samtools": "1.22.1" + }, "SE_GENE_UNIFIED": { "bioconductor-summarizedexperiment": "1.32.0" }, @@ -50,8 +56,6 @@ "bioconductor-summarizedexperiment": "1.32.0" }, "TRIMGALORE": { - "cutadapt": 4.9, - "pigz": 2.8, "trimgalore": "0.6.10" }, "TXIMETA_TXIMPORT": { @@ -87,18 +91,18 @@ "fastqc/trim/WT_REP2_trimmed_2_val_2_fastqc.html", "fastqc/trim/WT_REP2_trimmed_2_val_2_fastqc.zip", "fq_lint", + "fq_lint/bbsplit", + "fq_lint/bbsplit/RAP1_IAA_30M_REP1.fq_lint.txt", + "fq_lint/bbsplit/RAP1_UNINDUCED_REP1.fq_lint.txt", + "fq_lint/bbsplit/RAP1_UNINDUCED_REP2.fq_lint.txt", + "fq_lint/bbsplit/WT_REP1.fq_lint.txt", + "fq_lint/bbsplit/WT_REP2.fq_lint.txt", "fq_lint/raw", "fq_lint/raw/RAP1_IAA_30M_REP1.fq_lint.txt", "fq_lint/raw/RAP1_UNINDUCED_REP1.fq_lint.txt", "fq_lint/raw/RAP1_UNINDUCED_REP2.fq_lint.txt", "fq_lint/raw/WT_REP1.fq_lint.txt", "fq_lint/raw/WT_REP2.fq_lint.txt", - "fq_lint/sortmerna", - "fq_lint/sortmerna/RAP1_IAA_30M_REP1.fq_lint.txt", - "fq_lint/sortmerna/RAP1_UNINDUCED_REP1.fq_lint.txt", - "fq_lint/sortmerna/RAP1_UNINDUCED_REP2.fq_lint.txt", - "fq_lint/sortmerna/WT_REP1.fq_lint.txt", - "fq_lint/sortmerna/WT_REP2.fq_lint.txt", "fq_lint/trimmed", "fq_lint/trimmed/RAP1_IAA_30M_REP1.fq_lint.txt", "fq_lint/trimmed/RAP1_UNINDUCED_REP1.fq_lint.txt", @@ -141,10 +145,13 @@ "kallisto/kallisto.merged.transcript_counts.tsv", "kallisto/kallisto.merged.transcript_lengths.tsv", "kallisto/kallisto.merged.transcript_tpm.tsv", - "kallisto/tx2gene.tsv", + "kallisto/kallisto.merged.tx2gene.tsv", "multiqc", "multiqc/multiqc_report.html", "multiqc/multiqc_report_data", + "multiqc/multiqc_report_data/bbmap-bbsplit_plot.txt", + "multiqc/multiqc_report_data/bbmap.txt", + "multiqc/multiqc_report_data/bbsplit_stats_table.txt", "multiqc/multiqc_report_data/cutadapt_filtered_reads_plot.txt", "multiqc/multiqc_report_data/cutadapt_trimmed_sequences_plot_3_Counts.txt", "multiqc/multiqc_report_data/cutadapt_trimmed_sequences_plot_3_Obs_Exp.txt", @@ -173,6 +180,9 @@ "multiqc/multiqc_report_data/multiqc_sources.txt", "multiqc/multiqc_report_plots", "multiqc/multiqc_report_plots/pdf", + "multiqc/multiqc_report_plots/pdf/bbmap-bbsplit_plot-cnt.pdf", + "multiqc/multiqc_report_plots/pdf/bbmap-bbsplit_plot-pct.pdf", + "multiqc/multiqc_report_plots/pdf/bbsplit_stats_table.pdf", "multiqc/multiqc_report_plots/pdf/cutadapt_filtered_reads_plot-cnt.pdf", "multiqc/multiqc_report_plots/pdf/cutadapt_filtered_reads_plot-pct.pdf", "multiqc/multiqc_report_plots/pdf/cutadapt_trimmed_sequences_plot_3_Counts.pdf", @@ -192,6 +202,9 @@ "multiqc/multiqc_report_plots/pdf/kallisto_alignment-cnt.pdf", "multiqc/multiqc_report_plots/pdf/kallisto_alignment-pct.pdf", "multiqc/multiqc_report_plots/png", + "multiqc/multiqc_report_plots/png/bbmap-bbsplit_plot-cnt.png", + "multiqc/multiqc_report_plots/png/bbmap-bbsplit_plot-pct.png", + "multiqc/multiqc_report_plots/png/bbsplit_stats_table.png", "multiqc/multiqc_report_plots/png/cutadapt_filtered_reads_plot-cnt.png", "multiqc/multiqc_report_plots/png/cutadapt_filtered_reads_plot-pct.png", "multiqc/multiqc_report_plots/png/cutadapt_trimmed_sequences_plot_3_Counts.png", @@ -211,6 +224,9 @@ "multiqc/multiqc_report_plots/png/kallisto_alignment-cnt.png", "multiqc/multiqc_report_plots/png/kallisto_alignment-pct.png", "multiqc/multiqc_report_plots/svg", + "multiqc/multiqc_report_plots/svg/bbmap-bbsplit_plot-cnt.svg", + "multiqc/multiqc_report_plots/svg/bbmap-bbsplit_plot-pct.svg", + "multiqc/multiqc_report_plots/svg/bbsplit_stats_table.svg", "multiqc/multiqc_report_plots/svg/cutadapt_filtered_reads_plot-cnt.svg", "multiqc/multiqc_report_plots/svg/cutadapt_filtered_reads_plot-pct.svg", "multiqc/multiqc_report_plots/svg/cutadapt_trimmed_sequences_plot_3_Counts.svg", @@ -242,11 +258,10 @@ "trimgalore/WT_REP2_trimmed_2.fastq.gz_trimming_report.txt" ], [ - "tx2gene.tsv:md5,1be389a28cc26d94b19ea918959ac72e", + "kallisto.merged.tx2gene.tsv:md5,1be389a28cc26d94b19ea918959ac72e", "cutadapt_filtered_reads_plot.txt:md5,6fa381627f7c1f664f3d4b2cb79cce90", "cutadapt_trimmed_sequences_plot_3_Counts.txt:md5,13dfa866fd91dbb072689efe9aa83b1f", "cutadapt_trimmed_sequences_plot_3_Obs_Exp.txt:md5,07145dd8dd3db654859b18eb0389046c", - "fastqc_sequence_length_distribution_plot.txt:md5,6fe2c985606abad947bcca99b015ae33", "fastqc_trimmed-status-check-heatmap.txt:md5,22a03548736b88b23be6bc0c9ef1b4a6", "fastqc_trimmed_overrepresented_sequences_plot.txt:md5,c755e9d044ea1a82b2c8edde867b4878", "fastqc_trimmed_per_base_n_content_plot.txt:md5,418610c1ce119cb786ad434db75d366e", @@ -257,15 +272,14 @@ "fastqc_trimmed_sequence_counts_plot.txt:md5,9fd642bdd1da354f296bb8092205608f", "fastqc_trimmed_sequence_duplication_levels_plot.txt:md5,0758257b497283b1ef28171e694db6db", "multiqc_citations.txt:md5,4cece87a056a29c1338277736855e6ee", - "multiqc_cutadapt.txt:md5,583b7b9ba76b26162bb9610ed746454b", "multiqc_fastqc_fastqc_trimmed.txt:md5,54743154d0e8858980acffeb5b6f6a97" ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.6" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-08-12T11:53:08.867813862" + "timestamp": "2026-02-26T14:05:29.962766301" }, "Params: --pseudo_aligner kallisto --skip_qc --skip_alignment - stub": { "content": [ @@ -277,11 +291,8 @@ "CAT_FASTQ": { "cat": 9.5 }, - "CUSTOM_GETCHROMSIZES": { - "getchromsizes": 1.21 - }, "FQ_LINT": { - "fq": "0.12.0 (2024-07-08)" + "fq": "0.12.0" }, "GTF2BED": { "perl": "5.26.2" @@ -299,9 +310,10 @@ "rsem": "1.3.1", "star": "2.7.10a" }, + "SAMTOOLS_FAIDX": { + "samtools": "1.22.1" + }, "TRIMGALORE": { - "cutadapt": 4.9, - "pigz": 2.8, "trimgalore": "0.6.10" }, "UNTAR_SALMON_INDEX": { @@ -340,9 +352,9 @@ ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.4" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-01-28T13:50:34.753130451" + "timestamp": "2026-02-04T17:10:11.124774782" } } \ No newline at end of file diff --git a/tests/min_mapped_reads.nf.test.snap b/tests/min_mapped_reads.nf.test.snap index 2a948020e..b5d493fb6 100644 --- a/tests/min_mapped_reads.nf.test.snap +++ b/tests/min_mapped_reads.nf.test.snap @@ -12,17 +12,20 @@ "CUSTOM_CATADDITIONALFASTA": { "python": "3.12.2" }, - "CUSTOM_GETCHROMSIZES": { - "getchromsizes": 1.21 - }, "CUSTOM_TX2GENE": { "python": "3.10.4" }, "FQ_LINT": { - "fq": "0.12.0 (2024-07-08)" + "fq": "0.12.0" + }, + "FQ_LINT_AFTER_BBSPLIT": { + "fq": "0.12.0" + }, + "FQ_LINT_AFTER_TRIMMING": { + "fq": "0.12.0" }, "FQ_SUBSAMPLE": { - "fq": "0.12.0 (2024-07-08)" + "fq": "0.12.0" }, "GTF2BED": { "perl": "5.26.2" @@ -37,25 +40,28 @@ "gunzip": 1.13 }, "PICARD_MARKDUPLICATES": { - "picard": "3.1.1" + "picard": "3.4.0" }, "SALMON_QUANT": { "salmon": "1.10.3" }, + "SAMTOOLS_FAIDX": { + "samtools": "1.22.1" + }, "SAMTOOLS_FLAGSTAT": { - "samtools": 1.21 + "samtools": "1.22.1" }, "SAMTOOLS_IDXSTATS": { - "samtools": 1.21 + "samtools": "1.22.1" }, "SAMTOOLS_INDEX": { - "samtools": 1.21 + "samtools": "1.22.1" }, "SAMTOOLS_SORT": { - "samtools": 1.21 + "samtools": "1.22.1" }, "SAMTOOLS_STATS": { - "samtools": 1.21 + "samtools": "1.22.1" }, "SE_GENE_UNIFIED": { "bioconductor-summarizedexperiment": "1.32.0" @@ -74,8 +80,6 @@ "star": "2.7.11b" }, "TRIMGALORE": { - "cutadapt": 4.9, - "pigz": 2.8, "trimgalore": "0.6.10" }, "TXIMETA_TXIMPORT": { @@ -115,18 +119,18 @@ "fastqc/trim/WT_REP2_trimmed_2_val_2_fastqc.html", "fastqc/trim/WT_REP2_trimmed_2_val_2_fastqc.zip", "fq_lint", + "fq_lint/bbsplit", + "fq_lint/bbsplit/RAP1_IAA_30M_REP1.fq_lint.txt", + "fq_lint/bbsplit/RAP1_UNINDUCED_REP1.fq_lint.txt", + "fq_lint/bbsplit/RAP1_UNINDUCED_REP2.fq_lint.txt", + "fq_lint/bbsplit/WT_REP1.fq_lint.txt", + "fq_lint/bbsplit/WT_REP2.fq_lint.txt", "fq_lint/raw", "fq_lint/raw/RAP1_IAA_30M_REP1.fq_lint.txt", "fq_lint/raw/RAP1_UNINDUCED_REP1.fq_lint.txt", "fq_lint/raw/RAP1_UNINDUCED_REP2.fq_lint.txt", "fq_lint/raw/WT_REP1.fq_lint.txt", "fq_lint/raw/WT_REP2.fq_lint.txt", - "fq_lint/sortmerna", - "fq_lint/sortmerna/RAP1_IAA_30M_REP1.fq_lint.txt", - "fq_lint/sortmerna/RAP1_UNINDUCED_REP1.fq_lint.txt", - "fq_lint/sortmerna/RAP1_UNINDUCED_REP2.fq_lint.txt", - "fq_lint/sortmerna/WT_REP1.fq_lint.txt", - "fq_lint/sortmerna/WT_REP2.fq_lint.txt", "fq_lint/trimmed", "fq_lint/trimmed/RAP1_IAA_30M_REP1.fq_lint.txt", "fq_lint/trimmed/RAP1_UNINDUCED_REP1.fq_lint.txt", @@ -137,6 +141,9 @@ "multiqc/star_salmon", "multiqc/star_salmon/multiqc_report.html", "multiqc/star_salmon/multiqc_report_data", + "multiqc/star_salmon/multiqc_report_data/bbmap-bbsplit_plot.txt", + "multiqc/star_salmon/multiqc_report_data/bbmap.txt", + "multiqc/star_salmon/multiqc_report_data/bbsplit_stats_table.txt", "multiqc/star_salmon/multiqc_report_data/cutadapt_filtered_reads_plot.txt", "multiqc/star_salmon/multiqc_report_data/cutadapt_trimmed_sequences_plot_3_Counts.txt", "multiqc/star_salmon/multiqc_report_data/cutadapt_trimmed_sequences_plot_3_Obs_Exp.txt", @@ -185,6 +192,9 @@ "multiqc/star_salmon/multiqc_report_data/star_summary_table.txt", "multiqc/star_salmon/multiqc_report_plots", "multiqc/star_salmon/multiqc_report_plots/pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/bbmap-bbsplit_plot-cnt.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/bbmap-bbsplit_plot-pct.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/bbsplit_stats_table.pdf", "multiqc/star_salmon/multiqc_report_plots/pdf/cutadapt_filtered_reads_plot-cnt.pdf", "multiqc/star_salmon/multiqc_report_plots/pdf/cutadapt_filtered_reads_plot-pct.pdf", "multiqc/star_salmon/multiqc_report_plots/pdf/cutadapt_trimmed_sequences_plot_3_Counts.pdf", @@ -220,6 +230,9 @@ "multiqc/star_salmon/multiqc_report_plots/pdf/star_alignment_plot-pct.pdf", "multiqc/star_salmon/multiqc_report_plots/pdf/star_summary_table.pdf", "multiqc/star_salmon/multiqc_report_plots/png", + "multiqc/star_salmon/multiqc_report_plots/png/bbmap-bbsplit_plot-cnt.png", + "multiqc/star_salmon/multiqc_report_plots/png/bbmap-bbsplit_plot-pct.png", + "multiqc/star_salmon/multiqc_report_plots/png/bbsplit_stats_table.png", "multiqc/star_salmon/multiqc_report_plots/png/cutadapt_filtered_reads_plot-cnt.png", "multiqc/star_salmon/multiqc_report_plots/png/cutadapt_filtered_reads_plot-pct.png", "multiqc/star_salmon/multiqc_report_plots/png/cutadapt_trimmed_sequences_plot_3_Counts.png", @@ -255,6 +268,9 @@ "multiqc/star_salmon/multiqc_report_plots/png/star_alignment_plot-pct.png", "multiqc/star_salmon/multiqc_report_plots/png/star_summary_table.png", "multiqc/star_salmon/multiqc_report_plots/svg", + "multiqc/star_salmon/multiqc_report_plots/svg/bbmap-bbsplit_plot-cnt.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/bbmap-bbsplit_plot-pct.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/bbsplit_stats_table.svg", "multiqc/star_salmon/multiqc_report_plots/svg/cutadapt_filtered_reads_plot-cnt.svg", "multiqc/star_salmon/multiqc_report_plots/svg/cutadapt_filtered_reads_plot-pct.svg", "multiqc/star_salmon/multiqc_report_plots/svg/cutadapt_trimmed_sequences_plot_3_Counts.svg", @@ -382,7 +398,7 @@ "salmon/salmon.merged.transcript_counts.tsv", "salmon/salmon.merged.transcript_lengths.tsv", "salmon/salmon.merged.transcript_tpm.tsv", - "salmon/tx2gene.tsv", + "salmon/salmon.merged.tx2gene.tsv", "star_salmon", "star_salmon/RAP1_IAA_30M_REP1", "star_salmon/RAP1_IAA_30M_REP1.markdup.sorted.bam", @@ -500,6 +516,7 @@ "star_salmon/salmon.merged.transcript_counts.tsv", "star_salmon/salmon.merged.transcript_lengths.tsv", "star_salmon/salmon.merged.transcript_tpm.tsv", + "star_salmon/salmon.merged.tx2gene.tsv", "star_salmon/samtools_stats", "star_salmon/samtools_stats/RAP1_IAA_30M_REP1.markdup.sorted.bam.flagstat", "star_salmon/samtools_stats/RAP1_IAA_30M_REP1.markdup.sorted.bam.idxstats", @@ -525,7 +542,6 @@ "star_salmon/samtools_stats/WT_REP2.sorted.bam.flagstat", "star_salmon/samtools_stats/WT_REP2.sorted.bam.idxstats", "star_salmon/samtools_stats/WT_REP2.sorted.bam.stats", - "star_salmon/tx2gene.tsv", "trimgalore", "trimgalore/RAP1_IAA_30M_REP1_trimmed_1.fastq.gz_trimming_report.txt", "trimgalore/RAP1_IAA_30M_REP1_trimmed_2.fastq.gz_trimming_report.txt", @@ -542,7 +558,6 @@ "cutadapt_filtered_reads_plot.txt:md5,6fa381627f7c1f664f3d4b2cb79cce90", "cutadapt_trimmed_sequences_plot_3_Counts.txt:md5,13dfa866fd91dbb072689efe9aa83b1f", "cutadapt_trimmed_sequences_plot_3_Obs_Exp.txt:md5,07145dd8dd3db654859b18eb0389046c", - "fastqc_sequence_length_distribution_plot.txt:md5,6fe2c985606abad947bcca99b015ae33", "fastqc_trimmed-status-check-heatmap.txt:md5,22a03548736b88b23be6bc0c9ef1b4a6", "fastqc_trimmed_overrepresented_sequences_plot.txt:md5,c755e9d044ea1a82b2c8edde867b4878", "fastqc_trimmed_per_base_n_content_plot.txt:md5,418610c1ce119cb786ad434db75d366e", @@ -553,7 +568,6 @@ "fastqc_trimmed_sequence_counts_plot.txt:md5,9fd642bdd1da354f296bb8092205608f", "fastqc_trimmed_sequence_duplication_levels_plot.txt:md5,0758257b497283b1ef28171e694db6db", "multiqc_citations.txt:md5,ef51c78faebdd32bad296ba14406b41e", - "multiqc_cutadapt.txt:md5,583b7b9ba76b26162bb9610ed746454b", "multiqc_fail_mapped_samples_table.txt:md5,5dd9b06f326b1a55d78878343af89927", "multiqc_fastqc_fastqc_trimmed.txt:md5,54743154d0e8858980acffeb5b6f6a97", "multiqc_samtools_idxstats.txt:md5,e172fffa5d56d0436a34523746e79a70", @@ -593,7 +607,7 @@ "observed_bias_3p.gz:md5,92bcd0592d22a6a58d0360fc76103e56", "cmd_info.json:md5,fe66c9d876645b9260d8c2488157d4d4", "lib_format_counts.json:md5,088fd51db07022ffde47033bbd029400", - "tx2gene.tsv:md5,0e2418a69d2eba45097ebffc2f700bfe", + "salmon.merged.tx2gene.tsv:md5,0e2418a69d2eba45097ebffc2f700bfe", "ambig_info.tsv:md5,f9a605d54a0a103566f7a9b8e0867a73", "expected_bias.gz:md5,3407f87245d0003e0ffbfdf6d8c04f20", "observed_bias.gz:md5,92bcd0592d22a6a58d0360fc76103e56", @@ -624,14 +638,14 @@ "RAP1_UNINDUCED_REP2.SJ.out.tab:md5,1f294365343a1a5e95682792fdb77033", "WT_REP1.SJ.out.tab:md5,1350c2fa6a675bf107386c6cd3fc5204", "WT_REP2.SJ.out.tab:md5,f6cc03643a5e3c1025a5b4754eb1be23", - "tx2gene.tsv:md5,0e2418a69d2eba45097ebffc2f700bfe" + "salmon.merged.tx2gene.tsv:md5,0e2418a69d2eba45097ebffc2f700bfe" ] ], "meta": { "nf-test": "0.9.3", "nextflow": "25.10.2" }, - "timestamp": "2025-12-11T14:08:44.90177233" + "timestamp": "2026-02-26T14:09:38.950551911" }, "Params: --min_mapped_reads 90 - stub": { "content": [ @@ -644,13 +658,10 @@ "cat": 9.5 }, "CUSTOM_CATADDITIONALFASTA": { - "python": null - }, - "CUSTOM_GETCHROMSIZES": { - "getchromsizes": 1.21 + "python": "3.12.2" }, "FQ_LINT": { - "fq": "0.12.0 (2024-07-08)" + "fq": "0.12.0" }, "GTF2BED": { "perl": "5.26.2" @@ -664,14 +675,15 @@ "GUNZIP_GTF": { "gunzip": 1.13 }, + "SAMTOOLS_FAIDX": { + "samtools": "1.22.1" + }, "STAR_GENOMEGENERATE": { "gawk": "5.1.0", "samtools": 1.21, "star": "2.7.11b" }, "TRIMGALORE": { - "cutadapt": 4.9, - "pigz": 2.8, "trimgalore": "0.6.10" }, "UNTAR_SALMON_INDEX": { @@ -719,6 +731,6 @@ "nf-test": "0.9.3", "nextflow": "25.10.2" }, - "timestamp": "2025-12-11T14:09:16.36913923" + "timestamp": "2026-02-04T17:14:31.33745271" } } \ No newline at end of file diff --git a/tests/nextflow.config b/tests/nextflow.config index 2ca0a4793..15adf5e61 100644 --- a/tests/nextflow.config +++ b/tests/nextflow.config @@ -23,22 +23,18 @@ process { time = 2.h } + // Disable fq_lint validation for tests (allows null args) withName: 'FASTQ_QC_TRIM_FILTER_SETSTRANDEDNESS:FQ_LINT_AFTER_SORTMERNA' { ext.args = null } -} + withName: 'FASTQ_QC_TRIM_FILTER_SETSTRANDEDNESS:FQ_LINT_AFTER_RIBO_REMOVAL' { + ext.args = null + } -// NOTE This is how pipeline users will use Sentieon in real world use -if (System.getenv('SENTIEON_LICSRVR_IP')) { - env.SENTIEON_LICENSE = "$SENTIEON_LICSRVR_IP" -} -//NOTE This should only happen in GitHub actions or nf-core MegaTests -if (System.getenv('SENTIEON_AUTH_MECH')) { - env.SENTIEON_AUTH_MECH = "$SENTIEON_AUTH_MECH" -} -if (secrets.SENTIEON_AUTH_DATA) { - env.SENTIEON_AUTH_DATA = secrets.SENTIEON_AUTH_DATA -} + // Parabricks requires at least 30GB of memory to run, and only one GPU is available + withName: '.*:PARABRICKS_RNA_FQ2BAM' { + memory = 30.GB + maxForks = 1 + } -// NOTE This is how pipeline users will test out Sentieon with a license file -// nextflow secrets set SENTIEON_LICENSE_BASE64 \$(cat | base64 -w 0) +} diff --git a/tests/nofasta.nf.test.snap b/tests/nofasta.nf.test.snap index afa692bb0..a4f193e0c 100644 --- a/tests/nofasta.nf.test.snap +++ b/tests/nofasta.nf.test.snap @@ -17,10 +17,13 @@ "fastqc": "0.12.1" }, "FQ_LINT": { - "fq": "0.12.0 (2024-07-08)" + "fq": "0.12.0" + }, + "FQ_LINT_AFTER_TRIMMING": { + "fq": "0.12.0" }, "FQ_SUBSAMPLE": { - "fq": "0.12.0 (2024-07-08)" + "fq": "0.12.0" }, "GTF2BED": { "perl": "5.26.2" @@ -44,8 +47,6 @@ "bioconductor-summarizedexperiment": "1.32.0" }, "TRIMGALORE": { - "cutadapt": 4.9, - "pigz": 2.8, "trimgalore": "0.6.10" }, "TXIMETA_TXIMPORT": { @@ -347,7 +348,7 @@ "salmon/salmon.merged.transcript_counts.tsv", "salmon/salmon.merged.transcript_lengths.tsv", "salmon/salmon.merged.transcript_tpm.tsv", - "salmon/tx2gene.tsv", + "salmon/salmon.merged.tx2gene.tsv", "trimgalore", "trimgalore/RAP1_IAA_30M_REP1_trimmed_1.fastq.gz_trimming_report.txt", "trimgalore/RAP1_IAA_30M_REP1_trimmed_2.fastq.gz_trimming_report.txt", @@ -372,7 +373,6 @@ "fastqc_raw_per_sequence_quality_scores_plot.txt:md5,b5f9a02933e3065952237afd2ec9ce82", "fastqc_raw_sequence_counts_plot.txt:md5,cbae4979d5db66d3b894abcf8d1c453c", "fastqc_raw_sequence_duplication_levels_plot.txt:md5,8812cee16f6ca65e2c33635754de1772", - "fastqc_sequence_length_distribution_plot.txt:md5,6fe2c985606abad947bcca99b015ae33", "fastqc_trimmed-status-check-heatmap.txt:md5,22a03548736b88b23be6bc0c9ef1b4a6", "fastqc_trimmed_overrepresented_sequences_plot.txt:md5,c755e9d044ea1a82b2c8edde867b4878", "fastqc_trimmed_per_base_n_content_plot.txt:md5,418610c1ce119cb786ad434db75d366e", @@ -383,7 +383,6 @@ "fastqc_trimmed_sequence_counts_plot.txt:md5,9fd642bdd1da354f296bb8092205608f", "fastqc_trimmed_sequence_duplication_levels_plot.txt:md5,0758257b497283b1ef28171e694db6db", "multiqc_citations.txt:md5,f789abe663d4b4214f0ddeb413a7f150", - "multiqc_cutadapt.txt:md5,583b7b9ba76b26162bb9610ed746454b", "multiqc_fastqc_fastqc_raw.txt:md5,81c3c1a2575a1891a7f2a9637a0f2cc0", "multiqc_fastqc_fastqc_trimmed.txt:md5,54743154d0e8858980acffeb5b6f6a97", "ambig_info.tsv:md5,5e9128e825dd0173d1eda78709cebb47", @@ -416,13 +415,13 @@ "observed_bias_3p.gz:md5,92bcd0592d22a6a58d0360fc76103e56", "cmd_info.json:md5,3e6d06d032abd3f5cd7e79df1b5bcde0", "lib_format_counts.json:md5,fce2c4840048c294c016f45f0df15384", - "tx2gene.tsv:md5,1be389a28cc26d94b19ea918959ac72e" + "salmon.merged.tx2gene.tsv:md5,1be389a28cc26d94b19ea918959ac72e" ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.6" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-08-12T12:03:26.721760415" + "timestamp": "2026-02-26T14:11:36.231165357" } } \ No newline at end of file diff --git a/tests/parabricks_default.nf.test b/tests/parabricks_default.nf.test new file mode 100644 index 000000000..7f71da96d --- /dev/null +++ b/tests/parabricks_default.nf.test @@ -0,0 +1,140 @@ +nextflow_pipeline { + + name "Test pipeline with Parabricks" + script "../main.nf" + tag "pipeline" + tag "parabricks" + tag "gpu" + + test("Params: parabricks star_salmon (no markdups)") { + + when { + params { + outdir = "$outputDir" + use_parabricks_star = true + skip_markduplicates = true + extra_star_align_args = '--low-memory --x3' + } + } + + then { + // stable_name: All files + folders in ${params.outdir}/ with a stable name + def stable_name = getAllFilesFromDir(params.outdir, relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}']) + // stable_path: All files in ${params.outdir}/ with stable content + def stable_path = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore', ignore: ['**/aux_info/ambig_info.tsv']) + assertAll( + { assert workflow.success}, + { assert snapshot( + // Number of successful tasks + workflow.trace.succeeded().size(), + // pipeline versions.yml file for multiqc from which Nextflow and pipeline versions are removed (all from the workflow key) + removeFromYamlMap("$outputDir/pipeline_info/nf_core_rnaseq_software_mqc_versions.yml", "Workflow"), + // All stable path name, with a relative path + stable_name, + // All files with stable contents + stable_path + ).match() } + ) + } + } + + test("Params: parabricks star_salmon (with markdups)") { + + when { + params { + outdir = "$outputDir" + use_parabricks_star = true + skip_markduplicates = false + extra_star_align_args = '--low-memory --x3' + } + } + + then { + // stable_name: All files + folders in ${params.outdir}/ with a stable name + def stable_name = getAllFilesFromDir(params.outdir, relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}']) + // stable_path: All files in ${params.outdir}/ with stable content + def stable_path = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore', ignore: ['**/aux_info/ambig_info.tsv']) + assertAll( + { assert workflow.success}, + { assert snapshot( + // Number of successful tasks + workflow.trace.succeeded().size(), + // pipeline versions.yml file for multiqc from which Nextflow and pipeline versions are removed (all from the workflow key) + removeFromYamlMap("$outputDir/pipeline_info/nf_core_rnaseq_software_mqc_versions.yml", "Workflow"), + // All stable path name, with a relative path + stable_name, + // All files with stable contents + stable_path + ).match() } + ) + } + } + + test("Params: parabricks star_salmon (no markdups) - stub") { + + options "-stub" + + when { + params { + outdir = "$outputDir" + use_parabricks_star = true + skip_markduplicates = true + extra_star_align_args = '--low-memory --x3' + } + } + + then { + // stable_name: All files + folders in ${params.outdir}/ with a stable name + def stable_name = getAllFilesFromDir(params.outdir, relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}']) + // stable_path: All files in ${params.outdir}/ with stable content + def stable_path = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore', ignore: ['**/aux_info/ambig_info.tsv']) + assertAll( + { assert workflow.success}, + { assert snapshot( + // Number of successful tasks + workflow.trace.succeeded().size(), + // pipeline versions.yml file for multiqc from which Nextflow and pipeline versions are removed (all from the workflow key) + removeFromYamlMap("$outputDir/pipeline_info/nf_core_rnaseq_software_mqc_versions.yml", "Workflow"), + // All stable path name, with a relative path + stable_name, + // All files with stable contents + stable_path + ).match() } + ) + } + } + + test("Params: parabricks star_salmon (with markdups) - stub") { + + options "-stub" + + when { + params { + outdir = "$outputDir" + use_parabricks_star = true + skip_markduplicates = false + extra_star_align_args = '--low-memory --x3' + } + } + + then { + // stable_name: All files + folders in ${params.outdir}/ with a stable name + def stable_name = getAllFilesFromDir(params.outdir, relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}']) + // stable_path: All files in ${params.outdir}/ with stable content + def stable_path = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore', ignore: ['**/aux_info/ambig_info.tsv']) + assertAll( + { assert workflow.success}, + { assert snapshot( + // Number of successful tasks + workflow.trace.succeeded().size(), + // pipeline versions.yml file for multiqc from which Nextflow and pipeline versions are removed (all from the workflow key) + removeFromYamlMap("$outputDir/pipeline_info/nf_core_rnaseq_software_mqc_versions.yml", "Workflow"), + // All stable path name, with a relative path + stable_name, + // All files with stable contents + stable_path + ).match() } + ) + } + } +} diff --git a/tests/parabricks_default.nf.test.snap b/tests/parabricks_default.nf.test.snap new file mode 100644 index 000000000..0b8445de5 --- /dev/null +++ b/tests/parabricks_default.nf.test.snap @@ -0,0 +1,1772 @@ +{ + "Params: parabricks star_salmon (no markdups)": { + "content": [ + 99, + { + "BBMAP_BBSPLIT": { + "bbmap": 39.18 + }, + "CAT_FASTQ": { + "cat": 9.5 + }, + "CUSTOM_CATADDITIONALFASTA": { + "python": "3.12.2" + }, + "CUSTOM_TX2GENE": { + "python": "3.10.4" + }, + "DESEQ2_QC_BAM_SALMON": { + "bioconductor-deseq2": "1.46.0", + "r-base": "4.4.2" + }, + "DESEQ2_QC_PSEUDO": { + "bioconductor-deseq2": "1.46.0", + "r-base": "4.4.2" + }, + "FASTQC": { + "fastqc": "0.12.1" + }, + "FASTQC_FILTERED": { + "fastqc": "0.12.1" + }, + "FQ_LINT": { + "fq": "0.12.0" + }, + "FQ_LINT_AFTER_BBSPLIT": { + "fq": "0.12.0" + }, + "FQ_LINT_AFTER_TRIMMING": { + "fq": "0.12.0" + }, + "FQ_SUBSAMPLE": { + "fq": "0.12.0" + }, + "GTF2BED": { + "perl": "5.26.2" + }, + "GTF_FILTER": { + "python": "3.9.5" + }, + "GUNZIP_ADDITIONAL_FASTA": { + "gunzip": 1.13 + }, + "GUNZIP_GTF": { + "gunzip": 1.13 + }, + "PARABRICKS_RNA_FQ2BAM": { + "parabricks": "4.6.0-1" + }, + "PARABRICKS_STARGENOMEGENERATE": { + "gawk": "5.1.0", + "samtools": 1.21, + "star": "2.7.2a" + }, + "SALMON_QUANT": { + "salmon": "1.10.3" + }, + "SAMTOOLS_FAIDX": { + "samtools": "1.22.1" + }, + "SAMTOOLS_FLAGSTAT": { + "samtools": "1.22.1" + }, + "SAMTOOLS_IDXSTATS": { + "samtools": "1.22.1" + }, + "SAMTOOLS_INDEX": { + "samtools": "1.22.1" + }, + "SAMTOOLS_SORT": { + "samtools": "1.22.1" + }, + "SAMTOOLS_STATS": { + "samtools": "1.22.1" + }, + "SE_GENE_UNIFIED": { + "bioconductor-summarizedexperiment": "1.32.0" + }, + "SE_TRANSCRIPT_UNIFIED": { + "bioconductor-summarizedexperiment": "1.32.0" + }, + "TRIMGALORE": { + "trimgalore": "0.6.10" + }, + "TXIMETA_TXIMPORT": { + "bioconductor-tximeta": "1.20.1" + }, + "UNTAR_SALMON_INDEX": { + "untar": 1.34 + } + }, + [ + "bbsplit", + "bbsplit/RAP1_IAA_30M_REP1.stats.txt", + "bbsplit/RAP1_UNINDUCED_REP1.stats.txt", + "bbsplit/RAP1_UNINDUCED_REP2.stats.txt", + "bbsplit/WT_REP1.stats.txt", + "bbsplit/WT_REP2.stats.txt", + "custom", + "custom/out", + "custom/out/genome_gfp.fasta", + "custom/out/genome_gfp.gtf", + "fastqc", + "fastqc/filtered", + "fastqc/filtered/RAP1_IAA_30M_REP1_filtered_1_fastqc.html", + "fastqc/filtered/RAP1_IAA_30M_REP1_filtered_1_fastqc.zip", + "fastqc/filtered/RAP1_IAA_30M_REP1_filtered_2_fastqc.html", + "fastqc/filtered/RAP1_IAA_30M_REP1_filtered_2_fastqc.zip", + "fastqc/filtered/RAP1_UNINDUCED_REP1_filtered_fastqc.html", + "fastqc/filtered/RAP1_UNINDUCED_REP1_filtered_fastqc.zip", + "fastqc/filtered/RAP1_UNINDUCED_REP2_filtered_fastqc.html", + "fastqc/filtered/RAP1_UNINDUCED_REP2_filtered_fastqc.zip", + "fastqc/filtered/WT_REP1_filtered_1_fastqc.html", + "fastqc/filtered/WT_REP1_filtered_1_fastqc.zip", + "fastqc/filtered/WT_REP1_filtered_2_fastqc.html", + "fastqc/filtered/WT_REP1_filtered_2_fastqc.zip", + "fastqc/filtered/WT_REP2_filtered_1_fastqc.html", + "fastqc/filtered/WT_REP2_filtered_1_fastqc.zip", + "fastqc/filtered/WT_REP2_filtered_2_fastqc.html", + "fastqc/filtered/WT_REP2_filtered_2_fastqc.zip", + "fastqc/raw", + "fastqc/raw/RAP1_IAA_30M_REP1_raw_1_fastqc.html", + "fastqc/raw/RAP1_IAA_30M_REP1_raw_1_fastqc.zip", + "fastqc/raw/RAP1_IAA_30M_REP1_raw_2_fastqc.html", + "fastqc/raw/RAP1_IAA_30M_REP1_raw_2_fastqc.zip", + "fastqc/raw/RAP1_UNINDUCED_REP1_raw_fastqc.html", + "fastqc/raw/RAP1_UNINDUCED_REP1_raw_fastqc.zip", + "fastqc/raw/RAP1_UNINDUCED_REP2_raw_fastqc.html", + "fastqc/raw/RAP1_UNINDUCED_REP2_raw_fastqc.zip", + "fastqc/raw/WT_REP1_raw_1_fastqc.html", + "fastqc/raw/WT_REP1_raw_1_fastqc.zip", + "fastqc/raw/WT_REP1_raw_2_fastqc.html", + "fastqc/raw/WT_REP1_raw_2_fastqc.zip", + "fastqc/raw/WT_REP2_raw_1_fastqc.html", + "fastqc/raw/WT_REP2_raw_1_fastqc.zip", + "fastqc/raw/WT_REP2_raw_2_fastqc.html", + "fastqc/raw/WT_REP2_raw_2_fastqc.zip", + "fastqc/trim", + "fastqc/trim/RAP1_IAA_30M_REP1_trimmed_1_val_1_fastqc.html", + "fastqc/trim/RAP1_IAA_30M_REP1_trimmed_1_val_1_fastqc.zip", + "fastqc/trim/RAP1_IAA_30M_REP1_trimmed_2_val_2_fastqc.html", + "fastqc/trim/RAP1_IAA_30M_REP1_trimmed_2_val_2_fastqc.zip", + "fastqc/trim/RAP1_UNINDUCED_REP1_trimmed_trimmed_fastqc.html", + "fastqc/trim/RAP1_UNINDUCED_REP1_trimmed_trimmed_fastqc.zip", + "fastqc/trim/RAP1_UNINDUCED_REP2_trimmed_trimmed_fastqc.html", + "fastqc/trim/RAP1_UNINDUCED_REP2_trimmed_trimmed_fastqc.zip", + "fastqc/trim/WT_REP1_trimmed_1_val_1_fastqc.html", + "fastqc/trim/WT_REP1_trimmed_1_val_1_fastqc.zip", + "fastqc/trim/WT_REP1_trimmed_2_val_2_fastqc.html", + "fastqc/trim/WT_REP1_trimmed_2_val_2_fastqc.zip", + "fastqc/trim/WT_REP2_trimmed_1_val_1_fastqc.html", + "fastqc/trim/WT_REP2_trimmed_1_val_1_fastqc.zip", + "fastqc/trim/WT_REP2_trimmed_2_val_2_fastqc.html", + "fastqc/trim/WT_REP2_trimmed_2_val_2_fastqc.zip", + "fq_lint", + "fq_lint/bbsplit", + "fq_lint/bbsplit/RAP1_IAA_30M_REP1.fq_lint.txt", + "fq_lint/bbsplit/RAP1_UNINDUCED_REP1.fq_lint.txt", + "fq_lint/bbsplit/RAP1_UNINDUCED_REP2.fq_lint.txt", + "fq_lint/bbsplit/WT_REP1.fq_lint.txt", + "fq_lint/bbsplit/WT_REP2.fq_lint.txt", + "fq_lint/raw", + "fq_lint/raw/RAP1_IAA_30M_REP1.fq_lint.txt", + "fq_lint/raw/RAP1_UNINDUCED_REP1.fq_lint.txt", + "fq_lint/raw/RAP1_UNINDUCED_REP2.fq_lint.txt", + "fq_lint/raw/WT_REP1.fq_lint.txt", + "fq_lint/raw/WT_REP2.fq_lint.txt", + "fq_lint/trimmed", + "fq_lint/trimmed/RAP1_IAA_30M_REP1.fq_lint.txt", + "fq_lint/trimmed/RAP1_UNINDUCED_REP1.fq_lint.txt", + "fq_lint/trimmed/RAP1_UNINDUCED_REP2.fq_lint.txt", + "fq_lint/trimmed/WT_REP1.fq_lint.txt", + "fq_lint/trimmed/WT_REP2.fq_lint.txt", + "multiqc", + "multiqc/star_salmon", + "multiqc/star_salmon/multiqc_report.html", + "multiqc/star_salmon/multiqc_report_data", + "multiqc/star_salmon/multiqc_report_data/bbmap-bbsplit_plot.txt", + "multiqc/star_salmon/multiqc_report_data/bbmap.txt", + "multiqc/star_salmon/multiqc_report_data/bbsplit_stats_table.txt", + "multiqc/star_salmon/multiqc_report_data/cutadapt_filtered_reads_plot.txt", + "multiqc/star_salmon/multiqc_report_data/cutadapt_trimmed_sequences_plot_3_Counts.txt", + "multiqc/star_salmon/multiqc_report_data/cutadapt_trimmed_sequences_plot_3_Obs_Exp.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_filtered-status-check-heatmap.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_filtered_overrepresented_sequences_plot.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_filtered_per_base_n_content_plot.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_filtered_per_base_sequence_quality_plot.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_filtered_per_sequence_gc_content_plot_Counts.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_filtered_per_sequence_gc_content_plot_Percentages.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_filtered_per_sequence_quality_scores_plot.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_filtered_sequence_counts_plot.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_filtered_sequence_duplication_levels_plot.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_filtered_top_overrepresented_sequences_table.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_raw-status-check-heatmap.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_raw_adapter_content_plot.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_raw_overrepresented_sequences_plot.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_raw_per_base_n_content_plot.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_raw_per_base_sequence_quality_plot.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_raw_per_sequence_gc_content_plot_Counts.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_raw_per_sequence_gc_content_plot_Percentages.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_raw_per_sequence_quality_scores_plot.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_raw_sequence_counts_plot.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_raw_sequence_duplication_levels_plot.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_raw_top_overrepresented_sequences_table.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_sequence_length_distribution_plot.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_trimmed-status-check-heatmap.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_trimmed_overrepresented_sequences_plot.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_trimmed_per_base_n_content_plot.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_trimmed_per_base_sequence_quality_plot.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_trimmed_per_sequence_gc_content_plot_Counts.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_trimmed_per_sequence_gc_content_plot_Percentages.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_trimmed_per_sequence_quality_scores_plot.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_trimmed_sequence_counts_plot.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_trimmed_sequence_duplication_levels_plot.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_trimmed_top_overrepresented_sequences_table.txt", + "multiqc/star_salmon/multiqc_report_data/llms-full.txt", + "multiqc/star_salmon/multiqc_report_data/multiqc.log", + "multiqc/star_salmon/multiqc_report_data/multiqc.parquet", + "multiqc/star_salmon/multiqc_report_data/multiqc_citations.txt", + "multiqc/star_salmon/multiqc_report_data/multiqc_cutadapt.txt", + "multiqc/star_salmon/multiqc_report_data/multiqc_data.json", + "multiqc/star_salmon/multiqc_report_data/multiqc_fail_mapped_samples_table.txt", + "multiqc/star_salmon/multiqc_report_data/multiqc_fastqc_fastqc_filtered.txt", + "multiqc/star_salmon/multiqc_report_data/multiqc_fastqc_fastqc_raw.txt", + "multiqc/star_salmon/multiqc_report_data/multiqc_fastqc_fastqc_trimmed.txt", + "multiqc/star_salmon/multiqc_report_data/multiqc_general_stats.txt", + "multiqc/star_salmon/multiqc_report_data/multiqc_salmon.txt", + "multiqc/star_salmon/multiqc_report_data/multiqc_salmon_deseq2_clustering.txt", + "multiqc/star_salmon/multiqc_report_data/multiqc_salmon_deseq2_pca.txt", + "multiqc/star_salmon/multiqc_report_data/multiqc_samtools_flagstat.txt", + "multiqc/star_salmon/multiqc_report_data/multiqc_samtools_idxstats.txt", + "multiqc/star_salmon/multiqc_report_data/multiqc_samtools_stats.txt", + "multiqc/star_salmon/multiqc_report_data/multiqc_software_versions.txt", + "multiqc/star_salmon/multiqc_report_data/multiqc_sources.txt", + "multiqc/star_salmon/multiqc_report_data/multiqc_star_salmon_deseq2_clustering.txt", + "multiqc/star_salmon/multiqc_report_data/multiqc_star_salmon_deseq2_pca.txt", + "multiqc/star_salmon/multiqc_report_data/salmon_plot.txt", + "multiqc/star_salmon/multiqc_report_data/samtools-flagstat-pct-table.txt", + "multiqc/star_salmon/multiqc_report_data/samtools-flagstat-table.txt", + "multiqc/star_salmon/multiqc_report_data/samtools-idxstats-mapped-reads-plot_Normalised_Counts.txt", + "multiqc/star_salmon/multiqc_report_data/samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts.txt", + "multiqc/star_salmon/multiqc_report_data/samtools-idxstats-mapped-reads-plot_Raw_Counts.txt", + "multiqc/star_salmon/multiqc_report_data/samtools-stats-dp.txt", + "multiqc/star_salmon/multiqc_report_data/samtools_alignment_plot.txt", + "multiqc/star_salmon/multiqc_report_plots", + "multiqc/star_salmon/multiqc_report_plots/pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/bbmap-bbsplit_plot-cnt.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/bbmap-bbsplit_plot-pct.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/bbsplit_stats_table.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/cutadapt_filtered_reads_plot-cnt.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/cutadapt_filtered_reads_plot-pct.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/cutadapt_trimmed_sequences_plot_3_Counts.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/cutadapt_trimmed_sequences_plot_3_Obs_Exp.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fail_mapped_samples_table.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_filtered-status-check-heatmap.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_filtered_overrepresented_sequences_plot.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_filtered_per_base_n_content_plot.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_filtered_per_base_sequence_quality_plot.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_filtered_per_sequence_gc_content_plot_Counts.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_filtered_per_sequence_gc_content_plot_Percentages.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_filtered_per_sequence_quality_scores_plot.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_filtered_sequence_counts_plot-cnt.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_filtered_sequence_counts_plot-pct.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_filtered_sequence_duplication_levels_plot.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_filtered_top_overrepresented_sequences_table.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_raw-status-check-heatmap.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_raw_adapter_content_plot.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_raw_overrepresented_sequences_plot.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_raw_per_base_n_content_plot.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_raw_per_base_sequence_quality_plot.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_raw_per_sequence_gc_content_plot_Counts.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_raw_per_sequence_gc_content_plot_Percentages.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_raw_per_sequence_quality_scores_plot.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_raw_sequence_counts_plot-cnt.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_raw_sequence_counts_plot-pct.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_raw_sequence_duplication_levels_plot.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_raw_top_overrepresented_sequences_table.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_sequence_length_distribution_plot.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_trimmed-status-check-heatmap.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_trimmed_overrepresented_sequences_plot.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_trimmed_per_base_n_content_plot.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_trimmed_per_base_sequence_quality_plot.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_trimmed_per_sequence_gc_content_plot_Counts.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_trimmed_per_sequence_gc_content_plot_Percentages.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_trimmed_per_sequence_quality_scores_plot.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_trimmed_sequence_counts_plot-cnt.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_trimmed_sequence_counts_plot-pct.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_trimmed_sequence_duplication_levels_plot.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_trimmed_top_overrepresented_sequences_table.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/salmon_deseq2_clustering.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/salmon_deseq2_pca.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/salmon_plot.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/samtools-flagstat-pct-table.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/samtools-flagstat-table.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/samtools-idxstats-mapped-reads-plot_Normalised_Counts-cnt.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/samtools-idxstats-mapped-reads-plot_Normalised_Counts-log.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts-cnt.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts-log.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/samtools-idxstats-mapped-reads-plot_Raw_Counts-cnt.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/samtools-idxstats-mapped-reads-plot_Raw_Counts-log.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/samtools-stats-dp.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/samtools_alignment_plot-cnt.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/samtools_alignment_plot-pct.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/star_salmon_deseq2_clustering.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/star_salmon_deseq2_pca.pdf", + "multiqc/star_salmon/multiqc_report_plots/png", + "multiqc/star_salmon/multiqc_report_plots/png/bbmap-bbsplit_plot-cnt.png", + "multiqc/star_salmon/multiqc_report_plots/png/bbmap-bbsplit_plot-pct.png", + "multiqc/star_salmon/multiqc_report_plots/png/bbsplit_stats_table.png", + "multiqc/star_salmon/multiqc_report_plots/png/cutadapt_filtered_reads_plot-cnt.png", + "multiqc/star_salmon/multiqc_report_plots/png/cutadapt_filtered_reads_plot-pct.png", + "multiqc/star_salmon/multiqc_report_plots/png/cutadapt_trimmed_sequences_plot_3_Counts.png", + "multiqc/star_salmon/multiqc_report_plots/png/cutadapt_trimmed_sequences_plot_3_Obs_Exp.png", + "multiqc/star_salmon/multiqc_report_plots/png/fail_mapped_samples_table.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_filtered-status-check-heatmap.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_filtered_overrepresented_sequences_plot.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_filtered_per_base_n_content_plot.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_filtered_per_base_sequence_quality_plot.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_filtered_per_sequence_gc_content_plot_Counts.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_filtered_per_sequence_gc_content_plot_Percentages.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_filtered_per_sequence_quality_scores_plot.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_filtered_sequence_counts_plot-cnt.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_filtered_sequence_counts_plot-pct.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_filtered_sequence_duplication_levels_plot.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_filtered_top_overrepresented_sequences_table.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_raw-status-check-heatmap.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_raw_adapter_content_plot.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_raw_overrepresented_sequences_plot.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_raw_per_base_n_content_plot.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_raw_per_base_sequence_quality_plot.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_raw_per_sequence_gc_content_plot_Counts.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_raw_per_sequence_gc_content_plot_Percentages.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_raw_per_sequence_quality_scores_plot.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_raw_sequence_counts_plot-cnt.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_raw_sequence_counts_plot-pct.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_raw_sequence_duplication_levels_plot.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_raw_top_overrepresented_sequences_table.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_sequence_length_distribution_plot.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_trimmed-status-check-heatmap.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_trimmed_overrepresented_sequences_plot.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_trimmed_per_base_n_content_plot.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_trimmed_per_base_sequence_quality_plot.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_trimmed_per_sequence_gc_content_plot_Counts.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_trimmed_per_sequence_gc_content_plot_Percentages.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_trimmed_per_sequence_quality_scores_plot.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_trimmed_sequence_counts_plot-cnt.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_trimmed_sequence_counts_plot-pct.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_trimmed_sequence_duplication_levels_plot.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_trimmed_top_overrepresented_sequences_table.png", + "multiqc/star_salmon/multiqc_report_plots/png/salmon_deseq2_clustering.png", + "multiqc/star_salmon/multiqc_report_plots/png/salmon_deseq2_pca.png", + "multiqc/star_salmon/multiqc_report_plots/png/salmon_plot.png", + "multiqc/star_salmon/multiqc_report_plots/png/samtools-flagstat-pct-table.png", + "multiqc/star_salmon/multiqc_report_plots/png/samtools-flagstat-table.png", + "multiqc/star_salmon/multiqc_report_plots/png/samtools-idxstats-mapped-reads-plot_Normalised_Counts-cnt.png", + "multiqc/star_salmon/multiqc_report_plots/png/samtools-idxstats-mapped-reads-plot_Normalised_Counts-log.png", + "multiqc/star_salmon/multiqc_report_plots/png/samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts-cnt.png", + "multiqc/star_salmon/multiqc_report_plots/png/samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts-log.png", + "multiqc/star_salmon/multiqc_report_plots/png/samtools-idxstats-mapped-reads-plot_Raw_Counts-cnt.png", + "multiqc/star_salmon/multiqc_report_plots/png/samtools-idxstats-mapped-reads-plot_Raw_Counts-log.png", + "multiqc/star_salmon/multiqc_report_plots/png/samtools-stats-dp.png", + "multiqc/star_salmon/multiqc_report_plots/png/samtools_alignment_plot-cnt.png", + "multiqc/star_salmon/multiqc_report_plots/png/samtools_alignment_plot-pct.png", + "multiqc/star_salmon/multiqc_report_plots/png/star_salmon_deseq2_clustering.png", + "multiqc/star_salmon/multiqc_report_plots/png/star_salmon_deseq2_pca.png", + "multiqc/star_salmon/multiqc_report_plots/svg", + "multiqc/star_salmon/multiqc_report_plots/svg/bbmap-bbsplit_plot-cnt.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/bbmap-bbsplit_plot-pct.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/bbsplit_stats_table.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/cutadapt_filtered_reads_plot-cnt.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/cutadapt_filtered_reads_plot-pct.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/cutadapt_trimmed_sequences_plot_3_Counts.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/cutadapt_trimmed_sequences_plot_3_Obs_Exp.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fail_mapped_samples_table.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_filtered-status-check-heatmap.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_filtered_overrepresented_sequences_plot.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_filtered_per_base_n_content_plot.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_filtered_per_base_sequence_quality_plot.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_filtered_per_sequence_gc_content_plot_Counts.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_filtered_per_sequence_gc_content_plot_Percentages.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_filtered_per_sequence_quality_scores_plot.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_filtered_sequence_counts_plot-cnt.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_filtered_sequence_counts_plot-pct.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_filtered_sequence_duplication_levels_plot.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_filtered_top_overrepresented_sequences_table.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_raw-status-check-heatmap.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_raw_adapter_content_plot.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_raw_overrepresented_sequences_plot.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_raw_per_base_n_content_plot.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_raw_per_base_sequence_quality_plot.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_raw_per_sequence_gc_content_plot_Counts.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_raw_per_sequence_gc_content_plot_Percentages.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_raw_per_sequence_quality_scores_plot.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_raw_sequence_counts_plot-cnt.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_raw_sequence_counts_plot-pct.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_raw_sequence_duplication_levels_plot.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_raw_top_overrepresented_sequences_table.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_sequence_length_distribution_plot.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_trimmed-status-check-heatmap.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_trimmed_overrepresented_sequences_plot.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_trimmed_per_base_n_content_plot.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_trimmed_per_base_sequence_quality_plot.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_trimmed_per_sequence_gc_content_plot_Counts.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_trimmed_per_sequence_gc_content_plot_Percentages.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_trimmed_per_sequence_quality_scores_plot.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_trimmed_sequence_counts_plot-cnt.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_trimmed_sequence_counts_plot-pct.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_trimmed_sequence_duplication_levels_plot.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_trimmed_top_overrepresented_sequences_table.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/salmon_deseq2_clustering.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/salmon_deseq2_pca.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/salmon_plot.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/samtools-flagstat-pct-table.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/samtools-flagstat-table.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/samtools-idxstats-mapped-reads-plot_Normalised_Counts-cnt.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/samtools-idxstats-mapped-reads-plot_Normalised_Counts-log.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts-cnt.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts-log.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/samtools-idxstats-mapped-reads-plot_Raw_Counts-cnt.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/samtools-idxstats-mapped-reads-plot_Raw_Counts-log.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/samtools-stats-dp.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/samtools_alignment_plot-cnt.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/samtools_alignment_plot-pct.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/star_salmon_deseq2_clustering.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/star_salmon_deseq2_pca.svg", + "pipeline_info", + "pipeline_info/nf_core_rnaseq_software_mqc_versions.yml", + "salmon", + "salmon/RAP1_IAA_30M_REP1", + "salmon/RAP1_IAA_30M_REP1/aux_info", + "salmon/RAP1_IAA_30M_REP1/aux_info/ambig_info.tsv", + "salmon/RAP1_IAA_30M_REP1/aux_info/expected_bias.gz", + "salmon/RAP1_IAA_30M_REP1/aux_info/fld.gz", + "salmon/RAP1_IAA_30M_REP1/aux_info/meta_info.json", + "salmon/RAP1_IAA_30M_REP1/aux_info/observed_bias.gz", + "salmon/RAP1_IAA_30M_REP1/aux_info/observed_bias_3p.gz", + "salmon/RAP1_IAA_30M_REP1/cmd_info.json", + "salmon/RAP1_IAA_30M_REP1/libParams", + "salmon/RAP1_IAA_30M_REP1/libParams/flenDist.txt", + "salmon/RAP1_IAA_30M_REP1/lib_format_counts.json", + "salmon/RAP1_IAA_30M_REP1/logs", + "salmon/RAP1_IAA_30M_REP1/logs/salmon_quant.log", + "salmon/RAP1_IAA_30M_REP1/quant.genes.sf", + "salmon/RAP1_IAA_30M_REP1/quant.sf", + "salmon/RAP1_UNINDUCED_REP1", + "salmon/RAP1_UNINDUCED_REP1/aux_info", + "salmon/RAP1_UNINDUCED_REP1/aux_info/ambig_info.tsv", + "salmon/RAP1_UNINDUCED_REP1/aux_info/expected_bias.gz", + "salmon/RAP1_UNINDUCED_REP1/aux_info/fld.gz", + "salmon/RAP1_UNINDUCED_REP1/aux_info/meta_info.json", + "salmon/RAP1_UNINDUCED_REP1/aux_info/observed_bias.gz", + "salmon/RAP1_UNINDUCED_REP1/aux_info/observed_bias_3p.gz", + "salmon/RAP1_UNINDUCED_REP1/cmd_info.json", + "salmon/RAP1_UNINDUCED_REP1/libParams", + "salmon/RAP1_UNINDUCED_REP1/libParams/flenDist.txt", + "salmon/RAP1_UNINDUCED_REP1/lib_format_counts.json", + "salmon/RAP1_UNINDUCED_REP1/logs", + "salmon/RAP1_UNINDUCED_REP1/logs/salmon_quant.log", + "salmon/RAP1_UNINDUCED_REP1/quant.genes.sf", + "salmon/RAP1_UNINDUCED_REP1/quant.sf", + "salmon/RAP1_UNINDUCED_REP2", + "salmon/RAP1_UNINDUCED_REP2/aux_info", + "salmon/RAP1_UNINDUCED_REP2/aux_info/ambig_info.tsv", + "salmon/RAP1_UNINDUCED_REP2/aux_info/expected_bias.gz", + "salmon/RAP1_UNINDUCED_REP2/aux_info/fld.gz", + "salmon/RAP1_UNINDUCED_REP2/aux_info/meta_info.json", + "salmon/RAP1_UNINDUCED_REP2/aux_info/observed_bias.gz", + "salmon/RAP1_UNINDUCED_REP2/aux_info/observed_bias_3p.gz", + "salmon/RAP1_UNINDUCED_REP2/cmd_info.json", + "salmon/RAP1_UNINDUCED_REP2/libParams", + "salmon/RAP1_UNINDUCED_REP2/libParams/flenDist.txt", + "salmon/RAP1_UNINDUCED_REP2/lib_format_counts.json", + "salmon/RAP1_UNINDUCED_REP2/logs", + "salmon/RAP1_UNINDUCED_REP2/logs/salmon_quant.log", + "salmon/RAP1_UNINDUCED_REP2/quant.genes.sf", + "salmon/RAP1_UNINDUCED_REP2/quant.sf", + "salmon/WT_REP1", + "salmon/WT_REP1/aux_info", + "salmon/WT_REP1/aux_info/ambig_info.tsv", + "salmon/WT_REP1/aux_info/expected_bias.gz", + "salmon/WT_REP1/aux_info/fld.gz", + "salmon/WT_REP1/aux_info/meta_info.json", + "salmon/WT_REP1/aux_info/observed_bias.gz", + "salmon/WT_REP1/aux_info/observed_bias_3p.gz", + "salmon/WT_REP1/cmd_info.json", + "salmon/WT_REP1/libParams", + "salmon/WT_REP1/libParams/flenDist.txt", + "salmon/WT_REP1/lib_format_counts.json", + "salmon/WT_REP1/logs", + "salmon/WT_REP1/logs/salmon_quant.log", + "salmon/WT_REP1/quant.genes.sf", + "salmon/WT_REP1/quant.sf", + "salmon/WT_REP2", + "salmon/WT_REP2/aux_info", + "salmon/WT_REP2/aux_info/ambig_info.tsv", + "salmon/WT_REP2/aux_info/expected_bias.gz", + "salmon/WT_REP2/aux_info/fld.gz", + "salmon/WT_REP2/aux_info/meta_info.json", + "salmon/WT_REP2/aux_info/observed_bias.gz", + "salmon/WT_REP2/aux_info/observed_bias_3p.gz", + "salmon/WT_REP2/cmd_info.json", + "salmon/WT_REP2/libParams", + "salmon/WT_REP2/libParams/flenDist.txt", + "salmon/WT_REP2/lib_format_counts.json", + "salmon/WT_REP2/logs", + "salmon/WT_REP2/logs/salmon_quant.log", + "salmon/WT_REP2/quant.genes.sf", + "salmon/WT_REP2/quant.sf", + "salmon/deseq2_qc", + "salmon/deseq2_qc/R_sessionInfo.log", + "salmon/deseq2_qc/deseq2.dds.RData", + "salmon/deseq2_qc/deseq2.pca.vals.txt", + "salmon/deseq2_qc/deseq2.plots.pdf", + "salmon/deseq2_qc/deseq2.sample.dists.txt", + "salmon/deseq2_qc/size_factors", + "salmon/deseq2_qc/size_factors/RAP1_IAA_30M_REP1.txt", + "salmon/deseq2_qc/size_factors/RAP1_UNINDUCED_REP1.txt", + "salmon/deseq2_qc/size_factors/RAP1_UNINDUCED_REP2.txt", + "salmon/deseq2_qc/size_factors/WT_REP1.txt", + "salmon/deseq2_qc/size_factors/WT_REP2.txt", + "salmon/deseq2_qc/size_factors/deseq2.size_factors.RData", + "salmon/salmon.merged.gene.SummarizedExperiment.rds", + "salmon/salmon.merged.gene_counts.tsv", + "salmon/salmon.merged.gene_counts_length_scaled.tsv", + "salmon/salmon.merged.gene_counts_scaled.tsv", + "salmon/salmon.merged.gene_lengths.tsv", + "salmon/salmon.merged.gene_tpm.tsv", + "salmon/salmon.merged.transcript.SummarizedExperiment.rds", + "salmon/salmon.merged.transcript_counts.tsv", + "salmon/salmon.merged.transcript_lengths.tsv", + "salmon/salmon.merged.transcript_tpm.tsv", + "salmon/salmon.merged.tx2gene.tsv", + "star_salmon", + "star_salmon/RAP1_IAA_30M_REP1", + "star_salmon/RAP1_IAA_30M_REP1.sorted.bam", + "star_salmon/RAP1_IAA_30M_REP1.sorted.bam.bai", + "star_salmon/RAP1_IAA_30M_REP1/aux_info", + "star_salmon/RAP1_IAA_30M_REP1/aux_info/ambig_info.tsv", + "star_salmon/RAP1_IAA_30M_REP1/aux_info/expected_bias.gz", + "star_salmon/RAP1_IAA_30M_REP1/aux_info/fld.gz", + "star_salmon/RAP1_IAA_30M_REP1/aux_info/meta_info.json", + "star_salmon/RAP1_IAA_30M_REP1/aux_info/observed_bias.gz", + "star_salmon/RAP1_IAA_30M_REP1/aux_info/observed_bias_3p.gz", + "star_salmon/RAP1_IAA_30M_REP1/cmd_info.json", + "star_salmon/RAP1_IAA_30M_REP1/libParams", + "star_salmon/RAP1_IAA_30M_REP1/libParams/flenDist.txt", + "star_salmon/RAP1_IAA_30M_REP1/logs", + "star_salmon/RAP1_IAA_30M_REP1/logs/salmon_quant.log", + "star_salmon/RAP1_IAA_30M_REP1/quant.genes.sf", + "star_salmon/RAP1_IAA_30M_REP1/quant.sf", + "star_salmon/RAP1_UNINDUCED_REP1", + "star_salmon/RAP1_UNINDUCED_REP1.sorted.bam", + "star_salmon/RAP1_UNINDUCED_REP1.sorted.bam.bai", + "star_salmon/RAP1_UNINDUCED_REP1/aux_info", + "star_salmon/RAP1_UNINDUCED_REP1/aux_info/ambig_info.tsv", + "star_salmon/RAP1_UNINDUCED_REP1/aux_info/expected_bias.gz", + "star_salmon/RAP1_UNINDUCED_REP1/aux_info/fld.gz", + "star_salmon/RAP1_UNINDUCED_REP1/aux_info/meta_info.json", + "star_salmon/RAP1_UNINDUCED_REP1/aux_info/observed_bias.gz", + "star_salmon/RAP1_UNINDUCED_REP1/aux_info/observed_bias_3p.gz", + "star_salmon/RAP1_UNINDUCED_REP1/cmd_info.json", + "star_salmon/RAP1_UNINDUCED_REP1/libParams", + "star_salmon/RAP1_UNINDUCED_REP1/libParams/flenDist.txt", + "star_salmon/RAP1_UNINDUCED_REP1/logs", + "star_salmon/RAP1_UNINDUCED_REP1/logs/salmon_quant.log", + "star_salmon/RAP1_UNINDUCED_REP1/quant.genes.sf", + "star_salmon/RAP1_UNINDUCED_REP1/quant.sf", + "star_salmon/RAP1_UNINDUCED_REP2", + "star_salmon/RAP1_UNINDUCED_REP2.sorted.bam", + "star_salmon/RAP1_UNINDUCED_REP2.sorted.bam.bai", + "star_salmon/RAP1_UNINDUCED_REP2/aux_info", + "star_salmon/RAP1_UNINDUCED_REP2/aux_info/ambig_info.tsv", + "star_salmon/RAP1_UNINDUCED_REP2/aux_info/expected_bias.gz", + "star_salmon/RAP1_UNINDUCED_REP2/aux_info/fld.gz", + "star_salmon/RAP1_UNINDUCED_REP2/aux_info/meta_info.json", + "star_salmon/RAP1_UNINDUCED_REP2/aux_info/observed_bias.gz", + "star_salmon/RAP1_UNINDUCED_REP2/aux_info/observed_bias_3p.gz", + "star_salmon/RAP1_UNINDUCED_REP2/cmd_info.json", + "star_salmon/RAP1_UNINDUCED_REP2/libParams", + "star_salmon/RAP1_UNINDUCED_REP2/libParams/flenDist.txt", + "star_salmon/RAP1_UNINDUCED_REP2/logs", + "star_salmon/RAP1_UNINDUCED_REP2/logs/salmon_quant.log", + "star_salmon/RAP1_UNINDUCED_REP2/quant.genes.sf", + "star_salmon/RAP1_UNINDUCED_REP2/quant.sf", + "star_salmon/WT_REP1", + "star_salmon/WT_REP1.sorted.bam", + "star_salmon/WT_REP1.sorted.bam.bai", + "star_salmon/WT_REP1/aux_info", + "star_salmon/WT_REP1/aux_info/ambig_info.tsv", + "star_salmon/WT_REP1/aux_info/expected_bias.gz", + "star_salmon/WT_REP1/aux_info/fld.gz", + "star_salmon/WT_REP1/aux_info/meta_info.json", + "star_salmon/WT_REP1/aux_info/observed_bias.gz", + "star_salmon/WT_REP1/aux_info/observed_bias_3p.gz", + "star_salmon/WT_REP1/cmd_info.json", + "star_salmon/WT_REP1/libParams", + "star_salmon/WT_REP1/libParams/flenDist.txt", + "star_salmon/WT_REP1/logs", + "star_salmon/WT_REP1/logs/salmon_quant.log", + "star_salmon/WT_REP1/quant.genes.sf", + "star_salmon/WT_REP1/quant.sf", + "star_salmon/WT_REP2", + "star_salmon/WT_REP2.sorted.bam", + "star_salmon/WT_REP2.sorted.bam.bai", + "star_salmon/WT_REP2/aux_info", + "star_salmon/WT_REP2/aux_info/ambig_info.tsv", + "star_salmon/WT_REP2/aux_info/expected_bias.gz", + "star_salmon/WT_REP2/aux_info/fld.gz", + "star_salmon/WT_REP2/aux_info/meta_info.json", + "star_salmon/WT_REP2/aux_info/observed_bias.gz", + "star_salmon/WT_REP2/aux_info/observed_bias_3p.gz", + "star_salmon/WT_REP2/cmd_info.json", + "star_salmon/WT_REP2/libParams", + "star_salmon/WT_REP2/libParams/flenDist.txt", + "star_salmon/WT_REP2/logs", + "star_salmon/WT_REP2/logs/salmon_quant.log", + "star_salmon/WT_REP2/quant.genes.sf", + "star_salmon/WT_REP2/quant.sf", + "star_salmon/deseq2_qc", + "star_salmon/deseq2_qc/R_sessionInfo.log", + "star_salmon/deseq2_qc/deseq2.dds.RData", + "star_salmon/deseq2_qc/deseq2.pca.vals.txt", + "star_salmon/deseq2_qc/deseq2.plots.pdf", + "star_salmon/deseq2_qc/deseq2.sample.dists.txt", + "star_salmon/deseq2_qc/size_factors", + "star_salmon/deseq2_qc/size_factors/RAP1_IAA_30M_REP1.txt", + "star_salmon/deseq2_qc/size_factors/RAP1_UNINDUCED_REP1.txt", + "star_salmon/deseq2_qc/size_factors/RAP1_UNINDUCED_REP2.txt", + "star_salmon/deseq2_qc/size_factors/WT_REP1.txt", + "star_salmon/deseq2_qc/size_factors/WT_REP2.txt", + "star_salmon/deseq2_qc/size_factors/deseq2.size_factors.RData", + "star_salmon/log", + "star_salmon/log/RAP1_IAA_30M_REP1.Log.final.out", + "star_salmon/log/RAP1_IAA_30M_REP1.Log.out", + "star_salmon/log/RAP1_IAA_30M_REP1.Log.progress.out", + "star_salmon/log/RAP1_IAA_30M_REP1.SJ.out.tab", + "star_salmon/log/RAP1_UNINDUCED_REP1.Log.final.out", + "star_salmon/log/RAP1_UNINDUCED_REP1.Log.out", + "star_salmon/log/RAP1_UNINDUCED_REP1.Log.progress.out", + "star_salmon/log/RAP1_UNINDUCED_REP1.SJ.out.tab", + "star_salmon/log/RAP1_UNINDUCED_REP2.Log.final.out", + "star_salmon/log/RAP1_UNINDUCED_REP2.Log.out", + "star_salmon/log/RAP1_UNINDUCED_REP2.Log.progress.out", + "star_salmon/log/RAP1_UNINDUCED_REP2.SJ.out.tab", + "star_salmon/log/WT_REP1.Log.final.out", + "star_salmon/log/WT_REP1.Log.out", + "star_salmon/log/WT_REP1.Log.progress.out", + "star_salmon/log/WT_REP1.SJ.out.tab", + "star_salmon/log/WT_REP2.Log.final.out", + "star_salmon/log/WT_REP2.Log.out", + "star_salmon/log/WT_REP2.Log.progress.out", + "star_salmon/log/WT_REP2.SJ.out.tab", + "star_salmon/salmon.merged.gene.SummarizedExperiment.rds", + "star_salmon/salmon.merged.gene_counts.tsv", + "star_salmon/salmon.merged.gene_counts_length_scaled.tsv", + "star_salmon/salmon.merged.gene_counts_scaled.tsv", + "star_salmon/salmon.merged.gene_lengths.tsv", + "star_salmon/salmon.merged.gene_tpm.tsv", + "star_salmon/salmon.merged.transcript.SummarizedExperiment.rds", + "star_salmon/salmon.merged.transcript_counts.tsv", + "star_salmon/salmon.merged.transcript_lengths.tsv", + "star_salmon/salmon.merged.transcript_tpm.tsv", + "star_salmon/salmon.merged.tx2gene.tsv", + "star_salmon/samtools_stats", + "star_salmon/samtools_stats/RAP1_IAA_30M_REP1.sorted.bam.flagstat", + "star_salmon/samtools_stats/RAP1_IAA_30M_REP1.sorted.bam.idxstats", + "star_salmon/samtools_stats/RAP1_IAA_30M_REP1.sorted.bam.stats", + "star_salmon/samtools_stats/RAP1_UNINDUCED_REP1.sorted.bam.flagstat", + "star_salmon/samtools_stats/RAP1_UNINDUCED_REP1.sorted.bam.idxstats", + "star_salmon/samtools_stats/RAP1_UNINDUCED_REP1.sorted.bam.stats", + "star_salmon/samtools_stats/RAP1_UNINDUCED_REP2.sorted.bam.flagstat", + "star_salmon/samtools_stats/RAP1_UNINDUCED_REP2.sorted.bam.idxstats", + "star_salmon/samtools_stats/RAP1_UNINDUCED_REP2.sorted.bam.stats", + "star_salmon/samtools_stats/WT_REP1.sorted.bam.flagstat", + "star_salmon/samtools_stats/WT_REP1.sorted.bam.idxstats", + "star_salmon/samtools_stats/WT_REP1.sorted.bam.stats", + "star_salmon/samtools_stats/WT_REP2.sorted.bam.flagstat", + "star_salmon/samtools_stats/WT_REP2.sorted.bam.idxstats", + "star_salmon/samtools_stats/WT_REP2.sorted.bam.stats", + "trimgalore", + "trimgalore/RAP1_IAA_30M_REP1_trimmed_1.fastq.gz_trimming_report.txt", + "trimgalore/RAP1_IAA_30M_REP1_trimmed_2.fastq.gz_trimming_report.txt", + "trimgalore/RAP1_UNINDUCED_REP1_trimmed.fastq.gz_trimming_report.txt", + "trimgalore/RAP1_UNINDUCED_REP2_trimmed.fastq.gz_trimming_report.txt", + "trimgalore/WT_REP1_trimmed_1.fastq.gz_trimming_report.txt", + "trimgalore/WT_REP1_trimmed_2.fastq.gz_trimming_report.txt", + "trimgalore/WT_REP2_trimmed_1.fastq.gz_trimming_report.txt", + "trimgalore/WT_REP2_trimmed_2.fastq.gz_trimming_report.txt" + ], + [ + "genome_gfp.fasta:md5,e23e302af63736a199985a169fdac055", + "genome_gfp.gtf:md5,c98b12c302f15731bfc36bcf297cfe28", + "cutadapt_filtered_reads_plot.txt:md5,6fa381627f7c1f664f3d4b2cb79cce90", + "cutadapt_trimmed_sequences_plot_3_Counts.txt:md5,13dfa866fd91dbb072689efe9aa83b1f", + "cutadapt_trimmed_sequences_plot_3_Obs_Exp.txt:md5,07145dd8dd3db654859b18eb0389046c", + "fastqc_raw-status-check-heatmap.txt:md5,5a89b0d8d162f6b1dbdaf39457bbc03b", + "fastqc_raw_adapter_content_plot.txt:md5,da0389be84cfdd189b1d045212eb2974", + "fastqc_raw_overrepresented_sequences_plot.txt:md5,25d88ea8a72f55e8a374ae802bc7f0b1", + "fastqc_raw_per_base_n_content_plot.txt:md5,d368d7e36ca2f73dcde61f2b486d8213", + "fastqc_raw_per_base_sequence_quality_plot.txt:md5,5c3065b549129702b185ea1b817da420", + "fastqc_raw_per_sequence_gc_content_plot_Counts.txt:md5,9ddaa50167117d3c9188ccf015427704", + "fastqc_raw_per_sequence_gc_content_plot_Percentages.txt:md5,f10ee2881b61308af35f304aa3d810a3", + "fastqc_raw_per_sequence_quality_scores_plot.txt:md5,b5f9a02933e3065952237afd2ec9ce82", + "fastqc_raw_sequence_counts_plot.txt:md5,cbae4979d5db66d3b894abcf8d1c453c", + "fastqc_raw_sequence_duplication_levels_plot.txt:md5,8812cee16f6ca65e2c33635754de1772", + "fastqc_trimmed-status-check-heatmap.txt:md5,22a03548736b88b23be6bc0c9ef1b4a6", + "fastqc_trimmed_overrepresented_sequences_plot.txt:md5,c755e9d044ea1a82b2c8edde867b4878", + "fastqc_trimmed_per_base_n_content_plot.txt:md5,418610c1ce119cb786ad434db75d366e", + "fastqc_trimmed_per_base_sequence_quality_plot.txt:md5,bd22e06e41c096ad4f745d40fe96a1e5", + "fastqc_trimmed_per_sequence_gc_content_plot_Counts.txt:md5,004c60768ceb6197765154e3eaa37b7a", + "fastqc_trimmed_per_sequence_gc_content_plot_Percentages.txt:md5,95d29060b687f745288ad1ec47750037", + "fastqc_trimmed_per_sequence_quality_scores_plot.txt:md5,0f9834cc19f76dd5c87cf8cba7435a7c", + "fastqc_trimmed_sequence_counts_plot.txt:md5,9fd642bdd1da354f296bb8092205608f", + "fastqc_trimmed_sequence_duplication_levels_plot.txt:md5,0758257b497283b1ef28171e694db6db", + "multiqc_citations.txt:md5,d596629d15f565388cb6493c3941d513", + "multiqc_fail_mapped_samples_table.txt:md5,84997c51d59c06a8cb09859efa3fc6bc", + "multiqc_fastqc_fastqc_raw.txt:md5,81c3c1a2575a1891a7f2a9637a0f2cc0", + "multiqc_fastqc_fastqc_trimmed.txt:md5,54743154d0e8858980acffeb5b6f6a97", + "multiqc_samtools_idxstats.txt:md5,fd7d03a91f0b9e01a6939941f7f2243f", + "samtools-idxstats-mapped-reads-plot_Normalised_Counts.txt:md5,75acd04232d1804b5f960ee4c5db4722", + "samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts.txt:md5,ae45731d8d4595f77e6b271004f3a070", + "samtools-idxstats-mapped-reads-plot_Raw_Counts.txt:md5,01637c600d3840500851eb4118564cc6", + "expected_bias.gz:md5,3407f87245d0003e0ffbfdf6d8c04f20", + "observed_bias.gz:md5,92bcd0592d22a6a58d0360fc76103e56", + "observed_bias_3p.gz:md5,92bcd0592d22a6a58d0360fc76103e56", + "cmd_info.json:md5,138b27764a97d468418b3dac5e7f1cef", + "lib_format_counts.json:md5,c24ffe28d70476b5ccdd8bc2d22c0ac1", + "expected_bias.gz:md5,3407f87245d0003e0ffbfdf6d8c04f20", + "observed_bias.gz:md5,92bcd0592d22a6a58d0360fc76103e56", + "observed_bias_3p.gz:md5,92bcd0592d22a6a58d0360fc76103e56", + "cmd_info.json:md5,87bcf1e84fc31a794e3c8f8b227d11c3", + "lib_format_counts.json:md5,f6d44c0221f7fd559f11a9afe04c9935", + "expected_bias.gz:md5,3407f87245d0003e0ffbfdf6d8c04f20", + "observed_bias.gz:md5,92bcd0592d22a6a58d0360fc76103e56", + "observed_bias_3p.gz:md5,92bcd0592d22a6a58d0360fc76103e56", + "cmd_info.json:md5,ec504469f9b0e33c94f85846f1486d7f", + "lib_format_counts.json:md5,7c562bf2f70e42f3a7292687dfd328c3", + "expected_bias.gz:md5,3407f87245d0003e0ffbfdf6d8c04f20", + "observed_bias.gz:md5,92bcd0592d22a6a58d0360fc76103e56", + "observed_bias_3p.gz:md5,92bcd0592d22a6a58d0360fc76103e56", + "cmd_info.json:md5,591436d401b6df6f3c6a8b16913158f4", + "lib_format_counts.json:md5,d46250bb3677d72feeefc435fe6395a6", + "expected_bias.gz:md5,3407f87245d0003e0ffbfdf6d8c04f20", + "observed_bias.gz:md5,92bcd0592d22a6a58d0360fc76103e56", + "observed_bias_3p.gz:md5,92bcd0592d22a6a58d0360fc76103e56", + "cmd_info.json:md5,fe66c9d876645b9260d8c2488157d4d4", + "lib_format_counts.json:md5,088fd51db07022ffde47033bbd029400", + "salmon.merged.tx2gene.tsv:md5,0e2418a69d2eba45097ebffc2f700bfe", + "expected_bias.gz:md5,3407f87245d0003e0ffbfdf6d8c04f20", + "observed_bias.gz:md5,92bcd0592d22a6a58d0360fc76103e56", + "observed_bias_3p.gz:md5,92bcd0592d22a6a58d0360fc76103e56", + "cmd_info.json:md5,21395500c85658c70ce5fa0ac05b339a", + "expected_bias.gz:md5,3407f87245d0003e0ffbfdf6d8c04f20", + "observed_bias.gz:md5,92bcd0592d22a6a58d0360fc76103e56", + "observed_bias_3p.gz:md5,92bcd0592d22a6a58d0360fc76103e56", + "cmd_info.json:md5,faf70330c73fdce087631bb06de8a12f", + "expected_bias.gz:md5,3407f87245d0003e0ffbfdf6d8c04f20", + "observed_bias.gz:md5,92bcd0592d22a6a58d0360fc76103e56", + "observed_bias_3p.gz:md5,92bcd0592d22a6a58d0360fc76103e56", + "cmd_info.json:md5,563fd8191cc965524621c2afea7983ff", + "expected_bias.gz:md5,3407f87245d0003e0ffbfdf6d8c04f20", + "observed_bias.gz:md5,92bcd0592d22a6a58d0360fc76103e56", + "observed_bias_3p.gz:md5,92bcd0592d22a6a58d0360fc76103e56", + "cmd_info.json:md5,867de0b90aeccb5f9627e821a973aea7", + "expected_bias.gz:md5,3407f87245d0003e0ffbfdf6d8c04f20", + "observed_bias.gz:md5,92bcd0592d22a6a58d0360fc76103e56", + "observed_bias_3p.gz:md5,92bcd0592d22a6a58d0360fc76103e56", + "cmd_info.json:md5,3a51e7db950cee84bed0b13e329f1934", + "RAP1_IAA_30M_REP1.SJ.out.tab:md5,ea95e243278af55534f2c52eb5fff7ee", + "RAP1_UNINDUCED_REP1.SJ.out.tab:md5,e548d13942535dc0821f3ec6d9743ec8", + "RAP1_UNINDUCED_REP2.SJ.out.tab:md5,1f294365343a1a5e95682792fdb77033", + "WT_REP1.SJ.out.tab:md5,1350c2fa6a675bf107386c6cd3fc5204", + "WT_REP2.SJ.out.tab:md5,f6cc03643a5e3c1025a5b4754eb1be23", + "salmon.merged.tx2gene.tsv:md5,0e2418a69d2eba45097ebffc2f700bfe" + ] + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.3" + }, + "timestamp": "2026-02-09T11:01:14.364447839" + }, + "Params: parabricks star_salmon (with markdups) - stub": { + "content": [ + 27, + { + "BBMAP_BBSPLIT": { + "bbmap": 39.18 + }, + "CAT_FASTQ": { + "cat": 9.5 + }, + "CUSTOM_CATADDITIONALFASTA": { + "python": "3.12.2" + }, + "FASTQC": { + "fastqc": "0.12.1" + }, + "FQ_LINT": { + "fq": "0.12.0" + }, + "GTF2BED": { + "perl": "5.26.2" + }, + "GTF_FILTER": { + "python": "3.9.5" + }, + "GUNZIP_ADDITIONAL_FASTA": { + "gunzip": 1.13 + }, + "GUNZIP_GTF": { + "gunzip": 1.13 + }, + "PARABRICKS_STARGENOMEGENERATE": { + "gawk": "5.1.0", + "samtools": 1.21, + "star": "2.7.2a" + }, + "SAMTOOLS_FAIDX": { + "samtools": "1.22.1" + }, + "TRIMGALORE": { + "trimgalore": "0.6.10" + }, + "UNTAR_SALMON_INDEX": { + "untar": 1.34 + } + }, + [ + "custom", + "custom/out", + "custom/out/genome_transcriptome.fasta", + "custom/out/genome_transcriptome.gtf", + "fastqc", + "fastqc/raw", + "fastqc/raw/RAP1_IAA_30M_REP1_raw.html", + "fastqc/raw/RAP1_IAA_30M_REP1_raw.zip", + "fastqc/raw/RAP1_UNINDUCED_REP1_raw.html", + "fastqc/raw/RAP1_UNINDUCED_REP1_raw.zip", + "fastqc/raw/RAP1_UNINDUCED_REP2_raw.html", + "fastqc/raw/RAP1_UNINDUCED_REP2_raw.zip", + "fastqc/raw/WT_REP1_raw.html", + "fastqc/raw/WT_REP1_raw.zip", + "fastqc/raw/WT_REP2_raw.html", + "fastqc/raw/WT_REP2_raw.zip", + "fastqc/trim", + "fq_lint", + "fq_lint/raw", + "fq_lint/raw/RAP1_IAA_30M_REP1.fq_lint.txt", + "fq_lint/raw/RAP1_UNINDUCED_REP1.fq_lint.txt", + "fq_lint/raw/RAP1_UNINDUCED_REP2.fq_lint.txt", + "fq_lint/raw/WT_REP1.fq_lint.txt", + "fq_lint/raw/WT_REP2.fq_lint.txt", + "multiqc", + "multiqc/star_salmon", + "multiqc/star_salmon/multiqc_data", + "multiqc/star_salmon/multiqc_data/.stub", + "multiqc/star_salmon/multiqc_plots", + "multiqc/star_salmon/multiqc_report.html", + "pipeline_info", + "pipeline_info/nf_core_rnaseq_software_mqc_versions.yml", + "trimgalore", + "trimgalore/RAP1_IAA_30M_REP1_trimmed_1.fastq.gz_trimming_report.txt", + "trimgalore/RAP1_IAA_30M_REP1_trimmed_2.fastq.gz_trimming_report.txt", + "trimgalore/RAP1_UNINDUCED_REP1_trimmed.fastq.gz_trimming_report.txt", + "trimgalore/RAP1_UNINDUCED_REP2_trimmed.fastq.gz_trimming_report.txt", + "trimgalore/WT_REP1_trimmed_1.fastq.gz_trimming_report.txt", + "trimgalore/WT_REP1_trimmed_2.fastq.gz_trimming_report.txt", + "trimgalore/WT_REP2_trimmed_1.fastq.gz_trimming_report.txt", + "trimgalore/WT_REP2_trimmed_2.fastq.gz_trimming_report.txt" + ], + [ + "genome_transcriptome.fasta:md5,d41d8cd98f00b204e9800998ecf8427e", + "genome_transcriptome.gtf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.3" + }, + "timestamp": "2026-02-06T08:42:09.878805304" + }, + "Params: parabricks star_salmon (no markdups) - stub": { + "content": [ + 27, + { + "BBMAP_BBSPLIT": { + "bbmap": 39.18 + }, + "CAT_FASTQ": { + "cat": 9.5 + }, + "CUSTOM_CATADDITIONALFASTA": { + "python": "3.12.2" + }, + "FASTQC": { + "fastqc": "0.12.1" + }, + "FQ_LINT": { + "fq": "0.12.0" + }, + "GTF2BED": { + "perl": "5.26.2" + }, + "GTF_FILTER": { + "python": "3.9.5" + }, + "GUNZIP_ADDITIONAL_FASTA": { + "gunzip": 1.13 + }, + "GUNZIP_GTF": { + "gunzip": 1.13 + }, + "PARABRICKS_STARGENOMEGENERATE": { + "gawk": "5.1.0", + "samtools": 1.21, + "star": "2.7.2a" + }, + "SAMTOOLS_FAIDX": { + "samtools": "1.22.1" + }, + "TRIMGALORE": { + "trimgalore": "0.6.10" + }, + "UNTAR_SALMON_INDEX": { + "untar": 1.34 + } + }, + [ + "custom", + "custom/out", + "custom/out/genome_transcriptome.fasta", + "custom/out/genome_transcriptome.gtf", + "fastqc", + "fastqc/raw", + "fastqc/raw/RAP1_IAA_30M_REP1_raw.html", + "fastqc/raw/RAP1_IAA_30M_REP1_raw.zip", + "fastqc/raw/RAP1_UNINDUCED_REP1_raw.html", + "fastqc/raw/RAP1_UNINDUCED_REP1_raw.zip", + "fastqc/raw/RAP1_UNINDUCED_REP2_raw.html", + "fastqc/raw/RAP1_UNINDUCED_REP2_raw.zip", + "fastqc/raw/WT_REP1_raw.html", + "fastqc/raw/WT_REP1_raw.zip", + "fastqc/raw/WT_REP2_raw.html", + "fastqc/raw/WT_REP2_raw.zip", + "fastqc/trim", + "fq_lint", + "fq_lint/raw", + "fq_lint/raw/RAP1_IAA_30M_REP1.fq_lint.txt", + "fq_lint/raw/RAP1_UNINDUCED_REP1.fq_lint.txt", + "fq_lint/raw/RAP1_UNINDUCED_REP2.fq_lint.txt", + "fq_lint/raw/WT_REP1.fq_lint.txt", + "fq_lint/raw/WT_REP2.fq_lint.txt", + "multiqc", + "multiqc/star_salmon", + "multiqc/star_salmon/multiqc_data", + "multiqc/star_salmon/multiqc_data/.stub", + "multiqc/star_salmon/multiqc_plots", + "multiqc/star_salmon/multiqc_report.html", + "pipeline_info", + "pipeline_info/nf_core_rnaseq_software_mqc_versions.yml", + "trimgalore", + "trimgalore/RAP1_IAA_30M_REP1_trimmed_1.fastq.gz_trimming_report.txt", + "trimgalore/RAP1_IAA_30M_REP1_trimmed_2.fastq.gz_trimming_report.txt", + "trimgalore/RAP1_UNINDUCED_REP1_trimmed.fastq.gz_trimming_report.txt", + "trimgalore/RAP1_UNINDUCED_REP2_trimmed.fastq.gz_trimming_report.txt", + "trimgalore/WT_REP1_trimmed_1.fastq.gz_trimming_report.txt", + "trimgalore/WT_REP1_trimmed_2.fastq.gz_trimming_report.txt", + "trimgalore/WT_REP2_trimmed_1.fastq.gz_trimming_report.txt", + "trimgalore/WT_REP2_trimmed_2.fastq.gz_trimming_report.txt" + ], + [ + "genome_transcriptome.fasta:md5,d41d8cd98f00b204e9800998ecf8427e", + "genome_transcriptome.gtf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.3" + }, + "timestamp": "2026-02-06T08:41:23.807002515" + }, + "Params: parabricks star_salmon (with markdups)": { + "content": [ + 99, + { + "BBMAP_BBSPLIT": { + "bbmap": 39.18 + }, + "CAT_FASTQ": { + "cat": 9.5 + }, + "CUSTOM_CATADDITIONALFASTA": { + "python": "3.12.2" + }, + "CUSTOM_TX2GENE": { + "python": "3.10.4" + }, + "DESEQ2_QC_BAM_SALMON": { + "bioconductor-deseq2": "1.46.0", + "r-base": "4.4.2" + }, + "DESEQ2_QC_PSEUDO": { + "bioconductor-deseq2": "1.46.0", + "r-base": "4.4.2" + }, + "FASTQC": { + "fastqc": "0.12.1" + }, + "FASTQC_FILTERED": { + "fastqc": "0.12.1" + }, + "FQ_LINT": { + "fq": "0.12.0" + }, + "FQ_LINT_AFTER_BBSPLIT": { + "fq": "0.12.0" + }, + "FQ_LINT_AFTER_TRIMMING": { + "fq": "0.12.0" + }, + "FQ_SUBSAMPLE": { + "fq": "0.12.0" + }, + "GTF2BED": { + "perl": "5.26.2" + }, + "GTF_FILTER": { + "python": "3.9.5" + }, + "GUNZIP_ADDITIONAL_FASTA": { + "gunzip": 1.13 + }, + "GUNZIP_GTF": { + "gunzip": 1.13 + }, + "PARABRICKS_RNA_FQ2BAM": { + "parabricks": "4.6.0-1" + }, + "PARABRICKS_STARGENOMEGENERATE": { + "gawk": "5.1.0", + "samtools": 1.21, + "star": "2.7.2a" + }, + "SALMON_QUANT": { + "salmon": "1.10.3" + }, + "SAMTOOLS_FAIDX": { + "samtools": "1.22.1" + }, + "SAMTOOLS_FLAGSTAT": { + "samtools": "1.22.1" + }, + "SAMTOOLS_IDXSTATS": { + "samtools": "1.22.1" + }, + "SAMTOOLS_INDEX": { + "samtools": "1.22.1" + }, + "SAMTOOLS_SORT": { + "samtools": "1.22.1" + }, + "SAMTOOLS_STATS": { + "samtools": "1.22.1" + }, + "SE_GENE_UNIFIED": { + "bioconductor-summarizedexperiment": "1.32.0" + }, + "SE_TRANSCRIPT_UNIFIED": { + "bioconductor-summarizedexperiment": "1.32.0" + }, + "TRIMGALORE": { + "trimgalore": "0.6.10" + }, + "TXIMETA_TXIMPORT": { + "bioconductor-tximeta": "1.20.1" + }, + "UNTAR_SALMON_INDEX": { + "untar": 1.34 + } + }, + [ + "bbsplit", + "bbsplit/RAP1_IAA_30M_REP1.stats.txt", + "bbsplit/RAP1_UNINDUCED_REP1.stats.txt", + "bbsplit/RAP1_UNINDUCED_REP2.stats.txt", + "bbsplit/WT_REP1.stats.txt", + "bbsplit/WT_REP2.stats.txt", + "custom", + "custom/out", + "custom/out/genome_gfp.fasta", + "custom/out/genome_gfp.gtf", + "fastqc", + "fastqc/filtered", + "fastqc/filtered/RAP1_IAA_30M_REP1_filtered_1_fastqc.html", + "fastqc/filtered/RAP1_IAA_30M_REP1_filtered_1_fastqc.zip", + "fastqc/filtered/RAP1_IAA_30M_REP1_filtered_2_fastqc.html", + "fastqc/filtered/RAP1_IAA_30M_REP1_filtered_2_fastqc.zip", + "fastqc/filtered/RAP1_UNINDUCED_REP1_filtered_fastqc.html", + "fastqc/filtered/RAP1_UNINDUCED_REP1_filtered_fastqc.zip", + "fastqc/filtered/RAP1_UNINDUCED_REP2_filtered_fastqc.html", + "fastqc/filtered/RAP1_UNINDUCED_REP2_filtered_fastqc.zip", + "fastqc/filtered/WT_REP1_filtered_1_fastqc.html", + "fastqc/filtered/WT_REP1_filtered_1_fastqc.zip", + "fastqc/filtered/WT_REP1_filtered_2_fastqc.html", + "fastqc/filtered/WT_REP1_filtered_2_fastqc.zip", + "fastqc/filtered/WT_REP2_filtered_1_fastqc.html", + "fastqc/filtered/WT_REP2_filtered_1_fastqc.zip", + "fastqc/filtered/WT_REP2_filtered_2_fastqc.html", + "fastqc/filtered/WT_REP2_filtered_2_fastqc.zip", + "fastqc/raw", + "fastqc/raw/RAP1_IAA_30M_REP1_raw_1_fastqc.html", + "fastqc/raw/RAP1_IAA_30M_REP1_raw_1_fastqc.zip", + "fastqc/raw/RAP1_IAA_30M_REP1_raw_2_fastqc.html", + "fastqc/raw/RAP1_IAA_30M_REP1_raw_2_fastqc.zip", + "fastqc/raw/RAP1_UNINDUCED_REP1_raw_fastqc.html", + "fastqc/raw/RAP1_UNINDUCED_REP1_raw_fastqc.zip", + "fastqc/raw/RAP1_UNINDUCED_REP2_raw_fastqc.html", + "fastqc/raw/RAP1_UNINDUCED_REP2_raw_fastqc.zip", + "fastqc/raw/WT_REP1_raw_1_fastqc.html", + "fastqc/raw/WT_REP1_raw_1_fastqc.zip", + "fastqc/raw/WT_REP1_raw_2_fastqc.html", + "fastqc/raw/WT_REP1_raw_2_fastqc.zip", + "fastqc/raw/WT_REP2_raw_1_fastqc.html", + "fastqc/raw/WT_REP2_raw_1_fastqc.zip", + "fastqc/raw/WT_REP2_raw_2_fastqc.html", + "fastqc/raw/WT_REP2_raw_2_fastqc.zip", + "fastqc/trim", + "fastqc/trim/RAP1_IAA_30M_REP1_trimmed_1_val_1_fastqc.html", + "fastqc/trim/RAP1_IAA_30M_REP1_trimmed_1_val_1_fastqc.zip", + "fastqc/trim/RAP1_IAA_30M_REP1_trimmed_2_val_2_fastqc.html", + "fastqc/trim/RAP1_IAA_30M_REP1_trimmed_2_val_2_fastqc.zip", + "fastqc/trim/RAP1_UNINDUCED_REP1_trimmed_trimmed_fastqc.html", + "fastqc/trim/RAP1_UNINDUCED_REP1_trimmed_trimmed_fastqc.zip", + "fastqc/trim/RAP1_UNINDUCED_REP2_trimmed_trimmed_fastqc.html", + "fastqc/trim/RAP1_UNINDUCED_REP2_trimmed_trimmed_fastqc.zip", + "fastqc/trim/WT_REP1_trimmed_1_val_1_fastqc.html", + "fastqc/trim/WT_REP1_trimmed_1_val_1_fastqc.zip", + "fastqc/trim/WT_REP1_trimmed_2_val_2_fastqc.html", + "fastqc/trim/WT_REP1_trimmed_2_val_2_fastqc.zip", + "fastqc/trim/WT_REP2_trimmed_1_val_1_fastqc.html", + "fastqc/trim/WT_REP2_trimmed_1_val_1_fastqc.zip", + "fastqc/trim/WT_REP2_trimmed_2_val_2_fastqc.html", + "fastqc/trim/WT_REP2_trimmed_2_val_2_fastqc.zip", + "fq_lint", + "fq_lint/bbsplit", + "fq_lint/bbsplit/RAP1_IAA_30M_REP1.fq_lint.txt", + "fq_lint/bbsplit/RAP1_UNINDUCED_REP1.fq_lint.txt", + "fq_lint/bbsplit/RAP1_UNINDUCED_REP2.fq_lint.txt", + "fq_lint/bbsplit/WT_REP1.fq_lint.txt", + "fq_lint/bbsplit/WT_REP2.fq_lint.txt", + "fq_lint/raw", + "fq_lint/raw/RAP1_IAA_30M_REP1.fq_lint.txt", + "fq_lint/raw/RAP1_UNINDUCED_REP1.fq_lint.txt", + "fq_lint/raw/RAP1_UNINDUCED_REP2.fq_lint.txt", + "fq_lint/raw/WT_REP1.fq_lint.txt", + "fq_lint/raw/WT_REP2.fq_lint.txt", + "fq_lint/trimmed", + "fq_lint/trimmed/RAP1_IAA_30M_REP1.fq_lint.txt", + "fq_lint/trimmed/RAP1_UNINDUCED_REP1.fq_lint.txt", + "fq_lint/trimmed/RAP1_UNINDUCED_REP2.fq_lint.txt", + "fq_lint/trimmed/WT_REP1.fq_lint.txt", + "fq_lint/trimmed/WT_REP2.fq_lint.txt", + "multiqc", + "multiqc/star_salmon", + "multiqc/star_salmon/multiqc_report.html", + "multiqc/star_salmon/multiqc_report_data", + "multiqc/star_salmon/multiqc_report_data/bbmap-bbsplit_plot.txt", + "multiqc/star_salmon/multiqc_report_data/bbmap.txt", + "multiqc/star_salmon/multiqc_report_data/bbsplit_stats_table.txt", + "multiqc/star_salmon/multiqc_report_data/cutadapt_filtered_reads_plot.txt", + "multiqc/star_salmon/multiqc_report_data/cutadapt_trimmed_sequences_plot_3_Counts.txt", + "multiqc/star_salmon/multiqc_report_data/cutadapt_trimmed_sequences_plot_3_Obs_Exp.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_filtered-status-check-heatmap.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_filtered_overrepresented_sequences_plot.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_filtered_per_base_n_content_plot.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_filtered_per_base_sequence_quality_plot.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_filtered_per_sequence_gc_content_plot_Counts.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_filtered_per_sequence_gc_content_plot_Percentages.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_filtered_per_sequence_quality_scores_plot.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_filtered_sequence_counts_plot.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_filtered_sequence_duplication_levels_plot.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_filtered_top_overrepresented_sequences_table.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_raw-status-check-heatmap.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_raw_adapter_content_plot.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_raw_overrepresented_sequences_plot.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_raw_per_base_n_content_plot.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_raw_per_base_sequence_quality_plot.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_raw_per_sequence_gc_content_plot_Counts.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_raw_per_sequence_gc_content_plot_Percentages.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_raw_per_sequence_quality_scores_plot.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_raw_sequence_counts_plot.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_raw_sequence_duplication_levels_plot.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_raw_top_overrepresented_sequences_table.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_sequence_length_distribution_plot.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_trimmed-status-check-heatmap.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_trimmed_overrepresented_sequences_plot.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_trimmed_per_base_n_content_plot.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_trimmed_per_base_sequence_quality_plot.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_trimmed_per_sequence_gc_content_plot_Counts.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_trimmed_per_sequence_gc_content_plot_Percentages.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_trimmed_per_sequence_quality_scores_plot.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_trimmed_sequence_counts_plot.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_trimmed_sequence_duplication_levels_plot.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_trimmed_top_overrepresented_sequences_table.txt", + "multiqc/star_salmon/multiqc_report_data/llms-full.txt", + "multiqc/star_salmon/multiqc_report_data/multiqc.log", + "multiqc/star_salmon/multiqc_report_data/multiqc.parquet", + "multiqc/star_salmon/multiqc_report_data/multiqc_citations.txt", + "multiqc/star_salmon/multiqc_report_data/multiqc_cutadapt.txt", + "multiqc/star_salmon/multiqc_report_data/multiqc_data.json", + "multiqc/star_salmon/multiqc_report_data/multiqc_fail_mapped_samples_table.txt", + "multiqc/star_salmon/multiqc_report_data/multiqc_fastqc_fastqc_filtered.txt", + "multiqc/star_salmon/multiqc_report_data/multiqc_fastqc_fastqc_raw.txt", + "multiqc/star_salmon/multiqc_report_data/multiqc_fastqc_fastqc_trimmed.txt", + "multiqc/star_salmon/multiqc_report_data/multiqc_general_stats.txt", + "multiqc/star_salmon/multiqc_report_data/multiqc_salmon.txt", + "multiqc/star_salmon/multiqc_report_data/multiqc_salmon_deseq2_clustering.txt", + "multiqc/star_salmon/multiqc_report_data/multiqc_salmon_deseq2_pca.txt", + "multiqc/star_salmon/multiqc_report_data/multiqc_samtools_flagstat.txt", + "multiqc/star_salmon/multiqc_report_data/multiqc_samtools_idxstats.txt", + "multiqc/star_salmon/multiqc_report_data/multiqc_samtools_stats.txt", + "multiqc/star_salmon/multiqc_report_data/multiqc_software_versions.txt", + "multiqc/star_salmon/multiqc_report_data/multiqc_sources.txt", + "multiqc/star_salmon/multiqc_report_data/multiqc_star_salmon_deseq2_clustering.txt", + "multiqc/star_salmon/multiqc_report_data/multiqc_star_salmon_deseq2_pca.txt", + "multiqc/star_salmon/multiqc_report_data/salmon_plot.txt", + "multiqc/star_salmon/multiqc_report_data/samtools-flagstat-pct-table.txt", + "multiqc/star_salmon/multiqc_report_data/samtools-flagstat-table.txt", + "multiqc/star_salmon/multiqc_report_data/samtools-idxstats-mapped-reads-plot_Normalised_Counts.txt", + "multiqc/star_salmon/multiqc_report_data/samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts.txt", + "multiqc/star_salmon/multiqc_report_data/samtools-idxstats-mapped-reads-plot_Raw_Counts.txt", + "multiqc/star_salmon/multiqc_report_data/samtools-stats-dp.txt", + "multiqc/star_salmon/multiqc_report_data/samtools_alignment_plot.txt", + "multiqc/star_salmon/multiqc_report_plots", + "multiqc/star_salmon/multiqc_report_plots/pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/bbmap-bbsplit_plot-cnt.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/bbmap-bbsplit_plot-pct.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/bbsplit_stats_table.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/cutadapt_filtered_reads_plot-cnt.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/cutadapt_filtered_reads_plot-pct.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/cutadapt_trimmed_sequences_plot_3_Counts.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/cutadapt_trimmed_sequences_plot_3_Obs_Exp.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fail_mapped_samples_table.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_filtered-status-check-heatmap.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_filtered_overrepresented_sequences_plot.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_filtered_per_base_n_content_plot.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_filtered_per_base_sequence_quality_plot.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_filtered_per_sequence_gc_content_plot_Counts.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_filtered_per_sequence_gc_content_plot_Percentages.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_filtered_per_sequence_quality_scores_plot.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_filtered_sequence_counts_plot-cnt.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_filtered_sequence_counts_plot-pct.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_filtered_sequence_duplication_levels_plot.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_filtered_top_overrepresented_sequences_table.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_raw-status-check-heatmap.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_raw_adapter_content_plot.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_raw_overrepresented_sequences_plot.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_raw_per_base_n_content_plot.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_raw_per_base_sequence_quality_plot.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_raw_per_sequence_gc_content_plot_Counts.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_raw_per_sequence_gc_content_plot_Percentages.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_raw_per_sequence_quality_scores_plot.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_raw_sequence_counts_plot-cnt.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_raw_sequence_counts_plot-pct.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_raw_sequence_duplication_levels_plot.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_raw_top_overrepresented_sequences_table.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_sequence_length_distribution_plot.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_trimmed-status-check-heatmap.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_trimmed_overrepresented_sequences_plot.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_trimmed_per_base_n_content_plot.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_trimmed_per_base_sequence_quality_plot.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_trimmed_per_sequence_gc_content_plot_Counts.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_trimmed_per_sequence_gc_content_plot_Percentages.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_trimmed_per_sequence_quality_scores_plot.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_trimmed_sequence_counts_plot-cnt.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_trimmed_sequence_counts_plot-pct.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_trimmed_sequence_duplication_levels_plot.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_trimmed_top_overrepresented_sequences_table.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/salmon_deseq2_clustering.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/salmon_deseq2_pca.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/salmon_plot.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/samtools-flagstat-pct-table.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/samtools-flagstat-table.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/samtools-idxstats-mapped-reads-plot_Normalised_Counts-cnt.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/samtools-idxstats-mapped-reads-plot_Normalised_Counts-log.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts-cnt.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts-log.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/samtools-idxstats-mapped-reads-plot_Raw_Counts-cnt.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/samtools-idxstats-mapped-reads-plot_Raw_Counts-log.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/samtools-stats-dp.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/samtools_alignment_plot-cnt.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/samtools_alignment_plot-pct.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/star_salmon_deseq2_clustering.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/star_salmon_deseq2_pca.pdf", + "multiqc/star_salmon/multiqc_report_plots/png", + "multiqc/star_salmon/multiqc_report_plots/png/bbmap-bbsplit_plot-cnt.png", + "multiqc/star_salmon/multiqc_report_plots/png/bbmap-bbsplit_plot-pct.png", + "multiqc/star_salmon/multiqc_report_plots/png/bbsplit_stats_table.png", + "multiqc/star_salmon/multiqc_report_plots/png/cutadapt_filtered_reads_plot-cnt.png", + "multiqc/star_salmon/multiqc_report_plots/png/cutadapt_filtered_reads_plot-pct.png", + "multiqc/star_salmon/multiqc_report_plots/png/cutadapt_trimmed_sequences_plot_3_Counts.png", + "multiqc/star_salmon/multiqc_report_plots/png/cutadapt_trimmed_sequences_plot_3_Obs_Exp.png", + "multiqc/star_salmon/multiqc_report_plots/png/fail_mapped_samples_table.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_filtered-status-check-heatmap.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_filtered_overrepresented_sequences_plot.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_filtered_per_base_n_content_plot.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_filtered_per_base_sequence_quality_plot.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_filtered_per_sequence_gc_content_plot_Counts.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_filtered_per_sequence_gc_content_plot_Percentages.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_filtered_per_sequence_quality_scores_plot.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_filtered_sequence_counts_plot-cnt.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_filtered_sequence_counts_plot-pct.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_filtered_sequence_duplication_levels_plot.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_filtered_top_overrepresented_sequences_table.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_raw-status-check-heatmap.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_raw_adapter_content_plot.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_raw_overrepresented_sequences_plot.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_raw_per_base_n_content_plot.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_raw_per_base_sequence_quality_plot.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_raw_per_sequence_gc_content_plot_Counts.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_raw_per_sequence_gc_content_plot_Percentages.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_raw_per_sequence_quality_scores_plot.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_raw_sequence_counts_plot-cnt.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_raw_sequence_counts_plot-pct.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_raw_sequence_duplication_levels_plot.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_raw_top_overrepresented_sequences_table.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_sequence_length_distribution_plot.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_trimmed-status-check-heatmap.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_trimmed_overrepresented_sequences_plot.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_trimmed_per_base_n_content_plot.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_trimmed_per_base_sequence_quality_plot.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_trimmed_per_sequence_gc_content_plot_Counts.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_trimmed_per_sequence_gc_content_plot_Percentages.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_trimmed_per_sequence_quality_scores_plot.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_trimmed_sequence_counts_plot-cnt.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_trimmed_sequence_counts_plot-pct.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_trimmed_sequence_duplication_levels_plot.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_trimmed_top_overrepresented_sequences_table.png", + "multiqc/star_salmon/multiqc_report_plots/png/salmon_deseq2_clustering.png", + "multiqc/star_salmon/multiqc_report_plots/png/salmon_deseq2_pca.png", + "multiqc/star_salmon/multiqc_report_plots/png/salmon_plot.png", + "multiqc/star_salmon/multiqc_report_plots/png/samtools-flagstat-pct-table.png", + "multiqc/star_salmon/multiqc_report_plots/png/samtools-flagstat-table.png", + "multiqc/star_salmon/multiqc_report_plots/png/samtools-idxstats-mapped-reads-plot_Normalised_Counts-cnt.png", + "multiqc/star_salmon/multiqc_report_plots/png/samtools-idxstats-mapped-reads-plot_Normalised_Counts-log.png", + "multiqc/star_salmon/multiqc_report_plots/png/samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts-cnt.png", + "multiqc/star_salmon/multiqc_report_plots/png/samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts-log.png", + "multiqc/star_salmon/multiqc_report_plots/png/samtools-idxstats-mapped-reads-plot_Raw_Counts-cnt.png", + "multiqc/star_salmon/multiqc_report_plots/png/samtools-idxstats-mapped-reads-plot_Raw_Counts-log.png", + "multiqc/star_salmon/multiqc_report_plots/png/samtools-stats-dp.png", + "multiqc/star_salmon/multiqc_report_plots/png/samtools_alignment_plot-cnt.png", + "multiqc/star_salmon/multiqc_report_plots/png/samtools_alignment_plot-pct.png", + "multiqc/star_salmon/multiqc_report_plots/png/star_salmon_deseq2_clustering.png", + "multiqc/star_salmon/multiqc_report_plots/png/star_salmon_deseq2_pca.png", + "multiqc/star_salmon/multiqc_report_plots/svg", + "multiqc/star_salmon/multiqc_report_plots/svg/bbmap-bbsplit_plot-cnt.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/bbmap-bbsplit_plot-pct.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/bbsplit_stats_table.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/cutadapt_filtered_reads_plot-cnt.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/cutadapt_filtered_reads_plot-pct.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/cutadapt_trimmed_sequences_plot_3_Counts.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/cutadapt_trimmed_sequences_plot_3_Obs_Exp.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fail_mapped_samples_table.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_filtered-status-check-heatmap.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_filtered_overrepresented_sequences_plot.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_filtered_per_base_n_content_plot.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_filtered_per_base_sequence_quality_plot.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_filtered_per_sequence_gc_content_plot_Counts.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_filtered_per_sequence_gc_content_plot_Percentages.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_filtered_per_sequence_quality_scores_plot.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_filtered_sequence_counts_plot-cnt.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_filtered_sequence_counts_plot-pct.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_filtered_sequence_duplication_levels_plot.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_filtered_top_overrepresented_sequences_table.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_raw-status-check-heatmap.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_raw_adapter_content_plot.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_raw_overrepresented_sequences_plot.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_raw_per_base_n_content_plot.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_raw_per_base_sequence_quality_plot.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_raw_per_sequence_gc_content_plot_Counts.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_raw_per_sequence_gc_content_plot_Percentages.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_raw_per_sequence_quality_scores_plot.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_raw_sequence_counts_plot-cnt.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_raw_sequence_counts_plot-pct.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_raw_sequence_duplication_levels_plot.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_raw_top_overrepresented_sequences_table.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_sequence_length_distribution_plot.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_trimmed-status-check-heatmap.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_trimmed_overrepresented_sequences_plot.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_trimmed_per_base_n_content_plot.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_trimmed_per_base_sequence_quality_plot.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_trimmed_per_sequence_gc_content_plot_Counts.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_trimmed_per_sequence_gc_content_plot_Percentages.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_trimmed_per_sequence_quality_scores_plot.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_trimmed_sequence_counts_plot-cnt.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_trimmed_sequence_counts_plot-pct.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_trimmed_sequence_duplication_levels_plot.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_trimmed_top_overrepresented_sequences_table.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/salmon_deseq2_clustering.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/salmon_deseq2_pca.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/salmon_plot.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/samtools-flagstat-pct-table.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/samtools-flagstat-table.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/samtools-idxstats-mapped-reads-plot_Normalised_Counts-cnt.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/samtools-idxstats-mapped-reads-plot_Normalised_Counts-log.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts-cnt.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts-log.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/samtools-idxstats-mapped-reads-plot_Raw_Counts-cnt.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/samtools-idxstats-mapped-reads-plot_Raw_Counts-log.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/samtools-stats-dp.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/samtools_alignment_plot-cnt.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/samtools_alignment_plot-pct.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/star_salmon_deseq2_clustering.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/star_salmon_deseq2_pca.svg", + "pipeline_info", + "pipeline_info/nf_core_rnaseq_software_mqc_versions.yml", + "salmon", + "salmon/RAP1_IAA_30M_REP1", + "salmon/RAP1_IAA_30M_REP1/aux_info", + "salmon/RAP1_IAA_30M_REP1/aux_info/ambig_info.tsv", + "salmon/RAP1_IAA_30M_REP1/aux_info/expected_bias.gz", + "salmon/RAP1_IAA_30M_REP1/aux_info/fld.gz", + "salmon/RAP1_IAA_30M_REP1/aux_info/meta_info.json", + "salmon/RAP1_IAA_30M_REP1/aux_info/observed_bias.gz", + "salmon/RAP1_IAA_30M_REP1/aux_info/observed_bias_3p.gz", + "salmon/RAP1_IAA_30M_REP1/cmd_info.json", + "salmon/RAP1_IAA_30M_REP1/libParams", + "salmon/RAP1_IAA_30M_REP1/libParams/flenDist.txt", + "salmon/RAP1_IAA_30M_REP1/lib_format_counts.json", + "salmon/RAP1_IAA_30M_REP1/logs", + "salmon/RAP1_IAA_30M_REP1/logs/salmon_quant.log", + "salmon/RAP1_IAA_30M_REP1/quant.genes.sf", + "salmon/RAP1_IAA_30M_REP1/quant.sf", + "salmon/RAP1_UNINDUCED_REP1", + "salmon/RAP1_UNINDUCED_REP1/aux_info", + "salmon/RAP1_UNINDUCED_REP1/aux_info/ambig_info.tsv", + "salmon/RAP1_UNINDUCED_REP1/aux_info/expected_bias.gz", + "salmon/RAP1_UNINDUCED_REP1/aux_info/fld.gz", + "salmon/RAP1_UNINDUCED_REP1/aux_info/meta_info.json", + "salmon/RAP1_UNINDUCED_REP1/aux_info/observed_bias.gz", + "salmon/RAP1_UNINDUCED_REP1/aux_info/observed_bias_3p.gz", + "salmon/RAP1_UNINDUCED_REP1/cmd_info.json", + "salmon/RAP1_UNINDUCED_REP1/libParams", + "salmon/RAP1_UNINDUCED_REP1/libParams/flenDist.txt", + "salmon/RAP1_UNINDUCED_REP1/lib_format_counts.json", + "salmon/RAP1_UNINDUCED_REP1/logs", + "salmon/RAP1_UNINDUCED_REP1/logs/salmon_quant.log", + "salmon/RAP1_UNINDUCED_REP1/quant.genes.sf", + "salmon/RAP1_UNINDUCED_REP1/quant.sf", + "salmon/RAP1_UNINDUCED_REP2", + "salmon/RAP1_UNINDUCED_REP2/aux_info", + "salmon/RAP1_UNINDUCED_REP2/aux_info/ambig_info.tsv", + "salmon/RAP1_UNINDUCED_REP2/aux_info/expected_bias.gz", + "salmon/RAP1_UNINDUCED_REP2/aux_info/fld.gz", + "salmon/RAP1_UNINDUCED_REP2/aux_info/meta_info.json", + "salmon/RAP1_UNINDUCED_REP2/aux_info/observed_bias.gz", + "salmon/RAP1_UNINDUCED_REP2/aux_info/observed_bias_3p.gz", + "salmon/RAP1_UNINDUCED_REP2/cmd_info.json", + "salmon/RAP1_UNINDUCED_REP2/libParams", + "salmon/RAP1_UNINDUCED_REP2/libParams/flenDist.txt", + "salmon/RAP1_UNINDUCED_REP2/lib_format_counts.json", + "salmon/RAP1_UNINDUCED_REP2/logs", + "salmon/RAP1_UNINDUCED_REP2/logs/salmon_quant.log", + "salmon/RAP1_UNINDUCED_REP2/quant.genes.sf", + "salmon/RAP1_UNINDUCED_REP2/quant.sf", + "salmon/WT_REP1", + "salmon/WT_REP1/aux_info", + "salmon/WT_REP1/aux_info/ambig_info.tsv", + "salmon/WT_REP1/aux_info/expected_bias.gz", + "salmon/WT_REP1/aux_info/fld.gz", + "salmon/WT_REP1/aux_info/meta_info.json", + "salmon/WT_REP1/aux_info/observed_bias.gz", + "salmon/WT_REP1/aux_info/observed_bias_3p.gz", + "salmon/WT_REP1/cmd_info.json", + "salmon/WT_REP1/libParams", + "salmon/WT_REP1/libParams/flenDist.txt", + "salmon/WT_REP1/lib_format_counts.json", + "salmon/WT_REP1/logs", + "salmon/WT_REP1/logs/salmon_quant.log", + "salmon/WT_REP1/quant.genes.sf", + "salmon/WT_REP1/quant.sf", + "salmon/WT_REP2", + "salmon/WT_REP2/aux_info", + "salmon/WT_REP2/aux_info/ambig_info.tsv", + "salmon/WT_REP2/aux_info/expected_bias.gz", + "salmon/WT_REP2/aux_info/fld.gz", + "salmon/WT_REP2/aux_info/meta_info.json", + "salmon/WT_REP2/aux_info/observed_bias.gz", + "salmon/WT_REP2/aux_info/observed_bias_3p.gz", + "salmon/WT_REP2/cmd_info.json", + "salmon/WT_REP2/libParams", + "salmon/WT_REP2/libParams/flenDist.txt", + "salmon/WT_REP2/lib_format_counts.json", + "salmon/WT_REP2/logs", + "salmon/WT_REP2/logs/salmon_quant.log", + "salmon/WT_REP2/quant.genes.sf", + "salmon/WT_REP2/quant.sf", + "salmon/deseq2_qc", + "salmon/deseq2_qc/R_sessionInfo.log", + "salmon/deseq2_qc/deseq2.dds.RData", + "salmon/deseq2_qc/deseq2.pca.vals.txt", + "salmon/deseq2_qc/deseq2.plots.pdf", + "salmon/deseq2_qc/deseq2.sample.dists.txt", + "salmon/deseq2_qc/size_factors", + "salmon/deseq2_qc/size_factors/RAP1_IAA_30M_REP1.txt", + "salmon/deseq2_qc/size_factors/RAP1_UNINDUCED_REP1.txt", + "salmon/deseq2_qc/size_factors/RAP1_UNINDUCED_REP2.txt", + "salmon/deseq2_qc/size_factors/WT_REP1.txt", + "salmon/deseq2_qc/size_factors/WT_REP2.txt", + "salmon/deseq2_qc/size_factors/deseq2.size_factors.RData", + "salmon/salmon.merged.gene.SummarizedExperiment.rds", + "salmon/salmon.merged.gene_counts.tsv", + "salmon/salmon.merged.gene_counts_length_scaled.tsv", + "salmon/salmon.merged.gene_counts_scaled.tsv", + "salmon/salmon.merged.gene_lengths.tsv", + "salmon/salmon.merged.gene_tpm.tsv", + "salmon/salmon.merged.transcript.SummarizedExperiment.rds", + "salmon/salmon.merged.transcript_counts.tsv", + "salmon/salmon.merged.transcript_lengths.tsv", + "salmon/salmon.merged.transcript_tpm.tsv", + "salmon/salmon.merged.tx2gene.tsv", + "star_salmon", + "star_salmon/RAP1_IAA_30M_REP1", + "star_salmon/RAP1_IAA_30M_REP1/aux_info", + "star_salmon/RAP1_IAA_30M_REP1/aux_info/ambig_info.tsv", + "star_salmon/RAP1_IAA_30M_REP1/aux_info/expected_bias.gz", + "star_salmon/RAP1_IAA_30M_REP1/aux_info/fld.gz", + "star_salmon/RAP1_IAA_30M_REP1/aux_info/meta_info.json", + "star_salmon/RAP1_IAA_30M_REP1/aux_info/observed_bias.gz", + "star_salmon/RAP1_IAA_30M_REP1/aux_info/observed_bias_3p.gz", + "star_salmon/RAP1_IAA_30M_REP1/cmd_info.json", + "star_salmon/RAP1_IAA_30M_REP1/libParams", + "star_salmon/RAP1_IAA_30M_REP1/libParams/flenDist.txt", + "star_salmon/RAP1_IAA_30M_REP1/logs", + "star_salmon/RAP1_IAA_30M_REP1/logs/salmon_quant.log", + "star_salmon/RAP1_IAA_30M_REP1/quant.genes.sf", + "star_salmon/RAP1_IAA_30M_REP1/quant.sf", + "star_salmon/RAP1_UNINDUCED_REP1", + "star_salmon/RAP1_UNINDUCED_REP1/aux_info", + "star_salmon/RAP1_UNINDUCED_REP1/aux_info/ambig_info.tsv", + "star_salmon/RAP1_UNINDUCED_REP1/aux_info/expected_bias.gz", + "star_salmon/RAP1_UNINDUCED_REP1/aux_info/fld.gz", + "star_salmon/RAP1_UNINDUCED_REP1/aux_info/meta_info.json", + "star_salmon/RAP1_UNINDUCED_REP1/aux_info/observed_bias.gz", + "star_salmon/RAP1_UNINDUCED_REP1/aux_info/observed_bias_3p.gz", + "star_salmon/RAP1_UNINDUCED_REP1/cmd_info.json", + "star_salmon/RAP1_UNINDUCED_REP1/libParams", + "star_salmon/RAP1_UNINDUCED_REP1/libParams/flenDist.txt", + "star_salmon/RAP1_UNINDUCED_REP1/logs", + "star_salmon/RAP1_UNINDUCED_REP1/logs/salmon_quant.log", + "star_salmon/RAP1_UNINDUCED_REP1/quant.genes.sf", + "star_salmon/RAP1_UNINDUCED_REP1/quant.sf", + "star_salmon/RAP1_UNINDUCED_REP2", + "star_salmon/RAP1_UNINDUCED_REP2/aux_info", + "star_salmon/RAP1_UNINDUCED_REP2/aux_info/ambig_info.tsv", + "star_salmon/RAP1_UNINDUCED_REP2/aux_info/expected_bias.gz", + "star_salmon/RAP1_UNINDUCED_REP2/aux_info/fld.gz", + "star_salmon/RAP1_UNINDUCED_REP2/aux_info/meta_info.json", + "star_salmon/RAP1_UNINDUCED_REP2/aux_info/observed_bias.gz", + "star_salmon/RAP1_UNINDUCED_REP2/aux_info/observed_bias_3p.gz", + "star_salmon/RAP1_UNINDUCED_REP2/cmd_info.json", + "star_salmon/RAP1_UNINDUCED_REP2/libParams", + "star_salmon/RAP1_UNINDUCED_REP2/libParams/flenDist.txt", + "star_salmon/RAP1_UNINDUCED_REP2/logs", + "star_salmon/RAP1_UNINDUCED_REP2/logs/salmon_quant.log", + "star_salmon/RAP1_UNINDUCED_REP2/quant.genes.sf", + "star_salmon/RAP1_UNINDUCED_REP2/quant.sf", + "star_salmon/WT_REP1", + "star_salmon/WT_REP1/aux_info", + "star_salmon/WT_REP1/aux_info/ambig_info.tsv", + "star_salmon/WT_REP1/aux_info/expected_bias.gz", + "star_salmon/WT_REP1/aux_info/fld.gz", + "star_salmon/WT_REP1/aux_info/meta_info.json", + "star_salmon/WT_REP1/aux_info/observed_bias.gz", + "star_salmon/WT_REP1/aux_info/observed_bias_3p.gz", + "star_salmon/WT_REP1/cmd_info.json", + "star_salmon/WT_REP1/libParams", + "star_salmon/WT_REP1/libParams/flenDist.txt", + "star_salmon/WT_REP1/logs", + "star_salmon/WT_REP1/logs/salmon_quant.log", + "star_salmon/WT_REP1/quant.genes.sf", + "star_salmon/WT_REP1/quant.sf", + "star_salmon/WT_REP2", + "star_salmon/WT_REP2/aux_info", + "star_salmon/WT_REP2/aux_info/ambig_info.tsv", + "star_salmon/WT_REP2/aux_info/expected_bias.gz", + "star_salmon/WT_REP2/aux_info/fld.gz", + "star_salmon/WT_REP2/aux_info/meta_info.json", + "star_salmon/WT_REP2/aux_info/observed_bias.gz", + "star_salmon/WT_REP2/aux_info/observed_bias_3p.gz", + "star_salmon/WT_REP2/cmd_info.json", + "star_salmon/WT_REP2/libParams", + "star_salmon/WT_REP2/libParams/flenDist.txt", + "star_salmon/WT_REP2/logs", + "star_salmon/WT_REP2/logs/salmon_quant.log", + "star_salmon/WT_REP2/quant.genes.sf", + "star_salmon/WT_REP2/quant.sf", + "star_salmon/deseq2_qc", + "star_salmon/deseq2_qc/R_sessionInfo.log", + "star_salmon/deseq2_qc/deseq2.dds.RData", + "star_salmon/deseq2_qc/deseq2.pca.vals.txt", + "star_salmon/deseq2_qc/deseq2.plots.pdf", + "star_salmon/deseq2_qc/deseq2.sample.dists.txt", + "star_salmon/deseq2_qc/size_factors", + "star_salmon/deseq2_qc/size_factors/RAP1_IAA_30M_REP1.txt", + "star_salmon/deseq2_qc/size_factors/RAP1_UNINDUCED_REP1.txt", + "star_salmon/deseq2_qc/size_factors/RAP1_UNINDUCED_REP2.txt", + "star_salmon/deseq2_qc/size_factors/WT_REP1.txt", + "star_salmon/deseq2_qc/size_factors/WT_REP2.txt", + "star_salmon/deseq2_qc/size_factors/deseq2.size_factors.RData", + "star_salmon/log", + "star_salmon/log/RAP1_IAA_30M_REP1.Log.final.out", + "star_salmon/log/RAP1_IAA_30M_REP1.Log.out", + "star_salmon/log/RAP1_IAA_30M_REP1.Log.progress.out", + "star_salmon/log/RAP1_IAA_30M_REP1.SJ.out.tab", + "star_salmon/log/RAP1_UNINDUCED_REP1.Log.final.out", + "star_salmon/log/RAP1_UNINDUCED_REP1.Log.out", + "star_salmon/log/RAP1_UNINDUCED_REP1.Log.progress.out", + "star_salmon/log/RAP1_UNINDUCED_REP1.SJ.out.tab", + "star_salmon/log/RAP1_UNINDUCED_REP2.Log.final.out", + "star_salmon/log/RAP1_UNINDUCED_REP2.Log.out", + "star_salmon/log/RAP1_UNINDUCED_REP2.Log.progress.out", + "star_salmon/log/RAP1_UNINDUCED_REP2.SJ.out.tab", + "star_salmon/log/WT_REP1.Log.final.out", + "star_salmon/log/WT_REP1.Log.out", + "star_salmon/log/WT_REP1.Log.progress.out", + "star_salmon/log/WT_REP1.SJ.out.tab", + "star_salmon/log/WT_REP2.Log.final.out", + "star_salmon/log/WT_REP2.Log.out", + "star_salmon/log/WT_REP2.Log.progress.out", + "star_salmon/log/WT_REP2.SJ.out.tab", + "star_salmon/salmon.merged.gene.SummarizedExperiment.rds", + "star_salmon/salmon.merged.gene_counts.tsv", + "star_salmon/salmon.merged.gene_counts_length_scaled.tsv", + "star_salmon/salmon.merged.gene_counts_scaled.tsv", + "star_salmon/salmon.merged.gene_lengths.tsv", + "star_salmon/salmon.merged.gene_tpm.tsv", + "star_salmon/salmon.merged.transcript.SummarizedExperiment.rds", + "star_salmon/salmon.merged.transcript_counts.tsv", + "star_salmon/salmon.merged.transcript_lengths.tsv", + "star_salmon/salmon.merged.transcript_tpm.tsv", + "star_salmon/salmon.merged.tx2gene.tsv", + "star_salmon/samtools_stats", + "star_salmon/samtools_stats/RAP1_IAA_30M_REP1.sorted.bam.flagstat", + "star_salmon/samtools_stats/RAP1_IAA_30M_REP1.sorted.bam.idxstats", + "star_salmon/samtools_stats/RAP1_IAA_30M_REP1.sorted.bam.stats", + "star_salmon/samtools_stats/RAP1_UNINDUCED_REP1.sorted.bam.flagstat", + "star_salmon/samtools_stats/RAP1_UNINDUCED_REP1.sorted.bam.idxstats", + "star_salmon/samtools_stats/RAP1_UNINDUCED_REP1.sorted.bam.stats", + "star_salmon/samtools_stats/RAP1_UNINDUCED_REP2.sorted.bam.flagstat", + "star_salmon/samtools_stats/RAP1_UNINDUCED_REP2.sorted.bam.idxstats", + "star_salmon/samtools_stats/RAP1_UNINDUCED_REP2.sorted.bam.stats", + "star_salmon/samtools_stats/WT_REP1.sorted.bam.flagstat", + "star_salmon/samtools_stats/WT_REP1.sorted.bam.idxstats", + "star_salmon/samtools_stats/WT_REP1.sorted.bam.stats", + "star_salmon/samtools_stats/WT_REP2.sorted.bam.flagstat", + "star_salmon/samtools_stats/WT_REP2.sorted.bam.idxstats", + "star_salmon/samtools_stats/WT_REP2.sorted.bam.stats", + "trimgalore", + "trimgalore/RAP1_IAA_30M_REP1_trimmed_1.fastq.gz_trimming_report.txt", + "trimgalore/RAP1_IAA_30M_REP1_trimmed_2.fastq.gz_trimming_report.txt", + "trimgalore/RAP1_UNINDUCED_REP1_trimmed.fastq.gz_trimming_report.txt", + "trimgalore/RAP1_UNINDUCED_REP2_trimmed.fastq.gz_trimming_report.txt", + "trimgalore/WT_REP1_trimmed_1.fastq.gz_trimming_report.txt", + "trimgalore/WT_REP1_trimmed_2.fastq.gz_trimming_report.txt", + "trimgalore/WT_REP2_trimmed_1.fastq.gz_trimming_report.txt", + "trimgalore/WT_REP2_trimmed_2.fastq.gz_trimming_report.txt" + ], + [ + "genome_gfp.fasta:md5,e23e302af63736a199985a169fdac055", + "genome_gfp.gtf:md5,c98b12c302f15731bfc36bcf297cfe28", + "cutadapt_filtered_reads_plot.txt:md5,6fa381627f7c1f664f3d4b2cb79cce90", + "cutadapt_trimmed_sequences_plot_3_Counts.txt:md5,13dfa866fd91dbb072689efe9aa83b1f", + "cutadapt_trimmed_sequences_plot_3_Obs_Exp.txt:md5,07145dd8dd3db654859b18eb0389046c", + "fastqc_raw-status-check-heatmap.txt:md5,5a89b0d8d162f6b1dbdaf39457bbc03b", + "fastqc_raw_adapter_content_plot.txt:md5,da0389be84cfdd189b1d045212eb2974", + "fastqc_raw_overrepresented_sequences_plot.txt:md5,25d88ea8a72f55e8a374ae802bc7f0b1", + "fastqc_raw_per_base_n_content_plot.txt:md5,d368d7e36ca2f73dcde61f2b486d8213", + "fastqc_raw_per_base_sequence_quality_plot.txt:md5,5c3065b549129702b185ea1b817da420", + "fastqc_raw_per_sequence_gc_content_plot_Counts.txt:md5,9ddaa50167117d3c9188ccf015427704", + "fastqc_raw_per_sequence_gc_content_plot_Percentages.txt:md5,f10ee2881b61308af35f304aa3d810a3", + "fastqc_raw_per_sequence_quality_scores_plot.txt:md5,b5f9a02933e3065952237afd2ec9ce82", + "fastqc_raw_sequence_counts_plot.txt:md5,cbae4979d5db66d3b894abcf8d1c453c", + "fastqc_raw_sequence_duplication_levels_plot.txt:md5,8812cee16f6ca65e2c33635754de1772", + "fastqc_trimmed-status-check-heatmap.txt:md5,22a03548736b88b23be6bc0c9ef1b4a6", + "fastqc_trimmed_overrepresented_sequences_plot.txt:md5,c755e9d044ea1a82b2c8edde867b4878", + "fastqc_trimmed_per_base_n_content_plot.txt:md5,418610c1ce119cb786ad434db75d366e", + "fastqc_trimmed_per_base_sequence_quality_plot.txt:md5,bd22e06e41c096ad4f745d40fe96a1e5", + "fastqc_trimmed_per_sequence_gc_content_plot_Counts.txt:md5,004c60768ceb6197765154e3eaa37b7a", + "fastqc_trimmed_per_sequence_gc_content_plot_Percentages.txt:md5,95d29060b687f745288ad1ec47750037", + "fastqc_trimmed_per_sequence_quality_scores_plot.txt:md5,0f9834cc19f76dd5c87cf8cba7435a7c", + "fastqc_trimmed_sequence_counts_plot.txt:md5,9fd642bdd1da354f296bb8092205608f", + "fastqc_trimmed_sequence_duplication_levels_plot.txt:md5,0758257b497283b1ef28171e694db6db", + "multiqc_citations.txt:md5,d596629d15f565388cb6493c3941d513", + "multiqc_fail_mapped_samples_table.txt:md5,84997c51d59c06a8cb09859efa3fc6bc", + "multiqc_fastqc_fastqc_raw.txt:md5,81c3c1a2575a1891a7f2a9637a0f2cc0", + "multiqc_fastqc_fastqc_trimmed.txt:md5,54743154d0e8858980acffeb5b6f6a97", + "multiqc_samtools_idxstats.txt:md5,fd7d03a91f0b9e01a6939941f7f2243f", + "samtools-idxstats-mapped-reads-plot_Normalised_Counts.txt:md5,75acd04232d1804b5f960ee4c5db4722", + "samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts.txt:md5,ae45731d8d4595f77e6b271004f3a070", + "samtools-idxstats-mapped-reads-plot_Raw_Counts.txt:md5,01637c600d3840500851eb4118564cc6", + "expected_bias.gz:md5,3407f87245d0003e0ffbfdf6d8c04f20", + "observed_bias.gz:md5,92bcd0592d22a6a58d0360fc76103e56", + "observed_bias_3p.gz:md5,92bcd0592d22a6a58d0360fc76103e56", + "cmd_info.json:md5,138b27764a97d468418b3dac5e7f1cef", + "lib_format_counts.json:md5,c24ffe28d70476b5ccdd8bc2d22c0ac1", + "expected_bias.gz:md5,3407f87245d0003e0ffbfdf6d8c04f20", + "observed_bias.gz:md5,92bcd0592d22a6a58d0360fc76103e56", + "observed_bias_3p.gz:md5,92bcd0592d22a6a58d0360fc76103e56", + "cmd_info.json:md5,87bcf1e84fc31a794e3c8f8b227d11c3", + "lib_format_counts.json:md5,f6d44c0221f7fd559f11a9afe04c9935", + "expected_bias.gz:md5,3407f87245d0003e0ffbfdf6d8c04f20", + "observed_bias.gz:md5,92bcd0592d22a6a58d0360fc76103e56", + "observed_bias_3p.gz:md5,92bcd0592d22a6a58d0360fc76103e56", + "cmd_info.json:md5,ec504469f9b0e33c94f85846f1486d7f", + "lib_format_counts.json:md5,7c562bf2f70e42f3a7292687dfd328c3", + "expected_bias.gz:md5,3407f87245d0003e0ffbfdf6d8c04f20", + "observed_bias.gz:md5,92bcd0592d22a6a58d0360fc76103e56", + "observed_bias_3p.gz:md5,92bcd0592d22a6a58d0360fc76103e56", + "cmd_info.json:md5,591436d401b6df6f3c6a8b16913158f4", + "lib_format_counts.json:md5,d46250bb3677d72feeefc435fe6395a6", + "expected_bias.gz:md5,3407f87245d0003e0ffbfdf6d8c04f20", + "observed_bias.gz:md5,92bcd0592d22a6a58d0360fc76103e56", + "observed_bias_3p.gz:md5,92bcd0592d22a6a58d0360fc76103e56", + "cmd_info.json:md5,fe66c9d876645b9260d8c2488157d4d4", + "lib_format_counts.json:md5,088fd51db07022ffde47033bbd029400", + "salmon.merged.tx2gene.tsv:md5,0e2418a69d2eba45097ebffc2f700bfe", + "expected_bias.gz:md5,3407f87245d0003e0ffbfdf6d8c04f20", + "observed_bias.gz:md5,92bcd0592d22a6a58d0360fc76103e56", + "observed_bias_3p.gz:md5,92bcd0592d22a6a58d0360fc76103e56", + "cmd_info.json:md5,21395500c85658c70ce5fa0ac05b339a", + "expected_bias.gz:md5,3407f87245d0003e0ffbfdf6d8c04f20", + "observed_bias.gz:md5,92bcd0592d22a6a58d0360fc76103e56", + "observed_bias_3p.gz:md5,92bcd0592d22a6a58d0360fc76103e56", + "cmd_info.json:md5,faf70330c73fdce087631bb06de8a12f", + "expected_bias.gz:md5,3407f87245d0003e0ffbfdf6d8c04f20", + "observed_bias.gz:md5,92bcd0592d22a6a58d0360fc76103e56", + "observed_bias_3p.gz:md5,92bcd0592d22a6a58d0360fc76103e56", + "cmd_info.json:md5,563fd8191cc965524621c2afea7983ff", + "expected_bias.gz:md5,3407f87245d0003e0ffbfdf6d8c04f20", + "observed_bias.gz:md5,92bcd0592d22a6a58d0360fc76103e56", + "observed_bias_3p.gz:md5,92bcd0592d22a6a58d0360fc76103e56", + "cmd_info.json:md5,867de0b90aeccb5f9627e821a973aea7", + "expected_bias.gz:md5,3407f87245d0003e0ffbfdf6d8c04f20", + "observed_bias.gz:md5,92bcd0592d22a6a58d0360fc76103e56", + "observed_bias_3p.gz:md5,92bcd0592d22a6a58d0360fc76103e56", + "cmd_info.json:md5,3a51e7db950cee84bed0b13e329f1934", + "RAP1_IAA_30M_REP1.SJ.out.tab:md5,ea95e243278af55534f2c52eb5fff7ee", + "RAP1_UNINDUCED_REP1.SJ.out.tab:md5,e548d13942535dc0821f3ec6d9743ec8", + "RAP1_UNINDUCED_REP2.SJ.out.tab:md5,1f294365343a1a5e95682792fdb77033", + "WT_REP1.SJ.out.tab:md5,1350c2fa6a675bf107386c6cd3fc5204", + "WT_REP2.SJ.out.tab:md5,f6cc03643a5e3c1025a5b4754eb1be23", + "salmon.merged.tx2gene.tsv:md5,0e2418a69d2eba45097ebffc2f700bfe" + ] + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.3" + }, + "timestamp": "2026-02-09T11:13:00.399098759" + } +} diff --git a/tests/prokaryotic.nf.test b/tests/prokaryotic.nf.test new file mode 100644 index 000000000..c9cd7bb40 --- /dev/null +++ b/tests/prokaryotic.nf.test @@ -0,0 +1,198 @@ +nextflow_pipeline { + + name "Test pipeline with prokaryotic settings" + script "../main.nf" + config "../conf/prokaryotic.config" + tag "pipeline" + tag "prokaryotic" + + test("Params: --aligner star_salmon --prokaryotic - stub") { + + options "-stub" + + when { + params { + outdir = "$outputDir" + + // Prokaryotic test data - Salmonella Typhimurium SL1344 + input = 'https://raw.githubusercontent.com/nf-core/test-datasets/rnaseq/samplesheet/prokaryotic/samplesheet_test.csv' + fasta = 'https://raw.githubusercontent.com/nf-core/test-datasets/rnaseq/reference/prokaryotic/SL1344_sub.fasta' + gff = 'https://raw.githubusercontent.com/nf-core/test-datasets/rnaseq/reference/prokaryotic/SL1344_sub.gff3' + gtf = null + transcript_fasta = null + additional_fasta = null + + // Override aligner (prokaryotic profile defaults to bowtie2_salmon) + aligner = 'star_salmon' + + // Skip steps not needed for minimal testing + skip_bbsplit = true + skip_preseq = true + skip_biotype_qc = true + skip_deseq2_qc = true + pseudo_aligner = null + min_trimmed_reads = 0 + } + } + + then { + // stable_name: All files + folders in ${params.outdir}/ with a stable name + def stable_name = getAllFilesFromDir(params.outdir, relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}']) + // stable_path: All files in ${params.outdir}/ with stable content + def stable_path = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore') + assertAll( + { assert workflow.success}, + { assert snapshot( + // Number of successful tasks + workflow.trace.succeeded().size(), + // pipeline versions.yml file for multiqc from which Nextflow and pipeline versions are removed (all from the workflow key) + removeFromYamlMap("$outputDir/pipeline_info/nf_core_rnaseq_software_mqc_versions.yml", "Workflow"), + // All stable path name, with a relative path + stable_name, + // All files with stable contents + stable_path + ).match() } + ) + } + } + + test("Params: --aligner star_salmon --prokaryotic") { + + when { + params { + outdir = "$outputDir" + + // Prokaryotic test data - Salmonella Typhimurium SL1344 + input = 'https://raw.githubusercontent.com/nf-core/test-datasets/rnaseq/samplesheet/prokaryotic/samplesheet_test.csv' + fasta = 'https://raw.githubusercontent.com/nf-core/test-datasets/rnaseq/reference/prokaryotic/SL1344_sub.fasta' + gff = 'https://raw.githubusercontent.com/nf-core/test-datasets/rnaseq/reference/prokaryotic/SL1344_sub.gff3' + gtf = null + transcript_fasta = null + additional_fasta = null + + // Override aligner (prokaryotic profile defaults to bowtie2_salmon) + aligner = 'star_salmon' + + // Skip steps not needed for minimal testing + skip_bbsplit = true + skip_preseq = true + skip_biotype_qc = true + skip_deseq2_qc = true + pseudo_aligner = null + min_trimmed_reads = 0 + } + } + + then { + // stable_name: All files + folders in ${params.outdir}/ with a stable name + def stable_name = getAllFilesFromDir(params.outdir, relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}']) + // stable_path: All files in ${params.outdir}/ with stable content + def stable_path = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore') + assertAll( + { assert workflow.success}, + { assert snapshot( + // Number of successful tasks + workflow.trace.succeeded().size(), + // pipeline versions.yml file for multiqc from which Nextflow and pipeline versions are removed (all from the workflow key) + removeFromYamlMap("$outputDir/pipeline_info/nf_core_rnaseq_software_mqc_versions.yml", "Workflow"), + // All stable path name, with a relative path + stable_name, + // All files with stable contents + stable_path + ).match() } + ) + } + } + + test("Params: --aligner bowtie2_salmon --gffread_transcript_fasta - stub") { + + options "-stub" + + when { + params { + outdir = "$outputDir" + + // Prokaryotic test data - Salmonella Typhimurium SL1344 + input = 'https://raw.githubusercontent.com/nf-core/test-datasets/rnaseq/samplesheet/prokaryotic/samplesheet_test.csv' + fasta = 'https://raw.githubusercontent.com/nf-core/test-datasets/rnaseq/reference/prokaryotic/SL1344_sub.fasta' + gff = 'https://raw.githubusercontent.com/nf-core/test-datasets/rnaseq/reference/prokaryotic/SL1344_sub.gff3' + gtf = null + transcript_fasta = null + additional_fasta = null + + // Skip steps not needed for minimal testing + skip_bbsplit = true + skip_preseq = true + skip_biotype_qc = true + skip_deseq2_qc = true + pseudo_aligner = null + min_trimmed_reads = 0 + } + } + + then { + // stable_name: All files + folders in ${params.outdir}/ with a stable name + def stable_name = getAllFilesFromDir(params.outdir, relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}']) + // stable_path: All files in ${params.outdir}/ with stable content + def stable_path = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore') + assertAll( + { assert workflow.success}, + { assert snapshot( + // Number of successful tasks + workflow.trace.succeeded().size(), + // pipeline versions.yml file for multiqc from which Nextflow and pipeline versions are removed (all from the workflow key) + removeFromYamlMap("$outputDir/pipeline_info/nf_core_rnaseq_software_mqc_versions.yml", "Workflow"), + // All stable path name, with a relative path + stable_name, + // All files with stable contents + stable_path + ).match() } + ) + } + } + + test("Params: --aligner bowtie2_salmon --gffread_transcript_fasta") { + + when { + params { + outdir = "$outputDir" + + // Prokaryotic test data - Salmonella Typhimurium SL1344 + input = 'https://raw.githubusercontent.com/nf-core/test-datasets/rnaseq/samplesheet/prokaryotic/samplesheet_test.csv' + fasta = 'https://raw.githubusercontent.com/nf-core/test-datasets/rnaseq/reference/prokaryotic/SL1344_sub.fasta' + gff = 'https://raw.githubusercontent.com/nf-core/test-datasets/rnaseq/reference/prokaryotic/SL1344_sub.gff3' + gtf = null + transcript_fasta = null + additional_fasta = null + + // Skip steps not needed for minimal testing + skip_bbsplit = true + skip_preseq = true + skip_biotype_qc = true + skip_deseq2_qc = true + pseudo_aligner = null + min_trimmed_reads = 0 + } + } + + then { + // stable_name: All files + folders in ${params.outdir}/ with a stable name + def stable_name = getAllFilesFromDir(params.outdir, relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}']) + // stable_path: All files in ${params.outdir}/ with stable content + def stable_path = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore') + assertAll( + { assert workflow.success}, + { assert snapshot( + // Number of successful tasks + workflow.trace.succeeded().size(), + // pipeline versions.yml file for multiqc from which Nextflow and pipeline versions are removed (all from the workflow key) + removeFromYamlMap("$outputDir/pipeline_info/nf_core_rnaseq_software_mqc_versions.yml", "Workflow"), + // All stable path name, with a relative path + stable_name, + // All files with stable contents + stable_path + ).match() } + ) + } + } +} diff --git a/tests/prokaryotic.nf.test.snap b/tests/prokaryotic.nf.test.snap new file mode 100644 index 000000000..c297ea756 --- /dev/null +++ b/tests/prokaryotic.nf.test.snap @@ -0,0 +1,1208 @@ +{ + "Params: --aligner star_salmon --prokaryotic": { + "content": [ + 46, + { + "CUSTOM_TX2GENE": { + "python": "3.10.4" + }, + "FASTQC": { + "fastqc": "0.12.1" + }, + "FQ_LINT": { + "fq": "0.12.0" + }, + "FQ_LINT_AFTER_TRIMMING": { + "fq": "0.12.0" + }, + "GFFREAD": { + "gffread": "0.12.7" + }, + "GFFREAD_TRANSCRIPTS": { + "gffread": "0.12.7" + }, + "GTF2BED": { + "perl": "5.26.2" + }, + "GTF_FILTER": { + "python": "3.9.5" + }, + "PICARD_MARKDUPLICATES": { + "picard": "3.4.0" + }, + "SALMON_QUANT": { + "salmon": "1.10.3" + }, + "SAMTOOLS_FAIDX": { + "samtools": "1.22.1" + }, + "SAMTOOLS_FLAGSTAT": { + "samtools": "1.22.1" + }, + "SAMTOOLS_IDXSTATS": { + "samtools": "1.22.1" + }, + "SAMTOOLS_INDEX": { + "samtools": "1.22.1" + }, + "SAMTOOLS_SORT": { + "samtools": "1.22.1" + }, + "SAMTOOLS_STATS": { + "samtools": "1.22.1" + }, + "SE_GENE_UNIFIED": { + "bioconductor-summarizedexperiment": "1.32.0" + }, + "SE_TRANSCRIPT_UNIFIED": { + "bioconductor-summarizedexperiment": "1.32.0" + }, + "STAR_ALIGN": { + "gawk": "5.1.0", + "samtools": 1.21, + "star": "2.7.11b" + }, + "STAR_GENOMEGENERATE": { + "gawk": "5.1.0", + "samtools": 1.21, + "star": "2.7.11b" + }, + "STRINGTIE_STRINGTIE": { + "stringtie": "2.2.3" + }, + "TRIMGALORE": { + "trimgalore": "0.6.10" + }, + "TXIMETA_TXIMPORT": { + "bioconductor-tximeta": "1.20.1" + }, + "UNTAR_SALMON_INDEX": { + "untar": 1.34 + } + }, + [ + "fastqc", + "fastqc/raw", + "fastqc/raw/SALM_REP1_raw_1_fastqc.html", + "fastqc/raw/SALM_REP1_raw_1_fastqc.zip", + "fastqc/raw/SALM_REP1_raw_2_fastqc.html", + "fastqc/raw/SALM_REP1_raw_2_fastqc.zip", + "fastqc/raw/SALM_REP2_raw_1_fastqc.html", + "fastqc/raw/SALM_REP2_raw_1_fastqc.zip", + "fastqc/raw/SALM_REP2_raw_2_fastqc.html", + "fastqc/raw/SALM_REP2_raw_2_fastqc.zip", + "fastqc/trim", + "fastqc/trim/SALM_REP1_trimmed_1_val_1_fastqc.html", + "fastqc/trim/SALM_REP1_trimmed_1_val_1_fastqc.zip", + "fastqc/trim/SALM_REP1_trimmed_2_val_2_fastqc.html", + "fastqc/trim/SALM_REP1_trimmed_2_val_2_fastqc.zip", + "fastqc/trim/SALM_REP2_trimmed_1_val_1_fastqc.html", + "fastqc/trim/SALM_REP2_trimmed_1_val_1_fastqc.zip", + "fastqc/trim/SALM_REP2_trimmed_2_val_2_fastqc.html", + "fastqc/trim/SALM_REP2_trimmed_2_val_2_fastqc.zip", + "fq_lint", + "fq_lint/raw", + "fq_lint/raw/SALM_REP1.fq_lint.txt", + "fq_lint/raw/SALM_REP2.fq_lint.txt", + "fq_lint/trimmed", + "fq_lint/trimmed/SALM_REP1.fq_lint.txt", + "fq_lint/trimmed/SALM_REP2.fq_lint.txt", + "multiqc", + "multiqc/star_salmon", + "multiqc/star_salmon/multiqc_report.html", + "multiqc/star_salmon/multiqc_report_data", + "multiqc/star_salmon/multiqc_report_data/cutadapt_filtered_reads_plot.txt", + "multiqc/star_salmon/multiqc_report_data/cutadapt_trimmed_sequences_plot_3_Counts.txt", + "multiqc/star_salmon/multiqc_report_data/cutadapt_trimmed_sequences_plot_3_Obs_Exp.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_raw-status-check-heatmap.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_raw_overrepresented_sequences_plot.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_raw_per_base_n_content_plot.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_raw_per_base_sequence_quality_plot.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_raw_per_sequence_gc_content_plot_Counts.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_raw_per_sequence_gc_content_plot_Percentages.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_raw_per_sequence_quality_scores_plot.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_raw_sequence_counts_plot.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_raw_sequence_duplication_levels_plot.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_raw_top_overrepresented_sequences_table.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_sequence_length_distribution_plot.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_trimmed-status-check-heatmap.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_trimmed_overrepresented_sequences_plot.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_trimmed_per_base_n_content_plot.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_trimmed_per_base_sequence_quality_plot.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_trimmed_per_sequence_gc_content_plot_Counts.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_trimmed_per_sequence_gc_content_plot_Percentages.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_trimmed_per_sequence_quality_scores_plot.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_trimmed_sequence_counts_plot.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_trimmed_sequence_duplication_levels_plot.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_trimmed_top_overrepresented_sequences_table.txt", + "multiqc/star_salmon/multiqc_report_data/llms-full.txt", + "multiqc/star_salmon/multiqc_report_data/multiqc.log", + "multiqc/star_salmon/multiqc_report_data/multiqc.parquet", + "multiqc/star_salmon/multiqc_report_data/multiqc_citations.txt", + "multiqc/star_salmon/multiqc_report_data/multiqc_cutadapt.txt", + "multiqc/star_salmon/multiqc_report_data/multiqc_data.json", + "multiqc/star_salmon/multiqc_report_data/multiqc_fastqc_fastqc_raw.txt", + "multiqc/star_salmon/multiqc_report_data/multiqc_fastqc_fastqc_trimmed.txt", + "multiqc/star_salmon/multiqc_report_data/multiqc_general_stats.txt", + "multiqc/star_salmon/multiqc_report_data/multiqc_picard_dups.txt", + "multiqc/star_salmon/multiqc_report_data/multiqc_samtools_flagstat.txt", + "multiqc/star_salmon/multiqc_report_data/multiqc_samtools_idxstats.txt", + "multiqc/star_salmon/multiqc_report_data/multiqc_samtools_stats.txt", + "multiqc/star_salmon/multiqc_report_data/multiqc_software_versions.txt", + "multiqc/star_salmon/multiqc_report_data/multiqc_sources.txt", + "multiqc/star_salmon/multiqc_report_data/multiqc_star.txt", + "multiqc/star_salmon/multiqc_report_data/picard_MarkIlluminaAdapters_histogram.txt", + "multiqc/star_salmon/multiqc_report_data/picard_MeanQualityByCycle_histogram.txt", + "multiqc/star_salmon/multiqc_report_data/picard_MeanQualityByCycle_histogram_1.txt", + "multiqc/star_salmon/multiqc_report_data/picard_QualityScoreDistribution_histogram.txt", + "multiqc/star_salmon/multiqc_report_data/picard_deduplication.txt", + "multiqc/star_salmon/multiqc_report_data/samtools-flagstat-pct-table.txt", + "multiqc/star_salmon/multiqc_report_data/samtools-flagstat-table.txt", + "multiqc/star_salmon/multiqc_report_data/samtools-idxstats-mapped-reads-plot_Normalised_Counts.txt", + "multiqc/star_salmon/multiqc_report_data/samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts.txt", + "multiqc/star_salmon/multiqc_report_data/samtools-idxstats-mapped-reads-plot_Raw_Counts.txt", + "multiqc/star_salmon/multiqc_report_data/samtools-stats-dp.txt", + "multiqc/star_salmon/multiqc_report_data/samtools_alignment_plot.txt", + "multiqc/star_salmon/multiqc_report_data/star_alignment_plot.txt", + "multiqc/star_salmon/multiqc_report_data/star_summary_table.txt", + "multiqc/star_salmon/multiqc_report_plots", + "multiqc/star_salmon/multiqc_report_plots/pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/cutadapt_filtered_reads_plot-cnt.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/cutadapt_filtered_reads_plot-pct.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/cutadapt_trimmed_sequences_plot_3_Counts.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/cutadapt_trimmed_sequences_plot_3_Obs_Exp.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_raw-status-check-heatmap.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_raw_overrepresented_sequences_plot.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_raw_per_base_n_content_plot.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_raw_per_base_sequence_quality_plot.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_raw_per_sequence_gc_content_plot_Counts.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_raw_per_sequence_gc_content_plot_Percentages.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_raw_per_sequence_quality_scores_plot.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_raw_sequence_counts_plot-cnt.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_raw_sequence_counts_plot-pct.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_raw_sequence_duplication_levels_plot.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_raw_top_overrepresented_sequences_table.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_sequence_length_distribution_plot.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_trimmed-status-check-heatmap.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_trimmed_overrepresented_sequences_plot.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_trimmed_per_base_n_content_plot.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_trimmed_per_base_sequence_quality_plot.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_trimmed_per_sequence_gc_content_plot_Counts.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_trimmed_per_sequence_gc_content_plot_Percentages.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_trimmed_per_sequence_quality_scores_plot.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_trimmed_sequence_counts_plot-cnt.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_trimmed_sequence_counts_plot-pct.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_trimmed_sequence_duplication_levels_plot.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_trimmed_top_overrepresented_sequences_table.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/picard_deduplication-cnt.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/picard_deduplication-pct.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/samtools-flagstat-pct-table.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/samtools-flagstat-table.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/samtools-idxstats-mapped-reads-plot_Normalised_Counts-cnt.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/samtools-idxstats-mapped-reads-plot_Normalised_Counts-log.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts-cnt.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts-log.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/samtools-idxstats-mapped-reads-plot_Raw_Counts-cnt.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/samtools-idxstats-mapped-reads-plot_Raw_Counts-log.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/samtools-stats-dp.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/samtools_alignment_plot-cnt.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/samtools_alignment_plot-pct.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/star_alignment_plot-cnt.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/star_alignment_plot-pct.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/star_summary_table.pdf", + "multiqc/star_salmon/multiqc_report_plots/png", + "multiqc/star_salmon/multiqc_report_plots/png/cutadapt_filtered_reads_plot-cnt.png", + "multiqc/star_salmon/multiqc_report_plots/png/cutadapt_filtered_reads_plot-pct.png", + "multiqc/star_salmon/multiqc_report_plots/png/cutadapt_trimmed_sequences_plot_3_Counts.png", + "multiqc/star_salmon/multiqc_report_plots/png/cutadapt_trimmed_sequences_plot_3_Obs_Exp.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_raw-status-check-heatmap.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_raw_overrepresented_sequences_plot.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_raw_per_base_n_content_plot.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_raw_per_base_sequence_quality_plot.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_raw_per_sequence_gc_content_plot_Counts.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_raw_per_sequence_gc_content_plot_Percentages.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_raw_per_sequence_quality_scores_plot.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_raw_sequence_counts_plot-cnt.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_raw_sequence_counts_plot-pct.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_raw_sequence_duplication_levels_plot.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_raw_top_overrepresented_sequences_table.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_sequence_length_distribution_plot.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_trimmed-status-check-heatmap.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_trimmed_overrepresented_sequences_plot.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_trimmed_per_base_n_content_plot.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_trimmed_per_base_sequence_quality_plot.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_trimmed_per_sequence_gc_content_plot_Counts.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_trimmed_per_sequence_gc_content_plot_Percentages.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_trimmed_per_sequence_quality_scores_plot.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_trimmed_sequence_counts_plot-cnt.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_trimmed_sequence_counts_plot-pct.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_trimmed_sequence_duplication_levels_plot.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_trimmed_top_overrepresented_sequences_table.png", + "multiqc/star_salmon/multiqc_report_plots/png/picard_deduplication-cnt.png", + "multiqc/star_salmon/multiqc_report_plots/png/picard_deduplication-pct.png", + "multiqc/star_salmon/multiqc_report_plots/png/samtools-flagstat-pct-table.png", + "multiqc/star_salmon/multiqc_report_plots/png/samtools-flagstat-table.png", + "multiqc/star_salmon/multiqc_report_plots/png/samtools-idxstats-mapped-reads-plot_Normalised_Counts-cnt.png", + "multiqc/star_salmon/multiqc_report_plots/png/samtools-idxstats-mapped-reads-plot_Normalised_Counts-log.png", + "multiqc/star_salmon/multiqc_report_plots/png/samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts-cnt.png", + "multiqc/star_salmon/multiqc_report_plots/png/samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts-log.png", + "multiqc/star_salmon/multiqc_report_plots/png/samtools-idxstats-mapped-reads-plot_Raw_Counts-cnt.png", + "multiqc/star_salmon/multiqc_report_plots/png/samtools-idxstats-mapped-reads-plot_Raw_Counts-log.png", + "multiqc/star_salmon/multiqc_report_plots/png/samtools-stats-dp.png", + "multiqc/star_salmon/multiqc_report_plots/png/samtools_alignment_plot-cnt.png", + "multiqc/star_salmon/multiqc_report_plots/png/samtools_alignment_plot-pct.png", + "multiqc/star_salmon/multiqc_report_plots/png/star_alignment_plot-cnt.png", + "multiqc/star_salmon/multiqc_report_plots/png/star_alignment_plot-pct.png", + "multiqc/star_salmon/multiqc_report_plots/png/star_summary_table.png", + "multiqc/star_salmon/multiqc_report_plots/svg", + "multiqc/star_salmon/multiqc_report_plots/svg/cutadapt_filtered_reads_plot-cnt.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/cutadapt_filtered_reads_plot-pct.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/cutadapt_trimmed_sequences_plot_3_Counts.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/cutadapt_trimmed_sequences_plot_3_Obs_Exp.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_raw-status-check-heatmap.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_raw_overrepresented_sequences_plot.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_raw_per_base_n_content_plot.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_raw_per_base_sequence_quality_plot.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_raw_per_sequence_gc_content_plot_Counts.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_raw_per_sequence_gc_content_plot_Percentages.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_raw_per_sequence_quality_scores_plot.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_raw_sequence_counts_plot-cnt.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_raw_sequence_counts_plot-pct.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_raw_sequence_duplication_levels_plot.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_raw_top_overrepresented_sequences_table.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_sequence_length_distribution_plot.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_trimmed-status-check-heatmap.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_trimmed_overrepresented_sequences_plot.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_trimmed_per_base_n_content_plot.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_trimmed_per_base_sequence_quality_plot.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_trimmed_per_sequence_gc_content_plot_Counts.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_trimmed_per_sequence_gc_content_plot_Percentages.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_trimmed_per_sequence_quality_scores_plot.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_trimmed_sequence_counts_plot-cnt.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_trimmed_sequence_counts_plot-pct.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_trimmed_sequence_duplication_levels_plot.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_trimmed_top_overrepresented_sequences_table.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/picard_deduplication-cnt.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/picard_deduplication-pct.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/samtools-flagstat-pct-table.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/samtools-flagstat-table.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/samtools-idxstats-mapped-reads-plot_Normalised_Counts-cnt.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/samtools-idxstats-mapped-reads-plot_Normalised_Counts-log.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts-cnt.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts-log.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/samtools-idxstats-mapped-reads-plot_Raw_Counts-cnt.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/samtools-idxstats-mapped-reads-plot_Raw_Counts-log.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/samtools-stats-dp.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/samtools_alignment_plot-cnt.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/samtools_alignment_plot-pct.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/star_alignment_plot-cnt.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/star_alignment_plot-pct.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/star_summary_table.svg", + "pipeline_info", + "pipeline_info/nf_core_rnaseq_software_mqc_versions.yml", + "star_salmon", + "star_salmon/SALM_REP1", + "star_salmon/SALM_REP1.markdup.sorted.bam", + "star_salmon/SALM_REP1.markdup.sorted.bam.bai", + "star_salmon/SALM_REP1/aux_info", + "star_salmon/SALM_REP1/aux_info/ambig_info.tsv", + "star_salmon/SALM_REP1/aux_info/expected_bias.gz", + "star_salmon/SALM_REP1/aux_info/fld.gz", + "star_salmon/SALM_REP1/aux_info/meta_info.json", + "star_salmon/SALM_REP1/aux_info/observed_bias.gz", + "star_salmon/SALM_REP1/aux_info/observed_bias_3p.gz", + "star_salmon/SALM_REP1/cmd_info.json", + "star_salmon/SALM_REP1/libParams", + "star_salmon/SALM_REP1/libParams/flenDist.txt", + "star_salmon/SALM_REP1/logs", + "star_salmon/SALM_REP1/logs/salmon_quant.log", + "star_salmon/SALM_REP1/quant.genes.sf", + "star_salmon/SALM_REP1/quant.sf", + "star_salmon/SALM_REP2", + "star_salmon/SALM_REP2.markdup.sorted.bam", + "star_salmon/SALM_REP2.markdup.sorted.bam.bai", + "star_salmon/SALM_REP2/aux_info", + "star_salmon/SALM_REP2/aux_info/ambig_info.tsv", + "star_salmon/SALM_REP2/aux_info/expected_bias.gz", + "star_salmon/SALM_REP2/aux_info/fld.gz", + "star_salmon/SALM_REP2/aux_info/meta_info.json", + "star_salmon/SALM_REP2/aux_info/observed_bias.gz", + "star_salmon/SALM_REP2/aux_info/observed_bias_3p.gz", + "star_salmon/SALM_REP2/cmd_info.json", + "star_salmon/SALM_REP2/libParams", + "star_salmon/SALM_REP2/libParams/flenDist.txt", + "star_salmon/SALM_REP2/logs", + "star_salmon/SALM_REP2/logs/salmon_quant.log", + "star_salmon/SALM_REP2/quant.genes.sf", + "star_salmon/SALM_REP2/quant.sf", + "star_salmon/log", + "star_salmon/log/SALM_REP1.Log.final.out", + "star_salmon/log/SALM_REP1.Log.out", + "star_salmon/log/SALM_REP1.Log.progress.out", + "star_salmon/log/SALM_REP1.SJ.out.tab", + "star_salmon/log/SALM_REP2.Log.final.out", + "star_salmon/log/SALM_REP2.Log.out", + "star_salmon/log/SALM_REP2.Log.progress.out", + "star_salmon/log/SALM_REP2.SJ.out.tab", + "star_salmon/picard_metrics", + "star_salmon/picard_metrics/SALM_REP1.markdup.sorted.MarkDuplicates.metrics.txt", + "star_salmon/picard_metrics/SALM_REP2.markdup.sorted.MarkDuplicates.metrics.txt", + "star_salmon/salmon.merged.gene.SummarizedExperiment.rds", + "star_salmon/salmon.merged.gene_counts.tsv", + "star_salmon/salmon.merged.gene_counts_length_scaled.tsv", + "star_salmon/salmon.merged.gene_counts_scaled.tsv", + "star_salmon/salmon.merged.gene_lengths.tsv", + "star_salmon/salmon.merged.gene_tpm.tsv", + "star_salmon/salmon.merged.transcript.SummarizedExperiment.rds", + "star_salmon/salmon.merged.transcript_counts.tsv", + "star_salmon/salmon.merged.transcript_lengths.tsv", + "star_salmon/salmon.merged.transcript_tpm.tsv", + "star_salmon/salmon.merged.tx2gene.tsv", + "star_salmon/samtools_stats", + "star_salmon/samtools_stats/SALM_REP1.markdup.sorted.bam.flagstat", + "star_salmon/samtools_stats/SALM_REP1.markdup.sorted.bam.idxstats", + "star_salmon/samtools_stats/SALM_REP1.markdup.sorted.bam.stats", + "star_salmon/samtools_stats/SALM_REP1.sorted.bam.flagstat", + "star_salmon/samtools_stats/SALM_REP1.sorted.bam.idxstats", + "star_salmon/samtools_stats/SALM_REP1.sorted.bam.stats", + "star_salmon/samtools_stats/SALM_REP2.markdup.sorted.bam.flagstat", + "star_salmon/samtools_stats/SALM_REP2.markdup.sorted.bam.idxstats", + "star_salmon/samtools_stats/SALM_REP2.markdup.sorted.bam.stats", + "star_salmon/samtools_stats/SALM_REP2.sorted.bam.flagstat", + "star_salmon/samtools_stats/SALM_REP2.sorted.bam.idxstats", + "star_salmon/samtools_stats/SALM_REP2.sorted.bam.stats", + "star_salmon/stringtie", + "star_salmon/stringtie/SALM_REP1.ballgown", + "star_salmon/stringtie/SALM_REP1.ballgown/e2t.ctab", + "star_salmon/stringtie/SALM_REP1.ballgown/e_data.ctab", + "star_salmon/stringtie/SALM_REP1.ballgown/i2t.ctab", + "star_salmon/stringtie/SALM_REP1.ballgown/i_data.ctab", + "star_salmon/stringtie/SALM_REP1.ballgown/t_data.ctab", + "star_salmon/stringtie/SALM_REP1.coverage.gtf", + "star_salmon/stringtie/SALM_REP1.gene.abundance.txt", + "star_salmon/stringtie/SALM_REP1.transcripts.gtf", + "star_salmon/stringtie/SALM_REP2.ballgown", + "star_salmon/stringtie/SALM_REP2.ballgown/e2t.ctab", + "star_salmon/stringtie/SALM_REP2.ballgown/e_data.ctab", + "star_salmon/stringtie/SALM_REP2.ballgown/i2t.ctab", + "star_salmon/stringtie/SALM_REP2.ballgown/i_data.ctab", + "star_salmon/stringtie/SALM_REP2.ballgown/t_data.ctab", + "star_salmon/stringtie/SALM_REP2.coverage.gtf", + "star_salmon/stringtie/SALM_REP2.gene.abundance.txt", + "star_salmon/stringtie/SALM_REP2.transcripts.gtf", + "trimgalore", + "trimgalore/SALM_REP1_trimmed_1.fastq.gz_trimming_report.txt", + "trimgalore/SALM_REP1_trimmed_2.fastq.gz_trimming_report.txt", + "trimgalore/SALM_REP2_trimmed_1.fastq.gz_trimming_report.txt", + "trimgalore/SALM_REP2_trimmed_2.fastq.gz_trimming_report.txt" + ], + [ + "cutadapt_filtered_reads_plot.txt:md5,b82a9c2120e7c0bb06e3841ab52193c5", + "cutadapt_trimmed_sequences_plot_3_Counts.txt:md5,3ffd158758886bc8670a0e691aedadda", + "cutadapt_trimmed_sequences_plot_3_Obs_Exp.txt:md5,570d5968b148e3759e31bfe80a6efcfb", + "fastqc_raw-status-check-heatmap.txt:md5,e7e2b9dc8c77f456ad5f770fe2b8e308", + "fastqc_raw_overrepresented_sequences_plot.txt:md5,4b1cdda2f52c1064258e9b77341d5d86", + "fastqc_raw_per_base_n_content_plot.txt:md5,76f9627438fa3a1c983405fa057d1b3a", + "fastqc_raw_per_base_sequence_quality_plot.txt:md5,b0ee91ba241f544696d9e096a1f81ae4", + "fastqc_raw_per_sequence_gc_content_plot_Counts.txt:md5,9f27db3f66c750152270ac6f65fe65d8", + "fastqc_raw_per_sequence_gc_content_plot_Percentages.txt:md5,b2c8cfeae0083d9779c1de1256d9938f", + "fastqc_raw_per_sequence_quality_scores_plot.txt:md5,b55988c5fa92b3ca87acd99d7a79a0e0", + "fastqc_raw_sequence_counts_plot.txt:md5,fe8a0c5d299e6e9972c8605e9fc8a022", + "fastqc_raw_sequence_duplication_levels_plot.txt:md5,5413485383af9f009c86ad014cb1b026", + "fastqc_trimmed-status-check-heatmap.txt:md5,1d0aa37a36a7983cafafc566b6e88ac8", + "fastqc_trimmed_overrepresented_sequences_plot.txt:md5,4b1cdda2f52c1064258e9b77341d5d86", + "fastqc_trimmed_per_base_n_content_plot.txt:md5,4544afb10dbb7fd0c31b9ed0825310b8", + "fastqc_trimmed_per_base_sequence_quality_plot.txt:md5,737ddde9e89904f6b2948fcb385b8d87", + "fastqc_trimmed_per_sequence_gc_content_plot_Counts.txt:md5,61504ae61ecd699415536d2c519afb6f", + "fastqc_trimmed_per_sequence_gc_content_plot_Percentages.txt:md5,671e455fc21da8741b4c0462320aaed6", + "fastqc_trimmed_per_sequence_quality_scores_plot.txt:md5,610d3a1f008bf73125acaacb72bb7dcf", + "fastqc_trimmed_sequence_counts_plot.txt:md5,fe8a0c5d299e6e9972c8605e9fc8a022", + "fastqc_trimmed_sequence_duplication_levels_plot.txt:md5,5413485383af9f009c86ad014cb1b026", + "multiqc_citations.txt:md5,0b337b55350382b77a59f0ae5374e7cd", + "multiqc_fastqc_fastqc_raw.txt:md5,42c1cc19c4b9104eb499ce499f335951", + "multiqc_fastqc_fastqc_trimmed.txt:md5,8be94d69e0c458017cf5064fa1fa86a0", + "multiqc_samtools_idxstats.txt:md5,6949b8e77b72655f069f7ffd9a298d68", + "picard_MarkIlluminaAdapters_histogram.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "picard_MeanQualityByCycle_histogram.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "picard_QualityScoreDistribution_histogram.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "samtools-idxstats-mapped-reads-plot_Normalised_Counts.txt:md5,04107c7f4adc54ec7a30cdb5357f9f34", + "samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts.txt:md5,04107c7f4adc54ec7a30cdb5357f9f34", + "samtools-idxstats-mapped-reads-plot_Raw_Counts.txt:md5,086f13628e34b8cc363b223d6a1d9e4d", + "ambig_info.tsv:md5,7713bea97f1a7d1b29d9d3ff75c9c247", + "expected_bias.gz:md5,3407f87245d0003e0ffbfdf6d8c04f20", + "observed_bias.gz:md5,92bcd0592d22a6a58d0360fc76103e56", + "observed_bias_3p.gz:md5,92bcd0592d22a6a58d0360fc76103e56", + "cmd_info.json:md5,850c132a67e812b34db1ad7fe5f40fe0", + "ambig_info.tsv:md5,3de4f79e4563589e15ec8ae05eb6eb3c", + "expected_bias.gz:md5,3407f87245d0003e0ffbfdf6d8c04f20", + "observed_bias.gz:md5,92bcd0592d22a6a58d0360fc76103e56", + "observed_bias_3p.gz:md5,92bcd0592d22a6a58d0360fc76103e56", + "cmd_info.json:md5,bc01c390eb88fee1a6fa19dfc7c0f6b7", + "SALM_REP1.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "SALM_REP2.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "salmon.merged.tx2gene.tsv:md5,02c8aa14dbbbd6c4e45cf0a1b916b1ab", + "e2t.ctab:md5,18eaeb363605980a232768e91e2e67bc", + "e_data.ctab:md5,d184b862d9c9e07683edd01c56f6400c", + "i2t.ctab:md5,8df3306abca08ac33f4473c7ed0446dd", + "i_data.ctab:md5,db3a5f082fe2231d4b7e68cf3996b62d", + "e2t.ctab:md5,18eaeb363605980a232768e91e2e67bc", + "e_data.ctab:md5,261b2228f585d869612e9cc7a6497bc2", + "i2t.ctab:md5,8df3306abca08ac33f4473c7ed0446dd", + "i_data.ctab:md5,db3a5f082fe2231d4b7e68cf3996b62d" + ] + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.2" + }, + "timestamp": "2026-02-26T14:16:24.358893576" + }, + "Params: --aligner bowtie2_salmon --gffread_transcript_fasta": { + "content": [ + 46, + { + "BOWTIE2_ALIGN": { + "bowtie2": "2.5.4", + "pigz": 2.8, + "samtools": 1.21 + }, + "BOWTIE2_BUILD": { + "bowtie2": "2.5.4" + }, + "CUSTOM_TX2GENE": { + "python": "3.10.4" + }, + "FASTQC": { + "fastqc": "0.12.1" + }, + "FQ_LINT": { + "fq": "0.12.0" + }, + "FQ_LINT_AFTER_TRIMMING": { + "fq": "0.12.0" + }, + "GFFREAD": { + "gffread": "0.12.7" + }, + "GFFREAD_TRANSCRIPTS": { + "gffread": "0.12.7" + }, + "GTF2BED": { + "perl": "5.26.2" + }, + "GTF_FILTER": { + "python": "3.9.5" + }, + "PICARD_MARKDUPLICATES": { + "picard": "3.4.0" + }, + "SALMON_QUANT": { + "salmon": "1.10.3" + }, + "SAMTOOLS_FAIDX": { + "samtools": "1.22.1" + }, + "SAMTOOLS_FLAGSTAT": { + "samtools": "1.22.1" + }, + "SAMTOOLS_IDXSTATS": { + "samtools": "1.22.1" + }, + "SAMTOOLS_INDEX": { + "samtools": "1.22.1" + }, + "SAMTOOLS_SORT": { + "samtools": "1.22.1" + }, + "SAMTOOLS_STATS": { + "samtools": "1.22.1" + }, + "SE_GENE_UNIFIED": { + "bioconductor-summarizedexperiment": "1.32.0" + }, + "SE_TRANSCRIPT_UNIFIED": { + "bioconductor-summarizedexperiment": "1.32.0" + }, + "STRINGTIE_STRINGTIE": { + "stringtie": "2.2.3" + }, + "TRIMGALORE": { + "trimgalore": "0.6.10" + }, + "TXIMETA_TXIMPORT": { + "bioconductor-tximeta": "1.20.1" + }, + "UNTAR_SALMON_INDEX": { + "untar": 1.34 + } + }, + [ + "bowtie2_salmon", + "bowtie2_salmon/SALM_REP1", + "bowtie2_salmon/SALM_REP1.markdup.sorted.bam", + "bowtie2_salmon/SALM_REP1.markdup.sorted.bam.bai", + "bowtie2_salmon/SALM_REP1/aux_info", + "bowtie2_salmon/SALM_REP1/aux_info/ambig_info.tsv", + "bowtie2_salmon/SALM_REP1/aux_info/expected_bias.gz", + "bowtie2_salmon/SALM_REP1/aux_info/fld.gz", + "bowtie2_salmon/SALM_REP1/aux_info/meta_info.json", + "bowtie2_salmon/SALM_REP1/aux_info/observed_bias.gz", + "bowtie2_salmon/SALM_REP1/aux_info/observed_bias_3p.gz", + "bowtie2_salmon/SALM_REP1/cmd_info.json", + "bowtie2_salmon/SALM_REP1/libParams", + "bowtie2_salmon/SALM_REP1/libParams/flenDist.txt", + "bowtie2_salmon/SALM_REP1/logs", + "bowtie2_salmon/SALM_REP1/logs/salmon_quant.log", + "bowtie2_salmon/SALM_REP1/quant.genes.sf", + "bowtie2_salmon/SALM_REP1/quant.sf", + "bowtie2_salmon/SALM_REP2", + "bowtie2_salmon/SALM_REP2.markdup.sorted.bam", + "bowtie2_salmon/SALM_REP2.markdup.sorted.bam.bai", + "bowtie2_salmon/SALM_REP2/aux_info", + "bowtie2_salmon/SALM_REP2/aux_info/ambig_info.tsv", + "bowtie2_salmon/SALM_REP2/aux_info/expected_bias.gz", + "bowtie2_salmon/SALM_REP2/aux_info/fld.gz", + "bowtie2_salmon/SALM_REP2/aux_info/meta_info.json", + "bowtie2_salmon/SALM_REP2/aux_info/observed_bias.gz", + "bowtie2_salmon/SALM_REP2/aux_info/observed_bias_3p.gz", + "bowtie2_salmon/SALM_REP2/cmd_info.json", + "bowtie2_salmon/SALM_REP2/libParams", + "bowtie2_salmon/SALM_REP2/libParams/flenDist.txt", + "bowtie2_salmon/SALM_REP2/logs", + "bowtie2_salmon/SALM_REP2/logs/salmon_quant.log", + "bowtie2_salmon/SALM_REP2/quant.genes.sf", + "bowtie2_salmon/SALM_REP2/quant.sf", + "bowtie2_salmon/log", + "bowtie2_salmon/log/SALM_REP1.bowtie2.log", + "bowtie2_salmon/log/SALM_REP2.bowtie2.log", + "bowtie2_salmon/picard_metrics", + "bowtie2_salmon/picard_metrics/SALM_REP1.markdup.sorted.MarkDuplicates.metrics.txt", + "bowtie2_salmon/picard_metrics/SALM_REP2.markdup.sorted.MarkDuplicates.metrics.txt", + "bowtie2_salmon/salmon.merged.gene.SummarizedExperiment.rds", + "bowtie2_salmon/salmon.merged.gene_counts.tsv", + "bowtie2_salmon/salmon.merged.gene_counts_length_scaled.tsv", + "bowtie2_salmon/salmon.merged.gene_counts_scaled.tsv", + "bowtie2_salmon/salmon.merged.gene_lengths.tsv", + "bowtie2_salmon/salmon.merged.gene_tpm.tsv", + "bowtie2_salmon/salmon.merged.transcript.SummarizedExperiment.rds", + "bowtie2_salmon/salmon.merged.transcript_counts.tsv", + "bowtie2_salmon/salmon.merged.transcript_lengths.tsv", + "bowtie2_salmon/salmon.merged.transcript_tpm.tsv", + "bowtie2_salmon/salmon.merged.tx2gene.tsv", + "bowtie2_salmon/samtools_stats", + "bowtie2_salmon/samtools_stats/SALM_REP1.markdup.sorted.bam.flagstat", + "bowtie2_salmon/samtools_stats/SALM_REP1.markdup.sorted.bam.idxstats", + "bowtie2_salmon/samtools_stats/SALM_REP1.markdup.sorted.bam.stats", + "bowtie2_salmon/samtools_stats/SALM_REP1.sorted.bam.flagstat", + "bowtie2_salmon/samtools_stats/SALM_REP1.sorted.bam.idxstats", + "bowtie2_salmon/samtools_stats/SALM_REP1.sorted.bam.stats", + "bowtie2_salmon/samtools_stats/SALM_REP2.markdup.sorted.bam.flagstat", + "bowtie2_salmon/samtools_stats/SALM_REP2.markdup.sorted.bam.idxstats", + "bowtie2_salmon/samtools_stats/SALM_REP2.markdup.sorted.bam.stats", + "bowtie2_salmon/samtools_stats/SALM_REP2.sorted.bam.flagstat", + "bowtie2_salmon/samtools_stats/SALM_REP2.sorted.bam.idxstats", + "bowtie2_salmon/samtools_stats/SALM_REP2.sorted.bam.stats", + "bowtie2_salmon/stringtie", + "bowtie2_salmon/stringtie/SALM_REP1.ballgown", + "bowtie2_salmon/stringtie/SALM_REP1.ballgown/e2t.ctab", + "bowtie2_salmon/stringtie/SALM_REP1.ballgown/e_data.ctab", + "bowtie2_salmon/stringtie/SALM_REP1.ballgown/i2t.ctab", + "bowtie2_salmon/stringtie/SALM_REP1.ballgown/i_data.ctab", + "bowtie2_salmon/stringtie/SALM_REP1.ballgown/t_data.ctab", + "bowtie2_salmon/stringtie/SALM_REP1.coverage.gtf", + "bowtie2_salmon/stringtie/SALM_REP1.gene.abundance.txt", + "bowtie2_salmon/stringtie/SALM_REP1.transcripts.gtf", + "bowtie2_salmon/stringtie/SALM_REP2.ballgown", + "bowtie2_salmon/stringtie/SALM_REP2.ballgown/e2t.ctab", + "bowtie2_salmon/stringtie/SALM_REP2.ballgown/e_data.ctab", + "bowtie2_salmon/stringtie/SALM_REP2.ballgown/i2t.ctab", + "bowtie2_salmon/stringtie/SALM_REP2.ballgown/i_data.ctab", + "bowtie2_salmon/stringtie/SALM_REP2.ballgown/t_data.ctab", + "bowtie2_salmon/stringtie/SALM_REP2.coverage.gtf", + "bowtie2_salmon/stringtie/SALM_REP2.gene.abundance.txt", + "bowtie2_salmon/stringtie/SALM_REP2.transcripts.gtf", + "fastqc", + "fastqc/raw", + "fastqc/raw/SALM_REP1_raw_1_fastqc.html", + "fastqc/raw/SALM_REP1_raw_1_fastqc.zip", + "fastqc/raw/SALM_REP1_raw_2_fastqc.html", + "fastqc/raw/SALM_REP1_raw_2_fastqc.zip", + "fastqc/raw/SALM_REP2_raw_1_fastqc.html", + "fastqc/raw/SALM_REP2_raw_1_fastqc.zip", + "fastqc/raw/SALM_REP2_raw_2_fastqc.html", + "fastqc/raw/SALM_REP2_raw_2_fastqc.zip", + "fastqc/trim", + "fastqc/trim/SALM_REP1_trimmed_1_val_1_fastqc.html", + "fastqc/trim/SALM_REP1_trimmed_1_val_1_fastqc.zip", + "fastqc/trim/SALM_REP1_trimmed_2_val_2_fastqc.html", + "fastqc/trim/SALM_REP1_trimmed_2_val_2_fastqc.zip", + "fastqc/trim/SALM_REP2_trimmed_1_val_1_fastqc.html", + "fastqc/trim/SALM_REP2_trimmed_1_val_1_fastqc.zip", + "fastqc/trim/SALM_REP2_trimmed_2_val_2_fastqc.html", + "fastqc/trim/SALM_REP2_trimmed_2_val_2_fastqc.zip", + "fq_lint", + "fq_lint/raw", + "fq_lint/raw/SALM_REP1.fq_lint.txt", + "fq_lint/raw/SALM_REP2.fq_lint.txt", + "fq_lint/trimmed", + "fq_lint/trimmed/SALM_REP1.fq_lint.txt", + "fq_lint/trimmed/SALM_REP2.fq_lint.txt", + "multiqc", + "multiqc/bowtie2_salmon", + "multiqc/bowtie2_salmon/multiqc_report.html", + "multiqc/bowtie2_salmon/multiqc_report_data", + "multiqc/bowtie2_salmon/multiqc_report_data/bowtie2_pe_plot.txt", + "multiqc/bowtie2_salmon/multiqc_report_data/cutadapt_filtered_reads_plot.txt", + "multiqc/bowtie2_salmon/multiqc_report_data/cutadapt_trimmed_sequences_plot_3_Counts.txt", + "multiqc/bowtie2_salmon/multiqc_report_data/cutadapt_trimmed_sequences_plot_3_Obs_Exp.txt", + "multiqc/bowtie2_salmon/multiqc_report_data/fastqc_raw-status-check-heatmap.txt", + "multiqc/bowtie2_salmon/multiqc_report_data/fastqc_raw_overrepresented_sequences_plot.txt", + "multiqc/bowtie2_salmon/multiqc_report_data/fastqc_raw_per_base_n_content_plot.txt", + "multiqc/bowtie2_salmon/multiqc_report_data/fastqc_raw_per_base_sequence_quality_plot.txt", + "multiqc/bowtie2_salmon/multiqc_report_data/fastqc_raw_per_sequence_gc_content_plot_Counts.txt", + "multiqc/bowtie2_salmon/multiqc_report_data/fastqc_raw_per_sequence_gc_content_plot_Percentages.txt", + "multiqc/bowtie2_salmon/multiqc_report_data/fastqc_raw_per_sequence_quality_scores_plot.txt", + "multiqc/bowtie2_salmon/multiqc_report_data/fastqc_raw_sequence_counts_plot.txt", + "multiqc/bowtie2_salmon/multiqc_report_data/fastqc_raw_sequence_duplication_levels_plot.txt", + "multiqc/bowtie2_salmon/multiqc_report_data/fastqc_raw_top_overrepresented_sequences_table.txt", + "multiqc/bowtie2_salmon/multiqc_report_data/fastqc_sequence_length_distribution_plot.txt", + "multiqc/bowtie2_salmon/multiqc_report_data/fastqc_trimmed-status-check-heatmap.txt", + "multiqc/bowtie2_salmon/multiqc_report_data/fastqc_trimmed_overrepresented_sequences_plot.txt", + "multiqc/bowtie2_salmon/multiqc_report_data/fastqc_trimmed_per_base_n_content_plot.txt", + "multiqc/bowtie2_salmon/multiqc_report_data/fastqc_trimmed_per_base_sequence_quality_plot.txt", + "multiqc/bowtie2_salmon/multiqc_report_data/fastqc_trimmed_per_sequence_gc_content_plot_Counts.txt", + "multiqc/bowtie2_salmon/multiqc_report_data/fastqc_trimmed_per_sequence_gc_content_plot_Percentages.txt", + "multiqc/bowtie2_salmon/multiqc_report_data/fastqc_trimmed_per_sequence_quality_scores_plot.txt", + "multiqc/bowtie2_salmon/multiqc_report_data/fastqc_trimmed_sequence_counts_plot.txt", + "multiqc/bowtie2_salmon/multiqc_report_data/fastqc_trimmed_sequence_duplication_levels_plot.txt", + "multiqc/bowtie2_salmon/multiqc_report_data/fastqc_trimmed_top_overrepresented_sequences_table.txt", + "multiqc/bowtie2_salmon/multiqc_report_data/llms-full.txt", + "multiqc/bowtie2_salmon/multiqc_report_data/multiqc.log", + "multiqc/bowtie2_salmon/multiqc_report_data/multiqc.parquet", + "multiqc/bowtie2_salmon/multiqc_report_data/multiqc_bowtie2_bowtie2_rrna.txt", + "multiqc/bowtie2_salmon/multiqc_report_data/multiqc_citations.txt", + "multiqc/bowtie2_salmon/multiqc_report_data/multiqc_cutadapt.txt", + "multiqc/bowtie2_salmon/multiqc_report_data/multiqc_data.json", + "multiqc/bowtie2_salmon/multiqc_report_data/multiqc_fastqc_fastqc_raw.txt", + "multiqc/bowtie2_salmon/multiqc_report_data/multiqc_fastqc_fastqc_trimmed.txt", + "multiqc/bowtie2_salmon/multiqc_report_data/multiqc_general_stats.txt", + "multiqc/bowtie2_salmon/multiqc_report_data/multiqc_picard_dups.txt", + "multiqc/bowtie2_salmon/multiqc_report_data/multiqc_samtools_flagstat.txt", + "multiqc/bowtie2_salmon/multiqc_report_data/multiqc_samtools_idxstats.txt", + "multiqc/bowtie2_salmon/multiqc_report_data/multiqc_samtools_stats.txt", + "multiqc/bowtie2_salmon/multiqc_report_data/multiqc_software_versions.txt", + "multiqc/bowtie2_salmon/multiqc_report_data/multiqc_sources.txt", + "multiqc/bowtie2_salmon/multiqc_report_data/picard_MarkIlluminaAdapters_histogram.txt", + "multiqc/bowtie2_salmon/multiqc_report_data/picard_MeanQualityByCycle_histogram.txt", + "multiqc/bowtie2_salmon/multiqc_report_data/picard_MeanQualityByCycle_histogram_1.txt", + "multiqc/bowtie2_salmon/multiqc_report_data/picard_QualityScoreDistribution_histogram.txt", + "multiqc/bowtie2_salmon/multiqc_report_data/picard_deduplication.txt", + "multiqc/bowtie2_salmon/multiqc_report_data/samtools-flagstat-pct-table.txt", + "multiqc/bowtie2_salmon/multiqc_report_data/samtools-flagstat-table.txt", + "multiqc/bowtie2_salmon/multiqc_report_data/samtools-idxstats-mapped-reads-plot_Normalised_Counts.txt", + "multiqc/bowtie2_salmon/multiqc_report_data/samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts.txt", + "multiqc/bowtie2_salmon/multiqc_report_data/samtools-idxstats-mapped-reads-plot_Raw_Counts.txt", + "multiqc/bowtie2_salmon/multiqc_report_data/samtools-stats-dp.txt", + "multiqc/bowtie2_salmon/multiqc_report_data/samtools_alignment_plot.txt", + "multiqc/bowtie2_salmon/multiqc_report_plots", + "multiqc/bowtie2_salmon/multiqc_report_plots/pdf", + "multiqc/bowtie2_salmon/multiqc_report_plots/pdf/bowtie2_pe_plot-cnt.pdf", + "multiqc/bowtie2_salmon/multiqc_report_plots/pdf/bowtie2_pe_plot-pct.pdf", + "multiqc/bowtie2_salmon/multiqc_report_plots/pdf/cutadapt_filtered_reads_plot-cnt.pdf", + "multiqc/bowtie2_salmon/multiqc_report_plots/pdf/cutadapt_filtered_reads_plot-pct.pdf", + "multiqc/bowtie2_salmon/multiqc_report_plots/pdf/cutadapt_trimmed_sequences_plot_3_Counts.pdf", + "multiqc/bowtie2_salmon/multiqc_report_plots/pdf/cutadapt_trimmed_sequences_plot_3_Obs_Exp.pdf", + "multiqc/bowtie2_salmon/multiqc_report_plots/pdf/fastqc_raw-status-check-heatmap.pdf", + "multiqc/bowtie2_salmon/multiqc_report_plots/pdf/fastqc_raw_overrepresented_sequences_plot.pdf", + "multiqc/bowtie2_salmon/multiqc_report_plots/pdf/fastqc_raw_per_base_n_content_plot.pdf", + "multiqc/bowtie2_salmon/multiqc_report_plots/pdf/fastqc_raw_per_base_sequence_quality_plot.pdf", + "multiqc/bowtie2_salmon/multiqc_report_plots/pdf/fastqc_raw_per_sequence_gc_content_plot_Counts.pdf", + "multiqc/bowtie2_salmon/multiqc_report_plots/pdf/fastqc_raw_per_sequence_gc_content_plot_Percentages.pdf", + "multiqc/bowtie2_salmon/multiqc_report_plots/pdf/fastqc_raw_per_sequence_quality_scores_plot.pdf", + "multiqc/bowtie2_salmon/multiqc_report_plots/pdf/fastqc_raw_sequence_counts_plot-cnt.pdf", + "multiqc/bowtie2_salmon/multiqc_report_plots/pdf/fastqc_raw_sequence_counts_plot-pct.pdf", + "multiqc/bowtie2_salmon/multiqc_report_plots/pdf/fastqc_raw_sequence_duplication_levels_plot.pdf", + "multiqc/bowtie2_salmon/multiqc_report_plots/pdf/fastqc_raw_top_overrepresented_sequences_table.pdf", + "multiqc/bowtie2_salmon/multiqc_report_plots/pdf/fastqc_sequence_length_distribution_plot.pdf", + "multiqc/bowtie2_salmon/multiqc_report_plots/pdf/fastqc_trimmed-status-check-heatmap.pdf", + "multiqc/bowtie2_salmon/multiqc_report_plots/pdf/fastqc_trimmed_overrepresented_sequences_plot.pdf", + "multiqc/bowtie2_salmon/multiqc_report_plots/pdf/fastqc_trimmed_per_base_n_content_plot.pdf", + "multiqc/bowtie2_salmon/multiqc_report_plots/pdf/fastqc_trimmed_per_base_sequence_quality_plot.pdf", + "multiqc/bowtie2_salmon/multiqc_report_plots/pdf/fastqc_trimmed_per_sequence_gc_content_plot_Counts.pdf", + "multiqc/bowtie2_salmon/multiqc_report_plots/pdf/fastqc_trimmed_per_sequence_gc_content_plot_Percentages.pdf", + "multiqc/bowtie2_salmon/multiqc_report_plots/pdf/fastqc_trimmed_per_sequence_quality_scores_plot.pdf", + "multiqc/bowtie2_salmon/multiqc_report_plots/pdf/fastqc_trimmed_sequence_counts_plot-cnt.pdf", + "multiqc/bowtie2_salmon/multiqc_report_plots/pdf/fastqc_trimmed_sequence_counts_plot-pct.pdf", + "multiqc/bowtie2_salmon/multiqc_report_plots/pdf/fastqc_trimmed_sequence_duplication_levels_plot.pdf", + "multiqc/bowtie2_salmon/multiqc_report_plots/pdf/fastqc_trimmed_top_overrepresented_sequences_table.pdf", + "multiqc/bowtie2_salmon/multiqc_report_plots/pdf/picard_deduplication-cnt.pdf", + "multiqc/bowtie2_salmon/multiqc_report_plots/pdf/picard_deduplication-pct.pdf", + "multiqc/bowtie2_salmon/multiqc_report_plots/pdf/samtools-flagstat-pct-table.pdf", + "multiqc/bowtie2_salmon/multiqc_report_plots/pdf/samtools-flagstat-table.pdf", + "multiqc/bowtie2_salmon/multiqc_report_plots/pdf/samtools-idxstats-mapped-reads-plot_Normalised_Counts-cnt.pdf", + "multiqc/bowtie2_salmon/multiqc_report_plots/pdf/samtools-idxstats-mapped-reads-plot_Normalised_Counts-log.pdf", + "multiqc/bowtie2_salmon/multiqc_report_plots/pdf/samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts-cnt.pdf", + "multiqc/bowtie2_salmon/multiqc_report_plots/pdf/samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts-log.pdf", + "multiqc/bowtie2_salmon/multiqc_report_plots/pdf/samtools-idxstats-mapped-reads-plot_Raw_Counts-cnt.pdf", + "multiqc/bowtie2_salmon/multiqc_report_plots/pdf/samtools-idxstats-mapped-reads-plot_Raw_Counts-log.pdf", + "multiqc/bowtie2_salmon/multiqc_report_plots/pdf/samtools-stats-dp.pdf", + "multiqc/bowtie2_salmon/multiqc_report_plots/pdf/samtools_alignment_plot-cnt.pdf", + "multiqc/bowtie2_salmon/multiqc_report_plots/pdf/samtools_alignment_plot-pct.pdf", + "multiqc/bowtie2_salmon/multiqc_report_plots/png", + "multiqc/bowtie2_salmon/multiqc_report_plots/png/bowtie2_pe_plot-cnt.png", + "multiqc/bowtie2_salmon/multiqc_report_plots/png/bowtie2_pe_plot-pct.png", + "multiqc/bowtie2_salmon/multiqc_report_plots/png/cutadapt_filtered_reads_plot-cnt.png", + "multiqc/bowtie2_salmon/multiqc_report_plots/png/cutadapt_filtered_reads_plot-pct.png", + "multiqc/bowtie2_salmon/multiqc_report_plots/png/cutadapt_trimmed_sequences_plot_3_Counts.png", + "multiqc/bowtie2_salmon/multiqc_report_plots/png/cutadapt_trimmed_sequences_plot_3_Obs_Exp.png", + "multiqc/bowtie2_salmon/multiqc_report_plots/png/fastqc_raw-status-check-heatmap.png", + "multiqc/bowtie2_salmon/multiqc_report_plots/png/fastqc_raw_overrepresented_sequences_plot.png", + "multiqc/bowtie2_salmon/multiqc_report_plots/png/fastqc_raw_per_base_n_content_plot.png", + "multiqc/bowtie2_salmon/multiqc_report_plots/png/fastqc_raw_per_base_sequence_quality_plot.png", + "multiqc/bowtie2_salmon/multiqc_report_plots/png/fastqc_raw_per_sequence_gc_content_plot_Counts.png", + "multiqc/bowtie2_salmon/multiqc_report_plots/png/fastqc_raw_per_sequence_gc_content_plot_Percentages.png", + "multiqc/bowtie2_salmon/multiqc_report_plots/png/fastqc_raw_per_sequence_quality_scores_plot.png", + "multiqc/bowtie2_salmon/multiqc_report_plots/png/fastqc_raw_sequence_counts_plot-cnt.png", + "multiqc/bowtie2_salmon/multiqc_report_plots/png/fastqc_raw_sequence_counts_plot-pct.png", + "multiqc/bowtie2_salmon/multiqc_report_plots/png/fastqc_raw_sequence_duplication_levels_plot.png", + "multiqc/bowtie2_salmon/multiqc_report_plots/png/fastqc_raw_top_overrepresented_sequences_table.png", + "multiqc/bowtie2_salmon/multiqc_report_plots/png/fastqc_sequence_length_distribution_plot.png", + "multiqc/bowtie2_salmon/multiqc_report_plots/png/fastqc_trimmed-status-check-heatmap.png", + "multiqc/bowtie2_salmon/multiqc_report_plots/png/fastqc_trimmed_overrepresented_sequences_plot.png", + "multiqc/bowtie2_salmon/multiqc_report_plots/png/fastqc_trimmed_per_base_n_content_plot.png", + "multiqc/bowtie2_salmon/multiqc_report_plots/png/fastqc_trimmed_per_base_sequence_quality_plot.png", + "multiqc/bowtie2_salmon/multiqc_report_plots/png/fastqc_trimmed_per_sequence_gc_content_plot_Counts.png", + "multiqc/bowtie2_salmon/multiqc_report_plots/png/fastqc_trimmed_per_sequence_gc_content_plot_Percentages.png", + "multiqc/bowtie2_salmon/multiqc_report_plots/png/fastqc_trimmed_per_sequence_quality_scores_plot.png", + "multiqc/bowtie2_salmon/multiqc_report_plots/png/fastqc_trimmed_sequence_counts_plot-cnt.png", + "multiqc/bowtie2_salmon/multiqc_report_plots/png/fastqc_trimmed_sequence_counts_plot-pct.png", + "multiqc/bowtie2_salmon/multiqc_report_plots/png/fastqc_trimmed_sequence_duplication_levels_plot.png", + "multiqc/bowtie2_salmon/multiqc_report_plots/png/fastqc_trimmed_top_overrepresented_sequences_table.png", + "multiqc/bowtie2_salmon/multiqc_report_plots/png/picard_deduplication-cnt.png", + "multiqc/bowtie2_salmon/multiqc_report_plots/png/picard_deduplication-pct.png", + "multiqc/bowtie2_salmon/multiqc_report_plots/png/samtools-flagstat-pct-table.png", + "multiqc/bowtie2_salmon/multiqc_report_plots/png/samtools-flagstat-table.png", + "multiqc/bowtie2_salmon/multiqc_report_plots/png/samtools-idxstats-mapped-reads-plot_Normalised_Counts-cnt.png", + "multiqc/bowtie2_salmon/multiqc_report_plots/png/samtools-idxstats-mapped-reads-plot_Normalised_Counts-log.png", + "multiqc/bowtie2_salmon/multiqc_report_plots/png/samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts-cnt.png", + "multiqc/bowtie2_salmon/multiqc_report_plots/png/samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts-log.png", + "multiqc/bowtie2_salmon/multiqc_report_plots/png/samtools-idxstats-mapped-reads-plot_Raw_Counts-cnt.png", + "multiqc/bowtie2_salmon/multiqc_report_plots/png/samtools-idxstats-mapped-reads-plot_Raw_Counts-log.png", + "multiqc/bowtie2_salmon/multiqc_report_plots/png/samtools-stats-dp.png", + "multiqc/bowtie2_salmon/multiqc_report_plots/png/samtools_alignment_plot-cnt.png", + "multiqc/bowtie2_salmon/multiqc_report_plots/png/samtools_alignment_plot-pct.png", + "multiqc/bowtie2_salmon/multiqc_report_plots/svg", + "multiqc/bowtie2_salmon/multiqc_report_plots/svg/bowtie2_pe_plot-cnt.svg", + "multiqc/bowtie2_salmon/multiqc_report_plots/svg/bowtie2_pe_plot-pct.svg", + "multiqc/bowtie2_salmon/multiqc_report_plots/svg/cutadapt_filtered_reads_plot-cnt.svg", + "multiqc/bowtie2_salmon/multiqc_report_plots/svg/cutadapt_filtered_reads_plot-pct.svg", + "multiqc/bowtie2_salmon/multiqc_report_plots/svg/cutadapt_trimmed_sequences_plot_3_Counts.svg", + "multiqc/bowtie2_salmon/multiqc_report_plots/svg/cutadapt_trimmed_sequences_plot_3_Obs_Exp.svg", + "multiqc/bowtie2_salmon/multiqc_report_plots/svg/fastqc_raw-status-check-heatmap.svg", + "multiqc/bowtie2_salmon/multiqc_report_plots/svg/fastqc_raw_overrepresented_sequences_plot.svg", + "multiqc/bowtie2_salmon/multiqc_report_plots/svg/fastqc_raw_per_base_n_content_plot.svg", + "multiqc/bowtie2_salmon/multiqc_report_plots/svg/fastqc_raw_per_base_sequence_quality_plot.svg", + "multiqc/bowtie2_salmon/multiqc_report_plots/svg/fastqc_raw_per_sequence_gc_content_plot_Counts.svg", + "multiqc/bowtie2_salmon/multiqc_report_plots/svg/fastqc_raw_per_sequence_gc_content_plot_Percentages.svg", + "multiqc/bowtie2_salmon/multiqc_report_plots/svg/fastqc_raw_per_sequence_quality_scores_plot.svg", + "multiqc/bowtie2_salmon/multiqc_report_plots/svg/fastqc_raw_sequence_counts_plot-cnt.svg", + "multiqc/bowtie2_salmon/multiqc_report_plots/svg/fastqc_raw_sequence_counts_plot-pct.svg", + "multiqc/bowtie2_salmon/multiqc_report_plots/svg/fastqc_raw_sequence_duplication_levels_plot.svg", + "multiqc/bowtie2_salmon/multiqc_report_plots/svg/fastqc_raw_top_overrepresented_sequences_table.svg", + "multiqc/bowtie2_salmon/multiqc_report_plots/svg/fastqc_sequence_length_distribution_plot.svg", + "multiqc/bowtie2_salmon/multiqc_report_plots/svg/fastqc_trimmed-status-check-heatmap.svg", + "multiqc/bowtie2_salmon/multiqc_report_plots/svg/fastqc_trimmed_overrepresented_sequences_plot.svg", + "multiqc/bowtie2_salmon/multiqc_report_plots/svg/fastqc_trimmed_per_base_n_content_plot.svg", + "multiqc/bowtie2_salmon/multiqc_report_plots/svg/fastqc_trimmed_per_base_sequence_quality_plot.svg", + "multiqc/bowtie2_salmon/multiqc_report_plots/svg/fastqc_trimmed_per_sequence_gc_content_plot_Counts.svg", + "multiqc/bowtie2_salmon/multiqc_report_plots/svg/fastqc_trimmed_per_sequence_gc_content_plot_Percentages.svg", + "multiqc/bowtie2_salmon/multiqc_report_plots/svg/fastqc_trimmed_per_sequence_quality_scores_plot.svg", + "multiqc/bowtie2_salmon/multiqc_report_plots/svg/fastqc_trimmed_sequence_counts_plot-cnt.svg", + "multiqc/bowtie2_salmon/multiqc_report_plots/svg/fastqc_trimmed_sequence_counts_plot-pct.svg", + "multiqc/bowtie2_salmon/multiqc_report_plots/svg/fastqc_trimmed_sequence_duplication_levels_plot.svg", + "multiqc/bowtie2_salmon/multiqc_report_plots/svg/fastqc_trimmed_top_overrepresented_sequences_table.svg", + "multiqc/bowtie2_salmon/multiqc_report_plots/svg/picard_deduplication-cnt.svg", + "multiqc/bowtie2_salmon/multiqc_report_plots/svg/picard_deduplication-pct.svg", + "multiqc/bowtie2_salmon/multiqc_report_plots/svg/samtools-flagstat-pct-table.svg", + "multiqc/bowtie2_salmon/multiqc_report_plots/svg/samtools-flagstat-table.svg", + "multiqc/bowtie2_salmon/multiqc_report_plots/svg/samtools-idxstats-mapped-reads-plot_Normalised_Counts-cnt.svg", + "multiqc/bowtie2_salmon/multiqc_report_plots/svg/samtools-idxstats-mapped-reads-plot_Normalised_Counts-log.svg", + "multiqc/bowtie2_salmon/multiqc_report_plots/svg/samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts-cnt.svg", + "multiqc/bowtie2_salmon/multiqc_report_plots/svg/samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts-log.svg", + "multiqc/bowtie2_salmon/multiqc_report_plots/svg/samtools-idxstats-mapped-reads-plot_Raw_Counts-cnt.svg", + "multiqc/bowtie2_salmon/multiqc_report_plots/svg/samtools-idxstats-mapped-reads-plot_Raw_Counts-log.svg", + "multiqc/bowtie2_salmon/multiqc_report_plots/svg/samtools-stats-dp.svg", + "multiqc/bowtie2_salmon/multiqc_report_plots/svg/samtools_alignment_plot-cnt.svg", + "multiqc/bowtie2_salmon/multiqc_report_plots/svg/samtools_alignment_plot-pct.svg", + "pipeline_info", + "pipeline_info/nf_core_rnaseq_software_mqc_versions.yml", + "trimgalore", + "trimgalore/SALM_REP1_trimmed_1.fastq.gz_trimming_report.txt", + "trimgalore/SALM_REP1_trimmed_2.fastq.gz_trimming_report.txt", + "trimgalore/SALM_REP2_trimmed_1.fastq.gz_trimming_report.txt", + "trimgalore/SALM_REP2_trimmed_2.fastq.gz_trimming_report.txt" + ], + [ + "ambig_info.tsv:md5,a9536f6a5c0c010793a03605e4f9a2ba", + "expected_bias.gz:md5,3407f87245d0003e0ffbfdf6d8c04f20", + "observed_bias.gz:md5,92bcd0592d22a6a58d0360fc76103e56", + "observed_bias_3p.gz:md5,92bcd0592d22a6a58d0360fc76103e56", + "cmd_info.json:md5,543a8d38b7c80ae653984d7b7ab01793", + "ambig_info.tsv:md5,c9b4c9aaeee469d7a2be88f90ebdbfd5", + "expected_bias.gz:md5,3407f87245d0003e0ffbfdf6d8c04f20", + "observed_bias.gz:md5,92bcd0592d22a6a58d0360fc76103e56", + "observed_bias_3p.gz:md5,92bcd0592d22a6a58d0360fc76103e56", + "cmd_info.json:md5,a864d77f7a6becef8f2a3f4cc1c2c84b", + "salmon.merged.tx2gene.tsv:md5,02c8aa14dbbbd6c4e45cf0a1b916b1ab", + "e2t.ctab:md5,18eaeb363605980a232768e91e2e67bc", + "e_data.ctab:md5,e49d57ddf8348d23291aa7aea7b3e81f", + "i2t.ctab:md5,8df3306abca08ac33f4473c7ed0446dd", + "i_data.ctab:md5,db3a5f082fe2231d4b7e68cf3996b62d", + "e2t.ctab:md5,18eaeb363605980a232768e91e2e67bc", + "e_data.ctab:md5,e49d57ddf8348d23291aa7aea7b3e81f", + "i2t.ctab:md5,8df3306abca08ac33f4473c7ed0446dd", + "i_data.ctab:md5,db3a5f082fe2231d4b7e68cf3996b62d", + "cutadapt_filtered_reads_plot.txt:md5,b82a9c2120e7c0bb06e3841ab52193c5", + "cutadapt_trimmed_sequences_plot_3_Counts.txt:md5,3ffd158758886bc8670a0e691aedadda", + "cutadapt_trimmed_sequences_plot_3_Obs_Exp.txt:md5,570d5968b148e3759e31bfe80a6efcfb", + "fastqc_raw-status-check-heatmap.txt:md5,e7e2b9dc8c77f456ad5f770fe2b8e308", + "fastqc_raw_overrepresented_sequences_plot.txt:md5,4b1cdda2f52c1064258e9b77341d5d86", + "fastqc_raw_per_base_n_content_plot.txt:md5,76f9627438fa3a1c983405fa057d1b3a", + "fastqc_raw_per_base_sequence_quality_plot.txt:md5,b0ee91ba241f544696d9e096a1f81ae4", + "fastqc_raw_per_sequence_gc_content_plot_Counts.txt:md5,9f27db3f66c750152270ac6f65fe65d8", + "fastqc_raw_per_sequence_gc_content_plot_Percentages.txt:md5,b2c8cfeae0083d9779c1de1256d9938f", + "fastqc_raw_per_sequence_quality_scores_plot.txt:md5,b55988c5fa92b3ca87acd99d7a79a0e0", + "fastqc_raw_sequence_counts_plot.txt:md5,fe8a0c5d299e6e9972c8605e9fc8a022", + "fastqc_raw_sequence_duplication_levels_plot.txt:md5,5413485383af9f009c86ad014cb1b026", + "fastqc_trimmed-status-check-heatmap.txt:md5,1d0aa37a36a7983cafafc566b6e88ac8", + "fastqc_trimmed_overrepresented_sequences_plot.txt:md5,4b1cdda2f52c1064258e9b77341d5d86", + "fastqc_trimmed_per_base_n_content_plot.txt:md5,4544afb10dbb7fd0c31b9ed0825310b8", + "fastqc_trimmed_per_base_sequence_quality_plot.txt:md5,737ddde9e89904f6b2948fcb385b8d87", + "fastqc_trimmed_per_sequence_gc_content_plot_Counts.txt:md5,61504ae61ecd699415536d2c519afb6f", + "fastqc_trimmed_per_sequence_gc_content_plot_Percentages.txt:md5,671e455fc21da8741b4c0462320aaed6", + "fastqc_trimmed_per_sequence_quality_scores_plot.txt:md5,610d3a1f008bf73125acaacb72bb7dcf", + "fastqc_trimmed_sequence_counts_plot.txt:md5,fe8a0c5d299e6e9972c8605e9fc8a022", + "fastqc_trimmed_sequence_duplication_levels_plot.txt:md5,5413485383af9f009c86ad014cb1b026", + "multiqc_citations.txt:md5,d44ac56604b2733acfe5b5f89664c43b", + "multiqc_fastqc_fastqc_raw.txt:md5,42c1cc19c4b9104eb499ce499f335951", + "multiqc_fastqc_fastqc_trimmed.txt:md5,8be94d69e0c458017cf5064fa1fa86a0", + "multiqc_samtools_idxstats.txt:md5,3c5601429d85e11395c354db24a1a8ac", + "picard_MarkIlluminaAdapters_histogram.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "picard_MeanQualityByCycle_histogram.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "picard_QualityScoreDistribution_histogram.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "samtools-idxstats-mapped-reads-plot_Normalised_Counts.txt:md5,bbfb423af91fbb27aeba6cc414136ff0", + "samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts.txt:md5,6b55d9b9070d8688436526df7ee1510b", + "samtools-idxstats-mapped-reads-plot_Raw_Counts.txt:md5,a8d7ee5c80619606f2a6a4b92c8bec5f" + ] + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.2" + }, + "timestamp": "2026-02-26T14:18:17.797305278" + }, + "Params: --aligner bowtie2_salmon --gffread_transcript_fasta - stub": { + "content": [ + 34, + { + "BOWTIE2_ALIGN": { + "bowtie2": "2.5.4", + "pigz": 2.8, + "samtools": 1.21 + }, + "BOWTIE2_BUILD": { + "bowtie2": "2.5.4" + }, + "CUSTOM_TX2GENE": { + "python": "3.10.4" + }, + "FASTQC": { + "fastqc": "0.12.1" + }, + "FQ_LINT": { + "fq": "0.12.0" + }, + "FQ_LINT_AFTER_TRIMMING": { + "fq": "0.12.0" + }, + "GFFREAD": { + "gffread": "0.12.7" + }, + "GFFREAD_TRANSCRIPTS": { + "gffread": "0.12.7" + }, + "GTF2BED": { + "perl": "5.26.2" + }, + "GTF_FILTER": { + "python": "3.9.5" + }, + "SALMON_QUANT": { + "salmon": "1.10.3" + }, + "SAMTOOLS_FAIDX": { + "samtools": "1.22.1" + }, + "SAMTOOLS_FLAGSTAT": { + "samtools": "1.22.1" + }, + "SAMTOOLS_IDXSTATS": { + "samtools": "1.22.1" + }, + "SAMTOOLS_INDEX": { + "samtools": "1.22.1" + }, + "SAMTOOLS_SORT": { + "samtools": "1.22.1" + }, + "SAMTOOLS_STATS": { + "samtools": "1.22.1" + }, + "SE_GENE_UNIFIED": { + "bioconductor-summarizedexperiment": "1.32.0" + }, + "SE_TRANSCRIPT_UNIFIED": { + "bioconductor-summarizedexperiment": "1.32.0" + }, + "TRIMGALORE": { + "trimgalore": "0.6.10" + }, + "TXIMETA_TXIMPORT": { + "bioconductor-tximeta": "1.20.1" + }, + "UNTAR_SALMON_INDEX": { + "untar": 1.34 + } + }, + [ + "bowtie2_salmon", + "bowtie2_salmon/SALM_REP1", + "bowtie2_salmon/SALM_REP2", + "bowtie2_salmon/all_samples.SummarizedExperiment.rds", + "bowtie2_salmon/all_samples.gene_counts.tsv", + "bowtie2_salmon/all_samples.gene_counts_length_scaled.tsv", + "bowtie2_salmon/all_samples.gene_counts_scaled.tsv", + "bowtie2_salmon/all_samples.gene_lengths.tsv", + "bowtie2_salmon/all_samples.gene_tpm.tsv", + "bowtie2_salmon/all_samples.transcript_counts.tsv", + "bowtie2_salmon/all_samples.transcript_lengths.tsv", + "bowtie2_salmon/all_samples.transcript_tpm.tsv", + "bowtie2_salmon/log", + "bowtie2_salmon/log/SALM_REP1.bowtie2.log", + "bowtie2_salmon/log/SALM_REP2.bowtie2.log", + "bowtie2_salmon/salmon.merged.tx2gene.tsv", + "bowtie2_salmon/samtools_stats", + "bowtie2_salmon/samtools_stats/SALM_REP1.sorted.bam.flagstat", + "bowtie2_salmon/samtools_stats/SALM_REP1.sorted.bam.idxstats", + "bowtie2_salmon/samtools_stats/SALM_REP1.sorted.bam.stats", + "bowtie2_salmon/samtools_stats/SALM_REP2.sorted.bam.flagstat", + "bowtie2_salmon/samtools_stats/SALM_REP2.sorted.bam.idxstats", + "bowtie2_salmon/samtools_stats/SALM_REP2.sorted.bam.stats", + "fastqc", + "fastqc/raw", + "fastqc/raw/SALM_REP1_raw.html", + "fastqc/raw/SALM_REP1_raw.zip", + "fastqc/raw/SALM_REP2_raw.html", + "fastqc/raw/SALM_REP2_raw.zip", + "fastqc/trim", + "fq_lint", + "fq_lint/raw", + "fq_lint/raw/SALM_REP1.fq_lint.txt", + "fq_lint/raw/SALM_REP2.fq_lint.txt", + "fq_lint/trimmed", + "fq_lint/trimmed/SALM_REP1.fq_lint.txt", + "fq_lint/trimmed/SALM_REP2.fq_lint.txt", + "multiqc", + "multiqc/bowtie2_salmon", + "multiqc/bowtie2_salmon/multiqc_data", + "multiqc/bowtie2_salmon/multiqc_data/.stub", + "multiqc/bowtie2_salmon/multiqc_plots", + "multiqc/bowtie2_salmon/multiqc_report.html", + "pipeline_info", + "pipeline_info/nf_core_rnaseq_software_mqc_versions.yml", + "trimgalore", + "trimgalore/SALM_REP1_trimmed_1.fastq.gz_trimming_report.txt", + "trimgalore/SALM_REP1_trimmed_2.fastq.gz_trimming_report.txt", + "trimgalore/SALM_REP2_trimmed_1.fastq.gz_trimming_report.txt", + "trimgalore/SALM_REP2_trimmed_2.fastq.gz_trimming_report.txt" + ], + [ + "all_samples.gene_counts.tsv:md5,d41d8cd98f00b204e9800998ecf8427e", + "all_samples.gene_counts_length_scaled.tsv:md5,d41d8cd98f00b204e9800998ecf8427e", + "all_samples.gene_counts_scaled.tsv:md5,d41d8cd98f00b204e9800998ecf8427e", + "all_samples.gene_lengths.tsv:md5,d41d8cd98f00b204e9800998ecf8427e", + "all_samples.gene_tpm.tsv:md5,d41d8cd98f00b204e9800998ecf8427e", + "all_samples.transcript_counts.tsv:md5,d41d8cd98f00b204e9800998ecf8427e", + "all_samples.transcript_lengths.tsv:md5,d41d8cd98f00b204e9800998ecf8427e", + "all_samples.transcript_tpm.tsv:md5,d41d8cd98f00b204e9800998ecf8427e", + "salmon.merged.tx2gene.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.2" + }, + "timestamp": "2026-02-26T14:17:12.0540619" + }, + "Params: --aligner star_salmon --prokaryotic - stub": { + "content": [ + 34, + { + "CUSTOM_TX2GENE": { + "python": "3.10.4" + }, + "FASTQC": { + "fastqc": "0.12.1" + }, + "FQ_LINT": { + "fq": "0.12.0" + }, + "FQ_LINT_AFTER_TRIMMING": { + "fq": "0.12.0" + }, + "GFFREAD": { + "gffread": "0.12.7" + }, + "GFFREAD_TRANSCRIPTS": { + "gffread": "0.12.7" + }, + "GTF2BED": { + "perl": "5.26.2" + }, + "GTF_FILTER": { + "python": "3.9.5" + }, + "SALMON_QUANT": { + "salmon": "1.10.3" + }, + "SAMTOOLS_FAIDX": { + "samtools": "1.22.1" + }, + "SAMTOOLS_FLAGSTAT": { + "samtools": "1.22.1" + }, + "SAMTOOLS_IDXSTATS": { + "samtools": "1.22.1" + }, + "SAMTOOLS_INDEX": { + "samtools": "1.22.1" + }, + "SAMTOOLS_SORT": { + "samtools": "1.22.1" + }, + "SAMTOOLS_STATS": { + "samtools": "1.22.1" + }, + "SE_GENE_UNIFIED": { + "bioconductor-summarizedexperiment": "1.32.0" + }, + "SE_TRANSCRIPT_UNIFIED": { + "bioconductor-summarizedexperiment": "1.32.0" + }, + "STAR_ALIGN": { + "gawk": "5.1.0", + "samtools": 1.21, + "star": "2.7.11b" + }, + "STAR_GENOMEGENERATE": { + "gawk": "5.1.0", + "samtools": 1.21, + "star": "2.7.11b" + }, + "TRIMGALORE": { + "trimgalore": "0.6.10" + }, + "TXIMETA_TXIMPORT": { + "bioconductor-tximeta": "1.20.1" + }, + "UNTAR_SALMON_INDEX": { + "untar": 1.34 + } + }, + [ + "fastqc", + "fastqc/raw", + "fastqc/raw/SALM_REP1_raw.html", + "fastqc/raw/SALM_REP1_raw.zip", + "fastqc/raw/SALM_REP2_raw.html", + "fastqc/raw/SALM_REP2_raw.zip", + "fastqc/trim", + "fq_lint", + "fq_lint/raw", + "fq_lint/raw/SALM_REP1.fq_lint.txt", + "fq_lint/raw/SALM_REP2.fq_lint.txt", + "fq_lint/trimmed", + "fq_lint/trimmed/SALM_REP1.fq_lint.txt", + "fq_lint/trimmed/SALM_REP2.fq_lint.txt", + "multiqc", + "multiqc/star_salmon", + "multiqc/star_salmon/multiqc_data", + "multiqc/star_salmon/multiqc_data/.stub", + "multiqc/star_salmon/multiqc_plots", + "multiqc/star_salmon/multiqc_report.html", + "pipeline_info", + "pipeline_info/nf_core_rnaseq_software_mqc_versions.yml", + "star_salmon", + "star_salmon/SALM_REP1", + "star_salmon/SALM_REP2", + "star_salmon/all_samples.SummarizedExperiment.rds", + "star_salmon/all_samples.gene_counts.tsv", + "star_salmon/all_samples.gene_counts_length_scaled.tsv", + "star_salmon/all_samples.gene_counts_scaled.tsv", + "star_salmon/all_samples.gene_lengths.tsv", + "star_salmon/all_samples.gene_tpm.tsv", + "star_salmon/all_samples.transcript_counts.tsv", + "star_salmon/all_samples.transcript_lengths.tsv", + "star_salmon/all_samples.transcript_tpm.tsv", + "star_salmon/log", + "star_salmon/log/SALM_REP1.Log.final.out", + "star_salmon/log/SALM_REP1.Log.out", + "star_salmon/log/SALM_REP1.Log.progress.out", + "star_salmon/log/SALM_REP1.ReadsPerGene.out.tab", + "star_salmon/log/SALM_REP1.SJ.out.tab", + "star_salmon/log/SALM_REP1.tab", + "star_salmon/log/SALM_REP2.Log.final.out", + "star_salmon/log/SALM_REP2.Log.out", + "star_salmon/log/SALM_REP2.Log.progress.out", + "star_salmon/log/SALM_REP2.ReadsPerGene.out.tab", + "star_salmon/log/SALM_REP2.SJ.out.tab", + "star_salmon/log/SALM_REP2.tab", + "star_salmon/salmon.merged.tx2gene.tsv", + "star_salmon/samtools_stats", + "star_salmon/samtools_stats/SALM_REP1.sorted.bam.flagstat", + "star_salmon/samtools_stats/SALM_REP1.sorted.bam.idxstats", + "star_salmon/samtools_stats/SALM_REP1.sorted.bam.stats", + "star_salmon/samtools_stats/SALM_REP2.sorted.bam.flagstat", + "star_salmon/samtools_stats/SALM_REP2.sorted.bam.idxstats", + "star_salmon/samtools_stats/SALM_REP2.sorted.bam.stats", + "trimgalore", + "trimgalore/SALM_REP1_trimmed_1.fastq.gz_trimming_report.txt", + "trimgalore/SALM_REP1_trimmed_2.fastq.gz_trimming_report.txt", + "trimgalore/SALM_REP2_trimmed_1.fastq.gz_trimming_report.txt", + "trimgalore/SALM_REP2_trimmed_2.fastq.gz_trimming_report.txt" + ], + [ + "all_samples.gene_counts.tsv:md5,d41d8cd98f00b204e9800998ecf8427e", + "all_samples.gene_counts_length_scaled.tsv:md5,d41d8cd98f00b204e9800998ecf8427e", + "all_samples.gene_counts_scaled.tsv:md5,d41d8cd98f00b204e9800998ecf8427e", + "all_samples.gene_lengths.tsv:md5,d41d8cd98f00b204e9800998ecf8427e", + "all_samples.gene_tpm.tsv:md5,d41d8cd98f00b204e9800998ecf8427e", + "all_samples.transcript_counts.tsv:md5,d41d8cd98f00b204e9800998ecf8427e", + "all_samples.transcript_lengths.tsv:md5,d41d8cd98f00b204e9800998ecf8427e", + "all_samples.transcript_tpm.tsv:md5,d41d8cd98f00b204e9800998ecf8427e", + "SALM_REP1.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "SALM_REP1.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "SALM_REP1.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "SALM_REP2.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "SALM_REP2.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "SALM_REP2.tab:md5,d41d8cd98f00b204e9800998ecf8427e", + "salmon.merged.tx2gene.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.2" + }, + "timestamp": "2026-02-26T14:15:17.265018922" + } +} \ No newline at end of file diff --git a/tests/remove_ribo_rna.nf.test b/tests/remove_ribo_rna.nf.test index 2fbbbcffc..0695b7c79 100644 --- a/tests/remove_ribo_rna.nf.test +++ b/tests/remove_ribo_rna.nf.test @@ -3,6 +3,7 @@ nextflow_pipeline { name "Test pipeline with ribosomal RNA removal" script "../main.nf" tag "pipeline" + tag "remove_ribo_rna" test("Params: --remove_ribo_rna") { @@ -73,4 +74,76 @@ nextflow_pipeline { ) } } + + test("Params: --remove_ribo_rna --ribo_removal_tool bowtie2") { + + when { + params { + outdir = "$outputDir" + remove_ribo_rna = true + ribo_removal_tool = 'bowtie2' + // Skip processes already covered by default.nf.test (rRNA removal only affects read count, not BAM structure) + skip_qc = true + skip_stringtie = true + skip_bigwig = true + } + } + + then { + // stable_name: All files + folders in ${params.outdir}/ with a stable name + def stable_name = getAllFilesFromDir(params.outdir, relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}']) + // stable_path: All files in ${params.outdir}/ with stable content + def stable_path = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore') + assertAll( + { assert workflow.success}, + { assert snapshot( + // Number of successful tasks + workflow.trace.succeeded().size(), + // pipeline versions.yml file for multiqc from which Nextflow and pipeline versions are removed (all from the workflow key) + removeFromYamlMap("$outputDir/pipeline_info/nf_core_rnaseq_software_mqc_versions.yml", "Workflow"), + // All stable path name, with a relative path + stable_name, + // All files with stable contents + stable_path + ).match() } + ) + } + } + + test("Params: --remove_ribo_rna --ribo_removal_tool bowtie2 - stub") { + + options "-stub" + + when { + params { + outdir = "$outputDir" + remove_ribo_rna = true + ribo_removal_tool = 'bowtie2' + // Skip processes already covered by default.nf.test (rRNA removal only affects read count, not BAM structure) + skip_qc = true + skip_stringtie = true + skip_bigwig = true + } + } + + then { + // stable_name: All files + folders in ${params.outdir}/ with a stable name + def stable_name = getAllFilesFromDir(params.outdir, relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}']) + // stable_path: All files in ${params.outdir}/ with stable content + def stable_path = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore') + assertAll( + { assert workflow.success}, + { assert snapshot( + // Number of successful tasks + workflow.trace.succeeded().size(), + // pipeline versions.yml file for multiqc from which Nextflow and pipeline versions are removed (all from the workflow key) + removeFromYamlMap("$outputDir/pipeline_info/nf_core_rnaseq_software_mqc_versions.yml", "Workflow"), + // All stable path name, with a relative path + stable_name, + // All files with stable contents + stable_path + ).match() } + ) + } + } } diff --git a/tests/remove_ribo_rna.nf.test.snap b/tests/remove_ribo_rna.nf.test.snap index 3acab89b7..2ba460bc4 100644 --- a/tests/remove_ribo_rna.nf.test.snap +++ b/tests/remove_ribo_rna.nf.test.snap @@ -1,28 +1,164 @@ { - "Params: --remove_ribo_rna": { + "Params: --remove_ribo_rna --ribo_removal_tool bowtie2 - stub": { "content": [ - 123, + 39, { "BBMAP_BBSPLIT": { "bbmap": 39.18 }, + "BOWTIE2_BUILD": { + "bowtie2": "2.5.4" + }, "CAT_FASTQ": { "cat": 9.5 }, "CUSTOM_CATADDITIONALFASTA": { "python": "3.12.2" }, - "CUSTOM_GETCHROMSIZES": { - "getchromsizes": 1.21 + "FQ_LINT": { + "fq": "0.12.0" + }, + "GTF2BED": { + "perl": "5.26.2" + }, + "GTF_FILTER": { + "python": "3.9.5" + }, + "GUNZIP_ADDITIONAL_FASTA": { + "gunzip": 1.13 + }, + "GUNZIP_GTF": { + "gunzip": 1.13 + }, + "SAMTOOLS_FAIDX": { + "samtools": "1.22.1" + }, + "SEQKIT_REPLACE": { + "seqkit": "2.9.0" + }, + "SEQKIT_REPLACE_U2T": { + "seqkit": "2.9.0" + }, + "STAR_GENOMEGENERATE": { + "gawk": "5.1.0", + "samtools": 1.21, + "star": "2.7.11b" + }, + "TRIMGALORE": { + "trimgalore": "0.6.10" + }, + "UNTAR_SALMON_INDEX": { + "untar": 1.34 + } + }, + [ + "bowtie2_rrna", + "bowtie2_rrna/index", + "custom", + "custom/out", + "custom/out/genome_transcriptome.fasta", + "custom/out/genome_transcriptome.gtf", + "fastqc", + "fastqc/trim", + "fq_lint", + "fq_lint/raw", + "fq_lint/raw/RAP1_IAA_30M_REP1.fq_lint.txt", + "fq_lint/raw/RAP1_UNINDUCED_REP1.fq_lint.txt", + "fq_lint/raw/RAP1_UNINDUCED_REP2.fq_lint.txt", + "fq_lint/raw/WT_REP1.fq_lint.txt", + "fq_lint/raw/WT_REP2.fq_lint.txt", + "multiqc", + "multiqc/star_salmon", + "multiqc/star_salmon/multiqc_data", + "multiqc/star_salmon/multiqc_data/.stub", + "multiqc/star_salmon/multiqc_plots", + "multiqc/star_salmon/multiqc_report.html", + "pipeline_info", + "pipeline_info/nf_core_rnaseq_software_mqc_versions.yml", + "seqkit", + "seqkit/rfam-5.8s-database-id98_dna_converted.fasta.gz", + "seqkit/rfam-5.8s-database-id98_prefixed.fasta.gz", + "seqkit/rfam-5s-database-id98_dna_converted.fasta.gz", + "seqkit/rfam-5s-database-id98_prefixed.fasta.gz", + "seqkit/silva-arc-16s-id95_dna_converted.fasta.gz", + "seqkit/silva-arc-16s-id95_prefixed.fasta.gz", + "seqkit/silva-arc-23s-id98_dna_converted.fasta.gz", + "seqkit/silva-arc-23s-id98_prefixed.fasta.gz", + "seqkit/silva-bac-16s-id90_dna_converted.fasta.gz", + "seqkit/silva-bac-16s-id90_prefixed.fasta.gz", + "seqkit/silva-bac-23s-id98_dna_converted.fasta.gz", + "seqkit/silva-bac-23s-id98_prefixed.fasta.gz", + "seqkit/silva-euk-18s-id95_dna_converted.fasta.gz", + "seqkit/silva-euk-18s-id95_prefixed.fasta.gz", + "seqkit/silva-euk-28s-id98_dna_converted.fasta.gz", + "seqkit/silva-euk-28s-id98_prefixed.fasta.gz", + "trimgalore", + "trimgalore/RAP1_IAA_30M_REP1_trimmed_1.fastq.gz_trimming_report.txt", + "trimgalore/RAP1_IAA_30M_REP1_trimmed_2.fastq.gz_trimming_report.txt", + "trimgalore/RAP1_UNINDUCED_REP1_trimmed.fastq.gz_trimming_report.txt", + "trimgalore/RAP1_UNINDUCED_REP2_trimmed.fastq.gz_trimming_report.txt", + "trimgalore/WT_REP1_trimmed_1.fastq.gz_trimming_report.txt", + "trimgalore/WT_REP1_trimmed_2.fastq.gz_trimming_report.txt", + "trimgalore/WT_REP2_trimmed_1.fastq.gz_trimming_report.txt", + "trimgalore/WT_REP2_trimmed_2.fastq.gz_trimming_report.txt" + ], + [ + "genome_transcriptome.fasta:md5,d41d8cd98f00b204e9800998ecf8427e", + "genome_transcriptome.gtf:md5,d41d8cd98f00b204e9800998ecf8427e", + "rfam-5.8s-database-id98_dna_converted.fasta.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "rfam-5.8s-database-id98_prefixed.fasta.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "rfam-5s-database-id98_dna_converted.fasta.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "rfam-5s-database-id98_prefixed.fasta.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "silva-arc-16s-id95_dna_converted.fasta.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "silva-arc-16s-id95_prefixed.fasta.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "silva-arc-23s-id98_dna_converted.fasta.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "silva-arc-23s-id98_prefixed.fasta.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "silva-bac-16s-id90_dna_converted.fasta.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "silva-bac-16s-id90_prefixed.fasta.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "silva-bac-23s-id98_dna_converted.fasta.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "silva-bac-23s-id98_prefixed.fasta.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "silva-euk-18s-id95_dna_converted.fasta.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "silva-euk-18s-id95_prefixed.fasta.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "silva-euk-28s-id98_dna_converted.fasta.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "silva-euk-28s-id98_prefixed.fasta.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.2" + }, + "timestamp": "2026-02-04T17:29:20.563878423" + }, + "Params: --remove_ribo_rna": { + "content": [ + 124, + { + "BBMAP_BBSPLIT": { + "bbmap": 39.18 + }, + "CAT_FASTQ": { + "cat": 9.5 + }, + "CUSTOM_CATADDITIONALFASTA": { + "python": "3.12.2" }, "CUSTOM_TX2GENE": { "python": "3.10.4" }, "FQ_LINT": { - "fq": "0.12.0 (2024-07-08)" + "fq": "0.12.0" + }, + "FQ_LINT_AFTER_BBSPLIT": { + "fq": "0.12.0" + }, + "FQ_LINT_AFTER_RIBO_REMOVAL": { + "fq": "0.12.0" + }, + "FQ_LINT_AFTER_TRIMMING": { + "fq": "0.12.0" }, "FQ_SUBSAMPLE": { - "fq": "0.12.0 (2024-07-08)" + "fq": "0.12.0" }, "GTF2BED": { "perl": "5.26.2" @@ -37,25 +173,28 @@ "gunzip": 1.13 }, "PICARD_MARKDUPLICATES": { - "picard": "3.1.1" + "picard": "3.4.0" }, "SALMON_QUANT": { "salmon": "1.10.3" }, + "SAMTOOLS_FAIDX": { + "samtools": "1.22.1" + }, "SAMTOOLS_FLAGSTAT": { - "samtools": 1.21 + "samtools": "1.22.1" }, "SAMTOOLS_IDXSTATS": { - "samtools": 1.21 + "samtools": "1.22.1" }, "SAMTOOLS_INDEX": { - "samtools": 1.21 + "samtools": "1.22.1" }, "SAMTOOLS_SORT": { - "samtools": 1.21 + "samtools": "1.22.1" }, "SAMTOOLS_STATS": { - "samtools": 1.21 + "samtools": "1.22.1" }, "SE_GENE_UNIFIED": { "bioconductor-summarizedexperiment": "1.32.0" @@ -80,8 +219,6 @@ "star": "2.7.11b" }, "TRIMGALORE": { - "cutadapt": 4.9, - "pigz": 2.8, "trimgalore": "0.6.10" }, "TXIMETA_TXIMPORT": { @@ -121,6 +258,12 @@ "fastqc/trim/WT_REP2_trimmed_2_val_2_fastqc.html", "fastqc/trim/WT_REP2_trimmed_2_val_2_fastqc.zip", "fq_lint", + "fq_lint/bbsplit", + "fq_lint/bbsplit/RAP1_IAA_30M_REP1.fq_lint.txt", + "fq_lint/bbsplit/RAP1_UNINDUCED_REP1.fq_lint.txt", + "fq_lint/bbsplit/RAP1_UNINDUCED_REP2.fq_lint.txt", + "fq_lint/bbsplit/WT_REP1.fq_lint.txt", + "fq_lint/bbsplit/WT_REP2.fq_lint.txt", "fq_lint/raw", "fq_lint/raw/RAP1_IAA_30M_REP1.fq_lint.txt", "fq_lint/raw/RAP1_UNINDUCED_REP1.fq_lint.txt", @@ -143,6 +286,9 @@ "multiqc/star_salmon", "multiqc/star_salmon/multiqc_report.html", "multiqc/star_salmon/multiqc_report_data", + "multiqc/star_salmon/multiqc_report_data/bbmap-bbsplit_plot.txt", + "multiqc/star_salmon/multiqc_report_data/bbmap.txt", + "multiqc/star_salmon/multiqc_report_data/bbsplit_stats_table.txt", "multiqc/star_salmon/multiqc_report_data/cutadapt_filtered_reads_plot.txt", "multiqc/star_salmon/multiqc_report_data/cutadapt_trimmed_sequences_plot_3_Counts.txt", "multiqc/star_salmon/multiqc_report_data/cutadapt_trimmed_sequences_plot_3_Obs_Exp.txt", @@ -192,6 +338,9 @@ "multiqc/star_salmon/multiqc_report_data/star_summary_table.txt", "multiqc/star_salmon/multiqc_report_plots", "multiqc/star_salmon/multiqc_report_plots/pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/bbmap-bbsplit_plot-cnt.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/bbmap-bbsplit_plot-pct.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/bbsplit_stats_table.pdf", "multiqc/star_salmon/multiqc_report_plots/pdf/cutadapt_filtered_reads_plot-cnt.pdf", "multiqc/star_salmon/multiqc_report_plots/pdf/cutadapt_filtered_reads_plot-pct.pdf", "multiqc/star_salmon/multiqc_report_plots/pdf/cutadapt_trimmed_sequences_plot_3_Counts.pdf", @@ -228,6 +377,9 @@ "multiqc/star_salmon/multiqc_report_plots/pdf/star_alignment_plot-pct.pdf", "multiqc/star_salmon/multiqc_report_plots/pdf/star_summary_table.pdf", "multiqc/star_salmon/multiqc_report_plots/png", + "multiqc/star_salmon/multiqc_report_plots/png/bbmap-bbsplit_plot-cnt.png", + "multiqc/star_salmon/multiqc_report_plots/png/bbmap-bbsplit_plot-pct.png", + "multiqc/star_salmon/multiqc_report_plots/png/bbsplit_stats_table.png", "multiqc/star_salmon/multiqc_report_plots/png/cutadapt_filtered_reads_plot-cnt.png", "multiqc/star_salmon/multiqc_report_plots/png/cutadapt_filtered_reads_plot-pct.png", "multiqc/star_salmon/multiqc_report_plots/png/cutadapt_trimmed_sequences_plot_3_Counts.png", @@ -264,6 +416,9 @@ "multiqc/star_salmon/multiqc_report_plots/png/star_alignment_plot-pct.png", "multiqc/star_salmon/multiqc_report_plots/png/star_summary_table.png", "multiqc/star_salmon/multiqc_report_plots/svg", + "multiqc/star_salmon/multiqc_report_plots/svg/bbmap-bbsplit_plot-cnt.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/bbmap-bbsplit_plot-pct.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/bbsplit_stats_table.svg", "multiqc/star_salmon/multiqc_report_plots/svg/cutadapt_filtered_reads_plot-cnt.svg", "multiqc/star_salmon/multiqc_report_plots/svg/cutadapt_filtered_reads_plot-pct.svg", "multiqc/star_salmon/multiqc_report_plots/svg/cutadapt_trimmed_sequences_plot_3_Counts.svg", @@ -392,7 +547,7 @@ "salmon/salmon.merged.transcript_counts.tsv", "salmon/salmon.merged.transcript_lengths.tsv", "salmon/salmon.merged.transcript_tpm.tsv", - "salmon/tx2gene.tsv", + "salmon/salmon.merged.tx2gene.tsv", "sortmerna", "sortmerna/RAP1_IAA_30M_REP1.sortmerna.log", "sortmerna/RAP1_UNINDUCED_REP1.sortmerna.log", @@ -522,6 +677,7 @@ "star_salmon/salmon.merged.transcript_counts.tsv", "star_salmon/salmon.merged.transcript_lengths.tsv", "star_salmon/salmon.merged.transcript_tpm.tsv", + "star_salmon/salmon.merged.tx2gene.tsv", "star_salmon/samtools_stats", "star_salmon/samtools_stats/RAP1_IAA_30M_REP1.markdup.sorted.bam.flagstat", "star_salmon/samtools_stats/RAP1_IAA_30M_REP1.markdup.sorted.bam.idxstats", @@ -553,7 +709,6 @@ "star_salmon/samtools_stats/WT_REP2.sorted.bam.flagstat", "star_salmon/samtools_stats/WT_REP2.sorted.bam.idxstats", "star_salmon/samtools_stats/WT_REP2.sorted.bam.stats", - "star_salmon/tx2gene.tsv", "trimgalore", "trimgalore/RAP1_IAA_30M_REP1_trimmed_1.fastq.gz_trimming_report.txt", "trimgalore/RAP1_IAA_30M_REP1_trimmed_2.fastq.gz_trimming_report.txt", @@ -570,7 +725,6 @@ "cutadapt_filtered_reads_plot.txt:md5,6fa381627f7c1f664f3d4b2cb79cce90", "cutadapt_trimmed_sequences_plot_3_Counts.txt:md5,13dfa866fd91dbb072689efe9aa83b1f", "cutadapt_trimmed_sequences_plot_3_Obs_Exp.txt:md5,07145dd8dd3db654859b18eb0389046c", - "fastqc_sequence_length_distribution_plot.txt:md5,6fe2c985606abad947bcca99b015ae33", "fastqc_trimmed-status-check-heatmap.txt:md5,22a03548736b88b23be6bc0c9ef1b4a6", "fastqc_trimmed_overrepresented_sequences_plot.txt:md5,c755e9d044ea1a82b2c8edde867b4878", "fastqc_trimmed_per_base_n_content_plot.txt:md5,418610c1ce119cb786ad434db75d366e", @@ -581,7 +735,6 @@ "fastqc_trimmed_sequence_counts_plot.txt:md5,9fd642bdd1da354f296bb8092205608f", "fastqc_trimmed_sequence_duplication_levels_plot.txt:md5,0758257b497283b1ef28171e694db6db", "multiqc_citations.txt:md5,f6260591e6b24fd9285b4b259c80e5ea", - "multiqc_cutadapt.txt:md5,583b7b9ba76b26162bb9610ed746454b", "multiqc_fastqc_fastqc_trimmed.txt:md5,54743154d0e8858980acffeb5b6f6a97", "multiqc_samtools_idxstats.txt:md5,58f19b28617037a2825f812d58d55e2e", "picard_MarkIlluminaAdapters_histogram.txt:md5,d41d8cd98f00b204e9800998ecf8427e", @@ -620,7 +773,7 @@ "observed_bias_3p.gz:md5,92bcd0592d22a6a58d0360fc76103e56", "cmd_info.json:md5,fa7b659f1ba90e16b0d0a375ff318b01", "lib_format_counts.json:md5,e6e3d7746e9abee6a0e097ae0ee1781a", - "tx2gene.tsv:md5,0e2418a69d2eba45097ebffc2f700bfe", + "salmon.merged.tx2gene.tsv:md5,0e2418a69d2eba45097ebffc2f700bfe", "ambig_info.tsv:md5,6cd02367152bb2dd59a6f1f70df2d7f8", "expected_bias.gz:md5,3407f87245d0003e0ffbfdf6d8c04f20", "observed_bias.gz:md5,92bcd0592d22a6a58d0360fc76103e56", @@ -651,18 +804,18 @@ "RAP1_UNINDUCED_REP2.SJ.out.tab:md5,1f294365343a1a5e95682792fdb77033", "WT_REP1.SJ.out.tab:md5,1350c2fa6a675bf107386c6cd3fc5204", "WT_REP2.SJ.out.tab:md5,f6cc03643a5e3c1025a5b4754eb1be23", - "tx2gene.tsv:md5,0e2418a69d2eba45097ebffc2f700bfe" + "salmon.merged.tx2gene.tsv:md5,0e2418a69d2eba45097ebffc2f700bfe" ] ], "meta": { "nf-test": "0.9.3", "nextflow": "25.10.2" }, - "timestamp": "2025-12-11T12:44:56.941652484" + "timestamp": "2026-02-26T14:25:30.875620761" }, "Params: --remove_ribo_rna - stub": { "content": [ - 23, + 24, { "BBMAP_BBSPLIT": { "bbmap": 39.18 @@ -671,13 +824,10 @@ "cat": 9.5 }, "CUSTOM_CATADDITIONALFASTA": { - "python": null - }, - "CUSTOM_GETCHROMSIZES": { - "getchromsizes": 1.21 + "python": "3.12.2" }, "FQ_LINT": { - "fq": "0.12.0 (2024-07-08)" + "fq": "0.12.0" }, "GTF2BED": { "perl": "5.26.2" @@ -691,6 +841,9 @@ "GUNZIP_GTF": { "gunzip": 1.13 }, + "SAMTOOLS_FAIDX": { + "samtools": "1.22.1" + }, "SORTMERNA_INDEX": { "sortmerna": "4.3.7" }, @@ -700,8 +853,6 @@ "star": "2.7.11b" }, "TRIMGALORE": { - "cutadapt": 4.9, - "pigz": 2.8, "trimgalore": "0.6.10" }, "UNTAR_SALMON_INDEX": { @@ -749,6 +900,750 @@ "nf-test": "0.9.3", "nextflow": "25.10.2" }, - "timestamp": "2025-12-04T15:30:18.004227862" + "timestamp": "2026-02-04T17:23:29.432103647" + }, + "Params: --remove_ribo_rna --ribo_removal_tool bowtie2": { + "content": [ + 145, + { + "BBMAP_BBSPLIT": { + "bbmap": 39.18 + }, + "BOWTIE2_ALIGN": { + "bowtie2": "2.5.4", + "pigz": 2.8, + "samtools": 1.21 + }, + "BOWTIE2_ALIGN_PE": { + "bowtie2": "2.5.4", + "pigz": 2.8, + "samtools": 1.21 + }, + "BOWTIE2_BUILD": { + "bowtie2": "2.5.4" + }, + "CAT_FASTQ": { + "cat": 9.5 + }, + "CUSTOM_CATADDITIONALFASTA": { + "python": "3.12.2" + }, + "CUSTOM_TX2GENE": { + "python": "3.10.4" + }, + "FQ_LINT": { + "fq": "0.12.0" + }, + "FQ_LINT_AFTER_BBSPLIT": { + "fq": "0.12.0" + }, + "FQ_LINT_AFTER_RIBO_REMOVAL": { + "fq": "0.12.0" + }, + "FQ_LINT_AFTER_TRIMMING": { + "fq": "0.12.0" + }, + "FQ_SUBSAMPLE": { + "fq": "0.12.0" + }, + "GTF2BED": { + "perl": "5.26.2" + }, + "GTF_FILTER": { + "python": "3.9.5" + }, + "GUNZIP_ADDITIONAL_FASTA": { + "gunzip": 1.13 + }, + "GUNZIP_GTF": { + "gunzip": 1.13 + }, + "PICARD_MARKDUPLICATES": { + "picard": "3.4.0" + }, + "SALMON_QUANT": { + "salmon": "1.10.3" + }, + "SAMTOOLS_FAIDX": { + "samtools": "1.22.1" + }, + "SAMTOOLS_FASTQ_BOWTIE2": { + "samtools": "1.22.1" + }, + "SAMTOOLS_FLAGSTAT": { + "samtools": "1.22.1" + }, + "SAMTOOLS_IDXSTATS": { + "samtools": "1.22.1" + }, + "SAMTOOLS_INDEX": { + "samtools": "1.22.1" + }, + "SAMTOOLS_SORT": { + "samtools": "1.22.1" + }, + "SAMTOOLS_STATS": { + "samtools": "1.22.1" + }, + "SAMTOOLS_VIEW_BOWTIE2": { + "samtools": "1.22.1" + }, + "SEQKIT_REPLACE": { + "seqkit": "2.9.0" + }, + "SEQKIT_REPLACE_U2T": { + "seqkit": "2.9.0" + }, + "SE_GENE_UNIFIED": { + "bioconductor-summarizedexperiment": "1.32.0" + }, + "SE_TRANSCRIPT_UNIFIED": { + "bioconductor-summarizedexperiment": "1.32.0" + }, + "STAR_ALIGN": { + "gawk": "5.1.0", + "samtools": 1.21, + "star": "2.7.11b" + }, + "STAR_GENOMEGENERATE": { + "gawk": "5.1.0", + "samtools": 1.21, + "star": "2.7.11b" + }, + "TRIMGALORE": { + "trimgalore": "0.6.10" + }, + "TXIMETA_TXIMPORT": { + "bioconductor-tximeta": "1.20.1" + }, + "UNTAR_SALMON_INDEX": { + "untar": 1.34 + } + }, + [ + "bbsplit", + "bbsplit/RAP1_IAA_30M_REP1.stats.txt", + "bbsplit/RAP1_UNINDUCED_REP1.stats.txt", + "bbsplit/RAP1_UNINDUCED_REP2.stats.txt", + "bbsplit/WT_REP1.stats.txt", + "bbsplit/WT_REP2.stats.txt", + "bowtie2_rrna", + "bowtie2_rrna/RAP1_IAA_30M_REP1.bowtie2_rrna.bowtie2.log", + "bowtie2_rrna/RAP1_UNINDUCED_REP1.bowtie2_rrna.bowtie2.log", + "bowtie2_rrna/RAP1_UNINDUCED_REP2.bowtie2_rrna.bowtie2.log", + "bowtie2_rrna/WT_REP1.bowtie2_rrna.bowtie2.log", + "bowtie2_rrna/WT_REP2.bowtie2_rrna.bowtie2.log", + "bowtie2_rrna/index", + "custom", + "custom/out", + "custom/out/genome_gfp.fasta", + "custom/out/genome_gfp.gtf", + "fastqc", + "fastqc/trim", + "fastqc/trim/RAP1_IAA_30M_REP1_trimmed_1_val_1_fastqc.html", + "fastqc/trim/RAP1_IAA_30M_REP1_trimmed_1_val_1_fastqc.zip", + "fastqc/trim/RAP1_IAA_30M_REP1_trimmed_2_val_2_fastqc.html", + "fastqc/trim/RAP1_IAA_30M_REP1_trimmed_2_val_2_fastqc.zip", + "fastqc/trim/RAP1_UNINDUCED_REP1_trimmed_trimmed_fastqc.html", + "fastqc/trim/RAP1_UNINDUCED_REP1_trimmed_trimmed_fastqc.zip", + "fastqc/trim/RAP1_UNINDUCED_REP2_trimmed_trimmed_fastqc.html", + "fastqc/trim/RAP1_UNINDUCED_REP2_trimmed_trimmed_fastqc.zip", + "fastqc/trim/WT_REP1_trimmed_1_val_1_fastqc.html", + "fastqc/trim/WT_REP1_trimmed_1_val_1_fastqc.zip", + "fastqc/trim/WT_REP1_trimmed_2_val_2_fastqc.html", + "fastqc/trim/WT_REP1_trimmed_2_val_2_fastqc.zip", + "fastqc/trim/WT_REP2_trimmed_1_val_1_fastqc.html", + "fastqc/trim/WT_REP2_trimmed_1_val_1_fastqc.zip", + "fastqc/trim/WT_REP2_trimmed_2_val_2_fastqc.html", + "fastqc/trim/WT_REP2_trimmed_2_val_2_fastqc.zip", + "fq_lint", + "fq_lint/bbsplit", + "fq_lint/bbsplit/RAP1_IAA_30M_REP1.fq_lint.txt", + "fq_lint/bbsplit/RAP1_UNINDUCED_REP1.fq_lint.txt", + "fq_lint/bbsplit/RAP1_UNINDUCED_REP2.fq_lint.txt", + "fq_lint/bbsplit/WT_REP1.fq_lint.txt", + "fq_lint/bbsplit/WT_REP2.fq_lint.txt", + "fq_lint/bowtie2", + "fq_lint/bowtie2/RAP1_IAA_30M_REP1.fq_lint.txt", + "fq_lint/bowtie2/RAP1_UNINDUCED_REP1.fq_lint.txt", + "fq_lint/bowtie2/RAP1_UNINDUCED_REP2.fq_lint.txt", + "fq_lint/bowtie2/WT_REP1.fq_lint.txt", + "fq_lint/bowtie2/WT_REP2.fq_lint.txt", + "fq_lint/raw", + "fq_lint/raw/RAP1_IAA_30M_REP1.fq_lint.txt", + "fq_lint/raw/RAP1_UNINDUCED_REP1.fq_lint.txt", + "fq_lint/raw/RAP1_UNINDUCED_REP2.fq_lint.txt", + "fq_lint/raw/WT_REP1.fq_lint.txt", + "fq_lint/raw/WT_REP2.fq_lint.txt", + "fq_lint/trimmed", + "fq_lint/trimmed/RAP1_IAA_30M_REP1.fq_lint.txt", + "fq_lint/trimmed/RAP1_UNINDUCED_REP1.fq_lint.txt", + "fq_lint/trimmed/RAP1_UNINDUCED_REP2.fq_lint.txt", + "fq_lint/trimmed/WT_REP1.fq_lint.txt", + "fq_lint/trimmed/WT_REP2.fq_lint.txt", + "multiqc", + "multiqc/star_salmon", + "multiqc/star_salmon/multiqc_report.html", + "multiqc/star_salmon/multiqc_report_data", + "multiqc/star_salmon/multiqc_report_data/bbmap-bbsplit_plot.txt", + "multiqc/star_salmon/multiqc_report_data/bbmap.txt", + "multiqc/star_salmon/multiqc_report_data/bbsplit_stats_table.txt", + "multiqc/star_salmon/multiqc_report_data/bowtie2_pe_plot.txt", + "multiqc/star_salmon/multiqc_report_data/bowtie2_se_plot.txt", + "multiqc/star_salmon/multiqc_report_data/cutadapt_filtered_reads_plot.txt", + "multiqc/star_salmon/multiqc_report_data/cutadapt_trimmed_sequences_plot_3_Counts.txt", + "multiqc/star_salmon/multiqc_report_data/cutadapt_trimmed_sequences_plot_3_Obs_Exp.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_sequence_length_distribution_plot.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_trimmed-status-check-heatmap.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_trimmed_overrepresented_sequences_plot.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_trimmed_per_base_n_content_plot.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_trimmed_per_base_sequence_quality_plot.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_trimmed_per_sequence_gc_content_plot_Counts.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_trimmed_per_sequence_gc_content_plot_Percentages.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_trimmed_per_sequence_quality_scores_plot.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_trimmed_sequence_counts_plot.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_trimmed_sequence_duplication_levels_plot.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_trimmed_top_overrepresented_sequences_table.txt", + "multiqc/star_salmon/multiqc_report_data/llms-full.txt", + "multiqc/star_salmon/multiqc_report_data/multiqc.log", + "multiqc/star_salmon/multiqc_report_data/multiqc.parquet", + "multiqc/star_salmon/multiqc_report_data/multiqc_bowtie2_bowtie2_rrna.txt", + "multiqc/star_salmon/multiqc_report_data/multiqc_citations.txt", + "multiqc/star_salmon/multiqc_report_data/multiqc_cutadapt.txt", + "multiqc/star_salmon/multiqc_report_data/multiqc_data.json", + "multiqc/star_salmon/multiqc_report_data/multiqc_fastqc_fastqc_trimmed.txt", + "multiqc/star_salmon/multiqc_report_data/multiqc_general_stats.txt", + "multiqc/star_salmon/multiqc_report_data/multiqc_picard_dups.txt", + "multiqc/star_salmon/multiqc_report_data/multiqc_salmon.txt", + "multiqc/star_salmon/multiqc_report_data/multiqc_samtools_flagstat.txt", + "multiqc/star_salmon/multiqc_report_data/multiqc_samtools_idxstats.txt", + "multiqc/star_salmon/multiqc_report_data/multiqc_samtools_stats.txt", + "multiqc/star_salmon/multiqc_report_data/multiqc_software_versions.txt", + "multiqc/star_salmon/multiqc_report_data/multiqc_sources.txt", + "multiqc/star_salmon/multiqc_report_data/multiqc_star.txt", + "multiqc/star_salmon/multiqc_report_data/picard_MarkIlluminaAdapters_histogram.txt", + "multiqc/star_salmon/multiqc_report_data/picard_MeanQualityByCycle_histogram.txt", + "multiqc/star_salmon/multiqc_report_data/picard_MeanQualityByCycle_histogram_1.txt", + "multiqc/star_salmon/multiqc_report_data/picard_QualityScoreDistribution_histogram.txt", + "multiqc/star_salmon/multiqc_report_data/picard_deduplication.txt", + "multiqc/star_salmon/multiqc_report_data/salmon_plot.txt", + "multiqc/star_salmon/multiqc_report_data/samtools-flagstat-pct-table.txt", + "multiqc/star_salmon/multiqc_report_data/samtools-flagstat-table.txt", + "multiqc/star_salmon/multiqc_report_data/samtools-idxstats-mapped-reads-plot_Normalised_Counts.txt", + "multiqc/star_salmon/multiqc_report_data/samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts.txt", + "multiqc/star_salmon/multiqc_report_data/samtools-idxstats-mapped-reads-plot_Raw_Counts.txt", + "multiqc/star_salmon/multiqc_report_data/samtools-stats-dp.txt", + "multiqc/star_salmon/multiqc_report_data/samtools_alignment_plot.txt", + "multiqc/star_salmon/multiqc_report_data/star_alignment_plot.txt", + "multiqc/star_salmon/multiqc_report_data/star_summary_table.txt", + "multiqc/star_salmon/multiqc_report_plots", + "multiqc/star_salmon/multiqc_report_plots/pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/bbmap-bbsplit_plot-cnt.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/bbmap-bbsplit_plot-pct.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/bbsplit_stats_table.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/bowtie2_pe_plot-cnt.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/bowtie2_pe_plot-pct.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/bowtie2_se_plot-cnt.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/bowtie2_se_plot-pct.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/cutadapt_filtered_reads_plot-cnt.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/cutadapt_filtered_reads_plot-pct.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/cutadapt_trimmed_sequences_plot_3_Counts.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/cutadapt_trimmed_sequences_plot_3_Obs_Exp.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_sequence_length_distribution_plot.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_trimmed-status-check-heatmap.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_trimmed_overrepresented_sequences_plot.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_trimmed_per_base_n_content_plot.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_trimmed_per_base_sequence_quality_plot.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_trimmed_per_sequence_gc_content_plot_Counts.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_trimmed_per_sequence_gc_content_plot_Percentages.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_trimmed_per_sequence_quality_scores_plot.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_trimmed_sequence_counts_plot-cnt.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_trimmed_sequence_counts_plot-pct.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_trimmed_sequence_duplication_levels_plot.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_trimmed_top_overrepresented_sequences_table.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/picard_deduplication-cnt.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/picard_deduplication-pct.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/salmon_plot.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/samtools-flagstat-pct-table.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/samtools-flagstat-table.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/samtools-idxstats-mapped-reads-plot_Normalised_Counts-cnt.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/samtools-idxstats-mapped-reads-plot_Normalised_Counts-log.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts-cnt.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts-log.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/samtools-idxstats-mapped-reads-plot_Raw_Counts-cnt.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/samtools-idxstats-mapped-reads-plot_Raw_Counts-log.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/samtools-stats-dp.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/samtools_alignment_plot-cnt.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/samtools_alignment_plot-pct.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/star_alignment_plot-cnt.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/star_alignment_plot-pct.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/star_summary_table.pdf", + "multiqc/star_salmon/multiqc_report_plots/png", + "multiqc/star_salmon/multiqc_report_plots/png/bbmap-bbsplit_plot-cnt.png", + "multiqc/star_salmon/multiqc_report_plots/png/bbmap-bbsplit_plot-pct.png", + "multiqc/star_salmon/multiqc_report_plots/png/bbsplit_stats_table.png", + "multiqc/star_salmon/multiqc_report_plots/png/bowtie2_pe_plot-cnt.png", + "multiqc/star_salmon/multiqc_report_plots/png/bowtie2_pe_plot-pct.png", + "multiqc/star_salmon/multiqc_report_plots/png/bowtie2_se_plot-cnt.png", + "multiqc/star_salmon/multiqc_report_plots/png/bowtie2_se_plot-pct.png", + "multiqc/star_salmon/multiqc_report_plots/png/cutadapt_filtered_reads_plot-cnt.png", + "multiqc/star_salmon/multiqc_report_plots/png/cutadapt_filtered_reads_plot-pct.png", + "multiqc/star_salmon/multiqc_report_plots/png/cutadapt_trimmed_sequences_plot_3_Counts.png", + "multiqc/star_salmon/multiqc_report_plots/png/cutadapt_trimmed_sequences_plot_3_Obs_Exp.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_sequence_length_distribution_plot.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_trimmed-status-check-heatmap.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_trimmed_overrepresented_sequences_plot.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_trimmed_per_base_n_content_plot.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_trimmed_per_base_sequence_quality_plot.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_trimmed_per_sequence_gc_content_plot_Counts.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_trimmed_per_sequence_gc_content_plot_Percentages.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_trimmed_per_sequence_quality_scores_plot.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_trimmed_sequence_counts_plot-cnt.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_trimmed_sequence_counts_plot-pct.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_trimmed_sequence_duplication_levels_plot.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_trimmed_top_overrepresented_sequences_table.png", + "multiqc/star_salmon/multiqc_report_plots/png/picard_deduplication-cnt.png", + "multiqc/star_salmon/multiqc_report_plots/png/picard_deduplication-pct.png", + "multiqc/star_salmon/multiqc_report_plots/png/salmon_plot.png", + "multiqc/star_salmon/multiqc_report_plots/png/samtools-flagstat-pct-table.png", + "multiqc/star_salmon/multiqc_report_plots/png/samtools-flagstat-table.png", + "multiqc/star_salmon/multiqc_report_plots/png/samtools-idxstats-mapped-reads-plot_Normalised_Counts-cnt.png", + "multiqc/star_salmon/multiqc_report_plots/png/samtools-idxstats-mapped-reads-plot_Normalised_Counts-log.png", + "multiqc/star_salmon/multiqc_report_plots/png/samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts-cnt.png", + "multiqc/star_salmon/multiqc_report_plots/png/samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts-log.png", + "multiqc/star_salmon/multiqc_report_plots/png/samtools-idxstats-mapped-reads-plot_Raw_Counts-cnt.png", + "multiqc/star_salmon/multiqc_report_plots/png/samtools-idxstats-mapped-reads-plot_Raw_Counts-log.png", + "multiqc/star_salmon/multiqc_report_plots/png/samtools-stats-dp.png", + "multiqc/star_salmon/multiqc_report_plots/png/samtools_alignment_plot-cnt.png", + "multiqc/star_salmon/multiqc_report_plots/png/samtools_alignment_plot-pct.png", + "multiqc/star_salmon/multiqc_report_plots/png/star_alignment_plot-cnt.png", + "multiqc/star_salmon/multiqc_report_plots/png/star_alignment_plot-pct.png", + "multiqc/star_salmon/multiqc_report_plots/png/star_summary_table.png", + "multiqc/star_salmon/multiqc_report_plots/svg", + "multiqc/star_salmon/multiqc_report_plots/svg/bbmap-bbsplit_plot-cnt.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/bbmap-bbsplit_plot-pct.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/bbsplit_stats_table.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/bowtie2_pe_plot-cnt.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/bowtie2_pe_plot-pct.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/bowtie2_se_plot-cnt.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/bowtie2_se_plot-pct.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/cutadapt_filtered_reads_plot-cnt.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/cutadapt_filtered_reads_plot-pct.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/cutadapt_trimmed_sequences_plot_3_Counts.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/cutadapt_trimmed_sequences_plot_3_Obs_Exp.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_sequence_length_distribution_plot.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_trimmed-status-check-heatmap.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_trimmed_overrepresented_sequences_plot.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_trimmed_per_base_n_content_plot.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_trimmed_per_base_sequence_quality_plot.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_trimmed_per_sequence_gc_content_plot_Counts.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_trimmed_per_sequence_gc_content_plot_Percentages.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_trimmed_per_sequence_quality_scores_plot.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_trimmed_sequence_counts_plot-cnt.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_trimmed_sequence_counts_plot-pct.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_trimmed_sequence_duplication_levels_plot.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_trimmed_top_overrepresented_sequences_table.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/picard_deduplication-cnt.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/picard_deduplication-pct.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/salmon_plot.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/samtools-flagstat-pct-table.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/samtools-flagstat-table.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/samtools-idxstats-mapped-reads-plot_Normalised_Counts-cnt.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/samtools-idxstats-mapped-reads-plot_Normalised_Counts-log.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts-cnt.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts-log.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/samtools-idxstats-mapped-reads-plot_Raw_Counts-cnt.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/samtools-idxstats-mapped-reads-plot_Raw_Counts-log.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/samtools-stats-dp.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/samtools_alignment_plot-cnt.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/samtools_alignment_plot-pct.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/star_alignment_plot-cnt.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/star_alignment_plot-pct.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/star_summary_table.svg", + "pipeline_info", + "pipeline_info/nf_core_rnaseq_software_mqc_versions.yml", + "salmon", + "salmon/RAP1_IAA_30M_REP1", + "salmon/RAP1_IAA_30M_REP1/aux_info", + "salmon/RAP1_IAA_30M_REP1/aux_info/ambig_info.tsv", + "salmon/RAP1_IAA_30M_REP1/aux_info/expected_bias.gz", + "salmon/RAP1_IAA_30M_REP1/aux_info/fld.gz", + "salmon/RAP1_IAA_30M_REP1/aux_info/meta_info.json", + "salmon/RAP1_IAA_30M_REP1/aux_info/observed_bias.gz", + "salmon/RAP1_IAA_30M_REP1/aux_info/observed_bias_3p.gz", + "salmon/RAP1_IAA_30M_REP1/cmd_info.json", + "salmon/RAP1_IAA_30M_REP1/libParams", + "salmon/RAP1_IAA_30M_REP1/libParams/flenDist.txt", + "salmon/RAP1_IAA_30M_REP1/lib_format_counts.json", + "salmon/RAP1_IAA_30M_REP1/logs", + "salmon/RAP1_IAA_30M_REP1/logs/salmon_quant.log", + "salmon/RAP1_IAA_30M_REP1/quant.genes.sf", + "salmon/RAP1_IAA_30M_REP1/quant.sf", + "salmon/RAP1_UNINDUCED_REP1", + "salmon/RAP1_UNINDUCED_REP1/aux_info", + "salmon/RAP1_UNINDUCED_REP1/aux_info/ambig_info.tsv", + "salmon/RAP1_UNINDUCED_REP1/aux_info/expected_bias.gz", + "salmon/RAP1_UNINDUCED_REP1/aux_info/fld.gz", + "salmon/RAP1_UNINDUCED_REP1/aux_info/meta_info.json", + "salmon/RAP1_UNINDUCED_REP1/aux_info/observed_bias.gz", + "salmon/RAP1_UNINDUCED_REP1/aux_info/observed_bias_3p.gz", + "salmon/RAP1_UNINDUCED_REP1/cmd_info.json", + "salmon/RAP1_UNINDUCED_REP1/libParams", + "salmon/RAP1_UNINDUCED_REP1/libParams/flenDist.txt", + "salmon/RAP1_UNINDUCED_REP1/lib_format_counts.json", + "salmon/RAP1_UNINDUCED_REP1/logs", + "salmon/RAP1_UNINDUCED_REP1/logs/salmon_quant.log", + "salmon/RAP1_UNINDUCED_REP1/quant.genes.sf", + "salmon/RAP1_UNINDUCED_REP1/quant.sf", + "salmon/RAP1_UNINDUCED_REP2", + "salmon/RAP1_UNINDUCED_REP2/aux_info", + "salmon/RAP1_UNINDUCED_REP2/aux_info/ambig_info.tsv", + "salmon/RAP1_UNINDUCED_REP2/aux_info/expected_bias.gz", + "salmon/RAP1_UNINDUCED_REP2/aux_info/fld.gz", + "salmon/RAP1_UNINDUCED_REP2/aux_info/meta_info.json", + "salmon/RAP1_UNINDUCED_REP2/aux_info/observed_bias.gz", + "salmon/RAP1_UNINDUCED_REP2/aux_info/observed_bias_3p.gz", + "salmon/RAP1_UNINDUCED_REP2/cmd_info.json", + "salmon/RAP1_UNINDUCED_REP2/libParams", + "salmon/RAP1_UNINDUCED_REP2/libParams/flenDist.txt", + "salmon/RAP1_UNINDUCED_REP2/lib_format_counts.json", + "salmon/RAP1_UNINDUCED_REP2/logs", + "salmon/RAP1_UNINDUCED_REP2/logs/salmon_quant.log", + "salmon/RAP1_UNINDUCED_REP2/quant.genes.sf", + "salmon/RAP1_UNINDUCED_REP2/quant.sf", + "salmon/WT_REP1", + "salmon/WT_REP1/aux_info", + "salmon/WT_REP1/aux_info/ambig_info.tsv", + "salmon/WT_REP1/aux_info/expected_bias.gz", + "salmon/WT_REP1/aux_info/fld.gz", + "salmon/WT_REP1/aux_info/meta_info.json", + "salmon/WT_REP1/aux_info/observed_bias.gz", + "salmon/WT_REP1/aux_info/observed_bias_3p.gz", + "salmon/WT_REP1/cmd_info.json", + "salmon/WT_REP1/libParams", + "salmon/WT_REP1/libParams/flenDist.txt", + "salmon/WT_REP1/lib_format_counts.json", + "salmon/WT_REP1/logs", + "salmon/WT_REP1/logs/salmon_quant.log", + "salmon/WT_REP1/quant.genes.sf", + "salmon/WT_REP1/quant.sf", + "salmon/WT_REP2", + "salmon/WT_REP2/aux_info", + "salmon/WT_REP2/aux_info/ambig_info.tsv", + "salmon/WT_REP2/aux_info/expected_bias.gz", + "salmon/WT_REP2/aux_info/fld.gz", + "salmon/WT_REP2/aux_info/meta_info.json", + "salmon/WT_REP2/aux_info/observed_bias.gz", + "salmon/WT_REP2/aux_info/observed_bias_3p.gz", + "salmon/WT_REP2/cmd_info.json", + "salmon/WT_REP2/libParams", + "salmon/WT_REP2/libParams/flenDist.txt", + "salmon/WT_REP2/lib_format_counts.json", + "salmon/WT_REP2/logs", + "salmon/WT_REP2/logs/salmon_quant.log", + "salmon/WT_REP2/quant.genes.sf", + "salmon/WT_REP2/quant.sf", + "salmon/salmon.merged.gene.SummarizedExperiment.rds", + "salmon/salmon.merged.gene_counts.tsv", + "salmon/salmon.merged.gene_counts_length_scaled.tsv", + "salmon/salmon.merged.gene_counts_scaled.tsv", + "salmon/salmon.merged.gene_lengths.tsv", + "salmon/salmon.merged.gene_tpm.tsv", + "salmon/salmon.merged.transcript.SummarizedExperiment.rds", + "salmon/salmon.merged.transcript_counts.tsv", + "salmon/salmon.merged.transcript_lengths.tsv", + "salmon/salmon.merged.transcript_tpm.tsv", + "salmon/salmon.merged.tx2gene.tsv", + "seqkit", + "seqkit/rfam-5.8s-database-id98_dna_converted.fasta", + "seqkit/rfam-5.8s-database-id98_prefixed.fasta", + "seqkit/rfam-5s-database-id98_dna_converted.fasta", + "seqkit/rfam-5s-database-id98_prefixed.fasta", + "seqkit/silva-arc-16s-id95_dna_converted.fasta", + "seqkit/silva-arc-16s-id95_prefixed.fasta", + "seqkit/silva-arc-23s-id98_dna_converted.fasta", + "seqkit/silva-arc-23s-id98_prefixed.fasta", + "seqkit/silva-bac-16s-id90_dna_converted.fasta", + "seqkit/silva-bac-16s-id90_prefixed.fasta", + "seqkit/silva-bac-23s-id98_dna_converted.fasta", + "seqkit/silva-bac-23s-id98_prefixed.fasta", + "seqkit/silva-euk-18s-id95_dna_converted.fasta", + "seqkit/silva-euk-18s-id95_prefixed.fasta", + "seqkit/silva-euk-28s-id98_dna_converted.fasta", + "seqkit/silva-euk-28s-id98_prefixed.fasta", + "star_salmon", + "star_salmon/RAP1_IAA_30M_REP1", + "star_salmon/RAP1_IAA_30M_REP1.markdup.sorted.bam", + "star_salmon/RAP1_IAA_30M_REP1.markdup.sorted.bam.bai", + "star_salmon/RAP1_IAA_30M_REP1/aux_info", + "star_salmon/RAP1_IAA_30M_REP1/aux_info/ambig_info.tsv", + "star_salmon/RAP1_IAA_30M_REP1/aux_info/expected_bias.gz", + "star_salmon/RAP1_IAA_30M_REP1/aux_info/fld.gz", + "star_salmon/RAP1_IAA_30M_REP1/aux_info/meta_info.json", + "star_salmon/RAP1_IAA_30M_REP1/aux_info/observed_bias.gz", + "star_salmon/RAP1_IAA_30M_REP1/aux_info/observed_bias_3p.gz", + "star_salmon/RAP1_IAA_30M_REP1/cmd_info.json", + "star_salmon/RAP1_IAA_30M_REP1/libParams", + "star_salmon/RAP1_IAA_30M_REP1/libParams/flenDist.txt", + "star_salmon/RAP1_IAA_30M_REP1/logs", + "star_salmon/RAP1_IAA_30M_REP1/logs/salmon_quant.log", + "star_salmon/RAP1_IAA_30M_REP1/quant.genes.sf", + "star_salmon/RAP1_IAA_30M_REP1/quant.sf", + "star_salmon/RAP1_UNINDUCED_REP1", + "star_salmon/RAP1_UNINDUCED_REP1.markdup.sorted.bam", + "star_salmon/RAP1_UNINDUCED_REP1.markdup.sorted.bam.bai", + "star_salmon/RAP1_UNINDUCED_REP1/aux_info", + "star_salmon/RAP1_UNINDUCED_REP1/aux_info/ambig_info.tsv", + "star_salmon/RAP1_UNINDUCED_REP1/aux_info/expected_bias.gz", + "star_salmon/RAP1_UNINDUCED_REP1/aux_info/fld.gz", + "star_salmon/RAP1_UNINDUCED_REP1/aux_info/meta_info.json", + "star_salmon/RAP1_UNINDUCED_REP1/aux_info/observed_bias.gz", + "star_salmon/RAP1_UNINDUCED_REP1/aux_info/observed_bias_3p.gz", + "star_salmon/RAP1_UNINDUCED_REP1/cmd_info.json", + "star_salmon/RAP1_UNINDUCED_REP1/libParams", + "star_salmon/RAP1_UNINDUCED_REP1/libParams/flenDist.txt", + "star_salmon/RAP1_UNINDUCED_REP1/logs", + "star_salmon/RAP1_UNINDUCED_REP1/logs/salmon_quant.log", + "star_salmon/RAP1_UNINDUCED_REP1/quant.genes.sf", + "star_salmon/RAP1_UNINDUCED_REP1/quant.sf", + "star_salmon/RAP1_UNINDUCED_REP2", + "star_salmon/RAP1_UNINDUCED_REP2.markdup.sorted.bam", + "star_salmon/RAP1_UNINDUCED_REP2.markdup.sorted.bam.bai", + "star_salmon/RAP1_UNINDUCED_REP2/aux_info", + "star_salmon/RAP1_UNINDUCED_REP2/aux_info/ambig_info.tsv", + "star_salmon/RAP1_UNINDUCED_REP2/aux_info/expected_bias.gz", + "star_salmon/RAP1_UNINDUCED_REP2/aux_info/fld.gz", + "star_salmon/RAP1_UNINDUCED_REP2/aux_info/meta_info.json", + "star_salmon/RAP1_UNINDUCED_REP2/aux_info/observed_bias.gz", + "star_salmon/RAP1_UNINDUCED_REP2/aux_info/observed_bias_3p.gz", + "star_salmon/RAP1_UNINDUCED_REP2/cmd_info.json", + "star_salmon/RAP1_UNINDUCED_REP2/libParams", + "star_salmon/RAP1_UNINDUCED_REP2/libParams/flenDist.txt", + "star_salmon/RAP1_UNINDUCED_REP2/logs", + "star_salmon/RAP1_UNINDUCED_REP2/logs/salmon_quant.log", + "star_salmon/RAP1_UNINDUCED_REP2/quant.genes.sf", + "star_salmon/RAP1_UNINDUCED_REP2/quant.sf", + "star_salmon/WT_REP1", + "star_salmon/WT_REP1.markdup.sorted.bam", + "star_salmon/WT_REP1.markdup.sorted.bam.bai", + "star_salmon/WT_REP1/aux_info", + "star_salmon/WT_REP1/aux_info/ambig_info.tsv", + "star_salmon/WT_REP1/aux_info/expected_bias.gz", + "star_salmon/WT_REP1/aux_info/fld.gz", + "star_salmon/WT_REP1/aux_info/meta_info.json", + "star_salmon/WT_REP1/aux_info/observed_bias.gz", + "star_salmon/WT_REP1/aux_info/observed_bias_3p.gz", + "star_salmon/WT_REP1/cmd_info.json", + "star_salmon/WT_REP1/libParams", + "star_salmon/WT_REP1/libParams/flenDist.txt", + "star_salmon/WT_REP1/logs", + "star_salmon/WT_REP1/logs/salmon_quant.log", + "star_salmon/WT_REP1/quant.genes.sf", + "star_salmon/WT_REP1/quant.sf", + "star_salmon/WT_REP2", + "star_salmon/WT_REP2.markdup.sorted.bam", + "star_salmon/WT_REP2.markdup.sorted.bam.bai", + "star_salmon/WT_REP2/aux_info", + "star_salmon/WT_REP2/aux_info/ambig_info.tsv", + "star_salmon/WT_REP2/aux_info/expected_bias.gz", + "star_salmon/WT_REP2/aux_info/fld.gz", + "star_salmon/WT_REP2/aux_info/meta_info.json", + "star_salmon/WT_REP2/aux_info/observed_bias.gz", + "star_salmon/WT_REP2/aux_info/observed_bias_3p.gz", + "star_salmon/WT_REP2/cmd_info.json", + "star_salmon/WT_REP2/libParams", + "star_salmon/WT_REP2/libParams/flenDist.txt", + "star_salmon/WT_REP2/logs", + "star_salmon/WT_REP2/logs/salmon_quant.log", + "star_salmon/WT_REP2/quant.genes.sf", + "star_salmon/WT_REP2/quant.sf", + "star_salmon/log", + "star_salmon/log/RAP1_IAA_30M_REP1.Log.final.out", + "star_salmon/log/RAP1_IAA_30M_REP1.Log.out", + "star_salmon/log/RAP1_IAA_30M_REP1.Log.progress.out", + "star_salmon/log/RAP1_IAA_30M_REP1.SJ.out.tab", + "star_salmon/log/RAP1_UNINDUCED_REP1.Log.final.out", + "star_salmon/log/RAP1_UNINDUCED_REP1.Log.out", + "star_salmon/log/RAP1_UNINDUCED_REP1.Log.progress.out", + "star_salmon/log/RAP1_UNINDUCED_REP1.SJ.out.tab", + "star_salmon/log/RAP1_UNINDUCED_REP2.Log.final.out", + "star_salmon/log/RAP1_UNINDUCED_REP2.Log.out", + "star_salmon/log/RAP1_UNINDUCED_REP2.Log.progress.out", + "star_salmon/log/RAP1_UNINDUCED_REP2.SJ.out.tab", + "star_salmon/log/WT_REP1.Log.final.out", + "star_salmon/log/WT_REP1.Log.out", + "star_salmon/log/WT_REP1.Log.progress.out", + "star_salmon/log/WT_REP1.SJ.out.tab", + "star_salmon/log/WT_REP2.Log.final.out", + "star_salmon/log/WT_REP2.Log.out", + "star_salmon/log/WT_REP2.Log.progress.out", + "star_salmon/log/WT_REP2.SJ.out.tab", + "star_salmon/picard_metrics", + "star_salmon/picard_metrics/RAP1_IAA_30M_REP1.markdup.sorted.MarkDuplicates.metrics.txt", + "star_salmon/picard_metrics/RAP1_UNINDUCED_REP1.markdup.sorted.MarkDuplicates.metrics.txt", + "star_salmon/picard_metrics/RAP1_UNINDUCED_REP2.markdup.sorted.MarkDuplicates.metrics.txt", + "star_salmon/picard_metrics/WT_REP1.markdup.sorted.MarkDuplicates.metrics.txt", + "star_salmon/picard_metrics/WT_REP2.markdup.sorted.MarkDuplicates.metrics.txt", + "star_salmon/salmon.merged.gene.SummarizedExperiment.rds", + "star_salmon/salmon.merged.gene_counts.tsv", + "star_salmon/salmon.merged.gene_counts_length_scaled.tsv", + "star_salmon/salmon.merged.gene_counts_scaled.tsv", + "star_salmon/salmon.merged.gene_lengths.tsv", + "star_salmon/salmon.merged.gene_tpm.tsv", + "star_salmon/salmon.merged.transcript.SummarizedExperiment.rds", + "star_salmon/salmon.merged.transcript_counts.tsv", + "star_salmon/salmon.merged.transcript_lengths.tsv", + "star_salmon/salmon.merged.transcript_tpm.tsv", + "star_salmon/salmon.merged.tx2gene.tsv", + "star_salmon/samtools_stats", + "star_salmon/samtools_stats/RAP1_IAA_30M_REP1.markdup.sorted.bam.flagstat", + "star_salmon/samtools_stats/RAP1_IAA_30M_REP1.markdup.sorted.bam.idxstats", + "star_salmon/samtools_stats/RAP1_IAA_30M_REP1.markdup.sorted.bam.stats", + "star_salmon/samtools_stats/RAP1_IAA_30M_REP1.sorted.bam.flagstat", + "star_salmon/samtools_stats/RAP1_IAA_30M_REP1.sorted.bam.idxstats", + "star_salmon/samtools_stats/RAP1_IAA_30M_REP1.sorted.bam.stats", + "star_salmon/samtools_stats/RAP1_UNINDUCED_REP1.markdup.sorted.bam.flagstat", + "star_salmon/samtools_stats/RAP1_UNINDUCED_REP1.markdup.sorted.bam.idxstats", + "star_salmon/samtools_stats/RAP1_UNINDUCED_REP1.markdup.sorted.bam.stats", + "star_salmon/samtools_stats/RAP1_UNINDUCED_REP1.sorted.bam.flagstat", + "star_salmon/samtools_stats/RAP1_UNINDUCED_REP1.sorted.bam.idxstats", + "star_salmon/samtools_stats/RAP1_UNINDUCED_REP1.sorted.bam.stats", + "star_salmon/samtools_stats/RAP1_UNINDUCED_REP2.markdup.sorted.bam.flagstat", + "star_salmon/samtools_stats/RAP1_UNINDUCED_REP2.markdup.sorted.bam.idxstats", + "star_salmon/samtools_stats/RAP1_UNINDUCED_REP2.markdup.sorted.bam.stats", + "star_salmon/samtools_stats/RAP1_UNINDUCED_REP2.sorted.bam.flagstat", + "star_salmon/samtools_stats/RAP1_UNINDUCED_REP2.sorted.bam.idxstats", + "star_salmon/samtools_stats/RAP1_UNINDUCED_REP2.sorted.bam.stats", + "star_salmon/samtools_stats/WT_REP1.markdup.sorted.bam.flagstat", + "star_salmon/samtools_stats/WT_REP1.markdup.sorted.bam.idxstats", + "star_salmon/samtools_stats/WT_REP1.markdup.sorted.bam.stats", + "star_salmon/samtools_stats/WT_REP1.sorted.bam.flagstat", + "star_salmon/samtools_stats/WT_REP1.sorted.bam.idxstats", + "star_salmon/samtools_stats/WT_REP1.sorted.bam.stats", + "star_salmon/samtools_stats/WT_REP2.markdup.sorted.bam.flagstat", + "star_salmon/samtools_stats/WT_REP2.markdup.sorted.bam.idxstats", + "star_salmon/samtools_stats/WT_REP2.markdup.sorted.bam.stats", + "star_salmon/samtools_stats/WT_REP2.sorted.bam.flagstat", + "star_salmon/samtools_stats/WT_REP2.sorted.bam.idxstats", + "star_salmon/samtools_stats/WT_REP2.sorted.bam.stats", + "trimgalore", + "trimgalore/RAP1_IAA_30M_REP1_trimmed_1.fastq.gz_trimming_report.txt", + "trimgalore/RAP1_IAA_30M_REP1_trimmed_2.fastq.gz_trimming_report.txt", + "trimgalore/RAP1_UNINDUCED_REP1_trimmed.fastq.gz_trimming_report.txt", + "trimgalore/RAP1_UNINDUCED_REP2_trimmed.fastq.gz_trimming_report.txt", + "trimgalore/WT_REP1_trimmed_1.fastq.gz_trimming_report.txt", + "trimgalore/WT_REP1_trimmed_2.fastq.gz_trimming_report.txt", + "trimgalore/WT_REP2_trimmed_1.fastq.gz_trimming_report.txt", + "trimgalore/WT_REP2_trimmed_2.fastq.gz_trimming_report.txt" + ], + [ + "genome_gfp.fasta:md5,e23e302af63736a199985a169fdac055", + "genome_gfp.gtf:md5,c98b12c302f15731bfc36bcf297cfe28", + "cutadapt_filtered_reads_plot.txt:md5,6fa381627f7c1f664f3d4b2cb79cce90", + "cutadapt_trimmed_sequences_plot_3_Counts.txt:md5,13dfa866fd91dbb072689efe9aa83b1f", + "cutadapt_trimmed_sequences_plot_3_Obs_Exp.txt:md5,07145dd8dd3db654859b18eb0389046c", + "fastqc_trimmed-status-check-heatmap.txt:md5,22a03548736b88b23be6bc0c9ef1b4a6", + "fastqc_trimmed_overrepresented_sequences_plot.txt:md5,c755e9d044ea1a82b2c8edde867b4878", + "fastqc_trimmed_per_base_n_content_plot.txt:md5,418610c1ce119cb786ad434db75d366e", + "fastqc_trimmed_per_base_sequence_quality_plot.txt:md5,bd22e06e41c096ad4f745d40fe96a1e5", + "fastqc_trimmed_per_sequence_gc_content_plot_Counts.txt:md5,004c60768ceb6197765154e3eaa37b7a", + "fastqc_trimmed_per_sequence_gc_content_plot_Percentages.txt:md5,95d29060b687f745288ad1ec47750037", + "fastqc_trimmed_per_sequence_quality_scores_plot.txt:md5,0f9834cc19f76dd5c87cf8cba7435a7c", + "fastqc_trimmed_sequence_counts_plot.txt:md5,9fd642bdd1da354f296bb8092205608f", + "fastqc_trimmed_sequence_duplication_levels_plot.txt:md5,0758257b497283b1ef28171e694db6db", + "multiqc_citations.txt:md5,5dde7a448d7767cdb5f37a84e9fe2da9", + "multiqc_fastqc_fastqc_trimmed.txt:md5,54743154d0e8858980acffeb5b6f6a97", + "multiqc_samtools_idxstats.txt:md5,2651b1ad40b5f98b349f397755d59524", + "picard_MarkIlluminaAdapters_histogram.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "picard_MeanQualityByCycle_histogram.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "picard_QualityScoreDistribution_histogram.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "samtools-idxstats-mapped-reads-plot_Normalised_Counts.txt:md5,75acd04232d1804b5f960ee4c5db4722", + "samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts.txt:md5,ae45731d8d4595f77e6b271004f3a070", + "samtools-idxstats-mapped-reads-plot_Raw_Counts.txt:md5,279d863fab6532e0fedaf574952ea9d2", + "ambig_info.tsv:md5,cbfe4f8b1ae1d1f8c90f697e966199c5", + "expected_bias.gz:md5,3407f87245d0003e0ffbfdf6d8c04f20", + "observed_bias.gz:md5,92bcd0592d22a6a58d0360fc76103e56", + "observed_bias_3p.gz:md5,92bcd0592d22a6a58d0360fc76103e56", + "cmd_info.json:md5,f1cfb9d255b1468d124358893b9ac7f3", + "lib_format_counts.json:md5,c5e106a5c91a98e03ed6f17bedbc047e", + "ambig_info.tsv:md5,16bdab31c3184847567e5354b8812680", + "expected_bias.gz:md5,3407f87245d0003e0ffbfdf6d8c04f20", + "observed_bias.gz:md5,92bcd0592d22a6a58d0360fc76103e56", + "observed_bias_3p.gz:md5,92bcd0592d22a6a58d0360fc76103e56", + "cmd_info.json:md5,695c1ce9ed4f9713f7b8920d1073840a", + "lib_format_counts.json:md5,164f6e06e2eeb4bebc53d8881faa378c", + "ambig_info.tsv:md5,bd89401312e3c097466ce2e76eecd0fb", + "expected_bias.gz:md5,3407f87245d0003e0ffbfdf6d8c04f20", + "observed_bias.gz:md5,92bcd0592d22a6a58d0360fc76103e56", + "observed_bias_3p.gz:md5,92bcd0592d22a6a58d0360fc76103e56", + "cmd_info.json:md5,c028c0b86c75820b17face939047186c", + "lib_format_counts.json:md5,e008ad0fd2b97a798be8808626bc9c88", + "ambig_info.tsv:md5,b4f1a74374255ed3a3d4edf1d1916735", + "expected_bias.gz:md5,3407f87245d0003e0ffbfdf6d8c04f20", + "observed_bias.gz:md5,92bcd0592d22a6a58d0360fc76103e56", + "observed_bias_3p.gz:md5,92bcd0592d22a6a58d0360fc76103e56", + "cmd_info.json:md5,da4959aea2d9b71e348c4ae902eb1401", + "lib_format_counts.json:md5,187c1ec77c0be2b14e0acaa161dba89b", + "ambig_info.tsv:md5,a7b29692d5b72d0c4567554d64fed4c4", + "expected_bias.gz:md5,3407f87245d0003e0ffbfdf6d8c04f20", + "observed_bias.gz:md5,92bcd0592d22a6a58d0360fc76103e56", + "observed_bias_3p.gz:md5,92bcd0592d22a6a58d0360fc76103e56", + "cmd_info.json:md5,994cf13defc7a9d70bd4baf5477bfe31", + "lib_format_counts.json:md5,309cc18331216e02a46db112c69f16d2", + "salmon.merged.tx2gene.tsv:md5,0e2418a69d2eba45097ebffc2f700bfe", + "rfam-5.8s-database-id98_dna_converted.fasta:md5,990436ac4aa6cacf24cd5d1c1365f28a", + "rfam-5.8s-database-id98_prefixed.fasta:md5,3d4c00fbea3b50aa6d0769410e38cd2f", + "rfam-5s-database-id98_dna_converted.fasta:md5,b9a47a2f8ce51b41927ce2a417d86019", + "rfam-5s-database-id98_prefixed.fasta:md5,7a77fbd449b3718c9e12701607fea33e", + "silva-arc-16s-id95_dna_converted.fasta:md5,ba823f970600d6cc09fe176b12f6689f", + "silva-arc-16s-id95_prefixed.fasta:md5,ba823f970600d6cc09fe176b12f6689f", + "silva-arc-23s-id98_dna_converted.fasta:md5,cd922745710cb1172ae35c48cb279f80", + "silva-arc-23s-id98_prefixed.fasta:md5,cd922745710cb1172ae35c48cb279f80", + "silva-bac-16s-id90_dna_converted.fasta:md5,77ff43be66cbfa63a89d1998efd70ba9", + "silva-bac-16s-id90_prefixed.fasta:md5,77ff43be66cbfa63a89d1998efd70ba9", + "silva-bac-23s-id98_dna_converted.fasta:md5,b18ffc945418ba09da88347a36b85655", + "silva-bac-23s-id98_prefixed.fasta:md5,b18ffc945418ba09da88347a36b85655", + "silva-euk-18s-id95_dna_converted.fasta:md5,23aef4ed1a8fa51460945d6268d0d0c4", + "silva-euk-18s-id95_prefixed.fasta:md5,23aef4ed1a8fa51460945d6268d0d0c4", + "silva-euk-28s-id98_dna_converted.fasta:md5,4f0eeefffcf70b86df1a1303fe7fe19d", + "silva-euk-28s-id98_prefixed.fasta:md5,4f0eeefffcf70b86df1a1303fe7fe19d", + "ambig_info.tsv:md5,c4d8c250a7ed77c7f8afd10bee46be2f", + "expected_bias.gz:md5,3407f87245d0003e0ffbfdf6d8c04f20", + "observed_bias.gz:md5,92bcd0592d22a6a58d0360fc76103e56", + "observed_bias_3p.gz:md5,92bcd0592d22a6a58d0360fc76103e56", + "cmd_info.json:md5,21395500c85658c70ce5fa0ac05b339a", + "ambig_info.tsv:md5,e2df22cd99806e57b85073a057d64266", + "expected_bias.gz:md5,3407f87245d0003e0ffbfdf6d8c04f20", + "observed_bias.gz:md5,92bcd0592d22a6a58d0360fc76103e56", + "observed_bias_3p.gz:md5,92bcd0592d22a6a58d0360fc76103e56", + "cmd_info.json:md5,faf70330c73fdce087631bb06de8a12f", + "ambig_info.tsv:md5,6f1fb0084625628933ee0ab4a5c01258", + "expected_bias.gz:md5,3407f87245d0003e0ffbfdf6d8c04f20", + "observed_bias.gz:md5,92bcd0592d22a6a58d0360fc76103e56", + "observed_bias_3p.gz:md5,92bcd0592d22a6a58d0360fc76103e56", + "cmd_info.json:md5,563fd8191cc965524621c2afea7983ff", + "ambig_info.tsv:md5,934f234ade7ce4c2d48c026a4e7a84e1", + "expected_bias.gz:md5,3407f87245d0003e0ffbfdf6d8c04f20", + "observed_bias.gz:md5,92bcd0592d22a6a58d0360fc76103e56", + "observed_bias_3p.gz:md5,92bcd0592d22a6a58d0360fc76103e56", + "cmd_info.json:md5,867de0b90aeccb5f9627e821a973aea7", + "ambig_info.tsv:md5,24043f65cfdc8f26f62a0579aa54afaa", + "expected_bias.gz:md5,3407f87245d0003e0ffbfdf6d8c04f20", + "observed_bias.gz:md5,92bcd0592d22a6a58d0360fc76103e56", + "observed_bias_3p.gz:md5,92bcd0592d22a6a58d0360fc76103e56", + "cmd_info.json:md5,3a51e7db950cee84bed0b13e329f1934", + "RAP1_IAA_30M_REP1.SJ.out.tab:md5,ea95e243278af55534f2c52eb5fff7ee", + "RAP1_UNINDUCED_REP1.SJ.out.tab:md5,e548d13942535dc0821f3ec6d9743ec8", + "RAP1_UNINDUCED_REP2.SJ.out.tab:md5,1f294365343a1a5e95682792fdb77033", + "WT_REP1.SJ.out.tab:md5,1350c2fa6a675bf107386c6cd3fc5204", + "WT_REP2.SJ.out.tab:md5,f6cc03643a5e3c1025a5b4754eb1be23", + "salmon.merged.tx2gene.tsv:md5,0e2418a69d2eba45097ebffc2f700bfe" + ] + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.2" + }, + "timestamp": "2026-02-26T14:31:20.582012634" } } \ No newline at end of file diff --git a/tests/salmon.nf.test.snap b/tests/salmon.nf.test.snap index 983536cbf..5313abcdb 100644 --- a/tests/salmon.nf.test.snap +++ b/tests/salmon.nf.test.snap @@ -12,17 +12,20 @@ "CUSTOM_CATADDITIONALFASTA": { "python": "3.12.2" }, - "CUSTOM_GETCHROMSIZES": { - "getchromsizes": 1.21 - }, "CUSTOM_TX2GENE": { "python": "3.10.4" }, "FQ_LINT": { - "fq": "0.12.0 (2024-07-08)" + "fq": "0.12.0" + }, + "FQ_LINT_AFTER_BBSPLIT": { + "fq": "0.12.0" + }, + "FQ_LINT_AFTER_TRIMMING": { + "fq": "0.12.0" }, "FQ_SUBSAMPLE": { - "fq": "0.12.0 (2024-07-08)" + "fq": "0.12.0" }, "GTF2BED": { "perl": "5.26.2" @@ -39,6 +42,9 @@ "SALMON_QUANT": { "salmon": "1.10.3" }, + "SAMTOOLS_FAIDX": { + "samtools": "1.22.1" + }, "SE_GENE_UNIFIED": { "bioconductor-summarizedexperiment": "1.32.0" }, @@ -46,8 +52,6 @@ "bioconductor-summarizedexperiment": "1.32.0" }, "TRIMGALORE": { - "cutadapt": 4.9, - "pigz": 2.8, "trimgalore": "0.6.10" }, "TXIMETA_TXIMPORT": { @@ -87,18 +91,18 @@ "fastqc/trim/WT_REP2_trimmed_2_val_2_fastqc.html", "fastqc/trim/WT_REP2_trimmed_2_val_2_fastqc.zip", "fq_lint", + "fq_lint/bbsplit", + "fq_lint/bbsplit/RAP1_IAA_30M_REP1.fq_lint.txt", + "fq_lint/bbsplit/RAP1_UNINDUCED_REP1.fq_lint.txt", + "fq_lint/bbsplit/RAP1_UNINDUCED_REP2.fq_lint.txt", + "fq_lint/bbsplit/WT_REP1.fq_lint.txt", + "fq_lint/bbsplit/WT_REP2.fq_lint.txt", "fq_lint/raw", "fq_lint/raw/RAP1_IAA_30M_REP1.fq_lint.txt", "fq_lint/raw/RAP1_UNINDUCED_REP1.fq_lint.txt", "fq_lint/raw/RAP1_UNINDUCED_REP2.fq_lint.txt", "fq_lint/raw/WT_REP1.fq_lint.txt", "fq_lint/raw/WT_REP2.fq_lint.txt", - "fq_lint/sortmerna", - "fq_lint/sortmerna/RAP1_IAA_30M_REP1.fq_lint.txt", - "fq_lint/sortmerna/RAP1_UNINDUCED_REP1.fq_lint.txt", - "fq_lint/sortmerna/RAP1_UNINDUCED_REP2.fq_lint.txt", - "fq_lint/sortmerna/WT_REP1.fq_lint.txt", - "fq_lint/sortmerna/WT_REP2.fq_lint.txt", "fq_lint/trimmed", "fq_lint/trimmed/RAP1_IAA_30M_REP1.fq_lint.txt", "fq_lint/trimmed/RAP1_UNINDUCED_REP1.fq_lint.txt", @@ -108,6 +112,9 @@ "multiqc", "multiqc/multiqc_report.html", "multiqc/multiqc_report_data", + "multiqc/multiqc_report_data/bbmap-bbsplit_plot.txt", + "multiqc/multiqc_report_data/bbmap.txt", + "multiqc/multiqc_report_data/bbsplit_stats_table.txt", "multiqc/multiqc_report_data/cutadapt_filtered_reads_plot.txt", "multiqc/multiqc_report_data/cutadapt_trimmed_sequences_plot_3_Counts.txt", "multiqc/multiqc_report_data/cutadapt_trimmed_sequences_plot_3_Obs_Exp.txt", @@ -136,6 +143,9 @@ "multiqc/multiqc_report_data/salmon_plot.txt", "multiqc/multiqc_report_plots", "multiqc/multiqc_report_plots/pdf", + "multiqc/multiqc_report_plots/pdf/bbmap-bbsplit_plot-cnt.pdf", + "multiqc/multiqc_report_plots/pdf/bbmap-bbsplit_plot-pct.pdf", + "multiqc/multiqc_report_plots/pdf/bbsplit_stats_table.pdf", "multiqc/multiqc_report_plots/pdf/cutadapt_filtered_reads_plot-cnt.pdf", "multiqc/multiqc_report_plots/pdf/cutadapt_filtered_reads_plot-pct.pdf", "multiqc/multiqc_report_plots/pdf/cutadapt_trimmed_sequences_plot_3_Counts.pdf", @@ -154,6 +164,9 @@ "multiqc/multiqc_report_plots/pdf/fastqc_trimmed_top_overrepresented_sequences_table.pdf", "multiqc/multiqc_report_plots/pdf/salmon_plot.pdf", "multiqc/multiqc_report_plots/png", + "multiqc/multiqc_report_plots/png/bbmap-bbsplit_plot-cnt.png", + "multiqc/multiqc_report_plots/png/bbmap-bbsplit_plot-pct.png", + "multiqc/multiqc_report_plots/png/bbsplit_stats_table.png", "multiqc/multiqc_report_plots/png/cutadapt_filtered_reads_plot-cnt.png", "multiqc/multiqc_report_plots/png/cutadapt_filtered_reads_plot-pct.png", "multiqc/multiqc_report_plots/png/cutadapt_trimmed_sequences_plot_3_Counts.png", @@ -172,6 +185,9 @@ "multiqc/multiqc_report_plots/png/fastqc_trimmed_top_overrepresented_sequences_table.png", "multiqc/multiqc_report_plots/png/salmon_plot.png", "multiqc/multiqc_report_plots/svg", + "multiqc/multiqc_report_plots/svg/bbmap-bbsplit_plot-cnt.svg", + "multiqc/multiqc_report_plots/svg/bbmap-bbsplit_plot-pct.svg", + "multiqc/multiqc_report_plots/svg/bbsplit_stats_table.svg", "multiqc/multiqc_report_plots/svg/cutadapt_filtered_reads_plot-cnt.svg", "multiqc/multiqc_report_plots/svg/cutadapt_filtered_reads_plot-pct.svg", "multiqc/multiqc_report_plots/svg/cutadapt_trimmed_sequences_plot_3_Counts.svg", @@ -282,7 +298,7 @@ "salmon/salmon.merged.transcript_counts.tsv", "salmon/salmon.merged.transcript_lengths.tsv", "salmon/salmon.merged.transcript_tpm.tsv", - "salmon/tx2gene.tsv", + "salmon/salmon.merged.tx2gene.tsv", "trimgalore", "trimgalore/RAP1_IAA_30M_REP1_trimmed_1.fastq.gz_trimming_report.txt", "trimgalore/RAP1_IAA_30M_REP1_trimmed_2.fastq.gz_trimming_report.txt", @@ -299,7 +315,6 @@ "cutadapt_filtered_reads_plot.txt:md5,6fa381627f7c1f664f3d4b2cb79cce90", "cutadapt_trimmed_sequences_plot_3_Counts.txt:md5,13dfa866fd91dbb072689efe9aa83b1f", "cutadapt_trimmed_sequences_plot_3_Obs_Exp.txt:md5,07145dd8dd3db654859b18eb0389046c", - "fastqc_sequence_length_distribution_plot.txt:md5,6fe2c985606abad947bcca99b015ae33", "fastqc_trimmed-status-check-heatmap.txt:md5,22a03548736b88b23be6bc0c9ef1b4a6", "fastqc_trimmed_overrepresented_sequences_plot.txt:md5,c755e9d044ea1a82b2c8edde867b4878", "fastqc_trimmed_per_base_n_content_plot.txt:md5,418610c1ce119cb786ad434db75d366e", @@ -310,7 +325,6 @@ "fastqc_trimmed_sequence_counts_plot.txt:md5,9fd642bdd1da354f296bb8092205608f", "fastqc_trimmed_sequence_duplication_levels_plot.txt:md5,0758257b497283b1ef28171e694db6db", "multiqc_citations.txt:md5,f789abe663d4b4214f0ddeb413a7f150", - "multiqc_cutadapt.txt:md5,583b7b9ba76b26162bb9610ed746454b", "multiqc_fastqc_fastqc_trimmed.txt:md5,54743154d0e8858980acffeb5b6f6a97", "ambig_info.tsv:md5,de973a4b22a4457217ae3dc04caf9401", "expected_bias.gz:md5,3407f87245d0003e0ffbfdf6d8c04f20", @@ -342,14 +356,14 @@ "observed_bias_3p.gz:md5,92bcd0592d22a6a58d0360fc76103e56", "cmd_info.json:md5,fe66c9d876645b9260d8c2488157d4d4", "lib_format_counts.json:md5,088fd51db07022ffde47033bbd029400", - "tx2gene.tsv:md5,0e2418a69d2eba45097ebffc2f700bfe" + "salmon.merged.tx2gene.tsv:md5,0e2418a69d2eba45097ebffc2f700bfe" ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.6" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-08-12T12:21:59.880743609" + "timestamp": "2026-02-26T14:33:45.910282768" }, "Params: --pseudo_aligner salmon --skip_qc --skip_alignment - stub": { "content": [ @@ -362,13 +376,10 @@ "cat": 9.5 }, "CUSTOM_CATADDITIONALFASTA": { - "python": null - }, - "CUSTOM_GETCHROMSIZES": { - "getchromsizes": 1.21 + "python": "3.12.2" }, "FQ_LINT": { - "fq": "0.12.0 (2024-07-08)" + "fq": "0.12.0" }, "GTF2BED": { "perl": "5.26.2" @@ -382,9 +393,10 @@ "GUNZIP_GTF": { "gunzip": 1.13 }, + "SAMTOOLS_FAIDX": { + "samtools": "1.22.1" + }, "TRIMGALORE": { - "cutadapt": 4.9, - "pigz": 2.8, "trimgalore": "0.6.10" }, "UNTAR_SALMON_INDEX": { @@ -428,9 +440,9 @@ ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.4" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-01-28T14:19:20.666237815" + "timestamp": "2026-02-04T17:31:37.170058949" } } \ No newline at end of file diff --git a/tests/sentieon.config b/tests/sentieon.config new file mode 100644 index 000000000..ea71f27ec --- /dev/null +++ b/tests/sentieon.config @@ -0,0 +1,10 @@ +env { + // Sentieon environment configuration + // NOTE This is how pipeline users will use Sentieon in real world use + SENTIEON_LICENSE = System.getenv('SENTIEON_LICSRVR_IP') + // NOTE This should only happen in GitHub actions or nf-core MegaTests + SENTIEON_AUTH_MECH = System.getenv('SENTIEON_AUTH_MECH') + SENTIEON_AUTH_DATA = secrets.SENTIEON_AUTH_DATA + // NOTE This is how pipeline users will test out Sentieon with a license file + // nextflow secrets set SENTIEON_LICENSE_BASE64 \$(cat | base64 -w 0) +} diff --git a/tests/sentieon_default.nf.test b/tests/sentieon_default.nf.test index 81161774e..8d93b4936 100644 --- a/tests/sentieon_default.nf.test +++ b/tests/sentieon_default.nf.test @@ -2,6 +2,7 @@ nextflow_pipeline { name "Test pipeline with sentieon" script "../main.nf" + config "./sentieon.config" tag "pipeline" tag "sentieon" @@ -11,10 +12,6 @@ nextflow_pipeline { params { outdir = "$outputDir" use_sentieon_star = true - // Skip processes already covered by default.nf.test (Sentieon STAR produces near-identical BAMs to STAR) - skip_qc = true - skip_stringtie = true - skip_bigwig = true } } @@ -47,10 +44,6 @@ nextflow_pipeline { params { outdir = "$outputDir" use_sentieon_star = true - // Skip processes already covered by default.nf.test (Sentieon STAR produces near-identical BAMs to STAR) - skip_qc = true - skip_stringtie = true - skip_bigwig = true } } diff --git a/tests/sentieon_default.nf.test.snap b/tests/sentieon_default.nf.test.snap index df8ccc4a0..e390e3463 100644 --- a/tests/sentieon_default.nf.test.snap +++ b/tests/sentieon_default.nf.test.snap @@ -1,7 +1,7 @@ { "Params: default --use_sentieon_star - stub": { "content": [ - 22, + 27, { "BBMAP_BBSPLIT": { "bbmap": 39.18 @@ -10,13 +10,13 @@ "cat": 9.5 }, "CUSTOM_CATADDITIONALFASTA": { - "python": null + "python": "3.12.2" }, - "CUSTOM_GETCHROMSIZES": { - "getchromsizes": 1.21 + "FASTQC": { + "fastqc": "0.12.1" }, "FQ_LINT": { - "fq": "0.12.0 (2024-07-08)" + "fq": "0.12.0" }, "GTF2BED": { "perl": "5.26.2" @@ -30,14 +30,15 @@ "GUNZIP_GTF": { "gunzip": 1.13 }, + "SAMTOOLS_FAIDX": { + "samtools": "1.22.1" + }, "STAR_GENOMEGENERATE": { "gawk": "5.1.0", "samtools": 1.21, "star": "2.7.11b" }, "TRIMGALORE": { - "cutadapt": 4.9, - "pigz": 2.8, "trimgalore": "0.6.10" }, "UNTAR_SALMON_INDEX": { @@ -50,6 +51,17 @@ "custom/out/genome_transcriptome.fasta", "custom/out/genome_transcriptome.gtf", "fastqc", + "fastqc/raw", + "fastqc/raw/RAP1_IAA_30M_REP1_raw.html", + "fastqc/raw/RAP1_IAA_30M_REP1_raw.zip", + "fastqc/raw/RAP1_UNINDUCED_REP1_raw.html", + "fastqc/raw/RAP1_UNINDUCED_REP1_raw.zip", + "fastqc/raw/RAP1_UNINDUCED_REP2_raw.html", + "fastqc/raw/RAP1_UNINDUCED_REP2_raw.zip", + "fastqc/raw/WT_REP1_raw.html", + "fastqc/raw/WT_REP1_raw.zip", + "fastqc/raw/WT_REP2_raw.html", + "fastqc/raw/WT_REP2_raw.zip", "fastqc/trim", "fq_lint", "fq_lint/raw", @@ -85,32 +97,58 @@ "nf-test": "0.9.3", "nextflow": "25.10.2" }, - "timestamp": "2025-12-04T15:18:44.47205494" + "timestamp": "2025-12-18T13:37:47.256346052" }, "Params: default --use_sentieon_star": { "content": [ - 112, + 219, { "BBMAP_BBSPLIT": { "bbmap": 39.18 }, + "BEDTOOLS_GENOMECOV_FW": { + "bedtools": "2.31.1" + }, + "BEDTOOLS_GENOMECOV_REV": { + "bedtools": "2.31.1" + }, "CAT_FASTQ": { "cat": 9.5 }, "CUSTOM_CATADDITIONALFASTA": { "python": "3.12.2" }, - "CUSTOM_GETCHROMSIZES": { - "getchromsizes": 1.21 - }, "CUSTOM_TX2GENE": { "python": "3.10.4" }, + "DESEQ2_QC_BAM_SALMON": { + "bioconductor-deseq2": "1.46.0", + "r-base": "4.4.2" + }, + "DESEQ2_QC_PSEUDO": { + "bioconductor-deseq2": "1.46.0", + "r-base": "4.4.2" + }, + "DUPRADAR": { + "bioconductor-dupradar": "1.38.0" + }, + "FASTQC": { + "fastqc": "0.12.1" + }, + "FASTQC_FILTERED": { + "fastqc": "0.12.1" + }, "FQ_LINT": { - "fq": "0.12.0 (2024-07-08)" + "fq": "0.12.0" + }, + "FQ_LINT_AFTER_BBSPLIT": { + "fq": "0.12.0" + }, + "FQ_LINT_AFTER_TRIMMING": { + "fq": "0.12.0" }, "FQ_SUBSAMPLE": { - "fq": "0.12.0 (2024-07-08)" + "fq": "0.12.0" }, "GTF2BED": { "perl": "5.26.2" @@ -124,28 +162,62 @@ "GUNZIP_GTF": { "gunzip": 1.13 }, + "MULTIQC_CUSTOM_BIOTYPE": { + "python": "3.9.5" + }, "PICARD_MARKDUPLICATES": { - "picard": "3.1.1" + "picard": "3.4.0" + }, + "QUALIMAP_RNASEQ": { + "qualimap": 2.3 + }, + "RSEQC_BAMSTAT": { + "rseqc": "5.0.4" + }, + "RSEQC_INFEREXPERIMENT": { + "rseqc": "5.0.4" + }, + "RSEQC_INNERDISTANCE": { + "rseqc": "5.0.4" + }, + "RSEQC_JUNCTIONANNOTATION": { + "rseqc": "5.0.4" + }, + "RSEQC_JUNCTIONSATURATION": { + "rseqc": "5.0.4" + }, + "RSEQC_READDISTRIBUTION": { + "rseqc": "5.0.4" + }, + "RSEQC_READDUPLICATION": { + "rseqc": "5.0.4" }, "SALMON_QUANT": { "salmon": "1.10.3" }, + "SAMTOOLS_FAIDX": { + "samtools": "1.22.1" + }, "SAMTOOLS_FLAGSTAT": { - "samtools": 1.21 + "samtools": "1.22.1" }, "SAMTOOLS_IDXSTATS": { - "samtools": 1.21 + "samtools": "1.22.1" }, "SAMTOOLS_INDEX": { - "samtools": 1.21 + "samtools": "1.22.1" }, "SAMTOOLS_SORT": { - "samtools": 1.21 + "samtools": "1.22.1" + }, + "SAMTOOLS_SORT_QUALIMAP": { + "samtools": "1.22.1" }, "SAMTOOLS_STATS": { - "samtools": 1.21 + "samtools": "1.22.1" }, "SENTIEON_STAR_ALIGN": { + "sentieon": 202503.02, "star": "2.7.10b" }, "SE_GENE_UNIFIED": { @@ -159,14 +231,24 @@ "samtools": 1.21, "star": "2.7.11b" }, + "STRINGTIE_STRINGTIE": { + "stringtie": "2.2.3" + }, + "SUBREAD_FEATURECOUNTS": { + "subread": "2.0.6" + }, "TRIMGALORE": { - "cutadapt": 4.9, - "pigz": 2.8, "trimgalore": "0.6.10" }, "TXIMETA_TXIMPORT": { "bioconductor-tximeta": "1.20.1" }, + "UCSC_BEDCLIP": { + "ucsc": 377 + }, + "UCSC_BEDGRAPHTOBIGWIG": { + "ucsc": 469 + }, "UNTAR_SALMON_INDEX": { "untar": 1.34 } @@ -183,6 +265,40 @@ "custom/out/genome_gfp.fasta", "custom/out/genome_gfp.gtf", "fastqc", + "fastqc/filtered", + "fastqc/filtered/RAP1_IAA_30M_REP1_filtered_1_fastqc.html", + "fastqc/filtered/RAP1_IAA_30M_REP1_filtered_1_fastqc.zip", + "fastqc/filtered/RAP1_IAA_30M_REP1_filtered_2_fastqc.html", + "fastqc/filtered/RAP1_IAA_30M_REP1_filtered_2_fastqc.zip", + "fastqc/filtered/RAP1_UNINDUCED_REP1_filtered_fastqc.html", + "fastqc/filtered/RAP1_UNINDUCED_REP1_filtered_fastqc.zip", + "fastqc/filtered/RAP1_UNINDUCED_REP2_filtered_fastqc.html", + "fastqc/filtered/RAP1_UNINDUCED_REP2_filtered_fastqc.zip", + "fastqc/filtered/WT_REP1_filtered_1_fastqc.html", + "fastqc/filtered/WT_REP1_filtered_1_fastqc.zip", + "fastqc/filtered/WT_REP1_filtered_2_fastqc.html", + "fastqc/filtered/WT_REP1_filtered_2_fastqc.zip", + "fastqc/filtered/WT_REP2_filtered_1_fastqc.html", + "fastqc/filtered/WT_REP2_filtered_1_fastqc.zip", + "fastqc/filtered/WT_REP2_filtered_2_fastqc.html", + "fastqc/filtered/WT_REP2_filtered_2_fastqc.zip", + "fastqc/raw", + "fastqc/raw/RAP1_IAA_30M_REP1_raw_1_fastqc.html", + "fastqc/raw/RAP1_IAA_30M_REP1_raw_1_fastqc.zip", + "fastqc/raw/RAP1_IAA_30M_REP1_raw_2_fastqc.html", + "fastqc/raw/RAP1_IAA_30M_REP1_raw_2_fastqc.zip", + "fastqc/raw/RAP1_UNINDUCED_REP1_raw_fastqc.html", + "fastqc/raw/RAP1_UNINDUCED_REP1_raw_fastqc.zip", + "fastqc/raw/RAP1_UNINDUCED_REP2_raw_fastqc.html", + "fastqc/raw/RAP1_UNINDUCED_REP2_raw_fastqc.zip", + "fastqc/raw/WT_REP1_raw_1_fastqc.html", + "fastqc/raw/WT_REP1_raw_1_fastqc.zip", + "fastqc/raw/WT_REP1_raw_2_fastqc.html", + "fastqc/raw/WT_REP1_raw_2_fastqc.zip", + "fastqc/raw/WT_REP2_raw_1_fastqc.html", + "fastqc/raw/WT_REP2_raw_1_fastqc.zip", + "fastqc/raw/WT_REP2_raw_2_fastqc.html", + "fastqc/raw/WT_REP2_raw_2_fastqc.zip", "fastqc/trim", "fastqc/trim/RAP1_IAA_30M_REP1_trimmed_1_val_1_fastqc.html", "fastqc/trim/RAP1_IAA_30M_REP1_trimmed_1_val_1_fastqc.zip", @@ -201,18 +317,18 @@ "fastqc/trim/WT_REP2_trimmed_2_val_2_fastqc.html", "fastqc/trim/WT_REP2_trimmed_2_val_2_fastqc.zip", "fq_lint", + "fq_lint/bbsplit", + "fq_lint/bbsplit/RAP1_IAA_30M_REP1.fq_lint.txt", + "fq_lint/bbsplit/RAP1_UNINDUCED_REP1.fq_lint.txt", + "fq_lint/bbsplit/RAP1_UNINDUCED_REP2.fq_lint.txt", + "fq_lint/bbsplit/WT_REP1.fq_lint.txt", + "fq_lint/bbsplit/WT_REP2.fq_lint.txt", "fq_lint/raw", "fq_lint/raw/RAP1_IAA_30M_REP1.fq_lint.txt", "fq_lint/raw/RAP1_UNINDUCED_REP1.fq_lint.txt", "fq_lint/raw/RAP1_UNINDUCED_REP2.fq_lint.txt", "fq_lint/raw/WT_REP1.fq_lint.txt", "fq_lint/raw/WT_REP2.fq_lint.txt", - "fq_lint/sortmerna", - "fq_lint/sortmerna/RAP1_IAA_30M_REP1.fq_lint.txt", - "fq_lint/sortmerna/RAP1_UNINDUCED_REP1.fq_lint.txt", - "fq_lint/sortmerna/RAP1_UNINDUCED_REP2.fq_lint.txt", - "fq_lint/sortmerna/WT_REP1.fq_lint.txt", - "fq_lint/sortmerna/WT_REP2.fq_lint.txt", "fq_lint/trimmed", "fq_lint/trimmed/RAP1_IAA_30M_REP1.fq_lint.txt", "fq_lint/trimmed/RAP1_UNINDUCED_REP1.fq_lint.txt", @@ -223,9 +339,33 @@ "multiqc/star_salmon", "multiqc/star_salmon/multiqc_report.html", "multiqc/star_salmon/multiqc_report_data", + "multiqc/star_salmon/multiqc_report_data/bbmap-bbsplit_plot.txt", + "multiqc/star_salmon/multiqc_report_data/bbmap.txt", + "multiqc/star_salmon/multiqc_report_data/bbsplit_stats_table.txt", "multiqc/star_salmon/multiqc_report_data/cutadapt_filtered_reads_plot.txt", "multiqc/star_salmon/multiqc_report_data/cutadapt_trimmed_sequences_plot_3_Counts.txt", "multiqc/star_salmon/multiqc_report_data/cutadapt_trimmed_sequences_plot_3_Obs_Exp.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_filtered-status-check-heatmap.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_filtered_overrepresented_sequences_plot.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_filtered_per_base_n_content_plot.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_filtered_per_base_sequence_quality_plot.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_filtered_per_sequence_gc_content_plot_Counts.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_filtered_per_sequence_gc_content_plot_Percentages.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_filtered_per_sequence_quality_scores_plot.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_filtered_sequence_counts_plot.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_filtered_sequence_duplication_levels_plot.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_filtered_top_overrepresented_sequences_table.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_raw-status-check-heatmap.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_raw_adapter_content_plot.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_raw_overrepresented_sequences_plot.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_raw_per_base_n_content_plot.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_raw_per_base_sequence_quality_plot.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_raw_per_sequence_gc_content_plot_Counts.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_raw_per_sequence_gc_content_plot_Percentages.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_raw_per_sequence_quality_scores_plot.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_raw_sequence_counts_plot.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_raw_sequence_duplication_levels_plot.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_raw_top_overrepresented_sequences_table.txt", "multiqc/star_salmon/multiqc_report_data/fastqc_sequence_length_distribution_plot.txt", "multiqc/star_salmon/multiqc_report_data/fastqc_trimmed-status-check-heatmap.txt", "multiqc/star_salmon/multiqc_report_data/fastqc_trimmed_overrepresented_sequences_plot.txt", @@ -237,27 +377,61 @@ "multiqc/star_salmon/multiqc_report_data/fastqc_trimmed_sequence_counts_plot.txt", "multiqc/star_salmon/multiqc_report_data/fastqc_trimmed_sequence_duplication_levels_plot.txt", "multiqc/star_salmon/multiqc_report_data/fastqc_trimmed_top_overrepresented_sequences_table.txt", + "multiqc/star_salmon/multiqc_report_data/junction_saturation_known.txt", + "multiqc/star_salmon/multiqc_report_data/junction_saturation_novel.txt", "multiqc/star_salmon/multiqc_report_data/llms-full.txt", "multiqc/star_salmon/multiqc_report_data/multiqc.log", "multiqc/star_salmon/multiqc_report_data/multiqc.parquet", "multiqc/star_salmon/multiqc_report_data/multiqc_citations.txt", "multiqc/star_salmon/multiqc_report_data/multiqc_cutadapt.txt", "multiqc/star_salmon/multiqc_report_data/multiqc_data.json", + "multiqc/star_salmon/multiqc_report_data/multiqc_dupradar.txt", + "multiqc/star_salmon/multiqc_report_data/multiqc_fail_strand_check_table.txt", + "multiqc/star_salmon/multiqc_report_data/multiqc_fastqc_fastqc_filtered.txt", + "multiqc/star_salmon/multiqc_report_data/multiqc_fastqc_fastqc_raw.txt", "multiqc/star_salmon/multiqc_report_data/multiqc_fastqc_fastqc_trimmed.txt", + "multiqc/star_salmon/multiqc_report_data/multiqc_featurecounts_biotype_plot.txt", "multiqc/star_salmon/multiqc_report_data/multiqc_general_stats.txt", "multiqc/star_salmon/multiqc_report_data/multiqc_picard_dups.txt", + "multiqc/star_salmon/multiqc_report_data/multiqc_rseqc_bam_stat.txt", + "multiqc/star_salmon/multiqc_report_data/multiqc_rseqc_infer_experiment.txt", + "multiqc/star_salmon/multiqc_report_data/multiqc_rseqc_junction_annotation.txt", + "multiqc/star_salmon/multiqc_report_data/multiqc_rseqc_read_distribution.txt", "multiqc/star_salmon/multiqc_report_data/multiqc_salmon.txt", + "multiqc/star_salmon/multiqc_report_data/multiqc_salmon_deseq2_clustering.txt", + "multiqc/star_salmon/multiqc_report_data/multiqc_salmon_deseq2_pca.txt", "multiqc/star_salmon/multiqc_report_data/multiqc_samtools_flagstat.txt", "multiqc/star_salmon/multiqc_report_data/multiqc_samtools_idxstats.txt", "multiqc/star_salmon/multiqc_report_data/multiqc_samtools_stats.txt", "multiqc/star_salmon/multiqc_report_data/multiqc_software_versions.txt", "multiqc/star_salmon/multiqc_report_data/multiqc_sources.txt", "multiqc/star_salmon/multiqc_report_data/multiqc_star.txt", + "multiqc/star_salmon/multiqc_report_data/multiqc_star_salmon_deseq2_clustering.txt", + "multiqc/star_salmon/multiqc_report_data/multiqc_star_salmon_deseq2_pca.txt", "multiqc/star_salmon/multiqc_report_data/picard_MarkIlluminaAdapters_histogram.txt", "multiqc/star_salmon/multiqc_report_data/picard_MeanQualityByCycle_histogram.txt", "multiqc/star_salmon/multiqc_report_data/picard_MeanQualityByCycle_histogram_1.txt", "multiqc/star_salmon/multiqc_report_data/picard_QualityScoreDistribution_histogram.txt", "multiqc/star_salmon/multiqc_report_data/picard_deduplication.txt", + "multiqc/star_salmon/multiqc_report_data/qualimap_gene_coverage_profile_Counts.txt", + "multiqc/star_salmon/multiqc_report_data/qualimap_gene_coverage_profile_Normalised.txt", + "multiqc/star_salmon/multiqc_report_data/qualimap_genomic_origin.txt", + "multiqc/star_salmon/multiqc_report_data/qualimap_rnaseq_cov_hist.txt", + "multiqc/star_salmon/multiqc_report_data/qualimap_rnaseq_genome_results.txt", + "multiqc/star_salmon/multiqc_report_data/rseqc_bam_stat.txt", + "multiqc/star_salmon/multiqc_report_data/rseqc_infer_experiment_plot.txt", + "multiqc/star_salmon/multiqc_report_data/rseqc_inner_distance.txt", + "multiqc/star_salmon/multiqc_report_data/rseqc_inner_distance_plot_Counts.txt", + "multiqc/star_salmon/multiqc_report_data/rseqc_inner_distance_plot_Percentages.txt", + "multiqc/star_salmon/multiqc_report_data/rseqc_junction_annotation_junctions_plot_Events.txt", + "multiqc/star_salmon/multiqc_report_data/rseqc_junction_annotation_junctions_plot_Junctions.txt", + "multiqc/star_salmon/multiqc_report_data/rseqc_junction_saturation_all.txt", + "multiqc/star_salmon/multiqc_report_data/rseqc_junction_saturation_plot_All_Junctions.txt", + "multiqc/star_salmon/multiqc_report_data/rseqc_junction_saturation_plot_Known_Junctions.txt", + "multiqc/star_salmon/multiqc_report_data/rseqc_junction_saturation_plot_Novel_Junctions.txt", + "multiqc/star_salmon/multiqc_report_data/rseqc_read_distribution_plot.txt", + "multiqc/star_salmon/multiqc_report_data/rseqc_read_dups.txt", + "multiqc/star_salmon/multiqc_report_data/rseqc_read_dups_plot.txt", "multiqc/star_salmon/multiqc_report_data/salmon_plot.txt", "multiqc/star_salmon/multiqc_report_data/samtools-flagstat-pct-table.txt", "multiqc/star_salmon/multiqc_report_data/samtools-flagstat-table.txt", @@ -270,10 +444,38 @@ "multiqc/star_salmon/multiqc_report_data/star_summary_table.txt", "multiqc/star_salmon/multiqc_report_plots", "multiqc/star_salmon/multiqc_report_plots/pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/bbmap-bbsplit_plot-cnt.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/bbmap-bbsplit_plot-pct.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/bbsplit_stats_table.pdf", "multiqc/star_salmon/multiqc_report_plots/pdf/cutadapt_filtered_reads_plot-cnt.pdf", "multiqc/star_salmon/multiqc_report_plots/pdf/cutadapt_filtered_reads_plot-pct.pdf", "multiqc/star_salmon/multiqc_report_plots/pdf/cutadapt_trimmed_sequences_plot_3_Counts.pdf", "multiqc/star_salmon/multiqc_report_plots/pdf/cutadapt_trimmed_sequences_plot_3_Obs_Exp.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/dupradar.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fail_strand_check_table.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_filtered-status-check-heatmap.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_filtered_overrepresented_sequences_plot.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_filtered_per_base_n_content_plot.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_filtered_per_base_sequence_quality_plot.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_filtered_per_sequence_gc_content_plot_Counts.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_filtered_per_sequence_gc_content_plot_Percentages.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_filtered_per_sequence_quality_scores_plot.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_filtered_sequence_counts_plot-cnt.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_filtered_sequence_counts_plot-pct.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_filtered_sequence_duplication_levels_plot.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_filtered_top_overrepresented_sequences_table.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_raw-status-check-heatmap.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_raw_adapter_content_plot.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_raw_overrepresented_sequences_plot.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_raw_per_base_n_content_plot.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_raw_per_base_sequence_quality_plot.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_raw_per_sequence_gc_content_plot_Counts.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_raw_per_sequence_gc_content_plot_Percentages.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_raw_per_sequence_quality_scores_plot.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_raw_sequence_counts_plot-cnt.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_raw_sequence_counts_plot-pct.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_raw_sequence_duplication_levels_plot.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_raw_top_overrepresented_sequences_table.pdf", "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_sequence_length_distribution_plot.pdf", "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_trimmed-status-check-heatmap.pdf", "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_trimmed_overrepresented_sequences_plot.pdf", @@ -286,8 +488,30 @@ "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_trimmed_sequence_counts_plot-pct.pdf", "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_trimmed_sequence_duplication_levels_plot.pdf", "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_trimmed_top_overrepresented_sequences_table.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/featurecounts_biotype_plot-cnt.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/featurecounts_biotype_plot-pct.pdf", "multiqc/star_salmon/multiqc_report_plots/pdf/picard_deduplication-cnt.pdf", "multiqc/star_salmon/multiqc_report_plots/pdf/picard_deduplication-pct.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/qualimap_gene_coverage_profile_Counts.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/qualimap_gene_coverage_profile_Normalised.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/qualimap_genomic_origin-cnt.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/qualimap_genomic_origin-pct.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/rseqc_bam_stat.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/rseqc_infer_experiment_plot.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/rseqc_inner_distance_plot_Counts.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/rseqc_inner_distance_plot_Percentages.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/rseqc_junction_annotation_junctions_plot_Events-cnt.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/rseqc_junction_annotation_junctions_plot_Events-pct.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/rseqc_junction_annotation_junctions_plot_Junctions-cnt.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/rseqc_junction_annotation_junctions_plot_Junctions-pct.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/rseqc_junction_saturation_plot_All_Junctions.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/rseqc_junction_saturation_plot_Known_Junctions.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/rseqc_junction_saturation_plot_Novel_Junctions.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/rseqc_read_distribution_plot-cnt.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/rseqc_read_distribution_plot-pct.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/rseqc_read_dups_plot.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/salmon_deseq2_clustering.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/salmon_deseq2_pca.pdf", "multiqc/star_salmon/multiqc_report_plots/pdf/salmon_plot.pdf", "multiqc/star_salmon/multiqc_report_plots/pdf/samtools-flagstat-pct-table.pdf", "multiqc/star_salmon/multiqc_report_plots/pdf/samtools-flagstat-table.pdf", @@ -302,12 +526,42 @@ "multiqc/star_salmon/multiqc_report_plots/pdf/samtools_alignment_plot-pct.pdf", "multiqc/star_salmon/multiqc_report_plots/pdf/star_alignment_plot-cnt.pdf", "multiqc/star_salmon/multiqc_report_plots/pdf/star_alignment_plot-pct.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/star_salmon_deseq2_clustering.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/star_salmon_deseq2_pca.pdf", "multiqc/star_salmon/multiqc_report_plots/pdf/star_summary_table.pdf", "multiqc/star_salmon/multiqc_report_plots/png", + "multiqc/star_salmon/multiqc_report_plots/png/bbmap-bbsplit_plot-cnt.png", + "multiqc/star_salmon/multiqc_report_plots/png/bbmap-bbsplit_plot-pct.png", + "multiqc/star_salmon/multiqc_report_plots/png/bbsplit_stats_table.png", "multiqc/star_salmon/multiqc_report_plots/png/cutadapt_filtered_reads_plot-cnt.png", "multiqc/star_salmon/multiqc_report_plots/png/cutadapt_filtered_reads_plot-pct.png", "multiqc/star_salmon/multiqc_report_plots/png/cutadapt_trimmed_sequences_plot_3_Counts.png", "multiqc/star_salmon/multiqc_report_plots/png/cutadapt_trimmed_sequences_plot_3_Obs_Exp.png", + "multiqc/star_salmon/multiqc_report_plots/png/dupradar.png", + "multiqc/star_salmon/multiqc_report_plots/png/fail_strand_check_table.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_filtered-status-check-heatmap.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_filtered_overrepresented_sequences_plot.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_filtered_per_base_n_content_plot.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_filtered_per_base_sequence_quality_plot.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_filtered_per_sequence_gc_content_plot_Counts.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_filtered_per_sequence_gc_content_plot_Percentages.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_filtered_per_sequence_quality_scores_plot.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_filtered_sequence_counts_plot-cnt.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_filtered_sequence_counts_plot-pct.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_filtered_sequence_duplication_levels_plot.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_filtered_top_overrepresented_sequences_table.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_raw-status-check-heatmap.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_raw_adapter_content_plot.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_raw_overrepresented_sequences_plot.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_raw_per_base_n_content_plot.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_raw_per_base_sequence_quality_plot.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_raw_per_sequence_gc_content_plot_Counts.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_raw_per_sequence_gc_content_plot_Percentages.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_raw_per_sequence_quality_scores_plot.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_raw_sequence_counts_plot-cnt.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_raw_sequence_counts_plot-pct.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_raw_sequence_duplication_levels_plot.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_raw_top_overrepresented_sequences_table.png", "multiqc/star_salmon/multiqc_report_plots/png/fastqc_sequence_length_distribution_plot.png", "multiqc/star_salmon/multiqc_report_plots/png/fastqc_trimmed-status-check-heatmap.png", "multiqc/star_salmon/multiqc_report_plots/png/fastqc_trimmed_overrepresented_sequences_plot.png", @@ -320,8 +574,30 @@ "multiqc/star_salmon/multiqc_report_plots/png/fastqc_trimmed_sequence_counts_plot-pct.png", "multiqc/star_salmon/multiqc_report_plots/png/fastqc_trimmed_sequence_duplication_levels_plot.png", "multiqc/star_salmon/multiqc_report_plots/png/fastqc_trimmed_top_overrepresented_sequences_table.png", + "multiqc/star_salmon/multiqc_report_plots/png/featurecounts_biotype_plot-cnt.png", + "multiqc/star_salmon/multiqc_report_plots/png/featurecounts_biotype_plot-pct.png", "multiqc/star_salmon/multiqc_report_plots/png/picard_deduplication-cnt.png", "multiqc/star_salmon/multiqc_report_plots/png/picard_deduplication-pct.png", + "multiqc/star_salmon/multiqc_report_plots/png/qualimap_gene_coverage_profile_Counts.png", + "multiqc/star_salmon/multiqc_report_plots/png/qualimap_gene_coverage_profile_Normalised.png", + "multiqc/star_salmon/multiqc_report_plots/png/qualimap_genomic_origin-cnt.png", + "multiqc/star_salmon/multiqc_report_plots/png/qualimap_genomic_origin-pct.png", + "multiqc/star_salmon/multiqc_report_plots/png/rseqc_bam_stat.png", + "multiqc/star_salmon/multiqc_report_plots/png/rseqc_infer_experiment_plot.png", + "multiqc/star_salmon/multiqc_report_plots/png/rseqc_inner_distance_plot_Counts.png", + "multiqc/star_salmon/multiqc_report_plots/png/rseqc_inner_distance_plot_Percentages.png", + "multiqc/star_salmon/multiqc_report_plots/png/rseqc_junction_annotation_junctions_plot_Events-cnt.png", + "multiqc/star_salmon/multiqc_report_plots/png/rseqc_junction_annotation_junctions_plot_Events-pct.png", + "multiqc/star_salmon/multiqc_report_plots/png/rseqc_junction_annotation_junctions_plot_Junctions-cnt.png", + "multiqc/star_salmon/multiqc_report_plots/png/rseqc_junction_annotation_junctions_plot_Junctions-pct.png", + "multiqc/star_salmon/multiqc_report_plots/png/rseqc_junction_saturation_plot_All_Junctions.png", + "multiqc/star_salmon/multiqc_report_plots/png/rseqc_junction_saturation_plot_Known_Junctions.png", + "multiqc/star_salmon/multiqc_report_plots/png/rseqc_junction_saturation_plot_Novel_Junctions.png", + "multiqc/star_salmon/multiqc_report_plots/png/rseqc_read_distribution_plot-cnt.png", + "multiqc/star_salmon/multiqc_report_plots/png/rseqc_read_distribution_plot-pct.png", + "multiqc/star_salmon/multiqc_report_plots/png/rseqc_read_dups_plot.png", + "multiqc/star_salmon/multiqc_report_plots/png/salmon_deseq2_clustering.png", + "multiqc/star_salmon/multiqc_report_plots/png/salmon_deseq2_pca.png", "multiqc/star_salmon/multiqc_report_plots/png/salmon_plot.png", "multiqc/star_salmon/multiqc_report_plots/png/samtools-flagstat-pct-table.png", "multiqc/star_salmon/multiqc_report_plots/png/samtools-flagstat-table.png", @@ -336,12 +612,42 @@ "multiqc/star_salmon/multiqc_report_plots/png/samtools_alignment_plot-pct.png", "multiqc/star_salmon/multiqc_report_plots/png/star_alignment_plot-cnt.png", "multiqc/star_salmon/multiqc_report_plots/png/star_alignment_plot-pct.png", + "multiqc/star_salmon/multiqc_report_plots/png/star_salmon_deseq2_clustering.png", + "multiqc/star_salmon/multiqc_report_plots/png/star_salmon_deseq2_pca.png", "multiqc/star_salmon/multiqc_report_plots/png/star_summary_table.png", "multiqc/star_salmon/multiqc_report_plots/svg", + "multiqc/star_salmon/multiqc_report_plots/svg/bbmap-bbsplit_plot-cnt.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/bbmap-bbsplit_plot-pct.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/bbsplit_stats_table.svg", "multiqc/star_salmon/multiqc_report_plots/svg/cutadapt_filtered_reads_plot-cnt.svg", "multiqc/star_salmon/multiqc_report_plots/svg/cutadapt_filtered_reads_plot-pct.svg", "multiqc/star_salmon/multiqc_report_plots/svg/cutadapt_trimmed_sequences_plot_3_Counts.svg", "multiqc/star_salmon/multiqc_report_plots/svg/cutadapt_trimmed_sequences_plot_3_Obs_Exp.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/dupradar.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fail_strand_check_table.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_filtered-status-check-heatmap.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_filtered_overrepresented_sequences_plot.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_filtered_per_base_n_content_plot.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_filtered_per_base_sequence_quality_plot.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_filtered_per_sequence_gc_content_plot_Counts.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_filtered_per_sequence_gc_content_plot_Percentages.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_filtered_per_sequence_quality_scores_plot.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_filtered_sequence_counts_plot-cnt.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_filtered_sequence_counts_plot-pct.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_filtered_sequence_duplication_levels_plot.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_filtered_top_overrepresented_sequences_table.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_raw-status-check-heatmap.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_raw_adapter_content_plot.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_raw_overrepresented_sequences_plot.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_raw_per_base_n_content_plot.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_raw_per_base_sequence_quality_plot.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_raw_per_sequence_gc_content_plot_Counts.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_raw_per_sequence_gc_content_plot_Percentages.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_raw_per_sequence_quality_scores_plot.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_raw_sequence_counts_plot-cnt.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_raw_sequence_counts_plot-pct.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_raw_sequence_duplication_levels_plot.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_raw_top_overrepresented_sequences_table.svg", "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_sequence_length_distribution_plot.svg", "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_trimmed-status-check-heatmap.svg", "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_trimmed_overrepresented_sequences_plot.svg", @@ -354,8 +660,30 @@ "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_trimmed_sequence_counts_plot-pct.svg", "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_trimmed_sequence_duplication_levels_plot.svg", "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_trimmed_top_overrepresented_sequences_table.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/featurecounts_biotype_plot-cnt.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/featurecounts_biotype_plot-pct.svg", "multiqc/star_salmon/multiqc_report_plots/svg/picard_deduplication-cnt.svg", "multiqc/star_salmon/multiqc_report_plots/svg/picard_deduplication-pct.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/qualimap_gene_coverage_profile_Counts.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/qualimap_gene_coverage_profile_Normalised.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/qualimap_genomic_origin-cnt.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/qualimap_genomic_origin-pct.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/rseqc_bam_stat.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/rseqc_infer_experiment_plot.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/rseqc_inner_distance_plot_Counts.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/rseqc_inner_distance_plot_Percentages.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/rseqc_junction_annotation_junctions_plot_Events-cnt.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/rseqc_junction_annotation_junctions_plot_Events-pct.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/rseqc_junction_annotation_junctions_plot_Junctions-cnt.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/rseqc_junction_annotation_junctions_plot_Junctions-pct.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/rseqc_junction_saturation_plot_All_Junctions.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/rseqc_junction_saturation_plot_Known_Junctions.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/rseqc_junction_saturation_plot_Novel_Junctions.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/rseqc_read_distribution_plot-cnt.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/rseqc_read_distribution_plot-pct.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/rseqc_read_dups_plot.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/salmon_deseq2_clustering.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/salmon_deseq2_pca.svg", "multiqc/star_salmon/multiqc_report_plots/svg/salmon_plot.svg", "multiqc/star_salmon/multiqc_report_plots/svg/samtools-flagstat-pct-table.svg", "multiqc/star_salmon/multiqc_report_plots/svg/samtools-flagstat-table.svg", @@ -370,6 +698,8 @@ "multiqc/star_salmon/multiqc_report_plots/svg/samtools_alignment_plot-pct.svg", "multiqc/star_salmon/multiqc_report_plots/svg/star_alignment_plot-cnt.svg", "multiqc/star_salmon/multiqc_report_plots/svg/star_alignment_plot-pct.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/star_salmon_deseq2_clustering.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/star_salmon_deseq2_pca.svg", "multiqc/star_salmon/multiqc_report_plots/svg/star_summary_table.svg", "pipeline_info", "pipeline_info/nf_core_rnaseq_software_mqc_versions.yml", @@ -454,6 +784,19 @@ "salmon/WT_REP2/logs/salmon_quant.log", "salmon/WT_REP2/quant.genes.sf", "salmon/WT_REP2/quant.sf", + "salmon/deseq2_qc", + "salmon/deseq2_qc/R_sessionInfo.log", + "salmon/deseq2_qc/deseq2.dds.RData", + "salmon/deseq2_qc/deseq2.pca.vals.txt", + "salmon/deseq2_qc/deseq2.plots.pdf", + "salmon/deseq2_qc/deseq2.sample.dists.txt", + "salmon/deseq2_qc/size_factors", + "salmon/deseq2_qc/size_factors/RAP1_IAA_30M_REP1.txt", + "salmon/deseq2_qc/size_factors/RAP1_UNINDUCED_REP1.txt", + "salmon/deseq2_qc/size_factors/RAP1_UNINDUCED_REP2.txt", + "salmon/deseq2_qc/size_factors/WT_REP1.txt", + "salmon/deseq2_qc/size_factors/WT_REP2.txt", + "salmon/deseq2_qc/size_factors/deseq2.size_factors.RData", "salmon/salmon.merged.gene.SummarizedExperiment.rds", "salmon/salmon.merged.gene_counts.tsv", "salmon/salmon.merged.gene_counts_length_scaled.tsv", @@ -464,7 +807,7 @@ "salmon/salmon.merged.transcript_counts.tsv", "salmon/salmon.merged.transcript_lengths.tsv", "salmon/salmon.merged.transcript_tpm.tsv", - "salmon/tx2gene.tsv", + "salmon/salmon.merged.tx2gene.tsv", "star_salmon", "star_salmon/RAP1_IAA_30M_REP1", "star_salmon/RAP1_IAA_30M_REP1.markdup.sorted.bam", @@ -551,6 +894,82 @@ "star_salmon/WT_REP2/logs/salmon_quant.log", "star_salmon/WT_REP2/quant.genes.sf", "star_salmon/WT_REP2/quant.sf", + "star_salmon/bigwig", + "star_salmon/bigwig/RAP1_IAA_30M_REP1.forward.bigWig", + "star_salmon/bigwig/RAP1_IAA_30M_REP1.reverse.bigWig", + "star_salmon/bigwig/RAP1_UNINDUCED_REP1.forward.bigWig", + "star_salmon/bigwig/RAP1_UNINDUCED_REP1.reverse.bigWig", + "star_salmon/bigwig/RAP1_UNINDUCED_REP2.forward.bigWig", + "star_salmon/bigwig/RAP1_UNINDUCED_REP2.reverse.bigWig", + "star_salmon/bigwig/WT_REP1.forward.bigWig", + "star_salmon/bigwig/WT_REP1.reverse.bigWig", + "star_salmon/bigwig/WT_REP2.forward.bigWig", + "star_salmon/bigwig/WT_REP2.reverse.bigWig", + "star_salmon/deseq2_qc", + "star_salmon/deseq2_qc/R_sessionInfo.log", + "star_salmon/deseq2_qc/deseq2.dds.RData", + "star_salmon/deseq2_qc/deseq2.pca.vals.txt", + "star_salmon/deseq2_qc/deseq2.plots.pdf", + "star_salmon/deseq2_qc/deseq2.sample.dists.txt", + "star_salmon/deseq2_qc/size_factors", + "star_salmon/deseq2_qc/size_factors/RAP1_IAA_30M_REP1.txt", + "star_salmon/deseq2_qc/size_factors/RAP1_UNINDUCED_REP1.txt", + "star_salmon/deseq2_qc/size_factors/RAP1_UNINDUCED_REP2.txt", + "star_salmon/deseq2_qc/size_factors/WT_REP1.txt", + "star_salmon/deseq2_qc/size_factors/WT_REP2.txt", + "star_salmon/deseq2_qc/size_factors/deseq2.size_factors.RData", + "star_salmon/dupradar", + "star_salmon/dupradar/box_plot", + "star_salmon/dupradar/box_plot/RAP1_IAA_30M_REP1_duprateExpBoxplot.pdf", + "star_salmon/dupradar/box_plot/RAP1_UNINDUCED_REP1_duprateExpBoxplot.pdf", + "star_salmon/dupradar/box_plot/RAP1_UNINDUCED_REP2_duprateExpBoxplot.pdf", + "star_salmon/dupradar/box_plot/WT_REP1_duprateExpBoxplot.pdf", + "star_salmon/dupradar/box_plot/WT_REP2_duprateExpBoxplot.pdf", + "star_salmon/dupradar/gene_data", + "star_salmon/dupradar/gene_data/RAP1_IAA_30M_REP1_dupMatrix.txt", + "star_salmon/dupradar/gene_data/RAP1_UNINDUCED_REP1_dupMatrix.txt", + "star_salmon/dupradar/gene_data/RAP1_UNINDUCED_REP2_dupMatrix.txt", + "star_salmon/dupradar/gene_data/WT_REP1_dupMatrix.txt", + "star_salmon/dupradar/gene_data/WT_REP2_dupMatrix.txt", + "star_salmon/dupradar/histogram", + "star_salmon/dupradar/histogram/RAP1_IAA_30M_REP1_expressionHist.pdf", + "star_salmon/dupradar/histogram/RAP1_UNINDUCED_REP1_expressionHist.pdf", + "star_salmon/dupradar/histogram/RAP1_UNINDUCED_REP2_expressionHist.pdf", + "star_salmon/dupradar/histogram/WT_REP1_expressionHist.pdf", + "star_salmon/dupradar/histogram/WT_REP2_expressionHist.pdf", + "star_salmon/dupradar/intercepts_slope", + "star_salmon/dupradar/intercepts_slope/RAP1_IAA_30M_REP1_intercept_slope.txt", + "star_salmon/dupradar/intercepts_slope/RAP1_UNINDUCED_REP1_intercept_slope.txt", + "star_salmon/dupradar/intercepts_slope/RAP1_UNINDUCED_REP2_intercept_slope.txt", + "star_salmon/dupradar/intercepts_slope/WT_REP1_intercept_slope.txt", + "star_salmon/dupradar/intercepts_slope/WT_REP2_intercept_slope.txt", + "star_salmon/dupradar/scatter_plot", + "star_salmon/dupradar/scatter_plot/RAP1_IAA_30M_REP1_duprateExpDens.pdf", + "star_salmon/dupradar/scatter_plot/RAP1_UNINDUCED_REP1_duprateExpDens.pdf", + "star_salmon/dupradar/scatter_plot/RAP1_UNINDUCED_REP2_duprateExpDens.pdf", + "star_salmon/dupradar/scatter_plot/WT_REP1_duprateExpDens.pdf", + "star_salmon/dupradar/scatter_plot/WT_REP2_duprateExpDens.pdf", + "star_salmon/featurecounts", + "star_salmon/featurecounts/RAP1_IAA_30M_REP1.biotype_counts_mqc.tsv", + "star_salmon/featurecounts/RAP1_IAA_30M_REP1.biotype_counts_rrna_mqc.tsv", + "star_salmon/featurecounts/RAP1_IAA_30M_REP1.featureCounts.tsv", + "star_salmon/featurecounts/RAP1_IAA_30M_REP1.featureCounts.tsv.summary", + "star_salmon/featurecounts/RAP1_UNINDUCED_REP1.biotype_counts_mqc.tsv", + "star_salmon/featurecounts/RAP1_UNINDUCED_REP1.biotype_counts_rrna_mqc.tsv", + "star_salmon/featurecounts/RAP1_UNINDUCED_REP1.featureCounts.tsv", + "star_salmon/featurecounts/RAP1_UNINDUCED_REP1.featureCounts.tsv.summary", + "star_salmon/featurecounts/RAP1_UNINDUCED_REP2.biotype_counts_mqc.tsv", + "star_salmon/featurecounts/RAP1_UNINDUCED_REP2.biotype_counts_rrna_mqc.tsv", + "star_salmon/featurecounts/RAP1_UNINDUCED_REP2.featureCounts.tsv", + "star_salmon/featurecounts/RAP1_UNINDUCED_REP2.featureCounts.tsv.summary", + "star_salmon/featurecounts/WT_REP1.biotype_counts_mqc.tsv", + "star_salmon/featurecounts/WT_REP1.biotype_counts_rrna_mqc.tsv", + "star_salmon/featurecounts/WT_REP1.featureCounts.tsv", + "star_salmon/featurecounts/WT_REP1.featureCounts.tsv.summary", + "star_salmon/featurecounts/WT_REP2.biotype_counts_mqc.tsv", + "star_salmon/featurecounts/WT_REP2.biotype_counts_rrna_mqc.tsv", + "star_salmon/featurecounts/WT_REP2.featureCounts.tsv", + "star_salmon/featurecounts/WT_REP2.featureCounts.tsv.summary", "star_salmon/log", "star_salmon/log/RAP1_IAA_30M_REP1.Log.final.out", "star_salmon/log/RAP1_IAA_30M_REP1.Log.out", @@ -578,6 +997,315 @@ "star_salmon/picard_metrics/RAP1_UNINDUCED_REP2.markdup.sorted.MarkDuplicates.metrics.txt", "star_salmon/picard_metrics/WT_REP1.markdup.sorted.MarkDuplicates.metrics.txt", "star_salmon/picard_metrics/WT_REP2.markdup.sorted.MarkDuplicates.metrics.txt", + "star_salmon/qualimap", + "star_salmon/qualimap/RAP1_IAA_30M_REP1", + "star_salmon/qualimap/RAP1_IAA_30M_REP1/css", + "star_salmon/qualimap/RAP1_IAA_30M_REP1/css/agogo.css", + "star_salmon/qualimap/RAP1_IAA_30M_REP1/css/ajax-loader.gif", + "star_salmon/qualimap/RAP1_IAA_30M_REP1/css/basic.css", + "star_salmon/qualimap/RAP1_IAA_30M_REP1/css/bgfooter.png", + "star_salmon/qualimap/RAP1_IAA_30M_REP1/css/bgtop.png", + "star_salmon/qualimap/RAP1_IAA_30M_REP1/css/comment-bright.png", + "star_salmon/qualimap/RAP1_IAA_30M_REP1/css/comment-close.png", + "star_salmon/qualimap/RAP1_IAA_30M_REP1/css/comment.png", + "star_salmon/qualimap/RAP1_IAA_30M_REP1/css/doctools.js", + "star_salmon/qualimap/RAP1_IAA_30M_REP1/css/down-pressed.png", + "star_salmon/qualimap/RAP1_IAA_30M_REP1/css/down.png", + "star_salmon/qualimap/RAP1_IAA_30M_REP1/css/file.png", + "star_salmon/qualimap/RAP1_IAA_30M_REP1/css/jquery.js", + "star_salmon/qualimap/RAP1_IAA_30M_REP1/css/minus.png", + "star_salmon/qualimap/RAP1_IAA_30M_REP1/css/plus.png", + "star_salmon/qualimap/RAP1_IAA_30M_REP1/css/pygments.css", + "star_salmon/qualimap/RAP1_IAA_30M_REP1/css/qualimap_logo_small.png", + "star_salmon/qualimap/RAP1_IAA_30M_REP1/css/report.css", + "star_salmon/qualimap/RAP1_IAA_30M_REP1/css/searchtools.js", + "star_salmon/qualimap/RAP1_IAA_30M_REP1/css/underscore.js", + "star_salmon/qualimap/RAP1_IAA_30M_REP1/css/up-pressed.png", + "star_salmon/qualimap/RAP1_IAA_30M_REP1/css/up.png", + "star_salmon/qualimap/RAP1_IAA_30M_REP1/css/websupport.js", + "star_salmon/qualimap/RAP1_IAA_30M_REP1/images_qualimapReport", + "star_salmon/qualimap/RAP1_IAA_30M_REP1/images_qualimapReport/Coverage Profile Along Genes (High).png", + "star_salmon/qualimap/RAP1_IAA_30M_REP1/images_qualimapReport/Coverage Profile Along Genes (Low).png", + "star_salmon/qualimap/RAP1_IAA_30M_REP1/images_qualimapReport/Coverage Profile Along Genes (Total).png", + "star_salmon/qualimap/RAP1_IAA_30M_REP1/images_qualimapReport/Junction Analysis.png", + "star_salmon/qualimap/RAP1_IAA_30M_REP1/images_qualimapReport/Reads Genomic Origin.png", + "star_salmon/qualimap/RAP1_IAA_30M_REP1/images_qualimapReport/Transcript coverage histogram.png", + "star_salmon/qualimap/RAP1_IAA_30M_REP1/qualimapReport.html", + "star_salmon/qualimap/RAP1_IAA_30M_REP1/raw_data_qualimapReport", + "star_salmon/qualimap/RAP1_IAA_30M_REP1/raw_data_qualimapReport/coverage_profile_along_genes_(high).txt", + "star_salmon/qualimap/RAP1_IAA_30M_REP1/raw_data_qualimapReport/coverage_profile_along_genes_(low).txt", + "star_salmon/qualimap/RAP1_IAA_30M_REP1/raw_data_qualimapReport/coverage_profile_along_genes_(total).txt", + "star_salmon/qualimap/RAP1_IAA_30M_REP1/rnaseq_qc_results.txt", + "star_salmon/qualimap/RAP1_UNINDUCED_REP1", + "star_salmon/qualimap/RAP1_UNINDUCED_REP1/css", + "star_salmon/qualimap/RAP1_UNINDUCED_REP1/css/agogo.css", + "star_salmon/qualimap/RAP1_UNINDUCED_REP1/css/ajax-loader.gif", + "star_salmon/qualimap/RAP1_UNINDUCED_REP1/css/basic.css", + "star_salmon/qualimap/RAP1_UNINDUCED_REP1/css/bgfooter.png", + "star_salmon/qualimap/RAP1_UNINDUCED_REP1/css/bgtop.png", + "star_salmon/qualimap/RAP1_UNINDUCED_REP1/css/comment-bright.png", + "star_salmon/qualimap/RAP1_UNINDUCED_REP1/css/comment-close.png", + "star_salmon/qualimap/RAP1_UNINDUCED_REP1/css/comment.png", + "star_salmon/qualimap/RAP1_UNINDUCED_REP1/css/doctools.js", + "star_salmon/qualimap/RAP1_UNINDUCED_REP1/css/down-pressed.png", + "star_salmon/qualimap/RAP1_UNINDUCED_REP1/css/down.png", + "star_salmon/qualimap/RAP1_UNINDUCED_REP1/css/file.png", + "star_salmon/qualimap/RAP1_UNINDUCED_REP1/css/jquery.js", + "star_salmon/qualimap/RAP1_UNINDUCED_REP1/css/minus.png", + "star_salmon/qualimap/RAP1_UNINDUCED_REP1/css/plus.png", + "star_salmon/qualimap/RAP1_UNINDUCED_REP1/css/pygments.css", + "star_salmon/qualimap/RAP1_UNINDUCED_REP1/css/qualimap_logo_small.png", + "star_salmon/qualimap/RAP1_UNINDUCED_REP1/css/report.css", + "star_salmon/qualimap/RAP1_UNINDUCED_REP1/css/searchtools.js", + "star_salmon/qualimap/RAP1_UNINDUCED_REP1/css/underscore.js", + "star_salmon/qualimap/RAP1_UNINDUCED_REP1/css/up-pressed.png", + "star_salmon/qualimap/RAP1_UNINDUCED_REP1/css/up.png", + "star_salmon/qualimap/RAP1_UNINDUCED_REP1/css/websupport.js", + "star_salmon/qualimap/RAP1_UNINDUCED_REP1/images_qualimapReport", + "star_salmon/qualimap/RAP1_UNINDUCED_REP1/images_qualimapReport/Coverage Profile Along Genes (High).png", + "star_salmon/qualimap/RAP1_UNINDUCED_REP1/images_qualimapReport/Coverage Profile Along Genes (Low).png", + "star_salmon/qualimap/RAP1_UNINDUCED_REP1/images_qualimapReport/Coverage Profile Along Genes (Total).png", + "star_salmon/qualimap/RAP1_UNINDUCED_REP1/images_qualimapReport/Junction Analysis.png", + "star_salmon/qualimap/RAP1_UNINDUCED_REP1/images_qualimapReport/Reads Genomic Origin.png", + "star_salmon/qualimap/RAP1_UNINDUCED_REP1/images_qualimapReport/Transcript coverage histogram.png", + "star_salmon/qualimap/RAP1_UNINDUCED_REP1/qualimapReport.html", + "star_salmon/qualimap/RAP1_UNINDUCED_REP1/raw_data_qualimapReport", + "star_salmon/qualimap/RAP1_UNINDUCED_REP1/raw_data_qualimapReport/coverage_profile_along_genes_(high).txt", + "star_salmon/qualimap/RAP1_UNINDUCED_REP1/raw_data_qualimapReport/coverage_profile_along_genes_(low).txt", + "star_salmon/qualimap/RAP1_UNINDUCED_REP1/raw_data_qualimapReport/coverage_profile_along_genes_(total).txt", + "star_salmon/qualimap/RAP1_UNINDUCED_REP1/rnaseq_qc_results.txt", + "star_salmon/qualimap/RAP1_UNINDUCED_REP2", + "star_salmon/qualimap/RAP1_UNINDUCED_REP2/css", + "star_salmon/qualimap/RAP1_UNINDUCED_REP2/css/agogo.css", + "star_salmon/qualimap/RAP1_UNINDUCED_REP2/css/ajax-loader.gif", + "star_salmon/qualimap/RAP1_UNINDUCED_REP2/css/basic.css", + "star_salmon/qualimap/RAP1_UNINDUCED_REP2/css/bgfooter.png", + "star_salmon/qualimap/RAP1_UNINDUCED_REP2/css/bgtop.png", + "star_salmon/qualimap/RAP1_UNINDUCED_REP2/css/comment-bright.png", + "star_salmon/qualimap/RAP1_UNINDUCED_REP2/css/comment-close.png", + "star_salmon/qualimap/RAP1_UNINDUCED_REP2/css/comment.png", + "star_salmon/qualimap/RAP1_UNINDUCED_REP2/css/doctools.js", + "star_salmon/qualimap/RAP1_UNINDUCED_REP2/css/down-pressed.png", + "star_salmon/qualimap/RAP1_UNINDUCED_REP2/css/down.png", + "star_salmon/qualimap/RAP1_UNINDUCED_REP2/css/file.png", + "star_salmon/qualimap/RAP1_UNINDUCED_REP2/css/jquery.js", + "star_salmon/qualimap/RAP1_UNINDUCED_REP2/css/minus.png", + "star_salmon/qualimap/RAP1_UNINDUCED_REP2/css/plus.png", + "star_salmon/qualimap/RAP1_UNINDUCED_REP2/css/pygments.css", + "star_salmon/qualimap/RAP1_UNINDUCED_REP2/css/qualimap_logo_small.png", + "star_salmon/qualimap/RAP1_UNINDUCED_REP2/css/report.css", + "star_salmon/qualimap/RAP1_UNINDUCED_REP2/css/searchtools.js", + "star_salmon/qualimap/RAP1_UNINDUCED_REP2/css/underscore.js", + "star_salmon/qualimap/RAP1_UNINDUCED_REP2/css/up-pressed.png", + "star_salmon/qualimap/RAP1_UNINDUCED_REP2/css/up.png", + "star_salmon/qualimap/RAP1_UNINDUCED_REP2/css/websupport.js", + "star_salmon/qualimap/RAP1_UNINDUCED_REP2/images_qualimapReport", + "star_salmon/qualimap/RAP1_UNINDUCED_REP2/images_qualimapReport/Coverage Profile Along Genes (High).png", + "star_salmon/qualimap/RAP1_UNINDUCED_REP2/images_qualimapReport/Coverage Profile Along Genes (Low).png", + "star_salmon/qualimap/RAP1_UNINDUCED_REP2/images_qualimapReport/Coverage Profile Along Genes (Total).png", + "star_salmon/qualimap/RAP1_UNINDUCED_REP2/images_qualimapReport/Junction Analysis.png", + "star_salmon/qualimap/RAP1_UNINDUCED_REP2/images_qualimapReport/Reads Genomic Origin.png", + "star_salmon/qualimap/RAP1_UNINDUCED_REP2/images_qualimapReport/Transcript coverage histogram.png", + "star_salmon/qualimap/RAP1_UNINDUCED_REP2/qualimapReport.html", + "star_salmon/qualimap/RAP1_UNINDUCED_REP2/raw_data_qualimapReport", + "star_salmon/qualimap/RAP1_UNINDUCED_REP2/raw_data_qualimapReport/coverage_profile_along_genes_(high).txt", + "star_salmon/qualimap/RAP1_UNINDUCED_REP2/raw_data_qualimapReport/coverage_profile_along_genes_(low).txt", + "star_salmon/qualimap/RAP1_UNINDUCED_REP2/raw_data_qualimapReport/coverage_profile_along_genes_(total).txt", + "star_salmon/qualimap/RAP1_UNINDUCED_REP2/rnaseq_qc_results.txt", + "star_salmon/qualimap/WT_REP1", + "star_salmon/qualimap/WT_REP1/css", + "star_salmon/qualimap/WT_REP1/css/agogo.css", + "star_salmon/qualimap/WT_REP1/css/ajax-loader.gif", + "star_salmon/qualimap/WT_REP1/css/basic.css", + "star_salmon/qualimap/WT_REP1/css/bgfooter.png", + "star_salmon/qualimap/WT_REP1/css/bgtop.png", + "star_salmon/qualimap/WT_REP1/css/comment-bright.png", + "star_salmon/qualimap/WT_REP1/css/comment-close.png", + "star_salmon/qualimap/WT_REP1/css/comment.png", + "star_salmon/qualimap/WT_REP1/css/doctools.js", + "star_salmon/qualimap/WT_REP1/css/down-pressed.png", + "star_salmon/qualimap/WT_REP1/css/down.png", + "star_salmon/qualimap/WT_REP1/css/file.png", + "star_salmon/qualimap/WT_REP1/css/jquery.js", + "star_salmon/qualimap/WT_REP1/css/minus.png", + "star_salmon/qualimap/WT_REP1/css/plus.png", + "star_salmon/qualimap/WT_REP1/css/pygments.css", + "star_salmon/qualimap/WT_REP1/css/qualimap_logo_small.png", + "star_salmon/qualimap/WT_REP1/css/report.css", + "star_salmon/qualimap/WT_REP1/css/searchtools.js", + "star_salmon/qualimap/WT_REP1/css/underscore.js", + "star_salmon/qualimap/WT_REP1/css/up-pressed.png", + "star_salmon/qualimap/WT_REP1/css/up.png", + "star_salmon/qualimap/WT_REP1/css/websupport.js", + "star_salmon/qualimap/WT_REP1/images_qualimapReport", + "star_salmon/qualimap/WT_REP1/images_qualimapReport/Coverage Profile Along Genes (High).png", + "star_salmon/qualimap/WT_REP1/images_qualimapReport/Coverage Profile Along Genes (Low).png", + "star_salmon/qualimap/WT_REP1/images_qualimapReport/Coverage Profile Along Genes (Total).png", + "star_salmon/qualimap/WT_REP1/images_qualimapReport/Junction Analysis.png", + "star_salmon/qualimap/WT_REP1/images_qualimapReport/Reads Genomic Origin.png", + "star_salmon/qualimap/WT_REP1/images_qualimapReport/Transcript coverage histogram.png", + "star_salmon/qualimap/WT_REP1/qualimapReport.html", + "star_salmon/qualimap/WT_REP1/raw_data_qualimapReport", + "star_salmon/qualimap/WT_REP1/raw_data_qualimapReport/coverage_profile_along_genes_(high).txt", + "star_salmon/qualimap/WT_REP1/raw_data_qualimapReport/coverage_profile_along_genes_(low).txt", + "star_salmon/qualimap/WT_REP1/raw_data_qualimapReport/coverage_profile_along_genes_(total).txt", + "star_salmon/qualimap/WT_REP1/rnaseq_qc_results.txt", + "star_salmon/qualimap/WT_REP2", + "star_salmon/qualimap/WT_REP2/css", + "star_salmon/qualimap/WT_REP2/css/agogo.css", + "star_salmon/qualimap/WT_REP2/css/ajax-loader.gif", + "star_salmon/qualimap/WT_REP2/css/basic.css", + "star_salmon/qualimap/WT_REP2/css/bgfooter.png", + "star_salmon/qualimap/WT_REP2/css/bgtop.png", + "star_salmon/qualimap/WT_REP2/css/comment-bright.png", + "star_salmon/qualimap/WT_REP2/css/comment-close.png", + "star_salmon/qualimap/WT_REP2/css/comment.png", + "star_salmon/qualimap/WT_REP2/css/doctools.js", + "star_salmon/qualimap/WT_REP2/css/down-pressed.png", + "star_salmon/qualimap/WT_REP2/css/down.png", + "star_salmon/qualimap/WT_REP2/css/file.png", + "star_salmon/qualimap/WT_REP2/css/jquery.js", + "star_salmon/qualimap/WT_REP2/css/minus.png", + "star_salmon/qualimap/WT_REP2/css/plus.png", + "star_salmon/qualimap/WT_REP2/css/pygments.css", + "star_salmon/qualimap/WT_REP2/css/qualimap_logo_small.png", + "star_salmon/qualimap/WT_REP2/css/report.css", + "star_salmon/qualimap/WT_REP2/css/searchtools.js", + "star_salmon/qualimap/WT_REP2/css/underscore.js", + "star_salmon/qualimap/WT_REP2/css/up-pressed.png", + "star_salmon/qualimap/WT_REP2/css/up.png", + "star_salmon/qualimap/WT_REP2/css/websupport.js", + "star_salmon/qualimap/WT_REP2/images_qualimapReport", + "star_salmon/qualimap/WT_REP2/images_qualimapReport/Coverage Profile Along Genes (High).png", + "star_salmon/qualimap/WT_REP2/images_qualimapReport/Coverage Profile Along Genes (Low).png", + "star_salmon/qualimap/WT_REP2/images_qualimapReport/Coverage Profile Along Genes (Total).png", + "star_salmon/qualimap/WT_REP2/images_qualimapReport/Junction Analysis.png", + "star_salmon/qualimap/WT_REP2/images_qualimapReport/Reads Genomic Origin.png", + "star_salmon/qualimap/WT_REP2/images_qualimapReport/Transcript coverage histogram.png", + "star_salmon/qualimap/WT_REP2/qualimapReport.html", + "star_salmon/qualimap/WT_REP2/raw_data_qualimapReport", + "star_salmon/qualimap/WT_REP2/raw_data_qualimapReport/coverage_profile_along_genes_(high).txt", + "star_salmon/qualimap/WT_REP2/raw_data_qualimapReport/coverage_profile_along_genes_(low).txt", + "star_salmon/qualimap/WT_REP2/raw_data_qualimapReport/coverage_profile_along_genes_(total).txt", + "star_salmon/qualimap/WT_REP2/rnaseq_qc_results.txt", + "star_salmon/rseqc", + "star_salmon/rseqc/bam_stat", + "star_salmon/rseqc/bam_stat/RAP1_IAA_30M_REP1.bam_stat.txt", + "star_salmon/rseqc/bam_stat/RAP1_UNINDUCED_REP1.bam_stat.txt", + "star_salmon/rseqc/bam_stat/RAP1_UNINDUCED_REP2.bam_stat.txt", + "star_salmon/rseqc/bam_stat/WT_REP1.bam_stat.txt", + "star_salmon/rseqc/bam_stat/WT_REP2.bam_stat.txt", + "star_salmon/rseqc/infer_experiment", + "star_salmon/rseqc/infer_experiment/RAP1_IAA_30M_REP1.infer_experiment.txt", + "star_salmon/rseqc/infer_experiment/RAP1_UNINDUCED_REP1.infer_experiment.txt", + "star_salmon/rseqc/infer_experiment/RAP1_UNINDUCED_REP2.infer_experiment.txt", + "star_salmon/rseqc/infer_experiment/WT_REP1.infer_experiment.txt", + "star_salmon/rseqc/infer_experiment/WT_REP2.infer_experiment.txt", + "star_salmon/rseqc/inner_distance", + "star_salmon/rseqc/inner_distance/pdf", + "star_salmon/rseqc/inner_distance/pdf/RAP1_IAA_30M_REP1.inner_distance_plot.pdf", + "star_salmon/rseqc/inner_distance/pdf/WT_REP1.inner_distance_plot.pdf", + "star_salmon/rseqc/inner_distance/pdf/WT_REP2.inner_distance_plot.pdf", + "star_salmon/rseqc/inner_distance/rscript", + "star_salmon/rseqc/inner_distance/rscript/RAP1_IAA_30M_REP1.inner_distance_plot.r", + "star_salmon/rseqc/inner_distance/rscript/WT_REP1.inner_distance_plot.r", + "star_salmon/rseqc/inner_distance/rscript/WT_REP2.inner_distance_plot.r", + "star_salmon/rseqc/inner_distance/txt", + "star_salmon/rseqc/inner_distance/txt/RAP1_IAA_30M_REP1.inner_distance.txt", + "star_salmon/rseqc/inner_distance/txt/RAP1_IAA_30M_REP1.inner_distance_freq.txt", + "star_salmon/rseqc/inner_distance/txt/RAP1_IAA_30M_REP1.inner_distance_mean.txt", + "star_salmon/rseqc/inner_distance/txt/RAP1_UNINDUCED_REP1.inner_distance.txt", + "star_salmon/rseqc/inner_distance/txt/RAP1_UNINDUCED_REP2.inner_distance.txt", + "star_salmon/rseqc/inner_distance/txt/WT_REP1.inner_distance.txt", + "star_salmon/rseqc/inner_distance/txt/WT_REP1.inner_distance_freq.txt", + "star_salmon/rseqc/inner_distance/txt/WT_REP1.inner_distance_mean.txt", + "star_salmon/rseqc/inner_distance/txt/WT_REP2.inner_distance.txt", + "star_salmon/rseqc/inner_distance/txt/WT_REP2.inner_distance_freq.txt", + "star_salmon/rseqc/inner_distance/txt/WT_REP2.inner_distance_mean.txt", + "star_salmon/rseqc/junction_annotation", + "star_salmon/rseqc/junction_annotation/bed", + "star_salmon/rseqc/junction_annotation/bed/RAP1_IAA_30M_REP1.junction.Interact.bed", + "star_salmon/rseqc/junction_annotation/bed/RAP1_IAA_30M_REP1.junction.bed", + "star_salmon/rseqc/junction_annotation/bed/RAP1_UNINDUCED_REP1.junction.Interact.bed", + "star_salmon/rseqc/junction_annotation/bed/RAP1_UNINDUCED_REP1.junction.bed", + "star_salmon/rseqc/junction_annotation/bed/RAP1_UNINDUCED_REP2.junction.Interact.bed", + "star_salmon/rseqc/junction_annotation/bed/RAP1_UNINDUCED_REP2.junction.bed", + "star_salmon/rseqc/junction_annotation/bed/WT_REP1.junction.Interact.bed", + "star_salmon/rseqc/junction_annotation/bed/WT_REP1.junction.bed", + "star_salmon/rseqc/junction_annotation/bed/WT_REP2.junction.Interact.bed", + "star_salmon/rseqc/junction_annotation/bed/WT_REP2.junction.bed", + "star_salmon/rseqc/junction_annotation/log", + "star_salmon/rseqc/junction_annotation/log/RAP1_IAA_30M_REP1.junction_annotation.log", + "star_salmon/rseqc/junction_annotation/log/RAP1_UNINDUCED_REP1.junction_annotation.log", + "star_salmon/rseqc/junction_annotation/log/RAP1_UNINDUCED_REP2.junction_annotation.log", + "star_salmon/rseqc/junction_annotation/log/WT_REP1.junction_annotation.log", + "star_salmon/rseqc/junction_annotation/log/WT_REP2.junction_annotation.log", + "star_salmon/rseqc/junction_annotation/pdf", + "star_salmon/rseqc/junction_annotation/pdf/RAP1_IAA_30M_REP1.splice_events.pdf", + "star_salmon/rseqc/junction_annotation/pdf/RAP1_IAA_30M_REP1.splice_junction.pdf", + "star_salmon/rseqc/junction_annotation/pdf/RAP1_UNINDUCED_REP1.splice_events.pdf", + "star_salmon/rseqc/junction_annotation/pdf/RAP1_UNINDUCED_REP1.splice_junction.pdf", + "star_salmon/rseqc/junction_annotation/pdf/RAP1_UNINDUCED_REP2.splice_events.pdf", + "star_salmon/rseqc/junction_annotation/pdf/RAP1_UNINDUCED_REP2.splice_junction.pdf", + "star_salmon/rseqc/junction_annotation/pdf/WT_REP1.splice_events.pdf", + "star_salmon/rseqc/junction_annotation/pdf/WT_REP1.splice_junction.pdf", + "star_salmon/rseqc/junction_annotation/pdf/WT_REP2.splice_events.pdf", + "star_salmon/rseqc/junction_annotation/pdf/WT_REP2.splice_junction.pdf", + "star_salmon/rseqc/junction_annotation/rscript", + "star_salmon/rseqc/junction_annotation/rscript/RAP1_IAA_30M_REP1.junction_plot.r", + "star_salmon/rseqc/junction_annotation/rscript/RAP1_UNINDUCED_REP1.junction_plot.r", + "star_salmon/rseqc/junction_annotation/rscript/RAP1_UNINDUCED_REP2.junction_plot.r", + "star_salmon/rseqc/junction_annotation/rscript/WT_REP1.junction_plot.r", + "star_salmon/rseqc/junction_annotation/rscript/WT_REP2.junction_plot.r", + "star_salmon/rseqc/junction_annotation/xls", + "star_salmon/rseqc/junction_annotation/xls/RAP1_IAA_30M_REP1.junction.xls", + "star_salmon/rseqc/junction_annotation/xls/RAP1_UNINDUCED_REP1.junction.xls", + "star_salmon/rseqc/junction_annotation/xls/RAP1_UNINDUCED_REP2.junction.xls", + "star_salmon/rseqc/junction_annotation/xls/WT_REP1.junction.xls", + "star_salmon/rseqc/junction_annotation/xls/WT_REP2.junction.xls", + "star_salmon/rseqc/junction_saturation", + "star_salmon/rseqc/junction_saturation/pdf", + "star_salmon/rseqc/junction_saturation/pdf/RAP1_IAA_30M_REP1.junctionSaturation_plot.pdf", + "star_salmon/rseqc/junction_saturation/pdf/RAP1_UNINDUCED_REP1.junctionSaturation_plot.pdf", + "star_salmon/rseqc/junction_saturation/pdf/RAP1_UNINDUCED_REP2.junctionSaturation_plot.pdf", + "star_salmon/rseqc/junction_saturation/pdf/WT_REP1.junctionSaturation_plot.pdf", + "star_salmon/rseqc/junction_saturation/pdf/WT_REP2.junctionSaturation_plot.pdf", + "star_salmon/rseqc/junction_saturation/rscript", + "star_salmon/rseqc/junction_saturation/rscript/RAP1_IAA_30M_REP1.junctionSaturation_plot.r", + "star_salmon/rseqc/junction_saturation/rscript/RAP1_UNINDUCED_REP1.junctionSaturation_plot.r", + "star_salmon/rseqc/junction_saturation/rscript/RAP1_UNINDUCED_REP2.junctionSaturation_plot.r", + "star_salmon/rseqc/junction_saturation/rscript/WT_REP1.junctionSaturation_plot.r", + "star_salmon/rseqc/junction_saturation/rscript/WT_REP2.junctionSaturation_plot.r", + "star_salmon/rseqc/read_distribution", + "star_salmon/rseqc/read_distribution/RAP1_IAA_30M_REP1.read_distribution.txt", + "star_salmon/rseqc/read_distribution/RAP1_UNINDUCED_REP1.read_distribution.txt", + "star_salmon/rseqc/read_distribution/RAP1_UNINDUCED_REP2.read_distribution.txt", + "star_salmon/rseqc/read_distribution/WT_REP1.read_distribution.txt", + "star_salmon/rseqc/read_distribution/WT_REP2.read_distribution.txt", + "star_salmon/rseqc/read_duplication", + "star_salmon/rseqc/read_duplication/pdf", + "star_salmon/rseqc/read_duplication/pdf/RAP1_IAA_30M_REP1.DupRate_plot.pdf", + "star_salmon/rseqc/read_duplication/pdf/RAP1_UNINDUCED_REP1.DupRate_plot.pdf", + "star_salmon/rseqc/read_duplication/pdf/RAP1_UNINDUCED_REP2.DupRate_plot.pdf", + "star_salmon/rseqc/read_duplication/pdf/WT_REP1.DupRate_plot.pdf", + "star_salmon/rseqc/read_duplication/pdf/WT_REP2.DupRate_plot.pdf", + "star_salmon/rseqc/read_duplication/rscript", + "star_salmon/rseqc/read_duplication/rscript/RAP1_IAA_30M_REP1.DupRate_plot.r", + "star_salmon/rseqc/read_duplication/rscript/RAP1_UNINDUCED_REP1.DupRate_plot.r", + "star_salmon/rseqc/read_duplication/rscript/RAP1_UNINDUCED_REP2.DupRate_plot.r", + "star_salmon/rseqc/read_duplication/rscript/WT_REP1.DupRate_plot.r", + "star_salmon/rseqc/read_duplication/rscript/WT_REP2.DupRate_plot.r", + "star_salmon/rseqc/read_duplication/xls", + "star_salmon/rseqc/read_duplication/xls/RAP1_IAA_30M_REP1.pos.DupRate.xls", + "star_salmon/rseqc/read_duplication/xls/RAP1_IAA_30M_REP1.seq.DupRate.xls", + "star_salmon/rseqc/read_duplication/xls/RAP1_UNINDUCED_REP1.pos.DupRate.xls", + "star_salmon/rseqc/read_duplication/xls/RAP1_UNINDUCED_REP1.seq.DupRate.xls", + "star_salmon/rseqc/read_duplication/xls/RAP1_UNINDUCED_REP2.pos.DupRate.xls", + "star_salmon/rseqc/read_duplication/xls/RAP1_UNINDUCED_REP2.seq.DupRate.xls", + "star_salmon/rseqc/read_duplication/xls/WT_REP1.pos.DupRate.xls", + "star_salmon/rseqc/read_duplication/xls/WT_REP1.seq.DupRate.xls", + "star_salmon/rseqc/read_duplication/xls/WT_REP2.pos.DupRate.xls", + "star_salmon/rseqc/read_duplication/xls/WT_REP2.seq.DupRate.xls", "star_salmon/salmon.merged.gene.SummarizedExperiment.rds", "star_salmon/salmon.merged.gene_counts.tsv", "star_salmon/salmon.merged.gene_counts_length_scaled.tsv", @@ -588,6 +1316,7 @@ "star_salmon/salmon.merged.transcript_counts.tsv", "star_salmon/salmon.merged.transcript_lengths.tsv", "star_salmon/salmon.merged.transcript_tpm.tsv", + "star_salmon/salmon.merged.tx2gene.tsv", "star_salmon/samtools_stats", "star_salmon/samtools_stats/RAP1_IAA_30M_REP1.markdup.sorted.bam.flagstat", "star_salmon/samtools_stats/RAP1_IAA_30M_REP1.markdup.sorted.bam.idxstats", @@ -619,7 +1348,52 @@ "star_salmon/samtools_stats/WT_REP2.sorted.bam.flagstat", "star_salmon/samtools_stats/WT_REP2.sorted.bam.idxstats", "star_salmon/samtools_stats/WT_REP2.sorted.bam.stats", - "star_salmon/tx2gene.tsv", + "star_salmon/stringtie", + "star_salmon/stringtie/RAP1_IAA_30M_REP1.ballgown", + "star_salmon/stringtie/RAP1_IAA_30M_REP1.ballgown/e2t.ctab", + "star_salmon/stringtie/RAP1_IAA_30M_REP1.ballgown/e_data.ctab", + "star_salmon/stringtie/RAP1_IAA_30M_REP1.ballgown/i2t.ctab", + "star_salmon/stringtie/RAP1_IAA_30M_REP1.ballgown/i_data.ctab", + "star_salmon/stringtie/RAP1_IAA_30M_REP1.ballgown/t_data.ctab", + "star_salmon/stringtie/RAP1_IAA_30M_REP1.coverage.gtf", + "star_salmon/stringtie/RAP1_IAA_30M_REP1.gene.abundance.txt", + "star_salmon/stringtie/RAP1_IAA_30M_REP1.transcripts.gtf", + "star_salmon/stringtie/RAP1_UNINDUCED_REP1.ballgown", + "star_salmon/stringtie/RAP1_UNINDUCED_REP1.ballgown/e2t.ctab", + "star_salmon/stringtie/RAP1_UNINDUCED_REP1.ballgown/e_data.ctab", + "star_salmon/stringtie/RAP1_UNINDUCED_REP1.ballgown/i2t.ctab", + "star_salmon/stringtie/RAP1_UNINDUCED_REP1.ballgown/i_data.ctab", + "star_salmon/stringtie/RAP1_UNINDUCED_REP1.ballgown/t_data.ctab", + "star_salmon/stringtie/RAP1_UNINDUCED_REP1.coverage.gtf", + "star_salmon/stringtie/RAP1_UNINDUCED_REP1.gene.abundance.txt", + "star_salmon/stringtie/RAP1_UNINDUCED_REP1.transcripts.gtf", + "star_salmon/stringtie/RAP1_UNINDUCED_REP2.ballgown", + "star_salmon/stringtie/RAP1_UNINDUCED_REP2.ballgown/e2t.ctab", + "star_salmon/stringtie/RAP1_UNINDUCED_REP2.ballgown/e_data.ctab", + "star_salmon/stringtie/RAP1_UNINDUCED_REP2.ballgown/i2t.ctab", + "star_salmon/stringtie/RAP1_UNINDUCED_REP2.ballgown/i_data.ctab", + "star_salmon/stringtie/RAP1_UNINDUCED_REP2.ballgown/t_data.ctab", + "star_salmon/stringtie/RAP1_UNINDUCED_REP2.coverage.gtf", + "star_salmon/stringtie/RAP1_UNINDUCED_REP2.gene.abundance.txt", + "star_salmon/stringtie/RAP1_UNINDUCED_REP2.transcripts.gtf", + "star_salmon/stringtie/WT_REP1.ballgown", + "star_salmon/stringtie/WT_REP1.ballgown/e2t.ctab", + "star_salmon/stringtie/WT_REP1.ballgown/e_data.ctab", + "star_salmon/stringtie/WT_REP1.ballgown/i2t.ctab", + "star_salmon/stringtie/WT_REP1.ballgown/i_data.ctab", + "star_salmon/stringtie/WT_REP1.ballgown/t_data.ctab", + "star_salmon/stringtie/WT_REP1.coverage.gtf", + "star_salmon/stringtie/WT_REP1.gene.abundance.txt", + "star_salmon/stringtie/WT_REP1.transcripts.gtf", + "star_salmon/stringtie/WT_REP2.ballgown", + "star_salmon/stringtie/WT_REP2.ballgown/e2t.ctab", + "star_salmon/stringtie/WT_REP2.ballgown/e_data.ctab", + "star_salmon/stringtie/WT_REP2.ballgown/i2t.ctab", + "star_salmon/stringtie/WT_REP2.ballgown/i_data.ctab", + "star_salmon/stringtie/WT_REP2.ballgown/t_data.ctab", + "star_salmon/stringtie/WT_REP2.coverage.gtf", + "star_salmon/stringtie/WT_REP2.gene.abundance.txt", + "star_salmon/stringtie/WT_REP2.transcripts.gtf", "trimgalore", "trimgalore/RAP1_IAA_30M_REP1_trimmed_1.fastq.gz_trimming_report.txt", "trimgalore/RAP1_IAA_30M_REP1_trimmed_2.fastq.gz_trimming_report.txt", @@ -636,7 +1410,16 @@ "cutadapt_filtered_reads_plot.txt:md5,6fa381627f7c1f664f3d4b2cb79cce90", "cutadapt_trimmed_sequences_plot_3_Counts.txt:md5,13dfa866fd91dbb072689efe9aa83b1f", "cutadapt_trimmed_sequences_plot_3_Obs_Exp.txt:md5,07145dd8dd3db654859b18eb0389046c", - "fastqc_sequence_length_distribution_plot.txt:md5,6fe2c985606abad947bcca99b015ae33", + "fastqc_raw-status-check-heatmap.txt:md5,5a89b0d8d162f6b1dbdaf39457bbc03b", + "fastqc_raw_adapter_content_plot.txt:md5,da0389be84cfdd189b1d045212eb2974", + "fastqc_raw_overrepresented_sequences_plot.txt:md5,25d88ea8a72f55e8a374ae802bc7f0b1", + "fastqc_raw_per_base_n_content_plot.txt:md5,d368d7e36ca2f73dcde61f2b486d8213", + "fastqc_raw_per_base_sequence_quality_plot.txt:md5,5c3065b549129702b185ea1b817da420", + "fastqc_raw_per_sequence_gc_content_plot_Counts.txt:md5,9ddaa50167117d3c9188ccf015427704", + "fastqc_raw_per_sequence_gc_content_plot_Percentages.txt:md5,f10ee2881b61308af35f304aa3d810a3", + "fastqc_raw_per_sequence_quality_scores_plot.txt:md5,b5f9a02933e3065952237afd2ec9ce82", + "fastqc_raw_sequence_counts_plot.txt:md5,cbae4979d5db66d3b894abcf8d1c453c", + "fastqc_raw_sequence_duplication_levels_plot.txt:md5,8812cee16f6ca65e2c33635754de1772", "fastqc_trimmed-status-check-heatmap.txt:md5,22a03548736b88b23be6bc0c9ef1b4a6", "fastqc_trimmed_overrepresented_sequences_plot.txt:md5,c755e9d044ea1a82b2c8edde867b4878", "fastqc_trimmed_per_base_n_content_plot.txt:md5,418610c1ce119cb786ad434db75d366e", @@ -646,13 +1429,18 @@ "fastqc_trimmed_per_sequence_quality_scores_plot.txt:md5,0f9834cc19f76dd5c87cf8cba7435a7c", "fastqc_trimmed_sequence_counts_plot.txt:md5,9fd642bdd1da354f296bb8092205608f", "fastqc_trimmed_sequence_duplication_levels_plot.txt:md5,0758257b497283b1ef28171e694db6db", - "multiqc_citations.txt:md5,ef51c78faebdd32bad296ba14406b41e", - "multiqc_cutadapt.txt:md5,583b7b9ba76b26162bb9610ed746454b", + "multiqc_citations.txt:md5,2d2ab6df367e36e98e081c33dec187a0", + "multiqc_fastqc_fastqc_raw.txt:md5,81c3c1a2575a1891a7f2a9637a0f2cc0", "multiqc_fastqc_fastqc_trimmed.txt:md5,54743154d0e8858980acffeb5b6f6a97", + "multiqc_featurecounts_biotype_plot.txt:md5,ef5643bbc0919c3d82ae05f3f01100a5", "multiqc_samtools_idxstats.txt:md5,fd7d03a91f0b9e01a6939941f7f2243f", "picard_MarkIlluminaAdapters_histogram.txt:md5,d41d8cd98f00b204e9800998ecf8427e", "picard_MeanQualityByCycle_histogram.txt:md5,d41d8cd98f00b204e9800998ecf8427e", "picard_QualityScoreDistribution_histogram.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "qualimap_gene_coverage_profile_Counts.txt:md5,02044ed1bf1eca19a8a87c9971cdc049", + "qualimap_gene_coverage_profile_Normalised.txt:md5,eeeea7f50278b3b335bef545784abbfa", + "qualimap_rnaseq_cov_hist.txt:md5,51407e597076f3a7f98622213bea6bce", + "rseqc_infer_experiment_plot.txt:md5,e4e48561a487982dcc87f48421fe4880", "samtools-idxstats-mapped-reads-plot_Normalised_Counts.txt:md5,75acd04232d1804b5f960ee4c5db4722", "samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts.txt:md5,ae45731d8d4595f77e6b271004f3a070", "samtools-idxstats-mapped-reads-plot_Raw_Counts.txt:md5,01637c600d3840500851eb4118564cc6", @@ -686,7 +1474,7 @@ "observed_bias_3p.gz:md5,92bcd0592d22a6a58d0360fc76103e56", "cmd_info.json:md5,fe66c9d876645b9260d8c2488157d4d4", "lib_format_counts.json:md5,088fd51db07022ffde47033bbd029400", - "tx2gene.tsv:md5,0e2418a69d2eba45097ebffc2f700bfe", + "salmon.merged.tx2gene.tsv:md5,0e2418a69d2eba45097ebffc2f700bfe", "ambig_info.tsv:md5,f9a605d54a0a103566f7a9b8e0867a73", "expected_bias.gz:md5,3407f87245d0003e0ffbfdf6d8c04f20", "observed_bias.gz:md5,92bcd0592d22a6a58d0360fc76103e56", @@ -712,18 +1500,73 @@ "observed_bias.gz:md5,92bcd0592d22a6a58d0360fc76103e56", "observed_bias_3p.gz:md5,92bcd0592d22a6a58d0360fc76103e56", "cmd_info.json:md5,3a51e7db950cee84bed0b13e329f1934", + "RAP1_IAA_30M_REP1.biotype_counts_mqc.tsv:md5,6940e190bb388be56f282aa01e916466", + "RAP1_IAA_30M_REP1.biotype_counts_rrna_mqc.tsv:md5,dde2de0cb90e10d0195c726f768e9941", + "RAP1_IAA_30M_REP1.featureCounts.tsv:md5,07bd87d86ba5c6c3ceff36518183417d", + "RAP1_UNINDUCED_REP1.biotype_counts_mqc.tsv:md5,d241d50e582ceb97e6f16b3556f5f5a9", + "RAP1_UNINDUCED_REP1.biotype_counts_rrna_mqc.tsv:md5,845ff9059c72bc6722a8de69776e22bb", + "RAP1_UNINDUCED_REP1.featureCounts.tsv:md5,cb48d282dde8d10d5e4b1680e1a79ef4", + "RAP1_UNINDUCED_REP2.biotype_counts_mqc.tsv:md5,b621ce1e803d8670ece6c66391c33ba4", + "RAP1_UNINDUCED_REP2.biotype_counts_rrna_mqc.tsv:md5,6d3fa4c88c7fe61f638e4624ad5e22f0", + "RAP1_UNINDUCED_REP2.featureCounts.tsv:md5,5c96326d9edb98d18322d506394dda1a", + "WT_REP1.biotype_counts_mqc.tsv:md5,e0dbe5dcff076b97775677fd64b29b04", + "WT_REP1.biotype_counts_rrna_mqc.tsv:md5,8ef76d717492ca23764938aee8ea33a9", + "WT_REP1.featureCounts.tsv:md5,6c92c50e4085b5aa6fe7001b9e61e0a2", + "WT_REP2.biotype_counts_mqc.tsv:md5,5cb8f29f175d07b3d8f8464bf8fcd82b", + "WT_REP2.biotype_counts_rrna_mqc.tsv:md5,12294618fe44df1e7f39348372dcb481", + "WT_REP2.featureCounts.tsv:md5,350ab8987337f4c7510801c0cc404ad8", "RAP1_IAA_30M_REP1.SJ.out.tab:md5,ea95e243278af55534f2c52eb5fff7ee", "RAP1_UNINDUCED_REP1.SJ.out.tab:md5,e548d13942535dc0821f3ec6d9743ec8", "RAP1_UNINDUCED_REP2.SJ.out.tab:md5,1f294365343a1a5e95682792fdb77033", "WT_REP1.SJ.out.tab:md5,1350c2fa6a675bf107386c6cd3fc5204", "WT_REP2.SJ.out.tab:md5,f6cc03643a5e3c1025a5b4754eb1be23", - "tx2gene.tsv:md5,0e2418a69d2eba45097ebffc2f700bfe" + "coverage_profile_along_genes_(high).txt:md5,fcb06d460810c0555de5396b9dae05e8", + "coverage_profile_along_genes_(low).txt:md5,e3c9a1ddfdb89f8534ff7548b70fce32", + "coverage_profile_along_genes_(total).txt:md5,e3c9a1ddfdb89f8534ff7548b70fce32", + "coverage_profile_along_genes_(high).txt:md5,9f1e29a4d6eec52e8796b080daaedca3", + "coverage_profile_along_genes_(low).txt:md5,353f42a84ff34167646fc83909eac2ff", + "coverage_profile_along_genes_(total).txt:md5,353f42a84ff34167646fc83909eac2ff", + "coverage_profile_along_genes_(high).txt:md5,3b20a736708df02ea8c86dc5829ae67e", + "coverage_profile_along_genes_(low).txt:md5,02b314b76ef1317f20e129412340755d", + "coverage_profile_along_genes_(total).txt:md5,02b314b76ef1317f20e129412340755d", + "coverage_profile_along_genes_(high).txt:md5,8bf366c7dbc6170035ee64a057c581f1", + "coverage_profile_along_genes_(low).txt:md5,a9102de3ff9679d1f7a86afa85997211", + "coverage_profile_along_genes_(total).txt:md5,a9102de3ff9679d1f7a86afa85997211", + "coverage_profile_along_genes_(high).txt:md5,3f13eb908d6e97e6831306e9527cc2e3", + "coverage_profile_along_genes_(low).txt:md5,24df553662d0cedaa74cf06a8fead40b", + "coverage_profile_along_genes_(total).txt:md5,24df553662d0cedaa74cf06a8fead40b", + "RAP1_IAA_30M_REP1.infer_experiment.txt:md5,169d25b95c008bebe9ce886fea6a4e33", + "RAP1_UNINDUCED_REP1.infer_experiment.txt:md5,2ca0ce0fd3204bd2cc4812c4655b1f1f", + "RAP1_UNINDUCED_REP2.infer_experiment.txt:md5,7d5705880188f9beab1939e08d6b8f40", + "WT_REP1.infer_experiment.txt:md5,cb92e59571467519658ee87393a2f065", + "WT_REP2.infer_experiment.txt:md5,82e23b329ee60709f343bc2d17d43b14", + "salmon.merged.tx2gene.tsv:md5,0e2418a69d2eba45097ebffc2f700bfe", + "e2t.ctab:md5,54dd6de2daa90e973f47524a738a3d69", + "e_data.ctab:md5,3f149502efe2a9d4bac98b1dd18c15e7", + "i2t.ctab:md5,dda3d3ccd7d4184d947c654ae73efb7b", + "i_data.ctab:md5,a052ab04070e72cc318fb7680b0764e3", + "e2t.ctab:md5,54dd6de2daa90e973f47524a738a3d69", + "e_data.ctab:md5,e82329a443b9ff50a86e42aff91bd704", + "i2t.ctab:md5,dda3d3ccd7d4184d947c654ae73efb7b", + "i_data.ctab:md5,d279003d92f7feef9adb31203f84474a", + "e2t.ctab:md5,54dd6de2daa90e973f47524a738a3d69", + "e_data.ctab:md5,10e2d00f93f9e74f224bd3c1bfbeb29b", + "i2t.ctab:md5,dda3d3ccd7d4184d947c654ae73efb7b", + "i_data.ctab:md5,525413b70bcf62c24c8f96182e09883e", + "e2t.ctab:md5,54dd6de2daa90e973f47524a738a3d69", + "e_data.ctab:md5,9aa371befc36478d7720d3ea275e6f4d", + "i2t.ctab:md5,dda3d3ccd7d4184d947c654ae73efb7b", + "i_data.ctab:md5,907ab2e06346df131cbdb929afc005a8", + "e2t.ctab:md5,54dd6de2daa90e973f47524a738a3d69", + "e_data.ctab:md5,b03f3118d1aa58fceadcb3311028e856", + "i2t.ctab:md5,dda3d3ccd7d4184d947c654ae73efb7b", + "i_data.ctab:md5,041edee3193df311f621c09f4991892b" ] ], "meta": { "nf-test": "0.9.3", - "nextflow": "25.04.0" + "nextflow": "25.10.2" }, - "timestamp": "2025-12-04T17:04:49.688226" + "timestamp": "2025-12-18T13:37:11.453558162" } } diff --git a/tests/skip_qc.nf.test.snap b/tests/skip_qc.nf.test.snap index b27d87bdc..8e1aec12d 100644 --- a/tests/skip_qc.nf.test.snap +++ b/tests/skip_qc.nf.test.snap @@ -10,13 +10,10 @@ "cat": 9.5 }, "CUSTOM_CATADDITIONALFASTA": { - "python": null - }, - "CUSTOM_GETCHROMSIZES": { - "getchromsizes": 1.21 + "python": "3.12.2" }, "FQ_LINT": { - "fq": "0.12.0 (2024-07-08)" + "fq": "0.12.0" }, "GTF2BED": { "perl": "5.26.2" @@ -30,14 +27,15 @@ "GUNZIP_GTF": { "gunzip": 1.13 }, + "SAMTOOLS_FAIDX": { + "samtools": "1.22.1" + }, "STAR_GENOMEGENERATE": { "gawk": "5.1.0", "samtools": 1.21, "star": "2.7.11b" }, "TRIMGALORE": { - "cutadapt": 4.9, - "pigz": 2.8, "trimgalore": "0.6.10" }, "UNTAR_SALMON_INDEX": { @@ -82,10 +80,10 @@ ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.4" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-01-28T14:26:25.392367126" + "timestamp": "2026-02-04T17:37:32.425706397" }, "Params: --skip_qc": { "content": [ @@ -97,23 +95,29 @@ "BEDTOOLS_GENOMECOV_FW": { "bedtools": "2.31.1" }, + "BEDTOOLS_GENOMECOV_REV": { + "bedtools": "2.31.1" + }, "CAT_FASTQ": { "cat": 9.5 }, "CUSTOM_CATADDITIONALFASTA": { "python": "3.12.2" }, - "CUSTOM_GETCHROMSIZES": { - "getchromsizes": 1.21 - }, "CUSTOM_TX2GENE": { "python": "3.10.4" }, "FQ_LINT": { - "fq": "0.12.0 (2024-07-08)" + "fq": "0.12.0" + }, + "FQ_LINT_AFTER_BBSPLIT": { + "fq": "0.12.0" + }, + "FQ_LINT_AFTER_TRIMMING": { + "fq": "0.12.0" }, "FQ_SUBSAMPLE": { - "fq": "0.12.0 (2024-07-08)" + "fq": "0.12.0" }, "GTF2BED": { "perl": "5.26.2" @@ -128,25 +132,28 @@ "gunzip": 1.13 }, "PICARD_MARKDUPLICATES": { - "picard": "3.1.1" + "picard": "3.4.0" }, "SALMON_QUANT": { "salmon": "1.10.3" }, + "SAMTOOLS_FAIDX": { + "samtools": "1.22.1" + }, "SAMTOOLS_FLAGSTAT": { - "samtools": 1.21 + "samtools": "1.22.1" }, "SAMTOOLS_IDXSTATS": { - "samtools": 1.21 + "samtools": "1.22.1" }, "SAMTOOLS_INDEX": { - "samtools": 1.21 + "samtools": "1.22.1" }, "SAMTOOLS_SORT": { - "samtools": 1.21 + "samtools": "1.22.1" }, "SAMTOOLS_STATS": { - "samtools": 1.21 + "samtools": "1.22.1" }, "SE_GENE_UNIFIED": { "bioconductor-summarizedexperiment": "1.32.0" @@ -168,8 +175,6 @@ "stringtie": "2.2.3" }, "TRIMGALORE": { - "cutadapt": 4.9, - "pigz": 2.8, "trimgalore": "0.6.10" }, "TXIMETA_TXIMPORT": { @@ -215,18 +220,18 @@ "fastqc/trim/WT_REP2_trimmed_2_val_2_fastqc.html", "fastqc/trim/WT_REP2_trimmed_2_val_2_fastqc.zip", "fq_lint", + "fq_lint/bbsplit", + "fq_lint/bbsplit/RAP1_IAA_30M_REP1.fq_lint.txt", + "fq_lint/bbsplit/RAP1_UNINDUCED_REP1.fq_lint.txt", + "fq_lint/bbsplit/RAP1_UNINDUCED_REP2.fq_lint.txt", + "fq_lint/bbsplit/WT_REP1.fq_lint.txt", + "fq_lint/bbsplit/WT_REP2.fq_lint.txt", "fq_lint/raw", "fq_lint/raw/RAP1_IAA_30M_REP1.fq_lint.txt", "fq_lint/raw/RAP1_UNINDUCED_REP1.fq_lint.txt", "fq_lint/raw/RAP1_UNINDUCED_REP2.fq_lint.txt", "fq_lint/raw/WT_REP1.fq_lint.txt", "fq_lint/raw/WT_REP2.fq_lint.txt", - "fq_lint/sortmerna", - "fq_lint/sortmerna/RAP1_IAA_30M_REP1.fq_lint.txt", - "fq_lint/sortmerna/RAP1_UNINDUCED_REP1.fq_lint.txt", - "fq_lint/sortmerna/RAP1_UNINDUCED_REP2.fq_lint.txt", - "fq_lint/sortmerna/WT_REP1.fq_lint.txt", - "fq_lint/sortmerna/WT_REP2.fq_lint.txt", "fq_lint/trimmed", "fq_lint/trimmed/RAP1_IAA_30M_REP1.fq_lint.txt", "fq_lint/trimmed/RAP1_UNINDUCED_REP1.fq_lint.txt", @@ -237,6 +242,9 @@ "multiqc/star_salmon", "multiqc/star_salmon/multiqc_report.html", "multiqc/star_salmon/multiqc_report_data", + "multiqc/star_salmon/multiqc_report_data/bbmap-bbsplit_plot.txt", + "multiqc/star_salmon/multiqc_report_data/bbmap.txt", + "multiqc/star_salmon/multiqc_report_data/bbsplit_stats_table.txt", "multiqc/star_salmon/multiqc_report_data/cutadapt_filtered_reads_plot.txt", "multiqc/star_salmon/multiqc_report_data/cutadapt_trimmed_sequences_plot_3_Counts.txt", "multiqc/star_salmon/multiqc_report_data/cutadapt_trimmed_sequences_plot_3_Obs_Exp.txt", @@ -284,6 +292,9 @@ "multiqc/star_salmon/multiqc_report_data/star_summary_table.txt", "multiqc/star_salmon/multiqc_report_plots", "multiqc/star_salmon/multiqc_report_plots/pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/bbmap-bbsplit_plot-cnt.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/bbmap-bbsplit_plot-pct.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/bbsplit_stats_table.pdf", "multiqc/star_salmon/multiqc_report_plots/pdf/cutadapt_filtered_reads_plot-cnt.pdf", "multiqc/star_salmon/multiqc_report_plots/pdf/cutadapt_filtered_reads_plot-pct.pdf", "multiqc/star_salmon/multiqc_report_plots/pdf/cutadapt_trimmed_sequences_plot_3_Counts.pdf", @@ -318,6 +329,9 @@ "multiqc/star_salmon/multiqc_report_plots/pdf/star_alignment_plot-pct.pdf", "multiqc/star_salmon/multiqc_report_plots/pdf/star_summary_table.pdf", "multiqc/star_salmon/multiqc_report_plots/png", + "multiqc/star_salmon/multiqc_report_plots/png/bbmap-bbsplit_plot-cnt.png", + "multiqc/star_salmon/multiqc_report_plots/png/bbmap-bbsplit_plot-pct.png", + "multiqc/star_salmon/multiqc_report_plots/png/bbsplit_stats_table.png", "multiqc/star_salmon/multiqc_report_plots/png/cutadapt_filtered_reads_plot-cnt.png", "multiqc/star_salmon/multiqc_report_plots/png/cutadapt_filtered_reads_plot-pct.png", "multiqc/star_salmon/multiqc_report_plots/png/cutadapt_trimmed_sequences_plot_3_Counts.png", @@ -352,6 +366,9 @@ "multiqc/star_salmon/multiqc_report_plots/png/star_alignment_plot-pct.png", "multiqc/star_salmon/multiqc_report_plots/png/star_summary_table.png", "multiqc/star_salmon/multiqc_report_plots/svg", + "multiqc/star_salmon/multiqc_report_plots/svg/bbmap-bbsplit_plot-cnt.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/bbmap-bbsplit_plot-pct.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/bbsplit_stats_table.svg", "multiqc/star_salmon/multiqc_report_plots/svg/cutadapt_filtered_reads_plot-cnt.svg", "multiqc/star_salmon/multiqc_report_plots/svg/cutadapt_filtered_reads_plot-pct.svg", "multiqc/star_salmon/multiqc_report_plots/svg/cutadapt_trimmed_sequences_plot_3_Counts.svg", @@ -478,7 +495,7 @@ "salmon/salmon.merged.transcript_counts.tsv", "salmon/salmon.merged.transcript_lengths.tsv", "salmon/salmon.merged.transcript_tpm.tsv", - "salmon/tx2gene.tsv", + "salmon/salmon.merged.tx2gene.tsv", "star_salmon", "star_salmon/RAP1_IAA_30M_REP1", "star_salmon/RAP1_IAA_30M_REP1.markdup.sorted.bam", @@ -613,6 +630,7 @@ "star_salmon/salmon.merged.transcript_counts.tsv", "star_salmon/salmon.merged.transcript_lengths.tsv", "star_salmon/salmon.merged.transcript_tpm.tsv", + "star_salmon/salmon.merged.tx2gene.tsv", "star_salmon/samtools_stats", "star_salmon/samtools_stats/RAP1_IAA_30M_REP1.markdup.sorted.bam.flagstat", "star_salmon/samtools_stats/RAP1_IAA_30M_REP1.markdup.sorted.bam.idxstats", @@ -690,7 +708,6 @@ "star_salmon/stringtie/WT_REP2.coverage.gtf", "star_salmon/stringtie/WT_REP2.gene.abundance.txt", "star_salmon/stringtie/WT_REP2.transcripts.gtf", - "star_salmon/tx2gene.tsv", "trimgalore", "trimgalore/RAP1_IAA_30M_REP1_trimmed_1.fastq.gz_trimming_report.txt", "trimgalore/RAP1_IAA_30M_REP1_trimmed_2.fastq.gz_trimming_report.txt", @@ -707,7 +724,6 @@ "cutadapt_filtered_reads_plot.txt:md5,6fa381627f7c1f664f3d4b2cb79cce90", "cutadapt_trimmed_sequences_plot_3_Counts.txt:md5,13dfa866fd91dbb072689efe9aa83b1f", "cutadapt_trimmed_sequences_plot_3_Obs_Exp.txt:md5,07145dd8dd3db654859b18eb0389046c", - "fastqc_sequence_length_distribution_plot.txt:md5,6fe2c985606abad947bcca99b015ae33", "fastqc_trimmed-status-check-heatmap.txt:md5,22a03548736b88b23be6bc0c9ef1b4a6", "fastqc_trimmed_overrepresented_sequences_plot.txt:md5,c755e9d044ea1a82b2c8edde867b4878", "fastqc_trimmed_per_base_n_content_plot.txt:md5,418610c1ce119cb786ad434db75d366e", @@ -718,7 +734,6 @@ "fastqc_trimmed_sequence_counts_plot.txt:md5,9fd642bdd1da354f296bb8092205608f", "fastqc_trimmed_sequence_duplication_levels_plot.txt:md5,0758257b497283b1ef28171e694db6db", "multiqc_citations.txt:md5,ef51c78faebdd32bad296ba14406b41e", - "multiqc_cutadapt.txt:md5,583b7b9ba76b26162bb9610ed746454b", "multiqc_fastqc_fastqc_trimmed.txt:md5,54743154d0e8858980acffeb5b6f6a97", "multiqc_samtools_idxstats.txt:md5,8b8f6cb092004918c18319a8cd64eb4c", "picard_MarkIlluminaAdapters_histogram.txt:md5,d41d8cd98f00b204e9800998ecf8427e", @@ -757,7 +772,7 @@ "observed_bias_3p.gz:md5,92bcd0592d22a6a58d0360fc76103e56", "cmd_info.json:md5,fe66c9d876645b9260d8c2488157d4d4", "lib_format_counts.json:md5,088fd51db07022ffde47033bbd029400", - "tx2gene.tsv:md5,0e2418a69d2eba45097ebffc2f700bfe", + "salmon.merged.tx2gene.tsv:md5,0e2418a69d2eba45097ebffc2f700bfe", "ambig_info.tsv:md5,f9a605d54a0a103566f7a9b8e0867a73", "expected_bias.gz:md5,3407f87245d0003e0ffbfdf6d8c04f20", "observed_bias.gz:md5,92bcd0592d22a6a58d0360fc76103e56", @@ -788,6 +803,7 @@ "RAP1_UNINDUCED_REP2.SJ.out.tab:md5,1f294365343a1a5e95682792fdb77033", "WT_REP1.SJ.out.tab:md5,1350c2fa6a675bf107386c6cd3fc5204", "WT_REP2.SJ.out.tab:md5,f6cc03643a5e3c1025a5b4754eb1be23", + "salmon.merged.tx2gene.tsv:md5,0e2418a69d2eba45097ebffc2f700bfe", "e2t.ctab:md5,54dd6de2daa90e973f47524a738a3d69", "e_data.ctab:md5,3f149502efe2a9d4bac98b1dd18c15e7", "i2t.ctab:md5,dda3d3ccd7d4184d947c654ae73efb7b", @@ -807,14 +823,13 @@ "e2t.ctab:md5,54dd6de2daa90e973f47524a738a3d69", "e_data.ctab:md5,b03f3118d1aa58fceadcb3311028e856", "i2t.ctab:md5,dda3d3ccd7d4184d947c654ae73efb7b", - "i_data.ctab:md5,041edee3193df311f621c09f4991892b", - "tx2gene.tsv:md5,0e2418a69d2eba45097ebffc2f700bfe" + "i_data.ctab:md5,041edee3193df311f621c09f4991892b" ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.6" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-08-12T12:29:14.739888067" + "timestamp": "2026-02-26T14:38:09.870620885" } } \ No newline at end of file diff --git a/tests/skip_trimming.nf.test.snap b/tests/skip_trimming.nf.test.snap index e6d8743f9..61f4ea9c2 100644 --- a/tests/skip_trimming.nf.test.snap +++ b/tests/skip_trimming.nf.test.snap @@ -1,7 +1,7 @@ { "Params: --skip_trimming": { "content": [ - 204, + 209, { "BBMAP_BBSPLIT": { "bbmap": 39.18 @@ -9,37 +9,43 @@ "BEDTOOLS_GENOMECOV_FW": { "bedtools": "2.31.1" }, + "BEDTOOLS_GENOMECOV_REV": { + "bedtools": "2.31.1" + }, "CAT_FASTQ": { "cat": 9.5 }, "CUSTOM_CATADDITIONALFASTA": { "python": "3.12.2" }, - "CUSTOM_GETCHROMSIZES": { - "getchromsizes": 1.21 - }, "CUSTOM_TX2GENE": { "python": "3.10.4" }, - "DESEQ2_QC_PSEUDO": { + "DESEQ2_QC_BAM_SALMON": { "bioconductor-deseq2": "1.46.0", "r-base": "4.4.2" }, - "DESEQ2_QC_STAR_SALMON": { + "DESEQ2_QC_PSEUDO": { "bioconductor-deseq2": "1.46.0", "r-base": "4.4.2" }, "DUPRADAR": { - "bioconductor-dupradar": "1.32.0" + "bioconductor-dupradar": "1.38.0" }, "FASTQC": { "fastqc": "0.12.1" }, + "FASTQC_FILTERED": { + "fastqc": "0.12.1" + }, "FQ_LINT": { - "fq": "0.12.0 (2024-07-08)" + "fq": "0.12.0" + }, + "FQ_LINT_AFTER_BBSPLIT": { + "fq": "0.12.0" }, "FQ_SUBSAMPLE": { - "fq": "0.12.0 (2024-07-08)" + "fq": "0.12.0" }, "GTF2BED": { "perl": "5.26.2" @@ -57,52 +63,55 @@ "python": "3.9.5" }, "PICARD_MARKDUPLICATES": { - "picard": "3.1.1" + "picard": "3.4.0" }, "QUALIMAP_RNASEQ": { "qualimap": 2.3 }, "RSEQC_BAMSTAT": { - "rseqc": "5.0.2" + "rseqc": "5.0.4" }, "RSEQC_INFEREXPERIMENT": { - "rseqc": "5.0.2" + "rseqc": "5.0.4" }, "RSEQC_INNERDISTANCE": { - "rseqc": "5.0.2" + "rseqc": "5.0.4" }, "RSEQC_JUNCTIONANNOTATION": { - "rseqc": "5.0.2" + "rseqc": "5.0.4" }, "RSEQC_JUNCTIONSATURATION": { - "rseqc": "5.0.2" + "rseqc": "5.0.4" }, "RSEQC_READDISTRIBUTION": { - "rseqc": "5.0.2" + "rseqc": "5.0.4" }, "RSEQC_READDUPLICATION": { - "rseqc": "5.0.2" + "rseqc": "5.0.4" }, "SALMON_QUANT": { "salmon": "1.10.3" }, + "SAMTOOLS_FAIDX": { + "samtools": "1.22.1" + }, "SAMTOOLS_FLAGSTAT": { - "samtools": 1.21 + "samtools": "1.22.1" }, "SAMTOOLS_IDXSTATS": { - "samtools": 1.21 + "samtools": "1.22.1" }, "SAMTOOLS_INDEX": { - "samtools": 1.21 + "samtools": "1.22.1" }, "SAMTOOLS_SORT": { - "samtools": 1.21 + "samtools": "1.22.1" }, "SAMTOOLS_SORT_QUALIMAP": { - "samtools": 1.21 + "samtools": "1.22.1" }, "SAMTOOLS_STATS": { - "samtools": 1.21 + "samtools": "1.22.1" }, "SE_GENE_UNIFIED": { "bioconductor-summarizedexperiment": "1.32.0" @@ -151,6 +160,23 @@ "custom/out/genome_gfp.fasta", "custom/out/genome_gfp.gtf", "fastqc", + "fastqc/filtered", + "fastqc/filtered/RAP1_IAA_30M_REP1_filtered_1_fastqc.html", + "fastqc/filtered/RAP1_IAA_30M_REP1_filtered_1_fastqc.zip", + "fastqc/filtered/RAP1_IAA_30M_REP1_filtered_2_fastqc.html", + "fastqc/filtered/RAP1_IAA_30M_REP1_filtered_2_fastqc.zip", + "fastqc/filtered/RAP1_UNINDUCED_REP1_filtered_fastqc.html", + "fastqc/filtered/RAP1_UNINDUCED_REP1_filtered_fastqc.zip", + "fastqc/filtered/RAP1_UNINDUCED_REP2_filtered_fastqc.html", + "fastqc/filtered/RAP1_UNINDUCED_REP2_filtered_fastqc.zip", + "fastqc/filtered/WT_REP1_filtered_1_fastqc.html", + "fastqc/filtered/WT_REP1_filtered_1_fastqc.zip", + "fastqc/filtered/WT_REP1_filtered_2_fastqc.html", + "fastqc/filtered/WT_REP1_filtered_2_fastqc.zip", + "fastqc/filtered/WT_REP2_filtered_1_fastqc.html", + "fastqc/filtered/WT_REP2_filtered_1_fastqc.zip", + "fastqc/filtered/WT_REP2_filtered_2_fastqc.html", + "fastqc/filtered/WT_REP2_filtered_2_fastqc.zip", "fastqc/raw", "fastqc/raw/RAP1_IAA_30M_REP1_raw_1_fastqc.html", "fastqc/raw/RAP1_IAA_30M_REP1_raw_1_fastqc.zip", @@ -169,22 +195,36 @@ "fastqc/raw/WT_REP2_raw_2_fastqc.html", "fastqc/raw/WT_REP2_raw_2_fastqc.zip", "fq_lint", + "fq_lint/bbsplit", + "fq_lint/bbsplit/RAP1_IAA_30M_REP1.fq_lint.txt", + "fq_lint/bbsplit/RAP1_UNINDUCED_REP1.fq_lint.txt", + "fq_lint/bbsplit/RAP1_UNINDUCED_REP2.fq_lint.txt", + "fq_lint/bbsplit/WT_REP1.fq_lint.txt", + "fq_lint/bbsplit/WT_REP2.fq_lint.txt", "fq_lint/raw", "fq_lint/raw/RAP1_IAA_30M_REP1.fq_lint.txt", "fq_lint/raw/RAP1_UNINDUCED_REP1.fq_lint.txt", "fq_lint/raw/RAP1_UNINDUCED_REP2.fq_lint.txt", "fq_lint/raw/WT_REP1.fq_lint.txt", "fq_lint/raw/WT_REP2.fq_lint.txt", - "fq_lint/sortmerna", - "fq_lint/sortmerna/RAP1_IAA_30M_REP1.fq_lint.txt", - "fq_lint/sortmerna/RAP1_UNINDUCED_REP1.fq_lint.txt", - "fq_lint/sortmerna/RAP1_UNINDUCED_REP2.fq_lint.txt", - "fq_lint/sortmerna/WT_REP1.fq_lint.txt", - "fq_lint/sortmerna/WT_REP2.fq_lint.txt", "multiqc", "multiqc/star_salmon", "multiqc/star_salmon/multiqc_report.html", "multiqc/star_salmon/multiqc_report_data", + "multiqc/star_salmon/multiqc_report_data/bbmap-bbsplit_plot.txt", + "multiqc/star_salmon/multiqc_report_data/bbmap.txt", + "multiqc/star_salmon/multiqc_report_data/bbsplit_stats_table.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_filtered-status-check-heatmap.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_filtered_adapter_content_plot.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_filtered_overrepresented_sequences_plot.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_filtered_per_base_n_content_plot.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_filtered_per_base_sequence_quality_plot.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_filtered_per_sequence_gc_content_plot_Counts.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_filtered_per_sequence_gc_content_plot_Percentages.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_filtered_per_sequence_quality_scores_plot.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_filtered_sequence_counts_plot.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_filtered_sequence_duplication_levels_plot.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_filtered_top_overrepresented_sequences_table.txt", "multiqc/star_salmon/multiqc_report_data/fastqc_raw-status-check-heatmap.txt", "multiqc/star_salmon/multiqc_report_data/fastqc_raw_adapter_content_plot.txt", "multiqc/star_salmon/multiqc_report_data/fastqc_raw_overrepresented_sequences_plot.txt", @@ -205,6 +245,7 @@ "multiqc/star_salmon/multiqc_report_data/multiqc_data.json", "multiqc/star_salmon/multiqc_report_data/multiqc_dupradar.txt", "multiqc/star_salmon/multiqc_report_data/multiqc_fail_strand_check_table.txt", + "multiqc/star_salmon/multiqc_report_data/multiqc_fastqc_fastqc_filtered.txt", "multiqc/star_salmon/multiqc_report_data/multiqc_fastqc_fastqc_raw.txt", "multiqc/star_salmon/multiqc_report_data/multiqc_featurecounts_biotype_plot.txt", "multiqc/star_salmon/multiqc_report_data/multiqc_general_stats.txt", @@ -260,8 +301,23 @@ "multiqc/star_salmon/multiqc_report_data/star_summary_table.txt", "multiqc/star_salmon/multiqc_report_plots", "multiqc/star_salmon/multiqc_report_plots/pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/bbmap-bbsplit_plot-cnt.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/bbmap-bbsplit_plot-pct.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/bbsplit_stats_table.pdf", "multiqc/star_salmon/multiqc_report_plots/pdf/dupradar.pdf", "multiqc/star_salmon/multiqc_report_plots/pdf/fail_strand_check_table.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_filtered-status-check-heatmap.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_filtered_adapter_content_plot.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_filtered_overrepresented_sequences_plot.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_filtered_per_base_n_content_plot.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_filtered_per_base_sequence_quality_plot.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_filtered_per_sequence_gc_content_plot_Counts.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_filtered_per_sequence_gc_content_plot_Percentages.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_filtered_per_sequence_quality_scores_plot.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_filtered_sequence_counts_plot-cnt.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_filtered_sequence_counts_plot-pct.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_filtered_sequence_duplication_levels_plot.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_filtered_top_overrepresented_sequences_table.pdf", "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_raw-status-check-heatmap.pdf", "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_raw_adapter_content_plot.pdf", "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_raw_overrepresented_sequences_plot.pdf", @@ -316,8 +372,23 @@ "multiqc/star_salmon/multiqc_report_plots/pdf/star_salmon_deseq2_pca.pdf", "multiqc/star_salmon/multiqc_report_plots/pdf/star_summary_table.pdf", "multiqc/star_salmon/multiqc_report_plots/png", + "multiqc/star_salmon/multiqc_report_plots/png/bbmap-bbsplit_plot-cnt.png", + "multiqc/star_salmon/multiqc_report_plots/png/bbmap-bbsplit_plot-pct.png", + "multiqc/star_salmon/multiqc_report_plots/png/bbsplit_stats_table.png", "multiqc/star_salmon/multiqc_report_plots/png/dupradar.png", "multiqc/star_salmon/multiqc_report_plots/png/fail_strand_check_table.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_filtered-status-check-heatmap.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_filtered_adapter_content_plot.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_filtered_overrepresented_sequences_plot.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_filtered_per_base_n_content_plot.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_filtered_per_base_sequence_quality_plot.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_filtered_per_sequence_gc_content_plot_Counts.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_filtered_per_sequence_gc_content_plot_Percentages.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_filtered_per_sequence_quality_scores_plot.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_filtered_sequence_counts_plot-cnt.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_filtered_sequence_counts_plot-pct.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_filtered_sequence_duplication_levels_plot.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_filtered_top_overrepresented_sequences_table.png", "multiqc/star_salmon/multiqc_report_plots/png/fastqc_raw-status-check-heatmap.png", "multiqc/star_salmon/multiqc_report_plots/png/fastqc_raw_adapter_content_plot.png", "multiqc/star_salmon/multiqc_report_plots/png/fastqc_raw_overrepresented_sequences_plot.png", @@ -372,8 +443,23 @@ "multiqc/star_salmon/multiqc_report_plots/png/star_salmon_deseq2_pca.png", "multiqc/star_salmon/multiqc_report_plots/png/star_summary_table.png", "multiqc/star_salmon/multiqc_report_plots/svg", + "multiqc/star_salmon/multiqc_report_plots/svg/bbmap-bbsplit_plot-cnt.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/bbmap-bbsplit_plot-pct.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/bbsplit_stats_table.svg", "multiqc/star_salmon/multiqc_report_plots/svg/dupradar.svg", "multiqc/star_salmon/multiqc_report_plots/svg/fail_strand_check_table.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_filtered-status-check-heatmap.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_filtered_adapter_content_plot.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_filtered_overrepresented_sequences_plot.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_filtered_per_base_n_content_plot.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_filtered_per_base_sequence_quality_plot.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_filtered_per_sequence_gc_content_plot_Counts.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_filtered_per_sequence_gc_content_plot_Percentages.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_filtered_per_sequence_quality_scores_plot.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_filtered_sequence_counts_plot-cnt.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_filtered_sequence_counts_plot-pct.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_filtered_sequence_duplication_levels_plot.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_filtered_top_overrepresented_sequences_table.svg", "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_raw-status-check-heatmap.svg", "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_raw_adapter_content_plot.svg", "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_raw_overrepresented_sequences_plot.svg", @@ -533,7 +619,7 @@ "salmon/salmon.merged.transcript_counts.tsv", "salmon/salmon.merged.transcript_lengths.tsv", "salmon/salmon.merged.transcript_tpm.tsv", - "salmon/tx2gene.tsv", + "salmon/salmon.merged.tx2gene.tsv", "star_salmon", "star_salmon/RAP1_IAA_30M_REP1", "star_salmon/RAP1_IAA_30M_REP1.markdup.sorted.bam", @@ -940,6 +1026,8 @@ "star_salmon/rseqc/inner_distance/txt/RAP1_IAA_30M_REP1.inner_distance.txt", "star_salmon/rseqc/inner_distance/txt/RAP1_IAA_30M_REP1.inner_distance_freq.txt", "star_salmon/rseqc/inner_distance/txt/RAP1_IAA_30M_REP1.inner_distance_mean.txt", + "star_salmon/rseqc/inner_distance/txt/RAP1_UNINDUCED_REP1.inner_distance.txt", + "star_salmon/rseqc/inner_distance/txt/RAP1_UNINDUCED_REP2.inner_distance.txt", "star_salmon/rseqc/inner_distance/txt/WT_REP1.inner_distance.txt", "star_salmon/rseqc/inner_distance/txt/WT_REP1.inner_distance_freq.txt", "star_salmon/rseqc/inner_distance/txt/WT_REP1.inner_distance_mean.txt", @@ -1040,6 +1128,7 @@ "star_salmon/salmon.merged.transcript_counts.tsv", "star_salmon/salmon.merged.transcript_lengths.tsv", "star_salmon/salmon.merged.transcript_tpm.tsv", + "star_salmon/salmon.merged.tx2gene.tsv", "star_salmon/samtools_stats", "star_salmon/samtools_stats/RAP1_IAA_30M_REP1.markdup.sorted.bam.flagstat", "star_salmon/samtools_stats/RAP1_IAA_30M_REP1.markdup.sorted.bam.idxstats", @@ -1116,8 +1205,7 @@ "star_salmon/stringtie/WT_REP2.ballgown/t_data.ctab", "star_salmon/stringtie/WT_REP2.coverage.gtf", "star_salmon/stringtie/WT_REP2.gene.abundance.txt", - "star_salmon/stringtie/WT_REP2.transcripts.gtf", - "star_salmon/tx2gene.tsv" + "star_salmon/stringtie/WT_REP2.transcripts.gtf" ], [ "genome_gfp.fasta:md5,e23e302af63736a199985a169fdac055", @@ -1176,7 +1264,7 @@ "observed_bias_3p.gz:md5,92bcd0592d22a6a58d0360fc76103e56", "cmd_info.json:md5,fe66c9d876645b9260d8c2488157d4d4", "lib_format_counts.json:md5,4bf135c93c37f90c493f761f2709a28b", - "tx2gene.tsv:md5,0e2418a69d2eba45097ebffc2f700bfe", + "salmon.merged.tx2gene.tsv:md5,0e2418a69d2eba45097ebffc2f700bfe", "ambig_info.tsv:md5,d1d3bd2a5617220b29a9063cb29f0578", "expected_bias.gz:md5,3407f87245d0003e0ffbfdf6d8c04f20", "observed_bias.gz:md5,92bcd0592d22a6a58d0360fc76103e56", @@ -1242,6 +1330,7 @@ "RAP1_UNINDUCED_REP2.infer_experiment.txt:md5,be4b322faffa736ab6ac39ff39c7aa9d", "WT_REP1.infer_experiment.txt:md5,7e8c79fa27780693523ad7acd8f109c4", "WT_REP2.infer_experiment.txt:md5,c895dbd41b5a075ad4032e2732145b6a", + "salmon.merged.tx2gene.tsv:md5,0e2418a69d2eba45097ebffc2f700bfe", "e2t.ctab:md5,54dd6de2daa90e973f47524a738a3d69", "e_data.ctab:md5,9225250f729f9688c50718ad82989f4c", "i2t.ctab:md5,dda3d3ccd7d4184d947c654ae73efb7b", @@ -1261,14 +1350,13 @@ "e2t.ctab:md5,54dd6de2daa90e973f47524a738a3d69", "e_data.ctab:md5,3bddb4b7381a62a0104b7004e5b71f20", "i2t.ctab:md5,dda3d3ccd7d4184d947c654ae73efb7b", - "i_data.ctab:md5,cd4c62717bb0a0db1a17e9c6d8788599", - "tx2gene.tsv:md5,0e2418a69d2eba45097ebffc2f700bfe" + "i_data.ctab:md5,cd4c62717bb0a0db1a17e9c6d8788599" ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.6" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-08-12T12:37:41.613639269" + "timestamp": "2026-02-26T14:42:47.379535303" } } \ No newline at end of file diff --git a/tests/star_rsem.nf.test.snap b/tests/star_rsem.nf.test.snap index cf5cea9a3..b12904c00 100644 --- a/tests/star_rsem.nf.test.snap +++ b/tests/star_rsem.nf.test.snap @@ -1,7 +1,7 @@ { "Params: --aligner star_rsem": { "content": [ - 212, + 221, { "BBMAP_BBSPLIT": { "bbmap": 39.18 @@ -9,14 +9,17 @@ "BEDTOOLS_GENOMECOV_FW": { "bedtools": "2.31.1" }, + "BEDTOOLS_GENOMECOV_REV": { + "bedtools": "2.31.1" + }, "CAT_FASTQ": { "cat": 9.5 }, "CUSTOM_CATADDITIONALFASTA": { "python": "3.12.2" }, - "CUSTOM_GETCHROMSIZES": { - "getchromsizes": 1.21 + "CUSTOM_RSEMMERGECOUNTS": { + "sed": 4.7 }, "CUSTOM_TX2GENE": { "python": "3.10.4" @@ -30,16 +33,25 @@ "r-base": "4.4.2" }, "DUPRADAR": { - "bioconductor-dupradar": "1.32.0" + "bioconductor-dupradar": "1.38.0" }, "FASTQC": { "fastqc": "0.12.1" }, + "FASTQC_FILTERED": { + "fastqc": "0.12.1" + }, "FQ_LINT": { - "fq": "0.12.0 (2024-07-08)" + "fq": "0.12.0" + }, + "FQ_LINT_AFTER_BBSPLIT": { + "fq": "0.12.0" + }, + "FQ_LINT_AFTER_TRIMMING": { + "fq": "0.12.0" }, "FQ_SUBSAMPLE": { - "fq": "0.12.0 (2024-07-08)" + "fq": "0.12.0" }, "GTF2BED": { "perl": "5.26.2" @@ -57,7 +69,7 @@ "python": "3.9.5" }, "PICARD_MARKDUPLICATES": { - "picard": "3.1.1" + "picard": "3.4.0" }, "QUALIMAP_RNASEQ": { "qualimap": 2.3 @@ -66,54 +78,54 @@ "rsem": "1.3.1", "star": "2.7.10a" }, - "RSEM_MERGE_COUNTS": { - "sed": 4.7 - }, "RSEM_PREPAREREFERENCE_GENOME": { "rsem": "1.3.1", "star": "2.7.10a" }, "RSEQC_BAMSTAT": { - "rseqc": "5.0.2" + "rseqc": "5.0.4" }, "RSEQC_INFEREXPERIMENT": { - "rseqc": "5.0.2" + "rseqc": "5.0.4" }, "RSEQC_INNERDISTANCE": { - "rseqc": "5.0.2" + "rseqc": "5.0.4" }, "RSEQC_JUNCTIONANNOTATION": { - "rseqc": "5.0.2" + "rseqc": "5.0.4" }, "RSEQC_JUNCTIONSATURATION": { - "rseqc": "5.0.2" + "rseqc": "5.0.4" }, "RSEQC_READDISTRIBUTION": { - "rseqc": "5.0.2" + "rseqc": "5.0.4" }, "RSEQC_READDUPLICATION": { - "rseqc": "5.0.2" + "rseqc": "5.0.4" }, "SALMON_QUANT": { "salmon": "1.10.3" }, + "SAMTOOLS_FAIDX": { + "samtools": "1.22.1" + }, "SAMTOOLS_FLAGSTAT": { - "samtools": 1.21 + "samtools": "1.22.1" }, "SAMTOOLS_IDXSTATS": { - "samtools": 1.21 + "samtools": "1.22.1" }, "SAMTOOLS_INDEX": { - "samtools": 1.21 + "samtools": "1.22.1" }, "SAMTOOLS_SORT": { - "samtools": 1.21 + "samtools": "1.22.1" }, "SAMTOOLS_SORT_QUALIMAP": { - "samtools": 1.21 + "samtools": "1.22.1" }, "SAMTOOLS_STATS": { - "samtools": 1.21 + "samtools": "1.22.1" }, "SE_GENE_UNIFIED": { "bioconductor-summarizedexperiment": "1.32.0" @@ -138,8 +150,6 @@ "subread": "2.0.6" }, "TRIMGALORE": { - "cutadapt": 4.9, - "pigz": 2.8, "trimgalore": "0.6.10" }, "TXIMETA_TXIMPORT": { @@ -167,6 +177,23 @@ "custom/out/genome_gfp.fasta", "custom/out/genome_gfp.gtf", "fastqc", + "fastqc/filtered", + "fastqc/filtered/RAP1_IAA_30M_REP1_filtered_1_fastqc.html", + "fastqc/filtered/RAP1_IAA_30M_REP1_filtered_1_fastqc.zip", + "fastqc/filtered/RAP1_IAA_30M_REP1_filtered_2_fastqc.html", + "fastqc/filtered/RAP1_IAA_30M_REP1_filtered_2_fastqc.zip", + "fastqc/filtered/RAP1_UNINDUCED_REP1_filtered_fastqc.html", + "fastqc/filtered/RAP1_UNINDUCED_REP1_filtered_fastqc.zip", + "fastqc/filtered/RAP1_UNINDUCED_REP2_filtered_fastqc.html", + "fastqc/filtered/RAP1_UNINDUCED_REP2_filtered_fastqc.zip", + "fastqc/filtered/WT_REP1_filtered_1_fastqc.html", + "fastqc/filtered/WT_REP1_filtered_1_fastqc.zip", + "fastqc/filtered/WT_REP1_filtered_2_fastqc.html", + "fastqc/filtered/WT_REP1_filtered_2_fastqc.zip", + "fastqc/filtered/WT_REP2_filtered_1_fastqc.html", + "fastqc/filtered/WT_REP2_filtered_1_fastqc.zip", + "fastqc/filtered/WT_REP2_filtered_2_fastqc.html", + "fastqc/filtered/WT_REP2_filtered_2_fastqc.zip", "fastqc/raw", "fastqc/raw/RAP1_IAA_30M_REP1_raw_1_fastqc.html", "fastqc/raw/RAP1_IAA_30M_REP1_raw_1_fastqc.zip", @@ -202,18 +229,18 @@ "fastqc/trim/WT_REP2_trimmed_2_val_2_fastqc.html", "fastqc/trim/WT_REP2_trimmed_2_val_2_fastqc.zip", "fq_lint", + "fq_lint/bbsplit", + "fq_lint/bbsplit/RAP1_IAA_30M_REP1.fq_lint.txt", + "fq_lint/bbsplit/RAP1_UNINDUCED_REP1.fq_lint.txt", + "fq_lint/bbsplit/RAP1_UNINDUCED_REP2.fq_lint.txt", + "fq_lint/bbsplit/WT_REP1.fq_lint.txt", + "fq_lint/bbsplit/WT_REP2.fq_lint.txt", "fq_lint/raw", "fq_lint/raw/RAP1_IAA_30M_REP1.fq_lint.txt", "fq_lint/raw/RAP1_UNINDUCED_REP1.fq_lint.txt", "fq_lint/raw/RAP1_UNINDUCED_REP2.fq_lint.txt", "fq_lint/raw/WT_REP1.fq_lint.txt", "fq_lint/raw/WT_REP2.fq_lint.txt", - "fq_lint/sortmerna", - "fq_lint/sortmerna/RAP1_IAA_30M_REP1.fq_lint.txt", - "fq_lint/sortmerna/RAP1_UNINDUCED_REP1.fq_lint.txt", - "fq_lint/sortmerna/RAP1_UNINDUCED_REP2.fq_lint.txt", - "fq_lint/sortmerna/WT_REP1.fq_lint.txt", - "fq_lint/sortmerna/WT_REP2.fq_lint.txt", "fq_lint/trimmed", "fq_lint/trimmed/RAP1_IAA_30M_REP1.fq_lint.txt", "fq_lint/trimmed/RAP1_UNINDUCED_REP1.fq_lint.txt", @@ -224,9 +251,22 @@ "multiqc/star_rsem", "multiqc/star_rsem/multiqc_report.html", "multiqc/star_rsem/multiqc_report_data", + "multiqc/star_rsem/multiqc_report_data/bbmap-bbsplit_plot.txt", + "multiqc/star_rsem/multiqc_report_data/bbmap.txt", + "multiqc/star_rsem/multiqc_report_data/bbsplit_stats_table.txt", "multiqc/star_rsem/multiqc_report_data/cutadapt_filtered_reads_plot.txt", "multiqc/star_rsem/multiqc_report_data/cutadapt_trimmed_sequences_plot_3_Counts.txt", "multiqc/star_rsem/multiqc_report_data/cutadapt_trimmed_sequences_plot_3_Obs_Exp.txt", + "multiqc/star_rsem/multiqc_report_data/fastqc_filtered-status-check-heatmap.txt", + "multiqc/star_rsem/multiqc_report_data/fastqc_filtered_overrepresented_sequences_plot.txt", + "multiqc/star_rsem/multiqc_report_data/fastqc_filtered_per_base_n_content_plot.txt", + "multiqc/star_rsem/multiqc_report_data/fastqc_filtered_per_base_sequence_quality_plot.txt", + "multiqc/star_rsem/multiqc_report_data/fastqc_filtered_per_sequence_gc_content_plot_Counts.txt", + "multiqc/star_rsem/multiqc_report_data/fastqc_filtered_per_sequence_gc_content_plot_Percentages.txt", + "multiqc/star_rsem/multiqc_report_data/fastqc_filtered_per_sequence_quality_scores_plot.txt", + "multiqc/star_rsem/multiqc_report_data/fastqc_filtered_sequence_counts_plot.txt", + "multiqc/star_rsem/multiqc_report_data/fastqc_filtered_sequence_duplication_levels_plot.txt", + "multiqc/star_rsem/multiqc_report_data/fastqc_filtered_top_overrepresented_sequences_table.txt", "multiqc/star_rsem/multiqc_report_data/fastqc_raw-status-check-heatmap.txt", "multiqc/star_rsem/multiqc_report_data/fastqc_raw_adapter_content_plot.txt", "multiqc/star_rsem/multiqc_report_data/fastqc_raw_overrepresented_sequences_plot.txt", @@ -259,6 +299,7 @@ "multiqc/star_rsem/multiqc_report_data/multiqc_data.json", "multiqc/star_rsem/multiqc_report_data/multiqc_dupradar.txt", "multiqc/star_rsem/multiqc_report_data/multiqc_fail_strand_check_table.txt", + "multiqc/star_rsem/multiqc_report_data/multiqc_fastqc_fastqc_filtered.txt", "multiqc/star_rsem/multiqc_report_data/multiqc_fastqc_fastqc_raw.txt", "multiqc/star_rsem/multiqc_report_data/multiqc_fastqc_fastqc_trimmed.txt", "multiqc/star_rsem/multiqc_report_data/multiqc_featurecounts_biotype_plot.txt", @@ -318,12 +359,26 @@ "multiqc/star_rsem/multiqc_report_data/star_summary_table.txt", "multiqc/star_rsem/multiqc_report_plots", "multiqc/star_rsem/multiqc_report_plots/pdf", + "multiqc/star_rsem/multiqc_report_plots/pdf/bbmap-bbsplit_plot-cnt.pdf", + "multiqc/star_rsem/multiqc_report_plots/pdf/bbmap-bbsplit_plot-pct.pdf", + "multiqc/star_rsem/multiqc_report_plots/pdf/bbsplit_stats_table.pdf", "multiqc/star_rsem/multiqc_report_plots/pdf/cutadapt_filtered_reads_plot-cnt.pdf", "multiqc/star_rsem/multiqc_report_plots/pdf/cutadapt_filtered_reads_plot-pct.pdf", "multiqc/star_rsem/multiqc_report_plots/pdf/cutadapt_trimmed_sequences_plot_3_Counts.pdf", "multiqc/star_rsem/multiqc_report_plots/pdf/cutadapt_trimmed_sequences_plot_3_Obs_Exp.pdf", "multiqc/star_rsem/multiqc_report_plots/pdf/dupradar.pdf", "multiqc/star_rsem/multiqc_report_plots/pdf/fail_strand_check_table.pdf", + "multiqc/star_rsem/multiqc_report_plots/pdf/fastqc_filtered-status-check-heatmap.pdf", + "multiqc/star_rsem/multiqc_report_plots/pdf/fastqc_filtered_overrepresented_sequences_plot.pdf", + "multiqc/star_rsem/multiqc_report_plots/pdf/fastqc_filtered_per_base_n_content_plot.pdf", + "multiqc/star_rsem/multiqc_report_plots/pdf/fastqc_filtered_per_base_sequence_quality_plot.pdf", + "multiqc/star_rsem/multiqc_report_plots/pdf/fastqc_filtered_per_sequence_gc_content_plot_Counts.pdf", + "multiqc/star_rsem/multiqc_report_plots/pdf/fastqc_filtered_per_sequence_gc_content_plot_Percentages.pdf", + "multiqc/star_rsem/multiqc_report_plots/pdf/fastqc_filtered_per_sequence_quality_scores_plot.pdf", + "multiqc/star_rsem/multiqc_report_plots/pdf/fastqc_filtered_sequence_counts_plot-cnt.pdf", + "multiqc/star_rsem/multiqc_report_plots/pdf/fastqc_filtered_sequence_counts_plot-pct.pdf", + "multiqc/star_rsem/multiqc_report_plots/pdf/fastqc_filtered_sequence_duplication_levels_plot.pdf", + "multiqc/star_rsem/multiqc_report_plots/pdf/fastqc_filtered_top_overrepresented_sequences_table.pdf", "multiqc/star_rsem/multiqc_report_plots/pdf/fastqc_raw-status-check-heatmap.pdf", "multiqc/star_rsem/multiqc_report_plots/pdf/fastqc_raw_adapter_content_plot.pdf", "multiqc/star_rsem/multiqc_report_plots/pdf/fastqc_raw_overrepresented_sequences_plot.pdf", @@ -393,12 +448,26 @@ "multiqc/star_rsem/multiqc_report_plots/pdf/star_rsem_deseq2_pca.pdf", "multiqc/star_rsem/multiqc_report_plots/pdf/star_summary_table.pdf", "multiqc/star_rsem/multiqc_report_plots/png", + "multiqc/star_rsem/multiqc_report_plots/png/bbmap-bbsplit_plot-cnt.png", + "multiqc/star_rsem/multiqc_report_plots/png/bbmap-bbsplit_plot-pct.png", + "multiqc/star_rsem/multiqc_report_plots/png/bbsplit_stats_table.png", "multiqc/star_rsem/multiqc_report_plots/png/cutadapt_filtered_reads_plot-cnt.png", "multiqc/star_rsem/multiqc_report_plots/png/cutadapt_filtered_reads_plot-pct.png", "multiqc/star_rsem/multiqc_report_plots/png/cutadapt_trimmed_sequences_plot_3_Counts.png", "multiqc/star_rsem/multiqc_report_plots/png/cutadapt_trimmed_sequences_plot_3_Obs_Exp.png", "multiqc/star_rsem/multiqc_report_plots/png/dupradar.png", "multiqc/star_rsem/multiqc_report_plots/png/fail_strand_check_table.png", + "multiqc/star_rsem/multiqc_report_plots/png/fastqc_filtered-status-check-heatmap.png", + "multiqc/star_rsem/multiqc_report_plots/png/fastqc_filtered_overrepresented_sequences_plot.png", + "multiqc/star_rsem/multiqc_report_plots/png/fastqc_filtered_per_base_n_content_plot.png", + "multiqc/star_rsem/multiqc_report_plots/png/fastqc_filtered_per_base_sequence_quality_plot.png", + "multiqc/star_rsem/multiqc_report_plots/png/fastqc_filtered_per_sequence_gc_content_plot_Counts.png", + "multiqc/star_rsem/multiqc_report_plots/png/fastqc_filtered_per_sequence_gc_content_plot_Percentages.png", + "multiqc/star_rsem/multiqc_report_plots/png/fastqc_filtered_per_sequence_quality_scores_plot.png", + "multiqc/star_rsem/multiqc_report_plots/png/fastqc_filtered_sequence_counts_plot-cnt.png", + "multiqc/star_rsem/multiqc_report_plots/png/fastqc_filtered_sequence_counts_plot-pct.png", + "multiqc/star_rsem/multiqc_report_plots/png/fastqc_filtered_sequence_duplication_levels_plot.png", + "multiqc/star_rsem/multiqc_report_plots/png/fastqc_filtered_top_overrepresented_sequences_table.png", "multiqc/star_rsem/multiqc_report_plots/png/fastqc_raw-status-check-heatmap.png", "multiqc/star_rsem/multiqc_report_plots/png/fastqc_raw_adapter_content_plot.png", "multiqc/star_rsem/multiqc_report_plots/png/fastqc_raw_overrepresented_sequences_plot.png", @@ -468,12 +537,26 @@ "multiqc/star_rsem/multiqc_report_plots/png/star_rsem_deseq2_pca.png", "multiqc/star_rsem/multiqc_report_plots/png/star_summary_table.png", "multiqc/star_rsem/multiqc_report_plots/svg", + "multiqc/star_rsem/multiqc_report_plots/svg/bbmap-bbsplit_plot-cnt.svg", + "multiqc/star_rsem/multiqc_report_plots/svg/bbmap-bbsplit_plot-pct.svg", + "multiqc/star_rsem/multiqc_report_plots/svg/bbsplit_stats_table.svg", "multiqc/star_rsem/multiqc_report_plots/svg/cutadapt_filtered_reads_plot-cnt.svg", "multiqc/star_rsem/multiqc_report_plots/svg/cutadapt_filtered_reads_plot-pct.svg", "multiqc/star_rsem/multiqc_report_plots/svg/cutadapt_trimmed_sequences_plot_3_Counts.svg", "multiqc/star_rsem/multiqc_report_plots/svg/cutadapt_trimmed_sequences_plot_3_Obs_Exp.svg", "multiqc/star_rsem/multiqc_report_plots/svg/dupradar.svg", "multiqc/star_rsem/multiqc_report_plots/svg/fail_strand_check_table.svg", + "multiqc/star_rsem/multiqc_report_plots/svg/fastqc_filtered-status-check-heatmap.svg", + "multiqc/star_rsem/multiqc_report_plots/svg/fastqc_filtered_overrepresented_sequences_plot.svg", + "multiqc/star_rsem/multiqc_report_plots/svg/fastqc_filtered_per_base_n_content_plot.svg", + "multiqc/star_rsem/multiqc_report_plots/svg/fastqc_filtered_per_base_sequence_quality_plot.svg", + "multiqc/star_rsem/multiqc_report_plots/svg/fastqc_filtered_per_sequence_gc_content_plot_Counts.svg", + "multiqc/star_rsem/multiqc_report_plots/svg/fastqc_filtered_per_sequence_gc_content_plot_Percentages.svg", + "multiqc/star_rsem/multiqc_report_plots/svg/fastqc_filtered_per_sequence_quality_scores_plot.svg", + "multiqc/star_rsem/multiqc_report_plots/svg/fastqc_filtered_sequence_counts_plot-cnt.svg", + "multiqc/star_rsem/multiqc_report_plots/svg/fastqc_filtered_sequence_counts_plot-pct.svg", + "multiqc/star_rsem/multiqc_report_plots/svg/fastqc_filtered_sequence_duplication_levels_plot.svg", + "multiqc/star_rsem/multiqc_report_plots/svg/fastqc_filtered_top_overrepresented_sequences_table.svg", "multiqc/star_rsem/multiqc_report_plots/svg/fastqc_raw-status-check-heatmap.svg", "multiqc/star_rsem/multiqc_report_plots/svg/fastqc_raw_adapter_content_plot.svg", "multiqc/star_rsem/multiqc_report_plots/svg/fastqc_raw_overrepresented_sequences_plot.svg", @@ -648,7 +731,7 @@ "salmon/salmon.merged.transcript_counts.tsv", "salmon/salmon.merged.transcript_lengths.tsv", "salmon/salmon.merged.transcript_tpm.tsv", - "salmon/tx2gene.tsv", + "salmon/salmon.merged.tx2gene.tsv", "star_rsem", "star_rsem/RAP1_IAA_30M_REP1.genes.results", "star_rsem/RAP1_IAA_30M_REP1.isoforms.results", @@ -984,12 +1067,24 @@ "star_rsem/qualimap/WT_REP2/raw_data_qualimapReport/coverage_profile_along_genes_(low).txt", "star_rsem/qualimap/WT_REP2/raw_data_qualimapReport/coverage_profile_along_genes_(total).txt", "star_rsem/qualimap/WT_REP2/rnaseq_qc_results.txt", + "star_rsem/rsem.merged.gene.SummarizedExperiment.rds", "star_rsem/rsem.merged.gene_counts.tsv", + "star_rsem/rsem.merged.gene_counts_length_scaled.tsv", + "star_rsem/rsem.merged.gene_counts_scaled.tsv", + "star_rsem/rsem.merged.gene_lengths.tsv", "star_rsem/rsem.merged.gene_tpm.tsv", - "star_rsem/rsem.merged.genes_long.tsv", - "star_rsem/rsem.merged.isoforms_long.tsv", + "star_rsem/rsem.merged.transcript.SummarizedExperiment.rds", "star_rsem/rsem.merged.transcript_counts.tsv", + "star_rsem/rsem.merged.transcript_lengths.tsv", "star_rsem/rsem.merged.transcript_tpm.tsv", + "star_rsem/rsem.merged.tx2gene.tsv", + "star_rsem/rsem_merge_counts", + "star_rsem/rsem_merge_counts/rsem.merged.gene_counts.tsv", + "star_rsem/rsem_merge_counts/rsem.merged.gene_tpm.tsv", + "star_rsem/rsem_merge_counts/rsem.merged.genes_long.tsv", + "star_rsem/rsem_merge_counts/rsem.merged.isoforms_long.tsv", + "star_rsem/rsem_merge_counts/rsem.merged.transcript_counts.tsv", + "star_rsem/rsem_merge_counts/rsem.merged.transcript_tpm.tsv", "star_rsem/rseqc", "star_rsem/rseqc/bam_stat", "star_rsem/rseqc/bam_stat/RAP1_IAA_30M_REP1.bam_stat.txt", @@ -1016,6 +1111,8 @@ "star_rsem/rseqc/inner_distance/txt/RAP1_IAA_30M_REP1.inner_distance.txt", "star_rsem/rseqc/inner_distance/txt/RAP1_IAA_30M_REP1.inner_distance_freq.txt", "star_rsem/rseqc/inner_distance/txt/RAP1_IAA_30M_REP1.inner_distance_mean.txt", + "star_rsem/rseqc/inner_distance/txt/RAP1_UNINDUCED_REP1.inner_distance.txt", + "star_rsem/rseqc/inner_distance/txt/RAP1_UNINDUCED_REP2.inner_distance.txt", "star_rsem/rseqc/inner_distance/txt/WT_REP1.inner_distance.txt", "star_rsem/rseqc/inner_distance/txt/WT_REP1.inner_distance_freq.txt", "star_rsem/rseqc/inner_distance/txt/WT_REP1.inner_distance_mean.txt", @@ -1209,7 +1306,6 @@ "fastqc_raw_per_sequence_quality_scores_plot.txt:md5,b5f9a02933e3065952237afd2ec9ce82", "fastqc_raw_sequence_counts_plot.txt:md5,cbae4979d5db66d3b894abcf8d1c453c", "fastqc_raw_sequence_duplication_levels_plot.txt:md5,8812cee16f6ca65e2c33635754de1772", - "fastqc_sequence_length_distribution_plot.txt:md5,6fe2c985606abad947bcca99b015ae33", "fastqc_trimmed-status-check-heatmap.txt:md5,22a03548736b88b23be6bc0c9ef1b4a6", "fastqc_trimmed_overrepresented_sequences_plot.txt:md5,c755e9d044ea1a82b2c8edde867b4878", "fastqc_trimmed_per_base_n_content_plot.txt:md5,418610c1ce119cb786ad434db75d366e", @@ -1220,7 +1316,6 @@ "fastqc_trimmed_sequence_counts_plot.txt:md5,9fd642bdd1da354f296bb8092205608f", "fastqc_trimmed_sequence_duplication_levels_plot.txt:md5,0758257b497283b1ef28171e694db6db", "multiqc_citations.txt:md5,eb19d85c883385624d8310f517901b7e", - "multiqc_cutadapt.txt:md5,583b7b9ba76b26162bb9610ed746454b", "multiqc_fastqc_fastqc_raw.txt:md5,81c3c1a2575a1891a7f2a9637a0f2cc0", "multiqc_fastqc_fastqc_trimmed.txt:md5,54743154d0e8858980acffeb5b6f6a97", "multiqc_featurecounts_biotype_plot.txt:md5,16081809f893eca4d9914fd370e7fbd7", @@ -1265,7 +1360,7 @@ "observed_bias_3p.gz:md5,92bcd0592d22a6a58d0360fc76103e56", "cmd_info.json:md5,fe66c9d876645b9260d8c2488157d4d4", "lib_format_counts.json:md5,088fd51db07022ffde47033bbd029400", - "tx2gene.tsv:md5,0e2418a69d2eba45097ebffc2f700bfe", + "salmon.merged.tx2gene.tsv:md5,0e2418a69d2eba45097ebffc2f700bfe", "RAP1_IAA_30M_REP1.biotype_counts_mqc.tsv:md5,5a7a4291e8ff6cc25a4eb72dfdf06b51", "RAP1_IAA_30M_REP1.biotype_counts_rrna_mqc.tsv:md5,dde2de0cb90e10d0195c726f768e9941", "RAP1_IAA_30M_REP1.featureCounts.tsv:md5,9cf6f9377ea65e3bdb16b55992028d66", @@ -1301,6 +1396,15 @@ "coverage_profile_along_genes_(high).txt:md5,a73462b9ecbd1d2c45d7ca84b5f7925b", "coverage_profile_along_genes_(low).txt:md5,7adc228bc15e344abb7938ea4d35a846", "coverage_profile_along_genes_(total).txt:md5,7adc228bc15e344abb7938ea4d35a846", + "rsem.merged.gene_counts.tsv:md5,91223fb1d835d6bc5140a5e095ad5b3e", + "rsem.merged.gene_counts_length_scaled.tsv:md5,ec0e98882128ff058169354fd1ccb240", + "rsem.merged.gene_counts_scaled.tsv:md5,59ec3256b6ecf3c58d9a86c6dfde51fd", + "rsem.merged.gene_lengths.tsv:md5,acdee55d5bd05d5cc83e4ca029b960b2", + "rsem.merged.gene_tpm.tsv:md5,8068aa3bb3369b818af7ece24977d8da", + "rsem.merged.transcript_counts.tsv:md5,535ab7cf11f6efde878283dc722dea0b", + "rsem.merged.transcript_lengths.tsv:md5,cb304a9c4932075da049cea5fe2a8165", + "rsem.merged.transcript_tpm.tsv:md5,8fe690a435900ef5a3c1cf639192ac5d", + "rsem.merged.tx2gene.tsv:md5,0e2418a69d2eba45097ebffc2f700bfe", "rsem.merged.gene_counts.tsv:md5,990cdaf5071c9bfd3d2d99296feb68f3", "rsem.merged.gene_tpm.tsv:md5,349f2184161d6b269a0f5c4da1dee07a", "rsem.merged.genes_long.tsv:md5,42e9a0220b0e3a505d7b59df279ce89a", @@ -1335,10 +1439,10 @@ ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.3" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-09-15T20:52:56.262347961" + "timestamp": "2026-02-26T14:46:25.363528218" }, "Params: --aligner star_rsem - stub": { "content": [ @@ -1351,16 +1455,13 @@ "cat": 9.5 }, "CUSTOM_CATADDITIONALFASTA": { - "python": null - }, - "CUSTOM_GETCHROMSIZES": { - "getchromsizes": 1.21 + "python": "3.12.2" }, "FASTQC": { "fastqc": "0.12.1" }, "FQ_LINT": { - "fq": "0.12.0 (2024-07-08)" + "fq": "0.12.0" }, "GTF2BED": { "perl": "5.26.2" @@ -1378,14 +1479,15 @@ "rsem": "1.3.1", "star": "2.7.10a" }, + "SAMTOOLS_FAIDX": { + "samtools": "1.22.1" + }, "STAR_GENOMEGENERATE": { "gawk": "5.1.0", "samtools": 1.21, "star": "2.7.11b" }, "TRIMGALORE": { - "cutadapt": 4.9, - "pigz": 2.8, "trimgalore": "0.6.10" }, "UNTAR_SALMON_INDEX": { @@ -1441,9 +1543,9 @@ ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.3" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-09-15T17:52:54.558516396" + "timestamp": "2026-02-13T11:34:58.939150504" } } \ No newline at end of file diff --git a/tests/umi.nf.test b/tests/umi.nf.test index 0a3828ef5..09da4117c 100644 --- a/tests/umi.nf.test +++ b/tests/umi.nf.test @@ -84,6 +84,46 @@ nextflow_pipeline { } } + test("Params: --aligner star_rsem --with_umi") { + + when { + params { + aligner = 'star_rsem' + with_umi = true + umitools_extract_method = "regex" + umitools_bc_pattern = "^(?PCGA.{8}){s<=2}.*" + umitools_dedup_stats = true + skip_bbsplit = true + outdir = "$outputDir" + save_umi_intermeds = true + // Skip processes not affected by UMI deduplication + // Keep QC as deduplicated BAMs have different characteristics worth integration testing + skip_stringtie = true + skip_bigwig = true + } + } + + then { + // stable_name: All files + folders in ${params.outdir}/ with a stable name + def stable_name = getAllFilesFromDir(params.outdir, relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}']) + // stable_path: All files in ${params.outdir}/ with stable content + def stable_path = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore') + assertAll( + { assert workflow.success}, + { assert snapshot( + // Number of successful tasks + workflow.trace.succeeded().size(), + // pipeline versions.yml file for multiqc from which Nextflow and pipeline versions are removed (all from the workflow key) + removeFromYamlMap("$outputDir/pipeline_info/nf_core_rnaseq_software_mqc_versions.yml", "Workflow"), + // All stable path name, with a relative path + stable_name, + // All files with stable contents + stable_path + ).match() } + ) + } + } + test("--umi_dedup_tool 'umitools - stub") { options "-stub" diff --git a/tests/umi.nf.test.snap b/tests/umi.nf.test.snap index 60abd7e13..a63e850d4 100644 --- a/tests/umi.nf.test.snap +++ b/tests/umi.nf.test.snap @@ -1,7 +1,7 @@ { - "--umi_dedup_tool 'umitools'": { + "Params: --aligner star_rsem --with_umi": { "content": [ - 231, + 233, { "CAT_FASTQ": { "cat": 9.5 @@ -9,8 +9,8 @@ "CUSTOM_CATADDITIONALFASTA": { "python": "3.12.2" }, - "CUSTOM_GETCHROMSIZES": { - "getchromsizes": 1.21 + "CUSTOM_RSEMMERGECOUNTS": { + "sed": 4.7 }, "CUSTOM_TX2GENE": { "python": "3.10.4" @@ -19,21 +19,24 @@ "bioconductor-deseq2": "1.46.0", "r-base": "4.4.2" }, - "DESEQ2_QC_STAR_SALMON": { + "DESEQ2_QC_RSEM": { "bioconductor-deseq2": "1.46.0", "r-base": "4.4.2" }, "DUPRADAR": { - "bioconductor-dupradar": "1.32.0" + "bioconductor-dupradar": "1.38.0" }, "FASTQC": { "fastqc": "0.12.1" }, "FQ_LINT": { - "fq": "0.12.0 (2024-07-08)" + "fq": "0.12.0" + }, + "FQ_LINT_AFTER_TRIMMING": { + "fq": "0.12.0" }, "FQ_SUBSAMPLE": { - "fq": "0.12.0 (2024-07-08)" + "fq": "0.12.0" }, "GTF2BED": { "perl": "5.26.2" @@ -53,47 +56,58 @@ "QUALIMAP_RNASEQ": { "qualimap": 2.3 }, + "RSEM_CALCULATEEXPRESSION": { + "rsem": "1.3.1", + "star": "2.7.10a" + }, + "RSEM_PREPAREREFERENCE_GENOME": { + "rsem": "1.3.1", + "star": "2.7.10a" + }, "RSEQC_BAMSTAT": { - "rseqc": "5.0.2" + "rseqc": "5.0.4" }, "RSEQC_INFEREXPERIMENT": { - "rseqc": "5.0.2" + "rseqc": "5.0.4" }, "RSEQC_INNERDISTANCE": { - "rseqc": "5.0.2" + "rseqc": "5.0.4" }, "RSEQC_JUNCTIONANNOTATION": { - "rseqc": "5.0.2" + "rseqc": "5.0.4" }, "RSEQC_JUNCTIONSATURATION": { - "rseqc": "5.0.2" + "rseqc": "5.0.4" }, "RSEQC_READDISTRIBUTION": { - "rseqc": "5.0.2" + "rseqc": "5.0.4" }, "RSEQC_READDUPLICATION": { - "rseqc": "5.0.2" + "rseqc": "5.0.4" }, "SALMON_QUANT": { "salmon": "1.10.3" }, + "SAMTOOLS_FAIDX": { + "samtools": "1.22.1" + }, "SAMTOOLS_FLAGSTAT": { - "samtools": 1.21 + "samtools": "1.22.1" }, "SAMTOOLS_IDXSTATS": { - "samtools": 1.21 + "samtools": "1.22.1" }, "SAMTOOLS_INDEX": { - "samtools": 1.21 + "samtools": "1.22.1" }, "SAMTOOLS_SORT": { - "samtools": 1.21 + "samtools": "1.22.1" }, "SAMTOOLS_SORT_QUALIMAP": { - "samtools": 1.21 + "samtools": "1.22.1" }, "SAMTOOLS_STATS": { - "samtools": 1.21 + "samtools": "1.22.1" }, "SE_GENE_UNIFIED": { "bioconductor-summarizedexperiment": "1.32.0" @@ -115,21 +129,1414 @@ "subread": "2.0.6" }, "TRIMGALORE": { - "cutadapt": 4.9, - "pigz": 2.8, "trimgalore": "0.6.10" }, "TXIMETA_TXIMPORT": { "bioconductor-tximeta": "1.20.1" }, "UMITOOLS_DEDUP": { - "umitools": "1.1.5" + "umitools": "1.1.6" }, "UMITOOLS_EXTRACT": { - "umitools": "1.1.5" + "umitools": "1.1.6" }, "UMITOOLS_PREPAREFORRSEM": { - "umitools": "1.1.5" + "umitools": "1.1.6" + }, + "UNTAR_SALMON_INDEX": { + "untar": 1.34 + } + }, + [ + "custom", + "custom/out", + "custom/out/genome_gfp.fasta", + "custom/out/genome_gfp.gtf", + "fastqc", + "fastqc/raw", + "fastqc/raw/RAP1_IAA_30M_REP1_raw_1_fastqc.html", + "fastqc/raw/RAP1_IAA_30M_REP1_raw_1_fastqc.zip", + "fastqc/raw/RAP1_IAA_30M_REP1_raw_2_fastqc.html", + "fastqc/raw/RAP1_IAA_30M_REP1_raw_2_fastqc.zip", + "fastqc/raw/RAP1_UNINDUCED_REP1_raw_fastqc.html", + "fastqc/raw/RAP1_UNINDUCED_REP1_raw_fastqc.zip", + "fastqc/raw/RAP1_UNINDUCED_REP2_raw_fastqc.html", + "fastqc/raw/RAP1_UNINDUCED_REP2_raw_fastqc.zip", + "fastqc/raw/WT_REP1_raw_1_fastqc.html", + "fastqc/raw/WT_REP1_raw_1_fastqc.zip", + "fastqc/raw/WT_REP1_raw_2_fastqc.html", + "fastqc/raw/WT_REP1_raw_2_fastqc.zip", + "fastqc/raw/WT_REP2_raw_1_fastqc.html", + "fastqc/raw/WT_REP2_raw_1_fastqc.zip", + "fastqc/raw/WT_REP2_raw_2_fastqc.html", + "fastqc/raw/WT_REP2_raw_2_fastqc.zip", + "fastqc/trim", + "fastqc/trim/RAP1_IAA_30M_REP1_trimmed_1_val_1_fastqc.html", + "fastqc/trim/RAP1_IAA_30M_REP1_trimmed_1_val_1_fastqc.zip", + "fastqc/trim/RAP1_IAA_30M_REP1_trimmed_2_val_2_fastqc.html", + "fastqc/trim/RAP1_IAA_30M_REP1_trimmed_2_val_2_fastqc.zip", + "fastqc/trim/RAP1_UNINDUCED_REP1_trimmed_trimmed_fastqc.html", + "fastqc/trim/RAP1_UNINDUCED_REP1_trimmed_trimmed_fastqc.zip", + "fastqc/trim/RAP1_UNINDUCED_REP2_trimmed_trimmed_fastqc.html", + "fastqc/trim/RAP1_UNINDUCED_REP2_trimmed_trimmed_fastqc.zip", + "fastqc/trim/WT_REP1_trimmed_1_val_1_fastqc.html", + "fastqc/trim/WT_REP1_trimmed_1_val_1_fastqc.zip", + "fastqc/trim/WT_REP1_trimmed_2_val_2_fastqc.html", + "fastqc/trim/WT_REP1_trimmed_2_val_2_fastqc.zip", + "fastqc/trim/WT_REP2_trimmed_1_val_1_fastqc.html", + "fastqc/trim/WT_REP2_trimmed_1_val_1_fastqc.zip", + "fastqc/trim/WT_REP2_trimmed_2_val_2_fastqc.html", + "fastqc/trim/WT_REP2_trimmed_2_val_2_fastqc.zip", + "fq_lint", + "fq_lint/raw", + "fq_lint/raw/RAP1_IAA_30M_REP1.fq_lint.txt", + "fq_lint/raw/RAP1_UNINDUCED_REP1.fq_lint.txt", + "fq_lint/raw/RAP1_UNINDUCED_REP2.fq_lint.txt", + "fq_lint/raw/WT_REP1.fq_lint.txt", + "fq_lint/raw/WT_REP2.fq_lint.txt", + "fq_lint/trimmed", + "fq_lint/trimmed/RAP1_IAA_30M_REP1.fq_lint.txt", + "fq_lint/trimmed/RAP1_UNINDUCED_REP1.fq_lint.txt", + "fq_lint/trimmed/RAP1_UNINDUCED_REP2.fq_lint.txt", + "fq_lint/trimmed/WT_REP1.fq_lint.txt", + "fq_lint/trimmed/WT_REP2.fq_lint.txt", + "multiqc", + "multiqc/star_rsem", + "multiqc/star_rsem/multiqc_report.html", + "multiqc/star_rsem/multiqc_report_data", + "multiqc/star_rsem/multiqc_report_data/cutadapt_filtered_reads_plot.txt", + "multiqc/star_rsem/multiqc_report_data/cutadapt_trimmed_sequences_plot_3_Counts.txt", + "multiqc/star_rsem/multiqc_report_data/cutadapt_trimmed_sequences_plot_3_Obs_Exp.txt", + "multiqc/star_rsem/multiqc_report_data/fastqc_raw-status-check-heatmap.txt", + "multiqc/star_rsem/multiqc_report_data/fastqc_raw_adapter_content_plot.txt", + "multiqc/star_rsem/multiqc_report_data/fastqc_raw_overrepresented_sequences_plot.txt", + "multiqc/star_rsem/multiqc_report_data/fastqc_raw_per_base_n_content_plot.txt", + "multiqc/star_rsem/multiqc_report_data/fastqc_raw_per_base_sequence_quality_plot.txt", + "multiqc/star_rsem/multiqc_report_data/fastqc_raw_per_sequence_gc_content_plot_Counts.txt", + "multiqc/star_rsem/multiqc_report_data/fastqc_raw_per_sequence_gc_content_plot_Percentages.txt", + "multiqc/star_rsem/multiqc_report_data/fastqc_raw_per_sequence_quality_scores_plot.txt", + "multiqc/star_rsem/multiqc_report_data/fastqc_raw_sequence_counts_plot.txt", + "multiqc/star_rsem/multiqc_report_data/fastqc_raw_sequence_duplication_levels_plot.txt", + "multiqc/star_rsem/multiqc_report_data/fastqc_raw_top_overrepresented_sequences_table.txt", + "multiqc/star_rsem/multiqc_report_data/fastqc_sequence_length_distribution_plot.txt", + "multiqc/star_rsem/multiqc_report_data/fastqc_trimmed-status-check-heatmap.txt", + "multiqc/star_rsem/multiqc_report_data/fastqc_trimmed_overrepresented_sequences_plot.txt", + "multiqc/star_rsem/multiqc_report_data/fastqc_trimmed_per_base_n_content_plot.txt", + "multiqc/star_rsem/multiqc_report_data/fastqc_trimmed_per_base_sequence_quality_plot.txt", + "multiqc/star_rsem/multiqc_report_data/fastqc_trimmed_per_sequence_gc_content_plot_Counts.txt", + "multiqc/star_rsem/multiqc_report_data/fastqc_trimmed_per_sequence_gc_content_plot_Percentages.txt", + "multiqc/star_rsem/multiqc_report_data/fastqc_trimmed_per_sequence_quality_scores_plot.txt", + "multiqc/star_rsem/multiqc_report_data/fastqc_trimmed_sequence_counts_plot.txt", + "multiqc/star_rsem/multiqc_report_data/fastqc_trimmed_sequence_duplication_levels_plot.txt", + "multiqc/star_rsem/multiqc_report_data/fastqc_trimmed_top_overrepresented_sequences_table.txt", + "multiqc/star_rsem/multiqc_report_data/junction_saturation_known.txt", + "multiqc/star_rsem/multiqc_report_data/junction_saturation_novel.txt", + "multiqc/star_rsem/multiqc_report_data/llms-full.txt", + "multiqc/star_rsem/multiqc_report_data/multiqc.log", + "multiqc/star_rsem/multiqc_report_data/multiqc.parquet", + "multiqc/star_rsem/multiqc_report_data/multiqc_citations.txt", + "multiqc/star_rsem/multiqc_report_data/multiqc_cutadapt.txt", + "multiqc/star_rsem/multiqc_report_data/multiqc_data.json", + "multiqc/star_rsem/multiqc_report_data/multiqc_dupradar.txt", + "multiqc/star_rsem/multiqc_report_data/multiqc_fail_strand_check_table.txt", + "multiqc/star_rsem/multiqc_report_data/multiqc_fastqc_fastqc_raw.txt", + "multiqc/star_rsem/multiqc_report_data/multiqc_fastqc_fastqc_trimmed.txt", + "multiqc/star_rsem/multiqc_report_data/multiqc_featurecounts_biotype_plot.txt", + "multiqc/star_rsem/multiqc_report_data/multiqc_general_stats.txt", + "multiqc/star_rsem/multiqc_report_data/multiqc_rsem.txt", + "multiqc/star_rsem/multiqc_report_data/multiqc_rseqc_bam_stat.txt", + "multiqc/star_rsem/multiqc_report_data/multiqc_rseqc_infer_experiment.txt", + "multiqc/star_rsem/multiqc_report_data/multiqc_rseqc_junction_annotation.txt", + "multiqc/star_rsem/multiqc_report_data/multiqc_rseqc_read_distribution.txt", + "multiqc/star_rsem/multiqc_report_data/multiqc_salmon.txt", + "multiqc/star_rsem/multiqc_report_data/multiqc_salmon_deseq2_clustering.txt", + "multiqc/star_rsem/multiqc_report_data/multiqc_salmon_deseq2_pca.txt", + "multiqc/star_rsem/multiqc_report_data/multiqc_samtools_flagstat.txt", + "multiqc/star_rsem/multiqc_report_data/multiqc_samtools_idxstats.txt", + "multiqc/star_rsem/multiqc_report_data/multiqc_samtools_stats.txt", + "multiqc/star_rsem/multiqc_report_data/multiqc_software_versions.txt", + "multiqc/star_rsem/multiqc_report_data/multiqc_sources.txt", + "multiqc/star_rsem/multiqc_report_data/multiqc_star.txt", + "multiqc/star_rsem/multiqc_report_data/multiqc_star_rsem_deseq2_clustering.txt", + "multiqc/star_rsem/multiqc_report_data/multiqc_star_rsem_deseq2_pca.txt", + "multiqc/star_rsem/multiqc_report_data/multiqc_umitools_dedup.txt", + "multiqc/star_rsem/multiqc_report_data/multiqc_umitools_extract.txt", + "multiqc/star_rsem/multiqc_report_data/qualimap_gene_coverage_profile_Counts.txt", + "multiqc/star_rsem/multiqc_report_data/qualimap_gene_coverage_profile_Normalised.txt", + "multiqc/star_rsem/multiqc_report_data/qualimap_genomic_origin.txt", + "multiqc/star_rsem/multiqc_report_data/qualimap_rnaseq_cov_hist.txt", + "multiqc/star_rsem/multiqc_report_data/qualimap_rnaseq_genome_results.txt", + "multiqc/star_rsem/multiqc_report_data/rsem_assignment_plot.txt", + "multiqc/star_rsem/multiqc_report_data/rsem_multimapping_rates.txt", + "multiqc/star_rsem/multiqc_report_data/rseqc_bam_stat.txt", + "multiqc/star_rsem/multiqc_report_data/rseqc_infer_experiment_plot.txt", + "multiqc/star_rsem/multiqc_report_data/rseqc_inner_distance.txt", + "multiqc/star_rsem/multiqc_report_data/rseqc_inner_distance_plot_Counts.txt", + "multiqc/star_rsem/multiqc_report_data/rseqc_inner_distance_plot_Percentages.txt", + "multiqc/star_rsem/multiqc_report_data/rseqc_junction_annotation_junctions_plot_Events.txt", + "multiqc/star_rsem/multiqc_report_data/rseqc_junction_annotation_junctions_plot_Junctions.txt", + "multiqc/star_rsem/multiqc_report_data/rseqc_junction_saturation_all.txt", + "multiqc/star_rsem/multiqc_report_data/rseqc_junction_saturation_plot_All_Junctions.txt", + "multiqc/star_rsem/multiqc_report_data/rseqc_junction_saturation_plot_Known_Junctions.txt", + "multiqc/star_rsem/multiqc_report_data/rseqc_junction_saturation_plot_Novel_Junctions.txt", + "multiqc/star_rsem/multiqc_report_data/rseqc_read_distribution_plot.txt", + "multiqc/star_rsem/multiqc_report_data/rseqc_read_dups.txt", + "multiqc/star_rsem/multiqc_report_data/rseqc_read_dups_plot.txt", + "multiqc/star_rsem/multiqc_report_data/salmon_plot.txt", + "multiqc/star_rsem/multiqc_report_data/samtools-flagstat-pct-table.txt", + "multiqc/star_rsem/multiqc_report_data/samtools-flagstat-table.txt", + "multiqc/star_rsem/multiqc_report_data/samtools-idxstats-mapped-reads-plot_Normalised_Counts.txt", + "multiqc/star_rsem/multiqc_report_data/samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts.txt", + "multiqc/star_rsem/multiqc_report_data/samtools-idxstats-mapped-reads-plot_Raw_Counts.txt", + "multiqc/star_rsem/multiqc_report_data/samtools-stats-dp.txt", + "multiqc/star_rsem/multiqc_report_data/samtools_alignment_plot.txt", + "multiqc/star_rsem/multiqc_report_data/star_alignment_plot.txt", + "multiqc/star_rsem/multiqc_report_data/star_summary_table.txt", + "multiqc/star_rsem/multiqc_report_data/umitools_deduplication_barplot.txt", + "multiqc/star_rsem/multiqc_report_data/umitools_extract_barplot_success.txt", + "multiqc/star_rsem/multiqc_report_data/umitools_extract_regex_barplot.txt", + "multiqc/star_rsem/multiqc_report_data/umitools_stats_violin.txt", + "multiqc/star_rsem/multiqc_report_plots", + "multiqc/star_rsem/multiqc_report_plots/pdf", + "multiqc/star_rsem/multiqc_report_plots/pdf/cutadapt_filtered_reads_plot-cnt.pdf", + "multiqc/star_rsem/multiqc_report_plots/pdf/cutadapt_filtered_reads_plot-pct.pdf", + "multiqc/star_rsem/multiqc_report_plots/pdf/cutadapt_trimmed_sequences_plot_3_Counts.pdf", + "multiqc/star_rsem/multiqc_report_plots/pdf/cutadapt_trimmed_sequences_plot_3_Obs_Exp.pdf", + "multiqc/star_rsem/multiqc_report_plots/pdf/dupradar.pdf", + "multiqc/star_rsem/multiqc_report_plots/pdf/fail_strand_check_table.pdf", + "multiqc/star_rsem/multiqc_report_plots/pdf/fastqc_raw-status-check-heatmap.pdf", + "multiqc/star_rsem/multiqc_report_plots/pdf/fastqc_raw_adapter_content_plot.pdf", + "multiqc/star_rsem/multiqc_report_plots/pdf/fastqc_raw_overrepresented_sequences_plot.pdf", + "multiqc/star_rsem/multiqc_report_plots/pdf/fastqc_raw_per_base_n_content_plot.pdf", + "multiqc/star_rsem/multiqc_report_plots/pdf/fastqc_raw_per_base_sequence_quality_plot.pdf", + "multiqc/star_rsem/multiqc_report_plots/pdf/fastqc_raw_per_sequence_gc_content_plot_Counts.pdf", + "multiqc/star_rsem/multiqc_report_plots/pdf/fastqc_raw_per_sequence_gc_content_plot_Percentages.pdf", + "multiqc/star_rsem/multiqc_report_plots/pdf/fastqc_raw_per_sequence_quality_scores_plot.pdf", + "multiqc/star_rsem/multiqc_report_plots/pdf/fastqc_raw_sequence_counts_plot-cnt.pdf", + "multiqc/star_rsem/multiqc_report_plots/pdf/fastqc_raw_sequence_counts_plot-pct.pdf", + "multiqc/star_rsem/multiqc_report_plots/pdf/fastqc_raw_sequence_duplication_levels_plot.pdf", + "multiqc/star_rsem/multiqc_report_plots/pdf/fastqc_raw_top_overrepresented_sequences_table.pdf", + "multiqc/star_rsem/multiqc_report_plots/pdf/fastqc_sequence_length_distribution_plot.pdf", + "multiqc/star_rsem/multiqc_report_plots/pdf/fastqc_trimmed-status-check-heatmap.pdf", + "multiqc/star_rsem/multiqc_report_plots/pdf/fastqc_trimmed_overrepresented_sequences_plot.pdf", + "multiqc/star_rsem/multiqc_report_plots/pdf/fastqc_trimmed_per_base_n_content_plot.pdf", + "multiqc/star_rsem/multiqc_report_plots/pdf/fastqc_trimmed_per_base_sequence_quality_plot.pdf", + "multiqc/star_rsem/multiqc_report_plots/pdf/fastqc_trimmed_per_sequence_gc_content_plot_Counts.pdf", + "multiqc/star_rsem/multiqc_report_plots/pdf/fastqc_trimmed_per_sequence_gc_content_plot_Percentages.pdf", + "multiqc/star_rsem/multiqc_report_plots/pdf/fastqc_trimmed_per_sequence_quality_scores_plot.pdf", + "multiqc/star_rsem/multiqc_report_plots/pdf/fastqc_trimmed_sequence_counts_plot-cnt.pdf", + "multiqc/star_rsem/multiqc_report_plots/pdf/fastqc_trimmed_sequence_counts_plot-pct.pdf", + "multiqc/star_rsem/multiqc_report_plots/pdf/fastqc_trimmed_sequence_duplication_levels_plot.pdf", + "multiqc/star_rsem/multiqc_report_plots/pdf/fastqc_trimmed_top_overrepresented_sequences_table.pdf", + "multiqc/star_rsem/multiqc_report_plots/pdf/featurecounts_biotype_plot-cnt.pdf", + "multiqc/star_rsem/multiqc_report_plots/pdf/featurecounts_biotype_plot-pct.pdf", + "multiqc/star_rsem/multiqc_report_plots/pdf/qualimap_gene_coverage_profile_Counts.pdf", + "multiqc/star_rsem/multiqc_report_plots/pdf/qualimap_gene_coverage_profile_Normalised.pdf", + "multiqc/star_rsem/multiqc_report_plots/pdf/qualimap_genomic_origin-cnt.pdf", + "multiqc/star_rsem/multiqc_report_plots/pdf/qualimap_genomic_origin-pct.pdf", + "multiqc/star_rsem/multiqc_report_plots/pdf/rsem_assignment_plot-cnt.pdf", + "multiqc/star_rsem/multiqc_report_plots/pdf/rsem_assignment_plot-pct.pdf", + "multiqc/star_rsem/multiqc_report_plots/pdf/rsem_multimapping_rates.pdf", + "multiqc/star_rsem/multiqc_report_plots/pdf/rseqc_bam_stat.pdf", + "multiqc/star_rsem/multiqc_report_plots/pdf/rseqc_infer_experiment_plot.pdf", + "multiqc/star_rsem/multiqc_report_plots/pdf/rseqc_inner_distance_plot_Counts.pdf", + "multiqc/star_rsem/multiqc_report_plots/pdf/rseqc_inner_distance_plot_Percentages.pdf", + "multiqc/star_rsem/multiqc_report_plots/pdf/rseqc_junction_annotation_junctions_plot_Events-cnt.pdf", + "multiqc/star_rsem/multiqc_report_plots/pdf/rseqc_junction_annotation_junctions_plot_Events-pct.pdf", + "multiqc/star_rsem/multiqc_report_plots/pdf/rseqc_junction_annotation_junctions_plot_Junctions-cnt.pdf", + "multiqc/star_rsem/multiqc_report_plots/pdf/rseqc_junction_annotation_junctions_plot_Junctions-pct.pdf", + "multiqc/star_rsem/multiqc_report_plots/pdf/rseqc_junction_saturation_plot_All_Junctions.pdf", + "multiqc/star_rsem/multiqc_report_plots/pdf/rseqc_junction_saturation_plot_Known_Junctions.pdf", + "multiqc/star_rsem/multiqc_report_plots/pdf/rseqc_junction_saturation_plot_Novel_Junctions.pdf", + "multiqc/star_rsem/multiqc_report_plots/pdf/rseqc_read_distribution_plot-cnt.pdf", + "multiqc/star_rsem/multiqc_report_plots/pdf/rseqc_read_distribution_plot-pct.pdf", + "multiqc/star_rsem/multiqc_report_plots/pdf/rseqc_read_dups_plot.pdf", + "multiqc/star_rsem/multiqc_report_plots/pdf/salmon_deseq2_clustering.pdf", + "multiqc/star_rsem/multiqc_report_plots/pdf/salmon_deseq2_pca.pdf", + "multiqc/star_rsem/multiqc_report_plots/pdf/salmon_plot.pdf", + "multiqc/star_rsem/multiqc_report_plots/pdf/samtools-flagstat-pct-table.pdf", + "multiqc/star_rsem/multiqc_report_plots/pdf/samtools-flagstat-table.pdf", + "multiqc/star_rsem/multiqc_report_plots/pdf/samtools-idxstats-mapped-reads-plot_Normalised_Counts-cnt.pdf", + "multiqc/star_rsem/multiqc_report_plots/pdf/samtools-idxstats-mapped-reads-plot_Normalised_Counts-log.pdf", + "multiqc/star_rsem/multiqc_report_plots/pdf/samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts-cnt.pdf", + "multiqc/star_rsem/multiqc_report_plots/pdf/samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts-log.pdf", + "multiqc/star_rsem/multiqc_report_plots/pdf/samtools-idxstats-mapped-reads-plot_Raw_Counts-cnt.pdf", + "multiqc/star_rsem/multiqc_report_plots/pdf/samtools-idxstats-mapped-reads-plot_Raw_Counts-log.pdf", + "multiqc/star_rsem/multiqc_report_plots/pdf/samtools-stats-dp.pdf", + "multiqc/star_rsem/multiqc_report_plots/pdf/samtools_alignment_plot-cnt.pdf", + "multiqc/star_rsem/multiqc_report_plots/pdf/samtools_alignment_plot-pct.pdf", + "multiqc/star_rsem/multiqc_report_plots/pdf/star_alignment_plot-cnt.pdf", + "multiqc/star_rsem/multiqc_report_plots/pdf/star_alignment_plot-pct.pdf", + "multiqc/star_rsem/multiqc_report_plots/pdf/star_rsem_deseq2_clustering.pdf", + "multiqc/star_rsem/multiqc_report_plots/pdf/star_rsem_deseq2_pca.pdf", + "multiqc/star_rsem/multiqc_report_plots/pdf/star_summary_table.pdf", + "multiqc/star_rsem/multiqc_report_plots/pdf/umitools_deduplication_barplot-cnt.pdf", + "multiqc/star_rsem/multiqc_report_plots/pdf/umitools_deduplication_barplot-pct.pdf", + "multiqc/star_rsem/multiqc_report_plots/pdf/umitools_extract_barplot_success-cnt.pdf", + "multiqc/star_rsem/multiqc_report_plots/pdf/umitools_extract_barplot_success-pct.pdf", + "multiqc/star_rsem/multiqc_report_plots/pdf/umitools_extract_regex_barplot-cnt.pdf", + "multiqc/star_rsem/multiqc_report_plots/pdf/umitools_extract_regex_barplot-pct.pdf", + "multiqc/star_rsem/multiqc_report_plots/pdf/umitools_stats_violin.pdf", + "multiqc/star_rsem/multiqc_report_plots/png", + "multiqc/star_rsem/multiqc_report_plots/png/cutadapt_filtered_reads_plot-cnt.png", + "multiqc/star_rsem/multiqc_report_plots/png/cutadapt_filtered_reads_plot-pct.png", + "multiqc/star_rsem/multiqc_report_plots/png/cutadapt_trimmed_sequences_plot_3_Counts.png", + "multiqc/star_rsem/multiqc_report_plots/png/cutadapt_trimmed_sequences_plot_3_Obs_Exp.png", + "multiqc/star_rsem/multiqc_report_plots/png/dupradar.png", + "multiqc/star_rsem/multiqc_report_plots/png/fail_strand_check_table.png", + "multiqc/star_rsem/multiqc_report_plots/png/fastqc_raw-status-check-heatmap.png", + "multiqc/star_rsem/multiqc_report_plots/png/fastqc_raw_adapter_content_plot.png", + "multiqc/star_rsem/multiqc_report_plots/png/fastqc_raw_overrepresented_sequences_plot.png", + "multiqc/star_rsem/multiqc_report_plots/png/fastqc_raw_per_base_n_content_plot.png", + "multiqc/star_rsem/multiqc_report_plots/png/fastqc_raw_per_base_sequence_quality_plot.png", + "multiqc/star_rsem/multiqc_report_plots/png/fastqc_raw_per_sequence_gc_content_plot_Counts.png", + "multiqc/star_rsem/multiqc_report_plots/png/fastqc_raw_per_sequence_gc_content_plot_Percentages.png", + "multiqc/star_rsem/multiqc_report_plots/png/fastqc_raw_per_sequence_quality_scores_plot.png", + "multiqc/star_rsem/multiqc_report_plots/png/fastqc_raw_sequence_counts_plot-cnt.png", + "multiqc/star_rsem/multiqc_report_plots/png/fastqc_raw_sequence_counts_plot-pct.png", + "multiqc/star_rsem/multiqc_report_plots/png/fastqc_raw_sequence_duplication_levels_plot.png", + "multiqc/star_rsem/multiqc_report_plots/png/fastqc_raw_top_overrepresented_sequences_table.png", + "multiqc/star_rsem/multiqc_report_plots/png/fastqc_sequence_length_distribution_plot.png", + "multiqc/star_rsem/multiqc_report_plots/png/fastqc_trimmed-status-check-heatmap.png", + "multiqc/star_rsem/multiqc_report_plots/png/fastqc_trimmed_overrepresented_sequences_plot.png", + "multiqc/star_rsem/multiqc_report_plots/png/fastqc_trimmed_per_base_n_content_plot.png", + "multiqc/star_rsem/multiqc_report_plots/png/fastqc_trimmed_per_base_sequence_quality_plot.png", + "multiqc/star_rsem/multiqc_report_plots/png/fastqc_trimmed_per_sequence_gc_content_plot_Counts.png", + "multiqc/star_rsem/multiqc_report_plots/png/fastqc_trimmed_per_sequence_gc_content_plot_Percentages.png", + "multiqc/star_rsem/multiqc_report_plots/png/fastqc_trimmed_per_sequence_quality_scores_plot.png", + "multiqc/star_rsem/multiqc_report_plots/png/fastqc_trimmed_sequence_counts_plot-cnt.png", + "multiqc/star_rsem/multiqc_report_plots/png/fastqc_trimmed_sequence_counts_plot-pct.png", + "multiqc/star_rsem/multiqc_report_plots/png/fastqc_trimmed_sequence_duplication_levels_plot.png", + "multiqc/star_rsem/multiqc_report_plots/png/fastqc_trimmed_top_overrepresented_sequences_table.png", + "multiqc/star_rsem/multiqc_report_plots/png/featurecounts_biotype_plot-cnt.png", + "multiqc/star_rsem/multiqc_report_plots/png/featurecounts_biotype_plot-pct.png", + "multiqc/star_rsem/multiqc_report_plots/png/qualimap_gene_coverage_profile_Counts.png", + "multiqc/star_rsem/multiqc_report_plots/png/qualimap_gene_coverage_profile_Normalised.png", + "multiqc/star_rsem/multiqc_report_plots/png/qualimap_genomic_origin-cnt.png", + "multiqc/star_rsem/multiqc_report_plots/png/qualimap_genomic_origin-pct.png", + "multiqc/star_rsem/multiqc_report_plots/png/rsem_assignment_plot-cnt.png", + "multiqc/star_rsem/multiqc_report_plots/png/rsem_assignment_plot-pct.png", + "multiqc/star_rsem/multiqc_report_plots/png/rsem_multimapping_rates.png", + "multiqc/star_rsem/multiqc_report_plots/png/rseqc_bam_stat.png", + "multiqc/star_rsem/multiqc_report_plots/png/rseqc_infer_experiment_plot.png", + "multiqc/star_rsem/multiqc_report_plots/png/rseqc_inner_distance_plot_Counts.png", + "multiqc/star_rsem/multiqc_report_plots/png/rseqc_inner_distance_plot_Percentages.png", + "multiqc/star_rsem/multiqc_report_plots/png/rseqc_junction_annotation_junctions_plot_Events-cnt.png", + "multiqc/star_rsem/multiqc_report_plots/png/rseqc_junction_annotation_junctions_plot_Events-pct.png", + "multiqc/star_rsem/multiqc_report_plots/png/rseqc_junction_annotation_junctions_plot_Junctions-cnt.png", + "multiqc/star_rsem/multiqc_report_plots/png/rseqc_junction_annotation_junctions_plot_Junctions-pct.png", + "multiqc/star_rsem/multiqc_report_plots/png/rseqc_junction_saturation_plot_All_Junctions.png", + "multiqc/star_rsem/multiqc_report_plots/png/rseqc_junction_saturation_plot_Known_Junctions.png", + "multiqc/star_rsem/multiqc_report_plots/png/rseqc_junction_saturation_plot_Novel_Junctions.png", + "multiqc/star_rsem/multiqc_report_plots/png/rseqc_read_distribution_plot-cnt.png", + "multiqc/star_rsem/multiqc_report_plots/png/rseqc_read_distribution_plot-pct.png", + "multiqc/star_rsem/multiqc_report_plots/png/rseqc_read_dups_plot.png", + "multiqc/star_rsem/multiqc_report_plots/png/salmon_deseq2_clustering.png", + "multiqc/star_rsem/multiqc_report_plots/png/salmon_deseq2_pca.png", + "multiqc/star_rsem/multiqc_report_plots/png/salmon_plot.png", + "multiqc/star_rsem/multiqc_report_plots/png/samtools-flagstat-pct-table.png", + "multiqc/star_rsem/multiqc_report_plots/png/samtools-flagstat-table.png", + "multiqc/star_rsem/multiqc_report_plots/png/samtools-idxstats-mapped-reads-plot_Normalised_Counts-cnt.png", + "multiqc/star_rsem/multiqc_report_plots/png/samtools-idxstats-mapped-reads-plot_Normalised_Counts-log.png", + "multiqc/star_rsem/multiqc_report_plots/png/samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts-cnt.png", + "multiqc/star_rsem/multiqc_report_plots/png/samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts-log.png", + "multiqc/star_rsem/multiqc_report_plots/png/samtools-idxstats-mapped-reads-plot_Raw_Counts-cnt.png", + "multiqc/star_rsem/multiqc_report_plots/png/samtools-idxstats-mapped-reads-plot_Raw_Counts-log.png", + "multiqc/star_rsem/multiqc_report_plots/png/samtools-stats-dp.png", + "multiqc/star_rsem/multiqc_report_plots/png/samtools_alignment_plot-cnt.png", + "multiqc/star_rsem/multiqc_report_plots/png/samtools_alignment_plot-pct.png", + "multiqc/star_rsem/multiqc_report_plots/png/star_alignment_plot-cnt.png", + "multiqc/star_rsem/multiqc_report_plots/png/star_alignment_plot-pct.png", + "multiqc/star_rsem/multiqc_report_plots/png/star_rsem_deseq2_clustering.png", + "multiqc/star_rsem/multiqc_report_plots/png/star_rsem_deseq2_pca.png", + "multiqc/star_rsem/multiqc_report_plots/png/star_summary_table.png", + "multiqc/star_rsem/multiqc_report_plots/png/umitools_deduplication_barplot-cnt.png", + "multiqc/star_rsem/multiqc_report_plots/png/umitools_deduplication_barplot-pct.png", + "multiqc/star_rsem/multiqc_report_plots/png/umitools_extract_barplot_success-cnt.png", + "multiqc/star_rsem/multiqc_report_plots/png/umitools_extract_barplot_success-pct.png", + "multiqc/star_rsem/multiqc_report_plots/png/umitools_extract_regex_barplot-cnt.png", + "multiqc/star_rsem/multiqc_report_plots/png/umitools_extract_regex_barplot-pct.png", + "multiqc/star_rsem/multiqc_report_plots/png/umitools_stats_violin.png", + "multiqc/star_rsem/multiqc_report_plots/svg", + "multiqc/star_rsem/multiqc_report_plots/svg/cutadapt_filtered_reads_plot-cnt.svg", + "multiqc/star_rsem/multiqc_report_plots/svg/cutadapt_filtered_reads_plot-pct.svg", + "multiqc/star_rsem/multiqc_report_plots/svg/cutadapt_trimmed_sequences_plot_3_Counts.svg", + "multiqc/star_rsem/multiqc_report_plots/svg/cutadapt_trimmed_sequences_plot_3_Obs_Exp.svg", + "multiqc/star_rsem/multiqc_report_plots/svg/dupradar.svg", + "multiqc/star_rsem/multiqc_report_plots/svg/fail_strand_check_table.svg", + "multiqc/star_rsem/multiqc_report_plots/svg/fastqc_raw-status-check-heatmap.svg", + "multiqc/star_rsem/multiqc_report_plots/svg/fastqc_raw_adapter_content_plot.svg", + "multiqc/star_rsem/multiqc_report_plots/svg/fastqc_raw_overrepresented_sequences_plot.svg", + "multiqc/star_rsem/multiqc_report_plots/svg/fastqc_raw_per_base_n_content_plot.svg", + "multiqc/star_rsem/multiqc_report_plots/svg/fastqc_raw_per_base_sequence_quality_plot.svg", + "multiqc/star_rsem/multiqc_report_plots/svg/fastqc_raw_per_sequence_gc_content_plot_Counts.svg", + "multiqc/star_rsem/multiqc_report_plots/svg/fastqc_raw_per_sequence_gc_content_plot_Percentages.svg", + "multiqc/star_rsem/multiqc_report_plots/svg/fastqc_raw_per_sequence_quality_scores_plot.svg", + "multiqc/star_rsem/multiqc_report_plots/svg/fastqc_raw_sequence_counts_plot-cnt.svg", + "multiqc/star_rsem/multiqc_report_plots/svg/fastqc_raw_sequence_counts_plot-pct.svg", + "multiqc/star_rsem/multiqc_report_plots/svg/fastqc_raw_sequence_duplication_levels_plot.svg", + "multiqc/star_rsem/multiqc_report_plots/svg/fastqc_raw_top_overrepresented_sequences_table.svg", + "multiqc/star_rsem/multiqc_report_plots/svg/fastqc_sequence_length_distribution_plot.svg", + "multiqc/star_rsem/multiqc_report_plots/svg/fastqc_trimmed-status-check-heatmap.svg", + "multiqc/star_rsem/multiqc_report_plots/svg/fastqc_trimmed_overrepresented_sequences_plot.svg", + "multiqc/star_rsem/multiqc_report_plots/svg/fastqc_trimmed_per_base_n_content_plot.svg", + "multiqc/star_rsem/multiqc_report_plots/svg/fastqc_trimmed_per_base_sequence_quality_plot.svg", + "multiqc/star_rsem/multiqc_report_plots/svg/fastqc_trimmed_per_sequence_gc_content_plot_Counts.svg", + "multiqc/star_rsem/multiqc_report_plots/svg/fastqc_trimmed_per_sequence_gc_content_plot_Percentages.svg", + "multiqc/star_rsem/multiqc_report_plots/svg/fastqc_trimmed_per_sequence_quality_scores_plot.svg", + "multiqc/star_rsem/multiqc_report_plots/svg/fastqc_trimmed_sequence_counts_plot-cnt.svg", + "multiqc/star_rsem/multiqc_report_plots/svg/fastqc_trimmed_sequence_counts_plot-pct.svg", + "multiqc/star_rsem/multiqc_report_plots/svg/fastqc_trimmed_sequence_duplication_levels_plot.svg", + "multiqc/star_rsem/multiqc_report_plots/svg/fastqc_trimmed_top_overrepresented_sequences_table.svg", + "multiqc/star_rsem/multiqc_report_plots/svg/featurecounts_biotype_plot-cnt.svg", + "multiqc/star_rsem/multiqc_report_plots/svg/featurecounts_biotype_plot-pct.svg", + "multiqc/star_rsem/multiqc_report_plots/svg/qualimap_gene_coverage_profile_Counts.svg", + "multiqc/star_rsem/multiqc_report_plots/svg/qualimap_gene_coverage_profile_Normalised.svg", + "multiqc/star_rsem/multiqc_report_plots/svg/qualimap_genomic_origin-cnt.svg", + "multiqc/star_rsem/multiqc_report_plots/svg/qualimap_genomic_origin-pct.svg", + "multiqc/star_rsem/multiqc_report_plots/svg/rsem_assignment_plot-cnt.svg", + "multiqc/star_rsem/multiqc_report_plots/svg/rsem_assignment_plot-pct.svg", + "multiqc/star_rsem/multiqc_report_plots/svg/rsem_multimapping_rates.svg", + "multiqc/star_rsem/multiqc_report_plots/svg/rseqc_bam_stat.svg", + "multiqc/star_rsem/multiqc_report_plots/svg/rseqc_infer_experiment_plot.svg", + "multiqc/star_rsem/multiqc_report_plots/svg/rseqc_inner_distance_plot_Counts.svg", + "multiqc/star_rsem/multiqc_report_plots/svg/rseqc_inner_distance_plot_Percentages.svg", + "multiqc/star_rsem/multiqc_report_plots/svg/rseqc_junction_annotation_junctions_plot_Events-cnt.svg", + "multiqc/star_rsem/multiqc_report_plots/svg/rseqc_junction_annotation_junctions_plot_Events-pct.svg", + "multiqc/star_rsem/multiqc_report_plots/svg/rseqc_junction_annotation_junctions_plot_Junctions-cnt.svg", + "multiqc/star_rsem/multiqc_report_plots/svg/rseqc_junction_annotation_junctions_plot_Junctions-pct.svg", + "multiqc/star_rsem/multiqc_report_plots/svg/rseqc_junction_saturation_plot_All_Junctions.svg", + "multiqc/star_rsem/multiqc_report_plots/svg/rseqc_junction_saturation_plot_Known_Junctions.svg", + "multiqc/star_rsem/multiqc_report_plots/svg/rseqc_junction_saturation_plot_Novel_Junctions.svg", + "multiqc/star_rsem/multiqc_report_plots/svg/rseqc_read_distribution_plot-cnt.svg", + "multiqc/star_rsem/multiqc_report_plots/svg/rseqc_read_distribution_plot-pct.svg", + "multiqc/star_rsem/multiqc_report_plots/svg/rseqc_read_dups_plot.svg", + "multiqc/star_rsem/multiqc_report_plots/svg/salmon_deseq2_clustering.svg", + "multiqc/star_rsem/multiqc_report_plots/svg/salmon_deseq2_pca.svg", + "multiqc/star_rsem/multiqc_report_plots/svg/salmon_plot.svg", + "multiqc/star_rsem/multiqc_report_plots/svg/samtools-flagstat-pct-table.svg", + "multiqc/star_rsem/multiqc_report_plots/svg/samtools-flagstat-table.svg", + "multiqc/star_rsem/multiqc_report_plots/svg/samtools-idxstats-mapped-reads-plot_Normalised_Counts-cnt.svg", + "multiqc/star_rsem/multiqc_report_plots/svg/samtools-idxstats-mapped-reads-plot_Normalised_Counts-log.svg", + "multiqc/star_rsem/multiqc_report_plots/svg/samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts-cnt.svg", + "multiqc/star_rsem/multiqc_report_plots/svg/samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts-log.svg", + "multiqc/star_rsem/multiqc_report_plots/svg/samtools-idxstats-mapped-reads-plot_Raw_Counts-cnt.svg", + "multiqc/star_rsem/multiqc_report_plots/svg/samtools-idxstats-mapped-reads-plot_Raw_Counts-log.svg", + "multiqc/star_rsem/multiqc_report_plots/svg/samtools-stats-dp.svg", + "multiqc/star_rsem/multiqc_report_plots/svg/samtools_alignment_plot-cnt.svg", + "multiqc/star_rsem/multiqc_report_plots/svg/samtools_alignment_plot-pct.svg", + "multiqc/star_rsem/multiqc_report_plots/svg/star_alignment_plot-cnt.svg", + "multiqc/star_rsem/multiqc_report_plots/svg/star_alignment_plot-pct.svg", + "multiqc/star_rsem/multiqc_report_plots/svg/star_rsem_deseq2_clustering.svg", + "multiqc/star_rsem/multiqc_report_plots/svg/star_rsem_deseq2_pca.svg", + "multiqc/star_rsem/multiqc_report_plots/svg/star_summary_table.svg", + "multiqc/star_rsem/multiqc_report_plots/svg/umitools_deduplication_barplot-cnt.svg", + "multiqc/star_rsem/multiqc_report_plots/svg/umitools_deduplication_barplot-pct.svg", + "multiqc/star_rsem/multiqc_report_plots/svg/umitools_extract_barplot_success-cnt.svg", + "multiqc/star_rsem/multiqc_report_plots/svg/umitools_extract_barplot_success-pct.svg", + "multiqc/star_rsem/multiqc_report_plots/svg/umitools_extract_regex_barplot-cnt.svg", + "multiqc/star_rsem/multiqc_report_plots/svg/umitools_extract_regex_barplot-pct.svg", + "multiqc/star_rsem/multiqc_report_plots/svg/umitools_stats_violin.svg", + "pipeline_info", + "pipeline_info/nf_core_rnaseq_software_mqc_versions.yml", + "salmon", + "salmon/RAP1_IAA_30M_REP1", + "salmon/RAP1_IAA_30M_REP1/aux_info", + "salmon/RAP1_IAA_30M_REP1/aux_info/ambig_info.tsv", + "salmon/RAP1_IAA_30M_REP1/aux_info/expected_bias.gz", + "salmon/RAP1_IAA_30M_REP1/aux_info/fld.gz", + "salmon/RAP1_IAA_30M_REP1/aux_info/meta_info.json", + "salmon/RAP1_IAA_30M_REP1/aux_info/observed_bias.gz", + "salmon/RAP1_IAA_30M_REP1/aux_info/observed_bias_3p.gz", + "salmon/RAP1_IAA_30M_REP1/cmd_info.json", + "salmon/RAP1_IAA_30M_REP1/libParams", + "salmon/RAP1_IAA_30M_REP1/libParams/flenDist.txt", + "salmon/RAP1_IAA_30M_REP1/lib_format_counts.json", + "salmon/RAP1_IAA_30M_REP1/logs", + "salmon/RAP1_IAA_30M_REP1/logs/salmon_quant.log", + "salmon/RAP1_IAA_30M_REP1/quant.genes.sf", + "salmon/RAP1_IAA_30M_REP1/quant.sf", + "salmon/RAP1_UNINDUCED_REP1", + "salmon/RAP1_UNINDUCED_REP1/aux_info", + "salmon/RAP1_UNINDUCED_REP1/aux_info/ambig_info.tsv", + "salmon/RAP1_UNINDUCED_REP1/aux_info/expected_bias.gz", + "salmon/RAP1_UNINDUCED_REP1/aux_info/fld.gz", + "salmon/RAP1_UNINDUCED_REP1/aux_info/meta_info.json", + "salmon/RAP1_UNINDUCED_REP1/aux_info/observed_bias.gz", + "salmon/RAP1_UNINDUCED_REP1/aux_info/observed_bias_3p.gz", + "salmon/RAP1_UNINDUCED_REP1/cmd_info.json", + "salmon/RAP1_UNINDUCED_REP1/libParams", + "salmon/RAP1_UNINDUCED_REP1/libParams/flenDist.txt", + "salmon/RAP1_UNINDUCED_REP1/lib_format_counts.json", + "salmon/RAP1_UNINDUCED_REP1/logs", + "salmon/RAP1_UNINDUCED_REP1/logs/salmon_quant.log", + "salmon/RAP1_UNINDUCED_REP1/quant.genes.sf", + "salmon/RAP1_UNINDUCED_REP1/quant.sf", + "salmon/RAP1_UNINDUCED_REP2", + "salmon/RAP1_UNINDUCED_REP2/aux_info", + "salmon/RAP1_UNINDUCED_REP2/aux_info/ambig_info.tsv", + "salmon/RAP1_UNINDUCED_REP2/aux_info/expected_bias.gz", + "salmon/RAP1_UNINDUCED_REP2/aux_info/fld.gz", + "salmon/RAP1_UNINDUCED_REP2/aux_info/meta_info.json", + "salmon/RAP1_UNINDUCED_REP2/aux_info/observed_bias.gz", + "salmon/RAP1_UNINDUCED_REP2/aux_info/observed_bias_3p.gz", + "salmon/RAP1_UNINDUCED_REP2/cmd_info.json", + "salmon/RAP1_UNINDUCED_REP2/libParams", + "salmon/RAP1_UNINDUCED_REP2/libParams/flenDist.txt", + "salmon/RAP1_UNINDUCED_REP2/lib_format_counts.json", + "salmon/RAP1_UNINDUCED_REP2/logs", + "salmon/RAP1_UNINDUCED_REP2/logs/salmon_quant.log", + "salmon/RAP1_UNINDUCED_REP2/quant.genes.sf", + "salmon/RAP1_UNINDUCED_REP2/quant.sf", + "salmon/WT_REP1", + "salmon/WT_REP1/aux_info", + "salmon/WT_REP1/aux_info/ambig_info.tsv", + "salmon/WT_REP1/aux_info/expected_bias.gz", + "salmon/WT_REP1/aux_info/fld.gz", + "salmon/WT_REP1/aux_info/meta_info.json", + "salmon/WT_REP1/aux_info/observed_bias.gz", + "salmon/WT_REP1/aux_info/observed_bias_3p.gz", + "salmon/WT_REP1/cmd_info.json", + "salmon/WT_REP1/libParams", + "salmon/WT_REP1/libParams/flenDist.txt", + "salmon/WT_REP1/lib_format_counts.json", + "salmon/WT_REP1/logs", + "salmon/WT_REP1/logs/salmon_quant.log", + "salmon/WT_REP1/quant.genes.sf", + "salmon/WT_REP1/quant.sf", + "salmon/WT_REP2", + "salmon/WT_REP2/aux_info", + "salmon/WT_REP2/aux_info/ambig_info.tsv", + "salmon/WT_REP2/aux_info/expected_bias.gz", + "salmon/WT_REP2/aux_info/fld.gz", + "salmon/WT_REP2/aux_info/meta_info.json", + "salmon/WT_REP2/aux_info/observed_bias.gz", + "salmon/WT_REP2/aux_info/observed_bias_3p.gz", + "salmon/WT_REP2/cmd_info.json", + "salmon/WT_REP2/libParams", + "salmon/WT_REP2/libParams/flenDist.txt", + "salmon/WT_REP2/lib_format_counts.json", + "salmon/WT_REP2/logs", + "salmon/WT_REP2/logs/salmon_quant.log", + "salmon/WT_REP2/quant.genes.sf", + "salmon/WT_REP2/quant.sf", + "salmon/deseq2_qc", + "salmon/deseq2_qc/R_sessionInfo.log", + "salmon/deseq2_qc/deseq2.dds.RData", + "salmon/deseq2_qc/deseq2.pca.vals.txt", + "salmon/deseq2_qc/deseq2.plots.pdf", + "salmon/deseq2_qc/deseq2.sample.dists.txt", + "salmon/deseq2_qc/size_factors", + "salmon/deseq2_qc/size_factors/RAP1_IAA_30M_REP1.txt", + "salmon/deseq2_qc/size_factors/RAP1_UNINDUCED_REP1.txt", + "salmon/deseq2_qc/size_factors/RAP1_UNINDUCED_REP2.txt", + "salmon/deseq2_qc/size_factors/WT_REP1.txt", + "salmon/deseq2_qc/size_factors/WT_REP2.txt", + "salmon/deseq2_qc/size_factors/deseq2.size_factors.RData", + "salmon/salmon.merged.gene.SummarizedExperiment.rds", + "salmon/salmon.merged.gene_counts.tsv", + "salmon/salmon.merged.gene_counts_length_scaled.tsv", + "salmon/salmon.merged.gene_counts_scaled.tsv", + "salmon/salmon.merged.gene_lengths.tsv", + "salmon/salmon.merged.gene_tpm.tsv", + "salmon/salmon.merged.transcript.SummarizedExperiment.rds", + "salmon/salmon.merged.transcript_counts.tsv", + "salmon/salmon.merged.transcript_lengths.tsv", + "salmon/salmon.merged.transcript_tpm.tsv", + "salmon/salmon.merged.tx2gene.tsv", + "star_rsem", + "star_rsem/RAP1_IAA_30M_REP1.genes.results", + "star_rsem/RAP1_IAA_30M_REP1.isoforms.results", + "star_rsem/RAP1_IAA_30M_REP1.stat", + "star_rsem/RAP1_IAA_30M_REP1.stat/RAP1_IAA_30M_REP1.cnt", + "star_rsem/RAP1_IAA_30M_REP1.stat/RAP1_IAA_30M_REP1.model", + "star_rsem/RAP1_IAA_30M_REP1.stat/RAP1_IAA_30M_REP1.theta", + "star_rsem/RAP1_IAA_30M_REP1.umi_dedup.sorted.bam", + "star_rsem/RAP1_IAA_30M_REP1.umi_dedup.sorted.bam.bai", + "star_rsem/RAP1_IAA_30M_REP1.umi_dedup.transcriptome.bam", + "star_rsem/RAP1_IAA_30M_REP1.umi_dedup.transcriptome.filtered.bam", + "star_rsem/RAP1_IAA_30M_REP1.umi_dedup.transcriptome.sorted.bam", + "star_rsem/RAP1_IAA_30M_REP1.umi_dedup.transcriptome.sorted.bam.bai", + "star_rsem/RAP1_UNINDUCED_REP1.genes.results", + "star_rsem/RAP1_UNINDUCED_REP1.isoforms.results", + "star_rsem/RAP1_UNINDUCED_REP1.stat", + "star_rsem/RAP1_UNINDUCED_REP1.stat/RAP1_UNINDUCED_REP1.cnt", + "star_rsem/RAP1_UNINDUCED_REP1.stat/RAP1_UNINDUCED_REP1.model", + "star_rsem/RAP1_UNINDUCED_REP1.stat/RAP1_UNINDUCED_REP1.theta", + "star_rsem/RAP1_UNINDUCED_REP1.umi_dedup.sorted.bam", + "star_rsem/RAP1_UNINDUCED_REP1.umi_dedup.sorted.bam.bai", + "star_rsem/RAP1_UNINDUCED_REP1.umi_dedup.transcriptome.bam", + "star_rsem/RAP1_UNINDUCED_REP1.umi_dedup.transcriptome.sorted.bam", + "star_rsem/RAP1_UNINDUCED_REP1.umi_dedup.transcriptome.sorted.bam.bai", + "star_rsem/RAP1_UNINDUCED_REP2.genes.results", + "star_rsem/RAP1_UNINDUCED_REP2.isoforms.results", + "star_rsem/RAP1_UNINDUCED_REP2.stat", + "star_rsem/RAP1_UNINDUCED_REP2.stat/RAP1_UNINDUCED_REP2.cnt", + "star_rsem/RAP1_UNINDUCED_REP2.stat/RAP1_UNINDUCED_REP2.model", + "star_rsem/RAP1_UNINDUCED_REP2.stat/RAP1_UNINDUCED_REP2.theta", + "star_rsem/RAP1_UNINDUCED_REP2.umi_dedup.sorted.bam", + "star_rsem/RAP1_UNINDUCED_REP2.umi_dedup.sorted.bam.bai", + "star_rsem/RAP1_UNINDUCED_REP2.umi_dedup.transcriptome.bam", + "star_rsem/RAP1_UNINDUCED_REP2.umi_dedup.transcriptome.sorted.bam", + "star_rsem/RAP1_UNINDUCED_REP2.umi_dedup.transcriptome.sorted.bam.bai", + "star_rsem/WT_REP1.genes.results", + "star_rsem/WT_REP1.isoforms.results", + "star_rsem/WT_REP1.stat", + "star_rsem/WT_REP1.stat/WT_REP1.cnt", + "star_rsem/WT_REP1.stat/WT_REP1.model", + "star_rsem/WT_REP1.stat/WT_REP1.theta", + "star_rsem/WT_REP1.umi_dedup.sorted.bam", + "star_rsem/WT_REP1.umi_dedup.sorted.bam.bai", + "star_rsem/WT_REP1.umi_dedup.transcriptome.bam", + "star_rsem/WT_REP1.umi_dedup.transcriptome.filtered.bam", + "star_rsem/WT_REP1.umi_dedup.transcriptome.sorted.bam", + "star_rsem/WT_REP1.umi_dedup.transcriptome.sorted.bam.bai", + "star_rsem/WT_REP2.genes.results", + "star_rsem/WT_REP2.isoforms.results", + "star_rsem/WT_REP2.stat", + "star_rsem/WT_REP2.stat/WT_REP2.cnt", + "star_rsem/WT_REP2.stat/WT_REP2.model", + "star_rsem/WT_REP2.stat/WT_REP2.theta", + "star_rsem/WT_REP2.umi_dedup.sorted.bam", + "star_rsem/WT_REP2.umi_dedup.sorted.bam.bai", + "star_rsem/WT_REP2.umi_dedup.transcriptome.bam", + "star_rsem/WT_REP2.umi_dedup.transcriptome.filtered.bam", + "star_rsem/WT_REP2.umi_dedup.transcriptome.sorted.bam", + "star_rsem/WT_REP2.umi_dedup.transcriptome.sorted.bam.bai", + "star_rsem/deseq2_qc", + "star_rsem/deseq2_qc/R_sessionInfo.log", + "star_rsem/deseq2_qc/deseq2.dds.RData", + "star_rsem/deseq2_qc/deseq2.pca.vals.txt", + "star_rsem/deseq2_qc/deseq2.plots.pdf", + "star_rsem/deseq2_qc/deseq2.sample.dists.txt", + "star_rsem/deseq2_qc/size_factors", + "star_rsem/deseq2_qc/size_factors/RAP1_IAA_30M_REP1.txt", + "star_rsem/deseq2_qc/size_factors/RAP1_UNINDUCED_REP1.txt", + "star_rsem/deseq2_qc/size_factors/RAP1_UNINDUCED_REP2.txt", + "star_rsem/deseq2_qc/size_factors/WT_REP1.txt", + "star_rsem/deseq2_qc/size_factors/WT_REP2.txt", + "star_rsem/deseq2_qc/size_factors/deseq2.size_factors.RData", + "star_rsem/dupradar", + "star_rsem/dupradar/box_plot", + "star_rsem/dupradar/box_plot/RAP1_IAA_30M_REP1_duprateExpBoxplot.pdf", + "star_rsem/dupradar/box_plot/RAP1_UNINDUCED_REP1_duprateExpBoxplot.pdf", + "star_rsem/dupradar/box_plot/RAP1_UNINDUCED_REP2_duprateExpBoxplot.pdf", + "star_rsem/dupradar/box_plot/WT_REP1_duprateExpBoxplot.pdf", + "star_rsem/dupradar/box_plot/WT_REP2_duprateExpBoxplot.pdf", + "star_rsem/dupradar/gene_data", + "star_rsem/dupradar/gene_data/RAP1_IAA_30M_REP1_dupMatrix.txt", + "star_rsem/dupradar/gene_data/RAP1_UNINDUCED_REP1_dupMatrix.txt", + "star_rsem/dupradar/gene_data/RAP1_UNINDUCED_REP2_dupMatrix.txt", + "star_rsem/dupradar/gene_data/WT_REP1_dupMatrix.txt", + "star_rsem/dupradar/gene_data/WT_REP2_dupMatrix.txt", + "star_rsem/dupradar/histogram", + "star_rsem/dupradar/histogram/RAP1_IAA_30M_REP1_expressionHist.pdf", + "star_rsem/dupradar/histogram/RAP1_UNINDUCED_REP1_expressionHist.pdf", + "star_rsem/dupradar/histogram/RAP1_UNINDUCED_REP2_expressionHist.pdf", + "star_rsem/dupradar/histogram/WT_REP1_expressionHist.pdf", + "star_rsem/dupradar/histogram/WT_REP2_expressionHist.pdf", + "star_rsem/dupradar/intercepts_slope", + "star_rsem/dupradar/intercepts_slope/RAP1_IAA_30M_REP1_intercept_slope.txt", + "star_rsem/dupradar/intercepts_slope/RAP1_UNINDUCED_REP1_intercept_slope.txt", + "star_rsem/dupradar/intercepts_slope/RAP1_UNINDUCED_REP2_intercept_slope.txt", + "star_rsem/dupradar/intercepts_slope/WT_REP1_intercept_slope.txt", + "star_rsem/dupradar/intercepts_slope/WT_REP2_intercept_slope.txt", + "star_rsem/dupradar/scatter_plot", + "star_rsem/dupradar/scatter_plot/RAP1_IAA_30M_REP1_duprateExpDens.pdf", + "star_rsem/dupradar/scatter_plot/RAP1_UNINDUCED_REP1_duprateExpDens.pdf", + "star_rsem/dupradar/scatter_plot/RAP1_UNINDUCED_REP2_duprateExpDens.pdf", + "star_rsem/dupradar/scatter_plot/WT_REP1_duprateExpDens.pdf", + "star_rsem/dupradar/scatter_plot/WT_REP2_duprateExpDens.pdf", + "star_rsem/featurecounts", + "star_rsem/featurecounts/RAP1_IAA_30M_REP1.biotype_counts_mqc.tsv", + "star_rsem/featurecounts/RAP1_IAA_30M_REP1.biotype_counts_rrna_mqc.tsv", + "star_rsem/featurecounts/RAP1_IAA_30M_REP1.featureCounts.tsv", + "star_rsem/featurecounts/RAP1_IAA_30M_REP1.featureCounts.tsv.summary", + "star_rsem/featurecounts/RAP1_UNINDUCED_REP1.biotype_counts_mqc.tsv", + "star_rsem/featurecounts/RAP1_UNINDUCED_REP1.biotype_counts_rrna_mqc.tsv", + "star_rsem/featurecounts/RAP1_UNINDUCED_REP1.featureCounts.tsv", + "star_rsem/featurecounts/RAP1_UNINDUCED_REP1.featureCounts.tsv.summary", + "star_rsem/featurecounts/RAP1_UNINDUCED_REP2.biotype_counts_mqc.tsv", + "star_rsem/featurecounts/RAP1_UNINDUCED_REP2.biotype_counts_rrna_mqc.tsv", + "star_rsem/featurecounts/RAP1_UNINDUCED_REP2.featureCounts.tsv", + "star_rsem/featurecounts/RAP1_UNINDUCED_REP2.featureCounts.tsv.summary", + "star_rsem/featurecounts/WT_REP1.biotype_counts_mqc.tsv", + "star_rsem/featurecounts/WT_REP1.biotype_counts_rrna_mqc.tsv", + "star_rsem/featurecounts/WT_REP1.featureCounts.tsv", + "star_rsem/featurecounts/WT_REP1.featureCounts.tsv.summary", + "star_rsem/featurecounts/WT_REP2.biotype_counts_mqc.tsv", + "star_rsem/featurecounts/WT_REP2.biotype_counts_rrna_mqc.tsv", + "star_rsem/featurecounts/WT_REP2.featureCounts.tsv", + "star_rsem/featurecounts/WT_REP2.featureCounts.tsv.summary", + "star_rsem/log", + "star_rsem/log/RAP1_IAA_30M_REP1.Log.final.out", + "star_rsem/log/RAP1_IAA_30M_REP1.Log.out", + "star_rsem/log/RAP1_IAA_30M_REP1.Log.progress.out", + "star_rsem/log/RAP1_IAA_30M_REP1.SJ.out.tab", + "star_rsem/log/RAP1_UNINDUCED_REP1.Log.final.out", + "star_rsem/log/RAP1_UNINDUCED_REP1.Log.out", + "star_rsem/log/RAP1_UNINDUCED_REP1.Log.progress.out", + "star_rsem/log/RAP1_UNINDUCED_REP1.SJ.out.tab", + "star_rsem/log/RAP1_UNINDUCED_REP2.Log.final.out", + "star_rsem/log/RAP1_UNINDUCED_REP2.Log.out", + "star_rsem/log/RAP1_UNINDUCED_REP2.Log.progress.out", + "star_rsem/log/RAP1_UNINDUCED_REP2.SJ.out.tab", + "star_rsem/log/WT_REP1.Log.final.out", + "star_rsem/log/WT_REP1.Log.out", + "star_rsem/log/WT_REP1.Log.progress.out", + "star_rsem/log/WT_REP1.SJ.out.tab", + "star_rsem/log/WT_REP2.Log.final.out", + "star_rsem/log/WT_REP2.Log.out", + "star_rsem/log/WT_REP2.Log.progress.out", + "star_rsem/log/WT_REP2.SJ.out.tab", + "star_rsem/qualimap", + "star_rsem/qualimap/RAP1_IAA_30M_REP1", + "star_rsem/qualimap/RAP1_IAA_30M_REP1/css", + "star_rsem/qualimap/RAP1_IAA_30M_REP1/css/agogo.css", + "star_rsem/qualimap/RAP1_IAA_30M_REP1/css/ajax-loader.gif", + "star_rsem/qualimap/RAP1_IAA_30M_REP1/css/basic.css", + "star_rsem/qualimap/RAP1_IAA_30M_REP1/css/bgfooter.png", + "star_rsem/qualimap/RAP1_IAA_30M_REP1/css/bgtop.png", + "star_rsem/qualimap/RAP1_IAA_30M_REP1/css/comment-bright.png", + "star_rsem/qualimap/RAP1_IAA_30M_REP1/css/comment-close.png", + "star_rsem/qualimap/RAP1_IAA_30M_REP1/css/comment.png", + "star_rsem/qualimap/RAP1_IAA_30M_REP1/css/doctools.js", + "star_rsem/qualimap/RAP1_IAA_30M_REP1/css/down-pressed.png", + "star_rsem/qualimap/RAP1_IAA_30M_REP1/css/down.png", + "star_rsem/qualimap/RAP1_IAA_30M_REP1/css/file.png", + "star_rsem/qualimap/RAP1_IAA_30M_REP1/css/jquery.js", + "star_rsem/qualimap/RAP1_IAA_30M_REP1/css/minus.png", + "star_rsem/qualimap/RAP1_IAA_30M_REP1/css/plus.png", + "star_rsem/qualimap/RAP1_IAA_30M_REP1/css/pygments.css", + "star_rsem/qualimap/RAP1_IAA_30M_REP1/css/qualimap_logo_small.png", + "star_rsem/qualimap/RAP1_IAA_30M_REP1/css/report.css", + "star_rsem/qualimap/RAP1_IAA_30M_REP1/css/searchtools.js", + "star_rsem/qualimap/RAP1_IAA_30M_REP1/css/underscore.js", + "star_rsem/qualimap/RAP1_IAA_30M_REP1/css/up-pressed.png", + "star_rsem/qualimap/RAP1_IAA_30M_REP1/css/up.png", + "star_rsem/qualimap/RAP1_IAA_30M_REP1/css/websupport.js", + "star_rsem/qualimap/RAP1_IAA_30M_REP1/images_qualimapReport", + "star_rsem/qualimap/RAP1_IAA_30M_REP1/images_qualimapReport/Coverage Profile Along Genes (High).png", + "star_rsem/qualimap/RAP1_IAA_30M_REP1/images_qualimapReport/Coverage Profile Along Genes (Low).png", + "star_rsem/qualimap/RAP1_IAA_30M_REP1/images_qualimapReport/Coverage Profile Along Genes (Total).png", + "star_rsem/qualimap/RAP1_IAA_30M_REP1/images_qualimapReport/Junction Analysis.png", + "star_rsem/qualimap/RAP1_IAA_30M_REP1/images_qualimapReport/Reads Genomic Origin.png", + "star_rsem/qualimap/RAP1_IAA_30M_REP1/images_qualimapReport/Transcript coverage histogram.png", + "star_rsem/qualimap/RAP1_IAA_30M_REP1/qualimapReport.html", + "star_rsem/qualimap/RAP1_IAA_30M_REP1/raw_data_qualimapReport", + "star_rsem/qualimap/RAP1_IAA_30M_REP1/raw_data_qualimapReport/coverage_profile_along_genes_(high).txt", + "star_rsem/qualimap/RAP1_IAA_30M_REP1/raw_data_qualimapReport/coverage_profile_along_genes_(low).txt", + "star_rsem/qualimap/RAP1_IAA_30M_REP1/raw_data_qualimapReport/coverage_profile_along_genes_(total).txt", + "star_rsem/qualimap/RAP1_IAA_30M_REP1/rnaseq_qc_results.txt", + "star_rsem/qualimap/RAP1_UNINDUCED_REP1", + "star_rsem/qualimap/RAP1_UNINDUCED_REP1/css", + "star_rsem/qualimap/RAP1_UNINDUCED_REP1/css/agogo.css", + "star_rsem/qualimap/RAP1_UNINDUCED_REP1/css/ajax-loader.gif", + "star_rsem/qualimap/RAP1_UNINDUCED_REP1/css/basic.css", + "star_rsem/qualimap/RAP1_UNINDUCED_REP1/css/bgfooter.png", + "star_rsem/qualimap/RAP1_UNINDUCED_REP1/css/bgtop.png", + "star_rsem/qualimap/RAP1_UNINDUCED_REP1/css/comment-bright.png", + "star_rsem/qualimap/RAP1_UNINDUCED_REP1/css/comment-close.png", + "star_rsem/qualimap/RAP1_UNINDUCED_REP1/css/comment.png", + "star_rsem/qualimap/RAP1_UNINDUCED_REP1/css/doctools.js", + "star_rsem/qualimap/RAP1_UNINDUCED_REP1/css/down-pressed.png", + "star_rsem/qualimap/RAP1_UNINDUCED_REP1/css/down.png", + "star_rsem/qualimap/RAP1_UNINDUCED_REP1/css/file.png", + "star_rsem/qualimap/RAP1_UNINDUCED_REP1/css/jquery.js", + "star_rsem/qualimap/RAP1_UNINDUCED_REP1/css/minus.png", + "star_rsem/qualimap/RAP1_UNINDUCED_REP1/css/plus.png", + "star_rsem/qualimap/RAP1_UNINDUCED_REP1/css/pygments.css", + "star_rsem/qualimap/RAP1_UNINDUCED_REP1/css/qualimap_logo_small.png", + "star_rsem/qualimap/RAP1_UNINDUCED_REP1/css/report.css", + "star_rsem/qualimap/RAP1_UNINDUCED_REP1/css/searchtools.js", + "star_rsem/qualimap/RAP1_UNINDUCED_REP1/css/underscore.js", + "star_rsem/qualimap/RAP1_UNINDUCED_REP1/css/up-pressed.png", + "star_rsem/qualimap/RAP1_UNINDUCED_REP1/css/up.png", + "star_rsem/qualimap/RAP1_UNINDUCED_REP1/css/websupport.js", + "star_rsem/qualimap/RAP1_UNINDUCED_REP1/images_qualimapReport", + "star_rsem/qualimap/RAP1_UNINDUCED_REP1/images_qualimapReport/Coverage Profile Along Genes (High).png", + "star_rsem/qualimap/RAP1_UNINDUCED_REP1/images_qualimapReport/Coverage Profile Along Genes (Low).png", + "star_rsem/qualimap/RAP1_UNINDUCED_REP1/images_qualimapReport/Coverage Profile Along Genes (Total).png", + "star_rsem/qualimap/RAP1_UNINDUCED_REP1/images_qualimapReport/Junction Analysis.png", + "star_rsem/qualimap/RAP1_UNINDUCED_REP1/images_qualimapReport/Reads Genomic Origin.png", + "star_rsem/qualimap/RAP1_UNINDUCED_REP1/images_qualimapReport/Transcript coverage histogram.png", + "star_rsem/qualimap/RAP1_UNINDUCED_REP1/qualimapReport.html", + "star_rsem/qualimap/RAP1_UNINDUCED_REP1/raw_data_qualimapReport", + "star_rsem/qualimap/RAP1_UNINDUCED_REP1/raw_data_qualimapReport/coverage_profile_along_genes_(high).txt", + "star_rsem/qualimap/RAP1_UNINDUCED_REP1/raw_data_qualimapReport/coverage_profile_along_genes_(low).txt", + "star_rsem/qualimap/RAP1_UNINDUCED_REP1/raw_data_qualimapReport/coverage_profile_along_genes_(total).txt", + "star_rsem/qualimap/RAP1_UNINDUCED_REP1/rnaseq_qc_results.txt", + "star_rsem/qualimap/RAP1_UNINDUCED_REP2", + "star_rsem/qualimap/RAP1_UNINDUCED_REP2/css", + "star_rsem/qualimap/RAP1_UNINDUCED_REP2/css/agogo.css", + "star_rsem/qualimap/RAP1_UNINDUCED_REP2/css/ajax-loader.gif", + "star_rsem/qualimap/RAP1_UNINDUCED_REP2/css/basic.css", + "star_rsem/qualimap/RAP1_UNINDUCED_REP2/css/bgfooter.png", + "star_rsem/qualimap/RAP1_UNINDUCED_REP2/css/bgtop.png", + "star_rsem/qualimap/RAP1_UNINDUCED_REP2/css/comment-bright.png", + "star_rsem/qualimap/RAP1_UNINDUCED_REP2/css/comment-close.png", + "star_rsem/qualimap/RAP1_UNINDUCED_REP2/css/comment.png", + "star_rsem/qualimap/RAP1_UNINDUCED_REP2/css/doctools.js", + "star_rsem/qualimap/RAP1_UNINDUCED_REP2/css/down-pressed.png", + "star_rsem/qualimap/RAP1_UNINDUCED_REP2/css/down.png", + "star_rsem/qualimap/RAP1_UNINDUCED_REP2/css/file.png", + "star_rsem/qualimap/RAP1_UNINDUCED_REP2/css/jquery.js", + "star_rsem/qualimap/RAP1_UNINDUCED_REP2/css/minus.png", + "star_rsem/qualimap/RAP1_UNINDUCED_REP2/css/plus.png", + "star_rsem/qualimap/RAP1_UNINDUCED_REP2/css/pygments.css", + "star_rsem/qualimap/RAP1_UNINDUCED_REP2/css/qualimap_logo_small.png", + "star_rsem/qualimap/RAP1_UNINDUCED_REP2/css/report.css", + "star_rsem/qualimap/RAP1_UNINDUCED_REP2/css/searchtools.js", + "star_rsem/qualimap/RAP1_UNINDUCED_REP2/css/underscore.js", + "star_rsem/qualimap/RAP1_UNINDUCED_REP2/css/up-pressed.png", + "star_rsem/qualimap/RAP1_UNINDUCED_REP2/css/up.png", + "star_rsem/qualimap/RAP1_UNINDUCED_REP2/css/websupport.js", + "star_rsem/qualimap/RAP1_UNINDUCED_REP2/images_qualimapReport", + "star_rsem/qualimap/RAP1_UNINDUCED_REP2/images_qualimapReport/Coverage Profile Along Genes (High).png", + "star_rsem/qualimap/RAP1_UNINDUCED_REP2/images_qualimapReport/Coverage Profile Along Genes (Low).png", + "star_rsem/qualimap/RAP1_UNINDUCED_REP2/images_qualimapReport/Coverage Profile Along Genes (Total).png", + "star_rsem/qualimap/RAP1_UNINDUCED_REP2/images_qualimapReport/Junction Analysis.png", + "star_rsem/qualimap/RAP1_UNINDUCED_REP2/images_qualimapReport/Reads Genomic Origin.png", + "star_rsem/qualimap/RAP1_UNINDUCED_REP2/images_qualimapReport/Transcript coverage histogram.png", + "star_rsem/qualimap/RAP1_UNINDUCED_REP2/qualimapReport.html", + "star_rsem/qualimap/RAP1_UNINDUCED_REP2/raw_data_qualimapReport", + "star_rsem/qualimap/RAP1_UNINDUCED_REP2/raw_data_qualimapReport/coverage_profile_along_genes_(high).txt", + "star_rsem/qualimap/RAP1_UNINDUCED_REP2/raw_data_qualimapReport/coverage_profile_along_genes_(low).txt", + "star_rsem/qualimap/RAP1_UNINDUCED_REP2/raw_data_qualimapReport/coverage_profile_along_genes_(total).txt", + "star_rsem/qualimap/RAP1_UNINDUCED_REP2/rnaseq_qc_results.txt", + "star_rsem/qualimap/WT_REP1", + "star_rsem/qualimap/WT_REP1/css", + "star_rsem/qualimap/WT_REP1/css/agogo.css", + "star_rsem/qualimap/WT_REP1/css/ajax-loader.gif", + "star_rsem/qualimap/WT_REP1/css/basic.css", + "star_rsem/qualimap/WT_REP1/css/bgfooter.png", + "star_rsem/qualimap/WT_REP1/css/bgtop.png", + "star_rsem/qualimap/WT_REP1/css/comment-bright.png", + "star_rsem/qualimap/WT_REP1/css/comment-close.png", + "star_rsem/qualimap/WT_REP1/css/comment.png", + "star_rsem/qualimap/WT_REP1/css/doctools.js", + "star_rsem/qualimap/WT_REP1/css/down-pressed.png", + "star_rsem/qualimap/WT_REP1/css/down.png", + "star_rsem/qualimap/WT_REP1/css/file.png", + "star_rsem/qualimap/WT_REP1/css/jquery.js", + "star_rsem/qualimap/WT_REP1/css/minus.png", + "star_rsem/qualimap/WT_REP1/css/plus.png", + "star_rsem/qualimap/WT_REP1/css/pygments.css", + "star_rsem/qualimap/WT_REP1/css/qualimap_logo_small.png", + "star_rsem/qualimap/WT_REP1/css/report.css", + "star_rsem/qualimap/WT_REP1/css/searchtools.js", + "star_rsem/qualimap/WT_REP1/css/underscore.js", + "star_rsem/qualimap/WT_REP1/css/up-pressed.png", + "star_rsem/qualimap/WT_REP1/css/up.png", + "star_rsem/qualimap/WT_REP1/css/websupport.js", + "star_rsem/qualimap/WT_REP1/images_qualimapReport", + "star_rsem/qualimap/WT_REP1/images_qualimapReport/Coverage Profile Along Genes (High).png", + "star_rsem/qualimap/WT_REP1/images_qualimapReport/Coverage Profile Along Genes (Low).png", + "star_rsem/qualimap/WT_REP1/images_qualimapReport/Coverage Profile Along Genes (Total).png", + "star_rsem/qualimap/WT_REP1/images_qualimapReport/Junction Analysis.png", + "star_rsem/qualimap/WT_REP1/images_qualimapReport/Reads Genomic Origin.png", + "star_rsem/qualimap/WT_REP1/images_qualimapReport/Transcript coverage histogram.png", + "star_rsem/qualimap/WT_REP1/qualimapReport.html", + "star_rsem/qualimap/WT_REP1/raw_data_qualimapReport", + "star_rsem/qualimap/WT_REP1/raw_data_qualimapReport/coverage_profile_along_genes_(high).txt", + "star_rsem/qualimap/WT_REP1/raw_data_qualimapReport/coverage_profile_along_genes_(low).txt", + "star_rsem/qualimap/WT_REP1/raw_data_qualimapReport/coverage_profile_along_genes_(total).txt", + "star_rsem/qualimap/WT_REP1/rnaseq_qc_results.txt", + "star_rsem/qualimap/WT_REP2", + "star_rsem/qualimap/WT_REP2/css", + "star_rsem/qualimap/WT_REP2/css/agogo.css", + "star_rsem/qualimap/WT_REP2/css/ajax-loader.gif", + "star_rsem/qualimap/WT_REP2/css/basic.css", + "star_rsem/qualimap/WT_REP2/css/bgfooter.png", + "star_rsem/qualimap/WT_REP2/css/bgtop.png", + "star_rsem/qualimap/WT_REP2/css/comment-bright.png", + "star_rsem/qualimap/WT_REP2/css/comment-close.png", + "star_rsem/qualimap/WT_REP2/css/comment.png", + "star_rsem/qualimap/WT_REP2/css/doctools.js", + "star_rsem/qualimap/WT_REP2/css/down-pressed.png", + "star_rsem/qualimap/WT_REP2/css/down.png", + "star_rsem/qualimap/WT_REP2/css/file.png", + "star_rsem/qualimap/WT_REP2/css/jquery.js", + "star_rsem/qualimap/WT_REP2/css/minus.png", + "star_rsem/qualimap/WT_REP2/css/plus.png", + "star_rsem/qualimap/WT_REP2/css/pygments.css", + "star_rsem/qualimap/WT_REP2/css/qualimap_logo_small.png", + "star_rsem/qualimap/WT_REP2/css/report.css", + "star_rsem/qualimap/WT_REP2/css/searchtools.js", + "star_rsem/qualimap/WT_REP2/css/underscore.js", + "star_rsem/qualimap/WT_REP2/css/up-pressed.png", + "star_rsem/qualimap/WT_REP2/css/up.png", + "star_rsem/qualimap/WT_REP2/css/websupport.js", + "star_rsem/qualimap/WT_REP2/images_qualimapReport", + "star_rsem/qualimap/WT_REP2/images_qualimapReport/Coverage Profile Along Genes (High).png", + "star_rsem/qualimap/WT_REP2/images_qualimapReport/Coverage Profile Along Genes (Low).png", + "star_rsem/qualimap/WT_REP2/images_qualimapReport/Coverage Profile Along Genes (Total).png", + "star_rsem/qualimap/WT_REP2/images_qualimapReport/Junction Analysis.png", + "star_rsem/qualimap/WT_REP2/images_qualimapReport/Reads Genomic Origin.png", + "star_rsem/qualimap/WT_REP2/images_qualimapReport/Transcript coverage histogram.png", + "star_rsem/qualimap/WT_REP2/qualimapReport.html", + "star_rsem/qualimap/WT_REP2/raw_data_qualimapReport", + "star_rsem/qualimap/WT_REP2/raw_data_qualimapReport/coverage_profile_along_genes_(high).txt", + "star_rsem/qualimap/WT_REP2/raw_data_qualimapReport/coverage_profile_along_genes_(low).txt", + "star_rsem/qualimap/WT_REP2/raw_data_qualimapReport/coverage_profile_along_genes_(total).txt", + "star_rsem/qualimap/WT_REP2/rnaseq_qc_results.txt", + "star_rsem/rsem.merged.gene.SummarizedExperiment.rds", + "star_rsem/rsem.merged.gene_counts.tsv", + "star_rsem/rsem.merged.gene_counts_length_scaled.tsv", + "star_rsem/rsem.merged.gene_counts_scaled.tsv", + "star_rsem/rsem.merged.gene_lengths.tsv", + "star_rsem/rsem.merged.gene_tpm.tsv", + "star_rsem/rsem.merged.transcript.SummarizedExperiment.rds", + "star_rsem/rsem.merged.transcript_counts.tsv", + "star_rsem/rsem.merged.transcript_lengths.tsv", + "star_rsem/rsem.merged.transcript_tpm.tsv", + "star_rsem/rsem.merged.tx2gene.tsv", + "star_rsem/rsem_merge_counts", + "star_rsem/rsem_merge_counts/rsem.merged.gene_counts.tsv", + "star_rsem/rsem_merge_counts/rsem.merged.gene_tpm.tsv", + "star_rsem/rsem_merge_counts/rsem.merged.genes_long.tsv", + "star_rsem/rsem_merge_counts/rsem.merged.isoforms_long.tsv", + "star_rsem/rsem_merge_counts/rsem.merged.transcript_counts.tsv", + "star_rsem/rsem_merge_counts/rsem.merged.transcript_tpm.tsv", + "star_rsem/rseqc", + "star_rsem/rseqc/bam_stat", + "star_rsem/rseqc/bam_stat/RAP1_IAA_30M_REP1.bam_stat.txt", + "star_rsem/rseqc/bam_stat/RAP1_UNINDUCED_REP1.bam_stat.txt", + "star_rsem/rseqc/bam_stat/RAP1_UNINDUCED_REP2.bam_stat.txt", + "star_rsem/rseqc/bam_stat/WT_REP1.bam_stat.txt", + "star_rsem/rseqc/bam_stat/WT_REP2.bam_stat.txt", + "star_rsem/rseqc/infer_experiment", + "star_rsem/rseqc/infer_experiment/RAP1_IAA_30M_REP1.infer_experiment.txt", + "star_rsem/rseqc/infer_experiment/RAP1_UNINDUCED_REP1.infer_experiment.txt", + "star_rsem/rseqc/infer_experiment/RAP1_UNINDUCED_REP2.infer_experiment.txt", + "star_rsem/rseqc/infer_experiment/WT_REP1.infer_experiment.txt", + "star_rsem/rseqc/infer_experiment/WT_REP2.infer_experiment.txt", + "star_rsem/rseqc/inner_distance", + "star_rsem/rseqc/inner_distance/pdf", + "star_rsem/rseqc/inner_distance/pdf/RAP1_IAA_30M_REP1.inner_distance_plot.pdf", + "star_rsem/rseqc/inner_distance/pdf/WT_REP1.inner_distance_plot.pdf", + "star_rsem/rseqc/inner_distance/pdf/WT_REP2.inner_distance_plot.pdf", + "star_rsem/rseqc/inner_distance/rscript", + "star_rsem/rseqc/inner_distance/rscript/RAP1_IAA_30M_REP1.inner_distance_plot.r", + "star_rsem/rseqc/inner_distance/rscript/WT_REP1.inner_distance_plot.r", + "star_rsem/rseqc/inner_distance/rscript/WT_REP2.inner_distance_plot.r", + "star_rsem/rseqc/inner_distance/txt", + "star_rsem/rseqc/inner_distance/txt/RAP1_IAA_30M_REP1.inner_distance.txt", + "star_rsem/rseqc/inner_distance/txt/RAP1_IAA_30M_REP1.inner_distance_freq.txt", + "star_rsem/rseqc/inner_distance/txt/RAP1_IAA_30M_REP1.inner_distance_mean.txt", + "star_rsem/rseqc/inner_distance/txt/RAP1_UNINDUCED_REP1.inner_distance.txt", + "star_rsem/rseqc/inner_distance/txt/RAP1_UNINDUCED_REP2.inner_distance.txt", + "star_rsem/rseqc/inner_distance/txt/WT_REP1.inner_distance.txt", + "star_rsem/rseqc/inner_distance/txt/WT_REP1.inner_distance_freq.txt", + "star_rsem/rseqc/inner_distance/txt/WT_REP1.inner_distance_mean.txt", + "star_rsem/rseqc/inner_distance/txt/WT_REP2.inner_distance.txt", + "star_rsem/rseqc/inner_distance/txt/WT_REP2.inner_distance_freq.txt", + "star_rsem/rseqc/inner_distance/txt/WT_REP2.inner_distance_mean.txt", + "star_rsem/rseqc/junction_annotation", + "star_rsem/rseqc/junction_annotation/bed", + "star_rsem/rseqc/junction_annotation/bed/RAP1_IAA_30M_REP1.junction.Interact.bed", + "star_rsem/rseqc/junction_annotation/bed/RAP1_IAA_30M_REP1.junction.bed", + "star_rsem/rseqc/junction_annotation/bed/RAP1_UNINDUCED_REP1.junction.Interact.bed", + "star_rsem/rseqc/junction_annotation/bed/RAP1_UNINDUCED_REP1.junction.bed", + "star_rsem/rseqc/junction_annotation/bed/RAP1_UNINDUCED_REP2.junction.Interact.bed", + "star_rsem/rseqc/junction_annotation/bed/RAP1_UNINDUCED_REP2.junction.bed", + "star_rsem/rseqc/junction_annotation/bed/WT_REP1.junction.Interact.bed", + "star_rsem/rseqc/junction_annotation/bed/WT_REP1.junction.bed", + "star_rsem/rseqc/junction_annotation/bed/WT_REP2.junction.Interact.bed", + "star_rsem/rseqc/junction_annotation/bed/WT_REP2.junction.bed", + "star_rsem/rseqc/junction_annotation/log", + "star_rsem/rseqc/junction_annotation/log/RAP1_IAA_30M_REP1.junction_annotation.log", + "star_rsem/rseqc/junction_annotation/log/RAP1_UNINDUCED_REP1.junction_annotation.log", + "star_rsem/rseqc/junction_annotation/log/RAP1_UNINDUCED_REP2.junction_annotation.log", + "star_rsem/rseqc/junction_annotation/log/WT_REP1.junction_annotation.log", + "star_rsem/rseqc/junction_annotation/log/WT_REP2.junction_annotation.log", + "star_rsem/rseqc/junction_annotation/pdf", + "star_rsem/rseqc/junction_annotation/pdf/RAP1_IAA_30M_REP1.splice_events.pdf", + "star_rsem/rseqc/junction_annotation/pdf/RAP1_IAA_30M_REP1.splice_junction.pdf", + "star_rsem/rseqc/junction_annotation/pdf/RAP1_UNINDUCED_REP1.splice_events.pdf", + "star_rsem/rseqc/junction_annotation/pdf/RAP1_UNINDUCED_REP1.splice_junction.pdf", + "star_rsem/rseqc/junction_annotation/pdf/RAP1_UNINDUCED_REP2.splice_events.pdf", + "star_rsem/rseqc/junction_annotation/pdf/RAP1_UNINDUCED_REP2.splice_junction.pdf", + "star_rsem/rseqc/junction_annotation/pdf/WT_REP1.splice_events.pdf", + "star_rsem/rseqc/junction_annotation/pdf/WT_REP1.splice_junction.pdf", + "star_rsem/rseqc/junction_annotation/pdf/WT_REP2.splice_events.pdf", + "star_rsem/rseqc/junction_annotation/pdf/WT_REP2.splice_junction.pdf", + "star_rsem/rseqc/junction_annotation/rscript", + "star_rsem/rseqc/junction_annotation/rscript/RAP1_IAA_30M_REP1.junction_plot.r", + "star_rsem/rseqc/junction_annotation/rscript/RAP1_UNINDUCED_REP1.junction_plot.r", + "star_rsem/rseqc/junction_annotation/rscript/RAP1_UNINDUCED_REP2.junction_plot.r", + "star_rsem/rseqc/junction_annotation/rscript/WT_REP1.junction_plot.r", + "star_rsem/rseqc/junction_annotation/rscript/WT_REP2.junction_plot.r", + "star_rsem/rseqc/junction_annotation/xls", + "star_rsem/rseqc/junction_annotation/xls/RAP1_IAA_30M_REP1.junction.xls", + "star_rsem/rseqc/junction_annotation/xls/RAP1_UNINDUCED_REP1.junction.xls", + "star_rsem/rseqc/junction_annotation/xls/RAP1_UNINDUCED_REP2.junction.xls", + "star_rsem/rseqc/junction_annotation/xls/WT_REP1.junction.xls", + "star_rsem/rseqc/junction_annotation/xls/WT_REP2.junction.xls", + "star_rsem/rseqc/junction_saturation", + "star_rsem/rseqc/junction_saturation/pdf", + "star_rsem/rseqc/junction_saturation/pdf/RAP1_IAA_30M_REP1.junctionSaturation_plot.pdf", + "star_rsem/rseqc/junction_saturation/pdf/RAP1_UNINDUCED_REP1.junctionSaturation_plot.pdf", + "star_rsem/rseqc/junction_saturation/pdf/RAP1_UNINDUCED_REP2.junctionSaturation_plot.pdf", + "star_rsem/rseqc/junction_saturation/pdf/WT_REP1.junctionSaturation_plot.pdf", + "star_rsem/rseqc/junction_saturation/pdf/WT_REP2.junctionSaturation_plot.pdf", + "star_rsem/rseqc/junction_saturation/rscript", + "star_rsem/rseqc/junction_saturation/rscript/RAP1_IAA_30M_REP1.junctionSaturation_plot.r", + "star_rsem/rseqc/junction_saturation/rscript/RAP1_UNINDUCED_REP1.junctionSaturation_plot.r", + "star_rsem/rseqc/junction_saturation/rscript/RAP1_UNINDUCED_REP2.junctionSaturation_plot.r", + "star_rsem/rseqc/junction_saturation/rscript/WT_REP1.junctionSaturation_plot.r", + "star_rsem/rseqc/junction_saturation/rscript/WT_REP2.junctionSaturation_plot.r", + "star_rsem/rseqc/read_distribution", + "star_rsem/rseqc/read_distribution/RAP1_IAA_30M_REP1.read_distribution.txt", + "star_rsem/rseqc/read_distribution/RAP1_UNINDUCED_REP1.read_distribution.txt", + "star_rsem/rseqc/read_distribution/RAP1_UNINDUCED_REP2.read_distribution.txt", + "star_rsem/rseqc/read_distribution/WT_REP1.read_distribution.txt", + "star_rsem/rseqc/read_distribution/WT_REP2.read_distribution.txt", + "star_rsem/rseqc/read_duplication", + "star_rsem/rseqc/read_duplication/pdf", + "star_rsem/rseqc/read_duplication/pdf/RAP1_IAA_30M_REP1.DupRate_plot.pdf", + "star_rsem/rseqc/read_duplication/pdf/RAP1_UNINDUCED_REP1.DupRate_plot.pdf", + "star_rsem/rseqc/read_duplication/pdf/RAP1_UNINDUCED_REP2.DupRate_plot.pdf", + "star_rsem/rseqc/read_duplication/pdf/WT_REP1.DupRate_plot.pdf", + "star_rsem/rseqc/read_duplication/pdf/WT_REP2.DupRate_plot.pdf", + "star_rsem/rseqc/read_duplication/rscript", + "star_rsem/rseqc/read_duplication/rscript/RAP1_IAA_30M_REP1.DupRate_plot.r", + "star_rsem/rseqc/read_duplication/rscript/RAP1_UNINDUCED_REP1.DupRate_plot.r", + "star_rsem/rseqc/read_duplication/rscript/RAP1_UNINDUCED_REP2.DupRate_plot.r", + "star_rsem/rseqc/read_duplication/rscript/WT_REP1.DupRate_plot.r", + "star_rsem/rseqc/read_duplication/rscript/WT_REP2.DupRate_plot.r", + "star_rsem/rseqc/read_duplication/xls", + "star_rsem/rseqc/read_duplication/xls/RAP1_IAA_30M_REP1.pos.DupRate.xls", + "star_rsem/rseqc/read_duplication/xls/RAP1_IAA_30M_REP1.seq.DupRate.xls", + "star_rsem/rseqc/read_duplication/xls/RAP1_UNINDUCED_REP1.pos.DupRate.xls", + "star_rsem/rseqc/read_duplication/xls/RAP1_UNINDUCED_REP1.seq.DupRate.xls", + "star_rsem/rseqc/read_duplication/xls/RAP1_UNINDUCED_REP2.pos.DupRate.xls", + "star_rsem/rseqc/read_duplication/xls/RAP1_UNINDUCED_REP2.seq.DupRate.xls", + "star_rsem/rseqc/read_duplication/xls/WT_REP1.pos.DupRate.xls", + "star_rsem/rseqc/read_duplication/xls/WT_REP1.seq.DupRate.xls", + "star_rsem/rseqc/read_duplication/xls/WT_REP2.pos.DupRate.xls", + "star_rsem/rseqc/read_duplication/xls/WT_REP2.seq.DupRate.xls", + "star_rsem/samtools_stats", + "star_rsem/samtools_stats/RAP1_IAA_30M_REP1.sorted.bam.flagstat", + "star_rsem/samtools_stats/RAP1_IAA_30M_REP1.sorted.bam.idxstats", + "star_rsem/samtools_stats/RAP1_IAA_30M_REP1.sorted.bam.stats", + "star_rsem/samtools_stats/RAP1_IAA_30M_REP1.umi_dedup.sorted.bam.flagstat", + "star_rsem/samtools_stats/RAP1_IAA_30M_REP1.umi_dedup.sorted.bam.idxstats", + "star_rsem/samtools_stats/RAP1_IAA_30M_REP1.umi_dedup.sorted.bam.stats", + "star_rsem/samtools_stats/RAP1_IAA_30M_REP1.umi_dedup.transcriptome.sorted.bam.flagstat", + "star_rsem/samtools_stats/RAP1_IAA_30M_REP1.umi_dedup.transcriptome.sorted.bam.idxstats", + "star_rsem/samtools_stats/RAP1_IAA_30M_REP1.umi_dedup.transcriptome.sorted.bam.stats", + "star_rsem/samtools_stats/RAP1_UNINDUCED_REP1.sorted.bam.flagstat", + "star_rsem/samtools_stats/RAP1_UNINDUCED_REP1.sorted.bam.idxstats", + "star_rsem/samtools_stats/RAP1_UNINDUCED_REP1.sorted.bam.stats", + "star_rsem/samtools_stats/RAP1_UNINDUCED_REP1.umi_dedup.sorted.bam.flagstat", + "star_rsem/samtools_stats/RAP1_UNINDUCED_REP1.umi_dedup.sorted.bam.idxstats", + "star_rsem/samtools_stats/RAP1_UNINDUCED_REP1.umi_dedup.sorted.bam.stats", + "star_rsem/samtools_stats/RAP1_UNINDUCED_REP1.umi_dedup.transcriptome.sorted.bam.flagstat", + "star_rsem/samtools_stats/RAP1_UNINDUCED_REP1.umi_dedup.transcriptome.sorted.bam.idxstats", + "star_rsem/samtools_stats/RAP1_UNINDUCED_REP1.umi_dedup.transcriptome.sorted.bam.stats", + "star_rsem/samtools_stats/RAP1_UNINDUCED_REP2.sorted.bam.flagstat", + "star_rsem/samtools_stats/RAP1_UNINDUCED_REP2.sorted.bam.idxstats", + "star_rsem/samtools_stats/RAP1_UNINDUCED_REP2.sorted.bam.stats", + "star_rsem/samtools_stats/RAP1_UNINDUCED_REP2.umi_dedup.sorted.bam.flagstat", + "star_rsem/samtools_stats/RAP1_UNINDUCED_REP2.umi_dedup.sorted.bam.idxstats", + "star_rsem/samtools_stats/RAP1_UNINDUCED_REP2.umi_dedup.sorted.bam.stats", + "star_rsem/samtools_stats/RAP1_UNINDUCED_REP2.umi_dedup.transcriptome.sorted.bam.flagstat", + "star_rsem/samtools_stats/RAP1_UNINDUCED_REP2.umi_dedup.transcriptome.sorted.bam.idxstats", + "star_rsem/samtools_stats/RAP1_UNINDUCED_REP2.umi_dedup.transcriptome.sorted.bam.stats", + "star_rsem/samtools_stats/WT_REP1.sorted.bam.flagstat", + "star_rsem/samtools_stats/WT_REP1.sorted.bam.idxstats", + "star_rsem/samtools_stats/WT_REP1.sorted.bam.stats", + "star_rsem/samtools_stats/WT_REP1.umi_dedup.sorted.bam.flagstat", + "star_rsem/samtools_stats/WT_REP1.umi_dedup.sorted.bam.idxstats", + "star_rsem/samtools_stats/WT_REP1.umi_dedup.sorted.bam.stats", + "star_rsem/samtools_stats/WT_REP1.umi_dedup.transcriptome.sorted.bam.flagstat", + "star_rsem/samtools_stats/WT_REP1.umi_dedup.transcriptome.sorted.bam.idxstats", + "star_rsem/samtools_stats/WT_REP1.umi_dedup.transcriptome.sorted.bam.stats", + "star_rsem/samtools_stats/WT_REP2.sorted.bam.flagstat", + "star_rsem/samtools_stats/WT_REP2.sorted.bam.idxstats", + "star_rsem/samtools_stats/WT_REP2.sorted.bam.stats", + "star_rsem/samtools_stats/WT_REP2.umi_dedup.sorted.bam.flagstat", + "star_rsem/samtools_stats/WT_REP2.umi_dedup.sorted.bam.idxstats", + "star_rsem/samtools_stats/WT_REP2.umi_dedup.sorted.bam.stats", + "star_rsem/samtools_stats/WT_REP2.umi_dedup.transcriptome.sorted.bam.flagstat", + "star_rsem/samtools_stats/WT_REP2.umi_dedup.transcriptome.sorted.bam.idxstats", + "star_rsem/samtools_stats/WT_REP2.umi_dedup.transcriptome.sorted.bam.stats", + "star_rsem/umitools", + "star_rsem/umitools/RAP1_IAA_30M_REP1.umi_dedup.sorted_edit_distance.tsv", + "star_rsem/umitools/RAP1_IAA_30M_REP1.umi_dedup.sorted_per_umi.tsv", + "star_rsem/umitools/RAP1_IAA_30M_REP1.umi_dedup.sorted_per_umi_per_position.tsv", + "star_rsem/umitools/RAP1_IAA_30M_REP1.umi_dedup.transcriptome.sorted_edit_distance.tsv", + "star_rsem/umitools/RAP1_IAA_30M_REP1.umi_dedup.transcriptome.sorted_per_umi.tsv", + "star_rsem/umitools/RAP1_IAA_30M_REP1.umi_dedup.transcriptome.sorted_per_umi_per_position.tsv", + "star_rsem/umitools/RAP1_UNINDUCED_REP1.umi_dedup.sorted_edit_distance.tsv", + "star_rsem/umitools/RAP1_UNINDUCED_REP1.umi_dedup.sorted_per_umi.tsv", + "star_rsem/umitools/RAP1_UNINDUCED_REP1.umi_dedup.sorted_per_umi_per_position.tsv", + "star_rsem/umitools/RAP1_UNINDUCED_REP1.umi_dedup.transcriptome.sorted_edit_distance.tsv", + "star_rsem/umitools/RAP1_UNINDUCED_REP1.umi_dedup.transcriptome.sorted_per_umi.tsv", + "star_rsem/umitools/RAP1_UNINDUCED_REP1.umi_dedup.transcriptome.sorted_per_umi_per_position.tsv", + "star_rsem/umitools/RAP1_UNINDUCED_REP2.umi_dedup.sorted_edit_distance.tsv", + "star_rsem/umitools/RAP1_UNINDUCED_REP2.umi_dedup.sorted_per_umi.tsv", + "star_rsem/umitools/RAP1_UNINDUCED_REP2.umi_dedup.sorted_per_umi_per_position.tsv", + "star_rsem/umitools/RAP1_UNINDUCED_REP2.umi_dedup.transcriptome.sorted_edit_distance.tsv", + "star_rsem/umitools/RAP1_UNINDUCED_REP2.umi_dedup.transcriptome.sorted_per_umi.tsv", + "star_rsem/umitools/RAP1_UNINDUCED_REP2.umi_dedup.transcriptome.sorted_per_umi_per_position.tsv", + "star_rsem/umitools/WT_REP1.umi_dedup.sorted_edit_distance.tsv", + "star_rsem/umitools/WT_REP1.umi_dedup.sorted_per_umi.tsv", + "star_rsem/umitools/WT_REP1.umi_dedup.sorted_per_umi_per_position.tsv", + "star_rsem/umitools/WT_REP1.umi_dedup.transcriptome.sorted_edit_distance.tsv", + "star_rsem/umitools/WT_REP1.umi_dedup.transcriptome.sorted_per_umi.tsv", + "star_rsem/umitools/WT_REP1.umi_dedup.transcriptome.sorted_per_umi_per_position.tsv", + "star_rsem/umitools/WT_REP2.umi_dedup.sorted_edit_distance.tsv", + "star_rsem/umitools/WT_REP2.umi_dedup.sorted_per_umi.tsv", + "star_rsem/umitools/WT_REP2.umi_dedup.sorted_per_umi_per_position.tsv", + "star_rsem/umitools/WT_REP2.umi_dedup.transcriptome.sorted_edit_distance.tsv", + "star_rsem/umitools/WT_REP2.umi_dedup.transcriptome.sorted_per_umi.tsv", + "star_rsem/umitools/WT_REP2.umi_dedup.transcriptome.sorted_per_umi_per_position.tsv", + "star_rsem/umitools/genomic_dedup_log", + "star_rsem/umitools/genomic_dedup_log/RAP1_IAA_30M_REP1.umi_dedup.sorted.log", + "star_rsem/umitools/genomic_dedup_log/RAP1_UNINDUCED_REP1.umi_dedup.sorted.log", + "star_rsem/umitools/genomic_dedup_log/RAP1_UNINDUCED_REP2.umi_dedup.sorted.log", + "star_rsem/umitools/genomic_dedup_log/WT_REP1.umi_dedup.sorted.log", + "star_rsem/umitools/genomic_dedup_log/WT_REP2.umi_dedup.sorted.log", + "star_rsem/umitools/prepare_for_quantification_log", + "star_rsem/umitools/prepare_for_quantification_log/RAP1_IAA_30M_REP1.umi_dedup.transcriptome.filtered.prepare_for_rsem.log", + "star_rsem/umitools/prepare_for_quantification_log/WT_REP1.umi_dedup.transcriptome.filtered.prepare_for_rsem.log", + "star_rsem/umitools/prepare_for_quantification_log/WT_REP2.umi_dedup.transcriptome.filtered.prepare_for_rsem.log", + "star_rsem/umitools/transcriptomic_dedup_log", + "star_rsem/umitools/transcriptomic_dedup_log/RAP1_IAA_30M_REP1.umi_dedup.transcriptome.sorted.log", + "star_rsem/umitools/transcriptomic_dedup_log/RAP1_UNINDUCED_REP1.umi_dedup.transcriptome.sorted.log", + "star_rsem/umitools/transcriptomic_dedup_log/RAP1_UNINDUCED_REP2.umi_dedup.transcriptome.sorted.log", + "star_rsem/umitools/transcriptomic_dedup_log/WT_REP1.umi_dedup.transcriptome.sorted.log", + "star_rsem/umitools/transcriptomic_dedup_log/WT_REP2.umi_dedup.transcriptome.sorted.log", + "trimgalore", + "trimgalore/RAP1_IAA_30M_REP1_trimmed_1.fastq.gz_trimming_report.txt", + "trimgalore/RAP1_IAA_30M_REP1_trimmed_2.fastq.gz_trimming_report.txt", + "trimgalore/RAP1_UNINDUCED_REP1_trimmed.fastq.gz_trimming_report.txt", + "trimgalore/RAP1_UNINDUCED_REP2_trimmed.fastq.gz_trimming_report.txt", + "trimgalore/WT_REP1_trimmed_1.fastq.gz_trimming_report.txt", + "trimgalore/WT_REP1_trimmed_2.fastq.gz_trimming_report.txt", + "trimgalore/WT_REP2_trimmed_1.fastq.gz_trimming_report.txt", + "trimgalore/WT_REP2_trimmed_2.fastq.gz_trimming_report.txt", + "umitools", + "umitools/RAP1_IAA_30M_REP1.umi_extract.log", + "umitools/RAP1_IAA_30M_REP1.umi_extract_1.fastq.gz", + "umitools/RAP1_IAA_30M_REP1.umi_extract_2.fastq.gz", + "umitools/RAP1_UNINDUCED_REP1.umi_extract.fastq.gz", + "umitools/RAP1_UNINDUCED_REP1.umi_extract.log", + "umitools/RAP1_UNINDUCED_REP2.umi_extract.fastq.gz", + "umitools/RAP1_UNINDUCED_REP2.umi_extract.log", + "umitools/WT_REP1.umi_extract.log", + "umitools/WT_REP1.umi_extract_1.fastq.gz", + "umitools/WT_REP1.umi_extract_2.fastq.gz", + "umitools/WT_REP2.umi_extract.log", + "umitools/WT_REP2.umi_extract_1.fastq.gz", + "umitools/WT_REP2.umi_extract_2.fastq.gz" + ], + [ + "genome_gfp.fasta:md5,e23e302af63736a199985a169fdac055", + "genome_gfp.gtf:md5,c98b12c302f15731bfc36bcf297cfe28", + "cutadapt_filtered_reads_plot.txt:md5,3f122969fa288888e5abef061b7963f2", + "cutadapt_trimmed_sequences_plot_3_Counts.txt:md5,5e8a821c9a4deb46c11bc65969b8864f", + "cutadapt_trimmed_sequences_plot_3_Obs_Exp.txt:md5,bf8abefa7c5f2f1e1140749983279d9d", + "fastqc_raw-status-check-heatmap.txt:md5,5a89b0d8d162f6b1dbdaf39457bbc03b", + "fastqc_raw_adapter_content_plot.txt:md5,da0389be84cfdd189b1d045212eb2974", + "fastqc_raw_overrepresented_sequences_plot.txt:md5,25d88ea8a72f55e8a374ae802bc7f0b1", + "fastqc_raw_per_base_n_content_plot.txt:md5,d368d7e36ca2f73dcde61f2b486d8213", + "fastqc_raw_per_base_sequence_quality_plot.txt:md5,5c3065b549129702b185ea1b817da420", + "fastqc_raw_per_sequence_gc_content_plot_Counts.txt:md5,9ddaa50167117d3c9188ccf015427704", + "fastqc_raw_per_sequence_gc_content_plot_Percentages.txt:md5,f10ee2881b61308af35f304aa3d810a3", + "fastqc_raw_per_sequence_quality_scores_plot.txt:md5,b5f9a02933e3065952237afd2ec9ce82", + "fastqc_raw_sequence_counts_plot.txt:md5,cbae4979d5db66d3b894abcf8d1c453c", + "fastqc_raw_sequence_duplication_levels_plot.txt:md5,8812cee16f6ca65e2c33635754de1772", + "fastqc_trimmed-status-check-heatmap.txt:md5,1913b4c077a341437475c758fb119559", + "fastqc_trimmed_overrepresented_sequences_plot.txt:md5,6a7c50868a36ca6052e9f4adba6b8567", + "fastqc_trimmed_per_base_n_content_plot.txt:md5,0cdd698fb9a2a4987572b9b4e8c8990e", + "fastqc_trimmed_per_base_sequence_quality_plot.txt:md5,82a9073151a413efbb0f11be8d0db1f2", + "fastqc_trimmed_per_sequence_gc_content_plot_Counts.txt:md5,08b43a02f34a3afa7eaddef602cdcafd", + "fastqc_trimmed_per_sequence_gc_content_plot_Percentages.txt:md5,0768af6bf06bbad52a3ac6ec0a444138", + "fastqc_trimmed_per_sequence_quality_scores_plot.txt:md5,ac167d250e9f88899da0ea81ef2b002e", + "fastqc_trimmed_sequence_counts_plot.txt:md5,370ddc5e58838dc5b55e53b6f8b8902a", + "fastqc_trimmed_sequence_duplication_levels_plot.txt:md5,b106d8ee7b83efe237afb862ebbe2f47", + "multiqc_citations.txt:md5,9ba2c40a22f1974f074f001e139610c0", + "multiqc_fastqc_fastqc_raw.txt:md5,81c3c1a2575a1891a7f2a9637a0f2cc0", + "multiqc_fastqc_fastqc_trimmed.txt:md5,a8a003b61b03295c416f3eb66c1cca65", + "multiqc_featurecounts_biotype_plot.txt:md5,e17f2ad2ad0a6bd4c6270542c6b9d5ee", + "multiqc_samtools_idxstats.txt:md5,8117dd78c10a03ed758bc7be0e856347", + "multiqc_umitools_extract.txt:md5,f725988a4067b50d0f7dc3661a356ccf", + "qualimap_gene_coverage_profile_Counts.txt:md5,fdbdabe93657365b55035c952ac07969", + "qualimap_gene_coverage_profile_Normalised.txt:md5,5bcd96abea3092485ab017ddcb144aa1", + "qualimap_rnaseq_cov_hist.txt:md5,3a6c149cf9a3438b882e29675a765eb8", + "rseqc_infer_experiment_plot.txt:md5,74dd695a63e8e487bcd57a4db398cc79", + "samtools-idxstats-mapped-reads-plot_Normalised_Counts.txt:md5,75acd04232d1804b5f960ee4c5db4722", + "samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts.txt:md5,322f65d64c314a1a1b735d8682a98aa7", + "samtools-idxstats-mapped-reads-plot_Raw_Counts.txt:md5,b498456910836409482b8e7ac4ed2cb7", + "umitools_extract_barplot_success.txt:md5,0220372f068d589e7e63fb48e66cb99b", + "umitools_extract_regex_barplot.txt:md5,f94f8393b1dcff652edd7b34dac7c596", + "ambig_info.tsv:md5,0b462f9b2d8eff1b4d76b7433434899c", + "expected_bias.gz:md5,3407f87245d0003e0ffbfdf6d8c04f20", + "observed_bias.gz:md5,92bcd0592d22a6a58d0360fc76103e56", + "observed_bias_3p.gz:md5,92bcd0592d22a6a58d0360fc76103e56", + "cmd_info.json:md5,910a60cb6ef954008c9e6d037342d773", + "lib_format_counts.json:md5,5846a0bb874171d30ef60059f6c10868", + "ambig_info.tsv:md5,2c45f73a5f73ae4d0053198ea98c87f3", + "expected_bias.gz:md5,3407f87245d0003e0ffbfdf6d8c04f20", + "observed_bias.gz:md5,92bcd0592d22a6a58d0360fc76103e56", + "observed_bias_3p.gz:md5,92bcd0592d22a6a58d0360fc76103e56", + "cmd_info.json:md5,e364ca1b150c3c0ae57f0397ff8ae471", + "lib_format_counts.json:md5,d662a174758011a56e6669f4810e0aaf", + "ambig_info.tsv:md5,644c4352884872a05fe36cbb2b119879", + "expected_bias.gz:md5,3407f87245d0003e0ffbfdf6d8c04f20", + "observed_bias.gz:md5,92bcd0592d22a6a58d0360fc76103e56", + "observed_bias_3p.gz:md5,92bcd0592d22a6a58d0360fc76103e56", + "cmd_info.json:md5,b472447f8ac9530be1ca2d9733af2686", + "lib_format_counts.json:md5,f01d7b98afc4b6bab773536a88e08e7e", + "ambig_info.tsv:md5,d6ca0827f17be19b6e08730a45063f9d", + "expected_bias.gz:md5,3407f87245d0003e0ffbfdf6d8c04f20", + "observed_bias.gz:md5,92bcd0592d22a6a58d0360fc76103e56", + "observed_bias_3p.gz:md5,92bcd0592d22a6a58d0360fc76103e56", + "cmd_info.json:md5,bdc36620d04525d343faea5297f0f0d7", + "lib_format_counts.json:md5,cf8bf8db790bede5136fca52968e7c43", + "ambig_info.tsv:md5,4aa8036707dc557004a80852394beebe", + "expected_bias.gz:md5,3407f87245d0003e0ffbfdf6d8c04f20", + "observed_bias.gz:md5,92bcd0592d22a6a58d0360fc76103e56", + "observed_bias_3p.gz:md5,92bcd0592d22a6a58d0360fc76103e56", + "cmd_info.json:md5,809380ddce725a8fab75dd7741b64bf6", + "lib_format_counts.json:md5,d231ba7624b67eb654989f69530e2925", + "salmon.merged.tx2gene.tsv:md5,0e2418a69d2eba45097ebffc2f700bfe", + "RAP1_IAA_30M_REP1.biotype_counts_mqc.tsv:md5,339756f86b5901c0497e6185d17ce31a", + "RAP1_IAA_30M_REP1.biotype_counts_rrna_mqc.tsv:md5,dde2de0cb90e10d0195c726f768e9941", + "RAP1_IAA_30M_REP1.featureCounts.tsv:md5,c20b6d043a6d95262a81928dfe3f0e46", + "RAP1_UNINDUCED_REP1.biotype_counts_mqc.tsv:md5,5a3a03d1accba7f5bf2095c564680638", + "RAP1_UNINDUCED_REP1.biotype_counts_rrna_mqc.tsv:md5,845ff9059c72bc6722a8de69776e22bb", + "RAP1_UNINDUCED_REP1.featureCounts.tsv:md5,cb8920f9e57d9dd240d1c40323f56834", + "RAP1_UNINDUCED_REP2.biotype_counts_mqc.tsv:md5,89e93a806218173298cd0a43eefa17bb", + "RAP1_UNINDUCED_REP2.biotype_counts_rrna_mqc.tsv:md5,6d3fa4c88c7fe61f638e4624ad5e22f0", + "RAP1_UNINDUCED_REP2.featureCounts.tsv:md5,1d22e28bfe87ea035283fee76ac8f08a", + "WT_REP1.biotype_counts_mqc.tsv:md5,a0818fe39762dc4b774962fb6ff69da4", + "WT_REP1.biotype_counts_rrna_mqc.tsv:md5,8ef76d717492ca23764938aee8ea33a9", + "WT_REP1.featureCounts.tsv:md5,d86a52b9b71f5cf4b011df73153b30d1", + "WT_REP2.biotype_counts_mqc.tsv:md5,5e37bad31a83bfe40ded61013f7a1931", + "WT_REP2.biotype_counts_rrna_mqc.tsv:md5,12294618fe44df1e7f39348372dcb481", + "WT_REP2.featureCounts.tsv:md5,3bb64c9eee497c2be667daaecbf36bdc", + "RAP1_IAA_30M_REP1.SJ.out.tab:md5,78718cc0fc799999e02559f9f0da7a56", + "RAP1_UNINDUCED_REP1.SJ.out.tab:md5,30034853703d8a41e3471a736acc407f", + "RAP1_UNINDUCED_REP2.SJ.out.tab:md5,99714fba4906a7fa8dfe6b7c40fa0c3b", + "WT_REP1.SJ.out.tab:md5,ed2471572082b1d06796587eebfd265c", + "WT_REP2.SJ.out.tab:md5,cdd10d64d78eb010bf8aca52a80f0938", + "coverage_profile_along_genes_(high).txt:md5,63316a6b5d6e8d2955a09b1e5d1a440c", + "coverage_profile_along_genes_(low).txt:md5,5de4d2d4d5b04b162be0d2b6e782ea4e", + "coverage_profile_along_genes_(total).txt:md5,5de4d2d4d5b04b162be0d2b6e782ea4e", + "coverage_profile_along_genes_(high).txt:md5,fa4cfc6ad979d06e6c817fa8b26c21cb", + "coverage_profile_along_genes_(low).txt:md5,c6d300e7ddd10098354483739f04a1c7", + "coverage_profile_along_genes_(total).txt:md5,c6d300e7ddd10098354483739f04a1c7", + "coverage_profile_along_genes_(high).txt:md5,8febbb388e80db906cda93e57cf0f528", + "coverage_profile_along_genes_(low).txt:md5,bd869e8c4b185dc1066352a55744cec7", + "coverage_profile_along_genes_(total).txt:md5,bd869e8c4b185dc1066352a55744cec7", + "coverage_profile_along_genes_(high).txt:md5,eb7770f317e8b49c829cd4e616f56ec7", + "coverage_profile_along_genes_(low).txt:md5,693a451014026a03d6b9900221faa511", + "coverage_profile_along_genes_(total).txt:md5,693a451014026a03d6b9900221faa511", + "coverage_profile_along_genes_(high).txt:md5,ab0d91e4897bd2b7b6e57b3b962890a8", + "coverage_profile_along_genes_(low).txt:md5,c7255f22cd51d182a2815e8230d9f8c4", + "coverage_profile_along_genes_(total).txt:md5,c7255f22cd51d182a2815e8230d9f8c4", + "rsem.merged.gene_counts.tsv:md5,fd6b2d78445f8796df12e5be60340cfc", + "rsem.merged.gene_counts_length_scaled.tsv:md5,8620222c35dff9a51ff0ebe9bc0375b0", + "rsem.merged.gene_counts_scaled.tsv:md5,c966fbcecde9645b476f12508aa1fd6d", + "rsem.merged.gene_lengths.tsv:md5,9f0e78cb8e7967b44f1fde71fe697e2a", + "rsem.merged.gene_tpm.tsv:md5,0eb38eddf36dbeb29f8c4302b058a14f", + "rsem.merged.transcript_counts.tsv:md5,f52ea7ee6c0c74076bb00b38e1e11dc6", + "rsem.merged.transcript_lengths.tsv:md5,f9480624067d84644f45a932d033444f", + "rsem.merged.transcript_tpm.tsv:md5,b7df63f5134101587b8e5e597110fccf", + "rsem.merged.tx2gene.tsv:md5,0e2418a69d2eba45097ebffc2f700bfe", + "rsem.merged.gene_counts.tsv:md5,e6d1de9e1a26136e4047022b3b489e2d", + "rsem.merged.gene_tpm.tsv:md5,a31ecca01f1e91a18409e393595ce19b", + "rsem.merged.genes_long.tsv:md5,c5c487549a0bc04be1382a88bb1366bb", + "rsem.merged.isoforms_long.tsv:md5,5d3635cc6f7f84cf39bf9913ec6e163c", + "rsem.merged.transcript_counts.tsv:md5,bd18ffda62b497a2d03cc26b6a425c7f", + "rsem.merged.transcript_tpm.tsv:md5,3e7a35124d80a2f99ff3114252b58f8b", + "RAP1_IAA_30M_REP1.infer_experiment.txt:md5,2b7db6cdc1da0dc34dd1869d82f8f42e", + "RAP1_UNINDUCED_REP1.infer_experiment.txt:md5,abe41eee08c70f32ee1924effdcc8ecc", + "RAP1_UNINDUCED_REP2.infer_experiment.txt:md5,cb1cdc77172b49723d2b8909c424dd62", + "WT_REP1.infer_experiment.txt:md5,6ac001388c63b054558a67c35d1fa438", + "WT_REP2.infer_experiment.txt:md5,7dad79c0a824f569c51751d95913fee6", + "RAP1_IAA_30M_REP1.umi_dedup.sorted_edit_distance.tsv:md5,27f57eccf9f6dfc8c3e7ea2e0803706c", + "RAP1_IAA_30M_REP1.umi_dedup.sorted_per_umi.tsv:md5,037ae51b6c8d1dae46b24523abe9897f", + "RAP1_IAA_30M_REP1.umi_dedup.sorted_per_umi_per_position.tsv:md5,a60ddd63003e48cb365375523f525520", + "RAP1_IAA_30M_REP1.umi_dedup.transcriptome.sorted_edit_distance.tsv:md5,ac9ec12237aa089272a614cef69eea02", + "RAP1_IAA_30M_REP1.umi_dedup.transcriptome.sorted_per_umi.tsv:md5,632db91b8e3375ea2f28f7304c50bcba", + "RAP1_IAA_30M_REP1.umi_dedup.transcriptome.sorted_per_umi_per_position.tsv:md5,3add106cf62a741eeab195eb32a1aa69", + "RAP1_UNINDUCED_REP1.umi_dedup.sorted_edit_distance.tsv:md5,8e52f33b7d4cf22851169d34ff8d016b", + "RAP1_UNINDUCED_REP1.umi_dedup.sorted_per_umi.tsv:md5,102f03853813a2e81e586e97b6297a2e", + "RAP1_UNINDUCED_REP1.umi_dedup.sorted_per_umi_per_position.tsv:md5,89fd169ac19071f4734b4993c15bf295", + "RAP1_UNINDUCED_REP1.umi_dedup.transcriptome.sorted_edit_distance.tsv:md5,8c5e6155707f74d143a78d55b9a145ae", + "RAP1_UNINDUCED_REP1.umi_dedup.transcriptome.sorted_per_umi.tsv:md5,f78aac7ffaa29bcf48fe43cc3c32b49f", + "RAP1_UNINDUCED_REP1.umi_dedup.transcriptome.sorted_per_umi_per_position.tsv:md5,a8b1fa5f43a5e48555862c5da39f13c4", + "RAP1_UNINDUCED_REP2.umi_dedup.sorted_edit_distance.tsv:md5,2a6885ee88998c7d78ee0b7751623bee", + "RAP1_UNINDUCED_REP2.umi_dedup.sorted_per_umi.tsv:md5,ba10ceba9f69757302add7c5ed61e99d", + "RAP1_UNINDUCED_REP2.umi_dedup.sorted_per_umi_per_position.tsv:md5,26a827845f87d917c0517a718e343961", + "RAP1_UNINDUCED_REP2.umi_dedup.transcriptome.sorted_edit_distance.tsv:md5,6e75d74916175662f6459b5815a2b997", + "RAP1_UNINDUCED_REP2.umi_dedup.transcriptome.sorted_per_umi.tsv:md5,decd7ad5bdcda6a6d08e8b356006b254", + "RAP1_UNINDUCED_REP2.umi_dedup.transcriptome.sorted_per_umi_per_position.tsv:md5,d4a70b132b5830552e27130081dfd5ee", + "WT_REP1.umi_dedup.sorted_edit_distance.tsv:md5,bf50c547b7bb934aee208d2cc8058d02", + "WT_REP1.umi_dedup.sorted_per_umi.tsv:md5,8681658d4697800dcc1f4635205a765a", + "WT_REP1.umi_dedup.sorted_per_umi_per_position.tsv:md5,b59a5c3aa2f6210721aa96c7d2c9edad", + "WT_REP1.umi_dedup.transcriptome.sorted_edit_distance.tsv:md5,a2f41bd774128bcf8846606a77dcc944", + "WT_REP1.umi_dedup.transcriptome.sorted_per_umi.tsv:md5,b1510a549cac5ef250bed470b1fcef19", + "WT_REP1.umi_dedup.transcriptome.sorted_per_umi_per_position.tsv:md5,bae71d3f89ee7eab81ae9e013c9eb6c8", + "WT_REP2.umi_dedup.sorted_edit_distance.tsv:md5,1fae1be342ed048ab894dd76cd75d9bd", + "WT_REP2.umi_dedup.sorted_per_umi.tsv:md5,dfbf3d779cc3ca2e128f5f67064009c5", + "WT_REP2.umi_dedup.sorted_per_umi_per_position.tsv:md5,def955f886f074c22ee1f4523697d063", + "WT_REP2.umi_dedup.transcriptome.sorted_edit_distance.tsv:md5,1136ff5126b334a62c5f71a1a478f819", + "WT_REP2.umi_dedup.transcriptome.sorted_per_umi.tsv:md5,1824478d3e7f5e49ed5156caeace110d", + "WT_REP2.umi_dedup.transcriptome.sorted_per_umi_per_position.tsv:md5,b755623b31e0e9320cba147831a3f555", + "RAP1_IAA_30M_REP1.umi_extract_1.fastq.gz:md5,e83d7f738fbbfaa541a2e71fe4663447", + "RAP1_IAA_30M_REP1.umi_extract_2.fastq.gz:md5,4f2873cbf584d6e84187238a4ae2b8fa", + "RAP1_UNINDUCED_REP1.umi_extract.fastq.gz:md5,9e42242fd68baac592140f63a8a716ce", + "RAP1_UNINDUCED_REP2.umi_extract.fastq.gz:md5,5a92b642927b8603c4765e5305e23e9c", + "WT_REP1.umi_extract_1.fastq.gz:md5,f312fac9c384a889ae4f959839263604", + "WT_REP1.umi_extract_2.fastq.gz:md5,ffca24924108fd54151620b7538b9e1a", + "WT_REP2.umi_extract_1.fastq.gz:md5,c3180451a24ce51fc35c1684521ae287", + "WT_REP2.umi_extract_2.fastq.gz:md5,067ff23f8d1307ad241cd70bc186b5c1" + ] + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.2" + }, + "timestamp": "2026-02-26T14:55:55.352330593" + }, + "--umi_dedup_tool 'umitools'": { + "content": [ + 231, + { + "CAT_FASTQ": { + "cat": 9.5 + }, + "CUSTOM_CATADDITIONALFASTA": { + "python": "3.12.2" + }, + "CUSTOM_TX2GENE": { + "python": "3.10.4" + }, + "DESEQ2_QC_BAM_SALMON": { + "bioconductor-deseq2": "1.46.0", + "r-base": "4.4.2" + }, + "DESEQ2_QC_PSEUDO": { + "bioconductor-deseq2": "1.46.0", + "r-base": "4.4.2" + }, + "DUPRADAR": { + "bioconductor-dupradar": "1.38.0" + }, + "FASTQC": { + "fastqc": "0.12.1" + }, + "FQ_LINT": { + "fq": "0.12.0" + }, + "FQ_LINT_AFTER_TRIMMING": { + "fq": "0.12.0" + }, + "FQ_SUBSAMPLE": { + "fq": "0.12.0" + }, + "GTF2BED": { + "perl": "5.26.2" + }, + "GTF_FILTER": { + "python": "3.9.5" + }, + "GUNZIP_ADDITIONAL_FASTA": { + "gunzip": 1.13 + }, + "GUNZIP_GTF": { + "gunzip": 1.13 + }, + "MULTIQC_CUSTOM_BIOTYPE": { + "python": "3.9.5" + }, + "QUALIMAP_RNASEQ": { + "qualimap": 2.3 + }, + "RSEQC_BAMSTAT": { + "rseqc": "5.0.4" + }, + "RSEQC_INFEREXPERIMENT": { + "rseqc": "5.0.4" + }, + "RSEQC_INNERDISTANCE": { + "rseqc": "5.0.4" + }, + "RSEQC_JUNCTIONANNOTATION": { + "rseqc": "5.0.4" + }, + "RSEQC_JUNCTIONSATURATION": { + "rseqc": "5.0.4" + }, + "RSEQC_READDISTRIBUTION": { + "rseqc": "5.0.4" + }, + "RSEQC_READDUPLICATION": { + "rseqc": "5.0.4" + }, + "SALMON_QUANT": { + "salmon": "1.10.3" + }, + "SAMTOOLS_FAIDX": { + "samtools": "1.22.1" + }, + "SAMTOOLS_FLAGSTAT": { + "samtools": "1.22.1" + }, + "SAMTOOLS_IDXSTATS": { + "samtools": "1.22.1" + }, + "SAMTOOLS_INDEX": { + "samtools": "1.22.1" + }, + "SAMTOOLS_SORT": { + "samtools": "1.22.1" + }, + "SAMTOOLS_SORT_QUALIMAP": { + "samtools": "1.22.1" + }, + "SAMTOOLS_STATS": { + "samtools": "1.22.1" + }, + "SE_GENE_UNIFIED": { + "bioconductor-summarizedexperiment": "1.32.0" + }, + "SE_TRANSCRIPT_UNIFIED": { + "bioconductor-summarizedexperiment": "1.32.0" + }, + "STAR_ALIGN": { + "gawk": "5.1.0", + "samtools": 1.21, + "star": "2.7.11b" + }, + "STAR_GENOMEGENERATE": { + "gawk": "5.1.0", + "samtools": 1.21, + "star": "2.7.11b" + }, + "SUBREAD_FEATURECOUNTS": { + "subread": "2.0.6" + }, + "TRIMGALORE": { + "trimgalore": "0.6.10" + }, + "TXIMETA_TXIMPORT": { + "bioconductor-tximeta": "1.20.1" + }, + "UMITOOLS_DEDUP": { + "umitools": "1.1.6" + }, + "UMITOOLS_EXTRACT": { + "umitools": "1.1.6" + }, + "UMITOOLS_PREPAREFORRSEM": { + "umitools": "1.1.6" }, "UNTAR_SALMON_INDEX": { "untar": 1.34 @@ -278,6 +1685,8 @@ "multiqc/star_salmon/multiqc_report_data/star_alignment_plot.txt", "multiqc/star_salmon/multiqc_report_data/star_summary_table.txt", "multiqc/star_salmon/multiqc_report_data/umitools_deduplication_barplot.txt", + "multiqc/star_salmon/multiqc_report_data/umitools_extract_barplot_success.txt", + "multiqc/star_salmon/multiqc_report_data/umitools_extract_regex_barplot.txt", "multiqc/star_salmon/multiqc_report_data/umitools_stats_violin.txt", "multiqc/star_salmon/multiqc_report_plots", "multiqc/star_salmon/multiqc_report_plots/pdf", @@ -352,6 +1761,10 @@ "multiqc/star_salmon/multiqc_report_plots/pdf/star_summary_table.pdf", "multiqc/star_salmon/multiqc_report_plots/pdf/umitools_deduplication_barplot-cnt.pdf", "multiqc/star_salmon/multiqc_report_plots/pdf/umitools_deduplication_barplot-pct.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/umitools_extract_barplot_success-cnt.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/umitools_extract_barplot_success-pct.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/umitools_extract_regex_barplot-cnt.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/umitools_extract_regex_barplot-pct.pdf", "multiqc/star_salmon/multiqc_report_plots/pdf/umitools_stats_violin.pdf", "multiqc/star_salmon/multiqc_report_plots/png", "multiqc/star_salmon/multiqc_report_plots/png/cutadapt_filtered_reads_plot-cnt.png", @@ -425,6 +1838,10 @@ "multiqc/star_salmon/multiqc_report_plots/png/star_summary_table.png", "multiqc/star_salmon/multiqc_report_plots/png/umitools_deduplication_barplot-cnt.png", "multiqc/star_salmon/multiqc_report_plots/png/umitools_deduplication_barplot-pct.png", + "multiqc/star_salmon/multiqc_report_plots/png/umitools_extract_barplot_success-cnt.png", + "multiqc/star_salmon/multiqc_report_plots/png/umitools_extract_barplot_success-pct.png", + "multiqc/star_salmon/multiqc_report_plots/png/umitools_extract_regex_barplot-cnt.png", + "multiqc/star_salmon/multiqc_report_plots/png/umitools_extract_regex_barplot-pct.png", "multiqc/star_salmon/multiqc_report_plots/png/umitools_stats_violin.png", "multiqc/star_salmon/multiqc_report_plots/svg", "multiqc/star_salmon/multiqc_report_plots/svg/cutadapt_filtered_reads_plot-cnt.svg", @@ -498,6 +1915,10 @@ "multiqc/star_salmon/multiqc_report_plots/svg/star_summary_table.svg", "multiqc/star_salmon/multiqc_report_plots/svg/umitools_deduplication_barplot-cnt.svg", "multiqc/star_salmon/multiqc_report_plots/svg/umitools_deduplication_barplot-pct.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/umitools_extract_barplot_success-cnt.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/umitools_extract_barplot_success-pct.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/umitools_extract_regex_barplot-cnt.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/umitools_extract_regex_barplot-pct.svg", "multiqc/star_salmon/multiqc_report_plots/svg/umitools_stats_violin.svg", "pipeline_info", "pipeline_info/nf_core_rnaseq_software_mqc_versions.yml", @@ -605,7 +2026,7 @@ "salmon/salmon.merged.transcript_counts.tsv", "salmon/salmon.merged.transcript_lengths.tsv", "salmon/salmon.merged.transcript_tpm.tsv", - "salmon/tx2gene.tsv", + "salmon/salmon.merged.tx2gene.tsv", "star_salmon", "star_salmon/RAP1_IAA_30M_REP1", "star_salmon/RAP1_IAA_30M_REP1.umi_dedup.sorted.bam", @@ -1013,6 +2434,8 @@ "star_salmon/rseqc/inner_distance/txt/RAP1_IAA_30M_REP1.inner_distance.txt", "star_salmon/rseqc/inner_distance/txt/RAP1_IAA_30M_REP1.inner_distance_freq.txt", "star_salmon/rseqc/inner_distance/txt/RAP1_IAA_30M_REP1.inner_distance_mean.txt", + "star_salmon/rseqc/inner_distance/txt/RAP1_UNINDUCED_REP1.inner_distance.txt", + "star_salmon/rseqc/inner_distance/txt/RAP1_UNINDUCED_REP2.inner_distance.txt", "star_salmon/rseqc/inner_distance/txt/WT_REP1.inner_distance.txt", "star_salmon/rseqc/inner_distance/txt/WT_REP1.inner_distance_freq.txt", "star_salmon/rseqc/inner_distance/txt/WT_REP1.inner_distance_mean.txt", @@ -1113,6 +2536,7 @@ "star_salmon/salmon.merged.transcript_counts.tsv", "star_salmon/salmon.merged.transcript_lengths.tsv", "star_salmon/salmon.merged.transcript_tpm.tsv", + "star_salmon/salmon.merged.tx2gene.tsv", "star_salmon/samtools_stats", "star_salmon/samtools_stats/RAP1_IAA_30M_REP1.sorted.bam.flagstat", "star_salmon/samtools_stats/RAP1_IAA_30M_REP1.sorted.bam.idxstats", @@ -1159,7 +2583,6 @@ "star_salmon/samtools_stats/WT_REP2.umi_dedup.transcriptome.sorted.bam.flagstat", "star_salmon/samtools_stats/WT_REP2.umi_dedup.transcriptome.sorted.bam.idxstats", "star_salmon/samtools_stats/WT_REP2.umi_dedup.transcriptome.sorted.bam.stats", - "star_salmon/tx2gene.tsv", "star_salmon/umitools", "star_salmon/umitools/RAP1_IAA_30M_REP1.umi_dedup.sorted_edit_distance.tsv", "star_salmon/umitools/RAP1_IAA_30M_REP1.umi_dedup.sorted_per_umi.tsv", @@ -1197,10 +2620,10 @@ "star_salmon/umitools/genomic_dedup_log/RAP1_UNINDUCED_REP2.umi_dedup.sorted.log", "star_salmon/umitools/genomic_dedup_log/WT_REP1.umi_dedup.sorted.log", "star_salmon/umitools/genomic_dedup_log/WT_REP2.umi_dedup.sorted.log", - "star_salmon/umitools/prepare_for_salmon_log", - "star_salmon/umitools/prepare_for_salmon_log/RAP1_IAA_30M_REP1.umi_dedup.transcriptome.filtered.prepare_for_rsem.log", - "star_salmon/umitools/prepare_for_salmon_log/WT_REP1.umi_dedup.transcriptome.filtered.prepare_for_rsem.log", - "star_salmon/umitools/prepare_for_salmon_log/WT_REP2.umi_dedup.transcriptome.filtered.prepare_for_rsem.log", + "star_salmon/umitools/prepare_for_quantification_log", + "star_salmon/umitools/prepare_for_quantification_log/RAP1_IAA_30M_REP1.umi_dedup.transcriptome.filtered.prepare_for_rsem.log", + "star_salmon/umitools/prepare_for_quantification_log/WT_REP1.umi_dedup.transcriptome.filtered.prepare_for_rsem.log", + "star_salmon/umitools/prepare_for_quantification_log/WT_REP2.umi_dedup.transcriptome.filtered.prepare_for_rsem.log", "star_salmon/umitools/transcriptomic_dedup_log", "star_salmon/umitools/transcriptomic_dedup_log/RAP1_IAA_30M_REP1.umi_dedup.transcriptome.sorted.log", "star_salmon/umitools/transcriptomic_dedup_log/RAP1_UNINDUCED_REP1.umi_dedup.transcriptome.sorted.log", @@ -1247,7 +2670,6 @@ "fastqc_raw_per_sequence_quality_scores_plot.txt:md5,b5f9a02933e3065952237afd2ec9ce82", "fastqc_raw_sequence_counts_plot.txt:md5,cbae4979d5db66d3b894abcf8d1c453c", "fastqc_raw_sequence_duplication_levels_plot.txt:md5,8812cee16f6ca65e2c33635754de1772", - "fastqc_sequence_length_distribution_plot.txt:md5,7a2263743d5c452dc940eabffcb0ea82", "fastqc_trimmed-status-check-heatmap.txt:md5,1913b4c077a341437475c758fb119559", "fastqc_trimmed_overrepresented_sequences_plot.txt:md5,6a7c50868a36ca6052e9f4adba6b8567", "fastqc_trimmed_per_base_n_content_plot.txt:md5,0cdd698fb9a2a4987572b9b4e8c8990e", @@ -1258,19 +2680,20 @@ "fastqc_trimmed_sequence_counts_plot.txt:md5,370ddc5e58838dc5b55e53b6f8b8902a", "fastqc_trimmed_sequence_duplication_levels_plot.txt:md5,b106d8ee7b83efe237afb862ebbe2f47", "multiqc_citations.txt:md5,34e8b8c69015de25f9fce8c31d2ff864", - "multiqc_cutadapt.txt:md5,0937983d3ddfeccd4ccc5b0d74477558", "multiqc_fastqc_fastqc_raw.txt:md5,81c3c1a2575a1891a7f2a9637a0f2cc0", "multiqc_fastqc_fastqc_trimmed.txt:md5,a8a003b61b03295c416f3eb66c1cca65", - "multiqc_featurecounts_biotype_plot.txt:md5,263834175c1a124e529c686b433fd005", - "multiqc_samtools_idxstats.txt:md5,bdf185faa6d15d22efedb39d38c84943", - "multiqc_umitools_extract.txt:md5,d41d8cd98f00b204e9800998ecf8427e", - "qualimap_gene_coverage_profile_Counts.txt:md5,48d6c0b4df0f6f535a4526fc74b0fd47", - "qualimap_gene_coverage_profile_Normalised.txt:md5,8974b37cbdbbc2a23ca103a3a4c10dd4", - "qualimap_rnaseq_cov_hist.txt:md5,55d1a7026062c28624be5901ac6781a4", - "rseqc_infer_experiment_plot.txt:md5,595bfcda9eddeed4f9ae4e162fe7120d", + "multiqc_featurecounts_biotype_plot.txt:md5,331463958ffee645b8a27fe7434161c1", + "multiqc_samtools_idxstats.txt:md5,f4f3533bfb9996f86f76d4a995554080", + "multiqc_umitools_extract.txt:md5,f725988a4067b50d0f7dc3661a356ccf", + "qualimap_gene_coverage_profile_Counts.txt:md5,6902bc4b1149f91ba3beb5f9c0a8add5", + "qualimap_gene_coverage_profile_Normalised.txt:md5,b0b1640b18fa0dbbefc05f11d5f7ff60", + "qualimap_rnaseq_cov_hist.txt:md5,b0bf80610f5d22dce9e4c2eb19d976fc", + "rseqc_infer_experiment_plot.txt:md5,ad684fd7b58448daee59c6404b477774", "samtools-idxstats-mapped-reads-plot_Normalised_Counts.txt:md5,75acd04232d1804b5f960ee4c5db4722", - "samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts.txt:md5,53addd7b78d8ae224920ec9b97489d72", - "samtools-idxstats-mapped-reads-plot_Raw_Counts.txt:md5,2cae5122b2e6371f068722ed666678a1", + "samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts.txt:md5,ae45731d8d4595f77e6b271004f3a070", + "samtools-idxstats-mapped-reads-plot_Raw_Counts.txt:md5,d36fd6003bfb754f1e0c5d8af15a35dd", + "umitools_extract_barplot_success.txt:md5,0220372f068d589e7e63fb48e66cb99b", + "umitools_extract_regex_barplot.txt:md5,f94f8393b1dcff652edd7b34dac7c596", "ambig_info.tsv:md5,0b462f9b2d8eff1b4d76b7433434899c", "expected_bias.gz:md5,3407f87245d0003e0ffbfdf6d8c04f20", "observed_bias.gz:md5,92bcd0592d22a6a58d0360fc76103e56", @@ -1301,7 +2724,7 @@ "observed_bias_3p.gz:md5,92bcd0592d22a6a58d0360fc76103e56", "cmd_info.json:md5,809380ddce725a8fab75dd7741b64bf6", "lib_format_counts.json:md5,d231ba7624b67eb654989f69530e2925", - "tx2gene.tsv:md5,0e2418a69d2eba45097ebffc2f700bfe", + "salmon.merged.tx2gene.tsv:md5,0e2418a69d2eba45097ebffc2f700bfe", "ambig_info.tsv:md5,0f0e3687e731243392685c550fb1d93f", "expected_bias.gz:md5,3407f87245d0003e0ffbfdf6d8c04f20", "observed_bias.gz:md5,92bcd0592d22a6a58d0360fc76103e56", @@ -1317,7 +2740,7 @@ "observed_bias.gz:md5,92bcd0592d22a6a58d0360fc76103e56", "observed_bias_3p.gz:md5,92bcd0592d22a6a58d0360fc76103e56", "cmd_info.json:md5,1b4720397a3819ee8307736442195cf0", - "ambig_info.tsv:md5,651337ad8cc12771ab78164630848a34", + "ambig_info.tsv:md5,c43a1ba2fc60facdd5ecdd6db16285e1", "expected_bias.gz:md5,3407f87245d0003e0ffbfdf6d8c04f20", "observed_bias.gz:md5,92bcd0592d22a6a58d0360fc76103e56", "observed_bias_3p.gz:md5,92bcd0592d22a6a58d0360fc76103e56", @@ -1327,18 +2750,18 @@ "observed_bias.gz:md5,92bcd0592d22a6a58d0360fc76103e56", "observed_bias_3p.gz:md5,92bcd0592d22a6a58d0360fc76103e56", "cmd_info.json:md5,a3b1b764e21b500d9ffed5beb6da85ac", - "RAP1_IAA_30M_REP1.biotype_counts_mqc.tsv:md5,d0e2b4a2e14fa97ad49c4baacfb1d5e3", + "RAP1_IAA_30M_REP1.biotype_counts_mqc.tsv:md5,4d8441024b175d1edd237e49eb953b91", "RAP1_IAA_30M_REP1.biotype_counts_rrna_mqc.tsv:md5,dde2de0cb90e10d0195c726f768e9941", - "RAP1_IAA_30M_REP1.featureCounts.tsv:md5,3f65cd0875ee679cc608d64c42daa40a", + "RAP1_IAA_30M_REP1.featureCounts.tsv:md5,388ff6b41aa05a7b0620dab7e5209d4b", "RAP1_UNINDUCED_REP1.biotype_counts_mqc.tsv:md5,619bb912961ef626647f713335935a5f", "RAP1_UNINDUCED_REP1.biotype_counts_rrna_mqc.tsv:md5,845ff9059c72bc6722a8de69776e22bb", "RAP1_UNINDUCED_REP1.featureCounts.tsv:md5,493c34e3bffcb1833bf47c052d35d168", "RAP1_UNINDUCED_REP2.biotype_counts_mqc.tsv:md5,1b2f0f0a41e2c85592ccbfdb2a77f99e", "RAP1_UNINDUCED_REP2.biotype_counts_rrna_mqc.tsv:md5,6d3fa4c88c7fe61f638e4624ad5e22f0", "RAP1_UNINDUCED_REP2.featureCounts.tsv:md5,6e9b9ffcb46068a9b8fb12af96e0671a", - "WT_REP1.biotype_counts_mqc.tsv:md5,76e6acbdf45a12e2053c5bc80c16736a", + "WT_REP1.biotype_counts_mqc.tsv:md5,3c474aa63a697dd177fbbaa8d81ae109", "WT_REP1.biotype_counts_rrna_mqc.tsv:md5,8ef76d717492ca23764938aee8ea33a9", - "WT_REP1.featureCounts.tsv:md5,aed088e05bf4139f5bc2c1fa513365f4", + "WT_REP1.featureCounts.tsv:md5,32afb878f1afe7455cdecb90cc9cfd2f", "WT_REP2.biotype_counts_mqc.tsv:md5,e859f48881b11b5e4e60f729391de069", "WT_REP2.biotype_counts_rrna_mqc.tsv:md5,12294618fe44df1e7f39348372dcb481", "WT_REP2.featureCounts.tsv:md5,91fd688a5dec53b0f2597b92d8599845", @@ -1347,56 +2770,56 @@ "RAP1_UNINDUCED_REP2.SJ.out.tab:md5,9329f50423971eaf6ae2a6a896a46660", "WT_REP1.SJ.out.tab:md5,7727eaec321fb8b87524d755e6f7e9db", "WT_REP2.SJ.out.tab:md5,1f04519116b722d992668ac4945769a1", - "coverage_profile_along_genes_(high).txt:md5,84f052e9fa2ce44f4a9eb0e341eeb3ad", - "coverage_profile_along_genes_(low).txt:md5,c6c6f7799776d3b46b7f9b1616ccb068", - "coverage_profile_along_genes_(total).txt:md5,c6c6f7799776d3b46b7f9b1616ccb068", - "coverage_profile_along_genes_(high).txt:md5,d9c43191445075edeb5b318d6be67ddd", - "coverage_profile_along_genes_(low).txt:md5,af1991d0ab4160ab03eb3ae4892c3bf6", - "coverage_profile_along_genes_(total).txt:md5,af1991d0ab4160ab03eb3ae4892c3bf6", - "coverage_profile_along_genes_(high).txt:md5,7d4a5678dc311a848f63a3e8c3e0f8c3", - "coverage_profile_along_genes_(low).txt:md5,b2a0e1a3c5dd2560345d10f6cba85120", - "coverage_profile_along_genes_(total).txt:md5,b2a0e1a3c5dd2560345d10f6cba85120", - "coverage_profile_along_genes_(high).txt:md5,f7d7520d1ac24746a0284a1dc320f4c7", - "coverage_profile_along_genes_(low).txt:md5,808ab48af81ff6a147f28cc0da849b81", - "coverage_profile_along_genes_(total).txt:md5,808ab48af81ff6a147f28cc0da849b81", - "coverage_profile_along_genes_(high).txt:md5,378217a9d9d22fd3ebb6b07f0e51c162", - "coverage_profile_along_genes_(low).txt:md5,99f9a15f2da90bdfde1b92ee596ea38c", - "coverage_profile_along_genes_(total).txt:md5,99f9a15f2da90bdfde1b92ee596ea38c", + "coverage_profile_along_genes_(high).txt:md5,d31e22046dbd841f02111ebfb9882878", + "coverage_profile_along_genes_(low).txt:md5,c65be93b2c17e54ac52c7bd268d4f84c", + "coverage_profile_along_genes_(total).txt:md5,c65be93b2c17e54ac52c7bd268d4f84c", + "coverage_profile_along_genes_(high).txt:md5,faad0aa3639e82945991e6a718cc9981", + "coverage_profile_along_genes_(low).txt:md5,77f281bceba6ec191e9114500bf12c25", + "coverage_profile_along_genes_(total).txt:md5,77f281bceba6ec191e9114500bf12c25", + "coverage_profile_along_genes_(high).txt:md5,fed1adf065e40c9c542dbcec3db58bf3", + "coverage_profile_along_genes_(low).txt:md5,36a5b2e0ecb58a57f7e8272e2b54140e", + "coverage_profile_along_genes_(total).txt:md5,36a5b2e0ecb58a57f7e8272e2b54140e", + "coverage_profile_along_genes_(high).txt:md5,77b95cc375a1f5cc1d6087549baca2b7", + "coverage_profile_along_genes_(low).txt:md5,47d09542eca0e36adc70664d63c35f72", + "coverage_profile_along_genes_(total).txt:md5,47d09542eca0e36adc70664d63c35f72", + "coverage_profile_along_genes_(high).txt:md5,528412108fb159cbfbf5ec5221f7d9e0", + "coverage_profile_along_genes_(low).txt:md5,af85c65cec03e2c65594a39bc58b1a1e", + "coverage_profile_along_genes_(total).txt:md5,af85c65cec03e2c65594a39bc58b1a1e", "RAP1_IAA_30M_REP1.infer_experiment.txt:md5,ddaa65251a996b6def0fceb36f46b849", - "RAP1_UNINDUCED_REP1.infer_experiment.txt:md5,7a23eead24c9c4af5a1f4ce9222fa13a", - "RAP1_UNINDUCED_REP2.infer_experiment.txt:md5,5b7bc57d1349566303263ca3a518e6fd", + "RAP1_UNINDUCED_REP1.infer_experiment.txt:md5,07a1f087aa8a967bb2dae9fac3c76fba", + "RAP1_UNINDUCED_REP2.infer_experiment.txt:md5,cf770d32a803c668c843253813d0764d", "WT_REP1.infer_experiment.txt:md5,63c888e13ef0fa915abd6e7c26ffde48", "WT_REP2.infer_experiment.txt:md5,3e6940ec81e6a809f929362ba4ba4a56", - "tx2gene.tsv:md5,0e2418a69d2eba45097ebffc2f700bfe", - "RAP1_IAA_30M_REP1.umi_dedup.sorted_edit_distance.tsv:md5,620d5a5928e7739492de3bf66d149db2", - "RAP1_IAA_30M_REP1.umi_dedup.sorted_per_umi.tsv:md5,9c68e481bc942cfbf5cf51039238c269", + "salmon.merged.tx2gene.tsv:md5,0e2418a69d2eba45097ebffc2f700bfe", + "RAP1_IAA_30M_REP1.umi_dedup.sorted_edit_distance.tsv:md5,c10c34b83b200187b53d530372ceffad", + "RAP1_IAA_30M_REP1.umi_dedup.sorted_per_umi.tsv:md5,c6ce5764c03a128aba62f5ed13148a26", "RAP1_IAA_30M_REP1.umi_dedup.sorted_per_umi_per_position.tsv:md5,f37b7f5a783425506b434c9e5ff90f25", - "RAP1_IAA_30M_REP1.umi_dedup.transcriptome.sorted_edit_distance.tsv:md5,3ec96cdbe4e9eb45b18df4391b89df34", - "RAP1_IAA_30M_REP1.umi_dedup.transcriptome.sorted_per_umi.tsv:md5,a06aa2fd396dfa28eb3408a0f4e3bf48", + "RAP1_IAA_30M_REP1.umi_dedup.transcriptome.sorted_edit_distance.tsv:md5,e2aac5fd6a5ab736d598d2280a25512c", + "RAP1_IAA_30M_REP1.umi_dedup.transcriptome.sorted_per_umi.tsv:md5,c5c9965dad65f158039ee86aec1a12b6", "RAP1_IAA_30M_REP1.umi_dedup.transcriptome.sorted_per_umi_per_position.tsv:md5,ce0c05c7994d600c75a34d5c9908f970", - "RAP1_UNINDUCED_REP1.umi_dedup.sorted_edit_distance.tsv:md5,58ea92107f0785532f31ba557e5d8aa9", - "RAP1_UNINDUCED_REP1.umi_dedup.sorted_per_umi.tsv:md5,41e6a7a416659b6208c731b1aa7e149f", + "RAP1_UNINDUCED_REP1.umi_dedup.sorted_edit_distance.tsv:md5,f13c51a0079ed8ca24b5211842b755b4", + "RAP1_UNINDUCED_REP1.umi_dedup.sorted_per_umi.tsv:md5,0e9533261c6b1a20563e18b581c4becd", "RAP1_UNINDUCED_REP1.umi_dedup.sorted_per_umi_per_position.tsv:md5,1a4f7954086d4a76d93694443e074312", - "RAP1_UNINDUCED_REP1.umi_dedup.transcriptome.sorted_edit_distance.tsv:md5,176fbeac8e4f1cfa1def599cc5ad4847", - "RAP1_UNINDUCED_REP1.umi_dedup.transcriptome.sorted_per_umi.tsv:md5,fcded67bc5e50902c296d40d53e9079c", + "RAP1_UNINDUCED_REP1.umi_dedup.transcriptome.sorted_edit_distance.tsv:md5,ed9c49f94e25137cbc1dda5d837205ab", + "RAP1_UNINDUCED_REP1.umi_dedup.transcriptome.sorted_per_umi.tsv:md5,81937641edf5bce37d4315bfd59b2e17", "RAP1_UNINDUCED_REP1.umi_dedup.transcriptome.sorted_per_umi_per_position.tsv:md5,5a3d1e0ec5f3af2c279d8321bae2de34", - "RAP1_UNINDUCED_REP2.umi_dedup.sorted_edit_distance.tsv:md5,15120d542adb7ad45acf924d905e7fcf", - "RAP1_UNINDUCED_REP2.umi_dedup.sorted_per_umi.tsv:md5,d68aae0c4698c73c10c83df7f7cba06a", + "RAP1_UNINDUCED_REP2.umi_dedup.sorted_edit_distance.tsv:md5,c5695c44a1c9f1d61d65f252106a4192", + "RAP1_UNINDUCED_REP2.umi_dedup.sorted_per_umi.tsv:md5,8e84dfacf361a8117dcea5196f0ef67a", "RAP1_UNINDUCED_REP2.umi_dedup.sorted_per_umi_per_position.tsv:md5,18f5c21477fc51e56c65ee0660649ffc", - "RAP1_UNINDUCED_REP2.umi_dedup.transcriptome.sorted_edit_distance.tsv:md5,13f3f84f11f6bb8e98f001b97902d559", - "RAP1_UNINDUCED_REP2.umi_dedup.transcriptome.sorted_per_umi.tsv:md5,eb7aedb12f64c703f76ade9b60d3ded0", + "RAP1_UNINDUCED_REP2.umi_dedup.transcriptome.sorted_edit_distance.tsv:md5,9f828afc8af233ef92f6cb00b407a4d9", + "RAP1_UNINDUCED_REP2.umi_dedup.transcriptome.sorted_per_umi.tsv:md5,5f6b059b2b22b0f10600f6dab38555a1", "RAP1_UNINDUCED_REP2.umi_dedup.transcriptome.sorted_per_umi_per_position.tsv:md5,dc636e57732d1548bd4e5454aef63788", "WT_REP1.umi_dedup.sorted_edit_distance.tsv:md5,5d18333d2131dfb7083ece42f5538eb4", - "WT_REP1.umi_dedup.sorted_per_umi.tsv:md5,d81c983368a0b2218eb8954579c376e7", + "WT_REP1.umi_dedup.sorted_per_umi.tsv:md5,5d4109b442504afb2f4e5c91a4730634", "WT_REP1.umi_dedup.sorted_per_umi_per_position.tsv:md5,e2412d716ca85a90f8dbb100a9614991", "WT_REP1.umi_dedup.transcriptome.sorted_edit_distance.tsv:md5,d698cb0a0d23dbb2d78deff0928b2a1f", - "WT_REP1.umi_dedup.transcriptome.sorted_per_umi.tsv:md5,ee2df66b8427ea94fff18430cc1937a4", + "WT_REP1.umi_dedup.transcriptome.sorted_per_umi.tsv:md5,c99e834f6ada5b12ce94c91e9dcea437", "WT_REP1.umi_dedup.transcriptome.sorted_per_umi_per_position.tsv:md5,485a03ff0fec979ee84d918158502bf1", "WT_REP2.umi_dedup.sorted_edit_distance.tsv:md5,a935a046c0a8f269cdeaa7c1c935f0ec", - "WT_REP2.umi_dedup.sorted_per_umi.tsv:md5,0cb0f12e99861120a0437051a7aaa152", + "WT_REP2.umi_dedup.sorted_per_umi.tsv:md5,eb3c130fa6293eca011ef3b09a020b89", "WT_REP2.umi_dedup.sorted_per_umi_per_position.tsv:md5,6f5656947a7f0076df446e6f40430027", "WT_REP2.umi_dedup.transcriptome.sorted_edit_distance.tsv:md5,3e3c6a7e8996e566350742e9911366d3", - "WT_REP2.umi_dedup.transcriptome.sorted_per_umi.tsv:md5,0c986c4cb7a77f650a19e2c454b9b179", + "WT_REP2.umi_dedup.transcriptome.sorted_per_umi.tsv:md5,9526415feb0344a686765ff73fc6508b", "WT_REP2.umi_dedup.transcriptome.sorted_per_umi_per_position.tsv:md5,af9028dbdab81de3854a32cd1d19ac8b", "RAP1_IAA_30M_REP1.umi_extract_1.fastq.gz:md5,e83d7f738fbbfaa541a2e71fe4663447", "RAP1_IAA_30M_REP1.umi_extract_2.fastq.gz:md5,4f2873cbf584d6e84187238a4ae2b8fa", @@ -1412,7 +2835,7 @@ "nf-test": "0.9.3", "nextflow": "25.10.2" }, - "timestamp": "2025-12-04T15:50:11.813452994" + "timestamp": "2026-02-26T14:52:38.404677653" }, "Params: --aligner hisat2 --umi_dedup_tool 'umicollapse'": { "content": [ @@ -1424,9 +2847,6 @@ "CUSTOM_CATADDITIONALFASTA": { "python": "3.12.2" }, - "CUSTOM_GETCHROMSIZES": { - "getchromsizes": 1.21 - }, "CUSTOM_TX2GENE": { "python": "3.10.4" }, @@ -1435,16 +2855,19 @@ "r-base": "4.4.2" }, "DUPRADAR": { - "bioconductor-dupradar": "1.32.0" + "bioconductor-dupradar": "1.38.0" }, "FASTQC": { "fastqc": "0.12.1" }, "FQ_LINT": { - "fq": "0.12.0 (2024-07-08)" + "fq": "0.12.0" + }, + "FQ_LINT_AFTER_TRIMMING": { + "fq": "0.12.0" }, "FQ_SUBSAMPLE": { - "fq": "0.12.0 (2024-07-08)" + "fq": "0.12.0" }, "GTF2BED": { "perl": "5.26.2" @@ -1472,46 +2895,49 @@ "qualimap": 2.3 }, "RSEQC_BAMSTAT": { - "rseqc": "5.0.2" + "rseqc": "5.0.4" }, "RSEQC_INFEREXPERIMENT": { - "rseqc": "5.0.2" + "rseqc": "5.0.4" }, "RSEQC_INNERDISTANCE": { - "rseqc": "5.0.2" + "rseqc": "5.0.4" }, "RSEQC_JUNCTIONANNOTATION": { - "rseqc": "5.0.2" + "rseqc": "5.0.4" }, "RSEQC_JUNCTIONSATURATION": { - "rseqc": "5.0.2" + "rseqc": "5.0.4" }, "RSEQC_READDISTRIBUTION": { - "rseqc": "5.0.2" + "rseqc": "5.0.4" }, "RSEQC_READDUPLICATION": { - "rseqc": "5.0.2" + "rseqc": "5.0.4" }, "SALMON_QUANT": { "salmon": "1.10.3" }, + "SAMTOOLS_FAIDX": { + "samtools": "1.22.1" + }, "SAMTOOLS_FLAGSTAT": { - "samtools": 1.21 + "samtools": "1.22.1" }, "SAMTOOLS_IDXSTATS": { - "samtools": 1.21 + "samtools": "1.22.1" }, "SAMTOOLS_INDEX": { - "samtools": 1.21 + "samtools": "1.22.1" }, "SAMTOOLS_SORT": { - "samtools": 1.21 + "samtools": "1.22.1" }, "SAMTOOLS_SORT_QUALIMAP": { - "samtools": 1.21 + "samtools": "1.22.1" }, "SAMTOOLS_STATS": { - "samtools": 1.21 + "samtools": "1.22.1" }, "SE_GENE_UNIFIED": { "bioconductor-summarizedexperiment": "1.32.0" @@ -1523,8 +2949,6 @@ "subread": "2.0.6" }, "TRIMGALORE": { - "cutadapt": 4.9, - "pigz": 2.8, "trimgalore": "0.6.10" }, "TXIMETA_TXIMPORT": { @@ -1534,7 +2958,7 @@ "umicollapse": "1.1.0-0" }, "UMITOOLS_EXTRACT": { - "umitools": "1.1.5" + "umitools": "1.1.6" }, "UNTAR_HISAT2_INDEX": { "untar": 1.34 @@ -1882,6 +3306,8 @@ "hisat2/rseqc/inner_distance/txt/RAP1_IAA_30M_REP1.inner_distance.txt", "hisat2/rseqc/inner_distance/txt/RAP1_IAA_30M_REP1.inner_distance_freq.txt", "hisat2/rseqc/inner_distance/txt/RAP1_IAA_30M_REP1.inner_distance_mean.txt", + "hisat2/rseqc/inner_distance/txt/RAP1_UNINDUCED_REP1.inner_distance.txt", + "hisat2/rseqc/inner_distance/txt/RAP1_UNINDUCED_REP2.inner_distance.txt", "hisat2/rseqc/inner_distance/txt/WT_REP1.inner_distance.txt", "hisat2/rseqc/inner_distance/txt/WT_REP1.inner_distance_freq.txt", "hisat2/rseqc/inner_distance/txt/WT_REP1.inner_distance_mean.txt", @@ -2068,6 +3494,9 @@ "multiqc/hisat2/multiqc_report_data/multiqc_samtools_stats.txt", "multiqc/hisat2/multiqc_report_data/multiqc_software_versions.txt", "multiqc/hisat2/multiqc_report_data/multiqc_sources.txt", + "multiqc/hisat2/multiqc_report_data/multiqc_umicollapse.txt", + "multiqc/hisat2/multiqc_report_data/multiqc_umitools_dedup.txt", + "multiqc/hisat2/multiqc_report_data/multiqc_umitools_extract.txt", "multiqc/hisat2/multiqc_report_data/qualimap_gene_coverage_profile_Counts.txt", "multiqc/hisat2/multiqc_report_data/qualimap_gene_coverage_profile_Normalised.txt", "multiqc/hisat2/multiqc_report_data/qualimap_genomic_origin.txt", @@ -2095,6 +3524,10 @@ "multiqc/hisat2/multiqc_report_data/samtools-idxstats-mapped-reads-plot_Raw_Counts.txt", "multiqc/hisat2/multiqc_report_data/samtools-stats-dp.txt", "multiqc/hisat2/multiqc_report_data/samtools_alignment_plot.txt", + "multiqc/hisat2/multiqc_report_data/umicollapse_deduplication_barplot.txt", + "multiqc/hisat2/multiqc_report_data/umicollapse_stats_violin.txt", + "multiqc/hisat2/multiqc_report_data/umitools_extract_barplot_success.txt", + "multiqc/hisat2/multiqc_report_data/umitools_extract_regex_barplot.txt", "multiqc/hisat2/multiqc_report_plots", "multiqc/hisat2/multiqc_report_plots/pdf", "multiqc/hisat2/multiqc_report_plots/pdf/cutadapt_filtered_reads_plot-cnt.pdf", @@ -2165,6 +3598,13 @@ "multiqc/hisat2/multiqc_report_plots/pdf/samtools-stats-dp.pdf", "multiqc/hisat2/multiqc_report_plots/pdf/samtools_alignment_plot-cnt.pdf", "multiqc/hisat2/multiqc_report_plots/pdf/samtools_alignment_plot-pct.pdf", + "multiqc/hisat2/multiqc_report_plots/pdf/umicollapse_deduplication_barplot-cnt.pdf", + "multiqc/hisat2/multiqc_report_plots/pdf/umicollapse_deduplication_barplot-pct.pdf", + "multiqc/hisat2/multiqc_report_plots/pdf/umicollapse_stats_violin.pdf", + "multiqc/hisat2/multiqc_report_plots/pdf/umitools_extract_barplot_success-cnt.pdf", + "multiqc/hisat2/multiqc_report_plots/pdf/umitools_extract_barplot_success-pct.pdf", + "multiqc/hisat2/multiqc_report_plots/pdf/umitools_extract_regex_barplot-cnt.pdf", + "multiqc/hisat2/multiqc_report_plots/pdf/umitools_extract_regex_barplot-pct.pdf", "multiqc/hisat2/multiqc_report_plots/png", "multiqc/hisat2/multiqc_report_plots/png/cutadapt_filtered_reads_plot-cnt.png", "multiqc/hisat2/multiqc_report_plots/png/cutadapt_filtered_reads_plot-pct.png", @@ -2234,6 +3674,13 @@ "multiqc/hisat2/multiqc_report_plots/png/samtools-stats-dp.png", "multiqc/hisat2/multiqc_report_plots/png/samtools_alignment_plot-cnt.png", "multiqc/hisat2/multiqc_report_plots/png/samtools_alignment_plot-pct.png", + "multiqc/hisat2/multiqc_report_plots/png/umicollapse_deduplication_barplot-cnt.png", + "multiqc/hisat2/multiqc_report_plots/png/umicollapse_deduplication_barplot-pct.png", + "multiqc/hisat2/multiqc_report_plots/png/umicollapse_stats_violin.png", + "multiqc/hisat2/multiqc_report_plots/png/umitools_extract_barplot_success-cnt.png", + "multiqc/hisat2/multiqc_report_plots/png/umitools_extract_barplot_success-pct.png", + "multiqc/hisat2/multiqc_report_plots/png/umitools_extract_regex_barplot-cnt.png", + "multiqc/hisat2/multiqc_report_plots/png/umitools_extract_regex_barplot-pct.png", "multiqc/hisat2/multiqc_report_plots/svg", "multiqc/hisat2/multiqc_report_plots/svg/cutadapt_filtered_reads_plot-cnt.svg", "multiqc/hisat2/multiqc_report_plots/svg/cutadapt_filtered_reads_plot-pct.svg", @@ -2303,6 +3750,13 @@ "multiqc/hisat2/multiqc_report_plots/svg/samtools-stats-dp.svg", "multiqc/hisat2/multiqc_report_plots/svg/samtools_alignment_plot-cnt.svg", "multiqc/hisat2/multiqc_report_plots/svg/samtools_alignment_plot-pct.svg", + "multiqc/hisat2/multiqc_report_plots/svg/umicollapse_deduplication_barplot-cnt.svg", + "multiqc/hisat2/multiqc_report_plots/svg/umicollapse_deduplication_barplot-pct.svg", + "multiqc/hisat2/multiqc_report_plots/svg/umicollapse_stats_violin.svg", + "multiqc/hisat2/multiqc_report_plots/svg/umitools_extract_barplot_success-cnt.svg", + "multiqc/hisat2/multiqc_report_plots/svg/umitools_extract_barplot_success-pct.svg", + "multiqc/hisat2/multiqc_report_plots/svg/umitools_extract_regex_barplot-cnt.svg", + "multiqc/hisat2/multiqc_report_plots/svg/umitools_extract_regex_barplot-pct.svg", "pipeline_info", "pipeline_info/nf_core_rnaseq_software_mqc_versions.yml", "salmon", @@ -2409,7 +3863,7 @@ "salmon/salmon.merged.transcript_counts.tsv", "salmon/salmon.merged.transcript_lengths.tsv", "salmon/salmon.merged.transcript_tpm.tsv", - "salmon/tx2gene.tsv", + "salmon/salmon.merged.tx2gene.tsv", "trimgalore", "trimgalore/RAP1_IAA_30M_REP1_trimmed_1.fastq.gz_trimming_report.txt", "trimgalore/RAP1_IAA_30M_REP1_trimmed_2.fastq.gz_trimming_report.txt", @@ -2485,7 +3939,6 @@ "fastqc_raw_per_sequence_quality_scores_plot.txt:md5,b5f9a02933e3065952237afd2ec9ce82", "fastqc_raw_sequence_counts_plot.txt:md5,cbae4979d5db66d3b894abcf8d1c453c", "fastqc_raw_sequence_duplication_levels_plot.txt:md5,8812cee16f6ca65e2c33635754de1772", - "fastqc_sequence_length_distribution_plot.txt:md5,7a2263743d5c452dc940eabffcb0ea82", "fastqc_trimmed-status-check-heatmap.txt:md5,1913b4c077a341437475c758fb119559", "fastqc_trimmed_overrepresented_sequences_plot.txt:md5,6a7c50868a36ca6052e9f4adba6b8567", "fastqc_trimmed_per_base_n_content_plot.txt:md5,0cdd698fb9a2a4987572b9b4e8c8990e", @@ -2495,12 +3948,13 @@ "fastqc_trimmed_per_sequence_quality_scores_plot.txt:md5,ac167d250e9f88899da0ea81ef2b002e", "fastqc_trimmed_sequence_counts_plot.txt:md5,370ddc5e58838dc5b55e53b6f8b8902a", "fastqc_trimmed_sequence_duplication_levels_plot.txt:md5,b106d8ee7b83efe237afb862ebbe2f47", - "multiqc_citations.txt:md5,da5043f8ab9b5bd51d91ccf3111c655e", - "multiqc_cutadapt.txt:md5,0937983d3ddfeccd4ccc5b0d74477558", + "multiqc_citations.txt:md5,a9ff7c2e67f2abef0af1f7f42fa65ebf", "multiqc_fastqc_fastqc_raw.txt:md5,81c3c1a2575a1891a7f2a9637a0f2cc0", "multiqc_fastqc_fastqc_trimmed.txt:md5,a8a003b61b03295c416f3eb66c1cca65", "multiqc_featurecounts_biotype_plot.txt:md5,aa03c08d5d2fba14d6770085bc042dbc", "multiqc_samtools_idxstats.txt:md5,35fe3b73df5ab19b53c117d3269e7e72", + "multiqc_umicollapse.txt:md5,02859951011d3387427c78a768096dc8", + "multiqc_umitools_extract.txt:md5,f725988a4067b50d0f7dc3661a356ccf", "qualimap_gene_coverage_profile_Counts.txt:md5,54613117acef91c2271327e31203242c", "qualimap_gene_coverage_profile_Normalised.txt:md5,f2884314cb4296877eb6ffd03a12a5b8", "qualimap_rnaseq_cov_hist.txt:md5,c5abd5f3ddd835052c7bcac0f92ff0a4", @@ -2508,6 +3962,10 @@ "samtools-idxstats-mapped-reads-plot_Normalised_Counts.txt:md5,75acd04232d1804b5f960ee4c5db4722", "samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts.txt:md5,f9f9e9472fcd03f74e0186d29ee922dd", "samtools-idxstats-mapped-reads-plot_Raw_Counts.txt:md5,e71efae3d46b66490b096b12b4ae27c5", + "umicollapse_deduplication_barplot.txt:md5,08f7c0b1bc975100d9fbc36abb719291", + "umicollapse_stats_violin.txt:md5,327fdd545122975da86fa650e64d1455", + "umitools_extract_barplot_success.txt:md5,0220372f068d589e7e63fb48e66cb99b", + "umitools_extract_regex_barplot.txt:md5,f94f8393b1dcff652edd7b34dac7c596", "ambig_info.tsv:md5,0b462f9b2d8eff1b4d76b7433434899c", "expected_bias.gz:md5,3407f87245d0003e0ffbfdf6d8c04f20", "observed_bias.gz:md5,92bcd0592d22a6a58d0360fc76103e56", @@ -2538,7 +3996,7 @@ "observed_bias_3p.gz:md5,92bcd0592d22a6a58d0360fc76103e56", "cmd_info.json:md5,809380ddce725a8fab75dd7741b64bf6", "lib_format_counts.json:md5,d231ba7624b67eb654989f69530e2925", - "tx2gene.tsv:md5,0e2418a69d2eba45097ebffc2f700bfe", + "salmon.merged.tx2gene.tsv:md5,0e2418a69d2eba45097ebffc2f700bfe", "RAP1_IAA_30M_REP1.umi_extract_1.fastq.gz:md5,e83d7f738fbbfaa541a2e71fe4663447", "RAP1_IAA_30M_REP1.umi_extract_2.fastq.gz:md5,4f2873cbf584d6e84187238a4ae2b8fa", "RAP1_UNINDUCED_REP1.umi_extract.fastq.gz:md5,9e42242fd68baac592140f63a8a716ce", @@ -2553,7 +4011,7 @@ "nf-test": "0.9.3", "nextflow": "25.10.2" }, - "timestamp": "2025-12-04T15:46:37.452288674" + "timestamp": "2026-02-26T14:48:58.12271551" }, "--umi_dedup_tool 'umitools - stub": { "content": [ @@ -2566,16 +4024,13 @@ "cat": 9.5 }, "CUSTOM_CATADDITIONALFASTA": { - "python": null - }, - "CUSTOM_GETCHROMSIZES": { - "getchromsizes": 1.21 + "python": "3.12.2" }, "FASTQC": { "fastqc": "0.12.1" }, "FQ_LINT": { - "fq": "0.12.0 (2024-07-08)" + "fq": "0.12.0" }, "GTF2BED": { "perl": "5.26.2" @@ -2589,18 +4044,19 @@ "GUNZIP_GTF": { "gunzip": 1.13 }, + "SAMTOOLS_FAIDX": { + "samtools": "1.22.1" + }, "STAR_GENOMEGENERATE": { "gawk": "5.1.0", "samtools": 1.21, "star": "2.7.11b" }, "TRIMGALORE": { - "cutadapt": 4.9, - "pigz": 2.8, "trimgalore": "0.6.10" }, "UMITOOLS_EXTRACT": { - "umitools": "1.1.5" + "umitools": "1.1.6" }, "UNTAR_SALMON_INDEX": { "untar": 1.34 @@ -2661,9 +4117,9 @@ ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.4" + "nf-test": "0.9.3", + "nextflow": "25.10.2" }, - "timestamp": "2025-01-28T15:38:40.145569546" + "timestamp": "2026-02-04T17:51:58.400008189" } } \ No newline at end of file diff --git a/tests/uncompressed_fastq.nf.test b/tests/uncompressed_fastq.nf.test new file mode 100644 index 000000000..afd9d3839 --- /dev/null +++ b/tests/uncompressed_fastq.nf.test @@ -0,0 +1,42 @@ +nextflow_pipeline { + + name "Test pipeline with uncompressed FASTQ input" + script "../main.nf" + tag "pipeline" + + test("Params: uncompressed FASTQ input") { + + when { + params { + outdir = "$outputDir" + + // Use samplesheet with mixed compressed/uncompressed samples + input = 'https://raw.githubusercontent.com/nf-core/test-datasets/rnaseq/samplesheet/v3.10/samplesheet_test_uncompressed.csv' + + // Use minimal settings to speed up test + skip_bbsplit = true + skip_pseudo_alignment = true + } + } + + then { + // stable_name: All files + folders in ${params.outdir}/ with a stable name + def stable_name = getAllFilesFromDir(params.outdir, relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}']) + // stable_path: All files in ${params.outdir}/ with stable content + def stable_path = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore') + assertAll( + { assert workflow.success}, + { assert snapshot( + // Number of successful tasks + workflow.trace.succeeded().size(), + // pipeline versions.yml file for multiqc from which Nextflow and pipeline versions are removed (all from the workflow key) + removeFromYamlMap("$outputDir/pipeline_info/nf_core_rnaseq_software_mqc_versions.yml", "Workflow"), + // All stable path name, with a relative path + stable_name, + // All files with stable contents + stable_path + ).match() } + ) + } + } +} diff --git a/tests/uncompressed_fastq.nf.test.snap b/tests/uncompressed_fastq.nf.test.snap new file mode 100644 index 000000000..f6643d4d5 --- /dev/null +++ b/tests/uncompressed_fastq.nf.test.snap @@ -0,0 +1,1363 @@ +{ + "Params: uncompressed FASTQ input": { + "content": [ + 231, + { + "BEDTOOLS_GENOMECOV_FW": { + "bedtools": "2.31.1" + }, + "BEDTOOLS_GENOMECOV_REV": { + "bedtools": "2.31.1" + }, + "CAT_FASTQ": { + "cat": 9.5 + }, + "CUSTOM_CATADDITIONALFASTA": { + "python": "3.12.2" + }, + "CUSTOM_TX2GENE": { + "python": "3.10.4" + }, + "DESEQ2_QC_BAM_SALMON": { + "bioconductor-deseq2": "1.46.0", + "r-base": "4.4.2" + }, + "DUPRADAR": { + "bioconductor-dupradar": "1.38.0" + }, + "FASTQC": { + "fastqc": "0.12.1" + }, + "FQ_LINT": { + "fq": "0.12.0" + }, + "FQ_LINT_AFTER_TRIMMING": { + "fq": "0.12.0" + }, + "FQ_SUBSAMPLE": { + "fq": "0.12.0" + }, + "GTF2BED": { + "perl": "5.26.2" + }, + "GTF_FILTER": { + "python": "3.9.5" + }, + "GUNZIP_ADDITIONAL_FASTA": { + "gunzip": 1.13 + }, + "GUNZIP_GTF": { + "gunzip": 1.13 + }, + "MULTIQC_CUSTOM_BIOTYPE": { + "python": "3.9.5" + }, + "PICARD_MARKDUPLICATES": { + "picard": "3.4.0" + }, + "QUALIMAP_RNASEQ": { + "qualimap": 2.3 + }, + "RSEQC_BAMSTAT": { + "rseqc": "5.0.4" + }, + "RSEQC_INFEREXPERIMENT": { + "rseqc": "5.0.4" + }, + "RSEQC_INNERDISTANCE": { + "rseqc": "5.0.4" + }, + "RSEQC_JUNCTIONANNOTATION": { + "rseqc": "5.0.4" + }, + "RSEQC_JUNCTIONSATURATION": { + "rseqc": "5.0.4" + }, + "RSEQC_READDISTRIBUTION": { + "rseqc": "5.0.4" + }, + "RSEQC_READDUPLICATION": { + "rseqc": "5.0.4" + }, + "SALMON_QUANT": { + "salmon": "1.10.3" + }, + "SAMTOOLS_FAIDX": { + "samtools": "1.22.1" + }, + "SAMTOOLS_FLAGSTAT": { + "samtools": "1.22.1" + }, + "SAMTOOLS_IDXSTATS": { + "samtools": "1.22.1" + }, + "SAMTOOLS_INDEX": { + "samtools": "1.22.1" + }, + "SAMTOOLS_SORT": { + "samtools": "1.22.1" + }, + "SAMTOOLS_SORT_QUALIMAP": { + "samtools": "1.22.1" + }, + "SAMTOOLS_STATS": { + "samtools": "1.22.1" + }, + "SE_GENE_UNIFIED": { + "bioconductor-summarizedexperiment": "1.32.0" + }, + "SE_TRANSCRIPT_UNIFIED": { + "bioconductor-summarizedexperiment": "1.32.0" + }, + "STAR_ALIGN": { + "gawk": "5.1.0", + "samtools": 1.21, + "star": "2.7.11b" + }, + "STAR_GENOMEGENERATE": { + "gawk": "5.1.0", + "samtools": 1.21, + "star": "2.7.11b" + }, + "STRINGTIE_STRINGTIE": { + "stringtie": "2.2.3" + }, + "SUBREAD_FEATURECOUNTS": { + "subread": "2.0.6" + }, + "TRIMGALORE": { + "trimgalore": "0.6.10" + }, + "TXIMETA_TXIMPORT": { + "bioconductor-tximeta": "1.20.1" + }, + "UCSC_BEDCLIP": { + "ucsc": 377 + }, + "UCSC_BEDGRAPHTOBIGWIG": { + "ucsc": 469 + }, + "UNTAR_SALMON_INDEX": { + "untar": 1.34 + } + }, + [ + "custom", + "custom/out", + "custom/out/genome_gfp.fasta", + "custom/out/genome_gfp.gtf", + "fastqc", + "fastqc/raw", + "fastqc/raw/RAP1_IAA_30M_REP1_raw_1_fastqc.html", + "fastqc/raw/RAP1_IAA_30M_REP1_raw_1_fastqc.zip", + "fastqc/raw/RAP1_IAA_30M_REP1_raw_2_fastqc.html", + "fastqc/raw/RAP1_IAA_30M_REP1_raw_2_fastqc.zip", + "fastqc/raw/RAP1_UNINDUCED_REP1_raw_fastqc.html", + "fastqc/raw/RAP1_UNINDUCED_REP1_raw_fastqc.zip", + "fastqc/raw/RAP1_UNINDUCED_REP2_raw_fastqc.html", + "fastqc/raw/RAP1_UNINDUCED_REP2_raw_fastqc.zip", + "fastqc/raw/WT_REP1_raw_1_fastqc.html", + "fastqc/raw/WT_REP1_raw_1_fastqc.zip", + "fastqc/raw/WT_REP1_raw_2_fastqc.html", + "fastqc/raw/WT_REP1_raw_2_fastqc.zip", + "fastqc/raw/WT_REP1b_raw_1_fastqc.html", + "fastqc/raw/WT_REP1b_raw_1_fastqc.zip", + "fastqc/raw/WT_REP1b_raw_2_fastqc.html", + "fastqc/raw/WT_REP1b_raw_2_fastqc.zip", + "fastqc/raw/WT_REP2_raw_1_fastqc.html", + "fastqc/raw/WT_REP2_raw_1_fastqc.zip", + "fastqc/raw/WT_REP2_raw_2_fastqc.html", + "fastqc/raw/WT_REP2_raw_2_fastqc.zip", + "fastqc/trim", + "fastqc/trim/RAP1_IAA_30M_REP1_trimmed_1_val_1_fastqc.html", + "fastqc/trim/RAP1_IAA_30M_REP1_trimmed_1_val_1_fastqc.zip", + "fastqc/trim/RAP1_IAA_30M_REP1_trimmed_2_val_2_fastqc.html", + "fastqc/trim/RAP1_IAA_30M_REP1_trimmed_2_val_2_fastqc.zip", + "fastqc/trim/RAP1_UNINDUCED_REP1_trimmed_trimmed_fastqc.html", + "fastqc/trim/RAP1_UNINDUCED_REP1_trimmed_trimmed_fastqc.zip", + "fastqc/trim/RAP1_UNINDUCED_REP2_trimmed_trimmed_fastqc.html", + "fastqc/trim/RAP1_UNINDUCED_REP2_trimmed_trimmed_fastqc.zip", + "fastqc/trim/WT_REP1_trimmed_1_val_1_fastqc.html", + "fastqc/trim/WT_REP1_trimmed_1_val_1_fastqc.zip", + "fastqc/trim/WT_REP1_trimmed_2_val_2_fastqc.html", + "fastqc/trim/WT_REP1_trimmed_2_val_2_fastqc.zip", + "fastqc/trim/WT_REP1b_trimmed_1_val_1_fastqc.html", + "fastqc/trim/WT_REP1b_trimmed_1_val_1_fastqc.zip", + "fastqc/trim/WT_REP1b_trimmed_2_val_2_fastqc.html", + "fastqc/trim/WT_REP1b_trimmed_2_val_2_fastqc.zip", + "fastqc/trim/WT_REP2_trimmed_1_val_1_fastqc.html", + "fastqc/trim/WT_REP2_trimmed_1_val_1_fastqc.zip", + "fastqc/trim/WT_REP2_trimmed_2_val_2_fastqc.html", + "fastqc/trim/WT_REP2_trimmed_2_val_2_fastqc.zip", + "fq_lint", + "fq_lint/raw", + "fq_lint/raw/RAP1_IAA_30M_REP1.fq_lint.txt", + "fq_lint/raw/RAP1_UNINDUCED_REP1.fq_lint.txt", + "fq_lint/raw/RAP1_UNINDUCED_REP2.fq_lint.txt", + "fq_lint/raw/WT_REP1.fq_lint.txt", + "fq_lint/raw/WT_REP1b.fq_lint.txt", + "fq_lint/raw/WT_REP2.fq_lint.txt", + "fq_lint/trimmed", + "fq_lint/trimmed/RAP1_IAA_30M_REP1.fq_lint.txt", + "fq_lint/trimmed/RAP1_UNINDUCED_REP1.fq_lint.txt", + "fq_lint/trimmed/RAP1_UNINDUCED_REP2.fq_lint.txt", + "fq_lint/trimmed/WT_REP1.fq_lint.txt", + "fq_lint/trimmed/WT_REP1b.fq_lint.txt", + "fq_lint/trimmed/WT_REP2.fq_lint.txt", + "multiqc", + "multiqc/star_salmon", + "multiqc/star_salmon/multiqc_report.html", + "multiqc/star_salmon/multiqc_report_data", + "multiqc/star_salmon/multiqc_report_data/cutadapt_filtered_reads_plot.txt", + "multiqc/star_salmon/multiqc_report_data/cutadapt_trimmed_sequences_plot_3_Counts.txt", + "multiqc/star_salmon/multiqc_report_data/cutadapt_trimmed_sequences_plot_3_Obs_Exp.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_raw-status-check-heatmap.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_raw_adapter_content_plot.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_raw_overrepresented_sequences_plot.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_raw_per_base_n_content_plot.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_raw_per_base_sequence_quality_plot.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_raw_per_sequence_gc_content_plot_Counts.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_raw_per_sequence_gc_content_plot_Percentages.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_raw_per_sequence_quality_scores_plot.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_raw_sequence_counts_plot.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_raw_sequence_duplication_levels_plot.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_raw_top_overrepresented_sequences_table.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_sequence_length_distribution_plot.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_trimmed-status-check-heatmap.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_trimmed_overrepresented_sequences_plot.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_trimmed_per_base_n_content_plot.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_trimmed_per_base_sequence_quality_plot.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_trimmed_per_sequence_gc_content_plot_Counts.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_trimmed_per_sequence_gc_content_plot_Percentages.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_trimmed_per_sequence_quality_scores_plot.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_trimmed_sequence_counts_plot.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_trimmed_sequence_duplication_levels_plot.txt", + "multiqc/star_salmon/multiqc_report_data/fastqc_trimmed_top_overrepresented_sequences_table.txt", + "multiqc/star_salmon/multiqc_report_data/junction_saturation_known.txt", + "multiqc/star_salmon/multiqc_report_data/junction_saturation_novel.txt", + "multiqc/star_salmon/multiqc_report_data/llms-full.txt", + "multiqc/star_salmon/multiqc_report_data/multiqc.log", + "multiqc/star_salmon/multiqc_report_data/multiqc.parquet", + "multiqc/star_salmon/multiqc_report_data/multiqc_citations.txt", + "multiqc/star_salmon/multiqc_report_data/multiqc_cutadapt.txt", + "multiqc/star_salmon/multiqc_report_data/multiqc_data.json", + "multiqc/star_salmon/multiqc_report_data/multiqc_dupradar.txt", + "multiqc/star_salmon/multiqc_report_data/multiqc_fail_strand_check_table.txt", + "multiqc/star_salmon/multiqc_report_data/multiqc_fastqc_fastqc_raw.txt", + "multiqc/star_salmon/multiqc_report_data/multiqc_fastqc_fastqc_trimmed.txt", + "multiqc/star_salmon/multiqc_report_data/multiqc_featurecounts_biotype_plot.txt", + "multiqc/star_salmon/multiqc_report_data/multiqc_general_stats.txt", + "multiqc/star_salmon/multiqc_report_data/multiqc_picard_dups.txt", + "multiqc/star_salmon/multiqc_report_data/multiqc_rseqc_bam_stat.txt", + "multiqc/star_salmon/multiqc_report_data/multiqc_rseqc_infer_experiment.txt", + "multiqc/star_salmon/multiqc_report_data/multiqc_rseqc_junction_annotation.txt", + "multiqc/star_salmon/multiqc_report_data/multiqc_rseqc_read_distribution.txt", + "multiqc/star_salmon/multiqc_report_data/multiqc_samtools_flagstat.txt", + "multiqc/star_salmon/multiqc_report_data/multiqc_samtools_idxstats.txt", + "multiqc/star_salmon/multiqc_report_data/multiqc_samtools_stats.txt", + "multiqc/star_salmon/multiqc_report_data/multiqc_software_versions.txt", + "multiqc/star_salmon/multiqc_report_data/multiqc_sources.txt", + "multiqc/star_salmon/multiqc_report_data/multiqc_star.txt", + "multiqc/star_salmon/multiqc_report_data/multiqc_star_salmon_deseq2_clustering.txt", + "multiqc/star_salmon/multiqc_report_data/multiqc_star_salmon_deseq2_pca.txt", + "multiqc/star_salmon/multiqc_report_data/picard_MarkIlluminaAdapters_histogram.txt", + "multiqc/star_salmon/multiqc_report_data/picard_MeanQualityByCycle_histogram.txt", + "multiqc/star_salmon/multiqc_report_data/picard_MeanQualityByCycle_histogram_1.txt", + "multiqc/star_salmon/multiqc_report_data/picard_QualityScoreDistribution_histogram.txt", + "multiqc/star_salmon/multiqc_report_data/picard_deduplication.txt", + "multiqc/star_salmon/multiqc_report_data/qualimap_gene_coverage_profile_Counts.txt", + "multiqc/star_salmon/multiqc_report_data/qualimap_gene_coverage_profile_Normalised.txt", + "multiqc/star_salmon/multiqc_report_data/qualimap_genomic_origin.txt", + "multiqc/star_salmon/multiqc_report_data/qualimap_rnaseq_cov_hist.txt", + "multiqc/star_salmon/multiqc_report_data/qualimap_rnaseq_genome_results.txt", + "multiqc/star_salmon/multiqc_report_data/rseqc_bam_stat.txt", + "multiqc/star_salmon/multiqc_report_data/rseqc_infer_experiment_plot.txt", + "multiqc/star_salmon/multiqc_report_data/rseqc_inner_distance.txt", + "multiqc/star_salmon/multiqc_report_data/rseqc_inner_distance_plot_Counts.txt", + "multiqc/star_salmon/multiqc_report_data/rseqc_inner_distance_plot_Percentages.txt", + "multiqc/star_salmon/multiqc_report_data/rseqc_junction_annotation_junctions_plot_Events.txt", + "multiqc/star_salmon/multiqc_report_data/rseqc_junction_annotation_junctions_plot_Junctions.txt", + "multiqc/star_salmon/multiqc_report_data/rseqc_junction_saturation_all.txt", + "multiqc/star_salmon/multiqc_report_data/rseqc_junction_saturation_plot_All_Junctions.txt", + "multiqc/star_salmon/multiqc_report_data/rseqc_junction_saturation_plot_Known_Junctions.txt", + "multiqc/star_salmon/multiqc_report_data/rseqc_junction_saturation_plot_Novel_Junctions.txt", + "multiqc/star_salmon/multiqc_report_data/rseqc_read_distribution_plot.txt", + "multiqc/star_salmon/multiqc_report_data/rseqc_read_dups.txt", + "multiqc/star_salmon/multiqc_report_data/rseqc_read_dups_plot.txt", + "multiqc/star_salmon/multiqc_report_data/samtools-flagstat-pct-table.txt", + "multiqc/star_salmon/multiqc_report_data/samtools-flagstat-table.txt", + "multiqc/star_salmon/multiqc_report_data/samtools-idxstats-mapped-reads-plot_Normalised_Counts.txt", + "multiqc/star_salmon/multiqc_report_data/samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts.txt", + "multiqc/star_salmon/multiqc_report_data/samtools-idxstats-mapped-reads-plot_Raw_Counts.txt", + "multiqc/star_salmon/multiqc_report_data/samtools-stats-dp.txt", + "multiqc/star_salmon/multiqc_report_data/samtools_alignment_plot.txt", + "multiqc/star_salmon/multiqc_report_data/star_alignment_plot.txt", + "multiqc/star_salmon/multiqc_report_data/star_summary_table.txt", + "multiqc/star_salmon/multiqc_report_plots", + "multiqc/star_salmon/multiqc_report_plots/pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/cutadapt_filtered_reads_plot-cnt.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/cutadapt_filtered_reads_plot-pct.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/cutadapt_trimmed_sequences_plot_3_Counts.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/cutadapt_trimmed_sequences_plot_3_Obs_Exp.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/dupradar.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fail_strand_check_table.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_raw-status-check-heatmap.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_raw_adapter_content_plot.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_raw_overrepresented_sequences_plot.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_raw_per_base_n_content_plot.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_raw_per_base_sequence_quality_plot.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_raw_per_sequence_gc_content_plot_Counts.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_raw_per_sequence_gc_content_plot_Percentages.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_raw_per_sequence_quality_scores_plot.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_raw_sequence_counts_plot-cnt.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_raw_sequence_counts_plot-pct.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_raw_sequence_duplication_levels_plot.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_raw_top_overrepresented_sequences_table.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_sequence_length_distribution_plot.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_trimmed-status-check-heatmap.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_trimmed_overrepresented_sequences_plot.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_trimmed_per_base_n_content_plot.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_trimmed_per_base_sequence_quality_plot.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_trimmed_per_sequence_gc_content_plot_Counts.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_trimmed_per_sequence_gc_content_plot_Percentages.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_trimmed_per_sequence_quality_scores_plot.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_trimmed_sequence_counts_plot-cnt.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_trimmed_sequence_counts_plot-pct.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_trimmed_sequence_duplication_levels_plot.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/fastqc_trimmed_top_overrepresented_sequences_table.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/featurecounts_biotype_plot-cnt.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/featurecounts_biotype_plot-pct.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/picard_deduplication-cnt.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/picard_deduplication-pct.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/qualimap_gene_coverage_profile_Counts.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/qualimap_gene_coverage_profile_Normalised.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/qualimap_genomic_origin-cnt.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/qualimap_genomic_origin-pct.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/rseqc_bam_stat.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/rseqc_infer_experiment_plot.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/rseqc_inner_distance_plot_Counts.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/rseqc_inner_distance_plot_Percentages.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/rseqc_junction_annotation_junctions_plot_Events-cnt.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/rseqc_junction_annotation_junctions_plot_Events-pct.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/rseqc_junction_annotation_junctions_plot_Junctions-cnt.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/rseqc_junction_annotation_junctions_plot_Junctions-pct.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/rseqc_junction_saturation_plot_All_Junctions.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/rseqc_junction_saturation_plot_Known_Junctions.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/rseqc_junction_saturation_plot_Novel_Junctions.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/rseqc_read_distribution_plot-cnt.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/rseqc_read_distribution_plot-pct.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/rseqc_read_dups_plot.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/samtools-flagstat-pct-table.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/samtools-flagstat-table.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/samtools-idxstats-mapped-reads-plot_Normalised_Counts-cnt.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/samtools-idxstats-mapped-reads-plot_Normalised_Counts-log.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts-cnt.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts-log.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/samtools-idxstats-mapped-reads-plot_Raw_Counts-cnt.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/samtools-idxstats-mapped-reads-plot_Raw_Counts-log.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/samtools-stats-dp.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/samtools_alignment_plot-cnt.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/samtools_alignment_plot-pct.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/star_alignment_plot-cnt.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/star_alignment_plot-pct.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/star_salmon_deseq2_clustering.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/star_salmon_deseq2_pca.pdf", + "multiqc/star_salmon/multiqc_report_plots/pdf/star_summary_table.pdf", + "multiqc/star_salmon/multiqc_report_plots/png", + "multiqc/star_salmon/multiqc_report_plots/png/cutadapt_filtered_reads_plot-cnt.png", + "multiqc/star_salmon/multiqc_report_plots/png/cutadapt_filtered_reads_plot-pct.png", + "multiqc/star_salmon/multiqc_report_plots/png/cutadapt_trimmed_sequences_plot_3_Counts.png", + "multiqc/star_salmon/multiqc_report_plots/png/cutadapt_trimmed_sequences_plot_3_Obs_Exp.png", + "multiqc/star_salmon/multiqc_report_plots/png/dupradar.png", + "multiqc/star_salmon/multiqc_report_plots/png/fail_strand_check_table.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_raw-status-check-heatmap.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_raw_adapter_content_plot.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_raw_overrepresented_sequences_plot.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_raw_per_base_n_content_plot.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_raw_per_base_sequence_quality_plot.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_raw_per_sequence_gc_content_plot_Counts.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_raw_per_sequence_gc_content_plot_Percentages.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_raw_per_sequence_quality_scores_plot.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_raw_sequence_counts_plot-cnt.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_raw_sequence_counts_plot-pct.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_raw_sequence_duplication_levels_plot.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_raw_top_overrepresented_sequences_table.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_sequence_length_distribution_plot.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_trimmed-status-check-heatmap.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_trimmed_overrepresented_sequences_plot.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_trimmed_per_base_n_content_plot.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_trimmed_per_base_sequence_quality_plot.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_trimmed_per_sequence_gc_content_plot_Counts.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_trimmed_per_sequence_gc_content_plot_Percentages.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_trimmed_per_sequence_quality_scores_plot.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_trimmed_sequence_counts_plot-cnt.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_trimmed_sequence_counts_plot-pct.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_trimmed_sequence_duplication_levels_plot.png", + "multiqc/star_salmon/multiqc_report_plots/png/fastqc_trimmed_top_overrepresented_sequences_table.png", + "multiqc/star_salmon/multiqc_report_plots/png/featurecounts_biotype_plot-cnt.png", + "multiqc/star_salmon/multiqc_report_plots/png/featurecounts_biotype_plot-pct.png", + "multiqc/star_salmon/multiqc_report_plots/png/picard_deduplication-cnt.png", + "multiqc/star_salmon/multiqc_report_plots/png/picard_deduplication-pct.png", + "multiqc/star_salmon/multiqc_report_plots/png/qualimap_gene_coverage_profile_Counts.png", + "multiqc/star_salmon/multiqc_report_plots/png/qualimap_gene_coverage_profile_Normalised.png", + "multiqc/star_salmon/multiqc_report_plots/png/qualimap_genomic_origin-cnt.png", + "multiqc/star_salmon/multiqc_report_plots/png/qualimap_genomic_origin-pct.png", + "multiqc/star_salmon/multiqc_report_plots/png/rseqc_bam_stat.png", + "multiqc/star_salmon/multiqc_report_plots/png/rseqc_infer_experiment_plot.png", + "multiqc/star_salmon/multiqc_report_plots/png/rseqc_inner_distance_plot_Counts.png", + "multiqc/star_salmon/multiqc_report_plots/png/rseqc_inner_distance_plot_Percentages.png", + "multiqc/star_salmon/multiqc_report_plots/png/rseqc_junction_annotation_junctions_plot_Events-cnt.png", + "multiqc/star_salmon/multiqc_report_plots/png/rseqc_junction_annotation_junctions_plot_Events-pct.png", + "multiqc/star_salmon/multiqc_report_plots/png/rseqc_junction_annotation_junctions_plot_Junctions-cnt.png", + "multiqc/star_salmon/multiqc_report_plots/png/rseqc_junction_annotation_junctions_plot_Junctions-pct.png", + "multiqc/star_salmon/multiqc_report_plots/png/rseqc_junction_saturation_plot_All_Junctions.png", + "multiqc/star_salmon/multiqc_report_plots/png/rseqc_junction_saturation_plot_Known_Junctions.png", + "multiqc/star_salmon/multiqc_report_plots/png/rseqc_junction_saturation_plot_Novel_Junctions.png", + "multiqc/star_salmon/multiqc_report_plots/png/rseqc_read_distribution_plot-cnt.png", + "multiqc/star_salmon/multiqc_report_plots/png/rseqc_read_distribution_plot-pct.png", + "multiqc/star_salmon/multiqc_report_plots/png/rseqc_read_dups_plot.png", + "multiqc/star_salmon/multiqc_report_plots/png/samtools-flagstat-pct-table.png", + "multiqc/star_salmon/multiqc_report_plots/png/samtools-flagstat-table.png", + "multiqc/star_salmon/multiqc_report_plots/png/samtools-idxstats-mapped-reads-plot_Normalised_Counts-cnt.png", + "multiqc/star_salmon/multiqc_report_plots/png/samtools-idxstats-mapped-reads-plot_Normalised_Counts-log.png", + "multiqc/star_salmon/multiqc_report_plots/png/samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts-cnt.png", + "multiqc/star_salmon/multiqc_report_plots/png/samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts-log.png", + "multiqc/star_salmon/multiqc_report_plots/png/samtools-idxstats-mapped-reads-plot_Raw_Counts-cnt.png", + "multiqc/star_salmon/multiqc_report_plots/png/samtools-idxstats-mapped-reads-plot_Raw_Counts-log.png", + "multiqc/star_salmon/multiqc_report_plots/png/samtools-stats-dp.png", + "multiqc/star_salmon/multiqc_report_plots/png/samtools_alignment_plot-cnt.png", + "multiqc/star_salmon/multiqc_report_plots/png/samtools_alignment_plot-pct.png", + "multiqc/star_salmon/multiqc_report_plots/png/star_alignment_plot-cnt.png", + "multiqc/star_salmon/multiqc_report_plots/png/star_alignment_plot-pct.png", + "multiqc/star_salmon/multiqc_report_plots/png/star_salmon_deseq2_clustering.png", + "multiqc/star_salmon/multiqc_report_plots/png/star_salmon_deseq2_pca.png", + "multiqc/star_salmon/multiqc_report_plots/png/star_summary_table.png", + "multiqc/star_salmon/multiqc_report_plots/svg", + "multiqc/star_salmon/multiqc_report_plots/svg/cutadapt_filtered_reads_plot-cnt.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/cutadapt_filtered_reads_plot-pct.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/cutadapt_trimmed_sequences_plot_3_Counts.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/cutadapt_trimmed_sequences_plot_3_Obs_Exp.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/dupradar.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fail_strand_check_table.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_raw-status-check-heatmap.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_raw_adapter_content_plot.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_raw_overrepresented_sequences_plot.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_raw_per_base_n_content_plot.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_raw_per_base_sequence_quality_plot.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_raw_per_sequence_gc_content_plot_Counts.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_raw_per_sequence_gc_content_plot_Percentages.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_raw_per_sequence_quality_scores_plot.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_raw_sequence_counts_plot-cnt.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_raw_sequence_counts_plot-pct.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_raw_sequence_duplication_levels_plot.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_raw_top_overrepresented_sequences_table.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_sequence_length_distribution_plot.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_trimmed-status-check-heatmap.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_trimmed_overrepresented_sequences_plot.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_trimmed_per_base_n_content_plot.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_trimmed_per_base_sequence_quality_plot.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_trimmed_per_sequence_gc_content_plot_Counts.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_trimmed_per_sequence_gc_content_plot_Percentages.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_trimmed_per_sequence_quality_scores_plot.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_trimmed_sequence_counts_plot-cnt.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_trimmed_sequence_counts_plot-pct.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_trimmed_sequence_duplication_levels_plot.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/fastqc_trimmed_top_overrepresented_sequences_table.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/featurecounts_biotype_plot-cnt.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/featurecounts_biotype_plot-pct.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/picard_deduplication-cnt.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/picard_deduplication-pct.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/qualimap_gene_coverage_profile_Counts.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/qualimap_gene_coverage_profile_Normalised.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/qualimap_genomic_origin-cnt.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/qualimap_genomic_origin-pct.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/rseqc_bam_stat.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/rseqc_infer_experiment_plot.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/rseqc_inner_distance_plot_Counts.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/rseqc_inner_distance_plot_Percentages.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/rseqc_junction_annotation_junctions_plot_Events-cnt.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/rseqc_junction_annotation_junctions_plot_Events-pct.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/rseqc_junction_annotation_junctions_plot_Junctions-cnt.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/rseqc_junction_annotation_junctions_plot_Junctions-pct.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/rseqc_junction_saturation_plot_All_Junctions.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/rseqc_junction_saturation_plot_Known_Junctions.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/rseqc_junction_saturation_plot_Novel_Junctions.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/rseqc_read_distribution_plot-cnt.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/rseqc_read_distribution_plot-pct.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/rseqc_read_dups_plot.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/samtools-flagstat-pct-table.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/samtools-flagstat-table.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/samtools-idxstats-mapped-reads-plot_Normalised_Counts-cnt.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/samtools-idxstats-mapped-reads-plot_Normalised_Counts-log.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts-cnt.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts-log.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/samtools-idxstats-mapped-reads-plot_Raw_Counts-cnt.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/samtools-idxstats-mapped-reads-plot_Raw_Counts-log.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/samtools-stats-dp.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/samtools_alignment_plot-cnt.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/samtools_alignment_plot-pct.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/star_alignment_plot-cnt.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/star_alignment_plot-pct.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/star_salmon_deseq2_clustering.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/star_salmon_deseq2_pca.svg", + "multiqc/star_salmon/multiqc_report_plots/svg/star_summary_table.svg", + "pipeline_info", + "pipeline_info/nf_core_rnaseq_software_mqc_versions.yml", + "star_salmon", + "star_salmon/RAP1_IAA_30M_REP1", + "star_salmon/RAP1_IAA_30M_REP1.markdup.sorted.bam", + "star_salmon/RAP1_IAA_30M_REP1.markdup.sorted.bam.bai", + "star_salmon/RAP1_IAA_30M_REP1/aux_info", + "star_salmon/RAP1_IAA_30M_REP1/aux_info/ambig_info.tsv", + "star_salmon/RAP1_IAA_30M_REP1/aux_info/expected_bias.gz", + "star_salmon/RAP1_IAA_30M_REP1/aux_info/fld.gz", + "star_salmon/RAP1_IAA_30M_REP1/aux_info/meta_info.json", + "star_salmon/RAP1_IAA_30M_REP1/aux_info/observed_bias.gz", + "star_salmon/RAP1_IAA_30M_REP1/aux_info/observed_bias_3p.gz", + "star_salmon/RAP1_IAA_30M_REP1/cmd_info.json", + "star_salmon/RAP1_IAA_30M_REP1/libParams", + "star_salmon/RAP1_IAA_30M_REP1/libParams/flenDist.txt", + "star_salmon/RAP1_IAA_30M_REP1/logs", + "star_salmon/RAP1_IAA_30M_REP1/logs/salmon_quant.log", + "star_salmon/RAP1_IAA_30M_REP1/quant.genes.sf", + "star_salmon/RAP1_IAA_30M_REP1/quant.sf", + "star_salmon/RAP1_UNINDUCED_REP1", + "star_salmon/RAP1_UNINDUCED_REP1.markdup.sorted.bam", + "star_salmon/RAP1_UNINDUCED_REP1.markdup.sorted.bam.bai", + "star_salmon/RAP1_UNINDUCED_REP1/aux_info", + "star_salmon/RAP1_UNINDUCED_REP1/aux_info/ambig_info.tsv", + "star_salmon/RAP1_UNINDUCED_REP1/aux_info/expected_bias.gz", + "star_salmon/RAP1_UNINDUCED_REP1/aux_info/fld.gz", + "star_salmon/RAP1_UNINDUCED_REP1/aux_info/meta_info.json", + "star_salmon/RAP1_UNINDUCED_REP1/aux_info/observed_bias.gz", + "star_salmon/RAP1_UNINDUCED_REP1/aux_info/observed_bias_3p.gz", + "star_salmon/RAP1_UNINDUCED_REP1/cmd_info.json", + "star_salmon/RAP1_UNINDUCED_REP1/libParams", + "star_salmon/RAP1_UNINDUCED_REP1/libParams/flenDist.txt", + "star_salmon/RAP1_UNINDUCED_REP1/logs", + "star_salmon/RAP1_UNINDUCED_REP1/logs/salmon_quant.log", + "star_salmon/RAP1_UNINDUCED_REP1/quant.genes.sf", + "star_salmon/RAP1_UNINDUCED_REP1/quant.sf", + "star_salmon/RAP1_UNINDUCED_REP2", + "star_salmon/RAP1_UNINDUCED_REP2.markdup.sorted.bam", + "star_salmon/RAP1_UNINDUCED_REP2.markdup.sorted.bam.bai", + "star_salmon/RAP1_UNINDUCED_REP2/aux_info", + "star_salmon/RAP1_UNINDUCED_REP2/aux_info/ambig_info.tsv", + "star_salmon/RAP1_UNINDUCED_REP2/aux_info/expected_bias.gz", + "star_salmon/RAP1_UNINDUCED_REP2/aux_info/fld.gz", + "star_salmon/RAP1_UNINDUCED_REP2/aux_info/meta_info.json", + "star_salmon/RAP1_UNINDUCED_REP2/aux_info/observed_bias.gz", + "star_salmon/RAP1_UNINDUCED_REP2/aux_info/observed_bias_3p.gz", + "star_salmon/RAP1_UNINDUCED_REP2/cmd_info.json", + "star_salmon/RAP1_UNINDUCED_REP2/libParams", + "star_salmon/RAP1_UNINDUCED_REP2/libParams/flenDist.txt", + "star_salmon/RAP1_UNINDUCED_REP2/logs", + "star_salmon/RAP1_UNINDUCED_REP2/logs/salmon_quant.log", + "star_salmon/RAP1_UNINDUCED_REP2/quant.genes.sf", + "star_salmon/RAP1_UNINDUCED_REP2/quant.sf", + "star_salmon/WT_REP1", + "star_salmon/WT_REP1.markdup.sorted.bam", + "star_salmon/WT_REP1.markdup.sorted.bam.bai", + "star_salmon/WT_REP1/aux_info", + "star_salmon/WT_REP1/aux_info/ambig_info.tsv", + "star_salmon/WT_REP1/aux_info/expected_bias.gz", + "star_salmon/WT_REP1/aux_info/fld.gz", + "star_salmon/WT_REP1/aux_info/meta_info.json", + "star_salmon/WT_REP1/aux_info/observed_bias.gz", + "star_salmon/WT_REP1/aux_info/observed_bias_3p.gz", + "star_salmon/WT_REP1/cmd_info.json", + "star_salmon/WT_REP1/libParams", + "star_salmon/WT_REP1/libParams/flenDist.txt", + "star_salmon/WT_REP1/logs", + "star_salmon/WT_REP1/logs/salmon_quant.log", + "star_salmon/WT_REP1/quant.genes.sf", + "star_salmon/WT_REP1/quant.sf", + "star_salmon/WT_REP1b", + "star_salmon/WT_REP1b.markdup.sorted.bam", + "star_salmon/WT_REP1b.markdup.sorted.bam.bai", + "star_salmon/WT_REP1b/aux_info", + "star_salmon/WT_REP1b/aux_info/ambig_info.tsv", + "star_salmon/WT_REP1b/aux_info/expected_bias.gz", + "star_salmon/WT_REP1b/aux_info/fld.gz", + "star_salmon/WT_REP1b/aux_info/meta_info.json", + "star_salmon/WT_REP1b/aux_info/observed_bias.gz", + "star_salmon/WT_REP1b/aux_info/observed_bias_3p.gz", + "star_salmon/WT_REP1b/cmd_info.json", + "star_salmon/WT_REP1b/libParams", + "star_salmon/WT_REP1b/libParams/flenDist.txt", + "star_salmon/WT_REP1b/logs", + "star_salmon/WT_REP1b/logs/salmon_quant.log", + "star_salmon/WT_REP1b/quant.genes.sf", + "star_salmon/WT_REP1b/quant.sf", + "star_salmon/WT_REP2", + "star_salmon/WT_REP2.markdup.sorted.bam", + "star_salmon/WT_REP2.markdup.sorted.bam.bai", + "star_salmon/WT_REP2/aux_info", + "star_salmon/WT_REP2/aux_info/ambig_info.tsv", + "star_salmon/WT_REP2/aux_info/expected_bias.gz", + "star_salmon/WT_REP2/aux_info/fld.gz", + "star_salmon/WT_REP2/aux_info/meta_info.json", + "star_salmon/WT_REP2/aux_info/observed_bias.gz", + "star_salmon/WT_REP2/aux_info/observed_bias_3p.gz", + "star_salmon/WT_REP2/cmd_info.json", + "star_salmon/WT_REP2/libParams", + "star_salmon/WT_REP2/libParams/flenDist.txt", + "star_salmon/WT_REP2/logs", + "star_salmon/WT_REP2/logs/salmon_quant.log", + "star_salmon/WT_REP2/quant.genes.sf", + "star_salmon/WT_REP2/quant.sf", + "star_salmon/bigwig", + "star_salmon/bigwig/RAP1_IAA_30M_REP1.forward.bigWig", + "star_salmon/bigwig/RAP1_IAA_30M_REP1.reverse.bigWig", + "star_salmon/bigwig/RAP1_UNINDUCED_REP1.forward.bigWig", + "star_salmon/bigwig/RAP1_UNINDUCED_REP1.reverse.bigWig", + "star_salmon/bigwig/RAP1_UNINDUCED_REP2.forward.bigWig", + "star_salmon/bigwig/RAP1_UNINDUCED_REP2.reverse.bigWig", + "star_salmon/bigwig/WT_REP1.forward.bigWig", + "star_salmon/bigwig/WT_REP1.reverse.bigWig", + "star_salmon/bigwig/WT_REP1b.forward.bigWig", + "star_salmon/bigwig/WT_REP1b.reverse.bigWig", + "star_salmon/bigwig/WT_REP2.forward.bigWig", + "star_salmon/bigwig/WT_REP2.reverse.bigWig", + "star_salmon/deseq2_qc", + "star_salmon/deseq2_qc/R_sessionInfo.log", + "star_salmon/deseq2_qc/deseq2.dds.RData", + "star_salmon/deseq2_qc/deseq2.pca.vals.txt", + "star_salmon/deseq2_qc/deseq2.plots.pdf", + "star_salmon/deseq2_qc/deseq2.sample.dists.txt", + "star_salmon/deseq2_qc/size_factors", + "star_salmon/deseq2_qc/size_factors/RAP1_IAA_30M_REP1.txt", + "star_salmon/deseq2_qc/size_factors/RAP1_UNINDUCED_REP1.txt", + "star_salmon/deseq2_qc/size_factors/RAP1_UNINDUCED_REP2.txt", + "star_salmon/deseq2_qc/size_factors/WT_REP1.txt", + "star_salmon/deseq2_qc/size_factors/WT_REP1b.txt", + "star_salmon/deseq2_qc/size_factors/WT_REP2.txt", + "star_salmon/deseq2_qc/size_factors/deseq2.size_factors.RData", + "star_salmon/dupradar", + "star_salmon/dupradar/box_plot", + "star_salmon/dupradar/box_plot/RAP1_IAA_30M_REP1_duprateExpBoxplot.pdf", + "star_salmon/dupradar/box_plot/RAP1_UNINDUCED_REP1_duprateExpBoxplot.pdf", + "star_salmon/dupradar/box_plot/RAP1_UNINDUCED_REP2_duprateExpBoxplot.pdf", + "star_salmon/dupradar/box_plot/WT_REP1_duprateExpBoxplot.pdf", + "star_salmon/dupradar/box_plot/WT_REP1b_duprateExpBoxplot.pdf", + "star_salmon/dupradar/box_plot/WT_REP2_duprateExpBoxplot.pdf", + "star_salmon/dupradar/gene_data", + "star_salmon/dupradar/gene_data/RAP1_IAA_30M_REP1_dupMatrix.txt", + "star_salmon/dupradar/gene_data/RAP1_UNINDUCED_REP1_dupMatrix.txt", + "star_salmon/dupradar/gene_data/RAP1_UNINDUCED_REP2_dupMatrix.txt", + "star_salmon/dupradar/gene_data/WT_REP1_dupMatrix.txt", + "star_salmon/dupradar/gene_data/WT_REP1b_dupMatrix.txt", + "star_salmon/dupradar/gene_data/WT_REP2_dupMatrix.txt", + "star_salmon/dupradar/histogram", + "star_salmon/dupradar/histogram/RAP1_IAA_30M_REP1_expressionHist.pdf", + "star_salmon/dupradar/histogram/RAP1_UNINDUCED_REP1_expressionHist.pdf", + "star_salmon/dupradar/histogram/RAP1_UNINDUCED_REP2_expressionHist.pdf", + "star_salmon/dupradar/histogram/WT_REP1_expressionHist.pdf", + "star_salmon/dupradar/histogram/WT_REP1b_expressionHist.pdf", + "star_salmon/dupradar/histogram/WT_REP2_expressionHist.pdf", + "star_salmon/dupradar/intercepts_slope", + "star_salmon/dupradar/intercepts_slope/RAP1_IAA_30M_REP1_intercept_slope.txt", + "star_salmon/dupradar/intercepts_slope/RAP1_UNINDUCED_REP1_intercept_slope.txt", + "star_salmon/dupradar/intercepts_slope/RAP1_UNINDUCED_REP2_intercept_slope.txt", + "star_salmon/dupradar/intercepts_slope/WT_REP1_intercept_slope.txt", + "star_salmon/dupradar/intercepts_slope/WT_REP1b_intercept_slope.txt", + "star_salmon/dupradar/intercepts_slope/WT_REP2_intercept_slope.txt", + "star_salmon/dupradar/scatter_plot", + "star_salmon/dupradar/scatter_plot/RAP1_IAA_30M_REP1_duprateExpDens.pdf", + "star_salmon/dupradar/scatter_plot/RAP1_UNINDUCED_REP1_duprateExpDens.pdf", + "star_salmon/dupradar/scatter_plot/RAP1_UNINDUCED_REP2_duprateExpDens.pdf", + "star_salmon/dupradar/scatter_plot/WT_REP1_duprateExpDens.pdf", + "star_salmon/dupradar/scatter_plot/WT_REP1b_duprateExpDens.pdf", + "star_salmon/dupradar/scatter_plot/WT_REP2_duprateExpDens.pdf", + "star_salmon/featurecounts", + "star_salmon/featurecounts/RAP1_IAA_30M_REP1.biotype_counts_mqc.tsv", + "star_salmon/featurecounts/RAP1_IAA_30M_REP1.biotype_counts_rrna_mqc.tsv", + "star_salmon/featurecounts/RAP1_IAA_30M_REP1.featureCounts.tsv", + "star_salmon/featurecounts/RAP1_IAA_30M_REP1.featureCounts.tsv.summary", + "star_salmon/featurecounts/RAP1_UNINDUCED_REP1.biotype_counts_mqc.tsv", + "star_salmon/featurecounts/RAP1_UNINDUCED_REP1.biotype_counts_rrna_mqc.tsv", + "star_salmon/featurecounts/RAP1_UNINDUCED_REP1.featureCounts.tsv", + "star_salmon/featurecounts/RAP1_UNINDUCED_REP1.featureCounts.tsv.summary", + "star_salmon/featurecounts/RAP1_UNINDUCED_REP2.biotype_counts_mqc.tsv", + "star_salmon/featurecounts/RAP1_UNINDUCED_REP2.biotype_counts_rrna_mqc.tsv", + "star_salmon/featurecounts/RAP1_UNINDUCED_REP2.featureCounts.tsv", + "star_salmon/featurecounts/RAP1_UNINDUCED_REP2.featureCounts.tsv.summary", + "star_salmon/featurecounts/WT_REP1.biotype_counts_mqc.tsv", + "star_salmon/featurecounts/WT_REP1.biotype_counts_rrna_mqc.tsv", + "star_salmon/featurecounts/WT_REP1.featureCounts.tsv", + "star_salmon/featurecounts/WT_REP1.featureCounts.tsv.summary", + "star_salmon/featurecounts/WT_REP1b.biotype_counts_mqc.tsv", + "star_salmon/featurecounts/WT_REP1b.biotype_counts_rrna_mqc.tsv", + "star_salmon/featurecounts/WT_REP1b.featureCounts.tsv", + "star_salmon/featurecounts/WT_REP1b.featureCounts.tsv.summary", + "star_salmon/featurecounts/WT_REP2.biotype_counts_mqc.tsv", + "star_salmon/featurecounts/WT_REP2.biotype_counts_rrna_mqc.tsv", + "star_salmon/featurecounts/WT_REP2.featureCounts.tsv", + "star_salmon/featurecounts/WT_REP2.featureCounts.tsv.summary", + "star_salmon/log", + "star_salmon/log/RAP1_IAA_30M_REP1.Log.final.out", + "star_salmon/log/RAP1_IAA_30M_REP1.Log.out", + "star_salmon/log/RAP1_IAA_30M_REP1.Log.progress.out", + "star_salmon/log/RAP1_IAA_30M_REP1.SJ.out.tab", + "star_salmon/log/RAP1_UNINDUCED_REP1.Log.final.out", + "star_salmon/log/RAP1_UNINDUCED_REP1.Log.out", + "star_salmon/log/RAP1_UNINDUCED_REP1.Log.progress.out", + "star_salmon/log/RAP1_UNINDUCED_REP1.SJ.out.tab", + "star_salmon/log/RAP1_UNINDUCED_REP2.Log.final.out", + "star_salmon/log/RAP1_UNINDUCED_REP2.Log.out", + "star_salmon/log/RAP1_UNINDUCED_REP2.Log.progress.out", + "star_salmon/log/RAP1_UNINDUCED_REP2.SJ.out.tab", + "star_salmon/log/WT_REP1.Log.final.out", + "star_salmon/log/WT_REP1.Log.out", + "star_salmon/log/WT_REP1.Log.progress.out", + "star_salmon/log/WT_REP1.SJ.out.tab", + "star_salmon/log/WT_REP1b.Log.final.out", + "star_salmon/log/WT_REP1b.Log.out", + "star_salmon/log/WT_REP1b.Log.progress.out", + "star_salmon/log/WT_REP1b.SJ.out.tab", + "star_salmon/log/WT_REP2.Log.final.out", + "star_salmon/log/WT_REP2.Log.out", + "star_salmon/log/WT_REP2.Log.progress.out", + "star_salmon/log/WT_REP2.SJ.out.tab", + "star_salmon/picard_metrics", + "star_salmon/picard_metrics/RAP1_IAA_30M_REP1.markdup.sorted.MarkDuplicates.metrics.txt", + "star_salmon/picard_metrics/RAP1_UNINDUCED_REP1.markdup.sorted.MarkDuplicates.metrics.txt", + "star_salmon/picard_metrics/RAP1_UNINDUCED_REP2.markdup.sorted.MarkDuplicates.metrics.txt", + "star_salmon/picard_metrics/WT_REP1.markdup.sorted.MarkDuplicates.metrics.txt", + "star_salmon/picard_metrics/WT_REP1b.markdup.sorted.MarkDuplicates.metrics.txt", + "star_salmon/picard_metrics/WT_REP2.markdup.sorted.MarkDuplicates.metrics.txt", + "star_salmon/qualimap", + "star_salmon/qualimap/RAP1_IAA_30M_REP1", + "star_salmon/qualimap/RAP1_IAA_30M_REP1/css", + "star_salmon/qualimap/RAP1_IAA_30M_REP1/css/agogo.css", + "star_salmon/qualimap/RAP1_IAA_30M_REP1/css/ajax-loader.gif", + "star_salmon/qualimap/RAP1_IAA_30M_REP1/css/basic.css", + "star_salmon/qualimap/RAP1_IAA_30M_REP1/css/bgfooter.png", + "star_salmon/qualimap/RAP1_IAA_30M_REP1/css/bgtop.png", + "star_salmon/qualimap/RAP1_IAA_30M_REP1/css/comment-bright.png", + "star_salmon/qualimap/RAP1_IAA_30M_REP1/css/comment-close.png", + "star_salmon/qualimap/RAP1_IAA_30M_REP1/css/comment.png", + "star_salmon/qualimap/RAP1_IAA_30M_REP1/css/doctools.js", + "star_salmon/qualimap/RAP1_IAA_30M_REP1/css/down-pressed.png", + "star_salmon/qualimap/RAP1_IAA_30M_REP1/css/down.png", + "star_salmon/qualimap/RAP1_IAA_30M_REP1/css/file.png", + "star_salmon/qualimap/RAP1_IAA_30M_REP1/css/jquery.js", + "star_salmon/qualimap/RAP1_IAA_30M_REP1/css/minus.png", + "star_salmon/qualimap/RAP1_IAA_30M_REP1/css/plus.png", + "star_salmon/qualimap/RAP1_IAA_30M_REP1/css/pygments.css", + "star_salmon/qualimap/RAP1_IAA_30M_REP1/css/qualimap_logo_small.png", + "star_salmon/qualimap/RAP1_IAA_30M_REP1/css/report.css", + "star_salmon/qualimap/RAP1_IAA_30M_REP1/css/searchtools.js", + "star_salmon/qualimap/RAP1_IAA_30M_REP1/css/underscore.js", + "star_salmon/qualimap/RAP1_IAA_30M_REP1/css/up-pressed.png", + "star_salmon/qualimap/RAP1_IAA_30M_REP1/css/up.png", + "star_salmon/qualimap/RAP1_IAA_30M_REP1/css/websupport.js", + "star_salmon/qualimap/RAP1_IAA_30M_REP1/images_qualimapReport", + "star_salmon/qualimap/RAP1_IAA_30M_REP1/images_qualimapReport/Coverage Profile Along Genes (High).png", + "star_salmon/qualimap/RAP1_IAA_30M_REP1/images_qualimapReport/Coverage Profile Along Genes (Low).png", + "star_salmon/qualimap/RAP1_IAA_30M_REP1/images_qualimapReport/Coverage Profile Along Genes (Total).png", + "star_salmon/qualimap/RAP1_IAA_30M_REP1/images_qualimapReport/Junction Analysis.png", + "star_salmon/qualimap/RAP1_IAA_30M_REP1/images_qualimapReport/Reads Genomic Origin.png", + "star_salmon/qualimap/RAP1_IAA_30M_REP1/images_qualimapReport/Transcript coverage histogram.png", + "star_salmon/qualimap/RAP1_IAA_30M_REP1/qualimapReport.html", + "star_salmon/qualimap/RAP1_IAA_30M_REP1/raw_data_qualimapReport", + "star_salmon/qualimap/RAP1_IAA_30M_REP1/raw_data_qualimapReport/coverage_profile_along_genes_(high).txt", + "star_salmon/qualimap/RAP1_IAA_30M_REP1/raw_data_qualimapReport/coverage_profile_along_genes_(low).txt", + "star_salmon/qualimap/RAP1_IAA_30M_REP1/raw_data_qualimapReport/coverage_profile_along_genes_(total).txt", + "star_salmon/qualimap/RAP1_IAA_30M_REP1/rnaseq_qc_results.txt", + "star_salmon/qualimap/RAP1_UNINDUCED_REP1", + "star_salmon/qualimap/RAP1_UNINDUCED_REP1/css", + "star_salmon/qualimap/RAP1_UNINDUCED_REP1/css/agogo.css", + "star_salmon/qualimap/RAP1_UNINDUCED_REP1/css/ajax-loader.gif", + "star_salmon/qualimap/RAP1_UNINDUCED_REP1/css/basic.css", + "star_salmon/qualimap/RAP1_UNINDUCED_REP1/css/bgfooter.png", + "star_salmon/qualimap/RAP1_UNINDUCED_REP1/css/bgtop.png", + "star_salmon/qualimap/RAP1_UNINDUCED_REP1/css/comment-bright.png", + "star_salmon/qualimap/RAP1_UNINDUCED_REP1/css/comment-close.png", + "star_salmon/qualimap/RAP1_UNINDUCED_REP1/css/comment.png", + "star_salmon/qualimap/RAP1_UNINDUCED_REP1/css/doctools.js", + "star_salmon/qualimap/RAP1_UNINDUCED_REP1/css/down-pressed.png", + "star_salmon/qualimap/RAP1_UNINDUCED_REP1/css/down.png", + "star_salmon/qualimap/RAP1_UNINDUCED_REP1/css/file.png", + "star_salmon/qualimap/RAP1_UNINDUCED_REP1/css/jquery.js", + "star_salmon/qualimap/RAP1_UNINDUCED_REP1/css/minus.png", + "star_salmon/qualimap/RAP1_UNINDUCED_REP1/css/plus.png", + "star_salmon/qualimap/RAP1_UNINDUCED_REP1/css/pygments.css", + "star_salmon/qualimap/RAP1_UNINDUCED_REP1/css/qualimap_logo_small.png", + "star_salmon/qualimap/RAP1_UNINDUCED_REP1/css/report.css", + "star_salmon/qualimap/RAP1_UNINDUCED_REP1/css/searchtools.js", + "star_salmon/qualimap/RAP1_UNINDUCED_REP1/css/underscore.js", + "star_salmon/qualimap/RAP1_UNINDUCED_REP1/css/up-pressed.png", + "star_salmon/qualimap/RAP1_UNINDUCED_REP1/css/up.png", + "star_salmon/qualimap/RAP1_UNINDUCED_REP1/css/websupport.js", + "star_salmon/qualimap/RAP1_UNINDUCED_REP1/images_qualimapReport", + "star_salmon/qualimap/RAP1_UNINDUCED_REP1/images_qualimapReport/Coverage Profile Along Genes (High).png", + "star_salmon/qualimap/RAP1_UNINDUCED_REP1/images_qualimapReport/Coverage Profile Along Genes (Low).png", + "star_salmon/qualimap/RAP1_UNINDUCED_REP1/images_qualimapReport/Coverage Profile Along Genes (Total).png", + "star_salmon/qualimap/RAP1_UNINDUCED_REP1/images_qualimapReport/Junction Analysis.png", + "star_salmon/qualimap/RAP1_UNINDUCED_REP1/images_qualimapReport/Reads Genomic Origin.png", + "star_salmon/qualimap/RAP1_UNINDUCED_REP1/images_qualimapReport/Transcript coverage histogram.png", + "star_salmon/qualimap/RAP1_UNINDUCED_REP1/qualimapReport.html", + "star_salmon/qualimap/RAP1_UNINDUCED_REP1/raw_data_qualimapReport", + "star_salmon/qualimap/RAP1_UNINDUCED_REP1/raw_data_qualimapReport/coverage_profile_along_genes_(high).txt", + "star_salmon/qualimap/RAP1_UNINDUCED_REP1/raw_data_qualimapReport/coverage_profile_along_genes_(low).txt", + "star_salmon/qualimap/RAP1_UNINDUCED_REP1/raw_data_qualimapReport/coverage_profile_along_genes_(total).txt", + "star_salmon/qualimap/RAP1_UNINDUCED_REP1/rnaseq_qc_results.txt", + "star_salmon/qualimap/RAP1_UNINDUCED_REP2", + "star_salmon/qualimap/RAP1_UNINDUCED_REP2/css", + "star_salmon/qualimap/RAP1_UNINDUCED_REP2/css/agogo.css", + "star_salmon/qualimap/RAP1_UNINDUCED_REP2/css/ajax-loader.gif", + "star_salmon/qualimap/RAP1_UNINDUCED_REP2/css/basic.css", + "star_salmon/qualimap/RAP1_UNINDUCED_REP2/css/bgfooter.png", + "star_salmon/qualimap/RAP1_UNINDUCED_REP2/css/bgtop.png", + "star_salmon/qualimap/RAP1_UNINDUCED_REP2/css/comment-bright.png", + "star_salmon/qualimap/RAP1_UNINDUCED_REP2/css/comment-close.png", + "star_salmon/qualimap/RAP1_UNINDUCED_REP2/css/comment.png", + "star_salmon/qualimap/RAP1_UNINDUCED_REP2/css/doctools.js", + "star_salmon/qualimap/RAP1_UNINDUCED_REP2/css/down-pressed.png", + "star_salmon/qualimap/RAP1_UNINDUCED_REP2/css/down.png", + "star_salmon/qualimap/RAP1_UNINDUCED_REP2/css/file.png", + "star_salmon/qualimap/RAP1_UNINDUCED_REP2/css/jquery.js", + "star_salmon/qualimap/RAP1_UNINDUCED_REP2/css/minus.png", + "star_salmon/qualimap/RAP1_UNINDUCED_REP2/css/plus.png", + "star_salmon/qualimap/RAP1_UNINDUCED_REP2/css/pygments.css", + "star_salmon/qualimap/RAP1_UNINDUCED_REP2/css/qualimap_logo_small.png", + "star_salmon/qualimap/RAP1_UNINDUCED_REP2/css/report.css", + "star_salmon/qualimap/RAP1_UNINDUCED_REP2/css/searchtools.js", + "star_salmon/qualimap/RAP1_UNINDUCED_REP2/css/underscore.js", + "star_salmon/qualimap/RAP1_UNINDUCED_REP2/css/up-pressed.png", + "star_salmon/qualimap/RAP1_UNINDUCED_REP2/css/up.png", + "star_salmon/qualimap/RAP1_UNINDUCED_REP2/css/websupport.js", + "star_salmon/qualimap/RAP1_UNINDUCED_REP2/images_qualimapReport", + "star_salmon/qualimap/RAP1_UNINDUCED_REP2/images_qualimapReport/Coverage Profile Along Genes (High).png", + "star_salmon/qualimap/RAP1_UNINDUCED_REP2/images_qualimapReport/Coverage Profile Along Genes (Low).png", + "star_salmon/qualimap/RAP1_UNINDUCED_REP2/images_qualimapReport/Coverage Profile Along Genes (Total).png", + "star_salmon/qualimap/RAP1_UNINDUCED_REP2/images_qualimapReport/Junction Analysis.png", + "star_salmon/qualimap/RAP1_UNINDUCED_REP2/images_qualimapReport/Reads Genomic Origin.png", + "star_salmon/qualimap/RAP1_UNINDUCED_REP2/images_qualimapReport/Transcript coverage histogram.png", + "star_salmon/qualimap/RAP1_UNINDUCED_REP2/qualimapReport.html", + "star_salmon/qualimap/RAP1_UNINDUCED_REP2/raw_data_qualimapReport", + "star_salmon/qualimap/RAP1_UNINDUCED_REP2/raw_data_qualimapReport/coverage_profile_along_genes_(high).txt", + "star_salmon/qualimap/RAP1_UNINDUCED_REP2/raw_data_qualimapReport/coverage_profile_along_genes_(low).txt", + "star_salmon/qualimap/RAP1_UNINDUCED_REP2/raw_data_qualimapReport/coverage_profile_along_genes_(total).txt", + "star_salmon/qualimap/RAP1_UNINDUCED_REP2/rnaseq_qc_results.txt", + "star_salmon/qualimap/WT_REP1", + "star_salmon/qualimap/WT_REP1/css", + "star_salmon/qualimap/WT_REP1/css/agogo.css", + "star_salmon/qualimap/WT_REP1/css/ajax-loader.gif", + "star_salmon/qualimap/WT_REP1/css/basic.css", + "star_salmon/qualimap/WT_REP1/css/bgfooter.png", + "star_salmon/qualimap/WT_REP1/css/bgtop.png", + "star_salmon/qualimap/WT_REP1/css/comment-bright.png", + "star_salmon/qualimap/WT_REP1/css/comment-close.png", + "star_salmon/qualimap/WT_REP1/css/comment.png", + "star_salmon/qualimap/WT_REP1/css/doctools.js", + "star_salmon/qualimap/WT_REP1/css/down-pressed.png", + "star_salmon/qualimap/WT_REP1/css/down.png", + "star_salmon/qualimap/WT_REP1/css/file.png", + "star_salmon/qualimap/WT_REP1/css/jquery.js", + "star_salmon/qualimap/WT_REP1/css/minus.png", + "star_salmon/qualimap/WT_REP1/css/plus.png", + "star_salmon/qualimap/WT_REP1/css/pygments.css", + "star_salmon/qualimap/WT_REP1/css/qualimap_logo_small.png", + "star_salmon/qualimap/WT_REP1/css/report.css", + "star_salmon/qualimap/WT_REP1/css/searchtools.js", + "star_salmon/qualimap/WT_REP1/css/underscore.js", + "star_salmon/qualimap/WT_REP1/css/up-pressed.png", + "star_salmon/qualimap/WT_REP1/css/up.png", + "star_salmon/qualimap/WT_REP1/css/websupport.js", + "star_salmon/qualimap/WT_REP1/images_qualimapReport", + "star_salmon/qualimap/WT_REP1/images_qualimapReport/Coverage Profile Along Genes (High).png", + "star_salmon/qualimap/WT_REP1/images_qualimapReport/Coverage Profile Along Genes (Low).png", + "star_salmon/qualimap/WT_REP1/images_qualimapReport/Coverage Profile Along Genes (Total).png", + "star_salmon/qualimap/WT_REP1/images_qualimapReport/Junction Analysis.png", + "star_salmon/qualimap/WT_REP1/images_qualimapReport/Reads Genomic Origin.png", + "star_salmon/qualimap/WT_REP1/images_qualimapReport/Transcript coverage histogram.png", + "star_salmon/qualimap/WT_REP1/qualimapReport.html", + "star_salmon/qualimap/WT_REP1/raw_data_qualimapReport", + "star_salmon/qualimap/WT_REP1/raw_data_qualimapReport/coverage_profile_along_genes_(high).txt", + "star_salmon/qualimap/WT_REP1/raw_data_qualimapReport/coverage_profile_along_genes_(low).txt", + "star_salmon/qualimap/WT_REP1/raw_data_qualimapReport/coverage_profile_along_genes_(total).txt", + "star_salmon/qualimap/WT_REP1/rnaseq_qc_results.txt", + "star_salmon/qualimap/WT_REP1b", + "star_salmon/qualimap/WT_REP1b/css", + "star_salmon/qualimap/WT_REP1b/css/agogo.css", + "star_salmon/qualimap/WT_REP1b/css/ajax-loader.gif", + "star_salmon/qualimap/WT_REP1b/css/basic.css", + "star_salmon/qualimap/WT_REP1b/css/bgfooter.png", + "star_salmon/qualimap/WT_REP1b/css/bgtop.png", + "star_salmon/qualimap/WT_REP1b/css/comment-bright.png", + "star_salmon/qualimap/WT_REP1b/css/comment-close.png", + "star_salmon/qualimap/WT_REP1b/css/comment.png", + "star_salmon/qualimap/WT_REP1b/css/doctools.js", + "star_salmon/qualimap/WT_REP1b/css/down-pressed.png", + "star_salmon/qualimap/WT_REP1b/css/down.png", + "star_salmon/qualimap/WT_REP1b/css/file.png", + "star_salmon/qualimap/WT_REP1b/css/jquery.js", + "star_salmon/qualimap/WT_REP1b/css/minus.png", + "star_salmon/qualimap/WT_REP1b/css/plus.png", + "star_salmon/qualimap/WT_REP1b/css/pygments.css", + "star_salmon/qualimap/WT_REP1b/css/qualimap_logo_small.png", + "star_salmon/qualimap/WT_REP1b/css/report.css", + "star_salmon/qualimap/WT_REP1b/css/searchtools.js", + "star_salmon/qualimap/WT_REP1b/css/underscore.js", + "star_salmon/qualimap/WT_REP1b/css/up-pressed.png", + "star_salmon/qualimap/WT_REP1b/css/up.png", + "star_salmon/qualimap/WT_REP1b/css/websupport.js", + "star_salmon/qualimap/WT_REP1b/images_qualimapReport", + "star_salmon/qualimap/WT_REP1b/images_qualimapReport/Coverage Profile Along Genes (High).png", + "star_salmon/qualimap/WT_REP1b/images_qualimapReport/Coverage Profile Along Genes (Low).png", + "star_salmon/qualimap/WT_REP1b/images_qualimapReport/Coverage Profile Along Genes (Total).png", + "star_salmon/qualimap/WT_REP1b/images_qualimapReport/Junction Analysis.png", + "star_salmon/qualimap/WT_REP1b/images_qualimapReport/Reads Genomic Origin.png", + "star_salmon/qualimap/WT_REP1b/images_qualimapReport/Transcript coverage histogram.png", + "star_salmon/qualimap/WT_REP1b/qualimapReport.html", + "star_salmon/qualimap/WT_REP1b/raw_data_qualimapReport", + "star_salmon/qualimap/WT_REP1b/raw_data_qualimapReport/coverage_profile_along_genes_(high).txt", + "star_salmon/qualimap/WT_REP1b/raw_data_qualimapReport/coverage_profile_along_genes_(low).txt", + "star_salmon/qualimap/WT_REP1b/raw_data_qualimapReport/coverage_profile_along_genes_(total).txt", + "star_salmon/qualimap/WT_REP1b/rnaseq_qc_results.txt", + "star_salmon/qualimap/WT_REP2", + "star_salmon/qualimap/WT_REP2/css", + "star_salmon/qualimap/WT_REP2/css/agogo.css", + "star_salmon/qualimap/WT_REP2/css/ajax-loader.gif", + "star_salmon/qualimap/WT_REP2/css/basic.css", + "star_salmon/qualimap/WT_REP2/css/bgfooter.png", + "star_salmon/qualimap/WT_REP2/css/bgtop.png", + "star_salmon/qualimap/WT_REP2/css/comment-bright.png", + "star_salmon/qualimap/WT_REP2/css/comment-close.png", + "star_salmon/qualimap/WT_REP2/css/comment.png", + "star_salmon/qualimap/WT_REP2/css/doctools.js", + "star_salmon/qualimap/WT_REP2/css/down-pressed.png", + "star_salmon/qualimap/WT_REP2/css/down.png", + "star_salmon/qualimap/WT_REP2/css/file.png", + "star_salmon/qualimap/WT_REP2/css/jquery.js", + "star_salmon/qualimap/WT_REP2/css/minus.png", + "star_salmon/qualimap/WT_REP2/css/plus.png", + "star_salmon/qualimap/WT_REP2/css/pygments.css", + "star_salmon/qualimap/WT_REP2/css/qualimap_logo_small.png", + "star_salmon/qualimap/WT_REP2/css/report.css", + "star_salmon/qualimap/WT_REP2/css/searchtools.js", + "star_salmon/qualimap/WT_REP2/css/underscore.js", + "star_salmon/qualimap/WT_REP2/css/up-pressed.png", + "star_salmon/qualimap/WT_REP2/css/up.png", + "star_salmon/qualimap/WT_REP2/css/websupport.js", + "star_salmon/qualimap/WT_REP2/images_qualimapReport", + "star_salmon/qualimap/WT_REP2/images_qualimapReport/Coverage Profile Along Genes (High).png", + "star_salmon/qualimap/WT_REP2/images_qualimapReport/Coverage Profile Along Genes (Low).png", + "star_salmon/qualimap/WT_REP2/images_qualimapReport/Coverage Profile Along Genes (Total).png", + "star_salmon/qualimap/WT_REP2/images_qualimapReport/Junction Analysis.png", + "star_salmon/qualimap/WT_REP2/images_qualimapReport/Reads Genomic Origin.png", + "star_salmon/qualimap/WT_REP2/images_qualimapReport/Transcript coverage histogram.png", + "star_salmon/qualimap/WT_REP2/qualimapReport.html", + "star_salmon/qualimap/WT_REP2/raw_data_qualimapReport", + "star_salmon/qualimap/WT_REP2/raw_data_qualimapReport/coverage_profile_along_genes_(high).txt", + "star_salmon/qualimap/WT_REP2/raw_data_qualimapReport/coverage_profile_along_genes_(low).txt", + "star_salmon/qualimap/WT_REP2/raw_data_qualimapReport/coverage_profile_along_genes_(total).txt", + "star_salmon/qualimap/WT_REP2/rnaseq_qc_results.txt", + "star_salmon/rseqc", + "star_salmon/rseqc/bam_stat", + "star_salmon/rseqc/bam_stat/RAP1_IAA_30M_REP1.bam_stat.txt", + "star_salmon/rseqc/bam_stat/RAP1_UNINDUCED_REP1.bam_stat.txt", + "star_salmon/rseqc/bam_stat/RAP1_UNINDUCED_REP2.bam_stat.txt", + "star_salmon/rseqc/bam_stat/WT_REP1.bam_stat.txt", + "star_salmon/rseqc/bam_stat/WT_REP1b.bam_stat.txt", + "star_salmon/rseqc/bam_stat/WT_REP2.bam_stat.txt", + "star_salmon/rseqc/infer_experiment", + "star_salmon/rseqc/infer_experiment/RAP1_IAA_30M_REP1.infer_experiment.txt", + "star_salmon/rseqc/infer_experiment/RAP1_UNINDUCED_REP1.infer_experiment.txt", + "star_salmon/rseqc/infer_experiment/RAP1_UNINDUCED_REP2.infer_experiment.txt", + "star_salmon/rseqc/infer_experiment/WT_REP1.infer_experiment.txt", + "star_salmon/rseqc/infer_experiment/WT_REP1b.infer_experiment.txt", + "star_salmon/rseqc/infer_experiment/WT_REP2.infer_experiment.txt", + "star_salmon/rseqc/inner_distance", + "star_salmon/rseqc/inner_distance/pdf", + "star_salmon/rseqc/inner_distance/pdf/RAP1_IAA_30M_REP1.inner_distance_plot.pdf", + "star_salmon/rseqc/inner_distance/pdf/WT_REP1.inner_distance_plot.pdf", + "star_salmon/rseqc/inner_distance/pdf/WT_REP1b.inner_distance_plot.pdf", + "star_salmon/rseqc/inner_distance/pdf/WT_REP2.inner_distance_plot.pdf", + "star_salmon/rseqc/inner_distance/rscript", + "star_salmon/rseqc/inner_distance/rscript/RAP1_IAA_30M_REP1.inner_distance_plot.r", + "star_salmon/rseqc/inner_distance/rscript/WT_REP1.inner_distance_plot.r", + "star_salmon/rseqc/inner_distance/rscript/WT_REP1b.inner_distance_plot.r", + "star_salmon/rseqc/inner_distance/rscript/WT_REP2.inner_distance_plot.r", + "star_salmon/rseqc/inner_distance/txt", + "star_salmon/rseqc/inner_distance/txt/RAP1_IAA_30M_REP1.inner_distance.txt", + "star_salmon/rseqc/inner_distance/txt/RAP1_IAA_30M_REP1.inner_distance_freq.txt", + "star_salmon/rseqc/inner_distance/txt/RAP1_IAA_30M_REP1.inner_distance_mean.txt", + "star_salmon/rseqc/inner_distance/txt/RAP1_UNINDUCED_REP1.inner_distance.txt", + "star_salmon/rseqc/inner_distance/txt/RAP1_UNINDUCED_REP2.inner_distance.txt", + "star_salmon/rseqc/inner_distance/txt/WT_REP1.inner_distance.txt", + "star_salmon/rseqc/inner_distance/txt/WT_REP1.inner_distance_freq.txt", + "star_salmon/rseqc/inner_distance/txt/WT_REP1.inner_distance_mean.txt", + "star_salmon/rseqc/inner_distance/txt/WT_REP1b.inner_distance.txt", + "star_salmon/rseqc/inner_distance/txt/WT_REP1b.inner_distance_freq.txt", + "star_salmon/rseqc/inner_distance/txt/WT_REP1b.inner_distance_mean.txt", + "star_salmon/rseqc/inner_distance/txt/WT_REP2.inner_distance.txt", + "star_salmon/rseqc/inner_distance/txt/WT_REP2.inner_distance_freq.txt", + "star_salmon/rseqc/inner_distance/txt/WT_REP2.inner_distance_mean.txt", + "star_salmon/rseqc/junction_annotation", + "star_salmon/rseqc/junction_annotation/bed", + "star_salmon/rseqc/junction_annotation/bed/RAP1_IAA_30M_REP1.junction.Interact.bed", + "star_salmon/rseqc/junction_annotation/bed/RAP1_IAA_30M_REP1.junction.bed", + "star_salmon/rseqc/junction_annotation/bed/RAP1_UNINDUCED_REP1.junction.Interact.bed", + "star_salmon/rseqc/junction_annotation/bed/RAP1_UNINDUCED_REP1.junction.bed", + "star_salmon/rseqc/junction_annotation/bed/RAP1_UNINDUCED_REP2.junction.Interact.bed", + "star_salmon/rseqc/junction_annotation/bed/RAP1_UNINDUCED_REP2.junction.bed", + "star_salmon/rseqc/junction_annotation/bed/WT_REP1.junction.Interact.bed", + "star_salmon/rseqc/junction_annotation/bed/WT_REP1.junction.bed", + "star_salmon/rseqc/junction_annotation/bed/WT_REP1b.junction.Interact.bed", + "star_salmon/rseqc/junction_annotation/bed/WT_REP1b.junction.bed", + "star_salmon/rseqc/junction_annotation/bed/WT_REP2.junction.Interact.bed", + "star_salmon/rseqc/junction_annotation/bed/WT_REP2.junction.bed", + "star_salmon/rseqc/junction_annotation/log", + "star_salmon/rseqc/junction_annotation/log/RAP1_IAA_30M_REP1.junction_annotation.log", + "star_salmon/rseqc/junction_annotation/log/RAP1_UNINDUCED_REP1.junction_annotation.log", + "star_salmon/rseqc/junction_annotation/log/RAP1_UNINDUCED_REP2.junction_annotation.log", + "star_salmon/rseqc/junction_annotation/log/WT_REP1.junction_annotation.log", + "star_salmon/rseqc/junction_annotation/log/WT_REP1b.junction_annotation.log", + "star_salmon/rseqc/junction_annotation/log/WT_REP2.junction_annotation.log", + "star_salmon/rseqc/junction_annotation/pdf", + "star_salmon/rseqc/junction_annotation/pdf/RAP1_IAA_30M_REP1.splice_events.pdf", + "star_salmon/rseqc/junction_annotation/pdf/RAP1_IAA_30M_REP1.splice_junction.pdf", + "star_salmon/rseqc/junction_annotation/pdf/RAP1_UNINDUCED_REP1.splice_events.pdf", + "star_salmon/rseqc/junction_annotation/pdf/RAP1_UNINDUCED_REP1.splice_junction.pdf", + "star_salmon/rseqc/junction_annotation/pdf/RAP1_UNINDUCED_REP2.splice_events.pdf", + "star_salmon/rseqc/junction_annotation/pdf/RAP1_UNINDUCED_REP2.splice_junction.pdf", + "star_salmon/rseqc/junction_annotation/pdf/WT_REP1.splice_events.pdf", + "star_salmon/rseqc/junction_annotation/pdf/WT_REP1.splice_junction.pdf", + "star_salmon/rseqc/junction_annotation/pdf/WT_REP1b.splice_events.pdf", + "star_salmon/rseqc/junction_annotation/pdf/WT_REP1b.splice_junction.pdf", + "star_salmon/rseqc/junction_annotation/pdf/WT_REP2.splice_events.pdf", + "star_salmon/rseqc/junction_annotation/pdf/WT_REP2.splice_junction.pdf", + "star_salmon/rseqc/junction_annotation/rscript", + "star_salmon/rseqc/junction_annotation/rscript/RAP1_IAA_30M_REP1.junction_plot.r", + "star_salmon/rseqc/junction_annotation/rscript/RAP1_UNINDUCED_REP1.junction_plot.r", + "star_salmon/rseqc/junction_annotation/rscript/RAP1_UNINDUCED_REP2.junction_plot.r", + "star_salmon/rseqc/junction_annotation/rscript/WT_REP1.junction_plot.r", + "star_salmon/rseqc/junction_annotation/rscript/WT_REP1b.junction_plot.r", + "star_salmon/rseqc/junction_annotation/rscript/WT_REP2.junction_plot.r", + "star_salmon/rseqc/junction_annotation/xls", + "star_salmon/rseqc/junction_annotation/xls/RAP1_IAA_30M_REP1.junction.xls", + "star_salmon/rseqc/junction_annotation/xls/RAP1_UNINDUCED_REP1.junction.xls", + "star_salmon/rseqc/junction_annotation/xls/RAP1_UNINDUCED_REP2.junction.xls", + "star_salmon/rseqc/junction_annotation/xls/WT_REP1.junction.xls", + "star_salmon/rseqc/junction_annotation/xls/WT_REP1b.junction.xls", + "star_salmon/rseqc/junction_annotation/xls/WT_REP2.junction.xls", + "star_salmon/rseqc/junction_saturation", + "star_salmon/rseqc/junction_saturation/pdf", + "star_salmon/rseqc/junction_saturation/pdf/RAP1_IAA_30M_REP1.junctionSaturation_plot.pdf", + "star_salmon/rseqc/junction_saturation/pdf/RAP1_UNINDUCED_REP1.junctionSaturation_plot.pdf", + "star_salmon/rseqc/junction_saturation/pdf/RAP1_UNINDUCED_REP2.junctionSaturation_plot.pdf", + "star_salmon/rseqc/junction_saturation/pdf/WT_REP1.junctionSaturation_plot.pdf", + "star_salmon/rseqc/junction_saturation/pdf/WT_REP1b.junctionSaturation_plot.pdf", + "star_salmon/rseqc/junction_saturation/pdf/WT_REP2.junctionSaturation_plot.pdf", + "star_salmon/rseqc/junction_saturation/rscript", + "star_salmon/rseqc/junction_saturation/rscript/RAP1_IAA_30M_REP1.junctionSaturation_plot.r", + "star_salmon/rseqc/junction_saturation/rscript/RAP1_UNINDUCED_REP1.junctionSaturation_plot.r", + "star_salmon/rseqc/junction_saturation/rscript/RAP1_UNINDUCED_REP2.junctionSaturation_plot.r", + "star_salmon/rseqc/junction_saturation/rscript/WT_REP1.junctionSaturation_plot.r", + "star_salmon/rseqc/junction_saturation/rscript/WT_REP1b.junctionSaturation_plot.r", + "star_salmon/rseqc/junction_saturation/rscript/WT_REP2.junctionSaturation_plot.r", + "star_salmon/rseqc/read_distribution", + "star_salmon/rseqc/read_distribution/RAP1_IAA_30M_REP1.read_distribution.txt", + "star_salmon/rseqc/read_distribution/RAP1_UNINDUCED_REP1.read_distribution.txt", + "star_salmon/rseqc/read_distribution/RAP1_UNINDUCED_REP2.read_distribution.txt", + "star_salmon/rseqc/read_distribution/WT_REP1.read_distribution.txt", + "star_salmon/rseqc/read_distribution/WT_REP1b.read_distribution.txt", + "star_salmon/rseqc/read_distribution/WT_REP2.read_distribution.txt", + "star_salmon/rseqc/read_duplication", + "star_salmon/rseqc/read_duplication/pdf", + "star_salmon/rseqc/read_duplication/pdf/RAP1_IAA_30M_REP1.DupRate_plot.pdf", + "star_salmon/rseqc/read_duplication/pdf/RAP1_UNINDUCED_REP1.DupRate_plot.pdf", + "star_salmon/rseqc/read_duplication/pdf/RAP1_UNINDUCED_REP2.DupRate_plot.pdf", + "star_salmon/rseqc/read_duplication/pdf/WT_REP1.DupRate_plot.pdf", + "star_salmon/rseqc/read_duplication/pdf/WT_REP1b.DupRate_plot.pdf", + "star_salmon/rseqc/read_duplication/pdf/WT_REP2.DupRate_plot.pdf", + "star_salmon/rseqc/read_duplication/rscript", + "star_salmon/rseqc/read_duplication/rscript/RAP1_IAA_30M_REP1.DupRate_plot.r", + "star_salmon/rseqc/read_duplication/rscript/RAP1_UNINDUCED_REP1.DupRate_plot.r", + "star_salmon/rseqc/read_duplication/rscript/RAP1_UNINDUCED_REP2.DupRate_plot.r", + "star_salmon/rseqc/read_duplication/rscript/WT_REP1.DupRate_plot.r", + "star_salmon/rseqc/read_duplication/rscript/WT_REP1b.DupRate_plot.r", + "star_salmon/rseqc/read_duplication/rscript/WT_REP2.DupRate_plot.r", + "star_salmon/rseqc/read_duplication/xls", + "star_salmon/rseqc/read_duplication/xls/RAP1_IAA_30M_REP1.pos.DupRate.xls", + "star_salmon/rseqc/read_duplication/xls/RAP1_IAA_30M_REP1.seq.DupRate.xls", + "star_salmon/rseqc/read_duplication/xls/RAP1_UNINDUCED_REP1.pos.DupRate.xls", + "star_salmon/rseqc/read_duplication/xls/RAP1_UNINDUCED_REP1.seq.DupRate.xls", + "star_salmon/rseqc/read_duplication/xls/RAP1_UNINDUCED_REP2.pos.DupRate.xls", + "star_salmon/rseqc/read_duplication/xls/RAP1_UNINDUCED_REP2.seq.DupRate.xls", + "star_salmon/rseqc/read_duplication/xls/WT_REP1.pos.DupRate.xls", + "star_salmon/rseqc/read_duplication/xls/WT_REP1.seq.DupRate.xls", + "star_salmon/rseqc/read_duplication/xls/WT_REP1b.pos.DupRate.xls", + "star_salmon/rseqc/read_duplication/xls/WT_REP1b.seq.DupRate.xls", + "star_salmon/rseqc/read_duplication/xls/WT_REP2.pos.DupRate.xls", + "star_salmon/rseqc/read_duplication/xls/WT_REP2.seq.DupRate.xls", + "star_salmon/salmon.merged.gene.SummarizedExperiment.rds", + "star_salmon/salmon.merged.gene_counts.tsv", + "star_salmon/salmon.merged.gene_counts_length_scaled.tsv", + "star_salmon/salmon.merged.gene_counts_scaled.tsv", + "star_salmon/salmon.merged.gene_lengths.tsv", + "star_salmon/salmon.merged.gene_tpm.tsv", + "star_salmon/salmon.merged.transcript.SummarizedExperiment.rds", + "star_salmon/salmon.merged.transcript_counts.tsv", + "star_salmon/salmon.merged.transcript_lengths.tsv", + "star_salmon/salmon.merged.transcript_tpm.tsv", + "star_salmon/salmon.merged.tx2gene.tsv", + "star_salmon/samtools_stats", + "star_salmon/samtools_stats/RAP1_IAA_30M_REP1.markdup.sorted.bam.flagstat", + "star_salmon/samtools_stats/RAP1_IAA_30M_REP1.markdup.sorted.bam.idxstats", + "star_salmon/samtools_stats/RAP1_IAA_30M_REP1.markdup.sorted.bam.stats", + "star_salmon/samtools_stats/RAP1_IAA_30M_REP1.sorted.bam.flagstat", + "star_salmon/samtools_stats/RAP1_IAA_30M_REP1.sorted.bam.idxstats", + "star_salmon/samtools_stats/RAP1_IAA_30M_REP1.sorted.bam.stats", + "star_salmon/samtools_stats/RAP1_UNINDUCED_REP1.markdup.sorted.bam.flagstat", + "star_salmon/samtools_stats/RAP1_UNINDUCED_REP1.markdup.sorted.bam.idxstats", + "star_salmon/samtools_stats/RAP1_UNINDUCED_REP1.markdup.sorted.bam.stats", + "star_salmon/samtools_stats/RAP1_UNINDUCED_REP1.sorted.bam.flagstat", + "star_salmon/samtools_stats/RAP1_UNINDUCED_REP1.sorted.bam.idxstats", + "star_salmon/samtools_stats/RAP1_UNINDUCED_REP1.sorted.bam.stats", + "star_salmon/samtools_stats/RAP1_UNINDUCED_REP2.markdup.sorted.bam.flagstat", + "star_salmon/samtools_stats/RAP1_UNINDUCED_REP2.markdup.sorted.bam.idxstats", + "star_salmon/samtools_stats/RAP1_UNINDUCED_REP2.markdup.sorted.bam.stats", + "star_salmon/samtools_stats/RAP1_UNINDUCED_REP2.sorted.bam.flagstat", + "star_salmon/samtools_stats/RAP1_UNINDUCED_REP2.sorted.bam.idxstats", + "star_salmon/samtools_stats/RAP1_UNINDUCED_REP2.sorted.bam.stats", + "star_salmon/samtools_stats/WT_REP1.markdup.sorted.bam.flagstat", + "star_salmon/samtools_stats/WT_REP1.markdup.sorted.bam.idxstats", + "star_salmon/samtools_stats/WT_REP1.markdup.sorted.bam.stats", + "star_salmon/samtools_stats/WT_REP1.sorted.bam.flagstat", + "star_salmon/samtools_stats/WT_REP1.sorted.bam.idxstats", + "star_salmon/samtools_stats/WT_REP1.sorted.bam.stats", + "star_salmon/samtools_stats/WT_REP1b.markdup.sorted.bam.flagstat", + "star_salmon/samtools_stats/WT_REP1b.markdup.sorted.bam.idxstats", + "star_salmon/samtools_stats/WT_REP1b.markdup.sorted.bam.stats", + "star_salmon/samtools_stats/WT_REP1b.sorted.bam.flagstat", + "star_salmon/samtools_stats/WT_REP1b.sorted.bam.idxstats", + "star_salmon/samtools_stats/WT_REP1b.sorted.bam.stats", + "star_salmon/samtools_stats/WT_REP2.markdup.sorted.bam.flagstat", + "star_salmon/samtools_stats/WT_REP2.markdup.sorted.bam.idxstats", + "star_salmon/samtools_stats/WT_REP2.markdup.sorted.bam.stats", + "star_salmon/samtools_stats/WT_REP2.sorted.bam.flagstat", + "star_salmon/samtools_stats/WT_REP2.sorted.bam.idxstats", + "star_salmon/samtools_stats/WT_REP2.sorted.bam.stats", + "star_salmon/stringtie", + "star_salmon/stringtie/RAP1_IAA_30M_REP1.ballgown", + "star_salmon/stringtie/RAP1_IAA_30M_REP1.ballgown/e2t.ctab", + "star_salmon/stringtie/RAP1_IAA_30M_REP1.ballgown/e_data.ctab", + "star_salmon/stringtie/RAP1_IAA_30M_REP1.ballgown/i2t.ctab", + "star_salmon/stringtie/RAP1_IAA_30M_REP1.ballgown/i_data.ctab", + "star_salmon/stringtie/RAP1_IAA_30M_REP1.ballgown/t_data.ctab", + "star_salmon/stringtie/RAP1_IAA_30M_REP1.coverage.gtf", + "star_salmon/stringtie/RAP1_IAA_30M_REP1.gene.abundance.txt", + "star_salmon/stringtie/RAP1_IAA_30M_REP1.transcripts.gtf", + "star_salmon/stringtie/RAP1_UNINDUCED_REP1.ballgown", + "star_salmon/stringtie/RAP1_UNINDUCED_REP1.ballgown/e2t.ctab", + "star_salmon/stringtie/RAP1_UNINDUCED_REP1.ballgown/e_data.ctab", + "star_salmon/stringtie/RAP1_UNINDUCED_REP1.ballgown/i2t.ctab", + "star_salmon/stringtie/RAP1_UNINDUCED_REP1.ballgown/i_data.ctab", + "star_salmon/stringtie/RAP1_UNINDUCED_REP1.ballgown/t_data.ctab", + "star_salmon/stringtie/RAP1_UNINDUCED_REP1.coverage.gtf", + "star_salmon/stringtie/RAP1_UNINDUCED_REP1.gene.abundance.txt", + "star_salmon/stringtie/RAP1_UNINDUCED_REP1.transcripts.gtf", + "star_salmon/stringtie/RAP1_UNINDUCED_REP2.ballgown", + "star_salmon/stringtie/RAP1_UNINDUCED_REP2.ballgown/e2t.ctab", + "star_salmon/stringtie/RAP1_UNINDUCED_REP2.ballgown/e_data.ctab", + "star_salmon/stringtie/RAP1_UNINDUCED_REP2.ballgown/i2t.ctab", + "star_salmon/stringtie/RAP1_UNINDUCED_REP2.ballgown/i_data.ctab", + "star_salmon/stringtie/RAP1_UNINDUCED_REP2.ballgown/t_data.ctab", + "star_salmon/stringtie/RAP1_UNINDUCED_REP2.coverage.gtf", + "star_salmon/stringtie/RAP1_UNINDUCED_REP2.gene.abundance.txt", + "star_salmon/stringtie/RAP1_UNINDUCED_REP2.transcripts.gtf", + "star_salmon/stringtie/WT_REP1.ballgown", + "star_salmon/stringtie/WT_REP1.ballgown/e2t.ctab", + "star_salmon/stringtie/WT_REP1.ballgown/e_data.ctab", + "star_salmon/stringtie/WT_REP1.ballgown/i2t.ctab", + "star_salmon/stringtie/WT_REP1.ballgown/i_data.ctab", + "star_salmon/stringtie/WT_REP1.ballgown/t_data.ctab", + "star_salmon/stringtie/WT_REP1.coverage.gtf", + "star_salmon/stringtie/WT_REP1.gene.abundance.txt", + "star_salmon/stringtie/WT_REP1.transcripts.gtf", + "star_salmon/stringtie/WT_REP1b.ballgown", + "star_salmon/stringtie/WT_REP1b.ballgown/e2t.ctab", + "star_salmon/stringtie/WT_REP1b.ballgown/e_data.ctab", + "star_salmon/stringtie/WT_REP1b.ballgown/i2t.ctab", + "star_salmon/stringtie/WT_REP1b.ballgown/i_data.ctab", + "star_salmon/stringtie/WT_REP1b.ballgown/t_data.ctab", + "star_salmon/stringtie/WT_REP1b.coverage.gtf", + "star_salmon/stringtie/WT_REP1b.gene.abundance.txt", + "star_salmon/stringtie/WT_REP1b.transcripts.gtf", + "star_salmon/stringtie/WT_REP2.ballgown", + "star_salmon/stringtie/WT_REP2.ballgown/e2t.ctab", + "star_salmon/stringtie/WT_REP2.ballgown/e_data.ctab", + "star_salmon/stringtie/WT_REP2.ballgown/i2t.ctab", + "star_salmon/stringtie/WT_REP2.ballgown/i_data.ctab", + "star_salmon/stringtie/WT_REP2.ballgown/t_data.ctab", + "star_salmon/stringtie/WT_REP2.coverage.gtf", + "star_salmon/stringtie/WT_REP2.gene.abundance.txt", + "star_salmon/stringtie/WT_REP2.transcripts.gtf", + "trimgalore", + "trimgalore/RAP1_IAA_30M_REP1_trimmed_1.fastq.gz_trimming_report.txt", + "trimgalore/RAP1_IAA_30M_REP1_trimmed_2.fastq.gz_trimming_report.txt", + "trimgalore/RAP1_UNINDUCED_REP1_trimmed.fastq.gz_trimming_report.txt", + "trimgalore/RAP1_UNINDUCED_REP2_trimmed.fastq.gz_trimming_report.txt", + "trimgalore/WT_REP1_trimmed_1.fastq.gz_trimming_report.txt", + "trimgalore/WT_REP1_trimmed_2.fastq.gz_trimming_report.txt", + "trimgalore/WT_REP1b_trimmed_1.fastq.gz_trimming_report.txt", + "trimgalore/WT_REP1b_trimmed_2.fastq.gz_trimming_report.txt", + "trimgalore/WT_REP2_trimmed_1.fastq.gz_trimming_report.txt", + "trimgalore/WT_REP2_trimmed_2.fastq.gz_trimming_report.txt" + ], + [ + "genome_gfp.fasta:md5,e23e302af63736a199985a169fdac055", + "genome_gfp.gtf:md5,c98b12c302f15731bfc36bcf297cfe28", + "cutadapt_filtered_reads_plot.txt:md5,2875db20890141d1c23f7d1310ab65f0", + "cutadapt_trimmed_sequences_plot_3_Counts.txt:md5,c54c003a04b4630f52c4c34a86ddca8d", + "cutadapt_trimmed_sequences_plot_3_Obs_Exp.txt:md5,afbad9fda5caa0b86ab791765df63e4c", + "fastqc_raw-status-check-heatmap.txt:md5,6960f8f532f09fc95761692d1cb749e6", + "fastqc_raw_adapter_content_plot.txt:md5,8b491a5a375fe650eca55f3143abf377", + "fastqc_raw_overrepresented_sequences_plot.txt:md5,0112dd9165bdd3c4a1e812de59c2b0d0", + "fastqc_raw_per_base_n_content_plot.txt:md5,15e20abb80e9b8f6c30d2e56569b81a8", + "fastqc_raw_per_base_sequence_quality_plot.txt:md5,23d33c9c76914a42423cfe6dda2ebd32", + "fastqc_raw_per_sequence_gc_content_plot_Counts.txt:md5,d02da91df8c2fc8e77ce858a67d4da95", + "fastqc_raw_per_sequence_gc_content_plot_Percentages.txt:md5,019a8e2e5090ca56b510bb7fdf0c22ed", + "fastqc_raw_per_sequence_quality_scores_plot.txt:md5,36abd0f7e78ab441750f2bbc3800db91", + "fastqc_raw_sequence_counts_plot.txt:md5,e20d0037488d321df2f24c6b6b6d3cf0", + "fastqc_raw_sequence_duplication_levels_plot.txt:md5,928305a2327ff3c69887b76d587c65b1", + "fastqc_trimmed-status-check-heatmap.txt:md5,21fe45a63c0069fa463aa1523c2fa919", + "fastqc_trimmed_overrepresented_sequences_plot.txt:md5,c325cd42acdd3be6cbc4c54ff528e010", + "fastqc_trimmed_per_base_n_content_plot.txt:md5,15eafd38dd34b843ceb90cea90c1cc3f", + "fastqc_trimmed_per_base_sequence_quality_plot.txt:md5,58ab67773fc0a295b6c0b06627cf643b", + "fastqc_trimmed_per_sequence_gc_content_plot_Counts.txt:md5,df76004632a46bf5663b602332393ee5", + "fastqc_trimmed_per_sequence_gc_content_plot_Percentages.txt:md5,bc453d50bd152c063a20aa375b3190ce", + "fastqc_trimmed_per_sequence_quality_scores_plot.txt:md5,82ccc7f0cfa22f39630c4e940a2410ea", + "fastqc_trimmed_sequence_counts_plot.txt:md5,5defe38e21c1d01367f4a4e5c8f7ae02", + "fastqc_trimmed_sequence_duplication_levels_plot.txt:md5,98f221c41c6bbfb773d8717178fe608c", + "multiqc_citations.txt:md5,3b2df50074ac38b1ca3051f50698d428", + "multiqc_fastqc_fastqc_raw.txt:md5,35fa50a1bf69d0ce316a38394e89efcd", + "multiqc_fastqc_fastqc_trimmed.txt:md5,fb8c668e38198dff6c22a98fa41150db", + "multiqc_featurecounts_biotype_plot.txt:md5,886c1cc52373bab00552e99500a041b9", + "multiqc_samtools_idxstats.txt:md5,ae83b96909c81c70e7bb183bda01f600", + "picard_MarkIlluminaAdapters_histogram.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "picard_MeanQualityByCycle_histogram.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "picard_QualityScoreDistribution_histogram.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "qualimap_gene_coverage_profile_Counts.txt:md5,09303afba2d4ac28b87848af2d3194a8", + "qualimap_gene_coverage_profile_Normalised.txt:md5,39a91f3ed3cfa605ab304aeb075f0c97", + "qualimap_rnaseq_cov_hist.txt:md5,d6321135b49e36efe10bd6155cd91a68", + "rseqc_infer_experiment_plot.txt:md5,f822156e0d6d053b1d31958e49e5638d", + "samtools-idxstats-mapped-reads-plot_Normalised_Counts.txt:md5,0474fbeb6fb41422242dbdf66ebe52d8", + "samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts.txt:md5,bee9b38d319244818dc9e1c86fa5988a", + "samtools-idxstats-mapped-reads-plot_Raw_Counts.txt:md5,d734f68f39e4aaefaba40f42f6172ab5", + "ambig_info.tsv:md5,604c0c31a357c82178a3308315da30a2", + "expected_bias.gz:md5,3407f87245d0003e0ffbfdf6d8c04f20", + "observed_bias.gz:md5,92bcd0592d22a6a58d0360fc76103e56", + "observed_bias_3p.gz:md5,92bcd0592d22a6a58d0360fc76103e56", + "cmd_info.json:md5,21395500c85658c70ce5fa0ac05b339a", + "ambig_info.tsv:md5,e94d43ea8f77ff11db12721d9e22dc97", + "expected_bias.gz:md5,3407f87245d0003e0ffbfdf6d8c04f20", + "observed_bias.gz:md5,92bcd0592d22a6a58d0360fc76103e56", + "observed_bias_3p.gz:md5,92bcd0592d22a6a58d0360fc76103e56", + "cmd_info.json:md5,faf70330c73fdce087631bb06de8a12f", + "ambig_info.tsv:md5,b7ee5e96456d81cbe7315b6007d24029", + "expected_bias.gz:md5,3407f87245d0003e0ffbfdf6d8c04f20", + "observed_bias.gz:md5,92bcd0592d22a6a58d0360fc76103e56", + "observed_bias_3p.gz:md5,92bcd0592d22a6a58d0360fc76103e56", + "cmd_info.json:md5,563fd8191cc965524621c2afea7983ff", + "ambig_info.tsv:md5,a6e324d11d0d9bae1c2062ca9f4520ec", + "expected_bias.gz:md5,3407f87245d0003e0ffbfdf6d8c04f20", + "observed_bias.gz:md5,92bcd0592d22a6a58d0360fc76103e56", + "observed_bias_3p.gz:md5,92bcd0592d22a6a58d0360fc76103e56", + "cmd_info.json:md5,867de0b90aeccb5f9627e821a973aea7", + "ambig_info.tsv:md5,87100d57e6500fdc21daf234b742ae2e", + "expected_bias.gz:md5,3407f87245d0003e0ffbfdf6d8c04f20", + "observed_bias.gz:md5,92bcd0592d22a6a58d0360fc76103e56", + "observed_bias_3p.gz:md5,92bcd0592d22a6a58d0360fc76103e56", + "cmd_info.json:md5,1fb6b2cb62b6dc1010742d660c277dbf", + "ambig_info.tsv:md5,7d78babea922d4a10058ee268480a946", + "expected_bias.gz:md5,3407f87245d0003e0ffbfdf6d8c04f20", + "observed_bias.gz:md5,92bcd0592d22a6a58d0360fc76103e56", + "observed_bias_3p.gz:md5,92bcd0592d22a6a58d0360fc76103e56", + "cmd_info.json:md5,3a51e7db950cee84bed0b13e329f1934", + "RAP1_IAA_30M_REP1.biotype_counts_mqc.tsv:md5,d5a54127f0167db3fecff466387920c0", + "RAP1_IAA_30M_REP1.biotype_counts_rrna_mqc.tsv:md5,dde2de0cb90e10d0195c726f768e9941", + "RAP1_IAA_30M_REP1.featureCounts.tsv:md5,b3fc7acb6a8f9b2d35dcfac76dcfdd3d", + "RAP1_UNINDUCED_REP1.biotype_counts_mqc.tsv:md5,0bfe14b75b3cf50219457278d856dfbc", + "RAP1_UNINDUCED_REP1.biotype_counts_rrna_mqc.tsv:md5,845ff9059c72bc6722a8de69776e22bb", + "RAP1_UNINDUCED_REP1.featureCounts.tsv:md5,aa8946dc5e9e081b1d689aa131c48329", + "RAP1_UNINDUCED_REP2.biotype_counts_mqc.tsv:md5,e97d751ed0ef754b4791e3b8fc0053f1", + "RAP1_UNINDUCED_REP2.biotype_counts_rrna_mqc.tsv:md5,6d3fa4c88c7fe61f638e4624ad5e22f0", + "RAP1_UNINDUCED_REP2.featureCounts.tsv:md5,5800aea0971047b7ad72e95383a975d8", + "WT_REP1.biotype_counts_mqc.tsv:md5,e12a7bd56ddacfde27e84ab4fc0efc62", + "WT_REP1.biotype_counts_rrna_mqc.tsv:md5,8ef76d717492ca23764938aee8ea33a9", + "WT_REP1.featureCounts.tsv:md5,91f9c819e392f11b002674098b84534f", + "WT_REP1b.biotype_counts_mqc.tsv:md5,32733ec077d44df610b5db2544915c2c", + "WT_REP1b.biotype_counts_rrna_mqc.tsv:md5,ae5e8d509ba1ced799a1de6482e422c1", + "WT_REP1b.featureCounts.tsv:md5,62be4b023ed36d90605316d9116111cf", + "WT_REP2.biotype_counts_mqc.tsv:md5,7f8bf0dadfceec4692c0c94e85001252", + "WT_REP2.biotype_counts_rrna_mqc.tsv:md5,12294618fe44df1e7f39348372dcb481", + "WT_REP2.featureCounts.tsv:md5,42a4cb41f8478f22974b84f426d1a50c", + "RAP1_IAA_30M_REP1.SJ.out.tab:md5,ea95e243278af55534f2c52eb5fff7ee", + "RAP1_UNINDUCED_REP1.SJ.out.tab:md5,3ccd0c5a80bf0339af7be290ee79ba72", + "RAP1_UNINDUCED_REP2.SJ.out.tab:md5,922f735913ef6e6459f0c019fffaf3f5", + "WT_REP1.SJ.out.tab:md5,62e6ab9f5f60c8966c5c5c6ae5383f78", + "WT_REP1b.SJ.out.tab:md5,2fdfdd6ae54aab593693d05838b79ca1", + "WT_REP2.SJ.out.tab:md5,7580bf2df793618a3519713629f388c9", + "coverage_profile_along_genes_(high).txt:md5,662e8945aabc688a2ff15b90ed5bf4b5", + "coverage_profile_along_genes_(low).txt:md5,2753a8549bcadc689993e24513f35164", + "coverage_profile_along_genes_(total).txt:md5,2753a8549bcadc689993e24513f35164", + "coverage_profile_along_genes_(high).txt:md5,a2bcc91bd461fa8cb4bea775b54b2826", + "coverage_profile_along_genes_(low).txt:md5,38de1d59b92983d6d0111c629a1b8834", + "coverage_profile_along_genes_(total).txt:md5,38de1d59b92983d6d0111c629a1b8834", + "coverage_profile_along_genes_(high).txt:md5,fa4e445ffa95325c22dd9ed0639fc3b9", + "coverage_profile_along_genes_(low).txt:md5,73c07a101db4e481ed6fe582d3453b1f", + "coverage_profile_along_genes_(total).txt:md5,73c07a101db4e481ed6fe582d3453b1f", + "coverage_profile_along_genes_(high).txt:md5,333f37fab58843e9640d8ea0eb983bc3", + "coverage_profile_along_genes_(low).txt:md5,7f8bf994ecc74f7f1a4e05c9e999a04d", + "coverage_profile_along_genes_(total).txt:md5,7f8bf994ecc74f7f1a4e05c9e999a04d", + "coverage_profile_along_genes_(high).txt:md5,ccbdaac45027f7dbdb077c4eb882e62f", + "coverage_profile_along_genes_(low).txt:md5,26ca2ba2da67b2882c40c61cb41d491d", + "coverage_profile_along_genes_(total).txt:md5,26ca2ba2da67b2882c40c61cb41d491d", + "coverage_profile_along_genes_(high).txt:md5,17b4423be60ff90504cff157cc0e65ae", + "coverage_profile_along_genes_(low).txt:md5,f7945dcc0e16f74cead6651ec397e6b0", + "coverage_profile_along_genes_(total).txt:md5,f7945dcc0e16f74cead6651ec397e6b0", + "RAP1_IAA_30M_REP1.infer_experiment.txt:md5,169d25b95c008bebe9ce886fea6a4e33", + "RAP1_UNINDUCED_REP1.infer_experiment.txt:md5,9f7f5cb698b1f1db55c0aa855b59213b", + "RAP1_UNINDUCED_REP2.infer_experiment.txt:md5,688cf8ef4b0069d8c426420e9a27b732", + "WT_REP1.infer_experiment.txt:md5,067c11ae252bacb70d79ae027c8be97e", + "WT_REP1b.infer_experiment.txt:md5,b60f8445f1216b0045805332ab1b3062", + "WT_REP2.infer_experiment.txt:md5,172b4693066f1fdfff07d9b053e1e387", + "salmon.merged.tx2gene.tsv:md5,0e2418a69d2eba45097ebffc2f700bfe", + "e2t.ctab:md5,54dd6de2daa90e973f47524a738a3d69", + "e_data.ctab:md5,98a2b6a7555e58c7f21b45a1f48e5cbf", + "i2t.ctab:md5,dda3d3ccd7d4184d947c654ae73efb7b", + "i_data.ctab:md5,a052ab04070e72cc318fb7680b0764e3", + "e2t.ctab:md5,54dd6de2daa90e973f47524a738a3d69", + "e_data.ctab:md5,3b807743d8cb11ce6fd638df079454b4", + "i2t.ctab:md5,dda3d3ccd7d4184d947c654ae73efb7b", + "i_data.ctab:md5,80de7e1afe4edf4bb66844f785f578fa", + "e2t.ctab:md5,54dd6de2daa90e973f47524a738a3d69", + "e_data.ctab:md5,a94aebb60f5391f5f5ff19bf2bc7be4e", + "i2t.ctab:md5,dda3d3ccd7d4184d947c654ae73efb7b", + "i_data.ctab:md5,736d87185be73db758648b76c01ac00b", + "e2t.ctab:md5,54dd6de2daa90e973f47524a738a3d69", + "e_data.ctab:md5,b9e2d0f94430222c0274027ba9d6d281", + "i2t.ctab:md5,dda3d3ccd7d4184d947c654ae73efb7b", + "i_data.ctab:md5,df50f33ac5cf29b10fc2cf7869bc7930", + "e2t.ctab:md5,54dd6de2daa90e973f47524a738a3d69", + "e_data.ctab:md5,97efe1e6bdae7b98ffc98dee68a50e14", + "i2t.ctab:md5,dda3d3ccd7d4184d947c654ae73efb7b", + "i_data.ctab:md5,01a491280a0a4d7dde2caf22a6a2bab8", + "e2t.ctab:md5,54dd6de2daa90e973f47524a738a3d69", + "e_data.ctab:md5,5e7b9295357dc05ef166e50612b3c979", + "i2t.ctab:md5,dda3d3ccd7d4184d947c654ae73efb7b", + "i_data.ctab:md5,fca03502dd5b5e2831a64ff133d8c0b5" + ] + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.2" + }, + "timestamp": "2026-02-26T14:59:30.732479598" + } +} \ No newline at end of file diff --git a/workflows/rnaseq/assets/multiqc/multiqc_config.yml b/workflows/rnaseq/assets/multiqc/multiqc_config.yml index e2ade51d9..5ac8991fc 100644 --- a/workflows/rnaseq/assets/multiqc/multiqc_config.yml +++ b/workflows/rnaseq/assets/multiqc/multiqc_config.yml @@ -1,7 +1,7 @@ report_comment: > - This report has been generated by the nf-core/rnaseq analysis pipeline. For information about how - to interpret these results, please see the documentation. report_section_order: # Important checks and failures @@ -22,6 +22,12 @@ report_section_order: order: 4003 fastqc_trimmed: order: 4002 + bbmap: + order: 4001 + bowtie2_rrna: + order: 4000 + fastqc_filtered: + order: 3999 # Alignment star: order: 3000 @@ -79,17 +85,34 @@ export_plots_timeout: 60 disable_version_detection: true sample_names_replace_exact: true +# Group paired-end reads together in the general stats table +table_sample_merge: + "Read 1": + - "_1" + - "_R1" + - type: regex + pattern: "[_.-][rR]?1$" + "Read 2": + - "_2" + - "_R2" + - type: regex + pattern: "[_.-][rR]?2$" + # Run only these modules run_modules: - custom_content - fastqc - cutadapt - fastp + - seqkit + - bbmap - sortmerna + - bowtie2 - star - hisat2 - rsem - umitools + - umicollapse - salmon - kallisto - samtools @@ -98,6 +121,7 @@ run_modules: - rseqc - qualimap - kraken + - sylphtax # Order of modules @@ -110,12 +134,27 @@ module_order: - "*_raw*fastqc.zip" - cutadapt - fastp + - seqkit: + name: "SeqKit Stats (rRNA removal)" + info: "Read length statistics used by RiboDetector for rRNA removal." + path_filters: + - "*.rrna_removal_stats.tsv" - fastqc: anchor: "fastqc_trimmed" name: "FastQC (trimmed)" info: "This section of the report shows FastQC results after adapter trimming." path_filters: - "*_trimmed*fastqc.zip" + - bowtie2: + anchor: "bowtie2_rrna" + name: "Bowtie2 (rRNA removal)" + info: "This section shows Bowtie2 alignment statistics for rRNA removal. Reads were aligned against an rRNA reference to filter out ribosomal RNA contamination." + - fastqc: + anchor: "fastqc_filtered" + name: "FastQC (filtered)" + info: "This section of the report shows FastQC results after contaminant removal (BBSplit) and/or ribosomal RNA removal." + path_filters: + - "*_filtered*fastqc.zip" # Don't show % Dups in the General Stats table (we have this from Picard) table_columns_visible: @@ -123,6 +162,8 @@ table_columns_visible: percent_duplicates: false "FastQC (trimmed)": percent_duplicates: false + "FastQC (filtered)": + percent_duplicates: false extra_fn_clean_exts: - ".umi_dedup" @@ -130,10 +171,13 @@ extra_fn_clean_exts: - ".markdup" - "_primary" - ".namesorted" + - ".umi_extract" - type: remove pattern: "_raw" - type: remove pattern: "_trimmed" + - type: remove + pattern: "_filtered" # Customise the module search patterns to speed up execution time # - Skip module sub-tools that we are not interested in @@ -147,12 +191,21 @@ sp: fastp: fn: "*.fastp.json" + bbmap/bbsplit: + fn: "*.stats.txt" + sortmerna: fn: "*.sortmerna.log" + bowtie2: + fn: "*.bowtie2.log" + hisat2: fn: "*.hisat2.summary.log" + seqkit/stats: + fn: "*.rrna_removal_stats.tsv" + salmon/meta: fn: "meta_info.json" @@ -168,6 +221,17 @@ sp: kraken: - fn: "*.kraken2.report.txt" - fn: "*.kraken2.report_bracken.txt" + sylphtax: + - fn: "*.sylphmpa" + + umitools/extract: + fn: "*.umi_extract.log" + umitools/dedup: + fn: "*.umi_dedup*.log" + + umicollapse: + fn: "*_UMICollapse.log" + rseqc/bam_stat: fn: "*.bam_stat.txt" rseqc/gene_body_coverage: diff --git a/workflows/rnaseq/main.nf b/workflows/rnaseq/main.nf index 80f6ae605..1b2bf516e 100755 --- a/workflows/rnaseq/main.nf +++ b/workflows/rnaseq/main.nf @@ -7,7 +7,7 @@ // // MODULE: Loaded from modules/local/ // -include { DESEQ2_QC as DESEQ2_QC_STAR_SALMON } from '../../modules/local/deseq2_qc' +include { DESEQ2_QC as DESEQ2_QC_BAM_SALMON } from '../../modules/local/deseq2_qc' include { DESEQ2_QC as DESEQ2_QC_RSEM } from '../../modules/local/deseq2_qc' include { DESEQ2_QC as DESEQ2_QC_PSEUDO } from '../../modules/local/deseq2_qc' include { MULTIQC_CUSTOM_BIOTYPE } from '../../modules/local/multiqc_custom_biotype' @@ -16,9 +16,9 @@ include { MULTIQC_CUSTOM_BIOTYPE } from '../../modules/local/multiqc // SUBWORKFLOW: Consisting of a mix of local and nf-core/modules // include { ALIGN_STAR } from '../../subworkflows/local/align_star' -include { QUANTIFY_RSEM } from '../../subworkflows/local/quantify_rsem' -include { BAM_DEDUP_UMI as BAM_DEDUP_UMI_STAR } from '../../subworkflows/nf-core/bam_dedup_umi' -include { BAM_DEDUP_UMI as BAM_DEDUP_UMI_HISAT2 } from '../../subworkflows/nf-core/bam_dedup_umi' +include { ALIGN_BOWTIE2 } from '../../subworkflows/local/align_bowtie2' +include { QUANTIFY_RSEM } from '../../subworkflows/nf-core/quantify_rsem' +include { BAM_DEDUP_UMI } from '../../subworkflows/nf-core/bam_dedup_umi' include { checkSamplesAfterGrouping } from '../../subworkflows/local/utils_nfcore_rnaseq_pipeline' include { multiqcTsvFromList } from '../../subworkflows/nf-core/fastq_qc_trim_filter_setstrandedness' @@ -43,6 +43,8 @@ include { STRINGTIE_STRINGTIE } from '../../modules/nf-core/stringtie/str include { SUBREAD_FEATURECOUNTS } from '../../modules/nf-core/subread/featurecounts' include { KRAKEN2_KRAKEN2 as KRAKEN2 } from '../../modules/nf-core/kraken2/kraken2/main' include { BRACKEN_BRACKEN as BRACKEN } from '../../modules/nf-core/bracken/bracken/main' +include { SYLPH_PROFILE } from '../../modules/nf-core/sylph/profile/main' +include { SYLPHTAX_TAXPROF } from '../../modules/nf-core/sylphtax/taxprof/main' include { MULTIQC } from '../../modules/nf-core/multiqc' include { BEDTOOLS_GENOMECOV as BEDTOOLS_GENOMECOV_FW } from '../../modules/nf-core/bedtools/genomecov' include { BEDTOOLS_GENOMECOV as BEDTOOLS_GENOMECOV_REV } from '../../modules/nf-core/bedtools/genomecov' @@ -61,7 +63,7 @@ include { BAM_MARKDUPLICATES_PICARD } from '../../subworkflows/nf-core/ba include { BAM_RSEQC } from '../../subworkflows/nf-core/bam_rseqc' include { BEDGRAPH_BEDCLIP_BEDGRAPHTOBIGWIG as BEDGRAPH_BEDCLIP_BEDGRAPHTOBIGWIG_FORWARD } from '../../subworkflows/nf-core/bedgraph_bedclip_bedgraphtobigwig' include { BEDGRAPH_BEDCLIP_BEDGRAPHTOBIGWIG as BEDGRAPH_BEDCLIP_BEDGRAPHTOBIGWIG_REVERSE } from '../../subworkflows/nf-core/bedgraph_bedclip_bedgraphtobigwig' -include { QUANTIFY_PSEUDO_ALIGNMENT as QUANTIFY_STAR_SALMON } from '../../subworkflows/nf-core/quantify_pseudo_alignment' +include { QUANTIFY_PSEUDO_ALIGNMENT as QUANTIFY_BAM_SALMON } from '../../subworkflows/nf-core/quantify_pseudo_alignment' include { QUANTIFY_PSEUDO_ALIGNMENT } from '../../subworkflows/nf-core/quantify_pseudo_alignment' include { FASTQ_QC_TRIM_FILTER_SETSTRANDEDNESS } from '../../subworkflows/nf-core/fastq_qc_trim_filter_setstrandedness' @@ -71,46 +73,68 @@ include { FASTQ_QC_TRIM_FILTER_SETSTRANDEDNESS } from '../../subwor ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ -// Header files for MultiQC -ch_pca_header_multiqc = file("$projectDir/workflows/rnaseq/assets/multiqc/deseq2_pca_header.txt", checkIfExists: true) -sample_status_header_multiqc = file("$projectDir/workflows/rnaseq/assets/multiqc/sample_status_header.txt", checkIfExists: true) -ch_clustering_header_multiqc = file("$projectDir/workflows/rnaseq/assets/multiqc/deseq2_clustering_header.txt", checkIfExists: true) -ch_biotypes_header_multiqc = file("$projectDir/workflows/rnaseq/assets/multiqc/biotypes_header.txt", checkIfExists: true) -ch_dummy_file = ch_pca_header_multiqc - workflow RNASEQ { take: - ch_samplesheet // channel: path(sample_sheet.csv) - ch_versions // channel: [ path(versions.yml) ] - ch_fasta // channel: path(genome.fasta) - ch_gtf // channel: path(genome.gtf) - ch_fai // channel: path(genome.fai) - ch_chrom_sizes // channel: path(genome.sizes) - ch_gene_bed // channel: path(gene.bed) - ch_transcript_fasta // channel: path(transcript.fasta) - ch_star_index // channel: path(star/index/) - ch_rsem_index // channel: path(rsem/index/) - ch_hisat2_index // channel: path(hisat2/index/) - ch_salmon_index // channel: path(salmon/index/) - ch_kallisto_index // channel: [ meta, path(kallisto/index/) ] - ch_bbsplit_index // channel: path(bbsplit/index/) - ch_ribo_db // channel: path(sortmerna_fasta_list) - ch_sortmerna_index // channel: path(sortmerna/index/) - ch_splicesites // channel: path(genome.splicesites.txt) + ch_samplesheet // channel: path(sample_sheet.csv) + ch_versions // channel: [ path(versions.yml) ] + ch_fasta // channel: path(genome.fasta) + ch_gtf // channel: path(genome.gtf) + ch_fai // channel: path(genome.fai) + ch_chrom_sizes // channel: path(genome.sizes) + ch_gene_bed // channel: path(gene.bed) + ch_transcript_fasta // channel: path(transcript.fasta) + ch_star_index // channel: path(star/index/) + ch_rsem_index // channel: path(rsem/index/) + ch_hisat2_index // channel: path(hisat2/index/) + ch_bowtie2_index // channel: path(bowtie2/index/) for alignment + ch_salmon_index // channel: path(salmon/index/) + ch_kallisto_index // channel: [ meta, path(kallisto/index/) ] + ch_bbsplit_index // channel: path(bbsplit/index/) + ch_ribo_db // channel: path(sortmerna_fasta_list) + ch_sortmerna_index // channel: path(sortmerna/index/) + ch_bowtie2_rrna_index // channel: path(bowtie2/index/) for rRNA removal + ch_splicesites // channel: path(genome.splicesites.txt) main: - ch_multiqc_files = Channel.empty() - ch_trim_status = Channel.empty() - ch_map_status = Channel.empty() - ch_strand_status = Channel.empty() - ch_percent_mapped = Channel.empty() + // Header files for MultiQC + def ch_pca_header_multiqc = file("$projectDir/workflows/rnaseq/assets/multiqc/deseq2_pca_header.txt", checkIfExists: true) + def sample_status_header_multiqc = file("$projectDir/workflows/rnaseq/assets/multiqc/sample_status_header.txt", checkIfExists: true) + def ch_clustering_header_multiqc = file("$projectDir/workflows/rnaseq/assets/multiqc/deseq2_clustering_header.txt", checkIfExists: true) + def ch_biotypes_header_multiqc = file("$projectDir/workflows/rnaseq/assets/multiqc/biotypes_header.txt", checkIfExists: true) + def ch_transcript_fasta_placeholder = ch_pca_header_multiqc + + ch_multiqc_files = channel.empty() + ch_trim_status = channel.empty() + ch_map_status = channel.empty() + ch_strand_status = channel.empty() + ch_percent_mapped = channel.empty() + + // + // Collect versions from topic channel (for modules that emit versions via topics) + // + def topic_versions = channel.topic('versions') + .distinct() + .branch { entry -> + versions_file: entry instanceof Path + versions_tuple: true + } + + def topic_versions_string = topic_versions.versions_tuple + .map { process, tool, version -> + [ process[process.lastIndexOf(':')+1..-1], " ${tool}: ${version}" ] + } + .groupTuple(by: 0) + .map { process, tool_versions -> + tool_versions.unique().sort() + "${process}:\n${tool_versions.join('\n')}" + } // // Create channel from input file provided through params.input // - Channel + channel .fromList(samplesheetToList(params.input, "${projectDir}/assets/schema_input.json")) .map { meta, fastq_1, fastq_2, genome_bam, transcriptome_bam -> @@ -129,28 +153,27 @@ workflow RNASEQ { bam: params.skip_alignment && (genome_bam || transcriptome_bam) return [ meta, genome_bam, transcriptome_bam ] fastq: reads.size() > 0 && reads[0] - return [ meta.findAll {it.key != 'percent_mapped'}, reads ] + return [ meta.findAll { key, _value -> key != 'percent_mapped' }, reads ] } .set { ch_input_branched } // Get inputs for FASTQ and BAM processing paths ch_fastq = ch_input_branched.fastq - ch_genome_bam = ch_input_branched.bam.map { meta, genome_bam, transcriptome_bam -> [ meta, genome_bam ] }.distinct() - ch_transcriptome_bam = ch_input_branched.bam.map { meta, genome_bam, transcriptome_bam -> [ meta, transcriptome_bam ] }.distinct() + ch_genome_bam = ch_input_branched.bam.map { meta, genome_bam, _transcriptome_bam -> [ meta, genome_bam ] }.distinct() + ch_transcriptome_bam = ch_input_branched.bam.map { meta, _genome_bam, transcriptome_bam -> [ meta, transcriptome_bam ] }.distinct() // Derive mapping percentages if supplied with input ch_percent_mapped = ch_input_branched.bam - .filter{ meta, genome_bam, transcriptome_bam -> meta.percent_mapped } - .map { meta, genome_bam, transcriptome_bam -> [ meta, meta.percent_mapped ] } + .filter{ meta, _genome_bam, _transcriptome_bam -> meta.percent_mapped } + .map { meta, _genome_bam, _transcriptome_bam -> [ meta, meta.percent_mapped ] } // Index pre-aligned input BAM files SAMTOOLS_INDEX ( ch_genome_bam ) ch_genome_bam_index = params.bam_csi_index ? SAMTOOLS_INDEX.out.csi : SAMTOOLS_INDEX.out.bai - ch_versions = ch_versions.mix(SAMTOOLS_INDEX.out.versions.first()) // // Run RNA-seq FASTQ preprocessing subworkflow @@ -160,35 +183,42 @@ workflow RNASEQ { // samples, and if we haven't already made one elsewhere salmon_index_available = params.salmon_index || (!params.skip_pseudo_alignment && params.pseudo_aligner == 'salmon') + // Determine if we need to build rRNA removal indexes + def make_sortmerna_index = !params.sortmerna_index && params.remove_ribo_rna && params.ribo_removal_tool == 'sortmerna' + def make_bowtie2_index = params.remove_ribo_rna && params.ribo_removal_tool == 'bowtie2' + FASTQ_QC_TRIM_FILTER_SETSTRANDEDNESS ( - ch_fastq, - ch_fasta, - ch_transcript_fasta, - ch_gtf, - ch_salmon_index, - ch_sortmerna_index, - ch_bbsplit_index, - ch_ribo_db, - params.skip_bbsplit || ! params.fasta, - params.skip_fastqc || params.skip_qc, - params.skip_trimming, - params.skip_umi_extract, - !salmon_index_available, - false, - params.trimmer, - params.min_trimmed_reads, - params.save_trimmed, - params.remove_ribo_rna, - params.with_umi, - params.umi_discard_read, - params.stranded_threshold, - params.unstranded_threshold, - params.skip_linting, - false + ch_fastq, // ch_reads + ch_fasta, // ch_fasta + ch_transcript_fasta, // ch_transcript_fasta + ch_gtf, // ch_gtf + ch_salmon_index, // ch_salmon_index + ch_sortmerna_index, // ch_sortmerna_index + ch_bowtie2_rrna_index, // ch_bowtie2_index (for rRNA removal) + ch_bbsplit_index, // ch_bbsplit_index + ch_ribo_db, // ch_rrna_fastas + params.skip_bbsplit || !params.fasta, // skip_bbsplit + params.skip_fastqc || params.skip_qc, // skip_fastqc + params.skip_trimming, // skip_trimming + params.skip_umi_extract, // skip_umi_extract + params.skip_linting, // skip_linting + !salmon_index_available, // make_salmon_index + make_sortmerna_index, // make_sortmerna_index + make_bowtie2_index, // make_bowtie2_index + params.trimmer, // trimmer + params.min_trimmed_reads, // min_trimmed_reads + params.save_trimmed, // save_trimmed + false, // fastp_merge + params.remove_ribo_rna, // remove_ribo_rna + params.ribo_removal_tool, // ribo_removal_tool + params.with_umi, // with_umi + params.umi_discard_read, // umi_discard_read + params.save_merged_fastq, // save_merged_fastq + params.stranded_threshold, // stranded_threshold + params.unstranded_threshold // unstranded_threshold ) ch_multiqc_files = ch_multiqc_files.mix(FASTQ_QC_TRIM_FILTER_SETSTRANDEDNESS.out.multiqc_files) - ch_versions = ch_versions.mix(FASTQ_QC_TRIM_FILTER_SETSTRANDEDNESS.out.versions) ch_strand_inferred_filtered_fastq = FASTQ_QC_TRIM_FILTER_SETSTRANDEDNESS.out.reads ch_trim_read_count = FASTQ_QC_TRIM_FILTER_SETSTRANDEDNESS.out.trim_read_count @@ -201,8 +231,8 @@ workflow RNASEQ { // // SUBWORKFLOW: Alignment with STAR and gene/transcript quantification with Salmon // - ch_star_log = Channel.empty() - ch_unaligned_sequences = Channel.empty() + ch_star_log = channel.empty() + ch_unaligned_sequences = channel.empty() if (!params.skip_alignment && (params.aligner == 'star_salmon' || params.aligner == 'star_rsem')) { // Check if an AWS iGenome has been provided to use the appropriate version of STAR @@ -215,14 +245,14 @@ workflow RNASEQ { ALIGN_STAR ( ch_strand_inferred_filtered_fastq, - ch_star_index.map { [ [:], it ] }, - ch_gtf.map { [ [:], it ] }, + ch_star_index.map { item -> [ [:], item ] }, + ch_gtf.map { item -> [ [:], item ] }, params.star_ignore_sjdbgtf, - '', - params.seq_center ?: '', is_aws_igenome, - ch_fasta.map { [ [:], it ] }, - params.use_sentieon_star + ch_fasta.map { item -> [ [:], item ] }, + params.use_sentieon_star, + params.use_parabricks_star, + params.skip_markduplicates ) ch_genome_bam = ch_genome_bam.mix(ALIGN_STAR.out.bam) @@ -232,59 +262,125 @@ workflow RNASEQ { ch_unprocessed_bams = ch_genome_bam.join(ch_transcriptome_bam) ch_star_log = ALIGN_STAR.out.log_final ch_unaligned_sequences = ALIGN_STAR.out.fastq - ch_multiqc_files = ch_multiqc_files.mix(ch_star_log.collect{it[1]}) + ch_multiqc_files = ch_multiqc_files.mix(ch_star_log.collect{ _meta, log -> log }) - ch_versions = ch_versions.mix(ALIGN_STAR.out.versions) + if (!params.with_umi && (params.skip_markduplicates || params.use_parabricks_star)) { + // The deduplicated stats should take priority for MultiQC, but use + // them straight out of the aligner otherwise. If mark duplicates + // will run, those stats will be added later instead to avoid + // duplicate flagstat files in MultiQC. + // When Parabricks handles markduplicates internally, Picard is + // skipped, so we also need to add alignment stats here. - // - // SUBWORKFLOW: Remove duplicate reads from BAM file based on UMIs - // - if (params.with_umi) { - - BAM_DEDUP_UMI_STAR( - ch_genome_bam.join(ch_genome_bam_index, by: [0]), - ch_fasta.map { [ [:], it ] }, - params.umi_dedup_tool, - params.umitools_dedup_stats, - params.bam_csi_index, - ch_transcriptome_bam, - ch_transcript_fasta.map { [ [:], it ] } - ) + ch_multiqc_files = ch_multiqc_files + .mix(ALIGN_STAR.out.stats.collect{ _meta, stats -> stats }) + .mix(ALIGN_STAR.out.flagstat.collect{ _meta, flagstat -> flagstat }) + .mix(ALIGN_STAR.out.idxstats.collect{ _meta, idxstats -> idxstats }) + } + } - ch_genome_bam = BAM_DEDUP_UMI_STAR.out.bam - ch_transcriptome_bam = BAM_DEDUP_UMI_STAR.out.transcriptome_bam - ch_genome_bam_index = BAM_DEDUP_UMI_STAR.out.bai - ch_versions = ch_versions.mix(BAM_DEDUP_UMI_STAR.out.versions) + // + // SUBWORKFLOW: Alignment with Bowtie2 + // + ch_bowtie2_log = channel.empty() + if (!params.skip_alignment && params.aligner == 'bowtie2_salmon') { + ALIGN_BOWTIE2 ( + ch_strand_inferred_filtered_fastq, + ch_bowtie2_index, + ch_fasta.map { item -> [ [:], item ] } + ) + + // For Bowtie2+Salmon, the BAM is aligned to transcriptome so it's the "transcriptome_bam" + // Use orig_bam (query-grouped) for Salmon - coordinate-sorted BAM breaks paired-end quantification + ch_genome_bam = ch_genome_bam.mix(ALIGN_BOWTIE2.out.bam) + ch_genome_bam_index = ch_genome_bam_index.mix(params.bam_csi_index ? ALIGN_BOWTIE2.out.csi : ALIGN_BOWTIE2.out.bai) + ch_transcriptome_bam = ch_transcriptome_bam.mix(ALIGN_BOWTIE2.out.orig_bam) + ch_percent_mapped = ch_percent_mapped.mix(ALIGN_BOWTIE2.out.percent_mapped) + ch_unprocessed_bams = ch_genome_bam.map { meta, bam -> [ meta, bam, '' ] } + ch_bowtie2_log = ALIGN_BOWTIE2.out.log_final + ch_multiqc_files = ch_multiqc_files.mix(ch_bowtie2_log.collect{ _meta, log -> log }) + + if (!params.with_umi && params.skip_markduplicates) { ch_multiqc_files = ch_multiqc_files - .mix(BAM_DEDUP_UMI_STAR.out.multiqc_files) + .mix(ALIGN_BOWTIE2.out.stats.collect{ _meta, stats -> stats }) + .mix(ALIGN_BOWTIE2.out.flagstat.collect{ _meta, flagstat -> flagstat }) + .mix(ALIGN_BOWTIE2.out.idxstats.collect{ _meta, idxstats -> idxstats }) + } + } - } else if (params.skip_markduplicates) { + // + // SUBWORKFLOW: Alignment with HISAT2 + // + if (!params.skip_alignment && params.aligner == 'hisat2') { + FASTQ_ALIGN_HISAT2 ( + ch_strand_inferred_filtered_fastq, + ch_hisat2_index.map { item -> [ [:], item ] }, + ch_splicesites.map { item -> [ [:], item ] }, + ch_fasta.map { item -> [ [:], item ] }, + params.save_unaligned || params.contaminant_screening + ) + ch_genome_bam = ch_genome_bam.mix(FASTQ_ALIGN_HISAT2.out.bam) + ch_genome_bam_index = ch_genome_bam_index.mix(params.bam_csi_index ? FASTQ_ALIGN_HISAT2.out.csi : FASTQ_ALIGN_HISAT2.out.bai) + ch_unprocessed_bams = ch_genome_bam.map { meta, bam -> [ meta, bam, '' ] } + ch_unaligned_sequences = FASTQ_ALIGN_HISAT2.out.fastq + ch_multiqc_files = ch_multiqc_files.mix(FASTQ_ALIGN_HISAT2.out.summary.collect{ _meta, summary -> summary }) + + if (!params.with_umi && params.skip_markduplicates) { // The deduplicated stats should take priority for MultiQC, but use // them straight out of the aligner otherwise. If mark duplicates // will run, those stats will be added later instead to avoid // duplicate flagstat files in MultiQC. - ch_multiqc_files = ch_multiqc_files - .mix(ALIGN_STAR.out.stats.collect{it[1]}) - .mix(ALIGN_STAR.out.flagstat.collect{it[1]}) - .mix(ALIGN_STAR.out.idxstats.collect{it[1]}) + .mix(FASTQ_ALIGN_HISAT2.out.stats.collect{ _meta, stats -> stats }) + .mix(FASTQ_ALIGN_HISAT2.out.flagstat.collect{ _meta, flagstat -> flagstat }) + .mix(FASTQ_ALIGN_HISAT2.out.idxstats.collect{ _meta, idxstats -> idxstats }) } } + // + // SUBWORKFLOW: Remove duplicate reads from BAM file based on UMIs + // + if (!params.skip_alignment && params.with_umi) { + + BAM_DEDUP_UMI( + ch_genome_bam.join(ch_genome_bam_index, by: [0]), + ch_fasta.map { item -> [ [:], item ] }, + params.umi_dedup_tool, + params.umitools_dedup_stats, + params.bam_csi_index, + ch_transcriptome_bam, + ch_transcript_fasta.map { item -> [ [:], item ] } + ) + + ch_genome_bam = BAM_DEDUP_UMI.out.bam + ch_transcriptome_bam = BAM_DEDUP_UMI.out.transcriptome_bam + ch_genome_bam_index = BAM_DEDUP_UMI.out.bai + + ch_multiqc_files = ch_multiqc_files + .mix(BAM_DEDUP_UMI.out.multiqc_files) + } + + // + // Quantification + // if (params.aligner == 'star_rsem') { QUANTIFY_RSEM ( + ch_samplesheet.map { item -> [ [:], item ] }, ch_transcriptome_bam, ch_rsem_index, + ch_gtf, + params.gtf_group_features, + params.gtf_extra_attributes, params.use_sentieon_star ) - ch_multiqc_files = ch_multiqc_files.mix(QUANTIFY_RSEM.out.stat.collect{it[1]}) + ch_multiqc_files = ch_multiqc_files.mix(QUANTIFY_RSEM.out.stat.collect{ _meta, stat -> stat }) ch_versions = ch_versions.mix(QUANTIFY_RSEM.out.versions) if (!params.skip_qc & !params.skip_deseq2_qc) { DESEQ2_QC_RSEM ( - QUANTIFY_RSEM.out.merged_counts_gene, + QUANTIFY_RSEM.out.counts_gene_length_scaled.map { _meta, counts -> counts }, ch_pca_header_multiqc, ch_clustering_header_multiqc ) @@ -293,15 +389,15 @@ workflow RNASEQ { ch_versions = ch_versions.mix(DESEQ2_QC_RSEM.out.versions) } - } else if (params.aligner == 'star_salmon') { + } else if (params.aligner in ['star_salmon', 'bowtie2_salmon']) { // // SUBWORKFLOW: Count reads from BAM alignments using Salmon // - QUANTIFY_STAR_SALMON ( - ch_samplesheet.map { [ [:], it ] }, + QUANTIFY_BAM_SALMON ( + ch_samplesheet.map { item -> [ [:], item ] }, ch_transcriptome_bam, - ch_dummy_file, + ch_transcript_fasta_placeholder, ch_transcript_fasta, ch_gtf, params.gtf_group_features, @@ -312,70 +408,17 @@ workflow RNASEQ { params.kallisto_quant_fraglen, params.kallisto_quant_fraglen_sd ) - ch_versions = ch_versions.mix(QUANTIFY_STAR_SALMON.out.versions) + ch_versions = ch_versions.mix(QUANTIFY_BAM_SALMON.out.versions) if (!params.skip_qc & !params.skip_deseq2_qc) { - DESEQ2_QC_STAR_SALMON ( - QUANTIFY_STAR_SALMON.out.counts_gene_length_scaled.map { it[1] }, + DESEQ2_QC_BAM_SALMON ( + QUANTIFY_BAM_SALMON.out.counts_gene_length_scaled.map { _meta, counts -> counts }, ch_pca_header_multiqc, ch_clustering_header_multiqc ) - ch_multiqc_files = ch_multiqc_files.mix(DESEQ2_QC_STAR_SALMON.out.pca_multiqc.collect()) - ch_multiqc_files = ch_multiqc_files.mix(DESEQ2_QC_STAR_SALMON.out.dists_multiqc.collect()) - ch_versions = ch_versions.mix(DESEQ2_QC_STAR_SALMON.out.versions) - } - } - - // - // SUBWORKFLOW: Alignment with HISAT2 - // - if (!params.skip_alignment && params.aligner == 'hisat2') { - FASTQ_ALIGN_HISAT2 ( - ch_strand_inferred_filtered_fastq, - ch_hisat2_index.map { [ [:], it ] }, - ch_splicesites.map { [ [:], it ] }, - ch_fasta.map { [ [:], it ] } - ) - ch_genome_bam = ch_genome_bam.mix(FASTQ_ALIGN_HISAT2.out.bam) - ch_genome_bam_index = ch_genome_bam_index.mix(params.bam_csi_index ? FASTQ_ALIGN_HISAT2.out.csi : FASTQ_ALIGN_HISAT2.out.bai) - ch_unprocessed_bams = ch_genome_bam.map { meta, bam -> [ meta, bam, '' ] } - ch_unaligned_sequences = FASTQ_ALIGN_HISAT2.out.fastq - ch_multiqc_files = ch_multiqc_files.mix(FASTQ_ALIGN_HISAT2.out.summary.collect{it[1]}) - - ch_versions = ch_versions.mix(FASTQ_ALIGN_HISAT2.out.versions) - - // - // SUBWORKFLOW: Remove duplicate reads from BAM file based on UMIs - // - - if (params.with_umi) { - - BAM_DEDUP_UMI_HISAT2( - ch_genome_bam.join(ch_genome_bam_index, by: [0]), - ch_fasta.map { [ [:], it ] }, - params.umi_dedup_tool, - params.umitools_dedup_stats, - params.bam_csi_index, - ch_transcriptome_bam, - ch_transcript_fasta.map { [ [:], it ] } - ) - - ch_genome_bam = BAM_DEDUP_UMI_HISAT2.out.bam - ch_genome_bam_index = BAM_DEDUP_UMI_HISAT2.out.bai - ch_versions = ch_versions.mix(BAM_DEDUP_UMI_HISAT2.out.versions) - - ch_multiqc_files = ch_multiqc_files - .mix(BAM_DEDUP_UMI_HISAT2.out.multiqc_files) - } else if (params.skip_markduplicates) { - - // The deduplicated stats should take priority for MultiQC, but use - // them straight out of the aligner otherwise. If mark duplicates - // will run, those stats will be added later instead to avoid - // duplicate flagstat files in MultiQC. - ch_multiqc_files = ch_multiqc_files - .mix(FASTQ_ALIGN_HISAT2.out.stats.collect{it[1]}) - .mix(FASTQ_ALIGN_HISAT2.out.flagstat.collect{it[1]}) - .mix(FASTQ_ALIGN_HISAT2.out.idxstats.collect{it[1]}) + ch_multiqc_files = ch_multiqc_files.mix(DESEQ2_QC_BAM_SALMON.out.pca_multiqc.collect()) + ch_multiqc_files = ch_multiqc_files.mix(DESEQ2_QC_BAM_SALMON.out.dists_multiqc.collect()) + ch_versions = ch_versions.mix(DESEQ2_QC_BAM_SALMON.out.versions) } } @@ -402,12 +445,12 @@ workflow RNASEQ { // Save mapping status for workflow summary where present ch_map_status = ch_genome_bam_bai_mapping.status - .filter { id, pass -> pass != null } + .filter { _id, pass -> pass != null } // Save status for MultiQC report ch_fail_mapping_multiqc = ch_genome_bam_bai_mapping.percent_mapped_pass - .filter { id, percent_mapped, pass -> pass != null && !pass } - .map { id, percent_mapped, pass -> [ "${id}\t${percent_mapped}" ] } + .filter { _id, _percent_mapped, pass -> pass != null && !pass } + .map { id, percent_mapped, _pass -> [ "${id}\t${percent_mapped}" ] } .collect() .map { tsv_data -> @@ -421,8 +464,8 @@ workflow RNASEQ { // Where a percent mapping is present, use it to filter bam and index map_filtered_genome_bam_bai = ch_genome_bam_bai_mapping.bam - .filter { meta, bam, index, pass -> pass || pass == null } - .multiMap { meta, bam, index, pass -> + .filter { _meta, _bam, _index, pass -> pass || pass == null } + .multiMap { meta, bam, index, _pass -> bam: [ meta, bam ] index: [ meta, index ] } @@ -437,27 +480,27 @@ workflow RNASEQ { PRESEQ_LCEXTRAP ( ch_genome_bam ) - ch_multiqc_files = ch_multiqc_files.mix(PRESEQ_LCEXTRAP.out.lc_extrap.collect{it[1]}) - ch_versions = ch_versions.mix(PRESEQ_LCEXTRAP.out.versions.first()) + ch_multiqc_files = ch_multiqc_files.mix(PRESEQ_LCEXTRAP.out.lc_extrap.collect{ _meta, lc_extrap -> lc_extrap }) } // // SUBWORKFLOW: Mark duplicate reads // - if (!params.skip_markduplicates && !params.with_umi) { + + // Some tools (Ex. Parabricks) may have already run marked duplicates during alignment + def markdups_done = !params.skip_markduplicates && params.use_parabricks_star + if (!params.skip_markduplicates && !params.with_umi && !markdups_done) { BAM_MARKDUPLICATES_PICARD ( ch_genome_bam, - ch_fasta.map { [ [:], it ] }, - ch_fai.map { [ [:], it ] } + ch_fasta.map { item -> [ [:], item ] }, + ch_fai.map { item -> [ [:], item ] } ) ch_genome_bam = BAM_MARKDUPLICATES_PICARD.out.bam ch_genome_bam_index = params.bam_csi_index ? BAM_MARKDUPLICATES_PICARD.out.csi : BAM_MARKDUPLICATES_PICARD.out.bai - ch_multiqc_files = ch_multiqc_files.mix(BAM_MARKDUPLICATES_PICARD.out.stats.collect{it[1]}) - ch_multiqc_files = ch_multiqc_files.mix(BAM_MARKDUPLICATES_PICARD.out.flagstat.collect{it[1]}) - ch_multiqc_files = ch_multiqc_files.mix(BAM_MARKDUPLICATES_PICARD.out.idxstats.collect{it[1]}) - ch_multiqc_files = ch_multiqc_files.mix(BAM_MARKDUPLICATES_PICARD.out.metrics.collect{it[1]}) - - ch_versions = ch_versions.mix(BAM_MARKDUPLICATES_PICARD.out.versions) + ch_multiqc_files = ch_multiqc_files.mix(BAM_MARKDUPLICATES_PICARD.out.stats.collect{ _meta, stats -> stats }) + ch_multiqc_files = ch_multiqc_files.mix(BAM_MARKDUPLICATES_PICARD.out.flagstat.collect{ _meta, flagstat -> flagstat }) + ch_multiqc_files = ch_multiqc_files.mix(BAM_MARKDUPLICATES_PICARD.out.idxstats.collect{ _meta, idxstats -> idxstats }) + ch_multiqc_files = ch_multiqc_files.mix(BAM_MARKDUPLICATES_PICARD.out.metrics.collect{ _meta, metrics -> metrics }) } // @@ -468,7 +511,6 @@ workflow RNASEQ { ch_genome_bam, ch_gtf ) - ch_versions = ch_versions.mix(STRINGTIE_STRINGTIE.out.versions.first()) } // @@ -478,28 +520,26 @@ workflow RNASEQ { if (!params.skip_qc && !params.skip_biotype_qc && biotype) { ch_gtf - .map { biotypeInGtf(it, biotype) } + .map { gtf -> biotypeInGtf(gtf, biotype) } .set { biotype_in_gtf } // Prevent any samples from running if GTF file doesn't have a valid biotype ch_genome_bam .combine(ch_gtf) .combine(biotype_in_gtf) - .filter { it[-1] } - .map { it[0.. biotype_ok } + .map { meta, bam, gtf, _biotype_ok -> [ meta, bam, gtf ] } .set { ch_featurecounts } SUBREAD_FEATURECOUNTS ( ch_featurecounts ) - ch_versions = ch_versions.mix(SUBREAD_FEATURECOUNTS.out.versions.first()) MULTIQC_CUSTOM_BIOTYPE ( SUBREAD_FEATURECOUNTS.out.counts, ch_biotypes_header_multiqc ) - ch_multiqc_files = ch_multiqc_files.mix(MULTIQC_CUSTOM_BIOTYPE.out.tsv.collect{it[1]}) - ch_versions = ch_versions.mix(MULTIQC_CUSTOM_BIOTYPE.out.versions.first()) + ch_multiqc_files = ch_multiqc_files.mix(MULTIQC_CUSTOM_BIOTYPE.out.tsv.collect{ _meta, tsv -> tsv }) } // @@ -523,8 +563,6 @@ workflow RNASEQ { true ) - ch_versions = ch_versions.mix(BEDTOOLS_GENOMECOV_FW.out.versions.first()) - // // SUBWORKFLOW: Convert bedGraph to bigWig // @@ -532,7 +570,6 @@ workflow RNASEQ { BEDTOOLS_GENOMECOV_FW.out.genomecov, ch_chrom_sizes ) - ch_versions = ch_versions.mix(BEDGRAPH_BEDCLIP_BEDGRAPHTOBIGWIG_FORWARD.out.versions) BEDGRAPH_BEDCLIP_BEDGRAPHTOBIGWIG_REVERSE ( BEDTOOLS_GENOMECOV_REV.out.genomecov, @@ -548,31 +585,30 @@ workflow RNASEQ { // Sort BAM by name for qualimap (performance optimization) SAMTOOLS_SORT_QUALIMAP ( ch_genome_bam, - ch_fasta.map { [ [:], it ] } + ch_fasta.map { item -> [ [:], item ] }, + '' ) - ch_versions = ch_versions.mix(SAMTOOLS_SORT_QUALIMAP.out.versions.first()) QUALIMAP_RNASEQ ( SAMTOOLS_SORT_QUALIMAP.out.bam, - ch_gtf.map { [ [:], it ] } + ch_gtf.map { item -> [ [:], item ] } ) - ch_multiqc_files = ch_multiqc_files.mix(QUALIMAP_RNASEQ.out.results.collect{it[1]}) - ch_versions = ch_versions.mix(QUALIMAP_RNASEQ.out.versions.first()) + ch_multiqc_files = ch_multiqc_files.mix(QUALIMAP_RNASEQ.out.results.collect{ _meta, results -> results }) } if (!params.skip_dupradar) { DUPRADAR ( ch_genome_bam, - ch_gtf.map { [ [:], it ] } + ch_gtf.map { item -> [ [:], item ] } ) - ch_multiqc_files = ch_multiqc_files.mix(DUPRADAR.out.multiqc.collect{it[1]}) + ch_multiqc_files = ch_multiqc_files.mix(DUPRADAR.out.multiqc.collect{ _meta, multiqc -> multiqc }) ch_versions = ch_versions.mix(DUPRADAR.out.versions.first()) } // Get RSeqC modules to run - def rseqc_modules = params.rseqc_modules ? params.rseqc_modules.split(',').collect{ it.trim().toLowerCase() } : [] + def rseqc_modules = params.rseqc_modules ? params.rseqc_modules.split(',').collect{ module -> module.trim().toLowerCase() } : [] if (params.bam_csi_index) { - for (rseqc_module in ['read_distribution', 'inner_distance', 'tin']) { + ['read_distribution', 'inner_distance', 'tin'].each { rseqc_module -> if (rseqc_modules.contains(rseqc_module)) { rseqc_modules.remove(rseqc_module) } @@ -580,31 +616,30 @@ workflow RNASEQ { } if (!params.skip_rseqc && rseqc_modules.size() > 0) { BAM_RSEQC ( - ch_genome_bam.join(ch_genome_bam_index, by: [0]), + ch_genome_bam.join(ch_genome_bam_index, by: [0]).map { meta, bam, bai -> [ meta, [ bam, bai ] ] }, ch_gene_bed, rseqc_modules ) - ch_multiqc_files = ch_multiqc_files.mix(BAM_RSEQC.out.bamstat_txt.collect{it[1]}) - ch_multiqc_files = ch_multiqc_files.mix(BAM_RSEQC.out.inferexperiment_txt.collect{it[1]}) - ch_multiqc_files = ch_multiqc_files.mix(BAM_RSEQC.out.innerdistance_freq.collect{it[1]}) - ch_multiqc_files = ch_multiqc_files.mix(BAM_RSEQC.out.junctionannotation_log.collect{it[1]}) - ch_multiqc_files = ch_multiqc_files.mix(BAM_RSEQC.out.junctionsaturation_rscript.collect{it[1]}) - ch_multiqc_files = ch_multiqc_files.mix(BAM_RSEQC.out.readdistribution_txt.collect{it[1]}) - ch_multiqc_files = ch_multiqc_files.mix(BAM_RSEQC.out.readduplication_pos_xls.collect{it[1]}) - ch_multiqc_files = ch_multiqc_files.mix(BAM_RSEQC.out.tin_txt.collect{it[1]}) - ch_versions = ch_versions.mix(BAM_RSEQC.out.versions) + ch_multiqc_files = ch_multiqc_files.mix(BAM_RSEQC.out.bamstat_txt.collect{ _meta, txt -> txt }) + ch_multiqc_files = ch_multiqc_files.mix(BAM_RSEQC.out.inferexperiment_txt.collect{ _meta, txt -> txt }) + ch_multiqc_files = ch_multiqc_files.mix(BAM_RSEQC.out.innerdistance_freq.collect{ _meta, freq -> freq }) + ch_multiqc_files = ch_multiqc_files.mix(BAM_RSEQC.out.junctionannotation_log.collect{ _meta, log -> log }) + ch_multiqc_files = ch_multiqc_files.mix(BAM_RSEQC.out.junctionsaturation_rscript.collect{ _meta, rscript -> rscript }) + ch_multiqc_files = ch_multiqc_files.mix(BAM_RSEQC.out.readdistribution_txt.collect{ _meta, txt -> txt }) + ch_multiqc_files = ch_multiqc_files.mix(BAM_RSEQC.out.readduplication_pos_xls.collect{ _meta, xls -> xls }) + ch_multiqc_files = ch_multiqc_files.mix(BAM_RSEQC.out.tin_txt.collect{ _meta, txt -> txt }) // Compare predicted supplied or Salmon-predicted strand with what we get from RSeQC ch_strand_comparison = BAM_RSEQC.out.inferexperiment_txt .map { meta, strand_log -> def rseqc_inferred_strand = getInferexperimentStrandedness(strand_log, params.stranded_threshold, params.unstranded_threshold) - rseqc_strandedness = rseqc_inferred_strand.inferred_strandedness + def rseqc_strandedness = rseqc_inferred_strand.inferred_strandedness def status = 'fail' def multiqc_lines = [] if (meta.salmon_strand_analysis) { - salmon_strandedness = meta.salmon_strand_analysis.inferred_strandedness + def salmon_strandedness = meta.salmon_strand_analysis.inferred_strandedness if (salmon_strandedness == rseqc_strandedness && rseqc_strandedness != 'undetermined') { status = 'pass' @@ -662,18 +697,32 @@ workflow RNASEQ { params.save_kraken_unassigned ) ch_kraken_reports = KRAKEN2.out.report - ch_versions = ch_versions.mix(KRAKEN2.out.versions) if (params.contaminant_screening == 'kraken2') { - ch_multiqc_files = ch_multiqc_files.mix(KRAKEN2.out.report.collect{it[1]}) + ch_multiqc_files = ch_multiqc_files.mix(KRAKEN2.out.report.collect{ _meta, report -> report }) } else if (params.contaminant_screening == 'kraken2_bracken') { BRACKEN ( ch_kraken_reports, params.kraken_db ) - ch_versions = ch_versions.mix(BRACKEN.out.versions) - ch_multiqc_files = ch_multiqc_files.mix(BRACKEN.out.txt.collect{it[1]}) + ch_multiqc_files = ch_multiqc_files.mix(BRACKEN.out.txt.collect{ _meta, txt -> txt }) } + } else if (params.contaminant_screening == 'sylph') { + def sylph_databases = params.sylph_db ? params.sylph_db.split(',').collect{ path -> file(path.trim()) } : [] + ch_sylph_databases = channel.value(sylph_databases) + SYLPH_PROFILE ( + ch_unaligned_sequences, + ch_sylph_databases + ) + ch_sylph_profile = SYLPH_PROFILE.out.profile_out.filter{ tuple -> !tuple[1].isEmpty() } + + def sylph_taxonomies = params.sylph_taxonomy ? params.sylph_taxonomy.split(',').collect{ path -> file(path.trim()) } : [] + ch_sylph_taxonomies = channel.value(sylph_taxonomies) + SYLPHTAX_TAXPROF ( + ch_sylph_profile, + ch_sylph_taxonomies + ) + ch_multiqc_files = ch_multiqc_files.mix(SYLPHTAX_TAXPROF.out.taxprof_output.collect{ _meta, output -> output }) } } @@ -689,10 +738,10 @@ workflow RNASEQ { } QUANTIFY_PSEUDO_ALIGNMENT ( - ch_samplesheet.map { [ [:], it ] }, + ch_samplesheet.map { item -> [ [:], item ] }, ch_strand_inferred_filtered_fastq, ch_pseudo_index, - ch_dummy_file, + ch_transcript_fasta_placeholder, ch_gtf, params.gtf_group_features, params.gtf_extra_attributes, @@ -703,12 +752,12 @@ workflow RNASEQ { params.kallisto_quant_fraglen_sd ) ch_counts_gene_length_scaled = QUANTIFY_PSEUDO_ALIGNMENT.out.counts_gene_length_scaled - ch_multiqc_files = ch_multiqc_files.mix(QUANTIFY_PSEUDO_ALIGNMENT.out.multiqc.collect{it[1]}) + ch_multiqc_files = ch_multiqc_files.mix(QUANTIFY_PSEUDO_ALIGNMENT.out.multiqc.collect{ _meta, multiqc -> multiqc }) ch_versions = ch_versions.mix(QUANTIFY_PSEUDO_ALIGNMENT.out.versions) if (!params.skip_qc & !params.skip_deseq2_qc) { DESEQ2_QC_PSEUDO ( - ch_counts_gene_length_scaled.map { it[1] }, + ch_counts_gene_length_scaled.map { _meta, counts -> counts }, ch_pca_header_multiqc, ch_clustering_header_multiqc ) @@ -720,32 +769,33 @@ workflow RNASEQ { // // Collate and save software versions + // Combines traditional versions.yml files with versions emitted via topic channels // - softwareVersionsToYAML(ch_versions) + ch_collated_versions = softwareVersionsToYAML(ch_versions.mix(topic_versions.versions_file)) + .mix(topic_versions_string) .collectFile(storeDir: "${params.outdir}/pipeline_info", name: 'nf_core_rnaseq_software_mqc_versions.yml', sort: true, newLine: true) - .set { ch_collated_versions } // // MODULE: MultiQC // - ch_multiqc_report = Channel.empty() + ch_multiqc_report = channel.empty() if (!params.skip_multiqc) { // Load MultiQC configuration files - ch_multiqc_config = Channel.fromPath("$projectDir/workflows/rnaseq/assets/multiqc/multiqc_config.yml", checkIfExists: true) - ch_multiqc_custom_config = params.multiqc_config ? Channel.fromPath(params.multiqc_config) : Channel.empty() - ch_multiqc_logo = params.multiqc_logo ? Channel.fromPath(params.multiqc_logo) : Channel.empty() + ch_multiqc_config = channel.fromPath("$projectDir/workflows/rnaseq/assets/multiqc/multiqc_config.yml", checkIfExists: true) + ch_multiqc_custom_config = params.multiqc_config ? channel.fromPath(params.multiqc_config) : channel.empty() + ch_multiqc_logo = params.multiqc_logo ? channel.fromPath(params.multiqc_logo) : channel.empty() // Prepare the workflow summary - ch_workflow_summary = Channel.value( + ch_workflow_summary = channel.value( paramsSummaryMultiqc( paramsSummaryMap(workflow, parameters_schema: "nextflow_schema.json") ) ).collectFile(name: 'workflow_summary_mqc.yaml') // Prepare the methods section - ch_methods_description = Channel.value( + ch_methods_description = channel.value( methodsDescriptionText( params.multiqc_methods_description ? file(params.multiqc_methods_description) @@ -781,7 +831,7 @@ workflow RNASEQ { } } - return mappings.collect { it.join('\t') } + return mappings.collect { mapping -> mapping.join('\t') } } .flatten() .collectFile(name: 'name_replacement.txt', newLine: true) @@ -802,14 +852,13 @@ workflow RNASEQ { // Generate samplesheet with BAM paths for future runs // - ch_samplesheet_with_bams = Channel.empty() if (!params.skip_alignment && params.save_align_intermeds) { // Create channel with original input info and BAM paths ch_fastq.map { meta, reads -> [ meta.id, meta, reads ] } .join(ch_unprocessed_bams.map { meta, genome_bam, transcriptome_bam -> [ meta.id, meta, genome_bam, transcriptome_bam ] }) .join(ch_percent_mapped) .transpose() - .map { id, fastq_meta, reads, meta, genome_bam, transcriptome_bam, percent_mapped -> + .map { _id, _fastq_meta, reads, meta, genome_bam, transcriptome_bam, percent_mapped -> // Handle BAM paths (same for all runs of this sample) def genome_bam_published = meta.has_genome_bam ? @@ -824,13 +873,16 @@ workflow RNASEQ { def fastq_2 = reads.size() > 1 ? reads[1].toUriString() : '' def mapped = percent_mapped != null ? percent_mapped : '' - return "${meta.id},${fastq_1},${fastq_2},${meta.strandedness},${genome_bam_published},${mapped},${transcriptome_bam_published}" + def seq_platform = meta.seq_platform ?: params.seq_platform ?: '' + def seq_center = meta.seq_center ?: params.seq_center ?: '' + + return "${meta.id},${fastq_1},${fastq_2},${meta.strandedness},${seq_platform},${seq_center},${genome_bam_published},${mapped},${transcriptome_bam_published}" } .collectFile( name: 'samplesheet_with_bams.csv', storeDir: "${params.outdir}/samplesheets", newLine: true, - seed: 'sample,fastq_1,fastq_2,strandedness,genome_bam,percent_mapped,transcriptome_bam' + seed: 'sample,fastq_1,fastq_2,strandedness,seq_platform,seq_center,genome_bam,percent_mapped,transcriptome_bam' ) } diff --git a/workflows/rnaseq/nextflow.config b/workflows/rnaseq/nextflow.config index d6f674c7a..0d4d512ed 100644 --- a/workflows/rnaseq/nextflow.config +++ b/workflows/rnaseq/nextflow.config @@ -10,9 +10,13 @@ includeConfig "../../modules/nf-core/stringtie/stringtie/nextflow.config" includeConfig "../../modules/nf-core/subread/featurecounts/nextflow.config" includeConfig "../../modules/nf-core/kraken2/kraken2/nextflow.config" includeConfig "../../modules/nf-core/bracken/bracken/nextflow.config" +includeConfig "../../modules/nf-core/sylph/profile/nextflow.config" +includeConfig "../../modules/nf-core/sylphtax/taxprof/nextflow.config" includeConfig "../../subworkflows/local/align_star/nextflow.config" -includeConfig "../../subworkflows/local/quantify_rsem/nextflow.config" +includeConfig "../../subworkflows/local/align_bowtie2/nextflow.config" +includeConfig "../../subworkflows/nf-core/quantify_rsem/nextflow.config" includeConfig "../../subworkflows/nf-core/quantify_pseudo_alignment/nextflow.config" +includeConfig "../../subworkflows/nf-core/quant_tximport_summarizedexperiment/nextflow.config" includeConfig "../../subworkflows/nf-core/bam_markduplicates_picard/nextflow.config" includeConfig "../../subworkflows/nf-core/bam_rseqc/nextflow.config" includeConfig "../../subworkflows/nf-core/fastq_align_hisat2/nextflow.config" @@ -22,156 +26,151 @@ includeConfig "../../subworkflows/nf-core/fastq_subsample_fq_salmon/nextflow.con includeConfig "../../subworkflows/nf-core/fastq_qc_trim_filter_setstrandedness/nextflow.config" // -// STAR Salmon alignment options +// BAM-based Salmon quantification options (for star_salmon and bowtie2_salmon aligners) // -if (params.aligner == 'star_salmon') { - process { - withName: '.*:QUANTIFY_STAR_SALMON:SALMON_QUANT' { - ext.args = { params.extra_salmon_quant_args ?: '' } - publishDir = [ - path: { "${params.outdir}/${params.aligner}" }, +process { + withName: '.*:QUANTIFY_BAM_SALMON:SALMON_QUANT' { + ext.args = { params.extra_salmon_quant_args ?: '' } + publishDir = [ + path: { "${params.outdir}/${params.aligner}" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') || filename.endsWith('_meta_info.json') || filename.endsWith('_format_counts.json') ? null : filename } + ] + } + + withName: '.*:QUANTIFY_BAM_SALMON:QUANT_TXIMPORT_SUMMARIZEDEXPERIMENT:(CUSTOM_TX2GENE|TXIMETA_TXIMPORT)' { + publishDir = [ + path: { "${params.outdir}/${params.aligner}" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + + withName: '.*:QUANTIFY_BAM_SALMON:QUANT_TXIMPORT_SUMMARIZEDEXPERIMENT:SE_.*' { + publishDir = [ + path: { "${params.outdir}/${params.aligner}" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') || filename.endsWith('.log') ? null : filename } + ] + } + + // UMI options for star_salmon aligner + + withName: 'NFCORE_RNASEQ:RNASEQ:BAM_DEDUP_UMI:SAMTOOLS_SORT' { + ext.args = '-n' + ext.prefix = { "${meta.id}.umi_dedup.transcriptome" } + publishDir = [ + path: { params.save_align_intermeds || params.save_umi_intermeds ? "${params.outdir}/${params.aligner}" : params.outdir }, + mode: params.publish_dir_mode, + pattern: '*.bam', + saveAs: { filename -> params.save_align_intermeds || params.save_umi_intermeds ? filename : null } + ] + } + + withName: 'NFCORE_RNASEQ:RNASEQ:BAM_DEDUP_UMI:UMITOOLS_PREPAREFORRSEM' { + ext.prefix = { "${meta.id}.umi_dedup.transcriptome.filtered" } + publishDir = [ + [ + path: { "${params.outdir}/${params.aligner}/umitools/prepare_for_quantification_log" }, mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') || filename.endsWith('_meta_info.json') || filename.endsWith('_format_counts.json') ? null : filename } + pattern: '*.log' + ], + [ + path: { params.save_align_intermeds || params.save_umi_intermeds ? "${params.outdir}/${params.aligner}" : params.outdir }, + mode: params.publish_dir_mode, + pattern: '*.bam', + saveAs: { filename -> params.save_align_intermeds || params.save_umi_intermeds ? filename : null } ] - } + ] + } - withName: '.*:QUANTIFY_STAR_SALMON:(CUSTOM_TX2GENE|TXIMETA_TXIMPORT)' { - publishDir = [ - path: { "${params.outdir}/${params.aligner}" }, + withName: 'NFCORE_RNASEQ:RNASEQ:BAM_DEDUP_UMI:BAM_SORT_STATS_SAMTOOLS:SAMTOOLS_SORT' { + ext.prefix = { "${meta.id}.transcriptome.sorted" } + } + + withName: 'NFCORE_RNASEQ:RNASEQ:BAM_DEDUP_UMI:BAM_SORT_STATS_SAMTOOLS:(SAMTOOLS_SORT|SAMTOOLS_INDEX)' { + publishDir = [ + path: { params.save_align_intermeds || params.save_umi_intermeds ? "${params.outdir}/${params.aligner}" : params.outdir }, + mode: params.publish_dir_mode, + pattern: '*.{bam,bai}', + saveAs: { filename -> params.save_align_intermeds || params.save_umi_intermeds ? filename : null } + ] + } + + withName: 'NFCORE_RNASEQ:RNASEQ:BAM_DEDUP_UMI:BAM_SORT_STATS_SAMTOOLS:BAM_STATS_SAMTOOLS:.*' { + ext.prefix = { "${meta.id}.transcriptome.sorted.bam" } + publishDir = [ + path: { params.save_align_intermeds || params.save_umi_intermeds ? "${params.outdir}/${params.aligner}/samtools_stats" : params.outdir }, + mode: params.publish_dir_mode, + pattern: '*.{stats,flagstat,idxstats}', + saveAs: { filename -> params.save_align_intermeds || params.save_umi_intermeds ? filename : null } + ] + } + + // Use the same umi_dedup prefix for umitools and umicollapse + + withName: '.*:BAM_DEDUP_STATS_SAMTOOLS_UMI(COLLAPSE|TOOLS)_TRANSCRIPTOME:UMI(COLLAPSE|TOOLS_DEDUP)' { + ext.prefix = { "${meta.id}.umi_dedup.transcriptome.sorted" } + } + + // Publishing logic for umitools: + + withName: '.*:BAM_DEDUP_STATS_SAMTOOLS_UMITOOLS_TRANSCRIPTOME:UMITOOLS_DEDUP' { + publishDir = [ + [ + path: { params.save_align_intermeds || params.save_umi_intermeds ? "${params.outdir}/${params.aligner}" : params.outdir }, mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + pattern: '*.bam', + saveAs: { filename -> params.save_align_intermeds || params.save_umi_intermeds ? filename : null } + ], + [ + path: { "${params.outdir}/${params.aligner}/umitools/transcriptomic_dedup_log" }, + mode: params.publish_dir_mode, + pattern: '*.log' + ], + [ + path: { "${params.outdir}/${params.aligner}/umitools" }, + mode: params.publish_dir_mode, + pattern: '*.tsv' ] - } + ] + } - withName: '.*:QUANTIFY_STAR_SALMON:SE_.*' { - ext.prefix = { "${params.pseudo_aligner}.merged" } - publishDir = [ - path: { "${params.outdir}/${params.aligner}" }, + // Publishing logic for umicollapse + + withName: '.*:BAM_DEDUP_STATS_SAMTOOLS_UMICOLLAPSE_TRANSCRIPTOME:UMICOLLAPSE' { + publishDir = [ + [ + path: { params.save_align_intermeds || params.save_umi_intermeds ? "${params.outdir}/${params.aligner}" : params.outdir }, + mode: params.publish_dir_mode, + pattern: '*.bam', + saveAs: { filename -> params.save_align_intermeds || params.save_umi_intermeds ? filename : null } + ], + [ + path: { "${params.outdir}/${params.aligner}/umicollapse/transcriptomic_dedup_log" }, mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') || filename.endsWith('.log') ? null : filename } + pattern: '*.log' ] - } - } - - if (params.with_umi) { - process { - withName: 'NFCORE_RNASEQ:RNASEQ:BAM_DEDUP_UMI_STAR:SAMTOOLS_SORT' { - ext.args = '-n' - ext.prefix = { "${meta.id}.umi_dedup.transcriptome" } - publishDir = [ - path: { params.save_align_intermeds || params.save_umi_intermeds ? "${params.outdir}/${params.aligner}" : params.outdir }, - mode: params.publish_dir_mode, - pattern: '*.bam', - saveAs: { params.save_align_intermeds || params.save_umi_intermeds ? it : null } - ] - } - - withName: 'NFCORE_RNASEQ:RNASEQ:BAM_DEDUP_UMI_STAR:UMITOOLS_PREPAREFORRSEM' { - ext.prefix = { "${meta.id}.umi_dedup.transcriptome.filtered" } - publishDir = [ - [ - path: { "${params.outdir}/${params.aligner}/umitools/prepare_for_salmon_log" }, - mode: params.publish_dir_mode, - pattern: '*.log' - ], - [ - path: { params.save_align_intermeds || params.save_umi_intermeds ? "${params.outdir}/${params.aligner}" : params.outdir }, - mode: params.publish_dir_mode, - pattern: '*.bam', - saveAs: { params.save_align_intermeds || params.save_umi_intermeds ? it : null } - ] - ] - } - - withName: 'NFCORE_RNASEQ:RNASEQ:BAM_DEDUP_UMI_STAR:BAM_SORT_STATS_SAMTOOLS:SAMTOOLS_SORT' { - ext.prefix = { "${meta.id}.transcriptome.sorted" } - } - - withName: 'NFCORE_RNASEQ:RNASEQ:BAM_DEDUP_UMI_STAR:BAM_SORT_STATS_SAMTOOLS:(SAMTOOLS_SORT|SAMTOOLS_INDEX)' { - publishDir = [ - path: { params.save_align_intermeds || params.save_umi_intermeds ? "${params.outdir}/${params.aligner}" : params.outdir }, - mode: params.publish_dir_mode, - pattern: '*.{bam,bai}', - saveAs: { params.save_align_intermeds || params.save_umi_intermeds ? it : null } - ] - } - - withName: 'NFCORE_RNASEQ:RNASEQ:BAM_DEDUP_UMI_STAR:BAM_SORT_STATS_SAMTOOLS:BAM_STATS_SAMTOOLS:.*' { - ext.prefix = { "${meta.id}.transcriptome.sorted.bam" } - publishDir = [ - path: { params.save_align_intermeds || params.save_umi_intermeds ? "${params.outdir}/${params.aligner}/samtools_stats" : params.outdir }, - mode: params.publish_dir_mode, - pattern: '*.{stats,flagstat,idxstats}', - saveAs: { params.save_align_intermeds || params.save_umi_intermeds ? it : null } - ] - } - - // Use the same umi_dedup prefix for umitools and umicollapse - - withName: '.*:BAM_DEDUP_STATS_SAMTOOLS_UMI(COLLAPSE|TOOLS)_TRANSCRIPTOME:UMI(COLLAPSE|TOOLS_DEDUP)' { - ext.prefix = { "${meta.id}.umi_dedup.transcriptome.sorted" } - } - - // Publishing logic for umitools: - - withName: '.*:BAM_DEDUP_STATS_SAMTOOLS_UMITOOLS_TRANSCRIPTOME:UMITOOLS_DEDUP' { - publishDir = [ - [ - path: { params.save_align_intermeds || params.save_umi_intermeds ? "${params.outdir}/${params.aligner}" : params.outdir }, - mode: params.publish_dir_mode, - pattern: '*.bam', - saveAs: { params.save_align_intermeds || params.save_umi_intermeds ? it : null } - ], - [ - path: { "${params.outdir}/${params.aligner}/umitools/transcriptomic_dedup_log" }, - mode: params.publish_dir_mode, - pattern: '*.log' - ], - [ - path: { "${params.outdir}/${params.aligner}/umitools" }, - mode: params.publish_dir_mode, - pattern: '*.tsv' - ] - ] - } - - // Publishing logic for umicollapse - - withName: '.*:BAM_DEDUP_STATS_SAMTOOLS_UMICOLLAPSE_TRANSCRIPTOME:UMICOLLAPSE' { - publishDir = [ - [ - path: { params.save_align_intermeds || params.save_umi_intermeds ? "${params.outdir}/${params.aligner}" : params.outdir }, - mode: params.publish_dir_mode, - pattern: '*.bam', - saveAs: { params.save_align_intermeds || params.save_umi_intermeds ? it : null } - ], - [ - path: { "${params.outdir}/${params.aligner}/umicollapse/transcriptomic_dedup_log" }, - mode: params.publish_dir_mode, - pattern: '*.log' - ] - ] - } - - withName: '.*:BAM_DEDUP_STATS_SAMTOOLS_UMI(COLLAPSE|TOOLS)_TRANSCRIPTOME:SAMTOOLS_INDEX' { - publishDir = [ - path: { params.save_align_intermeds || params.save_umi_intermeds ? "${params.outdir}/${params.aligner}" : params.outdir }, - mode: params.publish_dir_mode, - pattern: '*.bai', - saveAs: { params.save_align_intermeds || params.save_umi_intermeds ? it : null } - ] - } - - withName: '.*:BAM_DEDUP_STATS_SAMTOOLS_UMI(COLLAPSE|TOOLS)_TRANSCRIPTOME:BAM_STATS_SAMTOOLS:.*' { - ext.prefix = { "${meta.id}.umi_dedup.transcriptome.sorted.bam" } - publishDir = [ - path: { "${params.outdir}/${params.aligner}/samtools_stats" }, - mode: params.publish_dir_mode, - pattern: '*.{stats,flagstat,idxstats}' - ] - } - } + ] + } + + withName: '.*:BAM_DEDUP_STATS_SAMTOOLS_UMI(COLLAPSE|TOOLS)_TRANSCRIPTOME:SAMTOOLS_INDEX' { + publishDir = [ + path: { params.save_align_intermeds || params.save_umi_intermeds ? "${params.outdir}/${params.aligner}" : params.outdir }, + mode: params.publish_dir_mode, + pattern: '*.bai', + saveAs: { filename -> params.save_align_intermeds || params.save_umi_intermeds ? filename : null } + ] + } + + withName: '.*:BAM_DEDUP_STATS_SAMTOOLS_UMI(COLLAPSE|TOOLS)_TRANSCRIPTOME:BAM_STATS_SAMTOOLS:.*' { + ext.prefix = { "${meta.id}.umi_dedup.transcriptome.sorted.bam" } + publishDir = [ + path: { "${params.outdir}/${params.aligner}/samtools_stats" }, + mode: params.publish_dir_mode, + pattern: '*.{stats,flagstat,idxstats}' + ] } } @@ -202,156 +201,171 @@ process { path: { params.save_align_intermeds || params.skip_markduplicates ? "${params.outdir}/${params.aligner}" : params.outdir }, mode: params.publish_dir_mode, pattern: "*.{bam,bai,csi}", - saveAs: { params.save_align_intermeds || params.skip_markduplicates ? it : null } + saveAs: { filename -> params.save_align_intermeds || params.skip_markduplicates ? filename : null } ] } - withName: '.*:(QUANTIFY_STAR_SALMON|QUANTIFY_PSEUDO_ALIGNMENT):TXIMETA_TXIMPORT' { - ext.prefix = { "${quant_type}.merged" } + // QUANTIFY_BAM_SALMON always uses Salmon (for star_salmon and bowtie2_salmon aligners) + withName: '.*:QUANTIFY_BAM_SALMON:QUANT_TXIMPORT_SUMMARIZEDEXPERIMENT:SE_GENE_UNIFIED' { + ext.prefix = { "salmon.merged.gene" } + } + + withName: '.*:QUANTIFY_BAM_SALMON:QUANT_TXIMPORT_SUMMARIZEDEXPERIMENT:SE_TRANSCRIPT_UNIFIED' { + ext.prefix = { "salmon.merged.transcript" } } - withName: '.*:(QUANTIFY_STAR_SALMON|QUANTIFY_PSEUDO_ALIGNMENT):SE_GENE_UNIFIED' { + // QUANTIFY_PSEUDO_ALIGNMENT uses params.pseudo_aligner (salmon or kallisto) + withName: '.*:QUANTIFY_PSEUDO_ALIGNMENT:QUANT_TXIMPORT_SUMMARIZEDEXPERIMENT:SE_GENE_UNIFIED' { ext.prefix = { "${params.pseudo_aligner}.merged.gene" } } - withName: '.*:(QUANTIFY_STAR_SALMON|QUANTIFY_PSEUDO_ALIGNMENT):SE_TRANSCRIPT_UNIFIED' { + withName: '.*:QUANTIFY_PSEUDO_ALIGNMENT:QUANT_TXIMPORT_SUMMARIZEDEXPERIMENT:SE_TRANSCRIPT_UNIFIED' { ext.prefix = { "${params.pseudo_aligner}.merged.transcript" } } + + // QUANTIFY_RSEM tximport SummarizedExperiment objects + withName: '.*:QUANTIFY_RSEM:QUANT_TXIMPORT_SUMMARIZEDEXPERIMENT:SE_GENE_UNIFIED' { + ext.prefix = { "rsem.merged.gene" } + } + + withName: '.*:QUANTIFY_RSEM:QUANT_TXIMPORT_SUMMARIZEDEXPERIMENT:SE_TRANSCRIPT_UNIFIED' { + ext.prefix = { "rsem.merged.transcript" } + } } -if (params.with_umi && ['star_salmon','hisat2'].contains(params.aligner)) { - process { - - withName: '.*:BAM_DEDUP_STATS_SAMTOOLS_UMITOOLS_(GEN|TRANSCRIPT)OME:UMITOOLS_DEDUP' { - ext.args = { [ - meta.single_end ? '' : '--unpaired-reads=discard --chimeric-pairs=discard', - params.umitools_grouping_method ? "--method='${params.umitools_grouping_method}'" : '', - params.umitools_umi_separator ? "--umi-separator='${params.umitools_umi_separator}'" : '' - ].join(' ').trim() } - } - - withName: '.*:BAM_DEDUP_STATS_SAMTOOLS_UMICOLLAPSE_(GEN|TRANSCRIPT)OME:UMICOLLAPSE' { - ext.args = { [ - '--two-pass', - meta.single_end ? '' : '--paired --remove-unpaired --remove-chimeric', - params.umitools_grouping_method ? "--algo '" + ['directional':'dir','adjacency':'adj','cluster':'cc'].get(params.umitools_grouping_method, '') + "'" : '', - params.umitools_umi_separator ? "--umi-sep '${params.umitools_umi_separator}'" : '', - ].join(' ').trim()} - } - - // Use the same umi_dedup prefix for umitools and umicollapse - - withName: '.*:BAM_DEDUP_STATS_SAMTOOLS_UMI(COLLAPSE|TOOLS)_GENOME:UMI(COLLAPSE|TOOLS_DEDUP)' { - ext.prefix = { "${meta.id}.umi_dedup.sorted" } - } - - // Publishing logic for umitools: - - withName: '.*:BAM_DEDUP_STATS_SAMTOOLS_UMITOOLS_GENOME:UMITOOLS_DEDUP' { - publishDir = [ - [ - path: { params.save_align_intermeds || params.save_umi_intermeds ? "${params.outdir}/${params.aligner}" : params.outdir }, - mode: params.publish_dir_mode, - pattern: '*.bam', - saveAs: { params.save_align_intermeds || params.save_umi_intermeds ? it : null } - ], - [ - path: { "${params.outdir}/${params.aligner}/umitools/genomic_dedup_log" }, - mode: params.publish_dir_mode, - pattern: '*.log' - ], - [ - path: { "${params.outdir}/${params.aligner}/umitools" }, - mode: params.publish_dir_mode, - pattern: '*.tsv' - ] - ] - } - - // Publishing logic for umicollapse - - withName: '.*:BAM_DEDUP_STATS_SAMTOOLS_UMICOLLAPSE_GENOME:UMICOLLAPSE' { - publishDir = [ - [ - path: { params.save_align_intermeds || params.save_umi_intermeds ? "${params.outdir}/${params.aligner}" : params.outdir }, - mode: params.publish_dir_mode, - pattern: '*.bam', - saveAs: { params.save_align_intermeds || params.save_umi_intermeds ? it : null } - ], - [ - path: { "${params.outdir}/${params.aligner}/umicollapse/genomic_dedup_log" }, - mode: params.publish_dir_mode, - pattern: '*.log' - ] - ] - } +// +// UMI deduplication options for star_salmon and hisat2 +// + +process { + withName: '.*:BAM_DEDUP_STATS_SAMTOOLS_UMITOOLS_(GEN|TRANSCRIPT)OME:UMITOOLS_DEDUP' { + ext.args = { [ + meta.single_end ? '' : '--unpaired-reads=discard --chimeric-pairs=discard', + params.umitools_grouping_method ? "--method='${params.umitools_grouping_method}'" : '', + params.umitools_umi_separator ? "--umi-separator='${params.umitools_umi_separator}'" : '' + ].join(' ').trim() } + } - withName: '.*:BAM_DEDUP_STATS_SAMTOOLS_UMI(COLLAPSE|TOOLS)_GENOME:SAMTOOLS_INDEX' { - ext.args = { params.bam_csi_index ? '-c' : '' } - ext.prefix = { "${meta.id}.umi_dedup.sorted" } - publishDir = [ + withName: '.*:BAM_DEDUP_STATS_SAMTOOLS_UMICOLLAPSE_(GEN|TRANSCRIPT)OME:UMICOLLAPSE' { + ext.args = { [ + '--two-pass', + meta.single_end ? '' : '--paired --remove-unpaired --remove-chimeric', + params.umitools_grouping_method ? "--algo '" + ['directional':'dir','adjacency':'adj','cluster':'cc'].get(params.umitools_grouping_method, '') + "'" : '', + params.umitools_umi_separator ? "--umi-sep '${params.umitools_umi_separator}'" : '', + ].join(' ').trim()} + } + + // Use the same umi_dedup prefix for umitools and umicollapse + + withName: '.*:BAM_DEDUP_STATS_SAMTOOLS_UMI(COLLAPSE|TOOLS)_GENOME:UMI(COLLAPSE|TOOLS_DEDUP)' { + ext.prefix = { "${meta.id}.umi_dedup.sorted" } + } + + // Publishing logic for umitools: + + withName: '.*:BAM_DEDUP_STATS_SAMTOOLS_UMITOOLS_GENOME:UMITOOLS_DEDUP' { + publishDir = [ + [ path: { params.save_align_intermeds || params.save_umi_intermeds ? "${params.outdir}/${params.aligner}" : params.outdir }, mode: params.publish_dir_mode, - pattern: '*.{bai,csi}', - saveAs: { params.save_align_intermeds || params.save_umi_intermeds ? it : null } + pattern: '*.bam', + saveAs: { filename -> params.save_align_intermeds || params.save_umi_intermeds ? filename : null } + ], + [ + path: { "${params.outdir}/${params.aligner}/umitools/genomic_dedup_log" }, + mode: params.publish_dir_mode, + pattern: '*.log' + ], + [ + path: { "${params.outdir}/${params.aligner}/umitools" }, + mode: params.publish_dir_mode, + pattern: '*.tsv' ] - } + ] + } + + // Publishing logic for umicollapse - withName: '.*:BAM_DEDUP_STATS_SAMTOOLS_UMI(COLLAPSE|TOOLS)_GENOME:BAM_STATS_SAMTOOLS:.*' { - ext.prefix = { "${meta.id}.umi_dedup.sorted.bam" } - publishDir = [ - path: { "${params.outdir}/${params.aligner}/samtools_stats" }, + withName: '.*:BAM_DEDUP_STATS_SAMTOOLS_UMICOLLAPSE_GENOME:UMICOLLAPSE' { + publishDir = [ + [ + path: { params.save_align_intermeds || params.save_umi_intermeds ? "${params.outdir}/${params.aligner}" : params.outdir }, + mode: params.publish_dir_mode, + pattern: '*.bam', + saveAs: { filename -> params.save_align_intermeds || params.save_umi_intermeds ? filename : null } + ], + [ + path: { "${params.outdir}/${params.aligner}/umicollapse/genomic_dedup_log" }, mode: params.publish_dir_mode, - pattern: '*.{stats,flagstat,idxstats}' + pattern: '*.log' ] - } + ] + } + + withName: '.*:BAM_DEDUP_STATS_SAMTOOLS_UMI(COLLAPSE|TOOLS)_GENOME:SAMTOOLS_INDEX' { + ext.args = { params.bam_csi_index ? '-c' : '' } + ext.prefix = { "${meta.id}.umi_dedup.sorted" } + publishDir = [ + path: { params.save_align_intermeds || params.save_umi_intermeds ? "${params.outdir}/${params.aligner}" : params.outdir }, + mode: params.publish_dir_mode, + pattern: '*.{bai,csi}', + saveAs: { filename -> params.save_align_intermeds || params.save_umi_intermeds ? filename : null } + ] + } + + withName: '.*:BAM_DEDUP_STATS_SAMTOOLS_UMI(COLLAPSE|TOOLS)_GENOME:BAM_STATS_SAMTOOLS:.*' { + ext.prefix = { "${meta.id}.umi_dedup.sorted.bam" } + publishDir = [ + path: { "${params.outdir}/${params.aligner}/samtools_stats" }, + mode: params.publish_dir_mode, + pattern: '*.{stats,flagstat,idxstats}' + ] } } // // bigWig coverage options // -if (!params.skip_bigwig) { - process { - withName: 'BEDTOOLS_GENOMECOV_FW' { - ext.prefix = { meta.strandedness == 'reverse' ? meta.id + '.reverse' : meta.id + '.forward' } - ext.args = { meta.strandedness == 'reverse' ? '-split -du -strand - -bg' : '-split -du -strand + -bg' } - } - - withName: 'BEDTOOLS_GENOMECOV_REV' { - ext.prefix = { meta.strandedness == 'reverse' ? meta.id + '.forward' : meta.id + '.reverse' } - ext.args = { meta.strandedness == 'reverse' ? '-split -du -strand + -bg' : '-split -du -strand - -bg' } - } - - withName: '(BEDTOOLS_GENOMECOV_(FW|REV)|.*:BEDGRAPH_BEDCLIP_BEDGRAPHTOBIGWIG_(FORWARD|REVERSE):UCSC_BEDCLIP)' { - publishDir = [ - enabled: false - ] - } - withName: '.*:BEDGRAPH_BEDCLIP_BEDGRAPHTOBIGWIG_FORWARD:UCSC_BEDCLIP' { - ext.prefix = { "${meta.id}.clip.forward" } - } +process { + withName: 'BEDTOOLS_GENOMECOV_FW' { + ext.prefix = { meta.strandedness == 'reverse' ? meta.id + '.reverse' : meta.id + '.forward' } + ext.args = { meta.strandedness == 'reverse' ? '-split -du -strand - -bg' : '-split -du -strand + -bg' } + } + + withName: 'BEDTOOLS_GENOMECOV_REV' { + ext.prefix = { meta.strandedness == 'reverse' ? meta.id + '.forward' : meta.id + '.reverse' } + ext.args = { meta.strandedness == 'reverse' ? '-split -du -strand + -bg' : '-split -du -strand - -bg' } + } + + withName: '(BEDTOOLS_GENOMECOV_(FW|REV)|.*:BEDGRAPH_BEDCLIP_BEDGRAPHTOBIGWIG_(FORWARD|REVERSE):UCSC_BEDCLIP)' { + publishDir = [ + enabled: false + ] + } + + withName: '.*:BEDGRAPH_BEDCLIP_BEDGRAPHTOBIGWIG_FORWARD:UCSC_BEDCLIP' { + ext.prefix = { "${meta.id}.clip.forward" } + } - withName: '.*:BEDGRAPH_BEDCLIP_BEDGRAPHTOBIGWIG_FORWARD:UCSC_BEDGRAPHTOBIGWIG' { - ext.prefix = { "${meta.id}.forward" } - } + withName: '.*:BEDGRAPH_BEDCLIP_BEDGRAPHTOBIGWIG_FORWARD:UCSC_BEDGRAPHTOBIGWIG' { + ext.prefix = { "${meta.id}.forward" } + } - withName: '.*:BEDGRAPH_BEDCLIP_BEDGRAPHTOBIGWIG_REVERSE:UCSC_BEDCLIP' { - ext.prefix = { "${meta.id}.clip.reverse" } - } + withName: '.*:BEDGRAPH_BEDCLIP_BEDGRAPHTOBIGWIG_REVERSE:UCSC_BEDCLIP' { + ext.prefix = { "${meta.id}.clip.reverse" } + } - withName: '.*:BEDGRAPH_BEDCLIP_BEDGRAPHTOBIGWIG_REVERSE:UCSC_BEDGRAPHTOBIGWIG' { - ext.prefix = { "${meta.id}.reverse" } - } + withName: '.*:BEDGRAPH_BEDCLIP_BEDGRAPHTOBIGWIG_REVERSE:UCSC_BEDGRAPHTOBIGWIG' { + ext.prefix = { "${meta.id}.reverse" } + } - withName: '.*:BEDGRAPH_BEDCLIP_BEDGRAPHTOBIGWIG_(FORWARD|REVERSE):UCSC_BEDGRAPHTOBIGWIG' { - publishDir = [ - path: { "${params.outdir}/${params.aligner}/bigwig" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } + withName: '.*:BEDGRAPH_BEDCLIP_BEDGRAPHTOBIGWIG_(FORWARD|REVERSE):UCSC_BEDGRAPHTOBIGWIG' { + publishDir = [ + path: { "${params.outdir}/${params.aligner}/bigwig" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] } } @@ -359,22 +373,65 @@ if (!params.skip_bigwig) { // DESeq2 QC options // -if (params.aligner in ['star_salmon', 'star_rsem'] && !params.skip_qc && !params.skip_deseq2_qc) { - process { - withName: 'DESEQ2_QC_(STAR_SALMON|RSEM)' { - ext.args = { [ - "--id_col 1", - "--sample_suffix ''", - "--count_col 3", - params.deseq2_vst ? '--vst TRUE' : '' - ].join(' ').trim() } - ext.args2 = { params.aligner } - publishDir = [ - path: { "${params.outdir}/${params.aligner}/deseq2_qc" }, +process { + withName: 'DESEQ2_QC_(BAM_SALMON|RSEM)' { + ext.args = { [ + "--id_col 1", + "--sample_suffix ''", + "--count_col 3", + params.deseq2_vst ? '--vst TRUE' : '' + ].join(' ').trim() } + ext.args2 = { params.aligner } + publishDir = [ + path: { "${params.outdir}/${params.aligner}/deseq2_qc" }, + mode: params.publish_dir_mode, + pattern: "*{RData,pca.vals.txt,plots.pdf,sample.dists.txt,size_factors,log}" + ] + } +} + +// +// RSEM quantification options +// + +process { + withName: '.*:QUANTIFY_RSEM:RSEM_CALCULATEEXPRESSION|.*:QUANTIFY_RSEM:SENTIEON_RSEMCALCULATEEXPRESSION' { + publishDir = [ + [ + path: { "${params.outdir}/${params.aligner}" }, + mode: params.publish_dir_mode, + pattern: "*.{stat,results}" + ], + [ + path: { "${params.outdir}/${params.aligner}/log" }, mode: params.publish_dir_mode, - pattern: "*{RData,pca.vals.txt,plots.pdf,sample.dists.txt,size_factors,log}" + pattern: "*.log" ] - } + ] + } + + withName: '.*:QUANTIFY_RSEM:CUSTOM_RSEMMERGECOUNTS' { + publishDir = [ + path: { "${params.outdir}/${params.aligner}/rsem_merge_counts" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + + withName: '.*:QUANTIFY_RSEM:QUANT_TXIMPORT_SUMMARIZEDEXPERIMENT:(CUSTOM_TX2GENE|TXIMETA_TXIMPORT)' { + publishDir = [ + path: { "${params.outdir}/${params.aligner}" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + + withName: '.*:QUANTIFY_RSEM:QUANT_TXIMPORT_SUMMARIZEDEXPERIMENT:SE_.*' { + publishDir = [ + path: { "${params.outdir}/${params.aligner}" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') || filename.endsWith('.log') ? null : filename } + ] } } @@ -382,42 +439,53 @@ if (params.aligner in ['star_salmon', 'star_rsem'] && !params.skip_qc && !params // Pseudo-alignment options // -if (!params.skip_pseudo_alignment && params.pseudo_aligner) { - process { - withName: '.*:QUANTIFY_PSEUDO_ALIGNMENT:(CUSTOM_TX2GENE|TXIMETA_TXIMPORT)' { - publishDir = [ - path: { "${params.outdir}/${params.pseudo_aligner}" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } +process { + withName: '.*:QUANTIFY_PSEUDO_ALIGNMENT:SALMON_QUANT' { + ext.args = { params.extra_salmon_quant_args ?: '' } + publishDir = [ + path: { "${params.outdir}/${params.pseudo_aligner}" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') || filename.endsWith('_meta_info.json') || filename.endsWith('_format_counts.json') ? null : filename } + ] + } - withName: '.*:QUANTIFY_PSEUDO_ALIGNMENT:SE_.*' { - ext.args = '--assay_names counts,abundance' - publishDir = [ - path: { "${params.outdir}/${params.pseudo_aligner}" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') || filename.endsWith('.log') ? null : filename } - ] - } - } - - if (!params.skip_qc && !params.skip_deseq2_qc) { - process { - withName: 'DESEQ2_QC_PSEUDO' { - ext.args = { [ - "--id_col 1", - "--sample_suffix ''", - "--count_col 3", - params.deseq2_vst ? '--vst TRUE' : '' - ].join(' ').trim() } - ext.args2 = { params.pseudo_aligner } - publishDir = [ - path: { "${params.outdir}/${params.pseudo_aligner}/deseq2_qc" }, - mode: params.publish_dir_mode, - pattern: "*{RData,pca.vals.txt,plots.pdf,sample.dists.txt,size_factors,log}" - ] - } - } + withName: '.*:QUANTIFY_PSEUDO_ALIGNMENT:KALLISTO_QUANT' { + ext.args = params.extra_kallisto_quant_args ?: '' + publishDir = [ + path: { "${params.outdir}/${params.pseudo_aligner}" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') || filename.endsWith('.run_info.json') || filename.endsWith('.log') ? null : filename } + ] + } + + withName: '.*:QUANTIFY_PSEUDO_ALIGNMENT:QUANT_TXIMPORT_SUMMARIZEDEXPERIMENT:(CUSTOM_TX2GENE|TXIMETA_TXIMPORT)' { + publishDir = [ + path: { "${params.outdir}/${params.pseudo_aligner}" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + + withName: '.*:QUANTIFY_PSEUDO_ALIGNMENT:QUANT_TXIMPORT_SUMMARIZEDEXPERIMENT:SE_.*' { + publishDir = [ + path: { "${params.outdir}/${params.pseudo_aligner}" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') || filename.endsWith('.log') ? null : filename } + ] + } + + withName: 'DESEQ2_QC_PSEUDO' { + ext.args = { [ + "--id_col 1", + "--sample_suffix ''", + "--count_col 3", + params.deseq2_vst ? '--vst TRUE' : '' + ].join(' ').trim() } + ext.args2 = { params.pseudo_aligner } + publishDir = [ + path: { "${params.outdir}/${params.pseudo_aligner}/deseq2_qc" }, + mode: params.publish_dir_mode, + pattern: "*{RData,pca.vals.txt,plots.pdf,sample.dists.txt,size_factors,log}" + ] } }