diff --git a/.nf-core.yml b/.nf-core.yml index ad4ba837..2410206e 100644 --- a/.nf-core.yml +++ b/.nf-core.yml @@ -1,6 +1,10 @@ lint: files_unchanged: - .gitignore + merge_markers: + # False positive: SAM base-quality strings contain runs of '<' that trip the + # merge-marker check. Snapshot shipped by nf-core/modules bowtie2/align. + - modules/nf-core/bowtie2/align/tests/main.nf.test.snap nextflow_config: - config_defaults: - params.bamtools_filter_se_config diff --git a/CHANGELOG.md b/CHANGELOG.md index 2312802c..93972276 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Enhancements & fixes +- [[#452]](https://github.com/nf-core/atacseq/pull/452) - Count consensus peaks separately for single-end and paired-end libraries and merge the per-batch matrices, so mixed cohorts work under `subread` 2.1.1 and the 2.0.1 pin added in [[#448]](https://github.com/nf-core/atacseq/pull/448) can be removed. +- [[#452]](https://github.com/nf-core/atacseq/pull/452) - Publish the per-library-type consensus count matrices (`*.SE.featureCounts.tsv` / `*.PE.featureCounts.tsv`) alongside the merged matrix. +- [[#452]](https://github.com/nf-core/atacseq/pull/452) - Pass `--countReadPairs` alongside `-p` in the paired-end `featureCounts` invocation, so consensus counts stay fragment-based under `subread` 2.1.1 (where bare `-p` counts individual reads) and no longer roughly double relative to the 2.0.1 behaviour. +- [[#448]](https://github.com/nf-core/atacseq/pull/448) - Update nf-core modules and subworkflows to their latest versions and reconcile the resulting call-signature changes. +- [[#448]](https://github.com/nf-core/atacseq/pull/448) - Add read groups to Chromap alignments, which Picard 3.4.0 `MarkDuplicates` now requires. +- [[#448]](https://github.com/nf-core/atacseq/pull/448) - Quote `--seq_center` when building read-group arguments, so a sequencing-centre name containing whitespace no longer breaks Chromap (Picard) or Bowtie2 alignment. +- [[#448]](https://github.com/nf-core/atacseq/pull/448) - Pin `subread` to 2.0.1 so consensus peak counting keeps supporting mixed single-end/paired-end cohorts in a single `featureCounts` invocation. +- [[#448]](https://github.com/nf-core/atacseq/pull/448) - Sort the consensus `featureCounts` BAM inputs so the count matrix column order is deterministic. - [[#446]](https://github.com/nf-core/atacseq/pull/446) - Make pipeline code compliant with strict Nextflow v2 syntax parser, with no behaviour change. - [[#407]](https://github.com/nf-core/atacseq/pull/407) to add filtering reads according fragment size to help to focus on NFR, MNR, DNR, TNR - [[#164]](https://github.com/nf-core/atacseq/issues/164) and partly [[#91]](https://github.com/nf-core/atacseq/issues/91) with code from [[#301]](https://github.com/nf-core/atacseq/pull/301) to address shifting of reads as an option that is turned off by default. @@ -22,7 +30,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Updated pipeline template to [nf-core/tools 3.1.1](https://github.com/nf-core/tools/releases/tag/3.1.1) - Updated pipeline template to [nf-core/tools 3.4.1](https://github.com/nf-core/tools/releases/tag/3.4.1) - [[#427](https://github.com/nf-core/atacseq/issues/427)] - Implements default nf-test at the pipeline level. -- [[436](https://github.com/nf-core/atacseq/issues/437)] - Fix strick syntax. +- [[#436]](https://github.com/nf-core/atacseq/pull/436) - Fix strict syntax. - [[437](https://github.com/nf-core/atacseq/issues/437)] - Follow up to 436. - [[#438](https://github.com/nf-core/atacseq/issues/438)] - Add `checkIfExists` to file inputs in `PREPARE_GENOME` and prevent S3 access errors during index validation. - [[PR #443](https://github.com/nf-core/atacseq/pull/443)] - Updated pipeline template to [nf-core/tools 4.0.2](https://github.com/nf-core/tools/releases/tag/4.0.2) diff --git a/bin/featurecounts_merge.sh b/bin/featurecounts_merge.sh new file mode 100755 index 00000000..93839275 --- /dev/null +++ b/bin/featurecounts_merge.sh @@ -0,0 +1,60 @@ +#!/usr/bin/env bash +# Merge multiple featureCounts count tables into a single matrix. +# +# The consensus-peak quantification runs featureCounts once per library type +# (single-end / paired-end), so each input table shares an identical annotation +# block (Geneid, Chr, Start, End, Strand, Length) computed from the same SAF, and +# differs only in its per-sample count columns. This column-binds those sample +# columns back together, keyed on Geneid, and reproduces the featureCounts output +# layout expected downstream by deseq2_qc.r: +# +# line 1 : a "# Program:featureCounts" comment (skipped via read.delim skip=1) +# line 2 : header Geneid Chr Start End Strand Length +# remaining rows: annotation columns 1-6 followed by one count per sample +# +# With a single input table this is an order-preserving pass-through. +# +# Usage: featurecounts_merge.sh OUTFILE INPUT1 [INPUT2 ...] +set -euo pipefail + +if [ "$#" -lt 2 ]; then + echo "Usage: $(basename "$0") OUTFILE INPUT1 [INPUT2 ...]" >&2 + exit 1 +fi + +out=$1 +shift + +awk ' + BEGIN { FS = OFS = "\t" } + + # Skip the leading "# Program:featureCounts ..." comment of every input file. + FNR == 1 { fidx++; next } + + # Header row: keep the 6 annotation columns from the first file only, + # then append every input file`s sample columns (7..NF) in argument order. + FNR == 2 { + if (fidx == 1) { hdr = $1; for (i = 2; i <= 6; i++) hdr = hdr OFS $i } + for (i = 7; i <= NF; i++) hdr = hdr OFS $i + next + } + + # Data rows: index on Geneid (column 1). Preserve the first file`s row order + # and annotation; append sample counts from each file for the matching Geneid. + { + key = $1 + if (fidx == 1) { + order[++n] = key + a = $1; for (i = 2; i <= 6; i++) a = a OFS $i; ann[key] = a + v = ""; for (i = 7; i <= NF; i++) v = v OFS $i; val[key] = v + } else { + for (i = 7; i <= NF; i++) val[key] = val[key] OFS $i + } + } + + END { + print "# Program:featureCounts (merged single-end and paired-end libraries)" + print hdr + for (j = 1; j <= n; j++) print ann[order[j]] val[order[j]] + } +' "$@" > "$out" diff --git a/conf/modules.config b/conf/modules.config index 03b6bbdc..8a75a7e6 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -88,7 +88,7 @@ process { ] } - withName: 'CUSTOM_GETCHROMSIZES' { + withName: 'SAMTOOLS_FAIDX' { publishDir = [ path: { "${params.outdir}/genome" }, mode: params.publish_dir_mode, @@ -246,7 +246,7 @@ process { ext.args = { [ meta.read_group ? "--rg-id ${meta.id} --rg SM:${meta.id - ~/_T\d+$/} --rg PL:ILLUMINA --rg LB:${meta.id} --rg PU:1" : '', - params.seq_center ? "--rg CN:${params.seq_center}" : '' + params.seq_center ? "--rg 'CN:${params.seq_center}'" : '' ].join(' ').trim() } ext.prefix = { "${meta.id}.Lb" } @@ -293,6 +293,28 @@ process { } } + process { + withName: '.*:FASTQ_ALIGN_CHROMAP:PICARD_ADDORREPLACEREADGROUPS' { + ext.args = { + [ + "--RGID ${meta.id}", + "--RGSM ${meta.id - ~/_T\d+$/}", + "--RGPL ILLUMINA", + "--RGLB ${meta.id}", + "--RGPU 1", + params.seq_center ? "--RGCN '${params.seq_center}'" : '' + ].join(' ').trim() + } + ext.prefix = { "${meta.id}.Lb.rg" } + publishDir = [ + path: { "${params.outdir}/${params.aligner}/library" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + enabled: false + ] + } + } + process { withName: 'STAR_ALIGN' { ext.args = [ @@ -683,6 +705,15 @@ process { withName: '.*:MERGED_LIBRARY_CONSENSUS_PEAKS:SUBREAD_FEATURECOUNTS' { ext.args = '-F SAF -O --fracOverlap 0.2' + ext.prefix = { "consensus_peaks.mLb.clN.${meta.single_end ? 'SE' : 'PE'}" } + publishDir = [ + path: { "${params.outdir}/${params.aligner}/merged_library/macs3/${params.narrow_peak ? 'narrow_peak' : 'broad_peak'}/consensus" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + + withName: '.*:MERGED_LIBRARY_CONSENSUS_PEAKS:FEATURECOUNTS_MERGE' { ext.prefix = "consensus_peaks.mLb.clN" publishDir = [ path: { "${params.outdir}/${params.aligner}/merged_library/macs3/${params.narrow_peak ? 'narrow_peak' : 'broad_peak'}/consensus" }, @@ -924,6 +955,15 @@ process { withName: '.*:MERGED_REPLICATE_CONSENSUS_PEAKS:SUBREAD_FEATURECOUNTS' { ext.args = '-F SAF -O --fracOverlap 0.2' + ext.prefix = { "consensus_peaks.mRp.clN.${meta.single_end ? 'SE' : 'PE'}" } + publishDir = [ + path: { "${params.outdir}/${params.aligner}/merged_replicate/macs3/${params.narrow_peak ? 'narrow_peak' : 'broad_peak'}/consensus" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + + withName: '.*:MERGED_REPLICATE_CONSENSUS_PEAKS:FEATURECOUNTS_MERGE' { ext.prefix = "consensus_peaks.mRp.clN" publishDir = [ path: { "${params.outdir}/${params.aligner}/merged_replicate/macs3/${params.narrow_peak ? 'narrow_peak' : 'broad_peak'}/consensus" }, diff --git a/docs/CONTRIBUTING.md b/docs/CONTRIBUTING.md index d40a4fa8..517a21a3 100644 --- a/docs/CONTRIBUTING.md +++ b/docs/CONTRIBUTING.md @@ -121,10 +121,10 @@ Please also refer to the [pipeline-specific contribution guidelines](#pipeline-s - [ ] Define the corresponding [input channel](#channel-naming-schemes) into your new process from the expected previous process channel. - [ ] Install a module with nf-core/tools, or write a local module (see [default processes resource requirements](#default-processes-resource-requirements)), and add it to the target `.nf`. -- [ ] Define the output channel if needed. Mix the version output channel into `ch_versions` and relevant files into `ch_multiqc`. +- [ ] Define the output channel if needed. Emit software versions to the `versions` topic channel (`topic: versions`) from the module's `output:` block — they are collated automatically in `workflows/atacseq.nf`. Add relevant report files to the MultiQC inputs. - [ ] Add new or updated parameters to `nextflow.config` with a [default value](#default-parameter-values). - [ ] Add new or updated parameters and relevant help text to `nextflow_schema.json` with [nf-core/tools](#default-parameter-values). -- [ ] Add validation for relevant parameters to the pipeline utilisation section of `utils_nfcore_\_pipeline/main.nf` subworkflow. +- [ ] Add validation for relevant parameters to the pipeline utilisation section of `utils_nfcore_atacseq_pipeline/main.nf` subworkflow. - [ ] Perform local tests to validate that the new code works as expected. - [ ] If applicable, add a new test in the `tests` directory. - [ ] Update `usage.md`, `output.md`, and `citation.md` as appropriate. diff --git a/docs/output.md b/docs/output.md index 09bb18ff..f9d9bf1e 100755 --- a/docs/output.md +++ b/docs/output.md @@ -209,7 +209,9 @@ Various QC plots per sample including number of peaks, fold-change distribution, - `/merged_library/macs3//consensus/` - `*.bed`: Consensus peak-set across all samples in BED format. - `*.saf`: Consensus peak-set across all samples in SAF format. Required by featureCounts for read quantification. - - `*.featureCounts.txt`: Read counts across all samples relative to consensus peak-set. + - `*.featureCounts.tsv`: Read counts across all samples relative to consensus peak-set. + - `*.featureCounts.tsv.summary`: featureCounts assignment summary, used by MultiQC. + - `*.SE.featureCounts.tsv`, `*.PE.featureCounts.tsv` (and their `.summary` files): Per-library-type counts, before they are merged into the matrix above. featureCounts applies paired-end mode to a whole invocation, so single-end and paired-end libraries are counted in separate batches and then combined. - `*.annotatePeaks.txt`: HOMER peak-to-gene annotation file for consensus peaks. - `*.boolean.annotatePeaks.txt`: Spreadsheet representation of consensus peak-set across samples **with** gene annotation columns. The columns from individual peak files are included in this file along with the ability to filter peaks based on their presence or absence in multiple replicates/conditions. - `*.boolean.txt`: Spreadsheet representation of consensus peak-set across samples **without** gene annotation columns. Same as file above but without annotation columns. diff --git a/main.nf b/main.nf index d2850c1e..5763a91c 100644 --- a/main.nf +++ b/main.nf @@ -51,8 +51,6 @@ include { PIPELINE_COMPLETION } from './subworkflows/local/utils_nfcore_atac workflow NFCORE_ATACSEQ { main: - ch_versions = channel.empty() - // SUBWORKFLOW: Prepare genome files PREPARE_GENOME ( params.genome, @@ -73,7 +71,6 @@ workflow NFCORE_ATACSEQ { params.macs_gsize, params.read_length ) - ch_versions = ch_versions.mix(PREPARE_GENOME.out.versions) // // WORKFLOW: Run nf-core/atacseq workflow @@ -103,7 +100,6 @@ workflow NFCORE_ATACSEQ { emit: multiqc_report = ATACSEQ.out.multiqc_report // channel: /path/to/multiqc_report.html - versions = ch_versions // channel: [version1, version2, ...] } /* diff --git a/modules.json b/modules.json index 795df303..717b50ac 100644 --- a/modules.json +++ b/modules.json @@ -7,72 +7,68 @@ "nf-core": { "ataqv/ataqv": { "branch": "master", - "git_sha": "11c7e5b3073845889060c793786bf3177275d62e", + "git_sha": "6d46786420b4d7bc88eba026eb389c0c5535d120", "installed_by": ["modules"] }, "ataqv/mkarv": { "branch": "master", - "git_sha": "11c7e5b3073845889060c793786bf3177275d62e", + "git_sha": "6d46786420b4d7bc88eba026eb389c0c5535d120", "installed_by": ["modules"] }, "bowtie2/align": { "branch": "master", - "git_sha": "0fe30831abbc2ed115e46e92330edf38f56edc3d", + "git_sha": "a0961c41021561ac7cf139f86bd7812a2f99e994", "installed_by": ["fastq_align_bowtie2"] }, "bowtie2/build": { "branch": "master", - "git_sha": "6a24fbe314bb2e6fe6306c29a63076ea87e8eb3c", + "git_sha": "a0961c41021561ac7cf139f86bd7812a2f99e994", "installed_by": ["modules"] }, "bwa/index": { "branch": "master", - "git_sha": "baa9ee31e48f115832c8eb91a980bf35c9ffc9b9", - "installed_by": ["modules"] + "git_sha": "6d46786420b4d7bc88eba026eb389c0c5535d120", + "installed_by": ["modules"], + "patch": "modules/nf-core/bwa/index/bwa-index.diff" }, "bwa/mem": { "branch": "master", - "git_sha": "b97197968ac12dde2463fa54541f6350c46f2035", + "git_sha": "2fb127c8fd13de0adaa676df7169131e45c0b114", "installed_by": ["fastq_align_bwa"] }, "chromap/chromap": { "branch": "master", - "git_sha": "603ecbd9f45300c9788f197d2a15a005685b4220", + "git_sha": "f2f969a4ee32243c7fab75f341f9be1dd3ce1a23", "installed_by": ["fastq_align_chromap"] }, "chromap/index": { "branch": "master", - "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": ["modules"] - }, - "custom/getchromsizes": { - "branch": "master", - "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", + "git_sha": "f2f969a4ee32243c7fab75f341f9be1dd3ce1a23", "installed_by": ["modules"] }, "deeptools/alignmentsieve": { "branch": "master", - "git_sha": "5c2ab5de7e8de33ac7cab83a4cd28a4d29a84049", + "git_sha": "6d46786420b4d7bc88eba026eb389c0c5535d120", "installed_by": ["modules"] }, "deeptools/computematrix": { "branch": "master", - "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", + "git_sha": "6d46786420b4d7bc88eba026eb389c0c5535d120", "installed_by": ["modules"] }, "deeptools/plotfingerprint": { "branch": "master", - "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", + "git_sha": "6d46786420b4d7bc88eba026eb389c0c5535d120", "installed_by": ["modules"] }, "deeptools/plotheatmap": { "branch": "master", - "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", + "git_sha": "6d46786420b4d7bc88eba026eb389c0c5535d120", "installed_by": ["modules"] }, "deeptools/plotprofile": { "branch": "master", - "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", + "git_sha": "6d46786420b4d7bc88eba026eb389c0c5535d120", "installed_by": ["modules"] }, "fastqc": { @@ -82,102 +78,113 @@ }, "gffread": { "branch": "master", - "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", + "git_sha": "c9ad4d691aa339e478a77847e3ef854ccd21778b", "installed_by": ["modules"] }, "gunzip": { "branch": "master", - "git_sha": "e06548bfa36ee31869b81041879dd6b3a83b1d57", + "git_sha": "0902eac3012baaf4f9ab6513c8c55acc9353c96c", "installed_by": ["modules"] }, "homer/annotatepeaks": { "branch": "master", - "git_sha": "ffc27c68870f5f67e541bb67d94e03c597f75257", + "git_sha": "9ed7f157dd96f83b852da7ea4d3a217907f50f36", "installed_by": ["modules"] }, "khmer/uniquekmers": { "branch": "master", - "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", + "git_sha": "995d1b7d65d5a841220304d088161d8bff07378a", "installed_by": ["modules"] }, "macs3/callpeak": { "branch": "master", - "git_sha": "06c8865e36741e05ad32ef70ab3fac127486af48", + "git_sha": "6d46786420b4d7bc88eba026eb389c0c5535d120", "installed_by": ["modules"] }, "multiqc": { "branch": "master", - "git_sha": "008f9d3e61209bf995edac3ba531f54e269e1215", + "git_sha": "98403d15b0e50edae1f3fec5eae5e24982f1fade", "installed_by": ["modules"] }, + "picard/addorreplacereadgroups": { + "branch": "master", + "git_sha": "6d46786420b4d7bc88eba026eb389c0c5535d120", + "installed_by": ["fastq_align_chromap"] + }, "picard/collectmultiplemetrics": { "branch": "master", - "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", + "git_sha": "6d46786420b4d7bc88eba026eb389c0c5535d120", "installed_by": ["modules"] }, "picard/markduplicates": { "branch": "master", - "git_sha": "1943aa60f7490c3d6740e8872e6e69122ccc8087", + "git_sha": "6d46786420b4d7bc88eba026eb389c0c5535d120", "installed_by": ["bam_markduplicates_picard"] }, "picard/mergesamfiles": { "branch": "master", - "git_sha": "2d74c664aadaacfba29fc74840037dfc93129f82", + "git_sha": "6d46786420b4d7bc88eba026eb389c0c5535d120", "installed_by": ["modules"] }, "preseq/lcextrap": { "branch": "master", - "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", + "git_sha": "6d46786420b4d7bc88eba026eb389c0c5535d120", + "installed_by": ["modules"] + }, + "samtools/faidx": { + "branch": "master", + "git_sha": "6d46786420b4d7bc88eba026eb389c0c5535d120", "installed_by": ["modules"] }, "samtools/flagstat": { "branch": "master", - "git_sha": "f4596fe0bdc096cf53ec4497e83defdb3a94ff62", + "git_sha": "9339809fcb90af8a8b7051e6cd914894d5c52002", "installed_by": ["bam_stats_samtools"] }, "samtools/idxstats": { "branch": "master", - "git_sha": "f4596fe0bdc096cf53ec4497e83defdb3a94ff62", + "git_sha": "9339809fcb90af8a8b7051e6cd914894d5c52002", "installed_by": ["bam_stats_samtools"] }, "samtools/index": { "branch": "master", - "git_sha": "f4596fe0bdc096cf53ec4497e83defdb3a94ff62", + "git_sha": "9339809fcb90af8a8b7051e6cd914894d5c52002", "installed_by": ["bam_markduplicates_picard", "bam_sort_stats_samtools"] }, "samtools/sort": { "branch": "master", - "git_sha": "4352dbdb09ec40db71e9b172b97a01dcf5622c26", + "git_sha": "9339809fcb90af8a8b7051e6cd914894d5c52002", "installed_by": ["bam_sort_stats_samtools"] }, "samtools/stats": { "branch": "master", - "git_sha": "f4596fe0bdc096cf53ec4497e83defdb3a94ff62", + "git_sha": "9339809fcb90af8a8b7051e6cd914894d5c52002", "installed_by": ["bam_stats_samtools"] }, "subread/featurecounts": { "branch": "master", - "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": ["modules"] + "git_sha": "6d46786420b4d7bc88eba026eb389c0c5535d120", + "installed_by": ["modules"], + "patch": "modules/nf-core/subread/featurecounts/subread-featurecounts.diff" }, "trimgalore": { "branch": "master", - "git_sha": "eed5d14302a6c9070dcc25feeab707a27a4b3254", + "git_sha": "0991b1032cccfcd9245ef59c6e56d6092ac0b3e7", "installed_by": ["fastq_fastqc_umitools_trimgalore"] }, "ucsc/bedgraphtobigwig": { "branch": "master", - "git_sha": "66290981ab6038ea86177ade40b9449bc790b0ce", + "git_sha": "6d46786420b4d7bc88eba026eb389c0c5535d120", "installed_by": ["modules"] }, "umitools/extract": { "branch": "master", - "git_sha": "bd6d730b3f32742f402189113ba9480006a3350f", + "git_sha": "6d46786420b4d7bc88eba026eb389c0c5535d120", "installed_by": ["fastq_fastqc_umitools_trimgalore"] }, "untar": { "branch": "master", - "git_sha": "5c460c5a4736974abde2843294f35307ee2b0e5e", + "git_sha": "6d46786420b4d7bc88eba026eb389c0c5535d120", "installed_by": ["modules"] } } @@ -186,37 +193,37 @@ "nf-core": { "bam_markduplicates_picard": { "branch": "master", - "git_sha": "1943aa60f7490c3d6740e8872e6e69122ccc8087", + "git_sha": "9339809fcb90af8a8b7051e6cd914894d5c52002", "installed_by": ["subworkflows"] }, "bam_sort_stats_samtools": { "branch": "master", - "git_sha": "4352dbdb09ec40db71e9b172b97a01dcf5622c26", + "git_sha": "9339809fcb90af8a8b7051e6cd914894d5c52002", "installed_by": ["fastq_align_bowtie2", "fastq_align_bwa", "fastq_align_chromap"] }, "bam_stats_samtools": { "branch": "master", - "git_sha": "f4596fe0bdc096cf53ec4497e83defdb3a94ff62", + "git_sha": "9339809fcb90af8a8b7051e6cd914894d5c52002", "installed_by": ["bam_markduplicates_picard", "bam_sort_stats_samtools"] }, "fastq_align_bowtie2": { "branch": "master", - "git_sha": "0fe30831abbc2ed115e46e92330edf38f56edc3d", + "git_sha": "a0961c41021561ac7cf139f86bd7812a2f99e994", "installed_by": ["subworkflows"] }, "fastq_align_bwa": { "branch": "master", - "git_sha": "b97197968ac12dde2463fa54541f6350c46f2035", + "git_sha": "cbb7a6362981f07d2c26e43f8186025320569ffd", "installed_by": ["subworkflows"] }, "fastq_align_chromap": { "branch": "master", - "git_sha": "cfd937a668919d948f6fcbf4218e79de50c2f36f", + "git_sha": "d92e0f8276a79d316fd324eae0edefeaf680804c", "installed_by": ["subworkflows"] }, "fastq_fastqc_umitools_trimgalore": { "branch": "master", - "git_sha": "8f2ec534d0418bf724cfd5f053176a9c500fae78", + "git_sha": "e5777ea46cc591b519b9bb931e952e4a149cb47d", "installed_by": ["subworkflows"] }, "utils_nextflow_pipeline": { diff --git a/modules/local/bam_remove_orphans.nf b/modules/local/bam_remove_orphans.nf index 766a0468..0ba91407 100644 --- a/modules/local/bam_remove_orphans.nf +++ b/modules/local/bam_remove_orphans.nf @@ -12,8 +12,7 @@ process BAM_REMOVE_ORPHANS { output: tuple val(meta), path("*.bam"), emit: bam - path "versions.yml" , emit: versions - + tuple val("${task.process}"), val('samtools'), eval("samtools --version | sed '1!d;s/.* //'"), topic: versions when: task.ext.when == null || task.ext.when @@ -27,19 +26,11 @@ process BAM_REMOVE_ORPHANS { ${prefix}.bam \\ $args - cat <<-END_VERSIONS > versions.yml - "${task.process}": - samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') - END_VERSIONS """ } else { """ ln -s $bam ${prefix}.bam - cat <<-END_VERSIONS > versions.yml - "${task.process}": - samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') - END_VERSIONS """ } @@ -47,9 +38,5 @@ process BAM_REMOVE_ORPHANS { prefix = task.ext.prefix ?: "${meta.id}" """ touch ${prefix}.bam - cat <<-END_VERSIONS > versions.yml - "${task.process}": - samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') - END_VERSIONS """ } diff --git a/modules/local/bamtools_filter.nf b/modules/local/bamtools_filter.nf index 51a6bd3b..8dbb1b15 100644 --- a/modules/local/bamtools_filter.nf +++ b/modules/local/bamtools_filter.nf @@ -15,8 +15,8 @@ process BAMTOOLS_FILTER { output: tuple val(meta), path("*.bam"), emit: bam - path "versions.yml" , emit: versions - + tuple val("${task.process}"), val('samtools'), eval("samtools --version | sed '1!d;s/.* //'"), topic: versions + tuple val("${task.process}"), val('bamtools'), eval("bamtools --version | grep bamtools | sed 's/.*bamtools //'"), topic: versions when: task.ext.when == null || task.ext.when @@ -34,21 +34,11 @@ process BAMTOOLS_FILTER { -out ${prefix}.bam \\ -script $config - cat <<-END_VERSIONS > versions.yml - "${task.process}": - samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') - bamtools: \$(echo \$(bamtools --version 2>&1) | sed 's/^.*bamtools //; s/Part .*\$//') - END_VERSIONS """ stub: def prefix = task.ext.prefix ?: "${meta.id}" """ touch ${prefix}.bam - cat <<-END_VERSIONS > versions.yml - "${task.process}": - samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') - bamtools: \$(echo \$(bamtools --version 2>&1) | sed 's/^.*bamtools //; s/Part .*\$//') - END_VERSIONS """ } diff --git a/modules/local/bedtools_genomecov.nf b/modules/local/bedtools_genomecov.nf index 5805dce7..6fea7228 100644 --- a/modules/local/bedtools_genomecov.nf +++ b/modules/local/bedtools_genomecov.nf @@ -13,8 +13,8 @@ process BEDTOOLS_GENOMECOV { output: tuple val(meta), path("*.bedGraph"), emit: bedgraph tuple val(meta), path("*.txt") , emit: scale_factor - path "versions.yml" , emit: versions - + tuple val("${task.process}"), val('bedtools'), eval("bedtools --version | sed -e \"s/bedtools v//g\""), topic: versions + tuple val("${task.process}"), val('sort'), eval("sort --version | head -n 1 | awk '{print \$4;}'"), topic: versions when: task.ext.when == null || task.ext.when @@ -49,11 +49,6 @@ process BEDTOOLS_GENOMECOV { rm tmp.bg - cat <<-END_VERSIONS > versions.yml - "${task.process}": - bedtools: \$(bedtools --version | sed -e "s/bedtools v//g") - sort: \$(sort --version | head -n 1 | awk '{print \$4;}') - END_VERSIONS """ stub: @@ -61,9 +56,5 @@ process BEDTOOLS_GENOMECOV { """ touch ${prefix}.bedGraph touch ${prefix}.scale_factor.txt - cat <<-END_VERSIONS > versions.yml - "${task.process}": - bedtools: \$(bedtools --version | sed -e "s/bedtools v//g") - END_VERSIONS """ } diff --git a/modules/local/deseq2_qc.nf b/modules/local/deseq2_qc.nf index 4b5cae51..695c239c 100644 --- a/modules/local/deseq2_qc.nf +++ b/modules/local/deseq2_qc.nf @@ -24,8 +24,8 @@ process DESEQ2_QC { path "*sample.dists_mqc.tsv", optional:true, emit: dists_multiqc path "*.log" , optional:true, emit: log path "size_factors" , optional:true, emit: size_factors - path "versions.yml" , emit: versions - + tuple val("${task.process}"), val('r-base'), eval("R --version | sed '1!d;s/.*version //;s/ .*//'"), topic: versions + tuple val("${task.process}"), val('bioconductor-deseq2'), eval("Rscript -e \"library(DESeq2); cat(as.character(packageVersion('DESeq2')))\""), topic: versions when: task.ext.when == null || task.ext.when @@ -50,10 +50,5 @@ process DESEQ2_QC { sed -i -e 's/DESeq2 /${meta.id} DESeq2 /g' tmp.txt cat tmp.txt ${prefix}.sample.dists.txt > ${prefix}.sample.dists_mqc.tsv - cat <<-END_VERSIONS > versions.yml - "${task.process}": - r-base: \$(echo \$(R --version 2>&1) | sed 's/^.*R version //; s/ .*\$//') - bioconductor-deseq2: \$(Rscript -e "library(DESeq2); cat(as.character(packageVersion('DESeq2')))") - END_VERSIONS """ } diff --git a/modules/local/featurecounts_merge.nf b/modules/local/featurecounts_merge.nf new file mode 100644 index 00000000..48d5113d --- /dev/null +++ b/modules/local/featurecounts_merge.nf @@ -0,0 +1,33 @@ +process FEATURECOUNTS_MERGE { + tag "${meta.id}" + label 'process_single' + + conda "conda-forge::sed=4.7" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/ubuntu:20.04' : + 'nf-core/ubuntu:20.04' }" + + input: + tuple val(meta), path('featurecounts/*') + + output: + tuple val(meta), path("*.featureCounts.tsv"), emit: counts + tuple val("${task.process}"), val('sed'), eval("sed --version | sed '1!d;s/.*GNU sed) //'"), topic: versions + + when: + task.ext.when == null || task.ext.when + + script: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + featurecounts_merge.sh \\ + ${prefix}.featureCounts.tsv \\ + \$(ls featurecounts/*.featureCounts.tsv | sort) + """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.featureCounts.tsv + """ +} diff --git a/modules/local/frip_score.nf b/modules/local/frip_score.nf index 2d36e3b9..5968d4db 100644 --- a/modules/local/frip_score.nf +++ b/modules/local/frip_score.nf @@ -12,8 +12,8 @@ process FRIP_SCORE { output: tuple val(meta), path("*.txt"), emit: txt - path "versions.yml" , emit: versions - + tuple val("${task.process}"), val('bedtools'), eval("bedtools --version | sed -e \"s/bedtools v//g\""), topic: versions + tuple val("${task.process}"), val('samtools'), eval("samtools --version | sed '1!d;s/.* //'"), topic: versions when: task.ext.when == null || task.ext.when @@ -25,21 +25,11 @@ process FRIP_SCORE { samtools flagstat $bam > ${bam}.flagstat grep 'mapped (' ${bam}.flagstat | grep -v "primary" | awk -v a="\$READS_IN_PEAKS" -v OFS='\t' '{print "${prefix}", a/\$1}' > ${prefix}.FRiP.txt - cat <<-END_VERSIONS > versions.yml - "${task.process}": - bedtools: \$(bedtools --version | sed -e "s/bedtools v//g") - samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') - END_VERSIONS """ stub: def prefix = task.ext.prefix ?: "${meta.id}" """ touch ${prefix}.FRiP.txt - cat <<-END_VERSIONS > versions.yml - "${task.process}": - bedtools: \$(bedtools --version | sed -e "s/bedtools v//g") - samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') - END_VERSIONS """ } diff --git a/modules/local/genome_blacklist_regions.nf b/modules/local/genome_blacklist_regions.nf index 275234e0..73daaa36 100644 --- a/modules/local/genome_blacklist_regions.nf +++ b/modules/local/genome_blacklist_regions.nf @@ -14,8 +14,7 @@ process GENOME_BLACKLIST_REGIONS { output: path '*.bed' , emit: bed - path "versions.yml", emit: versions - + tuple val("${task.process}"), val('bedtools'), eval("bedtools --version | sed -e \"s/bedtools v//g\""), topic: versions when: task.ext.when == null || task.ext.when @@ -27,19 +26,11 @@ process GENOME_BLACKLIST_REGIONS { """ sortBed -i $blacklist -g $sizes | complementBed -i stdin -g $sizes $mito_filter > $file_out - cat <<-END_VERSIONS > versions.yml - "${task.process}": - bedtools: \$(bedtools --version | sed -e "s/bedtools v//g") - END_VERSIONS """ } else { """ awk '{print \$1, '0' , \$2}' OFS='\t' $sizes $mito_filter > $file_out - cat <<-END_VERSIONS > versions.yml - "${task.process}": - bedtools: \$(bedtools --version | sed -e "s/bedtools v//g") - END_VERSIONS """ } @@ -47,10 +38,6 @@ process GENOME_BLACKLIST_REGIONS { def file_out = "${sizes.simpleName}.include_regions.bed" """ touch $file_out - cat <<-END_VERSIONS > versions.yml - "${task.process}": - bedtools: \$(bedtools --version | sed -e "s/bedtools v//g") - END_VERSIONS """ diff --git a/modules/local/get_autosomes.nf b/modules/local/get_autosomes.nf index ee40ecd1..f2228886 100644 --- a/modules/local/get_autosomes.nf +++ b/modules/local/get_autosomes.nf @@ -11,8 +11,7 @@ process GET_AUTOSOMES { output: path '*.txt' , emit: txt - 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 @@ -22,9 +21,5 @@ process GET_AUTOSOMES { $fai \\ ${fai.baseName}.autosomes.txt - cat <<-END_VERSIONS > versions.yml - "${task.process}": - python: \$(python --version | sed 's/Python //g') - END_VERSIONS """ } diff --git a/modules/local/gtf2bed.nf b/modules/local/gtf2bed.nf index 059b5d1c..09ebfff1 100644 --- a/modules/local/gtf2bed.nf +++ b/modules/local/gtf2bed.nf @@ -12,8 +12,7 @@ process GTF2BED { output: path '*.bed' , emit: bed - path "versions.yml", emit: versions - + tuple val("${task.process}"), val('perl'), eval("perl -e 'print \$^V' | sed 's/^v//'"), topic: versions when: task.ext.when == null || task.ext.when @@ -23,9 +22,5 @@ process 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 """ } diff --git a/modules/local/igv.nf b/modules/local/igv.nf index d060d0e7..90d0c723 100644 --- a/modules/local/igv.nf +++ b/modules/local/igv.nf @@ -27,8 +27,7 @@ process IGV { path "*.xml" , emit: xml path fasta , emit: fasta path fai , emit: fai - 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 @@ -44,9 +43,5 @@ process IGV { cat *.txt > igv_files.txt igv_files_to_session.py igv_session.xml igv_files.txt ../../genome/${fasta.getName()} --path_prefix '../../' - cat <<-END_VERSIONS > versions.yml - "${task.process}": - python: \$(python --version | sed 's/Python //g') - END_VERSIONS """ } diff --git a/modules/local/macs3_consensus.nf b/modules/local/macs3_consensus.nf index 4544fe2e..39630a3b 100644 --- a/modules/local/macs3_consensus.nf +++ b/modules/local/macs3_consensus.nf @@ -17,8 +17,8 @@ process MACS3_CONSENSUS { tuple val(meta), path("*.pdf") , emit: pdf tuple val(meta), path("*.boolean.txt") , emit: boolean_txt tuple val(meta), path("*.intersect.txt"), emit: intersect_txt - path "versions.yml" , emit: versions - + tuple val("${task.process}"), val('python'), eval("python --version | sed 's/Python //g'"), topic: versions + tuple val("${task.process}"), val('r-base'), eval("R --version | sed '1!d;s/.*version //;s/ .*//'"), topic: versions when: task.ext.when == null || task.ext.when @@ -47,10 +47,5 @@ process MACS3_CONSENSUS { plot_peak_intersect.r -i ${prefix}.boolean.intersect.txt -o ${prefix}.boolean.intersect.plot.pdf - cat <<-END_VERSIONS > versions.yml - "${task.process}": - python: \$(python --version | sed 's/Python //g') - r-base: \$(echo \$(R --version 2>&1) | sed 's/^.*R version //; s/ .*\$//') - END_VERSIONS """ } diff --git a/modules/local/multiqc.nf b/modules/local/multiqc.nf index 3c8d0bcd..672a7874 100644 --- a/modules/local/multiqc.nf +++ b/modules/local/multiqc.nf @@ -59,8 +59,9 @@ process MULTIQC { path "*multiqc_report.html", emit: report path "*_data" , emit: data path "*_plots" , optional:true, emit: plots - path "versions.yml" , emit: versions - + // MultiQC must NOT push its version to the `versions` topic: its own input depends on + // that topic being resolved, so publishing to it creates a cycle that hangs the run. + tuple val("${task.process}"), val('multiqc'), eval("multiqc --version | sed -e \"s/multiqc, version //g\""), emit: versions when: task.ext.when == null || task.ext.when @@ -74,10 +75,6 @@ process MULTIQC { $custom_config \\ . - cat <<-END_VERSIONS > versions.yml - "${task.process}": - multiqc: \$( multiqc --version | sed -e "s/multiqc, version //g" ) - END_VERSIONS """ stub: @@ -85,9 +82,5 @@ process MULTIQC { mkdir -p multiqc_data touch multiqc_report.html touch multiqc_data/multiqc.log - cat <<-END_VERSIONS > versions.yml - "${task.process}": - multiqc: \$( multiqc --version | sed -e "s/multiqc, version //g" ) - END_VERSIONS """ } diff --git a/modules/local/multiqc_custom_peaks.nf b/modules/local/multiqc_custom_peaks.nf index 35ee1c85..acddb7df 100644 --- a/modules/local/multiqc_custom_peaks.nf +++ b/modules/local/multiqc_custom_peaks.nf @@ -14,8 +14,7 @@ process MULTIQC_CUSTOM_PEAKS { output: tuple val(meta), path("*.count_mqc.tsv"), emit: count tuple val(meta), path("*.FRiP_mqc.tsv") , emit: frip - path "versions.yml" , emit: versions - + tuple val("${task.process}"), val('sed'), eval("sed --version | sed '1!d;s/.*GNU sed) //'"), topic: versions when: task.ext.when == null || task.ext.when @@ -25,10 +24,6 @@ process MULTIQC_CUSTOM_PEAKS { cat $peak | wc -l | awk -v OFS='\t' '{ print "${prefix}", \$1 }' | cat $peak_count_header - > ${prefix}.count_mqc.tsv cat $frip_score_header $frip > ${prefix}.FRiP_mqc.tsv - cat <<-END_VERSIONS > versions.yml - "${task.process}": - sed: \$(echo \$(sed --version 2>&1) | sed 's/^.*GNU sed) //; s/ .*\$//') - END_VERSIONS """ stub: @@ -37,9 +32,5 @@ process MULTIQC_CUSTOM_PEAKS { touch ${prefix}.count_mqc.tsv touch ${prefix}.FRiP_mqc.tsv - 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/plot_homer_annotatepeaks.nf b/modules/local/plot_homer_annotatepeaks.nf index 6b2833a6..1f2c7687 100644 --- a/modules/local/plot_homer_annotatepeaks.nf +++ b/modules/local/plot_homer_annotatepeaks.nf @@ -15,8 +15,7 @@ process PLOT_HOMER_ANNOTATEPEAKS { path '*.txt' , emit: txt path '*.pdf' , emit: pdf path '*.tsv' , emit: tsv - path "versions.yml", emit: versions - + tuple val("${task.process}"), val('r-base'), eval("R --version | sed '1!d;s/.*version //;s/ .*//'"), topic: versions when: task.ext.when == null || task.ext.when @@ -34,9 +33,5 @@ process PLOT_HOMER_ANNOTATEPEAKS { find ./ -type f -name "*summary.txt" -exec cat {} \\; | cat $mqc_header - > ${prefix}.summary_mqc.tsv - cat <<-END_VERSIONS > versions.yml - "${task.process}": - r-base: \$(echo \$(R --version 2>&1) | sed 's/^.*R version //; s/ .*\$//') - END_VERSIONS """ } diff --git a/modules/local/plot_macs3_qc.nf b/modules/local/plot_macs3_qc.nf index 7cf371c2..47a5a660 100644 --- a/modules/local/plot_macs3_qc.nf +++ b/modules/local/plot_macs3_qc.nf @@ -13,8 +13,7 @@ process PLOT_MACS3_QC { output: path '*.txt' , emit: txt path '*.pdf' , emit: pdf - path "versions.yml", emit: versions - + tuple val("${task.process}"), val('r-base'), eval("R --version | sed '1!d;s/.*version //;s/ .*//'"), topic: versions when: task.ext.when == null || task.ext.when @@ -29,9 +28,5 @@ process PLOT_MACS3_QC { -s ${peak_list.replaceAll("_peaks.${peak_type}","")} \\ $args - cat <<-END_VERSIONS > versions.yml - "${task.process}": - r-base: \$(echo \$(R --version 2>&1) | sed 's/^.*R version //; s/ .*\$//') - END_VERSIONS """ } diff --git a/modules/local/samplesheet_check.nf b/modules/local/samplesheet_check.nf index fb76d767..33541112 100644 --- a/modules/local/samplesheet_check.nf +++ b/modules/local/samplesheet_check.nf @@ -12,8 +12,7 @@ process SAMPLESHEET_CHECK { output: path '*.csv' , emit: csv - 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 @@ -24,9 +23,5 @@ process SAMPLESHEET_CHECK { $samplesheet \\ $args - cat <<-END_VERSIONS > versions.yml - "${task.process}": - python: \$(python --version | sed 's/Python //g') - END_VERSIONS """ } diff --git a/modules/local/star_align.nf b/modules/local/star_align.nf index bd39cd07..f201ce3f 100644 --- a/modules/local/star_align.nf +++ b/modules/local/star_align.nf @@ -18,8 +18,7 @@ process STAR_ALIGN { 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 -e \"s/STAR_//g\""), topic: versions 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 @@ -53,9 +52,5 @@ 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") - END_VERSIONS """ } diff --git a/modules/local/star_genomegenerate.nf b/modules/local/star_genomegenerate.nf index a36af0a8..b3de4205 100644 --- a/modules/local/star_genomegenerate.nf +++ b/modules/local/star_genomegenerate.nf @@ -14,8 +14,7 @@ process STAR_GENOMEGENERATE { output: path "star" , emit: index - path "versions.yml", emit: versions - + tuple val("${task.process}"), val('star'), eval("STAR --version | sed -e \"s/STAR_//g\""), topic: versions when: task.ext.when == null || task.ext.when @@ -33,10 +32,6 @@ process STAR_GENOMEGENERATE { --runThreadN $task.cpus \\ $memory \\ ${args.join(' ')} - cat <<-END_VERSIONS > versions.yml - "${task.process}": - star: \$(STAR --version | sed -e "s/STAR_//g") - END_VERSIONS """ } else { """ @@ -52,10 +47,6 @@ process STAR_GENOMEGENERATE { --genomeSAindexNbases \$NUM_BASES \\ $memory \\ ${args.join(' ')} - cat <<-END_VERSIONS > versions.yml - "${task.process}": - star: \$(STAR --version | sed -e "s/STAR_//g") - END_VERSIONS """ } } diff --git a/modules/local/tests/featurecounts_merge.nf.test b/modules/local/tests/featurecounts_merge.nf.test new file mode 100644 index 00000000..1f191d04 --- /dev/null +++ b/modules/local/tests/featurecounts_merge.nf.test @@ -0,0 +1,102 @@ +nextflow_process { + + name "Test Process FEATURECOUNTS_MERGE" + script "../featurecounts_merge.nf" + process "FEATURECOUNTS_MERGE" + + tag "modules" + tag "modules_local" + tag "featurecounts_merge" + + test("merge single-end and paired-end count tables") { + + when { + process { + """ + input[0] = [ + [ id:'consensus_peaks' ], + [ + file("\${projectDir}/modules/local/tests/fixtures/se.featureCounts.tsv", checkIfExists: true), + file("\${projectDir}/modules/local/tests/fixtures/pe.featureCounts.tsv", checkIfExists: true) + ] + ] + """ + } + } + + then { + def merged = path(process.out.counts.get(0).get(1)).readLines() + def header = merged.find { it.startsWith('Geneid') }.split('\t') + def sampleCols = header[6..-1] + assertAll( + { assert process.success }, + // one merged table emitted + { assert process.out.counts.size() == 1 }, + // The module merges its inputs in `ls | sort` filename order, so the + // column order is deterministic. Here 'pe.featureCounts.tsv' sorts + // before 'se.featureCounts.tsv' (in the pipeline the files are + // '...PE.featureCounts.tsv' / '...SE.featureCounts.tsv', so PE-first). + // Every SE and PE sample column appears exactly once. + { assert sampleCols == ['T0_PE.bam', 'T15_PE.bam', 'T100_SE.bam', 'T150_SE.bam'] }, + { assert sampleCols.toUnique().size() == sampleCols.size() }, + // Annotation + row order preserved from the first-sorted (PE) table; + // SE counts matched to rows by Geneid despite the different row order. + { assert merged.contains('peak_3\tIII\t9\t309\t+\t301\t131\t132\t31\t32') }, + { assert merged.contains('peak_1\tI\t1\t100\t+\t100\t111\t112\t11\t12') }, + { assert merged.contains('peak_2\tII\t5\t205\t+\t201\t121\t122\t21\t22') }, + { assert snapshot(process.out.versions).match("versions") } + ) + } + } + + test("single-file pass-through (homogeneous cohort)") { + + when { + process { + """ + input[0] = [ + [ id:'consensus_peaks' ], + [ file("\${projectDir}/modules/local/tests/fixtures/se.featureCounts.tsv", checkIfExists: true) ] + ] + """ + } + } + + then { + def merged = path(process.out.counts.get(0).get(1)).readLines() + def header = merged.find { it.startsWith('Geneid') }.split('\t') + assertAll( + { assert process.success }, + { assert (header[6..-1]) == ['T100_SE.bam', 'T150_SE.bam'] }, + { assert merged.contains('peak_1\tI\t1\t100\t+\t100\t11\t12') }, + { assert merged.contains('peak_3\tIII\t9\t309\t+\t301\t31\t32') } + ) + } + } + + test("stub") { + + options "-stub" + + when { + process { + """ + input[0] = [ + [ id:'consensus_peaks' ], + [ + file("\${projectDir}/modules/local/tests/fixtures/se.featureCounts.tsv", checkIfExists: true), + file("\${projectDir}/modules/local/tests/fixtures/pe.featureCounts.tsv", checkIfExists: true) + ] + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } +} diff --git a/modules/local/tests/featurecounts_merge.nf.test.snap b/modules/local/tests/featurecounts_merge.nf.test.snap new file mode 100644 index 00000000..afe80ad3 --- /dev/null +++ b/modules/local/tests/featurecounts_merge.nf.test.snap @@ -0,0 +1,44 @@ +{ + "versions": { + "content": null, + "timestamp": "2026-07-23T03:28:47.894742", + "meta": { + "nf-test": "0.9.4", + "nextflow": "26.04.4" + } + }, + "stub": { + "content": [ + { + "0": [ + [ + { + "id": "consensus_peaks" + }, + "consensus_peaks.featureCounts.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + "FEATURECOUNTS_MERGE", + "sed", + "4.7" + ] + ], + "counts": [ + [ + { + "id": "consensus_peaks" + }, + "consensus_peaks.featureCounts.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + } + ], + "timestamp": "2026-07-26T19:08:19.592397783", + "meta": { + "nf-test": "0.9.4", + "nextflow": "25.10.4" + } + } +} \ No newline at end of file diff --git a/modules/local/tests/fixtures/pe.featureCounts.tsv b/modules/local/tests/fixtures/pe.featureCounts.tsv new file mode 100644 index 00000000..bbd6a111 --- /dev/null +++ b/modules/local/tests/fixtures/pe.featureCounts.tsv @@ -0,0 +1,5 @@ +# Program:featureCounts v2.1.1; Command:"featureCounts" "-F" "SAF" "-p" +Geneid Chr Start End Strand Length T0_PE.bam T15_PE.bam +peak_3 III 9 309 + 301 131 132 +peak_1 I 1 100 + 100 111 112 +peak_2 II 5 205 + 201 121 122 diff --git a/modules/local/tests/fixtures/se.featureCounts.tsv b/modules/local/tests/fixtures/se.featureCounts.tsv new file mode 100644 index 00000000..da0e2690 --- /dev/null +++ b/modules/local/tests/fixtures/se.featureCounts.tsv @@ -0,0 +1,5 @@ +# Program:featureCounts v2.1.1; Command:"featureCounts" "-F" "SAF" +Geneid Chr Start End Strand Length T100_SE.bam T150_SE.bam +peak_1 I 1 100 + 100 11 12 +peak_2 II 5 205 + 201 21 22 +peak_3 III 9 309 + 301 31 32 diff --git a/modules/local/tss_extract.nf b/modules/local/tss_extract.nf index e685256c..0c65774c 100644 --- a/modules/local/tss_extract.nf +++ b/modules/local/tss_extract.nf @@ -10,8 +10,7 @@ process TSS_EXTRACT { output: path "*.bed" , emit: tss - path "versions.yml", emit: versions - + tuple val("${task.process}"), val('sed'), eval("sed --version | sed '1!d;s/.*GNU sed) //'"), topic: versions when: task.ext.when == null || task.ext.when @@ -19,9 +18,5 @@ process TSS_EXTRACT { """ cat $bed | awk -v FS='\t' -v OFS='\t' '{ if(\$6=="+") \$3=\$2+1; else \$2=\$3-1; print \$1, \$2, \$3, \$4, \$5, \$6;}' > ${bed.baseName}.tss.bed - cat <<-END_VERSIONS > versions.yml - "${task.process}": - sed: \$(echo \$(sed --version 2>&1) | sed 's/^.*GNU sed) //; s/ .*\$//') - END_VERSIONS """ } diff --git a/modules/nf-core/ataqv/ataqv/environment.yml b/modules/nf-core/ataqv/ataqv/environment.yml new file mode 100644 index 00000000..0023d894 --- /dev/null +++ b/modules/nf-core/ataqv/ataqv/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::ataqv=1.3.1 diff --git a/modules/nf-core/ataqv/ataqv/main.nf b/modules/nf-core/ataqv/ataqv/main.nf index 3a35b14d..2dbb95ea 100644 --- a/modules/nf-core/ataqv/ataqv/main.nf +++ b/modules/nf-core/ataqv/ataqv/main.nf @@ -2,10 +2,10 @@ process ATAQV_ATAQV { tag "$meta.id" label 'process_medium' - conda 'bioconda::ataqv=1.3.1' - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine in ['singularity', 'apptainer'] && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/ataqv:1.3.1--py310ha155cf9_1' : - 'biocontainers/ataqv:1.3.1--py310ha155cf9_1' }" + 'quay.io/biocontainers/ataqv:1.3.1--py310ha155cf9_1' }" input: tuple val(meta), path(bam), path(bai), path(peak_file) @@ -18,36 +18,43 @@ process ATAQV_ATAQV { output: tuple val(meta), path("*.ataqv.json"), emit: json tuple val(meta), path("*.problems") , emit: problems, optional: true - path "versions.yml" , emit: versions + tuple val("${task.process}"), val('ataqv'), eval("echo \$(ataqv --version)"), emit: versions_ataqv, topic: versions when: task.ext.when == null || task.ext.when script: - def args = task.ext.args ?: '' - def mito = mito_name ? "--mitochondrial-reference-name ${mito_name}" : '' + def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" - def peak = peak_file ? "--peak-file $peak_file" : '' - def tss = tss_file ? "--tss-file $tss_file" : '' - def excl_regs = excl_regs_file ? "--excluded-region-file $excl_regs_file" : '' - def autosom_ref = autosom_ref_file ? "--autosomal-reference-file $autosom_ref_file" : '' + def mito = mito_name ? "--mitochondrial-reference-name ${mito_name}" : '' + + def peak = peak_file ? "--peak-file ${peak_file}" : '' + def tss = tss_file ? "--tss-file ${tss_file}" : '' + def excl_regs = excl_regs_file ? "--excluded-region-file ${excl_regs_file}" : '' + def autosom_ref = autosom_ref_file ? "--autosomal-reference-file ${autosom_ref_file}" : '' """ ataqv \\ - $args \\ - $mito \\ - $peak \\ - $tss \\ - $excl_regs \\ - $autosom_ref \\ + ${args} \\ + ${mito} \\ + ${peak} \\ + ${tss} \\ + ${excl_regs} \\ + ${autosom_ref} \\ --metrics-file "${prefix}.ataqv.json" \\ - --threads $task.cpus \\ - --name $prefix \\ - $organism \\ - $bam - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - ataqv: \$( ataqv --version ) - END_VERSIONS + --threads ${task.cpus} \\ + --name ${prefix} \\ + ${organism} \\ + ${bam} + + """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + def args = task.ext.args ?: '' + def problems_cmd = args.contains("--log-problematic-reads") ? "touch 1.problems" : "" + """ + touch ${prefix}.ataqv.json + ${problems_cmd} + """ } diff --git a/modules/nf-core/ataqv/ataqv/meta.yml b/modules/nf-core/ataqv/ataqv/meta.yml index 86f7d845..71ca36dc 100644 --- a/modules/nf-core/ataqv/ataqv/meta.yml +++ b/modules/nf-core/ataqv/ataqv/meta.yml @@ -6,66 +6,113 @@ keywords: - ataqv tools: - ataqv: - description: ataqv is a toolkit for measuring and comparing ATAC-seq results. It was written to help understand how well ATAC-seq assays have worked, and to make it easier to spot differences that might be caused by library prep or sequencing. + description: ataqv is a toolkit for measuring and comparing ATAC-seq results. + It was written to help understand how well ATAC-seq assays have worked, and + to make it easier to spot differences that might be caused by library prep or + sequencing. homepage: https://github.com/ParkerLab/ataqv/blob/master/README.rst documentation: https://github.com/ParkerLab/ataqv/blob/master/README.rst tool_dev_url: https://github.com/ParkerLab/ataqv doi: "10.1016/j.cels.2020.02.009" - licence: ["GPL v3"] - + licence: + - "GPL v3" + identifier: biotools:ataqv input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - bam: - type: file - description: BAM file - pattern: "*.bam" - - bai: - type: file - description: BAM index file with the same prefix as bam file. Required if tss_file input is provided. - pattern: "*.bam.bai" - - peak_file: - type: file - description: A BED file of peaks called for alignments in the BAM file - pattern: "*.bed" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bam: + type: file + description: BAM file + pattern: "*.bam" + ontologies: [] + - bai: + type: file + description: BAM index file with the same prefix as bam file. Required if tss_file + input is provided. + pattern: "*.bam.bai" + ontologies: [] + - peak_file: + type: file + description: A BED file of peaks called for alignments in the BAM file + pattern: "*.bed" + ontologies: [] - organism: type: string - description: The subject of the experiment, which determines the list of autosomes (see "Reference Genome Configuration" section at https://github.com/ParkerLab/ataqv). + description: The subject of the experiment, which determines the list of autosomes + (see "Reference Genome Configuration" section at https://github.com/ParkerLab/ataqv). - mito_name: type: string description: Name of the mitochondrial sequence. - tss_file: type: file - description: A BED file of transcription start sites for the experiment organism. If supplied, a TSS enrichment score will be calculated according to the ENCODE data standards. This calculation requires that the BAM file of alignments be indexed. + description: A BED file of transcription start sites for the experiment organism. + If supplied, a TSS enrichment score will be calculated according to the ENCODE + data standards. This calculation requires that the BAM file of alignments be + indexed. pattern: "*.bed" + ontologies: [] - excl_regs_file: type: file - description: A BED file containing excluded regions. Peaks or TSS overlapping these will be ignored. + description: A BED file containing excluded regions. Peaks or TSS overlapping + these will be ignored. pattern: "*.bed" + ontologies: [] - autosom_ref_file: type: file - description: A file containing autosomal reference names, one per line. The names must match the reference names in the alignment file exactly, or the metrics based on counts of autosomal alignments will be wrong. - + description: A file containing autosomal reference names, one per line. The names + must match the reference names in the alignment file exactly, or the metrics + based on counts of autosomal alignments will be wrong. + ontologies: [] output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - json: - type: file - description: The JSON file to which metrics will be written. - - problems: - type: file - description: If given, problematic reads will be logged to a file per read group, with names derived from the read group IDs, with ".problems" appended. If no read groups are found, the reads will be written to one file named after the BAM file. - pattern: "*.problems" - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - + json: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.ataqv.json": + type: file + description: The JSON file to which metrics will be written. + ontologies: [] + problems: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.problems": + type: file + description: If given, problematic reads will be logged to a file per read + group, with names derived from the read group IDs, with ".problems" appended. + If no read groups are found, the reads will be written to one file named + after the BAM file. + pattern: "*.problems" + ontologies: [] + versions_ataqv: + - - ${task.process}: + type: string + description: The name of the process + - ataqv: + type: string + description: The name of the tool + - echo \$(ataqv --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 + - ataqv: + type: string + description: The name of the tool + - echo \$(ataqv --version): + type: eval + description: The expression to obtain the version of the tool authors: - "@i-pletenev" +maintainers: + - "@i-pletenev" diff --git a/modules/nf-core/ataqv/ataqv/tests/main.nf.test b/modules/nf-core/ataqv/ataqv/tests/main.nf.test new file mode 100644 index 00000000..6bb70746 --- /dev/null +++ b/modules/nf-core/ataqv/ataqv/tests/main.nf.test @@ -0,0 +1,264 @@ +nextflow_process { + + name "Test Process ATAQV_ATAQV" + config "./nextflow.config" + script "../main.nf" + process "ATAQV_ATAQV" + + tag "modules" + tag "modules_nfcore" + tag "ataqv" + tag "ataqv/ataqv" + + test("test_ataqv_ataqv") { + + when { + params { + module_args = '' + } + process { + """ + input[0] = [ + [id:'test',single_end:false], + file(params.modules_testdata_base_path + "genomics/sarscov2/illumina/bam/test.paired_end.bam",checkIfExists:true), + [], + [] + ] + input[1] = 'human' + input[2] = '' + input[3] = [] + input[4] = [] + input[5] = [] + """ + } + } + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.json.collect{[ + file(it[1]).name, + path(it[1]).json[0].findAll{it.key != "timestamp"}.toString().md5() + ]}, + process.out.problems, + process.out.findAll { key, val -> key.startsWith('versions') } + ).match() } + ) + } + } + + test("test_ataqv_ataqv_problem_reads") { + + when { + params { + module_args = '--log-problematic-reads' + } + process { + """ + input[0] = [ + [id:'test',single_end:false], + file(params.modules_testdata_base_path + "genomics/sarscov2/illumina/bam/test.paired_end.bam",checkIfExists:true), + [], + [] + ] + input[1] = 'human' + input[2] = '' + input[3] = [] + input[4] = [] + input[5] = [] + """ + } + } + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.json.collect{[ + file(it[1]).name, + path(it[1]).json[0].findAll{it.key != "timestamp"}.toString().md5() + ]}, + process.out.problems.collect{ file(it[1]).name }, + process.out.findAll { key, val -> key.startsWith('versions') } + ).match() } + ) + } + } + + test("test_ataqv_ataqv_peak") { + + when { + params { + module_args = '' + } + process { + """ + input[0] = [ + [id:'test',single_end:false], + 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/genome/bed/test.bed",checkIfExists:true) + ] + input[1] = 'human' + input[2] = '' + input[3] = [] + input[4] = [] + input[5] = [] + """ + } + } + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.json.collect{[ + file(it[1]).name, + path(it[1]).json[0].findAll{it.key != "timestamp"}.toString().md5() + ]}, + process.out.problems, + process.out.findAll { key, val -> key.startsWith('versions') } + ).match() } + ) + } + } + + test("test_ataqv_ataqv_tss") { + + when { + params { + module_args = '' + } + process { + """ + input[0] = [ + [id:'test',single_end:false], + 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] = 'human' + input[2] = '' + input[3] = file(params.modules_testdata_base_path + "genomics/sarscov2/genome/bed/test.bed",checkIfExists:true) + input[4] = [] + input[5] = [] + """ + } + } + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.json.collect{[ + file(it[1]).name, + path(it[1]).json[0].findAll{it.key != "timestamp"}.toString().md5() + ]}, + process.out.problems, + process.out.findAll { key, val -> key.startsWith('versions') } + ).match() } + ) + } + } + + test("test_ataqv_ataqv_excluded_regs") { + + when { + params { + module_args = '' + } + process { + """ + input[0] = [ + [id:'test',single_end:false], + 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] = 'human' + input[2] = '' + input[3] = file(params.modules_testdata_base_path + "genomics/sarscov2/genome/bed/test.bed",checkIfExists:true) + input[4] = file(params.modules_testdata_base_path + "genomics/sarscov2/genome/bed/test2.bed",checkIfExists:true) + input[5] = [] + """ + } + } + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.json.collect{[ + file(it[1]).name, + path(it[1]).json[0].findAll{it.key != "timestamp"}.toString().md5() + ]}, + process.out.problems, + process.out.findAll { key, val -> key.startsWith('versions') } + ).match() } + ) + } + } + + test("ataqv - stub") { + + options "-stub" + + when { + params { + module_args = '' + } + process { + """ + input[0] = [ + [id:'test',single_end:false], + file(params.modules_testdata_base_path + "genomics/sarscov2/illumina/bam/test.paired_end.bam",checkIfExists:true), + [], + [] + ] + input[1] = 'human' + input[2] = '' + input[3] = [] + input[4] = [] + input[5] = [] + """ + } + } + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out, + process.out.findAll { key, val -> key.startsWith('versions') } + ).match() } + ) + } + } + + test("ataqv - problems - stub") { + + options "-stub" + + when { + params { + module_args = '--log-problematic-reads' + } + process { + """ + input[0] = [ + [id:'test',single_end:false], + file(params.modules_testdata_base_path + "genomics/sarscov2/illumina/bam/test.paired_end.bam",checkIfExists:true), + [], + [] + ] + input[1] = 'human' + input[2] = '' + input[3] = [] + input[4] = [] + input[5] = [] + """ + } + } + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } +} diff --git a/modules/nf-core/ataqv/ataqv/tests/main.nf.test.snap b/modules/nf-core/ataqv/ataqv/tests/main.nf.test.snap new file mode 100644 index 00000000..b8f55a10 --- /dev/null +++ b/modules/nf-core/ataqv/ataqv/tests/main.nf.test.snap @@ -0,0 +1,256 @@ +{ + "test_ataqv_ataqv_tss": { + "content": [ + [ + [ + "test.ataqv.json", + "4fb5f3438d800d24f5019d232aef082d" + ] + ], + [ + + ], + { + "versions_ataqv": [ + [ + "ATAQV_ATAQV", + "ataqv", + "1.3.1" + ] + ] + } + ], + "timestamp": "2026-03-11T18:47:59.717001", + "meta": { + "nf-test": "0.9.4", + "nextflow": "25.10.4" + } + }, + "ataqv - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.ataqv.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + + ], + "2": [ + [ + "ATAQV_ATAQV", + "ataqv", + "1.3.1" + ] + ], + "json": [ + [ + { + "id": "test", + "single_end": false + }, + "test.ataqv.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "problems": [ + + ], + "versions_ataqv": [ + [ + "ATAQV_ATAQV", + "ataqv", + "1.3.1" + ] + ] + }, + { + "versions_ataqv": [ + [ + "ATAQV_ATAQV", + "ataqv", + "1.3.1" + ] + ] + } + ], + "timestamp": "2026-03-11T18:48:24.234486", + "meta": { + "nf-test": "0.9.4", + "nextflow": "25.10.4" + } + }, + "test_ataqv_ataqv_problem_reads": { + "content": [ + [ + [ + "test.ataqv.json", + "4d418b039281d274b1440c9e73267143" + ] + ], + [ + "1.problems" + ], + { + "versions_ataqv": [ + [ + "ATAQV_ATAQV", + "ataqv", + "1.3.1" + ] + ] + } + ], + "timestamp": "2026-03-11T18:47:34.322713", + "meta": { + "nf-test": "0.9.4", + "nextflow": "25.10.4" + } + }, + "test_ataqv_ataqv": { + "content": [ + [ + [ + "test.ataqv.json", + "4d418b039281d274b1440c9e73267143" + ] + ], + [ + + ], + { + "versions_ataqv": [ + [ + "ATAQV_ATAQV", + "ataqv", + "1.3.1" + ] + ] + } + ], + "timestamp": "2026-03-11T18:47:22.148513", + "meta": { + "nf-test": "0.9.4", + "nextflow": "25.10.4" + } + }, + "test_ataqv_ataqv_excluded_regs": { + "content": [ + [ + [ + "test.ataqv.json", + "4fb5f3438d800d24f5019d232aef082d" + ] + ], + [ + + ], + { + "versions_ataqv": [ + [ + "ATAQV_ATAQV", + "ataqv", + "1.3.1" + ] + ] + } + ], + "timestamp": "2026-03-11T18:48:12.237499", + "meta": { + "nf-test": "0.9.4", + "nextflow": "25.10.4" + } + }, + "test_ataqv_ataqv_peak": { + "content": [ + [ + [ + "test.ataqv.json", + "4d418b039281d274b1440c9e73267143" + ] + ], + [ + + ], + { + "versions_ataqv": [ + [ + "ATAQV_ATAQV", + "ataqv", + "1.3.1" + ] + ] + } + ], + "timestamp": "2026-03-11T18:47:47.060191", + "meta": { + "nf-test": "0.9.4", + "nextflow": "25.10.4" + } + }, + "ataqv - problems - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.ataqv.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "1.problems:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + [ + "ATAQV_ATAQV", + "ataqv", + "1.3.1" + ] + ], + "json": [ + [ + { + "id": "test", + "single_end": false + }, + "test.ataqv.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "problems": [ + [ + { + "id": "test", + "single_end": false + }, + "1.problems:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions_ataqv": [ + [ + "ATAQV_ATAQV", + "ataqv", + "1.3.1" + ] + ] + } + ], + "timestamp": "2026-03-11T18:48:36.201719", + "meta": { + "nf-test": "0.9.4", + "nextflow": "25.10.4" + } + } +} \ No newline at end of file diff --git a/modules/nf-core/ataqv/ataqv/tests/nextflow.config b/modules/nf-core/ataqv/ataqv/tests/nextflow.config new file mode 100644 index 00000000..78dd25df --- /dev/null +++ b/modules/nf-core/ataqv/ataqv/tests/nextflow.config @@ -0,0 +1,5 @@ +process { + withName: "ATAQV_ATAQV" { + ext.args = params.module_args + } +} diff --git a/modules/nf-core/ataqv/mkarv/environment.yml b/modules/nf-core/ataqv/mkarv/environment.yml new file mode 100644 index 00000000..0023d894 --- /dev/null +++ b/modules/nf-core/ataqv/mkarv/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::ataqv=1.3.1 diff --git a/modules/nf-core/ataqv/mkarv/main.nf b/modules/nf-core/ataqv/mkarv/main.nf index 8722be5d..a26c111e 100644 --- a/modules/nf-core/ataqv/mkarv/main.nf +++ b/modules/nf-core/ataqv/mkarv/main.nf @@ -1,18 +1,18 @@ process ATAQV_MKARV { label 'process_medium' - conda 'bioconda::ataqv=1.3.1' - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine in ['singularity', 'apptainer'] && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/ataqv:1.3.1--py310ha155cf9_1': - 'biocontainers/ataqv:1.3.1--py310ha155cf9_1' }" + 'quay.io/biocontainers/ataqv:1.3.1--py310ha155cf9_1' }" input: path "jsons/*" output: path "html" , emit: html - path "versions.yml", emit: versions - + tuple val("${task.process}"), val('ataqv'), eval('echo \$(ataqv --version)'), emit: versions_ataqv, topic: versions + // tuple val("${task.process}"), val('mkarv'), eval('mkarv --version'), emit: versions_mkarv, topic: versions //Use this when version string has been fixed when: task.ext.when == null || task.ext.when @@ -20,16 +20,16 @@ process ATAQV_MKARV { def args = task.ext.args ?: '' """ mkarv \\ - $args \\ - --concurrency $task.cpus \\ + ${args} \\ + --concurrency ${task.cpus} \\ --force \\ ./html/ \\ jsons/* + """ - cat <<-END_VERSIONS > versions.yml - "${task.process}": - # mkarv: \$( mkarv --version ) # Use this when version string has been fixed - ataqv: \$( ataqv --version ) - END_VERSIONS + stub: + """ + mkdir -p html + touch html/index.html """ } diff --git a/modules/nf-core/ataqv/mkarv/meta.yml b/modules/nf-core/ataqv/mkarv/meta.yml index 6ad6d69e..8027f1a6 100644 --- a/modules/nf-core/ataqv/mkarv/meta.yml +++ b/modules/nf-core/ataqv/mkarv/meta.yml @@ -4,33 +4,73 @@ keywords: - ataqv - ATAC-seq - qc - - ataqv - mkarv - tools: - "ataqv": - description: "ataqv is a toolkit for measuring and comparing ATAC-seq results. It was written to help understand how well ATAC-seq assays have worked, and to make it easier to spot differences that might be caused by library prep or sequencing." + description: "ataqv is a toolkit for measuring and comparing ATAC-seq results.\ + \ It was written to help understand how well ATAC-seq assays have worked, and\ + \ to make it easier to spot differences that might be caused by library prep\ + \ or sequencing." homepage: "https://github.com/ParkerLab/ataqv/blob/master/README.rst" documentation: "https://github.com/ParkerLab/ataqv/blob/master/README.rst" tool_dev_url: "https://github.com/ParkerLab/ataqv" - - licence: "['GPL v3']" - + licence: + - "GPL v3" + identifier: biotools:ataqv input: - - json: + - jsons/*: type: file - description: The JSON file with ataqv metrics + description: JSON files pattern: "*.json" - + ontologies: + - edam: http://edamontology.org/format_3464 output: - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - - html: - type: directory - description: Web application to visualize results in HTML format - pattern: "*.html" - + html: + - html: + type: directory + description: Web application to visualize results in HTML format + pattern: "*.html" + versions_ataqv: + - - ${task.process}: + type: string + description: The name of the process + - ataqv: + type: string + description: The name of the tool + - echo \$(ataqv --version): + type: eval + description: The expression to obtain the version of the tool + versions_mkarv: + - - ${task.process}: + type: string + description: The name of the process + - mkarv: + type: string + description: The name of the tool + - mkarv --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 + - ataqv: + type: string + description: The name of the tool + - echo \$(ataqv --version): + type: eval + description: The expression to obtain the version of the tool + - - ${task.process}: + type: string + description: The name of the process + - mkarv: + type: string + description: The name of the tool + - mkarv --version: + type: eval + description: The expression to obtain the version of the tool authors: - "@bjlang" +maintainers: + - "@bjlang" diff --git a/modules/nf-core/ataqv/mkarv/tests/main.nf.test b/modules/nf-core/ataqv/mkarv/tests/main.nf.test new file mode 100644 index 00000000..5fa6593e --- /dev/null +++ b/modules/nf-core/ataqv/mkarv/tests/main.nf.test @@ -0,0 +1,79 @@ +nextflow_process { + + name "Test Process ATAQV_MKARV" + + script "../main.nf" + process "ATAQV_MKARV" + + tag "modules" + tag "modules_nfcore" + tag "ataqv" + tag "ataqv/ataqv" + tag "ataqv/mkarv" + + setup { + run("ATAQV_ATAQV") { + script "../../ataqv/main.nf" + + process { + """ + input[0] = [ + [id:'test',single_end:false], + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.bam',checkIfExists:true), + [], + [] + ] + input[1] = 'human' + input[2] = '' + input[3] = [] + input[4] = [] + input[5] = [] + """ + } + } + } + + test("test_ataqv_mkarv") { + when { + params { + module_args = '' + } + process { + """ + input[0] = ATAQV_ATAQV.out.json.collect{it[1]} + """ + } + } + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("test_ataqv_mkarv - stub") { + + options '-stub' + + when { + params { + module_args = '' + } + process { + """ + input[0] = ATAQV_ATAQV.out.json.collect{it[1]} + """ + } + } + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out, + process.out.findAll { key, val -> key.startsWith('versions') } + ).match() } + ) + } + } +} diff --git a/modules/nf-core/ataqv/mkarv/tests/main.nf.test.snap b/modules/nf-core/ataqv/mkarv/tests/main.nf.test.snap new file mode 100644 index 00000000..f8063319 --- /dev/null +++ b/modules/nf-core/ataqv/mkarv/tests/main.nf.test.snap @@ -0,0 +1,141 @@ +{ + "test_ataqv_mkarv - stub": { + "content": [ + { + "0": [ + [ + "index.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + "ATAQV_MKARV", + "ataqv", + "1.3.1" + ] + ], + "html": [ + [ + "index.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions_ataqv": [ + [ + "ATAQV_MKARV", + "ataqv", + "1.3.1" + ] + ] + }, + { + "versions_ataqv": [ + [ + "ATAQV_MKARV", + "ataqv", + "1.3.1" + ] + ] + } + ], + "timestamp": "2026-03-12T10:55:28.076994", + "meta": { + "nf-test": "0.9.4", + "nextflow": "25.10.4" + } + }, + "test_ataqv_mkarv": { + "content": [ + { + "0": [ + [ + [ + "ataqv.css:md5,7bb9e18974018dd29bdc12a46a6d6d65", + "datatables.buttons.min.css:md5,675306abc9d3239314f2c66c0e22ef7a", + "datatables.fontawesome.css:md5,716d7a3edd2c75e712b1ffe26f12a861", + "datatables.min.css:md5,00ef3e39d9302618395ab189ec8bcd9f", + "font-awesome.min.css:md5,89916fa773ce96569604016ef25cab50", + "normalize.css:md5,40d20cc85100840580df4346bb99d7ed" + ], + [ + "1.json.gz:md5,7c01e4f0136404e6db2328485d68d154" + ], + [ + "FontAwesome.otf:md5,9ccfa32dd4cd1b8e83f68899d85bd5e6", + "fontawesome-webfont.eot:md5,404a525502f8e5ba7e93b9f02d9e83a9", + "fontawesome-webfont.svg:md5,bae4a87c1e5dff40baa3f49d52f5347a", + "fontawesome-webfont.ttf:md5,fb650aaf10736ffb9c4173079616bf01", + "fontawesome-webfont.woff:md5,891e3f340c1126b4c7c142e5f6e86816", + "fontawesome-webfont.woff2:md5,926c93d201fe51c8f351e858468980c3", + "sourcesanspro-regular.woff:md5,f7bd788f18b8c4bb93dd37d140348e1e", + "sourcesanspro-regularit.woff:md5,c3638b17f4fd76dae12fe2ae14571e57", + "sourcesanspro-semibold.woff:md5,e7fc8925d9364e9d177d9e1d08bb1855", + "sourcesanspro-semiboldit.woff:md5,f1d255aa459786dfc6aa2e488ac01245" + ], + "index.html:md5,bf7747be761e56ad7c54c842ac88461a", + [ + "ataqv.js:md5,feb291b7839e9e43ed304565e3a605d9", + "configuration.js:md5,073bc07f1371e28a97098f8b10469ae4", + "d3.min.js:md5,db69fb2626a71a286ee772d673138aca", + "datatables.min.js:md5,e369b872620dadb05e4eb555b81f9112", + "jszip.min.js:md5,09e492cb492ffa75484bbe10f1f721d1" + ] + ] + ], + "1": [ + [ + "ATAQV_MKARV", + "ataqv", + "1.3.1" + ] + ], + "html": [ + [ + [ + "ataqv.css:md5,7bb9e18974018dd29bdc12a46a6d6d65", + "datatables.buttons.min.css:md5,675306abc9d3239314f2c66c0e22ef7a", + "datatables.fontawesome.css:md5,716d7a3edd2c75e712b1ffe26f12a861", + "datatables.min.css:md5,00ef3e39d9302618395ab189ec8bcd9f", + "font-awesome.min.css:md5,89916fa773ce96569604016ef25cab50", + "normalize.css:md5,40d20cc85100840580df4346bb99d7ed" + ], + [ + "1.json.gz:md5,7c01e4f0136404e6db2328485d68d154" + ], + [ + "FontAwesome.otf:md5,9ccfa32dd4cd1b8e83f68899d85bd5e6", + "fontawesome-webfont.eot:md5,404a525502f8e5ba7e93b9f02d9e83a9", + "fontawesome-webfont.svg:md5,bae4a87c1e5dff40baa3f49d52f5347a", + "fontawesome-webfont.ttf:md5,fb650aaf10736ffb9c4173079616bf01", + "fontawesome-webfont.woff:md5,891e3f340c1126b4c7c142e5f6e86816", + "fontawesome-webfont.woff2:md5,926c93d201fe51c8f351e858468980c3", + "sourcesanspro-regular.woff:md5,f7bd788f18b8c4bb93dd37d140348e1e", + "sourcesanspro-regularit.woff:md5,c3638b17f4fd76dae12fe2ae14571e57", + "sourcesanspro-semibold.woff:md5,e7fc8925d9364e9d177d9e1d08bb1855", + "sourcesanspro-semiboldit.woff:md5,f1d255aa459786dfc6aa2e488ac01245" + ], + "index.html:md5,bf7747be761e56ad7c54c842ac88461a", + [ + "ataqv.js:md5,feb291b7839e9e43ed304565e3a605d9", + "configuration.js:md5,073bc07f1371e28a97098f8b10469ae4", + "d3.min.js:md5,db69fb2626a71a286ee772d673138aca", + "datatables.min.js:md5,e369b872620dadb05e4eb555b81f9112", + "jszip.min.js:md5,09e492cb492ffa75484bbe10f1f721d1" + ] + ] + ], + "versions_ataqv": [ + [ + "ATAQV_MKARV", + "ataqv", + "1.3.1" + ] + ] + } + ], + "timestamp": "2026-03-12T10:55:14.121611", + "meta": { + "nf-test": "0.9.4", + "nextflow": "25.10.4" + } + } +} \ No newline at end of file diff --git a/modules/nf-core/bowtie2/align/environment.yml b/modules/nf-core/bowtie2/align/environment.yml index d2796359..066ff52e 100644 --- a/modules/nf-core/bowtie2/align/environment.yml +++ b/modules/nf-core/bowtie2/align/environment.yml @@ -1,9 +1,13 @@ -name: bowtie2_align +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json channels: - conda-forge - bioconda - - defaults dependencies: - - bioconda::bowtie2=2.5.2 - - bioconda::samtools=1.18 - - conda-forge::pigz=2.6 + # 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 index 96a7027d..9be0dfee 100644 --- a/modules/nf-core/bowtie2/align/main.nf +++ b/modules/nf-core/bowtie2/align/main.nf @@ -1,11 +1,11 @@ process BOWTIE2_ALIGN { tag "$meta.id" - label "process_high" + label 'process_high' conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/mulled-v2-ac74a7f02cebcfcc07d8e8d1d750af9c83b4d45a:f70b31a2db15c023d641c32f433fb02cd04df5a6-0' : - 'biocontainers/mulled-v2-ac74a7f02cebcfcc07d8e8d1d750af9c83b4d45a:f70b31a2db15c023d641c32f433fb02cd04df5a6-0' }" + container "${ workflow.containerEngine in ['singularity', 'apptainer'] && !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) @@ -22,7 +22,9 @@ process BOWTIE2_ALIGN { 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 - path "versions.yml" , emit: versions + tuple val("${task.process}"), val('bowtie2'), eval("bowtie2 --version 2>&1 | sed -n 's/.*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 @@ -31,6 +33,7 @@ process BOWTIE2_ALIGN { 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 = "" @@ -59,8 +62,9 @@ process BOWTIE2_ALIGN { $reads_args \\ --threads $task.cpus \\ $unaligned \\ + $rg \\ $args \\ - 2> >(tee ${prefix}.bowtie2.log >&2) \\ + 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 @@ -70,13 +74,6 @@ process BOWTIE2_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}": - bowtie2: \$(echo \$(bowtie2 --version 2>&1) | sed 's/^.*bowtie2-align-s version //; s/ .*\$//') - samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') - pigz: \$( pigz --version 2>&1 | sed 's/pigz //g' ) - END_VERSIONS """ stub: @@ -86,11 +83,10 @@ process BOWTIE2_ALIGN { 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" : "" + create_unmapped = save_unaligned ? "echo | gzip > ${prefix}.unmapped.fastq.gz" : "" } else { - create_unmapped = save_unaligned ? "touch ${prefix}.unmapped_1.fastq.gz && touch ${prefix}.unmapped_2.fastq.gz" : "" + create_unmapped = save_unaligned ? "echo | gzip > ${prefix}.unmapped_1.fastq.gz && echo | gzip > ${prefix}.unmapped_2.fastq.gz" : "" } - def reference = fasta && extension=="cram" ? "--reference ${fasta}" : "" if (!fasta && extension=="cram") error "Fasta reference is required for CRAM output" def create_index = "" @@ -105,13 +101,6 @@ process BOWTIE2_ALIGN { ${create_index} touch ${prefix}.bowtie2.log ${create_unmapped} - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - bowtie2: \$(echo \$(bowtie2 --version 2>&1) | sed 's/^.*bowtie2-align-s version //; s/ .*\$//') - samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') - pigz: \$( pigz --version 2>&1 | sed 's/pigz //g' ) - END_VERSIONS """ } diff --git a/modules/nf-core/bowtie2/align/meta.yml b/modules/nf-core/bowtie2/align/meta.yml index e66811d0..83e1487c 100644 --- a/modules/nf-core/bowtie2/align/meta.yml +++ b/modules/nf-core/bowtie2/align/meta.yml @@ -14,28 +14,42 @@ tools: 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 + 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. - - 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" + - - 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: Reference genome FASTA file + pattern: "*.{fa,fasta,fna}" + ontologies: + - edam: "http://edamontology.org/format_1929" - save_unaligned: type: boolean description: | @@ -46,22 +60,131 @@ input: description: use samtools sort (true) or samtools view (false) pattern: "true or false" output: - - aligned: - type: file - description: Output BAM/SAM file containing read alignments - pattern: "*.{bam,sam}" - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - - fastq: - type: file - description: Unaligned FastQ files - pattern: "*.fastq.gz" - - log: - type: file - description: Aligment log - pattern: "*.log" + 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 's/.*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 's/.*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" diff --git a/modules/nf-core/bowtie2/align/tests/large_index.config b/modules/nf-core/bowtie2/align/tests/large_index.config index fdc1c59d..b2f0c405 100644 --- a/modules/nf-core/bowtie2/align/tests/large_index.config +++ b/modules/nf-core/bowtie2/align/tests/large_index.config @@ -2,4 +2,4 @@ process { withName: BOWTIE2_BUILD { ext.args = '--large-index' } -} \ No newline at end of file +} diff --git a/modules/nf-core/bowtie2/align/tests/main.nf.test b/modules/nf-core/bowtie2/align/tests/main.nf.test index 03aeaf9e..214c97cc 100644 --- a/modules/nf-core/bowtie2/align/tests/main.nf.test +++ b/modules/nf-core/bowtie2/align/tests/main.nf.test @@ -9,7 +9,7 @@ nextflow_process { tag "bowtie2/build" tag "bowtie2/align" - test("sarscov2 - fastq, index, fasta, false, false - bam") { + test("sarscov2 - fastq, index, fasta_fai, false, false - bam") { setup { run("BOWTIE2_BUILD") { @@ -18,7 +18,7 @@ nextflow_process { """ input[0] = [ [ id:'test'], - file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) ] """ } @@ -30,12 +30,15 @@ nextflow_process { """ input[0] = [ [ id:'test', single_end:true ], // meta map - file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true) + 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.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true)] + 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 + input[4] = true //sort """ } } @@ -44,17 +47,17 @@ nextflow_process { assertAll ( { assert process.success }, { assert snapshot( - file(process.out.bam[0][1]).name, + bam(process.out.bam[0][1]).getSamLines(5), process.out.log, process.out.fastq, - process.out.versions + process.out.findAll { key, val -> key.startsWith('versions') } ).match() } ) } } - test("sarscov2 - fastq, index, fasta, false, false - sam") { + test("sarscov2 - fastq, index, fasta_fai, false, false - sam") { config "./sam.config" setup { @@ -63,8 +66,8 @@ nextflow_process { process { """ input[0] = [ - [ id:'test'], - file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true) + [ id:'test' ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) ] """ } @@ -76,12 +79,15 @@ nextflow_process { """ input[0] = [ [ id:'test', single_end:true ], // meta map - file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true) + 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.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true)] + 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 + input[4] = true //sort """ } } @@ -90,17 +96,17 @@ nextflow_process { assertAll ( { assert process.success }, { assert snapshot( - file(process.out.sam[0][1]).readLines()[0..4], + bam(process.out.sam[0][1]).getSamLines(5), process.out.log, process.out.fastq, - process.out.versions + process.out.findAll { key, val -> key.startsWith('versions') } ).match() } ) } } - test("sarscov2 - fastq, index, fasta, false, false - sam2") { + test("sarscov2 - fastq, index, fasta_fai, false, false - sam2") { config "./sam2.config" setup { @@ -109,8 +115,8 @@ nextflow_process { process { """ input[0] = [ - [ id:'test'], - file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true) + [ id:'test' ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) ] """ } @@ -122,12 +128,15 @@ nextflow_process { """ input[0] = [ [ id:'test', single_end:true ], // meta map - file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true) + 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.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true)] + 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 + input[4] = true //sort """ } } @@ -136,17 +145,17 @@ nextflow_process { assertAll ( { assert process.success }, { assert snapshot( - file(process.out.sam[0][1]).readLines()[0..4], + bam(process.out.sam[0][1]).getSamLines(5), process.out.log, process.out.fastq, - process.out.versions + process.out.findAll { key, val -> key.startsWith('versions') } ).match() } ) } } - test("sarscov2 - fastq, index, fasta, false, true - bam") { + test("sarscov2 - fastq, index, fasta_fai, false, true - bam") { setup { run("BOWTIE2_BUILD") { @@ -154,8 +163,8 @@ nextflow_process { process { """ input[0] = [ - [ id:'test'], - file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true) + [ id:'test' ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) ] """ } @@ -167,12 +176,15 @@ nextflow_process { """ input[0] = [ [ id:'test', single_end:true ], // meta map - file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true) + 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.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true)] + 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 + input[4] = true //sort """ } } @@ -181,17 +193,17 @@ nextflow_process { assertAll ( { assert process.success }, { assert snapshot( - file(process.out.bam[0][1]).name, + bam(process.out.bam[0][1]).getSamLines(5), process.out.log, process.out.fastq, - process.out.versions + process.out.findAll { key, val -> key.startsWith('versions') } ).match() } ) } } - test("sarscov2 - [fastq1, fastq2], index, fasta, false, false - bam") { + test("sarscov2 - [fastq1, fastq2], index, fasta_fai, false, false - bam") { setup { run("BOWTIE2_BUILD") { @@ -200,7 +212,7 @@ nextflow_process { """ input[0] = [ [ id:'test'], - file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) ] """ } @@ -213,14 +225,17 @@ nextflow_process { input[0] = [ [ id:'test', single_end:false ], // meta map [ - file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true), - file(params.test_data['sarscov2']['illumina']['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) ] ] input[1] = BOWTIE2_BUILD.out.index - input[2] = [[ id:'test'], file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true)] + 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 + input[4] = true //sort """ } } @@ -229,17 +244,17 @@ nextflow_process { assertAll ( { assert process.success }, { assert snapshot( - file(process.out.bam[0][1]).name, + bam(process.out.bam[0][1]).getSamLines(5), process.out.log, process.out.fastq, - process.out.versions + process.out.findAll { key, val -> key.startsWith('versions') } ).match() } ) } } - test("sarscov2 - [fastq1, fastq2], index, fasta, false, true - bam") { + test("sarscov2 - [fastq1, fastq2], index, fasta_fai, false, true - bam") { setup { run("BOWTIE2_BUILD") { @@ -248,7 +263,7 @@ nextflow_process { """ input[0] = [ [ id:'test'], - file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) ] """ } @@ -261,14 +276,17 @@ nextflow_process { input[0] = [ [ id:'test', single_end:false ], // meta map [ - file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true), - file(params.test_data['sarscov2']['illumina']['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) ] ] input[1] = BOWTIE2_BUILD.out.index - input[2] = [[ id:'test'], file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true)] + 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 + input[4] = true //sort """ } } @@ -277,17 +295,17 @@ nextflow_process { assertAll ( { assert process.success }, { assert snapshot( - file(process.out.bam[0][1]).name, + bam(process.out.bam[0][1]).getSamLines(5), process.out.log, process.out.fastq, - process.out.versions + process.out.findAll { key, val -> key.startsWith('versions') } ).match() } ) } } - test("sarscov2 - fastq, large_index, fasta, false, false - bam") { + test("sarscov2 - fastq, large_index, fasta_fai, false, false - bam") { config "./large_index.config" setup { @@ -297,7 +315,7 @@ nextflow_process { """ input[0] = [ [ id:'test'], - file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) ] """ } @@ -309,12 +327,15 @@ nextflow_process { """ input[0] = [ [ id:'test', single_end:true ], // meta map - file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true) + 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.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true)] + 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 + input[4] = true //sort """ } } @@ -323,17 +344,17 @@ nextflow_process { assertAll ( { assert process.success }, { assert snapshot( - file(process.out.bam[0][1]).name, + bam(process.out.bam[0][1]).getSamLines(5), process.out.log, process.out.fastq, - process.out.versions + process.out.findAll { key, val -> key.startsWith('versions') } ).match() } ) } } - test("sarscov2 - [fastq1, fastq2], large_index, fasta, false, false - bam") { + test("sarscov2 - [fastq1, fastq2], large_index, fasta_fai, false, false - bam") { config "./large_index.config" setup { @@ -343,7 +364,7 @@ nextflow_process { """ input[0] = [ [ id:'test'], - file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) ] """ } @@ -356,14 +377,17 @@ nextflow_process { input[0] = [ [ id:'test', single_end:false ], // meta map [ - file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true), - file(params.test_data['sarscov2']['illumina']['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) ] ] input[1] = BOWTIE2_BUILD.out.index - input[2] = [[ id:'test'], file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true)] + 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 + input[4] = true //sort """ } } @@ -372,17 +396,17 @@ nextflow_process { assertAll ( { assert process.success }, { assert snapshot( - file(process.out.bam[0][1]).name, + bam(process.out.bam[0][1]).getSamLines(5), process.out.log, process.out.fastq, - process.out.versions + process.out.findAll { key, val -> key.startsWith('versions') } ).match() } ) } } - test("sarscov2 - [fastq1, fastq2], index, fasta, true, false - bam") { + test("sarscov2 - [fastq1, fastq2], index, fasta_fai, true, false - bam") { setup { run("BOWTIE2_BUILD") { @@ -391,7 +415,7 @@ nextflow_process { """ input[0] = [ [ id:'test'], - file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) ] """ } @@ -404,14 +428,17 @@ nextflow_process { input[0] = [ [ id:'test', single_end:false ], // meta map [ - file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true), - file(params.test_data['sarscov2']['illumina']['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) ] ] input[1] = BOWTIE2_BUILD.out.index - input[2] = [[ id:'test'], file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true)] + 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 + input[4] = true //sort """ } } @@ -420,17 +447,17 @@ nextflow_process { assertAll ( { assert process.success }, { assert snapshot( - file(process.out.bam[0][1]).name, + bam(process.out.bam[0][1]).getSamLines(5), process.out.log, process.out.fastq, - process.out.versions + process.out.findAll { key, val -> key.startsWith('versions') } ).match() } ) } } - test("sarscov2 - fastq, index, fasta, true, false - bam") { + test("sarscov2 - fastq, index, fasta_fai, true, false - bam") { setup { run("BOWTIE2_BUILD") { @@ -439,7 +466,7 @@ nextflow_process { """ input[0] = [ [ id:'test'], - file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) ] """ } @@ -451,12 +478,15 @@ nextflow_process { """ input[0] = [ [ id:'test', single_end:true ], // meta map - file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true) + 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.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true)] + 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 + input[4] = true //sort """ } } @@ -465,10 +495,10 @@ nextflow_process { assertAll ( { assert process.success }, { assert snapshot( - file(process.out.bam[0][1]).name, + bam(process.out.bam[0][1]).getSamLines(5), process.out.log, process.out.fastq, - process.out.versions + process.out.findAll { key, val -> key.startsWith('versions') } ).match() } ) @@ -476,7 +506,7 @@ nextflow_process { } - test("sarscov2 - [fastq1, fastq2], index, fasta, true, true - cram") { + test("sarscov2 - [fastq1, fastq2], index, fasta_fai, true, true - cram") { config "./cram_crai.config" setup { @@ -486,7 +516,7 @@ nextflow_process { """ input[0] = [ [ id:'test'], - file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) ] """ } @@ -499,12 +529,15 @@ nextflow_process { input[0] = [ [ id:'test', single_end:false ], // meta map [ - file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true), - file(params.test_data['sarscov2']['illumina']['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) ] ] input[1] = BOWTIE2_BUILD.out.index - input[2] = [[ id:'test'], file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true)] + 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 """ @@ -523,7 +556,7 @@ nextflow_process { } - test("sarscov2 - [fastq1, fastq2], index, fasta, false, false - stub") { + test("sarscov2 - [fastq1, fastq2], index, fasta_fai, false, false - stub") { options "-stub" setup { @@ -533,7 +566,7 @@ nextflow_process { """ input[0] = [ [ id:'test'], - file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) ] """ } @@ -546,12 +579,15 @@ nextflow_process { input[0] = [ [ id:'test', single_end:false ], // meta map [ - file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true), - file(params.test_data['sarscov2']['illumina']['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) ] ] input[1] = BOWTIE2_BUILD.out.index - input[2] = [[ id:'test'], file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true)] + 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 """ @@ -566,14 +602,14 @@ nextflow_process { file(process.out.csi[0][1]).name, file(process.out.log[0][1]).name, process.out.fastq, - process.out.versions + process.out.findAll { key, val -> key.startsWith('versions') } ).match() } ) } } - test("sarscov2 - fastq, index, fasta, true, false - stub") { + test("sarscov2 - fastq, index, fasta_fai, true, false - stub") { options "-stub" setup { @@ -583,7 +619,7 @@ nextflow_process { """ input[0] = [ [ id:'test'], - file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) ] """ } @@ -595,10 +631,13 @@ nextflow_process { """ input[0] = [ [ id:'test', single_end:true ], // meta map - file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true) + 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.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true)] + 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 """ @@ -613,7 +652,7 @@ nextflow_process { file(process.out.csi[0][1]).name, file(process.out.log[0][1]).name, process.out.fastq, - process.out.versions + 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 index 028e7da6..cebe58ee 100644 --- a/modules/nf-core/bowtie2/align/tests/main.nf.test.snap +++ b/modules/nf-core/bowtie2/align/tests/main.nf.test.snap @@ -1,74 +1,191 @@ { - "sarscov2 - [fastq1, fastq2], large_index, fasta, false, false - bam": { + "sarscov2 - fastq, index, fasta_fai, false, false - sam": { "content": [ - "test.bam", + [ + "ERR5069949.29668\t16\tMT192765.1\t267\t42\t89M\t*\t0\t0\tCCTTGTCCCTGGTTACAACTAGAAACCACACGTCCAACTCAGTTTGCCTGTTTTACAGGTTCGCGACGTGCTCGTACGTGGCTTTGGAG\tE////6/E/EE/EE/<&1 | sed -n 's/.*bowtie2-align-s version //p'"), emit: versions_bowtie2, topic: versions when: task.ext.when == null || task.ext.when @@ -22,10 +22,6 @@ process BOWTIE2_BUILD { """ mkdir bowtie2 bowtie2-build $args --threads $task.cpus $fasta bowtie2/${fasta.baseName} - cat <<-END_VERSIONS > versions.yml - "${task.process}": - bowtie2: \$(echo \$(bowtie2 --version 2>&1) | sed 's/^.*bowtie2-align-s version //; s/ .*\$//') - END_VERSIONS """ stub: @@ -33,10 +29,5 @@ process BOWTIE2_BUILD { mkdir bowtie2 touch bowtie2/${fasta.baseName}.{1..4}.bt2 touch bowtie2/${fasta.baseName}.rev.{1,2}.bt2 - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - bowtie2: \$(echo \$(bowtie2 --version 2>&1) | sed 's/^.*bowtie2-align-s version //; s/ .*\$//') - END_VERSIONS """ } diff --git a/modules/nf-core/bowtie2/build/meta.yml b/modules/nf-core/bowtie2/build/meta.yml index 0240224d..e2a4367c 100644 --- a/modules/nf-core/bowtie2/build/meta.yml +++ b/modules/nf-core/bowtie2/build/meta.yml @@ -15,29 +15,57 @@ tools: 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 + - - meta: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'test', single_end:false ] + - fasta: + type: file + description: Reference genome FASTA file + pattern: "*.{fa,fasta,fna}" + ontologies: + - edam: "http://edamontology.org/format_1929" output: - - meta: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'test', single_end:false ] - - index: - type: file - description: Bowtie2 genome index files - pattern: "*.bt2" - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + 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 | sed -n 's/.*bowtie2-align-s version //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 + - bowtie2: + type: string + description: The name of the tool + - "bowtie2 --version 2>&1 | sed -n 's/.*bowtie2-align-s version //p'": + 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 00000000..a4bad2a1 --- /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 00000000..9f1bf080 --- /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/bwa/index/bwa-index.diff b/modules/nf-core/bwa/index/bwa-index.diff new file mode 100644 index 00000000..90991bd7 --- /dev/null +++ b/modules/nf-core/bwa/index/bwa-index.diff @@ -0,0 +1,21 @@ +Changes in component 'nf-core/bwa/index' +'modules/nf-core/bwa/index/environment.yml' is unchanged +'modules/nf-core/bwa/index/meta.yml' is unchanged +Changes in 'bwa/index/main.nf': +--- modules/nf-core/bwa/index/main.nf ++++ modules/nf-core/bwa/index/main.nf +@@ -2,7 +2,9 @@ + tag "$fasta" + // NOTE requires 5.37N memory where N is the size of the database + // source: https://bio-bwa.sourceforge.net/bwa.shtml#8 +- memory { 7.B * fasta.size() } ++ // Floor at 1.GB: the proportional formula under-provisions small (e.g. test) ++ // genomes below bwa+runtime overhead, causing OOM kills. ++ memory { [ 7.B * fasta.size(), 1.GB ].max() } + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine in ['singularity', 'apptainer'] && !task.ext.singularity_pull_docker_container ? + +'modules/nf-core/bwa/index/tests/main.nf.test.snap' is unchanged +'modules/nf-core/bwa/index/tests/main.nf.test' is unchanged +************************************************************ diff --git a/modules/nf-core/bwa/index/main.nf b/modules/nf-core/bwa/index/main.nf index 03f00422..215a6f93 100644 --- a/modules/nf-core/bwa/index/main.nf +++ b/modules/nf-core/bwa/index/main.nf @@ -2,10 +2,12 @@ process BWA_INDEX { tag "$fasta" // NOTE requires 5.37N memory where N is the size of the database // source: https://bio-bwa.sourceforge.net/bwa.shtml#8 - memory { 7.B * fasta.size() } + // Floor at 1.GB: the proportional formula under-provisions small (e.g. test) + // genomes below bwa+runtime overhead, causing OOM kills. + memory { [ 7.B * fasta.size(), 1.GB ].max() } conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + container "${ workflow.containerEngine in ['singularity', 'apptainer'] && !task.ext.singularity_pull_docker_container ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/d7/d7e24dc1e4d93ca4d3a76a78d4c834a7be3985b0e1e56fddd61662e047863a8a/data' : 'community.wave.seqera.io/library/bwa_htslib_samtools:83b50ff84ead50d0' }" diff --git a/modules/nf-core/bwa/mem/environment.yml b/modules/nf-core/bwa/mem/environment.yml index 3f136d0a..54e67949 100644 --- a/modules/nf-core/bwa/mem/environment.yml +++ b/modules/nf-core/bwa/mem/environment.yml @@ -1,10 +1,13 @@ -name: bwa_mem +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json channels: - conda-forge - bioconda - - defaults + dependencies: - - bwa=0.7.17 + # renovate: datasource=conda depName=bioconda/bwa + - bioconda::bwa=0.7.19 + # renovate: datasource=conda depName=bioconda/htslib + - bioconda::htslib=1.22.1 # renovate: datasource=conda depName=bioconda/samtools - - samtools=1.19.2 - - htslib=1.19.1 + - bioconda::samtools=1.22.1 diff --git a/modules/nf-core/bwa/mem/main.nf b/modules/nf-core/bwa/mem/main.nf index d8bd2815..bde6a9a3 100644 --- a/modules/nf-core/bwa/mem/main.nf +++ b/modules/nf-core/bwa/mem/main.nf @@ -3,9 +3,9 @@ process BWA_MEM { label 'process_high' conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/mulled-v2-fe8faa35dbf6dc65a0f7f5d4ea12e31a79f73e40:a34558545ae1413d94bde4578787ebef08027945-0' : - 'biocontainers/mulled-v2-fe8faa35dbf6dc65a0f7f5d4ea12e31a79f73e40:a34558545ae1413d94bde4578787ebef08027945-0' }" + container "${ workflow.containerEngine in ['singularity', 'apptainer'] && !task.ext.singularity_pull_docker_container ? + 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/d7/d7e24dc1e4d93ca4d3a76a78d4c834a7be3985b0e1e56fddd61662e047863a8a/data' : + 'community.wave.seqera.io/library/bwa_htslib_samtools:83b50ff84ead50d0' }" input: tuple val(meta) , path(reads) @@ -16,9 +16,11 @@ process BWA_MEM { output: tuple val(meta), path("*.bam") , emit: bam, optional: true tuple val(meta), path("*.cram") , emit: cram, optional: true + tuple val(meta), path("*.sam") , emit: sam, optional: true tuple val(meta), path("*.csi") , emit: csi, optional: true tuple val(meta), path("*.crai") , emit: crai, optional: true - path "versions.yml" , emit: versions + tuple val("${task.process}"), val('bwa'), eval('bwa 2>&1 | sed -n "s/^Version: //p"'), topic: versions, emit: versions_bwa + 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 @@ -35,6 +37,15 @@ process BWA_MEM { "bam" def reference = fasta && extension=="cram" ? "--reference ${fasta}" : "" if (!fasta && extension=="cram") error "Fasta reference is required for CRAM output" + // + // For SAM output we can skip samtools view + // + def pipe_command = "" + if (extension == "sam") { + pipe_command = "> ${prefix}.${extension}" + } else { + pipe_command = "| samtools $samtools_command $args2 ${reference} --threads $task.cpus -o ${prefix}.${extension} -" + } """ INDEX=`find -L ./ -name "*.amb" | sed 's/\\.amb\$//'` @@ -43,20 +54,12 @@ process BWA_MEM { -t $task.cpus \\ \$INDEX \\ $reads \\ - | samtools $samtools_command $args2 ${reference} --threads $task.cpus -o ${prefix}.${extension} - - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - bwa: \$(echo \$(bwa 2>&1) | sed 's/^.*Version: //; s/Contact:.*\$//') - samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') - END_VERSIONS + $pipe_command """ stub: - def args = task.ext.args ?: '' def args2 = task.ext.args2 ?: '' def prefix = task.ext.prefix ?: "${meta.id}" - def samtools_command = sort_bam ? 'sort' : 'view' def extension = args2.contains("--output-fmt sam") ? "sam" : args2.contains("--output-fmt cram") ? "cram": sort_bam && args2.contains("-O cram")? "cram": @@ -66,11 +69,5 @@ process BWA_MEM { touch ${prefix}.${extension} touch ${prefix}.csi touch ${prefix}.crai - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - bwa: \$(echo \$(bwa 2>&1) | sed 's/^.*Version: //; s/Contact:.*\$//') - samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') - END_VERSIONS """ } diff --git a/modules/nf-core/bwa/mem/meta.yml b/modules/nf-core/bwa/mem/meta.yml index 1532c261..1c4ee883 100644 --- a/modules/nf-core/bwa/mem/meta.yml +++ b/modules/nf-core/bwa/mem/meta.yml @@ -14,58 +14,141 @@ tools: BWA is a software package for mapping DNA sequences against a large reference genome, such as the human genome. homepage: http://bio-bwa.sourceforge.net/ - documentation: http://www.htslib.org/doc/samtools.html + documentation: https://bio-bwa.sourceforge.net/bwa.shtml arxiv: arXiv:1303.3997 - licence: ["GPL-3.0-or-later"] + licence: + - "GPL-3.0-or-later" + identifier: "biotools:bwa" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - reads: - type: file - description: | - List of input FastQ files of size 1 and 2 for single-end and paired-end data, - respectively. - - meta2: - type: map - description: | - Groovy Map containing reference information. - e.g. [ id:'test', single_end:false ] - - index: - type: file - description: BWA genome index files - pattern: "Directory containing BWA index *.{amb,ann,bwt,pac,sa}" - - fasta: - type: file - description: Reference genome in FASTA format - pattern: "*.{fasta,fa}" + - - 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: + - edam: "http://edamontology.org/data_2044" + - edam: "http://edamontology.org/format_1930" + - - meta2: + type: map + description: | + Groovy Map containing reference information. + e.g. [ id:'test', single_end:false ] + - index: + type: file + description: BWA genome index files + pattern: "Directory containing BWA index *.{amb,ann,bwt,pac,sa}" + ontologies: + - edam: "http://edamontology.org/data_3210" + - - meta3: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - fasta: + type: file + description: Reference genome in FASTA format + pattern: "*.{fasta,fa}" + ontologies: + - edam: "http://edamontology.org/data_2044" + - edam: "http://edamontology.org/format_1929" - sort_bam: type: boolean description: use samtools sort (true) or samtools view (false) pattern: "true or false" output: - - bam: - type: file - description: Output BAM file containing read alignments - pattern: "*.{bam}" - - cram: - type: file - description: Output CRAM file containing read alignments - pattern: "*.{cram}" - - csi: - type: file - description: Optional index file for BAM file - pattern: "*.{csi}" - - crai: - type: file - description: Optional index file for CRAM file - pattern: "*.{crai}" - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + bam: + - - meta: + type: map + description: Groovy Map containing sample information + - "*.bam": + type: file + description: Output BAM file containing read alignments + pattern: "*.{bam}" + ontologies: + - edam: "http://edamontology.org/format_2572" + cram: + - - meta: + type: map + description: Groovy Map containing sample information + - "*.cram": + type: file + description: Output CRAM file containing read alignments + pattern: "*.{cram}" + ontologies: + - edam: "http://edamontology.org/format_3462" + sam: + - - meta: + type: map + description: Groovy Map containing sample information + - "*.sam": + type: file + description: Output SAM file containing read alignments + pattern: "*.{sam}" + ontologies: + - edam: "http://edamontology.org/format_2573" + csi: + - - meta: + type: map + description: Groovy Map containing sample information + - "*.csi": + type: file + description: Optional index file for BAM file + pattern: "*.{csi}" + ontologies: [] + crai: + - - meta: + type: map + description: Groovy Map containing sample information + - "*.crai": + type: file + description: Optional index file for CRAM file + pattern: "*.{crai}" + ontologies: [] + versions_bwa: + - - ${task.process}: + type: string + description: The name of the process + - bwa: + type: string + description: The name of the tool + - 'bwa 2>&1 | sed -n "s/^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 '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 + - bwa: + type: string + description: The name of the tool + - 'bwa 2>&1 | sed -n "s/^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 '1!d;s/.* //': + type: eval + description: The expression to obtain the version of the tool authors: - "@drpatelh" - "@jeremy1805" diff --git a/modules/nf-core/bwa/mem/tests/main.nf.test b/modules/nf-core/bwa/mem/tests/main.nf.test index 1fa9b56d..e284e2ea 100644 --- a/modules/nf-core/bwa/mem/tests/main.nf.test +++ b/modules/nf-core/bwa/mem/tests/main.nf.test @@ -9,21 +9,21 @@ nextflow_process { script "../main.nf" process "BWA_MEM" - test("Single-End") { - - setup { - run("BWA_INDEX") { - script "../../index/main.nf" - process { - """ - input[0] = [ - [id: 'test'], - file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) - ] - """ - } + setup { + run("BWA_INDEX") { + script "../../index/main.nf" + process { + """ + input[0] = [ + [id: 'test'], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ] + """ } } + } + + test("Single-End") { when { process { @@ -44,7 +44,15 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(process.out).match() } + { assert snapshot( + process.out.cram, + process.out.sam, + process.out.csi, + process.out.crai, + process.out.findAll { key, val -> key.startsWith("versions") }, + bam(process.out.bam[0][1]).getReadsMD5() + ).match() + } ) } @@ -52,20 +60,6 @@ nextflow_process { test("Single-End Sort") { - setup { - run("BWA_INDEX") { - script "../../index/main.nf" - process { - """ - input[0] = [ - [id: 'test'], - file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) - ] - """ - } - } - } - when { process { """ @@ -85,28 +79,63 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(process.out).match() } + { assert snapshot( + process.out.cram, + process.out.sam, + process.out.csi, + process.out.crai, + process.out.findAll { key, val -> key.startsWith("versions") }, + bam(process.out.bam[0][1]).getReadsMD5() + ).match() + } ) } } - test("Paired-End") { + test("Single-End - SAM output") { + + config "./nextflow_sam.config" + + when { + params { + module_args2 = "--output-fmt sam" + } - setup { - run("BWA_INDEX") { - script "../../index/main.nf" - process { - """ - input[0] = [ - [id: 'test'], - file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + 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] = BWA_INDEX.out.index + input[2] = [[id: 'test'],file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)] + input[3] = false + """ } } + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.bam, + process.out.cram, + process.out.csi, + process.out.crai, + process.out.findAll { key, val -> key.startsWith("versions") }, + bam(process.out.sam[0][1]).getReadsMD5() + ).match() + } + ) + } + + } + + test("Paired-End") { + when { process { """ @@ -127,7 +156,15 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(process.out).match() } + { assert snapshot( + process.out.cram, + process.out.sam, + process.out.csi, + process.out.crai, + process.out.findAll { key, val -> key.startsWith("versions") }, + bam(process.out.bam[0][1]).getReadsMD5() + ).match() + } ) } @@ -135,20 +172,6 @@ nextflow_process { test("Paired-End Sort") { - setup { - run("BWA_INDEX") { - script "../../index/main.nf" - process { - """ - input[0] = [ - [id: 'test'], - file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) - ] - """ - } - } - } - when { process { """ @@ -169,7 +192,15 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(process.out).match() } + { assert snapshot( + process.out.cram, + process.out.sam, + process.out.csi, + process.out.crai, + process.out.findAll { key, val -> key.startsWith("versions") }, + bam(process.out.bam[0][1]).getReadsMD5() + ).match() + } ) } @@ -177,21 +208,49 @@ nextflow_process { test("Paired-End - no fasta") { - setup { - run("BWA_INDEX") { - script "../../index/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] = BWA_INDEX.out.index + input[2] = [[:],[]] + input[3] = false + """ } } + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.cram, + process.out.sam, + process.out.csi, + process.out.crai, + process.out.findAll { key, val -> key.startsWith("versions") }, + bam(process.out.bam[0][1]).getReadsMD5() + ).match() + } + ) + } + + } + + test ("Paired-end - SAM output") { + + config "./nextflow_sam.config" + when { + params { + module_args2 = "--output-fmt sam" + } + process { """ input[0] = [ @@ -211,27 +270,24 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(process.out).match() } + { assert snapshot( + process.out.bam, + process.out.cram, + process.out.csi, + process.out.crai, + process.out.findAll { key, val -> key.startsWith("versions") }, + bam(process.out.sam[0][1]).getReadsMD5() + ).match() + } ) } } test("Single-end - stub") { + options "-stub" - setup { - run("BWA_INDEX") { - script "../../index/main.nf" - process { - """ - input[0] = [ - [id: 'test'], - file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) - ] - """ - } - } - } + when { process { """ @@ -251,30 +307,15 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot( - file(process.out.bam[0][1]).name, - file(process.out.csi[0][1]).name, - process.out.versions - ).match() } + { assert snapshot(process.out).match() } ) } } test("Paired-end - stub") { + options "-stub" - setup { - run("BWA_INDEX") { - script "../../index/main.nf" - process { - """ - input[0] = [ - [id: 'test'], - file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) - ] - """ - } - } - } + when { process { """ @@ -295,11 +336,7 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot( - file(process.out.bam[0][1]).name, - file(process.out.csi[0][1]).name, - process.out.versions - ).match() } + { assert snapshot(process.out).match() } ) } } diff --git a/modules/nf-core/bwa/mem/tests/main.nf.test.snap b/modules/nf-core/bwa/mem/tests/main.nf.test.snap index 0d1bdb41..c3f74d37 100644 --- a/modules/nf-core/bwa/mem/tests/main.nf.test.snap +++ b/modules/nf-core/bwa/mem/tests/main.nf.test.snap @@ -1,58 +1,195 @@ { - "Single-End": { + "Single-End - SAM output": { "content": [ + [ + + ], + [ + + ], + [ + + ], + [ + + ], { - "0": [ + "versions_bwa": [ [ - { - "id": "test", - "single_end": true - }, - "test.bam:md5,a74710a0345b4717bb4431bf9c257120" + "BWA_MEM", + "bwa", + "0.7.19-r1273" ] ], - "1": [ - - ], - "2": [ - - ], - "3": [ - - ], - "4": [ - "versions.yml:md5,c32f719a68bb2966c8511d808154d42d" - ], - "bam": [ + "versions_samtools": [ [ - { - "id": "test", - "single_end": true - }, - "test.bam:md5,a74710a0345b4717bb4431bf9c257120" + "BWA_MEM", + "samtools", + "1.22.1" + ] + ] + }, + "798439cbd7fd81cbcc5078022dc5479d" + ], + "timestamp": "2026-05-11T12:09:32.334359515", + "meta": { + "nf-test": "0.9.5", + "nextflow": "26.04.0" + } + }, + "Single-End": { + "content": [ + [ + + ], + [ + + ], + [ + + ], + [ + + ], + { + "versions_bwa": [ + [ + "BWA_MEM", + "bwa", + "0.7.19-r1273" ] ], - "crai": [ - + "versions_samtools": [ + [ + "BWA_MEM", + "samtools", + "1.22.1" + ] + ] + }, + "798439cbd7fd81cbcc5078022dc5479d" + ], + "timestamp": "2026-05-11T12:07:21.233636979", + "meta": { + "nf-test": "0.9.5", + "nextflow": "26.04.0" + } + }, + "Single-End Sort": { + "content": [ + [ + + ], + [ + + ], + [ + + ], + [ + + ], + { + "versions_bwa": [ + [ + "BWA_MEM", + "bwa", + "0.7.19-r1273" + ] ], - "cram": [ - + "versions_samtools": [ + [ + "BWA_MEM", + "samtools", + "1.22.1" + ] + ] + }, + "94fcf617f5b994584c4e8d4044e16b4f" + ], + "timestamp": "2026-05-11T12:07:28.74614221", + "meta": { + "nf-test": "0.9.5", + "nextflow": "26.04.0" + } + }, + "Paired-End": { + "content": [ + [ + + ], + [ + + ], + [ + + ], + [ + + ], + { + "versions_bwa": [ + [ + "BWA_MEM", + "bwa", + "0.7.19-r1273" + ] ], - "csi": [ - + "versions_samtools": [ + [ + "BWA_MEM", + "samtools", + "1.22.1" + ] + ] + }, + "57aeef88ed701a8ebc8e2f0a381b2a6" + ], + "timestamp": "2026-05-11T12:07:42.612131595", + "meta": { + "nf-test": "0.9.5", + "nextflow": "26.04.0" + } + }, + "Paired-End Sort": { + "content": [ + [ + + ], + [ + + ], + [ + + ], + [ + + ], + { + "versions_bwa": [ + [ + "BWA_MEM", + "bwa", + "0.7.19-r1273" + ] ], - "versions": [ - "versions.yml:md5,c32f719a68bb2966c8511d808154d42d" + "versions_samtools": [ + [ + "BWA_MEM", + "samtools", + "1.22.1" + ] ] - } + }, + "af8628d9df18b2d3d4f6fd47ef2bb872" ], + "timestamp": "2026-05-11T12:09:45.938323098", "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-03-14T14:14:56.820798254" + "nf-test": "0.9.5", + "nextflow": "26.04.0" + } }, - "Single-End Sort": { + "Single-end - stub": { "content": [ { "0": [ @@ -61,171 +198,179 @@ "id": "test", "single_end": true }, - "test.bam:md5,cb1e038bc4d990683fa485d632550b54" + "test.bam:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "1": [ - + ], "2": [ - + ], "3": [ - - ], - "4": [ - "versions.yml:md5,c32f719a68bb2966c8511d808154d42d" - ], - "bam": [ [ { "id": "test", "single_end": true }, - "test.bam:md5,cb1e038bc4d990683fa485d632550b54" + "test.csi:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "crai": [ - - ], - "cram": [ - - ], - "csi": [ - - ], - "versions": [ - "versions.yml:md5,c32f719a68bb2966c8511d808154d42d" - ] - } - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-03-14T14:15:20.271428534" - }, - "Paired-End": { - "content": [ - { - "0": [ + "4": [ [ { "id": "test", - "single_end": false + "single_end": true }, - "test.bam:md5,aea123a3828a99da1906126355f15a12" + "test.crai:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "1": [ - - ], - "2": [ - - ], - "3": [ - + "5": [ + [ + "BWA_MEM", + "bwa", + "0.7.19-r1273" + ] ], - "4": [ - "versions.yml:md5,c32f719a68bb2966c8511d808154d42d" + "6": [ + [ + "BWA_MEM", + "samtools", + "1.22.1" + ] ], "bam": [ [ { "id": "test", - "single_end": false + "single_end": true }, - "test.bam:md5,aea123a3828a99da1906126355f15a12" + "test.bam:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "crai": [ - + [ + { + "id": "test", + "single_end": true + }, + "test.crai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "cram": [ - + ], "csi": [ - + [ + { + "id": "test", + "single_end": true + }, + "test.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "sam": [ + ], - "versions": [ - "versions.yml:md5,c32f719a68bb2966c8511d808154d42d" + "versions_bwa": [ + [ + "BWA_MEM", + "bwa", + "0.7.19-r1273" + ] + ], + "versions_samtools": [ + [ + "BWA_MEM", + "samtools", + "1.22.1" + ] ] } ], + "timestamp": "2026-05-11T12:10:09.92486753", "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-03-14T14:15:38.264256823" + "nf-test": "0.9.5", + "nextflow": "26.04.0" + } }, - "Paired-End Sort": { + "Paired-End - no fasta": { "content": [ + [ + + ], + [ + + ], + [ + + ], + [ + + ], { - "0": [ + "versions_bwa": [ [ - { - "id": "test", - "single_end": false - }, - "test.bam:md5,4682087bcdc3617384b375093fecd8dd" + "BWA_MEM", + "bwa", + "0.7.19-r1273" ] ], - "1": [ - - ], - "2": [ - - ], - "3": [ - - ], - "4": [ - "versions.yml:md5,c32f719a68bb2966c8511d808154d42d" - ], - "bam": [ + "versions_samtools": [ [ - { - "id": "test", - "single_end": false - }, - "test.bam:md5,4682087bcdc3617384b375093fecd8dd" + "BWA_MEM", + "samtools", + "1.22.1" ] - ], - "crai": [ - - ], - "cram": [ - - ], - "csi": [ - - ], - "versions": [ - "versions.yml:md5,c32f719a68bb2966c8511d808154d42d" ] - } + }, + "57aeef88ed701a8ebc8e2f0a381b2a6" ], + "timestamp": "2026-05-11T12:09:52.820539909", "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-03-14T14:16:00.528642686" + "nf-test": "0.9.5", + "nextflow": "26.04.0" + } }, - "Single-end - stub": { + "Paired-end - SAM output": { "content": [ - "test.bam", - "test.csi", [ - "versions.yml:md5,c32f719a68bb2966c8511d808154d42d" - ] + + ], + [ + + ], + [ + + ], + [ + + ], + { + "versions_bwa": [ + [ + "BWA_MEM", + "bwa", + "0.7.19-r1273" + ] + ], + "versions_samtools": [ + [ + "BWA_MEM", + "samtools", + "1.22.1" + ] + ] + }, + "57aeef88ed701a8ebc8e2f0a381b2a6" ], + "timestamp": "2026-05-11T12:10:00.199968933", "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-03-15T09:50:33.238543011" + "nf-test": "0.9.5", + "nextflow": "26.04.0" + } }, - "Paired-End - no fasta": { + "Paired-end - stub": { "content": [ { "0": [ @@ -234,20 +379,46 @@ "id": "test", "single_end": false }, - "test.bam:md5,aea123a3828a99da1906126355f15a12" + "test.bam:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "1": [ - + ], "2": [ - + ], "3": [ - + [ + { + "id": "test", + "single_end": false + }, + "test.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "4": [ - "versions.yml:md5,c32f719a68bb2966c8511d808154d42d" + [ + { + "id": "test", + "single_end": false + }, + "test.crai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "5": [ + [ + "BWA_MEM", + "bwa", + "0.7.19-r1273" + ] + ], + "6": [ + [ + "BWA_MEM", + "samtools", + "1.22.1" + ] ], "bam": [ [ @@ -255,41 +426,53 @@ "id": "test", "single_end": false }, - "test.bam:md5,aea123a3828a99da1906126355f15a12" + "test.bam:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "crai": [ - + [ + { + "id": "test", + "single_end": false + }, + "test.crai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "cram": [ - + ], "csi": [ - + [ + { + "id": "test", + "single_end": false + }, + "test.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], - "versions": [ - "versions.yml:md5,c32f719a68bb2966c8511d808154d42d" + "sam": [ + + ], + "versions_bwa": [ + [ + "BWA_MEM", + "bwa", + "0.7.19-r1273" + ] + ], + "versions_samtools": [ + [ + "BWA_MEM", + "samtools", + "1.22.1" + ] ] } ], + "timestamp": "2026-05-11T12:10:16.940291647", "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-03-14T14:40:16.345342005" - }, - "Paired-end - stub": { - "content": [ - "test.bam", - "test.csi", - [ - "versions.yml:md5,c32f719a68bb2966c8511d808154d42d" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-03-15T09:50:42.268673302" + "nf-test": "0.9.5", + "nextflow": "26.04.0" + } } } \ No newline at end of file diff --git a/modules/nf-core/bwa/mem/tests/nextflow_sam.config b/modules/nf-core/bwa/mem/tests/nextflow_sam.config new file mode 100644 index 00000000..831332e7 --- /dev/null +++ b/modules/nf-core/bwa/mem/tests/nextflow_sam.config @@ -0,0 +1,5 @@ +process { + withName: BWA_MEM { + ext.args2 = params.module_args2 + } +} diff --git a/modules/nf-core/bwa/mem/tests/tags.yml b/modules/nf-core/bwa/mem/tests/tags.yml deleted file mode 100644 index 82992d1f..00000000 --- a/modules/nf-core/bwa/mem/tests/tags.yml +++ /dev/null @@ -1,3 +0,0 @@ -bwa/mem: - - modules/nf-core/bwa/index/** - - modules/nf-core/bwa/mem/** diff --git a/modules/nf-core/chromap/chromap/environment.yml b/modules/nf-core/chromap/chromap/environment.yml new file mode 100644 index 00000000..4447b170 --- /dev/null +++ b/modules/nf-core/chromap/chromap/environment.yml @@ -0,0 +1,8 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::chromap=0.3.2 + - bioconda::samtools=1.23.1 diff --git a/modules/nf-core/chromap/chromap/main.nf b/modules/nf-core/chromap/chromap/main.nf index a39302e3..ec3b8eec 100644 --- a/modules/nf-core/chromap/chromap/main.nf +++ b/modules/nf-core/chromap/chromap/main.nf @@ -2,10 +2,10 @@ process CHROMAP_CHROMAP { tag "$meta.id" label 'process_medium' - conda "bioconda::chromap=0.2.4 bioconda::samtools=1.16.1" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/mulled-v2-1f09f39f20b1c4ee36581dc81cc323c70e661633:5b2e433ab8b3d1ef098fc944b567fd98caa23f56-0' : - 'biocontainers/mulled-v2-1f09f39f20b1c4ee36581dc81cc323c70e661633:5b2e433ab8b3d1ef098fc944b567fd98caa23f56-0' }" + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine in ['singularity', 'apptainer'] && !task.ext.singularity_pull_docker_container ? + 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/5d/5d39e0b3f00c5469ffc2ceef4bd76959fba6313064ed2408dd4ccac498022ad6/data' : + 'community.wave.seqera.io/library/chromap_samtools:b975c17adf0096ba' }" input: tuple val(meta), path(reads) @@ -21,7 +21,8 @@ process CHROMAP_CHROMAP { tuple val(meta), path("*.bam") , optional:true, emit: bam tuple val(meta), path("*.tagAlign.gz"), optional:true, emit: tagAlign tuple val(meta), path("*.pairs.gz") , optional:true, emit: pairs - path "versions.yml" , emit: versions + tuple val("${task.process}"), val('chromap'), eval("chromap --version 2>&1"), topic: versions, emit: versions_chromap + 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 @@ -65,12 +66,6 @@ process CHROMAP_CHROMAP { -o ${prefix}.${file_extension} $compression_cmds - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - chromap: \$(echo \$(chromap --version 2>&1)) - samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') - END_VERSIONS """ } else { """ @@ -84,12 +79,15 @@ process CHROMAP_CHROMAP { -o ${prefix}.${file_extension} $compression_cmds - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - chromap: \$(echo \$(chromap --version 2>&1)) - samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') - END_VERSIONS """ } + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + echo "" | gzip > ${prefix}.bed.gz + touch ${prefix}.bam + echo "" | gzip > ${prefix}.tagAlign.gz + echo "" | gzip > ${prefix}.pairs.gz + """ } diff --git a/modules/nf-core/chromap/chromap/meta.yml b/modules/nf-core/chromap/chromap/meta.yml index 05f70cf0..5e024f17 100644 --- a/modules/nf-core/chromap/chromap/meta.yml +++ b/modules/nf-core/chromap/chromap/meta.yml @@ -1,7 +1,6 @@ name: chromap_chromap description: | - Performs preprocessing and alignment of chromatin fastq files to - fasta reference files using chromap. + Performs preprocessing and alignment of chromatin fastq files to fasta reference files using chromap. keywords: - chromap - alignment @@ -16,84 +15,157 @@ keywords: - duplicate removal tools: - chromap: - description: Fast alignment and preprocessing of chromatin profiles + description: | + Fast alignment and preprocessing of chromatin profiles homepage: https://github.com/haowenz/chromap documentation: https://github.com/haowenz/chromap tool_dev_url: https://github.com/haowenz/chromap - licence: ["GPL v3"] + 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. - - meta2: - type: map - description: | - Groovy Map containing information for the fasta - e.g. [ id:'test' ] - - fasta: - type: file - description: | - The fasta reference file. - - meta3: - type: map - description: | - Groovy Map containing information for the index - e.g. [ id:'test' ] - - index: - type: file - description: | - Chromap genome index files (*.index) + - - 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 information for the fasta + e.g. [ id:'test' ] + - fasta: + type: file + description: Reference genome FASTA file + pattern: "*.{fa,fasta,fna}" + ontologies: + - edam: "http://edamontology.org/format_1929" + - - meta3: + type: map + description: | + Groovy Map containing information for the index + e.g. [ id:'test' ] + - index: + type: file + description: | + Chromap genome index files (*.index) + ontologies: [] - barcodes: type: file description: | Cell barcode files + ontologies: [] - whitelist: type: file description: | Cell barcode whitelist file + ontologies: [] - chr_order: type: file description: | Custom chromosome order + ontologies: [] - pairs_chr_order: type: file description: | Natural chromosome order for pairs flipping + ontologies: [] output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - - bed: - type: file - description: BED file - pattern: "*.bed.gz" - - bam: - type: file - description: BAM file - pattern: "*.bam" - - tagAlign: - type: file - description: tagAlign file - pattern: "*.tagAlign.gz" - - pairs: - type: file - description: pairs file - pattern: "*.pairs.gz" - + bed: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.bed.gz": + type: file + description: BED file + pattern: "*.bed.gz" + ontologies: + - edam: http://edamontology.org/format_3989 # GZIP format + bam: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.bam": + type: file + description: BAM file + pattern: "*.bam" + ontologies: [] + tagAlign: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.tagAlign.gz": + type: file + description: tagAlign file + pattern: "*.tagAlign.gz" + ontologies: + - edam: http://edamontology.org/format_3989 # GZIP format + pairs: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.pairs.gz": + type: file + description: pairs file + pattern: "*.pairs.gz" + ontologies: + - edam: http://edamontology.org/format_3989 # GZIP format + versions_chromap: + - - ${task.process}: + type: string + description: The name of the process + - chromap: + type: string + description: The name of the tool + - chromap --version 2>&1: + 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 '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 + - chromap: + type: string + description: The name of the tool + - chromap --version 2>&1: + 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 '1!d;s/.* //': + type: eval + description: The expression to obtain the version of the tool authors: - "@mahesh-panchal" - "@joseespinosa" +maintainers: + - "@mahesh-panchal" + - "@joseespinosa" diff --git a/modules/nf-core/chromap/chromap/tests/main.nf.test b/modules/nf-core/chromap/chromap/tests/main.nf.test new file mode 100644 index 00000000..913b5a4b --- /dev/null +++ b/modules/nf-core/chromap/chromap/tests/main.nf.test @@ -0,0 +1,168 @@ +nextflow_process { + + name "Test Process CHROMAP_CHROMAP" + script "../main.nf" + process "CHROMAP_CHROMAP" + + tag "modules" + tag "modules_nfcore" + tag "chromap" + tag "chromap/chromap" + tag "chromap/index" + + setup { + + run("CHROMAP_INDEX") { + + script "../../index/main.nf" + + process { + """ + input[0] = [ + [:], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ] + """ + } + } + } + + test("sarscov2 - 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[1] = [ + [:], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ] + input[2] = CHROMAP_INDEX.out.index + input[3] = [] + input[4] = [] + input[5] = [] + input[6] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("sarscov2 - 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) + ] + ] + input[1] = [ + [:], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ] + input[2] = CHROMAP_INDEX.out.index + input[3] = [] + input[4] = [] + input[5] = [] + input[6] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + + test("sarscov2 - paired_end - bam") { + + when { + + config "./nextflow.config" + + 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] = [ + [:], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ] + input[2] = CHROMAP_INDEX.out.index + input[3] = [] + input[4] = [] + input[5] = [] + input[6] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { + assert snapshot( + bam(process.out.bam[0][1]).getHeaderMD5(), + bam(process.out.bam[0][1]).getReadsMD5(), + process.out.versions + ) + } + ) + } + + } + + test("sarscov2 - 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) + ] + input[1] = [ + [:], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ] + input[2] = CHROMAP_INDEX.out.index + input[3] = [] + input[4] = [] + input[5] = [] + input[6] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } +} diff --git a/modules/nf-core/chromap/chromap/tests/main.nf.test.snap b/modules/nf-core/chromap/chromap/tests/main.nf.test.snap new file mode 100644 index 00000000..99738ec7 --- /dev/null +++ b/modules/nf-core/chromap/chromap/tests/main.nf.test.snap @@ -0,0 +1,338 @@ +{ + "sarscov2 - single_end": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": true + }, + "test.bed.gz:md5,b23aa9dae812fe84c308df6e18d850be" + ] + ], + "1": [ + + ], + "2": [ + + ], + "3": [ + + ], + "4": [ + [ + "CHROMAP_CHROMAP", + "chromap", + "0.3.2-r518" + ] + ], + "5": [ + [ + "CHROMAP_CHROMAP", + "samtools", + "1.23.1" + ] + ], + "bam": [ + + ], + "bed": [ + [ + { + "id": "test", + "single_end": true + }, + "test.bed.gz:md5,b23aa9dae812fe84c308df6e18d850be" + ] + ], + "pairs": [ + + ], + "tagAlign": [ + + ], + "versions_chromap": [ + [ + "CHROMAP_CHROMAP", + "chromap", + "0.3.2-r518" + ] + ], + "versions_samtools": [ + [ + "CHROMAP_CHROMAP", + "samtools", + "1.23.1" + ] + ] + } + ], + "timestamp": "2026-03-27T17:32:15.943898", + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.4" + } + }, + "sarscov2 - paired_end ": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.bed.gz:md5,f658c1e94adef751ad08e132aac92712" + ] + ], + "1": [ + + ], + "2": [ + + ], + "3": [ + + ], + "4": [ + [ + "CHROMAP_CHROMAP", + "chromap", + "0.3.2-r518" + ] + ], + "5": [ + [ + "CHROMAP_CHROMAP", + "samtools", + "1.23.1" + ] + ], + "bam": [ + + ], + "bed": [ + [ + { + "id": "test", + "single_end": false + }, + "test.bed.gz:md5,f658c1e94adef751ad08e132aac92712" + ] + ], + "pairs": [ + + ], + "tagAlign": [ + + ], + "versions_chromap": [ + [ + "CHROMAP_CHROMAP", + "chromap", + "0.3.2-r518" + ] + ], + "versions_samtools": [ + [ + "CHROMAP_CHROMAP", + "samtools", + "1.23.1" + ] + ] + } + ], + "timestamp": "2026-03-27T17:32:51.441586", + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.4" + } + }, + "sarscov2 - single_end - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": true + }, + "test.bed.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": true + }, + "test.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + [ + { + "id": "test", + "single_end": true + }, + "test.tagAlign.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "3": [ + [ + { + "id": "test", + "single_end": true + }, + "test.pairs.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "4": [ + [ + "CHROMAP_CHROMAP", + "chromap", + "0.3.2-r518" + ] + ], + "5": [ + [ + "CHROMAP_CHROMAP", + "samtools", + "1.23.1" + ] + ], + "bam": [ + [ + { + "id": "test", + "single_end": true + }, + "test.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "bed": [ + [ + { + "id": "test", + "single_end": true + }, + "test.bed.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "pairs": [ + [ + { + "id": "test", + "single_end": true + }, + "test.pairs.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "tagAlign": [ + [ + { + "id": "test", + "single_end": true + }, + "test.tagAlign.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "versions_chromap": [ + [ + "CHROMAP_CHROMAP", + "chromap", + "0.3.2-r518" + ] + ], + "versions_samtools": [ + [ + "CHROMAP_CHROMAP", + "samtools", + "1.23.1" + ] + ] + } + ], + "timestamp": "2026-03-27T17:33:28.468564", + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.4" + } + }, + "sarscov2 - paired_end": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.bed.gz:md5,f658c1e94adef751ad08e132aac92712" + ] + ], + "1": [ + + ], + "2": [ + + ], + "3": [ + + ], + "4": [ + [ + "CHROMAP_CHROMAP", + "chromap", + "0.3.2-r518" + ] + ], + "5": [ + [ + "CHROMAP_CHROMAP", + "samtools", + "1.23.1" + ] + ], + "bam": [ + + ], + "bed": [ + [ + { + "id": "test", + "single_end": false + }, + "test.bed.gz:md5,f658c1e94adef751ad08e132aac92712" + ] + ], + "pairs": [ + + ], + "tagAlign": [ + + ], + "versions_chromap": [ + [ + "CHROMAP_CHROMAP", + "chromap", + "0.3.2-r518" + ] + ], + "versions_samtools": [ + [ + "CHROMAP_CHROMAP", + "samtools", + "1.23.1" + ] + ] + } + ], + "timestamp": "2026-04-01T22:26:29.768814", + "meta": { + "nf-test": "0.9.4", + "nextflow": "25.10.4" + } + } +} \ No newline at end of file diff --git a/modules/nf-core/chromap/chromap/tests/nextflow.config b/modules/nf-core/chromap/chromap/tests/nextflow.config new file mode 100644 index 00000000..51b96a98 --- /dev/null +++ b/modules/nf-core/chromap/chromap/tests/nextflow.config @@ -0,0 +1,7 @@ +process { + + withName: CHROMAP_CHROMAP { + ext.args = '--SAM' + } + +} diff --git a/modules/nf-core/chromap/index/environment.yml b/modules/nf-core/chromap/index/environment.yml new file mode 100644 index 00000000..9b65ef36 --- /dev/null +++ b/modules/nf-core/chromap/index/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::chromap=0.3.2 diff --git a/modules/nf-core/chromap/index/main.nf b/modules/nf-core/chromap/index/main.nf index fb3773f8..666f8f11 100644 --- a/modules/nf-core/chromap/index/main.nf +++ b/modules/nf-core/chromap/index/main.nf @@ -2,24 +2,24 @@ process CHROMAP_INDEX { tag "$fasta" label 'process_medium' - conda "bioconda::chromap=0.2.4" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/chromap:0.2.4--hd03093a_0' : - 'biocontainers/chromap:0.2.4--hd03093a_0' }" + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine in ['singularity', 'apptainer'] && !task.ext.singularity_pull_docker_container ? + 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/80/809e5a0166357804ca10097100e96844100019a11a3aaebf14e2cceb2ee98c0a/data' : + 'community.wave.seqera.io/library/chromap:0.3.2--4ec4bca51cd82195' }" input: tuple val(meta), path(fasta) output: tuple val(meta), path ("*.index"), emit: index - path "versions.yml" , emit: versions + tuple val("${task.process}"), val('chromap'), eval("chromap --version 2>&1"), topic: versions, emit: versions_chromap when: task.ext.when == null || task.ext.when script: def args = task.ext.args ?: '' - def prefix = fasta.baseName + def prefix = task.ext.prefix ?: "${fasta.baseName}" """ chromap \\ -i \\ @@ -27,10 +27,11 @@ process CHROMAP_INDEX { -t $task.cpus \\ -r $fasta \\ -o ${prefix}.index + """ - cat <<-END_VERSIONS > versions.yml - "${task.process}": - chromap: \$(echo \$(chromap --version 2>&1)) - END_VERSIONS + stub: + def prefix = task.ext.prefix ?: "${fasta.baseName}" + """ + touch ${prefix}.index """ } diff --git a/modules/nf-core/chromap/index/meta.yml b/modules/nf-core/chromap/index/meta.yml index 39c5459b..84c39705 100644 --- a/modules/nf-core/chromap/index/meta.yml +++ b/modules/nf-core/chromap/index/meta.yml @@ -11,34 +11,57 @@ tools: homepage: https://github.com/haowenz/chromap documentation: https://github.com/haowenz/chromap tool_dev_url: https://github.com/haowenz/chromap - - licence: ["GPL v3"] - + licence: + - "GPL v3" + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'test' ] - - fasta: - type: file - description: Fasta reference file. - + - - meta: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'test' ] + - fasta: + type: file + description: Reference genome FASTA file + pattern: "*.{fa,fasta,fna}" + ontologies: + - edam: "http://edamontology.org/format_1929" output: - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - - meta: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'test' ] - - index: - type: file - description: Index file of the reference genome - pattern: "*.{index}" - + index: + - - meta: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'test' ] + - "*.index": + type: file + description: Index file of the reference genome + pattern: "*.{index}" + ontologies: [] + versions_chromap: + - - ${task.process}: + type: string + description: The name of the process + - chromap: + type: string + description: The name of the tool + - chromap --version 2>&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 + - chromap: + type: string + description: The name of the tool + - chromap --version 2>&1: + type: eval + description: The expression to obtain the version of the tool authors: - "@mahesh-panchal" - "@joseespinosa" +maintainers: + - "@mahesh-panchal" + - "@joseespinosa" diff --git a/modules/nf-core/chromap/index/tests/main.nf.test b/modules/nf-core/chromap/index/tests/main.nf.test new file mode 100644 index 00000000..c173d3e8 --- /dev/null +++ b/modules/nf-core/chromap/index/tests/main.nf.test @@ -0,0 +1,58 @@ +nextflow_process { + + name "Test Process CHROMAP_INDEX" + script "../main.nf" + process "CHROMAP_INDEX" + + tag "modules" + tag "modules_nfcore" + tag "chromap" + tag "chromap/index" + + test("sarscov2 - fasta") { + + 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( + file(process.out.index[0][1]).name, + process.out.findAll { key, val -> key.startsWith('versions') } + ).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(sanitizeOutput(process.out)).match() } + ) + } + } +} diff --git a/modules/nf-core/chromap/index/tests/main.nf.test.snap b/modules/nf-core/chromap/index/tests/main.nf.test.snap new file mode 100644 index 00000000..fc0d8b63 --- /dev/null +++ b/modules/nf-core/chromap/index/tests/main.nf.test.snap @@ -0,0 +1,47 @@ +{ + "sarscov2 - fasta - stub": { + "content": [ + { + "index": [ + [ + { + "id": "test" + }, + "genome.index:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions_chromap": [ + [ + "CHROMAP_INDEX", + "chromap", + "0.3.2-r518" + ] + ] + } + ], + "timestamp": "2026-04-01T22:06:50.82213", + "meta": { + "nf-test": "0.9.4", + "nextflow": "25.10.4" + } + }, + "sarscov2 - fasta": { + "content": [ + "genome.index", + { + "versions_chromap": [ + [ + "CHROMAP_INDEX", + "chromap", + "0.3.2-r518" + ] + ] + } + ], + "timestamp": "2026-03-31T23:38:19.664926", + "meta": { + "nf-test": "0.9.4", + "nextflow": "25.10.4" + } + } +} \ No newline at end of file diff --git a/modules/nf-core/custom/getchromsizes/main.nf b/modules/nf-core/custom/getchromsizes/main.nf deleted file mode 100644 index 060a2e88..00000000 --- a/modules/nf-core/custom/getchromsizes/main.nf +++ /dev/null @@ -1,44 +0,0 @@ -process CUSTOM_GETCHROMSIZES { - tag "$fasta" - label 'process_single' - - conda "bioconda::samtools=1.16.1" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/samtools:1.16.1--h6899075_1' : - 'biocontainers/samtools:1.16.1--h6899075_1' }" - - 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 - - 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 219ca1d8..00000000 --- a/modules/nf-core/custom/getchromsizes/meta.yml +++ /dev/null @@ -1,53 +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"] - -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: - - 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: - type: file - description: FASTA index file - pattern: "*.{fai}" - - gzi: - type: file - description: Optional gzip index file for compressed inputs - pattern: "*.gzi" - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - -authors: - - "@tamara-hodgetts" - - "@chris-cheshire" - - "@muffato" diff --git a/modules/nf-core/deeptools/alignmentsieve/environment.yml b/modules/nf-core/deeptools/alignmentsieve/environment.yml index d8e208ca..c2d2fb3a 100644 --- a/modules/nf-core/deeptools/alignmentsieve/environment.yml +++ b/modules/nf-core/deeptools/alignmentsieve/environment.yml @@ -1,6 +1,8 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json channels: - conda-forge - bioconda dependencies: - - bioconda::deeptools=3.5.5 + - bioconda::deeptools=3.5.6 - bioconda::samtools=1.20 diff --git a/modules/nf-core/deeptools/alignmentsieve/main.nf b/modules/nf-core/deeptools/alignmentsieve/main.nf index 3223399c..e536f29d 100644 --- a/modules/nf-core/deeptools/alignmentsieve/main.nf +++ b/modules/nf-core/deeptools/alignmentsieve/main.nf @@ -3,16 +3,17 @@ process DEEPTOOLS_ALIGNMENTSIEVE { label 'process_low' conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/mulled-v2-eb9e7907c7a753917c1e4d7a64384c047429618a:41defd13a6f2ce014549fcc05d0b051f655777f9-0': - 'biocontainers/mulled-v2-eb9e7907c7a753917c1e4d7a64384c047429618a:41defd13a6f2ce014549fcc05d0b051f655777f9-0' }" + container "${ workflow.containerEngine in ['singularity', 'apptainer'] && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/mulled-v2-eb9e7907c7a753917c1e4d7a64384c047429618a:28424fe3aec58d2b3e4e4390025d886207657d25-0': + 'quay.io/biocontainers/mulled-v2-eb9e7907c7a753917c1e4d7a64384c047429618a:28424fe3aec58d2b3e4e4390025d886207657d25-0' }" input: tuple val(meta), path(input), path(input_index) output: tuple val(meta), path("*_as.bam") , emit: bam - path "versions.yml" , emit: versions + tuple val("${task.process}"), val('deeptools'), eval('alignmentSieve --version | sed "s/alignmentSieve //g"') , emit: versions_deeptools, topic: versions + tuple val("${task.process}"), val('samtools'), eval("samtools version | sed '1!d;s/.* //'") , emit: versions_samtools, topic: versions path "*_log.txt" , emit: logs when: @@ -28,11 +29,6 @@ process DEEPTOOLS_ALIGNMENTSIEVE { -o ${prefix}_as.bam \\ --filterMetrics ${prefix}_log.txt \\ --numberOfProcessors $task.cpus - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - deeptools: \$(alignmentSieve --version | sed -e "s/alignmentSieve //g") - END_VERSIONS """ stub: @@ -40,10 +36,5 @@ process DEEPTOOLS_ALIGNMENTSIEVE { """ touch ${prefix}_as.bam touch ${prefix}_log.txt - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - deeptools: \$(alignmentSieve --version | sed -e "s/alignmentSieve //g") - END_VERSIONS """ } diff --git a/modules/nf-core/deeptools/alignmentsieve/meta.yml b/modules/nf-core/deeptools/alignmentsieve/meta.yml index 37d381ca..0defa878 100644 --- a/modules/nf-core/deeptools/alignmentsieve/meta.yml +++ b/modules/nf-core/deeptools/alignmentsieve/meta.yml @@ -1,5 +1,6 @@ name: deeptools_alignmentSieve -description: This tool filters alignments in a BAM/CRAM file according the the specified parameters. +description: This tool filters alignments in a BAM/CRAM file according the the + specified parameters. keywords: - ATACseq - filter @@ -7,13 +8,14 @@ keywords: - ATACshift tools: - deeptools: - description: A set of user-friendly tools for normalization and visualzation of - deep-sequencing data + description: A set of user-friendly tools for normalization and + visualization of deep-sequencing data homepage: https://deeptools.readthedocs.io/en/develop/content/tools/alignmentSieve.html documentation: https://deeptools.readthedocs.io/en/develop/content/tools/alignmentSieve.html tool_dev_url: https://github.com/deeptools/deepTools/ doi: "10.1093/nar/gkw257" - licence: ["GPL v3"] + licence: + - "GPL v3" identifier: biotools:deeptools input: - - meta: @@ -25,13 +27,15 @@ input: type: file description: BAM file pattern: "*.{bam}" + ontologies: [] - input_index: type: file description: BAM index file pattern: "*.{bai}" + ontologies: [] output: - - bam: - - meta: + bam: + - - meta: type: map description: | Groovy Map containing sample information @@ -40,16 +44,53 @@ output: type: file description: BAM file pattern: "*.bam" - - logs: - - "*_log.txt": - type: file - description: TXT file - pattern: "*.txt" - - versions: - - versions.yml: - type: file - description: File containing software versions - pattern: "versions.yml" + ontologies: [] + logs: + - "*_log.txt": + type: file + description: TXT file + pattern: "*.txt" + ontologies: [] + versions_deeptools: + - - ${task.process}: + type: string + description: The name of the process + - deeptools: + type: string + description: The name of the tool + - alignmentSieve --version | sed "s/alignmentSieve //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 '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 + - deeptools: + type: string + description: The name of the tool + - alignmentSieve --version | sed "s/alignmentSieve //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 '1!d;s/.* //': + type: eval + description: The expression to obtain the version of the tool authors: - "@lpantano" maintainers: diff --git a/modules/nf-core/deeptools/alignmentsieve/tests/main.nf.test b/modules/nf-core/deeptools/alignmentsieve/tests/main.nf.test index 2d3b61b9..ee882ddb 100644 --- a/modules/nf-core/deeptools/alignmentsieve/tests/main.nf.test +++ b/modules/nf-core/deeptools/alignmentsieve/tests/main.nf.test @@ -28,7 +28,7 @@ nextflow_process { { assert process.success }, { assert snapshot(process.out.logs, bam(process.out.bam[0][1]).getReadsMD5(), - process.out.versions) + process.out.findAll { key, val -> key.startsWith('version') }) .match() } ) diff --git a/modules/nf-core/deeptools/alignmentsieve/tests/main.nf.test.snap b/modules/nf-core/deeptools/alignmentsieve/tests/main.nf.test.snap index ad1c635d..d24f85b8 100644 --- a/modules/nf-core/deeptools/alignmentsieve/tests/main.nf.test.snap +++ b/modules/nf-core/deeptools/alignmentsieve/tests/main.nf.test.snap @@ -5,15 +5,28 @@ "test_log.txt:md5,39f97a6a2ff83330d5c93411113df63a" ], "463ac3b905fbf4ddf113a94dbfa8d69f", - [ - "versions.yml:md5,baf8080ab016b89a27483809252bc803" - ] + { + "versions_deeptools": [ + [ + "DEEPTOOLS_ALIGNMENTSIEVE", + "deeptools", + "3.5.6" + ] + ], + "versions_samtools": [ + [ + "DEEPTOOLS_ALIGNMENTSIEVE", + "samtools", + "1.20" + ] + ] + } ], + "timestamp": "2026-02-17T08:51:37.051958", "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" - }, - "timestamp": "2024-09-26T12:59:06.183167" + "nf-test": "0.9.4", + "nextflow": "25.10.4" + } }, "homo_sampiens - bam - stub": { "content": [ @@ -28,9 +41,20 @@ ] ], "1": [ - "versions.yml:md5,baf8080ab016b89a27483809252bc803" + [ + "DEEPTOOLS_ALIGNMENTSIEVE", + "deeptools", + "3.5.6" + ] ], "2": [ + [ + "DEEPTOOLS_ALIGNMENTSIEVE", + "samtools", + "1.20" + ] + ], + "3": [ "test_log.txt:md5,d41d8cd98f00b204e9800998ecf8427e" ], "bam": [ @@ -45,15 +69,26 @@ "logs": [ "test_log.txt:md5,d41d8cd98f00b204e9800998ecf8427e" ], - "versions": [ - "versions.yml:md5,baf8080ab016b89a27483809252bc803" + "versions_deeptools": [ + [ + "DEEPTOOLS_ALIGNMENTSIEVE", + "deeptools", + "3.5.6" + ] + ], + "versions_samtools": [ + [ + "DEEPTOOLS_ALIGNMENTSIEVE", + "samtools", + "1.20" + ] ] } ], + "timestamp": "2026-02-17T08:51:46.655621", "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" - }, - "timestamp": "2024-09-26T12:59:10.273315" + "nf-test": "0.9.4", + "nextflow": "25.10.4" + } } } \ No newline at end of file diff --git a/modules/nf-core/deeptools/alignmentsieve/tests/tags.yml b/modules/nf-core/deeptools/alignmentsieve/tests/tags.yml deleted file mode 100644 index fd24baa9..00000000 --- a/modules/nf-core/deeptools/alignmentsieve/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -deeptools/bamcoverage: - - "modules/nf-core/deeptools/alignmentsieve/**" diff --git a/modules/nf-core/deeptools/computematrix/environment.yml b/modules/nf-core/deeptools/computematrix/environment.yml index 0c80282f..9d079059 100644 --- a/modules/nf-core/deeptools/computematrix/environment.yml +++ b/modules/nf-core/deeptools/computematrix/environment.yml @@ -4,4 +4,4 @@ channels: - conda-forge - bioconda dependencies: - - bioconda::deeptools=3.5.5 + - bioconda::deeptools=3.5.6 diff --git a/modules/nf-core/deeptools/computematrix/main.nf b/modules/nf-core/deeptools/computematrix/main.nf index e8a36001..6007c793 100644 --- a/modules/nf-core/deeptools/computematrix/main.nf +++ b/modules/nf-core/deeptools/computematrix/main.nf @@ -3,9 +3,9 @@ process DEEPTOOLS_COMPUTEMATRIX { label 'process_high' conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/deeptools:3.5.5--pyhdfd78af_0': - 'biocontainers/deeptools:3.5.5--pyhdfd78af_0' }" + container "${ workflow.containerEngine in ['singularity', 'apptainer'] && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/deeptools:3.5.6--pyhdfd78af_0': + 'quay.io/biocontainers/deeptools:3.5.6--pyhdfd78af_0' }" input: tuple val(meta), path(bigwig) @@ -14,7 +14,7 @@ process DEEPTOOLS_COMPUTEMATRIX { output: tuple val(meta), path("*.mat.gz") , emit: matrix tuple val(meta), path("*.mat.tab"), emit: table - path "versions.yml" , emit: versions + tuple val("${task.process}"), val('deeptools'), eval('computeMatrix --version | sed "s/computeMatrix //g"') , emit: versions_deeptools, topic: versions when: task.ext.when == null || task.ext.when @@ -30,11 +30,6 @@ process DEEPTOOLS_COMPUTEMATRIX { --outFileName ${prefix}.computeMatrix.mat.gz \\ --outFileNameMatrix ${prefix}.computeMatrix.vals.mat.tab \\ --numberOfProcessors $task.cpus - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - deeptools: \$(computeMatrix --version | sed -e "s/computeMatrix //g") - END_VERSIONS """ stub: @@ -42,10 +37,5 @@ process DEEPTOOLS_COMPUTEMATRIX { """ echo "" | gzip > ${prefix}.computeMatrix.mat.gz touch ${prefix}.computeMatrix.vals.mat.tab - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - deeptools: \$(computeMatrix --version | sed -e "s/computeMatrix //g") - END_VERSIONS """ } diff --git a/modules/nf-core/deeptools/computematrix/meta.yml b/modules/nf-core/deeptools/computematrix/meta.yml index 5da5a008..1b6fe9c4 100644 --- a/modules/nf-core/deeptools/computematrix/meta.yml +++ b/modules/nf-core/deeptools/computematrix/meta.yml @@ -1,5 +1,6 @@ name: deeptools_computematrix -description: calculates scores per genome regions for other deeptools plotting utilities +description: calculates scores per genome regions for other deeptools plotting + utilities keywords: - genome - regions @@ -7,12 +8,13 @@ keywords: - matrix tools: - deeptools: - description: A set of user-friendly tools for normalization and visualization - of deep-sequencing data + description: A set of user-friendly tools for normalization and + visualization of deep-sequencing data documentation: https://deeptools.readthedocs.io/en/develop/index.html tool_dev_url: https://github.com/deeptools/deepTools doi: "10.1093/nar/gku365" - licence: ["GPL v3"] + licence: + - "GPL v3" identifier: biotools:deeptools input: - - meta: @@ -56,13 +58,27 @@ output: tabular file containing the scores of the generated matrix pattern: "*.{computeMatrix.vals.mat.tab}" ontologies: [] + versions_deeptools: + - - ${task.process}: + type: string + description: The name of the process + - deeptools: + type: string + description: The name of the tool + - computeMatrix --version | sed "s/computeMatrix //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 name of the process + - deeptools: + type: string + description: The name of the tool + - computeMatrix --version | sed "s/computeMatrix //g": + type: eval + description: The expression to obtain the version of the tool authors: - "@jeremy1805" - "@edmundmiller" diff --git a/modules/nf-core/deeptools/computematrix/tests/main.nf.test b/modules/nf-core/deeptools/computematrix/tests/main.nf.test index 39873aa3..1a34a853 100644 --- a/modules/nf-core/deeptools/computematrix/tests/main.nf.test +++ b/modules/nf-core/deeptools/computematrix/tests/main.nf.test @@ -14,7 +14,7 @@ nextflow_process { when { process { - """ + """ input[0] = [ [ id:'test' ], // meta map file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina//bigwig/test.bigwig', checkIfExists: true) @@ -31,7 +31,7 @@ nextflow_process { { assert process.success }, { assert snapshot(file(process.out.matrix.get(0).get(1)).name, process.out.table, - process.out.versions) + process.out.findAll { key, val -> key.startsWith('version') }) .match() } ) diff --git a/modules/nf-core/deeptools/computematrix/tests/main.nf.test.snap b/modules/nf-core/deeptools/computematrix/tests/main.nf.test.snap index a1916610..c1d7b27c 100644 --- a/modules/nf-core/deeptools/computematrix/tests/main.nf.test.snap +++ b/modules/nf-core/deeptools/computematrix/tests/main.nf.test.snap @@ -19,7 +19,11 @@ ] ], "2": [ - "versions.yml:md5,ccf4527952be3b834d42b6a968193b09" + [ + "DEEPTOOLS_COMPUTEMATRIX", + "deeptools", + "3.5.6" + ] ], "matrix": [ [ @@ -37,16 +41,20 @@ "test.computeMatrix.vals.mat.tab:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "versions": [ - "versions.yml:md5,ccf4527952be3b834d42b6a968193b09" + "versions_deeptools": [ + [ + "DEEPTOOLS_COMPUTEMATRIX", + "deeptools", + "3.5.6" + ] ] } ], + "timestamp": "2026-02-17T09:15:39.755493", "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" - }, - "timestamp": "2024-08-05T10:31:20.853496401" + "nf-test": "0.9.4", + "nextflow": "25.10.4" + } }, "sarscov2 - bigwig - bed": { "content": [ @@ -59,14 +67,20 @@ "test.computeMatrix.vals.mat.tab:md5,19e22051cc44edb7db3e0f8345330d90" ] ], - [ - "versions.yml:md5,ccf4527952be3b834d42b6a968193b09" - ] + { + "versions_deeptools": [ + [ + "DEEPTOOLS_COMPUTEMATRIX", + "deeptools", + "3.5.6" + ] + ] + } ], + "timestamp": "2026-02-17T09:15:32.56899", "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" - }, - "timestamp": "2024-08-05T10:31:15.614009233" + "nf-test": "0.9.4", + "nextflow": "25.10.4" + } } } \ No newline at end of file diff --git a/modules/nf-core/deeptools/computematrix/tests/nextflow.config b/modules/nf-core/deeptools/computematrix/tests/nextflow.config index f9e94fb2..4b12c391 100644 --- a/modules/nf-core/deeptools/computematrix/tests/nextflow.config +++ b/modules/nf-core/deeptools/computematrix/tests/nextflow.config @@ -4,4 +4,4 @@ process { ext.args = 'scale-regions -b 1000' } -} \ No newline at end of file +} diff --git a/modules/nf-core/deeptools/plotfingerprint/environment.yml b/modules/nf-core/deeptools/plotfingerprint/environment.yml index 0c80282f..9d079059 100644 --- a/modules/nf-core/deeptools/plotfingerprint/environment.yml +++ b/modules/nf-core/deeptools/plotfingerprint/environment.yml @@ -4,4 +4,4 @@ channels: - conda-forge - bioconda dependencies: - - bioconda::deeptools=3.5.5 + - bioconda::deeptools=3.5.6 diff --git a/modules/nf-core/deeptools/plotfingerprint/main.nf b/modules/nf-core/deeptools/plotfingerprint/main.nf index 0dba2ff7..b89bee1b 100644 --- a/modules/nf-core/deeptools/plotfingerprint/main.nf +++ b/modules/nf-core/deeptools/plotfingerprint/main.nf @@ -3,9 +3,9 @@ process DEEPTOOLS_PLOTFINGERPRINT { label 'process_high' conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/deeptools:3.5.5--pyhdfd78af_0': - 'biocontainers/deeptools:3.5.5--pyhdfd78af_0' }" + container "${ workflow.containerEngine in ['singularity', 'apptainer'] && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/deeptools:3.5.6--pyhdfd78af_0': + 'quay.io/biocontainers/deeptools:3.5.6--pyhdfd78af_0' }" input: tuple val(meta), path(bams), path(bais) @@ -14,7 +14,7 @@ process DEEPTOOLS_PLOTFINGERPRINT { tuple val(meta), path("*.pdf") , emit: pdf tuple val(meta), path("*.raw.txt") , emit: matrix tuple val(meta), path("*.qcmetrics.txt"), emit: metrics - path "versions.yml" , emit: versions + tuple val("${task.process}"), val('deeptools'), eval('plotFingerprint --version | sed "s/plotFingerprint //g"') , emit: versions_deeptools, topic: versions when: task.ext.when == null || task.ext.when @@ -32,11 +32,6 @@ process DEEPTOOLS_PLOTFINGERPRINT { --outRawCounts ${prefix}.plotFingerprint.raw.txt \\ --outQualityMetrics ${prefix}.plotFingerprint.qcmetrics.txt \\ --numberOfProcessors $task.cpus - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - deeptools: \$(plotFingerprint --version | sed -e "s/plotFingerprint //g") - END_VERSIONS """ stub: @@ -45,10 +40,5 @@ process DEEPTOOLS_PLOTFINGERPRINT { touch ${prefix}.plotFingerprint.pdf touch ${prefix}.plotFingerprint.raw.txt touch ${prefix}.plotFingerprint.qcmetrics.txt - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - deeptools: \$(plotFingerprint --version | sed -e "s/plotFingerprint //g") - END_VERSIONS """ } diff --git a/modules/nf-core/deeptools/plotfingerprint/meta.yml b/modules/nf-core/deeptools/plotfingerprint/meta.yml index 70306388..6ee24c3d 100644 --- a/modules/nf-core/deeptools/plotfingerprint/meta.yml +++ b/modules/nf-core/deeptools/plotfingerprint/meta.yml @@ -7,12 +7,13 @@ keywords: - bam tools: - deeptools: - description: A set of user-friendly tools for normalization and visualization - of deep-sequencing data + description: A set of user-friendly tools for normalization and + visualization of deep-sequencing data documentation: https://deeptools.readthedocs.io/en/develop/index.html tool_dev_url: https://github.com/deeptools/deepTools doi: "10.1093/nar/gku365" - licence: ["GPL v3"] + licence: + - "GPL v3" identifier: biotools:deeptools input: - - meta: @@ -67,13 +68,27 @@ output: file containing BAM file quality metrics pattern: "*.{qcmetrics.txt}" ontologies: [] + versions_deeptools: + - - ${task.process}: + type: string + description: The name of the process + - deeptools: + type: string + description: The name of the tool + - plotFingerprint --version | sed "s/plotFingerprint //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 name of the process + - deeptools: + type: string + description: The name of the tool + - plotFingerprint --version | sed "s/plotFingerprint //g": + type: eval + description: The expression to obtain the version of the tool authors: - "@edmundmiller" - "@drpatelh" diff --git a/modules/nf-core/deeptools/plotfingerprint/tests/main.nf.test b/modules/nf-core/deeptools/plotfingerprint/tests/main.nf.test index 818c6c9f..5c4edadf 100644 --- a/modules/nf-core/deeptools/plotfingerprint/tests/main.nf.test +++ b/modules/nf-core/deeptools/plotfingerprint/tests/main.nf.test @@ -13,7 +13,7 @@ nextflow_process { when { process { - """ + """ input[0] = [ [ 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), @@ -28,8 +28,8 @@ nextflow_process { { assert process.success }, { assert snapshot(file(process.out.pdf.get(0).get(1)).name, file(process.out.matrix.get(0).get(1)).name, - process.out.metrics.collect { file(it[1]).readLines().contains("0.24184576629880325") }, - process.out.versions) + process.out.metrics.collect { file(it[1]).readLines().contains("0.24184576629880325") }, + process.out.findAll { key, val -> key.startsWith('version') }) .match() } ) @@ -42,7 +42,7 @@ nextflow_process { when { process { - """ + """ input[0] = [ [ 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), diff --git a/modules/nf-core/deeptools/plotfingerprint/tests/main.nf.test.snap b/modules/nf-core/deeptools/plotfingerprint/tests/main.nf.test.snap index 502f8cd6..1f7bb383 100644 --- a/modules/nf-core/deeptools/plotfingerprint/tests/main.nf.test.snap +++ b/modules/nf-core/deeptools/plotfingerprint/tests/main.nf.test.snap @@ -6,15 +6,21 @@ [ false ], - [ - "versions.yml:md5,2dd872e44f5b7284c080491607d9b42a" - ] + { + "versions_deeptools": [ + [ + "DEEPTOOLS_PLOTFINGERPRINT", + "deeptools", + "3.5.6" + ] + ] + } ], + "timestamp": "2026-02-17T09:51:08.91017", "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" - }, - "timestamp": "2024-08-05T10:14:38.559795237" + "nf-test": "0.9.4", + "nextflow": "25.10.4" + } }, "homo_sampiens - bam - stub": { "content": [ @@ -47,7 +53,11 @@ ] ], "3": [ - "versions.yml:md5,2dd872e44f5b7284c080491607d9b42a" + [ + "DEEPTOOLS_PLOTFINGERPRINT", + "deeptools", + "3.5.6" + ] ], "matrix": [ [ @@ -76,15 +86,19 @@ "test.plotFingerprint.pdf:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "versions": [ - "versions.yml:md5,2dd872e44f5b7284c080491607d9b42a" + "versions_deeptools": [ + [ + "DEEPTOOLS_PLOTFINGERPRINT", + "deeptools", + "3.5.6" + ] ] } ], + "timestamp": "2026-02-17T09:42:56.510167", "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" - }, - "timestamp": "2024-08-05T10:14:45.23521809" + "nf-test": "0.9.4", + "nextflow": "25.10.4" + } } } \ No newline at end of file diff --git a/modules/nf-core/deeptools/plotheatmap/environment.yml b/modules/nf-core/deeptools/plotheatmap/environment.yml index 0c80282f..9d079059 100644 --- a/modules/nf-core/deeptools/plotheatmap/environment.yml +++ b/modules/nf-core/deeptools/plotheatmap/environment.yml @@ -4,4 +4,4 @@ channels: - conda-forge - bioconda dependencies: - - bioconda::deeptools=3.5.5 + - bioconda::deeptools=3.5.6 diff --git a/modules/nf-core/deeptools/plotheatmap/main.nf b/modules/nf-core/deeptools/plotheatmap/main.nf index 0bc6d148..21b53523 100644 --- a/modules/nf-core/deeptools/plotheatmap/main.nf +++ b/modules/nf-core/deeptools/plotheatmap/main.nf @@ -3,9 +3,9 @@ process DEEPTOOLS_PLOTHEATMAP { label 'process_low' conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/deeptools:3.5.5--pyhdfd78af_0': - 'biocontainers/deeptools:3.5.5--pyhdfd78af_0' }" + container "${ workflow.containerEngine in ['singularity', 'apptainer'] && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/deeptools:3.5.6--pyhdfd78af_0': + 'quay.io/biocontainers/deeptools:3.5.6--pyhdfd78af_0' }" input: tuple val(meta), path(matrix) @@ -13,7 +13,7 @@ process DEEPTOOLS_PLOTHEATMAP { output: tuple val(meta), path("*.pdf"), emit: pdf tuple val(meta), path("*.tab"), emit: table - path "versions.yml" , emit: versions + tuple val("${task.process}"), val('deeptools'), eval('plotHeatmap --version | sed "s/plotHeatmap //g"') , emit: versions_deeptools, topic: versions when: task.ext.when == null || task.ext.when @@ -27,11 +27,6 @@ process DEEPTOOLS_PLOTHEATMAP { --matrixFile $matrix \\ --outFileName ${prefix}.plotHeatmap.pdf \\ --outFileNameMatrix ${prefix}.plotHeatmap.mat.tab - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - deeptools: \$(plotHeatmap --version | sed -e "s/plotHeatmap //g") - END_VERSIONS """ stub: @@ -39,10 +34,5 @@ process DEEPTOOLS_PLOTHEATMAP { """ touch ${prefix}.plotHeatmap.pdf touch ${prefix}.plotHeatmap.mat.tab - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - deeptools: \$(plotFingerprint --version | sed -e "s/plotFingerprint //g") - END_VERSIONS """ } diff --git a/modules/nf-core/deeptools/plotheatmap/meta.yml b/modules/nf-core/deeptools/plotheatmap/meta.yml index fd15cf2c..1dd10ad1 100644 --- a/modules/nf-core/deeptools/plotheatmap/meta.yml +++ b/modules/nf-core/deeptools/plotheatmap/meta.yml @@ -7,12 +7,13 @@ keywords: - matrix tools: - deeptools: - description: A set of user-friendly tools for normalization and visualization - of deep-sequencing data + description: A set of user-friendly tools for normalization and + visualization of deep-sequencing data documentation: https://deeptools.readthedocs.io/en/develop/index.html tool_dev_url: https://github.com/deeptools/deepTools doi: "10.1093/nar/gku365" - licence: ["GPL v3"] + licence: + - "GPL v3" identifier: biotools:deeptools input: - - meta: @@ -50,13 +51,27 @@ output: type: file description: Output table ontologies: [] + versions_deeptools: + - - ${task.process}: + type: string + description: The name of the process + - deeptools: + type: string + description: The name of the tool + - plotHeatmap --version | sed "s/plotHeatmap //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 name of the process + - deeptools: + type: string + description: The name of the tool + - plotHeatmap --version | sed "s/plotHeatmap //g": + type: eval + description: The expression to obtain the version of the tool authors: - "@edmundmiller" - "@drpatelh" diff --git a/modules/nf-core/deeptools/plotheatmap/tests/main.nf.test b/modules/nf-core/deeptools/plotheatmap/tests/main.nf.test index b0bcaa9c..e03186e2 100644 --- a/modules/nf-core/deeptools/plotheatmap/tests/main.nf.test +++ b/modules/nf-core/deeptools/plotheatmap/tests/main.nf.test @@ -13,7 +13,7 @@ nextflow_process { when { process { - """ + """ input[0] = [ [ id:'test', single_end:false ], // meta map file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/deeptools/test.computeMatrix.mat.gz', checkIfExists: true), @@ -27,7 +27,7 @@ nextflow_process { { assert process.success }, { assert snapshot(file(process.out.pdf.get(0).get(1)).name, file(process.out.table.get(0).get(1)).name, - process.out.versions) + process.out.findAll { key, val -> key.startsWith('version') }) .match() } ) diff --git a/modules/nf-core/deeptools/plotheatmap/tests/main.nf.test.snap b/modules/nf-core/deeptools/plotheatmap/tests/main.nf.test.snap index 6cf07363..726ed4cf 100644 --- a/modules/nf-core/deeptools/plotheatmap/tests/main.nf.test.snap +++ b/modules/nf-core/deeptools/plotheatmap/tests/main.nf.test.snap @@ -21,7 +21,11 @@ ] ], "2": [ - "versions.yml:md5,f4040282400b8087dc94f1fa0b1cfefc" + [ + "DEEPTOOLS_PLOTHEATMAP", + "deeptools", + "3.5.6" + ] ], "pdf": [ [ @@ -41,29 +45,39 @@ "test.plotHeatmap.mat.tab:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "versions": [ - "versions.yml:md5,f4040282400b8087dc94f1fa0b1cfefc" + "versions_deeptools": [ + [ + "DEEPTOOLS_PLOTHEATMAP", + "deeptools", + "3.5.6" + ] ] } ], + "timestamp": "2026-02-17T09:56:26.321822", "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" - }, - "timestamp": "2024-08-05T10:17:23.70673465" + "nf-test": "0.9.4", + "nextflow": "25.10.4" + } }, "sarscov2 - mat": { "content": [ "test.plotHeatmap.pdf", "test.plotHeatmap.mat.tab", - [ - "versions.yml:md5,f4040282400b8087dc94f1fa0b1cfefc" - ] + { + "versions_deeptools": [ + [ + "DEEPTOOLS_PLOTHEATMAP", + "deeptools", + "3.5.6" + ] + ] + } ], + "timestamp": "2026-02-17T09:56:17.569358", "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" - }, - "timestamp": "2024-08-05T10:17:17.327116658" + "nf-test": "0.9.4", + "nextflow": "25.10.4" + } } } \ No newline at end of file diff --git a/modules/nf-core/deeptools/plotprofile/environment.yml b/modules/nf-core/deeptools/plotprofile/environment.yml index 0c80282f..9d079059 100644 --- a/modules/nf-core/deeptools/plotprofile/environment.yml +++ b/modules/nf-core/deeptools/plotprofile/environment.yml @@ -4,4 +4,4 @@ channels: - conda-forge - bioconda dependencies: - - bioconda::deeptools=3.5.5 + - bioconda::deeptools=3.5.6 diff --git a/modules/nf-core/deeptools/plotprofile/main.nf b/modules/nf-core/deeptools/plotprofile/main.nf index 4e9b44bd..6bd0cbce 100644 --- a/modules/nf-core/deeptools/plotprofile/main.nf +++ b/modules/nf-core/deeptools/plotprofile/main.nf @@ -3,9 +3,9 @@ process DEEPTOOLS_PLOTPROFILE { label 'process_low' conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/deeptools:3.5.5--pyhdfd78af_0': - 'biocontainers/deeptools:3.5.5--pyhdfd78af_0' }" + container "${ workflow.containerEngine in ['singularity', 'apptainer'] && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/deeptools:3.5.6--pyhdfd78af_0': + 'quay.io/biocontainers/deeptools:3.5.6--pyhdfd78af_0' }" input: tuple val(meta), path(matrix) @@ -13,7 +13,7 @@ process DEEPTOOLS_PLOTPROFILE { output: tuple val(meta), path("*.pdf"), emit: pdf tuple val(meta), path("*.tab"), emit: table - path "versions.yml" , emit: versions + tuple val("${task.process}"), val('deeptools'), eval('plotProfile --version | sed "s/plotProfile //g"') , emit: versions_deeptools, topic: versions when: task.ext.when == null || task.ext.when @@ -27,11 +27,6 @@ process DEEPTOOLS_PLOTPROFILE { --matrixFile $matrix \\ --outFileName ${prefix}.plotProfile.pdf \\ --outFileNameData ${prefix}.plotProfile.tab - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - deeptools: \$(plotProfile --version | sed -e "s/plotProfile //g") - END_VERSIONS """ stub: @@ -39,10 +34,5 @@ process DEEPTOOLS_PLOTPROFILE { """ touch ${prefix}.plotProfile.pdf touch ${prefix}.plotProfile.tab - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - deeptools: \$(plotProfile --version | sed -e "s/plotProfile //g") - END_VERSIONS """ } diff --git a/modules/nf-core/deeptools/plotprofile/meta.yml b/modules/nf-core/deeptools/plotprofile/meta.yml index bac0b23c..d0ad0a33 100644 --- a/modules/nf-core/deeptools/plotprofile/meta.yml +++ b/modules/nf-core/deeptools/plotprofile/meta.yml @@ -7,12 +7,13 @@ keywords: - matrix tools: - deeptools: - description: A set of user-friendly tools for normalization and visualization - of deep-sequencing data + description: A set of user-friendly tools for normalization and + visualization of deep-sequencing data documentation: https://deeptools.readthedocs.io/en/develop/index.html tool_dev_url: https://github.com/deeptools/deepTools doi: "10.1093/nar/gku365" - licence: ["GPL v3"] + licence: + - "GPL v3" identifier: biotools:deeptools input: - - meta: @@ -51,14 +52,28 @@ output: description: Output table pattern: "*.tab" ontologies: - - edam: http://edamontology.org/format_3475 # TSV + - edam: http://edamontology.org/format_3475 + versions_deeptools: + - - ${task.process}: + type: string + description: The name of the process + - deeptools: + type: string + description: The name of the tool + - plotProfile --version | sed "s/plotProfile //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 name of the process + - deeptools: + type: string + description: The name of the tool + - plotProfile --version | sed "s/plotProfile //g": + type: eval + description: The expression to obtain the version of the tool authors: - "@edmundmiller" - "@drpatelh" diff --git a/modules/nf-core/deeptools/plotprofile/tests/main.nf.test b/modules/nf-core/deeptools/plotprofile/tests/main.nf.test index fe52873b..58556a0e 100644 --- a/modules/nf-core/deeptools/plotprofile/tests/main.nf.test +++ b/modules/nf-core/deeptools/plotprofile/tests/main.nf.test @@ -13,7 +13,7 @@ nextflow_process { when { process { - """ + """ input[0] = [ [ id:'test', single_end:false ], // meta map file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/deeptools/test.computeMatrix.mat.gz', checkIfExists: true), @@ -27,7 +27,7 @@ nextflow_process { { assert process.success }, { assert snapshot(file(process.out.pdf.get(0).get(1)).name, file(process.out.table.get(0).get(1)).name, - process.out.versions) + process.out.findAll { key, val -> key.startsWith('version') }) .match() } ) diff --git a/modules/nf-core/deeptools/plotprofile/tests/main.nf.test.snap b/modules/nf-core/deeptools/plotprofile/tests/main.nf.test.snap index 17bef5cf..b09bb5e8 100644 --- a/modules/nf-core/deeptools/plotprofile/tests/main.nf.test.snap +++ b/modules/nf-core/deeptools/plotprofile/tests/main.nf.test.snap @@ -21,7 +21,11 @@ ] ], "2": [ - "versions.yml:md5,668bc5d10cff87bd952f8b9294416ac3" + [ + "DEEPTOOLS_PLOTPROFILE", + "deeptools", + "3.5.6" + ] ], "pdf": [ [ @@ -41,29 +45,39 @@ "test.plotProfile.tab:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "versions": [ - "versions.yml:md5,668bc5d10cff87bd952f8b9294416ac3" + "versions_deeptools": [ + [ + "DEEPTOOLS_PLOTPROFILE", + "deeptools", + "3.5.6" + ] ] } ], + "timestamp": "2026-02-17T10:12:42.249884", "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" - }, - "timestamp": "2024-08-05T10:20:41.694233491" + "nf-test": "0.9.4", + "nextflow": "25.10.4" + } }, "sarscov2 - mat": { "content": [ "test.plotProfile.pdf", "test.plotProfile.tab", - [ - "versions.yml:md5,668bc5d10cff87bd952f8b9294416ac3" - ] + { + "versions_deeptools": [ + [ + "DEEPTOOLS_PLOTPROFILE", + "deeptools", + "3.5.6" + ] + ] + } ], + "timestamp": "2026-02-17T10:12:32.770162", "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" - }, - "timestamp": "2024-08-05T10:20:35.515374962" + "nf-test": "0.9.4", + "nextflow": "25.10.4" + } } } \ No newline at end of file diff --git a/modules/nf-core/gffread/environment.yml b/modules/nf-core/gffread/environment.yml new file mode 100644 index 00000000..46c5faec --- /dev/null +++ b/modules/nf-core/gffread/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::gffread=0.12.7 diff --git a/modules/nf-core/gffread/main.nf b/modules/nf-core/gffread/main.nf index f4472b0e..00e4ab92 100644 --- a/modules/nf-core/gffread/main.nf +++ b/modules/nf-core/gffread/main.nf @@ -1,33 +1,51 @@ process GFFREAD { - tag "$gff" + tag "$meta.id" label 'process_low' - conda "bioconda::gffread=0.12.1" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/gffread:0.12.1--h8b12597_0' : - 'biocontainers/gffread:0.12.1--h8b12597_0' }" + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine in ['singularity', 'apptainer'] && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/gffread:0.12.7--hdcf5f25_4' : + 'quay.io/biocontainers/gffread:0.12.7--hdcf5f25_4' }" input: - path gff + tuple val(meta), path(gff) + path fasta output: - path "*.gtf" , emit: gtf - path "versions.yml" , emit: versions + tuple val(meta), path("*.gtf") , emit: gtf , optional: true + tuple val(meta), path("*.gff3") , emit: gffread_gff , optional: true + tuple val(meta), path("*.fasta"), emit: gffread_fasta , optional: true + tuple val(meta), path("*.bed") , emit: bed , optional: true + tuple val("${task.process}"), val('gffread'), eval('gffread --version 2>&1'), topic: versions, emit: versions_gffread when: task.ext.when == null || task.ext.when script: - def args = task.ext.args ?: '' - def prefix = task.ext.prefix ?: "${gff.baseName}" + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def extension = args.contains("--bed") ? 'bed' : ( 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() + // args_sorted = Move '-w', '-x', and '-y' to the end of the args string as gffread expects the file name after these parameters + if ( "$output_name" in [ "$gff", "$fasta" ] ) error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!" """ gffread \\ $gff \\ - $args \\ - -o ${prefix}.gtf - cat <<-END_VERSIONS > versions.yml - "${task.process}": - gffread: \$(gffread --version 2>&1) - END_VERSIONS + $fasta_arg \\ + $args_sorted \\ + $output + """ + + stub: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def extension = args.contains("--bed") ? 'bed' : ( 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 """ } diff --git a/modules/nf-core/gffread/meta.yml b/modules/nf-core/gffread/meta.yml index 20335747..52276cb9 100644 --- a/modules/nf-core/gffread/meta.yml +++ b/modules/nf-core/gffread/meta.yml @@ -1,33 +1,110 @@ name: gffread -description: Validate, filter, convert and perform various other operations on GFF files +description: Validate, filter, convert and perform various other operations on GFF + files keywords: - gff - conversion - validation tools: - gffread: - description: GFF/GTF utility providing format conversions, region filtering, FASTA sequence extraction and more. + description: GFF/GTF utility providing format conversions, region filtering, FASTA + sequence extraction and more. homepage: http://ccb.jhu.edu/software/stringtie/gff.shtml#gffread documentation: http://ccb.jhu.edu/software/stringtie/gff.shtml#gffread tool_dev_url: https://github.com/gpertea/gffread doi: 10.12688/f1000research.23297.1 licence: ["MIT"] - + identifier: biotools:gffread input: - - gff: + - - meta: + type: map + description: | + Groovy Map containing meta data + e.g. [ id:'test' ] + - gff: + type: file + description: A reference file in either the GFF3, GFF2 or GTF format. + pattern: "*.{gff, gtf}" + ontologies: [] + - fasta: type: file - description: A reference file in either the GFF3, GFF2 or GTF format. - pattern: "*.{gff, gtf}" - + description: A multi-fasta file with the genomic sequences + pattern: "*.{fasta,fa,faa,fas,fsa}" + ontologies: [] output: - - gtf: - type: file - description: GTF file resulting from the conversion of the GFF input file - pattern: "*.{gtf}" - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + 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 + pattern: "*.{gtf}" + 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 + pattern: "*.gff3" + ontologies: [] + gffread_fasta: + - - meta: + type: map + description: | + Groovy Map containing meta data + e.g. [ id:'test' ] + - "*.fasta": + type: file + description: Fasta file produced when either of '-w', '-x', '-y' parameters + is present + pattern: "*.fasta" + ontologies: [] + bed: + - - meta: + type: map + description: | + Groovy Map containing meta data + e.g. [ id:'test' ] + - "*.bed": + type: file + description: BED file resulting from the conversion of the GFF input file + when the '--bed' argument is present + pattern: "*.bed" + 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: - - "@emiller88" + - "@edmundmiller" +maintainers: + - "@edmundmiller" + - "@gallvp" diff --git a/modules/nf-core/gffread/tests/main.nf.test b/modules/nf-core/gffread/tests/main.nf.test new file mode 100644 index 00000000..b3aab183 --- /dev/null +++ b/modules/nf-core/gffread/tests/main.nf.test @@ -0,0 +1,275 @@ +nextflow_process { + + name "Test Process GFFREAD" + script "../main.nf" + process "GFFREAD" + + tag "gffread" + tag "modules_nfcore" + tag "modules" + + test("sarscov2-gff3-gtf") { + + config "./nextflow.config" + + when { + params { + outdir = "$outputDir" + } + process { + """ + input[0] = [ + [id: 'test'], + file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.gff3", checkIfExists: true) + ] + input[1] = [] + + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() }, + { assert process.out.gffread_gff == [] }, + { assert process.out.gffread_fasta == [] } + ) + } + + } + + test("sarscov2-gff3-gtf-stub") { + + options '-stub' + config "./nextflow.config" + + when { + params { + outdir = "$outputDir" + } + process { + """ + input[0] = [ + [id: 'test'], + file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.gff3", checkIfExists: true) + ] + input[1] = [] + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() }, + { assert process.out.gffread_gff == [] }, + { assert process.out.gffread_fasta == [] } + ) + } + + } + + test("sarscov2-gff3-gff3") { + + config "./nextflow-gff3.config" + + when { + params { + outdir = "$outputDir" + } + process { + """ + input[0] = [ + [id: 'test'], + file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.gff3", checkIfExists: true) + ] + input[1] = [] + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() }, + { assert process.out.gtf == [] }, + { assert process.out.gffread_fasta == [] } + ) + } + + } + + test("sarscov2-gff3-gff3-stub") { + + options '-stub' + config "./nextflow-gff3.config" + + when { + params { + outdir = "$outputDir" + } + process { + """ + input[0] = [ + [id: 'test'], + file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.gff3", checkIfExists: true) + ] + input[1] = [] + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() }, + { assert process.out.gtf == [] }, + { assert process.out.gffread_fasta == [] } + ) + } + + } + + test("sarscov2-gff3-fasta") { + + config "./nextflow-fasta.config" + + when { + params { + outdir = "$outputDir" + } + process { + """ + input[0] = [ + [id: 'test'], + file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.gff3", checkIfExists: true) + ] + input[1] = file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.fasta", checkIfExists: true) + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() }, + { assert process.out.gtf == [] }, + { assert process.out.gffread_gff == [] } + ) + } + + } + + test("sarscov2-gff3-fasta-stub") { + + options '-stub' + config "./nextflow-fasta.config" + + when { + params { + outdir = "$outputDir" + } + process { + """ + input[0] = [ + [id: 'test'], + file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.gff3", checkIfExists: true) + ] + input[1] = file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.fasta", checkIfExists: true) + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() }, + { assert process.out.gtf == [] }, + { assert process.out.gffread_gff == [] } + ) + } + + } + + test("sarscov2-gff3-bed") { + + config "./nextflow-bed.config" + + when { + process { + """ + input[0] = [ + [id: 'test'], + file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.gff3", checkIfExists: true) + ] + input[1] = [] + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(sanitizeOutput(process.out)).match() } + ) + } + + } + + test("sarscov2-gff3-bed-stub") { + + options '-stub' + config "./nextflow-bed.config" + + when { + process { + """ + input[0] = [ + [id: 'test'], + file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.gff3", checkIfExists: true) + ] + input[1] = [] + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(sanitizeOutput(process.out)).match() } + ) + } + + } + + test("sarscov2-gff3-fasta-fail-catch") { + + options '-stub' + config "./nextflow-fasta.config" + + when { + params { + outdir = "$outputDir" + } + process { + """ + input[0] = [ + [id: 'genome'], + file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.gff3", checkIfExists: true) + ] + input[1] = file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.fasta", checkIfExists: true) + """ + } + } + + then { + assertAll ( + { assert ! process.success }, + { assert process.stdout.toString().contains("Input and output names are the same") } + ) + } + + } + +} diff --git a/modules/nf-core/gffread/tests/main.nf.test.snap b/modules/nf-core/gffread/tests/main.nf.test.snap new file mode 100644 index 00000000..c8f7938a --- /dev/null +++ b/modules/nf-core/gffread/tests/main.nf.test.snap @@ -0,0 +1,426 @@ +{ + "sarscov2-gff3-gtf": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.gtf:md5,1ea0ae98d3388e0576407dc4a24ef428" + ] + ], + "1": [ + + ], + "2": [ + + ], + "3": [ + + ], + "4": [ + [ + "GFFREAD", + "gffread", + "0.12.7" + ] + ], + "bed": [ + + ], + "gffread_fasta": [ + + ], + "gffread_gff": [ + + ], + "gtf": [ + [ + { + "id": "test" + }, + "test.gtf:md5,1ea0ae98d3388e0576407dc4a24ef428" + ] + ], + "versions_gffread": [ + [ + "GFFREAD", + "gffread", + "0.12.7" + ] + ] + } + ], + "timestamp": "2026-04-24T10:22:41.259965105", + "meta": { + "nf-test": "0.9.5", + "nextflow": "25.10.4" + } + }, + "sarscov2-gff3-gff3": { + "content": [ + { + "0": [ + + ], + "1": [ + [ + { + "id": "test" + }, + "test.gff3:md5,c4e5da6267c6bee5899a2c204ae1ad91" + ] + ], + "2": [ + + ], + "3": [ + + ], + "4": [ + [ + "GFFREAD", + "gffread", + "0.12.7" + ] + ], + "bed": [ + + ], + "gffread_fasta": [ + + ], + "gffread_gff": [ + [ + { + "id": "test" + }, + "test.gff3:md5,c4e5da6267c6bee5899a2c204ae1ad91" + ] + ], + "gtf": [ + + ], + "versions_gffread": [ + [ + "GFFREAD", + "gffread", + "0.12.7" + ] + ] + } + ], + "timestamp": "2026-04-24T10:22:51.897172513", + "meta": { + "nf-test": "0.9.5", + "nextflow": "25.10.4" + } + }, + "sarscov2-gff3-gtf-stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.gtf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + + ], + "2": [ + + ], + "3": [ + + ], + "4": [ + [ + "GFFREAD", + "gffread", + "0.12.7" + ] + ], + "bed": [ + + ], + "gffread_fasta": [ + + ], + "gffread_gff": [ + + ], + "gtf": [ + [ + { + "id": "test" + }, + "test.gtf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions_gffread": [ + [ + "GFFREAD", + "gffread", + "0.12.7" + ] + ] + } + ], + "timestamp": "2026-04-24T10:22:46.582356403", + "meta": { + "nf-test": "0.9.5", + "nextflow": "25.10.4" + } + }, + "sarscov2-gff3-bed": { + "content": [ + { + "bed": [ + [ + { + "id": "test" + }, + "test.bed:md5,96fd7117a706e7c2ccbe062beb635172" + ] + ], + "gffread_fasta": [ + + ], + "gffread_gff": [ + + ], + "gtf": [ + + ], + "versions_gffread": [ + [ + "GFFREAD", + "gffread", + "0.12.7" + ] + ] + } + ], + "timestamp": "2026-04-24T10:23:13.476804733", + "meta": { + "nf-test": "0.9.5", + "nextflow": "25.10.4" + } + }, + "sarscov2-gff3-bed-stub": { + "content": [ + { + "bed": [ + [ + { + "id": "test" + }, + "test.bed:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "gffread_fasta": [ + + ], + "gffread_gff": [ + + ], + "gtf": [ + + ], + "versions_gffread": [ + [ + "GFFREAD", + "gffread", + "0.12.7" + ] + ] + } + ], + "timestamp": "2026-04-24T10:23:18.831655873", + "meta": { + "nf-test": "0.9.5", + "nextflow": "25.10.4" + } + }, + "sarscov2-gff3-fasta-stub": { + "content": [ + { + "0": [ + + ], + "1": [ + + ], + "2": [ + [ + { + "id": "test" + }, + "test.fasta:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + + ], + "4": [ + [ + "GFFREAD", + "gffread", + "0.12.7" + ] + ], + "bed": [ + + ], + "gffread_fasta": [ + [ + { + "id": "test" + }, + "test.fasta:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "gffread_gff": [ + + ], + "gtf": [ + + ], + "versions_gffread": [ + [ + "GFFREAD", + "gffread", + "0.12.7" + ] + ] + } + ], + "timestamp": "2026-04-24T10:23:08.064865029", + "meta": { + "nf-test": "0.9.5", + "nextflow": "25.10.4" + } + }, + "sarscov2-gff3-gff3-stub": { + "content": [ + { + "0": [ + + ], + "1": [ + [ + { + "id": "test" + }, + "test.gff3:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + + ], + "3": [ + + ], + "4": [ + [ + "GFFREAD", + "gffread", + "0.12.7" + ] + ], + "bed": [ + + ], + "gffread_fasta": [ + + ], + "gffread_gff": [ + [ + { + "id": "test" + }, + "test.gff3:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "gtf": [ + + ], + "versions_gffread": [ + [ + "GFFREAD", + "gffread", + "0.12.7" + ] + ] + } + ], + "timestamp": "2026-04-24T10:22:57.33529754", + "meta": { + "nf-test": "0.9.5", + "nextflow": "25.10.4" + } + }, + "sarscov2-gff3-fasta": { + "content": [ + { + "0": [ + + ], + "1": [ + + ], + "2": [ + [ + { + "id": "test" + }, + "test.fasta:md5,5f8108fb51739a0588ccf0a251de919a" + ] + ], + "3": [ + + ], + "4": [ + [ + "GFFREAD", + "gffread", + "0.12.7" + ] + ], + "bed": [ + + ], + "gffread_fasta": [ + [ + { + "id": "test" + }, + "test.fasta:md5,5f8108fb51739a0588ccf0a251de919a" + ] + ], + "gffread_gff": [ + + ], + "gtf": [ + + ], + "versions_gffread": [ + [ + "GFFREAD", + "gffread", + "0.12.7" + ] + ] + } + ], + "timestamp": "2026-04-24T10:23:02.723479313", + "meta": { + "nf-test": "0.9.5", + "nextflow": "25.10.4" + } + } +} \ No newline at end of file diff --git a/modules/nf-core/gffread/tests/nextflow-bed.config b/modules/nf-core/gffread/tests/nextflow-bed.config new file mode 100644 index 00000000..e6406899 --- /dev/null +++ b/modules/nf-core/gffread/tests/nextflow-bed.config @@ -0,0 +1,5 @@ +process { + withName: GFFREAD { + ext.args = '--bed' + } +} diff --git a/modules/nf-core/gffread/tests/nextflow-fasta.config b/modules/nf-core/gffread/tests/nextflow-fasta.config new file mode 100644 index 00000000..ac6cb148 --- /dev/null +++ b/modules/nf-core/gffread/tests/nextflow-fasta.config @@ -0,0 +1,5 @@ +process { + withName: GFFREAD { + ext.args = '-w -S' + } +} diff --git a/modules/nf-core/gffread/tests/nextflow-gff3.config b/modules/nf-core/gffread/tests/nextflow-gff3.config new file mode 100644 index 00000000..afe0830e --- /dev/null +++ b/modules/nf-core/gffread/tests/nextflow-gff3.config @@ -0,0 +1,5 @@ +process { + withName: GFFREAD { + ext.args = '' + } +} diff --git a/modules/nf-core/gffread/tests/nextflow.config b/modules/nf-core/gffread/tests/nextflow.config new file mode 100644 index 00000000..74b25094 --- /dev/null +++ b/modules/nf-core/gffread/tests/nextflow.config @@ -0,0 +1,5 @@ +process { + withName: GFFREAD { + ext.args = '-T' + } +} diff --git a/modules/nf-core/gunzip/environment.yml b/modules/nf-core/gunzip/environment.yml new file mode 100644 index 00000000..9b926b1f --- /dev/null +++ b/modules/nf-core/gunzip/environment.yml @@ -0,0 +1,12 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json +channels: + - conda-forge + - bioconda +dependencies: + - conda-forge::coreutils=9.5 + - conda-forge::grep=3.11 + - conda-forge::gzip=1.13 + - conda-forge::lbzip2=2.5 + - conda-forge::sed=4.8 + - conda-forge::tar=1.34 diff --git a/modules/nf-core/gunzip/main.nf b/modules/nf-core/gunzip/main.nf index 73bf08cd..6edffc59 100644 --- a/modules/nf-core/gunzip/main.nf +++ b/modules/nf-core/gunzip/main.nf @@ -1,48 +1,47 @@ process GUNZIP { - tag "$archive" + tag "${archive}" label 'process_single' - conda "conda-forge::sed=4.7" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/ubuntu:20.04' : - 'nf-core/ubuntu:20.04' }" + conda "${moduleDir}/environment.yml" + container "${workflow.containerEngine in ['singularity', 'apptainer'] && !task.ext.singularity_pull_docker_container + ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/52/52ccce28d2ab928ab862e25aae26314d69c8e38bd41ca9431c67ef05221348aa/data' + : 'community.wave.seqera.io/library/coreutils_grep_gzip_lbzip2_pruned:838ba80435a629f8'}" input: tuple val(meta), path(archive) output: - tuple val(meta), path("$gunzip"), emit: gunzip - path "versions.yml" , emit: versions + tuple val(meta), path("${gunzip}"), emit: gunzip + 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 script: def args = task.ext.args ?: '' - gunzip = archive.toString() - '.gz' + def nameWithoutGz = archive.extension == 'gz' ? archive.baseName : archive.name + def extension = file(nameWithoutGz).extension + def name = file(nameWithoutGz).baseName + def prefix = task.ext.prefix ?: name + gunzip = prefix + ".${extension}" """ # Not calling gunzip itself because it creates files # with the original group ownership rather than the # default one for that user / the work directory gzip \\ -cd \\ - $args \\ - $archive \\ - > $gunzip - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - gunzip: \$(echo \$(gunzip --version 2>&1) | sed 's/^.*(gzip) //; s/ Copyright.*\$//') - END_VERSIONS + ${args} \\ + ${archive} \\ + > ${gunzip} """ stub: - gunzip = archive.toString() - '.gz' + def nameWithoutGz = archive.extension == 'gz' ? archive.baseName : archive.name + def extension = file(nameWithoutGz).extension + def name = file(nameWithoutGz).baseName + 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 + touch ${gunzip} """ } diff --git a/modules/nf-core/gunzip/meta.yml b/modules/nf-core/gunzip/meta.yml index 4cdcdf4c..bba6b3ba 100644 --- a/modules/nf-core/gunzip/meta.yml +++ b/modules/nf-core/gunzip/meta.yml @@ -10,26 +10,59 @@ tools: gzip is a file format and a software application used for file compression and decompression. documentation: https://www.gnu.org/software/gzip/manual/gzip.html licence: ["GPL-3.0-or-later"] + identifier: "" input: - - meta: - type: map - description: | - Optional groovy Map containing meta information - e.g. [ id:'test', single_end:false ] - - archive: - type: file - description: File to be compressed/uncompressed - pattern: "*.*" + - - meta: + type: map + description: | + Optional groovy Map containing meta information + e.g. [ id:'test', single_end:false ] + - archive: + type: file + description: File to be compressed/uncompressed + pattern: "*.*" + ontologies: [] output: - - gunzip: - type: file - description: Compressed/uncompressed file - pattern: "*.*" - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + gunzip: + - - meta: + type: file + description: Compressed/uncompressed file + pattern: "*.*" + ontologies: [] + - ${gunzip}: + type: file + description: Compressed/uncompressed file + pattern: "*.*" + 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" - "@jfy133" +maintainers: + - "@joseespinosa" + - "@drpatelh" + - "@jfy133" + - "@gallvp" diff --git a/modules/nf-core/gunzip/tests/main.nf.test b/modules/nf-core/gunzip/tests/main.nf.test new file mode 100644 index 00000000..33cb75ae --- /dev/null +++ b/modules/nf-core/gunzip/tests/main.nf.test @@ -0,0 +1,175 @@ +nextflow_process { + + name "Test Process GUNZIP" + script "../main.nf" + process "GUNZIP" + tag "gunzip" + tag "modules_nfcore" + tag "modules" + + test("Should run without failures") { + + when { + params { + outdir = "$outputDir" + } + process { + """ + input[0] = Channel.of([ + [], + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) + ] + ) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("Should run without failures - prefix") { + + config './nextflow.config' + + when { + params { + outdir = "$outputDir" + } + process { + """ + input[0] = Channel.of([ + [ id: 'test' ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) + ] + ) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("Should run without failures - stub") { + + options '-stub' + + when { + params { + outdir = "$outputDir" + } + process { + """ + input[0] = Channel.of([ + [], + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) + ] + ) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("Should decompress file with extension appearing multiple times in filename") { + + when { + params { + outdir = "$outputDir" + } + process { + """ + input[0] = Channel.of([ + [], + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true).copyTo('test.fa.v1.fa.gz') + ] + ) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert file(process.out.gunzip[0][1]).name == 'test.fa.v1.fa' } + ) + } + + } + + test("Should decompress file with extension appearing multiple times in filename - prefix") { + + config './nextflow.config' + + when { + params { + outdir = "$outputDir" + } + process { + """ + input[0] = Channel.of([ + [ id: 'test' ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true).copyTo('test.fa.v1.fa.gz') + ] + ) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("Should run without failures - prefix - stub") { + + options '-stub' + config './nextflow.config' + + when { + params { + outdir = "$outputDir" + } + process { + """ + input[0] = Channel.of([ + [ id: 'test' ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) + ] + ) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + +} diff --git a/modules/nf-core/gunzip/tests/main.nf.test.snap b/modules/nf-core/gunzip/tests/main.nf.test.snap new file mode 100644 index 00000000..8e6861cd --- /dev/null +++ b/modules/nf-core/gunzip/tests/main.nf.test.snap @@ -0,0 +1,207 @@ +{ + "Should decompress file with extension appearing multiple times in filename - prefix": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.xyz.fa:md5,4161df271f9bfcd25d5845a1e220dbec" + ] + ], + "1": [ + [ + "GUNZIP", + "gunzip", + "1.13" + ] + ], + "gunzip": [ + [ + { + "id": "test" + }, + "test.xyz.fa:md5,4161df271f9bfcd25d5845a1e220dbec" + ] + ], + "versions_gunzip": [ + [ + "GUNZIP", + "gunzip", + "1.13" + ] + ] + } + ], + "timestamp": "2026-04-15T15:20:52.59447", + "meta": { + "nf-test": "0.9.5", + "nextflow": "25.10.4" + } + }, + "Should run without failures - prefix - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.xyz.fastq:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + "GUNZIP", + "gunzip", + "1.13" + ] + ], + "gunzip": [ + [ + { + "id": "test" + }, + "test.xyz.fastq:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions_gunzip": [ + [ + "GUNZIP", + "gunzip", + "1.13" + ] + ] + } + ], + "timestamp": "2026-01-19T17:21:56.633550769", + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.2" + } + }, + "Should run without failures - stub": { + "content": [ + { + "0": [ + [ + [ + + ], + "test_1.fastq:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + "GUNZIP", + "gunzip", + "1.13" + ] + ], + "gunzip": [ + [ + [ + + ], + "test_1.fastq:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions_gunzip": [ + [ + "GUNZIP", + "gunzip", + "1.13" + ] + ] + } + ], + "timestamp": "2026-01-19T17:21:51.435621199", + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.2" + } + }, + "Should run without failures": { + "content": [ + { + "0": [ + [ + [ + + ], + "test_1.fastq:md5,4161df271f9bfcd25d5845a1e220dbec" + ] + ], + "1": [ + [ + "GUNZIP", + "gunzip", + "1.13" + ] + ], + "gunzip": [ + [ + [ + + ], + "test_1.fastq:md5,4161df271f9bfcd25d5845a1e220dbec" + ] + ], + "versions_gunzip": [ + [ + "GUNZIP", + "gunzip", + "1.13" + ] + ] + } + ], + "timestamp": "2026-01-19T17:21:40.613975821", + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.2" + } + }, + "Should run without failures - prefix": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.xyz.fastq:md5,4161df271f9bfcd25d5845a1e220dbec" + ] + ], + "1": [ + [ + "GUNZIP", + "gunzip", + "1.13" + ] + ], + "gunzip": [ + [ + { + "id": "test" + }, + "test.xyz.fastq:md5,4161df271f9bfcd25d5845a1e220dbec" + ] + ], + "versions_gunzip": [ + [ + "GUNZIP", + "gunzip", + "1.13" + ] + ] + } + ], + "timestamp": "2026-01-19T17:21:46.086880414", + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.2" + } + } +} \ No newline at end of file diff --git a/modules/nf-core/gunzip/tests/nextflow.config b/modules/nf-core/gunzip/tests/nextflow.config new file mode 100644 index 00000000..dec77642 --- /dev/null +++ b/modules/nf-core/gunzip/tests/nextflow.config @@ -0,0 +1,5 @@ +process { + withName: GUNZIP { + ext.prefix = { "${meta.id}.xyz" } + } +} diff --git a/modules/nf-core/homer/annotatepeaks/environment.yml b/modules/nf-core/homer/annotatepeaks/environment.yml new file mode 100644 index 00000000..3a556e4c --- /dev/null +++ b/modules/nf-core/homer/annotatepeaks/environment.yml @@ -0,0 +1,12 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::bioconductor-deseq2=1.42.0 + - bioconda::bioconductor-edger=4.0.16 + - bioconda::homer=4.11 + - bioconda::samtools=1.21 + - conda-forge::r-essentials=4.3 + - conda-forge::wget=1.21.4 diff --git a/modules/nf-core/homer/annotatepeaks/main.nf b/modules/nf-core/homer/annotatepeaks/main.nf index b6a4c6bd..71f6c708 100644 --- a/modules/nf-core/homer/annotatepeaks/main.nf +++ b/modules/nf-core/homer/annotatepeaks/main.nf @@ -1,22 +1,21 @@ process HOMER_ANNOTATEPEAKS { - tag "$meta.id" + 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 "bioconda::homer=4.11" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/homer:4.11--pl526hc9558a2_3' : - 'biocontainers/homer:4.11--pl526hc9558a2_3' }" + conda "${moduleDir}/environment.yml" + container "${workflow.containerEngine in ['singularity', 'apptainer'] && !task.ext.singularity_pull_docker_container + ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/0f/0fe4a3875b78dce3c66b43fb96489769cc32e55e329e2525d2af09096af2252a/data' + : 'community.wave.seqera.io/library/bioconductor-deseq2_bioconductor-edger_homer_samtools_pruned:a8f4c58755bb281b'}" input: tuple val(meta), path(peak) - path fasta - path gtf + path fasta + path gtf output: tuple val(meta), path("*annotatePeaks.txt"), emit: txt tuple val(meta), path("*annStats.txt"), emit: stats, optional: true - path "versions.yml" , emit: versions + // WARN: Version information not provided by tool on CLI. Please update this string when bumping container versions. + tuple val("${task.process}"), val('homer'), val("4.11"), emit: versions_homer, topic: versions when: task.ext.when == null || task.ext.when @@ -24,19 +23,19 @@ process HOMER_ANNOTATEPEAKS { script: def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" - def VERSION = '4.11' // WARN: Version information not provided by tool on CLI. Please update this string when bumping container versions. """ annotatePeaks.pl \\ - $peak \\ - $fasta \\ - $args \\ - -gtf $gtf \\ - -cpu $task.cpus \\ + ${peak} \\ + ${fasta} \\ + ${args} \\ + -gtf ${gtf} \\ + -cpu ${task.cpus} \\ > ${prefix}.annotatePeaks.txt + """ - cat <<-END_VERSIONS > versions.yml - "${task.process}": - homer: $VERSION - END_VERSIONS + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.annotatePeaks.txt """ } diff --git a/modules/nf-core/homer/annotatepeaks/meta.yml b/modules/nf-core/homer/annotatepeaks/meta.yml index 2c6e52a1..31e74eab 100644 --- a/modules/nf-core/homer/annotatepeaks/meta.yml +++ b/modules/nf-core/homer/annotatepeaks/meta.yml @@ -10,43 +10,76 @@ tools: HOMER (Hypergeometric Optimization of Motif EnRichment) is a suite of tools for Motif Discovery and next-gen sequencing analysis. documentation: http://homer.ucsd.edu/homer/ doi: 10.1016/j.molcel.2010.05.004. - licence: ["GPL-3.0-or-later"] + licence: + - "GPL-3.0-or-later" + identifier: biotools:homer input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - peaks: - type: file - description: The peak files in bed format - pattern: "*.bed" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - peak: + type: file + description: Peak file to annotate + ontologies: [] - fasta: type: file description: Fasta file of reference genome pattern: "*.fasta" + ontologies: [] - gtf: type: file description: GTF file of reference genome pattern: "*.gtf" + ontologies: [] output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - annotated_peaks: - type: file - description: The annotated peaks - pattern: "*annotatePeaks.txt" - - annotation_stats: - type: file - description: the annStats file output from -annStats parameter - pattern: "*annStats.txt" - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + txt: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*annotatePeaks.txt": + type: file + description: Annotated peaks in txt file + pattern: "*annotatePeaks.txt" + ontologies: [] + stats: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*annStats.txt": + type: file + description: Annotation statistics in txt file + pattern: "*annStats.txt" + ontologies: [] + versions_homer: + - - ${task.process}: + type: string + description: The name of the process + - homer: + type: string + description: The name of the tool + - "4.11": + type: string + description: The expression to obtain the version of the tool +topics: + versions: + - - ${task.process}: + type: string + description: The name of the process + - homer: + type: string + description: The name of the tool + - "4.11": + type: string + description: The expression to obtain the version of the tool authors: - "@drpatelh" - "@kevinmenden" +maintainers: + - "@drpatelh" + - "@kevinmenden" diff --git a/modules/nf-core/homer/annotatepeaks/tests/main.nf.test b/modules/nf-core/homer/annotatepeaks/tests/main.nf.test new file mode 100644 index 00000000..6619ed3a --- /dev/null +++ b/modules/nf-core/homer/annotatepeaks/tests/main.nf.test @@ -0,0 +1,63 @@ + +nextflow_process { + + name "Test Process HOMER_ANNOTATEPEAKS" + script "../main.nf" + process "HOMER_ANNOTATEPEAKS" + config "./nextflow.config" + + tag "modules" + tag "modules_nfcore" + tag "homer" + tag "homer/annotatepeaks" + + test("test-homer-annotatepeaks") { + + when { + process { + """ + input[0] = [ + [ id:'test'], + 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/genome.fasta', checkIfExists: true) + input[2] = file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.gtf', checkIfExists: true) + + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(sanitizeOutput(process.out, unstableKeys:["txt"])).match()} + ) + } + } + + test("test-homer-annotatepeaks-stub") { + options '-stub' + + when { + process { + """ + input[0] = [ + [ id:'test'], + 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/genome.fasta', checkIfExists: true) + input[2] = file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.gtf', checkIfExists: true) + + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(sanitizeOutput(process.out)).match()} + ) + } + } + +} diff --git a/modules/nf-core/homer/annotatepeaks/tests/main.nf.test.snap b/modules/nf-core/homer/annotatepeaks/tests/main.nf.test.snap new file mode 100644 index 00000000..82f2eb72 --- /dev/null +++ b/modules/nf-core/homer/annotatepeaks/tests/main.nf.test.snap @@ -0,0 +1,65 @@ +{ + "test-homer-annotatepeaks": { + "content": [ + { + "stats": [ + [ + { + "id": "test" + }, + "test.annStats.txt:md5,eba336bce28fb5ec5d4ea3215b502dc5" + ] + ], + "txt": [ + [ + { + "id": "test" + }, + "test.annotatePeaks.txt" + ] + ], + "versions_homer": [ + [ + "HOMER_ANNOTATEPEAKS", + "homer", + "4.11" + ] + ] + } + ], + "timestamp": "2026-05-22T08:26:40.525503224", + "meta": { + "nf-test": "0.9.5", + "nextflow": "26.04.0" + } + }, + "test-homer-annotatepeaks-stub": { + "content": [ + { + "stats": [ + + ], + "txt": [ + [ + { + "id": "test" + }, + "test.annotatePeaks.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions_homer": [ + [ + "HOMER_ANNOTATEPEAKS", + "homer", + "4.11" + ] + ] + } + ], + "timestamp": "2026-05-22T08:26:51.670938012", + "meta": { + "nf-test": "0.9.5", + "nextflow": "26.04.0" + } + } +} \ No newline at end of file diff --git a/modules/nf-core/homer/annotatepeaks/tests/nextflow.config b/modules/nf-core/homer/annotatepeaks/tests/nextflow.config new file mode 100644 index 00000000..309aac55 --- /dev/null +++ b/modules/nf-core/homer/annotatepeaks/tests/nextflow.config @@ -0,0 +1,3 @@ +process { + ext.args = {"-annStats ${meta.id}.annStats.txt"} +} diff --git a/modules/nf-core/khmer/uniquekmers/environment.yml b/modules/nf-core/khmer/uniquekmers/environment.yml new file mode 100644 index 00000000..0b1809c4 --- /dev/null +++ b/modules/nf-core/khmer/uniquekmers/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::khmer=3.0.0a3 diff --git a/modules/nf-core/khmer/uniquekmers/main.nf b/modules/nf-core/khmer/uniquekmers/main.nf index 9576034f..fda91d40 100644 --- a/modules/nf-core/khmer/uniquekmers/main.nf +++ b/modules/nf-core/khmer/uniquekmers/main.nf @@ -2,37 +2,40 @@ process KHMER_UNIQUEKMERS { tag "$fasta" label 'process_low' - conda "bioconda::khmer=3.0.0a3" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine in ['singularity', 'apptainer'] && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/khmer:3.0.0a3--py37haa7609a_2' : - 'biocontainers/khmer:3.0.0a3--py37haa7609a_2' }" + 'quay.io/biocontainers/khmer:3.0.0a3--py37haa7609a_2' }" input: - path fasta - val kmer_size + tuple val(meta), path(fasta) + val kmer_size output: - path "report.txt" , emit: report - path "kmers.txt" , emit: kmers - path "versions.yml", emit: versions + tuple val(meta), path("*.report.txt") , emit: report + tuple val(meta), path("*.kmers.txt") , emit: kmers + tuple val("${task.process}"), val('khmer'), eval('unique-kmers.py --version 2>&1 | grep ^khmer | sed "s/^khmer //;s/ .*$//"'), emit: versions_khmer, topic: versions when: task.ext.when == null || task.ext.when script: - def args = task.ext.args ?: '' + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" """ unique-kmers.py \\ -k $kmer_size \\ - -R report.txt \\ + -R ${prefix}.report.txt \\ $args \\ $fasta - grep ^number report.txt | sed 's/^.*:.[[:blank:]]//g' > kmers.txt + grep ^number ${prefix}.report.txt | sed 's/^.*:.[[:blank:]]//g' > ${prefix}.kmers.txt + """ - cat <<-END_VERSIONS > versions.yml - "${task.process}": - khmer: \$( unique-kmers.py --version 2>&1 | grep ^khmer | sed 's/^khmer //;s/ .*\$//' ) - END_VERSIONS + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.report.txt + touch ${prefix}.kmers.txt """ } diff --git a/modules/nf-core/khmer/uniquekmers/meta.yml b/modules/nf-core/khmer/uniquekmers/meta.yml index f9f63972..21b4a537 100644 --- a/modules/nf-core/khmer/uniquekmers/meta.yml +++ b/modules/nf-core/khmer/uniquekmers/meta.yml @@ -1,10 +1,10 @@ name: "khmer_uniquekmers" -description: In-memory nucleotide sequence k-mer counting, filtering, graph traversal and more +description: In-memory nucleotide sequence k-mer counting, filtering, graph traversal + and more keywords: - khmer - k-mer - effective genome size - tools: - "khmer": description: khmer k-mer counting library @@ -13,30 +13,67 @@ tools: tool_dev_url: https://github.com/dib-lab/khmer doi: "10.12688/f1000research.6924.1" licence: ["BSD License"] - + identifier: biotools:khmer input: - - fasta: - type: file - description: fasta file - pattern: "*.{fa,fasta}" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1' ]` + - fasta: + type: file + description: fasta file + pattern: "*.{fa,fasta}" + ontologies: + - edam: "http://edamontology.org/format_1929" # FASTA - kmer_size: - type: value + type: integer description: k-mer size to use - pattern: "[0-9]+" - output: - - report: - type: file - description: Text file containing unique-kmers.py execution report - pattern: "report.txt" - - kmers: - type: file - description: Text file containing number of kmers - pattern: "kmers.txt" - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - + report: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1' ]` + - "*.report.txt": + type: file + description: Text file containing unique-kmers.py execution report + pattern: "*.report.txt" + ontologies: [] + kmers: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1' ]` + - "*.kmers.txt": + type: file + description: Text file containing number of kmers + pattern: "*.kmers.txt" + ontologies: [] + versions_khmer: + - - ${task.process}: + type: string + description: The process the versions were collected from + - khmer: + type: string + description: The name of the tool + - unique-kmers.py --version 2>&1 | grep ^khmer | sed "s/^khmer //;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 + - khmer: + type: string + description: The name of the tool + - unique-kmers.py --version 2>&1 | grep ^khmer | sed "s/^khmer //;s/ .*$//": + type: eval + description: The expression to obtain the version of the tool authors: - "@JoseEspinosa" +maintainers: + - "@JoseEspinosa" diff --git a/modules/nf-core/khmer/uniquekmers/tests/main.nf.test b/modules/nf-core/khmer/uniquekmers/tests/main.nf.test new file mode 100644 index 00000000..7c577bdf --- /dev/null +++ b/modules/nf-core/khmer/uniquekmers/tests/main.nf.test @@ -0,0 +1,54 @@ +nextflow_process { + + name "Test Process KHMER_UNIQUEKMERS" + + script "../main.nf" + process "KHMER_UNIQUEKMERS" + + tag "modules" + tag "modules_nfcore" + tag "khmer" + tag "khmer/uniquekmers" + + test("sarscov2 - fasta") { + + when { + process { + """ + input[0] = [ + [ id: 'test'], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta',checkIfExists:true) + ] + input[1] = 50 + """ + } + } + then { + assertAll( + { assert process.success }, + { assert snapshot(sanitizeOutput(process.out)).match() } + ) + } + } + + test("sarscov2 - fasta -- stub") { + options '-stub' + when { + process { + """ + input[0] = [ + [ id: 'test'], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta',checkIfExists:true) + ] + input[1] = 50 + """ + } + } + then { + assertAll( + { assert process.success }, + { assert snapshot(sanitizeOutput(process.out)).match() } + ) + } + } +} diff --git a/modules/nf-core/khmer/uniquekmers/tests/main.nf.test.snap b/modules/nf-core/khmer/uniquekmers/tests/main.nf.test.snap new file mode 100644 index 00000000..957c0a6c --- /dev/null +++ b/modules/nf-core/khmer/uniquekmers/tests/main.nf.test.snap @@ -0,0 +1,70 @@ +{ + "sarscov2 - fasta -- stub": { + "content": [ + { + "kmers": [ + [ + { + "id": "test" + }, + "test.kmers.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "report": [ + [ + { + "id": "test" + }, + "test.report.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions_khmer": [ + [ + "KHMER_UNIQUEKMERS", + "khmer", + "3.0.0a3" + ] + ] + } + ], + "timestamp": "2026-06-04T11:57:31.740881709", + "meta": { + "nf-test": "0.9.5", + "nextflow": "26.04.0" + } + }, + "sarscov2 - fasta": { + "content": [ + { + "kmers": [ + [ + { + "id": "test" + }, + "test.kmers.txt:md5,496ebf23653a01c7a42d743e47c19f65" + ] + ], + "report": [ + [ + { + "id": "test" + }, + "test.report.txt:md5,ee489abd3b244dea3640649e1790d55e" + ] + ], + "versions_khmer": [ + [ + "KHMER_UNIQUEKMERS", + "khmer", + "3.0.0a3" + ] + ] + } + ], + "timestamp": "2026-06-04T11:57:25.950222943", + "meta": { + "nf-test": "0.9.5", + "nextflow": "26.04.0" + } + } +} \ No newline at end of file diff --git a/modules/nf-core/macs3/callpeak/environment.yml b/modules/nf-core/macs3/callpeak/environment.yml index 4aa6a32d..43002db0 100644 --- a/modules/nf-core/macs3/callpeak/environment.yml +++ b/modules/nf-core/macs3/callpeak/environment.yml @@ -4,4 +4,4 @@ channels: - conda-forge - bioconda dependencies: - - "bioconda::macs3=3.0.1" + - bioconda::macs3=3.0.4 diff --git a/modules/nf-core/macs3/callpeak/main.nf b/modules/nf-core/macs3/callpeak/main.nf index 53a1a200..7f70167c 100644 --- a/modules/nf-core/macs3/callpeak/main.nf +++ b/modules/nf-core/macs3/callpeak/main.nf @@ -4,9 +4,9 @@ process MACS3_CALLPEAK { label 'process_medium' conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/macs3:3.0.1--py311h0152c62_3': - 'biocontainers/macs3:3.0.1--py311h0152c62_3' }" + container "${ workflow.containerEngine in ['singularity', 'apptainer'] && !task.ext.singularity_pull_docker_container ? + 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/2f/2fb492856efb63a7f824f0801b1386d08468cd4b7819ddc4c21e7f10e09b4fda/data': + 'community.wave.seqera.io/library/macs3:3.0.4--e0346d811b8b428e' }" input: tuple val(meta), path(ipbam), path(controlbam) @@ -15,7 +15,7 @@ process MACS3_CALLPEAK { output: tuple val(meta), path("*.{narrowPeak,broadPeak}"), emit: peak tuple val(meta), path("*.xls") , emit: xls - path "versions.yml" , emit: versions + tuple val("${task.process}"), val('macs3'), eval("macs3 --version | sed -e 's/macs3 //'"), topic: versions, emit: versions_macs3 tuple val(meta), path("*.gappedPeak"), optional:true, emit: gapped tuple val(meta), path("*.bed") , optional:true, emit: bed @@ -31,7 +31,7 @@ process MACS3_CALLPEAK { def format = meta.single_end ? 'BAM' : 'BAMPE' def control = controlbam ? "--control $controlbam" : '' if(args_list.contains('--format')){ - def id = args_list.findIndexOf{it=='--format'} + def id = args_list.findIndexOf{args_i -> args_i=='--format'} format = args_list[id+1] args_list.remove(id+1) args_list.remove(id) @@ -45,15 +45,9 @@ process MACS3_CALLPEAK { --name $prefix \\ --treatment $ipbam \\ $control - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - macs3: \$(macs3 --version | sed -e "s/macs3 //g") - END_VERSIONS """ stub: - def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" """ touch ${prefix}.gappedPeak @@ -61,10 +55,5 @@ process MACS3_CALLPEAK { touch ${prefix}.bdg touch ${prefix}.narrowPeak touch ${prefix}.xls - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - macs3: \$(macs3 --version | sed -e "s/macs3 //g") - END_VERSIONS """ } diff --git a/modules/nf-core/macs3/callpeak/meta.yml b/modules/nf-core/macs3/callpeak/meta.yml index 1603b8e2..f7eae553 100644 --- a/modules/nf-core/macs3/callpeak/meta.yml +++ b/modules/nf-core/macs3/callpeak/meta.yml @@ -1,7 +1,6 @@ ---- -# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/meta-schema.json name: "macs3_callpeak" -description: Peak calling of enriched genomic regions of ChIP-seq and ATAC-seq experiments +description: Peak calling of enriched genomic regions of ChIP-seq and ATAC-seq + experiments keywords: - alignment - atac-seq @@ -14,20 +13,23 @@ tools: documentation: "https://macs3-project.github.io/MACS/" tool_dev_url: "https://github.com/macs3-project/MACS/" doi: "10.1101/496521" - licence: ["BSD-3-clause"] - + licence: + - "BSD-3-clause" + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. `[ id:'sample_1', single_end:false ]` - - ipbam: - type: file - description: The ChIP-seq treatment file - - controlbam: - type: file - description: The control file + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample_1', single_end:false ]` + - ipbam: + type: file + description: The ChIP-seq treatment file + ontologies: [] + - controlbam: + type: file + description: The control file + ontologies: [] - macs3_gsize: type: string description: | @@ -35,39 +37,87 @@ input: or shortcuts:'hs' for human (2,913,022,398), 'mm' for mouse (2,652,783,500), 'ce' for C. elegans (100,286,401) and 'dm' for fruitfly (142,573,017), Default:hs. - output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. `[ id:'sample1', single_end:false ]` - - versions: - type: file - description: File containing software version - pattern: "versions.yml" - - peak: - type: file - description: BED file containing annotated peaks - pattern: "*.gappedPeak,*.narrowPeak}" - - xls: - type: file - description: xls file containing annotated peaks - pattern: "*.xls" - - gapped: - type: file - description: Optional BED file containing gapped peak - pattern: "*.gappedPeak" - - bed: - type: file - description: Optional BED file containing peak summits locations for every peak - pattern: "*.bed" - - bdg: - type: file - description: Optional bedGraph files for input and treatment input samples - pattern: "*.bdg" - + peak: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1', single_end:false ]` + - "*.{narrowPeak,broadPeak}": + type: file + description: BED file containing annotated peaks + pattern: "*.gappedPeak,*.narrowPeak}" + ontologies: [] + xls: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1', single_end:false ]` + - "*.xls": + type: file + description: xls file containing annotated peaks + pattern: "*.xls" + ontologies: [] + gapped: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1', single_end:false ]` + - "*.gappedPeak": + type: file + description: Optional BED file containing gapped peak + pattern: "*.gappedPeak" + ontologies: [] + bed: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1', single_end:false ]` + - "*.bed": + type: file + description: Optional BED file containing peak summits locations for + every peak + pattern: "*.bed" + ontologies: [] + bdg: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1', single_end:false ]` + - "*.bdg": + type: file + description: Optional bedGraph files for input and treatment input + samples + pattern: "*.bdg" + ontologies: [] + versions_macs3: + - - ${task.process}: + type: string + description: The name of the process + - macs3: + type: string + description: The name of the tool + - macs3 --version | sed -e 's/macs3 //': + type: eval + description: The expression to obtain the version of the tool +topics: + versions: + - - ${task.process}: + type: string + description: The name of the process + - macs3: + type: string + description: The name of the tool + - macs3 --version | sed -e 's/macs3 //': + type: eval + description: The expression to obtain the version of the tool authors: - "@JoseEspinosa" maintainers: - "@JoseEspinosa" + - "@Kevin-Brockers" diff --git a/modules/nf-core/macs3/callpeak/tests/bam.config b/modules/nf-core/macs3/callpeak/tests/bam.config index 217e3107..4044f99d 100644 --- a/modules/nf-core/macs3/callpeak/tests/bam.config +++ b/modules/nf-core/macs3/callpeak/tests/bam.config @@ -2,4 +2,4 @@ process { withName: 'MACS3_CALLPEAK' { ext.args = '--qval 0.1' } -} \ No newline at end of file +} diff --git a/modules/nf-core/macs3/callpeak/tests/bed.config b/modules/nf-core/macs3/callpeak/tests/bed.config index 19444006..fd37823a 100644 --- a/modules/nf-core/macs3/callpeak/tests/bed.config +++ b/modules/nf-core/macs3/callpeak/tests/bed.config @@ -2,4 +2,4 @@ process { withName: 'MACS3_CALLPEAK' { ext.args = '--format BED --qval 10 --nomodel --extsize 200' } -} \ No newline at end of file +} diff --git a/modules/nf-core/macs3/callpeak/tests/main.nf.test.snap b/modules/nf-core/macs3/callpeak/tests/main.nf.test.snap index d6d98292..af74ebeb 100644 --- a/modules/nf-core/macs3/callpeak/tests/main.nf.test.snap +++ b/modules/nf-core/macs3/callpeak/tests/main.nf.test.snap @@ -17,11 +17,15 @@ "id": "test", "single_end": false }, - "test_peaks.xls:md5,221852e4639574d2f53cf1917efa4922" + "test_peaks.xls:md5,7bb3dd1f0ba377fc81eabb7b01a45b14" ] ], "2": [ - "versions.yml:md5,cb33970f9aaa0730733abe2fd9cb2b74" + [ + "MACS3_CALLPEAK", + "macs3", + "3.0.4" + ] ], "3": [ @@ -62,8 +66,12 @@ "test_peaks.narrowPeak:md5,2e4da1c1704595e12aaf99cc715ad70c" ] ], - "versions": [ - "versions.yml:md5,cb33970f9aaa0730733abe2fd9cb2b74" + "versions_macs3": [ + [ + "MACS3_CALLPEAK", + "macs3", + "3.0.4" + ] ], "xls": [ [ @@ -71,16 +79,16 @@ "id": "test", "single_end": false }, - "test_peaks.xls:md5,221852e4639574d2f53cf1917efa4922" + "test_peaks.xls:md5,7bb3dd1f0ba377fc81eabb7b01a45b14" ] ] } ], + "timestamp": "2026-03-16T21:39:32.130928", "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" - }, - "timestamp": "2024-07-22T17:04:31.629715" + "nf-test": "0.9.4", + "nextflow": "25.10.4" + } }, "sarscov2 - bam - stub": { "content": [ @@ -104,7 +112,11 @@ ] ], "2": [ - "versions.yml:md5,cb33970f9aaa0730733abe2fd9cb2b74" + [ + "MACS3_CALLPEAK", + "macs3", + "3.0.4" + ] ], "3": [ [ @@ -169,8 +181,12 @@ "test.narrowPeak:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "versions": [ - "versions.yml:md5,cb33970f9aaa0730733abe2fd9cb2b74" + "versions_macs3": [ + [ + "MACS3_CALLPEAK", + "macs3", + "3.0.4" + ] ], "xls": [ [ @@ -183,11 +199,11 @@ ] } ], + "timestamp": "2026-03-16T21:39:43.27179", "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" - }, - "timestamp": "2024-07-22T17:04:58.589844" + "nf-test": "0.9.4", + "nextflow": "25.10.4" + } }, "homo_sapiens - callpeak - control - bam": { "content": [ @@ -207,11 +223,15 @@ "id": "test", "single_end": false }, - "test_peaks.xls:md5,9fce04613bdc9c8372a9f884aa0d5aa6" + "test_peaks.xls:md5,9e661b949cf7ddfedfcc6c9f0a84e14f" ] ], "2": [ - "versions.yml:md5,cb33970f9aaa0730733abe2fd9cb2b74" + [ + "MACS3_CALLPEAK", + "macs3", + "3.0.4" + ] ], "3": [ @@ -252,8 +272,12 @@ "test_peaks.narrowPeak:md5,653e1108cc57ca07d0f60fc0f4fb8ba3" ] ], - "versions": [ - "versions.yml:md5,cb33970f9aaa0730733abe2fd9cb2b74" + "versions_macs3": [ + [ + "MACS3_CALLPEAK", + "macs3", + "3.0.4" + ] ], "xls": [ [ @@ -261,16 +285,16 @@ "id": "test", "single_end": false }, - "test_peaks.xls:md5,9fce04613bdc9c8372a9f884aa0d5aa6" + "test_peaks.xls:md5,9e661b949cf7ddfedfcc6c9f0a84e14f" ] ] } ], + "timestamp": "2026-03-16T21:39:38.355442", "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" - }, - "timestamp": "2024-07-22T17:04:44.063426" + "nf-test": "0.9.4", + "nextflow": "25.10.4" + } }, "homo_sapiens - callpeak - bed": { "content": [ @@ -290,11 +314,15 @@ "id": "test", "single_end": false }, - "test_peaks.xls:md5,14efbf7137623df5aaf282b506ac9601" + "test_peaks.xls:md5,b5ea33e20a0e9b5f188eba614cd0d9a6" ] ], "2": [ - "versions.yml:md5,cb33970f9aaa0730733abe2fd9cb2b74" + [ + "MACS3_CALLPEAK", + "macs3", + "3.0.4" + ] ], "3": [ @@ -335,8 +363,12 @@ "test_peaks.narrowPeak:md5,10e7d4747f8a2513e5ebb04856a51673" ] ], - "versions": [ - "versions.yml:md5,cb33970f9aaa0730733abe2fd9cb2b74" + "versions_macs3": [ + [ + "MACS3_CALLPEAK", + "macs3", + "3.0.4" + ] ], "xls": [ [ @@ -344,15 +376,15 @@ "id": "test", "single_end": false }, - "test_peaks.xls:md5,14efbf7137623df5aaf282b506ac9601" + "test_peaks.xls:md5,b5ea33e20a0e9b5f188eba614cd0d9a6" ] ] } ], + "timestamp": "2026-03-16T21:39:26.580158", "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" - }, - "timestamp": "2024-07-22T17:04:16.697163" + "nf-test": "0.9.4", + "nextflow": "25.10.4" + } } } \ No newline at end of file diff --git a/modules/nf-core/multiqc/.conda-lock/linux_amd64-bd-c1f4a7982b743963_1.txt b/modules/nf-core/multiqc/.conda-lock/linux_amd64-bd-c17fb751507e9dfc_1.txt similarity index 75% rename from modules/nf-core/multiqc/.conda-lock/linux_amd64-bd-c1f4a7982b743963_1.txt rename to modules/nf-core/multiqc/.conda-lock/linux_amd64-bd-c17fb751507e9dfc_1.txt index 76190304..2a91c22d 100644 --- a/modules/nf-core/multiqc/.conda-lock/linux_amd64-bd-c1f4a7982b743963_1.txt +++ b/modules/nf-core/multiqc/.conda-lock/linux_amd64-bd-c17fb751507e9dfc_1.txt @@ -14,120 +14,118 @@ linux-64: - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-26.1.0-pyhcf101f3_0.conda -- conda: https://conda.anaconda.org/conda-forge/noarch/backports.zstd-1.3.0-py314h680f03e_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/backports.zstd-1.5.0-py314h680f03e_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.2.0-py314h3de4e8d_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_9.conda -- conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda -- conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.2.25-pyhd8ed1ab_0.conda -- conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.6-pyhd8ed1ab_0.conda -- conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.1-pyh8f84b5b_1.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.5.20-hbd8a1cb_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.5.20-pyhd8ed1ab_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.7-pyhd8ed1ab_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/click-8.4.0-pyhc90fa1f_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/coloredlogs-15.0.1-pyhd8ed1ab_4.conda - conda: https://conda.anaconda.org/conda-forge/noarch/colormath-3.0.0-pyhd8ed1ab_4.conda -- conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.14.3-py314hd8ed1ab_101.conda -- conda: https://conda.anaconda.org/conda-forge/linux-64/expat-2.7.4-hecca717_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.14.5-py314hd8ed1ab_100.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/expat-2.8.1-hecca717_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_3.conda -- conda: https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.17.1-h27c8c51_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.18.0-h27c8c51_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-hc364b38_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/humanfriendly-10.0-pyh707e725_8.conda - conda: https://conda.anaconda.org/conda-forge/noarch/humanize-4.15.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda -- conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.3-h33c6efd_0.conda -- conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.11-pyhd8ed1ab_0.conda -- conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.8.0-pyhcf101f3_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.15-pyhcf101f3_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-9.0.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.26.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2025.9.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/kaleido-core-0.2.1-h3644ca4_0.tar.bz2 -- conda: https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.18-h0c24ade_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.19.1-h0c24ade_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_102.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/lerc-4.1.0-hdb68285_0.conda -- conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.11.0-5_h4a7cf45_openblas.conda -- conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.11.0-5_h0358290_openblas.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.11.0-7_h4a7cf45_openblas.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.11.0-7_h0358290_openblas.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.25-h17f619e_0.conda -- conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.4-hecca717_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.8.1-hecca717_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype-2.14.3-ha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype6-2.14.3-h73754d4_0.conda -- conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_18.conda -- conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_18.conda -- conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-15.2.0-h69a702a_18.conda -- conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-15.2.0-h68bc16d_18.conda -- conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_18.conda -- conda: https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.1.2-hb03c661_0.conda -- conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.11.0-5_h47877c9_openblas.conda -- conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.2-hb03c661_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_19.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_19.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-15.2.0-h69a702a_19.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-15.2.0-h68bc16d_19.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_19.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.1.4.1-hb03c661_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.11.0-7_h47877c9_openblas.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.3-hb03c661_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-hb03c661_1.conda -- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.30-pthreads_h94d23a6_4.conda -- conda: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.55-h421ea60_0.conda -- conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.52.0-hf4e2dac_0.conda -- conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_18.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.33-pthreads_h94d23a6_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.58-h421ea60_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.53.1-h0c1763c_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_19.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.7.1-h9d88235_1.conda -- conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.41.3-h5347b49_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.42.1-h5347b49_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.6.0-hd42ef1d_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.17.0-h8a09558_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.2-h25fd6f3_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-3.10.2-pyhcf101f3_0.conda -- conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-4.0.0-pyhd8ed1ab_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-4.2.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.3-py314h67df5f8_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/mathjax-2.7.7-ha770c72_3.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda -- conda: https://conda.anaconda.org/bioconda/noarch/multiqc-1.33-pyhdfd78af_0.conda -- conda: https://conda.anaconda.org/conda-forge/noarch/narwhals-2.18.1-pyhcf101f3_1.conda +- conda: https://conda.anaconda.org/bioconda/noarch/multiqc-1.35-pyhdfd78af_1.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/narwhals-2.21.2-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/natsort-8.4.0-pyhcf101f3_2.conda -- conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.6-hdb14827_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/networkx-3.6.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/nspr-4.38-h29cc59b_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/nss-3.118-h445c969_0.conda -- conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.4.3-py314h2b28147_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.4.6-py314h2b28147_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.4-h55fea9a_0.conda -- conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.1-h35e630c_1.conda -- conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda -- conda: https://conda.anaconda.org/conda-forge/linux-64/pillow-12.1.1-py314h8ec4b1a_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.2-h35e630c_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.2-pyhc364b38_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/pillow-12.2.0-py314h8ec4b1a_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/plotly-6.6.0-pyhd8ed1ab_0.conda -- conda: https://conda.anaconda.org/conda-forge/noarch/polars-1.39.3-pyh58ad624_1.conda -- conda: https://conda.anaconda.org/conda-forge/noarch/polars-lts-cpu-1.34.0.deprecated-hc364b38_0.conda -- conda: https://conda.anaconda.org/conda-forge/linux-64/polars-runtime-32-1.39.3-py310hffdcd12_1.conda -- conda: https://conda.anaconda.org/conda-forge/linux-64/polars-runtime-compat-1.39.3-py310hbcd5346_1.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/polars-1.41.0-pyh58ad624_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/polars-runtime-32-1.41.0-py310h49dadd8_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/polars-runtime-compat-1.41.0-py310hcbd6021_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/procps-ng-4.0.6-h18c060e_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-hb9d3cd8_1002.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pyaml-env-1.2.2-pyhd8ed1ab_0.conda -- conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-2.12.5-pyhcf101f3_1.conda -- conda: https://conda.anaconda.org/conda-forge/linux-64/pydantic-core-2.41.5-py314h2e6c369_1.conda -- conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-2.13.4-pyhcf101f3_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/pydantic-core-2.46.4-py314h2e6c369_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.20.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda -- conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.14.3-h32b2ec7_101_cp314.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.14.5-habeac84_100_cp314.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-dotenv-1.2.2-pyhcf101f3_0.conda -- conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.14.3-h4df99d1_101.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.14.5-h4df99d1_100.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-kaleido-0.2.1-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.3-py314h67df5f8_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/referencing-0.37.0-pyhcf101f3_0.conda -- conda: https://conda.anaconda.org/conda-forge/linux-64/regex-2026.2.28-py314h5bd0f2a_0.conda -- conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.5-pyhcf101f3_1.conda -- conda: https://conda.anaconda.org/conda-forge/noarch/rich-14.3.3-pyhcf101f3_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/regex-2026.5.9-py314h5bd0f2a_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.34.2-pyhcf101f3_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/rich-15.0.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rich-click-1.9.7-pyh8f84b5b_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/rpds-py-0.30.0-py314h2e6c369_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/spectra-0.0.11-pyhd8ed1ab_2.conda -- conda: https://conda.anaconda.org/conda-forge/linux-64/sqlite-3.52.0-h04a0ce9_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/sqlite-3.53.1-hbc0de68_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/tiktoken-0.12.0-py314h67fec18_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tqdm-4.67.3-pyh8f84b5b_0.conda -- conda: https://conda.anaconda.org/conda-forge/noarch/typeguard-4.5.1-pyhd8ed1ab_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/typeguard-4.5.2-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda -- conda: https://conda.anaconda.org/conda-forge/noarch/typing-inspection-0.4.2-pyhd8ed1ab_1.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/typing-inspection-0.4.2-pyhcf101f3_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda -- conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.6.3-pyhd8ed1ab_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.7.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.12-hb03c661_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdmcp-1.1.5-hb03c661_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h280c20c_3.conda -- conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/zipp-4.1.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-ng-2.3.3-hceb46e0_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda packages: @@ -174,15 +172,15 @@ license: MIT license_family: MIT size: 64927 timestamp: 1773935801332 -- conda: https://conda.anaconda.org/conda-forge/noarch/backports.zstd-1.3.0-py314h680f03e_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/backports.zstd-1.5.0-py314h680f03e_0.conda noarch: generic -sha256: c31ab719d256bc6f89926131e88ecd0f0c5d003fe8481852c6424f4ec6c7eb29 -md5: a2ac7763a9ac75055b68f325d3255265 +sha256: a1c97297e867776760489537bc5ae36fa83a154be30e3b79385a39ca4cb058fe +md5: 1133126d840e75287d83947be3fc3e71 depends: - python >=3.14 license: BSD-3-Clause AND MIT AND EPL-2.0 -size: 7514 -timestamp: 1767044983590 +size: 7533 +timestamp: 1778594057496 - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.2.0-py314h3de4e8d_1.conda sha256: 3ad3500bff54a781c29f16ce1b288b36606e2189d0b0ef2f67036554f47f12b0 md5: 8910d2c46f7e7b519129f486e0fe927a @@ -208,42 +206,42 @@ license: bzip2-1.0.6 license_family: BSD size: 260182 timestamp: 1771350215188 -- conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda -sha256: 67cc7101b36421c5913a1687ef1b99f85b5d6868da3abbf6ec1a4181e79782fc -md5: 4492fd26db29495f0ba23f146cd5638d +- conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.5.20-hbd8a1cb_0.conda +sha256: 9812a303a1395e1dafbd92e5bc8a1ff6013bcbba0a09c7f03a8d23e43560aa9b +md5: 489b8e97e666c93f68fdb35c3c9b957f depends: - __unix license: ISC -size: 147413 -timestamp: 1772006283803 -- conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.2.25-pyhd8ed1ab_0.conda -sha256: a6b118fd1ed6099dc4fc03f9c492b88882a780fadaef4ed4f93dc70757713656 -md5: 765c4d97e877cdbbb88ff33152b86125 +size: 129868 +timestamp: 1779289852439 +- conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.5.20-pyhd8ed1ab_0.conda +sha256: 645655a3510e38e625da136595f3f16f2130c3263630cc3bc8f60f619ddbe490 +md5: 9fefff2f745ea1cc2ef15211a20c054a depends: - python >=3.10 license: ISC -size: 151445 -timestamp: 1772001170301 -- conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.6-pyhd8ed1ab_0.conda -sha256: d86dfd428b2e3c364fa90e07437c8405d635aa4ef54b25ab51d9c712be4112a5 -md5: 49ee13eb9b8f44d63879c69b8a40a74b +size: 134201 +timestamp: 1779285131141 +- conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.7-pyhd8ed1ab_0.conda +sha256: 3f9483d62ce24ecd063f8a5a714448445dc8d9e201147c46699fc0033e824457 +md5: a9167b9571f3baa9d448faa2139d1089 depends: - python >=3.10 license: MIT license_family: MIT -size: 58510 -timestamp: 1773660086450 -- conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.1-pyh8f84b5b_1.conda -sha256: 38cfe1ee75b21a8361c8824f5544c3866f303af1762693a178266d7f198e8715 -md5: ea8a6c3256897cc31263de9f455e25d9 +size: 58872 +timestamp: 1775127203018 +- conda: https://conda.anaconda.org/conda-forge/noarch/click-8.4.0-pyhc90fa1f_0.conda +sha256: 99ab8ef815c4520cce3a7482c2513f377c14348206857661d84c76a55e030f97 +md5: 003767c47f1f0a474c4de268b57839c3 depends: -- python >=3.10 - __unix - python +- python >=3.10 license: BSD-3-Clause license_family: BSD -size: 97676 -timestamp: 1764518652276 +size: 104631 +timestamp: 1779108494556 - conda: https://conda.anaconda.org/conda-forge/noarch/coloredlogs-15.0.1-pyhd8ed1ab_4.conda sha256: 8021c76eeadbdd5784b881b165242db9449783e12ce26d6234060026fd6a8680 md5: b866ff7007b934d564961066c8195983 @@ -265,27 +263,27 @@ license: BSD-3-Clause license_family: BSD size: 39326 timestamp: 1735759976140 -- conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.14.3-py314hd8ed1ab_101.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.14.5-py314hd8ed1ab_100.conda noarch: generic -sha256: 91b06300879df746214f7363d6c27c2489c80732e46a369eb2afc234bcafb44c -md5: 3bb89e4f795e5414addaa531d6b1500a +sha256: 777882d2685f368417f31bbe1b28f73687fc6c8f6a5768bda20ffeefa6b07f5b +md5: a749029ce5d0632a913db19d17f944ab depends: - python >=3.14,<3.15.0a0 - python_abi * *_cp314 license: Python-2.0 -size: 50078 -timestamp: 1770674447292 -- conda: https://conda.anaconda.org/conda-forge/linux-64/expat-2.7.4-hecca717_0.conda -sha256: 0cc345e4dead417996ce9a1f088b28d858f03d113d43c1963d29194366dcce27 -md5: a0535741a4934b3e386051065c58761a +size: 50212 +timestamp: 1779236682725 +- conda: https://conda.anaconda.org/conda-forge/linux-64/expat-2.8.1-hecca717_0.conda +sha256: 29a10599d56d93bd750914888ebe6822d47722070762b4647b34d12df9f4476e +md5: d0757fd84af06f065eba49d39af6c546 depends: - __glibc >=2.17,<3.0.a0 -- libexpat 2.7.4 hecca717_0 +- libexpat 2.8.1 hecca717_0 - libgcc >=14 license: MIT license_family: MIT -size: 145274 -timestamp: 1771259434699 +size: 148238 +timestamp: 1779278694477 - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 sha256: 58d7f40d2940dd0a8aa28651239adbf5613254df0f75789919c4e6762054403b md5: 0c96522c6bdaed4b1566d11387caaf45 @@ -314,21 +312,21 @@ license: LicenseRef-Ubuntu-Font-Licence-Version-1.0 license_family: Other size: 1620504 timestamp: 1727511233259 -- conda: https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.17.1-h27c8c51_0.conda -sha256: aa4a44dba97151221100a637c7f4bde619567afade9c0265f8e1c8eed8d7bd8c -md5: 867127763fbe935bab59815b6e0b7b5c +- conda: https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.18.0-h27c8c51_0.conda +sha256: e798086d8a65d55dc4c51f5746705639c9a5f2eeb0b8fc50e6152cfc0d69a4e8 +md5: 06965b2f9854d0b15e0443ee81fe83dc depends: - __glibc >=2.17,<3.0.a0 -- libexpat >=2.7.4,<3.0a0 -- libfreetype >=2.14.1 -- libfreetype6 >=2.14.1 +- libexpat >=2.8.1,<3.0a0 +- libfreetype >=2.14.3 +- libfreetype6 >=2.14.3 - libgcc >=14 -- libuuid >=2.41.3,<3.0a0 -- libzlib >=1.3.1,<2.0a0 +- libuuid >=2.42.1,<3.0a0 +- libzlib >=1.3.2,<2.0a0 license: MIT license_family: MIT -size: 270705 -timestamp: 1771382710863 +size: 280882 +timestamp: 1779421631622 - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-hc364b38_1.conda sha256: 54eea8469786bc2291cc40bca5f46438d3e062a399e8f53f013b6a9f50e98333 md5: a7970cd949a077b7cb9696379d338681 @@ -390,37 +388,26 @@ license: MIT license_family: MIT size: 17397 timestamp: 1737618427549 -- conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.3-h33c6efd_0.conda -sha256: fbf86c4a59c2ed05bbffb2ba25c7ed94f6185ec30ecb691615d42342baa1a16a -md5: c80d8a3b84358cb967fa81e7075fbc8a -depends: -- __glibc >=2.17,<3.0.a0 -- libgcc >=14 -- libstdcxx >=14 -license: MIT -license_family: MIT -size: 12723451 -timestamp: 1773822285671 -- conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.11-pyhd8ed1ab_0.conda -sha256: ae89d0299ada2a3162c2614a9d26557a92aa6a77120ce142f8e0109bbf0342b0 -md5: 53abe63df7e10a6ba605dc5f9f961d36 +- conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.15-pyhcf101f3_0.conda +sha256: 3d25f9f6f7ab3e1ce6429fc8c8aae0335cf446692e715068488536d220cc43de +md5: 1b9083b7f00609605d1483dbc6071a81 depends: - python >=3.10 +- python license: BSD-3-Clause license_family: BSD -size: 50721 -timestamp: 1760286526795 -- conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.8.0-pyhcf101f3_0.conda -sha256: 82ab2a0d91ca1e7e63ab6a4939356667ef683905dea631bc2121aa534d347b16 -md5: 080594bf4493e6bae2607e65390c520a +size: 62642 +timestamp: 1779294335905 +- conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-9.0.0-pyhcf101f3_0.conda +sha256: 43e2a5497cad1598ff88a3e69f69bc88b7b8f141fa63c60eab5db296317318b8 +md5: ffc17e785d64e12fc311af9184221839 depends: - python >=3.10 - zipp >=3.20 - python license: Apache-2.0 -license_family: APACHE -size: 34387 -timestamp: 1773931568510 +size: 34766 +timestamp: 1779714582554 - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda sha256: fc9ca7348a4f25fed2079f2153ecdcf5f9cf2a0bc36c4172420ca09e1849df7b md5: 04558c96691bed63104678757beb4f8d @@ -474,18 +461,18 @@ license: MIT license_family: MIT size: 62099926 timestamp: 1615199463039 -- conda: https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.18-h0c24ade_0.conda -sha256: 836ec4b895352110335b9fdcfa83a8dcdbe6c5fb7c06c4929130600caea91c0a -md5: 6f2e2c8f58160147c4d1c6f4c14cbac4 +- conda: https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.19.1-h0c24ade_0.conda +sha256: eb89c6c39f2f6a93db55723dbb2f6bba8c8e63e6312bf1abf13e6e9ff45849c8 +md5: f92f984b558e6e6204014b16d212b271 depends: - __glibc >=2.17,<3.0.a0 - libgcc >=14 -- libjpeg-turbo >=3.1.2,<4.0a0 +- libjpeg-turbo >=3.1.4.1,<4.0a0 - libtiff >=4.7.1,<4.8.0a0 license: MIT license_family: MIT -size: 249959 -timestamp: 1768184673131 +size: 251086 +timestamp: 1778079286384 - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_102.conda sha256: 3d584956604909ff5df353767f3a2a2f60e07d070b328d109f30ac40cd62df6c md5: 18335a698559cdbcd86150a48bf54ba6 @@ -509,37 +496,37 @@ license: Apache-2.0 license_family: Apache size: 261513 timestamp: 1773113328888 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.11.0-5_h4a7cf45_openblas.conda -build_number: 5 -sha256: 18c72545080b86739352482ba14ba2c4815e19e26a7417ca21a95b76ec8da24c -md5: c160954f7418d7b6e87eaf05a8913fa9 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.11.0-7_h4a7cf45_openblas.conda +build_number: 7 +sha256: 081c850f99bc355821fac9c6e3727d40b3f8ce3beb50a5437cf03726b611ff39 +md5: 955b44e8b00b7f7ef4ce0130cef12394 depends: -- libopenblas >=0.3.30,<0.3.31.0a0 -- libopenblas >=0.3.30,<1.0a0 +- libopenblas >=0.3.33,<0.3.34.0a0 +- libopenblas >=0.3.33,<1.0a0 constrains: -- mkl <2026 -- liblapack 3.11.0 5*_openblas -- libcblas 3.11.0 5*_openblas -- blas 2.305 openblas -- liblapacke 3.11.0 5*_openblas +- libcblas 3.11.0 7*_openblas +- blas 2.307 openblas +- liblapack 3.11.0 7*_openblas +- liblapacke 3.11.0 7*_openblas +- mkl <2027 license: BSD-3-Clause license_family: BSD -size: 18213 -timestamp: 1765818813880 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.11.0-5_h0358290_openblas.conda -build_number: 5 -sha256: 0cbdcc67901e02dc17f1d19e1f9170610bd828100dc207de4d5b6b8ad1ae7ad8 -md5: 6636a2b6f1a87572df2970d3ebc87cc0 -depends: -- libblas 3.11.0 5_h4a7cf45_openblas +size: 18716 +timestamp: 1778489854108 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.11.0-7_h0358290_openblas.conda +build_number: 7 +sha256: 956ae0bb1ec8b0c3663d75b151aceb0521b54e513bf97f621a035f9c87037970 +md5: 0675639dc24cb0032f199e7ff68e4633 +depends: +- libblas 3.11.0 7_h4a7cf45_openblas constrains: -- liblapacke 3.11.0 5*_openblas -- blas 2.305 openblas -- liblapack 3.11.0 5*_openblas +- liblapacke 3.11.0 7*_openblas +- blas 2.307 openblas +- liblapack 3.11.0 7*_openblas license: BSD-3-Clause license_family: BSD -size: 18194 -timestamp: 1765818837135 +size: 18675 +timestamp: 1778489861559 - conda: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.25-h17f619e_0.conda sha256: aa8e8c4be9a2e81610ddf574e05b64ee131fab5e0e3693210c9d6d2fba32c680 md5: 6c77a605a7a689d17d4819c0f8ac9a00 @@ -550,18 +537,18 @@ license: MIT license_family: MIT size: 73490 timestamp: 1761979956660 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.4-hecca717_0.conda -sha256: d78f1d3bea8c031d2f032b760f36676d87929b18146351c4464c66b0869df3f5 -md5: e7f7ce06ec24cfcfb9e36d28cf82ba57 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.8.1-hecca717_0.conda +sha256: 363018b25fdb5534c79783d912bd4b685a3547f4fc5996357ad548899b0ee8e7 +md5: 93764a5ca80616e9c10106cdaec92f74 depends: - __glibc >=2.17,<3.0.a0 - libgcc >=14 constrains: -- expat 2.7.4.* +- expat 2.8.1.* license: MIT license_family: MIT -size: 76798 -timestamp: 1771259418166 +size: 77294 +timestamp: 1779278686680 - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda sha256: 31f19b6a88ce40ebc0d5a992c131f57d919f73c0b92cd1617a5bec83f6e961e6 md5: a360c33a5abe61c07959e449fa1453eb @@ -593,42 +580,42 @@ constrains: license: GPL-2.0-only OR FTL size: 384575 timestamp: 1774298162622 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_18.conda -sha256: faf7d2017b4d718951e3a59d081eb09759152f93038479b768e3d612688f83f5 -md5: 0aa00f03f9e39fb9876085dee11a85d4 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_19.conda +sha256: 8e0a3b5e41272e5678499b5dfc4cddb673f9e935de01eb0767ce857001229f46 +md5: 57736f29cc2b0ec0b6c2952d3f101b6a depends: - __glibc >=2.17,<3.0.a0 - _openmp_mutex >=4.5 constrains: -- libgcc-ng ==15.2.0=*_18 -- libgomp 15.2.0 he0feb66_18 +- libgcc-ng ==15.2.0=*_19 +- libgomp 15.2.0 he0feb66_19 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL -size: 1041788 -timestamp: 1771378212382 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_18.conda -sha256: e318a711400f536c81123e753d4c797a821021fb38970cebfb3f454126016893 -md5: d5e96b1ed75ca01906b3d2469b4ce493 +size: 1041084 +timestamp: 1778269013026 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_19.conda +sha256: 9dcf54adfaa5e861123c2da4f2f0451a685464ea7e5a41ad91cf67b31d658d98 +md5: 331ee9b72b9dff570d56b1302c5ab37d depends: -- libgcc 15.2.0 he0feb66_18 +- libgcc 15.2.0 he0feb66_19 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL -size: 27526 -timestamp: 1771378224552 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-15.2.0-h69a702a_18.conda -sha256: d2c9fad338fd85e4487424865da8e74006ab2e2475bd788f624d7a39b2a72aee -md5: 9063115da5bc35fdc3e1002e69b9ef6e +size: 27694 +timestamp: 1778269016987 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-15.2.0-h69a702a_19.conda +sha256: 561a42758ef25b9ce308c4e2cf56daee4f06138385a17e29a492cd928e00be6f +md5: 42bf7eca1a951735fa06c0e3c0d5c8e6 depends: -- libgfortran5 15.2.0 h68bc16d_18 +- libgfortran5 15.2.0 h68bc16d_19 constrains: -- libgfortran-ng ==15.2.0=*_18 +- libgfortran-ng ==15.2.0=*_19 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL -size: 27523 -timestamp: 1771378269450 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-15.2.0-h68bc16d_18.conda -sha256: 539b57cf50ec85509a94ba9949b7e30717839e4d694bc94f30d41c9d34de2d12 -md5: 646855f357199a12f02a87382d429b75 +size: 27655 +timestamp: 1778269042954 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-15.2.0-h68bc16d_19.conda +sha256: 057978bb69fea29ed715a9b98adf71015c31baecc4aeb2bfc20d4fd5d83579d4 +md5: 85072b0ad177c966294f129b7c04a2d5 depends: - __glibc >=2.17,<3.0.a0 - libgcc >=15.2.0 @@ -636,53 +623,53 @@ constrains: - libgfortran 15.2.0 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL -size: 2482475 -timestamp: 1771378241063 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_18.conda -sha256: 21337ab58e5e0649d869ab168d4e609b033509de22521de1bfed0c031bfc5110 -md5: 239c5e9546c38a1e884d69effcf4c882 +size: 2483673 +timestamp: 1778269025089 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_19.conda +sha256: 5abe4ab9d93f6c9757d654f1969ae2267d4505315c1f2f8fe705fd60af084f1b +md5: faac990cb7aedc7f3a2224f2c9b0c26c depends: - __glibc >=2.17,<3.0.a0 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL -size: 603262 -timestamp: 1771378117851 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.1.2-hb03c661_0.conda -sha256: cc9aba923eea0af8e30e0f94f2ad7156e2984d80d1e8e7fe6be5a1f257f0eb32 -md5: 8397539e3a0bbd1695584fb4f927485a +size: 603817 +timestamp: 1778268942614 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.1.4.1-hb03c661_0.conda +sha256: 10056646c28115b174de81a44e23e3a0a3b95b5347d2e6c45cc6d49d35294256 +md5: 6178c6f2fb254558238ef4e6c56fb782 depends: - __glibc >=2.17,<3.0.a0 - libgcc >=14 constrains: - jpeg <0.0.0a license: IJG AND BSD-3-Clause AND Zlib -size: 633710 -timestamp: 1762094827865 -- conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.11.0-5_h47877c9_openblas.conda -build_number: 5 -sha256: c723b6599fcd4c6c75dee728359ef418307280fa3e2ee376e14e85e5bbdda053 -md5: b38076eb5c8e40d0106beda6f95d7609 -depends: -- libblas 3.11.0 5_h4a7cf45_openblas +size: 633831 +timestamp: 1775962768273 +- conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.11.0-7_h47877c9_openblas.conda +build_number: 7 +sha256: 96962084921f197c9ad13fb7f8b324f2351d50ff3d8d962148751ad532f54a01 +md5: 6569b4f273740e25dc0dc7e3232c2a6c +depends: +- libblas 3.11.0 7_h4a7cf45_openblas constrains: -- blas 2.305 openblas -- liblapacke 3.11.0 5*_openblas -- libcblas 3.11.0 5*_openblas +- liblapacke 3.11.0 7*_openblas +- libcblas 3.11.0 7*_openblas +- blas 2.307 openblas license: BSD-3-Clause license_family: BSD -size: 18200 -timestamp: 1765818857876 -- conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.2-hb03c661_0.conda -sha256: 755c55ebab181d678c12e49cced893598f2bab22d582fbbf4d8b83c18be207eb -md5: c7c83eecbb72d88b940c249af56c8b17 +size: 18694 +timestamp: 1778489869038 +- conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.3-hb03c661_0.conda +sha256: ec30e52a3c1bf7d0425380a189d209a52baa03f22fb66dd3eb587acaa765bd6d +md5: b88d90cad08e6bc8ad540cb310a761fb depends: - __glibc >=2.17,<3.0.a0 - libgcc >=14 constrains: -- xz 5.8.2.* +- xz 5.8.3.* license: 0BSD -size: 113207 -timestamp: 1768752626120 +size: 113478 +timestamp: 1775825492909 - conda: https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-hb03c661_1.conda sha256: fe171ed5cf5959993d43ff72de7596e8ac2853e9021dec0344e583734f1e0843 md5: 2c21e66f50753a083cbe6b80f38268fa @@ -693,53 +680,52 @@ license: BSD-2-Clause license_family: BSD size: 92400 timestamp: 1769482286018 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.30-pthreads_h94d23a6_4.conda -sha256: 199d79c237afb0d4780ccd2fbf829cea80743df60df4705202558675e07dd2c5 -md5: be43915efc66345cccb3c310b6ed0374 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.33-pthreads_h94d23a6_0.conda +sha256: 3d9aa85648e5e18a6d66db98b8c4317cc426721ad7a220aa86330d1ccedc8903 +md5: 2d3278b721e40468295ca755c3b84070 depends: - __glibc >=2.17,<3.0.a0 - libgcc >=14 - libgfortran - libgfortran5 >=14.3.0 constrains: -- openblas >=0.3.30,<0.3.31.0a0 +- openblas >=0.3.33,<0.3.34.0a0 license: BSD-3-Clause license_family: BSD -size: 5927939 -timestamp: 1763114673331 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.55-h421ea60_0.conda -sha256: 36ade759122cdf0f16e2a2562a19746d96cf9c863ffaa812f2f5071ebbe9c03c -md5: 5f13ffc7d30ffec87864e678df9957b4 +size: 5931919 +timestamp: 1776993658641 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.58-h421ea60_0.conda +sha256: 377cfe037f3eeb3b1bf3ad333f724a64d32f315ee1958581fc671891d63d3f89 +md5: eba48a68a1a2b9d3c0d9511548db85db depends: -- libgcc >=14 - __glibc >=2.17,<3.0.a0 -- libzlib >=1.3.1,<2.0a0 +- libgcc >=14 +- libzlib >=1.3.2,<2.0a0 license: zlib-acknowledgement -size: 317669 -timestamp: 1770691470744 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.52.0-hf4e2dac_0.conda -sha256: d716847b7deca293d2e49ed1c8ab9e4b9e04b9d780aea49a97c26925b28a7993 -md5: fd893f6a3002a635b5e50ceb9dd2c0f4 +size: 317729 +timestamp: 1776315175087 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.53.1-h0c1763c_0.conda +sha256: 54cdcd3214313b62c2a8ee277e6f42150d9b748264c1b70d958bf735e420ef8d +md5: 7dc38adcbf71e6b38748e919e16e0dce depends: - __glibc >=2.17,<3.0.a0 -- icu >=78.2,<79.0a0 - libgcc >=14 -- libzlib >=1.3.1,<2.0a0 +- libzlib >=1.3.2,<2.0a0 license: blessing -size: 951405 -timestamp: 1772818874251 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_18.conda -sha256: 78668020064fdaa27e9ab65cd2997e2c837b564ab26ce3bf0e58a2ce1a525c6e -md5: 1b08cd684f34175e4514474793d44bcb +size: 954962 +timestamp: 1777986471789 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_19.conda +sha256: dff1058c76ec6b8759e41cefa2508162d00e4a5e6721aa68ec3fd10094e702dc +md5: 5794b3bdc38177caf969dabd3af08549 depends: - __glibc >=2.17,<3.0.a0 -- libgcc 15.2.0 he0feb66_18 +- libgcc 15.2.0 he0feb66_19 constrains: -- libstdcxx-ng ==15.2.0=*_18 +- libstdcxx-ng ==15.2.0=*_19 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL -size: 5852330 -timestamp: 1771378262446 +size: 5852044 +timestamp: 1778269036376 - conda: https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.7.1-h9d88235_1.conda sha256: e5f8c38625aa6d567809733ae04bb71c161a42e44a9fa8227abe61fa5c60ebe0 md5: cd5a90476766d53e901500df9215e927 @@ -757,16 +743,16 @@ depends: license: HPND size: 435273 timestamp: 1762022005702 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.41.3-h5347b49_0.conda -sha256: 1a7539cfa7df00714e8943e18de0b06cceef6778e420a5ee3a2a145773758aee -md5: db409b7c1720428638e7c0d509d3e1b5 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.42.1-h5347b49_0.conda +sha256: 3f0edf1280e2f6684a986f821eaa3e123d2694a00b31b96ca0d4a4c12c129231 +md5: 7d0a66598195ef00b6efc55aefc7453b depends: - __glibc >=2.17,<3.0.a0 - libgcc >=14 license: BSD-3-Clause license_family: BSD -size: 40311 -timestamp: 1766271528534 +size: 40163 +timestamp: 1779118517630 - conda: https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.6.0-hd42ef1d_0.conda sha256: 3aed21ab28eddffdaf7f804f49be7a7d701e8f0e46c856d801270b470820a37b md5: aea31d2e5b1091feca96fcfe945c3cf9 @@ -814,16 +800,16 @@ license: BSD-3-Clause license_family: BSD size: 85893 timestamp: 1770694658918 -- conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-4.0.0-pyhd8ed1ab_0.conda -sha256: 7b1da4b5c40385791dbc3cc85ceea9fad5da680a27d5d3cb8bfaa185e304a89e -md5: 5b5203189eb668f042ac2b0826244964 +- conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-4.2.0-pyhd8ed1ab_0.conda +sha256: 0c4c35376fe920714390d46e4b8d31c876d65f18e1655899e0763ec25f2a902f +md5: 6d03368f2b2b0a5fb6839df53b2eb5e0 depends: - mdurl >=0.1,<1 - python >=3.10 license: MIT license_family: MIT -size: 64736 -timestamp: 1754951288511 +size: 69017 +timestamp: 1778169663339 - conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.3-py314h67df5f8_1.conda sha256: c279be85b59a62d5c52f5dd9a4cd43ebd08933809a8416c22c3131595607d4cf md5: 9a17c4307d23318476d7fbf0fedc0cde @@ -854,9 +840,9 @@ license: MIT license_family: MIT size: 14465 timestamp: 1733255681319 -- conda: https://conda.anaconda.org/bioconda/noarch/multiqc-1.33-pyhdfd78af_0.conda -sha256: f005760b13093362fc9c997d603dd487de32ab2e821a3cbce52a42bcb8136517 -md5: 698a8a27c2b9d8a542c70cb47099a75e +- conda: https://conda.anaconda.org/bioconda/noarch/multiqc-1.35-pyhdfd78af_1.conda +sha256: e86033aa55a9e915e2d0957e770bdb81e3feb26a227d1adb17f9d6c528da6a71 +md5: cdb20309681ba3ce8f52c110e214d4f3 depends: - click - coloredlogs @@ -870,10 +856,11 @@ depends: - packaging - pillow >=10.2.0 - plotly >=5.18 -- polars-lts-cpu +- polars >=1.34.0 +- polars-runtime-compat >=1.34.0 - pyaml-env - pydantic >=2.7.1 -- python >=3.8,!=3.14.1 +- python >=3.9,!=3.14.1 - python-dotenv - python-kaleido 0.2.1 - pyyaml >=4 @@ -883,20 +870,21 @@ depends: - spectra >=0.0.10 - tiktoken - tqdm -- typeguard +- typeguard >=4 license: GPL-3.0-or-later license_family: GPL3 -size: 4198799 -timestamp: 1765300743879 -- conda: https://conda.anaconda.org/conda-forge/noarch/narwhals-2.18.1-pyhcf101f3_1.conda -sha256: 541fd4390a0687228b8578247f1536a821d9261389a65585af9d1a6f2a14e1e0 -md5: 30bec5e8f4c3969e2b1bd407c5e52afb +size: 4282188 +timestamp: 1779465338806 +- conda: https://conda.anaconda.org/conda-forge/noarch/narwhals-2.21.2-pyhcf101f3_0.conda +sha256: 70f43d62450927d51673eecd8823e14f5b3cfebdb43cda1d502eba97162bab42 +md5: 6687827c332121727ce383919e1ec8c2 depends: - python >=3.10 - python license: MIT -size: 280459 -timestamp: 1774380620329 +license_family: MIT +size: 284323 +timestamp: 1778929680962 - conda: https://conda.anaconda.org/conda-forge/noarch/natsort-8.4.0-pyhcf101f3_2.conda sha256: aeb1548eb72e4f198e72f19d242fb695b35add2ac7b2c00e0d83687052867680 md5: e941e85e273121222580723010bd4fa2 @@ -907,15 +895,15 @@ license: MIT license_family: MIT size: 39262 timestamp: 1770905275632 -- conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda -sha256: 3fde293232fa3fca98635e1167de6b7c7fda83caf24b9d6c91ec9eefb4f4d586 -md5: 47e340acb35de30501a76c7c799c41d7 +- conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.6-hdb14827_0.conda +sha256: fc89f74bbe362fb29fa3c037697a89bec140b346a2469a90f7936d1d7ea4d8a3 +md5: fc21868a1a5aacc937e7a18747acb8a5 depends: - __glibc >=2.17,<3.0.a0 -- libgcc >=13 +- libgcc >=14 license: X11 AND BSD-3-Clause -size: 891641 -timestamp: 1738195959188 +size: 918956 +timestamp: 1777422145199 - conda: https://conda.anaconda.org/conda-forge/noarch/networkx-3.6.1-pyhcf101f3_0.conda sha256: f6a82172afc50e54741f6f84527ef10424326611503c64e359e25a19a8e4c1c6 md5: a2c1eeadae7a309daed9d62c96012a2b @@ -956,24 +944,24 @@ license: MPL-2.0 license_family: MOZILLA size: 2057773 timestamp: 1763485556350 -- conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.4.3-py314h2b28147_0.conda -sha256: f2ba8cb0d86a6461a6bcf0d315c80c7076083f72c6733c9290086640723f79ec -md5: 36f5b7eb328bdc204954a2225cf908e2 +- conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.4.6-py314h2b28147_0.conda +sha256: bc61ae892973751a6b0e6ecea57ed6d7053224bddcb007165d6ceb1d7344ad47 +md5: f49b5f950379e0b97c35ca97682f7c6a depends: - python - libstdcxx >=14 - libgcc >=14 - __glibc >=2.17,<3.0.a0 -- python_abi 3.14.* *_cp314 -- libcblas >=3.9.0,<4.0a0 - liblapack >=3.9.0,<4.0a0 +- python_abi 3.14.* *_cp314 - libblas >=3.9.0,<4.0a0 +- libcblas >=3.9.0,<4.0a0 constrains: - numpy-base <0a0 license: BSD-3-Clause license_family: BSD -size: 8927860 -timestamp: 1773839233468 +size: 8928909 +timestamp: 1779169198391 - conda: https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.4-h55fea9a_0.conda sha256: 3900f9f2dbbf4129cf3ad6acf4e4b6f7101390b53843591c53b00f034343bc4d md5: 11b3379b191f63139e29c0d19dee24cd @@ -988,48 +976,48 @@ license: BSD-2-Clause license_family: BSD size: 355400 timestamp: 1758489294972 -- conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.1-h35e630c_1.conda -sha256: 44c877f8af015332a5d12f5ff0fb20ca32f896526a7d0cdb30c769df1144fb5c -md5: f61eb8cd60ff9057122a3d338b99c00f +- conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.2-h35e630c_0.conda +sha256: c0ef482280e38c71a08ad6d71448194b719630345b0c9c60744a2010e8a8e0cb +md5: da1b85b6a87e141f5140bb9924cecab0 depends: - __glibc >=2.17,<3.0.a0 - ca-certificates - libgcc >=14 license: Apache-2.0 license_family: Apache -size: 3164551 -timestamp: 1769555830639 -- conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda -sha256: c1fc0f953048f743385d31c468b4a678b3ad20caffdeaa94bed85ba63049fd58 -md5: b76541e68fea4d511b1ac46a28dcd2c6 +size: 3167099 +timestamp: 1775587756857 +- conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.2-pyhc364b38_0.conda +sha256: 3906abfb6511a3bb309e39b9b1b7bc38f50a723971de2395489fd1f379255890 +md5: 4c06a92e74452cfa53623a81592e8934 depends: - python >=3.8 - python license: Apache-2.0 license_family: APACHE -size: 72010 -timestamp: 1769093650580 -- conda: https://conda.anaconda.org/conda-forge/linux-64/pillow-12.1.1-py314h8ec4b1a_0.conda -sha256: 9e6ec8f3213e8b7d64b0ad45f84c51a2c9eba4398efda31e196c9a56186133ee -md5: 79678378ae235e24b3aa83cee1b38207 +size: 91574 +timestamp: 1777103621679 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pillow-12.2.0-py314h8ec4b1a_0.conda +sha256: 123d8a7c16c88658b4f29e9f115a047598c941708dade74fbaff373a32dbec5e +md5: 76c4757c0ec9d11f969e8eb44899307b depends: - python - libgcc >=14 - __glibc >=2.17,<3.0.a0 +- libtiff >=4.7.1,<4.8.0a0 +- openjpeg >=2.5.4,<3.0a0 +- libxcb >=1.17.0,<2.0a0 - libwebp-base >=1.6.0,<2.0a0 - zlib-ng >=2.3.3,<2.4.0a0 -- python_abi 3.14.* *_cp314 -- tk >=8.6.13,<8.7.0a0 - libjpeg-turbo >=3.1.2,<4.0a0 -- libxcb >=1.17.0,<2.0a0 -- openjpeg >=2.5.4,<3.0a0 +- python_abi 3.14.* *_cp314 +- libfreetype >=2.14.3 +- libfreetype6 >=2.14.3 - lcms2 >=2.18,<3.0a0 -- libtiff >=4.7.1,<4.8.0a0 -- libfreetype >=2.14.1 -- libfreetype6 >=2.14.1 +- tk >=8.6.13,<8.7.0a0 license: HPND -size: 1073026 -timestamp: 1770794002408 +size: 1082797 +timestamp: 1775060059882 - conda: https://conda.anaconda.org/conda-forge/noarch/plotly-6.6.0-pyhd8ed1ab_0.conda sha256: c418d325359fc7a0074cea7f081ef1bce26e114d2da8a0154c5d27ecc87a08e7 md5: 3e9427ee186846052e81fadde8ebe96a @@ -1043,11 +1031,11 @@ license: MIT license_family: MIT size: 5251872 timestamp: 1772628857717 -- conda: https://conda.anaconda.org/conda-forge/noarch/polars-1.39.3-pyh58ad624_1.conda -sha256: d332c2d5002fc440ae37ed9679ffc21b552f18d20232390005d1dd3bce0888d3 -md5: d5a4e013a30dd8dfde9ab39f45aaf9c1 +- conda: https://conda.anaconda.org/conda-forge/noarch/polars-1.41.0-pyh58ad624_0.conda +sha256: 70fc56877c4a095ee658d61924d8019768fbae4a48437058d181fc94b0a7c4d8 +md5: 25a883fed9f1f3f21ff317a3e7c92ac4 depends: -- polars-runtime-32 ==1.39.3 +- polars-runtime-32 ==1.41.0 - python >=3.10 - python constrains: @@ -1061,57 +1049,44 @@ constrains: - pyiceberg >=0.7.1 - altair >=5.4.0 - great_tables >=0.8.0 -- polars-runtime-32 ==1.39.3 -- polars-runtime-64 ==1.39.3 -- polars-runtime-compat ==1.39.3 +- polars-runtime-32 ==1.41.0 +- polars-runtime-64 ==1.41.0 +- polars-runtime-compat ==1.41.0 license: MIT -license_family: MIT -size: 533495 -timestamp: 1774207987966 -- conda: https://conda.anaconda.org/conda-forge/noarch/polars-lts-cpu-1.34.0.deprecated-hc364b38_0.conda -sha256: e466fb31f67ba9bde18deafeb34263ca5eb25807f39ead0e9d753a8e82c4c4f4 -md5: ef0340e75068ac8ff96462749b5c98e7 -depends: -- polars >=1.34.0 -- polars-runtime-compat >=1.34.0 -license: MIT -license_family: MIT -size: 3902 -timestamp: 1760206808444 -- conda: https://conda.anaconda.org/conda-forge/linux-64/polars-runtime-32-1.39.3-py310hffdcd12_1.conda +size: 539656 +timestamp: 1779630790562 +- conda: https://conda.anaconda.org/conda-forge/linux-64/polars-runtime-32-1.41.0-py310h49dadd8_0.conda noarch: python -sha256: 9744f8086bb0832998f5b01076f57ddc9efbe460e493b14303c3567dc4f401e7 -md5: f9327f9f2cfc4215f55b613e64afd3ba +sha256: e51ee3fe5259f2e115b2f78f8fbe3554e419c7c82b0c110878e12a5ff95ce3ab +md5: 7682765a1588e5ac887c99736d297c93 depends: - python +- __glibc >=2.17,<3.0.a0 - libstdcxx >=14 - libgcc >=14 -- __glibc >=2.17,<3.0.a0 - _python_abi3_support 1.* - cpython >=3.10 constrains: - __glibc >=2.17 license: MIT -license_family: MIT -size: 37570276 -timestamp: 1774207987966 -- conda: https://conda.anaconda.org/conda-forge/linux-64/polars-runtime-compat-1.39.3-py310hbcd5346_1.conda +size: 42578921 +timestamp: 1779630790562 +- conda: https://conda.anaconda.org/conda-forge/linux-64/polars-runtime-compat-1.41.0-py310hcbd6021_0.conda noarch: python -sha256: bf0b932713f0f27924f42159c98426e0073bb6145ed796eaa4cec79ca05363c7 -md5: 4b9b312453eebd6fbdbbe2a88fa1b5c4 +sha256: 29c3831c92394af11d9f7d04882dda9479ffbb76a3d36ba155d52159d67805fa +md5: cb0b620c9914a07a9022cb8b183ea9ee depends: - python -- libgcc >=14 - libstdcxx >=14 +- libgcc >=14 - __glibc >=2.17,<3.0.a0 - _python_abi3_support 1.* - cpython >=3.10 constrains: - __glibc >=2.17 license: MIT -license_family: MIT -size: 37224264 -timestamp: 1774207985377 +size: 41864944 +timestamp: 1779630722548 - conda: https://conda.anaconda.org/conda-forge/linux-64/procps-ng-4.0.6-h18c060e_0.conda sha256: 4ce2e1ee31a6217998f78c31ce7dc0a3e0557d9238b51d49dd20c52d467a126d md5: f2c23a77b25efcad57d377b34bd84941 @@ -1143,24 +1118,23 @@ license: MIT license_family: MIT size: 14645 timestamp: 1736766960536 -- conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-2.12.5-pyhcf101f3_1.conda -sha256: 868569d9505b7fe246c880c11e2c44924d7613a8cdcc1f6ef85d5375e892f13d -md5: c3946ed24acdb28db1b5d63321dbca7d +- conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-2.13.4-pyhcf101f3_0.conda +sha256: 69700e31165df070e9716315e042196aa92525dae5deb5107785847ab9f4189f +md5: 729843edafc0899b3348bd3f19525b9d depends: - typing-inspection >=0.4.2 - typing_extensions >=4.14.1 - python >=3.10 -- typing-extensions >=4.6.1 - annotated-types >=0.6.0 -- pydantic-core ==2.41.5 +- pydantic-core ==2.46.4 - python license: MIT license_family: MIT -size: 340482 -timestamp: 1764434463101 -- conda: https://conda.anaconda.org/conda-forge/linux-64/pydantic-core-2.41.5-py314h2e6c369_1.conda -sha256: 7e0ae379796e28a429f8e48f2fe22a0f232979d65ec455e91f8dac689247d39f -md5: 432b0716a1dfac69b86aa38fdd59b7e6 +size: 346511 +timestamp: 1778103405862 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pydantic-core-2.46.4-py314h2e6c369_0.conda +sha256: 802e216c39f1359aed60823b6e11d8ccd812b0ae1c81ae5ac1c81f99446409ab +md5: 0c96993dbeadf3a277cf757b9f1c9412 depends: - python - typing-extensions >=4.6.0,!=4.7.0 @@ -1171,17 +1145,17 @@ constrains: - __glibc >=2.17 license: MIT license_family: MIT -size: 1943088 -timestamp: 1762988995556 -- conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda -sha256: 5577623b9f6685ece2697c6eb7511b4c9ac5fb607c9babc2646c811b428fd46a -md5: 6b6ece66ebcae2d5f326c77ef2c5a066 +size: 1895020 +timestamp: 1778084229247 +- conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.20.0-pyhd8ed1ab_0.conda +sha256: cf70b2f5ad9ae472b71235e5c8a736c9316df3705746de419b59d442e8348e86 +md5: 16c18772b340887160c79a6acc022db0 depends: -- python >=3.9 +- python >=3.10 license: BSD-2-Clause license_family: BSD -size: 889287 -timestamp: 1750615908735 +size: 893031 +timestamp: 1774796815820 - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda sha256: ba3b032fa52709ce0d9fd388f63d330a026754587a2f461117cac9ab73d8d0d8 md5: 461219d1a5bd61342293efa2c0c90eac @@ -1192,32 +1166,32 @@ license: BSD-3-Clause license_family: BSD size: 21085 timestamp: 1733217331982 -- conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.14.3-h32b2ec7_101_cp314.conda -build_number: 101 -sha256: cb0628c5f1732f889f53a877484da98f5a0e0f47326622671396fb4f2b0cd6bd -md5: c014ad06e60441661737121d3eae8a60 +- conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.14.5-habeac84_100_cp314.conda +build_number: 100 +sha256: 55eed9bf2a3f6e90311276f0834737fe7c2d9ec3e5e2e557507858df4c7521e6 +md5: da92e59ff92f2d5ede4f612af20f583f depends: - __glibc >=2.17,<3.0.a0 - bzip2 >=1.0.8,<2.0a0 - ld_impl_linux-64 >=2.36.1 -- libexpat >=2.7.3,<3.0a0 +- libexpat >=2.8.0,<3.0a0 - libffi >=3.5.2,<3.6.0a0 - libgcc >=14 -- liblzma >=5.8.2,<6.0a0 +- liblzma >=5.8.3,<6.0a0 - libmpdec >=4.0.0,<5.0a0 -- libsqlite >=3.51.2,<4.0a0 -- libuuid >=2.41.3,<3.0a0 -- libzlib >=1.3.1,<2.0a0 -- ncurses >=6.5,<7.0a0 -- openssl >=3.5.5,<4.0a0 +- libsqlite >=3.53.1,<4.0a0 +- libuuid >=2.42.1,<3.0a0 +- libzlib >=1.3.2,<2.0a0 +- ncurses >=6.6,<7.0a0 +- openssl >=3.5.6,<4.0a0 - python_abi 3.14.* *_cp314 - readline >=8.3,<9.0a0 - tk >=8.6.13,<8.7.0a0 - tzdata - zstd >=1.5.7,<1.6.0a0 license: Python-2.0 -size: 36702440 -timestamp: 1770675584356 +size: 36745188 +timestamp: 1779236923603 python_site_packages_path: lib/python3.14/site-packages - conda: https://conda.anaconda.org/conda-forge/noarch/python-dotenv-1.2.2-pyhcf101f3_0.conda sha256: 74e417a768f59f02a242c25e7db0aa796627b5bc8c818863b57786072aeb85e5 @@ -1228,15 +1202,15 @@ license: BSD-3-Clause license_family: BSD size: 27848 timestamp: 1772388605021 -- conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.14.3-h4df99d1_101.conda -sha256: 233aebd94c704ac112afefbb29cf4170b7bc606e22958906f2672081bc50638a -md5: 235765e4ea0d0301c75965985163b5a1 +- conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.14.5-h4df99d1_100.conda +sha256: 41dd7da285d71d519257fa7dacb1cae060d5ebfaa5f92cba5994899d2978e943 +md5: 41954747ba952ec4b01e16c2c9e8d8ff depends: -- cpython 3.14.3.* +- cpython 3.14.5.* - python_abi * *_cp314 license: Python-2.0 -size: 50062 -timestamp: 1770674497152 +size: 50212 +timestamp: 1779236703009 - conda: https://conda.anaconda.org/conda-forge/noarch/python-kaleido-0.2.1-pyhd8ed1ab_0.tar.bz2 sha256: e17bf63a30aec33432f1ead86e15e9febde9fc40a7f869c0e766be8d2db44170 md5: 310259a5b03ff02289d7705f39e2b1d2 @@ -1294,9 +1268,9 @@ license: MIT license_family: MIT size: 51788 timestamp: 1760379115194 -- conda: https://conda.anaconda.org/conda-forge/linux-64/regex-2026.2.28-py314h5bd0f2a_0.conda -sha256: e085e336f1446f5263a3ec9747df8c719b6996753901181add50dc4fdd8bb2e8 -md5: 3c8b6a8c4d0ff5a264e9831eac4941f4 +- conda: https://conda.anaconda.org/conda-forge/linux-64/regex-2026.5.9-py314h5bd0f2a_0.conda +sha256: c7a4aca4977c15c82d053b06cbc676460974c1b25757cfeea8a9a2497ac911f8 +md5: 9dd235b6ac69a0198080dac39f9891aa depends: - __glibc >=2.17,<3.0.a0 - libgcc >=14 @@ -1304,27 +1278,27 @@ depends: - python_abi 3.14.* *_cp314 license: Apache-2.0 AND CNRI-Python license_family: PSF -size: 411924 -timestamp: 1772255161535 -- conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.5-pyhcf101f3_1.conda -sha256: 7813c38b79ae549504b2c57b3f33394cea4f2ad083f0994d2045c2e24cb538c5 -md5: c65df89a0b2e321045a9e01d1337b182 +size: 413611 +timestamp: 1778374155646 +- conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.34.2-pyhcf101f3_0.conda +sha256: 1715246b19c9f85ee022933b4845f2fc14ac9184981b7b7d9b728bec8e9588da +md5: 4a85203c1d80c1059086ae860836ffb9 depends: - python >=3.10 -- certifi >=2017.4.17 +- certifi >=2023.5.7 - charset-normalizer >=2,<4 - idna >=2.5,<4 -- urllib3 >=1.21.1,<3 +- urllib3 >=1.26,<3 - python constrains: -- chardet >=3.0.2,<6 +- chardet >=3.0.2,<8 license: Apache-2.0 license_family: APACHE -size: 63602 -timestamp: 1766926974520 -- conda: https://conda.anaconda.org/conda-forge/noarch/rich-14.3.3-pyhcf101f3_0.conda -sha256: b06ce84d6a10c266811a7d3adbfa1c11f13393b91cc6f8a5b468277d90be9590 -md5: 7a6289c50631d620652f5045a63eb573 +size: 68709 +timestamp: 1778851103479 +- conda: https://conda.anaconda.org/conda-forge/noarch/rich-15.0.0-pyhcf101f3_0.conda +sha256: 3d6ba2c0fcdac3196ba2f0615b4104e532525ffa1335b50a2878be5ff488814a +md5: 0242025a3c804966bf71aa04eee82f66 depends: - markdown-it-py >=2.2.0 - pygments >=2.13.0,<3.0.0 @@ -1333,8 +1307,8 @@ depends: - python license: MIT license_family: MIT -size: 208472 -timestamp: 1771572730357 +size: 208577 +timestamp: 1775991661559 - conda: https://conda.anaconda.org/conda-forge/noarch/rich-click-1.9.7-pyh8f84b5b_0.conda sha256: aa3fcb167321bae51998de2e94d199109c9024f25a5a063cb1c28d8f1af33436 md5: 0c20a8ebcddb24a45da89d5e917e6cb9 @@ -1373,20 +1347,19 @@ license: MIT license_family: MIT size: 22284 timestamp: 1735770589188 -- conda: https://conda.anaconda.org/conda-forge/linux-64/sqlite-3.52.0-h04a0ce9_0.conda -sha256: c9af81e7830d9c4b67a7f48e512d060df2676b29cac59e3b31f09dbfcee29c58 -md5: 7d9d7efe9541d4bb71b5934e8ee348ea +- conda: https://conda.anaconda.org/conda-forge/linux-64/sqlite-3.53.1-hbc0de68_0.conda +sha256: d167fa92781bcdcd3b9aaa6bb1cd50c5b108f6190c170098a118b5cf5df2f881 +md5: 8e0b8654ead18e50af552e54b5a08a61 depends: - __glibc >=2.17,<3.0.a0 -- icu >=78.2,<79.0a0 - libgcc >=14 -- libsqlite 3.52.0 hf4e2dac_0 -- libzlib >=1.3.1,<2.0a0 -- ncurses >=6.5,<7.0a0 +- libsqlite 3.53.1 h0c1763c_0 +- libzlib >=1.3.2,<2.0a0 +- ncurses >=6.6,<7.0a0 - readline >=8.3,<9.0a0 license: blessing -size: 203641 -timestamp: 1772818888368 +size: 205399 +timestamp: 1777986477546 - conda: https://conda.anaconda.org/conda-forge/linux-64/tiktoken-0.12.0-py314h67fec18_3.conda sha256: 7e395d67fd249d901beb1ae269057763c0d8c3ee5f7a348694bdb16d158a37d9 md5: d705f9d8a1185a2b01cced191177a028 @@ -1427,20 +1400,20 @@ depends: license: MPL-2.0 and MIT size: 94132 timestamp: 1770153424136 -- conda: https://conda.anaconda.org/conda-forge/noarch/typeguard-4.5.1-pyhd8ed1ab_0.conda -sha256: 39d8ae33c43cdb8f771373e149b0b4fae5a08960ac58dcca95b2f1642bb17448 -md5: 260af1b0a94f719de76b4e14094e9a3b +- conda: https://conda.anaconda.org/conda-forge/noarch/typeguard-4.5.2-pyhcf101f3_0.conda +sha256: 59d7851d32fddb5b510272e6557aa982edeb927d349648dac27f5bf01d18bb26 +md5: 4460f039b7dedf15f7df086446ca75ae depends: -- importlib-metadata >=3.6 -- python >=3.10 -- typing-extensions >=4.10.0 - typing_extensions >=4.14.0 +- python >=3.10 +- importlib-metadata >=3.6 +- python constrains: - pytest >=7 license: MIT license_family: MIT -size: 36838 -timestamp: 1771532971545 +size: 38297 +timestamp: 1778779291237 - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda sha256: 7c2df5721c742c2a47b2c8f960e718c930031663ac1174da67c1ed5999f7938c md5: edd329d7d3a4ab45dcf905899a7a6115 @@ -1450,16 +1423,17 @@ license: PSF-2.0 license_family: PSF size: 91383 timestamp: 1756220668932 -- conda: https://conda.anaconda.org/conda-forge/noarch/typing-inspection-0.4.2-pyhd8ed1ab_1.conda -sha256: 70db27de58a97aeb7ba7448366c9853f91b21137492e0b4430251a1870aa8ff4 -md5: a0a4a3035667fc34f29bfbd5c190baa6 +- conda: https://conda.anaconda.org/conda-forge/noarch/typing-inspection-0.4.2-pyhcf101f3_2.conda +sha256: 8b90d2f19f9458b8c58a55e1fcdc1d90c1603a847a47654d8a454549413ba60a +md5: 53f5409c5cfd6c5a66417d68e3f0a864 depends: - python >=3.10 - typing_extensions >=4.12.0 +- python license: MIT license_family: MIT -size: 18923 -timestamp: 1764158430324 +size: 20935 +timestamp: 1777105465795 - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda sha256: 032271135bca55aeb156cee361c81350c6f3fb203f57d024d7e5a1fc9ef18731 md5: 0caa1af407ecff61170c9437a808404d @@ -1476,9 +1450,9 @@ md5: ad659d0a2b3e47e38d829aa8cad2d610 license: LicenseRef-Public-Domain size: 119135 timestamp: 1767016325805 -- conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.6.3-pyhd8ed1ab_0.conda -sha256: af641ca7ab0c64525a96fd9ad3081b0f5bcf5d1cbb091afb3f6ed5a9eee6111a -md5: 9272daa869e03efe68833e3dc7a02130 +- conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.7.0-pyhd8ed1ab_0.conda +sha256: feff959a816f7988a0893201aa9727bbb7ee1e9cec2c4f0428269b489eb93fb4 +md5: cbb88288f74dbe6ada1c6c7d0a97223e depends: - backports.zstd >=1.0.0 - brotli-python >=1.2.0 @@ -1487,8 +1461,8 @@ depends: - python >=3.10 license: MIT license_family: MIT -size: 103172 -timestamp: 1767817860341 +size: 103560 +timestamp: 1778188657149 - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.12-hb03c661_1.conda sha256: 6bc6ab7a90a5d8ac94c7e300cc10beb0500eeba4b99822768ca2f2ef356f731b md5: b2895afaf55bf96a8c8282a2e47a5de0 @@ -1519,16 +1493,16 @@ license: MIT license_family: MIT size: 85189 timestamp: 1753484064210 -- conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda -sha256: b4533f7d9efc976511a73ef7d4a2473406d7f4c750884be8e8620b0ce70f4dae -md5: 30cd29cb87d819caead4d55184c1d115 +- conda: https://conda.anaconda.org/conda-forge/noarch/zipp-4.1.0-pyhcf101f3_0.conda +sha256: 210bd31c22bb88f5e2a167df24c95bb5f152b2ada7502f9b8c49d1f5366db423 +md5: ba3dcdc8584155c97c648ae9c044b7a3 depends: - python >=3.10 - python license: MIT license_family: MIT -size: 24194 -timestamp: 1764460141901 +size: 24190 +timestamp: 1779159948016 - conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-ng-2.3.3-hceb46e0_1.conda sha256: ea4e50c465d70236408cb0bfe0115609fd14db1adcd8bd30d8918e0291f8a75f md5: 2aadb0d17215603a82a2a6b0afd9a4cb diff --git a/modules/nf-core/multiqc/.conda-lock/linux_amd64-bd-db7c73dae76bc9e6_1.txt b/modules/nf-core/multiqc/.conda-lock/linux_amd64-bd-db7c73dae76bc9e6_1.txt deleted file mode 100644 index a55a4d49..00000000 --- a/modules/nf-core/multiqc/.conda-lock/linux_amd64-bd-db7c73dae76bc9e6_1.txt +++ /dev/null @@ -1,126 +0,0 @@ - -# This file may be used to create an environment using: -# $ conda create --name --file -# platform: linux-64 -@EXPLICIT -https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_18.conda#239c5e9546c38a1e884d69effcf4c882 -https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda#a9f577daf3de00bca7c3c76c0ecbd1de -https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_18.conda#0aa00f03f9e39fb9876085dee11a85d4 -https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_9.conda#d2ffd7602c02f2b316fd921d39876885 -https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.2-h25fd6f3_2.conda#d87ff7921124eccd67248aa483c23fec -https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda#4a13eeac0b5c8e5b8ab496e6c4ddd829 -https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_102.conda#18335a698559cdbcd86150a48bf54ba6 -https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.5-hecca717_0.conda#49f570f3bc4c874a06ea69b7225753af -https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda#a360c33a5abe61c07959e449fa1453eb -https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.3-hb03c661_0.conda#b88d90cad08e6bc8ad540cb310a761fb -https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-hb03c661_1.conda#2c21e66f50753a083cbe6b80f38268fa -https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_18.conda#1b08cd684f34175e4514474793d44bcb -https://conda.anaconda.org/conda-forge/linux-64/icu-78.3-h33c6efd_0.conda#c80d8a3b84358cb967fa81e7075fbc8a -https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.53.0-hf4e2dac_0.conda#810d83373448da85c3f673fbcb7ad3a3 -https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.42-h5347b49_0.conda#38ffe67b78c9d4de527be8315e5ada2c -https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda#47e340acb35de30501a76c7c799c41d7 -https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.4.22-hbd8a1cb_0.conda#e18ad67cf881dcadee8b8d9e2f8e5f73 -https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.2-h35e630c_0.conda#da1b85b6a87e141f5140bb9924cecab0 -https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda#0539938c55b6b1a59b560e843ad864a4 -https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda#d7d95fc8287ea7bf33e0e7116d2b95ec -https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda#cffd3bdd58090148f4cfcd831f4b26ab -https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda#ad659d0a2b3e47e38d829aa8cad2d610 -https://conda.anaconda.org/conda-forge/linux-64/python-3.14.4-habeac84_100_cp314.conda#a443f87920815d41bfe611296e507995 -https://conda.anaconda.org/conda-forge/noarch/cpython-3.14.4-py314hd8ed1ab_100.conda#f111d4cfaf1fe9496f386bc98ae94452 -https://conda.anaconda.org/conda-forge/noarch/python-gil-3.14.4-h4df99d1_100.conda#e4e60721757979d01d3964122f674959 -https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda#aaa2a381ccc56eac91d63b6c1240312f -https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda#0caa1af407ecff61170c9437a808404d -https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda#edd329d7d3a4ab45dcf905899a7a6115 -https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_1.conda#2934f256a8acfe48f6ebb4fce6cde29c -https://conda.anaconda.org/conda-forge/noarch/attrs-26.1.0-pyhcf101f3_0.conda#c6b0543676ecb1fb2d7643941fe375f2 -https://conda.anaconda.org/conda-forge/noarch/backports.zstd-1.3.0-py314h680f03e_0.conda#a2ac7763a9ac75055b68f325d3255265 -https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.2.0-py314h3de4e8d_1.conda#8910d2c46f7e7b519129f486e0fe927a -https://conda.anaconda.org/conda-forge/noarch/certifi-2026.4.22-pyhd8ed1ab_0.conda#929471569c93acefb30282a22060dcd5 -https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.7-pyhd8ed1ab_0.conda#a9167b9571f3baa9d448faa2139d1089 -https://conda.anaconda.org/conda-forge/noarch/click-8.3.2-pyhc90fa1f_0.conda#4d18bc3af7cfcea97bd817164672a08c -https://conda.anaconda.org/conda-forge/noarch/humanfriendly-10.0-pyh707e725_8.conda#7fe569c10905402ed47024fc481bb371 -https://conda.anaconda.org/conda-forge/noarch/coloredlogs-15.0.1-pyhd8ed1ab_4.conda#b866ff7007b934d564961066c8195983 -https://conda.anaconda.org/conda-forge/noarch/networkx-3.6.1-pyhcf101f3_0.conda#a2c1eeadae7a309daed9d62c96012a2b -https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-15.2.0-h68bc16d_18.conda#646855f357199a12f02a87382d429b75 -https://conda.anaconda.org/conda-forge/linux-64/libgfortran-15.2.0-h69a702a_18.conda#9063115da5bc35fdc3e1002e69b9ef6e -https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.32-pthreads_h94d23a6_0.conda#89d61bc91d3f39fda0ca10fcd3c68594 -https://conda.anaconda.org/conda-forge/linux-64/libblas-3.11.0-6_h4a7cf45_openblas.conda#6d6d225559bfa6e2f3c90ee9c03d4e2e -https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.11.0-6_h0358290_openblas.conda#36ae340a916635b97ac8a0655ace2a35 -https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.11.0-6_h47877c9_openblas.conda#881d801569b201c2e753f03c84b85e15 -https://conda.anaconda.org/conda-forge/linux-64/numpy-2.4.3-py314h2b28147_0.conda#36f5b7eb328bdc204954a2225cf908e2 -https://conda.anaconda.org/conda-forge/noarch/colormath-3.0.0-pyhd8ed1ab_4.conda#071cf7b0ce333c81718b054066c15102 -https://conda.anaconda.org/conda-forge/linux-64/expat-2.7.5-hecca717_0.conda#7de50d165039df32d38be74c1b34a910 -https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2#0c96522c6bdaed4b1566d11387caaf45 -https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2#34893075a5c9e55cdafac56607368fc6 -https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2#4d59c254e01d9cde7957100457e2d5fb -https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_3.conda#49023d73832ef61042f6a237cb2687e7 -https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.58-h421ea60_0.conda#eba48a68a1a2b9d3c0d9511548db85db -https://conda.anaconda.org/conda-forge/linux-64/libfreetype6-2.14.3-h73754d4_0.conda#fb16b4b69e3f1dcfe79d80db8fd0c55d -https://conda.anaconda.org/conda-forge/linux-64/libfreetype-2.14.3-ha770c72_0.conda#e289f3d17880e44b633ba911d57a321b -https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.17.1-h27c8c51_0.conda#867127763fbe935bab59815b6e0b7b5c -https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-hc364b38_1.conda#a7970cd949a077b7cb9696379d338681 -https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda#0a802cb9888dd14eeefc611f05c40b6e -https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda#8e6923fc12f1fe8f8c4e5c9f343256ac -https://conda.anaconda.org/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda#164fc43f0b53b6e3a7bc7dce5e4f1dc9 -https://conda.anaconda.org/conda-forge/noarch/humanize-4.15.0-pyhd8ed1ab_0.conda#daddf757c3ecd6067b9af1df1f25d89e -https://conda.anaconda.org/conda-forge/noarch/idna-3.13-pyhcf101f3_0.conda#fb7130c190f9b4ec91219840a05ba3ac -https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.1-pyhcf101f3_0.conda#e1c36c6121a7c9c76f2f148f1e83b983 -https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.8.0-pyhcf101f3_0.conda#080594bf4493e6bae2607e65390c520a -https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.3-py314h67df5f8_1.conda#9a17c4307d23318476d7fbf0fedc0cde -https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda#04558c96691bed63104678757beb4f8d -https://conda.anaconda.org/conda-forge/linux-64/rpds-py-0.30.0-py314h2e6c369_0.conda#c1c368b5437b0d1a68f372ccf01cb133 -https://conda.anaconda.org/conda-forge/noarch/referencing-0.37.0-pyhcf101f3_0.conda#870293df500ca7e18bedefa5838a22ab -https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2025.9.1-pyhcf101f3_0.conda#439cd0f567d697b20a8f45cb70a1005a -https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.26.0-pyhcf101f3_0.conda#ada41c863af263cc4c5fcbaff7c3e4dc -https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_18.conda#d5e96b1ed75ca01906b3d2469b4ce493 -https://conda.anaconda.org/conda-forge/linux-64/mathjax-2.7.7-ha770c72_3.tar.bz2#86e69bd82c2a2c6fd29f5ab7e02b3691 -https://conda.anaconda.org/conda-forge/linux-64/nspr-4.38-h29cc59b_0.conda#e235d5566c9cc8970eb2798dd4ecf62f -https://conda.anaconda.org/conda-forge/linux-64/nss-3.118-h445c969_0.conda#567fbeed956c200c1db5782a424e58ee -https://conda.anaconda.org/conda-forge/linux-64/sqlite-3.53.0-h04a0ce9_0.conda#dc540e5bd5616d83a1ec46af8315ff98 -https://conda.anaconda.org/conda-forge/linux-64/kaleido-core-0.2.1-h3644ca4_0.tar.bz2#b3723b235b0758abaae8c82ce4d80146 -https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.1.4.1-hb03c661_0.conda#6178c6f2fb254558238ef4e6c56fb782 -https://conda.anaconda.org/conda-forge/linux-64/lerc-4.1.0-hdb68285_0.conda#a752488c68f2e7c456bcbd8f16eec275 -https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.25-h17f619e_0.conda#6c77a605a7a689d17d4819c0f8ac9a00 -https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.6.0-hd42ef1d_0.conda#aea31d2e5b1091feca96fcfe945c3cf9 -https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.7.1-h9d88235_1.conda#cd5a90476766d53e901500df9215e927 -https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.18-h0c24ade_0.conda#6f2e2c8f58160147c4d1c6f4c14cbac4 -https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-hb9d3cd8_1002.conda#b3c17d95b5a10c6e64a21fa17573e70e -https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.12-hb03c661_1.conda#b2895afaf55bf96a8c8282a2e47a5de0 -https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdmcp-1.1.5-hb03c661_1.conda#1dafce8548e38671bea82e3f5c6ce22f -https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.17.0-h8a09558_0.conda#92ed62436b625154323d40d5f2f11dd7 -https://conda.anaconda.org/conda-forge/noarch/markdown-3.10.2-pyhcf101f3_0.conda#ba0a9221ce1063f31692c07370d062f3 -https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda#592132998493b3ff25fd7479396e8351 -https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-4.0.0-pyhd8ed1ab_0.conda#5b5203189eb668f042ac2b0826244964 -https://conda.anaconda.org/conda-forge/noarch/natsort-8.4.0-pyhcf101f3_2.conda#e941e85e273121222580723010bd4fa2 -https://conda.anaconda.org/conda-forge/noarch/packaging-26.1-pyhc364b38_0.conda#b8ae38639d323d808da535fb71e31be8 -https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.4-h55fea9a_0.conda#11b3379b191f63139e29c0d19dee24cd -https://conda.anaconda.org/conda-forge/linux-64/zlib-ng-2.3.3-hceb46e0_1.conda#2aadb0d17215603a82a2a6b0afd9a4cb -https://conda.anaconda.org/conda-forge/linux-64/pillow-12.2.0-py314h8ec4b1a_0.conda#76c4757c0ec9d11f969e8eb44899307b -https://conda.anaconda.org/conda-forge/noarch/narwhals-2.20.0-pyhcf101f3_0.conda#6cac1a50359219d786453c6fef819f98 -https://conda.anaconda.org/conda-forge/noarch/plotly-6.6.0-pyhd8ed1ab_0.conda#3e9427ee186846052e81fadde8ebe96a -https://conda.anaconda.org/conda-forge/linux-64/polars-runtime-32-1.40.0-py310hffdcd12_0.conda#8eacf9ff4d4e1ca1b52f8f3ba3e0c993 -https://conda.anaconda.org/conda-forge/noarch/polars-1.40.0-pyh58ad624_0.conda#fd16be490f5403adfbf27dd4901bbe34 -https://conda.anaconda.org/conda-forge/linux-64/polars-runtime-compat-1.40.0-py310hbcd5346_0.conda#03a6899e17bb731c8e21b08212f1a64c -https://conda.anaconda.org/conda-forge/noarch/polars-lts-cpu-1.34.0.deprecated-hc364b38_0.conda#ef0340e75068ac8ff96462749b5c98e7 -https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h280c20c_3.conda#a77f85f77be52ff59391544bfe73390a -https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.3-py314h67df5f8_1.conda#2035f68f96be30dc60a5dfd7452c7941 -https://conda.anaconda.org/conda-forge/noarch/pyaml-env-1.2.2-pyhd8ed1ab_0.conda#e17be1016bcc3516827b836cd3e4d9dc -https://conda.anaconda.org/conda-forge/linux-64/pydantic-core-2.46.3-py314h2e6c369_0.conda#1f3fd537f929b8d3236f9f0f0e7f7a32 -https://conda.anaconda.org/conda-forge/noarch/typing-inspection-0.4.2-pyhd8ed1ab_1.conda#a0a4a3035667fc34f29bfbd5c190baa6 -https://conda.anaconda.org/conda-forge/noarch/pydantic-2.13.3-pyhcf101f3_0.conda#f690e6f204efd2e5c06b57518a383d98 -https://conda.anaconda.org/conda-forge/noarch/python-dotenv-1.2.2-pyhcf101f3_0.conda#130584ad9f3a513cdd71b1fdc1244e9c -https://conda.anaconda.org/conda-forge/noarch/python-kaleido-0.2.1-pyhd8ed1ab_0.tar.bz2#310259a5b03ff02289d7705f39e2b1d2 -https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda#461219d1a5bd61342293efa2c0c90eac -https://conda.anaconda.org/conda-forge/noarch/urllib3-2.6.3-pyhd8ed1ab_0.conda#9272daa869e03efe68833e3dc7a02130 -https://conda.anaconda.org/conda-forge/noarch/requests-2.33.1-pyhcf101f3_0.conda#10afbb4dbf06ff959ad25a92ccee6e59 -https://conda.anaconda.org/conda-forge/noarch/pygments-2.20.0-pyhd8ed1ab_0.conda#16c18772b340887160c79a6acc022db0 -https://conda.anaconda.org/conda-forge/noarch/rich-15.0.0-pyhcf101f3_0.conda#0242025a3c804966bf71aa04eee82f66 -https://conda.anaconda.org/conda-forge/noarch/rich-click-1.9.7-pyh8f84b5b_0.conda#0c20a8ebcddb24a45da89d5e917e6cb9 -https://conda.anaconda.org/conda-forge/noarch/spectra-0.0.11-pyhd8ed1ab_2.conda#472239e4eb7b5a84bb96b3ed7e3a596a -https://conda.anaconda.org/conda-forge/linux-64/regex-2026.4.4-py314h5bd0f2a_0.conda#4ffb42385183c854564f1f9adcf80a63 -https://conda.anaconda.org/conda-forge/linux-64/tiktoken-0.12.0-py314h67fec18_3.conda#d705f9d8a1185a2b01cced191177a028 -https://conda.anaconda.org/conda-forge/noarch/tqdm-4.67.3-pyh8f84b5b_0.conda#e5ce43272193b38c2e9037446c1d9206 -https://conda.anaconda.org/conda-forge/noarch/typeguard-4.5.1-pyhd8ed1ab_0.conda#260af1b0a94f719de76b4e14094e9a3b -https://conda.anaconda.org/bioconda/noarch/multiqc-1.34-pyhdfd78af_0.conda#a7111ab9a6a6146b40cbce16655ac873 -https://conda.anaconda.org/conda-forge/noarch/pip-26.0.1-pyh145f28c_0.conda#09a970fbf75e8ed1aa633827ded6aa4f -https://conda.anaconda.org/conda-forge/linux-64/procps-ng-4.0.6-h18c060e_0.conda#f2c23a77b25efcad57d377b34bd84941 diff --git a/modules/nf-core/multiqc/.conda-lock/linux_arm64-bd-40bf3b435e89dc22_1.txt b/modules/nf-core/multiqc/.conda-lock/linux_arm64-bd-5c84a5000a226ab5_1.txt similarity index 74% rename from modules/nf-core/multiqc/.conda-lock/linux_arm64-bd-40bf3b435e89dc22_1.txt rename to modules/nf-core/multiqc/.conda-lock/linux_arm64-bd-5c84a5000a226ab5_1.txt index a58231a0..3d5b93db 100644 --- a/modules/nf-core/multiqc/.conda-lock/linux_arm64-bd-40bf3b435e89dc22_1.txt +++ b/modules/nf-core/multiqc/.conda-lock/linux_arm64-bd-5c84a5000a226ab5_1.txt @@ -14,120 +14,118 @@ linux-aarch64: - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-26.1.0-pyhcf101f3_0.conda -- conda: https://conda.anaconda.org/conda-forge/noarch/backports.zstd-1.3.0-py314h680f03e_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/backports.zstd-1.5.0-py314h680f03e_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/brotli-python-1.2.0-py314h352cb57_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/bzip2-1.0.8-h4777abc_9.conda -- conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda -- conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.2.25-pyhd8ed1ab_0.conda -- conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.6-pyhd8ed1ab_0.conda -- conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.1-pyh8f84b5b_1.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.5.20-hbd8a1cb_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.5.20-pyhd8ed1ab_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.7-pyhd8ed1ab_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/click-8.4.0-pyhc90fa1f_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/coloredlogs-15.0.1-pyhd8ed1ab_4.conda - conda: https://conda.anaconda.org/conda-forge/noarch/colormath-3.0.0-pyhd8ed1ab_4.conda -- conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.14.3-py314hd8ed1ab_101.conda -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/expat-2.7.4-hfae3067_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.14.5-py314hd8ed1ab_100.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/expat-2.8.1-hfae3067_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_3.conda -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/fontconfig-2.17.1-hba86a56_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/fontconfig-2.18.0-hba86a56_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-hc364b38_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/humanfriendly-10.0-pyh707e725_8.conda - conda: https://conda.anaconda.org/conda-forge/noarch/humanize-4.15.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/icu-78.3-hcab7f73_0.conda -- conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.11-pyhd8ed1ab_0.conda -- conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.8.0-pyhcf101f3_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.15-pyhcf101f3_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-9.0.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.26.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2025.9.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/kaleido-core-0.2.1-he5a581e_0.tar.bz2 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/lcms2-2.18-h9d5b58d_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/lcms2-2.19.1-h9d5b58d_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.45.1-default_h1979696_102.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/lerc-4.1.0-h52b7260_0.conda -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libblas-3.11.0-5_haddc8a3_openblas.conda -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcblas-3.11.0-5_hd72aa62_openblas.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libblas-3.11.0-7_haddc8a3_openblas.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcblas-3.11.0-7_hd72aa62_openblas.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libdeflate-1.25-h1af38f5_0.conda -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.7.4-hfae3067_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.8.1-hfae3067_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libffi-3.5.2-h376a255_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libfreetype-2.14.3-h8af1aa0_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libfreetype6-2.14.3-hdae7a39_0.conda -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-15.2.0-h8acb6b2_18.conda -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-ng-15.2.0-he9431aa_18.conda -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgfortran-15.2.0-he9431aa_18.conda -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgfortran5-15.2.0-h1b7bec0_18.conda -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-15.2.0-h8acb6b2_18.conda -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libjpeg-turbo-3.1.2-he30d5cf_0.conda -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liblapack-3.11.0-5_h88aeb00_openblas.conda -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liblzma-5.8.2-he30d5cf_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-15.2.0-h8acb6b2_19.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-ng-15.2.0-he9431aa_19.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgfortran-15.2.0-he9431aa_19.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgfortran5-15.2.0-h1b7bec0_19.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-15.2.0-h8acb6b2_19.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libjpeg-turbo-3.1.4.1-he30d5cf_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liblapack-3.11.0-7_h88aeb00_openblas.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liblzma-5.8.3-he30d5cf_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libmpdec-4.0.0-he30d5cf_1.conda -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenblas-0.3.30-pthreads_h9d3fd7e_4.conda -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libpng-1.6.55-h1abf092_0.conda -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.52.0-h10b116e_0.conda -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-15.2.0-hef695bb_18.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenblas-0.3.33-pthreads_h9d3fd7e_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libpng-1.6.58-h1abf092_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.53.1-h022381a_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-15.2.0-hef695bb_19.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libtiff-4.7.1-hdb009f0_1.conda -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuuid-2.41.3-h1022ec0_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuuid-2.42.1-h1022ec0_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libwebp-base-1.6.0-ha2e29f5_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxcb-1.17.0-h262b8f6_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.3.2-hdc9db2a_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-3.10.2-pyhcf101f3_0.conda -- conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-4.0.0-pyhd8ed1ab_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-4.2.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/markupsafe-3.0.3-py314hb76de3f_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/mathjax-2.7.7-h8af1aa0_3.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda -- conda: https://conda.anaconda.org/bioconda/noarch/multiqc-1.33-pyhdfd78af_0.conda -- conda: https://conda.anaconda.org/conda-forge/noarch/narwhals-2.18.1-pyhcf101f3_1.conda +- conda: https://conda.anaconda.org/bioconda/noarch/multiqc-1.35-pyhdfd78af_1.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/narwhals-2.21.2-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/natsort-8.4.0-pyhcf101f3_2.conda -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.5-ha32ae93_3.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.6-hf8d1292_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/networkx-3.6.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/nspr-4.38-h3ad9384_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/nss-3.118-h544fa81_0.conda -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/numpy-2.4.3-py314haac167e_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/numpy-2.4.6-py314he1698a1_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openjpeg-2.5.4-h5da879a_0.conda -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openssl-3.6.1-h546c87b_1.conda -- conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pillow-12.1.1-py314hac3e5ec_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openssl-3.6.2-h546c87b_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.2-pyhc364b38_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pillow-12.2.0-py314hac3e5ec_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/plotly-6.6.0-pyhd8ed1ab_0.conda -- conda: https://conda.anaconda.org/conda-forge/noarch/polars-1.39.3-pyh58ad624_1.conda -- conda: https://conda.anaconda.org/conda-forge/noarch/polars-lts-cpu-1.34.0.deprecated-hc364b38_0.conda -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/polars-runtime-32-1.39.3-py310hff09b76_1.conda -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/polars-runtime-compat-1.39.3-py310hf00a4a2_1.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/polars-1.41.0-pyh58ad624_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/polars-runtime-32-1.41.0-py310h32c7c23_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/polars-runtime-compat-1.41.0-py310hc0e61be_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/procps-ng-4.0.6-h1779866_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pthread-stubs-0.4-h86ecc28_1002.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pyaml-env-1.2.2-pyhd8ed1ab_0.conda -- conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-2.12.5-pyhcf101f3_1.conda -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pydantic-core-2.41.5-py314h451b6cc_1.conda -- conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-2.13.4-pyhcf101f3_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pydantic-core-2.46.4-py314h451b6cc_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.20.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.14.3-hb06a95a_101_cp314.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.14.5-hfd9ac0a_100_cp314.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-dotenv-1.2.2-pyhcf101f3_0.conda -- conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.14.3-h4df99d1_101.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.14.5-h4df99d1_100.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-kaleido-0.2.1-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pyyaml-6.0.3-py314h807365f_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/readline-8.3-hb682ff5_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/referencing-0.37.0-pyhcf101f3_0.conda -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/regex-2026.2.28-py314h51f160d_0.conda -- conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.5-pyhcf101f3_1.conda -- conda: https://conda.anaconda.org/conda-forge/noarch/rich-14.3.3-pyhcf101f3_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/regex-2026.5.9-py314h51f160d_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.34.2-pyhcf101f3_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/rich-15.0.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rich-click-1.9.7-pyh8f84b5b_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/rpds-py-0.30.0-py314h02b7a91_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/spectra-0.0.11-pyhd8ed1ab_2.conda -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/sqlite-3.52.0-hf1c7be2_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/sqlite-3.53.1-he8854b5_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tiktoken-0.12.0-py314h6a36e60_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tk-8.6.13-noxft_h0dc03b3_103.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tqdm-4.67.3-pyh8f84b5b_0.conda -- conda: https://conda.anaconda.org/conda-forge/noarch/typeguard-4.5.1-pyhd8ed1ab_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/typeguard-4.5.2-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda -- conda: https://conda.anaconda.org/conda-forge/noarch/typing-inspection-0.4.2-pyhd8ed1ab_1.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/typing-inspection-0.4.2-pyhcf101f3_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda -- conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.6.3-pyhd8ed1ab_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.7.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxau-1.0.12-he30d5cf_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxdmcp-1.1.5-he30d5cf_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/yaml-0.2.5-h80f16a2_3.conda -- conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/zipp-4.1.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zlib-ng-2.3.3-ha7cb516_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zstd-1.5.7-h85ac4a6_6.conda packages: @@ -173,15 +171,15 @@ license: MIT license_family: MIT size: 64927 timestamp: 1773935801332 -- conda: https://conda.anaconda.org/conda-forge/noarch/backports.zstd-1.3.0-py314h680f03e_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/backports.zstd-1.5.0-py314h680f03e_0.conda noarch: generic -sha256: c31ab719d256bc6f89926131e88ecd0f0c5d003fe8481852c6424f4ec6c7eb29 -md5: a2ac7763a9ac75055b68f325d3255265 +sha256: a1c97297e867776760489537bc5ae36fa83a154be30e3b79385a39ca4cb058fe +md5: 1133126d840e75287d83947be3fc3e71 depends: - python >=3.14 license: BSD-3-Clause AND MIT AND EPL-2.0 -size: 7514 -timestamp: 1767044983590 +size: 7533 +timestamp: 1778594057496 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/brotli-python-1.2.0-py314h352cb57_1.conda sha256: 5a5b0cdcd7ed89c6a8fb830924967f6314a2b71944bc1ebc2c105781ba97aa75 md5: a1b5c571a0923a205d663d8678df4792 @@ -206,42 +204,42 @@ license: bzip2-1.0.6 license_family: BSD size: 192412 timestamp: 1771350241232 -- conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda -sha256: 67cc7101b36421c5913a1687ef1b99f85b5d6868da3abbf6ec1a4181e79782fc -md5: 4492fd26db29495f0ba23f146cd5638d +- conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.5.20-hbd8a1cb_0.conda +sha256: 9812a303a1395e1dafbd92e5bc8a1ff6013bcbba0a09c7f03a8d23e43560aa9b +md5: 489b8e97e666c93f68fdb35c3c9b957f depends: - __unix license: ISC -size: 147413 -timestamp: 1772006283803 -- conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.2.25-pyhd8ed1ab_0.conda -sha256: a6b118fd1ed6099dc4fc03f9c492b88882a780fadaef4ed4f93dc70757713656 -md5: 765c4d97e877cdbbb88ff33152b86125 +size: 129868 +timestamp: 1779289852439 +- conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.5.20-pyhd8ed1ab_0.conda +sha256: 645655a3510e38e625da136595f3f16f2130c3263630cc3bc8f60f619ddbe490 +md5: 9fefff2f745ea1cc2ef15211a20c054a depends: - python >=3.10 license: ISC -size: 151445 -timestamp: 1772001170301 -- conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.6-pyhd8ed1ab_0.conda -sha256: d86dfd428b2e3c364fa90e07437c8405d635aa4ef54b25ab51d9c712be4112a5 -md5: 49ee13eb9b8f44d63879c69b8a40a74b +size: 134201 +timestamp: 1779285131141 +- conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.7-pyhd8ed1ab_0.conda +sha256: 3f9483d62ce24ecd063f8a5a714448445dc8d9e201147c46699fc0033e824457 +md5: a9167b9571f3baa9d448faa2139d1089 depends: - python >=3.10 license: MIT license_family: MIT -size: 58510 -timestamp: 1773660086450 -- conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.1-pyh8f84b5b_1.conda -sha256: 38cfe1ee75b21a8361c8824f5544c3866f303af1762693a178266d7f198e8715 -md5: ea8a6c3256897cc31263de9f455e25d9 +size: 58872 +timestamp: 1775127203018 +- conda: https://conda.anaconda.org/conda-forge/noarch/click-8.4.0-pyhc90fa1f_0.conda +sha256: 99ab8ef815c4520cce3a7482c2513f377c14348206857661d84c76a55e030f97 +md5: 003767c47f1f0a474c4de268b57839c3 depends: -- python >=3.10 - __unix - python +- python >=3.10 license: BSD-3-Clause license_family: BSD -size: 97676 -timestamp: 1764518652276 +size: 104631 +timestamp: 1779108494556 - conda: https://conda.anaconda.org/conda-forge/noarch/coloredlogs-15.0.1-pyhd8ed1ab_4.conda sha256: 8021c76eeadbdd5784b881b165242db9449783e12ce26d6234060026fd6a8680 md5: b866ff7007b934d564961066c8195983 @@ -263,26 +261,26 @@ license: BSD-3-Clause license_family: BSD size: 39326 timestamp: 1735759976140 -- conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.14.3-py314hd8ed1ab_101.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.14.5-py314hd8ed1ab_100.conda noarch: generic -sha256: 91b06300879df746214f7363d6c27c2489c80732e46a369eb2afc234bcafb44c -md5: 3bb89e4f795e5414addaa531d6b1500a +sha256: 777882d2685f368417f31bbe1b28f73687fc6c8f6a5768bda20ffeefa6b07f5b +md5: a749029ce5d0632a913db19d17f944ab depends: - python >=3.14,<3.15.0a0 - python_abi * *_cp314 license: Python-2.0 -size: 50078 -timestamp: 1770674447292 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/expat-2.7.4-hfae3067_0.conda -sha256: 5f087bef054c681edcaae84a8c2230585b938691e371ff92957a30707b7fcdf7 -md5: b304307db639831ad7caabd2eac6fca6 +size: 50212 +timestamp: 1779236682725 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/expat-2.8.1-hfae3067_0.conda +sha256: a9cd5eb1700e11cc39acc36630a2d72a4e317943bd7c5695cd8804419f04ff42 +md5: 89f0247b3cea528d8ad1a6664a313153 depends: -- libexpat 2.7.4 hfae3067_0 +- libexpat 2.8.1 hfae3067_0 - libgcc >=14 license: MIT license_family: MIT -size: 137701 -timestamp: 1771259543650 +size: 140114 +timestamp: 1779278679081 - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 sha256: 58d7f40d2940dd0a8aa28651239adbf5613254df0f75789919c4e6762054403b md5: 0c96522c6bdaed4b1566d11387caaf45 @@ -311,20 +309,20 @@ license: LicenseRef-Ubuntu-Font-Licence-Version-1.0 license_family: Other size: 1620504 timestamp: 1727511233259 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/fontconfig-2.17.1-hba86a56_0.conda -sha256: 835aff8615dd8d8fff377679710ce81b8a2c47b6404e21a92fb349fda193a15c -md5: 0fed1ff55f4938a65907f3ecf62609db +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/fontconfig-2.18.0-hba86a56_0.conda +sha256: 1805f4ab3d9e1734a5a17abccc2cb0fdade51d4d5f29bdc410600ea0115ec050 +md5: b660d59a9d0fb3297327418624acaec3 depends: -- libexpat >=2.7.4,<3.0a0 -- libfreetype >=2.14.1 -- libfreetype6 >=2.14.1 +- libexpat >=2.8.1,<3.0a0 +- libfreetype >=2.14.3 +- libfreetype6 >=2.14.3 - libgcc >=14 -- libuuid >=2.41.3,<3.0a0 -- libzlib >=1.3.1,<2.0a0 +- libuuid >=2.42.1,<3.0a0 +- libzlib >=1.3.2,<2.0a0 license: MIT license_family: MIT -size: 279044 -timestamp: 1771382728182 +size: 293348 +timestamp: 1779421661332 - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-hc364b38_1.conda sha256: 54eea8469786bc2291cc40bca5f46438d3e062a399e8f53f013b6a9f50e98333 md5: a7970cd949a077b7cb9696379d338681 @@ -386,36 +384,26 @@ license: MIT license_family: MIT size: 17397 timestamp: 1737618427549 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/icu-78.3-hcab7f73_0.conda -sha256: 49ba6aed2c6b482bb0ba41078057555d29764299bc947b990708617712ef6406 -md5: 546da38c2fa9efacf203e2ad3f987c59 -depends: -- libgcc >=14 -- libstdcxx >=14 -license: MIT -license_family: MIT -size: 12837286 -timestamp: 1773822650615 -- conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.11-pyhd8ed1ab_0.conda -sha256: ae89d0299ada2a3162c2614a9d26557a92aa6a77120ce142f8e0109bbf0342b0 -md5: 53abe63df7e10a6ba605dc5f9f961d36 +- conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.15-pyhcf101f3_0.conda +sha256: 3d25f9f6f7ab3e1ce6429fc8c8aae0335cf446692e715068488536d220cc43de +md5: 1b9083b7f00609605d1483dbc6071a81 depends: - python >=3.10 +- python license: BSD-3-Clause license_family: BSD -size: 50721 -timestamp: 1760286526795 -- conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.8.0-pyhcf101f3_0.conda -sha256: 82ab2a0d91ca1e7e63ab6a4939356667ef683905dea631bc2121aa534d347b16 -md5: 080594bf4493e6bae2607e65390c520a +size: 62642 +timestamp: 1779294335905 +- conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-9.0.0-pyhcf101f3_0.conda +sha256: 43e2a5497cad1598ff88a3e69f69bc88b7b8f141fa63c60eab5db296317318b8 +md5: ffc17e785d64e12fc311af9184221839 depends: - python >=3.10 - zipp >=3.20 - python license: Apache-2.0 -license_family: APACHE -size: 34387 -timestamp: 1773931568510 +size: 34766 +timestamp: 1779714582554 - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda sha256: fc9ca7348a4f25fed2079f2153ecdcf5f9cf2a0bc36c4172420ca09e1849df7b md5: 04558c96691bed63104678757beb4f8d @@ -469,17 +457,17 @@ license: MIT license_family: MIT size: 65750397 timestamp: 1615199465742 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/lcms2-2.18-h9d5b58d_0.conda -sha256: 379ef5e91a587137391a6149755d0e929f1a007d2dcb211318ac670a46c8596f -md5: bb960f01525b5e001608afef9d47b79c +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/lcms2-2.19.1-h9d5b58d_0.conda +sha256: 1e5f68e4b36a0e1a278c6dc026bc3d7775518a15832cbc9d7fc1c0e4c47784b1 +md5: b1f8bee3c53a6d2c103fb4a1ae44f5c4 depends: - libgcc >=14 -- libjpeg-turbo >=3.1.2,<4.0a0 +- libjpeg-turbo >=3.1.4.1,<4.0a0 - libtiff >=4.7.1,<4.8.0a0 license: MIT license_family: MIT -size: 293039 -timestamp: 1768184778398 +size: 296899 +timestamp: 1778079402392 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.45.1-default_h1979696_102.conda sha256: 7abd913d81a9bf00abb699e8987966baa2065f5132e37e815f92d90fc6bba530 md5: a21644fc4a83da26452a718dc9468d5f @@ -501,37 +489,37 @@ license: Apache-2.0 license_family: Apache size: 240444 timestamp: 1773114901155 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libblas-3.11.0-5_haddc8a3_openblas.conda -build_number: 5 -sha256: 700f3c03d0fba8e687a345404a45fbabe781c1cf92242382f62cef2948745ec4 -md5: 5afcea37a46f76ec1322943b3c4dfdc0 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libblas-3.11.0-7_haddc8a3_openblas.conda +build_number: 7 +sha256: f27ba323c2f1e1731b5e880fe520f178f55047f25be94f77e649605b2343c066 +md5: e8d07b777f6ff1fab69665336561910b depends: -- libopenblas >=0.3.30,<0.3.31.0a0 -- libopenblas >=0.3.30,<1.0a0 +- libopenblas >=0.3.33,<0.3.34.0a0 +- libopenblas >=0.3.33,<1.0a0 constrains: -- mkl <2026 -- libcblas 3.11.0 5*_openblas -- liblapack 3.11.0 5*_openblas -- liblapacke 3.11.0 5*_openblas -- blas 2.305 openblas +- liblapack 3.11.0 7*_openblas +- libcblas 3.11.0 7*_openblas +- mkl <2027 +- blas 2.307 openblas +- liblapacke 3.11.0 7*_openblas license: BSD-3-Clause license_family: BSD -size: 18369 -timestamp: 1765818610617 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcblas-3.11.0-5_hd72aa62_openblas.conda -build_number: 5 -sha256: 3fad5c9de161dccb4e42c8b1ae8eccb33f4ed56bccbcced9cbb0956ae7869e61 -md5: 0b2f1143ae2d0aa4c991959d0daaf256 -depends: -- libblas 3.11.0 5_haddc8a3_openblas +size: 18696 +timestamp: 1778489796402 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcblas-3.11.0-7_hd72aa62_openblas.conda +build_number: 7 +sha256: c8f0192362966df0828419f042d6f94c079e5df00ad6bd05b5e84c12b42f8cc7 +md5: 90ac57b82c055faa9be25031864b7d8f +depends: +- libblas 3.11.0 7_haddc8a3_openblas constrains: -- liblapack 3.11.0 5*_openblas -- liblapacke 3.11.0 5*_openblas -- blas 2.305 openblas +- liblapack 3.11.0 7*_openblas +- blas 2.307 openblas +- liblapacke 3.11.0 7*_openblas license: BSD-3-Clause license_family: BSD -size: 18371 -timestamp: 1765818618899 +size: 18664 +timestamp: 1778489802790 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libdeflate-1.25-h1af38f5_0.conda sha256: 48814b73bd462da6eed2e697e30c060ae16af21e9fbed30d64feaf0aad9da392 md5: a9138815598fe6b91a1d6782ca657b0c @@ -541,17 +529,17 @@ license: MIT license_family: MIT size: 71117 timestamp: 1761979776756 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.7.4-hfae3067_0.conda -sha256: 995ce3ad96d0f4b5ed6296b051a0d7b6377718f325bc0e792fbb96b0e369dad7 -md5: 57f3b3da02a50a1be2a6fe847515417d +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.8.1-hfae3067_0.conda +sha256: 1fc392b997c6ee2bd3226a7cd870d0edbcbb367e25f9f18dd4a7025fced6efc0 +md5: 513dd884361dfb8a554298ed69b58823 depends: - libgcc >=14 constrains: -- expat 2.7.4.* +- expat 2.8.1.* license: MIT license_family: MIT -size: 76564 -timestamp: 1771259530958 +size: 77140 +timestamp: 1779278671302 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libffi-3.5.2-h376a255_0.conda sha256: 3df4c539449aabc3443bbe8c492c01d401eea894603087fca2917aa4e1c2dea9 md5: 2f364feefb6a7c00423e80dcb12db62a @@ -581,90 +569,90 @@ constrains: license: GPL-2.0-only OR FTL size: 422941 timestamp: 1774301093473 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-15.2.0-h8acb6b2_18.conda -sha256: 43df385bedc1cab11993c4369e1f3b04b4ca5d0ea16cba6a0e7f18dbc129fcc9 -md5: 552567ea2b61e3a3035759b2fdb3f9a6 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-15.2.0-h8acb6b2_19.conda +sha256: 4592b096e553f67799ae70d4b6167eeda3ec74587d68c7aecbf4e7b1df136681 +md5: f35b3f52d0a2ec4ffe3c89ba135cdb9a depends: - _openmp_mutex >=4.5 constrains: -- libgcc-ng ==15.2.0=*_18 -- libgomp 15.2.0 h8acb6b2_18 +- libgomp 15.2.0 h8acb6b2_19 +- libgcc-ng ==15.2.0=*_19 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL -size: 622900 -timestamp: 1771378128706 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-ng-15.2.0-he9431aa_18.conda -sha256: 83bb0415f59634dccfa8335d4163d1f6db00a27b36666736f9842b650b92cf2f -md5: 4feebd0fbf61075a1a9c2e9b3936c257 +size: 622462 +timestamp: 1778268755949 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-ng-15.2.0-he9431aa_19.conda +sha256: 1137f93f477f56199ded24117430045a0c02cbe8b10031beac3b9ad2138539d3 +md5: 770cf892e5530f43e63cadc673e85653 depends: -- libgcc 15.2.0 h8acb6b2_18 +- libgcc 15.2.0 h8acb6b2_19 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL -size: 27568 -timestamp: 1771378136019 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgfortran-15.2.0-he9431aa_18.conda -sha256: 7dcd7dff2505d56fd5272a6e712ec912f50a46bf07dc6873a7e853694304e6e4 -md5: 41f261f5e4e2e8cbd236c2f1f15dae1b +size: 27738 +timestamp: 1778268759211 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgfortran-15.2.0-he9431aa_19.conda +sha256: e5ad94be72634233510b33ba792a3339921bd468f0b8bc6961ea05eded251d9b +md5: c7a5b5decf969ead5ecada83654164cf depends: -- libgfortran5 15.2.0 h1b7bec0_18 +- libgfortran5 15.2.0 h1b7bec0_19 constrains: -- libgfortran-ng ==15.2.0=*_18 +- libgfortran-ng ==15.2.0=*_19 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL -size: 27587 -timestamp: 1771378169244 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgfortran5-15.2.0-h1b7bec0_18.conda -sha256: 85347670dfb4a8d4c13cd7cae54138dcf2b1606b6bede42eef5507bf5f9660c6 -md5: 574d88ce3348331e962cfa5ed451b247 +size: 27728 +timestamp: 1778268784621 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgfortran5-15.2.0-h1b7bec0_19.conda +sha256: af8e9bdcaa77f133a8ee4c1ef57ef564d9c45aa262abf9f5ef9b50eb99d96407 +md5: 779dbb494de6d3d6477cab52eb34285a depends: - libgcc >=15.2.0 constrains: - libgfortran 15.2.0 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL -size: 1486341 -timestamp: 1771378148102 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-15.2.0-h8acb6b2_18.conda -sha256: fc716f11a6a8525e27a5d332ef6a689210b0d2a4dd1133edc0f530659aa9faa6 -md5: 4faa39bf919939602e594253bd673958 +size: 1487244 +timestamp: 1778268767295 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-15.2.0-h8acb6b2_19.conda +sha256: 2370ef0ffcbae5bede3c4bf136add4abc257245eb91f724c99bb4a43116c5a83 +md5: c5e8a379c4a2ec2aea4ba22758c001d9 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL -size: 588060 -timestamp: 1771378040807 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libjpeg-turbo-3.1.2-he30d5cf_0.conda -sha256: 84064c7c53a64291a585d7215fe95ec42df74203a5bf7615d33d49a3b0f08bb6 -md5: 5109d7f837a3dfdf5c60f60e311b041f +size: 587387 +timestamp: 1778268674393 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libjpeg-turbo-3.1.4.1-he30d5cf_0.conda +sha256: e97ec2af5f09f8f6ea8ecd550055c95ae80fae22015fcfadaa94eafe025c9ccc +md5: a85ba48648f6868016f2741fd9170250 depends: - libgcc >=14 constrains: - jpeg <0.0.0a license: IJG AND BSD-3-Clause AND Zlib -size: 691818 -timestamp: 1762094728337 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liblapack-3.11.0-5_h88aeb00_openblas.conda -build_number: 5 -sha256: 692222d186d3ffbc99eaf04b5b20181fd26aee1edec1106435a0a755c57cce86 -md5: 88d1e4133d1182522b403e9ba7435f04 -depends: -- libblas 3.11.0 5_haddc8a3_openblas +size: 693143 +timestamp: 1775962625956 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liblapack-3.11.0-7_h88aeb00_openblas.conda +build_number: 7 +sha256: 20b38a0156200ac65f597bf0a93914c565435f2cc58b1042581854231a99ac35 +md5: 5899cbd743cc74fd655c1ed2af7120f3 +depends: +- libblas 3.11.0 7_haddc8a3_openblas constrains: -- liblapacke 3.11.0 5*_openblas -- blas 2.305 openblas -- libcblas 3.11.0 5*_openblas +- libcblas 3.11.0 7*_openblas +- blas 2.307 openblas +- liblapacke 3.11.0 7*_openblas license: BSD-3-Clause license_family: BSD -size: 18392 -timestamp: 1765818627104 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liblzma-5.8.2-he30d5cf_0.conda -sha256: 843c46e20519651a3e357a8928352b16c5b94f4cd3d5481acc48be2e93e8f6a3 -md5: 96944e3c92386a12755b94619bae0b35 +size: 18685 +timestamp: 1778489809140 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liblzma-5.8.3-he30d5cf_0.conda +sha256: d61962b9cd54c3554361550203c64d5b65b71e3058a285b66e4b04b9769f0a5c +md5: 76298a9e6d71ee6e832a8d0d7373b261 depends: - libgcc >=14 constrains: -- xz 5.8.2.* +- xz 5.8.3.* license: 0BSD -size: 125916 -timestamp: 1768754941722 +size: 126102 +timestamp: 1775828008518 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libmpdec-4.0.0-he30d5cf_1.conda sha256: 57c0dd12d506e84541c4e877898bd2a59cca141df493d34036f18b2751e0a453 md5: 7b9813e885482e3ccb1fa212b86d7fd0 @@ -674,49 +662,48 @@ license: BSD-2-Clause license_family: BSD size: 114056 timestamp: 1769482343003 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenblas-0.3.30-pthreads_h9d3fd7e_4.conda -sha256: 794a7270ea049ec931537874cd8d2de0ef4b3cef71c055cfd8b4be6d2f4228b0 -md5: 11d7d57b7bdd01da745bbf2b67020b2e +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenblas-0.3.33-pthreads_h9d3fd7e_0.conda +sha256: b018ecfb05e75a8eea3f21f6b5c5c2a54b5178bdcf19e2e2df2735740214a8c8 +md5: 58a66cd95e9692f08abe89f55a6f3f12 depends: - libgcc >=14 - libgfortran - libgfortran5 >=14.3.0 constrains: -- openblas >=0.3.30,<0.3.31.0a0 +- openblas >=0.3.33,<0.3.34.0a0 license: BSD-3-Clause license_family: BSD -size: 4959359 -timestamp: 1763114173544 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libpng-1.6.55-h1abf092_0.conda -sha256: c7378c6b79de4d571d00ad1caf0a4c19d43c9c94077a761abb6ead44d891f907 -md5: be4088903b94ea297975689b3c3aeb27 +size: 5121336 +timestamp: 1776993423004 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libpng-1.6.58-h1abf092_0.conda +sha256: 483eaa53da40a6a3e558709d9f7b1ca388735364ae21a1ba58cf942514649c92 +md5: f51503ac45a4888bce71af9027a2ecc9 depends: - libgcc >=14 -- libzlib >=1.3.1,<2.0a0 +- libzlib >=1.3.2,<2.0a0 license: zlib-acknowledgement -size: 340156 -timestamp: 1770691477245 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.52.0-h10b116e_0.conda -sha256: 1ddaf91b44fae83856276f4cb7ce544ffe41d4b55c1e346b504c6b45f19098d6 -md5: 77891484f18eca74b8ad83694da9815e +size: 341202 +timestamp: 1776315188425 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.53.1-h022381a_0.conda +sha256: ad03b7d8e4d08001f0df88ee7a56108bb35bae4795a42b9a04cc1abfa822bd07 +md5: 2ec1119217d8f0d086e9a62f3cb0e5ea depends: -- icu >=78.2,<79.0a0 - libgcc >=14 -- libzlib >=1.3.1,<2.0a0 +- libzlib >=1.3.2,<2.0a0 license: blessing -size: 952296 -timestamp: 1772818881550 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-15.2.0-hef695bb_18.conda -sha256: 31fdb9ffafad106a213192d8319b9f810e05abca9c5436b60e507afb35a6bc40 -md5: f56573d05e3b735cb03efeb64a15f388 +size: 955361 +timestamp: 1777986487553 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-15.2.0-hef695bb_19.conda +sha256: 1dadc45e599f510dd5f97141dddcdbb9844d9f1430c1f3a38075cf1c58f87b4e +md5: 543fbc8d71f2a0baf04cf88ce96cb8bb depends: -- libgcc 15.2.0 h8acb6b2_18 +- libgcc 15.2.0 h8acb6b2_19 constrains: -- libstdcxx-ng ==15.2.0=*_18 +- libstdcxx-ng ==15.2.0=*_19 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL -size: 5541411 -timestamp: 1771378162499 +size: 5546559 +timestamp: 1778268777463 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libtiff-4.7.1-hdb009f0_1.conda sha256: 7ff79470db39e803e21b8185bc8f19c460666d5557b1378d1b1e857d929c6b39 md5: 8c6fd84f9c87ac00636007c6131e457d @@ -733,15 +720,15 @@ depends: license: HPND size: 488407 timestamp: 1762022048105 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuuid-2.41.3-h1022ec0_0.conda -sha256: c37a8e89b700646f3252608f8368e7eb8e2a44886b92776e57ad7601fc402a11 -md5: cf2861212053d05f27ec49c3784ff8bb +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuuid-2.42.1-h1022ec0_0.conda +sha256: 1628839b062e98b2192857d4da8496ac9ac6b0dbb77aa040c34efc9192c440ee +md5: 0f42f9fedd2a32d798de95a7f65c456f depends: - libgcc >=14 license: BSD-3-Clause license_family: BSD size: 43453 -timestamp: 1766271546875 +timestamp: 1779118526838 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libwebp-base-1.6.0-ha2e29f5_0.conda sha256: b03700a1f741554e8e5712f9b06dd67e76f5301292958cd3cb1ac8c6fdd9ed25 md5: 24e92d0942c799db387f5c9d7b81f1af @@ -785,16 +772,16 @@ license: BSD-3-Clause license_family: BSD size: 85893 timestamp: 1770694658918 -- conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-4.0.0-pyhd8ed1ab_0.conda -sha256: 7b1da4b5c40385791dbc3cc85ceea9fad5da680a27d5d3cb8bfaa185e304a89e -md5: 5b5203189eb668f042ac2b0826244964 +- conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-4.2.0-pyhd8ed1ab_0.conda +sha256: 0c4c35376fe920714390d46e4b8d31c876d65f18e1655899e0763ec25f2a902f +md5: 6d03368f2b2b0a5fb6839df53b2eb5e0 depends: - mdurl >=0.1,<1 - python >=3.10 license: MIT license_family: MIT -size: 64736 -timestamp: 1754951288511 +size: 69017 +timestamp: 1778169663339 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/markupsafe-3.0.3-py314hb76de3f_1.conda sha256: 383c188496d13a55658c06e61e7d4cdff2c9f9d5a0648769fca8250bece7e0ef md5: e5de3c36dd548b35ff2a8aa49208dcb3 @@ -824,9 +811,9 @@ license: MIT license_family: MIT size: 14465 timestamp: 1733255681319 -- conda: https://conda.anaconda.org/bioconda/noarch/multiqc-1.33-pyhdfd78af_0.conda -sha256: f005760b13093362fc9c997d603dd487de32ab2e821a3cbce52a42bcb8136517 -md5: 698a8a27c2b9d8a542c70cb47099a75e +- conda: https://conda.anaconda.org/bioconda/noarch/multiqc-1.35-pyhdfd78af_1.conda +sha256: e86033aa55a9e915e2d0957e770bdb81e3feb26a227d1adb17f9d6c528da6a71 +md5: cdb20309681ba3ce8f52c110e214d4f3 depends: - click - coloredlogs @@ -840,10 +827,11 @@ depends: - packaging - pillow >=10.2.0 - plotly >=5.18 -- polars-lts-cpu +- polars >=1.34.0 +- polars-runtime-compat >=1.34.0 - pyaml-env - pydantic >=2.7.1 -- python >=3.8,!=3.14.1 +- python >=3.9,!=3.14.1 - python-dotenv - python-kaleido 0.2.1 - pyyaml >=4 @@ -853,20 +841,21 @@ depends: - spectra >=0.0.10 - tiktoken - tqdm -- typeguard +- typeguard >=4 license: GPL-3.0-or-later license_family: GPL3 -size: 4198799 -timestamp: 1765300743879 -- conda: https://conda.anaconda.org/conda-forge/noarch/narwhals-2.18.1-pyhcf101f3_1.conda -sha256: 541fd4390a0687228b8578247f1536a821d9261389a65585af9d1a6f2a14e1e0 -md5: 30bec5e8f4c3969e2b1bd407c5e52afb +size: 4282188 +timestamp: 1779465338806 +- conda: https://conda.anaconda.org/conda-forge/noarch/narwhals-2.21.2-pyhcf101f3_0.conda +sha256: 70f43d62450927d51673eecd8823e14f5b3cfebdb43cda1d502eba97162bab42 +md5: 6687827c332121727ce383919e1ec8c2 depends: - python >=3.10 - python license: MIT -size: 280459 -timestamp: 1774380620329 +license_family: MIT +size: 284323 +timestamp: 1778929680962 - conda: https://conda.anaconda.org/conda-forge/noarch/natsort-8.4.0-pyhcf101f3_2.conda sha256: aeb1548eb72e4f198e72f19d242fb695b35add2ac7b2c00e0d83687052867680 md5: e941e85e273121222580723010bd4fa2 @@ -877,14 +866,14 @@ license: MIT license_family: MIT size: 39262 timestamp: 1770905275632 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.5-ha32ae93_3.conda -sha256: 91cfb655a68b0353b2833521dc919188db3d8a7f4c64bea2c6a7557b24747468 -md5: 182afabe009dc78d8b73100255ee6868 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.6-hf8d1292_0.conda +sha256: 369db85c5cd8d99dde364ce70725d76511d9c8199e5b820c740414091bf5bcca +md5: b2a43456aa56fe80c2477a5094899eff depends: -- libgcc >=13 +- libgcc >=14 license: X11 AND BSD-3-Clause -size: 926034 -timestamp: 1738196018799 +size: 960036 +timestamp: 1777422174534 - conda: https://conda.anaconda.org/conda-forge/noarch/networkx-3.6.1-pyhcf101f3_0.conda sha256: f6a82172afc50e54741f6f84527ef10424326611503c64e359e25a19a8e4c1c6 md5: a2c1eeadae7a309daed9d62c96012a2b @@ -923,24 +912,23 @@ license: MPL-2.0 license_family: MOZILLA size: 2061869 timestamp: 1763490303490 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/numpy-2.4.3-py314haac167e_0.conda -sha256: a6d42fd88afc57c3b0a57b21a12eff7492dfc419bb61ee3f74e9ba6261dabc88 -md5: 25d896c331481145720a21e5145fad65 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/numpy-2.4.6-py314he1698a1_0.conda +sha256: 04af718b911f8a3a0095481c7e283aa081a175fe626eccbc2c5644bcb2aba9a1 +md5: 8b173772deea177b45d2a133b509b3f7 depends: - python -- libgcc >=14 -- python 3.14.* *_cp314 - libstdcxx >=14 -- libcblas >=3.9.0,<4.0a0 -- liblapack >=3.9.0,<4.0a0 +- libgcc >=14 - python_abi 3.14.* *_cp314 - libblas >=3.9.0,<4.0a0 +- liblapack >=3.9.0,<4.0a0 +- libcblas >=3.9.0,<4.0a0 constrains: - numpy-base <0a0 license: BSD-3-Clause license_family: BSD -size: 8008045 -timestamp: 1773839355275 +size: 8002900 +timestamp: 1779169206742 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openjpeg-2.5.4-h5da879a_0.conda sha256: bd1bc8bdde5e6c5cbac42d462b939694e40b59be6d0698f668515908640c77b8 md5: cea962410e327262346d48d01f05936c @@ -954,47 +942,47 @@ license: BSD-2-Clause license_family: BSD size: 392636 timestamp: 1758489353577 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openssl-3.6.1-h546c87b_1.conda -sha256: 7f8048c0e75b2620254218d72b4ae7f14136f1981c5eb555ef61645a9344505f -md5: 25f5885f11e8b1f075bccf4a2da91c60 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openssl-3.6.2-h546c87b_0.conda +sha256: 348cb74c1530ac241215d047ef65d134cf797af935c97a68655319362b7e6a01 +md5: 3b129669089e4d6a5c6871dbb4669b99 depends: - ca-certificates - libgcc >=14 license: Apache-2.0 license_family: Apache -size: 3692030 -timestamp: 1769557678657 -- conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda -sha256: c1fc0f953048f743385d31c468b4a678b3ad20caffdeaa94bed85ba63049fd58 -md5: b76541e68fea4d511b1ac46a28dcd2c6 +size: 3706406 +timestamp: 1775589602258 +- conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.2-pyhc364b38_0.conda +sha256: 3906abfb6511a3bb309e39b9b1b7bc38f50a723971de2395489fd1f379255890 +md5: 4c06a92e74452cfa53623a81592e8934 depends: - python >=3.8 - python license: Apache-2.0 license_family: APACHE -size: 72010 -timestamp: 1769093650580 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pillow-12.1.1-py314hac3e5ec_0.conda -sha256: 1ca2d1616baad9bccb7ebc425ef2dcd6cebe742fbe91edf226fb606ad371ca0f -md5: d3c959c7efe560b2d7da459d69121fe9 +size: 91574 +timestamp: 1777103621679 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pillow-12.2.0-py314hac3e5ec_0.conda +sha256: 96b26c2657275ffe84ab510edf0865e21999d791485d12794edd4a71b837beb6 +md5: 87d58d103b47c4a8567b3d7666647684 depends: - python -- python 3.14.* *_cp314 - libgcc >=14 -- zlib-ng >=2.3.3,<2.4.0a0 +- python 3.14.* *_cp314 +- openjpeg >=2.5.4,<3.0a0 +- libxcb >=1.17.0,<2.0a0 - libwebp-base >=1.6.0,<2.0a0 +- zlib-ng >=2.3.3,<2.4.0a0 +- python_abi 3.14.* *_cp314 +- lcms2 >=2.18,<3.0a0 - tk >=8.6.13,<8.7.0a0 -- libfreetype >=2.14.1 -- libfreetype6 >=2.14.1 - libtiff >=4.7.1,<4.8.0a0 -- lcms2 >=2.18,<3.0a0 -- python_abi 3.14.* *_cp314 -- openjpeg >=2.5.4,<3.0a0 - libjpeg-turbo >=3.1.2,<4.0a0 -- libxcb >=1.17.0,<2.0a0 +- libfreetype >=2.14.3 +- libfreetype6 >=2.14.3 license: HPND -size: 1051828 -timestamp: 1770794010335 +size: 1062080 +timestamp: 1775060067775 - conda: https://conda.anaconda.org/conda-forge/noarch/plotly-6.6.0-pyhd8ed1ab_0.conda sha256: c418d325359fc7a0074cea7f081ef1bce26e114d2da8a0154c5d27ecc87a08e7 md5: 3e9427ee186846052e81fadde8ebe96a @@ -1008,11 +996,11 @@ license: MIT license_family: MIT size: 5251872 timestamp: 1772628857717 -- conda: https://conda.anaconda.org/conda-forge/noarch/polars-1.39.3-pyh58ad624_1.conda -sha256: d332c2d5002fc440ae37ed9679ffc21b552f18d20232390005d1dd3bce0888d3 -md5: d5a4e013a30dd8dfde9ab39f45aaf9c1 +- conda: https://conda.anaconda.org/conda-forge/noarch/polars-1.41.0-pyh58ad624_0.conda +sha256: 70fc56877c4a095ee658d61924d8019768fbae4a48437058d181fc94b0a7c4d8 +md5: 25a883fed9f1f3f21ff317a3e7c92ac4 depends: -- polars-runtime-32 ==1.39.3 +- polars-runtime-32 ==1.41.0 - python >=3.10 - python constrains: @@ -1026,27 +1014,16 @@ constrains: - pyiceberg >=0.7.1 - altair >=5.4.0 - great_tables >=0.8.0 -- polars-runtime-32 ==1.39.3 -- polars-runtime-64 ==1.39.3 -- polars-runtime-compat ==1.39.3 +- polars-runtime-32 ==1.41.0 +- polars-runtime-64 ==1.41.0 +- polars-runtime-compat ==1.41.0 license: MIT -license_family: MIT -size: 533495 -timestamp: 1774207987966 -- conda: https://conda.anaconda.org/conda-forge/noarch/polars-lts-cpu-1.34.0.deprecated-hc364b38_0.conda -sha256: e466fb31f67ba9bde18deafeb34263ca5eb25807f39ead0e9d753a8e82c4c4f4 -md5: ef0340e75068ac8ff96462749b5c98e7 -depends: -- polars >=1.34.0 -- polars-runtime-compat >=1.34.0 -license: MIT -license_family: MIT -size: 3902 -timestamp: 1760206808444 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/polars-runtime-32-1.39.3-py310hff09b76_1.conda +size: 539656 +timestamp: 1779630790562 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/polars-runtime-32-1.41.0-py310h32c7c23_0.conda noarch: python -sha256: c070be507c5a90df397a47ae0299660be437d5546d68f1bc0fa4402c9f07d59e -md5: 3c1a7c6b4ba8b9fb773ace9723f8a5db +sha256: d903b774ec09189e164207328aac157eee82fed8cc5c9ace46aeb5d1c15cb5b3 +md5: 8c08c506ed1ea8ce0ca37af5e918c58d depends: - python - libgcc >=14 @@ -1056,25 +1033,23 @@ depends: constrains: - __glibc >=2.17 license: MIT -license_family: MIT -size: 34785466 -timestamp: 1774207998285 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/polars-runtime-compat-1.39.3-py310hf00a4a2_1.conda +size: 38704429 +timestamp: 1779630794932 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/polars-runtime-compat-1.41.0-py310hc0e61be_0.conda noarch: python -sha256: 683315f1a49e47ce72bf9462419733b40b588b2b3106552d95fd4cd994e174de -md5: dd3464e2132dc3a783e76e5078870c76 +sha256: 101696adff43a654146376c62ef9611bf7946b95fa46f604fe247d77eefc6267 +md5: 65b73e4260677ee5162bdbb252e28e06 depends: - python -- libgcc >=14 - libstdcxx >=14 +- libgcc >=14 - _python_abi3_support 1.* - cpython >=3.10 constrains: - __glibc >=2.17 license: MIT -license_family: MIT -size: 34652491 -timestamp: 1774207996879 +size: 38651498 +timestamp: 1779630714016 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/procps-ng-4.0.6-h1779866_0.conda sha256: e9cbcbc94e151ada3d6dc365380aaaf591f65012c16d9a2abaea4b9b90adc402 md5: ab7288cc39545556d1bc5e71ab2df9a9 @@ -1104,24 +1079,23 @@ license: MIT license_family: MIT size: 14645 timestamp: 1736766960536 -- conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-2.12.5-pyhcf101f3_1.conda -sha256: 868569d9505b7fe246c880c11e2c44924d7613a8cdcc1f6ef85d5375e892f13d -md5: c3946ed24acdb28db1b5d63321dbca7d +- conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-2.13.4-pyhcf101f3_0.conda +sha256: 69700e31165df070e9716315e042196aa92525dae5deb5107785847ab9f4189f +md5: 729843edafc0899b3348bd3f19525b9d depends: - typing-inspection >=0.4.2 - typing_extensions >=4.14.1 - python >=3.10 -- typing-extensions >=4.6.1 - annotated-types >=0.6.0 -- pydantic-core ==2.41.5 +- pydantic-core ==2.46.4 - python license: MIT license_family: MIT -size: 340482 -timestamp: 1764434463101 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pydantic-core-2.41.5-py314h451b6cc_1.conda -sha256: f8acb2d03ebe80fed0032b9a989fc9acfb6735e3cd3f8c704b72728cb31868f6 -md5: 28f5027a1e04d67aa13fac1c5ba79693 +size: 346511 +timestamp: 1778103405862 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pydantic-core-2.46.4-py314h451b6cc_0.conda +sha256: 1a7c6b18e404c13c4d959888ecb48a9ed9de0e41be2872932b83a35278088df0 +md5: 9c3ace6aba6df14b943256095ac1281e depends: - python - typing-extensions >=4.6.0,!=4.7.0 @@ -1132,17 +1106,17 @@ constrains: - __glibc >=2.17 license: MIT license_family: MIT -size: 1828339 -timestamp: 1762989038561 -- conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda -sha256: 5577623b9f6685ece2697c6eb7511b4c9ac5fb607c9babc2646c811b428fd46a -md5: 6b6ece66ebcae2d5f326c77ef2c5a066 +size: 1780773 +timestamp: 1778084251775 +- conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.20.0-pyhd8ed1ab_0.conda +sha256: cf70b2f5ad9ae472b71235e5c8a736c9316df3705746de419b59d442e8348e86 +md5: 16c18772b340887160c79a6acc022db0 depends: -- python >=3.9 +- python >=3.10 license: BSD-2-Clause license_family: BSD -size: 889287 -timestamp: 1750615908735 +size: 893031 +timestamp: 1774796815820 - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda sha256: ba3b032fa52709ce0d9fd388f63d330a026754587a2f461117cac9ab73d8d0d8 md5: 461219d1a5bd61342293efa2c0c90eac @@ -1153,31 +1127,31 @@ license: BSD-3-Clause license_family: BSD size: 21085 timestamp: 1733217331982 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.14.3-hb06a95a_101_cp314.conda -build_number: 101 -sha256: 87e9dff5646aba87cecfbc08789634c855871a7325169299d749040b0923a356 -md5: 205011b36899ff0edf41b3db0eda5a44 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.14.5-hfd9ac0a_100_cp314.conda +build_number: 100 +sha256: d37bad5447365346166c72950ea8f49689aa49cecc1b0623d00458427627b8df +md5: d956e09feb806f5974675ce92ad81d45 depends: - bzip2 >=1.0.8,<2.0a0 - ld_impl_linux-aarch64 >=2.36.1 -- libexpat >=2.7.3,<3.0a0 +- libexpat >=2.8.0,<3.0a0 - libffi >=3.5.2,<3.6.0a0 - libgcc >=14 -- liblzma >=5.8.2,<6.0a0 +- liblzma >=5.8.3,<6.0a0 - libmpdec >=4.0.0,<5.0a0 -- libsqlite >=3.51.2,<4.0a0 -- libuuid >=2.41.3,<3.0a0 -- libzlib >=1.3.1,<2.0a0 -- ncurses >=6.5,<7.0a0 -- openssl >=3.5.5,<4.0a0 +- libsqlite >=3.53.1,<4.0a0 +- libuuid >=2.42.1,<3.0a0 +- libzlib >=1.3.2,<2.0a0 +- ncurses >=6.6,<7.0a0 +- openssl >=3.5.6,<4.0a0 - python_abi 3.14.* *_cp314 - readline >=8.3,<9.0a0 - tk >=8.6.13,<8.7.0a0 - tzdata - zstd >=1.5.7,<1.6.0a0 license: Python-2.0 -size: 37305578 -timestamp: 1770674395875 +size: 37510439 +timestamp: 1779236267040 python_site_packages_path: lib/python3.14/site-packages - conda: https://conda.anaconda.org/conda-forge/noarch/python-dotenv-1.2.2-pyhcf101f3_0.conda sha256: 74e417a768f59f02a242c25e7db0aa796627b5bc8c818863b57786072aeb85e5 @@ -1188,15 +1162,15 @@ license: BSD-3-Clause license_family: BSD size: 27848 timestamp: 1772388605021 -- conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.14.3-h4df99d1_101.conda -sha256: 233aebd94c704ac112afefbb29cf4170b7bc606e22958906f2672081bc50638a -md5: 235765e4ea0d0301c75965985163b5a1 +- conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.14.5-h4df99d1_100.conda +sha256: 41dd7da285d71d519257fa7dacb1cae060d5ebfaa5f92cba5994899d2978e943 +md5: 41954747ba952ec4b01e16c2c9e8d8ff depends: -- cpython 3.14.3.* +- cpython 3.14.5.* - python_abi * *_cp314 license: Python-2.0 -size: 50062 -timestamp: 1770674497152 +size: 50212 +timestamp: 1779236703009 - conda: https://conda.anaconda.org/conda-forge/noarch/python-kaleido-0.2.1-pyhd8ed1ab_0.tar.bz2 sha256: e17bf63a30aec33432f1ead86e15e9febde9fc40a7f869c0e766be8d2db44170 md5: 310259a5b03ff02289d7705f39e2b1d2 @@ -1253,9 +1227,9 @@ license: MIT license_family: MIT size: 51788 timestamp: 1760379115194 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/regex-2026.2.28-py314h51f160d_0.conda -sha256: 2080ecea825e1ef91a2422cc0bc63e85db9e38908ed17657fb8f41de7a6eee71 -md5: 818aa2c9f6b3c808da5e7be22a9a424c +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/regex-2026.5.9-py314h51f160d_0.conda +sha256: 05ef55f09f31eabd0a205f6b065e13fc746675f41924620977692ef0ffe5aad8 +md5: 34ed7bc9febeca70f55b757ca09c354d depends: - libgcc >=14 - python >=3.14,<3.15.0a0 @@ -1263,27 +1237,27 @@ depends: - python_abi 3.14.* *_cp314 license: Apache-2.0 AND CNRI-Python license_family: PSF -size: 408097 -timestamp: 1772255205521 -- conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.5-pyhcf101f3_1.conda -sha256: 7813c38b79ae549504b2c57b3f33394cea4f2ad083f0994d2045c2e24cb538c5 -md5: c65df89a0b2e321045a9e01d1337b182 +size: 409780 +timestamp: 1778374195988 +- conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.34.2-pyhcf101f3_0.conda +sha256: 1715246b19c9f85ee022933b4845f2fc14ac9184981b7b7d9b728bec8e9588da +md5: 4a85203c1d80c1059086ae860836ffb9 depends: - python >=3.10 -- certifi >=2017.4.17 +- certifi >=2023.5.7 - charset-normalizer >=2,<4 - idna >=2.5,<4 -- urllib3 >=1.21.1,<3 +- urllib3 >=1.26,<3 - python constrains: -- chardet >=3.0.2,<6 +- chardet >=3.0.2,<8 license: Apache-2.0 license_family: APACHE -size: 63602 -timestamp: 1766926974520 -- conda: https://conda.anaconda.org/conda-forge/noarch/rich-14.3.3-pyhcf101f3_0.conda -sha256: b06ce84d6a10c266811a7d3adbfa1c11f13393b91cc6f8a5b468277d90be9590 -md5: 7a6289c50631d620652f5045a63eb573 +size: 68709 +timestamp: 1778851103479 +- conda: https://conda.anaconda.org/conda-forge/noarch/rich-15.0.0-pyhcf101f3_0.conda +sha256: 3d6ba2c0fcdac3196ba2f0615b4104e532525ffa1335b50a2878be5ff488814a +md5: 0242025a3c804966bf71aa04eee82f66 depends: - markdown-it-py >=2.2.0 - pygments >=2.13.0,<3.0.0 @@ -1292,8 +1266,8 @@ depends: - python license: MIT license_family: MIT -size: 208472 -timestamp: 1771572730357 +size: 208577 +timestamp: 1775991661559 - conda: https://conda.anaconda.org/conda-forge/noarch/rich-click-1.9.7-pyh8f84b5b_0.conda sha256: aa3fcb167321bae51998de2e94d199109c9024f25a5a063cb1c28d8f1af33436 md5: 0c20a8ebcddb24a45da89d5e917e6cb9 @@ -1331,19 +1305,18 @@ license: MIT license_family: MIT size: 22284 timestamp: 1735770589188 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/sqlite-3.52.0-hf1c7be2_0.conda -sha256: 4f8523f5341f0d9e1547085206c6c1f71f9fc7c277443ca363a8cf98add8fc01 -md5: d9634079df93a65ee045b3c75f35cae1 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/sqlite-3.53.1-he8854b5_0.conda +sha256: 27467e4bfb0681546f149718c33b806fec078185fbaa6a4d17d440bc8f56185c +md5: 46009bdca2315a99e0a3a7d0ba1af3b9 depends: -- icu >=78.2,<79.0a0 - libgcc >=14 -- libsqlite 3.52.0 h10b116e_0 -- libzlib >=1.3.1,<2.0a0 -- ncurses >=6.5,<7.0a0 +- libsqlite 3.53.1 h022381a_0 +- libzlib >=1.3.2,<2.0a0 +- ncurses >=6.6,<7.0a0 - readline >=8.3,<9.0a0 license: blessing -size: 209416 -timestamp: 1772818891689 +size: 209964 +timestamp: 1777986493350 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tiktoken-0.12.0-py314h6a36e60_3.conda sha256: c1da41c79262b27efa168407cfecc47b20270e5fc071a8307f95a2c85fb94170 md5: 55bf7b559202236157b14323b40f19e6 @@ -1382,20 +1355,20 @@ depends: license: MPL-2.0 and MIT size: 94132 timestamp: 1770153424136 -- conda: https://conda.anaconda.org/conda-forge/noarch/typeguard-4.5.1-pyhd8ed1ab_0.conda -sha256: 39d8ae33c43cdb8f771373e149b0b4fae5a08960ac58dcca95b2f1642bb17448 -md5: 260af1b0a94f719de76b4e14094e9a3b +- conda: https://conda.anaconda.org/conda-forge/noarch/typeguard-4.5.2-pyhcf101f3_0.conda +sha256: 59d7851d32fddb5b510272e6557aa982edeb927d349648dac27f5bf01d18bb26 +md5: 4460f039b7dedf15f7df086446ca75ae depends: -- importlib-metadata >=3.6 -- python >=3.10 -- typing-extensions >=4.10.0 - typing_extensions >=4.14.0 +- python >=3.10 +- importlib-metadata >=3.6 +- python constrains: - pytest >=7 license: MIT license_family: MIT -size: 36838 -timestamp: 1771532971545 +size: 38297 +timestamp: 1778779291237 - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda sha256: 7c2df5721c742c2a47b2c8f960e718c930031663ac1174da67c1ed5999f7938c md5: edd329d7d3a4ab45dcf905899a7a6115 @@ -1405,16 +1378,17 @@ license: PSF-2.0 license_family: PSF size: 91383 timestamp: 1756220668932 -- conda: https://conda.anaconda.org/conda-forge/noarch/typing-inspection-0.4.2-pyhd8ed1ab_1.conda -sha256: 70db27de58a97aeb7ba7448366c9853f91b21137492e0b4430251a1870aa8ff4 -md5: a0a4a3035667fc34f29bfbd5c190baa6 +- conda: https://conda.anaconda.org/conda-forge/noarch/typing-inspection-0.4.2-pyhcf101f3_2.conda +sha256: 8b90d2f19f9458b8c58a55e1fcdc1d90c1603a847a47654d8a454549413ba60a +md5: 53f5409c5cfd6c5a66417d68e3f0a864 depends: - python >=3.10 - typing_extensions >=4.12.0 +- python license: MIT license_family: MIT -size: 18923 -timestamp: 1764158430324 +size: 20935 +timestamp: 1777105465795 - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda sha256: 032271135bca55aeb156cee361c81350c6f3fb203f57d024d7e5a1fc9ef18731 md5: 0caa1af407ecff61170c9437a808404d @@ -1431,9 +1405,9 @@ md5: ad659d0a2b3e47e38d829aa8cad2d610 license: LicenseRef-Public-Domain size: 119135 timestamp: 1767016325805 -- conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.6.3-pyhd8ed1ab_0.conda -sha256: af641ca7ab0c64525a96fd9ad3081b0f5bcf5d1cbb091afb3f6ed5a9eee6111a -md5: 9272daa869e03efe68833e3dc7a02130 +- conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.7.0-pyhd8ed1ab_0.conda +sha256: feff959a816f7988a0893201aa9727bbb7ee1e9cec2c4f0428269b489eb93fb4 +md5: cbb88288f74dbe6ada1c6c7d0a97223e depends: - backports.zstd >=1.0.0 - brotli-python >=1.2.0 @@ -1442,8 +1416,8 @@ depends: - python >=3.10 license: MIT license_family: MIT -size: 103172 -timestamp: 1767817860341 +size: 103560 +timestamp: 1778188657149 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxau-1.0.12-he30d5cf_1.conda sha256: e9f6e931feeb2f40e1fdbafe41d3b665f1ab6cb39c5880a1fcf9f79a3f3c84a5 md5: 1c246e1105000c3660558459e2fd6d43 @@ -1471,16 +1445,16 @@ license: MIT license_family: MIT size: 88088 timestamp: 1753484092643 -- conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda -sha256: b4533f7d9efc976511a73ef7d4a2473406d7f4c750884be8e8620b0ce70f4dae -md5: 30cd29cb87d819caead4d55184c1d115 +- conda: https://conda.anaconda.org/conda-forge/noarch/zipp-4.1.0-pyhcf101f3_0.conda +sha256: 210bd31c22bb88f5e2a167df24c95bb5f152b2ada7502f9b8c49d1f5366db423 +md5: ba3dcdc8584155c97c648ae9c044b7a3 depends: - python >=3.10 - python license: MIT license_family: MIT -size: 24194 -timestamp: 1764460141901 +size: 24190 +timestamp: 1779159948016 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zlib-ng-2.3.3-ha7cb516_1.conda sha256: 638a3a41a4fbfed52d3c60c8ef5a3693b3f12a5b1a3f58fa29f5698d0a0702e2 md5: f731af71c723065d91b4c01bb822641b diff --git a/modules/nf-core/multiqc/.conda-lock/linux_arm64-bd-d167b8012595a136_1.txt b/modules/nf-core/multiqc/.conda-lock/linux_arm64-bd-d167b8012595a136_1.txt deleted file mode 100644 index f787dbe1..00000000 --- a/modules/nf-core/multiqc/.conda-lock/linux_arm64-bd-d167b8012595a136_1.txt +++ /dev/null @@ -1,125 +0,0 @@ - -# This file may be used to create an environment using: -# $ conda create --name --file -# platform: linux-aarch64 -@EXPLICIT -https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-15.2.0-h8acb6b2_18.conda#4faa39bf919939602e594253bd673958 -https://conda.anaconda.org/conda-forge/linux-aarch64/_openmp_mutex-4.5-20_gnu.conda#468fd3bb9e1f671d36c2cbc677e56f1d -https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-15.2.0-h8acb6b2_18.conda#552567ea2b61e3a3035759b2fdb3f9a6 -https://conda.anaconda.org/conda-forge/linux-aarch64/bzip2-1.0.8-h4777abc_9.conda#840d8fc0d7b3209be93080bc20e07f2d -https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.3.2-hdc9db2a_2.conda#502006882cf5461adced436e410046d1 -https://conda.anaconda.org/conda-forge/linux-aarch64/zstd-1.5.7-h85ac4a6_6.conda#c3655f82dcea2aa179b291e7099c1fcc -https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.45.1-default_h1979696_102.conda#a21644fc4a83da26452a718dc9468d5f -https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.7.5-hfae3067_0.conda#05d1e0b30acd816a192c03dc6e164f4d -https://conda.anaconda.org/conda-forge/linux-aarch64/libffi-3.5.2-h376a255_0.conda#2f364feefb6a7c00423e80dcb12db62a -https://conda.anaconda.org/conda-forge/linux-aarch64/liblzma-5.8.3-he30d5cf_0.conda#76298a9e6d71ee6e832a8d0d7373b261 -https://conda.anaconda.org/conda-forge/linux-aarch64/libmpdec-4.0.0-he30d5cf_1.conda#7b9813e885482e3ccb1fa212b86d7fd0 -https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.53.0-h022381a_0.conda#86db4036fd08bf34e991bf48a8af405d -https://conda.anaconda.org/conda-forge/linux-aarch64/libuuid-2.42-h1022ec0_0.conda#a0b5de740d01c390bdbb46d7503c9fab -https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.5-ha32ae93_3.conda#182afabe009dc78d8b73100255ee6868 -https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.4.22-hbd8a1cb_0.conda#e18ad67cf881dcadee8b8d9e2f8e5f73 -https://conda.anaconda.org/conda-forge/linux-aarch64/openssl-3.6.2-h546c87b_0.conda#3b129669089e4d6a5c6871dbb4669b99 -https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda#0539938c55b6b1a59b560e843ad864a4 -https://conda.anaconda.org/conda-forge/linux-aarch64/readline-8.3-hb682ff5_0.conda#3d49cad61f829f4f0e0611547a9cda12 -https://conda.anaconda.org/conda-forge/linux-aarch64/tk-8.6.13-noxft_h0dc03b3_103.conda#7fc6affb9b01e567d2ef1d05b84aa6ed -https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda#ad659d0a2b3e47e38d829aa8cad2d610 -https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.14.4-hfd9ac0a_100_cp314.conda#3cfbe780f0f51cc8cba41db9f8a28bfe -https://conda.anaconda.org/conda-forge/noarch/cpython-3.14.4-py314hd8ed1ab_100.conda#f111d4cfaf1fe9496f386bc98ae94452 -https://conda.anaconda.org/conda-forge/noarch/python-gil-3.14.4-h4df99d1_100.conda#e4e60721757979d01d3964122f674959 -https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda#aaa2a381ccc56eac91d63b6c1240312f -https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda#0caa1af407ecff61170c9437a808404d -https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda#edd329d7d3a4ab45dcf905899a7a6115 -https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_1.conda#2934f256a8acfe48f6ebb4fce6cde29c -https://conda.anaconda.org/conda-forge/noarch/attrs-26.1.0-pyhcf101f3_0.conda#c6b0543676ecb1fb2d7643941fe375f2 -https://conda.anaconda.org/conda-forge/noarch/backports.zstd-1.3.0-py314h680f03e_0.conda#a2ac7763a9ac75055b68f325d3255265 -https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-15.2.0-hef695bb_18.conda#f56573d05e3b735cb03efeb64a15f388 -https://conda.anaconda.org/conda-forge/linux-aarch64/brotli-python-1.2.0-py314h352cb57_1.conda#a1b5c571a0923a205d663d8678df4792 -https://conda.anaconda.org/conda-forge/noarch/certifi-2026.4.22-pyhd8ed1ab_0.conda#929471569c93acefb30282a22060dcd5 -https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.7-pyhd8ed1ab_0.conda#a9167b9571f3baa9d448faa2139d1089 -https://conda.anaconda.org/conda-forge/noarch/click-8.3.2-pyhc90fa1f_0.conda#4d18bc3af7cfcea97bd817164672a08c -https://conda.anaconda.org/conda-forge/noarch/humanfriendly-10.0-pyh707e725_8.conda#7fe569c10905402ed47024fc481bb371 -https://conda.anaconda.org/conda-forge/noarch/coloredlogs-15.0.1-pyhd8ed1ab_4.conda#b866ff7007b934d564961066c8195983 -https://conda.anaconda.org/conda-forge/noarch/networkx-3.6.1-pyhcf101f3_0.conda#a2c1eeadae7a309daed9d62c96012a2b -https://conda.anaconda.org/conda-forge/linux-aarch64/libgfortran5-15.2.0-h1b7bec0_18.conda#574d88ce3348331e962cfa5ed451b247 -https://conda.anaconda.org/conda-forge/linux-aarch64/libgfortran-15.2.0-he9431aa_18.conda#41f261f5e4e2e8cbd236c2f1f15dae1b -https://conda.anaconda.org/conda-forge/linux-aarch64/libopenblas-0.3.32-pthreads_h9d3fd7e_0.conda#5d2ce5cf40443d055ec6d33840192265 -https://conda.anaconda.org/conda-forge/linux-aarch64/libblas-3.11.0-6_haddc8a3_openblas.conda#652bb20bb4618cacd11e17ae070f47ce -https://conda.anaconda.org/conda-forge/linux-aarch64/libcblas-3.11.0-6_hd72aa62_openblas.conda#939e300b110db241a96a1bed438c315b -https://conda.anaconda.org/conda-forge/linux-aarch64/liblapack-3.11.0-6_h88aeb00_openblas.conda#e23a27b52fb320687239e2c5ae4d7540 -https://conda.anaconda.org/conda-forge/linux-aarch64/numpy-2.4.3-py314haac167e_0.conda#25d896c331481145720a21e5145fad65 -https://conda.anaconda.org/conda-forge/noarch/colormath-3.0.0-pyhd8ed1ab_4.conda#071cf7b0ce333c81718b054066c15102 -https://conda.anaconda.org/conda-forge/linux-aarch64/expat-2.7.5-hfae3067_0.conda#d2bb0c889d94f2fdc5856392c3002976 -https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2#0c96522c6bdaed4b1566d11387caaf45 -https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2#34893075a5c9e55cdafac56607368fc6 -https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2#4d59c254e01d9cde7957100457e2d5fb -https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_3.conda#49023d73832ef61042f6a237cb2687e7 -https://conda.anaconda.org/conda-forge/linux-aarch64/libpng-1.6.58-h1abf092_0.conda#f51503ac45a4888bce71af9027a2ecc9 -https://conda.anaconda.org/conda-forge/linux-aarch64/libfreetype6-2.14.3-hdae7a39_0.conda#b99ed99e42dafb27889483b3098cace7 -https://conda.anaconda.org/conda-forge/linux-aarch64/libfreetype-2.14.3-h8af1aa0_0.conda#a229e22d4d8814a07702b0919d8e6701 -https://conda.anaconda.org/conda-forge/linux-aarch64/fontconfig-2.17.1-hba86a56_0.conda#0fed1ff55f4938a65907f3ecf62609db -https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-hc364b38_1.conda#a7970cd949a077b7cb9696379d338681 -https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda#0a802cb9888dd14eeefc611f05c40b6e -https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda#8e6923fc12f1fe8f8c4e5c9f343256ac -https://conda.anaconda.org/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda#164fc43f0b53b6e3a7bc7dce5e4f1dc9 -https://conda.anaconda.org/conda-forge/noarch/humanize-4.15.0-pyhd8ed1ab_0.conda#daddf757c3ecd6067b9af1df1f25d89e -https://conda.anaconda.org/conda-forge/noarch/idna-3.13-pyhcf101f3_0.conda#fb7130c190f9b4ec91219840a05ba3ac -https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.1-pyhcf101f3_0.conda#e1c36c6121a7c9c76f2f148f1e83b983 -https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.8.0-pyhcf101f3_0.conda#080594bf4493e6bae2607e65390c520a -https://conda.anaconda.org/conda-forge/linux-aarch64/markupsafe-3.0.3-py314hb76de3f_1.conda#e5de3c36dd548b35ff2a8aa49208dcb3 -https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda#04558c96691bed63104678757beb4f8d -https://conda.anaconda.org/conda-forge/linux-aarch64/rpds-py-0.30.0-py314h02b7a91_0.conda#e7f6ed9e60043bb5cbcc527764897f0d -https://conda.anaconda.org/conda-forge/noarch/referencing-0.37.0-pyhcf101f3_0.conda#870293df500ca7e18bedefa5838a22ab -https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2025.9.1-pyhcf101f3_0.conda#439cd0f567d697b20a8f45cb70a1005a -https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.26.0-pyhcf101f3_0.conda#ada41c863af263cc4c5fcbaff7c3e4dc -https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-ng-15.2.0-he9431aa_18.conda#4feebd0fbf61075a1a9c2e9b3936c257 -https://conda.anaconda.org/conda-forge/linux-aarch64/mathjax-2.7.7-h8af1aa0_3.tar.bz2#7b08314a6867a9d5648a1c3265e9eb8e -https://conda.anaconda.org/conda-forge/linux-aarch64/nspr-4.38-h3ad9384_0.conda#6dd4f07147774bf720075a210f8026b9 -https://conda.anaconda.org/conda-forge/linux-aarch64/nss-3.118-h544fa81_0.conda#4540f9570d12db2150f42ba036154552 -https://conda.anaconda.org/conda-forge/linux-aarch64/sqlite-3.53.0-he8854b5_0.conda#ad8164bdeece883b825c50639c0c4725 -https://conda.anaconda.org/conda-forge/linux-aarch64/kaleido-core-0.2.1-he5a581e_0.tar.bz2#4f0d284f5d11e04277b552eb1c172c7f -https://conda.anaconda.org/conda-forge/linux-aarch64/libjpeg-turbo-3.1.4.1-he30d5cf_0.conda#a85ba48648f6868016f2741fd9170250 -https://conda.anaconda.org/conda-forge/linux-aarch64/lerc-4.1.0-h52b7260_0.conda#d13423b06447113a90b5b1366d4da171 -https://conda.anaconda.org/conda-forge/linux-aarch64/libdeflate-1.25-h1af38f5_0.conda#a9138815598fe6b91a1d6782ca657b0c -https://conda.anaconda.org/conda-forge/linux-aarch64/libwebp-base-1.6.0-ha2e29f5_0.conda#24e92d0942c799db387f5c9d7b81f1af -https://conda.anaconda.org/conda-forge/linux-aarch64/libtiff-4.7.1-hdb009f0_1.conda#8c6fd84f9c87ac00636007c6131e457d -https://conda.anaconda.org/conda-forge/linux-aarch64/lcms2-2.18-h9d5b58d_0.conda#bb960f01525b5e001608afef9d47b79c -https://conda.anaconda.org/conda-forge/linux-aarch64/pthread-stubs-0.4-h86ecc28_1002.conda#bb5a90c93e3bac3d5690acf76b4a6386 -https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxau-1.0.12-he30d5cf_1.conda#1c246e1105000c3660558459e2fd6d43 -https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxdmcp-1.1.5-he30d5cf_1.conda#bff06dcde4a707339d66d45d96ceb2e2 -https://conda.anaconda.org/conda-forge/linux-aarch64/libxcb-1.17.0-h262b8f6_0.conda#cd14ee5cca2464a425b1dbfc24d90db2 -https://conda.anaconda.org/conda-forge/noarch/markdown-3.10.2-pyhcf101f3_0.conda#ba0a9221ce1063f31692c07370d062f3 -https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda#592132998493b3ff25fd7479396e8351 -https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-4.0.0-pyhd8ed1ab_0.conda#5b5203189eb668f042ac2b0826244964 -https://conda.anaconda.org/conda-forge/noarch/natsort-8.4.0-pyhcf101f3_2.conda#e941e85e273121222580723010bd4fa2 -https://conda.anaconda.org/conda-forge/noarch/packaging-26.1-pyhc364b38_0.conda#b8ae38639d323d808da535fb71e31be8 -https://conda.anaconda.org/conda-forge/linux-aarch64/openjpeg-2.5.4-h5da879a_0.conda#cea962410e327262346d48d01f05936c -https://conda.anaconda.org/conda-forge/linux-aarch64/zlib-ng-2.3.3-ha7cb516_1.conda#f731af71c723065d91b4c01bb822641b -https://conda.anaconda.org/conda-forge/linux-aarch64/pillow-12.2.0-py314hac3e5ec_0.conda#87d58d103b47c4a8567b3d7666647684 -https://conda.anaconda.org/conda-forge/noarch/narwhals-2.20.0-pyhcf101f3_0.conda#6cac1a50359219d786453c6fef819f98 -https://conda.anaconda.org/conda-forge/noarch/plotly-6.6.0-pyhd8ed1ab_0.conda#3e9427ee186846052e81fadde8ebe96a -https://conda.anaconda.org/conda-forge/linux-aarch64/polars-runtime-32-1.40.0-py310hff09b76_0.conda#d5628a33ce7652511e38fc98643dc910 -https://conda.anaconda.org/conda-forge/noarch/polars-1.40.0-pyh58ad624_0.conda#fd16be490f5403adfbf27dd4901bbe34 -https://conda.anaconda.org/conda-forge/linux-aarch64/polars-runtime-compat-1.40.0-py310hf00a4a2_0.conda#a82af0fcbb72db253dc89a7a45279372 -https://conda.anaconda.org/conda-forge/noarch/polars-lts-cpu-1.34.0.deprecated-hc364b38_0.conda#ef0340e75068ac8ff96462749b5c98e7 -https://conda.anaconda.org/conda-forge/linux-aarch64/yaml-0.2.5-h80f16a2_3.conda#032d8030e4a24fe1f72c74423a46fb88 -https://conda.anaconda.org/conda-forge/linux-aarch64/pyyaml-6.0.3-py314h807365f_1.conda#9ae2c92975118058bd720e9ba2bb7c58 -https://conda.anaconda.org/conda-forge/noarch/pyaml-env-1.2.2-pyhd8ed1ab_0.conda#e17be1016bcc3516827b836cd3e4d9dc -https://conda.anaconda.org/conda-forge/linux-aarch64/pydantic-core-2.46.3-py314h451b6cc_0.conda#1a2cb55be9a153ad6203bff6b787c240 -https://conda.anaconda.org/conda-forge/noarch/typing-inspection-0.4.2-pyhd8ed1ab_1.conda#a0a4a3035667fc34f29bfbd5c190baa6 -https://conda.anaconda.org/conda-forge/noarch/pydantic-2.13.3-pyhcf101f3_0.conda#f690e6f204efd2e5c06b57518a383d98 -https://conda.anaconda.org/conda-forge/noarch/python-dotenv-1.2.2-pyhcf101f3_0.conda#130584ad9f3a513cdd71b1fdc1244e9c -https://conda.anaconda.org/conda-forge/noarch/python-kaleido-0.2.1-pyhd8ed1ab_0.tar.bz2#310259a5b03ff02289d7705f39e2b1d2 -https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda#461219d1a5bd61342293efa2c0c90eac -https://conda.anaconda.org/conda-forge/noarch/urllib3-2.6.3-pyhd8ed1ab_0.conda#9272daa869e03efe68833e3dc7a02130 -https://conda.anaconda.org/conda-forge/noarch/requests-2.33.1-pyhcf101f3_0.conda#10afbb4dbf06ff959ad25a92ccee6e59 -https://conda.anaconda.org/conda-forge/noarch/pygments-2.20.0-pyhd8ed1ab_0.conda#16c18772b340887160c79a6acc022db0 -https://conda.anaconda.org/conda-forge/noarch/rich-15.0.0-pyhcf101f3_0.conda#0242025a3c804966bf71aa04eee82f66 -https://conda.anaconda.org/conda-forge/noarch/rich-click-1.9.7-pyh8f84b5b_0.conda#0c20a8ebcddb24a45da89d5e917e6cb9 -https://conda.anaconda.org/conda-forge/noarch/spectra-0.0.11-pyhd8ed1ab_2.conda#472239e4eb7b5a84bb96b3ed7e3a596a -https://conda.anaconda.org/conda-forge/linux-aarch64/regex-2026.4.4-py314h51f160d_0.conda#88a3dbd279e6b1faf0cddb8397866864 -https://conda.anaconda.org/conda-forge/linux-aarch64/tiktoken-0.12.0-py314h6a36e60_3.conda#55bf7b559202236157b14323b40f19e6 -https://conda.anaconda.org/conda-forge/noarch/tqdm-4.67.3-pyh8f84b5b_0.conda#e5ce43272193b38c2e9037446c1d9206 -https://conda.anaconda.org/conda-forge/noarch/typeguard-4.5.1-pyhd8ed1ab_0.conda#260af1b0a94f719de76b4e14094e9a3b -https://conda.anaconda.org/bioconda/noarch/multiqc-1.34-pyhdfd78af_0.conda#a7111ab9a6a6146b40cbce16655ac873 -https://conda.anaconda.org/conda-forge/noarch/pip-26.0.1-pyh145f28c_0.conda#09a970fbf75e8ed1aa633827ded6aa4f -https://conda.anaconda.org/conda-forge/linux-aarch64/procps-ng-4.0.6-h1779866_0.conda#ab7288cc39545556d1bc5e71ab2df9a9 diff --git a/modules/nf-core/multiqc/environment.yml b/modules/nf-core/multiqc/environment.yml index 37e7612d..7a970e2b 100644 --- a/modules/nf-core/multiqc/environment.yml +++ b/modules/nf-core/multiqc/environment.yml @@ -4,4 +4,4 @@ channels: - conda-forge - bioconda dependencies: - - bioconda::multiqc=1.34 + - bioconda::multiqc=1.35 diff --git a/modules/nf-core/multiqc/main.nf b/modules/nf-core/multiqc/main.nf index e80e8cd8..c4bc715e 100644 --- a/modules/nf-core/multiqc/main.nf +++ b/modules/nf-core/multiqc/main.nf @@ -4,8 +4,8 @@ process MULTIQC { conda "${moduleDir}/environment.yml" container "${workflow.containerEngine in ['singularity', 'apptainer'] && !task.ext.singularity_pull_docker_container - ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/1b/1bef8af6be88c5733461959c46ac8ef73d18f65277f62a1695d0e1633054f9c2/data' - : 'community.wave.seqera.io/library/multiqc:1.34--db7c73dae76bc9e6'}" + ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/c8/c8e346f4f6080eadf1253505e6ff09ef004454fc18e8d672006fd7b222cc412e/data' + : 'community.wave.seqera.io/library/multiqc:1.35--c17fb751507e9dfc'}" input: tuple val(meta), path(multiqc_files, stageAs: "?/*"), path(multiqc_config, stageAs: "?/*"), path(multiqc_logo), path(replace_names), path(sample_names) diff --git a/modules/nf-core/multiqc/meta.yml b/modules/nf-core/multiqc/meta.yml index 2facc627..27ce18d8 100644 --- a/modules/nf-core/multiqc/meta.yml +++ b/modules/nf-core/multiqc/meta.yml @@ -110,24 +110,24 @@ maintainers: containers: conda: linux/amd64: - lock_file: modules/nf-core/multiqc/.conda-lock/linux_amd64-bd-db7c73dae76bc9e6_1.txt + lock_file: modules/nf-core/multiqc/.conda-lock/linux_amd64-bd-c17fb751507e9dfc_1.txt linux/arm64: - lock_file: modules/nf-core/multiqc/.conda-lock/linux_arm64-bd-d167b8012595a136_1.txt + lock_file: modules/nf-core/multiqc/.conda-lock/linux_arm64-bd-5c84a5000a226ab5_1.txt docker: linux/amd64: - name: community.wave.seqera.io/library/multiqc:1.34--db7c73dae76bc9e6 - build_id: bd-db7c73dae76bc9e6_1 - scan_id: sc-66fc7138dbf1cf48_1 + name: community.wave.seqera.io/library/multiqc:1.35--c17fb751507e9dfc + build_id: bd-c17fb751507e9dfc_1 + scan_id: sc-3b1b3932f9846892_1 linux/arm64: - name: community.wave.seqera.io/library/multiqc:1.34--d167b8012595a136 - build_id: bd-d167b8012595a136_1 - scan_id: sc-ac701dfa631a2af9_1 + name: community.wave.seqera.io/library/multiqc:1.35--5c84a5000a226ab5 + build_id: bd-5c84a5000a226ab5_1 + scan_id: sc-0d39df41e9737bbd_1 singularity: linux/amd64: - name: oras://community.wave.seqera.io/library/multiqc:1.34--4fc8657c816047c0 - build_id: bd-4fc8657c816047c0_1 - https: https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/1b/1bef8af6be88c5733461959c46ac8ef73d18f65277f62a1695d0e1633054f9c2/data + name: oras://community.wave.seqera.io/library/multiqc:1.35--c680f2aea25ccec2 + build_id: bd-c680f2aea25ccec2_1 + https: https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/c8/c8e346f4f6080eadf1253505e6ff09ef004454fc18e8d672006fd7b222cc412e/data linux/arm64: - name: oras://community.wave.seqera.io/library/multiqc:1.34--7fbd82d945c06726 - build_id: bd-7fbd82d945c06726_1 - https: https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/9a/9a1fec9662a152683e6fcae440d0ce20920b3b89dc62d1e3a52e73f92eba0969/data + name: oras://community.wave.seqera.io/library/multiqc:1.35--c0468833d65b2f81 + build_id: bd-c0468833d65b2f81_1 + https: https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/e4/e48aa28aebc881254a499b24c3e1ce77b8df1b85a5432699ed6f72eb17ac7fb5/data diff --git a/modules/nf-core/multiqc/tests/main.nf.test.snap b/modules/nf-core/multiqc/tests/main.nf.test.snap index 7c2f370f..44899216 100644 --- a/modules/nf-core/multiqc/tests/main.nf.test.snap +++ b/modules/nf-core/multiqc/tests/main.nf.test.snap @@ -81,7 +81,7 @@ [ "MULTIQC", "multiqc", - "1.34" + "1.35" ] ] } @@ -175,7 +175,7 @@ [ "MULTIQC", "multiqc", - "1.34" + "1.35" ] ] } @@ -221,7 +221,7 @@ [ "MULTIQC", "multiqc", - "1.34" + "1.35" ] ] } @@ -314,7 +314,7 @@ [ "MULTIQC", "multiqc", - "1.34" + "1.35" ] ] } @@ -408,7 +408,7 @@ [ "MULTIQC", "multiqc", - "1.34" + "1.35" ] ] } diff --git a/modules/nf-core/picard/addorreplacereadgroups/environment.yml b/modules/nf-core/picard/addorreplacereadgroups/environment.yml new file mode 100644 index 00000000..b4ac4fe0 --- /dev/null +++ b/modules/nf-core/picard/addorreplacereadgroups/environment.yml @@ -0,0 +1,8 @@ +--- +# 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/picard + - bioconda::picard=3.4.0 diff --git a/modules/nf-core/picard/addorreplacereadgroups/main.nf b/modules/nf-core/picard/addorreplacereadgroups/main.nf new file mode 100644 index 00000000..0a323ed6 --- /dev/null +++ b/modules/nf-core/picard/addorreplacereadgroups/main.nf @@ -0,0 +1,58 @@ +process PICARD_ADDORREPLACEREADGROUPS { + tag "${meta.id}" + label 'process_low' + + conda "${moduleDir}/environment.yml" + container "${workflow.containerEngine in ['singularity', 'apptainer'] && !task.ext.singularity_pull_docker_container + ? '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) + tuple val(meta2), path(fasta), path(fai) + + output: + tuple val(meta), path("*.bam"), emit: bam, optional: true + tuple val(meta), path("*.bai"), emit: bai, optional: true + tuple val(meta), path("*.cram"), emit: cram, optional: true + tuple val("${task.process}"), val('picard'), eval("picard AddOrReplaceReadGroups --version 2>&1 | sed -n 's/.*Version://p'"), topic: versions, emit: versions_picard + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def suffix = task.ext.suffix ?: "${reads.getExtension()}" + def reference = fasta ? "--REFERENCE_SEQUENCE ${fasta}" : "" + def avail_mem = 3072 + if (!task.memory) { + log.info('[Picard AddOrReplaceReadGroups] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this.') + } + else { + avail_mem = (task.memory.mega * 0.8).intValue() + } + + if ("${reads}" == "${prefix}.${suffix}") { + error("Input and output names are the same, use \"task.ext.prefix\" to disambiguate!") + } + """ + picard \\ + -Xmx${avail_mem}M \\ + AddOrReplaceReadGroups \\ + ${args} \\ + ${reference} \\ + --INPUT ${reads} \\ + --OUTPUT ${prefix}.${suffix} + """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + def suffix = task.ext.suffix ?: "${reads.getExtension()}" + if ("${reads}" == "${prefix}.${suffix}") { + error("Input and output names are the same, use \"task.ext.prefix\" to disambiguate!") + } + """ + touch ${prefix}.${suffix} + """ +} diff --git a/modules/nf-core/picard/addorreplacereadgroups/meta.yml b/modules/nf-core/picard/addorreplacereadgroups/meta.yml new file mode 100644 index 00000000..907c401d --- /dev/null +++ b/modules/nf-core/picard/addorreplacereadgroups/meta.yml @@ -0,0 +1,111 @@ +name: picard_addorreplacereadgroups +description: Assigns all the reads in a file to a single new read-group +keywords: + - add + - replace + - read-group + - picard +tools: + - picard: + description: | + A set of command line tools (in Java) for manipulating high-throughput sequencing (HTS) + data and formats such as SAM/BAM/CRAM and VCF. + homepage: https://broadinstitute.github.io/picard/ + documentation: https://gatk.broadinstitute.org/hc/en-us/articles/360037226472-AddOrReplaceReadGroups-Picard- + tool_dev_url: https://github.com/broadinstitute/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}" + ontologies: [] + - - meta2: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - fasta: + type: file + description: Reference genome file + pattern: "*.{fasta,fa,fasta.gz,fa.gz}" + ontologies: [] + - fai: + type: file + description: Reference genome index file + pattern: "*.{fai,fasta.fai,fa.fai,fasta.gz.fai,fa.gz.fai}" + ontologies: [] +output: + bam: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.bam": + type: file + description: Output BAM file + 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 + 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: [] + versions_picard: + - - ${task.process}: + type: string + description: The process the versions were collected from + - picard: + type: string + description: The tool name + - "picard AddOrReplaceReadGroups --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 AddOrReplaceReadGroups --version 2>&1 | sed -n 's/.*Version://p'": + type: string + description: The command used to generate the version of the tool + +authors: + - "@sateeshperi" + - "@mjcipriano" + - "@hseabolt" + - "@cmatKhan" + - "@muffato" +maintainers: + - "@sateeshperi" + - "@mjcipriano" + - "@hseabolt" + - "@cmatKhan" + - "@muffato" diff --git a/modules/nf-core/picard/addorreplacereadgroups/tests/bam.config b/modules/nf-core/picard/addorreplacereadgroups/tests/bam.config new file mode 100644 index 00000000..132cc0f7 --- /dev/null +++ b/modules/nf-core/picard/addorreplacereadgroups/tests/bam.config @@ -0,0 +1,12 @@ +process { + withName: 'PICARD_ADDORREPLACEREADGROUPS'{ + ext.prefix = { "${meta.id}.replaced"} + ext.args = {[ + "--CREATE_INDEX", + "-LB ${meta.id}", + "-PL ILLUMINA", + "-PU bc1", + "-SM ${meta.id}" + ].join(' ').trim()} + } +} diff --git a/modules/nf-core/picard/addorreplacereadgroups/tests/cram.config b/modules/nf-core/picard/addorreplacereadgroups/tests/cram.config new file mode 100644 index 00000000..be92e72b --- /dev/null +++ b/modules/nf-core/picard/addorreplacereadgroups/tests/cram.config @@ -0,0 +1,12 @@ +process { + withName: 'PICARD_ADDORREPLACEREADGROUPS'{ + ext.prefix = { "${meta.id}.replaced"} + ext.args = {[ + "-LB ${meta.id}", + "-PL ILLUMINA", + "-PU bc1", + "-SM ${meta.id}" + ].join(' ').trim()} + ext.suffix = { "cram" } + } +} diff --git a/modules/nf-core/picard/addorreplacereadgroups/tests/main.nf.test b/modules/nf-core/picard/addorreplacereadgroups/tests/main.nf.test new file mode 100644 index 00000000..78565882 --- /dev/null +++ b/modules/nf-core/picard/addorreplacereadgroups/tests/main.nf.test @@ -0,0 +1,83 @@ + +nextflow_process { + + name "Test Process PICARD_ADDORREPLACEREADGROUPS" + script "../main.nf" + process "PICARD_ADDORREPLACEREADGROUPS" + + tag "modules" + tag "modules_nfcore" + tag "picard" + tag "picard/addorreplacereadgroups" + + test("sarscov2 - bam") { + config "./bam.config" + + when { + process { + """ + input[0] = [ [:], file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true) ] + input[1] = [ [:], [], [] ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + file(process.out.bam[0][1]).name, + file(process.out.bai[0][1]).name, + process.out.findAll { key, val -> key.startsWith("versions") } + ).match()} + ) + } + } + + test("homo_sapiens - cram") { + config "./cram.config" + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram', checkIfExists: true), ] + ] + input[1] = [ [:], file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true), file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + file(process.out.cram[0][1]).name, + process.out.findAll { key, val -> key.startsWith("versions") } + ).match()} + ) + } + } + + test("sarscov2 - bam - stub") { + config "./bam.config" + options "-stub" + when { + process { + """ + input[0] = [ [:], file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true) ] + input[1] = [ [:], [], [] ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(sanitizeOutput(process.out)).match() } + ) + } + } +} diff --git a/modules/nf-core/picard/addorreplacereadgroups/tests/main.nf.test.snap b/modules/nf-core/picard/addorreplacereadgroups/tests/main.nf.test.snap new file mode 100644 index 00000000..17295697 --- /dev/null +++ b/modules/nf-core/picard/addorreplacereadgroups/tests/main.nf.test.snap @@ -0,0 +1,73 @@ +{ + "homo_sapiens - cram": { + "content": [ + "test.replaced.cram", + { + "versions_picard": [ + [ + "PICARD_ADDORREPLACEREADGROUPS", + "picard", + "3.4.0" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.2" + }, + "timestamp": "2026-02-02T09:36:16.966842212" + }, + "sarscov2 - bam - stub": { + "content": [ + { + "bai": [ + + ], + "bam": [ + [ + { + + }, + "null.replaced.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "cram": [ + + ], + "versions_picard": [ + [ + "PICARD_ADDORREPLACEREADGROUPS", + "picard", + "3.4.0" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.4", + "nextflow": "25.10.4" + }, + "timestamp": "2026-02-19T17:34:40.3572859" + }, + "sarscov2 - bam": { + "content": [ + "null.replaced.bam", + "null.replaced.bai", + { + "versions_picard": [ + [ + "PICARD_ADDORREPLACEREADGROUPS", + "picard", + "3.4.0" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.2" + }, + "timestamp": "2026-02-02T09:36:00.935196996" + } +} \ No newline at end of file diff --git a/modules/nf-core/picard/collectmultiplemetrics/environment.yml b/modules/nf-core/picard/collectmultiplemetrics/environment.yml new file mode 100644 index 00000000..b4ac4fe0 --- /dev/null +++ b/modules/nf-core/picard/collectmultiplemetrics/environment.yml @@ -0,0 +1,8 @@ +--- +# 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/picard + - bioconda::picard=3.4.0 diff --git a/modules/nf-core/picard/collectmultiplemetrics/main.nf b/modules/nf-core/picard/collectmultiplemetrics/main.nf index 91fe9170..1aea6473 100644 --- a/modules/nf-core/picard/collectmultiplemetrics/main.nf +++ b/modules/nf-core/picard/collectmultiplemetrics/main.nf @@ -1,21 +1,21 @@ process PICARD_COLLECTMULTIPLEMETRICS { - tag "$meta.id" + tag "${meta.id}" label 'process_single' - conda "bioconda::picard=3.0.0" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/picard:3.0.0--hdfd78af_1' : - 'biocontainers/picard:3.0.0--hdfd78af_1' }" + conda "${moduleDir}/environment.yml" + container "${workflow.containerEngine in ['singularity', 'apptainer'] && !task.ext.singularity_pull_docker_container + ? '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(bam), path(bai) + tuple val(meta), path(bam), path(bai) tuple val(meta2), path(fasta) tuple val(meta3), path(fai) output: tuple val(meta), path("*_metrics"), emit: metrics - tuple val(meta), path("*.pdf") , emit: pdf - path "versions.yml" , emit: versions + tuple val(meta), path("*.pdf"), emit: pdf, optional: true + tuple val("${task.process}"), val('picard'), eval("picard CollectMultipleMetrics --version 2>&1 | sed -n 's/.*Version://p'"), topic: versions, emit: versions_picard when: task.ext.when == null || task.ext.when @@ -26,23 +26,19 @@ process PICARD_COLLECTMULTIPLEMETRICS { def reference = fasta ? "--REFERENCE_SEQUENCE ${fasta}" : "" def avail_mem = 3072 if (!task.memory) { - log.info '[Picard CollectMultipleMetrics] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this.' - } else { - avail_mem = (task.memory.mega*0.8).intValue() + log.info('[Picard CollectMultipleMetrics] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this.') + } + else { + avail_mem = (task.memory.mega * 0.8).intValue() } """ picard \\ -Xmx${avail_mem}M \\ CollectMultipleMetrics \\ - $args \\ - --INPUT $bam \\ + ${args} \\ + --INPUT ${bam} \\ --OUTPUT ${prefix}.CollectMultipleMetrics \\ - $reference - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - picard: \$(picard CollectMultipleMetrics --version 2>&1 | grep -o 'Version.*' | cut -f2- -d:) - END_VERSIONS + ${reference} """ stub: @@ -58,10 +54,5 @@ process PICARD_COLLECTMULTIPLEMETRICS { touch ${prefix}.CollectMultipleMetrics.quality_by_cycle.pdf touch ${prefix}.CollectMultipleMetrics.insert_size_histogram.pdf touch ${prefix}.CollectMultipleMetrics.quality_distribution_metrics - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - picard: \$(echo \$(picard CollectMultipleMetrics --version 2>&1) | grep -o 'Version:.*' | cut -f2- -d:) - END_VERSIONS """ } diff --git a/modules/nf-core/picard/collectmultiplemetrics/meta.yml b/modules/nf-core/picard/collectmultiplemetrics/meta.yml index 22656080..213d600b 100644 --- a/modules/nf-core/picard/collectmultiplemetrics/meta.yml +++ b/modules/nf-core/picard/collectmultiplemetrics/meta.yml @@ -15,54 +15,89 @@ 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 ] - - bam: - type: file - description: SAM/BAM/CRAM file - pattern: "*.{sam,bam,cram}" - - bai: - type: file - description: Optional SAM/BAM/CRAM file index - pattern: "*.{sai,bai,crai}" - - meta2: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'genome'] - - fasta: - type: file - description: Genome fasta file - - meta3: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'genome'] - - fai: - type: file - description: Index of FASTA file. Only needed when fasta is supplied. - pattern: "*.fai" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bam: + type: file + description: SAM/BAM/CRAM file + pattern: "*.{sam,bam,cram}" + ontologies: [] + - bai: + type: file + description: Optional SAM/BAM/CRAM file index + pattern: "*.{sai,bai,crai}" + ontologies: [] + - - meta2: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome'] + - fasta: + type: file + description: Genome fasta file + ontologies: [] + - - meta3: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome'] + - fai: + type: file + description: Index of FASTA file. Only needed when fasta is supplied. + pattern: "*.fai" + ontologies: [] output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - metrics: - type: file - description: Alignment metrics files generated by picard - pattern: "*_{metrics}" - - pdf: - type: file - description: PDF plots of metrics - pattern: "*.{pdf}" - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + metrics: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*_metrics": + type: file + description: Alignment metrics files generated by picard + pattern: "*_{metrics}" + ontologies: [] + pdf: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.pdf": + type: file + description: PDF plots of metrics + pattern: "*.{pdf}" + ontologies: [] + versions_picard: + - - ${task.process}: + type: string + description: The process the versions were collected from + - picard: + type: string + description: The tool name + - "picard CollectMultipleMetrics --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 CollectMultipleMetrics --version 2>&1 | sed -n 's/.*Version://p'": + type: string + description: The command used to generate the version of the tool + authors: - "@drpatelh" +maintainers: + - "@drpatelh" diff --git a/modules/nf-core/picard/collectmultiplemetrics/tests/main.nf.test b/modules/nf-core/picard/collectmultiplemetrics/tests/main.nf.test new file mode 100644 index 00000000..0037acab --- /dev/null +++ b/modules/nf-core/picard/collectmultiplemetrics/tests/main.nf.test @@ -0,0 +1,186 @@ + +nextflow_process { + + name "Test Process PICARD_COLLECTMULTIPLEMETRICS" + script "../main.nf" + process "PICARD_COLLECTMULTIPLEMETRICS" + + tag "modules" + tag "modules_nfcore" + tag "picard" + tag "picard/collectmultiplemetrics" + + test("test-picard-collectmultiplemetrics") { + + when { + process { + """ + input[0] = [ + [ 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] = [ + [id:'genome'], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ] + input[2] = [[id:'genome'],[]] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.metrics[0][1].collect { file(it).name }.toSorted(), + process.out.pdf[0][1].collect { file(it).name }.toSorted(), + process.out.findAll { key, val -> key.startsWith("versions") } + ).match()} + ) + } + } + + test("test-picard-collectmultiplemetrics-nofasta") { + + when { + process { + """ + input[0] = [ + [ 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] = [[id:'genome'],[]] + input[2] = [[id:'genome'],[]] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.metrics[0][1].collect { file(it).name }.toSorted(), + process.out.pdf[0][1].collect { file(it).name }.toSorted(), + process.out.findAll { key, val -> key.startsWith("versions") } + ).match()} + ) + } + } + + test("test-picard-collectmultiplemetrics-cram") { + + when { + process { + """ + input[0] = [ + [ 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] = [ + [id:'genome'], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ] + input[2] = [ + [id:'genome'], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.metrics[0][1].collect { file(it).name }.toSorted(), + process.out.pdf[0][1].collect { file(it).name }.toSorted(), + process.out.findAll { key, val -> key.startsWith("versions") } + ).match()} + ) + } + } + + test("test-picard-collectmultiplemetrics - stub") { + options "-stub" + when { + process { + """ + input[0] = [ + [ 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] = [ + [id:'genome'], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ] + input[2] = [[id:'genome'],[]] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(sanitizeOutput(process.out)).match() } + ) + } + } + + test("test-picard-collectmultiplemetrics-nofasta - stub") { + options "-stub" + when { + process { + """ + input[0] = [ + [ 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] = [[id:'genome'],[]] + input[2] = [[id:'genome'],[]] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(sanitizeOutput(process.out)).match() } + ) + } + } + + test("test-picard-collectmultiplemetrics-cram - stub") { + options "-stub" + when { + process { + """ + input[0] = [ + [ 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] = [ + [id:'genome'], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ] + input[2] = [ + [id:'genome'], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(sanitizeOutput(process.out)).match() } + ) + } + } +} diff --git a/modules/nf-core/picard/collectmultiplemetrics/tests/main.nf.test.snap b/modules/nf-core/picard/collectmultiplemetrics/tests/main.nf.test.snap new file mode 100644 index 00000000..393ed100 --- /dev/null +++ b/modules/nf-core/picard/collectmultiplemetrics/tests/main.nf.test.snap @@ -0,0 +1,242 @@ +{ + "test-picard-collectmultiplemetrics": { + "content": [ + [ + "test.CollectMultipleMetrics.alignment_summary_metrics", + "test.CollectMultipleMetrics.base_distribution_by_cycle_metrics", + "test.CollectMultipleMetrics.insert_size_metrics", + "test.CollectMultipleMetrics.quality_by_cycle_metrics", + "test.CollectMultipleMetrics.quality_distribution_metrics" + ], + [ + "test.CollectMultipleMetrics.base_distribution_by_cycle.pdf", + "test.CollectMultipleMetrics.insert_size_histogram.pdf", + "test.CollectMultipleMetrics.quality_by_cycle.pdf", + "test.CollectMultipleMetrics.quality_distribution.pdf", + "test.CollectMultipleMetrics.read_length_histogram.pdf" + ], + { + "versions_picard": [ + [ + "PICARD_COLLECTMULTIPLEMETRICS", + "picard", + "3.4.0" + ] + ] + } + ], + "timestamp": "2026-02-02T10:22:21.230301646", + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.2" + } + }, + "test-picard-collectmultiplemetrics - stub": { + "content": [ + { + "metrics": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.CollectMultipleMetrics.alignment_summary_metrics:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.CollectMultipleMetrics.base_distribution_by_cycle_metrics:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.CollectMultipleMetrics.insert_size_metrics:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.CollectMultipleMetrics.quality_by_cycle_metrics:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.CollectMultipleMetrics.quality_distribution_metrics:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "pdf": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.CollectMultipleMetrics.base_distribution_by_cycle.pdf:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.CollectMultipleMetrics.insert_size_histogram.pdf:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.CollectMultipleMetrics.quality_by_cycle.pdf:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.CollectMultipleMetrics.quality_distribution.pdf:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.CollectMultipleMetrics.read_length_histogram.pdf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "versions_picard": [ + [ + "PICARD_COLLECTMULTIPLEMETRICS", + "picard", + "3.4.0" + ] + ] + } + ], + "timestamp": "2026-02-20T10:32:38.701455244", + "meta": { + "nf-test": "0.9.4", + "nextflow": "25.10.4" + } + }, + "test-picard-collectmultiplemetrics-nofasta - stub": { + "content": [ + { + "metrics": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.CollectMultipleMetrics.alignment_summary_metrics:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.CollectMultipleMetrics.base_distribution_by_cycle_metrics:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.CollectMultipleMetrics.insert_size_metrics:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.CollectMultipleMetrics.quality_by_cycle_metrics:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.CollectMultipleMetrics.quality_distribution_metrics:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "pdf": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.CollectMultipleMetrics.base_distribution_by_cycle.pdf:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.CollectMultipleMetrics.insert_size_histogram.pdf:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.CollectMultipleMetrics.quality_by_cycle.pdf:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.CollectMultipleMetrics.quality_distribution.pdf:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.CollectMultipleMetrics.read_length_histogram.pdf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "versions_picard": [ + [ + "PICARD_COLLECTMULTIPLEMETRICS", + "picard", + "3.4.0" + ] + ] + } + ], + "timestamp": "2026-02-20T10:32:48.923918624", + "meta": { + "nf-test": "0.9.4", + "nextflow": "25.10.4" + } + }, + "test-picard-collectmultiplemetrics-cram": { + "content": [ + [ + "test.CollectMultipleMetrics.alignment_summary_metrics", + "test.CollectMultipleMetrics.base_distribution_by_cycle_metrics", + "test.CollectMultipleMetrics.insert_size_metrics", + "test.CollectMultipleMetrics.quality_by_cycle_metrics", + "test.CollectMultipleMetrics.quality_distribution_metrics" + ], + [ + "test.CollectMultipleMetrics.base_distribution_by_cycle.pdf", + "test.CollectMultipleMetrics.insert_size_histogram.pdf", + "test.CollectMultipleMetrics.quality_by_cycle.pdf", + "test.CollectMultipleMetrics.quality_distribution.pdf", + "test.CollectMultipleMetrics.read_length_histogram.pdf" + ], + { + "versions_picard": [ + [ + "PICARD_COLLECTMULTIPLEMETRICS", + "picard", + "3.4.0" + ] + ] + } + ], + "timestamp": "2026-02-02T10:23:52.23446844", + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.2" + } + }, + "test-picard-collectmultiplemetrics-nofasta": { + "content": [ + [ + "test.CollectMultipleMetrics.alignment_summary_metrics", + "test.CollectMultipleMetrics.base_distribution_by_cycle_metrics", + "test.CollectMultipleMetrics.insert_size_metrics", + "test.CollectMultipleMetrics.quality_by_cycle_metrics", + "test.CollectMultipleMetrics.quality_distribution_metrics" + ], + [ + "test.CollectMultipleMetrics.base_distribution_by_cycle.pdf", + "test.CollectMultipleMetrics.insert_size_histogram.pdf", + "test.CollectMultipleMetrics.quality_by_cycle.pdf", + "test.CollectMultipleMetrics.quality_distribution.pdf", + "test.CollectMultipleMetrics.read_length_histogram.pdf" + ], + { + "versions_picard": [ + [ + "PICARD_COLLECTMULTIPLEMETRICS", + "picard", + "3.4.0" + ] + ] + } + ], + "timestamp": "2026-02-02T10:23:27.387621193", + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.2" + } + }, + "test-picard-collectmultiplemetrics-cram - stub": { + "content": [ + { + "metrics": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.CollectMultipleMetrics.alignment_summary_metrics:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.CollectMultipleMetrics.base_distribution_by_cycle_metrics:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.CollectMultipleMetrics.insert_size_metrics:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.CollectMultipleMetrics.quality_by_cycle_metrics:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.CollectMultipleMetrics.quality_distribution_metrics:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "pdf": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.CollectMultipleMetrics.base_distribution_by_cycle.pdf:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.CollectMultipleMetrics.insert_size_histogram.pdf:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.CollectMultipleMetrics.quality_by_cycle.pdf:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.CollectMultipleMetrics.quality_distribution.pdf:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.CollectMultipleMetrics.read_length_histogram.pdf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "versions_picard": [ + [ + "PICARD_COLLECTMULTIPLEMETRICS", + "picard", + "3.4.0" + ] + ] + } + ], + "timestamp": "2026-02-20T10:32:57.11686549", + "meta": { + "nf-test": "0.9.4", + "nextflow": "25.10.4" + } + } +} \ No newline at end of file diff --git a/modules/nf-core/picard/markduplicates/environment.yml b/modules/nf-core/picard/markduplicates/environment.yml index 58b795f5..b4ac4fe0 100644 --- a/modules/nf-core/picard/markduplicates/environment.yml +++ b/modules/nf-core/picard/markduplicates/environment.yml @@ -1,7 +1,8 @@ -name: picard_markduplicates +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json channels: - conda-forge - bioconda - - defaults 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 ad0b2963..36afba6f 100644 --- a/modules/nf-core/picard/markduplicates/main.nf +++ b/modules/nf-core/picard/markduplicates/main.nf @@ -1,23 +1,22 @@ process PICARD_MARKDUPLICATES { - tag "$meta.id" + 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/picard:3.1.1--hdfd78af_0' : - 'biocontainers/picard:3.1.1--hdfd78af_0' }" + container "${workflow.containerEngine in ['singularity', 'apptainer'] && !task.ext.singularity_pull_docker_container + ? '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) - tuple val(meta2), path(fasta) - tuple val(meta3), path(fai) + tuple val(meta2), path(fasta), path(fai) output: - tuple val(meta), path("*.bam") , emit: bam, optional: true - tuple val(meta), path("*.bai") , emit: bai, optional: true + tuple val(meta), path("*.bam"), emit: bam, optional: true + 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 @@ -25,44 +24,39 @@ process PICARD_MARKDUPLICATES { script: def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" - def suffix = task.ext.suffix ?: "${reads.getExtension()}" + def suffix = task.ext.suffix ?: "${reads.getExtension()}" def reference = fasta ? "--REFERENCE_SEQUENCE ${fasta}" : "" def avail_mem = 3072 if (!task.memory) { - log.info '[Picard MarkDuplicates] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this.' - } else { - avail_mem = (task.memory.mega*0.8).intValue() + log.info('[Picard MarkDuplicates] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this.') + } + else { + avail_mem = (task.memory.mega * 0.8).intValue() } - if ("$reads" == "${prefix}.${suffix}") error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!" - + if ("${reads}" == "${prefix}.${suffix}") { + error("Input and output names are the same, use \"task.ext.prefix\" to disambiguate!") + } """ picard \\ -Xmx${avail_mem}M \\ MarkDuplicates \\ - $args \\ - --INPUT $reads \\ + ${args} \\ + --INPUT ${reads} \\ --OUTPUT ${prefix}.${suffix} \\ - $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 + ${reference} \\ + --METRICS_FILE ${prefix}.metrics.txt """ stub: def prefix = task.ext.prefix ?: "${meta.id}" - def suffix = task.ext.suffix ?: "${reads.getExtension()}" - if ("$reads" == "${prefix}.${suffix}") error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!" + def suffix = task.ext.suffix ?: "${reads.getExtension()}" + if ("${reads}" == "${prefix}.${suffix}") { + error("Input and output names are the same, use \"task.ext.prefix\" to disambiguate!") + } """ touch ${prefix}.${suffix} - 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 + touch ${prefix}.${suffix}.bai + touch ${prefix}.metrics.txt """ } diff --git a/modules/nf-core/picard/markduplicates/meta.yml b/modules/nf-core/picard/markduplicates/meta.yml index 1f0ffe16..cf95a0c5 100644 --- a/modules/nf-core/picard/markduplicates/meta.yml +++ b/modules/nf-core/picard/markduplicates/meta.yml @@ -15,60 +15,100 @@ 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: [] + - 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/tests/main.nf.test b/modules/nf-core/picard/markduplicates/tests/main.nf.test index e3e97f6c..227bfc84 100644 --- a/modules/nf-core/picard/markduplicates/tests/main.nf.test +++ b/modules/nf-core/picard/markduplicates/tests/main.nf.test @@ -18,8 +18,7 @@ nextflow_process { [ 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] = [ [:], [] ] - input[2] = [ [:], [] ] + input[1] = [ [:], [], [] ] """ } } @@ -27,9 +26,11 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(file(process.out.bam[0][1]).name).match("unsorted_bam_name") }, - { assert snapshot(path(process.out.metrics.get(0).get(1)).readLines()[0..2]).match("unsorted_bam_metrics") }, - { assert snapshot(process.out.versions).match("unsorted_bam_versions") } + { assert snapshot( + file(process.out.bam[0][1]).name, + path(process.out.metrics.get(0).get(1)).readLines()[0..2], + process.out.findAll { key, val -> key.startsWith("versions") }) + .match() } ) } } @@ -43,8 +44,7 @@ nextflow_process { [ id:'test', single_end:false ], // meta map file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true) ]) - input[1] = [ [:], [] ] - input[2] = [ [:], [] ] + input[1] = [ [:], [], [] ] """ } } @@ -52,9 +52,11 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(file(process.out.bam[0][1]).name).match("sorted_bam_name") }, - { assert snapshot(path(process.out.metrics.get(0).get(1)).readLines()[0..2]).match("sorted_bam_metrics") }, - { assert snapshot(process.out.versions).match("sorted_bam_versions") } + { assert snapshot( + file(process.out.bam[0][1]).name, + path(process.out.metrics.get(0).get(1)).readLines()[0..2], + process.out.findAll { key, val -> key.startsWith("versions") }) + .match() } ) } } @@ -70,10 +72,81 @@ nextflow_process { ]) input[1] = Channel.of([ [ id:'genome' ], - file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) + ]) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + file(process.out.cram[0][1]).name, + path(process.out.metrics.get(0).get(1)).readLines()[0..2], + process.out.findAll { key, val -> key.startsWith("versions") }) + .match() } + ) + } + } + + test("sarscov2 [unsorted bam] - stub") { + options "-stub" + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.bam', checkIfExists: true) + ]) + input[1] = [ [:], [], [] ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(sanitizeOutput(process.out)).match() } + ) + } + } + + test("sarscov2 [sorted bam] - stub") { + options "-stub" + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true) + ]) + input[1] = [ [:], [], [] ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(sanitizeOutput(process.out)).match() } + ) + } + } + + test("homo_sapiens [cram] - stub") { + options "-stub" + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram', checkIfExists: true) ]) - input[2] = Channel.of([ + input[1] = Channel.of([ [ id:'genome' ], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true), file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) ]) """ @@ -83,9 +156,7 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(file(process.out.cram[0][1]).name).match("cram_name") }, - { assert snapshot(path(process.out.metrics.get(0).get(1)).readLines()[0..2]).match("cram_metrics") }, - { assert snapshot(process.out.versions).match("cram_versions") } + { assert snapshot(sanitizeOutput(process.out)).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 eb17111e..c8878c23 100644 --- a/modules/nf-core/picard/markduplicates/tests/main.nf.test.snap +++ b/modules/nf-core/picard/markduplicates/tests/main.nf.test.snap @@ -1,110 +1,218 @@ { - "sorted_bam_versions": { + "sarscov2 [sorted bam] - stub": { "content": [ - [ - "versions.yml:md5,b699af51b1956f3810f8a7c066e0ab17" - ] + { + "bai": [ + [ + { + "id": "test", + "single_end": false + }, + "test.md.bam.bai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "bam": [ + [ + { + "id": "test", + "single_end": false + }, + "test.md.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "cram": [ + + ], + "metrics": [ + [ + { + "id": "test", + "single_end": false + }, + "test.md.metrics.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions_picard": [ + [ + "PICARD_MARKDUPLICATES", + "picard", + "3.4.0" + ] + ] + } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.4", + "nextflow": "25.10.4" }, - "timestamp": "2024-03-20T15:31:50.928021" + "timestamp": "2026-02-19T17:43:13.544887277" }, - "unsorted_bam_name": { + "sarscov2 [unsorted bam] - stub": { "content": [ - "test.marked.bam" + { + "bai": [ + [ + { + "id": "test", + "single_end": false + }, + "test.md.bam.bai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "bam": [ + [ + { + "id": "test", + "single_end": false + }, + "test.md.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "cram": [ + + ], + "metrics": [ + [ + { + "id": "test", + "single_end": false + }, + "test.md.metrics.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions_picard": [ + [ + "PICARD_MARKDUPLICATES", + "picard", + "3.4.0" + ] + ] + } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.4", + "nextflow": "25.10.4" }, - "timestamp": "2024-01-19T10:26:28.100755" + "timestamp": "2026-02-19T17:43:06.193033248" }, - "cram_metrics": { + "sarscov2 [unsorted bam]": { "content": [ + "test.md.bam", [ "## 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.bam --OUTPUT test.md.bam --METRICS_FILE test.md.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_picard": [ + [ + "PICARD_MARKDUPLICATES", + "picard", + "3.4.0" + ] + ] + } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.4", + "nextflow": "25.10.4" }, - "timestamp": "2024-03-20T15:25:47.518152" + "timestamp": "2026-02-19T17:42:40.574463587" }, - "sorted_bam_metrics": { + "sarscov2 [sorted bam]": { "content": [ + "test.md.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.md.bam --METRICS_FILE test.md.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" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-03-21T11:39:10.318331" - }, - "cram_name": { - "content": [ - "test.marked.cram" - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-03-20T15:25:47.459663" - }, - "cram_versions": { - "content": [ - [ - "versions.yml:md5,b699af51b1956f3810f8a7c066e0ab17" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-01-19T10:27:03.26989" - }, - "unsorted_bam_versions": { - "content": [ - [ - "versions.yml:md5,b699af51b1956f3810f8a7c066e0ab17" - ] + ], + { + "versions_picard": [ + [ + "PICARD_MARKDUPLICATES", + "picard", + "3.4.0" + ] + ] + } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.4", + "nextflow": "25.10.4" }, - "timestamp": "2024-03-20T15:31:24.040403" + "timestamp": "2026-02-19T17:42:49.374645492" }, - "unsorted_bam_metrics": { + "homo_sapiens [cram]": { "content": [ + "test.md.cram", [ "## 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.sorted.cram --OUTPUT test.md.cram --METRICS_FILE test.md.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_picard": [ + [ + "PICARD_MARKDUPLICATES", + "picard", + "3.4.0" + ] + ] + } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.4", + "nextflow": "25.10.4" }, - "timestamp": "2024-03-21T10:51:12.831787" + "timestamp": "2026-02-19T17:42:59.07843756" }, - "sorted_bam_name": { + "homo_sapiens [cram] - stub": { "content": [ - "test.marked.bam" + { + "bai": [ + [ + { + "id": "test", + "single_end": false + }, + "test.md.cram.bai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "bam": [ + + ], + "cram": [ + [ + { + "id": "test", + "single_end": false + }, + "test.md.cram:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "metrics": [ + [ + { + "id": "test", + "single_end": false + }, + "test.md.metrics.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions_picard": [ + [ + "PICARD_MARKDUPLICATES", + "picard", + "3.4.0" + ] + ] + } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.4", + "nextflow": "25.10.4" }, - "timestamp": "2024-01-19T10:26:45.080116" + "timestamp": "2026-02-19T17:43:20.676018462" } } \ No newline at end of file diff --git a/modules/nf-core/picard/markduplicates/tests/nextflow.config b/modules/nf-core/picard/markduplicates/tests/nextflow.config index 02818dd6..f8dd0f1c 100644 --- a/modules/nf-core/picard/markduplicates/tests/nextflow.config +++ b/modules/nf-core/picard/markduplicates/tests/nextflow.config @@ -1,6 +1,6 @@ process { withName: PICARD_MARKDUPLICATES { - ext.prefix = { "${meta.id}.marked" } + ext.prefix = { "${meta.id}.md" } ext.args = '--ASSUME_SORT_ORDER queryname' } } diff --git a/modules/nf-core/picard/markduplicates/tests/tags.yml b/modules/nf-core/picard/markduplicates/tests/tags.yml deleted file mode 100644 index 4f213d62..00000000 --- a/modules/nf-core/picard/markduplicates/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -picard/markduplicates: - - modules/nf-core/picard/markduplicates/** diff --git a/modules/nf-core/picard/mergesamfiles/main.nf b/modules/nf-core/picard/mergesamfiles/main.nf index 8e456b9c..7c20a823 100644 --- a/modules/nf-core/picard/mergesamfiles/main.nf +++ b/modules/nf-core/picard/mergesamfiles/main.nf @@ -1,18 +1,18 @@ process PICARD_MERGESAMFILES { - tag "$meta.id" + 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/08/0861295baa7c01fc593a9da94e82b44a729dcaf8da92be8e565da109aa549b25/data' : - 'community.wave.seqera.io/library/picard:3.4.0--e9963040df0a9bf6' }" + container "${workflow.containerEngine in ['singularity', 'apptainer'] && !task.ext.singularity_pull_docker_container + ? '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(bams) output: tuple val(meta), path("*.bam"), emit: bam - path "versions.yml" , emit: versions + tuple val("${task.process}"), val('picard'), eval("picard MergeSamFiles --version 2>&1 | sed -n 's/.*Version://p'"), topic: versions, emit: versions_picard when: task.ext.when == null || task.ext.when @@ -23,30 +23,24 @@ process PICARD_MERGESAMFILES { def bam_files = bams.sort() def avail_mem = 3072 if (!task.memory) { - log.info '[Picard MergeSamFiles] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this.' - } else { - avail_mem = (task.memory.mega*0.8).intValue() + log.info('[Picard MergeSamFiles] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this.') + } + else { + avail_mem = (task.memory.mega * 0.8).intValue() } if (bam_files.size() > 1) { """ picard \\ -Xmx${avail_mem}M \\ MergeSamFiles \\ - $args \\ - ${'--INPUT '+bam_files.join(' --INPUT ')} \\ + ${args} \\ + ${'--INPUT ' + bam_files.join(' --INPUT ')} \\ --OUTPUT ${prefix}.bam - cat <<-END_VERSIONS > versions.yml - "${task.process}": - picard: \$( echo \$(picard MergeSamFiles --version 2>&1) | grep -o 'Version:.*' | cut -f2- -d:) - END_VERSIONS """ - } else { + } + else { """ ln -s ${bam_files[0]} ${prefix}.bam - cat <<-END_VERSIONS > versions.yml - "${task.process}": - picard: \$( echo \$(picard MergeSamFiles --version 2>&1) | grep -o 'Version:.*' | cut -f2- -d:) - END_VERSIONS """ } @@ -54,9 +48,5 @@ process PICARD_MERGESAMFILES { def prefix = task.ext.prefix ?: "${meta.id}" """ touch ${prefix}.bam - cat <<-END_VERSIONS > versions.yml - "${task.process}": - picard: \$( echo \$(picard MergeSamFiles --version 2>&1) | grep -o 'Version:.*' | cut -f2- -d:) - END_VERSIONS """ } diff --git a/modules/nf-core/picard/mergesamfiles/meta.yml b/modules/nf-core/picard/mergesamfiles/meta.yml index a1d8783c..0ff19f33 100644 --- a/modules/nf-core/picard/mergesamfiles/meta.yml +++ b/modules/nf-core/picard/mergesamfiles/meta.yml @@ -36,13 +36,27 @@ output: description: Merged BAM file pattern: "*.{bam}" ontologies: [] + versions_picard: + - - ${task.process}: + type: string + description: The process the versions were collected from + - picard: + type: string + description: The tool name + - "picard MergeSamFiles --version 2>&1 | sed -n 's/.*Version://p'": + type: string + description: The command used to generate 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 + - picard: + type: string + description: The tool name + - "picard MergeSamFiles --version 2>&1 | sed -n 's/.*Version://p'": + type: string + description: The command used to generate the version of the tool authors: - "@drpatelh" maintainers: diff --git a/modules/nf-core/picard/mergesamfiles/tests/main.nf.test b/modules/nf-core/picard/mergesamfiles/tests/main.nf.test index f6ba7f8e..e18d882f 100644 --- a/modules/nf-core/picard/mergesamfiles/tests/main.nf.test +++ b/modules/nf-core/picard/mergesamfiles/tests/main.nf.test @@ -11,15 +11,14 @@ nextflow_process { tag "picard/mergesamfiles" test("test-picard-mergesamfiles") { - + when { process { """ input[0] = [ [ 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.single_end.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.single_end.bam', checkIfExists: true), ] + ] """ } } @@ -28,24 +27,22 @@ nextflow_process { assertAll( { assert process.success }, { assert snapshot( - bam(process.out.bam[0][1]).getReadsMD5(), - process.out.versions - ).match() - } + bam(process.out.bam[0][1]).getReadsMD5(), + process.out.findAll { key, val -> key.startsWith("versions") } + ).match()} ) } } - - test("test-picard-mergesamfiles-stub") { - options '-stub' + + test("test-picard-mergesamfiles - stub") { + options "-stub" when { process { """ input[0] = [ [ 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.single_end.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.single_end.bam', checkIfExists: true), ] + ] """ } } @@ -53,7 +50,7 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(process.out).match() } + { assert snapshot(sanitizeOutput(process.out)).match() } ) } } diff --git a/modules/nf-core/picard/mergesamfiles/tests/main.nf.test.snap b/modules/nf-core/picard/mergesamfiles/tests/main.nf.test.snap index a0769c9c..4fa2be19 100644 --- a/modules/nf-core/picard/mergesamfiles/tests/main.nf.test.snap +++ b/modules/nf-core/picard/mergesamfiles/tests/main.nf.test.snap @@ -1,8 +1,8 @@ { - "test-picard-mergesamfiles-stub": { + "test-picard-mergesamfiles - stub": { "content": [ { - "0": [ + "bam": [ [ { "id": "test", @@ -11,40 +11,38 @@ "test.bam:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "1": [ - "versions.yml:md5,31ced05bc2f0dce0b11a752a89130dcb" - ], - "bam": [ + "versions_picard": [ [ - { - "id": "test", - "single_end": false - }, - "test.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + "PICARD_MERGESAMFILES", + "picard", + "3.4.0" ] - ], - "versions": [ - "versions.yml:md5,31ced05bc2f0dce0b11a752a89130dcb" ] } ], + "timestamp": "2026-02-19T17:43:50.01825207", "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.5" - }, - "timestamp": "2025-10-31T14:53:39.007529" + "nf-test": "0.9.4", + "nextflow": "25.10.4" + } }, "test-picard-mergesamfiles": { "content": [ "730da54c088350ff625d34b95e623dca", - [ - "versions.yml:md5,31ced05bc2f0dce0b11a752a89130dcb" - ] + { + "versions_picard": [ + [ + "PICARD_MERGESAMFILES", + "picard", + "3.4.0" + ] + ] + } ], + "timestamp": "2026-02-19T17:43:43.104519248", "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.7" - }, - "timestamp": "2025-09-15T11:02:06.505999205" + "nf-test": "0.9.4", + "nextflow": "25.10.4" + } } } \ No newline at end of file diff --git a/modules/nf-core/preseq/lcextrap/environment.yml b/modules/nf-core/preseq/lcextrap/environment.yml new file mode 100644 index 00000000..a2088502 --- /dev/null +++ b/modules/nf-core/preseq/lcextrap/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::preseq=3.2.0 diff --git a/modules/nf-core/preseq/lcextrap/main.nf b/modules/nf-core/preseq/lcextrap/main.nf index 12546f0a..ba4640fb 100644 --- a/modules/nf-core/preseq/lcextrap/main.nf +++ b/modules/nf-core/preseq/lcextrap/main.nf @@ -1,12 +1,12 @@ process PRESEQ_LCEXTRAP { tag "$meta.id" label 'process_single' - label 'error_ignore' + label 'error_retry' - conda "bioconda::preseq=3.1.2" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/preseq:3.1.2--h445547b_2': - 'biocontainers/preseq:3.1.2--h445547b_2' }" + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine in ['singularity', 'apptainer'] && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/preseq:3.2.0--hdcf5f25_6': + 'quay.io/biocontainers/preseq:3.2.0--hdcf5f25_6' }" input: tuple val(meta), path(bam) @@ -14,13 +14,14 @@ 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 script: def args = task.ext.args ?: '' + args = task.attempt > 1 ? args.join(' -defects') : args // Disable testing for defects def prefix = task.ext.prefix ?: "${meta.id}" def paired_end = meta.single_end ? '' : '-pe' """ @@ -31,10 +32,12 @@ 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: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.lc_extrap.txt + touch ${prefix}.command.log """ } diff --git a/modules/nf-core/preseq/lcextrap/meta.yml b/modules/nf-core/preseq/lcextrap/meta.yml old mode 100755 new mode 100644 index 1391961c..bb309952 --- a/modules/nf-core/preseq/lcextrap/meta.yml +++ b/modules/nf-core/preseq/lcextrap/meta.yml @@ -1,48 +1,79 @@ name: preseq_lcextrap -description: Software for predicting library complexity and genome coverage in high-throughput sequencing +description: Software for predicting library complexity and genome coverage in high-throughput + sequencing keywords: - preseq - library - complexity tools: - preseq: - description: Software for predicting library complexity and genome coverage in high-throughput sequencing + description: Software for predicting library complexity and genome coverage in + high-throughput sequencing homepage: http://smithlabresearch.org/software/preseq/ documentation: http://smithlabresearch.org/wp-content/uploads/manual.pdf tool_dev_url: https://github.com/smithlabcode/preseq - licence: ["GPL"] - + identifier: biotools:preseq input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - bam: - type: file - description: BAM/CRAM/SAM file - pattern: "*.{bam,cram,sam}" - + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bam: + type: file + description: BAM/CRAM/SAM file + pattern: "*.{bam,cram,sam}" + ontologies: [] output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - - lc_extrap: - type: file - description: File containing output of Preseq lcextrap - pattern: "*.{lc_extrap.txt}" - - log: - type: file - description: Log file containing stderr produced by Preseq - pattern: "*.{log}" + lc_extrap: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.lc_extrap.txt": + type: file + description: File containing output of Preseq lcextrap + pattern: "*.{lc_extrap.txt}" + ontologies: [] + log: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.log": + type: file + description: Log file containing stderr produced by Preseq + pattern: "*.{log}" + 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" - - "@Emiller88" + - "@edmundmiller" +maintainers: + - "@drpatelh" + - "@edmundmiller" diff --git a/modules/nf-core/preseq/lcextrap/tests/main.nf.test b/modules/nf-core/preseq/lcextrap/tests/main.nf.test new file mode 100644 index 00000000..e3163ea0 --- /dev/null +++ b/modules/nf-core/preseq/lcextrap/tests/main.nf.test @@ -0,0 +1,104 @@ +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 { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:true ], // meta map + [ file(params.modules_testdata_base_path + 'delete_me/preseq/SRR1003759_5M_subset.mr', checkIfExists: true) ] + ]) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + file(process.out.log[0][1]).name, + process.out.lc_extrap, + process.out.findAll { key, val -> key.startsWith('versions') } + ).match() } + ) + } + } + + test("sarscov2 - single_end - stub") { + + options "-stub" + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:true ], // meta map + [ file(params.modules_testdata_base_path + 'delete_me/preseq/SRR1003759_5M_subset.mr', checkIfExists: true) ] + ]) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("sarscov2 - paired_end") { + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ file(params.modules_testdata_base_path + 'delete_me/preseq/SRR1003759_5M_subset.mr', checkIfExists: true) ] + ]) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + file(process.out.log[0][1]).name, + process.out.lc_extrap, + process.out.findAll { key, val -> key.startsWith('versions') } + ).match() } + ) + } + } + + test("sarscov2 - paired_end - stub") { + + options "-stub" + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ file(params.modules_testdata_base_path + 'delete_me/preseq/SRR1003759_5M_subset.mr', checkIfExists: true) ] + ]) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } +} diff --git a/modules/nf-core/preseq/lcextrap/tests/main.nf.test.snap b/modules/nf-core/preseq/lcextrap/tests/main.nf.test.snap new file mode 100644 index 00000000..ad073de6 --- /dev/null +++ b/modules/nf-core/preseq/lcextrap/tests/main.nf.test.snap @@ -0,0 +1,180 @@ +{ + "sarscov2 - single_end": { + "content": [ + "test.command.log", + [ + [ + { + "id": "test", + "single_end": true + }, + "test.lc_extrap.txt:md5,1fa5cdd601079329618f61660bee00de" + ] + ], + { + "versions_preseq": [ + [ + "PRESEQ_LCEXTRAP", + "preseq", + "3.2.0" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.3" + }, + "timestamp": "2026-02-02T14:35:59.779654786" + }, + "sarscov2 - single_end - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": true + }, + "test.lc_extrap.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": true + }, + "test.command.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + [ + "PRESEQ_LCEXTRAP", + "preseq", + "3.2.0" + ] + ], + "lc_extrap": [ + [ + { + "id": "test", + "single_end": true + }, + "test.lc_extrap.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "log": [ + [ + { + "id": "test", + "single_end": true + }, + "test.command.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions_preseq": [ + [ + "PRESEQ_LCEXTRAP", + "preseq", + "3.2.0" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.3" + }, + "timestamp": "2026-02-02T14:36:05.164534216" + }, + "sarscov2 - paired_end": { + "content": [ + "test.command.log", + [ + [ + { + "id": "test", + "single_end": false + }, + "test.lc_extrap.txt:md5,10e5ea860e87fb6f5dc10f4f20c62040" + ] + ], + { + "versions_preseq": [ + [ + "PRESEQ_LCEXTRAP", + "preseq", + "3.2.0" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.3" + }, + "timestamp": "2026-02-02T14:36:10.713888585" + }, + "sarscov2 - paired_end - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.lc_extrap.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.command.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + [ + "PRESEQ_LCEXTRAP", + "preseq", + "3.2.0" + ] + ], + "lc_extrap": [ + [ + { + "id": "test", + "single_end": false + }, + "test.lc_extrap.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "log": [ + [ + { + "id": "test", + "single_end": false + }, + "test.command.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions_preseq": [ + [ + "PRESEQ_LCEXTRAP", + "preseq", + "3.2.0" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.3" + }, + "timestamp": "2026-02-02T14:36:16.120076691" + } +} \ 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 00000000..946bb362 --- /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.23.1 + # renovate: datasource=conda depName=bioconda/samtools + - bioconda::samtools=1.23.1 diff --git a/modules/nf-core/samtools/faidx/main.nf b/modules/nf-core/samtools/faidx/main.nf new file mode 100644 index 00000000..175a53a8 --- /dev/null +++ b/modules/nf-core/samtools/faidx/main.nf @@ -0,0 +1,49 @@ +process SAMTOOLS_FAIDX { + tag "${fasta}" + label 'process_single' + + conda "${moduleDir}/environment.yml" + container "${workflow.containerEngine in ['singularity', 'apptainer'] && !task.ext.singularity_pull_docker_container + ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/8c/8c5d2818c8b9f58e1fba77ce219fdaf32087ae53e857c4a496402978af26e78c/data' + : 'community.wave.seqera.io/library/htslib_samtools:1.23.1--5b6bb4ede7e612e5'}" + + input: + tuple val(meta), path(fasta), 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 00000000..529f7a26 --- /dev/null +++ b/modules/nf-core/samtools/faidx/meta.yml @@ -0,0 +1,113 @@ +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: [] + - 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: eval + 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: eval + description: The command used to generate the version of the tool +authors: + - "@drpatelh" + - "@ewels" + - "@phue" +maintainers: + - "@maxulysse" + - "@phue" + - "@matthdsm" 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 00000000..9a86db86 --- /dev/null +++ b/modules/nf-core/samtools/faidx/tests/main.nf.test @@ -0,0 +1,253 @@ +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' ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true), + [] + ] + input[1] = false + """ + } + } + + then { + assert process.success + assertAll( + { assert snapshot(sanitizeOutput(process.out)).match()} + ) + } + } + + test("test_samtools_faidx_bgzip") { + + when { + params { + module_args = '' + } + process { + """ + input[0] = [ + [ id:'test' ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.gz', checkIfExists: true), + [] + ] + input[1] = false + """ + } + } + + then { + assert process.success + assertAll( + { assert snapshot(sanitizeOutput(process.out)).match()} + ) + } + } + + test("test_samtools_faidx_fasta") { + + when { + params { + module_args = 'MT192765.1 -o extract.fa' + } + process { + """ + input[0] = [ + [ id:'test' ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true) + ] + input[1] = false + """ + } + } + + then { + assert process.success + assertAll( + { assert snapshot(sanitizeOutput(process.out)).match()} + ) + } + } + + test("test_samtools_faidx_stub_fasta") { + + options "-stub" + when { + params { + module_args = '-o extract.fa' + } + process { + """ + input[0] = [ + [ id:'test' ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true) + ] + input[1] = false + """ + } + } + + then { + assert process.success + assertAll( + { assert snapshot(sanitizeOutput(process.out)).match()} + ) + } + } + + test("test_samtools_faidx_stub_fai") { + + options "-stub" + when { + params { + module_args = '' + } + process { + """ + input[0] = [ + [ id:'test' ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true), + [] + ] + input[1] = false + """ + } + } + + then { + assert process.success + assertAll( + { assert snapshot(sanitizeOutput(process.out)).match()} + ) + } + } + + test("test_samtools_faidx_get_sizes") { + + when { + params { + module_args = '' + } + process { + """ + input[0] = [ + [ id:'test' ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true), + [] + ] + input[1] = true + """ + } + } + + then { + assert process.success + assertAll( + { assert snapshot(sanitizeOutput(process.out)).match()} + ) + } + } + + test("test_samtools_faidx_get_sizes_bgzip") { + + when { + params { + module_args = '' + } + process { + """ + input[0] = [ + [ id:'test' ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.gz', checkIfExists: true), + [] + ] + input[1] = true + """ + } + } + + then { + assert process.success + assertAll( + { assert snapshot(sanitizeOutput(process.out)).match()} + ) + } + } + + test("test_samtools_faidx_get_sizes - stub") { + + options "-stub" + + when { + params { + module_args = '' + } + process { + """ + input[0] = [ + [ id:'test' ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true), + [] + ] + input[1] = true + """ + } + } + + then { + assert process.success + assertAll( + { assert snapshot(sanitizeOutput(process.out)).match()} + ) + } + } + + test("test_samtools_faidx_get_sizes_bgzip - stub") { + + options "-stub" + + when { + params { + module_args = '' + } + process { + """ + input[0] = [ + [ id:'test' ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.gz', checkIfExists: true), + [] + ] + input[1] = true + """ + } + } + + then { + assert process.success + assertAll( + { assert snapshot(sanitizeOutput(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 00000000..64fe7fc4 --- /dev/null +++ b/modules/nf-core/samtools/faidx/tests/main.nf.test.snap @@ -0,0 +1,352 @@ +{ + "test_samtools_faidx": { + "content": [ + { + "fa": [ + + ], + "fai": [ + [ + { + "id": "test" + }, + "genome.fasta.fai:md5,9da2a56e2853dc8c0b86a9e7229c9fe5" + ] + ], + "gzi": [ + + ], + "sizes": [ + + ], + "versions_samtools": [ + [ + "SAMTOOLS_FAIDX", + "samtools", + "1.23.1" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.4" + }, + "timestamp": "2026-03-19T08:57:29.747964" + }, + "test_samtools_faidx_get_sizes_bgzip - stub": { + "content": [ + { + "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.23.1" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.4" + }, + "timestamp": "2026-03-19T08:58:10.04235" + }, + "test_samtools_faidx_get_sizes": { + "content": [ + { + "fa": [ + + ], + "fai": [ + [ + { + "id": "test" + }, + "genome.fasta.fai:md5,9da2a56e2853dc8c0b86a9e7229c9fe5" + ] + ], + "gzi": [ + + ], + "sizes": [ + [ + { + "id": "test" + }, + "genome.fasta.sizes:md5,a57c401f27ae5133823fb09fb21c8a3c" + ] + ], + "versions_samtools": [ + [ + "SAMTOOLS_FAIDX", + "samtools", + "1.23.1" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.4" + }, + "timestamp": "2026-03-19T08:57:55.552612" + }, + "test_samtools_faidx_bgzip": { + "content": [ + { + "fa": [ + + ], + "fai": [ + [ + { + "id": "test" + }, + "genome.fasta.gz.fai:md5,9da2a56e2853dc8c0b86a9e7229c9fe5" + ] + ], + "gzi": [ + [ + { + "id": "test" + }, + "genome.fasta.gz.gzi:md5,7dea362b3fac8e00956a4952a3d4f474" + ] + ], + "sizes": [ + + ], + "versions_samtools": [ + [ + "SAMTOOLS_FAIDX", + "samtools", + "1.23.1" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.4" + }, + "timestamp": "2026-03-19T08:57:34.346045" + }, + "test_samtools_faidx_fasta": { + "content": [ + { + "fa": [ + [ + { + "id": "test" + }, + "extract.fa:md5,6a0774a0ad937ba0bfd2ac7457d90f36" + ] + ], + "fai": [ + + ], + "gzi": [ + + ], + "sizes": [ + + ], + "versions_samtools": [ + [ + "SAMTOOLS_FAIDX", + "samtools", + "1.23.1" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.4" + }, + "timestamp": "2026-03-19T08:57:39.136814" + }, + "test_samtools_faidx_get_sizes - stub": { + "content": [ + { + "fa": [ + + ], + "fai": [ + [ + { + "id": "test" + }, + "genome.fasta.fai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "gzi": [ + + ], + "sizes": [ + [ + { + "id": "test" + }, + "genome.fasta.sizes:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions_samtools": [ + [ + "SAMTOOLS_FAIDX", + "samtools", + "1.23.1" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.4" + }, + "timestamp": "2026-03-19T08:58:05.200994" + }, + "test_samtools_faidx_stub_fasta": { + "content": [ + { + "fa": [ + [ + { + "id": "test" + }, + "extract.fa:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "fai": [ + + ], + "gzi": [ + + ], + "sizes": [ + + ], + "versions_samtools": [ + [ + "SAMTOOLS_FAIDX", + "samtools", + "1.23.1" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.4" + }, + "timestamp": "2026-03-19T08:57:44.105654" + }, + "test_samtools_faidx_stub_fai": { + "content": [ + { + "fa": [ + + ], + "fai": [ + [ + { + "id": "test" + }, + "genome.fasta.fai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "gzi": [ + + ], + "sizes": [ + + ], + "versions_samtools": [ + [ + "SAMTOOLS_FAIDX", + "samtools", + "1.23.1" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.4" + }, + "timestamp": "2026-03-19T08:57:50.839162" + }, + "test_samtools_faidx_get_sizes_bgzip": { + "content": [ + { + "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.23.1" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.4" + }, + "timestamp": "2026-03-19T08:58:00.460031" + } +} \ 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 00000000..b3c4d0cb --- /dev/null +++ b/modules/nf-core/samtools/faidx/tests/nextflow.config @@ -0,0 +1,6 @@ +process { + + withName: SAMTOOLS_FAIDX { + ext.args = params.module_args + } +} diff --git a/modules/nf-core/samtools/flagstat/environment.yml b/modules/nf-core/samtools/flagstat/environment.yml index bd57cb54..6a19f168 100644 --- a/modules/nf-core/samtools/flagstat/environment.yml +++ b/modules/nf-core/samtools/flagstat/environment.yml @@ -1,8 +1,10 @@ -name: samtools_flagstat +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json channels: - conda-forge - bioconda - - defaults dependencies: - - bioconda::samtools=1.19.2 - - bioconda::htslib=1.19.1 + # renovate: datasource=conda depName=bioconda/htslib + - bioconda::htslib=1.24 + # renovate: datasource=conda depName=bioconda/samtools + - bioconda::samtools=1.24 diff --git a/modules/nf-core/samtools/flagstat/main.nf b/modules/nf-core/samtools/flagstat/main.nf index eb5f5252..f4a0b3b3 100644 --- a/modules/nf-core/samtools/flagstat/main.nf +++ b/modules/nf-core/samtools/flagstat/main.nf @@ -1,46 +1,47 @@ process SAMTOOLS_FLAGSTAT { - tag "$meta.id" + tag "${meta.id}" label 'process_single' conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/samtools:1.19.2--h50ea8bc_0' : - 'biocontainers/samtools:1.19.2--h50ea8bc_0' }" + container "${workflow.containerEngine in ['singularity', 'apptainer'] && !task.ext.singularity_pull_docker_container + ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/e9/e994bf4eb3731150511a14f5706b7bdfd64df1b6d40898fff334286c027e0859/data' + : 'community.wave.seqera.io/library/htslib_samtools:1.24--d697cfb9dce007cd'}" input: tuple val(meta), path(bam), path(bai) output: tuple val(meta), path("*.flagstat"), emit: flagstat - 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 args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" """ samtools \\ flagstat \\ --threads ${task.cpus} \\ - $bam \\ + ${bam} \\ > ${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 97991358..f658acdd 100644 --- a/modules/nf-core/samtools/flagstat/meta.yml +++ b/modules/nf-core/samtools/flagstat/meta.yml @@ -1,5 +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 @@ -16,36 +17,60 @@ 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: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - bam: - type: file - description: BAM/CRAM/SAM file - pattern: "*.{bam,cram,sam}" - - bai: - type: file - description: Index for BAM/CRAM/SAM file - pattern: "*.{bai,crai,sai}" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bam: + 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: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - flagstat: - type: file - description: File containing samtools flagstat output - pattern: "*.{flagstat}" - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + flagstat: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.flagstat": + type: file + description: File containing samtools flagstat output + pattern: "*.{flagstat}" + 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: - "@drpatelh" + - "@matthdsm" diff --git a/modules/nf-core/samtools/flagstat/tests/main.nf.test b/modules/nf-core/samtools/flagstat/tests/main.nf.test index 24c3c04b..dbf7c996 100644 --- a/modules/nf-core/samtools/flagstat/tests/main.nf.test +++ b/modules/nf-core/samtools/flagstat/tests/main.nf.test @@ -11,12 +11,33 @@ nextflow_process { test("BAM") { when { - params { - outdir = "$outputDir" + process { + """ + input[0] = channel.of([ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/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 + assertAll( + { assert snapshot(sanitizeOutput(process.out)).match() } + ) + } + } + + test("BAM - stub") { + + options "-stub" + + 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) @@ -26,10 +47,9 @@ nextflow_process { } then { - assertAll ( - { assert process.success }, - { assert snapshot(process.out.flagstat).match("flagstat") }, - { assert snapshot(process.out.versions).match("versions") } + assert process.success + assertAll( + { assert snapshot(sanitizeOutput(process.out)).match() } ) } } 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 a76fc27e..f572957b 100644 --- a/modules/nf-core/samtools/flagstat/tests/main.nf.test.snap +++ b/modules/nf-core/samtools/flagstat/tests/main.nf.test.snap @@ -1,32 +1,56 @@ { - "flagstat": { + "BAM - stub": { "content": [ - [ - [ - { - "id": "test", - "single_end": false - }, - "test.flagstat:md5,4f7ffd1e6a5e85524d443209ac97d783" + { + "flagstat": [ + [ + { + "id": "test", + "single_end": false + }, + "test.flagstat:md5,67394650dbae96d1a4fcc70484822159" + ] + ], + "versions_samtools": [ + [ + "SAMTOOLS_FLAGSTAT", + "samtools", + "1.24" + ] ] - ] + } ], + "timestamp": "2026-07-10T15:53:38.552555213", "meta": { - "nf-test": "0.8.4", - "nextflow": "23.04.3" - }, - "timestamp": "2024-02-12T18:31:37.783927" + "nf-test": "0.9.5", + "nextflow": "26.04.4" + } }, - "versions": { + "BAM": { "content": [ - [ - "versions.yml:md5,fd0030ce49ab3a92091ad80260226452" - ] + { + "flagstat": [ + [ + { + "id": "test", + "single_end": false + }, + "test.flagstat:md5,4f7ffd1e6a5e85524d443209ac97d783" + ] + ], + "versions_samtools": [ + [ + "SAMTOOLS_FLAGSTAT", + "samtools", + "1.24" + ] + ] + } ], + "timestamp": "2026-07-10T15:53:33.931611374", "meta": { - "nf-test": "0.8.4", - "nextflow": "24.01.0" - }, - "timestamp": "2024-02-13T16:11:44.299617452" + "nf-test": "0.9.5", + "nextflow": "26.04.4" + } } } \ No newline at end of file diff --git a/modules/nf-core/samtools/flagstat/tests/tags.yml b/modules/nf-core/samtools/flagstat/tests/tags.yml deleted file mode 100644 index 2d2b7255..00000000 --- a/modules/nf-core/samtools/flagstat/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -samtools/flagstat: - - modules/nf-core/samtools/flagstat/** diff --git a/modules/nf-core/samtools/idxstats/environment.yml b/modules/nf-core/samtools/idxstats/environment.yml index 174973b8..6a19f168 100644 --- a/modules/nf-core/samtools/idxstats/environment.yml +++ b/modules/nf-core/samtools/idxstats/environment.yml @@ -1,8 +1,10 @@ -name: samtools_idxstats +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json channels: - conda-forge - bioconda - - defaults dependencies: - - bioconda::samtools=1.19.2 - - bioconda::htslib=1.19.1 + # renovate: datasource=conda depName=bioconda/htslib + - bioconda::htslib=1.24 + # renovate: datasource=conda depName=bioconda/samtools + - bioconda::samtools=1.24 diff --git a/modules/nf-core/samtools/idxstats/main.nf b/modules/nf-core/samtools/idxstats/main.nf index a544026f..58d31062 100644 --- a/modules/nf-core/samtools/idxstats/main.nf +++ b/modules/nf-core/samtools/idxstats/main.nf @@ -1,37 +1,32 @@ process SAMTOOLS_IDXSTATS { - tag "$meta.id" + tag "${meta.id}" label 'process_single' conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/samtools:1.19.2--h50ea8bc_0' : - 'biocontainers/samtools:1.19.2--h50ea8bc_0' }" + container "${workflow.containerEngine in ['singularity', 'apptainer'] && !task.ext.singularity_pull_docker_container + ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/e9/e994bf4eb3731150511a14f5706b7bdfd64df1b6d40898fff334286c027e0859/data' + : 'community.wave.seqera.io/library/htslib_samtools:1.24--d697cfb9dce007cd'}" 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 script: - def args = task.ext.args ?: '' 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 \\ + --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: @@ -39,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 344e92a3..0f9fb3d7 100644 --- a/modules/nf-core/samtools/idxstats/meta.yml +++ b/modules/nf-core/samtools/idxstats/meta.yml @@ -17,36 +17,60 @@ 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: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - bam: - type: file - description: BAM/CRAM/SAM file - pattern: "*.{bam,cram,sam}" - - bai: - type: file - description: Index for BAM/CRAM/SAM file - pattern: "*.{bai,crai,sai}" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bam: + 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: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - idxstats: - type: file - description: File containing samtools idxstats output - pattern: "*.{idxstats}" - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + idxstats: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.idxstats": + type: file + description: File containing samtools idxstats output + pattern: "*.{idxstats}" + 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: - "@drpatelh" + - "@matthdsm" diff --git a/modules/nf-core/samtools/idxstats/tests/main.nf.test b/modules/nf-core/samtools/idxstats/tests/main.nf.test index a2dcb27c..cc204d6a 100644 --- a/modules/nf-core/samtools/idxstats/tests/main.nf.test +++ b/modules/nf-core/samtools/idxstats/tests/main.nf.test @@ -11,12 +11,36 @@ nextflow_process { test("bam") { when { - params { - outdir = "$outputDir" + process { + """ + input[0] = channel.of([ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/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 + assertAll( + { assert snapshot( + process.out.idxstats, + process.out.findAll { key, val -> key.startsWith('versions') } + ).match() } + ) + } + } + + test("bam - stub") { + + options "-stub" + + 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) @@ -26,10 +50,12 @@ nextflow_process { } then { - assertAll ( - { assert process.success }, - { assert snapshot(process.out.idxstats).match("idxstats") }, - { assert snapshot(process.out.versions).match("versions") } + assert process.success + assertAll( + { 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 a7050bdc..2dba681c 100644 --- a/modules/nf-core/samtools/idxstats/tests/main.nf.test.snap +++ b/modules/nf-core/samtools/idxstats/tests/main.nf.test.snap @@ -1,17 +1,32 @@ { - "versions": { + "bam - stub": { "content": [ [ - "versions.yml:md5,613dde56f108418039ffcdeeddba397a" - ] + [ + { + "id": "test", + "single_end": false + }, + "test.idxstats:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + { + "versions_samtools": [ + [ + "SAMTOOLS_IDXSTATS", + "samtools", + "1.24" + ] + ] + } ], + "timestamp": "2026-03-19T08:59:41.877526", "meta": { - "nf-test": "0.8.4", - "nextflow": "24.01.0" - }, - "timestamp": "2024-02-13T16:16:50.147462763" + "nf-test": "0.9.3", + "nextflow": "25.10.4" + } }, - "idxstats": { + "bam": { "content": [ [ [ @@ -21,12 +36,21 @@ }, "test.idxstats:md5,df60a8c8d6621100d05178c93fb053a2" ] - ] + ], + { + "versions_samtools": [ + [ + "SAMTOOLS_IDXSTATS", + "samtools", + "1.24" + ] + ] + } ], + "timestamp": "2026-03-19T08:59:34.725514", "meta": { - "nf-test": "0.8.4", - "nextflow": "23.04.3" - }, - "timestamp": "2024-02-12T18:36:41.561026" + "nf-test": "0.9.3", + "nextflow": "25.10.4" + } } } \ No newline at end of file diff --git a/modules/nf-core/samtools/idxstats/tests/tags.yml b/modules/nf-core/samtools/idxstats/tests/tags.yml deleted file mode 100644 index d3057c61..00000000 --- a/modules/nf-core/samtools/idxstats/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -samtools/idxstats: - - modules/nf-core/samtools/idxstats/** diff --git a/modules/nf-core/samtools/index/environment.yml b/modules/nf-core/samtools/index/environment.yml index a5e50649..6a19f168 100644 --- a/modules/nf-core/samtools/index/environment.yml +++ b/modules/nf-core/samtools/index/environment.yml @@ -1,8 +1,10 @@ -name: samtools_index +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json channels: - conda-forge - bioconda - - defaults dependencies: - - bioconda::samtools=1.19.2 - - bioconda::htslib=1.19.1 + # renovate: datasource=conda depName=bioconda/htslib + - bioconda::htslib=1.24 + # renovate: datasource=conda depName=bioconda/samtools + - bioconda::samtools=1.24 diff --git a/modules/nf-core/samtools/index/main.nf b/modules/nf-core/samtools/index/main.nf index dc14f98d..4dd9311a 100644 --- a/modules/nf-core/samtools/index/main.nf +++ b/modules/nf-core/samtools/index/main.nf @@ -1,20 +1,18 @@ process SAMTOOLS_INDEX { - tag "$meta.id" + 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.19.2--h50ea8bc_0' : - 'biocontainers/samtools:1.19.2--h50ea8bc_0' }" + container "${workflow.containerEngine in ['singularity', 'apptainer'] && !task.ext.singularity_pull_docker_container + ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/e9/e994bf4eb3731150511a14f5706b7bdfd64df1b6d40898fff334286c027e0859/data' + : 'community.wave.seqera.io/library/htslib_samtools:1.24--d697cfb9dce007cd'}" input: tuple val(meta), path(input) output: - 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(meta), path("*.{bai,csi,crai}"), emit: index + 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,25 +22,17 @@ process SAMTOOLS_INDEX { """ samtools \\ index \\ - -@ ${task.cpus-1} \\ - $args \\ - $input - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') - END_VERSIONS + -@ ${task.cpus} \\ + ${args} \\ + ${input} """ stub: + def args = task.ext.args ?: '' + def extension = file(input).getExtension() == 'cram' + ? "crai" + : args.contains("-c") ? "csi" : "bai" """ - touch ${input}.bai - touch ${input}.crai - touch ${input}.csi - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') - END_VERSIONS + touch ${input}.${extension} """ } diff --git a/modules/nf-core/samtools/index/meta.yml b/modules/nf-core/samtools/index/meta.yml index 01a4ee03..d4938bcd 100644 --- a/modules/nf-core/samtools/index/meta.yml +++ b/modules/nf-core/samtools/index/meta.yml @@ -14,44 +14,57 @@ 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: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - bam: - type: file - description: BAM/CRAM/SAM file - pattern: "*.{bam,cram,sam}" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - input: + type: file + description: input file + ontologies: [] output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - bai: - type: file - description: BAM/CRAM/SAM index file - pattern: "*.{bai,crai,sai}" - - crai: - type: file - description: BAM/CRAM/SAM index file - pattern: "*.{bai,crai,sai}" - - csi: - type: file - description: CSI index file - pattern: "*.{csi}" - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + index: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.{bai,csi,crai}": + type: file + description: BAM/CRAM/SAM index file + pattern: "*.{bai,csi,crai}" + 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" - "@maxulysse" maintainers: - - "@drpatelh" - "@ewels" - "@maxulysse" + - "@matthdsm" diff --git a/modules/nf-core/samtools/index/tests/csi.nextflow.config b/modules/nf-core/samtools/index/tests/csi.nextflow.config index 0ed260ef..4af6d82c 100644 --- a/modules/nf-core/samtools/index/tests/csi.nextflow.config +++ b/modules/nf-core/samtools/index/tests/csi.nextflow.config @@ -3,5 +3,4 @@ process { withName: SAMTOOLS_INDEX { ext.args = '-c' } - } diff --git a/modules/nf-core/samtools/index/tests/main.nf.test b/modules/nf-core/samtools/index/tests/main.nf.test index bb7756d1..d62d2d0f 100644 --- a/modules/nf-core/samtools/index/tests/main.nf.test +++ b/modules/nf-core/samtools/index/tests/main.nf.test @@ -9,14 +9,58 @@ nextflow_process { tag "samtools/index" test("bai") { + when { + process { + """ + input[0] = channel.of([ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true) + ]) + """ + } + } + + then { + assert process.success + assertAll( + { assert snapshot( + process.out.index, + process.out.findAll { key, val -> key.startsWith('versions') } + ).match() } + ) + } + } + test("crai") { when { - params { - outdir = "$outputDir" + process { + """ + input[0] = channel.of([ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.recalibrated.sorted.cram', checkIfExists: true) + ]) + """ } + } + + then { + assert process.success + assertAll( + { assert snapshot( + process.out.index, + process.out.findAll { key, val -> key.startsWith('versions') } + ).match() } + ) + } + } + + test("csi") { + config "./csi.nextflow.config" + + 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) ]) @@ -25,23 +69,50 @@ nextflow_process { } then { - assertAll ( - { assert process.success }, - { assert snapshot(process.out.bai).match("bai") }, - { assert snapshot(process.out.versions).match("bai_versions") } + assert process.success + assertAll( + { assert snapshot( + file(process.out.index[0][1]).name, + process.out.findAll { key, val -> key.startsWith('versions') } + ).match() } ) } } - test("crai") { + test("bai - stub") { + + options "-stub" when { - params { - outdir = "$outputDir" + process { + """ + input[0] = channel.of([ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true) + ]) + """ } + } + + then { + assert process.success + assertAll( + { assert snapshot( + process.out.index, + process.out.findAll { key, val -> key.startsWith('versions') } + ).match() } + ) + } + } + + test("crai - stub") { + + options "-stub" + + when { process { """ - input[0] = Channel.of([ + input[0] = channel.of([ [ id:'test', single_end:false ], // meta map file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.recalibrated.sorted.cram', checkIfExists: true) ]) @@ -50,25 +121,26 @@ nextflow_process { } then { - assertAll ( - { assert process.success }, - { assert snapshot(process.out.crai).match("crai") }, - { assert snapshot(process.out.versions).match("crai_versions") } + assert process.success + assertAll( + { assert snapshot( + process.out.index, + process.out.findAll { key, val -> key.startsWith('versions') } + ).match() } ) } } - test("csi") { + test("csi - stub") { + + options "-stub" config "./csi.nextflow.config" when { - params { - outdir = "$outputDir" - } 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) ]) @@ -77,10 +149,12 @@ nextflow_process { } then { - assertAll ( - { assert process.success }, - { assert path(process.out.csi.get(0).get(1)).exists() }, - { assert snapshot(process.out.versions).match("csi_versions") } + assert process.success + assertAll( + { assert snapshot( + process.out.index, + 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 3dc8e7de..7aec3823 100644 --- a/modules/nf-core/samtools/index/tests/main.nf.test.snap +++ b/modules/nf-core/samtools/index/tests/main.nf.test.snap @@ -1,29 +1,59 @@ { - "crai_versions": { + "csi - stub": { "content": [ [ - "versions.yml:md5,cc4370091670b64bba7c7206403ffb3e" - ] + [ + { + "id": "test", + "single_end": false + }, + "test.paired_end.sorted.bam.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + { + "versions_samtools": [ + [ + "SAMTOOLS_INDEX", + "samtools", + "1.24" + ] + ] + } ], + "timestamp": "2026-03-19T09:00:39.171613", "meta": { - "nf-test": "0.8.4", - "nextflow": "24.01.0" - }, - "timestamp": "2024-02-13T16:12:00.324667957" + "nf-test": "0.9.3", + "nextflow": "25.10.4" + } }, - "csi_versions": { + "crai - stub": { "content": [ [ - "versions.yml:md5,cc4370091670b64bba7c7206403ffb3e" - ] + [ + { + "id": "test", + "single_end": false + }, + "test.paired_end.recalibrated.sorted.cram.crai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + { + "versions_samtools": [ + [ + "SAMTOOLS_INDEX", + "samtools", + "1.24" + ] + ] + } ], + "timestamp": "2026-03-19T09:00:32.838795", "meta": { - "nf-test": "0.8.4", - "nextflow": "24.01.0" - }, - "timestamp": "2024-02-13T16:12:07.885103162" + "nf-test": "0.9.3", + "nextflow": "25.10.4" + } }, - "crai": { + "bai - stub": { "content": [ [ [ @@ -31,17 +61,45 @@ "id": "test", "single_end": false }, - "test.paired_end.recalibrated.sorted.cram.crai:md5,14bc3bd5c89cacc8f4541f9062429029" + "test.paired_end.sorted.bam.bai:md5,d41d8cd98f00b204e9800998ecf8427e" ] - ] + ], + { + "versions_samtools": [ + [ + "SAMTOOLS_INDEX", + "samtools", + "1.24" + ] + ] + } ], + "timestamp": "2026-03-19T09:00:25.255379", "meta": { - "nf-test": "0.8.4", - "nextflow": "23.04.3" - }, - "timestamp": "2024-02-12T18:41:38.446424" + "nf-test": "0.9.3", + "nextflow": "25.10.4" + } }, - "bai": { + "csi": { + "content": [ + "test.paired_end.sorted.bam.csi", + { + "versions_samtools": [ + [ + "SAMTOOLS_INDEX", + "samtools", + "1.24" + ] + ] + } + ], + "timestamp": "2026-03-19T09:00:18.414839", + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.4" + } + }, + "crai": { "content": [ [ [ @@ -49,26 +107,50 @@ "id": "test", "single_end": false }, - "test.paired_end.sorted.bam.bai:md5,704c10dd1326482448ca3073fdebc2f4" + "test.paired_end.recalibrated.sorted.cram.crai:md5,14bc3bd5c89cacc8f4541f9062429029" + ] + ], + { + "versions_samtools": [ + [ + "SAMTOOLS_INDEX", + "samtools", + "1.24" + ] ] - ] + } ], + "timestamp": "2026-03-19T09:00:13.571297", "meta": { - "nf-test": "0.8.4", - "nextflow": "23.04.3" - }, - "timestamp": "2024-02-12T18:40:46.579747" + "nf-test": "0.9.3", + "nextflow": "25.10.4" + } }, - "bai_versions": { + "bai": { "content": [ [ - "versions.yml:md5,cc4370091670b64bba7c7206403ffb3e" - ] + [ + { + "id": "test", + "single_end": false + }, + "test.paired_end.sorted.bam.bai:md5,704c10dd1326482448ca3073fdebc2f4" + ] + ], + { + "versions_samtools": [ + [ + "SAMTOOLS_INDEX", + "samtools", + "1.24" + ] + ] + } ], + "timestamp": "2026-03-19T09:00:06.767362", "meta": { - "nf-test": "0.8.4", - "nextflow": "24.01.0" - }, - "timestamp": "2024-02-13T16:11:51.641425452" + "nf-test": "0.9.3", + "nextflow": "25.10.4" + } } } \ No newline at end of file diff --git a/modules/nf-core/samtools/index/tests/tags.yml b/modules/nf-core/samtools/index/tests/tags.yml deleted file mode 100644 index e0f58a7a..00000000 --- a/modules/nf-core/samtools/index/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -samtools/index: - - modules/nf-core/samtools/index/** diff --git a/modules/nf-core/samtools/sort/environment.yml b/modules/nf-core/samtools/sort/environment.yml index 4d898e48..6a19f168 100644 --- a/modules/nf-core/samtools/sort/environment.yml +++ b/modules/nf-core/samtools/sort/environment.yml @@ -1,8 +1,10 @@ -name: samtools_sort +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json channels: - conda-forge - bioconda - - defaults dependencies: - - bioconda::samtools=1.19.2 - - bioconda::htslib=1.19.1 + # renovate: datasource=conda depName=bioconda/htslib + - bioconda::htslib=1.24 + # renovate: datasource=conda depName=bioconda/samtools + - bioconda::samtools=1.24 diff --git a/modules/nf-core/samtools/sort/main.nf b/modules/nf-core/samtools/sort/main.nf index fc374f98..01f4f8c6 100644 --- a/modules/nf-core/samtools/sort/main.nf +++ b/modules/nf-core/samtools/sort/main.nf @@ -1,63 +1,97 @@ process SAMTOOLS_SORT { - tag "$meta.id" + 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/samtools:1.19.2--h50ea8bc_0' : - 'biocontainers/samtools:1.19.2--h50ea8bc_0' }" + container "${workflow.containerEngine in ['singularity', 'apptainer'] && !task.ext.singularity_pull_docker_container + ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/e9/e994bf4eb3731150511a14f5706b7bdfd64df1b6d40898fff334286c027e0859/data' + : 'community.wave.seqera.io/library/htslib_samtools:1.24--d697cfb9dce007cd'}" input: - tuple val(meta) , path(bam) - tuple val(meta2), path(fasta) + tuple val(meta), path(bam, stageAs: "?/*") + tuple val(meta2), path(fasta), path(fai) + 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,csi,bai}"), emit: index, 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}" : "" - if ("$bam" == "${prefix}.bam") error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!" + //setting default values + def write_index = "" + def output_file = "${prefix}.${extension}" + + // Update if index is requested + if (index_format != '' && index_format) { + write_index = "--write-index" + output_file = "${prefix}.${extension}##idx##${prefix}.${extension}.${index_format}" + } + def is_sam = (bam instanceof List ? bam[0] : bam).name.endsWith('.sam') + 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!") + } + if ("${bam}" == "${prefix}.bam") { + error("Input and output names are the same, use \"task.ext.prefix\" to disambiguate!") + } + + def input_source = is_sam ? "${bam}" : "-" + def pre_command = is_sam ? "" : "samtools cat ${bam} | " """ - samtools cat \\ - --threads $task.cpus \\ - ${bam} \\ - | \\ - samtools sort \\ - $args \\ + ${pre_command}samtools sort \\ + ${args} \\ -T ${prefix} \\ - --threads $task.cpus \\ + --threads ${task.cpus} \\ ${reference} \\ - -o ${prefix}.${extension} \\ - - - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') - END_VERSIONS + -o ${output_file} \\ + ${write_index} \\ + ${input_source} """ stub: - def prefix = task.ext.prefix ?: "${meta.id}" - """ - touch ${prefix}.bam - touch ${prefix}.bam.csi + def args = task.ext.args ?: '' + 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") + } + } - cat <<-END_VERSIONS > versions.yml - "${task.process}": - samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') - END_VERSIONS + index = index_format ? "touch ${prefix}.${extension}.${index_format}" : "" + + """ + touch ${prefix}.${extension} + ${index} """ } diff --git a/modules/nf-core/samtools/sort/meta.yml b/modules/nf-core/samtools/sort/meta.yml index 341a7d0e..0447a95e 100644 --- a/modules/nf-core/samtools/sort/meta.yml +++ b/modules/nf-core/samtools/sort/meta.yml @@ -15,52 +15,107 @@ tools: 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 ] - - bam: - type: file - description: BAM/CRAM/SAM file(s) - 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 - pattern: "*.{fa,fasta,fna}" - optional: true + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bam: + type: file + description: BAM/CRAM/SAM file(s) + 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 + pattern: "*.{fa,fasta,fna}" + optional: true + ontologies: [] + - fai: + type: file + description: Reference genome FASTA index file + pattern: "*.{fai}" + optional: true + ontologies: [] + - index_format: + type: string + description: Index format to use (optional) + pattern: "bai|csi|crai" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - bam: - type: file - description: Sorted BAM file - pattern: "*.{bam}" - - cram: - type: file - description: Sorted CRAM file - pattern: "*.{cram}" - - crai: - type: file - description: CRAM index file (optional) - pattern: "*.crai" - - csi: - type: file - description: BAM index file (optional) - pattern: "*.csi" - - 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 ] + - "${prefix}.bam": + type: file + description: Sorted 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: Sorted 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: Sorted SAM file + pattern: "*.{sam}" + ontologies: [] + index: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "${prefix}.${extension}.{crai,csi,bai}": + type: file + description: CRAM index file (optional) + pattern: "*.{crai,csi,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 8360e2b1..035e91b6 100644 --- a/modules/nf-core/samtools/sort/tests/main.nf.test +++ b/modules/nf-core/samtools/sort/tests/main.nf.test @@ -8,88 +8,367 @@ nextflow_process { tag "samtools" tag "samtools/sort" - test("bam") { + test("bam_no_index") { config "./nextflow.config" 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.bam', checkIfExists: true) ]) - input[1] = Channel.of([ + input[1] = channel.of([ [ id:'fasta' ], // meta map - file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true) ]) + input[2] = '' """ } } then { - assertAll ( - { assert process.success }, - { assert snapshot(process.out).match() } + assert process.success + assertAll( + { assert snapshot( + process.out.bam.collect{meta, bam_ -> file(bam_).name + ':readsMD5,' + bam(bam_).getReadsMD5()}, + process.out.index, + 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), + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true) + ]) + input[2] = 'bai' + """ + } + } + + then { + assert process.success + assertAll( + { assert snapshot( + process.out.bam.collect{meta, bam_ -> file(bam_).name + ':readsMD5,' + bam(bam_).getReadsMD5()}, + process.out.index, + 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), + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true) + ]) + input[2] = 'csi' + """ + } + } + + then { + assert process.success + assertAll( + { assert snapshot( + process.out.bam.collect{meta, bam_ -> file(bam_).name + ':readsMD5,' + bam(bam_).getReadsMD5()}, + process.out.index, + process.out.findAll { key, val -> key.startsWith("versions") } + ).match() } + ) + } + } + + test("multiple bam") { + + 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), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) + ]) + input[2] = '' + """ + } + } + + then { + assert process.success + assertAll( + { assert snapshot( + process.out.bam.collect{meta, bam_ -> file(bam_).name + ':readsMD5,' + bam(bam_).getReadsMD5()}, + process.out.index.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), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) + ]) + input[2] = 'bai' + """ + } + } + + then { + assert process.success + assertAll( + { assert snapshot( + process.out.bam.collect{meta, bam_ -> file(bam_).name + ':readsMD5,' + bam(bam_).getReadsMD5()}, + process.out.index.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), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) + ]) + input[2] = 'csi' + """ + } + } + + then { + assert process.success + assertAll( + { assert snapshot( + process.out.bam.collect{meta, bam_ -> file(bam_).name + ':readsMD5,' + bam(bam_).getReadsMD5()}, + process.out.index.collect { it.collect { it instanceof Map ? it : file(it).name } }, + process.out.findAll { key, val -> key.startsWith("versions") } + ).match() } ) } } test("cram") { + config "./nextflow_cram.config" + + when { + process { + """ + input[0] = channel.of([ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram', checkIfExists: true) + ]) + input[1] = channel.of([ + [ id:'fasta' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) + ]) + input[2] = '' + """ + } + } + + then { + assert process.success + assertAll( + { assert snapshot( + process.out.cram.collect { it.collect { it instanceof Map ? it : file(it).name } }, + process.out.index.collect { it.collect { it instanceof Map ? it : file(it).name } }, + process.out.findAll { key, val -> key.startsWith("versions") } + ).match() } + ) + } + } + + test("bam - stub") { + + options "-stub" config "./nextflow.config" 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.bam', checkIfExists: true) ]) - input[1] = Channel.of([ + input[1] = channel.of([ [ id:'fasta' ], // meta map - file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true) ]) + input[2] = '' """ } } then { - assertAll ( - { assert process.success }, - { assert snapshot(process.out).match() } + assert process.success + assertAll( + { assert snapshot(process.out.findAll { key, val -> key.startsWith("versions") }).match() } ) } } - test("bam_stub") { + test("multiple bam - stub") { 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), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) + ]) + input[2] = '' + """ + } + } + + then { + assert process.success + assertAll( + { assert snapshot(process.out.findAll { key, val -> key.startsWith("versions") }).match() } + ) + } + } + + test("cram - stub") { + options "-stub" + config "./nextflow_cram.config" when { - params { - outdir = "$outputDir" + process { + """ + input[0] = channel.of([ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram', checkIfExists: true) + ]) + input[1] = channel.of([ + [ id:'fasta' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) + ]) + input[2] = '' + """ } + } + + then { + assert process.success + assertAll( + { assert snapshot(process.out.findAll { key, val -> key.startsWith("versions") }).match() } + ) + } + } + + test("sam") { + + config "./nextflow_sam.config" + + 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.bam', checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/pairtools/mock.sam', checkIfExists: true) ]) - input[1] = Channel.of([ + input[1] = channel.of([ [ id:'fasta' ], // meta map - file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) ]) + input[2] = '' """ } } then { - assertAll ( - { assert process.success }, - { assert snapshot(file(process.out.bam[0][1]).name).match("bam_stub_bam") }, - { assert snapshot(process.out.versions).match("bam_stub_versions") } + assert process.success + assertAll( + { assert snapshot( + process.out.bam.collect { it.collect { it instanceof Map ? it : file(it).name } }, + process.out.index.collect { it.collect { it instanceof Map ? it : file(it).name } }, + 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 38477656..77866728 100644 --- a/modules/nf-core/samtools/sort/tests/main.nf.test.snap +++ b/modules/nf-core/samtools/sort/tests/main.nf.test.snap @@ -1,154 +1,284 @@ { "cram": { "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.cram" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.cram.crai" + ] + ], { - "0": [ + "versions_samtools": [ [ - { - "id": "test", - "single_end": false - }, - "test.sorted.bam:md5,bc0b7c25da26384a006ed84cc9e4da23" + "SAMTOOLS_SORT", + "samtools", + "1.24" ] - ], - "1": [ - - ], - "2": [ - - ], - "3": [ + ] + } + ], + "timestamp": "2026-07-10T07:15:51.469358", + "meta": { + "nf-test": "0.9.5", + "nextflow": "26.04.6" + } + }, + "bam_csi_index": { + "content": [ + [ + "test.sorted.bam:readsMD5,894549ee3ced6b5ca2eed2563a985217" + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.bam.csi:md5,43f545200e545ca2075c475d194a5130" + ] + ], + { + "versions_samtools": [ [ - { - "id": "test", - "single_end": false - }, - "test.sorted.bam.csi:md5,8d4e836c2fed6c0bf874d5e8cdba5831" + "SAMTOOLS_SORT", + "samtools", + "1.24" ] - ], - "4": [ - "versions.yml:md5,e6d43fefc9a8bff91c2ce6e3a1716eca" - ], - "bam": [ + ] + } + ], + "timestamp": "2026-07-10T17:05:03.136300204", + "meta": { + "nf-test": "0.9.5", + "nextflow": "26.04.4" + } + }, + "bam - stub": { + "content": [ + { + "versions_samtools": [ [ - { - "id": "test", - "single_end": false - }, - "test.sorted.bam:md5,bc0b7c25da26384a006ed84cc9e4da23" + "SAMTOOLS_SORT", + "samtools", + "1.24" ] - ], - "crai": [ - - ], - "cram": [ - - ], - "csi": [ + ] + } + ], + "timestamp": "2026-03-19T09:04:43.558376", + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.4" + } + }, + "multiple bam bai index": { + "content": [ + [ + "test.sorted.bam:readsMD5,c4525b95f05075208347295e6a1fb232" + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.bam.bai" + ] + ], + { + "versions_samtools": [ [ - { - "id": "test", - "single_end": false - }, - "test.sorted.bam.csi:md5,8d4e836c2fed6c0bf874d5e8cdba5831" + "SAMTOOLS_SORT", + "samtools", + "1.24" ] - ], - "versions": [ - "versions.yml:md5,e6d43fefc9a8bff91c2ce6e3a1716eca" ] } ], + "timestamp": "2026-07-10T17:05:14.840145298", "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-03-04T15:08:00.830294" + "nf-test": "0.9.5", + "nextflow": "26.04.4" + } }, - "bam_stub_bam": { + "cram - stub": { "content": [ - "test.sorted.bam" + { + "versions_samtools": [ + [ + "SAMTOOLS_SORT", + "samtools", + "1.24" + ] + ] + } ], + "timestamp": "2026-03-19T09:04:54.684578", "meta": { - "nf-test": "0.8.4", - "nextflow": "23.04.3" - }, - "timestamp": "2024-02-12T19:21:04.364044" + "nf-test": "0.9.3", + "nextflow": "25.10.4" + } }, - "bam_stub_versions": { + "multiple bam": { "content": [ [ - "versions.yml:md5,e6d43fefc9a8bff91c2ce6e3a1716eca" - ] + "test.sorted.bam:readsMD5,c4525b95f05075208347295e6a1fb232" + ], + [ + + ], + { + "versions_samtools": [ + [ + "SAMTOOLS_SORT", + "samtools", + "1.24" + ] + ] + } ], + "timestamp": "2026-07-10T17:05:09.324351486", "meta": { - "nf-test": "0.8.4", - "nextflow": "24.01.0" - }, - "timestamp": "2024-02-13T16:15:00.20800281" + "nf-test": "0.9.5", + "nextflow": "26.04.4" + } }, - "bam": { + "multiple bam - stub": { "content": [ { - "0": [ + "versions_samtools": [ [ - { - "id": "test", - "single_end": false - }, - "test.sorted.bam:md5,bc0b7c25da26384a006ed84cc9e4da23" + "SAMTOOLS_SORT", + "samtools", + "1.24" ] - ], - "1": [ - - ], - "2": [ - - ], - "3": [ + ] + } + ], + "timestamp": "2026-03-19T09:04:48.874947", + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.4" + } + }, + "bam_no_index": { + "content": [ + [ + "test.sorted.bam:readsMD5,894549ee3ced6b5ca2eed2563a985217" + ], + [ + + ], + { + "versions_samtools": [ [ - { - "id": "test", - "single_end": false - }, - "test.sorted.bam.csi:md5,8d4e836c2fed6c0bf874d5e8cdba5831" + "SAMTOOLS_SORT", + "samtools", + "1.24" ] - ], - "4": [ - "versions.yml:md5,e6d43fefc9a8bff91c2ce6e3a1716eca" - ], - "bam": [ + ] + } + ], + "timestamp": "2026-07-10T17:04:53.194840222", + "meta": { + "nf-test": "0.9.5", + "nextflow": "26.04.4" + } + }, + "multiple bam csi index": { + "content": [ + [ + "test.sorted.bam:readsMD5,c4525b95f05075208347295e6a1fb232" + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.bam.csi" + ] + ], + { + "versions_samtools": [ [ - { - "id": "test", - "single_end": false - }, - "test.sorted.bam:md5,bc0b7c25da26384a006ed84cc9e4da23" + "SAMTOOLS_SORT", + "samtools", + "1.24" ] - ], - "crai": [ - - ], - "cram": [ - - ], - "csi": [ + ] + } + ], + "timestamp": "2026-07-10T17:05:22.574450685", + "meta": { + "nf-test": "0.9.5", + "nextflow": "26.04.4" + } + }, + "sam": { + "content": [ + [ + + ], + [ + + ], + { + "versions_samtools": [ + [ + "SAMTOOLS_SORT", + "samtools", + "1.24" + ] + ] + } + ], + "timestamp": "2026-07-10T07:19:30.478625", + "meta": { + "nf-test": "0.9.5", + "nextflow": "26.04.6" + } + }, + "bam_bai_index": { + "content": [ + [ + "test.sorted.bam:readsMD5,894549ee3ced6b5ca2eed2563a985217" + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.bam.bai:md5,4810374728f259a493e1e61c90847da3" + ] + ], + { + "versions_samtools": [ [ - { - "id": "test", - "single_end": false - }, - "test.sorted.bam.csi:md5,8d4e836c2fed6c0bf874d5e8cdba5831" + "SAMTOOLS_SORT", + "samtools", + "1.24" ] - ], - "versions": [ - "versions.yml:md5,e6d43fefc9a8bff91c2ce6e3a1716eca" ] } ], + "timestamp": "2026-07-10T17:04:58.163543444", "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-03-04T15:07:48.773803" + "nf-test": "0.9.5", + "nextflow": "26.04.4" + } } } \ 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 f642771f..ca694caa 100644 --- a/modules/nf-core/samtools/sort/tests/nextflow.config +++ b/modules/nf-core/samtools/sort/tests/nextflow.config @@ -1,8 +1,6 @@ process { withName: SAMTOOLS_SORT { - ext.prefix = { "${meta.id}.sorted" } - ext.args = "--write-index" + ext.prefix = { "${meta.id}.sorted" } } - } diff --git a/modules/nf-core/samtools/sort/tests/nextflow_cram.config b/modules/nf-core/samtools/sort/tests/nextflow_cram.config new file mode 100644 index 00000000..8ebc9d91 --- /dev/null +++ b/modules/nf-core/samtools/sort/tests/nextflow_cram.config @@ -0,0 +1,7 @@ +process { + + withName: SAMTOOLS_SORT { + ext.prefix = { "${meta.id}.sorted" } + ext.args = "--write-index --output-fmt cram" + } +} diff --git a/modules/nf-core/samtools/sort/tests/nextflow_sam.config b/modules/nf-core/samtools/sort/tests/nextflow_sam.config new file mode 100644 index 00000000..29ee6a88 --- /dev/null +++ b/modules/nf-core/samtools/sort/tests/nextflow_sam.config @@ -0,0 +1,7 @@ +process { + + withName: SAMTOOLS_SORT { + ext.prefix = { "${meta.id}.sorted" } + ext.args = "--output-fmt sam" + } +} diff --git a/modules/nf-core/samtools/sort/tests/tags.yml b/modules/nf-core/samtools/sort/tests/tags.yml deleted file mode 100644 index cd63ea20..00000000 --- a/modules/nf-core/samtools/sort/tests/tags.yml +++ /dev/null @@ -1,3 +0,0 @@ -samtools/sort: - - modules/nf-core/samtools/sort/** - - tests/modules/nf-core/samtools/sort/** diff --git a/modules/nf-core/samtools/stats/environment.yml b/modules/nf-core/samtools/stats/environment.yml index 67bb0ca4..6a19f168 100644 --- a/modules/nf-core/samtools/stats/environment.yml +++ b/modules/nf-core/samtools/stats/environment.yml @@ -1,8 +1,10 @@ -name: samtools_stats +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json channels: - conda-forge - bioconda - - defaults dependencies: - - bioconda::samtools=1.19.2 - - bioconda::htslib=1.19.1 + # renovate: datasource=conda depName=bioconda/htslib + - bioconda::htslib=1.24 + # renovate: datasource=conda depName=bioconda/samtools + - bioconda::samtools=1.24 diff --git a/modules/nf-core/samtools/stats/main.nf b/modules/nf-core/samtools/stats/main.nf index 52b00f4b..525ae00f 100644 --- a/modules/nf-core/samtools/stats/main.nf +++ b/modules/nf-core/samtools/stats/main.nf @@ -1,19 +1,19 @@ process SAMTOOLS_STATS { - tag "$meta.id" + tag "${meta.id}" label 'process_single' conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/samtools:1.19.2--h50ea8bc_0' : - 'biocontainers/samtools:1.19.2--h50ea8bc_0' }" + container "${workflow.containerEngine in ['singularity', 'apptainer'] && !task.ext.singularity_pull_docker_container + ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/e9/e994bf4eb3731150511a14f5706b7bdfd64df1b6d40898fff334286c027e0859/data' + : 'community.wave.seqera.io/library/htslib_samtools:1.24--d697cfb9dce007cd'}" input: tuple val(meta), path(input), path(input_index) - tuple val(meta2), path(fasta) + tuple val(meta2), path(fasta), path(fai) 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 @@ -25,25 +25,16 @@ process SAMTOOLS_STATS { """ 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 735ff812..5fd7e76d 100644 --- a/modules/nf-core/samtools/stats/meta.yml +++ b/modules/nf-core/samtools/stats/meta.yml @@ -16,43 +16,73 @@ tools: 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 file from alignment - pattern: "*.{bam,cram}" - - input_index: - type: file - description: BAI/CRAI file from alignment - pattern: "*.{bai,crai}" - - meta2: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'genome' ] - - fasta: - type: file - description: Reference file the CRAM was created with (optional) - pattern: "*.{fasta,fa}" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - 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: | + Groovy Map containing reference information + e.g. [ id:'genome' ] + - fasta: + type: file + description: Reference file the CRAM was created with (optional) + pattern: "*.{fasta,fa,fna}" + ontologies: [] + - fai: + type: file + description: FASTA ref index file + pattern: "*.{fasta,fa,fna}.fai" + ontologies: [] output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - stats: - type: file - description: File containing samtools stats output - pattern: "*.{stats}" - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + stats: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.stats": + type: file + description: File containing samtools stats output + pattern: "*.{stats}" + 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" @@ -61,3 +91,4 @@ maintainers: - "@drpatelh" - "@FriederikeHanssen" - "@ramprasadn" + - "@matthdsm" diff --git a/modules/nf-core/samtools/stats/tests/main.nf.test b/modules/nf-core/samtools/stats/tests/main.nf.test index e3d5cb14..5059e296 100644 --- a/modules/nf-core/samtools/stats/tests/main.nf.test +++ b/modules/nf-core/samtools/stats/tests/main.nf.test @@ -3,6 +3,7 @@ nextflow_process { name "Test Process SAMTOOLS_STATS" script "../main.nf" process "SAMTOOLS_STATS" + tag "modules" tag "modules_nfcore" tag "samtools" @@ -11,25 +12,22 @@ nextflow_process { test("bam") { when { - params { - outdir = "$outputDir" - } 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] = [[],[]] + input[1] = [[],[],[]] """ } } then { + assert process.success assertAll( - {assert process.success}, - {assert snapshot(process.out).match()} + { assert snapshot(sanitizeOutput(process.out)).match() } ) } } @@ -37,28 +35,80 @@ nextflow_process { test("cram") { when { - params { - outdir = "$outputDir" + process { + """ + input[0] = channel.of([ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.recalibrated.sorted.cram', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.recalibrated.sorted.cram.crai', checkIfExists: true) + ]) + input[1] = channel.of([ + [ id:'genome' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/genome.fasta', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/genome.fasta.fai', checkIfExists: true) + ]) + """ } + } + + then { + assert process.success + assertAll( + { assert snapshot(sanitizeOutput(process.out)).match() } + ) + } + } + + test("bam - stub") { + + options "-stub" + + when { + process { + """ + input[0] = channel.of([ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true) + ]) + input[1] = [[],[],[]] + """ + } + } + + then { + assert process.success + assertAll( + { assert snapshot(sanitizeOutput(process.out)).match() } + ) + } + } + + test("cram - stub") { + + options "-stub" + + when { process { """ - input[0] = Channel.of([ + input[0] = channel.of([ [ id:'test', single_end:false ], // meta map file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.recalibrated.sorted.cram', checkIfExists: true), file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.recalibrated.sorted.cram.crai', checkIfExists: true) ]) - input[1] = Channel.of([ + input[1] = channel.of([ [ id:'genome' ], // meta map - file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/genome.fasta', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/genome.fasta.fai', checkIfExists: true) ]) """ } } then { + assert process.success assertAll( - {assert process.success}, - {assert snapshot(process.out).match()} + { assert snapshot(sanitizeOutput(process.out)).match() } ) } } 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 1b7c9ba4..12eb0e47 100644 --- a/modules/nf-core/samtools/stats/tests/main.nf.test.snap +++ b/modules/nf-core/samtools/stats/tests/main.nf.test.snap @@ -2,71 +2,109 @@ "cram": { "content": [ { - "0": [ + "stats": [ [ { "id": "test", "single_end": false }, - "test.stats:md5,01812900aa4027532906c5d431114233" + "test.stats:md5,f8d811a048831b83812d55073566e67f" ] ], - "1": [ - "versions.yml:md5,0514ceb1769b2a88843e08c1f82624a9" - ], + "versions_samtools": [ + [ + "SAMTOOLS_STATS", + "samtools", + "1.24" + ] + ] + } + ], + "timestamp": "2026-07-10T16:10:52.814596882", + "meta": { + "nf-test": "0.9.5", + "nextflow": "26.04.4" + } + }, + "bam - stub": { + "content": [ + { "stats": [ [ { "id": "test", "single_end": false }, - "test.stats:md5,01812900aa4027532906c5d431114233" + "test.stats:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "versions": [ - "versions.yml:md5,0514ceb1769b2a88843e08c1f82624a9" + "versions_samtools": [ + [ + "SAMTOOLS_STATS", + "samtools", + "1.24" + ] ] } ], + "timestamp": "2026-07-10T16:10:57.131242371", "meta": { - "nf-test": "0.8.4", - "nextflow": "24.01.0" - }, - "timestamp": "2024-02-13T16:15:25.562429714" + "nf-test": "0.9.5", + "nextflow": "26.04.4" + } }, - "bam": { + "cram - stub": { "content": [ { - "0": [ + "stats": [ [ { "id": "test", "single_end": false }, - "test.stats:md5,5d8681bf541199898c042bf400391d59" + "test.stats:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "1": [ - "versions.yml:md5,0514ceb1769b2a88843e08c1f82624a9" - ], + "versions_samtools": [ + [ + "SAMTOOLS_STATS", + "samtools", + "1.24" + ] + ] + } + ], + "timestamp": "2026-07-10T16:11:08.400007304", + "meta": { + "nf-test": "0.9.5", + "nextflow": "26.04.4" + } + }, + "bam": { + "content": [ + { "stats": [ [ { "id": "test", "single_end": false }, - "test.stats:md5,5d8681bf541199898c042bf400391d59" + "test.stats:md5,2313c93da60ff8673a793b14a0886987" ] ], - "versions": [ - "versions.yml:md5,0514ceb1769b2a88843e08c1f82624a9" + "versions_samtools": [ + [ + "SAMTOOLS_STATS", + "samtools", + "1.24" + ] ] } ], + "timestamp": "2026-07-10T16:10:38.846072426", "meta": { - "nf-test": "0.8.4", - "nextflow": "24.01.0" - }, - "timestamp": "2024-02-13T16:15:07.857611509" + "nf-test": "0.9.5", + "nextflow": "26.04.4" + } } } \ No newline at end of file diff --git a/modules/nf-core/samtools/stats/tests/tags.yml b/modules/nf-core/samtools/stats/tests/tags.yml deleted file mode 100644 index 7c28e30f..00000000 --- a/modules/nf-core/samtools/stats/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -samtools/stats: - - modules/nf-core/samtools/stats/** diff --git a/modules/nf-core/subread/featurecounts/environment.yml b/modules/nf-core/subread/featurecounts/environment.yml new file mode 100644 index 00000000..23133559 --- /dev/null +++ b/modules/nf-core/subread/featurecounts/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::subread=2.1.1 diff --git a/modules/nf-core/subread/featurecounts/main.nf b/modules/nf-core/subread/featurecounts/main.nf index a524b92f..91e226c8 100644 --- a/modules/nf-core/subread/featurecounts/main.nf +++ b/modules/nf-core/subread/featurecounts/main.nf @@ -1,19 +1,19 @@ process SUBREAD_FEATURECOUNTS { - tag "$meta.id" + tag "${meta.id}" label 'process_medium' - conda "bioconda::subread=2.0.1" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/subread:2.0.1--hed695b0_0' : - 'biocontainers/subread:2.0.1--hed695b0_0' }" + conda "${moduleDir}/environment.yml" + container "${workflow.containerEngine in ['singularity', 'apptainer'] && !task.ext.singularity_pull_docker_container + ? 'https://depot.galaxyproject.org/singularity/subread:2.1.1--h577a1d6_0' + : 'quay.io/biocontainers/subread:2.1.1--h577a1d6_0'}" input: tuple val(meta), path(bams), path(annotation) output: - tuple val(meta), path("*featureCounts.txt") , emit: counts - tuple val(meta), path("*featureCounts.txt.summary"), emit: summary - path "versions.yml" , emit: versions + tuple val(meta), path("*featureCounts.tsv"), emit: counts + tuple val(meta), path("*featureCounts.tsv.summary"), emit: summary + 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 @@ -21,27 +21,30 @@ process SUBREAD_FEATURECOUNTS { script: def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" - def paired_end = meta.single_end ? '' : '-p' + def paired_end = meta.single_end ? '' : '-p --countReadPairs' def strandedness = 0 if (meta.strandedness == 'forward') { strandedness = 1 - } else if (meta.strandedness == 'reverse') { + } + else if (meta.strandedness == 'reverse') { strandedness = 2 } """ featureCounts \\ - $args \\ - $paired_end \\ - -T $task.cpus \\ - -a $annotation \\ - -s $strandedness \\ - -o ${prefix}.featureCounts.txt \\ + ${args} \\ + ${paired_end} \\ + -T ${task.cpus} \\ + -a ${annotation} \\ + -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: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.featureCounts.tsv + touch ${prefix}.featureCounts.tsv.summary """ } diff --git a/modules/nf-core/subread/featurecounts/meta.yml b/modules/nf-core/subread/featurecounts/meta.yml index cf02f1ea..eafcd1f8 100644 --- a/modules/nf-core/subread/featurecounts/meta.yml +++ b/modules/nf-core/subread/featurecounts/meta.yml @@ -5,48 +5,81 @@ keywords: - fasta - genome - reference - tools: - featurecounts: - description: featureCounts is a highly efficient general-purpose read summarization program that counts mapped reads for genomic features such as genes, exons, promoter, gene bodies, genomic bins and chromosomal locations. It can be used to count both RNA-seq and genomic DNA-seq reads. + description: featureCounts is a highly efficient general-purpose read summarization + program that counts mapped reads for genomic features such as genes, exons, + promoter, gene bodies, genomic bins and chromosomal locations. It can be used + to count both RNA-seq and genomic DNA-seq reads. homepage: http://bioinf.wehi.edu.au/featureCounts/ documentation: http://bioinf.wehi.edu.au/subread-package/SubreadUsersGuide.pdf doi: "10.1093/bioinformatics/btt656" licence: ["GPL v3"] - + identifier: biotools:subread input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - bam: - type: file - description: BAM/SAM file containing read alignments - pattern: "*.{bam}" - - annotation: - type: file - description: Genomic features annotation in GTF or SAF - pattern: "*.{gtf,saf}" - + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bams: + 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: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - counts: - type: file - description: Counts of reads mapping to features - pattern: "*featureCounts.txt" - - summary: - type: file - description: Summary log file - pattern: "*.featureCounts.txt.summary" - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + counts: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*featureCounts.tsv": + type: file + description: Counts of reads mapping to features + pattern: "*featureCounts.tsv" + ontologies: + - edam: http://edamontology.org/format_3475 # TSV + summary: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*featureCounts.tsv.summary": + type: file + description: Summary log file + pattern: "*.featureCounts.tsv.summary" + 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: + - "@ntoda03" diff --git a/modules/nf-core/subread/featurecounts/subread-featurecounts.diff b/modules/nf-core/subread/featurecounts/subread-featurecounts.diff new file mode 100644 index 00000000..ad979539 --- /dev/null +++ b/modules/nf-core/subread/featurecounts/subread-featurecounts.diff @@ -0,0 +1,20 @@ +Changes in component 'nf-core/subread/featurecounts' +'modules/nf-core/subread/featurecounts/environment.yml' is unchanged +'modules/nf-core/subread/featurecounts/meta.yml' is unchanged +Changes in 'subread/featurecounts/main.nf': +--- modules/nf-core/subread/featurecounts/main.nf ++++ modules/nf-core/subread/featurecounts/main.nf +@@ -21,7 +21,7 @@ + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" +- def paired_end = meta.single_end ? '' : '-p' ++ def paired_end = meta.single_end ? '' : '-p --countReadPairs' + + def strandedness = 0 + if (meta.strandedness == 'forward') { + +'modules/nf-core/subread/featurecounts/tests/main.nf.test.snap' is unchanged +'modules/nf-core/subread/featurecounts/tests/nextflow.config' is unchanged +'modules/nf-core/subread/featurecounts/tests/main.nf.test' is unchanged +************************************************************ diff --git a/modules/nf-core/subread/featurecounts/tests/main.nf.test b/modules/nf-core/subread/featurecounts/tests/main.nf.test new file mode 100644 index 00000000..8ce45266 --- /dev/null +++ b/modules/nf-core/subread/featurecounts/tests/main.nf.test @@ -0,0 +1,161 @@ +nextflow_process { + + name "Test Process SUBREAD_FEATURECOUNTS" + script "../main.nf" + process "SUBREAD_FEATURECOUNTS" + config "./nextflow.config" + tag "modules" + tag "modules_nfcore" + tag "subread" + tag "subread/featurecounts" + + test("sarscov2 [bam] - forward") { + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:true, strandedness:'forward' ], // meta map + file(params.modules_testdata_base_path + "genomics/sarscov2/illumina/bam/test.single_end.bam", checkIfExists: true), + file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.gtf", checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.counts, + process.out.summary, + process.out.findAll { key, val -> key.startsWith('versions') } + ).match() } + ) + } + } + + test("sarscov2 [bam] - forward - stub") { + + options "-stub" + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:true, strandedness:'forward' ], // meta map + file(params.modules_testdata_base_path + "genomics/sarscov2/illumina/bam/test.single_end.bam", checkIfExists: true), + file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.gtf", checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("sarscov2 [bam] - reverse") { + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:true, strandedness:'reverse' ], // meta map + file(params.modules_testdata_base_path + "genomics/sarscov2/illumina/bam/test.single_end.bam", checkIfExists: true), + file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.gtf", checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.counts, + process.out.summary, + process.out.findAll { key, val -> key.startsWith('versions') } + ).match() } + ) + } + } + + test("sarscov2 [bam] - reverse - stub") { + + options "-stub" + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:true, strandedness:'reverse' ], // meta map + file(params.modules_testdata_base_path + "genomics/sarscov2/illumina/bam/test.single_end.bam", checkIfExists: true), + file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.gtf", checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("sarscov2 [bam] - unstranded") { + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:true, strandedness:'unstranded' ], // meta map + file(params.modules_testdata_base_path + "genomics/sarscov2/illumina/bam/test.single_end.bam", checkIfExists: true), + file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.gtf", checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.counts, + process.out.summary, + process.out.findAll { key, val -> key.startsWith('versions') } + ).match() } + ) + } + } + + test("sarscov2 [bam] - unstranded - stub") { + + options "-stub" + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:true, strandedness:'unstranded' ], // meta map + file(params.modules_testdata_base_path + "genomics/sarscov2/illumina/bam/test.single_end.bam", checkIfExists: true), + file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.gtf", checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } +} diff --git a/modules/nf-core/subread/featurecounts/tests/main.nf.test.snap b/modules/nf-core/subread/featurecounts/tests/main.nf.test.snap new file mode 100644 index 00000000..fb98cfee --- /dev/null +++ b/modules/nf-core/subread/featurecounts/tests/main.nf.test.snap @@ -0,0 +1,311 @@ +{ + "sarscov2 [bam] - forward": { + "content": [ + [ + [ + { + "id": "test", + "single_end": true, + "strandedness": "forward" + }, + "test.featureCounts.tsv:md5,af5abde30c52606302d64a3f960a262a" + ] + ], + [ + [ + { + "id": "test", + "single_end": true, + "strandedness": "forward" + }, + "test.featureCounts.tsv.summary:md5,8f602ff9a8ef467af43294e80b367cdf" + ] + ], + { + "versions_subread": [ + [ + "SUBREAD_FEATURECOUNTS", + "subread", + "2.1.1" + ] + ] + } + ], + "timestamp": "2026-02-26T03:28:13.8156532", + "meta": { + "nf-test": "0.9.4", + "nextflow": "25.10.4" + } + }, + "sarscov2 [bam] - forward - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": true, + "strandedness": "forward" + }, + "test.featureCounts.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": true, + "strandedness": "forward" + }, + "test.featureCounts.tsv.summary:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + [ + "SUBREAD_FEATURECOUNTS", + "subread", + "2.1.1" + ] + ], + "counts": [ + [ + { + "id": "test", + "single_end": true, + "strandedness": "forward" + }, + "test.featureCounts.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "summary": [ + [ + { + "id": "test", + "single_end": true, + "strandedness": "forward" + }, + "test.featureCounts.tsv.summary:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions_subread": [ + [ + "SUBREAD_FEATURECOUNTS", + "subread", + "2.1.1" + ] + ] + } + ], + "timestamp": "2026-02-26T03:28:21.127211404", + "meta": { + "nf-test": "0.9.4", + "nextflow": "25.10.4" + } + }, + "sarscov2 [bam] - unstranded": { + "content": [ + [ + [ + { + "id": "test", + "single_end": true, + "strandedness": "unstranded" + }, + "test.featureCounts.tsv:md5,355c22823290c40ccadeee94a21eca8b" + ] + ], + [ + [ + { + "id": "test", + "single_end": true, + "strandedness": "unstranded" + }, + "test.featureCounts.tsv.summary:md5,23164b79f9f23f11c82820db61a35560" + ] + ], + { + "versions_subread": [ + [ + "SUBREAD_FEATURECOUNTS", + "subread", + "2.1.1" + ] + ] + } + ], + "timestamp": "2026-02-26T03:28:43.068113331", + "meta": { + "nf-test": "0.9.4", + "nextflow": "25.10.4" + } + }, + "sarscov2 [bam] - reverse - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": true, + "strandedness": "reverse" + }, + "test.featureCounts.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": true, + "strandedness": "reverse" + }, + "test.featureCounts.tsv.summary:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + [ + "SUBREAD_FEATURECOUNTS", + "subread", + "2.1.1" + ] + ], + "counts": [ + [ + { + "id": "test", + "single_end": true, + "strandedness": "reverse" + }, + "test.featureCounts.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "summary": [ + [ + { + "id": "test", + "single_end": true, + "strandedness": "reverse" + }, + "test.featureCounts.tsv.summary:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions_subread": [ + [ + "SUBREAD_FEATURECOUNTS", + "subread", + "2.1.1" + ] + ] + } + ], + "timestamp": "2026-02-26T03:28:35.854492757", + "meta": { + "nf-test": "0.9.4", + "nextflow": "25.10.4" + } + }, + "sarscov2 [bam] - reverse": { + "content": [ + [ + [ + { + "id": "test", + "single_end": true, + "strandedness": "reverse" + }, + "test.featureCounts.tsv:md5,e79027ec5752cfdd6e8d85bb6932294c" + ] + ], + [ + [ + { + "id": "test", + "single_end": true, + "strandedness": "reverse" + }, + "test.featureCounts.tsv.summary:md5,7cfa30ad678b9bc1bc63afbb0281547b" + ] + ], + { + "versions_subread": [ + [ + "SUBREAD_FEATURECOUNTS", + "subread", + "2.1.1" + ] + ] + } + ], + "timestamp": "2026-02-26T03:28:28.511647205", + "meta": { + "nf-test": "0.9.4", + "nextflow": "25.10.4" + } + }, + "sarscov2 [bam] - unstranded - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": true, + "strandedness": "unstranded" + }, + "test.featureCounts.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": true, + "strandedness": "unstranded" + }, + "test.featureCounts.tsv.summary:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + [ + "SUBREAD_FEATURECOUNTS", + "subread", + "2.1.1" + ] + ], + "counts": [ + [ + { + "id": "test", + "single_end": true, + "strandedness": "unstranded" + }, + "test.featureCounts.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "summary": [ + [ + { + "id": "test", + "single_end": true, + "strandedness": "unstranded" + }, + "test.featureCounts.tsv.summary:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions_subread": [ + [ + "SUBREAD_FEATURECOUNTS", + "subread", + "2.1.1" + ] + ] + } + ], + "timestamp": "2026-02-26T03:28:50.377997465", + "meta": { + "nf-test": "0.9.4", + "nextflow": "25.10.4" + } + } +} \ No newline at end of file diff --git a/modules/nf-core/subread/featurecounts/tests/nextflow.config b/modules/nf-core/subread/featurecounts/tests/nextflow.config new file mode 100644 index 00000000..d9fd4fd5 --- /dev/null +++ b/modules/nf-core/subread/featurecounts/tests/nextflow.config @@ -0,0 +1,9 @@ +process { + + publishDir = { "${params.outdir}/${task.process.tokenize(':')[-1].tokenize('_')[0].toLowerCase()}" } + + withName: SUBREAD_FEATURECOUNTS { + ext.args = '-t CDS' + } + +} diff --git a/modules/nf-core/trimgalore/environment.yml b/modules/nf-core/trimgalore/environment.yml index 60b33ef2..ac5b9faa 100644 --- a/modules/nf-core/trimgalore/environment.yml +++ b/modules/nf-core/trimgalore/environment.yml @@ -4,4 +4,4 @@ channels: - conda-forge - bioconda dependencies: - - bioconda::trim-galore=0.6.10 + - bioconda::trim-galore=2.1.0 diff --git a/modules/nf-core/trimgalore/main.nf b/modules/nf-core/trimgalore/main.nf index 5790b520..2a08be91 100644 --- a/modules/nf-core/trimgalore/main.nf +++ b/modules/nf-core/trimgalore/main.nf @@ -1,11 +1,12 @@ process TRIMGALORE { tag "${meta.id}" - label 'process_high' + label 'process_medium' + label 'process_low_memory' conda "${moduleDir}/environment.yml" - 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'}" + container "${workflow.containerEngine in ['singularity', 'apptainer'] && !task.ext.singularity_pull_docker_container ? + 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/7e/7e44249e3fafe3d136ea726225551b51bca642387e16d9687b3e602207dedb20/data' : + 'community.wave.seqera.io/library/trim-galore:2.1.0--27e6376b8f6c1872'}" input: tuple val(meta), path(reads) diff --git a/modules/nf-core/trimgalore/tests/main.nf.test b/modules/nf-core/trimgalore/tests/main.nf.test index ac97b087..11d68f4d 100644 --- a/modules/nf-core/trimgalore/tests/main.nf.test +++ b/modules/nf-core/trimgalore/tests/main.nf.test @@ -26,9 +26,8 @@ nextflow_process { { assert process.success }, { 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")} + path(process.out.log[0][1]).readLines().dropWhile { !it.startsWith("=== Summary") }.join('\n').md5(), + process.out.findAll { key, val -> key.startsWith("versions") } ).match() } ) } @@ -53,13 +52,10 @@ nextflow_process { assertAll ( { assert process.success }, { assert snapshot( - 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")} + process.out.reads, + path(process.out.log[0][1][0]).readLines().dropWhile { !it.startsWith("=== Summary") }.join('\n').md5(), + path(process.out.log[0][1][1]).readLines().dropWhile { !it.startsWith("=== Summary") }.join('\n').md5(), + process.out.findAll { key, val -> key.startsWith("versions") } ).match() } ) } @@ -90,15 +86,11 @@ nextflow_process { assertAll ( { assert process.success }, { 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")} + process.out.reads, + process.out.unpaired, + path(process.out.log[0][1][0]).readLines().dropWhile { !it.startsWith("=== Summary") }.join('\n').md5(), + path(process.out.log[0][1][1]).readLines().dropWhile { !it.startsWith("=== Summary") }.join('\n').md5(), + process.out.findAll { key, val -> key.startsWith("versions") } ).match() } ) } @@ -125,7 +117,7 @@ nextflow_process { { assert snapshot( process.out.reads, process.out.log, - process.out.findAll { key, val -> key.startsWith("versions")} + process.out.findAll { key, val -> key.startsWith("versions") } ).match() } ) } @@ -133,7 +125,7 @@ nextflow_process { test("sarscov2 - fastq - paired-end - stub") { - options "-stub" + options "-stub" when { process { @@ -154,7 +146,7 @@ nextflow_process { { assert snapshot( process.out.reads, process.out.log, - process.out.findAll { key, val -> key.startsWith("versions")} + process.out.findAll { key, val -> key.startsWith("versions") } ).match() } ) } diff --git a/modules/nf-core/trimgalore/tests/main.nf.test.snap b/modules/nf-core/trimgalore/tests/main.nf.test.snap index 2fb55f2d..3a806d8e 100644 --- a/modules/nf-core/trimgalore/tests/main.nf.test.snap +++ b/modules/nf-core/trimgalore/tests/main.nf.test.snap @@ -30,168 +30,60 @@ [ "TRIMGALORE", "trimgalore", - "0.6.10" + "2.1.0" ] ] } ], + "timestamp": "2026-05-05T08:48:10.832490464", "meta": { - "nf-test": "0.9.3", - "nextflow": "25.10.2" - }, - "timestamp": "2025-12-15T14:40:14.896140126" + "nf-test": "0.9.5", + "nextflow": "26.04.0" + } }, "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" + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1_val_1.fq.gz:md5,75413e85910bbc2e1556e12f6479f935", + "test_2_val_2.fq.gz:md5,d3c588c12646ebd36a0812fe02d0bda6" + ] + ] ], [ - "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%)" + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1_unpaired_1.fq.gz:md5,17e0e878f6d0e93b9008a05f128660b6", + "test_2_unpaired_2.fq.gz:md5,b09a064368a867e099e66df5ef69b044" + ] + ] ], + "4cbef464fbc09252a1282078ec23942e", + "ee1b8a371f1490e5faf5e346523b8886", { "versions_trimgalore": [ [ "TRIMGALORE", "trimgalore", - "0.6.10" + "2.1.0" ] ] } ], + "timestamp": "2026-05-05T09:34:57.668635539", "meta": { - "nf-test": "0.9.3", - "nextflow": "25.10.2" - }, - "timestamp": "2025-12-15T14:39:53.811844594" + "nf-test": "0.9.5", + "nextflow": "26.04.0" + } }, "sarscov2 - fastq - single-end - stub": { "content": [ @@ -218,162 +110,48 @@ [ "TRIMGALORE", "trimgalore", - "0.6.10" + "2.1.0" ] ] } ], + "timestamp": "2026-05-05T08:48:05.803691794", "meta": { - "nf-test": "0.9.3", - "nextflow": "25.10.2" - }, - "timestamp": "2025-12-15T14:40:03.991561892" + "nf-test": "0.9.5", + "nextflow": "26.04.0" + } }, "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", - "" + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1_val_1.fq.gz:md5,566d44cca0d22c522d6cf0e50c7165dc", + "test_2_val_2.fq.gz:md5,3c023e8e890b897821df3dc98f48c2b3" + ] + ] ], + "4da0165f1c5a0d3f1d5eea9ad17fb1fb", + "808929d2f70ffea0ddd7750bbb400b02", { "versions_trimgalore": [ [ "TRIMGALORE", "trimgalore", - "0.6.10" + "2.1.0" ] ] } ], + "timestamp": "2026-05-05T09:34:52.551563029", "meta": { - "nf-test": "0.9.3", - "nextflow": "25.10.2" - }, - "timestamp": "2025-12-15T14:39:43.937555685" + "nf-test": "0.9.5", + "nextflow": "26.04.0" + } }, "sarscov2 - fastq - single-end": { "content": [ @@ -386,83 +164,21 @@ "test_trimmed.fq.gz:md5,566d44cca0d22c522d6cf0e50c7165dc" ] ], - [ - "", - "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%)", - "" - ], + "76dd6b9d009e332d2aa6443de525c182", { "versions_trimgalore": [ [ "TRIMGALORE", "trimgalore", - "0.6.10" + "2.1.0" ] ] } ], + "timestamp": "2026-05-05T09:34:47.273738299", "meta": { - "nf-test": "0.9.3", - "nextflow": "25.10.2" - }, - "timestamp": "2025-12-15T14:39:33.985021562" + "nf-test": "0.9.5", + "nextflow": "26.04.0" + } } } \ No newline at end of file diff --git a/modules/nf-core/ucsc/bedgraphtobigwig/environment.yml b/modules/nf-core/ucsc/bedgraphtobigwig/environment.yml new file mode 100644 index 00000000..1211bc40 --- /dev/null +++ b/modules/nf-core/ucsc/bedgraphtobigwig/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::ucsc-bedgraphtobigwig=482 diff --git a/modules/nf-core/ucsc/bedgraphtobigwig/main.nf b/modules/nf-core/ucsc/bedgraphtobigwig/main.nf index 06bb4709..31c43aec 100644 --- a/modules/nf-core/ucsc/bedgraphtobigwig/main.nf +++ b/modules/nf-core/ucsc/bedgraphtobigwig/main.nf @@ -2,11 +2,10 @@ 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 "bioconda::ucsc-bedgraphtobigwig=445" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/ucsc-bedgraphtobigwig:445--h954228d_0' : - 'biocontainers/ucsc-bedgraphtobigwig:445--h954228d_0' }" + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine in ['singularity', 'apptainer'] && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/ucsc-bedgraphtobigwig:482--hdc0a859_0' : + 'quay.io/biocontainers/ucsc-bedgraphtobigwig:482--hdc0a859_0' }" input: tuple val(meta), path(bedgraph) @@ -14,36 +13,25 @@ process UCSC_BEDGRAPHTOBIGWIG { output: tuple val(meta), path("*.bigWig"), emit: bigwig - path "versions.yml" , emit: versions - + tuple val("${task.process}"), val('ucsc'), val('482'), topic: versions, emit: versions_ucsc + // WARN: Version information not provided by tool on CLI. Please update this string when bumping container versions. when: task.ext.when == null || task.ext.when script: def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" - def VERSION = '445' // 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 = '445' // 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 416c91e0..7d0cf57f 100755 --- a/modules/nf-core/ucsc/bedgraphtobigwig/meta.yml +++ b/modules/nf-core/ucsc/bedgraphtobigwig/meta.yml @@ -12,36 +12,59 @@ tools: homepage: http://hgdownload.cse.ucsc.edu/admin/exe/ documentation: https://genome.ucsc.edu/goldenPath/help/bigWig.html licence: ["varies; see http://genome.ucsc.edu/license"] - + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - bedgraph: - type: file - description: bedGraph file - pattern: "*.{bedGraph}" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bedgraph: + type: file + description: bedGraph file + pattern: "*.{bedGraph}" + ontologies: [] - sizes: type: file description: chromosome sizes file pattern: "*.{sizes}" - + ontologies: [] output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - - bigwig: - type: file - description: bigWig file - pattern: "*.{bigWig}" + bigwig: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.bigWig": + type: file + description: bigWig file + pattern: "*.{bigWig}" + ontologies: [] + versions_ucsc: + - - ${task.process}: + type: string + description: The process the versions were collected from + - ucsc: + type: string + description: The tool name + - "482": + 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 + - "482": + type: eval + description: The expression to obtain the version of the tool authors: - "@drpatelh" +maintainers: + - "@drpatelh" diff --git a/modules/nf-core/ucsc/bedgraphtobigwig/tests/main.nf.test b/modules/nf-core/ucsc/bedgraphtobigwig/tests/main.nf.test new file mode 100644 index 00000000..94a799ef --- /dev/null +++ b/modules/nf-core/ucsc/bedgraphtobigwig/tests/main.nf.test @@ -0,0 +1,53 @@ +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 { + process { + """ + input[0] = Channel.of([ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + "genomics/sarscov2/illumina/bedgraph/test.bedgraph", checkIfExists: true) + ]) + input[1] = Channel.of(file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.sizes", checkIfExists: true)) + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("stub") { + options "-stub" + when { + process { + """ + input[0] = Channel.of([ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + "genomics/sarscov2/illumina/bedgraph/test.bedgraph", checkIfExists: true) + ]) + input[1] = Channel.of(file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.sizes", checkIfExists: true)) + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } +} diff --git a/modules/nf-core/ucsc/bedgraphtobigwig/tests/main.nf.test.snap b/modules/nf-core/ucsc/bedgraphtobigwig/tests/main.nf.test.snap new file mode 100644 index 00000000..7c51213f --- /dev/null +++ b/modules/nf-core/ucsc/bedgraphtobigwig/tests/main.nf.test.snap @@ -0,0 +1,84 @@ +{ + "stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.bigWig:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + "UCSC_BEDGRAPHTOBIGWIG", + "ucsc", + "482" + ] + ], + "bigwig": [ + [ + { + "id": "test" + }, + "test.bigWig:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions_ucsc": [ + [ + "UCSC_BEDGRAPHTOBIGWIG", + "ucsc", + "482" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.04.3" + }, + "timestamp": "2026-02-25T14:56:47.843203613" + }, + "Should run without failures": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.bigWig:md5,910ecc7f57e3bbd5fac5a8edba4f615d" + ] + ], + "1": [ + [ + "UCSC_BEDGRAPHTOBIGWIG", + "ucsc", + "482" + ] + ], + "bigwig": [ + [ + { + "id": "test" + }, + "test.bigWig:md5,910ecc7f57e3bbd5fac5a8edba4f615d" + ] + ], + "versions_ucsc": [ + [ + "UCSC_BEDGRAPHTOBIGWIG", + "ucsc", + "482" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.04.3" + }, + "timestamp": "2026-02-25T14:56:35.886146907" + } +} \ No newline at end of file diff --git a/modules/nf-core/umitools/extract/main.nf b/modules/nf-core/umitools/extract/main.nf index 82d18cd5..0aafe59d 100644 --- a/modules/nf-core/umitools/extract/main.nf +++ b/modules/nf-core/umitools/extract/main.nf @@ -4,7 +4,7 @@ process UMITOOLS_EXTRACT { label "process_long" conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + container "${ workflow.containerEngine in ['singularity', 'apptainer'] && !task.ext.singularity_pull_docker_container ? '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' }" diff --git a/modules/nf-core/untar/environment.yml b/modules/nf-core/untar/environment.yml new file mode 100644 index 00000000..9b926b1f --- /dev/null +++ b/modules/nf-core/untar/environment.yml @@ -0,0 +1,12 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json +channels: + - conda-forge + - bioconda +dependencies: + - conda-forge::coreutils=9.5 + - conda-forge::grep=3.11 + - conda-forge::gzip=1.13 + - conda-forge::lbzip2=2.5 + - conda-forge::sed=4.8 + - conda-forge::tar=1.34 diff --git a/modules/nf-core/untar/main.nf b/modules/nf-core/untar/main.nf index 8cd1856c..bf2c056c 100644 --- a/modules/nf-core/untar/main.nf +++ b/modules/nf-core/untar/main.nf @@ -1,63 +1,75 @@ process UNTAR { - tag "$archive" + tag "${archive}" label 'process_single' - conda "conda-forge::sed=4.7 bioconda::grep=3.4 conda-forge::tar=1.34" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/ubuntu:20.04' : - 'nf-core/ubuntu:20.04' }" + conda "${moduleDir}/environment.yml" + container "${workflow.containerEngine in ['singularity', 'apptainer'] && !task.ext.singularity_pull_docker_container + ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/52/52ccce28d2ab928ab862e25aae26314d69c8e38bd41ca9431c67ef05221348aa/data' + : 'community.wave.seqera.io/library/coreutils_grep_gzip_lbzip2_pruned:838ba80435a629f8'}" input: tuple val(meta), path(archive) output: - tuple val(meta), path("$prefix"), emit: untar - path "versions.yml" , emit: versions + tuple val(meta), path("${prefix}"), emit: untar + 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 script: - def args = task.ext.args ?: '' + def args = task.ext.args ?: '' def args2 = task.ext.args2 ?: '' - prefix = task.ext.prefix ?: ( meta.id ? "${meta.id}" : archive.baseName.toString().replaceFirst(/\.tar$/, "")) + prefix = task.ext.prefix ?: (meta.id ? "${meta.id}" : archive.baseName.toString().replaceFirst(/\.tar$/, "")) """ - mkdir $prefix + mkdir ${prefix} ## Ensures --strip-components only applied when top level of tar contents is a directory ## If just files or multiple directories, place all in prefix if [[ \$(tar -taf ${archive} | grep -o -P "^.*?\\/" | uniq | wc -l) -eq 1 ]]; then tar \\ - -C $prefix --strip-components 1 \\ + -C ${prefix} --strip-components 1 \\ -xavf \\ - $args \\ - $archive \\ - $args2 + ${args} \\ + ${archive} \\ + ${args2} else tar \\ - -C $prefix \\ + -C ${prefix} \\ -xavf \\ - $args \\ - $archive \\ - $args2 + ${args} \\ + ${archive} \\ + ${args2} fi - cat <<-END_VERSIONS > versions.yml - "${task.process}": - untar: \$(echo \$(tar --version 2>&1) | sed 's/^.*(GNU tar) //; s/ Copyright.*\$//') - END_VERSIONS """ stub: - prefix = task.ext.prefix ?: ( meta.id ? "${meta.id}" : archive.toString().replaceFirst(/\.[^\.]+(.gz)?$/, "")) + prefix = task.ext.prefix ?: (meta.id ? "${meta.id}" : archive.toString().replaceFirst(/\.[^\.]+(.gz)?$/, "")) """ - mkdir $prefix - touch ${prefix}/file.txt - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - untar: \$(echo \$(tar --version 2>&1) | sed 's/^.*(GNU tar) //; s/ Copyright.*\$//') - END_VERSIONS + mkdir ${prefix} + ## Dry-run untaring the archive to get the files and place all in prefix + if [[ \$(tar -taf ${archive} | grep -o -P "^.*?\\/" | uniq | wc -l) -eq 1 ]]; then + for i in `tar -tf ${archive}`; + do + if [[ \$(echo "\${i}" | grep -E "/\$") == "" ]]; + then + touch \${i} + else + mkdir -p \${i} + fi + done + else + for i in `tar -tf ${archive}`; + do + if [[ \$(echo "\${i}" | grep -E "/\$") == "" ]]; + then + touch ${prefix}/\${i} + else + mkdir -p ${prefix}/\${i} + fi + done + fi """ } diff --git a/modules/nf-core/untar/meta.yml b/modules/nf-core/untar/meta.yml index db241a6e..571d8078 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,35 +7,67 @@ 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: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - archive: - type: file - description: File to be untar - pattern: "*.{tar}.{gz}" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - archive: + type: file + 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: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - untar: - type: directory - description: Directory containing contents of archive - pattern: "*/" - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + untar: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + pattern: "*/" + - ${prefix}: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + pattern: "*/" + 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" - "@matthdsm" - "@jfy133" +maintainers: + - "@joseespinosa" + - "@drpatelh" + - "@matthdsm" + - "@jfy133" diff --git a/modules/nf-core/untar/tests/main.nf.test b/modules/nf-core/untar/tests/main.nf.test new file mode 100644 index 00000000..fde8db16 --- /dev/null +++ b/modules/nf-core/untar/tests/main.nf.test @@ -0,0 +1,97 @@ +nextflow_process { + + name "Test Process UNTAR" + script "../main.nf" + process "UNTAR" + tag "modules" + tag "modules_nfcore" + tag "untar" + + test("test_untar") { + + when { + process { + """ + input[0] = [ [], file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/db/kraken2.tar.gz', checkIfExists: true) ] + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot( + process.out.untar, + process.out.findAll { key, val -> key.startsWith('versions') } + ).match() }, + ) + } + } + + test("test_untar_onlyfiles") { + + when { + process { + """ + input[0] = [ [], file(params.modules_testdata_base_path + 'generic/tar/hello.tar.gz', checkIfExists: true) ] + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot( + process.out.untar, + process.out.findAll { key, val -> key.startsWith('versions') } + ).match() }, + ) + } + } + + test("test_untar - stub") { + + options "-stub" + + when { + process { + """ + input[0] = [ [], file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/db/kraken2.tar.gz', checkIfExists: true) ] + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot( + process.out.untar, + process.out.findAll { key, val -> key.startsWith('versions') } + ).match() }, + ) + } + } + + test("test_untar_onlyfiles - stub") { + + options "-stub" + + when { + process { + """ + input[0] = [ [], file(params.modules_testdata_base_path + 'generic/tar/hello.tar.gz', checkIfExists: true) ] + """ + } + } + + then { + assertAll ( + { assert process.success }, + { 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 new file mode 100644 index 00000000..9dd1563d --- /dev/null +++ b/modules/nf-core/untar/tests/main.nf.test.snap @@ -0,0 +1,118 @@ +{ + "test_untar_onlyfiles": { + "content": [ + [ + [ + [ + + ], + [ + "hello.txt:md5,e59ff97941044f85df5297e1c302d260" + ] + ] + ], + { + "versions_untar": [ + [ + "UNTAR", + "untar", + "1.34" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.2" + }, + "timestamp": "2026-01-28T17:49:32.000491" + }, + "test_untar_onlyfiles - stub": { + "content": [ + [ + [ + [ + + ], + [ + "hello.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + { + "versions_untar": [ + [ + "UNTAR", + "untar", + "1.34" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.2" + }, + "timestamp": "2026-01-28T17:49:58.812479" + }, + "test_untar - stub": { + "content": [ + [ + [ + [ + + ], + [ + "hash.k2d:md5,d41d8cd98f00b204e9800998ecf8427e", + "opts.k2d:md5,d41d8cd98f00b204e9800998ecf8427e", + "taxo.k2d:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + { + "versions_untar": [ + [ + "UNTAR", + "untar", + "1.34" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.2" + }, + "timestamp": "2026-01-28T17:49:48.119456" + }, + "test_untar": { + "content": [ + [ + [ + [ + + ], + [ + "hash.k2d:md5,8b8598468f54a7087c203ad0190555d9", + "opts.k2d:md5,a033d00cf6759407010b21700938f543", + "taxo.k2d:md5,094d5891cdccf2f1468088855c214b2c" + ] + ] + ], + { + "versions_untar": [ + [ + "UNTAR", + "untar", + "1.34" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.2" + }, + "timestamp": "2026-01-28T17:49:17.252494" + } +} \ No newline at end of file diff --git a/subworkflows/local/align_star.nf b/subworkflows/local/align_star.nf index b659391f..e9c058a8 100644 --- a/subworkflows/local/align_star.nf +++ b/subworkflows/local/align_star.nf @@ -7,26 +7,23 @@ include { BAM_SORT_STATS_SAMTOOLS } from '../nf-core/bam_sort_stats_samtools/mai workflow ALIGN_STAR { take: - ch_reads // channel: [ val(meta), [ reads ] ] - ch_index // channel: /path/to/star/index/ - ch_fasta // channel: /path/to/fasta - seq_center // string: sequencing center + ch_reads // channel: [ val(meta), [ reads ] ] + ch_index // channel: /path/to/star/index/ + ch_fasta_fai // channel: [ val(meta), path(fasta), path(fai) ] + seq_center // string: sequencing center main: - ch_versions = channel.empty() // // Map reads with STAR // STAR_ALIGN ( ch_reads, ch_index, seq_center ) - ch_versions = ch_versions.mix(STAR_ALIGN.out.versions.first()) // // Sort, index BAM file and run samtools stats, flagstat and idxstats // - BAM_SORT_STATS_SAMTOOLS ( STAR_ALIGN.out.bam, ch_fasta ) - ch_versions = ch_versions.mix(BAM_SORT_STATS_SAMTOOLS.out.versions) + BAM_SORT_STATS_SAMTOOLS ( STAR_ALIGN.out.bam, ch_fasta_fai ) emit: orig_bam = STAR_ALIGN.out.bam // channel: [ val(meta), bam ] @@ -39,10 +36,9 @@ workflow ALIGN_STAR { tab = STAR_ALIGN.out.tab // channel: [ val(meta), tab ] bam = BAM_SORT_STATS_SAMTOOLS.out.bam // channel: [ val(meta), [ bam ] ] - bai = BAM_SORT_STATS_SAMTOOLS.out.bai // channel: [ val(meta), [ bai ] ] + index = BAM_SORT_STATS_SAMTOOLS.out.index // channel: [ val(meta), [ bai/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 ] ] - versions = ch_versions // channel: [ versions.yml ] } diff --git a/subworkflows/local/bam_bedgraph_bigwig_bedtools_ucsc.nf b/subworkflows/local/bam_bedgraph_bigwig_bedtools_ucsc.nf index 05098a96..623076dc 100644 --- a/subworkflows/local/bam_bedgraph_bigwig_bedtools_ucsc.nf +++ b/subworkflows/local/bam_bedgraph_bigwig_bedtools_ucsc.nf @@ -13,7 +13,6 @@ workflow BAM_BEDGRAPH_BIGWIG_BEDTOOLS_UCSC { main: - ch_versions = channel.empty() // // Create bedGraph coverage track @@ -21,7 +20,6 @@ workflow BAM_BEDGRAPH_BIGWIG_BEDTOOLS_UCSC { BEDTOOLS_GENOMECOV ( ch_bam_flagstat ) - ch_versions = ch_versions.mix(BEDTOOLS_GENOMECOV.out.versions.first()) // // Create bigWig coverage tracks @@ -30,7 +28,6 @@ workflow BAM_BEDGRAPH_BIGWIG_BEDTOOLS_UCSC { BEDTOOLS_GENOMECOV.out.bedgraph, ch_chrom_sizes ) - ch_versions = ch_versions.mix(UCSC_BEDGRAPHTOBIGWIG.out.versions.first()) emit: bedgraph = BEDTOOLS_GENOMECOV.out.bedgraph // channel: [ val(meta), [ bedgraph ] ] @@ -38,5 +35,4 @@ workflow BAM_BEDGRAPH_BIGWIG_BEDTOOLS_UCSC { bigwig = UCSC_BEDGRAPHTOBIGWIG.out.bigwig // channel: [ val(meta), [ bigwig ] ] - versions = ch_versions // channel: [ versions.yml ] } diff --git a/subworkflows/local/bam_filter_bamtools.nf b/subworkflows/local/bam_filter_bamtools.nf index 5be3ccdd..c00ec8f0 100644 --- a/subworkflows/local/bam_filter_bamtools.nf +++ b/subworkflows/local/bam_filter_bamtools.nf @@ -8,26 +8,24 @@ include { BAM_REMOVE_ORPHANS } from '../../modules/local/bam_remove_orphans workflow BAM_FILTER_BAMTOOLS { take: - ch_bam_bai // channel: [ val(meta), [ bam ], [bai] ] + ch_bam_index // channel: [ val(meta), [ bam ], [ bai/csi ] ] ch_bed // channel: [ bed ] - ch_fasta // channel: [ fasta ] + ch_fasta_fai // channel: [ val(meta), path(fasta), path(fai) ] ch_bamtools_filter_se_config // channel: [ config_file ] ch_bamtools_filter_pe_config // channel: [ config_file ] main: - ch_versions = channel.empty() // // Filter BAM file with BAMTools // BAMTOOLS_FILTER ( - ch_bam_bai, + ch_bam_index, ch_bed, ch_bamtools_filter_se_config, ch_bamtools_filter_pe_config ) - ch_versions = ch_versions.mix(BAMTOOLS_FILTER.out.versions.first()) BAMTOOLS_FILTER .out @@ -47,37 +45,25 @@ workflow BAM_FILTER_BAMTOOLS { SAMTOOLS_INDEX { ch_bam.single_end } - ch_versions = ch_versions.mix(SAMTOOLS_INDEX.out.versions.first()) - SAMTOOLS_INDEX.out.bai - .join(SAMTOOLS_INDEX.out.csi, by: [0], remainder: true) - .map { - meta, bai, csi -> - if (bai) { - [ meta, bai ] - } else { - [ meta, csi ] - } - } - .set { ch_index } + ch_index = SAMTOOLS_INDEX.out.index // // Run samtools stats, flagstat and idxstats on SE BAM // BAM_STATS_SAMTOOLS ( ch_bam.single_end.join(ch_index), - ch_fasta + ch_fasta_fai ) - ch_versions = ch_versions.mix(BAM_STATS_SAMTOOLS.out.versions.first()) // // Name sort PE BAM before filtering with pysam // SAMTOOLS_SORT ( ch_bam.paired_end, - ch_fasta + ch_fasta_fai, + '' ) - ch_versions = ch_versions.mix(SAMTOOLS_SORT.out.versions.first()) // // Remove orphan reads from PE BAM file @@ -85,24 +71,20 @@ workflow BAM_FILTER_BAMTOOLS { BAM_REMOVE_ORPHANS ( SAMTOOLS_SORT.out.bam ) - ch_versions = ch_versions.mix(BAM_REMOVE_ORPHANS.out.versions.first()) // // Sort, index PE BAM file and run samtools stats, flagstat and idxstats // BAM_SORT_STATS_SAMTOOLS ( BAM_REMOVE_ORPHANS.out.bam, - ch_fasta + ch_fasta_fai ) - ch_versions = ch_versions.mix(BAM_SORT_STATS_SAMTOOLS.out.versions.first()) emit: name_bam = SAMTOOLS_SORT.out.bam // channel: [ val(meta), [ bam ] ] bam = BAM_SORT_STATS_SAMTOOLS.out.bam.mix(ch_bam.single_end) // channel: [ val(meta), [ bam ] ] - bai = BAM_SORT_STATS_SAMTOOLS.out.bai.mix(SAMTOOLS_INDEX.out.bai) // channel: [ val(meta), [ bai ] ] - csi = BAM_SORT_STATS_SAMTOOLS.out.csi.mix(SAMTOOLS_INDEX.out.csi) // channel: [ val(meta), [ csi ] ] + index = BAM_SORT_STATS_SAMTOOLS.out.index.mix(ch_index) // channel: [ val(meta), [ bai/csi ] ] stats = BAM_SORT_STATS_SAMTOOLS.out.stats.mix(BAM_STATS_SAMTOOLS.out.stats) // channel: [ val(meta), [ stats ] ] flagstat = BAM_SORT_STATS_SAMTOOLS.out.flagstat.mix(BAM_STATS_SAMTOOLS.out.flagstat) // channel: [ val(meta), [ flagstat ] ] idxstats = BAM_SORT_STATS_SAMTOOLS.out.idxstats.mix(BAM_STATS_SAMTOOLS.out.idxstats) // channel: [ val(meta), [ idxstats ] ] - versions = ch_versions // channel: [ versions.yml ] } diff --git a/subworkflows/local/bam_peaks_call_qc_annotate_macs3_homer.nf b/subworkflows/local/bam_peaks_call_qc_annotate_macs3_homer.nf index d7224280..2c10493f 100644 --- a/subworkflows/local/bam_peaks_call_qc_annotate_macs3_homer.nf +++ b/subworkflows/local/bam_peaks_call_qc_annotate_macs3_homer.nf @@ -26,7 +26,6 @@ workflow BAM_PEAKS_CALL_QC_ANNOTATE_MACS3_HOMER { main: - ch_versions = channel.empty() // // Call peaks with MACS3 @@ -35,7 +34,6 @@ workflow BAM_PEAKS_CALL_QC_ANNOTATE_MACS3_HOMER { ch_bam, macs_gsize ) - ch_versions = ch_versions.mix(MACS3_CALLPEAK.out.versions.first()) // // Filter out samples with 0 MACS3 peaks called @@ -64,7 +62,6 @@ workflow BAM_PEAKS_CALL_QC_ANNOTATE_MACS3_HOMER { FRIP_SCORE ( ch_bam_peaks ) - ch_versions = ch_versions.mix(FRIP_SCORE.out.versions.first()) // Create channels: [ meta, peaks, frip ] ch_bam_peaks @@ -83,7 +80,6 @@ workflow BAM_PEAKS_CALL_QC_ANNOTATE_MACS3_HOMER { ch_peak_count_header_multiqc, ch_frip_score_multiqc ) - ch_versions = ch_versions.mix(MULTIQC_CUSTOM_PEAKS.out.versions.first()) ch_homer_annotatepeaks = channel.empty() ch_plot_macs3_qc_txt = channel.empty() @@ -101,7 +97,6 @@ workflow BAM_PEAKS_CALL_QC_ANNOTATE_MACS3_HOMER { ch_gtf ) ch_homer_annotatepeaks = HOMER_ANNOTATEPEAKS.out.txt - ch_versions = ch_versions.mix(HOMER_ANNOTATEPEAKS.out.versions.first()) if (!skip_peak_qc) { // @@ -113,7 +108,6 @@ workflow BAM_PEAKS_CALL_QC_ANNOTATE_MACS3_HOMER { ) ch_plot_macs3_qc_txt = PLOT_MACS3_QC.out.txt ch_plot_macs3_qc_pdf = PLOT_MACS3_QC.out.pdf - ch_versions = ch_versions.mix(PLOT_MACS3_QC.out.versions) // // Peak annotation QC plots with R @@ -126,7 +120,6 @@ workflow BAM_PEAKS_CALL_QC_ANNOTATE_MACS3_HOMER { ch_plot_homer_annotatepeaks_txt = PLOT_HOMER_ANNOTATEPEAKS.out.txt ch_plot_homer_annotatepeaks_pdf = PLOT_HOMER_ANNOTATEPEAKS.out.pdf ch_plot_homer_annotatepeaks_tsv = PLOT_HOMER_ANNOTATEPEAKS.out.tsv - ch_versions = ch_versions.mix(PLOT_HOMER_ANNOTATEPEAKS.out.versions) } } @@ -151,5 +144,4 @@ workflow BAM_PEAKS_CALL_QC_ANNOTATE_MACS3_HOMER { plot_homer_annotatepeaks_pdf = ch_plot_homer_annotatepeaks_pdf // channel: [ pdf ] plot_homer_annotatepeaks_tsv = ch_plot_homer_annotatepeaks_tsv // channel: [ tsv ] - versions = ch_versions // channel: [ versions.yml ] } diff --git a/subworkflows/local/bam_shift_reads.nf b/subworkflows/local/bam_shift_reads.nf index 515e8ab6..6e9c9f8a 100644 --- a/subworkflows/local/bam_shift_reads.nf +++ b/subworkflows/local/bam_shift_reads.nf @@ -5,28 +5,26 @@ include { DEEPTOOLS_ALIGNMENTSIEVE } from '../../modules/nf-core/deeptools/align workflow BAM_SHIFT_READS { take: - ch_bam_bai // channel: [ val(meta), [ bam ], [bai] ] - ch_fasta // channel: [ fasta ] + ch_bam_index // channel: [ val(meta), [ bam ], [ bai/csi ] ] + ch_fasta_fai // channel: [ val(meta), path(fasta), path(fai) ] main: - ch_versions = channel.empty() // // Shift reads // DEEPTOOLS_ALIGNMENTSIEVE ( - ch_bam_bai + ch_bam_index ) - ch_versions = ch_versions.mix(DEEPTOOLS_ALIGNMENTSIEVE.out.versions) // // Sort reads // SAMTOOLS_SORT ( DEEPTOOLS_ALIGNMENTSIEVE.out.bam, - ch_fasta + ch_fasta_fai, + '' ) - ch_versions = ch_versions.mix(SAMTOOLS_SORT.out.versions) // // Index reads @@ -34,20 +32,16 @@ workflow BAM_SHIFT_READS { SAMTOOLS_INDEX ( SAMTOOLS_SORT.out.bam ) - ch_versions = ch_versions.mix(SAMTOOLS_INDEX.out.versions) // // Run samtools flagstat // SAMTOOLS_FLAGSTAT ( - SAMTOOLS_SORT.out.bam.join(SAMTOOLS_INDEX.out.bai, by: [0]) + SAMTOOLS_SORT.out.bam.join(SAMTOOLS_INDEX.out.index, by: [0]) ) - ch_versions = ch_versions.mix(SAMTOOLS_FLAGSTAT.out.versions) emit: bam = SAMTOOLS_SORT.out.bam // channel: [ val(meta), [ bam ] ] - bai = SAMTOOLS_INDEX.out.bai // channel: [ val(meta), [ bai ] ] - csi = SAMTOOLS_INDEX.out.csi // channel: [ val(meta), [ csi ] ] + index = SAMTOOLS_INDEX.out.index // channel: [ val(meta), [ bai/csi ] ] flagstat = SAMTOOLS_FLAGSTAT.out.flagstat // channel: [ val(meta), [ flagstat ] ] - versions = ch_versions // channel: [ versions.yml ] } diff --git a/subworkflows/local/bed_consensus_quantify_qc_bedtools_featurecounts_deseq2.nf b/subworkflows/local/bed_consensus_quantify_qc_bedtools_featurecounts_deseq2.nf index c968f046..7866a97f 100644 --- a/subworkflows/local/bed_consensus_quantify_qc_bedtools_featurecounts_deseq2.nf +++ b/subworkflows/local/bed_consensus_quantify_qc_bedtools_featurecounts_deseq2.nf @@ -6,6 +6,7 @@ include { HOMER_ANNOTATEPEAKS } from '../../modules/nf-core/homer/annotatepea include { SUBREAD_FEATURECOUNTS } from '../../modules/nf-core/subread/featurecounts/main' include { MACS3_CONSENSUS } from '../../modules/local/macs3_consensus' +include { FEATURECOUNTS_MERGE } from '../../modules/local/featurecounts_merge' include { DESEQ2_QC } from '../../modules/local/deseq2_qc' workflow BED_CONSENSUS_QUANTIFY_QC_BEDTOOLS_FEATURECOUNTS_DESEQ2 { @@ -22,7 +23,6 @@ workflow BED_CONSENSUS_QUANTIFY_QC_BEDTOOLS_FEATURECOUNTS_DESEQ2 { main: - ch_versions = channel.empty() // Create channels: [ meta , [ peaks ] ] // where meta = [ id : consensus_peaks ] @@ -42,7 +42,6 @@ workflow BED_CONSENSUS_QUANTIFY_QC_BEDTOOLS_FEATURECOUNTS_DESEQ2 { ch_consensus_peaks, is_narrow_peak ) - ch_versions = ch_versions.mix(MACS3_CONSENSUS.out.versions) // // Annotate consensus peaks @@ -55,31 +54,74 @@ workflow BED_CONSENSUS_QUANTIFY_QC_BEDTOOLS_FEATURECOUNTS_DESEQ2 { ch_gtf ) ch_homer_annotatepeaks = HOMER_ANNOTATEPEAKS.out.txt - ch_versions = ch_versions.mix(HOMER_ANNOTATEPEAKS.out.versions) } - // Create channels: [ meta, [ bams ], saf ] + // + // Quantify peaks across samples with featureCounts. + // + // featureCounts (subread >= 2.1.0) applies paired-end mode (-p) to a whole + // invocation and aborts when that invocation mixes single-end and paired-end + // BAMs. The consensus BAMs can span both library types, so split them by + // endedness, count each homogeneous batch with the correct pairing flag + // (derived from meta.single_end inside SUBREAD_FEATURECOUNTS), then merge the + // per-batch matrices back into one consensus table for DESeq2 and MultiQC. + // The join with ch_peaks keeps only samples that contributed peaks; combining + // with MACS3_CONSENSUS.out.saf also gates counting on a consensus existing + // (>= 2 samples), matching the previous behaviour. + // + ch_consensus_saf = MACS3_CONSENSUS.out.saf.map { _meta, saf -> saf } + + // The merged-library caller joins in a control-BAM column + // ([ meta, bam, control ] -> [ meta, bam, control, peak ]) while the + // merged-replicate caller does not ([ meta, bams ] -> [ meta, bams, peak ]), + // so the joined tuple arity differs between the two instantiations of this + // subworkflow. Index positionally (meta = item[0], bam = item[1]) to stay + // tolerant of both shapes, as the pre-split implementation did. ch_bams .join(ch_peaks) - .collect { item -> item[1] } - .filter { item -> item.size() > 1 } - .map { item -> [ item ] } - .concat(MACS3_CONSENSUS.out.saf) - .collect() - .filter { item -> item.size() == 3 } - .map { - bam, meta, saf -> - [ meta, bam , saf ] + .branch { item -> + single_end: item[0].single_end + paired_end: !item[0].single_end } - .set { ch_bam_saf } + .set { ch_consensus_bams } + + // Each batch is assembled from an unordered channel collect, so sort by + // filename: the BAM order sets the featureCounts column order, and an + // unsorted list makes the count matrix (and its snapshot md5) vary between + // runs and hosts. + ch_se_batch = ch_consensus_bams.single_end + .map { item -> item[1] } + .collect() + .filter { bams -> bams } + .map { bams -> [ [ id: 'consensus_peaks', single_end: true ], bams.toSorted { bam -> bam.name } ] } + + ch_pe_batch = ch_consensus_bams.paired_end + .map { item -> item[1] } + .collect() + .filter { bams -> bams } + .map { bams -> [ [ id: 'consensus_peaks', single_end: false ], bams.toSorted { bam -> bam.name } ] } + + ch_featurecounts_input = ch_se_batch + .mix(ch_pe_batch) + .combine(ch_consensus_saf) + + SUBREAD_FEATURECOUNTS ( + ch_featurecounts_input + ) // - // Quantify peaks across samples with featureCounts + // Merge the per-library-type count matrices into a single consensus matrix // - SUBREAD_FEATURECOUNTS ( - ch_bam_saf + // Sorted for the same reason: the merge script's column order follows the + // order of the per-batch matrices it is handed. + ch_merged_counts = SUBREAD_FEATURECOUNTS.out.counts + .map { _meta, counts -> counts } + .collect() + .map { counts -> [ [ id: 'consensus_peaks' ], counts.toSorted { count -> count.name } ] } + + FEATURECOUNTS_MERGE ( + ch_merged_counts ) - ch_versions = ch_versions.mix(SUBREAD_FEATURECOUNTS.out.versions) // // Generate QC plots with DESeq2 @@ -95,7 +137,7 @@ workflow BED_CONSENSUS_QUANTIFY_QC_BEDTOOLS_FEATURECOUNTS_DESEQ2 { ch_deseq2_qc_size_factors = channel.empty() if (!skip_deseq2_qc) { DESEQ2_QC ( - SUBREAD_FEATURECOUNTS.out.counts, + FEATURECOUNTS_MERGE.out.counts, ch_deseq2_pca_header_multiqc, ch_deseq2_clustering_header_multiqc ) @@ -108,7 +150,6 @@ workflow BED_CONSENSUS_QUANTIFY_QC_BEDTOOLS_FEATURECOUNTS_DESEQ2 { ch_deseq2_qc_dists_multiqc = DESEQ2_QC.out.dists_multiqc ch_deseq2_qc_log = DESEQ2_QC.out.log ch_deseq2_qc_size_factors = DESEQ2_QC.out.size_factors - ch_versions = ch_versions.mix(DESEQ2_QC.out.versions) } emit: @@ -120,8 +161,8 @@ workflow BED_CONSENSUS_QUANTIFY_QC_BEDTOOLS_FEATURECOUNTS_DESEQ2 { homer_annotatepeaks = ch_homer_annotatepeaks // channel: [ txt ] - featurecounts_txt = SUBREAD_FEATURECOUNTS.out.counts // channel: [ txt ] - featurecounts_summary = SUBREAD_FEATURECOUNTS.out.summary // channel: [ txt ] + featurecounts_txt = FEATURECOUNTS_MERGE.out.counts // channel: [ val(meta), txt ] + featurecounts_summary = SUBREAD_FEATURECOUNTS.out.summary // channel: [ val(meta), txt ] (one per library type) deseq2_qc_pdf = ch_deseq2_qc_pdf // channel: [ pdf ] deseq2_qc_rdata = ch_deseq2_qc_rdata // channel: [ rdata ] @@ -133,5 +174,4 @@ workflow BED_CONSENSUS_QUANTIFY_QC_BEDTOOLS_FEATURECOUNTS_DESEQ2 { deseq2_qc_log = ch_deseq2_qc_log // channel: [ txt ] deseq2_qc_size_factors = ch_deseq2_qc_size_factors // channel: [ txt ] - versions = ch_versions // channel: [ versions.yml ] } diff --git a/subworkflows/local/bigwig_plot_deeptools.nf b/subworkflows/local/bigwig_plot_deeptools.nf index acb41370..9e6aea50 100644 --- a/subworkflows/local/bigwig_plot_deeptools.nf +++ b/subworkflows/local/bigwig_plot_deeptools.nf @@ -16,7 +16,6 @@ workflow BIGWIG_PLOT_DEEPTOOLS { main: - ch_versions = channel.empty() // // deepTools matrix generation for plotting over full transcript length @@ -25,7 +24,6 @@ workflow BIGWIG_PLOT_DEEPTOOLS { ch_bigwig, ch_gene_bed ) - ch_versions = ch_versions.mix(DEEPTOOLS_COMPUTEMATRIX_SCALE_REGIONS.out.versions.first()) // // deepTools matrix generation for plotting at TSS point @@ -34,7 +32,6 @@ workflow BIGWIG_PLOT_DEEPTOOLS { ch_bigwig, ch_tss_bed ) - ch_versions = ch_versions.mix(DEEPTOOLS_COMPUTEMATRIX_REFERENCE_POINT.out.versions.first()) // // deepTools profile plots @@ -42,7 +39,6 @@ workflow BIGWIG_PLOT_DEEPTOOLS { DEEPTOOLS_PLOTPROFILE ( DEEPTOOLS_COMPUTEMATRIX_SCALE_REGIONS.out.matrix ) - ch_versions = ch_versions.mix(DEEPTOOLS_PLOTPROFILE.out.versions.first()) // // deepTools heatmaps @@ -50,7 +46,6 @@ workflow BIGWIG_PLOT_DEEPTOOLS { DEEPTOOLS_PLOTHEATMAP ( DEEPTOOLS_COMPUTEMATRIX_REFERENCE_POINT.out.matrix ) - ch_versions = ch_versions.mix(DEEPTOOLS_PLOTHEATMAP.out.versions.first()) emit: scale_regions_matrix = DEEPTOOLS_COMPUTEMATRIX_SCALE_REGIONS.out.matrix // channel: [ val(meta), [ matrix ] ] @@ -65,5 +60,4 @@ workflow BIGWIG_PLOT_DEEPTOOLS { plotheatmap_pdf = DEEPTOOLS_PLOTHEATMAP.out.pdf // channel: [ val(meta), [ pdf ] ] plotheatmap_table = DEEPTOOLS_PLOTHEATMAP.out.table // channel: [ val(meta), [ table ] ] - versions = ch_versions // channel: [ versions.yml ] } diff --git a/subworkflows/local/input_check.nf b/subworkflows/local/input_check.nf index 7800c55e..4406fd3b 100644 --- a/subworkflows/local/input_check.nf +++ b/subworkflows/local/input_check.nf @@ -20,7 +20,6 @@ workflow INPUT_CHECK { emit: reads = reads // channel: [ val(meta), [ reads ] ] - versions = SAMPLESHEET_CHECK.out.versions // channel: [ versions.yml ] } // Function to get list of [ meta, [ fastq_1, fastq_2 ] ] diff --git a/subworkflows/local/prepare_genome.nf b/subworkflows/local/prepare_genome.nf index ff963065..c4c3ccc4 100644 --- a/subworkflows/local/prepare_genome.nf +++ b/subworkflows/local/prepare_genome.nf @@ -17,7 +17,7 @@ include { UNTAR as UNTAR_STAR_INDEX } from '../../modules/nf-core/untar/main' include { GFFREAD } from '../../modules/nf-core/gffread/main' -include { CUSTOM_GETCHROMSIZES } from '../../modules/nf-core/custom/getchromsizes/main' +include { SAMTOOLS_FAIDX } from '../../modules/nf-core/samtools/faidx/main' include { BWA_INDEX } from '../../modules/nf-core/bwa/index/main' include { BOWTIE2_BUILD } from '../../modules/nf-core/bowtie2/build/main' include { CHROMAP_INDEX } from '../../modules/nf-core/chromap/index/main' @@ -50,15 +50,13 @@ workflow PREPARE_GENOME { read_length // integer: read length main: - ch_versions = channel.empty() // // Uncompress genome fasta file if required // ch_fasta = channel.empty() if (fasta.endsWith('.gz')) { - ch_fasta = GUNZIP_FASTA ( [ [:], fasta ] ).gunzip.map { tuple -> tuple[1] } - ch_versions = ch_versions.mix(GUNZIP_FASTA.out.versions) + ch_fasta = GUNZIP_FASTA ( [ [:], fasta ] ).gunzip.map { tuple -> tuple[1] }.first() } else { ch_fasta = channel.value(file(fasta, checkIfExists: true)) } @@ -69,19 +67,16 @@ workflow PREPARE_GENOME { if (gtf) { if (gtf.endsWith('.gz')) { ch_gtf = GUNZIP_GTF ( [ [:], gtf ] ).gunzip.map { tuple -> tuple[1] } - ch_versions = ch_versions.mix(GUNZIP_GTF.out.versions) } else { ch_gtf = channel.value(file(gtf, checkIfExists: true)) } } else if (gff) { if (gff.endsWith('.gz')) { ch_gff = GUNZIP_GFF ( [ [:], gff ] ).gunzip.map { tuple -> tuple[1] } - ch_versions = ch_versions.mix(GUNZIP_GFF.out.versions) } else { ch_gff = channel.value(file(gff, checkIfExists: true)) } - ch_gtf = GFFREAD ( ch_gff ).gtf - ch_versions = ch_versions.mix(GFFREAD.out.versions) + ch_gtf = GFFREAD ( ch_gff.map { gff_file -> [ [:], gff_file ] }, [] ).gtf.map { _meta, gtf_file -> gtf_file } } // @@ -91,7 +86,6 @@ workflow PREPARE_GENOME { if (blacklist) { if (blacklist.endsWith('.gz')) { ch_blacklist = GUNZIP_BLACKLIST ( [ [:], blacklist ] ).gunzip.map { tuple -> tuple[1] } - ch_versions = ch_versions.mix(GUNZIP_BLACKLIST.out.versions) } else { ch_blacklist = channel.value(file(blacklist, checkIfExists: true)) } @@ -112,11 +106,9 @@ workflow PREPARE_GENOME { if (make_bed) { ch_gene_bed = GTF2BED ( ch_gtf ).bed - ch_versions = ch_versions.mix(GTF2BED.out.versions) } else { if (gene_bed.endsWith('.gz')) { ch_gene_bed = GUNZIP_GENE_BED ( [ [:], params.gene_bed ] ).gunzip.map { tuple -> tuple[1] } - ch_versions = ch_versions.mix(GUNZIP_GENE_BED.out.versions) } else { ch_gene_bed = channel.value(file(gene_bed, checkIfExists: true)) } @@ -124,11 +116,9 @@ workflow PREPARE_GENOME { if (!tss_bed) { ch_tss_bed = TSS_EXTRACT ( ch_gene_bed ).tss - ch_versions = ch_versions.mix(TSS_EXTRACT.out.versions) } else { if (tss_bed.endsWith('.gz')) { ch_tss_bed = GUNZIP_TSS_BED ( [ [:], tss_bed ] ).gunzip.map { tuple -> tuple[1] } - ch_versions = ch_versions.mix(GUNZIP_TSS_BED.out.versions) } else { ch_tss_bed = channel.value(file(tss_bed, checkIfExists: true)) } @@ -137,10 +127,9 @@ workflow PREPARE_GENOME { // // Create chromosome sizes file // - CUSTOM_GETCHROMSIZES ( ch_fasta.map { item -> [ [:], item ] } ) - ch_chrom_sizes = CUSTOM_GETCHROMSIZES.out.sizes.map { tuple -> tuple[1] } - ch_fai = CUSTOM_GETCHROMSIZES.out.fai.map{ tuple -> tuple[1] } - ch_versions = ch_versions.mix(CUSTOM_GETCHROMSIZES.out.versions) + SAMTOOLS_FAIDX ( ch_fasta.map { item -> [ [:], item, [] ] }, true ) + ch_chrom_sizes = SAMTOOLS_FAIDX.out.sizes.map { tuple -> tuple[1] }.first() + ch_fai = SAMTOOLS_FAIDX.out.fai.map { tuple -> tuple[1] }.first() // // Create autosomal chromosome list for ataqv @@ -150,7 +139,6 @@ workflow PREPARE_GENOME { ch_fai ) ch_genome_autosomes = GET_AUTOSOMES.out.txt - ch_versions = ch_versions.mix(GET_AUTOSOMES.out.versions) // @@ -164,7 +152,6 @@ workflow PREPARE_GENOME { keep_mito ) ch_genome_filtered_bed = GENOME_BLACKLIST_REGIONS.out.bed - ch_versions = ch_versions.mix(GENOME_BLACKLIST_REGIONS.out.versions) // // Uncompress BWA index or generate from scratch if required @@ -174,7 +161,6 @@ workflow PREPARE_GENOME { if (bwa_index) { if (bwa_index.endsWith('.tar.gz')) { ch_bwa_index = UNTAR_BWA_INDEX ( [ [:], bwa_index ] ).untar - ch_versions = ch_versions.mix(UNTAR_BWA_INDEX.out.versions) } else { ch_bwa_index = [ [:], file(params.bwa_index, checkIfExists: true)] } @@ -191,13 +177,11 @@ workflow PREPARE_GENOME { if (bowtie2_index) { if (bowtie2_index.endsWith('.tar.gz')) { ch_bowtie2_index = UNTAR_BOWTIE2_INDEX ( [ [:], bowtie2_index ] ).untar - ch_versions = ch_versions.mix(UNTAR_BOWTIE2_INDEX.out.versions) } else { ch_bowtie2_index = [ [:], file(bowtie2_index, checkIfExists: true) ] } } else { ch_bowtie2_index = BOWTIE2_BUILD ( ch_fasta.map { item -> [ [:], item ] } ).index - ch_versions = ch_versions.mix(BOWTIE2_BUILD.out.versions) } } @@ -209,13 +193,11 @@ workflow PREPARE_GENOME { if (chromap_index) { if (chromap_index.endsWith('.tar.gz')) { ch_chromap_index = UNTAR_CHROMAP_INDEX ( [ [:], chromap_index ] ).untar - ch_versions = ch_versions.mix(UNTAR_CHROMAP_INDEX.out.versions) } else { ch_chromap_index = [ [:], file(chromap_index, checkIfExists: true) ] } } else { ch_chromap_index = CHROMAP_INDEX ( ch_fasta.map { item -> [ [:], item ] } ).index - ch_versions = ch_versions.mix(CHROMAP_INDEX.out.versions) } } @@ -227,13 +209,11 @@ workflow PREPARE_GENOME { if (star_index) { if (star_index.endsWith('.tar.gz')) { ch_star_index = UNTAR_STAR_INDEX ( [ [:], star_index ] ).untar.map{ tuple -> tuple[1] } - ch_versions = ch_versions.mix(UNTAR_STAR_INDEX.out.versions) } else { ch_star_index = channel.value(file(star_index, checkIfExists: true)) } } else { ch_star_index = STAR_GENOMEGENERATE ( ch_fasta, ch_gtf ).index - ch_versions = ch_versions.mix(STAR_GENOMEGENERATE.out.versions) } } @@ -243,11 +223,10 @@ workflow PREPARE_GENOME { ch_macs_gsize = macs_gsize if (!macs_gsize) { KHMER_UNIQUEKMERS ( - ch_fasta, + ch_fasta.map { item -> [ [:], item ] }, read_length ) - ch_macs_gsize = KHMER_UNIQUEKMERS.out.kmers.map { item -> item.text.trim() } - ch_versions = ch_versions.mix(KHMER_UNIQUEKMERS.out.versions) + ch_macs_gsize = KHMER_UNIQUEKMERS.out.kmers.map { _meta, kmers -> kmers.text.trim() } } emit: @@ -264,5 +243,4 @@ workflow PREPARE_GENOME { star_index = ch_star_index // path: star/index/ autosomes = ch_genome_autosomes // path: *.autosomes.txt macs_gsize = ch_macs_gsize // integer: MACS3 genome size - versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] } diff --git a/subworkflows/nf-core/bam_markduplicates_picard/main.nf b/subworkflows/nf-core/bam_markduplicates_picard/main.nf index 2de059b8..03d7e575 100644 --- a/subworkflows/nf-core/bam_markduplicates_picard/main.nf +++ b/subworkflows/nf-core/bam_markduplicates_picard/main.nf @@ -7,48 +7,34 @@ include { SAMTOOLS_INDEX } from '../../../modules/nf-core/samtools/index/ include { BAM_STATS_SAMTOOLS } from '../bam_stats_samtools/main' workflow BAM_MARKDUPLICATES_PICARD { - take: - ch_reads // channel: [ val(meta), path(reads) ] - ch_fasta // channel: [ path(fasta) ] - ch_fai // channel: [ path(fai) ] + ch_reads // channel: [ val(meta), path(reads) ] + ch_fasta_fai // channel: [ val(meta), path(fasta), 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()) + PICARD_MARKDUPLICATES(ch_reads, ch_fasta_fai) 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()) + SAMTOOLS_INDEX(ch_markdup) + + ch_reads_index = ch_markdup.join(SAMTOOLS_INDEX.out.index, by: [0]) - ch_reads_index = ch_markdup - .join(SAMTOOLS_INDEX.out.bai, by: [0], remainder: true) - .join(SAMTOOLS_INDEX.out.crai, by: [0], remainder: true) - .join(SAMTOOLS_INDEX.out.csi, by: [0], remainder: true) - .map{meta, reads, bai, crai, csi -> - if (bai) [ meta, reads, bai ] - else if (crai) [ meta, reads, crai ] - else [ meta, reads, csi ] - } + BAM_STATS_SAMTOOLS(ch_reads_index, ch_fasta_fai) - BAM_STATS_SAMTOOLS ( ch_reads_index, ch_fasta ) - ch_versions = ch_versions.mix(BAM_STATS_SAMTOOLS.out.versions) + ch_per_sample_mqc_bundle = BAM_STATS_SAMTOOLS.out.stats + .join(BAM_STATS_SAMTOOLS.out.flagstat, remainder: true) + .join(BAM_STATS_SAMTOOLS.out.idxstats, remainder: true) + .join(PICARD_MARKDUPLICATES.out.metrics, remainder: true) + .map { row -> [row[0], row.drop(1).findAll { f -> f != null }.collectMany { e -> (e instanceof List) ? e : [e] }] } emit: - bam = PICARD_MARKDUPLICATES.out.bam // channel: [ val(meta), path(bam) ] - cram = PICARD_MARKDUPLICATES.out.cram // channel: [ val(meta), path(cram) ] - metrics = PICARD_MARKDUPLICATES.out.metrics // channel: [ val(meta), path(metrics) ] - bai = SAMTOOLS_INDEX.out.bai // channel: [ val(meta), path(bai) ] - crai = SAMTOOLS_INDEX.out.crai // channel: [ val(meta), path(crai) ] - 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: [ versions.yml ] + bam = PICARD_MARKDUPLICATES.out.bam // channel: [ val(meta), path(bam) ] + cram = PICARD_MARKDUPLICATES.out.cram // channel: [ val(meta), path(cram) ] + metrics = PICARD_MARKDUPLICATES.out.metrics // channel: [ val(meta), path(metrics) ] + index = SAMTOOLS_INDEX.out.index // channel: [ val(meta), path(index) ] + 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) ] + per_sample_mqc_bundle = ch_per_sample_mqc_bundle // channel: [ val(meta), list(files) ] } diff --git a/subworkflows/nf-core/bam_markduplicates_picard/meta.yml b/subworkflows/nf-core/bam_markduplicates_picard/meta.yml index 433d35b2..170071e0 100644 --- a/subworkflows/nf-core/bam_markduplicates_picard/meta.yml +++ b/subworkflows/nf-core/bam_markduplicates_picard/meta.yml @@ -18,14 +18,10 @@ input: description: | Sequence reads in BAM/CRAM/SAM format Structure: [ val(meta), path(reads) ] - - ch_fasta: + - ch_fasta_fai: description: | Reference genome fasta file required for CRAM input - Structure: [ path(fasta) ] - - ch_fasta: - description: | - Index of the reference genome fasta file - Structure: [ path(fai) ] + Structure: [ path(fasta), path(fai) ] output: - bam: description: | @@ -59,6 +55,10 @@ output: description: | File containing samtools idxstats output Structure: [ val(meta), path(idxstats) ] + - per_sample_mqc_bundle: + description: | + Per-sample MultiQC-feeding outputs (stats, flagstat, idxstats, metrics) joined on meta. + Structure: [ val(meta), list(files) ] - versions: description: | Files containing software versions 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 5ef337dc..72510d02 100644 --- a/subworkflows/nf-core/bam_markduplicates_picard/tests/main.nf.test +++ b/subworkflows/nf-core/bam_markduplicates_picard/tests/main.nf.test @@ -3,6 +3,7 @@ nextflow_workflow { name "Test Workflow BAM_MARKDUPLICATES_PICARD" script "../main.nf" workflow "BAM_MARKDUPLICATES_PICARD" + config "./nextflow.config" tag "picard" tag "picard/markduplicates" @@ -29,10 +30,7 @@ nextflow_workflow { ]) input[1] = Channel.of([ [ id:'genome' ], - file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) - ]) - input[2] = Channel.of([ - [ id:'genome' ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true), file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true) ]) """ @@ -42,14 +40,17 @@ nextflow_workflow { then { assertAll( { assert workflow.success}, + { assert path(workflow.out.metrics.get(0).get(1)).getText().contains("97") }, + { assert workflow.out.per_sample_mqc_bundle.size() == 1 }, + { assert workflow.out.per_sample_mqc_bundle[0][0] == [ id:'test', single_end: false ] }, + { assert workflow.out.per_sample_mqc_bundle[0][1].size() == 4 }, { assert snapshot( path(workflow.out.bam[0][1]), - path(workflow.out.bai[0][1]), + path(workflow.out.index[0][1]), path(workflow.out.flagstat[0][1]), path(workflow.out.idxstats[0][1]), - path(workflow.out.stats[0][1]), - ).match("sarscov2 - bam") }, - { assert path(workflow.out.metrics.get(0).get(1)).getText().contains("97") } + path(workflow.out.stats[0][1]) + ).match() } ) } } @@ -65,10 +66,7 @@ nextflow_workflow { ]) input[1] = Channel.of([ [ id:'genome' ], - file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) - ]) - input[2] = Channel.of([ - [ id:'genome' ], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true), file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) ]) """ @@ -78,16 +76,74 @@ nextflow_workflow { then { assertAll( { assert workflow.success}, + { assert path(workflow.out.metrics.get(0).get(1)).getText().contains("0.999986") }, + { assert workflow.out.per_sample_mqc_bundle.size() == 1 }, + { assert workflow.out.per_sample_mqc_bundle[0][0] == [ id:'test' ] }, + { assert workflow.out.per_sample_mqc_bundle[0][1].size() == 4 }, { assert snapshot( file(workflow.out.cram[0][1]).name, - path(workflow.out.crai[0][1]), + path(workflow.out.index[0][1]), path(workflow.out.flagstat[0][1]), path(workflow.out.idxstats[0][1]), - path(workflow.out.stats[0][1]), - ).match("homo_sapiens - cram") }, - { assert path(workflow.out.metrics.get(0).get(1)).getText().contains("0.999986") } + path(workflow.out.stats[0][1]) + ).match() } ) } } + test("sarscov2 - bam - stub") { + + options "-stub" + + when { + workflow { + """ + 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) + ]) + input[1] = Channel.of([ + [ id:'genome' ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true) + ]) + """ + } + } + + then { + assertAll( + { assert workflow.success}, + { assert snapshot(workflow.out).match() } + ) + } + } + + test("homo_sapiens - cram - stub") { + + options "-stub" + + when { + workflow { + """ + input[0] = Channel.of([ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram', checkIfExists: true) + ]) + input[1] = Channel.of([ + [ id:'genome' ], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) + ]) + """ + } + } + + then { + assertAll( + { assert workflow.success}, + { assert snapshot(workflow.out).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 caf4ac8a..7e27bfe1 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 @@ -1,30 +1,322 @@ { "homo_sapiens - cram": { "content": [ - "test.cram", - "test.cram.crai:md5,78d47ba01ac4e05f3ae1e353902a989e", + "test.md.cram", + "test.md.cram.crai:md5,b641c19be42d4841ec7155c686b70f39", "test.flagstat:md5,93b0ef463df947ede1f42ff60396c34d", "test.idxstats:md5,e179601fa7b8ebce81ac3765206f6c15", - "test.stats:md5,c2f74a4d9b2377bcf4f4f184da3801af" + "test.stats:md5,1240277238efc787316933ff478cb091" ], + "timestamp": "2026-07-10T08:17:32.087781", "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-03-20T20:45:38.364189" + "nf-test": "0.9.5", + "nextflow": "26.04.6" + } + }, + "sarscov2 - bam - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.md.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test.md.metrics.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + [ + { + "id": "test", + "single_end": false + }, + "test.md.bam.bai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "4": [ + [ + { + "id": "test", + "single_end": false + }, + "test.stats:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "5": [ + [ + { + "id": "test", + "single_end": false + }, + "test.flagstat:md5,67394650dbae96d1a4fcc70484822159" + ] + ], + "6": [ + [ + { + "id": "test", + "single_end": false + }, + "test.idxstats:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "7": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.stats:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.flagstat:md5,67394650dbae96d1a4fcc70484822159", + "test.idxstats:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.md.metrics.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "bam": [ + [ + { + "id": "test", + "single_end": false + }, + "test.md.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "cram": [ + + ], + "flagstat": [ + [ + { + "id": "test", + "single_end": false + }, + "test.flagstat:md5,67394650dbae96d1a4fcc70484822159" + ] + ], + "idxstats": [ + [ + { + "id": "test", + "single_end": false + }, + "test.idxstats:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "index": [ + [ + { + "id": "test", + "single_end": false + }, + "test.md.bam.bai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "metrics": [ + [ + { + "id": "test", + "single_end": false + }, + "test.md.metrics.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "per_sample_mqc_bundle": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.stats:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.flagstat:md5,67394650dbae96d1a4fcc70484822159", + "test.idxstats:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.md.metrics.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "stats": [ + [ + { + "id": "test", + "single_end": false + }, + "test.stats:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + } + ], + "timestamp": "2026-04-20T10:50:34.652754", + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.4" + } + }, + "homo_sapiens - cram - stub": { + "content": [ + { + "0": [ + + ], + "1": [ + [ + { + "id": "test" + }, + "test.md.cram:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + [ + { + "id": "test" + }, + "test.md.metrics.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + [ + { + "id": "test" + }, + "test.md.cram.crai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "4": [ + [ + { + "id": "test" + }, + "test.stats:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "5": [ + [ + { + "id": "test" + }, + "test.flagstat:md5,67394650dbae96d1a4fcc70484822159" + ] + ], + "6": [ + [ + { + "id": "test" + }, + "test.idxstats:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "7": [ + [ + { + "id": "test" + }, + [ + "test.stats:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.flagstat:md5,67394650dbae96d1a4fcc70484822159", + "test.idxstats:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.md.metrics.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "bam": [ + + ], + "cram": [ + [ + { + "id": "test" + }, + "test.md.cram:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "flagstat": [ + [ + { + "id": "test" + }, + "test.flagstat:md5,67394650dbae96d1a4fcc70484822159" + ] + ], + "idxstats": [ + [ + { + "id": "test" + }, + "test.idxstats:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "index": [ + [ + { + "id": "test" + }, + "test.md.cram.crai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "metrics": [ + [ + { + "id": "test" + }, + "test.md.metrics.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "per_sample_mqc_bundle": [ + [ + { + "id": "test" + }, + [ + "test.stats:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.flagstat:md5,67394650dbae96d1a4fcc70484822159", + "test.idxstats:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.md.metrics.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "stats": [ + [ + { + "id": "test" + }, + "test.stats:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + } + ], + "timestamp": "2026-04-20T10:51:10.962305", + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.4" + } }, "sarscov2 - bam": { "content": [ - "test.bam:md5,3091fe6ba1b7530f382fe40b9fd8f45b", - "test.bam.bai:md5,4d3ae8d013444b55e17aa0149a2ab404", + "test.md.bam:md5,8aa8fc57298588fed0b03aacddd7ea77", + "test.md.bam.bai:md5,8973dd987f3ac6c352716ef89139c567", "test.flagstat:md5,4f7ffd1e6a5e85524d443209ac97d783", "test.idxstats:md5,df60a8c8d6621100d05178c93fb053a2", - "test.stats:md5,d7796222a087b9bb97f631f1c21b9c95" + "test.stats:md5,6d81d7a6f2a78b145b878dc1542a2e27" ], + "timestamp": "2026-07-10T08:17:08.599854", "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-03-21T11:38:08.434529" + "nf-test": "0.9.5", + "nextflow": "26.04.6" + } } } \ No newline at end of file diff --git a/subworkflows/nf-core/bam_markduplicates_picard/tests/nextflow.config b/subworkflows/nf-core/bam_markduplicates_picard/tests/nextflow.config new file mode 100644 index 00000000..2427cc4a --- /dev/null +++ b/subworkflows/nf-core/bam_markduplicates_picard/tests/nextflow.config @@ -0,0 +1,5 @@ +process { + withName: 'PICARD_MARKDUPLICATES' { + ext.prefix = { "${meta.id}.md" } + } +} diff --git a/subworkflows/nf-core/bam_markduplicates_picard/tests/tags.yml b/subworkflows/nf-core/bam_markduplicates_picard/tests/tags.yml deleted file mode 100644 index 10b85270..00000000 --- a/subworkflows/nf-core/bam_markduplicates_picard/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -subworkflows/bam_markduplicates_picard: - - subworkflows/nf-core/bam_markduplicates_picard/** diff --git a/subworkflows/nf-core/bam_sort_stats_samtools/main.nf b/subworkflows/nf-core/bam_sort_stats_samtools/main.nf index b716375b..d0cd8c30 100644 --- a/subworkflows/nf-core/bam_sort_stats_samtools/main.nf +++ b/subworkflows/nf-core/bam_sort_stats_samtools/main.nf @@ -8,43 +8,24 @@ include { BAM_STATS_SAMTOOLS } from '../bam_stats_samtools/main' workflow BAM_SORT_STATS_SAMTOOLS { take: - ch_bam // channel: [ val(meta), [ bam ] ] - ch_fasta // channel: [ val(meta), path(fasta) ] + ch_bam // channel: [ val(meta), [ bam ] ] + ch_fasta_fai // channel: [ val(meta), path(fasta), path(fai) ] main: + SAMTOOLS_SORT(ch_bam, ch_fasta_fai, '') - ch_versions = Channel.empty() - - SAMTOOLS_SORT ( ch_bam, ch_fasta ) - ch_versions = ch_versions.mix(SAMTOOLS_SORT.out.versions.first()) - - SAMTOOLS_INDEX ( SAMTOOLS_SORT.out.bam ) - ch_versions = ch_versions.mix(SAMTOOLS_INDEX.out.versions.first()) + SAMTOOLS_INDEX(SAMTOOLS_SORT.out.bam) SAMTOOLS_SORT.out.bam - .join(SAMTOOLS_INDEX.out.bai, by: [0], remainder: true) - .join(SAMTOOLS_INDEX.out.csi, by: [0], remainder: true) - .map { - meta, bam, bai, csi -> - if (bai) { - [ meta, bam, bai ] - } else { - [ meta, bam, csi ] - } - } + .join(SAMTOOLS_INDEX.out.index, by: [0]) .set { ch_bam_bai } - BAM_STATS_SAMTOOLS ( ch_bam_bai, ch_fasta ) - ch_versions = ch_versions.mix(BAM_STATS_SAMTOOLS.out.versions) + BAM_STATS_SAMTOOLS(ch_bam_bai, ch_fasta_fai) emit: - bam = SAMTOOLS_SORT.out.bam // channel: [ val(meta), [ bam ] ] - bai = SAMTOOLS_INDEX.out.bai // channel: [ val(meta), [ bai ] ] - csi = SAMTOOLS_INDEX.out.csi // channel: [ val(meta), [ csi ] ] - - stats = BAM_STATS_SAMTOOLS.out.stats // channel: [ val(meta), [ stats ] ] + bam = SAMTOOLS_SORT.out.bam // channel: [ val(meta), [ bam ] ] + index = SAMTOOLS_INDEX.out.index // channel: [ val(meta), [ index ] ] + 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 75b5b934..2db95965 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 @@ -19,9 +19,6 @@ nextflow_workflow { test("test_bam_sort_stats_samtools_single_end") { when { - params { - outdir = "$outputDir" - } workflow { """ input[0] = Channel.of([ @@ -30,7 +27,8 @@ nextflow_workflow { ]) input[1] = Channel.of([ [ id:'genome' ], - file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true) ]) """ } @@ -40,10 +38,11 @@ nextflow_workflow { assertAll( { assert workflow.success}, { assert workflow.out.bam.get(0).get(1) ==~ ".*.bam"}, - { assert workflow.out.bai.get(0).get(1) ==~ ".*.bai"}, - { assert snapshot(workflow.out.stats).match("test_bam_sort_stats_samtools_single_end_stats") }, - { assert snapshot(workflow.out.flagstat).match("test_bam_sort_stats_samtools_single_end_flagstats") }, - { assert snapshot(workflow.out.idxstats).match("test_bam_sort_stats_samtools_single_end_idxstats") } + { assert workflow.out.index.get(0).get(1) ==~ ".*.bai"}, + { assert snapshot( + workflow.out.flagstat, + workflow.out.idxstats, + workflow.out.stats).match() } ) } } @@ -51,9 +50,6 @@ nextflow_workflow { test("test_bam_sort_stats_samtools_paired_end") { when { - params { - outdir = "$outputDir" - } workflow { """ input[0] = Channel.of([ @@ -62,7 +58,8 @@ nextflow_workflow { ]) input[1] = Channel.of([ [ id:'genome' ], - file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true) ]) """ } @@ -72,10 +69,67 @@ nextflow_workflow { assertAll( { assert workflow.success}, { assert workflow.out.bam.get(0).get(1) ==~ ".*.bam"}, - { assert workflow.out.bai.get(0).get(1) ==~ ".*.bai"}, - { assert snapshot(workflow.out.stats).match("test_bam_sort_stats_samtools_paired_end_stats") }, - { assert snapshot(workflow.out.flagstat).match("test_bam_sort_stats_samtools_paired_end_flagstats") }, - { assert snapshot(workflow.out.idxstats).match("test_bam_sort_stats_samtools_paired_end_idxstats") } + { assert workflow.out.index.get(0).get(1) ==~ ".*.bai"}, + { assert snapshot( + workflow.out.flagstat, + workflow.out.idxstats, + workflow.out.stats).match() } + ) + } + } + + test("test_bam_sort_stats_samtools_single_end - stub") { + + options "-stub" + + when { + workflow { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.single_end.bam', checkIfExists: true) + ]) + input[1] = Channel.of([ + [ id:'genome' ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true) + ]) + """ + } + } + + then { + assertAll( + { assert workflow.success}, + { assert snapshot(workflow.out).match() } + ) + } + } + + test("test_bam_sort_stats_samtools_paired_end - stub") { + + options "-stub" + + when { + workflow { + """ + 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:'genome' ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true) + ]) + """ + } + } + + then { + assertAll( + { assert workflow.success}, + { assert snapshot(workflow.out).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 6645a092..0fc936b2 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 @@ -1,5 +1,5 @@ { - "test_bam_sort_stats_samtools_paired_end_flagstats": { + "test_bam_sort_stats_samtools_single_end": { "content": [ [ [ @@ -7,53 +7,35 @@ "id": "test", "single_end": false }, - "test.flagstat:md5,4f7ffd1e6a5e85524d443209ac97d783" + "test.flagstat:md5,2191911d72575a2358b08b1df64ccb53" ] - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.01.0" - }, - "timestamp": "2023-10-22T20:25:03.687121177" - }, - "test_bam_sort_stats_samtools_paired_end_idxstats": { - "content": [ + ], [ [ { "id": "test", "single_end": false }, - "test.idxstats:md5,df60a8c8d6621100d05178c93fb053a2" + "test.idxstats:md5,613e048487662c694aa4a2f73ca96a20" ] - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.01.0" - }, - "timestamp": "2023-10-22T20:25:03.709648916" - }, - "test_bam_sort_stats_samtools_single_end_stats": { - "content": [ + ], [ [ { "id": "test", "single_end": false }, - "test.stats:md5,cb0bf2b79de52fdf0c61e80efcdb0bb4" + "test.stats:md5,5978c7433373bd9bec33fb2c53688ef2" ] ] ], + "timestamp": "2026-07-10T13:50:51.540506656", "meta": { - "nf-test": "0.8.4", - "nextflow": "24.01.0" - }, - "timestamp": "2024-02-13T16:44:38.553256801" + "nf-test": "0.9.5", + "nextflow": "26.04.4" + } }, - "test_bam_sort_stats_samtools_paired_end_stats": { + "test_bam_sort_stats_samtools_paired_end": { "content": [ [ [ @@ -61,50 +43,234 @@ "id": "test", "single_end": false }, - "test.stats:md5,d7796222a087b9bb97f631f1c21b9c95" + "test.flagstat:md5,4f7ffd1e6a5e85524d443209ac97d783" ] - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.01.0" - }, - "timestamp": "2024-02-13T16:44:48.355870518" - }, - "test_bam_sort_stats_samtools_single_end_idxstats": { - "content": [ + ], [ [ { "id": "test", "single_end": false }, - "test.idxstats:md5,613e048487662c694aa4a2f73ca96a20" + "test.idxstats:md5,df60a8c8d6621100d05178c93fb053a2" ] - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.01.0" - }, - "timestamp": "2024-01-18T17:10:02.84631" - }, - "test_bam_sort_stats_samtools_single_end_flagstats": { - "content": [ + ], [ [ { "id": "test", "single_end": false }, - "test.flagstat:md5,2191911d72575a2358b08b1df64ccb53" + "test.stats:md5,d3fd15dd1ac4596da14e9475babab12e" ] ] ], + "timestamp": "2026-07-10T13:51:00.904735627", + "meta": { + "nf-test": "0.9.5", + "nextflow": "26.04.4" + } + }, + "test_bam_sort_stats_samtools_single_end - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.bam.bai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test.stats:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + [ + { + "id": "test", + "single_end": false + }, + "test.flagstat:md5,67394650dbae96d1a4fcc70484822159" + ] + ], + "4": [ + [ + { + "id": "test", + "single_end": false + }, + "test.idxstats:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "bam": [ + [ + { + "id": "test", + "single_end": false + }, + "test.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "flagstat": [ + [ + { + "id": "test", + "single_end": false + }, + "test.flagstat:md5,67394650dbae96d1a4fcc70484822159" + ] + ], + "idxstats": [ + [ + { + "id": "test", + "single_end": false + }, + "test.idxstats:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "index": [ + [ + { + "id": "test", + "single_end": false + }, + "test.bam.bai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "stats": [ + [ + { + "id": "test", + "single_end": false + }, + "test.stats:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + } + ], + "timestamp": "2026-03-12T15:01:02.797853", + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.4" + } + }, + "test_bam_sort_stats_samtools_paired_end - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.bam.bai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test.stats:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + [ + { + "id": "test", + "single_end": false + }, + "test.flagstat:md5,67394650dbae96d1a4fcc70484822159" + ] + ], + "4": [ + [ + { + "id": "test", + "single_end": false + }, + "test.idxstats:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "bam": [ + [ + { + "id": "test", + "single_end": false + }, + "test.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "flagstat": [ + [ + { + "id": "test", + "single_end": false + }, + "test.flagstat:md5,67394650dbae96d1a4fcc70484822159" + ] + ], + "idxstats": [ + [ + { + "id": "test", + "single_end": false + }, + "test.idxstats:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "index": [ + [ + { + "id": "test", + "single_end": false + }, + "test.bam.bai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "stats": [ + [ + { + "id": "test", + "single_end": false + }, + "test.stats:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + } + ], + "timestamp": "2026-03-12T15:01:13.722701", "meta": { - "nf-test": "0.8.4", - "nextflow": "24.01.0" - }, - "timestamp": "2024-01-18T17:10:02.829756" + "nf-test": "0.9.3", + "nextflow": "25.10.4" + } } } \ No newline at end of file diff --git a/subworkflows/nf-core/bam_sort_stats_samtools/tests/tags.yml b/subworkflows/nf-core/bam_sort_stats_samtools/tests/tags.yml deleted file mode 100644 index 30b69d6a..00000000 --- a/subworkflows/nf-core/bam_sort_stats_samtools/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -subworkflows/bam_sort_stats_samtools: - - subworkflows/nf-core/bam_sort_stats_samtools/** diff --git a/subworkflows/nf-core/bam_stats_samtools/main.nf b/subworkflows/nf-core/bam_stats_samtools/main.nf index 44d4c010..14545ba2 100644 --- a/subworkflows/nf-core/bam_stats_samtools/main.nf +++ b/subworkflows/nf-core/bam_stats_samtools/main.nf @@ -9,24 +9,17 @@ include { SAMTOOLS_FLAGSTAT } from '../../../modules/nf-core/samtools/flagstat/m workflow BAM_STATS_SAMTOOLS { take: ch_bam_bai // channel: [ val(meta), path(bam), path(bai) ] - ch_fasta // channel: [ val(meta), path(fasta) ] + ch_fasta_fai // channel: [ val(meta), path(fasta) ] main: - ch_versions = Channel.empty() + SAMTOOLS_STATS(ch_bam_bai, ch_fasta_fai) - SAMTOOLS_STATS ( ch_bam_bai, ch_fasta ) - ch_versions = ch_versions.mix(SAMTOOLS_STATS.out.versions) + SAMTOOLS_FLAGSTAT(ch_bam_bai) - 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) + SAMTOOLS_IDXSTATS(ch_bam_bai) emit: - stats = SAMTOOLS_STATS.out.stats // channel: [ val(meta), path(stats) ] + 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 c8b21f28..8ec544b9 100644 --- a/subworkflows/nf-core/bam_stats_samtools/tests/main.nf.test +++ b/subworkflows/nf-core/bam_stats_samtools/tests/main.nf.test @@ -15,9 +15,6 @@ nextflow_workflow { test("test_bam_stats_samtools_single_end") { when { - params { - outdir = "$outputDir" - } workflow { """ input[0] = Channel.of([ @@ -27,7 +24,8 @@ nextflow_workflow { ]) input[1] = Channel.of([ [ id:'genome' ], - file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true) ]) """ } @@ -36,9 +34,10 @@ nextflow_workflow { then { assertAll( { assert workflow.success}, - { assert snapshot(workflow.out.stats).match("test_bam_stats_samtools_single_end_stats") }, - { assert snapshot(workflow.out.flagstat).match("test_bam_stats_samtools_single_end_flagstats") }, - { assert snapshot(workflow.out.idxstats).match("test_bam_stats_samtools_single_end_idxstats") } + { assert snapshot( + workflow.out.flagstat, + workflow.out.idxstats, + workflow.out.stats).match() } ) } } @@ -46,9 +45,6 @@ nextflow_workflow { test("test_bam_stats_samtools_paired_end") { when { - params { - outdir = "$outputDir" - } workflow { """ input[0] = Channel.of([ @@ -58,7 +54,8 @@ nextflow_workflow { ]) input[1] = Channel.of([ [ id:'genome' ], - file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true) ]) """ } @@ -67,9 +64,10 @@ nextflow_workflow { then { assertAll( { assert workflow.success }, - { assert snapshot(workflow.out.stats).match("test_bam_stats_samtools_paired_end_stats") }, - { assert snapshot(workflow.out.flagstat).match("test_bam_stats_samtools_paired_end_flagstats") }, - { assert snapshot(workflow.out.idxstats).match("test_bam_stats_samtools_paired_end_idxstats") } + { assert snapshot( + workflow.out.flagstat, + workflow.out.idxstats, + workflow.out.stats).match() } ) } } @@ -77,9 +75,6 @@ nextflow_workflow { test("test_bam_stats_samtools_paired_end_cram") { when { - params { - outdir = "$outputDir" - } workflow { """ input[0] = Channel.of([ @@ -89,7 +84,8 @@ nextflow_workflow { ]) input[1] = Channel.of([ [ id:'genome' ], - file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) ]) """ } @@ -98,11 +94,98 @@ nextflow_workflow { then { assertAll( { assert workflow.success}, - { assert snapshot(workflow.out.stats).match("test_bam_stats_samtools_paired_end_cram_stats") }, - { assert snapshot(workflow.out.flagstat).match("test_bam_stats_samtools_paired_end_cram_flagstats") }, - { assert snapshot(workflow.out.idxstats).match("test_bam_stats_samtools_paired_end_cram_idxstats") } + { assert snapshot( + workflow.out.flagstat, + workflow.out.idxstats, + workflow.out.stats).match() } + ) + } + } + + test ("test_bam_stats_samtools_single_end - stub") { + + options "-stub" + + when { + workflow { + """ + input[0] = Channel.of([ + [ id:'test', single_end:true ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.single_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.single_end.sorted.bam.bai', checkIfExists: true) + ]) + input[1] = Channel.of([ + [ id:'genome' ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true) + ]) + """ + } + } + + then { + assertAll( + { assert workflow.success}, + { assert snapshot(workflow.out).match() } + ) + } + } + + test("test_bam_stats_samtools_paired_end - stub") { + + options "-stub" + + when { + workflow { + """ + input[0] = Channel.of([ + [ id:'test', single_end:true ], // 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([ + [ id:'genome' ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true) + ]) + """ + } + } + + then { + assertAll( + { assert workflow.success }, + { assert snapshot(workflow.out).match() } ) } } + test("test_bam_stats_samtools_paired_end_cram - stub") { + + options "-stub" + + when { + workflow { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + 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] = Channel.of([ + [ id:'genome' ], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) + ]) + """ + } + } + + then { + assertAll( + { assert workflow.success}, + { assert snapshot(workflow.out).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 bf0b0c69..994ce9df 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 @@ -1,41 +1,200 @@ { - "test_bam_stats_samtools_paired_end_cram_flagstats": { + "test_bam_stats_samtools_paired_end - stub": { "content": [ - [ - [ - { - "id": "test", - "single_end": false - }, - "test.flagstat:md5,a53f3d26e2e9851f7d528442bbfe9781" + { + "0": [ + [ + { + "id": "test", + "single_end": true + }, + "test.stats:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": true + }, + "test.flagstat:md5,67394650dbae96d1a4fcc70484822159" + ] + ], + "2": [ + [ + { + "id": "test", + "single_end": true + }, + "test.idxstats:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "flagstat": [ + [ + { + "id": "test", + "single_end": true + }, + "test.flagstat:md5,67394650dbae96d1a4fcc70484822159" + ] + ], + "idxstats": [ + [ + { + "id": "test", + "single_end": true + }, + "test.idxstats:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "stats": [ + [ + { + "id": "test", + "single_end": true + }, + "test.stats:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ] - ] + } ], + "timestamp": "2026-02-03T11:10:30.076183827", "meta": { - "nf-test": "0.8.4", - "nextflow": "24.01.0" - }, - "timestamp": "2023-11-06T09:31:26.194017574" + "nf-test": "0.9.3", + "nextflow": "25.10.3" + } }, - "test_bam_stats_samtools_paired_end_stats": { + "test_bam_stats_samtools_single_end - stub": { "content": [ - [ - [ - { - "id": "test", - "single_end": true - }, - "test.stats:md5,ddaf8f33fe9c1ebe9b06933213aec8ed" + { + "0": [ + [ + { + "id": "test", + "single_end": true + }, + "test.stats:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": true + }, + "test.flagstat:md5,67394650dbae96d1a4fcc70484822159" + ] + ], + "2": [ + [ + { + "id": "test", + "single_end": true + }, + "test.idxstats:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "flagstat": [ + [ + { + "id": "test", + "single_end": true + }, + "test.flagstat:md5,67394650dbae96d1a4fcc70484822159" + ] + ], + "idxstats": [ + [ + { + "id": "test", + "single_end": true + }, + "test.idxstats:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "stats": [ + [ + { + "id": "test", + "single_end": true + }, + "test.stats:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ] - ] + } ], + "timestamp": "2026-02-03T11:10:24.379362883", "meta": { - "nf-test": "0.8.4", - "nextflow": "24.01.0" - }, - "timestamp": "2024-02-13T16:45:06.230091746" + "nf-test": "0.9.3", + "nextflow": "25.10.3" + } }, - "test_bam_stats_samtools_paired_end_flagstats": { + "test_bam_stats_samtools_paired_end_cram - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.stats:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.flagstat:md5,67394650dbae96d1a4fcc70484822159" + ] + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test.idxstats:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "flagstat": [ + [ + { + "id": "test", + "single_end": false + }, + "test.flagstat:md5,67394650dbae96d1a4fcc70484822159" + ] + ], + "idxstats": [ + [ + { + "id": "test", + "single_end": false + }, + "test.idxstats:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "stats": [ + [ + { + "id": "test", + "single_end": false + }, + "test.stats:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + } + ], + "timestamp": "2026-02-03T11:10:35.91658956", + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.3" + } + }, + "test_bam_stats_samtools_single_end": { "content": [ [ [ @@ -43,53 +202,35 @@ "id": "test", "single_end": true }, - "test.flagstat:md5,4f7ffd1e6a5e85524d443209ac97d783" + "test.flagstat:md5,2191911d72575a2358b08b1df64ccb53" ] - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.01.0" - }, - "timestamp": "2024-01-18T17:17:27.717482" - }, - "test_bam_stats_samtools_single_end_flagstats": { - "content": [ + ], [ [ { "id": "test", "single_end": true }, - "test.flagstat:md5,2191911d72575a2358b08b1df64ccb53" + "test.idxstats:md5,613e048487662c694aa4a2f73ca96a20" ] - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.01.0" - }, - "timestamp": "2023-11-06T09:26:10.340046381" - }, - "test_bam_stats_samtools_paired_end_cram_idxstats": { - "content": [ + ], [ [ { "id": "test", - "single_end": false + "single_end": true }, - "test.idxstats:md5,e179601fa7b8ebce81ac3765206f6c15" + "test.stats:md5,6583f1f142c27974ffc924b7fa734767" ] ] ], + "timestamp": "2026-07-10T08:13:24.390328", "meta": { - "nf-test": "0.8.4", - "nextflow": "24.01.0" - }, - "timestamp": "2023-11-06T09:31:26.207052003" + "nf-test": "0.9.5", + "nextflow": "26.04.6" + } }, - "test_bam_stats_samtools_single_end_stats": { + "test_bam_stats_samtools_paired_end": { "content": [ [ [ @@ -97,18 +238,9 @@ "id": "test", "single_end": true }, - "test.stats:md5,dc178e1a4956043aba8abc83e203521b" + "test.flagstat:md5,4f7ffd1e6a5e85524d443209ac97d783" ] - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.01.0" - }, - "timestamp": "2024-02-13T16:44:57.442208382" - }, - "test_bam_stats_samtools_paired_end_idxstats": { - "content": [ + ], [ [ { @@ -117,33 +249,24 @@ }, "test.idxstats:md5,df60a8c8d6621100d05178c93fb053a2" ] - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.01.0" - }, - "timestamp": "2024-01-18T17:17:27.726719" - }, - "test_bam_stats_samtools_single_end_idxstats": { - "content": [ + ], [ [ { "id": "test", "single_end": true }, - "test.idxstats:md5,613e048487662c694aa4a2f73ca96a20" + "test.stats:md5,c4ca9c9d1415005c80481e6fe4c95f90" ] ] ], + "timestamp": "2026-07-10T08:13:29.123968", "meta": { - "nf-test": "0.8.4", - "nextflow": "24.01.0" - }, - "timestamp": "2023-11-06T09:26:10.349439801" + "nf-test": "0.9.5", + "nextflow": "26.04.6" + } }, - "test_bam_stats_samtools_paired_end_cram_stats": { + "test_bam_stats_samtools_paired_end_cram": { "content": [ [ [ @@ -151,14 +274,32 @@ "id": "test", "single_end": false }, - "test.stats:md5,d3345c4887f4a9ea4f7f56405b495db0" + "test.flagstat:md5,a53f3d26e2e9851f7d528442bbfe9781" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.idxstats:md5,e179601fa7b8ebce81ac3765206f6c15" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.stats:md5,a2a40d6e88c35aa33d4433355f47f217" ] ] ], + "timestamp": "2026-07-10T08:13:33.60771", "meta": { - "nf-test": "0.8.4", - "nextflow": "24.01.0" - }, - "timestamp": "2024-02-13T16:45:14.997164209" + "nf-test": "0.9.5", + "nextflow": "26.04.6" + } } } \ No newline at end of file diff --git a/subworkflows/nf-core/bam_stats_samtools/tests/tags.yml b/subworkflows/nf-core/bam_stats_samtools/tests/tags.yml deleted file mode 100644 index ec2f2d68..00000000 --- a/subworkflows/nf-core/bam_stats_samtools/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -subworkflows/bam_stats_samtools: - - subworkflows/nf-core/bam_stats_samtools/** diff --git a/subworkflows/nf-core/fastq_align_bowtie2/main.nf b/subworkflows/nf-core/fastq_align_bowtie2/main.nf index cafaa9bf..8c1a19f5 100644 --- a/subworkflows/nf-core/fastq_align_bowtie2/main.nf +++ b/subworkflows/nf-core/fastq_align_bowtie2/main.nf @@ -7,39 +7,35 @@ include { BAM_SORT_STATS_SAMTOOLS } from '../bam_sort_stats_samtools/main' workflow FASTQ_ALIGN_BOWTIE2 { take: - ch_reads // channel: [ val(meta), [ reads ] ] - ch_index // channel: /path/to/bowtie2/index/ - save_unaligned // val - sort_bam // val - ch_fasta // channel: /path/to/reference.fasta + ch_reads // channel: [ val(meta), [ reads ] ] + ch_index // channel: /path/to/bowtie2/index/ + save_unaligned // val + sort_bam // val + ch_fasta_fai // channel: [ val(meta), path(fasta), path(fai) ] main: - ch_versions = Channel.empty() + // + // Remap ch_fasta_fai to ch_fasta + ch_fasta = ch_fasta_fai.map{ meta, fasta, _fai -> [ meta, fasta] } // // Map reads with Bowtie2 // - BOWTIE2_ALIGN ( ch_reads, ch_index, ch_fasta, save_unaligned, sort_bam ) - ch_versions = ch_versions.mix(BOWTIE2_ALIGN.out.versions) + BOWTIE2_ALIGN(ch_reads, ch_index, ch_fasta, save_unaligned, sort_bam) // // Sort, index BAM file and run samtools stats, flagstat and idxstats // - BAM_SORT_STATS_SAMTOOLS ( BOWTIE2_ALIGN.out.bam, ch_fasta ) - ch_versions = ch_versions.mix(BAM_SORT_STATS_SAMTOOLS.out.versions) + BAM_SORT_STATS_SAMTOOLS(BOWTIE2_ALIGN.out.bam, ch_fasta_fai) emit: - bam_orig = BOWTIE2_ALIGN.out.bam // channel: [ val(meta), aligned ] - log_out = BOWTIE2_ALIGN.out.log // channel: [ val(meta), log ] - fastq = BOWTIE2_ALIGN.out.fastq // channel: [ val(meta), fastq ] - - 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 ] ] - - versions = ch_versions // channel: [ versions.yml ] + bam_orig = BOWTIE2_ALIGN.out.bam // channel: [ val(meta), aligned ] + log_out = BOWTIE2_ALIGN.out.log // channel: [ val(meta), log ] + fastq = BOWTIE2_ALIGN.out.fastq // channel: [ val(meta), fastq ] + bam = BAM_SORT_STATS_SAMTOOLS.out.bam // channel: [ val(meta), [ bam ] ] + index = BAM_SORT_STATS_SAMTOOLS.out.index // channel: [ val(meta), [ index ] ] + 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 ] ] } diff --git a/subworkflows/nf-core/fastq_align_bowtie2/meta.yml b/subworkflows/nf-core/fastq_align_bowtie2/meta.yml index 58023a89..096df347 100644 --- a/subworkflows/nf-core/fastq_align_bowtie2/meta.yml +++ b/subworkflows/nf-core/fastq_align_bowtie2/meta.yml @@ -37,22 +37,18 @@ input: - sort_bam: type: boolean description: | - Save reads that do not map to the reference (true) or discard them (false) + Use samtools sort (true) or samtools view (false) default: false - - ch_fasta: + - ch_fasta_fai: type: file - description: Reference fasta file - pattern: "*.{fasta,fa}" + description: Reference fasta file and index + pattern: "*.{fasta,fa},*.{fai,fai}" # TODO Update when we decide on a standard for subworkflow docs output: - bam: type: file description: Output BAM file containing read alignments pattern: "*.{bam}" - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - fastq: type: file description: Unaligned FastQ files diff --git a/subworkflows/nf-core/fastq_align_bowtie2/tests/main.nf.test b/subworkflows/nf-core/fastq_align_bowtie2/tests/main.nf.test index b5e84f51..975a2399 100644 --- a/subworkflows/nf-core/fastq_align_bowtie2/tests/main.nf.test +++ b/subworkflows/nf-core/fastq_align_bowtie2/tests/main.nf.test @@ -19,7 +19,10 @@ nextflow_workflow { script "../../../../modules/nf-core/bowtie2/build/main.nf" process { """ - input[0] = Channel.value([ [ id:'genome' ],file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true)]) + input[0] = Channel.value([ + [ id:'genome' ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ]) """ } } @@ -27,11 +30,15 @@ nextflow_workflow { when { workflow { """ - input[0] = Channel.of([[ id:'test', single_end:true ], [ file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true) ]]) + input[0] = Channel.of([[ id:'test', single_end:true ], [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) ]]) input[1] = BOWTIE2_BUILD.out.index input[2] = false input[3] = false - input[4] = Channel.value([ [ id:'genome' ],file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true)]) + input[4] = Channel.value([ + [ id:'genome' ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true) + ]) """ } } @@ -44,12 +51,11 @@ nextflow_workflow { workflow.out.fastq, workflow.out.log_out, file(workflow.out.bam[0][1]).name, - file(workflow.out.bai[0][1]).name, - workflow.out.csi, + file(workflow.out.index[0][1]).name, workflow.out.stats, workflow.out.flagstat, workflow.out.idxstats, - workflow.out.versions, + workflow.out.versions ).match()} ) } @@ -61,7 +67,10 @@ nextflow_workflow { script "../../../../modules/nf-core/bowtie2/build/main.nf" process { """ - input[0] = Channel.value([ [ id:'genome' ],file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true)]) + input[0] = Channel.value([ + [ id:'genome' ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ]) """ } } @@ -69,11 +78,19 @@ nextflow_workflow { when { workflow { """ - input[0] = Channel.of([[ id:'test', single_end:false ], [file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true), file(params.test_data['sarscov2']['illumina']['test_2_fastq_gz'], checkIfExists: true)]]) + input[0] = Channel.of([ + [ 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) + ]]) input[1] = BOWTIE2_BUILD.out.index input[2] = false input[3] = false - input[4] = Channel.value([ [ id:'genome' ],file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true)]) + input[4] = Channel.value([ + [ id:'genome' ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true) + ]) """ } } @@ -86,12 +103,113 @@ nextflow_workflow { workflow.out.fastq, workflow.out.log_out, file(workflow.out.bam[0][1]).name, - file(workflow.out.bai[0][1]).name, - workflow.out.csi, + file(workflow.out.index[0][1]).name, workflow.out.stats, workflow.out.flagstat, workflow.out.idxstats, - workflow.out.versions, + workflow.out.versions + ).match()} + ) + } + } + + test("test_align_bowtie2_single_end - stub") { + + options "-stub" + + setup { + run("BOWTIE2_BUILD") { + script "../../../../modules/nf-core/bowtie2/build/main.nf" + process { + """ + input[0] = Channel.value([ + [ id:'genome' ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ]) + """ + } + } + } + when { + workflow { + """ + input[0] = Channel.of([[ id:'test', single_end:true ], [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) ]]) + input[1] = BOWTIE2_BUILD.out.index + input[2] = false + input[3] = false + input[4] = Channel.value([ + [ id:'genome' ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true) + ]) + """ + } + } + + then { + assertAll( + { assert workflow.success}, + { assert snapshot( + file(workflow.out.bam_orig[0][1]).name, + workflow.out.fastq, + workflow.out.log_out, + file(workflow.out.bam[0][1]).name, + file(workflow.out.index[0][1]).name, + workflow.out.stats, + workflow.out.flagstat, + workflow.out.idxstats, + workflow.out.versions + ).match()} + ) + } + } + + test("test_align_bowtie2_paired_end - stub") { + + options "-stub" + + setup { + run("BOWTIE2_BUILD") { + script "../../../../modules/nf-core/bowtie2/build/main.nf" + process { + """ + input[0] = Channel.value([ + [ id:'genome' ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ]) + """ + } + } + } + when { + workflow { + """ + input[0] = Channel.of([[ 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)]]) + input[1] = BOWTIE2_BUILD.out.index + input[2] = false + input[3] = false + input[4] = Channel.value([ + [ id:'genome' ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true) + ]) + """ + } + } + + then { + assertAll( + { assert workflow.success}, + { assert snapshot( + file(workflow.out.bam_orig[0][1]).name, + workflow.out.fastq, + workflow.out.log_out, + file(workflow.out.bam[0][1]).name, + file(workflow.out.index[0][1]).name, + workflow.out.stats, + workflow.out.flagstat, + workflow.out.idxstats, + workflow.out.versions ).match()} ) } diff --git a/subworkflows/nf-core/fastq_align_bowtie2/tests/main.nf.test.snap b/subworkflows/nf-core/fastq_align_bowtie2/tests/main.nf.test.snap index c0f3f8bf..d5d94b71 100644 --- a/subworkflows/nf-core/fastq_align_bowtie2/tests/main.nf.test.snap +++ b/subworkflows/nf-core/fastq_align_bowtie2/tests/main.nf.test.snap @@ -1,5 +1,5 @@ { - "test_align_bowtie2_single_end": { + "test_align_bowtie2_single_end - stub": { "content": [ "test.bam", [ @@ -11,11 +11,49 @@ "id": "test", "single_end": true }, - "test.bowtie2.log:md5,7b8a9e61b7646da1089b041333c41a87" + "test.bowtie2.log:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "test.sorted.bam", "test.sorted.bam.bai", + [ + [ + { + "id": "test", + "single_end": true + }, + "test.sorted.stats:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + [ + [ + { + "id": "test", + "single_end": true + }, + "test.sorted.flagstat:md5,67394650dbae96d1a4fcc70484822159" + ] + ], + [ + [ + { + "id": "test", + "single_end": true + }, + "test.sorted.idxstats:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + null + ], + "timestamp": "2026-03-12T15:08:47.079633947", + "meta": { + "nf-test": "0.9.4", + "nextflow": "25.10.4" + } + }, + "test_align_bowtie2_single_end": { + "content": [ + "test.bam", [ ], @@ -25,16 +63,18 @@ "id": "test", "single_end": true }, - "test.sorted.bam.stats:md5,9a65272e49581873b1ea211f738e992f" + "test.bowtie2.log:md5,7b8a9e61b7646da1089b041333c41a87" ] ], + "test.sorted.bam", + "test.sorted.bam.bai", [ [ { "id": "test", "single_end": true }, - "test.sorted.bam.flagstat:md5,e9ce9093133116bc54fd335cfe698372" + "test.sorted.stats:md5,de68b1a4ae60b97305ae3423e11813ad" ] ], [ @@ -43,23 +83,25 @@ "id": "test", "single_end": true }, - "test.sorted.bam.idxstats:md5,e16eb632f7f462514b0873c7ac8ac905" + "test.sorted.flagstat:md5,e9ce9093133116bc54fd335cfe698372" ] ], [ - "versions.yml:md5,5d5ab1d650a93d8bb5ed142943798a6a", - "versions.yml:md5,666dbae2343fc479e483656c35d3d8a1", - "versions.yml:md5,aab337e63eac9055aadb9a35cec16053", - "versions.yml:md5,c27f74d9c37fbb3365c437a9f7e81c27", - "versions.yml:md5,eb9364a9f1745d6a345b8b4b03aebe25", - "versions.yml:md5,f982efa9031f340ace29f76dd47a8ce1" - ] + [ + { + "id": "test", + "single_end": true + }, + "test.sorted.idxstats:md5,e16eb632f7f462514b0873c7ac8ac905" + ] + ], + null ], + "timestamp": "2026-04-12T00:04:56.432243", "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-03-18T14:40:54.318808117" + "nf-test": "0.9.5", + "nextflow": "25.10.4" + } }, "test_align_bowtie2_paired_end": { "content": [ @@ -78,6 +120,44 @@ ], "test.sorted.bam", "test.sorted.bam.bai", + [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.stats:md5,4cb22b98cb1bbecb025088f7f5e13e11" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.flagstat:md5,49f3d51a8804ce58fe9cecd2549d279b" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.idxstats:md5,29ff2fa56d35b2a47625b8f517f1a947" + ] + ], + null + ], + "timestamp": "2026-04-12T00:05:09.593942", + "meta": { + "nf-test": "0.9.5", + "nextflow": "25.10.4" + } + }, + "test_align_bowtie2_paired_end - stub": { + "content": [ + "test.bam", [ ], @@ -87,16 +167,18 @@ "id": "test", "single_end": false }, - "test.sorted.bam.stats:md5,1086d408391af2a5c80c6dee0efa7e59" + "test.bowtie2.log:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], + "test.sorted.bam", + "test.sorted.bam.bai", [ [ { "id": "test", "single_end": false }, - "test.sorted.bam.flagstat:md5,49f3d51a8804ce58fe9cecd2549d279b" + "test.sorted.stats:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], [ @@ -105,22 +187,24 @@ "id": "test", "single_end": false }, - "test.sorted.bam.idxstats:md5,29ff2fa56d35b2a47625b8f517f1a947" + "test.sorted.flagstat:md5,67394650dbae96d1a4fcc70484822159" ] ], [ - "versions.yml:md5,5d5ab1d650a93d8bb5ed142943798a6a", - "versions.yml:md5,666dbae2343fc479e483656c35d3d8a1", - "versions.yml:md5,aab337e63eac9055aadb9a35cec16053", - "versions.yml:md5,c27f74d9c37fbb3365c437a9f7e81c27", - "versions.yml:md5,eb9364a9f1745d6a345b8b4b03aebe25", - "versions.yml:md5,f982efa9031f340ace29f76dd47a8ce1" - ] + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.idxstats:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + null ], + "timestamp": "2026-03-12T15:08:58.246336497", "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-03-18T14:41:11.243874685" + "nf-test": "0.9.4", + "nextflow": "25.10.4" + } } } \ No newline at end of file diff --git a/subworkflows/nf-core/fastq_align_bowtie2/tests/nextflow.config b/subworkflows/nf-core/fastq_align_bowtie2/tests/nextflow.config index 2f85e807..9086ebfa 100644 --- a/subworkflows/nf-core/fastq_align_bowtie2/tests/nextflow.config +++ b/subworkflows/nf-core/fastq_align_bowtie2/tests/nextflow.config @@ -3,6 +3,6 @@ process { ext.prefix = { "${meta.id}.sorted" } } withName: '.*:BAM_SORT_STATS_SAMTOOLS:BAM_STATS_SAMTOOLS:.*' { - ext.prefix = { "${meta.id}.sorted.bam" } + ext.prefix = { "${meta.id}.sorted" } } } diff --git a/subworkflows/nf-core/fastq_align_bowtie2/tests/tags.yml b/subworkflows/nf-core/fastq_align_bowtie2/tests/tags.yml deleted file mode 100644 index 267bcc77..00000000 --- a/subworkflows/nf-core/fastq_align_bowtie2/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -subworkflows/fastq_align_bowtie2: - - subworkflows/nf-core/fastq_align_bowtie2/** diff --git a/subworkflows/nf-core/fastq_align_bwa/main.nf b/subworkflows/nf-core/fastq_align_bwa/main.nf index c7408d08..eb72bade 100644 --- a/subworkflows/nf-core/fastq_align_bwa/main.nf +++ b/subworkflows/nf-core/fastq_align_bwa/main.nf @@ -7,37 +7,30 @@ include { BAM_SORT_STATS_SAMTOOLS } from '../bam_sort_stats_samtools/main' workflow FASTQ_ALIGN_BWA { take: - ch_reads // channel (mandatory): [ val(meta), [ path(reads) ] ] - ch_index // channel (mandatory): [ val(meta2), path(index) ] - val_sort_bam // boolean (mandatory): true or false - ch_fasta // channel (optional) : [ val(meta3), path(fasta) ] + ch_reads // channel (mandatory): [ val(meta), [ path(reads) ] ] + ch_index // channel (mandatory): [ val(meta2), path(index) ] + val_sort_bam // boolean (mandatory): true or false + ch_fasta_fai // channel (optional) : [ val(meta3), path(fasta), path(fai) ] main: - ch_versions = Channel.empty() // // Map reads with BWA // - - BWA_MEM ( ch_reads, ch_index, ch_fasta, val_sort_bam ) - ch_versions = ch_versions.mix(BWA_MEM.out.versions.first()) + ch_fasta = ch_fasta_fai.map { meta, fasta, _fai -> [meta, fasta] } + BWA_MEM(ch_reads, ch_index, ch_fasta, val_sort_bam) // // Sort, index BAM file and run samtools stats, flagstat and idxstats // - BAM_SORT_STATS_SAMTOOLS ( BWA_MEM.out.bam, ch_fasta ) - ch_versions = ch_versions.mix(BAM_SORT_STATS_SAMTOOLS.out.versions) + BAM_SORT_STATS_SAMTOOLS(BWA_MEM.out.bam, ch_fasta_fai) emit: - bam_orig = BWA_MEM.out.bam // channel: [ val(meta), path(bam) ] - - bam = BAM_SORT_STATS_SAMTOOLS.out.bam // channel: [ val(meta), path(bam) ] - bai = BAM_SORT_STATS_SAMTOOLS.out.bai // channel: [ val(meta), path(bai) ] - csi = BAM_SORT_STATS_SAMTOOLS.out.csi // channel: [ val(meta), path(csi) ] - stats = BAM_SORT_STATS_SAMTOOLS.out.stats // channel: [ val(meta), path(stats) ] + bam_orig = BWA_MEM.out.bam // channel: [ val(meta), path(bam) ] + bam = BAM_SORT_STATS_SAMTOOLS.out.bam // channel: [ val(meta), path(bam) ] + index = BAM_SORT_STATS_SAMTOOLS.out.index // channel: [ val(meta), path(index) ] + stats = BAM_SORT_STATS_SAMTOOLS.out.stats // channel: [ val(meta), path(stats) ] flagstat = BAM_SORT_STATS_SAMTOOLS.out.flagstat // channel: [ val(meta), path(flagstat) ] idxstats = BAM_SORT_STATS_SAMTOOLS.out.idxstats // channel: [ val(meta), path(idxstats) ] - - versions = ch_versions // channel: [ path(versions.yml) ] } diff --git a/subworkflows/nf-core/fastq_align_bwa/meta.yml b/subworkflows/nf-core/fastq_align_bwa/meta.yml index fa218408..12569fa3 100644 --- a/subworkflows/nf-core/fastq_align_bwa/meta.yml +++ b/subworkflows/nf-core/fastq_align_bwa/meta.yml @@ -29,11 +29,11 @@ input: type: boolean description: If true bwa modules sort resulting bam files pattern: "true|false" - - ch_fasta: + - ch_fasta_fai: type: file description: | - Optional reference fasta file. This only needs to be given if val_sort_bam = true. - Structure: [ val(meta), path(fasta) ] + Optional reference fasta file and index. This only needs to be given if val_sort_bam = true. + Structure: [ val(meta), path(fasta), path(fai) ] output: - bam_orig: description: | @@ -63,10 +63,6 @@ output: description: | File containing samtools idxstats output Structure: [ val(meta), path(idxstats) ] - - versions: - description: | - Files containing software versions - Structure: [ path(versions.yml) ] authors: - "@JoseEspinosa" maintainers: diff --git a/subworkflows/nf-core/fastq_align_bwa/tests/main.nf.test b/subworkflows/nf-core/fastq_align_bwa/tests/main.nf.test index 93c3aac3..491c8fdd 100644 --- a/subworkflows/nf-core/fastq_align_bwa/tests/main.nf.test +++ b/subworkflows/nf-core/fastq_align_bwa/tests/main.nf.test @@ -20,7 +20,7 @@ nextflow_workflow { script "../../../../modules/nf-core/bwa/index/main.nf" process { """ - input[0] = Channel.value([ [ id:'genome' ],file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true)]) + input[0] = Channel.value([ [ id:'genome' ],file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)]) """ } } @@ -28,10 +28,10 @@ nextflow_workflow { when { workflow { """ - input[0] = Channel.of([[ id:'test', single_end:true ],[ file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true) ]]) + input[0] = Channel.of([[ id:'test', single_end:true ],[ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) ]]) input[1] = BWA_INDEX.out.index input[2] = false - input[3] = Channel.value([[id: 'genome'], file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true)]) + input[3] = Channel.value([[id: 'genome'], file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true), file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true)]) """ } } @@ -50,7 +50,7 @@ nextflow_workflow { script "../../../../modules/nf-core/bwa/index/main.nf" process { """ - input[0] = Channel.value([ [ id:'genome' ],file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true)]) + input[0] = Channel.value([ [ id:'genome' ],file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)]) """ } } @@ -58,11 +58,11 @@ nextflow_workflow { when { workflow { """ - input[0] = Channel.of([[ id:'test', single_end:false ], [file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true), file(params.test_data['sarscov2']['illumina']['test_2_fastq_gz'], checkIfExists: true)] + input[0] = Channel.of([[ 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)] ] ) input[1] = BWA_INDEX.out.index input[2] = false - input[3] = Channel.value([[id: 'genome'], file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true)]) + input[3] = Channel.value([[id: 'genome'], file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true), file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true)]) """ } } diff --git a/subworkflows/nf-core/fastq_align_bwa/tests/main.nf.test.snap b/subworkflows/nf-core/fastq_align_bwa/tests/main.nf.test.snap index 8e8075da..445876c2 100644 --- a/subworkflows/nf-core/fastq_align_bwa/tests/main.nf.test.snap +++ b/subworkflows/nf-core/fastq_align_bwa/tests/main.nf.test.snap @@ -8,7 +8,7 @@ "id": "test", "single_end": false }, - "test.bam:md5,aea123a3828a99da1906126355f15a12" + "test.bam:md5,5dbdcfdba65fac634dcbb6984cffe2c4" ] ], "1": [ @@ -17,7 +17,7 @@ "id": "test", "single_end": false }, - "test.sorted.bam:md5,8d6755b312c5c41ff32632a0734e13df" + "test.sorted.bam:md5,8ad8cbe24a043b395cbb49ad3f88cc18" ] ], "2": [ @@ -26,22 +26,19 @@ "id": "test", "single_end": false }, - "test.sorted.bam.bai:md5,b5b49beae3e9ff2c620e680d81ceff81" + "test.sorted.bam.bai:md5,4e57a761d8cee868242b4874b95b4691" ] ], "3": [ - - ], - "4": [ [ { "id": "test", "single_end": false }, - "test.sorted.bam.stats:md5,9c42440e435b7ad02a343d367affafcd" + "test.sorted.bam.stats:md5,21b91a04b74c3498ebb73d185a2bfc95" ] ], - "5": [ + "4": [ [ { "id": "test", @@ -50,7 +47,7 @@ "test.sorted.bam.flagstat:md5,18d602435a02a4d721b78d1812622159" ] ], - "6": [ + "5": [ [ { "id": "test", @@ -59,60 +56,49 @@ "test.sorted.bam.idxstats:md5,85d20a901eef23ca50c323638a2eb602" ] ], - "7": [ - "versions.yml:md5,484d99e7712f776c479382a1f338845f", - "versions.yml:md5,4ebdf6c874da163e55a849b73e30a5d1", - "versions.yml:md5,634430380db3a08ad4e56159b82af9e8", - "versions.yml:md5,703c0bec9aac86f8e74b082131814e55", - "versions.yml:md5,959c12230206836d2572f1ac5a401f2f", - "versions.yml:md5,ca8dc5bf65d052d902af1b03fec0b1fd" - ], - "bai": [ + "bam": [ [ { "id": "test", "single_end": false }, - "test.sorted.bam.bai:md5,b5b49beae3e9ff2c620e680d81ceff81" + "test.sorted.bam:md5,8ad8cbe24a043b395cbb49ad3f88cc18" ] ], - "bam": [ + "bam_orig": [ [ { "id": "test", "single_end": false }, - "test.sorted.bam:md5,8d6755b312c5c41ff32632a0734e13df" + "test.bam:md5,5dbdcfdba65fac634dcbb6984cffe2c4" ] ], - "bam_orig": [ + "flagstat": [ [ { "id": "test", "single_end": false }, - "test.bam:md5,aea123a3828a99da1906126355f15a12" + "test.sorted.bam.flagstat:md5,18d602435a02a4d721b78d1812622159" ] ], - "csi": [ - - ], - "flagstat": [ + "idxstats": [ [ { "id": "test", "single_end": false }, - "test.sorted.bam.flagstat:md5,18d602435a02a4d721b78d1812622159" + "test.sorted.bam.idxstats:md5,85d20a901eef23ca50c323638a2eb602" ] ], - "idxstats": [ + "index": [ [ { "id": "test", "single_end": false }, - "test.sorted.bam.idxstats:md5,85d20a901eef23ca50c323638a2eb602" + "test.sorted.bam.bai:md5,4e57a761d8cee868242b4874b95b4691" ] ], "stats": [ @@ -121,24 +107,16 @@ "id": "test", "single_end": false }, - "test.sorted.bam.stats:md5,9c42440e435b7ad02a343d367affafcd" + "test.sorted.bam.stats:md5,21b91a04b74c3498ebb73d185a2bfc95" ] - ], - "versions": [ - "versions.yml:md5,484d99e7712f776c479382a1f338845f", - "versions.yml:md5,4ebdf6c874da163e55a849b73e30a5d1", - "versions.yml:md5,634430380db3a08ad4e56159b82af9e8", - "versions.yml:md5,703c0bec9aac86f8e74b082131814e55", - "versions.yml:md5,959c12230206836d2572f1ac5a401f2f", - "versions.yml:md5,ca8dc5bf65d052d902af1b03fec0b1fd" ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.3", + "nextflow": "25.10.1" }, - "timestamp": "2024-03-14T13:25:38.265819012" + "timestamp": "2026-04-29T11:14:26.020303576" }, "fastq_align_bwa_single_end": { "content": [ @@ -149,7 +127,7 @@ "id": "test", "single_end": true }, - "test.bam:md5,a74710a0345b4717bb4431bf9c257120" + "test.bam:md5,f7af092ddd5203f647ba96b926392c3e" ] ], "1": [ @@ -158,7 +136,7 @@ "id": "test", "single_end": true }, - "test.sorted.bam:md5,e023c5a6d28a4998a0d8199c459c2a08" + "test.sorted.bam:md5,00b7c143a13d0881b6d0ef0f4f8665ae" ] ], "2": [ @@ -171,18 +149,15 @@ ] ], "3": [ - - ], - "4": [ [ { "id": "test", "single_end": true }, - "test.sorted.bam.stats:md5,c8e4edbf950def8abbd9e4ae74b31383" + "test.sorted.bam.stats:md5,28f7879551f22fca1e2c788f1eb712d8" ] ], - "5": [ + "4": [ [ { "id": "test", @@ -191,7 +166,7 @@ "test.sorted.bam.flagstat:md5,2191911d72575a2358b08b1df64ccb53" ] ], - "6": [ + "5": [ [ { "id": "test", @@ -200,60 +175,49 @@ "test.sorted.bam.idxstats:md5,613e048487662c694aa4a2f73ca96a20" ] ], - "7": [ - "versions.yml:md5,484d99e7712f776c479382a1f338845f", - "versions.yml:md5,4ebdf6c874da163e55a849b73e30a5d1", - "versions.yml:md5,634430380db3a08ad4e56159b82af9e8", - "versions.yml:md5,703c0bec9aac86f8e74b082131814e55", - "versions.yml:md5,959c12230206836d2572f1ac5a401f2f", - "versions.yml:md5,ca8dc5bf65d052d902af1b03fec0b1fd" - ], - "bai": [ + "bam": [ [ { "id": "test", "single_end": true }, - "test.sorted.bam.bai:md5,9257847727b20a8f7288ad6912fbada4" + "test.sorted.bam:md5,00b7c143a13d0881b6d0ef0f4f8665ae" ] ], - "bam": [ + "bam_orig": [ [ { "id": "test", "single_end": true }, - "test.sorted.bam:md5,e023c5a6d28a4998a0d8199c459c2a08" + "test.bam:md5,f7af092ddd5203f647ba96b926392c3e" ] ], - "bam_orig": [ + "flagstat": [ [ { "id": "test", "single_end": true }, - "test.bam:md5,a74710a0345b4717bb4431bf9c257120" + "test.sorted.bam.flagstat:md5,2191911d72575a2358b08b1df64ccb53" ] ], - "csi": [ - - ], - "flagstat": [ + "idxstats": [ [ { "id": "test", "single_end": true }, - "test.sorted.bam.flagstat:md5,2191911d72575a2358b08b1df64ccb53" + "test.sorted.bam.idxstats:md5,613e048487662c694aa4a2f73ca96a20" ] ], - "idxstats": [ + "index": [ [ { "id": "test", "single_end": true }, - "test.sorted.bam.idxstats:md5,613e048487662c694aa4a2f73ca96a20" + "test.sorted.bam.bai:md5,9257847727b20a8f7288ad6912fbada4" ] ], "stats": [ @@ -262,23 +226,15 @@ "id": "test", "single_end": true }, - "test.sorted.bam.stats:md5,c8e4edbf950def8abbd9e4ae74b31383" + "test.sorted.bam.stats:md5,28f7879551f22fca1e2c788f1eb712d8" ] - ], - "versions": [ - "versions.yml:md5,484d99e7712f776c479382a1f338845f", - "versions.yml:md5,4ebdf6c874da163e55a849b73e30a5d1", - "versions.yml:md5,634430380db3a08ad4e56159b82af9e8", - "versions.yml:md5,703c0bec9aac86f8e74b082131814e55", - "versions.yml:md5,959c12230206836d2572f1ac5a401f2f", - "versions.yml:md5,ca8dc5bf65d052d902af1b03fec0b1fd" ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.3", + "nextflow": "25.10.1" }, - "timestamp": "2024-03-14T13:25:08.154131783" + "timestamp": "2026-04-29T11:14:09.893784807" } } \ No newline at end of file diff --git a/subworkflows/nf-core/fastq_align_bwa/tests/tags.yml b/subworkflows/nf-core/fastq_align_bwa/tests/tags.yml deleted file mode 100644 index bfe89ccf..00000000 --- a/subworkflows/nf-core/fastq_align_bwa/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -subworkflows/fastq_align_bwa: - - subworkflows/nf-core/fastq_align_bwa/** diff --git a/subworkflows/nf-core/fastq_align_chromap/main.nf b/subworkflows/nf-core/fastq_align_chromap/main.nf index 26b6a4be..c346adba 100644 --- a/subworkflows/nf-core/fastq_align_chromap/main.nf +++ b/subworkflows/nf-core/fastq_align_chromap/main.nf @@ -2,40 +2,55 @@ * Map reads, sort, index BAM file and run samtools stats, flagstat and idxstats */ -include { CHROMAP_CHROMAP } from '../../../modules/nf-core/chromap/chromap/main' -include { BAM_SORT_STATS_SAMTOOLS } from '../bam_sort_stats_samtools/main' +include { CHROMAP_CHROMAP } from '../../../modules/nf-core/chromap/chromap/main' +include { PICARD_ADDORREPLACEREADGROUPS } from '../../../modules/nf-core/picard/addorreplacereadgroups/main' +include { BAM_SORT_STATS_SAMTOOLS } from '../bam_sort_stats_samtools/main' workflow FASTQ_ALIGN_CHROMAP { take: - ch_reads // channel (mandatory): [ val(meta), [ reads ] ] - ch_index // channel (mandatory): [ val(meta2, [ index ] ] - ch_fasta // channel (mandatory): [ val(meta2, [ fasta ] ] - ch_barcodes // channel (optional): [ barcodes ] - ch_whitelist // channel (optional): [ whitelist ] - ch_chr_order // channel (optional): [ chr_order ] + ch_reads // channel (mandatory): [ val(meta), [ reads ] ] + ch_index // channel (mandatory): [ val(meta2, [ index ] ] + ch_fasta_fai // channel (mandatory): [ val(meta2, [ fasta ], [ fai ] ] + ch_barcodes // channel (optional): [ barcodes ] + ch_whitelist // channel (optional): [ whitelist ] + ch_chr_order // channel (optional): [ chr_order ] ch_pairs_chr_order // channel (optional): [ pairs_chr_order ] + update_readgroups // boolean (optional): true or false controls whether readgroups should be updated post alignment main: - ch_versions = Channel.empty() + + ch_bam = channel.empty() + def add_readgroups = update_readgroups ?: false + + // + // Remap ch_fasta_fai to ch_fasta + // + ch_fasta = ch_fasta_fai.map { meta, fasta , _fai -> [ meta, fasta ] } // // Map reads with CHROMAP // CHROMAP_CHROMAP(ch_reads, ch_fasta, ch_index, ch_barcodes, ch_whitelist, ch_chr_order, ch_pairs_chr_order) - ch_versions = ch_versions.mix(CHROMAP_CHROMAP.out.versions) + + // + // If needed update read groups + // + if (add_readgroups) { + PICARD_ADDORREPLACEREADGROUPS(CHROMAP_CHROMAP.out.bam, ch_fasta_fai) + ch_bam = PICARD_ADDORREPLACEREADGROUPS.out.bam + } else { + ch_bam = CHROMAP_CHROMAP.out.bam + } // // Sort, index BAM file and run samtools stats, flagstat and idxstats // - BAM_SORT_STATS_SAMTOOLS(CHROMAP_CHROMAP.out.bam, ch_fasta) - ch_versions = ch_versions.mix(BAM_SORT_STATS_SAMTOOLS.out.versions) + BAM_SORT_STATS_SAMTOOLS(ch_bam, ch_fasta_fai) emit: - bam = BAM_SORT_STATS_SAMTOOLS.out.bam // channel: [ val(meta), [ bam ] ] - bai = BAM_SORT_STATS_SAMTOOLS.out.bai // channel: [ val(meta), [ bai ] ] - 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 // path: versions.yml + bam = BAM_SORT_STATS_SAMTOOLS.out.bam // channel: [ val(meta), [ bam ] ] + index = BAM_SORT_STATS_SAMTOOLS.out.index // channel: [ val(meta), [ index ] ] + 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 ] ] } diff --git a/subworkflows/nf-core/fastq_align_chromap/meta.yml b/subworkflows/nf-core/fastq_align_chromap/meta.yml index 1db3eff1..f433cabb 100644 --- a/subworkflows/nf-core/fastq_align_chromap/meta.yml +++ b/subworkflows/nf-core/fastq_align_chromap/meta.yml @@ -1,6 +1,6 @@ # yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/subworkflows/yaml-schema.json name: "fastq_align_chromap" -description: Align high throughput chromatin profiles using Chromap then sort with samtools +description: Align high throughput chromatin profiles using Chromap, updating readgroups if neccessary and then sort with samtools keywords: - align - fasta @@ -12,6 +12,7 @@ keywords: - hic components: - chromap/chromap + - picard/addorreplacereadgroups - samtools/sort - samtools/index - samtools/stats @@ -41,12 +42,12 @@ input: Structure: [val(meta2), path(index)] Chromap genome index files pattern: "*.index" - - ch_fasta: + - ch_fasta_fai: type: file description: | - Structure: [val(meta2), path(fasta)] - Reference fasta file - pattern: "*.{fasta,fa}" + Structure: [val(meta2), path(fasta), path(fai)] + Reference fasta file and index + pattern: "*.{fasta,fa},*.fai" - ch_barcodes: type: file description: | @@ -67,6 +68,11 @@ input: description: | Structure: [path(pairs_chr_order)] Natural chromosome order for pairs flipping + - update_readgroups: + type: boolean + description: | + Boolean controling whether the readgroups should be added or updated + after chromap alignment output: - meta: type: map diff --git a/subworkflows/nf-core/fastq_align_chromap/tests/main.nf.test b/subworkflows/nf-core/fastq_align_chromap/tests/main.nf.test new file mode 100644 index 00000000..41b2209c --- /dev/null +++ b/subworkflows/nf-core/fastq_align_chromap/tests/main.nf.test @@ -0,0 +1,191 @@ +nextflow_workflow { + + name "Test Workflow FASTQ_ALIGN_CHROMAP" + config "./nextflow.config" + script "../main.nf" + workflow "FASTQ_ALIGN_CHROMAP" + + tag "subworkflows" + tag "subworkflows_nfcore" + tag "chromap" + tag "chromap/chromap" + tag "chromap/index" + tag "picard/addorreplacereadgroups" + tag "fastq_align_chromap" + tag "subworkflows/fastq_align_chromap" + tag "subworkflows/bam_sort_stats_samtools" + + setup { + run("CHROMAP_INDEX") { + script "../../../../modules/nf-core/chromap/index/main.nf" + process { + """ + input[0] = Channel.of([ + [id:'test'], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists:true) + ]) + """ + } + } + } + + test("test_fastq_align_chromap_single_end") { + when { + workflow { + """ + input[0] = [ + [id:'test', single_end:true], + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists:true) + ] + input[1] = CHROMAP_INDEX.out.index + input[2] = Channel.of([ + [id:'test'], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists:true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists:true) + ]) + input[3] = [] + input[4] = [] + input[5] = [] + input[6] = [] + input[7] = false + """ + } + } + then { + assertAll( + { assert workflow.success }, + { assert snapshot(sanitizeOutput(workflow.out)).match() } + ) + } + } + + test("test_fastq_align_chromap_paired_end") { + when { + workflow { + """ + 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) + ] + ] + input[1] = CHROMAP_INDEX.out.index + input[2] = Channel.of([ + [id:'test'], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists:true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists:true) + ]) + input[3] = [] + input[4] = [] + input[5] = [] + input[6] = [] + input[7] = false + """ + } + } + then { + assertAll( + { assert workflow.success }, + { assert snapshot(sanitizeOutput(workflow.out)).match() } + ) + } + } + + test("test_fastq_align_chromap_single_end_add_readgroups") { + when { + workflow { + """ + input[0] = [ + [id:'test', single_end:true], + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists:true) + ] + input[1] = CHROMAP_INDEX.out.index + input[2] = Channel.of([ + [id:'test'], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists:true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists:true) + ]) + input[3] = [] + input[4] = [] + input[5] = [] + input[6] = [] + input[7] = true + """ + } + } + then { + assertAll( + { assert workflow.success }, + { assert snapshot(sanitizeOutput(workflow.out)).match() } + ) + } + } + + test("test_fastq_align_chromap_paired_end_add_readgroups") { + when { + workflow { + """ + 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) + ] + ] + input[1] = CHROMAP_INDEX.out.index + input[2] = Channel.of([ + [id:'test'], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists:true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists:true) + ]) + input[3] = [] + input[4] = [] + input[5] = [] + input[6] = [] + input[7] = true + """ + } + } + then { + assertAll( + { assert workflow.success }, + { assert snapshot(sanitizeOutput(workflow.out)).match() } + ) + } + } + + test("test_fastq_align_chromap_paired_end -- stub") { + options "-stub" + when { + workflow { + """ + 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) + ] + ] + input[1] = CHROMAP_INDEX.out.index + input[2] = Channel.of([ + [id:'test'], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists:true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists:true) + ]) + input[3] = [] + input[4] = [] + input[5] = [] + input[6] = [] + input[7] = false + """ + } + } + then { + assertAll( + { assert workflow.success }, + { assert snapshot(sanitizeOutput(workflow.out)).match() } + ) + } + } +} diff --git a/subworkflows/nf-core/fastq_align_chromap/tests/main.nf.test.snap b/subworkflows/nf-core/fastq_align_chromap/tests/main.nf.test.snap new file mode 100644 index 00000000..37d031ac --- /dev/null +++ b/subworkflows/nf-core/fastq_align_chromap/tests/main.nf.test.snap @@ -0,0 +1,282 @@ +{ + "test_fastq_align_chromap_single_end": { + "content": [ + { + "bam": [ + [ + { + "id": "test", + "single_end": true + }, + "test.sorted.bam:md5,0dee4a081e53f90c6d039824025b6028" + ] + ], + "flagstat": [ + [ + { + "id": "test", + "single_end": true + }, + "test.sorted.bam.flagstat:md5,99698bba57b57c7ab68b32bc368a0cc5" + ] + ], + "idxstats": [ + [ + { + "id": "test", + "single_end": true + }, + "test.sorted.bam.idxstats:md5,0ca8c5edb633a2f4c72fb3160cc25abf" + ] + ], + "index": [ + [ + { + "id": "test", + "single_end": true + }, + "test.sorted.bam.bai:md5,c91870ca4b40436a0e9ceedad8fbed8c" + ] + ], + "stats": [ + [ + { + "id": "test", + "single_end": true + }, + "test.sorted.bam.stats:md5,813d8c081cd42fc60c5bda88611e0e6e" + ] + ] + } + ], + "timestamp": "2026-07-15T10:01:46.149093", + "meta": { + "nf-test": "0.9.5", + "nextflow": "26.04.0" + } + }, + "test_fastq_align_chromap_paired_end": { + "content": [ + { + "bam": [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.bam:md5,284d65dcd5b5061a924d817109bab514" + ] + ], + "flagstat": [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.bam.flagstat:md5,2fa0d90162a1b655863796c2a6bd8f45" + ] + ], + "idxstats": [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.bam.idxstats:md5,1adb27b52d4d64b826f48b59d61dcd4d" + ] + ], + "index": [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.bam.bai:md5,7cccc7484bcab9060221153fb8ab9143" + ] + ], + "stats": [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.bam.stats:md5,bbe7d1234474cccc926499f7e15744b8" + ] + ] + } + ], + "timestamp": "2026-07-15T10:01:55.610632", + "meta": { + "nf-test": "0.9.5", + "nextflow": "26.04.0" + } + }, + "test_fastq_align_chromap_paired_end_add_readgroups": { + "content": [ + { + "bam": [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.bam:md5,658b738d37c813b528371a22193cdb68" + ] + ], + "flagstat": [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.bam.flagstat:md5,2fa0d90162a1b655863796c2a6bd8f45" + ] + ], + "idxstats": [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.bam.idxstats:md5,1adb27b52d4d64b826f48b59d61dcd4d" + ] + ], + "index": [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.bam.bai:md5,e1734249192edb61ec95bcddf8a91f2d" + ] + ], + "stats": [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.bam.stats:md5,bbe7d1234474cccc926499f7e15744b8" + ] + ] + } + ], + "timestamp": "2026-07-15T10:02:36.957514", + "meta": { + "nf-test": "0.9.5", + "nextflow": "26.04.0" + } + }, + "test_fastq_align_chromap_single_end_add_readgroups": { + "content": [ + { + "bam": [ + [ + { + "id": "test", + "single_end": true + }, + "test.sorted.bam:md5,d6ecb02390b4ce23b16f94c9c875196f" + ] + ], + "flagstat": [ + [ + { + "id": "test", + "single_end": true + }, + "test.sorted.bam.flagstat:md5,99698bba57b57c7ab68b32bc368a0cc5" + ] + ], + "idxstats": [ + [ + { + "id": "test", + "single_end": true + }, + "test.sorted.bam.idxstats:md5,0ca8c5edb633a2f4c72fb3160cc25abf" + ] + ], + "index": [ + [ + { + "id": "test", + "single_end": true + }, + "test.sorted.bam.bai:md5,6b5aff820e930f71408f7404dc043bff" + ] + ], + "stats": [ + [ + { + "id": "test", + "single_end": true + }, + "test.sorted.bam.stats:md5,813d8c081cd42fc60c5bda88611e0e6e" + ] + ] + } + ], + "timestamp": "2026-07-15T10:02:15.914993", + "meta": { + "nf-test": "0.9.5", + "nextflow": "26.04.0" + } + }, + "test_fastq_align_chromap_paired_end -- stub": { + "content": [ + { + "bam": [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "flagstat": [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.bam.flagstat:md5,67394650dbae96d1a4fcc70484822159" + ] + ], + "idxstats": [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.bam.idxstats:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "index": [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.bam.bai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "stats": [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.bam.stats:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + } + ], + "timestamp": "2026-07-15T10:04:47.695403", + "meta": { + "nf-test": "0.9.5", + "nextflow": "26.04.0" + } + } +} \ No newline at end of file diff --git a/subworkflows/nf-core/fastq_align_chromap/tests/nextflow.config b/subworkflows/nf-core/fastq_align_chromap/tests/nextflow.config new file mode 100644 index 00000000..dc4082d3 --- /dev/null +++ b/subworkflows/nf-core/fastq_align_chromap/tests/nextflow.config @@ -0,0 +1,18 @@ +process { + withName: CHROMAP_CHROMAP { + ext.args = "--SAM" + } + + withName: 'FASTQ_ALIGN_CHROMAP:BAM_SORT_STATS_SAMTOOLS:SAMTOOLS_.*' { + ext.prefix = { "${meta.id}.sorted" } + } + + withName: 'FASTQ_ALIGN_CHROMAP:PICARD_ADDORREPLACEREADGROUPS*' { + ext.prefix = { "${meta.id}.update_rg" } + ext.args = {"--RGID ${meta.id} --RGSM ${meta.id - ~/_T\d+$/} --RGPL ILLUMINA --RGLB ${meta.id} --RGPU 1 --RGCN nf-core"} + } + + withName: 'FASTQ_ALIGN_CHROMAP:BAM_SORT_STATS_SAMTOOLS:BAM_STATS_SAMTOOLS:.*' { + ext.prefix = { "${meta.id}.sorted.bam" } + } +} diff --git a/subworkflows/nf-core/fastq_fastqc_umitools_trimgalore/main.nf b/subworkflows/nf-core/fastq_fastqc_umitools_trimgalore/main.nf index 262cbf53..054f60ea 100644 --- a/subworkflows/nf-core/fastq_fastqc_umitools_trimgalore/main.nf +++ b/subworkflows/nf-core/fastq_fastqc_umitools_trimgalore/main.nf @@ -36,22 +36,22 @@ workflow FASTQ_FASTQC_UMITOOLS_TRIMGALORE { min_trimmed_reads // integer: > 0 main: - fastqc_html = channel.empty() - fastqc_zip = channel.empty() + ch_fastqc_html = channel.empty() + ch_fastqc_zip = channel.empty() if (!skip_fastqc) { FASTQC(reads) - fastqc_html = FASTQC.out.html - fastqc_zip = FASTQC.out.zip + ch_fastqc_html = FASTQC.out.html + ch_fastqc_zip = FASTQC.out.zip } - trimmer_reads = reads - umi_log = channel.empty() - umi_reads = channel.empty() + ch_trimmer_reads = reads + ch_umi_log = channel.empty() + ch_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_trimmer_reads = UMITOOLS_EXTRACT.out.reads + ch_umi_reads = UMITOOLS_EXTRACT.out.reads + ch_umi_log = UMITOOLS_EXTRACT.out.log // Discard R1 / R2 if required if (umi_discard_read in [1, 2]) { @@ -59,35 +59,35 @@ workflow FASTQ_FASTQC_UMITOOLS_TRIMGALORE { .map { meta, reads_ -> meta.single_end ? [meta, reads_] : [meta + ['single_end': true], reads_[umi_discard_read % 2]] } - .set { trimmer_reads } + .set { ch_trimmer_reads } } } - 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() + ch_trim_reads = ch_trimmer_reads + ch_trim_unpaired = channel.empty() + ch_trim_html = channel.empty() + ch_trim_zip = channel.empty() + ch_trim_log = channel.empty() + ch_trim_read_count = channel.empty() if (!skip_trimming) { - TRIMGALORE(trimmer_reads) - trim_unpaired = TRIMGALORE.out.unpaired - trim_html = TRIMGALORE.out.html - trim_zip = TRIMGALORE.out.zip - trim_log = TRIMGALORE.out.log + TRIMGALORE(ch_trimmer_reads) + ch_trim_unpaired = TRIMGALORE.out.unpaired + ch_trim_html = TRIMGALORE.out.html + ch_trim_zip = TRIMGALORE.out.zip + ch_trim_log = TRIMGALORE.out.log // // Filter FastQ files based on minimum trimmed read count after adapter trimming // TRIMGALORE.out.reads - .join(trim_log, remainder: true) - .map { meta, reads_, trim_log_ -> + .join(ch_trim_log, remainder: true) + .map { meta, reads_, trim_log -> if (trim_log) { - def num_reads = getTrimGaloreReadsAfterFiltering(meta.single_end ? trim_log_ : trim_log_[-1]) + def num_reads = getTrimGaloreReadsAfterFiltering(meta.single_end ? trim_log : trim_log[-1]) [meta, reads_, num_reads] } else { - [meta, reads, min_trimmed_reads.toFloat() + 1] + [meta, reads_, min_trimmed_reads.toFloat() + 1] } } .set { ch_num_trimmed_reads } @@ -95,22 +95,22 @@ workflow FASTQ_FASTQC_UMITOOLS_TRIMGALORE { ch_num_trimmed_reads .filter { _meta, _reads, num_reads -> num_reads >= min_trimmed_reads.toFloat() } .map { meta, reads_, _num_reads -> [meta, reads_] } - .set { trim_reads } + .set { ch_trim_reads } ch_num_trimmed_reads .map { meta, _reads, num_reads -> [meta, num_reads] } - .set { trim_read_count } + .set { ch_trim_read_count } } emit: - reads = trim_reads // channel: [ val(meta), [ reads ] ] - 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) ] + reads = ch_trim_reads // channel: [ val(meta), [ reads ] ] + fastqc_html = ch_fastqc_html // channel: [ val(meta), [ html ] ] + fastqc_zip = ch_fastqc_zip // channel: [ val(meta), [ zip ] ] + umi_log = ch_umi_log // channel: [ val(meta), [ log ] ] + umi_reads = ch_umi_reads // channel: [ val(meta), [ reads ] ] + trim_unpaired = ch_trim_unpaired // channel: [ val(meta), [ reads ] ] + trim_html = ch_trim_html // channel: [ val(meta), [ html ] ] + trim_zip = ch_trim_zip // channel: [ val(meta), [ zip ] ] + trim_log = ch_trim_log // channel: [ val(meta), [ txt ] ] + trim_read_count = ch_trim_read_count // channel: [ val(meta), val(count) ] } 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 1c66c068..7e1b6af2 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 @@ -115,6 +115,42 @@ nextflow_workflow { } } + test("test paired end read without UMI - hardtrim5 (no trim log)") { + + config './nextflow-hardtrim.config' + + when { + workflow { + """ + input[0] = channel.of([ + [ id:'test', single_end:false ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) + ] + ]) + input[1] = true // skip_fastqc + input[2] = false // with_umi + input[3] = true // skip_umi_extract + input[4] = false // skip_trimming + input[5] = 0 // umi_discard_read + input[6] = 1 // min_trimmed_reads + """ + } + } + + then { + assertAll( + { assert workflow.success }, + { assert snapshot( + workflow.out.reads, + workflow.out.trim_read_count, + workflow.out.trim_unpaired, + ).match() } + ) + } + } + test("test skip all steps") { when { 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 a22db98b..0b42ef28 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 @@ -3,7 +3,7 @@ "content": [ { "0": [ - + ], "1": [ [ @@ -45,13 +45,13 @@ ] ], "5": [ - + ], "6": [ - + ], "7": [ - + ], "8": [ [ @@ -90,10 +90,10 @@ ] ], "reads": [ - + ], "trim_html": [ - + ], "trim_log": [ [ @@ -114,10 +114,10 @@ ] ], "trim_unpaired": [ - + ], "trim_zip": [ - + ], "umi_log": [ [ @@ -152,7 +152,7 @@ "content": [ { "0": [ - + ], "1": [ [ @@ -173,19 +173,19 @@ ] ], "3": [ - + ], "4": [ - + ], "5": [ - + ], "6": [ - + ], "7": [ - + ], "8": [ [ @@ -227,10 +227,10 @@ ] ], "reads": [ - + ], "trim_html": [ - + ], "trim_log": [ [ @@ -254,16 +254,16 @@ ] ], "trim_unpaired": [ - + ], "trim_zip": [ - + ], "umi_log": [ - + ], "umi_reads": [ - + ] } ], @@ -297,7 +297,7 @@ ] ], [ - + ] ], "meta": { @@ -327,7 +327,7 @@ ] ], [ - + ] ], "meta": { @@ -357,7 +357,7 @@ ] ], [ - + ] ], "meta": { @@ -369,10 +369,10 @@ "test skip all steps": { "content": [ [ - + ], [ - + ] ], "meta": { @@ -385,7 +385,7 @@ "content": [ { "0": [ - + ], "1": [ [ @@ -424,13 +424,13 @@ ] ], "5": [ - + ], "6": [ - + ], "7": [ - + ], "8": [ [ @@ -469,10 +469,10 @@ ] ], "reads": [ - + ], "trim_html": [ - + ], "trim_log": [ [ @@ -493,10 +493,10 @@ ] ], "trim_unpaired": [ - + ], "trim_zip": [ - + ], "umi_log": [ [ @@ -523,5 +523,38 @@ "nextflow": "25.10.3" }, "timestamp": "2026-02-03T13:21:36.092099503" + }, + "test paired end read without UMI - hardtrim5 (no trim log)": { + "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.8bp_5prime.fq.gz:md5,70f5059c1a54be0cb280ef42ee849122", + "test_2.8bp_5prime.fq.gz:md5,fdec97e9e36ac5f30685f4fa0975dcf7" + ] + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + 2.0 + ] + ], + [ + + ] + ], + "timestamp": "2026-04-20T10:04:54.300393835", + "meta": { + "nf-test": "0.9.5", + "nextflow": "25.10.4" + } } } \ No newline at end of file diff --git a/subworkflows/nf-core/fastq_fastqc_umitools_trimgalore/tests/nextflow-hardtrim.config b/subworkflows/nf-core/fastq_fastqc_umitools_trimgalore/tests/nextflow-hardtrim.config new file mode 100644 index 00000000..3d0ae023 --- /dev/null +++ b/subworkflows/nf-core/fastq_fastqc_umitools_trimgalore/tests/nextflow-hardtrim.config @@ -0,0 +1,11 @@ +process { + withName: UMITOOLS_EXTRACT { + ext.args = '--bc-pattern="NNNN"' + } + withName: TRIMGALORE { + // --hardtrim5 makes trim_galore skip the adapter / quality pass and not emit a + // *_trimming_report.txt, so the trim_log channel join leaves a null element. + // Used to exercise the null-log branch of the read-count map. + ext.args = '--hardtrim5 8' + } +} diff --git a/tests/.nftignore b/tests/.nftignore index 2479b405..cc559757 100644 --- a/tests/.nftignore +++ b/tests/.nftignore @@ -38,6 +38,11 @@ fastqc/*_fastqc.{html,zip} **/*.alignment_summary_metrics **/*.base_distribution_by_cycle_metrics **/*.MarkDuplicates.metrics.txt +# Picard MarkDuplicates metrics as renamed by this pipeline's ext.prefix +# (merged library + merged replicate). Their header carries a per-run +# "Started on: " line, so the md5 is not reproducible across runs. +**/*.mkD.sorted.metrics.txt +**/*.mRp.clN.sorted.metrics.txt # Samtools **/*.bam.stats @@ -62,9 +67,6 @@ fastqc/*_fastqc.{html,zip} **/*.boolean.annotatePeaks.txt **/macs3_peak.*.summary.txt -# Feature counting -**/*.featureCounts.txt -**/*.featureCounts.txt.summary # Statistical analysis **/*.pca.vals.txt diff --git a/tests/bin/test_featurecounts_merge.sh b/tests/bin/test_featurecounts_merge.sh new file mode 100755 index 00000000..24987364 --- /dev/null +++ b/tests/bin/test_featurecounts_merge.sh @@ -0,0 +1,110 @@ +#!/usr/bin/env bash +# +# Unit tests for bin/featurecounts_merge.sh — pure bash, no Docker, milliseconds. +# +# The consensus-peak quantification runs featureCounts once per library type +# (single-end / paired-end) and merges the resulting count tables. These tests +# pin the merge logic directly: exact column-bind of a mixed SE+PE pair, and the +# single-file pass-through used when a cohort is all-SE or all-PE. +# +# Run: tests/bin/test_featurecounts_merge.sh +set -euo pipefail + +here="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +merge="$here/../../bin/featurecounts_merge.sh" +tmp="$(mktemp -d)" +trap 'rm -rf "$tmp"' EXIT + +fail=0 +pass=0 + +# assert_eq NAME EXPECTED_FILE ACTUAL_FILE +assert_eq() { + local name=$1 exp=$2 act=$3 + if diff -u "$exp" "$act" >/dev/null; then + echo "ok - $name" + pass=$((pass + 1)) + else + echo "FAIL - $name" + echo "----- diff (expected vs actual) -----" + diff -u "$exp" "$act" || true + echo "-------------------------------------" + fail=$((fail + 1)) + fi +} + +# --- fixtures -------------------------------------------------------------- +# Both tables share an identical annotation block (same SAF); they differ only +# in their sample count columns. The PE table intentionally lists its data rows +# in a DIFFERENT order to prove the merge keys on Geneid, not on row position. + +printf '%s\n' \ +'# Program:featureCounts v2.1.1; Command:"featureCounts" "-F" "SAF"' \ +$'Geneid\tChr\tStart\tEnd\tStrand\tLength\tT100_SE.bam\tT150_SE.bam' \ +$'peak_1\tI\t1\t100\t+\t100\t11\t12' \ +$'peak_2\tII\t5\t205\t+\t201\t21\t22' \ +$'peak_3\tIII\t9\t309\t+\t301\t31\t32' \ +> "$tmp/se.featureCounts.tsv" + +printf '%s\n' \ +'# Program:featureCounts v2.1.1; Command:"featureCounts" "-F" "SAF" "-p"' \ +$'Geneid\tChr\tStart\tEnd\tStrand\tLength\tT0_PE.bam\tT15_PE.bam' \ +$'peak_3\tIII\t9\t309\t+\t301\t131\t132' \ +$'peak_1\tI\t1\t100\t+\t100\t111\t112' \ +$'peak_2\tII\t5\t205\t+\t201\t121\t122' \ +> "$tmp/pe.featureCounts.tsv" + +# === Case 1: mixed SE + PE merge (SE table first) ========================== +# Annotation and row order come from the first (SE) file; sample columns are +# appended SE-then-PE; PE counts are matched to rows by Geneid. +printf '%s\n' \ +'# Program:featureCounts (merged single-end and paired-end libraries)' \ +$'Geneid\tChr\tStart\tEnd\tStrand\tLength\tT100_SE.bam\tT150_SE.bam\tT0_PE.bam\tT15_PE.bam' \ +$'peak_1\tI\t1\t100\t+\t100\t11\t12\t111\t112' \ +$'peak_2\tII\t5\t205\t+\t201\t21\t22\t121\t122' \ +$'peak_3\tIII\t9\t309\t+\t301\t31\t32\t131\t132' \ +> "$tmp/expected_mixed.tsv" + +"$merge" "$tmp/out_mixed.tsv" "$tmp/se.featureCounts.tsv" "$tmp/pe.featureCounts.tsv" +assert_eq "mixed SE+PE merge column-binds on Geneid" "$tmp/expected_mixed.tsv" "$tmp/out_mixed.tsv" + +# === Case 2: all-SE cohort -> single-file pass-through ===================== +# Empty PE branch means featureCounts runs once; the merge must pass the single +# table through unchanged (except the normalised comment line), order preserved. +printf '%s\n' \ +'# Program:featureCounts (merged single-end and paired-end libraries)' \ +$'Geneid\tChr\tStart\tEnd\tStrand\tLength\tT100_SE.bam\tT150_SE.bam' \ +$'peak_1\tI\t1\t100\t+\t100\t11\t12' \ +$'peak_2\tII\t5\t205\t+\t201\t21\t22' \ +$'peak_3\tIII\t9\t309\t+\t301\t31\t32' \ +> "$tmp/expected_se_only.tsv" + +"$merge" "$tmp/out_se_only.tsv" "$tmp/se.featureCounts.tsv" +assert_eq "all-SE single-file pass-through" "$tmp/expected_se_only.tsv" "$tmp/out_se_only.tsv" + +# === Case 3: all-PE cohort -> single-file pass-through ===================== +# Same pass-through, preserving the PE file's own (unsorted) row order. +printf '%s\n' \ +'# Program:featureCounts (merged single-end and paired-end libraries)' \ +$'Geneid\tChr\tStart\tEnd\tStrand\tLength\tT0_PE.bam\tT15_PE.bam' \ +$'peak_3\tIII\t9\t309\t+\t301\t131\t132' \ +$'peak_1\tI\t1\t100\t+\t100\t111\t112' \ +$'peak_2\tII\t5\t205\t+\t201\t121\t122' \ +> "$tmp/expected_pe_only.tsv" + +"$merge" "$tmp/out_pe_only.tsv" "$tmp/pe.featureCounts.tsv" +assert_eq "all-PE single-file pass-through" "$tmp/expected_pe_only.tsv" "$tmp/out_pe_only.tsv" + +# === Case 4: usage error on too few arguments ============================= +if "$merge" "$tmp/out_none.tsv" >/dev/null 2>&1; then + echo "FAIL - merge should exit non-zero with no input files" + fail=$((fail + 1)) +else + echo "ok - usage error when no input tables given" + pass=$((pass + 1)) +fi + +# --- summary --------------------------------------------------------------- +echo +echo "featurecounts_merge.sh: $pass passed, $fail failed" +[ "$fail" -eq 0 ] diff --git a/tests/bowtie2.nf.test.snap b/tests/bowtie2.nf.test.snap index b5f67b3d..dc7f06d8 100644 --- a/tests/bowtie2.nf.test.snap +++ b/tests/bowtie2.nf.test.snap @@ -1,55 +1,73 @@ { "bowtie2": { "content": [ - 264, + 268, { "BAMTOOLS_FILTER": { - "samtools": "1.15.1", - "bamtools": "2.5.2" + "bamtools": "2.5.2", + "samtools": "1.15.1" }, "BAM_REMOVE_ORPHANS": { "samtools": "1.15.1" }, "BEDTOOLS_GENOMECOV": { "bedtools": "2.31.1", - "sort": 9.5 + "sort": "sort (GNU coreutils) 9.5" }, "BOWTIE2_ALIGN": { - "bowtie2": "2.5.2", - "samtools": 1.18, - "pigz": 2.6 + "bowtie2": "2.5.4", + "pigz": 2.8, + "samtools": 1.21 + }, + "BOWTIE2_BUILD": { + "bowtie2": "2.5.4" }, "DEEPTOOLS_COMPUTEMATRIX_REFERENCE_POINT": { - "deeptools": "3.5.5" + "deeptools": "3.5.6" }, "DEEPTOOLS_COMPUTEMATRIX_SCALE_REGIONS": { - "deeptools": "3.5.5" + "deeptools": "3.5.6" }, "DEEPTOOLS_PLOTHEATMAP": { - "deeptools": "3.5.5" + "deeptools": "3.5.6" }, "DEEPTOOLS_PLOTPROFILE": { - "deeptools": "3.5.5" + "deeptools": "3.5.6" }, "DESEQ2_QC": { - "r-base": "4.0.3", - "bioconductor-deseq2": "1.28.0" + "bioconductor-deseq2": "1.28.0", + "r-base": "4.0.3" }, "FASTQC": { "fastqc": "0.12.1" }, + "FEATURECOUNTS_MERGE": { + "sed": 4.7 + }, "FRIP_SCORE": { "bedtools": "2.30.0", "samtools": "1.15.1" }, + "GENOME_BLACKLIST_REGIONS": { + "bedtools": "2.30.0" + }, + "GET_AUTOSOMES": { + "python": "3.8.3" + }, + "GTF2BED": { + "perl": "5.26.2" + }, "HOMER_ANNOTATEPEAKS": { "homer": 4.11 }, "IGV": { "python": "3.8.3" }, + "KHMER_UNIQUEKMERS": { + "khmer": "3.0.0a3" + }, "MACS3_CALLPEAK": { - "macs3": "3.0.1" + "macs3": "3.0.4" }, "MACS3_CONSENSUS": { "python": "3.10.0", @@ -62,16 +80,16 @@ "ataqv": "1.3.1" }, "MERGED_LIBRARY_DEEPTOOLS_PLOTFINGERPRINT": { - "deeptools": "3.5.5" + "deeptools": "3.5.6" }, "MERGED_LIBRARY_PICARD_COLLECTMULTIPLEMETRICS": { - "picard": "3.0.0" + "picard": "3.4.0" }, "MULTIQC_CUSTOM_PEAKS": { "sed": 4.7 }, "PICARD_MARKDUPLICATES": { - "picard": "3.1.1" + "picard": "3.4.0" }, "PICARD_MERGESAMFILES_LIBRARY": { "picard": "3.4.0" @@ -88,32 +106,35 @@ "SAMPLESHEET_CHECK": { "python": "3.8.3" }, + "SAMTOOLS_FAIDX": { + "samtools": "1.23.1" + }, "SAMTOOLS_FLAGSTAT": { - "samtools": "1.19.2" + "samtools": 1.24 }, "SAMTOOLS_IDXSTATS": { - "samtools": "1.19.2" + "samtools": 1.24 }, "SAMTOOLS_INDEX": { - "samtools": "1.19.2" + "samtools": 1.24 }, "SAMTOOLS_SORT": { - "samtools": "1.19.2" + "samtools": 1.24 }, "SAMTOOLS_STATS": { - "samtools": "1.19.2" + "samtools": 1.24 }, "SUBREAD_FEATURECOUNTS": { - "subread": "2.0.1" + "subread": "2.1.1" }, "TRIMGALORE": { - "trimgalore": "0.6.10" + "trimgalore": "2.1.0" }, - "UCSC_BEDGRAPHTOBIGWIG": { - "ucsc": 445 + "TSS_EXTRACT": { + "sed": 4.7 }, - "Workflow": { - "nf-core/atacseq": "v2.2.0dev" + "UCSC_BEDGRAPHTOBIGWIG": { + "ucsc": 482 } }, [ @@ -282,13 +303,16 @@ "bowtie2/merged_library/macs3/broad_peak/OSMOTIC_STRESS_T15_PE_REP1.mLb.clN_peaks.gappedPeak", "bowtie2/merged_library/macs3/broad_peak/OSMOTIC_STRESS_T15_PE_REP1.mLb.clN_peaks.xls", "bowtie2/merged_library/macs3/broad_peak/consensus", + "bowtie2/merged_library/macs3/broad_peak/consensus/consensus_peaks.mLb.clN.PE.featureCounts.tsv", + "bowtie2/merged_library/macs3/broad_peak/consensus/consensus_peaks.mLb.clN.PE.featureCounts.tsv.summary", + "bowtie2/merged_library/macs3/broad_peak/consensus/consensus_peaks.mLb.clN.SE.featureCounts.tsv", + "bowtie2/merged_library/macs3/broad_peak/consensus/consensus_peaks.mLb.clN.SE.featureCounts.tsv.summary", "bowtie2/merged_library/macs3/broad_peak/consensus/consensus_peaks.mLb.clN.annotatePeaks.txt", "bowtie2/merged_library/macs3/broad_peak/consensus/consensus_peaks.mLb.clN.bed", "bowtie2/merged_library/macs3/broad_peak/consensus/consensus_peaks.mLb.clN.boolean.intersect.plot.pdf", "bowtie2/merged_library/macs3/broad_peak/consensus/consensus_peaks.mLb.clN.boolean.intersect.txt", "bowtie2/merged_library/macs3/broad_peak/consensus/consensus_peaks.mLb.clN.boolean.txt", - "bowtie2/merged_library/macs3/broad_peak/consensus/consensus_peaks.mLb.clN.featureCounts.txt", - "bowtie2/merged_library/macs3/broad_peak/consensus/consensus_peaks.mLb.clN.featureCounts.txt.summary", + "bowtie2/merged_library/macs3/broad_peak/consensus/consensus_peaks.mLb.clN.featureCounts.tsv", "bowtie2/merged_library/macs3/broad_peak/consensus/consensus_peaks.mLb.clN.saf", "bowtie2/merged_library/macs3/broad_peak/consensus/deseq2", "bowtie2/merged_library/macs3/broad_peak/consensus/deseq2/R_sessionInfo.log", @@ -331,34 +355,34 @@ "bowtie2/merged_library/picard_metrics/OSMOTIC_STRESS_T0_PE_REP1.mLb.clN.CollectMultipleMetrics.insert_size_metrics", "bowtie2/merged_library/picard_metrics/OSMOTIC_STRESS_T0_PE_REP1.mLb.clN.CollectMultipleMetrics.quality_by_cycle_metrics", "bowtie2/merged_library/picard_metrics/OSMOTIC_STRESS_T0_PE_REP1.mLb.clN.CollectMultipleMetrics.quality_distribution_metrics", - "bowtie2/merged_library/picard_metrics/OSMOTIC_STRESS_T0_PE_REP1.mLb.mkD.sorted.MarkDuplicates.metrics.txt", + "bowtie2/merged_library/picard_metrics/OSMOTIC_STRESS_T0_PE_REP1.mLb.mkD.sorted.metrics.txt", "bowtie2/merged_library/picard_metrics/OSMOTIC_STRESS_T0_PE_REP2.mLb.clN.CollectMultipleMetrics.alignment_summary_metrics", "bowtie2/merged_library/picard_metrics/OSMOTIC_STRESS_T0_PE_REP2.mLb.clN.CollectMultipleMetrics.base_distribution_by_cycle_metrics", "bowtie2/merged_library/picard_metrics/OSMOTIC_STRESS_T0_PE_REP2.mLb.clN.CollectMultipleMetrics.insert_size_metrics", "bowtie2/merged_library/picard_metrics/OSMOTIC_STRESS_T0_PE_REP2.mLb.clN.CollectMultipleMetrics.quality_by_cycle_metrics", "bowtie2/merged_library/picard_metrics/OSMOTIC_STRESS_T0_PE_REP2.mLb.clN.CollectMultipleMetrics.quality_distribution_metrics", - "bowtie2/merged_library/picard_metrics/OSMOTIC_STRESS_T0_PE_REP2.mLb.mkD.sorted.MarkDuplicates.metrics.txt", + "bowtie2/merged_library/picard_metrics/OSMOTIC_STRESS_T0_PE_REP2.mLb.mkD.sorted.metrics.txt", "bowtie2/merged_library/picard_metrics/OSMOTIC_STRESS_T100_SE_REP1.mLb.clN.CollectMultipleMetrics.alignment_summary_metrics", "bowtie2/merged_library/picard_metrics/OSMOTIC_STRESS_T100_SE_REP1.mLb.clN.CollectMultipleMetrics.base_distribution_by_cycle_metrics", "bowtie2/merged_library/picard_metrics/OSMOTIC_STRESS_T100_SE_REP1.mLb.clN.CollectMultipleMetrics.quality_by_cycle_metrics", "bowtie2/merged_library/picard_metrics/OSMOTIC_STRESS_T100_SE_REP1.mLb.clN.CollectMultipleMetrics.quality_distribution_metrics", - "bowtie2/merged_library/picard_metrics/OSMOTIC_STRESS_T100_SE_REP1.mLb.mkD.sorted.MarkDuplicates.metrics.txt", + "bowtie2/merged_library/picard_metrics/OSMOTIC_STRESS_T100_SE_REP1.mLb.mkD.sorted.metrics.txt", "bowtie2/merged_library/picard_metrics/OSMOTIC_STRESS_T100_SE_REP2.mLb.clN.CollectMultipleMetrics.alignment_summary_metrics", "bowtie2/merged_library/picard_metrics/OSMOTIC_STRESS_T100_SE_REP2.mLb.clN.CollectMultipleMetrics.base_distribution_by_cycle_metrics", "bowtie2/merged_library/picard_metrics/OSMOTIC_STRESS_T100_SE_REP2.mLb.clN.CollectMultipleMetrics.quality_by_cycle_metrics", "bowtie2/merged_library/picard_metrics/OSMOTIC_STRESS_T100_SE_REP2.mLb.clN.CollectMultipleMetrics.quality_distribution_metrics", - "bowtie2/merged_library/picard_metrics/OSMOTIC_STRESS_T100_SE_REP2.mLb.mkD.sorted.MarkDuplicates.metrics.txt", + "bowtie2/merged_library/picard_metrics/OSMOTIC_STRESS_T100_SE_REP2.mLb.mkD.sorted.metrics.txt", "bowtie2/merged_library/picard_metrics/OSMOTIC_STRESS_T150_SE_REP1.mLb.clN.CollectMultipleMetrics.alignment_summary_metrics", "bowtie2/merged_library/picard_metrics/OSMOTIC_STRESS_T150_SE_REP1.mLb.clN.CollectMultipleMetrics.base_distribution_by_cycle_metrics", "bowtie2/merged_library/picard_metrics/OSMOTIC_STRESS_T150_SE_REP1.mLb.clN.CollectMultipleMetrics.quality_by_cycle_metrics", "bowtie2/merged_library/picard_metrics/OSMOTIC_STRESS_T150_SE_REP1.mLb.clN.CollectMultipleMetrics.quality_distribution_metrics", - "bowtie2/merged_library/picard_metrics/OSMOTIC_STRESS_T150_SE_REP1.mLb.mkD.sorted.MarkDuplicates.metrics.txt", + "bowtie2/merged_library/picard_metrics/OSMOTIC_STRESS_T150_SE_REP1.mLb.mkD.sorted.metrics.txt", "bowtie2/merged_library/picard_metrics/OSMOTIC_STRESS_T15_PE_REP1.mLb.clN.CollectMultipleMetrics.alignment_summary_metrics", "bowtie2/merged_library/picard_metrics/OSMOTIC_STRESS_T15_PE_REP1.mLb.clN.CollectMultipleMetrics.base_distribution_by_cycle_metrics", "bowtie2/merged_library/picard_metrics/OSMOTIC_STRESS_T15_PE_REP1.mLb.clN.CollectMultipleMetrics.insert_size_metrics", "bowtie2/merged_library/picard_metrics/OSMOTIC_STRESS_T15_PE_REP1.mLb.clN.CollectMultipleMetrics.quality_by_cycle_metrics", "bowtie2/merged_library/picard_metrics/OSMOTIC_STRESS_T15_PE_REP1.mLb.clN.CollectMultipleMetrics.quality_distribution_metrics", - "bowtie2/merged_library/picard_metrics/OSMOTIC_STRESS_T15_PE_REP1.mLb.mkD.sorted.MarkDuplicates.metrics.txt", + "bowtie2/merged_library/picard_metrics/OSMOTIC_STRESS_T15_PE_REP1.mLb.mkD.sorted.metrics.txt", "bowtie2/merged_library/picard_metrics/pdf", "bowtie2/merged_library/picard_metrics/pdf/OSMOTIC_STRESS_T0_PE_REP1.mLb.clN.CollectMultipleMetrics.base_distribution_by_cycle.pdf", "bowtie2/merged_library/picard_metrics/pdf/OSMOTIC_STRESS_T0_PE_REP1.mLb.clN.CollectMultipleMetrics.insert_size_histogram.pdf", @@ -446,13 +470,16 @@ "bowtie2/merged_replicate/macs3/broad_peak/OSMOTIC_STRESS_T100_SE.mRp.clN_peaks.gappedPeak", "bowtie2/merged_replicate/macs3/broad_peak/OSMOTIC_STRESS_T100_SE.mRp.clN_peaks.xls", "bowtie2/merged_replicate/macs3/broad_peak/consensus", + "bowtie2/merged_replicate/macs3/broad_peak/consensus/consensus_peaks.mRp.clN.PE.featureCounts.tsv", + "bowtie2/merged_replicate/macs3/broad_peak/consensus/consensus_peaks.mRp.clN.PE.featureCounts.tsv.summary", + "bowtie2/merged_replicate/macs3/broad_peak/consensus/consensus_peaks.mRp.clN.SE.featureCounts.tsv", + "bowtie2/merged_replicate/macs3/broad_peak/consensus/consensus_peaks.mRp.clN.SE.featureCounts.tsv.summary", "bowtie2/merged_replicate/macs3/broad_peak/consensus/consensus_peaks.mRp.clN.annotatePeaks.txt", "bowtie2/merged_replicate/macs3/broad_peak/consensus/consensus_peaks.mRp.clN.bed", "bowtie2/merged_replicate/macs3/broad_peak/consensus/consensus_peaks.mRp.clN.boolean.intersect.plot.pdf", "bowtie2/merged_replicate/macs3/broad_peak/consensus/consensus_peaks.mRp.clN.boolean.intersect.txt", "bowtie2/merged_replicate/macs3/broad_peak/consensus/consensus_peaks.mRp.clN.boolean.txt", - "bowtie2/merged_replicate/macs3/broad_peak/consensus/consensus_peaks.mRp.clN.featureCounts.txt", - "bowtie2/merged_replicate/macs3/broad_peak/consensus/consensus_peaks.mRp.clN.featureCounts.txt.summary", + "bowtie2/merged_replicate/macs3/broad_peak/consensus/consensus_peaks.mRp.clN.featureCounts.tsv", "bowtie2/merged_replicate/macs3/broad_peak/consensus/consensus_peaks.mRp.clN.saf", "bowtie2/merged_replicate/macs3/broad_peak/consensus/deseq2", "bowtie2/merged_replicate/macs3/broad_peak/consensus/deseq2/R_sessionInfo.log", @@ -480,8 +507,8 @@ "bowtie2/merged_replicate/macs3/broad_peak/qc/macs3_peak.mRp.clN.plots.pdf", "bowtie2/merged_replicate/macs3/broad_peak/qc/macs3_peak.mRp.clN.summary.txt", "bowtie2/merged_replicate/picard_metrics", - "bowtie2/merged_replicate/picard_metrics/OSMOTIC_STRESS_T0_PE.mRp.clN.sorted.MarkDuplicates.metrics.txt", - "bowtie2/merged_replicate/picard_metrics/OSMOTIC_STRESS_T100_SE.mRp.clN.sorted.MarkDuplicates.metrics.txt", + "bowtie2/merged_replicate/picard_metrics/OSMOTIC_STRESS_T0_PE.mRp.clN.sorted.metrics.txt", + "bowtie2/merged_replicate/picard_metrics/OSMOTIC_STRESS_T100_SE.mRp.clN.sorted.metrics.txt", "bowtie2/merged_replicate/samtools_stats", "bowtie2/merged_replicate/samtools_stats/OSMOTIC_STRESS_T0_PE.mRp.clN.sorted.bam.flagstat", "bowtie2/merged_replicate/samtools_stats/OSMOTIC_STRESS_T0_PE.mRp.clN.sorted.bam.idxstats", @@ -920,110 +947,120 @@ "sourcesanspro-semiboldit.woff:md5,f1d255aa459786dfc6aa2e488ac01245", "index.html:md5,bf7747be761e56ad7c54c842ac88461a", "ataqv.js:md5,feb291b7839e9e43ed304565e3a605d9", - "configuration.js:md5,c4ca22efb3fde3d789c36ba6d5799c3b", + "configuration.js:md5,afe3f9608e538a5796e6919be7cabbb9", "d3.min.js:md5,db69fb2626a71a286ee772d673138aca", "datatables.min.js:md5,e369b872620dadb05e4eb555b81f9112", "jszip.min.js:md5,09e492cb492ffa75484bbe10f1f721d1", "OSMOTIC_STRESS_T0_PE_REP1.mLb.clN.scale_factor.txt:md5,931e592897ee0c12682a7d65568669df", - "OSMOTIC_STRESS_T0_PE_REP2.mLb.clN.scale_factor.txt:md5,8b22e8c8ecea9894ed833dd6cddc54b3", + "OSMOTIC_STRESS_T0_PE_REP2.mLb.clN.scale_factor.txt:md5,990df2808373845e0437937892f2d0c5", "OSMOTIC_STRESS_T100_SE_REP1.mLb.clN.scale_factor.txt:md5,b764128ab7799892423b19c6ccb4b626", - "OSMOTIC_STRESS_T100_SE_REP2.mLb.clN.scale_factor.txt:md5,d47768f439c8d34cac3bc2674742b469", - "OSMOTIC_STRESS_T150_SE_REP1.mLb.clN.scale_factor.txt:md5,f580c4c31ccbc7166c376d56c02a9bb8", - "OSMOTIC_STRESS_T15_PE_REP1.mLb.clN.scale_factor.txt:md5,07141ad6a6b31c3352cd2bf792d51244", + "OSMOTIC_STRESS_T100_SE_REP2.mLb.clN.scale_factor.txt:md5,7ed7b206a39780b25a28f11ae1fe2563", + "OSMOTIC_STRESS_T150_SE_REP1.mLb.clN.scale_factor.txt:md5,ba5d361c216adf49f63b66b00b50ac80", + "OSMOTIC_STRESS_T15_PE_REP1.mLb.clN.scale_factor.txt:md5,36ea1d92600c535a6b966c4df30f96da", "OSMOTIC_STRESS_T0_PE_REP1.mLb.clN_peaks.broadPeak:md5,ea09e6f989d568179bb6d4016ce6b05c", - "OSMOTIC_STRESS_T0_PE_REP1.mLb.clN_peaks.gappedPeak:md5,af70a4bbd09f93d477f7bf0da412e7c1", - "OSMOTIC_STRESS_T0_PE_REP1.mLb.clN_peaks.xls:md5,6658cf4e398b73f79feaa4ec0738458c", - "OSMOTIC_STRESS_T0_PE_REP2.mLb.clN_peaks.broadPeak:md5,367fd45a7763b51d4cd9fedb0fe166cf", - "OSMOTIC_STRESS_T0_PE_REP2.mLb.clN_peaks.gappedPeak:md5,de818e40e8b1f54370b61f0bb8f13971", - "OSMOTIC_STRESS_T0_PE_REP2.mLb.clN_peaks.xls:md5,ad17e1190178a918c4b011777ca2dbef", + "OSMOTIC_STRESS_T0_PE_REP1.mLb.clN_peaks.gappedPeak:md5,91e4852cc182ab06692cb0936a3dfd82", + "OSMOTIC_STRESS_T0_PE_REP1.mLb.clN_peaks.xls:md5,3aa9e3d8b25593fc02b884a808c90b5c", + "OSMOTIC_STRESS_T0_PE_REP2.mLb.clN_peaks.broadPeak:md5,3559a09af9279f20ddabf5b0ca57e5b5", + "OSMOTIC_STRESS_T0_PE_REP2.mLb.clN_peaks.gappedPeak:md5,e5a81c1caabc1c71211df97dda992515", + "OSMOTIC_STRESS_T0_PE_REP2.mLb.clN_peaks.xls:md5,8caebfd80d032f2fda0626a943473788", "OSMOTIC_STRESS_T100_SE_REP1.mLb.clN_peaks.broadPeak:md5,b027f21fdeeab2aded434cdf0662eade", - "OSMOTIC_STRESS_T100_SE_REP1.mLb.clN_peaks.gappedPeak:md5,bba8bcfb72a3a618fc73c50e5a441ff0", - "OSMOTIC_STRESS_T100_SE_REP1.mLb.clN_peaks.xls:md5,8957ed96feb20b95dacdb42d664390e7", - "OSMOTIC_STRESS_T100_SE_REP2.mLb.clN_peaks.broadPeak:md5,532e5a716c9eaee4e5cb902db93b0330", - "OSMOTIC_STRESS_T100_SE_REP2.mLb.clN_peaks.gappedPeak:md5,5d0c059f3f3859552063c01c87377f36", - "OSMOTIC_STRESS_T100_SE_REP2.mLb.clN_peaks.xls:md5,c5d6592ae571aa288dd546e6f486a915", - "OSMOTIC_STRESS_T150_SE_REP1.mLb.clN_peaks.broadPeak:md5,cb670f5524bfeec98e13791901cf5e85", - "OSMOTIC_STRESS_T150_SE_REP1.mLb.clN_peaks.gappedPeak:md5,30007654f473d64d04142398686cc044", - "OSMOTIC_STRESS_T150_SE_REP1.mLb.clN_peaks.xls:md5,6b9727ec35ddf2c08d6b83a2a0c07352", - "OSMOTIC_STRESS_T15_PE_REP1.mLb.clN_peaks.broadPeak:md5,4f8717f68a96566461d4a5d89ff8c8b4", - "OSMOTIC_STRESS_T15_PE_REP1.mLb.clN_peaks.gappedPeak:md5,009c53e1ebe0c3c15a850204b90f170a", - "OSMOTIC_STRESS_T15_PE_REP1.mLb.clN_peaks.xls:md5,85eff9164c2d26bf5d6e8b91bb6c8479", - "consensus_peaks.mLb.clN.bed:md5,22d733ece656a67a422b0315b23f9c9f", - "consensus_peaks.mLb.clN.boolean.intersect.txt:md5,b94b233aed48706619605c02b2863c86", - "consensus_peaks.mLb.clN.boolean.txt:md5,1ee192755172f74353f735194c220286", - "consensus_peaks.mLb.clN.saf:md5,57d7ef9d115b95642d0c3ec3a3ba527a", + "OSMOTIC_STRESS_T100_SE_REP1.mLb.clN_peaks.gappedPeak:md5,6e64f155827575fb754e213de15a5a12", + "OSMOTIC_STRESS_T100_SE_REP1.mLb.clN_peaks.xls:md5,2a7578415788e84d2ca9d3f99a8be09b", + "OSMOTIC_STRESS_T100_SE_REP2.mLb.clN_peaks.broadPeak:md5,7ed9fb69f2f1eadd70f91217d26fe86c", + "OSMOTIC_STRESS_T100_SE_REP2.mLb.clN_peaks.gappedPeak:md5,2678af767301096f6cb5e60a2563df2b", + "OSMOTIC_STRESS_T100_SE_REP2.mLb.clN_peaks.xls:md5,060dcc556290495972cb7e4d80444575", + "OSMOTIC_STRESS_T150_SE_REP1.mLb.clN_peaks.broadPeak:md5,129556575051c20ae6bfc8439f96c01d", + "OSMOTIC_STRESS_T150_SE_REP1.mLb.clN_peaks.gappedPeak:md5,0254646bba0c3a10e47055626d647259", + "OSMOTIC_STRESS_T150_SE_REP1.mLb.clN_peaks.xls:md5,e327b95afd2b665f64f44b938ecff4a7", + "OSMOTIC_STRESS_T15_PE_REP1.mLb.clN_peaks.broadPeak:md5,2639ddfabd8ef8ffe1209cd565e32fa1", + "OSMOTIC_STRESS_T15_PE_REP1.mLb.clN_peaks.gappedPeak:md5,552bde3429fcda63c6dc8151cd381d40", + "OSMOTIC_STRESS_T15_PE_REP1.mLb.clN_peaks.xls:md5,241fb2b28eef4bee1a259b26d150c9f0", + "consensus_peaks.mLb.clN.PE.featureCounts.tsv:md5,3d242c5e5e7b1d52a77cf70742fc5fbe", + "consensus_peaks.mLb.clN.PE.featureCounts.tsv.summary:md5,181ed21e715ec2834aac2d396da9948f", + "consensus_peaks.mLb.clN.SE.featureCounts.tsv:md5,d7cc8de35172c26d47f9af95b516c307", + "consensus_peaks.mLb.clN.SE.featureCounts.tsv.summary:md5,a4a07aaa74c77029c70cbcf61ce3a764", + "consensus_peaks.mLb.clN.bed:md5,2887f1e35b9eea82a9de1c92cb43e7ae", + "consensus_peaks.mLb.clN.boolean.intersect.txt:md5,5a4f92efb0a79bf7fbbd50c5ed5bfbbd", + "consensus_peaks.mLb.clN.boolean.txt:md5,c4499f15dd2f076262a9689785a9e5d4", + "consensus_peaks.mLb.clN.featureCounts.tsv:md5,1f01d7bb58f30e34dde37c7bba9dfa4a", + "consensus_peaks.mLb.clN.saf:md5,add1c0c9dab6be6861c93bd3efce5ecd", "R_sessionInfo.log:md5,fb0da0d7ad6994ed66a8e68348b19676", - "OSMOTIC_STRESS_T0_PE_REP1.size_factors.txt:md5,550a1828bac887ad03d668a762d054c9", - "OSMOTIC_STRESS_T0_PE_REP2.size_factors.txt:md5,b29ff7969612feb9378b8eb9b2756cf0", - "OSMOTIC_STRESS_T100_SE_REP1.size_factors.txt:md5,d918d617a20f38604fb310abd2fcb87a", - "OSMOTIC_STRESS_T100_SE_REP2.size_factors.txt:md5,4c3c7cbd5b0ccefc634e80462664dc53", - "OSMOTIC_STRESS_T150_SE_REP1.size_factors.txt:md5,7d35bd13b608e03d40a55e3f3bfd09a8", - "OSMOTIC_STRESS_T15_PE_REP1.size_factors.txt:md5,2eb0b01a2d9f8532d6a45bb75a4af284", + "OSMOTIC_STRESS_T0_PE_REP1.size_factors.txt:md5,152f1a6cd7e44486db1641419a2b1956", + "OSMOTIC_STRESS_T0_PE_REP2.size_factors.txt:md5,9957c2eee30009597e5ab024dfb25677", + "OSMOTIC_STRESS_T100_SE_REP1.size_factors.txt:md5,3ab70ebbe2850298847b99b5d3156316", + "OSMOTIC_STRESS_T100_SE_REP2.size_factors.txt:md5,ae1fd7ff4df2b692e45464a4d631aacc", + "OSMOTIC_STRESS_T150_SE_REP1.size_factors.txt:md5,07faf98eb26e9030034d08ec1ddcfb66", + "OSMOTIC_STRESS_T15_PE_REP1.size_factors.txt:md5,cc787543931aa31a80006ab7f4e429c2", "OSMOTIC_STRESS_T0_PE_REP1.mLb.clN_peaks.FRiP_mqc.tsv:md5,43cf646f6d45a983082cc3251b9e550c", "OSMOTIC_STRESS_T0_PE_REP1.mLb.clN_peaks.count_mqc.tsv:md5,b43f9274c85d0ab50a4f5f1235c5f777", - "OSMOTIC_STRESS_T0_PE_REP2.mLb.clN_peaks.FRiP_mqc.tsv:md5,8a1652741df9b4a0cab8c5d55b6c159f", - "OSMOTIC_STRESS_T0_PE_REP2.mLb.clN_peaks.count_mqc.tsv:md5,9e1e3f161db661fe94fb8bbf28400c16", + "OSMOTIC_STRESS_T0_PE_REP2.mLb.clN_peaks.FRiP_mqc.tsv:md5,12289eeeae627b94423d89b7eba91d01", + "OSMOTIC_STRESS_T0_PE_REP2.mLb.clN_peaks.count_mqc.tsv:md5,eb861e97fcf6b646626b7ff29e03a4c1", "OSMOTIC_STRESS_T100_SE_REP1.mLb.clN_peaks.FRiP_mqc.tsv:md5,ec6195096608607c081601c2b61411cc", "OSMOTIC_STRESS_T100_SE_REP1.mLb.clN_peaks.count_mqc.tsv:md5,c04d469e086639581323a44d3dbe217f", - "OSMOTIC_STRESS_T100_SE_REP2.mLb.clN_peaks.FRiP_mqc.tsv:md5,06dce40a946a13c3de60a7adae34a9a8", - "OSMOTIC_STRESS_T100_SE_REP2.mLb.clN_peaks.count_mqc.tsv:md5,05f386e99a2bf491736faf401e9f6955", - "OSMOTIC_STRESS_T150_SE_REP1.mLb.clN_peaks.FRiP_mqc.tsv:md5,46c746a5e42ac20fe00d33fb7edb50de", + "OSMOTIC_STRESS_T100_SE_REP2.mLb.clN_peaks.FRiP_mqc.tsv:md5,0f639ade223d89f5f78ff9e43e275e66", + "OSMOTIC_STRESS_T100_SE_REP2.mLb.clN_peaks.count_mqc.tsv:md5,1b0c0f2fef3c077a67d473f3e09700de", + "OSMOTIC_STRESS_T150_SE_REP1.mLb.clN_peaks.FRiP_mqc.tsv:md5,d37cbde47fd8224923be52679f5d6b8f", "OSMOTIC_STRESS_T150_SE_REP1.mLb.clN_peaks.count_mqc.tsv:md5,d0bf563208c13870fc2b0107063ba879", - "OSMOTIC_STRESS_T15_PE_REP1.mLb.clN_peaks.FRiP_mqc.tsv:md5,a36753550e07fa88497c773cbe906b12", - "OSMOTIC_STRESS_T15_PE_REP1.mLb.clN_peaks.count_mqc.tsv:md5,a9cd3bbd45b9d0699289ea7d17b4ceb8", - "macs3_annotatePeaks.mLb.clN.summary.txt:md5,d46466e2a03007ea07cdb72898a6fc9f", - "macs3_annotatePeaks.mLb.clN.summary_mqc.tsv:md5,c077a52f6ba1578716ced3056ca853bc", + "OSMOTIC_STRESS_T15_PE_REP1.mLb.clN_peaks.FRiP_mqc.tsv:md5,cfe751946da554b4f51518a931d990af", + "OSMOTIC_STRESS_T15_PE_REP1.mLb.clN_peaks.count_mqc.tsv:md5,a293054721f310bb511bae69d4d541d0", + "macs3_annotatePeaks.mLb.clN.summary.txt:md5,b695a9f109656582187b7db01b176b2f", + "macs3_annotatePeaks.mLb.clN.summary_mqc.tsv:md5,133040831ed7c47490fb9bfc38aa34cb", "OSMOTIC_STRESS_T0_PE_REP1.mLb.clN.sorted.bam.flagstat:md5,a36a8c1bf7dbdbf8807858d5578a0612", "OSMOTIC_STRESS_T0_PE_REP1.mLb.clN.sorted.bam.idxstats:md5,bdaa4c2a2264ba3f3ad166d91ce176ef", "OSMOTIC_STRESS_T0_PE_REP1.mLb.mkD.sorted.bam.flagstat:md5,90be54f065cb6ccc358ccb69c56656de", "OSMOTIC_STRESS_T0_PE_REP1.mLb.mkD.sorted.bam.idxstats:md5,44282809be0f563ce40775806e46a424", - "OSMOTIC_STRESS_T0_PE_REP2.mLb.clN.sorted.bam.flagstat:md5,c661090a3b16a1bd8266d2944e5275aa", - "OSMOTIC_STRESS_T0_PE_REP2.mLb.clN.sorted.bam.idxstats:md5,2311c10365c6d32686687c45364a4c68", - "OSMOTIC_STRESS_T0_PE_REP2.mLb.mkD.sorted.bam.flagstat:md5,05d63c2a96930d95903ba473715471ab", - "OSMOTIC_STRESS_T0_PE_REP2.mLb.mkD.sorted.bam.idxstats:md5,8a1ccd0919ab4bc46900bc2d3766545d", + "OSMOTIC_STRESS_T0_PE_REP2.mLb.clN.sorted.bam.flagstat:md5,faf057f77c4462e02cdfe6cba4f4ddec", + "OSMOTIC_STRESS_T0_PE_REP2.mLb.clN.sorted.bam.idxstats:md5,5d13ecb3ec023772dd9c5d5e3a7b3bd6", + "OSMOTIC_STRESS_T0_PE_REP2.mLb.mkD.sorted.bam.flagstat:md5,7f0346772ba46532a687aba740594e26", + "OSMOTIC_STRESS_T0_PE_REP2.mLb.mkD.sorted.bam.idxstats:md5,03cc0e84f9e3cb85114473fc32605076", "OSMOTIC_STRESS_T100_SE_REP1.mLb.clN.sorted.bam.flagstat:md5,e3fc34b1832878b61561bb5c6a46cb23", "OSMOTIC_STRESS_T100_SE_REP1.mLb.clN.sorted.bam.idxstats:md5,36f417ecb760406071742737bd07cc9b", "OSMOTIC_STRESS_T100_SE_REP1.mLb.mkD.sorted.bam.flagstat:md5,2d8c72f8a3c722c70cb0c10b8aa9dc74", "OSMOTIC_STRESS_T100_SE_REP1.mLb.mkD.sorted.bam.idxstats:md5,62266fef4d33ff44ad1b40589974ece3", - "OSMOTIC_STRESS_T100_SE_REP2.mLb.clN.sorted.bam.flagstat:md5,f3717f20b0a147335489af5e491a465e", - "OSMOTIC_STRESS_T100_SE_REP2.mLb.clN.sorted.bam.idxstats:md5,789966115fa1a61465325dd032d8d6bb", - "OSMOTIC_STRESS_T100_SE_REP2.mLb.mkD.sorted.bam.flagstat:md5,7bf27dfca2de687108b3422d07bced38", - "OSMOTIC_STRESS_T100_SE_REP2.mLb.mkD.sorted.bam.idxstats:md5,30ccd67075e44547cfeed66775cc06e0", - "OSMOTIC_STRESS_T150_SE_REP1.mLb.clN.sorted.bam.flagstat:md5,b78928acedd953b463f2fafbaddd2db2", - "OSMOTIC_STRESS_T150_SE_REP1.mLb.clN.sorted.bam.idxstats:md5,9214dcd7af45625536c802e8a0fcbd8d", - "OSMOTIC_STRESS_T150_SE_REP1.mLb.mkD.sorted.bam.flagstat:md5,e3ffc456e11644eeb263635b5de06c60", - "OSMOTIC_STRESS_T150_SE_REP1.mLb.mkD.sorted.bam.idxstats:md5,68ffb74938104b83fed53eeaf944257a", - "OSMOTIC_STRESS_T15_PE_REP1.mLb.clN.sorted.bam.flagstat:md5,8576b7091d4dcc02813958d9480c5343", - "OSMOTIC_STRESS_T15_PE_REP1.mLb.clN.sorted.bam.idxstats:md5,e01b20f6830a87d270e2b0669c545839", - "OSMOTIC_STRESS_T15_PE_REP1.mLb.mkD.sorted.bam.flagstat:md5,a0bfcc840028961bdbfade2171d7b3af", - "OSMOTIC_STRESS_T15_PE_REP1.mLb.mkD.sorted.bam.idxstats:md5,d1a9ffc601796bc331b706da39f84c3b", - "OSMOTIC_STRESS_T0_PE.mRp.clN.scale_factor.txt:md5,4ae52326ea6d9c88981794990d160d7a", - "OSMOTIC_STRESS_T100_SE.mRp.clN.scale_factor.txt:md5,3949285f45e86c07a28376a6e9cf82db", - "OSMOTIC_STRESS_T0_PE.mRp.clN_peaks.broadPeak:md5,83b6b10167ebd2c62178baedfaa2bac7", - "OSMOTIC_STRESS_T0_PE.mRp.clN_peaks.gappedPeak:md5,4d8d3899e01feaa535f40b731106376a", - "OSMOTIC_STRESS_T0_PE.mRp.clN_peaks.xls:md5,eb10956577cc7de4c52461e385752da0", - "OSMOTIC_STRESS_T100_SE.mRp.clN_peaks.broadPeak:md5,6bd7edef426ea7ecea92cb6d8e4dbb5b", - "OSMOTIC_STRESS_T100_SE.mRp.clN_peaks.gappedPeak:md5,c48b4fe741c360ec5a37a586237b4b99", - "OSMOTIC_STRESS_T100_SE.mRp.clN_peaks.xls:md5,6196d4630c50da3ad51c2dcd51bdb5cf", - "consensus_peaks.mRp.clN.bed:md5,a78537a7090fab8981e4d6090d15aebe", - "consensus_peaks.mRp.clN.boolean.intersect.txt:md5,89344ae317e6c1e28c863527dad5e198", - "consensus_peaks.mRp.clN.boolean.txt:md5,4b338bf5bcffe441aa04b923558a0472", - "consensus_peaks.mRp.clN.saf:md5,4845f51306cf1497609bc1a61a289dea", + "OSMOTIC_STRESS_T100_SE_REP2.mLb.clN.sorted.bam.flagstat:md5,7c76c8f4e7cc207efd7d616f3f287ca1", + "OSMOTIC_STRESS_T100_SE_REP2.mLb.clN.sorted.bam.idxstats:md5,f3e617c458fb1390759dc18abe693e60", + "OSMOTIC_STRESS_T100_SE_REP2.mLb.mkD.sorted.bam.flagstat:md5,76674907f4cf5dd3e2fda0802c3e8eec", + "OSMOTIC_STRESS_T100_SE_REP2.mLb.mkD.sorted.bam.idxstats:md5,d0364691f61688e2b6cef0b1f28605a8", + "OSMOTIC_STRESS_T150_SE_REP1.mLb.clN.sorted.bam.flagstat:md5,51603ca6d91847e76f1bb397c8939501", + "OSMOTIC_STRESS_T150_SE_REP1.mLb.clN.sorted.bam.idxstats:md5,3eefc8594c35d6a521d748aa68a06159", + "OSMOTIC_STRESS_T150_SE_REP1.mLb.mkD.sorted.bam.flagstat:md5,102c8a7d777971bca5d740d510131926", + "OSMOTIC_STRESS_T150_SE_REP1.mLb.mkD.sorted.bam.idxstats:md5,895ed98fe85013ee878aa22dbc2ce385", + "OSMOTIC_STRESS_T15_PE_REP1.mLb.clN.sorted.bam.flagstat:md5,392118e7c3deb0cd108d146f660392e0", + "OSMOTIC_STRESS_T15_PE_REP1.mLb.clN.sorted.bam.idxstats:md5,73c076dbdf8d523529412dc0a08bac03", + "OSMOTIC_STRESS_T15_PE_REP1.mLb.mkD.sorted.bam.flagstat:md5,7f245915cacdc9253ca89b83b76181a2", + "OSMOTIC_STRESS_T15_PE_REP1.mLb.mkD.sorted.bam.idxstats:md5,91dc7ae22676a472506f41b3a77d8cda", + "OSMOTIC_STRESS_T0_PE.mRp.clN.scale_factor.txt:md5,63a6d38b1880deb834410ba489a290dc", + "OSMOTIC_STRESS_T100_SE.mRp.clN.scale_factor.txt:md5,15269ddf149c62c9aa22a75a774f1a55", + "OSMOTIC_STRESS_T0_PE.mRp.clN_peaks.broadPeak:md5,252f711057f3c782105e5511f6422d97", + "OSMOTIC_STRESS_T0_PE.mRp.clN_peaks.gappedPeak:md5,16f1c00483106202f7922115a37bafd4", + "OSMOTIC_STRESS_T0_PE.mRp.clN_peaks.xls:md5,640076e941c4b71ffe9d9c3dedccd81e", + "OSMOTIC_STRESS_T100_SE.mRp.clN_peaks.broadPeak:md5,2dc1c575b4dc03e20fd2680cc9b04b88", + "OSMOTIC_STRESS_T100_SE.mRp.clN_peaks.gappedPeak:md5,e05c7ef694608aa2d63e0f2057270d2e", + "OSMOTIC_STRESS_T100_SE.mRp.clN_peaks.xls:md5,db177400e0402a3bad2657d171ef47ff", + "consensus_peaks.mRp.clN.PE.featureCounts.tsv:md5,bc73e4580e576de297bd0d781d65d385", + "consensus_peaks.mRp.clN.PE.featureCounts.tsv.summary:md5,33186392a994cd50779ef23282cefd48", + "consensus_peaks.mRp.clN.SE.featureCounts.tsv:md5,4d6cc53c886843a52272fbd247864b67", + "consensus_peaks.mRp.clN.SE.featureCounts.tsv.summary:md5,c250438f7dd08e4d99b0da0e56603f22", + "consensus_peaks.mRp.clN.bed:md5,b29a19860b56b6d33cddf37d99a23891", + "consensus_peaks.mRp.clN.boolean.intersect.txt:md5,a594441b7196b3e84c9b834e9566931d", + "consensus_peaks.mRp.clN.boolean.txt:md5,e655d0af796a8d2599b3492be2d2454f", + "consensus_peaks.mRp.clN.featureCounts.tsv:md5,8ef4c37114bf4358485fb3261f9471ee", + "consensus_peaks.mRp.clN.saf:md5,76c841ae13edf75ba7f5b0fd306ed142", "R_sessionInfo.log:md5,fb0da0d7ad6994ed66a8e68348b19676", - "OSMOTIC_STRESS_T0_PE_REP1.size_factors.txt:md5,29d08d9150fee1b39574149813b214d9", - "OSMOTIC_STRESS_T0_PE_REP2.size_factors.txt:md5,6e1dd2c9fee4e2eb68e8ecf7ca2d5346", - "OSMOTIC_STRESS_T100_SE_REP1.size_factors.txt:md5,74899652a36d8fa5904f4162c5be88ac", - "OSMOTIC_STRESS_T100_SE_REP2.size_factors.txt:md5,b7866b3eecbaef33e997148d5da83644", - "OSMOTIC_STRESS_T0_PE.mRp.clN_peaks.FRiP_mqc.tsv:md5,1b7f58e64f3f7acafecdf885fa42b432", - "OSMOTIC_STRESS_T0_PE.mRp.clN_peaks.count_mqc.tsv:md5,fcf12be4d7c8cd044f8ebeaf36992d92", - "OSMOTIC_STRESS_T100_SE.mRp.clN_peaks.FRiP_mqc.tsv:md5,cba5bf9706da1fab1835f8cfc7db2835", - "OSMOTIC_STRESS_T100_SE.mRp.clN_peaks.count_mqc.tsv:md5,38c01dcf4843f83c55cdd17caa461c74", - "macs3_annotatePeaks.mRp.clN.summary.txt:md5,2be9d8b64f5b30cc2b533306e8abc167", - "macs3_annotatePeaks.mRp.clN.summary_mqc.tsv:md5,a962cee655d6ebdfa3c16f34363a35b0", - "OSMOTIC_STRESS_T0_PE.mRp.clN.sorted.bam.flagstat:md5,d340f1bcbbff2b04bfc55ef0852b770e", - "OSMOTIC_STRESS_T0_PE.mRp.clN.sorted.bam.idxstats:md5,cfcb9972dc21c1354a43ef90d86dc0a7", - "OSMOTIC_STRESS_T100_SE.mRp.clN.sorted.bam.flagstat:md5,65caad221a0d196cb4856def965b0a4d", - "OSMOTIC_STRESS_T100_SE.mRp.clN.sorted.bam.idxstats:md5,fb8d44a124a8afc03cea5a360c441b1e", + "OSMOTIC_STRESS_T0_PE_REP1.size_factors.txt:md5,d3cdccb44fe679c927462eab6cea4bed", + "OSMOTIC_STRESS_T0_PE_REP2.size_factors.txt:md5,da67dfd1313c269a761784aae95a2c97", + "OSMOTIC_STRESS_T100_SE_REP1.size_factors.txt:md5,5b0298e41f8999813c16e7900ad06502", + "OSMOTIC_STRESS_T100_SE_REP2.size_factors.txt:md5,192f549b26d3c6d5e2789b1d0282c035", + "OSMOTIC_STRESS_T0_PE.mRp.clN_peaks.FRiP_mqc.tsv:md5,862582629bf4b2d0b604a1b55b00b8fc", + "OSMOTIC_STRESS_T0_PE.mRp.clN_peaks.count_mqc.tsv:md5,ca9b57ac3e220d160e872720c4104743", + "OSMOTIC_STRESS_T100_SE.mRp.clN_peaks.FRiP_mqc.tsv:md5,6739406cd76451c426cd082c9ab42481", + "OSMOTIC_STRESS_T100_SE.mRp.clN_peaks.count_mqc.tsv:md5,be0f2b534a3f40cb5f33c4094ac11243", + "macs3_annotatePeaks.mRp.clN.summary.txt:md5,6ed4acc31e584f5976e020adb0c2c8f8", + "macs3_annotatePeaks.mRp.clN.summary_mqc.tsv:md5,0c7441ea33d970ec39db6410db33641f", + "OSMOTIC_STRESS_T0_PE.mRp.clN.sorted.bam.flagstat:md5,44795ed8fe210ebfdde5a16690dcabd2", + "OSMOTIC_STRESS_T0_PE.mRp.clN.sorted.bam.idxstats:md5,656c6de519c345a2e517ea7cf8ef82ce", + "OSMOTIC_STRESS_T100_SE.mRp.clN.sorted.bam.flagstat:md5,27be28a3a20502b2e535adba7d2519c8", + "OSMOTIC_STRESS_T100_SE.mRp.clN.sorted.bam.idxstats:md5,f8d5bd0d5ae20ea09384ddd9d9f6875f", "genome.fa:md5,4bad9f4b18056156a81f7f952abbe125", "genome.fa.fai:md5,6f4c0ce5258e6948135ad006e1f9ee1b", "deeptools_plot_fingerprint_counts_mlib_deeptools.txt:md5,7bc385cf49df27f4ff287e75ed4223d2", @@ -1031,54 +1068,54 @@ "mqc_cutadapt_filtered_reads_plot_1.txt:md5,b78f69173122f2cacf8121eaeb815382", "mqc_cutadapt_trimmed_sequences_plot_3_Counts.txt:md5,157073209c492b89badba367b1c57d83", "mqc_cutadapt_trimmed_sequences_plot_3_Obs_Exp.txt:md5,b04ae8b2ec27d71817ae7cb666888b9b", - "mqc_deeptools_fingerprint_plot_1.txt:md5,e471b58fc0050c2a64bf32b77a9bd3cb", - "mqc_fastqc_adapter_content_plot-2_1.txt:md5,7050d22f2eabdafb3d1eb81e736599af", + "mqc_deeptools_fingerprint_plot_1.txt:md5,eb5bbc83c5602c300899c419a2e71a76", + "mqc_fastqc_adapter_content_plot-2_1.txt:md5,3560a22f94aea25e27d97e056fb478ed", "mqc_fastqc_adapter_content_plot_1.txt:md5,66f3e2f6ba14599b0d6c20144df60777", - "mqc_fastqc_per_base_n_content_plot-2_1.txt:md5,7c5db7fad8afe578076466416e17bbd0", + "mqc_fastqc_per_base_n_content_plot-2_1.txt:md5,d79e95d36d955edee3e4bfb139dce967", "mqc_fastqc_per_base_n_content_plot_1.txt:md5,8d9cdd0463193b7e10332e2ca0273aca", - "mqc_fastqc_per_base_sequence_quality_plot-2_1.txt:md5,3f7c1c4998d41f10fcc48f15fc1c214f", + "mqc_fastqc_per_base_sequence_quality_plot-2_1.txt:md5,3bb6cad69480846e4003b9f0f3511caa", "mqc_fastqc_per_base_sequence_quality_plot_1.txt:md5,821cb87b0ae8bd61cd445d153b8f371a", - "mqc_fastqc_per_sequence_gc_content_plot-2_Counts.txt:md5,076f8f06afb71ddf1de87480c0a937ab", - "mqc_fastqc_per_sequence_gc_content_plot-2_Percentages.txt:md5,4f0d049c48c4cde730fdc2ee37130658", + "mqc_fastqc_per_sequence_gc_content_plot-2_Counts.txt:md5,88fb0e924094b5dd57f4003ac13fd1f4", + "mqc_fastqc_per_sequence_gc_content_plot-2_Percentages.txt:md5,a4b37bca5e61bf595c4532ffbc8b8f93", "mqc_fastqc_per_sequence_gc_content_plot_Counts.txt:md5,3fa7f0c0858d12cae8700e21774da86d", "mqc_fastqc_per_sequence_gc_content_plot_Percentages.txt:md5,a2d0c3ec413894e4dafa62ebdf44a06c", - "mqc_fastqc_per_sequence_quality_scores_plot-2_1.txt:md5,3dde643427f3229f283527966d7dd32e", + "mqc_fastqc_per_sequence_quality_scores_plot-2_1.txt:md5,841ccc3da246bd197fc966e9f8c5ca57", "mqc_fastqc_per_sequence_quality_scores_plot_1.txt:md5,3bfe1c94f710975829e2c1e3b5f16ea7", - "mqc_fastqc_sequence_counts_plot-2_1.txt:md5,83670beba48f5d0a1ff4bb038628f49e", + "mqc_fastqc_sequence_counts_plot-2_1.txt:md5,c734a06e1f3e3afc1486a0b45be880e1", "mqc_fastqc_sequence_counts_plot_1.txt:md5,d0cf8d64e742b5f446e6b602d86913b9", - "mqc_fastqc_sequence_duplication_levels_plot-2_1.txt:md5,907ad5b8fb27d2d9fd19281c8fa77e65", + "mqc_fastqc_sequence_duplication_levels_plot-2_1.txt:md5,d7ada8561d521eaf645073f7cccf7b82", "mqc_fastqc_sequence_duplication_levels_plot_1.txt:md5,23c4883ed6c22212b0c3e07a863745d1", - "mqc_fastqc_sequence_length_distribution_plot_1.txt:md5,46650932914f76713075e12934d6fcfe", - "mqc_featureCounts_assignment_plot-2_1.txt:md5,8b39250a1171c6c6bb78a4305b90fec4", - "mqc_featureCounts_assignment_plot_1.txt:md5,9a5acc803f46c321d63a24f00a847f73", - "mqc_samtools-idxstats-mapped-reads-plot-2_Normalised_Counts.txt:md5,da2027ac0f5b3d5c8f09d143e33d5b7e", - "mqc_samtools-idxstats-mapped-reads-plot-2_Observed_over_Expected_Counts.txt:md5,df5f2b22f6cfd3f283a85ca992681e01", - "mqc_samtools-idxstats-mapped-reads-plot-2_Raw_Counts.txt:md5,08a2bd1f3f0a49f45c28727cc1ddb2e5", - "mqc_samtools-idxstats-mapped-reads-plot-3_Normalised_Counts.txt:md5,65d1d255cd23f7411a08b16835c80ade", - "mqc_samtools-idxstats-mapped-reads-plot-3_Observed_over_Expected_Counts.txt:md5,0a510f24402ef3b6ab449fc469b59ae0", - "mqc_samtools-idxstats-mapped-reads-plot-3_Raw_Counts.txt:md5,4686908e3531dba3adc60f15b24b4b99", - "mqc_samtools-idxstats-mapped-reads-plot-4_Normalised_Counts.txt:md5,eefdf30e98f2736e68be8477a5e7ca7d", - "mqc_samtools-idxstats-mapped-reads-plot-4_Observed_over_Expected_Counts.txt:md5,7b6fbe6d5f4b3d2dbea22cd397fedd02", - "mqc_samtools-idxstats-mapped-reads-plot-4_Raw_Counts.txt:md5,e9a30daf040c75789a80e4306dd6cb66", - "mqc_samtools-idxstats-mapped-reads-plot_Normalised_Counts.txt:md5,8539a53fd282c421b994207368622130", - "mqc_samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts.txt:md5,7076568a893a368fbe98af0fce27221c", - "mqc_samtools-idxstats-mapped-reads-plot_Raw_Counts.txt:md5,378f609b89709eee4bafafcd46369cb9", - "mqc_samtools_alignment_plot-2_1.txt:md5,3fa20d0fa77a67c280822141b07498fe", - "mqc_samtools_alignment_plot-3_1.txt:md5,eacc60f65d347d664b383a9d26abfff7", - "mqc_samtools_alignment_plot-4_1.txt:md5,c6d391361e11f4b20f0aa8c33fb76ac7", - "mqc_samtools_alignment_plot_1.txt:md5,0180669a82ff5e2b3403dd80dfdfb753", + "mqc_fastqc_sequence_length_distribution_plot_1.txt:md5,bc3acb40acbf620b237d0f2fa8c8a1ab", + "mqc_featureCounts_assignment_plot-2_1.txt:md5,804903576a262efcb22f16c045f862f8", + "mqc_featureCounts_assignment_plot_1.txt:md5,61d23a02f32261f26306bf28feee3b83", + "mqc_samtools-idxstats-mapped-reads-plot-2_Normalised_Counts.txt:md5,9276bae8c9042ef2a1e4a7b7a8c2f231", + "mqc_samtools-idxstats-mapped-reads-plot-2_Observed_over_Expected_Counts.txt:md5,a33a1311653dc054f0056792705689e0", + "mqc_samtools-idxstats-mapped-reads-plot-2_Raw_Counts.txt:md5,4a615bbabd9fa9ff406274a2ccee4c06", + "mqc_samtools-idxstats-mapped-reads-plot-3_Normalised_Counts.txt:md5,3df55334fea3eba5e1c635df6f066551", + "mqc_samtools-idxstats-mapped-reads-plot-3_Observed_over_Expected_Counts.txt:md5,bd70bdcb1cc7d51a262612653e49c440", + "mqc_samtools-idxstats-mapped-reads-plot-3_Raw_Counts.txt:md5,da21fd52db4b66a25b31dc1352bb49d9", + "mqc_samtools-idxstats-mapped-reads-plot-4_Normalised_Counts.txt:md5,165bb5085b09efc73f817bd82981484d", + "mqc_samtools-idxstats-mapped-reads-plot-4_Observed_over_Expected_Counts.txt:md5,a45c3970069d4a5966f1491bb50d9123", + "mqc_samtools-idxstats-mapped-reads-plot-4_Raw_Counts.txt:md5,082f7ad53081c5a93690c73e8e4e35c3", + "mqc_samtools-idxstats-mapped-reads-plot_Normalised_Counts.txt:md5,3fb1fdf70cf1ee3bed5aa8e81cce138e", + "mqc_samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts.txt:md5,a6543459060e08acd7d4789e8a61ae19", + "mqc_samtools-idxstats-mapped-reads-plot_Raw_Counts.txt:md5,00e38ea9b252b3051396e7b915bb6669", + "mqc_samtools_alignment_plot-2_1.txt:md5,787c34f92b66c4495dd87e209a7ffada", + "mqc_samtools_alignment_plot-3_1.txt:md5,8a6a2e8ed5d0e1f43384bbdeb7220ea1", + "mqc_samtools_alignment_plot-4_1.txt:md5,0603c3a513fe04133c5f6bd41d84578e", + "mqc_samtools_alignment_plot_1.txt:md5,97a71616918d50f20e439bdda2aa9cec", "multiqc_citations.txt:md5,34da9f7497d275274f6dfd3b89831edb", - "multiqc_cutadapt.txt:md5,19916e059f11fa2c038c97bbb0ea190b", + "multiqc_cutadapt.txt:md5,926fcf7c5a9c5dc0a105a439c85a5f58", "multiqc_fastqc.txt:md5,a9a7484add8120fc3cf3d5626a92973b", - "multiqc_fastqc_1.txt:md5,6f694cea56d88eb91b4c9610f7a12ca5", - "multiqc_featureCounts_mlib_featurecounts.txt:md5,116462ab13ea41766a59cd7dfdc31c4c", - "multiqc_featureCounts_mrep_featurecounts.txt:md5,9102f58e2ad6319aef5ffea782d55d54", - "multiqc_mlib_frip_score-plot.txt:md5,1d2cdadd30b920bad9251c22da1c082c", - "multiqc_mlib_peak_annotation-plot.txt:md5,9a1225e481d16106e275694e90452292", - "multiqc_mlib_peak_count-plot.txt:md5,0a210bb812578cb1b30128fb3314fb0f", - "multiqc_mrep_frip_score-plot.txt:md5,c09b4e1d962ef9b3147f2164a1b32a65", - "multiqc_mrep_peak_annotation-plot.txt:md5,26bb9e3b0e3ac7444ec313aea9a9453b", - "multiqc_mrep_peak_count-plot.txt:md5,7a88fc56da309a0f9054af588f1043d2", + "multiqc_fastqc_1.txt:md5,58ab2bbd2d19745e5975742c6d1335d7", + "multiqc_featureCounts_mlib_featurecounts.txt:md5,9b2af7182264eec8f130a91d3ad47021", + "multiqc_featureCounts_mrep_featurecounts.txt:md5,4041b4e04860c1d66d9157cb62d84941", + "multiqc_mlib_frip_score-plot.txt:md5,15e8e48bb609bcd103b3df769d6116e7", + "multiqc_mlib_peak_annotation-plot.txt:md5,5cf8a13eb9f4ad773e7281cb64f29859", + "multiqc_mlib_peak_count-plot.txt:md5,9451e9c6f55bb70114f04646c89e438f", + "multiqc_mrep_frip_score-plot.txt:md5,42185bd6a72d2990d39520c29f0f1711", + "multiqc_mrep_peak_annotation-plot.txt:md5,f036fbc63ba4500feb72cd0ffee3a2fa", + "multiqc_mrep_peak_count-plot.txt:md5,be2301d29256b03f159053e1b9f7775d", "picard_histogram.txt:md5,c9aa8a5ac6841ffb3a6cc2de45b44797", "picard_histogram_1.txt:md5,c9aa8a5ac6841ffb3a6cc2de45b44797", "picard_histogram_2.txt:md5,c9aa8a5ac6841ffb3a6cc2de45b44797", @@ -1091,20 +1128,20 @@ "samplesheet.valid.csv:md5,51b046b55592e95949824f21b12c7e49" ] ], + "timestamp": "2026-07-26T03:35:21.884005804", "meta": { - "nf-test": "0.9.3", - "nextflow": "26.04.1" - }, - "timestamp": "2026-05-20T12:13:16.145049713" + "nf-test": "0.9.4", + "nextflow": "25.10.4" + } }, "bowtie2 with stub": { "content": [ 26 ], + "timestamp": "2026-03-20T22:48:53.767667318", "meta": { "nf-test": "0.9.3", "nextflow": "25.04.7" - }, - "timestamp": "2026-03-20T22:48:53.767667318" + } } } \ No newline at end of file diff --git a/tests/chromap.nf.test b/tests/chromap.nf.test index 959dbd26..59d71acc 100644 --- a/tests/chromap.nf.test +++ b/tests/chromap.nf.test @@ -10,6 +10,10 @@ nextflow_pipeline { params { outdir = "$outputDir" aligner = "chromap" + // Deliberately contains whitespace: seq_center is free text and reaches + // Picard AddOrReplaceReadGroups as --RGCN. Unquoted, Picard reads only the + // first word and rejects the rest as a positional argument. + seq_center = "Broad Institute" } } diff --git a/tests/chromap.nf.test.snap b/tests/chromap.nf.test.snap index d4cd45ef..33b1fbaa 100644 --- a/tests/chromap.nf.test.snap +++ b/tests/chromap.nf.test.snap @@ -1,54 +1,72 @@ { "chromap": { "content": [ - 264, + 276, { "BAMTOOLS_FILTER": { - "samtools": "1.15.1", - "bamtools": "2.5.2" + "bamtools": "2.5.2", + "samtools": "1.15.1" }, "BAM_REMOVE_ORPHANS": { "samtools": "1.15.1" }, "BEDTOOLS_GENOMECOV": { "bedtools": "2.31.1", - "sort": 9.5 + "sort": "sort (GNU coreutils) 9.5" }, "CHROMAP_CHROMAP": { - "chromap": "0.2.4-r467", - "samtools": "1.16.1" + "chromap": "0.3.2-r518", + "samtools": "1.23.1" + }, + "CHROMAP_INDEX": { + "chromap": "0.3.2-r518" }, "DEEPTOOLS_COMPUTEMATRIX_REFERENCE_POINT": { - "deeptools": "3.5.5" + "deeptools": "3.5.6" }, "DEEPTOOLS_COMPUTEMATRIX_SCALE_REGIONS": { - "deeptools": "3.5.5" + "deeptools": "3.5.6" }, "DEEPTOOLS_PLOTHEATMAP": { - "deeptools": "3.5.5" + "deeptools": "3.5.6" }, "DEEPTOOLS_PLOTPROFILE": { - "deeptools": "3.5.5" + "deeptools": "3.5.6" }, "DESEQ2_QC": { - "r-base": "4.0.3", - "bioconductor-deseq2": "1.28.0" + "bioconductor-deseq2": "1.28.0", + "r-base": "4.0.3" }, "FASTQC": { "fastqc": "0.12.1" }, + "FEATURECOUNTS_MERGE": { + "sed": 4.7 + }, "FRIP_SCORE": { "bedtools": "2.30.0", "samtools": "1.15.1" }, + "GENOME_BLACKLIST_REGIONS": { + "bedtools": "2.30.0" + }, + "GET_AUTOSOMES": { + "python": "3.8.3" + }, + "GTF2BED": { + "perl": "5.26.2" + }, "HOMER_ANNOTATEPEAKS": { "homer": 4.11 }, "IGV": { "python": "3.8.3" }, + "KHMER_UNIQUEKMERS": { + "khmer": "3.0.0a3" + }, "MACS3_CALLPEAK": { - "macs3": "3.0.1" + "macs3": "3.0.4" }, "MACS3_CONSENSUS": { "python": "3.10.0", @@ -61,16 +79,19 @@ "ataqv": "1.3.1" }, "MERGED_LIBRARY_DEEPTOOLS_PLOTFINGERPRINT": { - "deeptools": "3.5.5" + "deeptools": "3.5.6" }, "MERGED_LIBRARY_PICARD_COLLECTMULTIPLEMETRICS": { - "picard": "3.0.0" + "picard": "3.4.0" }, "MULTIQC_CUSTOM_PEAKS": { "sed": 4.7 }, + "PICARD_ADDORREPLACEREADGROUPS": { + "picard": "3.4.0" + }, "PICARD_MARKDUPLICATES": { - "picard": "3.1.1" + "picard": "3.4.0" }, "PICARD_MERGESAMFILES_LIBRARY": { "picard": "3.4.0" @@ -87,32 +108,35 @@ "SAMPLESHEET_CHECK": { "python": "3.8.3" }, + "SAMTOOLS_FAIDX": { + "samtools": "1.23.1" + }, "SAMTOOLS_FLAGSTAT": { - "samtools": "1.19.2" + "samtools": 1.24 }, "SAMTOOLS_IDXSTATS": { - "samtools": "1.19.2" + "samtools": 1.24 }, "SAMTOOLS_INDEX": { - "samtools": "1.19.2" + "samtools": 1.24 }, "SAMTOOLS_SORT": { - "samtools": "1.19.2" + "samtools": 1.24 }, "SAMTOOLS_STATS": { - "samtools": "1.19.2" + "samtools": 1.24 }, "SUBREAD_FEATURECOUNTS": { - "subread": "2.0.1" + "subread": "2.1.1" }, "TRIMGALORE": { - "trimgalore": "0.6.10" + "trimgalore": "2.1.0" }, - "UCSC_BEDGRAPHTOBIGWIG": { - "ucsc": 445 + "TSS_EXTRACT": { + "sed": 4.7 }, - "Workflow": { - "nf-core/atacseq": "v2.2.0dev" + "UCSC_BEDGRAPHTOBIGWIG": { + "ucsc": 482 } }, [ @@ -281,13 +305,16 @@ "chromap/merged_library/macs3/broad_peak/OSMOTIC_STRESS_T15_PE_REP1.mLb.clN_peaks.gappedPeak", "chromap/merged_library/macs3/broad_peak/OSMOTIC_STRESS_T15_PE_REP1.mLb.clN_peaks.xls", "chromap/merged_library/macs3/broad_peak/consensus", + "chromap/merged_library/macs3/broad_peak/consensus/consensus_peaks.mLb.clN.PE.featureCounts.tsv", + "chromap/merged_library/macs3/broad_peak/consensus/consensus_peaks.mLb.clN.PE.featureCounts.tsv.summary", + "chromap/merged_library/macs3/broad_peak/consensus/consensus_peaks.mLb.clN.SE.featureCounts.tsv", + "chromap/merged_library/macs3/broad_peak/consensus/consensus_peaks.mLb.clN.SE.featureCounts.tsv.summary", "chromap/merged_library/macs3/broad_peak/consensus/consensus_peaks.mLb.clN.annotatePeaks.txt", "chromap/merged_library/macs3/broad_peak/consensus/consensus_peaks.mLb.clN.bed", "chromap/merged_library/macs3/broad_peak/consensus/consensus_peaks.mLb.clN.boolean.intersect.plot.pdf", "chromap/merged_library/macs3/broad_peak/consensus/consensus_peaks.mLb.clN.boolean.intersect.txt", "chromap/merged_library/macs3/broad_peak/consensus/consensus_peaks.mLb.clN.boolean.txt", - "chromap/merged_library/macs3/broad_peak/consensus/consensus_peaks.mLb.clN.featureCounts.txt", - "chromap/merged_library/macs3/broad_peak/consensus/consensus_peaks.mLb.clN.featureCounts.txt.summary", + "chromap/merged_library/macs3/broad_peak/consensus/consensus_peaks.mLb.clN.featureCounts.tsv", "chromap/merged_library/macs3/broad_peak/consensus/consensus_peaks.mLb.clN.saf", "chromap/merged_library/macs3/broad_peak/consensus/deseq2", "chromap/merged_library/macs3/broad_peak/consensus/deseq2/R_sessionInfo.log", @@ -330,34 +357,34 @@ "chromap/merged_library/picard_metrics/OSMOTIC_STRESS_T0_PE_REP1.mLb.clN.CollectMultipleMetrics.insert_size_metrics", "chromap/merged_library/picard_metrics/OSMOTIC_STRESS_T0_PE_REP1.mLb.clN.CollectMultipleMetrics.quality_by_cycle_metrics", "chromap/merged_library/picard_metrics/OSMOTIC_STRESS_T0_PE_REP1.mLb.clN.CollectMultipleMetrics.quality_distribution_metrics", - "chromap/merged_library/picard_metrics/OSMOTIC_STRESS_T0_PE_REP1.mLb.mkD.sorted.MarkDuplicates.metrics.txt", + "chromap/merged_library/picard_metrics/OSMOTIC_STRESS_T0_PE_REP1.mLb.mkD.sorted.metrics.txt", "chromap/merged_library/picard_metrics/OSMOTIC_STRESS_T0_PE_REP2.mLb.clN.CollectMultipleMetrics.alignment_summary_metrics", "chromap/merged_library/picard_metrics/OSMOTIC_STRESS_T0_PE_REP2.mLb.clN.CollectMultipleMetrics.base_distribution_by_cycle_metrics", "chromap/merged_library/picard_metrics/OSMOTIC_STRESS_T0_PE_REP2.mLb.clN.CollectMultipleMetrics.insert_size_metrics", "chromap/merged_library/picard_metrics/OSMOTIC_STRESS_T0_PE_REP2.mLb.clN.CollectMultipleMetrics.quality_by_cycle_metrics", "chromap/merged_library/picard_metrics/OSMOTIC_STRESS_T0_PE_REP2.mLb.clN.CollectMultipleMetrics.quality_distribution_metrics", - "chromap/merged_library/picard_metrics/OSMOTIC_STRESS_T0_PE_REP2.mLb.mkD.sorted.MarkDuplicates.metrics.txt", + "chromap/merged_library/picard_metrics/OSMOTIC_STRESS_T0_PE_REP2.mLb.mkD.sorted.metrics.txt", "chromap/merged_library/picard_metrics/OSMOTIC_STRESS_T100_SE_REP1.mLb.clN.CollectMultipleMetrics.alignment_summary_metrics", "chromap/merged_library/picard_metrics/OSMOTIC_STRESS_T100_SE_REP1.mLb.clN.CollectMultipleMetrics.base_distribution_by_cycle_metrics", "chromap/merged_library/picard_metrics/OSMOTIC_STRESS_T100_SE_REP1.mLb.clN.CollectMultipleMetrics.quality_by_cycle_metrics", "chromap/merged_library/picard_metrics/OSMOTIC_STRESS_T100_SE_REP1.mLb.clN.CollectMultipleMetrics.quality_distribution_metrics", - "chromap/merged_library/picard_metrics/OSMOTIC_STRESS_T100_SE_REP1.mLb.mkD.sorted.MarkDuplicates.metrics.txt", + "chromap/merged_library/picard_metrics/OSMOTIC_STRESS_T100_SE_REP1.mLb.mkD.sorted.metrics.txt", "chromap/merged_library/picard_metrics/OSMOTIC_STRESS_T100_SE_REP2.mLb.clN.CollectMultipleMetrics.alignment_summary_metrics", "chromap/merged_library/picard_metrics/OSMOTIC_STRESS_T100_SE_REP2.mLb.clN.CollectMultipleMetrics.base_distribution_by_cycle_metrics", "chromap/merged_library/picard_metrics/OSMOTIC_STRESS_T100_SE_REP2.mLb.clN.CollectMultipleMetrics.quality_by_cycle_metrics", "chromap/merged_library/picard_metrics/OSMOTIC_STRESS_T100_SE_REP2.mLb.clN.CollectMultipleMetrics.quality_distribution_metrics", - "chromap/merged_library/picard_metrics/OSMOTIC_STRESS_T100_SE_REP2.mLb.mkD.sorted.MarkDuplicates.metrics.txt", + "chromap/merged_library/picard_metrics/OSMOTIC_STRESS_T100_SE_REP2.mLb.mkD.sorted.metrics.txt", "chromap/merged_library/picard_metrics/OSMOTIC_STRESS_T150_SE_REP1.mLb.clN.CollectMultipleMetrics.alignment_summary_metrics", "chromap/merged_library/picard_metrics/OSMOTIC_STRESS_T150_SE_REP1.mLb.clN.CollectMultipleMetrics.base_distribution_by_cycle_metrics", "chromap/merged_library/picard_metrics/OSMOTIC_STRESS_T150_SE_REP1.mLb.clN.CollectMultipleMetrics.quality_by_cycle_metrics", "chromap/merged_library/picard_metrics/OSMOTIC_STRESS_T150_SE_REP1.mLb.clN.CollectMultipleMetrics.quality_distribution_metrics", - "chromap/merged_library/picard_metrics/OSMOTIC_STRESS_T150_SE_REP1.mLb.mkD.sorted.MarkDuplicates.metrics.txt", + "chromap/merged_library/picard_metrics/OSMOTIC_STRESS_T150_SE_REP1.mLb.mkD.sorted.metrics.txt", "chromap/merged_library/picard_metrics/OSMOTIC_STRESS_T15_PE_REP1.mLb.clN.CollectMultipleMetrics.alignment_summary_metrics", "chromap/merged_library/picard_metrics/OSMOTIC_STRESS_T15_PE_REP1.mLb.clN.CollectMultipleMetrics.base_distribution_by_cycle_metrics", "chromap/merged_library/picard_metrics/OSMOTIC_STRESS_T15_PE_REP1.mLb.clN.CollectMultipleMetrics.insert_size_metrics", "chromap/merged_library/picard_metrics/OSMOTIC_STRESS_T15_PE_REP1.mLb.clN.CollectMultipleMetrics.quality_by_cycle_metrics", "chromap/merged_library/picard_metrics/OSMOTIC_STRESS_T15_PE_REP1.mLb.clN.CollectMultipleMetrics.quality_distribution_metrics", - "chromap/merged_library/picard_metrics/OSMOTIC_STRESS_T15_PE_REP1.mLb.mkD.sorted.MarkDuplicates.metrics.txt", + "chromap/merged_library/picard_metrics/OSMOTIC_STRESS_T15_PE_REP1.mLb.mkD.sorted.metrics.txt", "chromap/merged_library/picard_metrics/pdf", "chromap/merged_library/picard_metrics/pdf/OSMOTIC_STRESS_T0_PE_REP1.mLb.clN.CollectMultipleMetrics.base_distribution_by_cycle.pdf", "chromap/merged_library/picard_metrics/pdf/OSMOTIC_STRESS_T0_PE_REP1.mLb.clN.CollectMultipleMetrics.insert_size_histogram.pdf", @@ -445,13 +472,16 @@ "chromap/merged_replicate/macs3/broad_peak/OSMOTIC_STRESS_T100_SE.mRp.clN_peaks.gappedPeak", "chromap/merged_replicate/macs3/broad_peak/OSMOTIC_STRESS_T100_SE.mRp.clN_peaks.xls", "chromap/merged_replicate/macs3/broad_peak/consensus", + "chromap/merged_replicate/macs3/broad_peak/consensus/consensus_peaks.mRp.clN.PE.featureCounts.tsv", + "chromap/merged_replicate/macs3/broad_peak/consensus/consensus_peaks.mRp.clN.PE.featureCounts.tsv.summary", + "chromap/merged_replicate/macs3/broad_peak/consensus/consensus_peaks.mRp.clN.SE.featureCounts.tsv", + "chromap/merged_replicate/macs3/broad_peak/consensus/consensus_peaks.mRp.clN.SE.featureCounts.tsv.summary", "chromap/merged_replicate/macs3/broad_peak/consensus/consensus_peaks.mRp.clN.annotatePeaks.txt", "chromap/merged_replicate/macs3/broad_peak/consensus/consensus_peaks.mRp.clN.bed", "chromap/merged_replicate/macs3/broad_peak/consensus/consensus_peaks.mRp.clN.boolean.intersect.plot.pdf", "chromap/merged_replicate/macs3/broad_peak/consensus/consensus_peaks.mRp.clN.boolean.intersect.txt", "chromap/merged_replicate/macs3/broad_peak/consensus/consensus_peaks.mRp.clN.boolean.txt", - "chromap/merged_replicate/macs3/broad_peak/consensus/consensus_peaks.mRp.clN.featureCounts.txt", - "chromap/merged_replicate/macs3/broad_peak/consensus/consensus_peaks.mRp.clN.featureCounts.txt.summary", + "chromap/merged_replicate/macs3/broad_peak/consensus/consensus_peaks.mRp.clN.featureCounts.tsv", "chromap/merged_replicate/macs3/broad_peak/consensus/consensus_peaks.mRp.clN.saf", "chromap/merged_replicate/macs3/broad_peak/consensus/deseq2", "chromap/merged_replicate/macs3/broad_peak/consensus/deseq2/R_sessionInfo.log", @@ -479,8 +509,8 @@ "chromap/merged_replicate/macs3/broad_peak/qc/macs3_peak.mRp.clN.plots.pdf", "chromap/merged_replicate/macs3/broad_peak/qc/macs3_peak.mRp.clN.summary.txt", "chromap/merged_replicate/picard_metrics", - "chromap/merged_replicate/picard_metrics/OSMOTIC_STRESS_T0_PE.mRp.clN.sorted.MarkDuplicates.metrics.txt", - "chromap/merged_replicate/picard_metrics/OSMOTIC_STRESS_T100_SE.mRp.clN.sorted.MarkDuplicates.metrics.txt", + "chromap/merged_replicate/picard_metrics/OSMOTIC_STRESS_T0_PE.mRp.clN.sorted.metrics.txt", + "chromap/merged_replicate/picard_metrics/OSMOTIC_STRESS_T100_SE.mRp.clN.sorted.metrics.txt", "chromap/merged_replicate/samtools_stats", "chromap/merged_replicate/samtools_stats/OSMOTIC_STRESS_T0_PE.mRp.clN.sorted.bam.flagstat", "chromap/merged_replicate/samtools_stats/OSMOTIC_STRESS_T0_PE.mRp.clN.sorted.bam.idxstats", @@ -922,111 +952,121 @@ "sourcesanspro-semiboldit.woff:md5,f1d255aa459786dfc6aa2e488ac01245", "index.html:md5,bf7747be761e56ad7c54c842ac88461a", "ataqv.js:md5,feb291b7839e9e43ed304565e3a605d9", - "configuration.js:md5,d97330d16eb460d931ebdfdff0128c52", + "configuration.js:md5,684c73eb292dc3b2595570008c036609", "d3.min.js:md5,db69fb2626a71a286ee772d673138aca", "datatables.min.js:md5,e369b872620dadb05e4eb555b81f9112", "jszip.min.js:md5,09e492cb492ffa75484bbe10f1f721d1", "OSMOTIC_STRESS_T0_PE_REP1.mLb.clN.scale_factor.txt:md5,ca79e177b8ebab51ed983c36004a459f", - "OSMOTIC_STRESS_T0_PE_REP2.mLb.clN.scale_factor.txt:md5,d635ca1c198136c1b83ab68288488b10", + "OSMOTIC_STRESS_T0_PE_REP2.mLb.clN.scale_factor.txt:md5,39a0f4b1f8fa8c1acf7265c3a35e8ee4", "OSMOTIC_STRESS_T100_SE_REP1.mLb.clN.scale_factor.txt:md5,1409efd63e2cf79517e9218c99ee8620", - "OSMOTIC_STRESS_T100_SE_REP2.mLb.clN.scale_factor.txt:md5,1571513ccf7c1337a7b949bd015d2f6f", - "OSMOTIC_STRESS_T150_SE_REP1.mLb.clN.scale_factor.txt:md5,b836211db4b2034b82e6c7423aed73a7", - "OSMOTIC_STRESS_T15_PE_REP1.mLb.clN.scale_factor.txt:md5,295c36b91ec9972d90585e1182f83d5c", + "OSMOTIC_STRESS_T100_SE_REP2.mLb.clN.scale_factor.txt:md5,8bf3890ea7ef038d581c27aeec57d5eb", + "OSMOTIC_STRESS_T150_SE_REP1.mLb.clN.scale_factor.txt:md5,bf969eb74e12aef075c645c44966af3b", + "OSMOTIC_STRESS_T15_PE_REP1.mLb.clN.scale_factor.txt:md5,8ab7fcdd89af8338d502e07f25deb3c7", "OSMOTIC_STRESS_T0_PE_REP1.mLb.clN_peaks.broadPeak:md5,ee0c43ccbb1ed621a9d08b8f87a416a7", - "OSMOTIC_STRESS_T0_PE_REP1.mLb.clN_peaks.gappedPeak:md5,c13b6ec7cd42201feca1e5efb0df1e46", - "OSMOTIC_STRESS_T0_PE_REP1.mLb.clN_peaks.xls:md5,9131e6dbb7080692354e7cb75deab721", - "OSMOTIC_STRESS_T0_PE_REP2.mLb.clN_peaks.broadPeak:md5,f8ce0542a8d29d21e7e36e5a1f14a291", - "OSMOTIC_STRESS_T0_PE_REP2.mLb.clN_peaks.gappedPeak:md5,029d69ede57101e4ae47beca0f5855b9", - "OSMOTIC_STRESS_T0_PE_REP2.mLb.clN_peaks.xls:md5,ebfff423c8256325e02a0a678afd471b", + "OSMOTIC_STRESS_T0_PE_REP1.mLb.clN_peaks.gappedPeak:md5,f0f11a43be9480d3e1d7e5604259da68", + "OSMOTIC_STRESS_T0_PE_REP1.mLb.clN_peaks.xls:md5,2c5c1ce24163051e3a7bff13f7900c2e", + "OSMOTIC_STRESS_T0_PE_REP2.mLb.clN_peaks.broadPeak:md5,9394827d568a98e3162d9ce1d5fa304c", + "OSMOTIC_STRESS_T0_PE_REP2.mLb.clN_peaks.gappedPeak:md5,dae9f0497e4f339ae024e75cbb40caed", + "OSMOTIC_STRESS_T0_PE_REP2.mLb.clN_peaks.xls:md5,7a54dab83588ce3cdb1538ed31595158", "OSMOTIC_STRESS_T100_SE_REP1.mLb.clN_peaks.broadPeak:md5,3fb92a851db5c787e4a657ccd9d556e4", - "OSMOTIC_STRESS_T100_SE_REP1.mLb.clN_peaks.gappedPeak:md5,0532c3bd1b28a86ab0f7a8b0dc2c7e3c", - "OSMOTIC_STRESS_T100_SE_REP1.mLb.clN_peaks.xls:md5,b6d6edad7448a3178220b5e2a20bbcb6", - "OSMOTIC_STRESS_T100_SE_REP2.mLb.clN_peaks.broadPeak:md5,47363b5e05e476cc2012dd0d27e75645", - "OSMOTIC_STRESS_T100_SE_REP2.mLb.clN_peaks.gappedPeak:md5,90e1d78f59a4002eef74f932ed511093", - "OSMOTIC_STRESS_T100_SE_REP2.mLb.clN_peaks.xls:md5,fe1fdd3f286185d92d0300cccf350333", - "OSMOTIC_STRESS_T150_SE_REP1.mLb.clN_peaks.broadPeak:md5,994abda3863d73af0a3413ac384a18ed", - "OSMOTIC_STRESS_T150_SE_REP1.mLb.clN_peaks.gappedPeak:md5,62218a10f439002ec21b5c994e842c8d", - "OSMOTIC_STRESS_T150_SE_REP1.mLb.clN_peaks.xls:md5,723807344e4db2928998a7b75dc012cf", - "OSMOTIC_STRESS_T15_PE_REP1.mLb.clN_peaks.broadPeak:md5,f1ba7b07aad5d576951a1bf6f293731f", - "OSMOTIC_STRESS_T15_PE_REP1.mLb.clN_peaks.gappedPeak:md5,f4aa1f1dc530cfc0d05bae9b76aeab63", - "OSMOTIC_STRESS_T15_PE_REP1.mLb.clN_peaks.xls:md5,a177ef92450f72b80bb78032b2ee770f", - "consensus_peaks.mLb.clN.bed:md5,6af43a82d944c834ba0cedaeefed1f7d", - "consensus_peaks.mLb.clN.boolean.intersect.txt:md5,c7a4b348316d239fb8a99494878f5671", - "consensus_peaks.mLb.clN.boolean.txt:md5,3cbaaf9e01f14b6be95653a88066d59b", - "consensus_peaks.mLb.clN.saf:md5,099f2478c1c3700154a77d7a3fbe8390", + "OSMOTIC_STRESS_T100_SE_REP1.mLb.clN_peaks.gappedPeak:md5,7d7772acdcd8a2fa52b52a7c2771299c", + "OSMOTIC_STRESS_T100_SE_REP1.mLb.clN_peaks.xls:md5,3f8669434ca2aafdc6fe1f5d7f9375ab", + "OSMOTIC_STRESS_T100_SE_REP2.mLb.clN_peaks.broadPeak:md5,7ee185ce4fd3ef274209b31ad0f9d7ee", + "OSMOTIC_STRESS_T100_SE_REP2.mLb.clN_peaks.gappedPeak:md5,0564473f0c79f8979e00cc2dd9419a08", + "OSMOTIC_STRESS_T100_SE_REP2.mLb.clN_peaks.xls:md5,a6e8225dcf10287873cb8f15d1abb22a", + "OSMOTIC_STRESS_T150_SE_REP1.mLb.clN_peaks.broadPeak:md5,6e68db07975f6fe14f37220b76e14822", + "OSMOTIC_STRESS_T150_SE_REP1.mLb.clN_peaks.gappedPeak:md5,d0f580449025b4333a3d72857fed38ea", + "OSMOTIC_STRESS_T150_SE_REP1.mLb.clN_peaks.xls:md5,dff49ec46af329c8d14b763b18866702", + "OSMOTIC_STRESS_T15_PE_REP1.mLb.clN_peaks.broadPeak:md5,6b5a3913db3ec34c060c52b6b73f0efa", + "OSMOTIC_STRESS_T15_PE_REP1.mLb.clN_peaks.gappedPeak:md5,701f9ac9db24043278ed5d87e79dc5c4", + "OSMOTIC_STRESS_T15_PE_REP1.mLb.clN_peaks.xls:md5,d85fb13dabce6fbdf1bee1672344fdfb", + "consensus_peaks.mLb.clN.PE.featureCounts.tsv:md5,db52371cfb78852593800da122296270", + "consensus_peaks.mLb.clN.PE.featureCounts.tsv.summary:md5,1d3501321f1c0d4be97905d82fc0a2ac", + "consensus_peaks.mLb.clN.SE.featureCounts.tsv:md5,38da6de79fca3d955ed1a0ce0087422d", + "consensus_peaks.mLb.clN.SE.featureCounts.tsv.summary:md5,7e5dc872353f3bf3f5747b792233b76e", + "consensus_peaks.mLb.clN.bed:md5,aa5fed9ae95ee61b18488b4e839ef5dc", + "consensus_peaks.mLb.clN.boolean.intersect.txt:md5,ce169274438ffbb1061198612883b4a1", + "consensus_peaks.mLb.clN.boolean.txt:md5,45066504acfe6923ea5d9fc922497fd5", + "consensus_peaks.mLb.clN.featureCounts.tsv:md5,5f36050d9a18f3101d0d0b3ced5dbe36", + "consensus_peaks.mLb.clN.saf:md5,aa96dd28634ca5e98491a1c848b3d5a1", "R_sessionInfo.log:md5,fb0da0d7ad6994ed66a8e68348b19676", - "OSMOTIC_STRESS_T0_PE_REP1.size_factors.txt:md5,7dddf9f9cbf0dad0d951926637794a9d", - "OSMOTIC_STRESS_T0_PE_REP2.size_factors.txt:md5,6f638911eb4464c36f6125f028a7e32d", - "OSMOTIC_STRESS_T100_SE_REP1.size_factors.txt:md5,de01bed225db1ae2e49a169fbc8fe7e8", - "OSMOTIC_STRESS_T100_SE_REP2.size_factors.txt:md5,3a83e6a9c42c5cbf569b7ed9b4a84f42", - "OSMOTIC_STRESS_T150_SE_REP1.size_factors.txt:md5,37e00518c49678edb2012d63aa709220", - "OSMOTIC_STRESS_T15_PE_REP1.size_factors.txt:md5,d7bf6f184c4ad16923390c05844659ee", + "OSMOTIC_STRESS_T0_PE_REP1.size_factors.txt:md5,1b31f95b0a92c0ce33af6e20553953d7", + "OSMOTIC_STRESS_T0_PE_REP2.size_factors.txt:md5,bf8560c3941430347a124d8b3787d660", + "OSMOTIC_STRESS_T100_SE_REP1.size_factors.txt:md5,555d71c6a548c668fc62d4dcf35dc75b", + "OSMOTIC_STRESS_T100_SE_REP2.size_factors.txt:md5,03fdd7ed805703d7b245dfa69925bd9a", + "OSMOTIC_STRESS_T150_SE_REP1.size_factors.txt:md5,eec794e1806bebf1afef58e3c9f22c6a", + "OSMOTIC_STRESS_T15_PE_REP1.size_factors.txt:md5,e8edbd58465fdd7130d387cdb4012242", "OSMOTIC_STRESS_T0_PE_REP1.mLb.clN_peaks.FRiP_mqc.tsv:md5,7a0f8b2194f50c721fa78e5da3458377", "OSMOTIC_STRESS_T0_PE_REP1.mLb.clN_peaks.count_mqc.tsv:md5,d7b55e13ea81febb4023538a0a1968a8", - "OSMOTIC_STRESS_T0_PE_REP2.mLb.clN_peaks.FRiP_mqc.tsv:md5,737b93c649e01cd07c11fea31766af3c", - "OSMOTIC_STRESS_T0_PE_REP2.mLb.clN_peaks.count_mqc.tsv:md5,2670957a3288098575f8ba655d09edf7", + "OSMOTIC_STRESS_T0_PE_REP2.mLb.clN_peaks.FRiP_mqc.tsv:md5,a3311a62d8c25be0abb0cbeadc466a35", + "OSMOTIC_STRESS_T0_PE_REP2.mLb.clN_peaks.count_mqc.tsv:md5,a0138351c242ce97ddacad726da309b0", "OSMOTIC_STRESS_T100_SE_REP1.mLb.clN_peaks.FRiP_mqc.tsv:md5,55dd59cab13242d80cf0a1ead247ba5a", "OSMOTIC_STRESS_T100_SE_REP1.mLb.clN_peaks.count_mqc.tsv:md5,8cee4f482045efad4ff25f2d69766f7c", - "OSMOTIC_STRESS_T100_SE_REP2.mLb.clN_peaks.FRiP_mqc.tsv:md5,846f217e5830c33eebd390239fb92def", + "OSMOTIC_STRESS_T100_SE_REP2.mLb.clN_peaks.FRiP_mqc.tsv:md5,88375a8e7a06c7ebd974706ae33d344a", "OSMOTIC_STRESS_T100_SE_REP2.mLb.clN_peaks.count_mqc.tsv:md5,25be36adabceb7f2cb60bb2a26585a76", - "OSMOTIC_STRESS_T150_SE_REP1.mLb.clN_peaks.FRiP_mqc.tsv:md5,1b62f379ea8cabe2eea9658e7eb9f935", - "OSMOTIC_STRESS_T150_SE_REP1.mLb.clN_peaks.count_mqc.tsv:md5,9c822f06367e6118b6c96ed2e8c66779", - "OSMOTIC_STRESS_T15_PE_REP1.mLb.clN_peaks.FRiP_mqc.tsv:md5,136444116ae420a4cbc860b3c8c5f2fc", - "OSMOTIC_STRESS_T15_PE_REP1.mLb.clN_peaks.count_mqc.tsv:md5,e6596f93479edaf5cddbd1262240a593", - "macs3_annotatePeaks.mLb.clN.summary.txt:md5,3eb0b849056f86bb65a103266b33bd0b", - "macs3_annotatePeaks.mLb.clN.summary_mqc.tsv:md5,4ed8ff68da85a0893234a6a573fab9bf", + "OSMOTIC_STRESS_T150_SE_REP1.mLb.clN_peaks.FRiP_mqc.tsv:md5,c0beb141740546e84cb2161bd34285c2", + "OSMOTIC_STRESS_T150_SE_REP1.mLb.clN_peaks.count_mqc.tsv:md5,5a5e44e107f569e5ad1a823f01c02386", + "OSMOTIC_STRESS_T15_PE_REP1.mLb.clN_peaks.FRiP_mqc.tsv:md5,8a429863f471688f46571f1777b508d8", + "OSMOTIC_STRESS_T15_PE_REP1.mLb.clN_peaks.count_mqc.tsv:md5,2cda788185a23ae4fbfa1bb3ba8f8ecd", + "macs3_annotatePeaks.mLb.clN.summary.txt:md5,5f704595f241ed0c252794c3079faf90", + "macs3_annotatePeaks.mLb.clN.summary_mqc.tsv:md5,19eea45ba9270a8702fcfe55ba4b9ffa", "OSMOTIC_STRESS_T0_PE_REP1.mLb.clN.sorted.bam.flagstat:md5,53f3e02317be3d6ac6a109ed21a81cde", "OSMOTIC_STRESS_T0_PE_REP1.mLb.clN.sorted.bam.idxstats:md5,4e8e5575f2ac3581f4634ce3baa80ccb", - "OSMOTIC_STRESS_T0_PE_REP1.mLb.mkD.sorted.bam.flagstat:md5,3b663c95e6a0fd83c48ad033332dfb45", - "OSMOTIC_STRESS_T0_PE_REP1.mLb.mkD.sorted.bam.idxstats:md5,4ee6bf1ce67fc1ab5fb3dc0abaf616ae", - "OSMOTIC_STRESS_T0_PE_REP2.mLb.clN.sorted.bam.flagstat:md5,a0ea06a0d2df66d1530f3d71d2722106", - "OSMOTIC_STRESS_T0_PE_REP2.mLb.clN.sorted.bam.idxstats:md5,b3ae761856f971beb6e9568860ee76ae", - "OSMOTIC_STRESS_T0_PE_REP2.mLb.mkD.sorted.bam.flagstat:md5,e5e02e0df9b3148103b911655cde6d47", - "OSMOTIC_STRESS_T0_PE_REP2.mLb.mkD.sorted.bam.idxstats:md5,479387a5118919aa6b681687c979978b", + "OSMOTIC_STRESS_T0_PE_REP1.mLb.mkD.sorted.bam.flagstat:md5,9bdaf5a84146206f7741c86537815373", + "OSMOTIC_STRESS_T0_PE_REP1.mLb.mkD.sorted.bam.idxstats:md5,7fa5e58c48a0de0152bf51f0aedc3019", + "OSMOTIC_STRESS_T0_PE_REP2.mLb.clN.sorted.bam.flagstat:md5,60f6c8264d331733acd20e10be9d306d", + "OSMOTIC_STRESS_T0_PE_REP2.mLb.clN.sorted.bam.idxstats:md5,f1b57d957661a0d582a06dce0e1e9fb6", + "OSMOTIC_STRESS_T0_PE_REP2.mLb.mkD.sorted.bam.flagstat:md5,d4599f0c2a2662f5c2bd96f2f1ad800e", + "OSMOTIC_STRESS_T0_PE_REP2.mLb.mkD.sorted.bam.idxstats:md5,fe47f1ba4cfcd19d40af52af2ea99087", "OSMOTIC_STRESS_T100_SE_REP1.mLb.clN.sorted.bam.flagstat:md5,f79b2e78fc995cd485d9d8bf2c7d3aae", "OSMOTIC_STRESS_T100_SE_REP1.mLb.clN.sorted.bam.idxstats:md5,b234c4cf3c04ecf00b5e9cd709cdd780", "OSMOTIC_STRESS_T100_SE_REP1.mLb.mkD.sorted.bam.flagstat:md5,2a91c722fcd00da5c636f71ace1536f2", "OSMOTIC_STRESS_T100_SE_REP1.mLb.mkD.sorted.bam.idxstats:md5,d56c567ae1eb1efa01f6d65a3e0a17b2", - "OSMOTIC_STRESS_T100_SE_REP2.mLb.clN.sorted.bam.flagstat:md5,5a6c6670c037ceedb190379a7e4dbd43", - "OSMOTIC_STRESS_T100_SE_REP2.mLb.clN.sorted.bam.idxstats:md5,f44826f68a26301646e470c01fc19cb7", - "OSMOTIC_STRESS_T100_SE_REP2.mLb.mkD.sorted.bam.flagstat:md5,8b5903d6e1959ef64cc3665288ab3543", - "OSMOTIC_STRESS_T100_SE_REP2.mLb.mkD.sorted.bam.idxstats:md5,957d60dd498740fccf1db5850d6410d5", - "OSMOTIC_STRESS_T150_SE_REP1.mLb.clN.sorted.bam.flagstat:md5,fc43734cc2f936b79c0f30077a50ca06", - "OSMOTIC_STRESS_T150_SE_REP1.mLb.clN.sorted.bam.idxstats:md5,0a6b43de099291189a70de0a803489a7", - "OSMOTIC_STRESS_T150_SE_REP1.mLb.mkD.sorted.bam.flagstat:md5,06297742d79d72bfa93d33bd46661b90", - "OSMOTIC_STRESS_T150_SE_REP1.mLb.mkD.sorted.bam.idxstats:md5,f83b49675bd1cd31a157d26f6e775575", - "OSMOTIC_STRESS_T15_PE_REP1.mLb.clN.sorted.bam.flagstat:md5,c750ac8e894dabe2726783ec3641f735", - "OSMOTIC_STRESS_T15_PE_REP1.mLb.clN.sorted.bam.idxstats:md5,b7f7d6c7fb27d6d3d0f5303b637f1ce1", - "OSMOTIC_STRESS_T15_PE_REP1.mLb.mkD.sorted.bam.flagstat:md5,52b2ff84fca8ae4aad741642cd8e2a89", - "OSMOTIC_STRESS_T15_PE_REP1.mLb.mkD.sorted.bam.idxstats:md5,4387cc3f5911de045241159e3f76102c", - "OSMOTIC_STRESS_T0_PE.mRp.clN.scale_factor.txt:md5,4022a7cf72fed8e1a7157a392c03e8c4", - "OSMOTIC_STRESS_T100_SE.mRp.clN.scale_factor.txt:md5,f823f25e516674264d2c9a1573e98093", - "OSMOTIC_STRESS_T0_PE.mRp.clN_peaks.broadPeak:md5,bbde14d2a8d0766c30d7af8555e5d08d", - "OSMOTIC_STRESS_T0_PE.mRp.clN_peaks.gappedPeak:md5,93b4828933e175fec461785de0712f83", - "OSMOTIC_STRESS_T0_PE.mRp.clN_peaks.xls:md5,a2e12e14444f90bfa347affc8e1b5635", - "OSMOTIC_STRESS_T100_SE.mRp.clN_peaks.broadPeak:md5,8db2fd7d730d6672ad36d7a9b3ac9a5d", - "OSMOTIC_STRESS_T100_SE.mRp.clN_peaks.gappedPeak:md5,5776f6c62583303b97cb4efe98fb06ca", - "OSMOTIC_STRESS_T100_SE.mRp.clN_peaks.xls:md5,f1eb2998da8fbe999b717bbb275a7c19", - "consensus_peaks.mRp.clN.bed:md5,53e60ec0a68f48e8221ce9f20c8d4827", - "consensus_peaks.mRp.clN.boolean.intersect.txt:md5,48dfaf669ac3e0920650a3850ada90dc", - "consensus_peaks.mRp.clN.boolean.txt:md5,b52a53523696848a49d077ed81564d8c", - "consensus_peaks.mRp.clN.saf:md5,a6c022a654c4ec4915da5c44e3be08ad", + "OSMOTIC_STRESS_T100_SE_REP2.mLb.clN.sorted.bam.flagstat:md5,6fbe5e9dbabe868f7ceee8b2bf367809", + "OSMOTIC_STRESS_T100_SE_REP2.mLb.clN.sorted.bam.idxstats:md5,652f9a50f85c9034cd4afc1258132514", + "OSMOTIC_STRESS_T100_SE_REP2.mLb.mkD.sorted.bam.flagstat:md5,346dc01ca5aaa40722497707172b8155", + "OSMOTIC_STRESS_T100_SE_REP2.mLb.mkD.sorted.bam.idxstats:md5,242afc4b5345a39b4dc357d65108ce0c", + "OSMOTIC_STRESS_T150_SE_REP1.mLb.clN.sorted.bam.flagstat:md5,e40d3cfb9b0321d50ee6269bf3d21157", + "OSMOTIC_STRESS_T150_SE_REP1.mLb.clN.sorted.bam.idxstats:md5,781508ccd860200a793cebdca69dd53e", + "OSMOTIC_STRESS_T150_SE_REP1.mLb.mkD.sorted.bam.flagstat:md5,a2ceb4afabd4b375f613c09d04a0bcdf", + "OSMOTIC_STRESS_T150_SE_REP1.mLb.mkD.sorted.bam.idxstats:md5,806bff980078dd43e01b98c09e0cd3ba", + "OSMOTIC_STRESS_T15_PE_REP1.mLb.clN.sorted.bam.flagstat:md5,af57a9df0ecde05141926d4758662504", + "OSMOTIC_STRESS_T15_PE_REP1.mLb.clN.sorted.bam.idxstats:md5,579f1b952c9ba06c2749ab3bd3c87752", + "OSMOTIC_STRESS_T15_PE_REP1.mLb.mkD.sorted.bam.flagstat:md5,ce1585aae3abe3afe927ea393cd2720f", + "OSMOTIC_STRESS_T15_PE_REP1.mLb.mkD.sorted.bam.idxstats:md5,140ccad1666e8b14f7ae4a522524ce39", + "OSMOTIC_STRESS_T0_PE.mRp.clN.scale_factor.txt:md5,a55d999d95f29fc5a8dbe3f40cdb2d58", + "OSMOTIC_STRESS_T100_SE.mRp.clN.scale_factor.txt:md5,c9e9a9b9a391257f0c8fbc1b7da344ee", + "OSMOTIC_STRESS_T0_PE.mRp.clN_peaks.broadPeak:md5,377bc55e55706012764bda953f9cebc7", + "OSMOTIC_STRESS_T0_PE.mRp.clN_peaks.gappedPeak:md5,3368514aa3be280eab93902237fe3507", + "OSMOTIC_STRESS_T0_PE.mRp.clN_peaks.xls:md5,2fac52fa475fb2a60f34deb4a7c304ce", + "OSMOTIC_STRESS_T100_SE.mRp.clN_peaks.broadPeak:md5,67f20d45d96ff47070568b45b883bc5e", + "OSMOTIC_STRESS_T100_SE.mRp.clN_peaks.gappedPeak:md5,f33b4e71a762263dd1827ba907d92cad", + "OSMOTIC_STRESS_T100_SE.mRp.clN_peaks.xls:md5,b2226352c2663a60ac25f70788cafcdb", + "consensus_peaks.mRp.clN.PE.featureCounts.tsv:md5,222b4a4755362014e251b7c7a2b4d652", + "consensus_peaks.mRp.clN.PE.featureCounts.tsv.summary:md5,f4f611d8ec857fe0b1506ef0e15e6941", + "consensus_peaks.mRp.clN.SE.featureCounts.tsv:md5,fdaa9166861e1b9ae35e73324b387024", + "consensus_peaks.mRp.clN.SE.featureCounts.tsv.summary:md5,7643a8ba98d8899ce10984424c9b8d7b", + "consensus_peaks.mRp.clN.bed:md5,ae4b2196a02d7edb33cd94694bb424ad", + "consensus_peaks.mRp.clN.boolean.intersect.txt:md5,135fb013616f09a1d37d6c63e373342c", + "consensus_peaks.mRp.clN.boolean.txt:md5,1a337d666b1288ffdbacc55fb314eeb3", + "consensus_peaks.mRp.clN.featureCounts.tsv:md5,58abf080dd0df4f402c4fe01a8578145", + "consensus_peaks.mRp.clN.saf:md5,9bb4e99f9236c5a90317f17af0522ecc", "R_sessionInfo.log:md5,fb0da0d7ad6994ed66a8e68348b19676", - "OSMOTIC_STRESS_T0_PE_REP1.size_factors.txt:md5,79e50e62930af090aca1956b1ad936b0", - "OSMOTIC_STRESS_T0_PE_REP2.size_factors.txt:md5,d47907a311f3a640f48612cdcc4c8f2c", - "OSMOTIC_STRESS_T100_SE_REP1.size_factors.txt:md5,2ce6ff6191e38a9b13b74086bb247f3c", - "OSMOTIC_STRESS_T100_SE_REP2.size_factors.txt:md5,f53d6eea11671941939cc3f27a859ae4", - "OSMOTIC_STRESS_T0_PE.mRp.clN_peaks.FRiP_mqc.tsv:md5,92acdf5ebcdc692a3cc53320935d4977", - "OSMOTIC_STRESS_T0_PE.mRp.clN_peaks.count_mqc.tsv:md5,cbc849e624768ab6ded7bb71b08115ec", - "OSMOTIC_STRESS_T100_SE.mRp.clN_peaks.FRiP_mqc.tsv:md5,ec75b93401006505f6d8ac0fce2f1ac8", - "OSMOTIC_STRESS_T100_SE.mRp.clN_peaks.count_mqc.tsv:md5,8659f3069a89eeb010358ac0e0ee04e6", - "macs3_annotatePeaks.mRp.clN.summary.txt:md5,9f675c9ad540f0a6695f49936a1bbb7e", - "macs3_annotatePeaks.mRp.clN.summary_mqc.tsv:md5,f9c93f552208c2a5d27f73018b65bf60", - "OSMOTIC_STRESS_T0_PE.mRp.clN.sorted.bam.flagstat:md5,9f6207d2d9bfd4d238f86eeaf9fbd1bd", - "OSMOTIC_STRESS_T0_PE.mRp.clN.sorted.bam.idxstats:md5,5fe07a6022d95f9655efe47c50b36c9a", - "OSMOTIC_STRESS_T100_SE.mRp.clN.sorted.bam.flagstat:md5,919b13f7be53e35d60c97af1d3e14edd", - "OSMOTIC_STRESS_T100_SE.mRp.clN.sorted.bam.idxstats:md5,d4b33f4434db5ad34fd314a73b9ad5f6", - "genome.index:md5,227e5a277953cecaccdb4a3500718b94", + "OSMOTIC_STRESS_T0_PE_REP1.size_factors.txt:md5,9a4fb538408d4bf526ad6f860575784d", + "OSMOTIC_STRESS_T0_PE_REP2.size_factors.txt:md5,da0e65581c1e7f64f7266903eb8e98a6", + "OSMOTIC_STRESS_T100_SE_REP1.size_factors.txt:md5,6a699f95fbcb493f3bb64cef84b952a7", + "OSMOTIC_STRESS_T100_SE_REP2.size_factors.txt:md5,c4e7a9ae25f8eebc8d6482d70413c31a", + "OSMOTIC_STRESS_T0_PE.mRp.clN_peaks.FRiP_mqc.tsv:md5,47b098c759774e50bc044c6299b6319e", + "OSMOTIC_STRESS_T0_PE.mRp.clN_peaks.count_mqc.tsv:md5,089329406279a49e07d126de1f52a806", + "OSMOTIC_STRESS_T100_SE.mRp.clN_peaks.FRiP_mqc.tsv:md5,14c46830dcc267d6f531b22bffb734c8", + "OSMOTIC_STRESS_T100_SE.mRp.clN_peaks.count_mqc.tsv:md5,c9eeabff803c9bbc33fabf14867437b7", + "macs3_annotatePeaks.mRp.clN.summary.txt:md5,6c0c13d00df15867c58c1857d11a8416", + "macs3_annotatePeaks.mRp.clN.summary_mqc.tsv:md5,c83351e7dd31ee97b40f04355a243d69", + "OSMOTIC_STRESS_T0_PE.mRp.clN.sorted.bam.flagstat:md5,acb44fb90bc18366ec8efa3881dc9255", + "OSMOTIC_STRESS_T0_PE.mRp.clN.sorted.bam.idxstats:md5,15e882e2417a6d82771bc63c92f69b5e", + "OSMOTIC_STRESS_T100_SE.mRp.clN.sorted.bam.flagstat:md5,b245ff26bef6fd4d1c0c7a46149813ca", + "OSMOTIC_STRESS_T100_SE.mRp.clN.sorted.bam.idxstats:md5,610213c2af6135d930122bdc1c5d28ea", + "genome.index:md5,377432ea6242989cae4dabb60859f6bd", "genome.fa:md5,4bad9f4b18056156a81f7f952abbe125", "genome.fa.fai:md5,6f4c0ce5258e6948135ad006e1f9ee1b", "deeptools_plot_fingerprint_counts_mlib_deeptools.txt:md5,1a024a72bbc5dd0e1493e6025c9b980a", @@ -1034,54 +1074,54 @@ "mqc_cutadapt_filtered_reads_plot_1.txt:md5,b78f69173122f2cacf8121eaeb815382", "mqc_cutadapt_trimmed_sequences_plot_3_Counts.txt:md5,157073209c492b89badba367b1c57d83", "mqc_cutadapt_trimmed_sequences_plot_3_Obs_Exp.txt:md5,b04ae8b2ec27d71817ae7cb666888b9b", - "mqc_deeptools_fingerprint_plot_1.txt:md5,981d7b2a2569691b054241609f416699", - "mqc_fastqc_adapter_content_plot-2_1.txt:md5,7050d22f2eabdafb3d1eb81e736599af", + "mqc_deeptools_fingerprint_plot_1.txt:md5,e57d508028bbfa194483f9943d652a8c", + "mqc_fastqc_adapter_content_plot-2_1.txt:md5,3560a22f94aea25e27d97e056fb478ed", "mqc_fastqc_adapter_content_plot_1.txt:md5,66f3e2f6ba14599b0d6c20144df60777", - "mqc_fastqc_per_base_n_content_plot-2_1.txt:md5,7c5db7fad8afe578076466416e17bbd0", + "mqc_fastqc_per_base_n_content_plot-2_1.txt:md5,d79e95d36d955edee3e4bfb139dce967", "mqc_fastqc_per_base_n_content_plot_1.txt:md5,8d9cdd0463193b7e10332e2ca0273aca", - "mqc_fastqc_per_base_sequence_quality_plot-2_1.txt:md5,3f7c1c4998d41f10fcc48f15fc1c214f", + "mqc_fastqc_per_base_sequence_quality_plot-2_1.txt:md5,3bb6cad69480846e4003b9f0f3511caa", "mqc_fastqc_per_base_sequence_quality_plot_1.txt:md5,821cb87b0ae8bd61cd445d153b8f371a", - "mqc_fastqc_per_sequence_gc_content_plot-2_Counts.txt:md5,076f8f06afb71ddf1de87480c0a937ab", - "mqc_fastqc_per_sequence_gc_content_plot-2_Percentages.txt:md5,4f0d049c48c4cde730fdc2ee37130658", + "mqc_fastqc_per_sequence_gc_content_plot-2_Counts.txt:md5,88fb0e924094b5dd57f4003ac13fd1f4", + "mqc_fastqc_per_sequence_gc_content_plot-2_Percentages.txt:md5,a4b37bca5e61bf595c4532ffbc8b8f93", "mqc_fastqc_per_sequence_gc_content_plot_Counts.txt:md5,3fa7f0c0858d12cae8700e21774da86d", "mqc_fastqc_per_sequence_gc_content_plot_Percentages.txt:md5,a2d0c3ec413894e4dafa62ebdf44a06c", - "mqc_fastqc_per_sequence_quality_scores_plot-2_1.txt:md5,3dde643427f3229f283527966d7dd32e", + "mqc_fastqc_per_sequence_quality_scores_plot-2_1.txt:md5,841ccc3da246bd197fc966e9f8c5ca57", "mqc_fastqc_per_sequence_quality_scores_plot_1.txt:md5,3bfe1c94f710975829e2c1e3b5f16ea7", - "mqc_fastqc_sequence_counts_plot-2_1.txt:md5,83670beba48f5d0a1ff4bb038628f49e", + "mqc_fastqc_sequence_counts_plot-2_1.txt:md5,c734a06e1f3e3afc1486a0b45be880e1", "mqc_fastqc_sequence_counts_plot_1.txt:md5,d0cf8d64e742b5f446e6b602d86913b9", - "mqc_fastqc_sequence_duplication_levels_plot-2_1.txt:md5,907ad5b8fb27d2d9fd19281c8fa77e65", + "mqc_fastqc_sequence_duplication_levels_plot-2_1.txt:md5,d7ada8561d521eaf645073f7cccf7b82", "mqc_fastqc_sequence_duplication_levels_plot_1.txt:md5,23c4883ed6c22212b0c3e07a863745d1", - "mqc_fastqc_sequence_length_distribution_plot_1.txt:md5,46650932914f76713075e12934d6fcfe", - "mqc_featureCounts_assignment_plot-2_1.txt:md5,066346d45ae910b3a68121675262bbbe", - "mqc_featureCounts_assignment_plot_1.txt:md5,2c59acb9cb5c612863b26fed519aee06", - "mqc_samtools-idxstats-mapped-reads-plot-2_Normalised_Counts.txt:md5,b14230a321b4ca2fc91ec32a60e62f2e", - "mqc_samtools-idxstats-mapped-reads-plot-2_Observed_over_Expected_Counts.txt:md5,107579e3ac937a5a8106d6b58396bf11", - "mqc_samtools-idxstats-mapped-reads-plot-2_Raw_Counts.txt:md5,474ba2636e993a043ef5d8b17e82d0cc", - "mqc_samtools-idxstats-mapped-reads-plot-3_Normalised_Counts.txt:md5,bc6b4db5d4fd85ad084bcd9484b64b51", - "mqc_samtools-idxstats-mapped-reads-plot-3_Observed_over_Expected_Counts.txt:md5,c9179b4f2dff42ea794dc984b28a2404", - "mqc_samtools-idxstats-mapped-reads-plot-3_Raw_Counts.txt:md5,063ca520bd6fd32d9d03e406e8d17804", - "mqc_samtools-idxstats-mapped-reads-plot-4_Normalised_Counts.txt:md5,499a695289f338b6e4b3368ad7ed6692", - "mqc_samtools-idxstats-mapped-reads-plot-4_Observed_over_Expected_Counts.txt:md5,94eaa4e595fa40f648d631393a117c35", - "mqc_samtools-idxstats-mapped-reads-plot-4_Raw_Counts.txt:md5,a0e040bc97b8b6e1d580fc7c8d51d405", - "mqc_samtools-idxstats-mapped-reads-plot_Normalised_Counts.txt:md5,dcbc29c494751dd1e71878b2faf726aa", - "mqc_samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts.txt:md5,2035a3d2939f6d8a38810b9316a116ed", - "mqc_samtools-idxstats-mapped-reads-plot_Raw_Counts.txt:md5,a6793c7c85f6e3d67a63a3e0a1e27bba", - "mqc_samtools_alignment_plot-2_1.txt:md5,bcdc55f96d627b72c840ecef552aff81", - "mqc_samtools_alignment_plot-3_1.txt:md5,7937ae44567f7b16a29d4acebbab2c35", - "mqc_samtools_alignment_plot-4_1.txt:md5,c9425f57e8b9755314ab0fc69c5274b5", - "mqc_samtools_alignment_plot_1.txt:md5,a1219ecb42974a8d09d17e7033fa7327", + "mqc_fastqc_sequence_length_distribution_plot_1.txt:md5,bc3acb40acbf620b237d0f2fa8c8a1ab", + "mqc_featureCounts_assignment_plot-2_1.txt:md5,70c9702f9f5e8c7468c49168a2c8d802", + "mqc_featureCounts_assignment_plot_1.txt:md5,908c411517b70d21098e26b87ecaf2b1", + "mqc_samtools-idxstats-mapped-reads-plot-2_Normalised_Counts.txt:md5,e725a2de503055125c8d5d901efd4b14", + "mqc_samtools-idxstats-mapped-reads-plot-2_Observed_over_Expected_Counts.txt:md5,36e03b26566ca8e12a72f7ed9aab0b65", + "mqc_samtools-idxstats-mapped-reads-plot-2_Raw_Counts.txt:md5,a08f22af3690395698152683d7006975", + "mqc_samtools-idxstats-mapped-reads-plot-3_Normalised_Counts.txt:md5,703a09d4e182d18d81bc7905c43bb7f2", + "mqc_samtools-idxstats-mapped-reads-plot-3_Observed_over_Expected_Counts.txt:md5,8b00ebd52efc76bc507085d1bfc20074", + "mqc_samtools-idxstats-mapped-reads-plot-3_Raw_Counts.txt:md5,f8ddc235848098306e52b33c1df88bda", + "mqc_samtools-idxstats-mapped-reads-plot-4_Normalised_Counts.txt:md5,0b232912de2116fb5d788f7fa21f1791", + "mqc_samtools-idxstats-mapped-reads-plot-4_Observed_over_Expected_Counts.txt:md5,524be815f13b5d5825ec82ff1715a4bc", + "mqc_samtools-idxstats-mapped-reads-plot-4_Raw_Counts.txt:md5,d34b4d89c97558f7c7299a949f56c0e6", + "mqc_samtools-idxstats-mapped-reads-plot_Normalised_Counts.txt:md5,f9297280f0ccb8fcc02797b7edc9ad4a", + "mqc_samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts.txt:md5,cb6543c55824e16105e5d8efe5d01efb", + "mqc_samtools-idxstats-mapped-reads-plot_Raw_Counts.txt:md5,3232f9925bb18b6fdc083892874e819c", + "mqc_samtools_alignment_plot-2_1.txt:md5,12fcb21d336c8c293e7deae61bac55e0", + "mqc_samtools_alignment_plot-3_1.txt:md5,e4c904e31cda8c109ad83e5dabe3ff68", + "mqc_samtools_alignment_plot-4_1.txt:md5,eceb66c56cea0a701c1430b615c9687c", + "mqc_samtools_alignment_plot_1.txt:md5,3a231661574252e63ee3f1501fca0b17", "multiqc_citations.txt:md5,34da9f7497d275274f6dfd3b89831edb", - "multiqc_cutadapt.txt:md5,19916e059f11fa2c038c97bbb0ea190b", + "multiqc_cutadapt.txt:md5,926fcf7c5a9c5dc0a105a439c85a5f58", "multiqc_fastqc.txt:md5,a9a7484add8120fc3cf3d5626a92973b", - "multiqc_fastqc_1.txt:md5,6f694cea56d88eb91b4c9610f7a12ca5", - "multiqc_featureCounts_mlib_featurecounts.txt:md5,a4e5754dbb15ee5816b70f1c65990098", - "multiqc_featureCounts_mrep_featurecounts.txt:md5,872a3fa507f5fa31d1f25596d9e1b093", - "multiqc_mlib_frip_score-plot.txt:md5,aea83446f00b9c4ac21c5f53239193ab", - "multiqc_mlib_peak_annotation-plot.txt:md5,43f43dd57a8334827acbe41f3793e85c", - "multiqc_mlib_peak_count-plot.txt:md5,464296670d3b57836660fcce8d409897", - "multiqc_mrep_frip_score-plot.txt:md5,eb6c4c4a9347e5212ad1efb59c854efe", - "multiqc_mrep_peak_annotation-plot.txt:md5,20a7ca66cd7584dd46524e51722936de", - "multiqc_mrep_peak_count-plot.txt:md5,c9ab0e2f3129e47def46eff0c92b504d", + "multiqc_fastqc_1.txt:md5,58ab2bbd2d19745e5975742c6d1335d7", + "multiqc_featureCounts_mlib_featurecounts.txt:md5,e7b0000be76b6000910e8c1a78d8244a", + "multiqc_featureCounts_mrep_featurecounts.txt:md5,d004c734ad8a106b26eebfd4d3d0c8cf", + "multiqc_mlib_frip_score-plot.txt:md5,4e69a1c964ffa2fc190a45e9dc6a0abb", + "multiqc_mlib_peak_annotation-plot.txt:md5,7b5a0a0032656221335c4f5f05ab8f36", + "multiqc_mlib_peak_count-plot.txt:md5,12775a5f90d680f5b859f6a503679bd0", + "multiqc_mrep_frip_score-plot.txt:md5,b47c1097a56ffe3451728dfef68f4a16", + "multiqc_mrep_peak_annotation-plot.txt:md5,9edd2eb70a7bfdbf9eafc86d0dfd0f1e", + "multiqc_mrep_peak_count-plot.txt:md5,0e859a8abcd4974d48eda655eb7bd53f", "picard_histogram.txt:md5,c9aa8a5ac6841ffb3a6cc2de45b44797", "picard_histogram_1.txt:md5,c9aa8a5ac6841ffb3a6cc2de45b44797", "picard_histogram_2.txt:md5,c9aa8a5ac6841ffb3a6cc2de45b44797", @@ -1094,20 +1134,20 @@ "samplesheet.valid.csv:md5,51b046b55592e95949824f21b12c7e49" ] ], + "timestamp": "2026-07-26T03:35:33.359642045", "meta": { - "nf-test": "0.9.3", - "nextflow": "26.04.1" - }, - "timestamp": "2026-05-20T12:16:19.242642755" + "nf-test": "0.9.4", + "nextflow": "25.10.4" + } }, "chromap with stub": { "content": [ 26 ], + "timestamp": "2026-03-20T23:04:44.979984419", "meta": { "nf-test": "0.9.3", "nextflow": "25.04.7" - }, - "timestamp": "2026-03-20T23:04:44.979984419" + } } } \ No newline at end of file diff --git a/tests/consensus_all_pe.nf.test b/tests/consensus_all_pe.nf.test new file mode 100644 index 00000000..84f02840 --- /dev/null +++ b/tests/consensus_all_pe.nf.test @@ -0,0 +1,44 @@ +nextflow_pipeline { + + name "Test pipeline - homogeneous all-paired-end cohort" + script "../main.nf" + tag "pipeline" + tag "consensus_endedness" + + // Failure-B edge case: an all-paired-end cohort. The single-end branch of the + // consensus split is empty, so featureCounts runs exactly once (paired mode) + // and FEATURECOUNTS_MERGE takes the single-file pass-through path. The merged + // matrix must still be produced and carry only paired-end sample columns. + test("all paired-end cohort - single featureCounts batch, pass-through merge") { + + when { + params { + input = "${projectDir}/tests/csv/all_pe_samplesheet.csv" + outdir = "$outputDir" + } + } + + then { + def mergedFc = [] + new File("${outputDir}").eachFileRecurse { f -> + if (f.name ==~ /consensus_peaks\.m(Lb|Rp)\.clN\.featureCounts\.tsv/) { + mergedFc << f + } + } + assertAll( + { assert workflow.success }, + { assert mergedFc.size() > 0 : "no merged consensus featureCounts matrix was produced" }, + { mergedFc.each { f -> + def header = f.readLines().find { it.startsWith('Geneid') }.split('\t') as List + def cols = header[6..-1] + assert cols.toUnique().size() == cols.size() : "duplicate sample columns in ${f.name}: ${cols}" + assert cols.every { it.contains('_PE') } : "unexpected non-PE column in ${f.name}: ${cols}" + } }, + // Nextflow version is removed because we test pipelines on multiple Nextflow versions + { assert snapshot( + removeNextflowVersion("$outputDir/pipeline_info/nf_core_atacseq_software_mqc_versions.yml") + ).match() } + ) + } + } +} diff --git a/tests/consensus_all_pe.nf.test.snap b/tests/consensus_all_pe.nf.test.snap new file mode 100644 index 00000000..e8cc8d47 --- /dev/null +++ b/tests/consensus_all_pe.nf.test.snap @@ -0,0 +1,145 @@ +{ + "all paired-end cohort - single featureCounts batch, pass-through merge": { + "content": [ + { + "BAMTOOLS_FILTER": { + "bamtools": "2.5.2", + "samtools": "1.15.1" + }, + "BAM_REMOVE_ORPHANS": { + "samtools": "1.15.1" + }, + "BEDTOOLS_GENOMECOV": { + "bedtools": "2.31.1", + "sort": "sort (GNU coreutils) 9.5" + }, + "BWA_INDEX": { + "bwa": "0.7.19-r1273" + }, + "BWA_MEM": { + "bwa": "0.7.19-r1273", + "samtools": "1.22.1" + }, + "DEEPTOOLS_COMPUTEMATRIX_REFERENCE_POINT": { + "deeptools": "3.5.6" + }, + "DEEPTOOLS_COMPUTEMATRIX_SCALE_REGIONS": { + "deeptools": "3.5.6" + }, + "DEEPTOOLS_PLOTHEATMAP": { + "deeptools": "3.5.6" + }, + "DEEPTOOLS_PLOTPROFILE": { + "deeptools": "3.5.6" + }, + "DESEQ2_QC": { + "bioconductor-deseq2": "1.28.0", + "r-base": "4.0.3" + }, + "FASTQC": { + "fastqc": "0.12.1" + }, + "FEATURECOUNTS_MERGE": { + "sed": 4.7 + }, + "FRIP_SCORE": { + "bedtools": "2.30.0", + "samtools": "1.15.1" + }, + "GENOME_BLACKLIST_REGIONS": { + "bedtools": "2.30.0" + }, + "GET_AUTOSOMES": { + "python": "3.8.3" + }, + "GTF2BED": { + "perl": "5.26.2" + }, + "HOMER_ANNOTATEPEAKS": { + "homer": 4.11 + }, + "IGV": { + "python": "3.8.3" + }, + "KHMER_UNIQUEKMERS": { + "khmer": "3.0.0a3" + }, + "MACS3_CALLPEAK": { + "macs3": "3.0.4" + }, + "MACS3_CONSENSUS": { + "python": "3.10.0", + "r-base": "4.1.1" + }, + "MERGED_LIBRARY_ATAQV_ATAQV": { + "ataqv": "1.3.1" + }, + "MERGED_LIBRARY_ATAQV_MKARV": { + "ataqv": "1.3.1" + }, + "MERGED_LIBRARY_DEEPTOOLS_PLOTFINGERPRINT": { + "deeptools": "3.5.6" + }, + "MERGED_LIBRARY_PICARD_COLLECTMULTIPLEMETRICS": { + "picard": "3.4.0" + }, + "MULTIQC_CUSTOM_PEAKS": { + "sed": 4.7 + }, + "PICARD_MARKDUPLICATES": { + "picard": "3.4.0" + }, + "PICARD_MERGESAMFILES_LIBRARY": { + "picard": "3.4.0" + }, + "PICARD_MERGESAMFILES_REPLICATE": { + "picard": "3.4.0" + }, + "PLOT_HOMER_ANNOTATEPEAKS": { + "r-base": "4.0.3" + }, + "PLOT_MACS3_QC": { + "r-base": "4.0.3" + }, + "SAMPLESHEET_CHECK": { + "python": "3.8.3" + }, + "SAMTOOLS_FAIDX": { + "samtools": "1.23.1" + }, + "SAMTOOLS_FLAGSTAT": { + "samtools": 1.24 + }, + "SAMTOOLS_IDXSTATS": { + "samtools": 1.24 + }, + "SAMTOOLS_INDEX": { + "samtools": 1.24 + }, + "SAMTOOLS_SORT": { + "samtools": 1.24 + }, + "SAMTOOLS_STATS": { + "samtools": 1.24 + }, + "SUBREAD_FEATURECOUNTS": { + "subread": "2.1.1" + }, + "TRIMGALORE": { + "trimgalore": "2.1.0" + }, + "TSS_EXTRACT": { + "sed": 4.7 + }, + "UCSC_BEDGRAPHTOBIGWIG": { + "ucsc": 482 + } + } + ], + "timestamp": "2026-07-26T19:27:19.289949311", + "meta": { + "nf-test": "0.9.4", + "nextflow": "25.10.4" + } + } +} \ No newline at end of file diff --git a/tests/consensus_all_se.nf.test b/tests/consensus_all_se.nf.test new file mode 100644 index 00000000..007b9dd9 --- /dev/null +++ b/tests/consensus_all_se.nf.test @@ -0,0 +1,44 @@ +nextflow_pipeline { + + name "Test pipeline - homogeneous all-single-end cohort" + script "../main.nf" + tag "pipeline" + tag "consensus_endedness" + + // Failure-B edge case: an all-single-end cohort. The paired-end branch of the + // consensus split is empty, so featureCounts runs exactly once (single-end + // mode) and FEATURECOUNTS_MERGE takes the single-file pass-through path. The + // merged matrix must still be produced and carry only single-end sample columns. + test("all single-end cohort - single featureCounts batch, pass-through merge") { + + when { + params { + input = "${projectDir}/tests/csv/all_se_samplesheet.csv" + outdir = "$outputDir" + } + } + + then { + def mergedFc = [] + new File("${outputDir}").eachFileRecurse { f -> + if (f.name ==~ /consensus_peaks\.m(Lb|Rp)\.clN\.featureCounts\.tsv/) { + mergedFc << f + } + } + assertAll( + { assert workflow.success }, + { assert mergedFc.size() > 0 : "no merged consensus featureCounts matrix was produced" }, + { mergedFc.each { f -> + def header = f.readLines().find { it.startsWith('Geneid') }.split('\t') as List + def cols = header[6..-1] + assert cols.toUnique().size() == cols.size() : "duplicate sample columns in ${f.name}: ${cols}" + assert cols.every { it.contains('_SE') } : "unexpected non-SE column in ${f.name}: ${cols}" + } }, + // Nextflow version is removed because we test pipelines on multiple Nextflow versions + { assert snapshot( + removeNextflowVersion("$outputDir/pipeline_info/nf_core_atacseq_software_mqc_versions.yml") + ).match() } + ) + } + } +} diff --git a/tests/consensus_all_se.nf.test.snap b/tests/consensus_all_se.nf.test.snap new file mode 100644 index 00000000..0b2b91ab --- /dev/null +++ b/tests/consensus_all_se.nf.test.snap @@ -0,0 +1,142 @@ +{ + "all single-end cohort - single featureCounts batch, pass-through merge": { + "content": [ + { + "BAMTOOLS_FILTER": { + "bamtools": "2.5.2", + "samtools": "1.15.1" + }, + "BEDTOOLS_GENOMECOV": { + "bedtools": "2.31.1", + "sort": "sort (GNU coreutils) 9.5" + }, + "BWA_INDEX": { + "bwa": "0.7.19-r1273" + }, + "BWA_MEM": { + "bwa": "0.7.19-r1273", + "samtools": "1.22.1" + }, + "DEEPTOOLS_COMPUTEMATRIX_REFERENCE_POINT": { + "deeptools": "3.5.6" + }, + "DEEPTOOLS_COMPUTEMATRIX_SCALE_REGIONS": { + "deeptools": "3.5.6" + }, + "DEEPTOOLS_PLOTHEATMAP": { + "deeptools": "3.5.6" + }, + "DEEPTOOLS_PLOTPROFILE": { + "deeptools": "3.5.6" + }, + "DESEQ2_QC": { + "bioconductor-deseq2": "1.28.0", + "r-base": "4.0.3" + }, + "FASTQC": { + "fastqc": "0.12.1" + }, + "FEATURECOUNTS_MERGE": { + "sed": 4.7 + }, + "FRIP_SCORE": { + "bedtools": "2.30.0", + "samtools": "1.15.1" + }, + "GENOME_BLACKLIST_REGIONS": { + "bedtools": "2.30.0" + }, + "GET_AUTOSOMES": { + "python": "3.8.3" + }, + "GTF2BED": { + "perl": "5.26.2" + }, + "HOMER_ANNOTATEPEAKS": { + "homer": 4.11 + }, + "IGV": { + "python": "3.8.3" + }, + "KHMER_UNIQUEKMERS": { + "khmer": "3.0.0a3" + }, + "MACS3_CALLPEAK": { + "macs3": "3.0.4" + }, + "MACS3_CONSENSUS": { + "python": "3.10.0", + "r-base": "4.1.1" + }, + "MERGED_LIBRARY_ATAQV_ATAQV": { + "ataqv": "1.3.1" + }, + "MERGED_LIBRARY_ATAQV_MKARV": { + "ataqv": "1.3.1" + }, + "MERGED_LIBRARY_DEEPTOOLS_PLOTFINGERPRINT": { + "deeptools": "3.5.6" + }, + "MERGED_LIBRARY_PICARD_COLLECTMULTIPLEMETRICS": { + "picard": "3.4.0" + }, + "MULTIQC_CUSTOM_PEAKS": { + "sed": 4.7 + }, + "PICARD_MARKDUPLICATES": { + "picard": "3.4.0" + }, + "PICARD_MERGESAMFILES_LIBRARY": { + "picard": "3.4.0" + }, + "PICARD_MERGESAMFILES_REPLICATE": { + "picard": "3.4.0" + }, + "PLOT_HOMER_ANNOTATEPEAKS": { + "r-base": "4.0.3" + }, + "PLOT_MACS3_QC": { + "r-base": "4.0.3" + }, + "SAMPLESHEET_CHECK": { + "python": "3.8.3" + }, + "SAMTOOLS_FAIDX": { + "samtools": "1.23.1" + }, + "SAMTOOLS_FLAGSTAT": { + "samtools": 1.24 + }, + "SAMTOOLS_IDXSTATS": { + "samtools": 1.24 + }, + "SAMTOOLS_INDEX": { + "samtools": 1.24 + }, + "SAMTOOLS_SORT": { + "samtools": 1.24 + }, + "SAMTOOLS_STATS": { + "samtools": 1.24 + }, + "SUBREAD_FEATURECOUNTS": { + "subread": "2.1.1" + }, + "TRIMGALORE": { + "trimgalore": "2.1.0" + }, + "TSS_EXTRACT": { + "sed": 4.7 + }, + "UCSC_BEDGRAPHTOBIGWIG": { + "ucsc": 482 + } + } + ], + "timestamp": "2026-07-26T19:23:50.832348941", + "meta": { + "nf-test": "0.9.4", + "nextflow": "25.10.4" + } + } +} \ No newline at end of file diff --git a/tests/controls.nf.test.snap b/tests/controls.nf.test.snap index 201eb5b3..5502542e 100644 --- a/tests/controls.nf.test.snap +++ b/tests/controls.nf.test.snap @@ -1,57 +1,72 @@ { "-profile test_controls": { "content": [ - 264, + 268, { "BAMTOOLS_FILTER": { - "samtools": "1.15.1", - "bamtools": "2.5.2" + "bamtools": "2.5.2", + "samtools": "1.15.1" }, "BAM_REMOVE_ORPHANS": { "samtools": "1.15.1" }, "BEDTOOLS_GENOMECOV": { "bedtools": "2.31.1", - "sort": 9.5 + "sort": "sort (GNU coreutils) 9.5" }, "BWA_INDEX": { "bwa": "0.7.19-r1273" }, "BWA_MEM": { - "bwa": "0.7.17-r1188", - "samtools": "1.19.2" + "bwa": "0.7.19-r1273", + "samtools": "1.22.1" }, "DEEPTOOLS_COMPUTEMATRIX_REFERENCE_POINT": { - "deeptools": "3.5.5" + "deeptools": "3.5.6" }, "DEEPTOOLS_COMPUTEMATRIX_SCALE_REGIONS": { - "deeptools": "3.5.5" + "deeptools": "3.5.6" }, "DEEPTOOLS_PLOTHEATMAP": { - "deeptools": "3.5.5" + "deeptools": "3.5.6" }, "DEEPTOOLS_PLOTPROFILE": { - "deeptools": "3.5.5" + "deeptools": "3.5.6" }, "DESEQ2_QC": { - "r-base": "4.0.3", - "bioconductor-deseq2": "1.28.0" + "bioconductor-deseq2": "1.28.0", + "r-base": "4.0.3" }, "FASTQC": { "fastqc": "0.12.1" }, + "FEATURECOUNTS_MERGE": { + "sed": 4.7 + }, "FRIP_SCORE": { "bedtools": "2.30.0", "samtools": "1.15.1" }, + "GENOME_BLACKLIST_REGIONS": { + "bedtools": "2.30.0" + }, + "GET_AUTOSOMES": { + "python": "3.8.3" + }, + "GTF2BED": { + "perl": "5.26.2" + }, "HOMER_ANNOTATEPEAKS": { "homer": 4.11 }, "IGV": { "python": "3.8.3" }, + "KHMER_UNIQUEKMERS": { + "khmer": "3.0.0a3" + }, "MACS3_CALLPEAK": { - "macs3": "3.0.1" + "macs3": "3.0.4" }, "MACS3_CONSENSUS": { "python": "3.10.0", @@ -64,16 +79,16 @@ "ataqv": "1.3.1" }, "MERGED_LIBRARY_DEEPTOOLS_PLOTFINGERPRINT": { - "deeptools": "3.5.5" + "deeptools": "3.5.6" }, "MERGED_LIBRARY_PICARD_COLLECTMULTIPLEMETRICS": { - "picard": "3.0.0" + "picard": "3.4.0" }, "MULTIQC_CUSTOM_PEAKS": { "sed": 4.7 }, "PICARD_MARKDUPLICATES": { - "picard": "3.1.1" + "picard": "3.4.0" }, "PICARD_MERGESAMFILES_LIBRARY": { "picard": "3.4.0" @@ -90,32 +105,35 @@ "SAMPLESHEET_CHECK": { "python": "3.8.3" }, + "SAMTOOLS_FAIDX": { + "samtools": "1.23.1" + }, "SAMTOOLS_FLAGSTAT": { - "samtools": "1.19.2" + "samtools": 1.24 }, "SAMTOOLS_IDXSTATS": { - "samtools": "1.19.2" + "samtools": 1.24 }, "SAMTOOLS_INDEX": { - "samtools": "1.19.2" + "samtools": 1.24 }, "SAMTOOLS_SORT": { - "samtools": "1.19.2" + "samtools": 1.24 }, "SAMTOOLS_STATS": { - "samtools": "1.19.2" + "samtools": 1.24 }, "SUBREAD_FEATURECOUNTS": { - "subread": "2.0.1" + "subread": "2.1.1" }, "TRIMGALORE": { - "trimgalore": "0.6.10" + "trimgalore": "2.1.0" }, - "UCSC_BEDGRAPHTOBIGWIG": { - "ucsc": 445 + "TSS_EXTRACT": { + "sed": 4.7 }, - "Workflow": { - "nf-core/atacseq": "v2.2.0dev" + "UCSC_BEDGRAPHTOBIGWIG": { + "ucsc": 482 } }, [ @@ -284,13 +302,16 @@ "bwa/merged_library/macs3/broad_peak/OSMOTIC_STRESS_T15_PE_REP1.mLb.clN_peaks.gappedPeak", "bwa/merged_library/macs3/broad_peak/OSMOTIC_STRESS_T15_PE_REP1.mLb.clN_peaks.xls", "bwa/merged_library/macs3/broad_peak/consensus", + "bwa/merged_library/macs3/broad_peak/consensus/consensus_peaks.mLb.clN.PE.featureCounts.tsv", + "bwa/merged_library/macs3/broad_peak/consensus/consensus_peaks.mLb.clN.PE.featureCounts.tsv.summary", + "bwa/merged_library/macs3/broad_peak/consensus/consensus_peaks.mLb.clN.SE.featureCounts.tsv", + "bwa/merged_library/macs3/broad_peak/consensus/consensus_peaks.mLb.clN.SE.featureCounts.tsv.summary", "bwa/merged_library/macs3/broad_peak/consensus/consensus_peaks.mLb.clN.annotatePeaks.txt", "bwa/merged_library/macs3/broad_peak/consensus/consensus_peaks.mLb.clN.bed", "bwa/merged_library/macs3/broad_peak/consensus/consensus_peaks.mLb.clN.boolean.intersect.plot.pdf", "bwa/merged_library/macs3/broad_peak/consensus/consensus_peaks.mLb.clN.boolean.intersect.txt", "bwa/merged_library/macs3/broad_peak/consensus/consensus_peaks.mLb.clN.boolean.txt", - "bwa/merged_library/macs3/broad_peak/consensus/consensus_peaks.mLb.clN.featureCounts.txt", - "bwa/merged_library/macs3/broad_peak/consensus/consensus_peaks.mLb.clN.featureCounts.txt.summary", + "bwa/merged_library/macs3/broad_peak/consensus/consensus_peaks.mLb.clN.featureCounts.tsv", "bwa/merged_library/macs3/broad_peak/consensus/consensus_peaks.mLb.clN.saf", "bwa/merged_library/macs3/broad_peak/consensus/deseq2", "bwa/merged_library/macs3/broad_peak/consensus/deseq2/R_sessionInfo.log", @@ -333,34 +354,34 @@ "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T0_PE_REP1.mLb.clN.CollectMultipleMetrics.insert_size_metrics", "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T0_PE_REP1.mLb.clN.CollectMultipleMetrics.quality_by_cycle_metrics", "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T0_PE_REP1.mLb.clN.CollectMultipleMetrics.quality_distribution_metrics", - "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T0_PE_REP1.mLb.mkD.sorted.MarkDuplicates.metrics.txt", + "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T0_PE_REP1.mLb.mkD.sorted.metrics.txt", "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T0_PE_REP2.mLb.clN.CollectMultipleMetrics.alignment_summary_metrics", "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T0_PE_REP2.mLb.clN.CollectMultipleMetrics.base_distribution_by_cycle_metrics", "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T0_PE_REP2.mLb.clN.CollectMultipleMetrics.insert_size_metrics", "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T0_PE_REP2.mLb.clN.CollectMultipleMetrics.quality_by_cycle_metrics", "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T0_PE_REP2.mLb.clN.CollectMultipleMetrics.quality_distribution_metrics", - "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T0_PE_REP2.mLb.mkD.sorted.MarkDuplicates.metrics.txt", + "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T0_PE_REP2.mLb.mkD.sorted.metrics.txt", "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T100_SE_REP1.mLb.clN.CollectMultipleMetrics.alignment_summary_metrics", "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T100_SE_REP1.mLb.clN.CollectMultipleMetrics.base_distribution_by_cycle_metrics", "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T100_SE_REP1.mLb.clN.CollectMultipleMetrics.quality_by_cycle_metrics", "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T100_SE_REP1.mLb.clN.CollectMultipleMetrics.quality_distribution_metrics", - "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T100_SE_REP1.mLb.mkD.sorted.MarkDuplicates.metrics.txt", + "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T100_SE_REP1.mLb.mkD.sorted.metrics.txt", "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T100_SE_REP2.mLb.clN.CollectMultipleMetrics.alignment_summary_metrics", "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T100_SE_REP2.mLb.clN.CollectMultipleMetrics.base_distribution_by_cycle_metrics", "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T100_SE_REP2.mLb.clN.CollectMultipleMetrics.quality_by_cycle_metrics", "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T100_SE_REP2.mLb.clN.CollectMultipleMetrics.quality_distribution_metrics", - "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T100_SE_REP2.mLb.mkD.sorted.MarkDuplicates.metrics.txt", + "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T100_SE_REP2.mLb.mkD.sorted.metrics.txt", "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T150_SE_REP1.mLb.clN.CollectMultipleMetrics.alignment_summary_metrics", "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T150_SE_REP1.mLb.clN.CollectMultipleMetrics.base_distribution_by_cycle_metrics", "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T150_SE_REP1.mLb.clN.CollectMultipleMetrics.quality_by_cycle_metrics", "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T150_SE_REP1.mLb.clN.CollectMultipleMetrics.quality_distribution_metrics", - "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T150_SE_REP1.mLb.mkD.sorted.MarkDuplicates.metrics.txt", + "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T150_SE_REP1.mLb.mkD.sorted.metrics.txt", "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T15_PE_REP1.mLb.clN.CollectMultipleMetrics.alignment_summary_metrics", "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T15_PE_REP1.mLb.clN.CollectMultipleMetrics.base_distribution_by_cycle_metrics", "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T15_PE_REP1.mLb.clN.CollectMultipleMetrics.insert_size_metrics", "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T15_PE_REP1.mLb.clN.CollectMultipleMetrics.quality_by_cycle_metrics", "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T15_PE_REP1.mLb.clN.CollectMultipleMetrics.quality_distribution_metrics", - "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T15_PE_REP1.mLb.mkD.sorted.MarkDuplicates.metrics.txt", + "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T15_PE_REP1.mLb.mkD.sorted.metrics.txt", "bwa/merged_library/picard_metrics/pdf", "bwa/merged_library/picard_metrics/pdf/OSMOTIC_STRESS_T0_PE_REP1.mLb.clN.CollectMultipleMetrics.base_distribution_by_cycle.pdf", "bwa/merged_library/picard_metrics/pdf/OSMOTIC_STRESS_T0_PE_REP1.mLb.clN.CollectMultipleMetrics.insert_size_histogram.pdf", @@ -448,13 +469,16 @@ "bwa/merged_replicate/macs3/broad_peak/OSMOTIC_STRESS_T100_SE.mRp.clN_peaks.gappedPeak", "bwa/merged_replicate/macs3/broad_peak/OSMOTIC_STRESS_T100_SE.mRp.clN_peaks.xls", "bwa/merged_replicate/macs3/broad_peak/consensus", + "bwa/merged_replicate/macs3/broad_peak/consensus/consensus_peaks.mRp.clN.PE.featureCounts.tsv", + "bwa/merged_replicate/macs3/broad_peak/consensus/consensus_peaks.mRp.clN.PE.featureCounts.tsv.summary", + "bwa/merged_replicate/macs3/broad_peak/consensus/consensus_peaks.mRp.clN.SE.featureCounts.tsv", + "bwa/merged_replicate/macs3/broad_peak/consensus/consensus_peaks.mRp.clN.SE.featureCounts.tsv.summary", "bwa/merged_replicate/macs3/broad_peak/consensus/consensus_peaks.mRp.clN.annotatePeaks.txt", "bwa/merged_replicate/macs3/broad_peak/consensus/consensus_peaks.mRp.clN.bed", "bwa/merged_replicate/macs3/broad_peak/consensus/consensus_peaks.mRp.clN.boolean.intersect.plot.pdf", "bwa/merged_replicate/macs3/broad_peak/consensus/consensus_peaks.mRp.clN.boolean.intersect.txt", "bwa/merged_replicate/macs3/broad_peak/consensus/consensus_peaks.mRp.clN.boolean.txt", - "bwa/merged_replicate/macs3/broad_peak/consensus/consensus_peaks.mRp.clN.featureCounts.txt", - "bwa/merged_replicate/macs3/broad_peak/consensus/consensus_peaks.mRp.clN.featureCounts.txt.summary", + "bwa/merged_replicate/macs3/broad_peak/consensus/consensus_peaks.mRp.clN.featureCounts.tsv", "bwa/merged_replicate/macs3/broad_peak/consensus/consensus_peaks.mRp.clN.saf", "bwa/merged_replicate/macs3/broad_peak/consensus/deseq2", "bwa/merged_replicate/macs3/broad_peak/consensus/deseq2/R_sessionInfo.log", @@ -482,8 +506,8 @@ "bwa/merged_replicate/macs3/broad_peak/qc/macs3_peak.mRp.clN.plots.pdf", "bwa/merged_replicate/macs3/broad_peak/qc/macs3_peak.mRp.clN.summary.txt", "bwa/merged_replicate/picard_metrics", - "bwa/merged_replicate/picard_metrics/OSMOTIC_STRESS_T0_PE.mRp.clN.sorted.MarkDuplicates.metrics.txt", - "bwa/merged_replicate/picard_metrics/OSMOTIC_STRESS_T100_SE.mRp.clN.sorted.MarkDuplicates.metrics.txt", + "bwa/merged_replicate/picard_metrics/OSMOTIC_STRESS_T0_PE.mRp.clN.sorted.metrics.txt", + "bwa/merged_replicate/picard_metrics/OSMOTIC_STRESS_T100_SE.mRp.clN.sorted.metrics.txt", "bwa/merged_replicate/samtools_stats", "bwa/merged_replicate/samtools_stats/OSMOTIC_STRESS_T0_PE.mRp.clN.sorted.bam.flagstat", "bwa/merged_replicate/samtools_stats/OSMOTIC_STRESS_T0_PE.mRp.clN.sorted.bam.idxstats", @@ -922,110 +946,120 @@ "sourcesanspro-semiboldit.woff:md5,f1d255aa459786dfc6aa2e488ac01245", "index.html:md5,bf7747be761e56ad7c54c842ac88461a", "ataqv.js:md5,feb291b7839e9e43ed304565e3a605d9", - "configuration.js:md5,6ba17d7ec7e2247e9b970bd3b0ce9a96", + "configuration.js:md5,5fa99e6c27050fed09c3764512c56c96", "d3.min.js:md5,db69fb2626a71a286ee772d673138aca", "datatables.min.js:md5,e369b872620dadb05e4eb555b81f9112", "jszip.min.js:md5,09e492cb492ffa75484bbe10f1f721d1", "OSMOTIC_STRESS_T0_PE_REP1.mLb.clN.scale_factor.txt:md5,5afe7d16ac432b483454d7406dd4b72e", - "OSMOTIC_STRESS_T0_PE_REP2.mLb.clN.scale_factor.txt:md5,6caa1b14d21350752628436355eabef5", + "OSMOTIC_STRESS_T0_PE_REP2.mLb.clN.scale_factor.txt:md5,816f20d069360ccb44e8e565b6b0a4e6", "OSMOTIC_STRESS_T100_SE_REP1.mLb.clN.scale_factor.txt:md5,a9b555d96448f5ac9bdb6f4526f86341", - "OSMOTIC_STRESS_T100_SE_REP2.mLb.clN.scale_factor.txt:md5,e3ac13dff612e52453ccf3bc4692c2ea", - "OSMOTIC_STRESS_T150_SE_REP1.mLb.clN.scale_factor.txt:md5,bf338379ef0251df310edcbe41668fee", - "OSMOTIC_STRESS_T15_PE_REP1.mLb.clN.scale_factor.txt:md5,57e48407c6ada9d84166e734ca43a5ed", + "OSMOTIC_STRESS_T100_SE_REP2.mLb.clN.scale_factor.txt:md5,618690cf55da217e9cd1324f38aab6de", + "OSMOTIC_STRESS_T150_SE_REP1.mLb.clN.scale_factor.txt:md5,e2a4023f321415738eb727cd3bcbce5b", + "OSMOTIC_STRESS_T15_PE_REP1.mLb.clN.scale_factor.txt:md5,91db8a99954d4096bdb48be8c20fc4be", "OSMOTIC_STRESS_T0_PE_REP1.mLb.clN_peaks.broadPeak:md5,c5b53511f764fb205886daa4f2ab00ec", - "OSMOTIC_STRESS_T0_PE_REP1.mLb.clN_peaks.gappedPeak:md5,50b3a0ebae79dc153e56a37658bfab6f", - "OSMOTIC_STRESS_T0_PE_REP1.mLb.clN_peaks.xls:md5,41446ba0c0eb56ba34ba518658d76e89", - "OSMOTIC_STRESS_T0_PE_REP2.mLb.clN_peaks.broadPeak:md5,47246433d4cb8625d047b25c84d25857", - "OSMOTIC_STRESS_T0_PE_REP2.mLb.clN_peaks.gappedPeak:md5,43d571030847b7cc2b21b0f61cc12c16", - "OSMOTIC_STRESS_T0_PE_REP2.mLb.clN_peaks.xls:md5,c55f63c9db41018a430158453e0538af", + "OSMOTIC_STRESS_T0_PE_REP1.mLb.clN_peaks.gappedPeak:md5,adca40deef4439d757f656ceb2d434e4", + "OSMOTIC_STRESS_T0_PE_REP1.mLb.clN_peaks.xls:md5,f3e47ff619d7b4c0e2d543d1609927a4", + "OSMOTIC_STRESS_T0_PE_REP2.mLb.clN_peaks.broadPeak:md5,3e8ae758c789ca16094a3d96718f7be3", + "OSMOTIC_STRESS_T0_PE_REP2.mLb.clN_peaks.gappedPeak:md5,da2909b11601c515cc1d431a5ef67bcb", + "OSMOTIC_STRESS_T0_PE_REP2.mLb.clN_peaks.xls:md5,9e9ca58826c2ab3e70c06a533e7dbae1", "OSMOTIC_STRESS_T100_SE_REP1.mLb.clN_peaks.broadPeak:md5,171bbf48bda913bf702954c20dd57fcb", - "OSMOTIC_STRESS_T100_SE_REP1.mLb.clN_peaks.gappedPeak:md5,d101f70984161baefc31fb7536b3835e", - "OSMOTIC_STRESS_T100_SE_REP1.mLb.clN_peaks.xls:md5,d375f257642d942eaeeeef93541a8257", - "OSMOTIC_STRESS_T100_SE_REP2.mLb.clN_peaks.broadPeak:md5,c163607903fd2e2ae38db046fdd787f0", - "OSMOTIC_STRESS_T100_SE_REP2.mLb.clN_peaks.gappedPeak:md5,71e4536c7172f000dd66c39f39396e86", - "OSMOTIC_STRESS_T100_SE_REP2.mLb.clN_peaks.xls:md5,4a2e2c3ac0b87ff4a3cc5439015cfc5d", - "OSMOTIC_STRESS_T150_SE_REP1.mLb.clN_peaks.broadPeak:md5,49b0ebc586b9e59b72a1d6c35a07c5f9", - "OSMOTIC_STRESS_T150_SE_REP1.mLb.clN_peaks.gappedPeak:md5,c55133b8532173de8fe7b3b1f51e6190", - "OSMOTIC_STRESS_T150_SE_REP1.mLb.clN_peaks.xls:md5,cd2ee19135ebda5b33b953b8d5039390", - "OSMOTIC_STRESS_T15_PE_REP1.mLb.clN_peaks.broadPeak:md5,5fec6a7a54bfd5fc2178dc2408664e9b", - "OSMOTIC_STRESS_T15_PE_REP1.mLb.clN_peaks.gappedPeak:md5,775585b2d83a50b483d28f82415b9bdb", - "OSMOTIC_STRESS_T15_PE_REP1.mLb.clN_peaks.xls:md5,fb6af0f9cf4506c25b041e2ace8953cb", - "consensus_peaks.mLb.clN.bed:md5,39dda87fd18c5f238ccba441c2a49d0e", - "consensus_peaks.mLb.clN.boolean.intersect.txt:md5,937220dde650b860d42373294d96f002", - "consensus_peaks.mLb.clN.boolean.txt:md5,463563ea22099f42efe11e4a7c0548c3", - "consensus_peaks.mLb.clN.saf:md5,9121e62a952c9e58b046c2776882f9b6", + "OSMOTIC_STRESS_T100_SE_REP1.mLb.clN_peaks.gappedPeak:md5,6ac2f1603586b83ba2591f9c90fd13c9", + "OSMOTIC_STRESS_T100_SE_REP1.mLb.clN_peaks.xls:md5,ec811f9a7b8f5a517caf7b3a2f4988b8", + "OSMOTIC_STRESS_T100_SE_REP2.mLb.clN_peaks.broadPeak:md5,d61e6f9675514a5b3c343e78b96c9111", + "OSMOTIC_STRESS_T100_SE_REP2.mLb.clN_peaks.gappedPeak:md5,fb8556e521d4c254f57ae3fdb67c9b64", + "OSMOTIC_STRESS_T100_SE_REP2.mLb.clN_peaks.xls:md5,3f415d834d3f9e5939dc8601ff0898b5", + "OSMOTIC_STRESS_T150_SE_REP1.mLb.clN_peaks.broadPeak:md5,8f44ebfeb1ce0f3d01e915f3759b7a4f", + "OSMOTIC_STRESS_T150_SE_REP1.mLb.clN_peaks.gappedPeak:md5,fec3059e1a1b77fa791119d8a4d6d4c5", + "OSMOTIC_STRESS_T150_SE_REP1.mLb.clN_peaks.xls:md5,7df7f8827964cf1a29855e4c91f67246", + "OSMOTIC_STRESS_T15_PE_REP1.mLb.clN_peaks.broadPeak:md5,72db339e1a71e9bce5be245aab548a76", + "OSMOTIC_STRESS_T15_PE_REP1.mLb.clN_peaks.gappedPeak:md5,7a10a324776281b675922de41c21e9f7", + "OSMOTIC_STRESS_T15_PE_REP1.mLb.clN_peaks.xls:md5,d10e9cad50ff99d58776f6b198f65936", + "consensus_peaks.mLb.clN.PE.featureCounts.tsv:md5,2d220f8c6042e5c27563bf85ad8183bf", + "consensus_peaks.mLb.clN.PE.featureCounts.tsv.summary:md5,4735c591887ec6a31e7697e4a6ffa910", + "consensus_peaks.mLb.clN.SE.featureCounts.tsv:md5,996cd7520a291ff0fb6a0754a2b29e41", + "consensus_peaks.mLb.clN.SE.featureCounts.tsv.summary:md5,23cde0d135d36c6eb793283d68d2389f", + "consensus_peaks.mLb.clN.bed:md5,6a7d64f82769ab09538bbca05c0de568", + "consensus_peaks.mLb.clN.boolean.intersect.txt:md5,acb006189a63e3ab725c394f363d81de", + "consensus_peaks.mLb.clN.boolean.txt:md5,3be6c0c02305279fc537161e5af2971c", + "consensus_peaks.mLb.clN.featureCounts.tsv:md5,b46ccdcdeee5c385a09ff83f97564df9", + "consensus_peaks.mLb.clN.saf:md5,8e7b6b455fc3da0928de3a0f0b935022", "R_sessionInfo.log:md5,fb0da0d7ad6994ed66a8e68348b19676", - "OSMOTIC_STRESS_T0_PE_REP1.size_factors.txt:md5,75af17c0333c4da8085c8fbd63b7361a", - "OSMOTIC_STRESS_T0_PE_REP2.size_factors.txt:md5,ab7764c3b53e97833c0cee9cbc60ead4", - "OSMOTIC_STRESS_T100_SE_REP1.size_factors.txt:md5,5eaf69e0d03d4a1a7f542d8cab107f0c", - "OSMOTIC_STRESS_T100_SE_REP2.size_factors.txt:md5,8004916b9169d86825517a3a8993cf6f", - "OSMOTIC_STRESS_T150_SE_REP1.size_factors.txt:md5,531e5674c4c011a78dec0ed280ec4522", - "OSMOTIC_STRESS_T15_PE_REP1.size_factors.txt:md5,66689c145a16b7c36586cbcc8bf1a992", + "OSMOTIC_STRESS_T0_PE_REP1.size_factors.txt:md5,d76b66bfad30145a141325d3d8dd82f9", + "OSMOTIC_STRESS_T0_PE_REP2.size_factors.txt:md5,d79d777d744a4d962c385613525991c3", + "OSMOTIC_STRESS_T100_SE_REP1.size_factors.txt:md5,f21b6a3218e4292a5e53dcf82dcd3003", + "OSMOTIC_STRESS_T100_SE_REP2.size_factors.txt:md5,3f479d2f4926765cce7940b9317018f2", + "OSMOTIC_STRESS_T150_SE_REP1.size_factors.txt:md5,45e7ef06e0fdfbffc5ee114d98f01839", + "OSMOTIC_STRESS_T15_PE_REP1.size_factors.txt:md5,dd00ebf18b7918eb73538e6cd3909358", "OSMOTIC_STRESS_T0_PE_REP1.mLb.clN_peaks.FRiP_mqc.tsv:md5,085031e28b891cef205a81c9b6f34df4", "OSMOTIC_STRESS_T0_PE_REP1.mLb.clN_peaks.count_mqc.tsv:md5,01eada7dd6240d2af66efaf0105f801e", - "OSMOTIC_STRESS_T0_PE_REP2.mLb.clN_peaks.FRiP_mqc.tsv:md5,160b7f88062c5ad1317e177bcf375236", - "OSMOTIC_STRESS_T0_PE_REP2.mLb.clN_peaks.count_mqc.tsv:md5,363b299f1ac39d86230789177e3ba2d9", + "OSMOTIC_STRESS_T0_PE_REP2.mLb.clN_peaks.FRiP_mqc.tsv:md5,602c8df9e26c8e057d76eaa1a133f513", + "OSMOTIC_STRESS_T0_PE_REP2.mLb.clN_peaks.count_mqc.tsv:md5,5de4f043eb01162f21c21e0cdf608f91", "OSMOTIC_STRESS_T100_SE_REP1.mLb.clN_peaks.FRiP_mqc.tsv:md5,e1c3ca6628ab103b34063f0bc0fd6fa1", "OSMOTIC_STRESS_T100_SE_REP1.mLb.clN_peaks.count_mqc.tsv:md5,d9f63fd5f5f535c5c62bdbee9b9095aa", - "OSMOTIC_STRESS_T100_SE_REP2.mLb.clN_peaks.FRiP_mqc.tsv:md5,a904ac58084ee573989f28809034d5c0", - "OSMOTIC_STRESS_T100_SE_REP2.mLb.clN_peaks.count_mqc.tsv:md5,49a15784f9ab6d9eff73508e2f463cce", - "OSMOTIC_STRESS_T150_SE_REP1.mLb.clN_peaks.FRiP_mqc.tsv:md5,ab8e5b2a2208d2c7f899ed7a8cf67845", + "OSMOTIC_STRESS_T100_SE_REP2.mLb.clN_peaks.FRiP_mqc.tsv:md5,e3940e03c0309b06e25d412e22078f57", + "OSMOTIC_STRESS_T100_SE_REP2.mLb.clN_peaks.count_mqc.tsv:md5,c584070f8983b196453026b463a6bffd", + "OSMOTIC_STRESS_T150_SE_REP1.mLb.clN_peaks.FRiP_mqc.tsv:md5,582520ff525281336452eb4761b52e78", "OSMOTIC_STRESS_T150_SE_REP1.mLb.clN_peaks.count_mqc.tsv:md5,aeb72fa43a2bf33c6799ba5e6f030273", - "OSMOTIC_STRESS_T15_PE_REP1.mLb.clN_peaks.FRiP_mqc.tsv:md5,d355b0d932962b8eb42dbecd1bcbc5fa", + "OSMOTIC_STRESS_T15_PE_REP1.mLb.clN_peaks.FRiP_mqc.tsv:md5,876ec6709a7ec06e1ec7d2f502af0ac5", "OSMOTIC_STRESS_T15_PE_REP1.mLb.clN_peaks.count_mqc.tsv:md5,6718411a3dd59b2e62e9758c401b14a2", - "macs3_annotatePeaks.mLb.clN.summary.txt:md5,0aef404ef488aefb3dd7a72826c28db8", - "macs3_annotatePeaks.mLb.clN.summary_mqc.tsv:md5,a24fa1102eb240a1108f92e8988f39a0", + "macs3_annotatePeaks.mLb.clN.summary.txt:md5,3ff8d12f5eae22308bb3afe873ccc8c9", + "macs3_annotatePeaks.mLb.clN.summary_mqc.tsv:md5,7faa6ca1d6da087f456f92921e769989", "OSMOTIC_STRESS_T0_PE_REP1.mLb.clN.sorted.bam.flagstat:md5,35b6851dd4960fbcf0353b2b998ee467", "OSMOTIC_STRESS_T0_PE_REP1.mLb.clN.sorted.bam.idxstats:md5,dda689aa8a4b89be95e687ecdd03827b", "OSMOTIC_STRESS_T0_PE_REP1.mLb.mkD.sorted.bam.flagstat:md5,828f11cb1790a805192dc31281ad2e3f", "OSMOTIC_STRESS_T0_PE_REP1.mLb.mkD.sorted.bam.idxstats:md5,140d6011382f7f47396bfe3c922fe91c", - "OSMOTIC_STRESS_T0_PE_REP2.mLb.clN.sorted.bam.flagstat:md5,4d9ca367550a721dd0aaeaab58421bdb", - "OSMOTIC_STRESS_T0_PE_REP2.mLb.clN.sorted.bam.idxstats:md5,cdc0d96cb1c0e5b48ba2c418233f7a94", - "OSMOTIC_STRESS_T0_PE_REP2.mLb.mkD.sorted.bam.flagstat:md5,8d0f37dc5986deee90d63bd439874882", - "OSMOTIC_STRESS_T0_PE_REP2.mLb.mkD.sorted.bam.idxstats:md5,a77125d053253ed788969bfaedbfc455", + "OSMOTIC_STRESS_T0_PE_REP2.mLb.clN.sorted.bam.flagstat:md5,69f9e83c32e2a3fadf59188e3ef3e894", + "OSMOTIC_STRESS_T0_PE_REP2.mLb.clN.sorted.bam.idxstats:md5,678fa8d9637a41488ac97ddf818d8b36", + "OSMOTIC_STRESS_T0_PE_REP2.mLb.mkD.sorted.bam.flagstat:md5,fcd2c20d6fc99776693a143d5b932ca5", + "OSMOTIC_STRESS_T0_PE_REP2.mLb.mkD.sorted.bam.idxstats:md5,d3ceb83f80afec7154fe635a0028b4d8", "OSMOTIC_STRESS_T100_SE_REP1.mLb.clN.sorted.bam.flagstat:md5,f9f155991b027ae0009c110884f5abf9", "OSMOTIC_STRESS_T100_SE_REP1.mLb.clN.sorted.bam.idxstats:md5,3d31ff2b94710969f532b1734480b92b", "OSMOTIC_STRESS_T100_SE_REP1.mLb.mkD.sorted.bam.flagstat:md5,e3d0421cc9477abb16c32d9b3cf02387", "OSMOTIC_STRESS_T100_SE_REP1.mLb.mkD.sorted.bam.idxstats:md5,c216287572279f13283dcdf22a4bc8e4", - "OSMOTIC_STRESS_T100_SE_REP2.mLb.clN.sorted.bam.flagstat:md5,3c313eb066e4a38fb3fd81fed8267492", - "OSMOTIC_STRESS_T100_SE_REP2.mLb.clN.sorted.bam.idxstats:md5,80d6c838ba770ac3f736ca076871108d", - "OSMOTIC_STRESS_T100_SE_REP2.mLb.mkD.sorted.bam.flagstat:md5,6f26205e50a841c2cd65ccc87ec70eb5", - "OSMOTIC_STRESS_T100_SE_REP2.mLb.mkD.sorted.bam.idxstats:md5,a0b8823060c04c5d68255b9c558fc414", - "OSMOTIC_STRESS_T150_SE_REP1.mLb.clN.sorted.bam.flagstat:md5,5b01c6b579255502fe3ce7a7d8096552", - "OSMOTIC_STRESS_T150_SE_REP1.mLb.clN.sorted.bam.idxstats:md5,8ab305c4b298cc942dc2f9d11ea3bce2", - "OSMOTIC_STRESS_T150_SE_REP1.mLb.mkD.sorted.bam.flagstat:md5,5b26ec19f5770acfd55d523de688a3fe", - "OSMOTIC_STRESS_T150_SE_REP1.mLb.mkD.sorted.bam.idxstats:md5,a16727dd09a8ae9840851b682ab37854", - "OSMOTIC_STRESS_T15_PE_REP1.mLb.clN.sorted.bam.flagstat:md5,3f51a059a43e027213af32611c93dfe5", - "OSMOTIC_STRESS_T15_PE_REP1.mLb.clN.sorted.bam.idxstats:md5,2a77e286b62e4f2567024ba7a2192066", - "OSMOTIC_STRESS_T15_PE_REP1.mLb.mkD.sorted.bam.flagstat:md5,7aed9e40456bf326010231d9f3c1bf33", - "OSMOTIC_STRESS_T15_PE_REP1.mLb.mkD.sorted.bam.idxstats:md5,7af9840564eee65e3ddb1a0765787ac9", - "OSMOTIC_STRESS_T0_PE.mRp.clN.scale_factor.txt:md5,b9a30528c9329b0600ff3c9a7658c12e", - "OSMOTIC_STRESS_T100_SE.mRp.clN.scale_factor.txt:md5,730eec38d30794964d7f52ceae006582", - "OSMOTIC_STRESS_T0_PE.mRp.clN_peaks.broadPeak:md5,185644d17b2ea602c990c8540735f01d", - "OSMOTIC_STRESS_T0_PE.mRp.clN_peaks.gappedPeak:md5,39211adc421cce0c0c14e887ea0a4d6c", - "OSMOTIC_STRESS_T0_PE.mRp.clN_peaks.xls:md5,d8bf42b50905eac9cd3e387fae92a617", - "OSMOTIC_STRESS_T100_SE.mRp.clN_peaks.broadPeak:md5,52b2837492d44cb7e5549f183c92f8de", - "OSMOTIC_STRESS_T100_SE.mRp.clN_peaks.gappedPeak:md5,bb6ef1e40a2bad3b27ecb87d5890af7e", - "OSMOTIC_STRESS_T100_SE.mRp.clN_peaks.xls:md5,c725baa3370fd86f5707e01dbed81c7c", - "consensus_peaks.mRp.clN.bed:md5,09f7a0a60739a9682dfe296bdea96421", + "OSMOTIC_STRESS_T100_SE_REP2.mLb.clN.sorted.bam.flagstat:md5,839440ef66553433166e265e79db6eae", + "OSMOTIC_STRESS_T100_SE_REP2.mLb.clN.sorted.bam.idxstats:md5,466be87abe64ed73a9714fa5fac6a137", + "OSMOTIC_STRESS_T100_SE_REP2.mLb.mkD.sorted.bam.flagstat:md5,c4cd9237f8373b8f7a84851d7d0530f4", + "OSMOTIC_STRESS_T100_SE_REP2.mLb.mkD.sorted.bam.idxstats:md5,acdc7649de86409b0fbcf6052b64ba1e", + "OSMOTIC_STRESS_T150_SE_REP1.mLb.clN.sorted.bam.flagstat:md5,86ba63b9e1d2fbc3d95488557315105a", + "OSMOTIC_STRESS_T150_SE_REP1.mLb.clN.sorted.bam.idxstats:md5,dc506bc379328fcbc34558931e21bbe3", + "OSMOTIC_STRESS_T150_SE_REP1.mLb.mkD.sorted.bam.flagstat:md5,00a9eb297b29c4b43095ddb2d5a06df3", + "OSMOTIC_STRESS_T150_SE_REP1.mLb.mkD.sorted.bam.idxstats:md5,e765400df8443db2d29a7f9c4c7e1b97", + "OSMOTIC_STRESS_T15_PE_REP1.mLb.clN.sorted.bam.flagstat:md5,eb12ff8695703161276da457c9c30de5", + "OSMOTIC_STRESS_T15_PE_REP1.mLb.clN.sorted.bam.idxstats:md5,bbff2deab1453874a3afa52e1677901d", + "OSMOTIC_STRESS_T15_PE_REP1.mLb.mkD.sorted.bam.flagstat:md5,8d4a49f8a3fe5a36b38e17e4afd1f5d3", + "OSMOTIC_STRESS_T15_PE_REP1.mLb.mkD.sorted.bam.idxstats:md5,9bab2110046e1ed7ab2111303e7db5c0", + "OSMOTIC_STRESS_T0_PE.mRp.clN.scale_factor.txt:md5,e1ce0e8f48a0df9bfc61b0c614d7bb9c", + "OSMOTIC_STRESS_T100_SE.mRp.clN.scale_factor.txt:md5,af2d967e796c5129231b8d632dfdda87", + "OSMOTIC_STRESS_T0_PE.mRp.clN_peaks.broadPeak:md5,45336ce2d31d67ea8c56f03e18ec76f6", + "OSMOTIC_STRESS_T0_PE.mRp.clN_peaks.gappedPeak:md5,edb44531ce01afae39d5dc36133c03ce", + "OSMOTIC_STRESS_T0_PE.mRp.clN_peaks.xls:md5,63fd7e3cf43aa388246e677a8a87d151", + "OSMOTIC_STRESS_T100_SE.mRp.clN_peaks.broadPeak:md5,eb29b262e9e2cda7bfe967ffc0869de1", + "OSMOTIC_STRESS_T100_SE.mRp.clN_peaks.gappedPeak:md5,c13f1e4c898425a3fc63bbfa3bbbbdcb", + "OSMOTIC_STRESS_T100_SE.mRp.clN_peaks.xls:md5,fbb3d89ecc4ae841147fe2b8c853aa80", + "consensus_peaks.mRp.clN.PE.featureCounts.tsv:md5,73b12063c74317ed8b741fb039462ce4", + "consensus_peaks.mRp.clN.PE.featureCounts.tsv.summary:md5,c2caddeb40ce9ab8e42148e758faa4b5", + "consensus_peaks.mRp.clN.SE.featureCounts.tsv:md5,8bde09634c0476a154d0d9f24ed4adfb", + "consensus_peaks.mRp.clN.SE.featureCounts.tsv.summary:md5,4b634e2ae09651fefe5173493725ba91", + "consensus_peaks.mRp.clN.bed:md5,9d05ae155aa59ab54d5270c3a2da7459", "consensus_peaks.mRp.clN.boolean.intersect.txt:md5,a87fffa46d4050a48119917bbcf5252d", - "consensus_peaks.mRp.clN.boolean.txt:md5,decb8fd3c102c337d0e21fa4be18cd42", - "consensus_peaks.mRp.clN.saf:md5,22e0ad81994c6eb378b3361be3867498", + "consensus_peaks.mRp.clN.boolean.txt:md5,b85796c31be5360eb3793056de6f7854", + "consensus_peaks.mRp.clN.featureCounts.tsv:md5,a2b7971ed1bb037293fa23178593af79", + "consensus_peaks.mRp.clN.saf:md5,f7a135cd076a0409c53bc8165ecd4ff8", "R_sessionInfo.log:md5,fb0da0d7ad6994ed66a8e68348b19676", - "OSMOTIC_STRESS_T0_PE_REP1.size_factors.txt:md5,4110a9af22815faaec345fb07e729ed3", - "OSMOTIC_STRESS_T0_PE_REP2.size_factors.txt:md5,f279abbc922be5bb568acbf569df5b40", - "OSMOTIC_STRESS_T100_SE_REP1.size_factors.txt:md5,150b7b30d8e5a679e0728e5dd04ef309", - "OSMOTIC_STRESS_T100_SE_REP2.size_factors.txt:md5,eca73e1c36fb4dcc5f8f877cebcf0385", - "OSMOTIC_STRESS_T0_PE.mRp.clN_peaks.FRiP_mqc.tsv:md5,77e68c5e870602351948297838f8ca1d", + "OSMOTIC_STRESS_T0_PE_REP1.size_factors.txt:md5,b0a65e116f6ed2912ae54e6028638848", + "OSMOTIC_STRESS_T0_PE_REP2.size_factors.txt:md5,08f1041cccc50ba5b99700acc8e3f0e9", + "OSMOTIC_STRESS_T100_SE_REP1.size_factors.txt:md5,da2a3c62151a4680b26d2757ea37180b", + "OSMOTIC_STRESS_T100_SE_REP2.size_factors.txt:md5,29a976e74bebf12f401c052c57a233cb", + "OSMOTIC_STRESS_T0_PE.mRp.clN_peaks.FRiP_mqc.tsv:md5,2620209e4e6419d8545d9842acddb645", "OSMOTIC_STRESS_T0_PE.mRp.clN_peaks.count_mqc.tsv:md5,1b0ed83d8a0b7b7248fd8da81816bcb9", - "OSMOTIC_STRESS_T100_SE.mRp.clN_peaks.FRiP_mqc.tsv:md5,69282ee9e2eb7a11317fff5209564bbc", + "OSMOTIC_STRESS_T100_SE.mRp.clN_peaks.FRiP_mqc.tsv:md5,97a4086d0ca0e6fe96c4bf6864323f53", "OSMOTIC_STRESS_T100_SE.mRp.clN_peaks.count_mqc.tsv:md5,31e2de1f288e4e8191bcd0267d63828e", "macs3_annotatePeaks.mRp.clN.summary.txt:md5,96beab08431b5025c3a0c1c6efdde1ee", "macs3_annotatePeaks.mRp.clN.summary_mqc.tsv:md5,6c689c7ea46d435473766db948fe02c5", - "OSMOTIC_STRESS_T0_PE.mRp.clN.sorted.bam.flagstat:md5,60634034743a850c19091b008ad0d7f7", - "OSMOTIC_STRESS_T0_PE.mRp.clN.sorted.bam.idxstats:md5,0e5f7e4dc3d46e3cfcb47172524175b2", - "OSMOTIC_STRESS_T100_SE.mRp.clN.sorted.bam.flagstat:md5,cfa64d93e9604b521747179b268b5eaa", - "OSMOTIC_STRESS_T100_SE.mRp.clN.sorted.bam.idxstats:md5,3234e2237de090f8443246018063e755", + "OSMOTIC_STRESS_T0_PE.mRp.clN.sorted.bam.flagstat:md5,d560f3c4988251fdbf1cb35da841d39d", + "OSMOTIC_STRESS_T0_PE.mRp.clN.sorted.bam.idxstats:md5,34b61f771aad4d82cdd747ffba62474c", + "OSMOTIC_STRESS_T100_SE.mRp.clN.sorted.bam.flagstat:md5,34cf6a70329ac5f0038d9900673f9fea", + "OSMOTIC_STRESS_T100_SE.mRp.clN.sorted.bam.idxstats:md5,7e45d1561601ad26823656ccb784dbc6", "genome.fa:md5,4bad9f4b18056156a81f7f952abbe125", "genome.fa.fai:md5,6f4c0ce5258e6948135ad006e1f9ee1b", "deeptools_plot_fingerprint_counts_mlib_deeptools.txt:md5,15274f0c41d58f14d454fb0fb983e6fd", @@ -1033,52 +1067,52 @@ "mqc_cutadapt_filtered_reads_plot_1.txt:md5,b78f69173122f2cacf8121eaeb815382", "mqc_cutadapt_trimmed_sequences_plot_3_Counts.txt:md5,157073209c492b89badba367b1c57d83", "mqc_cutadapt_trimmed_sequences_plot_3_Obs_Exp.txt:md5,b04ae8b2ec27d71817ae7cb666888b9b", - "mqc_deeptools_fingerprint_plot_1.txt:md5,3b3676a0aea21f6f925f0d8fc77e13ae", - "mqc_fastqc_adapter_content_plot-2_1.txt:md5,7050d22f2eabdafb3d1eb81e736599af", + "mqc_deeptools_fingerprint_plot_1.txt:md5,c0dc7eb479f572b51b7c1aea7f08a241", + "mqc_fastqc_adapter_content_plot-2_1.txt:md5,3560a22f94aea25e27d97e056fb478ed", "mqc_fastqc_adapter_content_plot_1.txt:md5,66f3e2f6ba14599b0d6c20144df60777", - "mqc_fastqc_per_base_n_content_plot-2_1.txt:md5,7c5db7fad8afe578076466416e17bbd0", + "mqc_fastqc_per_base_n_content_plot-2_1.txt:md5,d79e95d36d955edee3e4bfb139dce967", "mqc_fastqc_per_base_n_content_plot_1.txt:md5,8d9cdd0463193b7e10332e2ca0273aca", - "mqc_fastqc_per_base_sequence_quality_plot-2_1.txt:md5,3f7c1c4998d41f10fcc48f15fc1c214f", + "mqc_fastqc_per_base_sequence_quality_plot-2_1.txt:md5,3bb6cad69480846e4003b9f0f3511caa", "mqc_fastqc_per_base_sequence_quality_plot_1.txt:md5,821cb87b0ae8bd61cd445d153b8f371a", - "mqc_fastqc_per_sequence_gc_content_plot-2_Counts.txt:md5,076f8f06afb71ddf1de87480c0a937ab", - "mqc_fastqc_per_sequence_gc_content_plot-2_Percentages.txt:md5,4f0d049c48c4cde730fdc2ee37130658", + "mqc_fastqc_per_sequence_gc_content_plot-2_Counts.txt:md5,88fb0e924094b5dd57f4003ac13fd1f4", + "mqc_fastqc_per_sequence_gc_content_plot-2_Percentages.txt:md5,a4b37bca5e61bf595c4532ffbc8b8f93", "mqc_fastqc_per_sequence_gc_content_plot_Counts.txt:md5,3fa7f0c0858d12cae8700e21774da86d", "mqc_fastqc_per_sequence_gc_content_plot_Percentages.txt:md5,a2d0c3ec413894e4dafa62ebdf44a06c", - "mqc_fastqc_per_sequence_quality_scores_plot-2_1.txt:md5,3dde643427f3229f283527966d7dd32e", + "mqc_fastqc_per_sequence_quality_scores_plot-2_1.txt:md5,841ccc3da246bd197fc966e9f8c5ca57", "mqc_fastqc_per_sequence_quality_scores_plot_1.txt:md5,3bfe1c94f710975829e2c1e3b5f16ea7", - "mqc_fastqc_sequence_counts_plot-2_1.txt:md5,83670beba48f5d0a1ff4bb038628f49e", + "mqc_fastqc_sequence_counts_plot-2_1.txt:md5,c734a06e1f3e3afc1486a0b45be880e1", "mqc_fastqc_sequence_counts_plot_1.txt:md5,d0cf8d64e742b5f446e6b602d86913b9", - "mqc_fastqc_sequence_duplication_levels_plot-2_1.txt:md5,907ad5b8fb27d2d9fd19281c8fa77e65", + "mqc_fastqc_sequence_duplication_levels_plot-2_1.txt:md5,d7ada8561d521eaf645073f7cccf7b82", "mqc_fastqc_sequence_duplication_levels_plot_1.txt:md5,23c4883ed6c22212b0c3e07a863745d1", - "mqc_fastqc_sequence_length_distribution_plot_1.txt:md5,46650932914f76713075e12934d6fcfe", - "mqc_featureCounts_assignment_plot-2_1.txt:md5,861efa81b89447534c36ad0ee83cab84", - "mqc_featureCounts_assignment_plot_1.txt:md5,3467de957432846db73ca75916f69f03", - "mqc_samtools-idxstats-mapped-reads-plot-2_Normalised_Counts.txt:md5,742884105ee8faa08ffc04a0d744a65f", - "mqc_samtools-idxstats-mapped-reads-plot-2_Observed_over_Expected_Counts.txt:md5,912267a9d1ab1b4f2a2fdea45f756590", - "mqc_samtools-idxstats-mapped-reads-plot-2_Raw_Counts.txt:md5,8c6fa3652e68b3bb048d571f515a3d82", - "mqc_samtools-idxstats-mapped-reads-plot-3_Normalised_Counts.txt:md5,f818f92f6dae674c5c9ba1fdd30ac283", - "mqc_samtools-idxstats-mapped-reads-plot-3_Observed_over_Expected_Counts.txt:md5,8dfe752841049fd868d32e4f7982e8ae", - "mqc_samtools-idxstats-mapped-reads-plot-3_Raw_Counts.txt:md5,c038743f9f9a6feae3d4b4988cc322d2", - "mqc_samtools-idxstats-mapped-reads-plot-4_Normalised_Counts.txt:md5,524bcb4364c376b9e9c337bce8606bd4", - "mqc_samtools-idxstats-mapped-reads-plot-4_Observed_over_Expected_Counts.txt:md5,807f1b9be4e9095e058b9ada9beeadf1", - "mqc_samtools-idxstats-mapped-reads-plot-4_Raw_Counts.txt:md5,8a9f046ce11094993e8daab88a441604", - "mqc_samtools-idxstats-mapped-reads-plot_Normalised_Counts.txt:md5,3f69d5db75d2b832bb85d7e5c74c8958", - "mqc_samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts.txt:md5,7e72b13471b3e6755dd6b4868bfb1914", - "mqc_samtools-idxstats-mapped-reads-plot_Raw_Counts.txt:md5,c0881aaed3b67938936d0dbdd0064e6c", - "mqc_samtools_alignment_plot-2_1.txt:md5,fdec2a0c318ccf06f757ac78a43d7775", - "mqc_samtools_alignment_plot-3_1.txt:md5,ffbd2892db3589a9c531afdab210d6df", - "mqc_samtools_alignment_plot-4_1.txt:md5,fad0dc92bef7676f2dd96fcb29a80afe", - "mqc_samtools_alignment_plot_1.txt:md5,83a5a93a7d827431cfecd1ed9923bac2", + "mqc_fastqc_sequence_length_distribution_plot_1.txt:md5,bc3acb40acbf620b237d0f2fa8c8a1ab", + "mqc_featureCounts_assignment_plot-2_1.txt:md5,3382859da6bde5cf1ebb622c68589040", + "mqc_featureCounts_assignment_plot_1.txt:md5,939ac6f218e2a6e24ccdec4ff814125c", + "mqc_samtools-idxstats-mapped-reads-plot-2_Normalised_Counts.txt:md5,24e8c9cb2e7d0bbfc49022717c84fa85", + "mqc_samtools-idxstats-mapped-reads-plot-2_Observed_over_Expected_Counts.txt:md5,99f9513a0d3239097a3b4454c6d78768", + "mqc_samtools-idxstats-mapped-reads-plot-2_Raw_Counts.txt:md5,04f8cb2c8855798e4ce61258ff0e14ec", + "mqc_samtools-idxstats-mapped-reads-plot-3_Normalised_Counts.txt:md5,a40196c909d5326637e526c800e33fc2", + "mqc_samtools-idxstats-mapped-reads-plot-3_Observed_over_Expected_Counts.txt:md5,c811c90bee0900f8e8906e29567f29cd", + "mqc_samtools-idxstats-mapped-reads-plot-3_Raw_Counts.txt:md5,a8befb9b95ad2e76a57d84772450e99b", + "mqc_samtools-idxstats-mapped-reads-plot-4_Normalised_Counts.txt:md5,3af943c8019d9eee42b4f40791a74c3f", + "mqc_samtools-idxstats-mapped-reads-plot-4_Observed_over_Expected_Counts.txt:md5,585e7aa5faf61c669ca5fb106340c6f4", + "mqc_samtools-idxstats-mapped-reads-plot-4_Raw_Counts.txt:md5,2687336b51d0fde9d2192ba48be4d319", + "mqc_samtools-idxstats-mapped-reads-plot_Normalised_Counts.txt:md5,bec101bc6ee3766454189e3ab65166c2", + "mqc_samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts.txt:md5,b27f1cb75fdc333d8a494dc8350d4351", + "mqc_samtools-idxstats-mapped-reads-plot_Raw_Counts.txt:md5,532caa74ae554bd7fdd40421c2ee7b51", + "mqc_samtools_alignment_plot-2_1.txt:md5,9c86235254e6f9598f62df2eec42ed45", + "mqc_samtools_alignment_plot-3_1.txt:md5,bff8cb7e31bc1221ddc08a1ab10faf91", + "mqc_samtools_alignment_plot-4_1.txt:md5,20f6f039fbf4b8c76b2309c97ad6e074", + "mqc_samtools_alignment_plot_1.txt:md5,afaffbac4a382f0e96d132f52d104fb1", "multiqc_citations.txt:md5,34da9f7497d275274f6dfd3b89831edb", - "multiqc_cutadapt.txt:md5,19916e059f11fa2c038c97bbb0ea190b", + "multiqc_cutadapt.txt:md5,926fcf7c5a9c5dc0a105a439c85a5f58", "multiqc_fastqc.txt:md5,a9a7484add8120fc3cf3d5626a92973b", - "multiqc_fastqc_1.txt:md5,6f694cea56d88eb91b4c9610f7a12ca5", - "multiqc_featureCounts_mlib_featurecounts.txt:md5,b66204f6e03a8f4aa6b5d6206f0ced92", - "multiqc_featureCounts_mrep_featurecounts.txt:md5,8002c1ba6325b1eaab118099d01b7ee1", - "multiqc_mlib_frip_score-plot.txt:md5,fad5d91d452286d71c5357951c28c62d", - "multiqc_mlib_peak_annotation-plot.txt:md5,bc637d1fb7a56ab4ddba3eb900ea5619", - "multiqc_mlib_peak_count-plot.txt:md5,22e2cc18e32e26a95a5db993a25a02d2", - "multiqc_mrep_frip_score-plot.txt:md5,69ff05e5e8e5fd888f1ea32a60b72994", + "multiqc_fastqc_1.txt:md5,58ab2bbd2d19745e5975742c6d1335d7", + "multiqc_featureCounts_mlib_featurecounts.txt:md5,e36cef3171ee60dd84c1101a560c1279", + "multiqc_featureCounts_mrep_featurecounts.txt:md5,f62bde3bd6c274ded2ffda9b1924aa4c", + "multiqc_mlib_frip_score-plot.txt:md5,07ae10450e52b7eaa14901cf4ee11071", + "multiqc_mlib_peak_annotation-plot.txt:md5,49177a2691f14d6d1dcb9cb9cda11940", + "multiqc_mlib_peak_count-plot.txt:md5,884c5b0b366376214407bd58ae1ac29c", + "multiqc_mrep_frip_score-plot.txt:md5,16c5819f17332b50c64558ea9f31d870", "multiqc_mrep_peak_annotation-plot.txt:md5,06918eae76d769b41471460676e02afb", "multiqc_mrep_peak_count-plot.txt:md5,e5019374d8964473ca648859cca797fc", "picard_histogram.txt:md5,c9aa8a5ac6841ffb3a6cc2de45b44797", @@ -1093,10 +1127,10 @@ "samplesheet.valid.csv:md5,51b046b55592e95949824f21b12c7e49" ] ], + "timestamp": "2026-07-26T03:37:51.508720384", "meta": { - "nf-test": "0.9.3", - "nextflow": "26.04.1" - }, - "timestamp": "2026-05-20T12:35:49.679880032" + "nf-test": "0.9.4", + "nextflow": "25.10.4" + } } } \ No newline at end of file diff --git a/tests/csv/all_pe_samplesheet.csv b/tests/csv/all_pe_samplesheet.csv new file mode 100644 index 00000000..6f76672a --- /dev/null +++ b/tests/csv/all_pe_samplesheet.csv @@ -0,0 +1,5 @@ +sample,fastq_1,fastq_2,replicate +OSMOTIC_STRESS_T0_PE,https://raw.githubusercontent.com/nf-core/test-datasets/atacseq/testdata/SRR1822153_1.fastq.gz,https://raw.githubusercontent.com/nf-core/test-datasets/atacseq/testdata/SRR1822153_2.fastq.gz,1 +OSMOTIC_STRESS_T0_PE,https://raw.githubusercontent.com/nf-core/test-datasets/atacseq/testdata/SRR1822154_1.fastq.gz,https://raw.githubusercontent.com/nf-core/test-datasets/atacseq/testdata/SRR1822154_2.fastq.gz,2 +OSMOTIC_STRESS_T15_PE,https://raw.githubusercontent.com/nf-core/test-datasets/atacseq/testdata/SRR1822157_1.fastq.gz,https://raw.githubusercontent.com/nf-core/test-datasets/atacseq/testdata/SRR1822157_2.fastq.gz,1 +OSMOTIC_STRESS_T15_PE,https://raw.githubusercontent.com/nf-core/test-datasets/atacseq/testdata/SRR1822158_1.fastq.gz,https://raw.githubusercontent.com/nf-core/test-datasets/atacseq/testdata/SRR1822158_2.fastq.gz,1 diff --git a/tests/csv/all_se_samplesheet.csv b/tests/csv/all_se_samplesheet.csv new file mode 100644 index 00000000..2c436e37 --- /dev/null +++ b/tests/csv/all_se_samplesheet.csv @@ -0,0 +1,5 @@ +sample,fastq_1,fastq_2,replicate +OSMOTIC_STRESS_T100_SE,https://raw.githubusercontent.com/nf-core/test-datasets/atacseq/testdata/SRR1822153_1.fastq.gz,,1 +OSMOTIC_STRESS_T100_SE,https://raw.githubusercontent.com/nf-core/test-datasets/atacseq/testdata/SRR1822154_1.fastq.gz,,2 +OSMOTIC_STRESS_T150_SE,https://raw.githubusercontent.com/nf-core/test-datasets/atacseq/testdata/SRR1822157_1.fastq.gz,,1 +OSMOTIC_STRESS_T150_SE,https://raw.githubusercontent.com/nf-core/test-datasets/atacseq/testdata/SRR1822158_1.fastq.gz,,1 diff --git a/tests/default.nf.test b/tests/default.nf.test index 15421c16..31d36934 100644 --- a/tests/default.nf.test +++ b/tests/default.nf.test @@ -28,7 +28,29 @@ nextflow_pipeline { stable_name, // All files with stable contents stable_path - ).match() } + ).match() }, + // Failure-B regression: the -profile test cohort mixes single-end + // (OSMOTIC_STRESS_*_SE) and paired-end (OSMOTIC_STRESS_*_PE) libraries. + // subread >= 2.1 aborts if one featureCounts call mixes endedness, so + // the consensus quantification splits the cohort by library type, + // counts each batch, and merges the matrices. Assert the merged + // consensus matrix carries every SE and PE sample column exactly once. + { + def mergedFc = [] + new File("${outputDir}").eachFileRecurse { f -> + if (f.name ==~ /consensus_peaks\.m(Lb|Rp)\.clN\.featureCounts\.tsv/) { + mergedFc << f + } + } + assert mergedFc.size() > 0 : "no merged consensus featureCounts matrix was produced" + mergedFc.each { f -> + def header = f.readLines().find { it.startsWith('Geneid') }.split('\t') as List + def cols = header[6..-1] + assert cols.toUnique().size() == cols.size() : "duplicate sample columns in ${f.name}: ${cols}" + assert cols.any { it.contains('_SE') } : "no single-end sample column in ${f.name}: ${cols}" + assert cols.any { it.contains('_PE') } : "no paired-end sample column in ${f.name}: ${cols}" + } + } ) } } diff --git a/tests/default.nf.test.snap b/tests/default.nf.test.snap index e079fa99..fe8e9c20 100644 --- a/tests/default.nf.test.snap +++ b/tests/default.nf.test.snap @@ -1,57 +1,72 @@ { "-profile test": { "content": [ - 264, + 268, { "BAMTOOLS_FILTER": { - "samtools": "1.15.1", - "bamtools": "2.5.2" + "bamtools": "2.5.2", + "samtools": "1.15.1" }, "BAM_REMOVE_ORPHANS": { "samtools": "1.15.1" }, "BEDTOOLS_GENOMECOV": { "bedtools": "2.31.1", - "sort": 9.5 + "sort": "sort (GNU coreutils) 9.5" }, "BWA_INDEX": { "bwa": "0.7.19-r1273" }, "BWA_MEM": { - "bwa": "0.7.17-r1188", - "samtools": "1.19.2" + "bwa": "0.7.19-r1273", + "samtools": "1.22.1" }, "DEEPTOOLS_COMPUTEMATRIX_REFERENCE_POINT": { - "deeptools": "3.5.5" + "deeptools": "3.5.6" }, "DEEPTOOLS_COMPUTEMATRIX_SCALE_REGIONS": { - "deeptools": "3.5.5" + "deeptools": "3.5.6" }, "DEEPTOOLS_PLOTHEATMAP": { - "deeptools": "3.5.5" + "deeptools": "3.5.6" }, "DEEPTOOLS_PLOTPROFILE": { - "deeptools": "3.5.5" + "deeptools": "3.5.6" }, "DESEQ2_QC": { - "r-base": "4.0.3", - "bioconductor-deseq2": "1.28.0" + "bioconductor-deseq2": "1.28.0", + "r-base": "4.0.3" }, "FASTQC": { "fastqc": "0.12.1" }, + "FEATURECOUNTS_MERGE": { + "sed": 4.7 + }, "FRIP_SCORE": { "bedtools": "2.30.0", "samtools": "1.15.1" }, + "GENOME_BLACKLIST_REGIONS": { + "bedtools": "2.30.0" + }, + "GET_AUTOSOMES": { + "python": "3.8.3" + }, + "GTF2BED": { + "perl": "5.26.2" + }, "HOMER_ANNOTATEPEAKS": { "homer": 4.11 }, "IGV": { "python": "3.8.3" }, + "KHMER_UNIQUEKMERS": { + "khmer": "3.0.0a3" + }, "MACS3_CALLPEAK": { - "macs3": "3.0.1" + "macs3": "3.0.4" }, "MACS3_CONSENSUS": { "python": "3.10.0", @@ -64,16 +79,16 @@ "ataqv": "1.3.1" }, "MERGED_LIBRARY_DEEPTOOLS_PLOTFINGERPRINT": { - "deeptools": "3.5.5" + "deeptools": "3.5.6" }, "MERGED_LIBRARY_PICARD_COLLECTMULTIPLEMETRICS": { - "picard": "3.0.0" + "picard": "3.4.0" }, "MULTIQC_CUSTOM_PEAKS": { "sed": 4.7 }, "PICARD_MARKDUPLICATES": { - "picard": "3.1.1" + "picard": "3.4.0" }, "PICARD_MERGESAMFILES_LIBRARY": { "picard": "3.4.0" @@ -90,32 +105,35 @@ "SAMPLESHEET_CHECK": { "python": "3.8.3" }, + "SAMTOOLS_FAIDX": { + "samtools": "1.23.1" + }, "SAMTOOLS_FLAGSTAT": { - "samtools": "1.19.2" + "samtools": 1.24 }, "SAMTOOLS_IDXSTATS": { - "samtools": "1.19.2" + "samtools": 1.24 }, "SAMTOOLS_INDEX": { - "samtools": "1.19.2" + "samtools": 1.24 }, "SAMTOOLS_SORT": { - "samtools": "1.19.2" + "samtools": 1.24 }, "SAMTOOLS_STATS": { - "samtools": "1.19.2" + "samtools": 1.24 }, "SUBREAD_FEATURECOUNTS": { - "subread": "2.0.1" + "subread": "2.1.1" }, "TRIMGALORE": { - "trimgalore": "0.6.10" + "trimgalore": "2.1.0" }, - "UCSC_BEDGRAPHTOBIGWIG": { - "ucsc": 445 + "TSS_EXTRACT": { + "sed": 4.7 }, - "Workflow": { - "nf-core/atacseq": "v2.2.0dev" + "UCSC_BEDGRAPHTOBIGWIG": { + "ucsc": 482 } }, [ @@ -284,13 +302,16 @@ "bwa/merged_library/macs3/broad_peak/OSMOTIC_STRESS_T15_PE_REP1.mLb.clN_peaks.gappedPeak", "bwa/merged_library/macs3/broad_peak/OSMOTIC_STRESS_T15_PE_REP1.mLb.clN_peaks.xls", "bwa/merged_library/macs3/broad_peak/consensus", + "bwa/merged_library/macs3/broad_peak/consensus/consensus_peaks.mLb.clN.PE.featureCounts.tsv", + "bwa/merged_library/macs3/broad_peak/consensus/consensus_peaks.mLb.clN.PE.featureCounts.tsv.summary", + "bwa/merged_library/macs3/broad_peak/consensus/consensus_peaks.mLb.clN.SE.featureCounts.tsv", + "bwa/merged_library/macs3/broad_peak/consensus/consensus_peaks.mLb.clN.SE.featureCounts.tsv.summary", "bwa/merged_library/macs3/broad_peak/consensus/consensus_peaks.mLb.clN.annotatePeaks.txt", "bwa/merged_library/macs3/broad_peak/consensus/consensus_peaks.mLb.clN.bed", "bwa/merged_library/macs3/broad_peak/consensus/consensus_peaks.mLb.clN.boolean.intersect.plot.pdf", "bwa/merged_library/macs3/broad_peak/consensus/consensus_peaks.mLb.clN.boolean.intersect.txt", "bwa/merged_library/macs3/broad_peak/consensus/consensus_peaks.mLb.clN.boolean.txt", - "bwa/merged_library/macs3/broad_peak/consensus/consensus_peaks.mLb.clN.featureCounts.txt", - "bwa/merged_library/macs3/broad_peak/consensus/consensus_peaks.mLb.clN.featureCounts.txt.summary", + "bwa/merged_library/macs3/broad_peak/consensus/consensus_peaks.mLb.clN.featureCounts.tsv", "bwa/merged_library/macs3/broad_peak/consensus/consensus_peaks.mLb.clN.saf", "bwa/merged_library/macs3/broad_peak/consensus/deseq2", "bwa/merged_library/macs3/broad_peak/consensus/deseq2/R_sessionInfo.log", @@ -333,34 +354,34 @@ "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T0_PE_REP1.mLb.clN.CollectMultipleMetrics.insert_size_metrics", "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T0_PE_REP1.mLb.clN.CollectMultipleMetrics.quality_by_cycle_metrics", "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T0_PE_REP1.mLb.clN.CollectMultipleMetrics.quality_distribution_metrics", - "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T0_PE_REP1.mLb.mkD.sorted.MarkDuplicates.metrics.txt", + "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T0_PE_REP1.mLb.mkD.sorted.metrics.txt", "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T0_PE_REP2.mLb.clN.CollectMultipleMetrics.alignment_summary_metrics", "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T0_PE_REP2.mLb.clN.CollectMultipleMetrics.base_distribution_by_cycle_metrics", "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T0_PE_REP2.mLb.clN.CollectMultipleMetrics.insert_size_metrics", "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T0_PE_REP2.mLb.clN.CollectMultipleMetrics.quality_by_cycle_metrics", "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T0_PE_REP2.mLb.clN.CollectMultipleMetrics.quality_distribution_metrics", - "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T0_PE_REP2.mLb.mkD.sorted.MarkDuplicates.metrics.txt", + "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T0_PE_REP2.mLb.mkD.sorted.metrics.txt", "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T100_SE_REP1.mLb.clN.CollectMultipleMetrics.alignment_summary_metrics", "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T100_SE_REP1.mLb.clN.CollectMultipleMetrics.base_distribution_by_cycle_metrics", "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T100_SE_REP1.mLb.clN.CollectMultipleMetrics.quality_by_cycle_metrics", "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T100_SE_REP1.mLb.clN.CollectMultipleMetrics.quality_distribution_metrics", - "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T100_SE_REP1.mLb.mkD.sorted.MarkDuplicates.metrics.txt", + "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T100_SE_REP1.mLb.mkD.sorted.metrics.txt", "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T100_SE_REP2.mLb.clN.CollectMultipleMetrics.alignment_summary_metrics", "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T100_SE_REP2.mLb.clN.CollectMultipleMetrics.base_distribution_by_cycle_metrics", "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T100_SE_REP2.mLb.clN.CollectMultipleMetrics.quality_by_cycle_metrics", "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T100_SE_REP2.mLb.clN.CollectMultipleMetrics.quality_distribution_metrics", - "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T100_SE_REP2.mLb.mkD.sorted.MarkDuplicates.metrics.txt", + "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T100_SE_REP2.mLb.mkD.sorted.metrics.txt", "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T150_SE_REP1.mLb.clN.CollectMultipleMetrics.alignment_summary_metrics", "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T150_SE_REP1.mLb.clN.CollectMultipleMetrics.base_distribution_by_cycle_metrics", "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T150_SE_REP1.mLb.clN.CollectMultipleMetrics.quality_by_cycle_metrics", "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T150_SE_REP1.mLb.clN.CollectMultipleMetrics.quality_distribution_metrics", - "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T150_SE_REP1.mLb.mkD.sorted.MarkDuplicates.metrics.txt", + "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T150_SE_REP1.mLb.mkD.sorted.metrics.txt", "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T15_PE_REP1.mLb.clN.CollectMultipleMetrics.alignment_summary_metrics", "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T15_PE_REP1.mLb.clN.CollectMultipleMetrics.base_distribution_by_cycle_metrics", "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T15_PE_REP1.mLb.clN.CollectMultipleMetrics.insert_size_metrics", "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T15_PE_REP1.mLb.clN.CollectMultipleMetrics.quality_by_cycle_metrics", "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T15_PE_REP1.mLb.clN.CollectMultipleMetrics.quality_distribution_metrics", - "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T15_PE_REP1.mLb.mkD.sorted.MarkDuplicates.metrics.txt", + "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T15_PE_REP1.mLb.mkD.sorted.metrics.txt", "bwa/merged_library/picard_metrics/pdf", "bwa/merged_library/picard_metrics/pdf/OSMOTIC_STRESS_T0_PE_REP1.mLb.clN.CollectMultipleMetrics.base_distribution_by_cycle.pdf", "bwa/merged_library/picard_metrics/pdf/OSMOTIC_STRESS_T0_PE_REP1.mLb.clN.CollectMultipleMetrics.insert_size_histogram.pdf", @@ -448,13 +469,16 @@ "bwa/merged_replicate/macs3/broad_peak/OSMOTIC_STRESS_T100_SE.mRp.clN_peaks.gappedPeak", "bwa/merged_replicate/macs3/broad_peak/OSMOTIC_STRESS_T100_SE.mRp.clN_peaks.xls", "bwa/merged_replicate/macs3/broad_peak/consensus", + "bwa/merged_replicate/macs3/broad_peak/consensus/consensus_peaks.mRp.clN.PE.featureCounts.tsv", + "bwa/merged_replicate/macs3/broad_peak/consensus/consensus_peaks.mRp.clN.PE.featureCounts.tsv.summary", + "bwa/merged_replicate/macs3/broad_peak/consensus/consensus_peaks.mRp.clN.SE.featureCounts.tsv", + "bwa/merged_replicate/macs3/broad_peak/consensus/consensus_peaks.mRp.clN.SE.featureCounts.tsv.summary", "bwa/merged_replicate/macs3/broad_peak/consensus/consensus_peaks.mRp.clN.annotatePeaks.txt", "bwa/merged_replicate/macs3/broad_peak/consensus/consensus_peaks.mRp.clN.bed", "bwa/merged_replicate/macs3/broad_peak/consensus/consensus_peaks.mRp.clN.boolean.intersect.plot.pdf", "bwa/merged_replicate/macs3/broad_peak/consensus/consensus_peaks.mRp.clN.boolean.intersect.txt", "bwa/merged_replicate/macs3/broad_peak/consensus/consensus_peaks.mRp.clN.boolean.txt", - "bwa/merged_replicate/macs3/broad_peak/consensus/consensus_peaks.mRp.clN.featureCounts.txt", - "bwa/merged_replicate/macs3/broad_peak/consensus/consensus_peaks.mRp.clN.featureCounts.txt.summary", + "bwa/merged_replicate/macs3/broad_peak/consensus/consensus_peaks.mRp.clN.featureCounts.tsv", "bwa/merged_replicate/macs3/broad_peak/consensus/consensus_peaks.mRp.clN.saf", "bwa/merged_replicate/macs3/broad_peak/consensus/deseq2", "bwa/merged_replicate/macs3/broad_peak/consensus/deseq2/R_sessionInfo.log", @@ -482,8 +506,8 @@ "bwa/merged_replicate/macs3/broad_peak/qc/macs3_peak.mRp.clN.plots.pdf", "bwa/merged_replicate/macs3/broad_peak/qc/macs3_peak.mRp.clN.summary.txt", "bwa/merged_replicate/picard_metrics", - "bwa/merged_replicate/picard_metrics/OSMOTIC_STRESS_T0_PE.mRp.clN.sorted.MarkDuplicates.metrics.txt", - "bwa/merged_replicate/picard_metrics/OSMOTIC_STRESS_T100_SE.mRp.clN.sorted.MarkDuplicates.metrics.txt", + "bwa/merged_replicate/picard_metrics/OSMOTIC_STRESS_T0_PE.mRp.clN.sorted.metrics.txt", + "bwa/merged_replicate/picard_metrics/OSMOTIC_STRESS_T100_SE.mRp.clN.sorted.metrics.txt", "bwa/merged_replicate/samtools_stats", "bwa/merged_replicate/samtools_stats/OSMOTIC_STRESS_T0_PE.mRp.clN.sorted.bam.flagstat", "bwa/merged_replicate/samtools_stats/OSMOTIC_STRESS_T0_PE.mRp.clN.sorted.bam.idxstats", @@ -922,110 +946,120 @@ "sourcesanspro-semiboldit.woff:md5,f1d255aa459786dfc6aa2e488ac01245", "index.html:md5,bf7747be761e56ad7c54c842ac88461a", "ataqv.js:md5,feb291b7839e9e43ed304565e3a605d9", - "configuration.js:md5,6ba17d7ec7e2247e9b970bd3b0ce9a96", + "configuration.js:md5,5fa99e6c27050fed09c3764512c56c96", "d3.min.js:md5,db69fb2626a71a286ee772d673138aca", "datatables.min.js:md5,e369b872620dadb05e4eb555b81f9112", "jszip.min.js:md5,09e492cb492ffa75484bbe10f1f721d1", "OSMOTIC_STRESS_T0_PE_REP1.mLb.clN.scale_factor.txt:md5,5afe7d16ac432b483454d7406dd4b72e", - "OSMOTIC_STRESS_T0_PE_REP2.mLb.clN.scale_factor.txt:md5,6caa1b14d21350752628436355eabef5", + "OSMOTIC_STRESS_T0_PE_REP2.mLb.clN.scale_factor.txt:md5,816f20d069360ccb44e8e565b6b0a4e6", "OSMOTIC_STRESS_T100_SE_REP1.mLb.clN.scale_factor.txt:md5,a9b555d96448f5ac9bdb6f4526f86341", - "OSMOTIC_STRESS_T100_SE_REP2.mLb.clN.scale_factor.txt:md5,e3ac13dff612e52453ccf3bc4692c2ea", - "OSMOTIC_STRESS_T150_SE_REP1.mLb.clN.scale_factor.txt:md5,bf338379ef0251df310edcbe41668fee", - "OSMOTIC_STRESS_T15_PE_REP1.mLb.clN.scale_factor.txt:md5,57e48407c6ada9d84166e734ca43a5ed", + "OSMOTIC_STRESS_T100_SE_REP2.mLb.clN.scale_factor.txt:md5,618690cf55da217e9cd1324f38aab6de", + "OSMOTIC_STRESS_T150_SE_REP1.mLb.clN.scale_factor.txt:md5,e2a4023f321415738eb727cd3bcbce5b", + "OSMOTIC_STRESS_T15_PE_REP1.mLb.clN.scale_factor.txt:md5,91db8a99954d4096bdb48be8c20fc4be", "OSMOTIC_STRESS_T0_PE_REP1.mLb.clN_peaks.broadPeak:md5,c5b53511f764fb205886daa4f2ab00ec", - "OSMOTIC_STRESS_T0_PE_REP1.mLb.clN_peaks.gappedPeak:md5,50b3a0ebae79dc153e56a37658bfab6f", - "OSMOTIC_STRESS_T0_PE_REP1.mLb.clN_peaks.xls:md5,41446ba0c0eb56ba34ba518658d76e89", - "OSMOTIC_STRESS_T0_PE_REP2.mLb.clN_peaks.broadPeak:md5,47246433d4cb8625d047b25c84d25857", - "OSMOTIC_STRESS_T0_PE_REP2.mLb.clN_peaks.gappedPeak:md5,43d571030847b7cc2b21b0f61cc12c16", - "OSMOTIC_STRESS_T0_PE_REP2.mLb.clN_peaks.xls:md5,c55f63c9db41018a430158453e0538af", + "OSMOTIC_STRESS_T0_PE_REP1.mLb.clN_peaks.gappedPeak:md5,adca40deef4439d757f656ceb2d434e4", + "OSMOTIC_STRESS_T0_PE_REP1.mLb.clN_peaks.xls:md5,f3e47ff619d7b4c0e2d543d1609927a4", + "OSMOTIC_STRESS_T0_PE_REP2.mLb.clN_peaks.broadPeak:md5,3e8ae758c789ca16094a3d96718f7be3", + "OSMOTIC_STRESS_T0_PE_REP2.mLb.clN_peaks.gappedPeak:md5,da2909b11601c515cc1d431a5ef67bcb", + "OSMOTIC_STRESS_T0_PE_REP2.mLb.clN_peaks.xls:md5,9e9ca58826c2ab3e70c06a533e7dbae1", "OSMOTIC_STRESS_T100_SE_REP1.mLb.clN_peaks.broadPeak:md5,171bbf48bda913bf702954c20dd57fcb", - "OSMOTIC_STRESS_T100_SE_REP1.mLb.clN_peaks.gappedPeak:md5,d101f70984161baefc31fb7536b3835e", - "OSMOTIC_STRESS_T100_SE_REP1.mLb.clN_peaks.xls:md5,d375f257642d942eaeeeef93541a8257", - "OSMOTIC_STRESS_T100_SE_REP2.mLb.clN_peaks.broadPeak:md5,c163607903fd2e2ae38db046fdd787f0", - "OSMOTIC_STRESS_T100_SE_REP2.mLb.clN_peaks.gappedPeak:md5,71e4536c7172f000dd66c39f39396e86", - "OSMOTIC_STRESS_T100_SE_REP2.mLb.clN_peaks.xls:md5,4a2e2c3ac0b87ff4a3cc5439015cfc5d", - "OSMOTIC_STRESS_T150_SE_REP1.mLb.clN_peaks.broadPeak:md5,49b0ebc586b9e59b72a1d6c35a07c5f9", - "OSMOTIC_STRESS_T150_SE_REP1.mLb.clN_peaks.gappedPeak:md5,c55133b8532173de8fe7b3b1f51e6190", - "OSMOTIC_STRESS_T150_SE_REP1.mLb.clN_peaks.xls:md5,cd2ee19135ebda5b33b953b8d5039390", - "OSMOTIC_STRESS_T15_PE_REP1.mLb.clN_peaks.broadPeak:md5,5fec6a7a54bfd5fc2178dc2408664e9b", - "OSMOTIC_STRESS_T15_PE_REP1.mLb.clN_peaks.gappedPeak:md5,775585b2d83a50b483d28f82415b9bdb", - "OSMOTIC_STRESS_T15_PE_REP1.mLb.clN_peaks.xls:md5,fb6af0f9cf4506c25b041e2ace8953cb", - "consensus_peaks.mLb.clN.bed:md5,39dda87fd18c5f238ccba441c2a49d0e", - "consensus_peaks.mLb.clN.boolean.intersect.txt:md5,937220dde650b860d42373294d96f002", - "consensus_peaks.mLb.clN.boolean.txt:md5,463563ea22099f42efe11e4a7c0548c3", - "consensus_peaks.mLb.clN.saf:md5,9121e62a952c9e58b046c2776882f9b6", + "OSMOTIC_STRESS_T100_SE_REP1.mLb.clN_peaks.gappedPeak:md5,6ac2f1603586b83ba2591f9c90fd13c9", + "OSMOTIC_STRESS_T100_SE_REP1.mLb.clN_peaks.xls:md5,ec811f9a7b8f5a517caf7b3a2f4988b8", + "OSMOTIC_STRESS_T100_SE_REP2.mLb.clN_peaks.broadPeak:md5,d61e6f9675514a5b3c343e78b96c9111", + "OSMOTIC_STRESS_T100_SE_REP2.mLb.clN_peaks.gappedPeak:md5,fb8556e521d4c254f57ae3fdb67c9b64", + "OSMOTIC_STRESS_T100_SE_REP2.mLb.clN_peaks.xls:md5,3f415d834d3f9e5939dc8601ff0898b5", + "OSMOTIC_STRESS_T150_SE_REP1.mLb.clN_peaks.broadPeak:md5,8f44ebfeb1ce0f3d01e915f3759b7a4f", + "OSMOTIC_STRESS_T150_SE_REP1.mLb.clN_peaks.gappedPeak:md5,fec3059e1a1b77fa791119d8a4d6d4c5", + "OSMOTIC_STRESS_T150_SE_REP1.mLb.clN_peaks.xls:md5,7df7f8827964cf1a29855e4c91f67246", + "OSMOTIC_STRESS_T15_PE_REP1.mLb.clN_peaks.broadPeak:md5,72db339e1a71e9bce5be245aab548a76", + "OSMOTIC_STRESS_T15_PE_REP1.mLb.clN_peaks.gappedPeak:md5,7a10a324776281b675922de41c21e9f7", + "OSMOTIC_STRESS_T15_PE_REP1.mLb.clN_peaks.xls:md5,d10e9cad50ff99d58776f6b198f65936", + "consensus_peaks.mLb.clN.PE.featureCounts.tsv:md5,2d220f8c6042e5c27563bf85ad8183bf", + "consensus_peaks.mLb.clN.PE.featureCounts.tsv.summary:md5,4735c591887ec6a31e7697e4a6ffa910", + "consensus_peaks.mLb.clN.SE.featureCounts.tsv:md5,996cd7520a291ff0fb6a0754a2b29e41", + "consensus_peaks.mLb.clN.SE.featureCounts.tsv.summary:md5,23cde0d135d36c6eb793283d68d2389f", + "consensus_peaks.mLb.clN.bed:md5,6a7d64f82769ab09538bbca05c0de568", + "consensus_peaks.mLb.clN.boolean.intersect.txt:md5,acb006189a63e3ab725c394f363d81de", + "consensus_peaks.mLb.clN.boolean.txt:md5,3be6c0c02305279fc537161e5af2971c", + "consensus_peaks.mLb.clN.featureCounts.tsv:md5,b46ccdcdeee5c385a09ff83f97564df9", + "consensus_peaks.mLb.clN.saf:md5,8e7b6b455fc3da0928de3a0f0b935022", "R_sessionInfo.log:md5,fb0da0d7ad6994ed66a8e68348b19676", - "OSMOTIC_STRESS_T0_PE_REP1.size_factors.txt:md5,75af17c0333c4da8085c8fbd63b7361a", - "OSMOTIC_STRESS_T0_PE_REP2.size_factors.txt:md5,ab7764c3b53e97833c0cee9cbc60ead4", - "OSMOTIC_STRESS_T100_SE_REP1.size_factors.txt:md5,5eaf69e0d03d4a1a7f542d8cab107f0c", - "OSMOTIC_STRESS_T100_SE_REP2.size_factors.txt:md5,8004916b9169d86825517a3a8993cf6f", - "OSMOTIC_STRESS_T150_SE_REP1.size_factors.txt:md5,531e5674c4c011a78dec0ed280ec4522", - "OSMOTIC_STRESS_T15_PE_REP1.size_factors.txt:md5,66689c145a16b7c36586cbcc8bf1a992", + "OSMOTIC_STRESS_T0_PE_REP1.size_factors.txt:md5,d76b66bfad30145a141325d3d8dd82f9", + "OSMOTIC_STRESS_T0_PE_REP2.size_factors.txt:md5,d79d777d744a4d962c385613525991c3", + "OSMOTIC_STRESS_T100_SE_REP1.size_factors.txt:md5,f21b6a3218e4292a5e53dcf82dcd3003", + "OSMOTIC_STRESS_T100_SE_REP2.size_factors.txt:md5,3f479d2f4926765cce7940b9317018f2", + "OSMOTIC_STRESS_T150_SE_REP1.size_factors.txt:md5,45e7ef06e0fdfbffc5ee114d98f01839", + "OSMOTIC_STRESS_T15_PE_REP1.size_factors.txt:md5,dd00ebf18b7918eb73538e6cd3909358", "OSMOTIC_STRESS_T0_PE_REP1.mLb.clN_peaks.FRiP_mqc.tsv:md5,085031e28b891cef205a81c9b6f34df4", "OSMOTIC_STRESS_T0_PE_REP1.mLb.clN_peaks.count_mqc.tsv:md5,01eada7dd6240d2af66efaf0105f801e", - "OSMOTIC_STRESS_T0_PE_REP2.mLb.clN_peaks.FRiP_mqc.tsv:md5,160b7f88062c5ad1317e177bcf375236", - "OSMOTIC_STRESS_T0_PE_REP2.mLb.clN_peaks.count_mqc.tsv:md5,363b299f1ac39d86230789177e3ba2d9", + "OSMOTIC_STRESS_T0_PE_REP2.mLb.clN_peaks.FRiP_mqc.tsv:md5,602c8df9e26c8e057d76eaa1a133f513", + "OSMOTIC_STRESS_T0_PE_REP2.mLb.clN_peaks.count_mqc.tsv:md5,5de4f043eb01162f21c21e0cdf608f91", "OSMOTIC_STRESS_T100_SE_REP1.mLb.clN_peaks.FRiP_mqc.tsv:md5,e1c3ca6628ab103b34063f0bc0fd6fa1", "OSMOTIC_STRESS_T100_SE_REP1.mLb.clN_peaks.count_mqc.tsv:md5,d9f63fd5f5f535c5c62bdbee9b9095aa", - "OSMOTIC_STRESS_T100_SE_REP2.mLb.clN_peaks.FRiP_mqc.tsv:md5,a904ac58084ee573989f28809034d5c0", - "OSMOTIC_STRESS_T100_SE_REP2.mLb.clN_peaks.count_mqc.tsv:md5,49a15784f9ab6d9eff73508e2f463cce", - "OSMOTIC_STRESS_T150_SE_REP1.mLb.clN_peaks.FRiP_mqc.tsv:md5,ab8e5b2a2208d2c7f899ed7a8cf67845", + "OSMOTIC_STRESS_T100_SE_REP2.mLb.clN_peaks.FRiP_mqc.tsv:md5,e3940e03c0309b06e25d412e22078f57", + "OSMOTIC_STRESS_T100_SE_REP2.mLb.clN_peaks.count_mqc.tsv:md5,c584070f8983b196453026b463a6bffd", + "OSMOTIC_STRESS_T150_SE_REP1.mLb.clN_peaks.FRiP_mqc.tsv:md5,582520ff525281336452eb4761b52e78", "OSMOTIC_STRESS_T150_SE_REP1.mLb.clN_peaks.count_mqc.tsv:md5,aeb72fa43a2bf33c6799ba5e6f030273", - "OSMOTIC_STRESS_T15_PE_REP1.mLb.clN_peaks.FRiP_mqc.tsv:md5,d355b0d932962b8eb42dbecd1bcbc5fa", + "OSMOTIC_STRESS_T15_PE_REP1.mLb.clN_peaks.FRiP_mqc.tsv:md5,876ec6709a7ec06e1ec7d2f502af0ac5", "OSMOTIC_STRESS_T15_PE_REP1.mLb.clN_peaks.count_mqc.tsv:md5,6718411a3dd59b2e62e9758c401b14a2", - "macs3_annotatePeaks.mLb.clN.summary.txt:md5,0aef404ef488aefb3dd7a72826c28db8", - "macs3_annotatePeaks.mLb.clN.summary_mqc.tsv:md5,a24fa1102eb240a1108f92e8988f39a0", + "macs3_annotatePeaks.mLb.clN.summary.txt:md5,3ff8d12f5eae22308bb3afe873ccc8c9", + "macs3_annotatePeaks.mLb.clN.summary_mqc.tsv:md5,7faa6ca1d6da087f456f92921e769989", "OSMOTIC_STRESS_T0_PE_REP1.mLb.clN.sorted.bam.flagstat:md5,35b6851dd4960fbcf0353b2b998ee467", "OSMOTIC_STRESS_T0_PE_REP1.mLb.clN.sorted.bam.idxstats:md5,dda689aa8a4b89be95e687ecdd03827b", "OSMOTIC_STRESS_T0_PE_REP1.mLb.mkD.sorted.bam.flagstat:md5,828f11cb1790a805192dc31281ad2e3f", "OSMOTIC_STRESS_T0_PE_REP1.mLb.mkD.sorted.bam.idxstats:md5,140d6011382f7f47396bfe3c922fe91c", - "OSMOTIC_STRESS_T0_PE_REP2.mLb.clN.sorted.bam.flagstat:md5,4d9ca367550a721dd0aaeaab58421bdb", - "OSMOTIC_STRESS_T0_PE_REP2.mLb.clN.sorted.bam.idxstats:md5,cdc0d96cb1c0e5b48ba2c418233f7a94", - "OSMOTIC_STRESS_T0_PE_REP2.mLb.mkD.sorted.bam.flagstat:md5,8d0f37dc5986deee90d63bd439874882", - "OSMOTIC_STRESS_T0_PE_REP2.mLb.mkD.sorted.bam.idxstats:md5,a77125d053253ed788969bfaedbfc455", + "OSMOTIC_STRESS_T0_PE_REP2.mLb.clN.sorted.bam.flagstat:md5,69f9e83c32e2a3fadf59188e3ef3e894", + "OSMOTIC_STRESS_T0_PE_REP2.mLb.clN.sorted.bam.idxstats:md5,678fa8d9637a41488ac97ddf818d8b36", + "OSMOTIC_STRESS_T0_PE_REP2.mLb.mkD.sorted.bam.flagstat:md5,fcd2c20d6fc99776693a143d5b932ca5", + "OSMOTIC_STRESS_T0_PE_REP2.mLb.mkD.sorted.bam.idxstats:md5,d3ceb83f80afec7154fe635a0028b4d8", "OSMOTIC_STRESS_T100_SE_REP1.mLb.clN.sorted.bam.flagstat:md5,f9f155991b027ae0009c110884f5abf9", "OSMOTIC_STRESS_T100_SE_REP1.mLb.clN.sorted.bam.idxstats:md5,3d31ff2b94710969f532b1734480b92b", "OSMOTIC_STRESS_T100_SE_REP1.mLb.mkD.sorted.bam.flagstat:md5,e3d0421cc9477abb16c32d9b3cf02387", "OSMOTIC_STRESS_T100_SE_REP1.mLb.mkD.sorted.bam.idxstats:md5,c216287572279f13283dcdf22a4bc8e4", - "OSMOTIC_STRESS_T100_SE_REP2.mLb.clN.sorted.bam.flagstat:md5,3c313eb066e4a38fb3fd81fed8267492", - "OSMOTIC_STRESS_T100_SE_REP2.mLb.clN.sorted.bam.idxstats:md5,80d6c838ba770ac3f736ca076871108d", - "OSMOTIC_STRESS_T100_SE_REP2.mLb.mkD.sorted.bam.flagstat:md5,6f26205e50a841c2cd65ccc87ec70eb5", - "OSMOTIC_STRESS_T100_SE_REP2.mLb.mkD.sorted.bam.idxstats:md5,a0b8823060c04c5d68255b9c558fc414", - "OSMOTIC_STRESS_T150_SE_REP1.mLb.clN.sorted.bam.flagstat:md5,5b01c6b579255502fe3ce7a7d8096552", - "OSMOTIC_STRESS_T150_SE_REP1.mLb.clN.sorted.bam.idxstats:md5,8ab305c4b298cc942dc2f9d11ea3bce2", - "OSMOTIC_STRESS_T150_SE_REP1.mLb.mkD.sorted.bam.flagstat:md5,5b26ec19f5770acfd55d523de688a3fe", - "OSMOTIC_STRESS_T150_SE_REP1.mLb.mkD.sorted.bam.idxstats:md5,a16727dd09a8ae9840851b682ab37854", - "OSMOTIC_STRESS_T15_PE_REP1.mLb.clN.sorted.bam.flagstat:md5,3f51a059a43e027213af32611c93dfe5", - "OSMOTIC_STRESS_T15_PE_REP1.mLb.clN.sorted.bam.idxstats:md5,2a77e286b62e4f2567024ba7a2192066", - "OSMOTIC_STRESS_T15_PE_REP1.mLb.mkD.sorted.bam.flagstat:md5,7aed9e40456bf326010231d9f3c1bf33", - "OSMOTIC_STRESS_T15_PE_REP1.mLb.mkD.sorted.bam.idxstats:md5,7af9840564eee65e3ddb1a0765787ac9", - "OSMOTIC_STRESS_T0_PE.mRp.clN.scale_factor.txt:md5,b9a30528c9329b0600ff3c9a7658c12e", - "OSMOTIC_STRESS_T100_SE.mRp.clN.scale_factor.txt:md5,730eec38d30794964d7f52ceae006582", - "OSMOTIC_STRESS_T0_PE.mRp.clN_peaks.broadPeak:md5,185644d17b2ea602c990c8540735f01d", - "OSMOTIC_STRESS_T0_PE.mRp.clN_peaks.gappedPeak:md5,39211adc421cce0c0c14e887ea0a4d6c", - "OSMOTIC_STRESS_T0_PE.mRp.clN_peaks.xls:md5,d8bf42b50905eac9cd3e387fae92a617", - "OSMOTIC_STRESS_T100_SE.mRp.clN_peaks.broadPeak:md5,52b2837492d44cb7e5549f183c92f8de", - "OSMOTIC_STRESS_T100_SE.mRp.clN_peaks.gappedPeak:md5,bb6ef1e40a2bad3b27ecb87d5890af7e", - "OSMOTIC_STRESS_T100_SE.mRp.clN_peaks.xls:md5,c725baa3370fd86f5707e01dbed81c7c", - "consensus_peaks.mRp.clN.bed:md5,09f7a0a60739a9682dfe296bdea96421", + "OSMOTIC_STRESS_T100_SE_REP2.mLb.clN.sorted.bam.flagstat:md5,839440ef66553433166e265e79db6eae", + "OSMOTIC_STRESS_T100_SE_REP2.mLb.clN.sorted.bam.idxstats:md5,466be87abe64ed73a9714fa5fac6a137", + "OSMOTIC_STRESS_T100_SE_REP2.mLb.mkD.sorted.bam.flagstat:md5,c4cd9237f8373b8f7a84851d7d0530f4", + "OSMOTIC_STRESS_T100_SE_REP2.mLb.mkD.sorted.bam.idxstats:md5,acdc7649de86409b0fbcf6052b64ba1e", + "OSMOTIC_STRESS_T150_SE_REP1.mLb.clN.sorted.bam.flagstat:md5,86ba63b9e1d2fbc3d95488557315105a", + "OSMOTIC_STRESS_T150_SE_REP1.mLb.clN.sorted.bam.idxstats:md5,dc506bc379328fcbc34558931e21bbe3", + "OSMOTIC_STRESS_T150_SE_REP1.mLb.mkD.sorted.bam.flagstat:md5,00a9eb297b29c4b43095ddb2d5a06df3", + "OSMOTIC_STRESS_T150_SE_REP1.mLb.mkD.sorted.bam.idxstats:md5,e765400df8443db2d29a7f9c4c7e1b97", + "OSMOTIC_STRESS_T15_PE_REP1.mLb.clN.sorted.bam.flagstat:md5,eb12ff8695703161276da457c9c30de5", + "OSMOTIC_STRESS_T15_PE_REP1.mLb.clN.sorted.bam.idxstats:md5,bbff2deab1453874a3afa52e1677901d", + "OSMOTIC_STRESS_T15_PE_REP1.mLb.mkD.sorted.bam.flagstat:md5,8d4a49f8a3fe5a36b38e17e4afd1f5d3", + "OSMOTIC_STRESS_T15_PE_REP1.mLb.mkD.sorted.bam.idxstats:md5,9bab2110046e1ed7ab2111303e7db5c0", + "OSMOTIC_STRESS_T0_PE.mRp.clN.scale_factor.txt:md5,e1ce0e8f48a0df9bfc61b0c614d7bb9c", + "OSMOTIC_STRESS_T100_SE.mRp.clN.scale_factor.txt:md5,af2d967e796c5129231b8d632dfdda87", + "OSMOTIC_STRESS_T0_PE.mRp.clN_peaks.broadPeak:md5,45336ce2d31d67ea8c56f03e18ec76f6", + "OSMOTIC_STRESS_T0_PE.mRp.clN_peaks.gappedPeak:md5,edb44531ce01afae39d5dc36133c03ce", + "OSMOTIC_STRESS_T0_PE.mRp.clN_peaks.xls:md5,63fd7e3cf43aa388246e677a8a87d151", + "OSMOTIC_STRESS_T100_SE.mRp.clN_peaks.broadPeak:md5,eb29b262e9e2cda7bfe967ffc0869de1", + "OSMOTIC_STRESS_T100_SE.mRp.clN_peaks.gappedPeak:md5,c13f1e4c898425a3fc63bbfa3bbbbdcb", + "OSMOTIC_STRESS_T100_SE.mRp.clN_peaks.xls:md5,fbb3d89ecc4ae841147fe2b8c853aa80", + "consensus_peaks.mRp.clN.PE.featureCounts.tsv:md5,73b12063c74317ed8b741fb039462ce4", + "consensus_peaks.mRp.clN.PE.featureCounts.tsv.summary:md5,c2caddeb40ce9ab8e42148e758faa4b5", + "consensus_peaks.mRp.clN.SE.featureCounts.tsv:md5,8bde09634c0476a154d0d9f24ed4adfb", + "consensus_peaks.mRp.clN.SE.featureCounts.tsv.summary:md5,4b634e2ae09651fefe5173493725ba91", + "consensus_peaks.mRp.clN.bed:md5,9d05ae155aa59ab54d5270c3a2da7459", "consensus_peaks.mRp.clN.boolean.intersect.txt:md5,a87fffa46d4050a48119917bbcf5252d", - "consensus_peaks.mRp.clN.boolean.txt:md5,decb8fd3c102c337d0e21fa4be18cd42", - "consensus_peaks.mRp.clN.saf:md5,22e0ad81994c6eb378b3361be3867498", + "consensus_peaks.mRp.clN.boolean.txt:md5,b85796c31be5360eb3793056de6f7854", + "consensus_peaks.mRp.clN.featureCounts.tsv:md5,a2b7971ed1bb037293fa23178593af79", + "consensus_peaks.mRp.clN.saf:md5,f7a135cd076a0409c53bc8165ecd4ff8", "R_sessionInfo.log:md5,fb0da0d7ad6994ed66a8e68348b19676", - "OSMOTIC_STRESS_T0_PE_REP1.size_factors.txt:md5,4110a9af22815faaec345fb07e729ed3", - "OSMOTIC_STRESS_T0_PE_REP2.size_factors.txt:md5,f279abbc922be5bb568acbf569df5b40", - "OSMOTIC_STRESS_T100_SE_REP1.size_factors.txt:md5,150b7b30d8e5a679e0728e5dd04ef309", - "OSMOTIC_STRESS_T100_SE_REP2.size_factors.txt:md5,eca73e1c36fb4dcc5f8f877cebcf0385", - "OSMOTIC_STRESS_T0_PE.mRp.clN_peaks.FRiP_mqc.tsv:md5,77e68c5e870602351948297838f8ca1d", + "OSMOTIC_STRESS_T0_PE_REP1.size_factors.txt:md5,b0a65e116f6ed2912ae54e6028638848", + "OSMOTIC_STRESS_T0_PE_REP2.size_factors.txt:md5,08f1041cccc50ba5b99700acc8e3f0e9", + "OSMOTIC_STRESS_T100_SE_REP1.size_factors.txt:md5,da2a3c62151a4680b26d2757ea37180b", + "OSMOTIC_STRESS_T100_SE_REP2.size_factors.txt:md5,29a976e74bebf12f401c052c57a233cb", + "OSMOTIC_STRESS_T0_PE.mRp.clN_peaks.FRiP_mqc.tsv:md5,2620209e4e6419d8545d9842acddb645", "OSMOTIC_STRESS_T0_PE.mRp.clN_peaks.count_mqc.tsv:md5,1b0ed83d8a0b7b7248fd8da81816bcb9", - "OSMOTIC_STRESS_T100_SE.mRp.clN_peaks.FRiP_mqc.tsv:md5,69282ee9e2eb7a11317fff5209564bbc", + "OSMOTIC_STRESS_T100_SE.mRp.clN_peaks.FRiP_mqc.tsv:md5,97a4086d0ca0e6fe96c4bf6864323f53", "OSMOTIC_STRESS_T100_SE.mRp.clN_peaks.count_mqc.tsv:md5,31e2de1f288e4e8191bcd0267d63828e", "macs3_annotatePeaks.mRp.clN.summary.txt:md5,96beab08431b5025c3a0c1c6efdde1ee", "macs3_annotatePeaks.mRp.clN.summary_mqc.tsv:md5,6c689c7ea46d435473766db948fe02c5", - "OSMOTIC_STRESS_T0_PE.mRp.clN.sorted.bam.flagstat:md5,60634034743a850c19091b008ad0d7f7", - "OSMOTIC_STRESS_T0_PE.mRp.clN.sorted.bam.idxstats:md5,0e5f7e4dc3d46e3cfcb47172524175b2", - "OSMOTIC_STRESS_T100_SE.mRp.clN.sorted.bam.flagstat:md5,cfa64d93e9604b521747179b268b5eaa", - "OSMOTIC_STRESS_T100_SE.mRp.clN.sorted.bam.idxstats:md5,3234e2237de090f8443246018063e755", + "OSMOTIC_STRESS_T0_PE.mRp.clN.sorted.bam.flagstat:md5,d560f3c4988251fdbf1cb35da841d39d", + "OSMOTIC_STRESS_T0_PE.mRp.clN.sorted.bam.idxstats:md5,34b61f771aad4d82cdd747ffba62474c", + "OSMOTIC_STRESS_T100_SE.mRp.clN.sorted.bam.flagstat:md5,34cf6a70329ac5f0038d9900673f9fea", + "OSMOTIC_STRESS_T100_SE.mRp.clN.sorted.bam.idxstats:md5,7e45d1561601ad26823656ccb784dbc6", "genome.fa:md5,4bad9f4b18056156a81f7f952abbe125", "genome.fa.fai:md5,6f4c0ce5258e6948135ad006e1f9ee1b", "deeptools_plot_fingerprint_counts_mlib_deeptools.txt:md5,15274f0c41d58f14d454fb0fb983e6fd", @@ -1033,52 +1067,52 @@ "mqc_cutadapt_filtered_reads_plot_1.txt:md5,b78f69173122f2cacf8121eaeb815382", "mqc_cutadapt_trimmed_sequences_plot_3_Counts.txt:md5,157073209c492b89badba367b1c57d83", "mqc_cutadapt_trimmed_sequences_plot_3_Obs_Exp.txt:md5,b04ae8b2ec27d71817ae7cb666888b9b", - "mqc_deeptools_fingerprint_plot_1.txt:md5,3b3676a0aea21f6f925f0d8fc77e13ae", - "mqc_fastqc_adapter_content_plot-2_1.txt:md5,7050d22f2eabdafb3d1eb81e736599af", + "mqc_deeptools_fingerprint_plot_1.txt:md5,c0dc7eb479f572b51b7c1aea7f08a241", + "mqc_fastqc_adapter_content_plot-2_1.txt:md5,3560a22f94aea25e27d97e056fb478ed", "mqc_fastqc_adapter_content_plot_1.txt:md5,66f3e2f6ba14599b0d6c20144df60777", - "mqc_fastqc_per_base_n_content_plot-2_1.txt:md5,7c5db7fad8afe578076466416e17bbd0", + "mqc_fastqc_per_base_n_content_plot-2_1.txt:md5,d79e95d36d955edee3e4bfb139dce967", "mqc_fastqc_per_base_n_content_plot_1.txt:md5,8d9cdd0463193b7e10332e2ca0273aca", - "mqc_fastqc_per_base_sequence_quality_plot-2_1.txt:md5,3f7c1c4998d41f10fcc48f15fc1c214f", + "mqc_fastqc_per_base_sequence_quality_plot-2_1.txt:md5,3bb6cad69480846e4003b9f0f3511caa", "mqc_fastqc_per_base_sequence_quality_plot_1.txt:md5,821cb87b0ae8bd61cd445d153b8f371a", - "mqc_fastqc_per_sequence_gc_content_plot-2_Counts.txt:md5,076f8f06afb71ddf1de87480c0a937ab", - "mqc_fastqc_per_sequence_gc_content_plot-2_Percentages.txt:md5,4f0d049c48c4cde730fdc2ee37130658", + "mqc_fastqc_per_sequence_gc_content_plot-2_Counts.txt:md5,88fb0e924094b5dd57f4003ac13fd1f4", + "mqc_fastqc_per_sequence_gc_content_plot-2_Percentages.txt:md5,a4b37bca5e61bf595c4532ffbc8b8f93", "mqc_fastqc_per_sequence_gc_content_plot_Counts.txt:md5,3fa7f0c0858d12cae8700e21774da86d", "mqc_fastqc_per_sequence_gc_content_plot_Percentages.txt:md5,a2d0c3ec413894e4dafa62ebdf44a06c", - "mqc_fastqc_per_sequence_quality_scores_plot-2_1.txt:md5,3dde643427f3229f283527966d7dd32e", + "mqc_fastqc_per_sequence_quality_scores_plot-2_1.txt:md5,841ccc3da246bd197fc966e9f8c5ca57", "mqc_fastqc_per_sequence_quality_scores_plot_1.txt:md5,3bfe1c94f710975829e2c1e3b5f16ea7", - "mqc_fastqc_sequence_counts_plot-2_1.txt:md5,83670beba48f5d0a1ff4bb038628f49e", + "mqc_fastqc_sequence_counts_plot-2_1.txt:md5,c734a06e1f3e3afc1486a0b45be880e1", "mqc_fastqc_sequence_counts_plot_1.txt:md5,d0cf8d64e742b5f446e6b602d86913b9", - "mqc_fastqc_sequence_duplication_levels_plot-2_1.txt:md5,907ad5b8fb27d2d9fd19281c8fa77e65", + "mqc_fastqc_sequence_duplication_levels_plot-2_1.txt:md5,d7ada8561d521eaf645073f7cccf7b82", "mqc_fastqc_sequence_duplication_levels_plot_1.txt:md5,23c4883ed6c22212b0c3e07a863745d1", - "mqc_fastqc_sequence_length_distribution_plot_1.txt:md5,46650932914f76713075e12934d6fcfe", - "mqc_featureCounts_assignment_plot-2_1.txt:md5,861efa81b89447534c36ad0ee83cab84", - "mqc_featureCounts_assignment_plot_1.txt:md5,3467de957432846db73ca75916f69f03", - "mqc_samtools-idxstats-mapped-reads-plot-2_Normalised_Counts.txt:md5,742884105ee8faa08ffc04a0d744a65f", - "mqc_samtools-idxstats-mapped-reads-plot-2_Observed_over_Expected_Counts.txt:md5,912267a9d1ab1b4f2a2fdea45f756590", - "mqc_samtools-idxstats-mapped-reads-plot-2_Raw_Counts.txt:md5,8c6fa3652e68b3bb048d571f515a3d82", - "mqc_samtools-idxstats-mapped-reads-plot-3_Normalised_Counts.txt:md5,f818f92f6dae674c5c9ba1fdd30ac283", - "mqc_samtools-idxstats-mapped-reads-plot-3_Observed_over_Expected_Counts.txt:md5,8dfe752841049fd868d32e4f7982e8ae", - "mqc_samtools-idxstats-mapped-reads-plot-3_Raw_Counts.txt:md5,c038743f9f9a6feae3d4b4988cc322d2", - "mqc_samtools-idxstats-mapped-reads-plot-4_Normalised_Counts.txt:md5,524bcb4364c376b9e9c337bce8606bd4", - "mqc_samtools-idxstats-mapped-reads-plot-4_Observed_over_Expected_Counts.txt:md5,807f1b9be4e9095e058b9ada9beeadf1", - "mqc_samtools-idxstats-mapped-reads-plot-4_Raw_Counts.txt:md5,8a9f046ce11094993e8daab88a441604", - "mqc_samtools-idxstats-mapped-reads-plot_Normalised_Counts.txt:md5,3f69d5db75d2b832bb85d7e5c74c8958", - "mqc_samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts.txt:md5,7e72b13471b3e6755dd6b4868bfb1914", - "mqc_samtools-idxstats-mapped-reads-plot_Raw_Counts.txt:md5,c0881aaed3b67938936d0dbdd0064e6c", - "mqc_samtools_alignment_plot-2_1.txt:md5,fdec2a0c318ccf06f757ac78a43d7775", - "mqc_samtools_alignment_plot-3_1.txt:md5,ffbd2892db3589a9c531afdab210d6df", - "mqc_samtools_alignment_plot-4_1.txt:md5,fad0dc92bef7676f2dd96fcb29a80afe", - "mqc_samtools_alignment_plot_1.txt:md5,83a5a93a7d827431cfecd1ed9923bac2", + "mqc_fastqc_sequence_length_distribution_plot_1.txt:md5,bc3acb40acbf620b237d0f2fa8c8a1ab", + "mqc_featureCounts_assignment_plot-2_1.txt:md5,3382859da6bde5cf1ebb622c68589040", + "mqc_featureCounts_assignment_plot_1.txt:md5,939ac6f218e2a6e24ccdec4ff814125c", + "mqc_samtools-idxstats-mapped-reads-plot-2_Normalised_Counts.txt:md5,24e8c9cb2e7d0bbfc49022717c84fa85", + "mqc_samtools-idxstats-mapped-reads-plot-2_Observed_over_Expected_Counts.txt:md5,99f9513a0d3239097a3b4454c6d78768", + "mqc_samtools-idxstats-mapped-reads-plot-2_Raw_Counts.txt:md5,04f8cb2c8855798e4ce61258ff0e14ec", + "mqc_samtools-idxstats-mapped-reads-plot-3_Normalised_Counts.txt:md5,a40196c909d5326637e526c800e33fc2", + "mqc_samtools-idxstats-mapped-reads-plot-3_Observed_over_Expected_Counts.txt:md5,c811c90bee0900f8e8906e29567f29cd", + "mqc_samtools-idxstats-mapped-reads-plot-3_Raw_Counts.txt:md5,a8befb9b95ad2e76a57d84772450e99b", + "mqc_samtools-idxstats-mapped-reads-plot-4_Normalised_Counts.txt:md5,3af943c8019d9eee42b4f40791a74c3f", + "mqc_samtools-idxstats-mapped-reads-plot-4_Observed_over_Expected_Counts.txt:md5,585e7aa5faf61c669ca5fb106340c6f4", + "mqc_samtools-idxstats-mapped-reads-plot-4_Raw_Counts.txt:md5,2687336b51d0fde9d2192ba48be4d319", + "mqc_samtools-idxstats-mapped-reads-plot_Normalised_Counts.txt:md5,bec101bc6ee3766454189e3ab65166c2", + "mqc_samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts.txt:md5,b27f1cb75fdc333d8a494dc8350d4351", + "mqc_samtools-idxstats-mapped-reads-plot_Raw_Counts.txt:md5,532caa74ae554bd7fdd40421c2ee7b51", + "mqc_samtools_alignment_plot-2_1.txt:md5,9c86235254e6f9598f62df2eec42ed45", + "mqc_samtools_alignment_plot-3_1.txt:md5,bff8cb7e31bc1221ddc08a1ab10faf91", + "mqc_samtools_alignment_plot-4_1.txt:md5,20f6f039fbf4b8c76b2309c97ad6e074", + "mqc_samtools_alignment_plot_1.txt:md5,afaffbac4a382f0e96d132f52d104fb1", "multiqc_citations.txt:md5,34da9f7497d275274f6dfd3b89831edb", - "multiqc_cutadapt.txt:md5,19916e059f11fa2c038c97bbb0ea190b", + "multiqc_cutadapt.txt:md5,926fcf7c5a9c5dc0a105a439c85a5f58", "multiqc_fastqc.txt:md5,a9a7484add8120fc3cf3d5626a92973b", - "multiqc_fastqc_1.txt:md5,6f694cea56d88eb91b4c9610f7a12ca5", - "multiqc_featureCounts_mlib_featurecounts.txt:md5,b66204f6e03a8f4aa6b5d6206f0ced92", - "multiqc_featureCounts_mrep_featurecounts.txt:md5,8002c1ba6325b1eaab118099d01b7ee1", - "multiqc_mlib_frip_score-plot.txt:md5,fad5d91d452286d71c5357951c28c62d", - "multiqc_mlib_peak_annotation-plot.txt:md5,bc637d1fb7a56ab4ddba3eb900ea5619", - "multiqc_mlib_peak_count-plot.txt:md5,22e2cc18e32e26a95a5db993a25a02d2", - "multiqc_mrep_frip_score-plot.txt:md5,69ff05e5e8e5fd888f1ea32a60b72994", + "multiqc_fastqc_1.txt:md5,58ab2bbd2d19745e5975742c6d1335d7", + "multiqc_featureCounts_mlib_featurecounts.txt:md5,e36cef3171ee60dd84c1101a560c1279", + "multiqc_featureCounts_mrep_featurecounts.txt:md5,f62bde3bd6c274ded2ffda9b1924aa4c", + "multiqc_mlib_frip_score-plot.txt:md5,07ae10450e52b7eaa14901cf4ee11071", + "multiqc_mlib_peak_annotation-plot.txt:md5,49177a2691f14d6d1dcb9cb9cda11940", + "multiqc_mlib_peak_count-plot.txt:md5,884c5b0b366376214407bd58ae1ac29c", + "multiqc_mrep_frip_score-plot.txt:md5,16c5819f17332b50c64558ea9f31d870", "multiqc_mrep_peak_annotation-plot.txt:md5,06918eae76d769b41471460676e02afb", "multiqc_mrep_peak_count-plot.txt:md5,e5019374d8964473ca648859cca797fc", "picard_histogram.txt:md5,c9aa8a5ac6841ffb3a6cc2de45b44797", @@ -1093,10 +1127,10 @@ "samplesheet.valid.csv:md5,51b046b55592e95949824f21b12c7e49" ] ], + "timestamp": "2026-07-26T03:38:36.608123719", "meta": { - "nf-test": "0.9.3", - "nextflow": "26.04.1" - }, - "timestamp": "2026-05-20T12:10:42.544961645" + "nf-test": "0.9.4", + "nextflow": "25.10.4" + } } } \ No newline at end of file diff --git a/tests/skip_consensus_peaks.nf.test.snap b/tests/skip_consensus_peaks.nf.test.snap index 724e644a..e48ef39f 100644 --- a/tests/skip_consensus_peaks.nf.test.snap +++ b/tests/skip_consensus_peaks.nf.test.snap @@ -3,45 +3,45 @@ "content": [ 26 ], + "timestamp": "2026-03-20T23:13:57.511221102", "meta": { "nf-test": "0.9.3", "nextflow": "25.04.7" - }, - "timestamp": "2026-03-20T23:13:57.511221102" + } }, "skip_consensus_peaks": { "content": [ 256, { "BAMTOOLS_FILTER": { - "samtools": "1.15.1", - "bamtools": "2.5.2" + "bamtools": "2.5.2", + "samtools": "1.15.1" }, "BAM_REMOVE_ORPHANS": { "samtools": "1.15.1" }, "BEDTOOLS_GENOMECOV": { "bedtools": "2.31.1", - "sort": 9.5 + "sort": "sort (GNU coreutils) 9.5" }, "BWA_INDEX": { "bwa": "0.7.19-r1273" }, "BWA_MEM": { - "bwa": "0.7.17-r1188", - "samtools": "1.19.2" + "bwa": "0.7.19-r1273", + "samtools": "1.22.1" }, "DEEPTOOLS_COMPUTEMATRIX_REFERENCE_POINT": { - "deeptools": "3.5.5" + "deeptools": "3.5.6" }, "DEEPTOOLS_COMPUTEMATRIX_SCALE_REGIONS": { - "deeptools": "3.5.5" + "deeptools": "3.5.6" }, "DEEPTOOLS_PLOTHEATMAP": { - "deeptools": "3.5.5" + "deeptools": "3.5.6" }, "DEEPTOOLS_PLOTPROFILE": { - "deeptools": "3.5.5" + "deeptools": "3.5.6" }, "FASTQC": { "fastqc": "0.12.1" @@ -50,14 +50,26 @@ "bedtools": "2.30.0", "samtools": "1.15.1" }, + "GENOME_BLACKLIST_REGIONS": { + "bedtools": "2.30.0" + }, + "GET_AUTOSOMES": { + "python": "3.8.3" + }, + "GTF2BED": { + "perl": "5.26.2" + }, "HOMER_ANNOTATEPEAKS": { "homer": 4.11 }, "IGV": { "python": "3.8.3" }, + "KHMER_UNIQUEKMERS": { + "khmer": "3.0.0a3" + }, "MACS3_CALLPEAK": { - "macs3": "3.0.1" + "macs3": "3.0.4" }, "MERGED_LIBRARY_ATAQV_ATAQV": { "ataqv": "1.3.1" @@ -66,16 +78,16 @@ "ataqv": "1.3.1" }, "MERGED_LIBRARY_DEEPTOOLS_PLOTFINGERPRINT": { - "deeptools": "3.5.5" + "deeptools": "3.5.6" }, "MERGED_LIBRARY_PICARD_COLLECTMULTIPLEMETRICS": { - "picard": "3.0.0" + "picard": "3.4.0" }, "MULTIQC_CUSTOM_PEAKS": { "sed": 4.7 }, "PICARD_MARKDUPLICATES": { - "picard": "3.1.1" + "picard": "3.4.0" }, "PICARD_MERGESAMFILES_LIBRARY": { "picard": "3.4.0" @@ -92,29 +104,32 @@ "SAMPLESHEET_CHECK": { "python": "3.8.3" }, + "SAMTOOLS_FAIDX": { + "samtools": "1.23.1" + }, "SAMTOOLS_FLAGSTAT": { - "samtools": "1.19.2" + "samtools": 1.24 }, "SAMTOOLS_IDXSTATS": { - "samtools": "1.19.2" + "samtools": 1.24 }, "SAMTOOLS_INDEX": { - "samtools": "1.19.2" + "samtools": 1.24 }, "SAMTOOLS_SORT": { - "samtools": "1.19.2" + "samtools": 1.24 }, "SAMTOOLS_STATS": { - "samtools": "1.19.2" + "samtools": 1.24 }, "TRIMGALORE": { - "trimgalore": "0.6.10" + "trimgalore": "2.1.0" }, - "UCSC_BEDGRAPHTOBIGWIG": { - "ucsc": 445 + "TSS_EXTRACT": { + "sed": 4.7 }, - "Workflow": { - "nf-core/atacseq": "v2.2.0dev" + "UCSC_BEDGRAPHTOBIGWIG": { + "ucsc": 482 } }, [ @@ -306,34 +321,34 @@ "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T0_PE_REP1.mLb.clN.CollectMultipleMetrics.insert_size_metrics", "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T0_PE_REP1.mLb.clN.CollectMultipleMetrics.quality_by_cycle_metrics", "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T0_PE_REP1.mLb.clN.CollectMultipleMetrics.quality_distribution_metrics", - "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T0_PE_REP1.mLb.mkD.sorted.MarkDuplicates.metrics.txt", + "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T0_PE_REP1.mLb.mkD.sorted.metrics.txt", "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T0_PE_REP2.mLb.clN.CollectMultipleMetrics.alignment_summary_metrics", "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T0_PE_REP2.mLb.clN.CollectMultipleMetrics.base_distribution_by_cycle_metrics", "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T0_PE_REP2.mLb.clN.CollectMultipleMetrics.insert_size_metrics", "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T0_PE_REP2.mLb.clN.CollectMultipleMetrics.quality_by_cycle_metrics", "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T0_PE_REP2.mLb.clN.CollectMultipleMetrics.quality_distribution_metrics", - "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T0_PE_REP2.mLb.mkD.sorted.MarkDuplicates.metrics.txt", + "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T0_PE_REP2.mLb.mkD.sorted.metrics.txt", "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T100_SE_REP1.mLb.clN.CollectMultipleMetrics.alignment_summary_metrics", "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T100_SE_REP1.mLb.clN.CollectMultipleMetrics.base_distribution_by_cycle_metrics", "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T100_SE_REP1.mLb.clN.CollectMultipleMetrics.quality_by_cycle_metrics", "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T100_SE_REP1.mLb.clN.CollectMultipleMetrics.quality_distribution_metrics", - "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T100_SE_REP1.mLb.mkD.sorted.MarkDuplicates.metrics.txt", + "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T100_SE_REP1.mLb.mkD.sorted.metrics.txt", "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T100_SE_REP2.mLb.clN.CollectMultipleMetrics.alignment_summary_metrics", "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T100_SE_REP2.mLb.clN.CollectMultipleMetrics.base_distribution_by_cycle_metrics", "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T100_SE_REP2.mLb.clN.CollectMultipleMetrics.quality_by_cycle_metrics", "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T100_SE_REP2.mLb.clN.CollectMultipleMetrics.quality_distribution_metrics", - "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T100_SE_REP2.mLb.mkD.sorted.MarkDuplicates.metrics.txt", + "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T100_SE_REP2.mLb.mkD.sorted.metrics.txt", "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T150_SE_REP1.mLb.clN.CollectMultipleMetrics.alignment_summary_metrics", "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T150_SE_REP1.mLb.clN.CollectMultipleMetrics.base_distribution_by_cycle_metrics", "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T150_SE_REP1.mLb.clN.CollectMultipleMetrics.quality_by_cycle_metrics", "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T150_SE_REP1.mLb.clN.CollectMultipleMetrics.quality_distribution_metrics", - "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T150_SE_REP1.mLb.mkD.sorted.MarkDuplicates.metrics.txt", + "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T150_SE_REP1.mLb.mkD.sorted.metrics.txt", "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T15_PE_REP1.mLb.clN.CollectMultipleMetrics.alignment_summary_metrics", "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T15_PE_REP1.mLb.clN.CollectMultipleMetrics.base_distribution_by_cycle_metrics", "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T15_PE_REP1.mLb.clN.CollectMultipleMetrics.insert_size_metrics", "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T15_PE_REP1.mLb.clN.CollectMultipleMetrics.quality_by_cycle_metrics", "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T15_PE_REP1.mLb.clN.CollectMultipleMetrics.quality_distribution_metrics", - "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T15_PE_REP1.mLb.mkD.sorted.MarkDuplicates.metrics.txt", + "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T15_PE_REP1.mLb.mkD.sorted.metrics.txt", "bwa/merged_library/picard_metrics/pdf", "bwa/merged_library/picard_metrics/pdf/OSMOTIC_STRESS_T0_PE_REP1.mLb.clN.CollectMultipleMetrics.base_distribution_by_cycle.pdf", "bwa/merged_library/picard_metrics/pdf/OSMOTIC_STRESS_T0_PE_REP1.mLb.clN.CollectMultipleMetrics.insert_size_histogram.pdf", @@ -431,8 +446,8 @@ "bwa/merged_replicate/macs3/broad_peak/qc/macs3_peak.mRp.clN.plots.pdf", "bwa/merged_replicate/macs3/broad_peak/qc/macs3_peak.mRp.clN.summary.txt", "bwa/merged_replicate/picard_metrics", - "bwa/merged_replicate/picard_metrics/OSMOTIC_STRESS_T0_PE.mRp.clN.sorted.MarkDuplicates.metrics.txt", - "bwa/merged_replicate/picard_metrics/OSMOTIC_STRESS_T100_SE.mRp.clN.sorted.MarkDuplicates.metrics.txt", + "bwa/merged_replicate/picard_metrics/OSMOTIC_STRESS_T0_PE.mRp.clN.sorted.metrics.txt", + "bwa/merged_replicate/picard_metrics/OSMOTIC_STRESS_T100_SE.mRp.clN.sorted.metrics.txt", "bwa/merged_replicate/samtools_stats", "bwa/merged_replicate/samtools_stats/OSMOTIC_STRESS_T0_PE.mRp.clN.sorted.bam.flagstat", "bwa/merged_replicate/samtools_stats/OSMOTIC_STRESS_T0_PE.mRp.clN.sorted.bam.idxstats", @@ -851,90 +866,90 @@ "sourcesanspro-semiboldit.woff:md5,f1d255aa459786dfc6aa2e488ac01245", "index.html:md5,bf7747be761e56ad7c54c842ac88461a", "ataqv.js:md5,feb291b7839e9e43ed304565e3a605d9", - "configuration.js:md5,6ba17d7ec7e2247e9b970bd3b0ce9a96", + "configuration.js:md5,5fa99e6c27050fed09c3764512c56c96", "d3.min.js:md5,db69fb2626a71a286ee772d673138aca", "datatables.min.js:md5,e369b872620dadb05e4eb555b81f9112", "jszip.min.js:md5,09e492cb492ffa75484bbe10f1f721d1", "OSMOTIC_STRESS_T0_PE_REP1.mLb.clN.scale_factor.txt:md5,5afe7d16ac432b483454d7406dd4b72e", - "OSMOTIC_STRESS_T0_PE_REP2.mLb.clN.scale_factor.txt:md5,6caa1b14d21350752628436355eabef5", + "OSMOTIC_STRESS_T0_PE_REP2.mLb.clN.scale_factor.txt:md5,816f20d069360ccb44e8e565b6b0a4e6", "OSMOTIC_STRESS_T100_SE_REP1.mLb.clN.scale_factor.txt:md5,a9b555d96448f5ac9bdb6f4526f86341", - "OSMOTIC_STRESS_T100_SE_REP2.mLb.clN.scale_factor.txt:md5,e3ac13dff612e52453ccf3bc4692c2ea", - "OSMOTIC_STRESS_T150_SE_REP1.mLb.clN.scale_factor.txt:md5,bf338379ef0251df310edcbe41668fee", - "OSMOTIC_STRESS_T15_PE_REP1.mLb.clN.scale_factor.txt:md5,57e48407c6ada9d84166e734ca43a5ed", + "OSMOTIC_STRESS_T100_SE_REP2.mLb.clN.scale_factor.txt:md5,618690cf55da217e9cd1324f38aab6de", + "OSMOTIC_STRESS_T150_SE_REP1.mLb.clN.scale_factor.txt:md5,e2a4023f321415738eb727cd3bcbce5b", + "OSMOTIC_STRESS_T15_PE_REP1.mLb.clN.scale_factor.txt:md5,91db8a99954d4096bdb48be8c20fc4be", "OSMOTIC_STRESS_T0_PE_REP1.mLb.clN_peaks.broadPeak:md5,c5b53511f764fb205886daa4f2ab00ec", - "OSMOTIC_STRESS_T0_PE_REP1.mLb.clN_peaks.gappedPeak:md5,50b3a0ebae79dc153e56a37658bfab6f", - "OSMOTIC_STRESS_T0_PE_REP1.mLb.clN_peaks.xls:md5,41446ba0c0eb56ba34ba518658d76e89", - "OSMOTIC_STRESS_T0_PE_REP2.mLb.clN_peaks.broadPeak:md5,47246433d4cb8625d047b25c84d25857", - "OSMOTIC_STRESS_T0_PE_REP2.mLb.clN_peaks.gappedPeak:md5,43d571030847b7cc2b21b0f61cc12c16", - "OSMOTIC_STRESS_T0_PE_REP2.mLb.clN_peaks.xls:md5,c55f63c9db41018a430158453e0538af", + "OSMOTIC_STRESS_T0_PE_REP1.mLb.clN_peaks.gappedPeak:md5,adca40deef4439d757f656ceb2d434e4", + "OSMOTIC_STRESS_T0_PE_REP1.mLb.clN_peaks.xls:md5,f3e47ff619d7b4c0e2d543d1609927a4", + "OSMOTIC_STRESS_T0_PE_REP2.mLb.clN_peaks.broadPeak:md5,3e8ae758c789ca16094a3d96718f7be3", + "OSMOTIC_STRESS_T0_PE_REP2.mLb.clN_peaks.gappedPeak:md5,da2909b11601c515cc1d431a5ef67bcb", + "OSMOTIC_STRESS_T0_PE_REP2.mLb.clN_peaks.xls:md5,9e9ca58826c2ab3e70c06a533e7dbae1", "OSMOTIC_STRESS_T100_SE_REP1.mLb.clN_peaks.broadPeak:md5,171bbf48bda913bf702954c20dd57fcb", - "OSMOTIC_STRESS_T100_SE_REP1.mLb.clN_peaks.gappedPeak:md5,d101f70984161baefc31fb7536b3835e", - "OSMOTIC_STRESS_T100_SE_REP1.mLb.clN_peaks.xls:md5,d375f257642d942eaeeeef93541a8257", - "OSMOTIC_STRESS_T100_SE_REP2.mLb.clN_peaks.broadPeak:md5,c163607903fd2e2ae38db046fdd787f0", - "OSMOTIC_STRESS_T100_SE_REP2.mLb.clN_peaks.gappedPeak:md5,71e4536c7172f000dd66c39f39396e86", - "OSMOTIC_STRESS_T100_SE_REP2.mLb.clN_peaks.xls:md5,4a2e2c3ac0b87ff4a3cc5439015cfc5d", - "OSMOTIC_STRESS_T150_SE_REP1.mLb.clN_peaks.broadPeak:md5,49b0ebc586b9e59b72a1d6c35a07c5f9", - "OSMOTIC_STRESS_T150_SE_REP1.mLb.clN_peaks.gappedPeak:md5,c55133b8532173de8fe7b3b1f51e6190", - "OSMOTIC_STRESS_T150_SE_REP1.mLb.clN_peaks.xls:md5,cd2ee19135ebda5b33b953b8d5039390", - "OSMOTIC_STRESS_T15_PE_REP1.mLb.clN_peaks.broadPeak:md5,5fec6a7a54bfd5fc2178dc2408664e9b", - "OSMOTIC_STRESS_T15_PE_REP1.mLb.clN_peaks.gappedPeak:md5,775585b2d83a50b483d28f82415b9bdb", - "OSMOTIC_STRESS_T15_PE_REP1.mLb.clN_peaks.xls:md5,fb6af0f9cf4506c25b041e2ace8953cb", + "OSMOTIC_STRESS_T100_SE_REP1.mLb.clN_peaks.gappedPeak:md5,6ac2f1603586b83ba2591f9c90fd13c9", + "OSMOTIC_STRESS_T100_SE_REP1.mLb.clN_peaks.xls:md5,ec811f9a7b8f5a517caf7b3a2f4988b8", + "OSMOTIC_STRESS_T100_SE_REP2.mLb.clN_peaks.broadPeak:md5,d61e6f9675514a5b3c343e78b96c9111", + "OSMOTIC_STRESS_T100_SE_REP2.mLb.clN_peaks.gappedPeak:md5,fb8556e521d4c254f57ae3fdb67c9b64", + "OSMOTIC_STRESS_T100_SE_REP2.mLb.clN_peaks.xls:md5,3f415d834d3f9e5939dc8601ff0898b5", + "OSMOTIC_STRESS_T150_SE_REP1.mLb.clN_peaks.broadPeak:md5,8f44ebfeb1ce0f3d01e915f3759b7a4f", + "OSMOTIC_STRESS_T150_SE_REP1.mLb.clN_peaks.gappedPeak:md5,fec3059e1a1b77fa791119d8a4d6d4c5", + "OSMOTIC_STRESS_T150_SE_REP1.mLb.clN_peaks.xls:md5,7df7f8827964cf1a29855e4c91f67246", + "OSMOTIC_STRESS_T15_PE_REP1.mLb.clN_peaks.broadPeak:md5,72db339e1a71e9bce5be245aab548a76", + "OSMOTIC_STRESS_T15_PE_REP1.mLb.clN_peaks.gappedPeak:md5,7a10a324776281b675922de41c21e9f7", + "OSMOTIC_STRESS_T15_PE_REP1.mLb.clN_peaks.xls:md5,d10e9cad50ff99d58776f6b198f65936", "OSMOTIC_STRESS_T0_PE_REP1.mLb.clN_peaks.FRiP_mqc.tsv:md5,085031e28b891cef205a81c9b6f34df4", "OSMOTIC_STRESS_T0_PE_REP1.mLb.clN_peaks.count_mqc.tsv:md5,01eada7dd6240d2af66efaf0105f801e", - "OSMOTIC_STRESS_T0_PE_REP2.mLb.clN_peaks.FRiP_mqc.tsv:md5,160b7f88062c5ad1317e177bcf375236", - "OSMOTIC_STRESS_T0_PE_REP2.mLb.clN_peaks.count_mqc.tsv:md5,363b299f1ac39d86230789177e3ba2d9", + "OSMOTIC_STRESS_T0_PE_REP2.mLb.clN_peaks.FRiP_mqc.tsv:md5,602c8df9e26c8e057d76eaa1a133f513", + "OSMOTIC_STRESS_T0_PE_REP2.mLb.clN_peaks.count_mqc.tsv:md5,5de4f043eb01162f21c21e0cdf608f91", "OSMOTIC_STRESS_T100_SE_REP1.mLb.clN_peaks.FRiP_mqc.tsv:md5,e1c3ca6628ab103b34063f0bc0fd6fa1", "OSMOTIC_STRESS_T100_SE_REP1.mLb.clN_peaks.count_mqc.tsv:md5,d9f63fd5f5f535c5c62bdbee9b9095aa", - "OSMOTIC_STRESS_T100_SE_REP2.mLb.clN_peaks.FRiP_mqc.tsv:md5,a904ac58084ee573989f28809034d5c0", - "OSMOTIC_STRESS_T100_SE_REP2.mLb.clN_peaks.count_mqc.tsv:md5,49a15784f9ab6d9eff73508e2f463cce", - "OSMOTIC_STRESS_T150_SE_REP1.mLb.clN_peaks.FRiP_mqc.tsv:md5,ab8e5b2a2208d2c7f899ed7a8cf67845", + "OSMOTIC_STRESS_T100_SE_REP2.mLb.clN_peaks.FRiP_mqc.tsv:md5,e3940e03c0309b06e25d412e22078f57", + "OSMOTIC_STRESS_T100_SE_REP2.mLb.clN_peaks.count_mqc.tsv:md5,c584070f8983b196453026b463a6bffd", + "OSMOTIC_STRESS_T150_SE_REP1.mLb.clN_peaks.FRiP_mqc.tsv:md5,582520ff525281336452eb4761b52e78", "OSMOTIC_STRESS_T150_SE_REP1.mLb.clN_peaks.count_mqc.tsv:md5,aeb72fa43a2bf33c6799ba5e6f030273", - "OSMOTIC_STRESS_T15_PE_REP1.mLb.clN_peaks.FRiP_mqc.tsv:md5,d355b0d932962b8eb42dbecd1bcbc5fa", + "OSMOTIC_STRESS_T15_PE_REP1.mLb.clN_peaks.FRiP_mqc.tsv:md5,876ec6709a7ec06e1ec7d2f502af0ac5", "OSMOTIC_STRESS_T15_PE_REP1.mLb.clN_peaks.count_mqc.tsv:md5,6718411a3dd59b2e62e9758c401b14a2", - "macs3_annotatePeaks.mLb.clN.summary.txt:md5,0aef404ef488aefb3dd7a72826c28db8", - "macs3_annotatePeaks.mLb.clN.summary_mqc.tsv:md5,a24fa1102eb240a1108f92e8988f39a0", + "macs3_annotatePeaks.mLb.clN.summary.txt:md5,3ff8d12f5eae22308bb3afe873ccc8c9", + "macs3_annotatePeaks.mLb.clN.summary_mqc.tsv:md5,7faa6ca1d6da087f456f92921e769989", "OSMOTIC_STRESS_T0_PE_REP1.mLb.clN.sorted.bam.flagstat:md5,35b6851dd4960fbcf0353b2b998ee467", "OSMOTIC_STRESS_T0_PE_REP1.mLb.clN.sorted.bam.idxstats:md5,dda689aa8a4b89be95e687ecdd03827b", "OSMOTIC_STRESS_T0_PE_REP1.mLb.mkD.sorted.bam.flagstat:md5,828f11cb1790a805192dc31281ad2e3f", "OSMOTIC_STRESS_T0_PE_REP1.mLb.mkD.sorted.bam.idxstats:md5,140d6011382f7f47396bfe3c922fe91c", - "OSMOTIC_STRESS_T0_PE_REP2.mLb.clN.sorted.bam.flagstat:md5,4d9ca367550a721dd0aaeaab58421bdb", - "OSMOTIC_STRESS_T0_PE_REP2.mLb.clN.sorted.bam.idxstats:md5,cdc0d96cb1c0e5b48ba2c418233f7a94", - "OSMOTIC_STRESS_T0_PE_REP2.mLb.mkD.sorted.bam.flagstat:md5,8d0f37dc5986deee90d63bd439874882", - "OSMOTIC_STRESS_T0_PE_REP2.mLb.mkD.sorted.bam.idxstats:md5,a77125d053253ed788969bfaedbfc455", + "OSMOTIC_STRESS_T0_PE_REP2.mLb.clN.sorted.bam.flagstat:md5,69f9e83c32e2a3fadf59188e3ef3e894", + "OSMOTIC_STRESS_T0_PE_REP2.mLb.clN.sorted.bam.idxstats:md5,678fa8d9637a41488ac97ddf818d8b36", + "OSMOTIC_STRESS_T0_PE_REP2.mLb.mkD.sorted.bam.flagstat:md5,fcd2c20d6fc99776693a143d5b932ca5", + "OSMOTIC_STRESS_T0_PE_REP2.mLb.mkD.sorted.bam.idxstats:md5,d3ceb83f80afec7154fe635a0028b4d8", "OSMOTIC_STRESS_T100_SE_REP1.mLb.clN.sorted.bam.flagstat:md5,f9f155991b027ae0009c110884f5abf9", "OSMOTIC_STRESS_T100_SE_REP1.mLb.clN.sorted.bam.idxstats:md5,3d31ff2b94710969f532b1734480b92b", "OSMOTIC_STRESS_T100_SE_REP1.mLb.mkD.sorted.bam.flagstat:md5,e3d0421cc9477abb16c32d9b3cf02387", "OSMOTIC_STRESS_T100_SE_REP1.mLb.mkD.sorted.bam.idxstats:md5,c216287572279f13283dcdf22a4bc8e4", - "OSMOTIC_STRESS_T100_SE_REP2.mLb.clN.sorted.bam.flagstat:md5,3c313eb066e4a38fb3fd81fed8267492", - "OSMOTIC_STRESS_T100_SE_REP2.mLb.clN.sorted.bam.idxstats:md5,80d6c838ba770ac3f736ca076871108d", - "OSMOTIC_STRESS_T100_SE_REP2.mLb.mkD.sorted.bam.flagstat:md5,6f26205e50a841c2cd65ccc87ec70eb5", - "OSMOTIC_STRESS_T100_SE_REP2.mLb.mkD.sorted.bam.idxstats:md5,a0b8823060c04c5d68255b9c558fc414", - "OSMOTIC_STRESS_T150_SE_REP1.mLb.clN.sorted.bam.flagstat:md5,5b01c6b579255502fe3ce7a7d8096552", - "OSMOTIC_STRESS_T150_SE_REP1.mLb.clN.sorted.bam.idxstats:md5,8ab305c4b298cc942dc2f9d11ea3bce2", - "OSMOTIC_STRESS_T150_SE_REP1.mLb.mkD.sorted.bam.flagstat:md5,5b26ec19f5770acfd55d523de688a3fe", - "OSMOTIC_STRESS_T150_SE_REP1.mLb.mkD.sorted.bam.idxstats:md5,a16727dd09a8ae9840851b682ab37854", - "OSMOTIC_STRESS_T15_PE_REP1.mLb.clN.sorted.bam.flagstat:md5,3f51a059a43e027213af32611c93dfe5", - "OSMOTIC_STRESS_T15_PE_REP1.mLb.clN.sorted.bam.idxstats:md5,2a77e286b62e4f2567024ba7a2192066", - "OSMOTIC_STRESS_T15_PE_REP1.mLb.mkD.sorted.bam.flagstat:md5,7aed9e40456bf326010231d9f3c1bf33", - "OSMOTIC_STRESS_T15_PE_REP1.mLb.mkD.sorted.bam.idxstats:md5,7af9840564eee65e3ddb1a0765787ac9", - "OSMOTIC_STRESS_T0_PE.mRp.clN.scale_factor.txt:md5,b9a30528c9329b0600ff3c9a7658c12e", - "OSMOTIC_STRESS_T100_SE.mRp.clN.scale_factor.txt:md5,730eec38d30794964d7f52ceae006582", - "OSMOTIC_STRESS_T0_PE.mRp.clN_peaks.broadPeak:md5,185644d17b2ea602c990c8540735f01d", - "OSMOTIC_STRESS_T0_PE.mRp.clN_peaks.gappedPeak:md5,39211adc421cce0c0c14e887ea0a4d6c", - "OSMOTIC_STRESS_T0_PE.mRp.clN_peaks.xls:md5,d8bf42b50905eac9cd3e387fae92a617", - "OSMOTIC_STRESS_T100_SE.mRp.clN_peaks.broadPeak:md5,52b2837492d44cb7e5549f183c92f8de", - "OSMOTIC_STRESS_T100_SE.mRp.clN_peaks.gappedPeak:md5,bb6ef1e40a2bad3b27ecb87d5890af7e", - "OSMOTIC_STRESS_T100_SE.mRp.clN_peaks.xls:md5,c725baa3370fd86f5707e01dbed81c7c", - "OSMOTIC_STRESS_T0_PE.mRp.clN_peaks.FRiP_mqc.tsv:md5,77e68c5e870602351948297838f8ca1d", + "OSMOTIC_STRESS_T100_SE_REP2.mLb.clN.sorted.bam.flagstat:md5,839440ef66553433166e265e79db6eae", + "OSMOTIC_STRESS_T100_SE_REP2.mLb.clN.sorted.bam.idxstats:md5,466be87abe64ed73a9714fa5fac6a137", + "OSMOTIC_STRESS_T100_SE_REP2.mLb.mkD.sorted.bam.flagstat:md5,c4cd9237f8373b8f7a84851d7d0530f4", + "OSMOTIC_STRESS_T100_SE_REP2.mLb.mkD.sorted.bam.idxstats:md5,acdc7649de86409b0fbcf6052b64ba1e", + "OSMOTIC_STRESS_T150_SE_REP1.mLb.clN.sorted.bam.flagstat:md5,86ba63b9e1d2fbc3d95488557315105a", + "OSMOTIC_STRESS_T150_SE_REP1.mLb.clN.sorted.bam.idxstats:md5,dc506bc379328fcbc34558931e21bbe3", + "OSMOTIC_STRESS_T150_SE_REP1.mLb.mkD.sorted.bam.flagstat:md5,00a9eb297b29c4b43095ddb2d5a06df3", + "OSMOTIC_STRESS_T150_SE_REP1.mLb.mkD.sorted.bam.idxstats:md5,e765400df8443db2d29a7f9c4c7e1b97", + "OSMOTIC_STRESS_T15_PE_REP1.mLb.clN.sorted.bam.flagstat:md5,eb12ff8695703161276da457c9c30de5", + "OSMOTIC_STRESS_T15_PE_REP1.mLb.clN.sorted.bam.idxstats:md5,bbff2deab1453874a3afa52e1677901d", + "OSMOTIC_STRESS_T15_PE_REP1.mLb.mkD.sorted.bam.flagstat:md5,8d4a49f8a3fe5a36b38e17e4afd1f5d3", + "OSMOTIC_STRESS_T15_PE_REP1.mLb.mkD.sorted.bam.idxstats:md5,9bab2110046e1ed7ab2111303e7db5c0", + "OSMOTIC_STRESS_T0_PE.mRp.clN.scale_factor.txt:md5,e1ce0e8f48a0df9bfc61b0c614d7bb9c", + "OSMOTIC_STRESS_T100_SE.mRp.clN.scale_factor.txt:md5,af2d967e796c5129231b8d632dfdda87", + "OSMOTIC_STRESS_T0_PE.mRp.clN_peaks.broadPeak:md5,45336ce2d31d67ea8c56f03e18ec76f6", + "OSMOTIC_STRESS_T0_PE.mRp.clN_peaks.gappedPeak:md5,edb44531ce01afae39d5dc36133c03ce", + "OSMOTIC_STRESS_T0_PE.mRp.clN_peaks.xls:md5,63fd7e3cf43aa388246e677a8a87d151", + "OSMOTIC_STRESS_T100_SE.mRp.clN_peaks.broadPeak:md5,eb29b262e9e2cda7bfe967ffc0869de1", + "OSMOTIC_STRESS_T100_SE.mRp.clN_peaks.gappedPeak:md5,c13f1e4c898425a3fc63bbfa3bbbbdcb", + "OSMOTIC_STRESS_T100_SE.mRp.clN_peaks.xls:md5,fbb3d89ecc4ae841147fe2b8c853aa80", + "OSMOTIC_STRESS_T0_PE.mRp.clN_peaks.FRiP_mqc.tsv:md5,2620209e4e6419d8545d9842acddb645", "OSMOTIC_STRESS_T0_PE.mRp.clN_peaks.count_mqc.tsv:md5,1b0ed83d8a0b7b7248fd8da81816bcb9", - "OSMOTIC_STRESS_T100_SE.mRp.clN_peaks.FRiP_mqc.tsv:md5,69282ee9e2eb7a11317fff5209564bbc", + "OSMOTIC_STRESS_T100_SE.mRp.clN_peaks.FRiP_mqc.tsv:md5,97a4086d0ca0e6fe96c4bf6864323f53", "OSMOTIC_STRESS_T100_SE.mRp.clN_peaks.count_mqc.tsv:md5,31e2de1f288e4e8191bcd0267d63828e", "macs3_annotatePeaks.mRp.clN.summary.txt:md5,96beab08431b5025c3a0c1c6efdde1ee", "macs3_annotatePeaks.mRp.clN.summary_mqc.tsv:md5,6c689c7ea46d435473766db948fe02c5", - "OSMOTIC_STRESS_T0_PE.mRp.clN.sorted.bam.flagstat:md5,60634034743a850c19091b008ad0d7f7", - "OSMOTIC_STRESS_T0_PE.mRp.clN.sorted.bam.idxstats:md5,0e5f7e4dc3d46e3cfcb47172524175b2", - "OSMOTIC_STRESS_T100_SE.mRp.clN.sorted.bam.flagstat:md5,cfa64d93e9604b521747179b268b5eaa", - "OSMOTIC_STRESS_T100_SE.mRp.clN.sorted.bam.idxstats:md5,3234e2237de090f8443246018063e755", + "OSMOTIC_STRESS_T0_PE.mRp.clN.sorted.bam.flagstat:md5,d560f3c4988251fdbf1cb35da841d39d", + "OSMOTIC_STRESS_T0_PE.mRp.clN.sorted.bam.idxstats:md5,34b61f771aad4d82cdd747ffba62474c", + "OSMOTIC_STRESS_T100_SE.mRp.clN.sorted.bam.flagstat:md5,34cf6a70329ac5f0038d9900673f9fea", + "OSMOTIC_STRESS_T100_SE.mRp.clN.sorted.bam.idxstats:md5,7e45d1561601ad26823656ccb784dbc6", "genome.fa:md5,4bad9f4b18056156a81f7f952abbe125", "genome.fa.fai:md5,6f4c0ce5258e6948135ad006e1f9ee1b", "deeptools_plot_fingerprint_counts_mlib_deeptools.txt:md5,15274f0c41d58f14d454fb0fb983e6fd", @@ -942,48 +957,48 @@ "mqc_cutadapt_filtered_reads_plot_1.txt:md5,b78f69173122f2cacf8121eaeb815382", "mqc_cutadapt_trimmed_sequences_plot_3_Counts.txt:md5,157073209c492b89badba367b1c57d83", "mqc_cutadapt_trimmed_sequences_plot_3_Obs_Exp.txt:md5,b04ae8b2ec27d71817ae7cb666888b9b", - "mqc_deeptools_fingerprint_plot_1.txt:md5,3b3676a0aea21f6f925f0d8fc77e13ae", - "mqc_fastqc_adapter_content_plot-2_1.txt:md5,7050d22f2eabdafb3d1eb81e736599af", + "mqc_deeptools_fingerprint_plot_1.txt:md5,c0dc7eb479f572b51b7c1aea7f08a241", + "mqc_fastqc_adapter_content_plot-2_1.txt:md5,3560a22f94aea25e27d97e056fb478ed", "mqc_fastqc_adapter_content_plot_1.txt:md5,66f3e2f6ba14599b0d6c20144df60777", - "mqc_fastqc_per_base_n_content_plot-2_1.txt:md5,7c5db7fad8afe578076466416e17bbd0", + "mqc_fastqc_per_base_n_content_plot-2_1.txt:md5,d79e95d36d955edee3e4bfb139dce967", "mqc_fastqc_per_base_n_content_plot_1.txt:md5,8d9cdd0463193b7e10332e2ca0273aca", - "mqc_fastqc_per_base_sequence_quality_plot-2_1.txt:md5,3f7c1c4998d41f10fcc48f15fc1c214f", + "mqc_fastqc_per_base_sequence_quality_plot-2_1.txt:md5,3bb6cad69480846e4003b9f0f3511caa", "mqc_fastqc_per_base_sequence_quality_plot_1.txt:md5,821cb87b0ae8bd61cd445d153b8f371a", - "mqc_fastqc_per_sequence_gc_content_plot-2_Counts.txt:md5,076f8f06afb71ddf1de87480c0a937ab", - "mqc_fastqc_per_sequence_gc_content_plot-2_Percentages.txt:md5,4f0d049c48c4cde730fdc2ee37130658", + "mqc_fastqc_per_sequence_gc_content_plot-2_Counts.txt:md5,88fb0e924094b5dd57f4003ac13fd1f4", + "mqc_fastqc_per_sequence_gc_content_plot-2_Percentages.txt:md5,a4b37bca5e61bf595c4532ffbc8b8f93", "mqc_fastqc_per_sequence_gc_content_plot_Counts.txt:md5,3fa7f0c0858d12cae8700e21774da86d", "mqc_fastqc_per_sequence_gc_content_plot_Percentages.txt:md5,a2d0c3ec413894e4dafa62ebdf44a06c", - "mqc_fastqc_per_sequence_quality_scores_plot-2_1.txt:md5,3dde643427f3229f283527966d7dd32e", + "mqc_fastqc_per_sequence_quality_scores_plot-2_1.txt:md5,841ccc3da246bd197fc966e9f8c5ca57", "mqc_fastqc_per_sequence_quality_scores_plot_1.txt:md5,3bfe1c94f710975829e2c1e3b5f16ea7", - "mqc_fastqc_sequence_counts_plot-2_1.txt:md5,83670beba48f5d0a1ff4bb038628f49e", + "mqc_fastqc_sequence_counts_plot-2_1.txt:md5,c734a06e1f3e3afc1486a0b45be880e1", "mqc_fastqc_sequence_counts_plot_1.txt:md5,d0cf8d64e742b5f446e6b602d86913b9", - "mqc_fastqc_sequence_duplication_levels_plot-2_1.txt:md5,907ad5b8fb27d2d9fd19281c8fa77e65", + "mqc_fastqc_sequence_duplication_levels_plot-2_1.txt:md5,d7ada8561d521eaf645073f7cccf7b82", "mqc_fastqc_sequence_duplication_levels_plot_1.txt:md5,23c4883ed6c22212b0c3e07a863745d1", - "mqc_fastqc_sequence_length_distribution_plot_1.txt:md5,46650932914f76713075e12934d6fcfe", - "mqc_samtools-idxstats-mapped-reads-plot-2_Normalised_Counts.txt:md5,742884105ee8faa08ffc04a0d744a65f", - "mqc_samtools-idxstats-mapped-reads-plot-2_Observed_over_Expected_Counts.txt:md5,912267a9d1ab1b4f2a2fdea45f756590", - "mqc_samtools-idxstats-mapped-reads-plot-2_Raw_Counts.txt:md5,8c6fa3652e68b3bb048d571f515a3d82", - "mqc_samtools-idxstats-mapped-reads-plot-3_Normalised_Counts.txt:md5,f818f92f6dae674c5c9ba1fdd30ac283", - "mqc_samtools-idxstats-mapped-reads-plot-3_Observed_over_Expected_Counts.txt:md5,8dfe752841049fd868d32e4f7982e8ae", - "mqc_samtools-idxstats-mapped-reads-plot-3_Raw_Counts.txt:md5,c038743f9f9a6feae3d4b4988cc322d2", - "mqc_samtools-idxstats-mapped-reads-plot-4_Normalised_Counts.txt:md5,524bcb4364c376b9e9c337bce8606bd4", - "mqc_samtools-idxstats-mapped-reads-plot-4_Observed_over_Expected_Counts.txt:md5,807f1b9be4e9095e058b9ada9beeadf1", - "mqc_samtools-idxstats-mapped-reads-plot-4_Raw_Counts.txt:md5,8a9f046ce11094993e8daab88a441604", - "mqc_samtools-idxstats-mapped-reads-plot_Normalised_Counts.txt:md5,3f69d5db75d2b832bb85d7e5c74c8958", - "mqc_samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts.txt:md5,7e72b13471b3e6755dd6b4868bfb1914", - "mqc_samtools-idxstats-mapped-reads-plot_Raw_Counts.txt:md5,c0881aaed3b67938936d0dbdd0064e6c", - "mqc_samtools_alignment_plot-2_1.txt:md5,fdec2a0c318ccf06f757ac78a43d7775", - "mqc_samtools_alignment_plot-3_1.txt:md5,ffbd2892db3589a9c531afdab210d6df", - "mqc_samtools_alignment_plot-4_1.txt:md5,fad0dc92bef7676f2dd96fcb29a80afe", - "mqc_samtools_alignment_plot_1.txt:md5,83a5a93a7d827431cfecd1ed9923bac2", + "mqc_fastqc_sequence_length_distribution_plot_1.txt:md5,bc3acb40acbf620b237d0f2fa8c8a1ab", + "mqc_samtools-idxstats-mapped-reads-plot-2_Normalised_Counts.txt:md5,24e8c9cb2e7d0bbfc49022717c84fa85", + "mqc_samtools-idxstats-mapped-reads-plot-2_Observed_over_Expected_Counts.txt:md5,99f9513a0d3239097a3b4454c6d78768", + "mqc_samtools-idxstats-mapped-reads-plot-2_Raw_Counts.txt:md5,04f8cb2c8855798e4ce61258ff0e14ec", + "mqc_samtools-idxstats-mapped-reads-plot-3_Normalised_Counts.txt:md5,a40196c909d5326637e526c800e33fc2", + "mqc_samtools-idxstats-mapped-reads-plot-3_Observed_over_Expected_Counts.txt:md5,c811c90bee0900f8e8906e29567f29cd", + "mqc_samtools-idxstats-mapped-reads-plot-3_Raw_Counts.txt:md5,a8befb9b95ad2e76a57d84772450e99b", + "mqc_samtools-idxstats-mapped-reads-plot-4_Normalised_Counts.txt:md5,3af943c8019d9eee42b4f40791a74c3f", + "mqc_samtools-idxstats-mapped-reads-plot-4_Observed_over_Expected_Counts.txt:md5,585e7aa5faf61c669ca5fb106340c6f4", + "mqc_samtools-idxstats-mapped-reads-plot-4_Raw_Counts.txt:md5,2687336b51d0fde9d2192ba48be4d319", + "mqc_samtools-idxstats-mapped-reads-plot_Normalised_Counts.txt:md5,bec101bc6ee3766454189e3ab65166c2", + "mqc_samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts.txt:md5,b27f1cb75fdc333d8a494dc8350d4351", + "mqc_samtools-idxstats-mapped-reads-plot_Raw_Counts.txt:md5,532caa74ae554bd7fdd40421c2ee7b51", + "mqc_samtools_alignment_plot-2_1.txt:md5,9c86235254e6f9598f62df2eec42ed45", + "mqc_samtools_alignment_plot-3_1.txt:md5,bff8cb7e31bc1221ddc08a1ab10faf91", + "mqc_samtools_alignment_plot-4_1.txt:md5,20f6f039fbf4b8c76b2309c97ad6e074", + "mqc_samtools_alignment_plot_1.txt:md5,afaffbac4a382f0e96d132f52d104fb1", "multiqc_citations.txt:md5,380946add69d6b34db956b1565820d2c", - "multiqc_cutadapt.txt:md5,19916e059f11fa2c038c97bbb0ea190b", + "multiqc_cutadapt.txt:md5,926fcf7c5a9c5dc0a105a439c85a5f58", "multiqc_fastqc.txt:md5,a9a7484add8120fc3cf3d5626a92973b", - "multiqc_fastqc_1.txt:md5,6f694cea56d88eb91b4c9610f7a12ca5", - "multiqc_mlib_frip_score-plot.txt:md5,fad5d91d452286d71c5357951c28c62d", - "multiqc_mlib_peak_annotation-plot.txt:md5,bc637d1fb7a56ab4ddba3eb900ea5619", - "multiqc_mlib_peak_count-plot.txt:md5,22e2cc18e32e26a95a5db993a25a02d2", - "multiqc_mrep_frip_score-plot.txt:md5,69ff05e5e8e5fd888f1ea32a60b72994", + "multiqc_fastqc_1.txt:md5,58ab2bbd2d19745e5975742c6d1335d7", + "multiqc_mlib_frip_score-plot.txt:md5,07ae10450e52b7eaa14901cf4ee11071", + "multiqc_mlib_peak_annotation-plot.txt:md5,49177a2691f14d6d1dcb9cb9cda11940", + "multiqc_mlib_peak_count-plot.txt:md5,884c5b0b366376214407bd58ae1ac29c", + "multiqc_mrep_frip_score-plot.txt:md5,16c5819f17332b50c64558ea9f31d870", "multiqc_mrep_peak_annotation-plot.txt:md5,06918eae76d769b41471460676e02afb", "multiqc_mrep_peak_count-plot.txt:md5,e5019374d8964473ca648859cca797fc", "picard_histogram.txt:md5,c9aa8a5ac6841ffb3a6cc2de45b44797", @@ -998,10 +1013,10 @@ "samplesheet.valid.csv:md5,51b046b55592e95949824f21b12c7e49" ] ], + "timestamp": "2026-07-25T08:46:04.91051952", "meta": { - "nf-test": "0.9.3", - "nextflow": "26.04.1" - }, - "timestamp": "2026-05-20T12:42:33.967191543" + "nf-test": "0.9.4", + "nextflow": "25.10.4" + } } } \ No newline at end of file diff --git a/tests/skip_trimming.nf.test.snap b/tests/skip_trimming.nf.test.snap index b4933782..14bdba41 100644 --- a/tests/skip_trimming.nf.test.snap +++ b/tests/skip_trimming.nf.test.snap @@ -1,57 +1,72 @@ { "skip_trimming": { "content": [ - 256, + 260, { "BAMTOOLS_FILTER": { - "samtools": "1.15.1", - "bamtools": "2.5.2" + "bamtools": "2.5.2", + "samtools": "1.15.1" }, "BAM_REMOVE_ORPHANS": { "samtools": "1.15.1" }, "BEDTOOLS_GENOMECOV": { "bedtools": "2.31.1", - "sort": 9.5 + "sort": "sort (GNU coreutils) 9.5" }, "BWA_INDEX": { "bwa": "0.7.19-r1273" }, "BWA_MEM": { - "bwa": "0.7.17-r1188", - "samtools": "1.19.2" + "bwa": "0.7.19-r1273", + "samtools": "1.22.1" }, "DEEPTOOLS_COMPUTEMATRIX_REFERENCE_POINT": { - "deeptools": "3.5.5" + "deeptools": "3.5.6" }, "DEEPTOOLS_COMPUTEMATRIX_SCALE_REGIONS": { - "deeptools": "3.5.5" + "deeptools": "3.5.6" }, "DEEPTOOLS_PLOTHEATMAP": { - "deeptools": "3.5.5" + "deeptools": "3.5.6" }, "DEEPTOOLS_PLOTPROFILE": { - "deeptools": "3.5.5" + "deeptools": "3.5.6" }, "DESEQ2_QC": { - "r-base": "4.0.3", - "bioconductor-deseq2": "1.28.0" + "bioconductor-deseq2": "1.28.0", + "r-base": "4.0.3" }, "FASTQC": { "fastqc": "0.12.1" }, + "FEATURECOUNTS_MERGE": { + "sed": 4.7 + }, "FRIP_SCORE": { "bedtools": "2.30.0", "samtools": "1.15.1" }, + "GENOME_BLACKLIST_REGIONS": { + "bedtools": "2.30.0" + }, + "GET_AUTOSOMES": { + "python": "3.8.3" + }, + "GTF2BED": { + "perl": "5.26.2" + }, "HOMER_ANNOTATEPEAKS": { "homer": 4.11 }, "IGV": { "python": "3.8.3" }, + "KHMER_UNIQUEKMERS": { + "khmer": "3.0.0a3" + }, "MACS3_CALLPEAK": { - "macs3": "3.0.1" + "macs3": "3.0.4" }, "MACS3_CONSENSUS": { "python": "3.10.0", @@ -64,16 +79,16 @@ "ataqv": "1.3.1" }, "MERGED_LIBRARY_DEEPTOOLS_PLOTFINGERPRINT": { - "deeptools": "3.5.5" + "deeptools": "3.5.6" }, "MERGED_LIBRARY_PICARD_COLLECTMULTIPLEMETRICS": { - "picard": "3.0.0" + "picard": "3.4.0" }, "MULTIQC_CUSTOM_PEAKS": { "sed": 4.7 }, "PICARD_MARKDUPLICATES": { - "picard": "3.1.1" + "picard": "3.4.0" }, "PICARD_MERGESAMFILES_LIBRARY": { "picard": "3.4.0" @@ -90,29 +105,32 @@ "SAMPLESHEET_CHECK": { "python": "3.8.3" }, + "SAMTOOLS_FAIDX": { + "samtools": "1.23.1" + }, "SAMTOOLS_FLAGSTAT": { - "samtools": "1.19.2" + "samtools": 1.24 }, "SAMTOOLS_IDXSTATS": { - "samtools": "1.19.2" + "samtools": 1.24 }, "SAMTOOLS_INDEX": { - "samtools": "1.19.2" + "samtools": 1.24 }, "SAMTOOLS_SORT": { - "samtools": "1.19.2" + "samtools": 1.24 }, "SAMTOOLS_STATS": { - "samtools": "1.19.2" + "samtools": 1.24 }, "SUBREAD_FEATURECOUNTS": { - "subread": "2.0.1" + "subread": "2.1.1" }, - "UCSC_BEDGRAPHTOBIGWIG": { - "ucsc": 445 + "TSS_EXTRACT": { + "sed": 4.7 }, - "Workflow": { - "nf-core/atacseq": "v2.2.0dev" + "UCSC_BEDGRAPHTOBIGWIG": { + "ucsc": 482 } }, [ @@ -281,13 +299,16 @@ "bwa/merged_library/macs3/broad_peak/OSMOTIC_STRESS_T15_PE_REP1.mLb.clN_peaks.gappedPeak", "bwa/merged_library/macs3/broad_peak/OSMOTIC_STRESS_T15_PE_REP1.mLb.clN_peaks.xls", "bwa/merged_library/macs3/broad_peak/consensus", + "bwa/merged_library/macs3/broad_peak/consensus/consensus_peaks.mLb.clN.PE.featureCounts.tsv", + "bwa/merged_library/macs3/broad_peak/consensus/consensus_peaks.mLb.clN.PE.featureCounts.tsv.summary", + "bwa/merged_library/macs3/broad_peak/consensus/consensus_peaks.mLb.clN.SE.featureCounts.tsv", + "bwa/merged_library/macs3/broad_peak/consensus/consensus_peaks.mLb.clN.SE.featureCounts.tsv.summary", "bwa/merged_library/macs3/broad_peak/consensus/consensus_peaks.mLb.clN.annotatePeaks.txt", "bwa/merged_library/macs3/broad_peak/consensus/consensus_peaks.mLb.clN.bed", "bwa/merged_library/macs3/broad_peak/consensus/consensus_peaks.mLb.clN.boolean.intersect.plot.pdf", "bwa/merged_library/macs3/broad_peak/consensus/consensus_peaks.mLb.clN.boolean.intersect.txt", "bwa/merged_library/macs3/broad_peak/consensus/consensus_peaks.mLb.clN.boolean.txt", - "bwa/merged_library/macs3/broad_peak/consensus/consensus_peaks.mLb.clN.featureCounts.txt", - "bwa/merged_library/macs3/broad_peak/consensus/consensus_peaks.mLb.clN.featureCounts.txt.summary", + "bwa/merged_library/macs3/broad_peak/consensus/consensus_peaks.mLb.clN.featureCounts.tsv", "bwa/merged_library/macs3/broad_peak/consensus/consensus_peaks.mLb.clN.saf", "bwa/merged_library/macs3/broad_peak/consensus/deseq2", "bwa/merged_library/macs3/broad_peak/consensus/deseq2/R_sessionInfo.log", @@ -330,34 +351,34 @@ "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T0_PE_REP1.mLb.clN.CollectMultipleMetrics.insert_size_metrics", "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T0_PE_REP1.mLb.clN.CollectMultipleMetrics.quality_by_cycle_metrics", "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T0_PE_REP1.mLb.clN.CollectMultipleMetrics.quality_distribution_metrics", - "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T0_PE_REP1.mLb.mkD.sorted.MarkDuplicates.metrics.txt", + "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T0_PE_REP1.mLb.mkD.sorted.metrics.txt", "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T0_PE_REP2.mLb.clN.CollectMultipleMetrics.alignment_summary_metrics", "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T0_PE_REP2.mLb.clN.CollectMultipleMetrics.base_distribution_by_cycle_metrics", "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T0_PE_REP2.mLb.clN.CollectMultipleMetrics.insert_size_metrics", "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T0_PE_REP2.mLb.clN.CollectMultipleMetrics.quality_by_cycle_metrics", "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T0_PE_REP2.mLb.clN.CollectMultipleMetrics.quality_distribution_metrics", - "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T0_PE_REP2.mLb.mkD.sorted.MarkDuplicates.metrics.txt", + "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T0_PE_REP2.mLb.mkD.sorted.metrics.txt", "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T100_SE_REP1.mLb.clN.CollectMultipleMetrics.alignment_summary_metrics", "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T100_SE_REP1.mLb.clN.CollectMultipleMetrics.base_distribution_by_cycle_metrics", "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T100_SE_REP1.mLb.clN.CollectMultipleMetrics.quality_by_cycle_metrics", "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T100_SE_REP1.mLb.clN.CollectMultipleMetrics.quality_distribution_metrics", - "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T100_SE_REP1.mLb.mkD.sorted.MarkDuplicates.metrics.txt", + "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T100_SE_REP1.mLb.mkD.sorted.metrics.txt", "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T100_SE_REP2.mLb.clN.CollectMultipleMetrics.alignment_summary_metrics", "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T100_SE_REP2.mLb.clN.CollectMultipleMetrics.base_distribution_by_cycle_metrics", "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T100_SE_REP2.mLb.clN.CollectMultipleMetrics.quality_by_cycle_metrics", "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T100_SE_REP2.mLb.clN.CollectMultipleMetrics.quality_distribution_metrics", - "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T100_SE_REP2.mLb.mkD.sorted.MarkDuplicates.metrics.txt", + "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T100_SE_REP2.mLb.mkD.sorted.metrics.txt", "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T150_SE_REP1.mLb.clN.CollectMultipleMetrics.alignment_summary_metrics", "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T150_SE_REP1.mLb.clN.CollectMultipleMetrics.base_distribution_by_cycle_metrics", "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T150_SE_REP1.mLb.clN.CollectMultipleMetrics.quality_by_cycle_metrics", "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T150_SE_REP1.mLb.clN.CollectMultipleMetrics.quality_distribution_metrics", - "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T150_SE_REP1.mLb.mkD.sorted.MarkDuplicates.metrics.txt", + "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T150_SE_REP1.mLb.mkD.sorted.metrics.txt", "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T15_PE_REP1.mLb.clN.CollectMultipleMetrics.alignment_summary_metrics", "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T15_PE_REP1.mLb.clN.CollectMultipleMetrics.base_distribution_by_cycle_metrics", "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T15_PE_REP1.mLb.clN.CollectMultipleMetrics.insert_size_metrics", "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T15_PE_REP1.mLb.clN.CollectMultipleMetrics.quality_by_cycle_metrics", "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T15_PE_REP1.mLb.clN.CollectMultipleMetrics.quality_distribution_metrics", - "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T15_PE_REP1.mLb.mkD.sorted.MarkDuplicates.metrics.txt", + "bwa/merged_library/picard_metrics/OSMOTIC_STRESS_T15_PE_REP1.mLb.mkD.sorted.metrics.txt", "bwa/merged_library/picard_metrics/pdf", "bwa/merged_library/picard_metrics/pdf/OSMOTIC_STRESS_T0_PE_REP1.mLb.clN.CollectMultipleMetrics.base_distribution_by_cycle.pdf", "bwa/merged_library/picard_metrics/pdf/OSMOTIC_STRESS_T0_PE_REP1.mLb.clN.CollectMultipleMetrics.insert_size_histogram.pdf", @@ -445,13 +466,16 @@ "bwa/merged_replicate/macs3/broad_peak/OSMOTIC_STRESS_T100_SE.mRp.clN_peaks.gappedPeak", "bwa/merged_replicate/macs3/broad_peak/OSMOTIC_STRESS_T100_SE.mRp.clN_peaks.xls", "bwa/merged_replicate/macs3/broad_peak/consensus", + "bwa/merged_replicate/macs3/broad_peak/consensus/consensus_peaks.mRp.clN.PE.featureCounts.tsv", + "bwa/merged_replicate/macs3/broad_peak/consensus/consensus_peaks.mRp.clN.PE.featureCounts.tsv.summary", + "bwa/merged_replicate/macs3/broad_peak/consensus/consensus_peaks.mRp.clN.SE.featureCounts.tsv", + "bwa/merged_replicate/macs3/broad_peak/consensus/consensus_peaks.mRp.clN.SE.featureCounts.tsv.summary", "bwa/merged_replicate/macs3/broad_peak/consensus/consensus_peaks.mRp.clN.annotatePeaks.txt", "bwa/merged_replicate/macs3/broad_peak/consensus/consensus_peaks.mRp.clN.bed", "bwa/merged_replicate/macs3/broad_peak/consensus/consensus_peaks.mRp.clN.boolean.intersect.plot.pdf", "bwa/merged_replicate/macs3/broad_peak/consensus/consensus_peaks.mRp.clN.boolean.intersect.txt", "bwa/merged_replicate/macs3/broad_peak/consensus/consensus_peaks.mRp.clN.boolean.txt", - "bwa/merged_replicate/macs3/broad_peak/consensus/consensus_peaks.mRp.clN.featureCounts.txt", - "bwa/merged_replicate/macs3/broad_peak/consensus/consensus_peaks.mRp.clN.featureCounts.txt.summary", + "bwa/merged_replicate/macs3/broad_peak/consensus/consensus_peaks.mRp.clN.featureCounts.tsv", "bwa/merged_replicate/macs3/broad_peak/consensus/consensus_peaks.mRp.clN.saf", "bwa/merged_replicate/macs3/broad_peak/consensus/deseq2", "bwa/merged_replicate/macs3/broad_peak/consensus/deseq2/R_sessionInfo.log", @@ -479,8 +503,8 @@ "bwa/merged_replicate/macs3/broad_peak/qc/macs3_peak.mRp.clN.plots.pdf", "bwa/merged_replicate/macs3/broad_peak/qc/macs3_peak.mRp.clN.summary.txt", "bwa/merged_replicate/picard_metrics", - "bwa/merged_replicate/picard_metrics/OSMOTIC_STRESS_T0_PE.mRp.clN.sorted.MarkDuplicates.metrics.txt", - "bwa/merged_replicate/picard_metrics/OSMOTIC_STRESS_T100_SE.mRp.clN.sorted.MarkDuplicates.metrics.txt", + "bwa/merged_replicate/picard_metrics/OSMOTIC_STRESS_T0_PE.mRp.clN.sorted.metrics.txt", + "bwa/merged_replicate/picard_metrics/OSMOTIC_STRESS_T100_SE.mRp.clN.sorted.metrics.txt", "bwa/merged_replicate/samtools_stats", "bwa/merged_replicate/samtools_stats/OSMOTIC_STRESS_T0_PE.mRp.clN.sorted.bam.flagstat", "bwa/merged_replicate/samtools_stats/OSMOTIC_STRESS_T0_PE.mRp.clN.sorted.bam.idxstats", @@ -834,34 +858,39 @@ "OSMOTIC_STRESS_T150_SE_REP1.mLb.clN.scale_factor.txt:md5,68373452427c1fb3e0f20d959c5aa6c7", "OSMOTIC_STRESS_T15_PE_REP1.mLb.clN.scale_factor.txt:md5,04928308175458f7e21957a4c9dc7afb", "OSMOTIC_STRESS_T0_PE_REP1.mLb.clN_peaks.broadPeak:md5,59c977277ba11ab4c8b9b7bafc6e0e7e", - "OSMOTIC_STRESS_T0_PE_REP1.mLb.clN_peaks.gappedPeak:md5,659c900f8be056cabaecdf0cf8992449", - "OSMOTIC_STRESS_T0_PE_REP1.mLb.clN_peaks.xls:md5,c27b821be1bed0050e7129292f4ac4c4", + "OSMOTIC_STRESS_T0_PE_REP1.mLb.clN_peaks.gappedPeak:md5,714d8e5d201e0129a55b202c1d4b437f", + "OSMOTIC_STRESS_T0_PE_REP1.mLb.clN_peaks.xls:md5,ea2e33a31b189c3c56a1051354b7797d", "OSMOTIC_STRESS_T0_PE_REP2.mLb.clN_peaks.broadPeak:md5,2465ec263cd50577995418413d7dce42", - "OSMOTIC_STRESS_T0_PE_REP2.mLb.clN_peaks.gappedPeak:md5,ce05b66c8644e05f91260be71b3c799e", - "OSMOTIC_STRESS_T0_PE_REP2.mLb.clN_peaks.xls:md5,63fe893b810c925c6bd3214df2d17086", + "OSMOTIC_STRESS_T0_PE_REP2.mLb.clN_peaks.gappedPeak:md5,1dca72a0859ee67414c4a39c2949dfe8", + "OSMOTIC_STRESS_T0_PE_REP2.mLb.clN_peaks.xls:md5,e18ce783c58c18296d58912b19cc679f", "OSMOTIC_STRESS_T100_SE_REP1.mLb.clN_peaks.broadPeak:md5,d58ac509e5955ef11e78166a8398caa7", - "OSMOTIC_STRESS_T100_SE_REP1.mLb.clN_peaks.gappedPeak:md5,30afa099afe41ec21149f6a0e8bf9882", - "OSMOTIC_STRESS_T100_SE_REP1.mLb.clN_peaks.xls:md5,90191ed78cfc1b5417be865570228534", + "OSMOTIC_STRESS_T100_SE_REP1.mLb.clN_peaks.gappedPeak:md5,9b44b06e78444813c2ba290507b92c04", + "OSMOTIC_STRESS_T100_SE_REP1.mLb.clN_peaks.xls:md5,a3c0974e169e886b6194e484023e6026", "OSMOTIC_STRESS_T100_SE_REP2.mLb.clN_peaks.broadPeak:md5,989551d20b0cc0ab1b856cf41a878ed9", - "OSMOTIC_STRESS_T100_SE_REP2.mLb.clN_peaks.gappedPeak:md5,550689e5f987da17a2a7e97e8b20b0f9", - "OSMOTIC_STRESS_T100_SE_REP2.mLb.clN_peaks.xls:md5,a33818adc510b2c669e841897bf58cae", + "OSMOTIC_STRESS_T100_SE_REP2.mLb.clN_peaks.gappedPeak:md5,3bdc0b6179e3a8b85c6db82b1b656d1c", + "OSMOTIC_STRESS_T100_SE_REP2.mLb.clN_peaks.xls:md5,7571b5649fbd9e2dfcec9325950f8177", "OSMOTIC_STRESS_T150_SE_REP1.mLb.clN_peaks.broadPeak:md5,a454e4af57c9af7085d936d9fcc96f1e", - "OSMOTIC_STRESS_T150_SE_REP1.mLb.clN_peaks.gappedPeak:md5,e43e0b81040bd172f7e9aee857efd233", - "OSMOTIC_STRESS_T150_SE_REP1.mLb.clN_peaks.xls:md5,d3539d92d2466bee39990ffdbe34330b", + "OSMOTIC_STRESS_T150_SE_REP1.mLb.clN_peaks.gappedPeak:md5,92a70848190df2cca16a4914646669ab", + "OSMOTIC_STRESS_T150_SE_REP1.mLb.clN_peaks.xls:md5,667ce2000c304985dee64b4700d761ba", "OSMOTIC_STRESS_T15_PE_REP1.mLb.clN_peaks.broadPeak:md5,d83276ebd8c6c594038fdceb519929ac", - "OSMOTIC_STRESS_T15_PE_REP1.mLb.clN_peaks.gappedPeak:md5,3333b8da73db92f660778260e144ef7a", - "OSMOTIC_STRESS_T15_PE_REP1.mLb.clN_peaks.xls:md5,3188ac548bc58db0fa569cf25bff6973", + "OSMOTIC_STRESS_T15_PE_REP1.mLb.clN_peaks.gappedPeak:md5,6334a6581878cf93a39dd76b56794ad0", + "OSMOTIC_STRESS_T15_PE_REP1.mLb.clN_peaks.xls:md5,c5d4d3843a6cf331de01ba5443f82720", + "consensus_peaks.mLb.clN.PE.featureCounts.tsv:md5,b80ced63bfadba19f6927537bd3fcc21", + "consensus_peaks.mLb.clN.PE.featureCounts.tsv.summary:md5,00348d3437aa5f9f966e0a1aee9b8e85", + "consensus_peaks.mLb.clN.SE.featureCounts.tsv:md5,5d78fa6f869cba4da29d6837a5d45655", + "consensus_peaks.mLb.clN.SE.featureCounts.tsv.summary:md5,a16596a96ead8abc259cfe0e3aefd312", "consensus_peaks.mLb.clN.bed:md5,7e645855322eff59ea58446857e05c1e", "consensus_peaks.mLb.clN.boolean.intersect.txt:md5,27e105619c6e9bb7aac7dc9a84a70395", "consensus_peaks.mLb.clN.boolean.txt:md5,7ca3fc47837d64951401ca58d79ebe88", + "consensus_peaks.mLb.clN.featureCounts.tsv:md5,1f088242bcd29c4669556cb03fab90e7", "consensus_peaks.mLb.clN.saf:md5,9f7d7bcc1ee838d8ecfc3d0bdd1f4b25", "R_sessionInfo.log:md5,fb0da0d7ad6994ed66a8e68348b19676", - "OSMOTIC_STRESS_T0_PE_REP1.size_factors.txt:md5,5f6946d1361c195398acbeaa4c8f6f32", - "OSMOTIC_STRESS_T0_PE_REP2.size_factors.txt:md5,da6f73d953067d9ed95a9d1f76f6857d", - "OSMOTIC_STRESS_T100_SE_REP1.size_factors.txt:md5,ae62c3b6ed44f27242bb98a788d0840b", - "OSMOTIC_STRESS_T100_SE_REP2.size_factors.txt:md5,56587a5eb44694182225af0e6a4e240b", - "OSMOTIC_STRESS_T150_SE_REP1.size_factors.txt:md5,a2ea196cbe165939f1bacac8032aa43c", - "OSMOTIC_STRESS_T15_PE_REP1.size_factors.txt:md5,cc8dd33ae987cf72226e998261189914", + "OSMOTIC_STRESS_T0_PE_REP1.size_factors.txt:md5,47021dc95aacbf872caae4b76b983b1d", + "OSMOTIC_STRESS_T0_PE_REP2.size_factors.txt:md5,05a9aa65645121ae97fd6955379c479b", + "OSMOTIC_STRESS_T100_SE_REP1.size_factors.txt:md5,b771c2be39c10d3e7a70cac382f11eec", + "OSMOTIC_STRESS_T100_SE_REP2.size_factors.txt:md5,bbe989119faee1ecac3fd9a99b6be6b1", + "OSMOTIC_STRESS_T150_SE_REP1.size_factors.txt:md5,544d5be893ff0417a05bd47aa9c2ac5a", + "OSMOTIC_STRESS_T15_PE_REP1.size_factors.txt:md5,551be0acd1c15091710d509d8e835325", "OSMOTIC_STRESS_T0_PE_REP1.mLb.clN_peaks.FRiP_mqc.tsv:md5,16cde0c4529f30a00f58e86b6734f4a9", "OSMOTIC_STRESS_T0_PE_REP1.mLb.clN_peaks.count_mqc.tsv:md5,35dd002bc26673fb9a3e5be9c66c6247", "OSMOTIC_STRESS_T0_PE_REP2.mLb.clN_peaks.FRiP_mqc.tsv:md5,36b151cedf83dfe947cf3a6df7d24939", @@ -903,20 +932,25 @@ "OSMOTIC_STRESS_T0_PE.mRp.clN.scale_factor.txt:md5,585485db7da5ff4fd27b5007514947d8", "OSMOTIC_STRESS_T100_SE.mRp.clN.scale_factor.txt:md5,cb999ab5df67d6d99ce162d05d4ef7eb", "OSMOTIC_STRESS_T0_PE.mRp.clN_peaks.broadPeak:md5,6559863f0b1d4c4e5ffd2f84c02982b1", - "OSMOTIC_STRESS_T0_PE.mRp.clN_peaks.gappedPeak:md5,88580c6e8d6ec676be482eccb609378c", - "OSMOTIC_STRESS_T0_PE.mRp.clN_peaks.xls:md5,ecb0aec376aa0025c86a089cabcebf4d", + "OSMOTIC_STRESS_T0_PE.mRp.clN_peaks.gappedPeak:md5,7f007ca9b3a7b9d28ce77cdb1b2646f8", + "OSMOTIC_STRESS_T0_PE.mRp.clN_peaks.xls:md5,c195339765b3d9a8f8163108a6f16183", "OSMOTIC_STRESS_T100_SE.mRp.clN_peaks.broadPeak:md5,35709d3fc707f53628e0ccab6b464d83", - "OSMOTIC_STRESS_T100_SE.mRp.clN_peaks.gappedPeak:md5,df8204d2f219db2fa44bc1c7073e60a0", - "OSMOTIC_STRESS_T100_SE.mRp.clN_peaks.xls:md5,eedf4ae489baa75e01c1a27c8f04221a", + "OSMOTIC_STRESS_T100_SE.mRp.clN_peaks.gappedPeak:md5,ced7d5fe0af52b238f05422b2d3185af", + "OSMOTIC_STRESS_T100_SE.mRp.clN_peaks.xls:md5,101d2313d93c121eb53e0e8644df37d3", + "consensus_peaks.mRp.clN.PE.featureCounts.tsv:md5,ab5a67a10a1c89007d92aec4e4061ad6", + "consensus_peaks.mRp.clN.PE.featureCounts.tsv.summary:md5,81e8ac8299d9e64fd8a1606fde3a3315", + "consensus_peaks.mRp.clN.SE.featureCounts.tsv:md5,fffcc8adcd8555aca1e9cc2fd4fea752", + "consensus_peaks.mRp.clN.SE.featureCounts.tsv.summary:md5,316176beb050991512f8e99643064604", "consensus_peaks.mRp.clN.bed:md5,c9408cce53d821e215368a553c9f1a08", "consensus_peaks.mRp.clN.boolean.intersect.txt:md5,3d2c2f1597c7c30cb6089e934c6c031a", "consensus_peaks.mRp.clN.boolean.txt:md5,c9c5842fea9750535cf50890e2da0c13", + "consensus_peaks.mRp.clN.featureCounts.tsv:md5,d98bd7271604e508a448bb7f16a09d7f", "consensus_peaks.mRp.clN.saf:md5,ea5c6c818aff4142c9cbaea5c3d7fc1c", "R_sessionInfo.log:md5,fb0da0d7ad6994ed66a8e68348b19676", - "OSMOTIC_STRESS_T0_PE_REP1.size_factors.txt:md5,9fd5e3e7ef3904cfc797a403423f29b3", - "OSMOTIC_STRESS_T0_PE_REP2.size_factors.txt:md5,177685c72564208be5b536a3facaba4f", - "OSMOTIC_STRESS_T100_SE_REP1.size_factors.txt:md5,537692bd1216294c51fc88a32777525c", - "OSMOTIC_STRESS_T100_SE_REP2.size_factors.txt:md5,898ddce7aed8b8707237752061e30685", + "OSMOTIC_STRESS_T0_PE_REP1.size_factors.txt:md5,abaae8c426677e63d1f3b0829ae6b035", + "OSMOTIC_STRESS_T0_PE_REP2.size_factors.txt:md5,3d504b3e15d66ca8e4adb1712cf2d097", + "OSMOTIC_STRESS_T100_SE_REP1.size_factors.txt:md5,c10a7af3c6852f03020cc67253912c91", + "OSMOTIC_STRESS_T100_SE_REP2.size_factors.txt:md5,e7fc6faf8be5847bc7d09a87b94ffc6f", "OSMOTIC_STRESS_T0_PE.mRp.clN_peaks.FRiP_mqc.tsv:md5,2b0e88d15db45b363b715979d588f923", "OSMOTIC_STRESS_T0_PE.mRp.clN_peaks.count_mqc.tsv:md5,af4f984d2bac50202af335e32b19a408", "OSMOTIC_STRESS_T100_SE.mRp.clN_peaks.FRiP_mqc.tsv:md5,711ffae78f6ca931144d2bba47a988a1", @@ -940,8 +974,8 @@ "mqc_fastqc_per_sequence_quality_scores_plot_1.txt:md5,3bfe1c94f710975829e2c1e3b5f16ea7", "mqc_fastqc_sequence_counts_plot_1.txt:md5,d0cf8d64e742b5f446e6b602d86913b9", "mqc_fastqc_sequence_duplication_levels_plot_1.txt:md5,23c4883ed6c22212b0c3e07a863745d1", - "mqc_featureCounts_assignment_plot-2_1.txt:md5,af94642e4a499a424f9bab6ea2884f44", - "mqc_featureCounts_assignment_plot_1.txt:md5,f70e1de16046ccc2c9fd5a1b6b8c6b0d", + "mqc_featureCounts_assignment_plot-2_1.txt:md5,8ba0a7e542bbbfe5446b3f18f21a404b", + "mqc_featureCounts_assignment_plot_1.txt:md5,1b94aa046343e7adae8293153f849235", "mqc_samtools-idxstats-mapped-reads-plot-2_Normalised_Counts.txt:md5,20bef4426162e964c2214b09dfa90fc7", "mqc_samtools-idxstats-mapped-reads-plot-2_Observed_over_Expected_Counts.txt:md5,d545b4ef8f4a8c7078dbf307713d7b14", "mqc_samtools-idxstats-mapped-reads-plot-2_Raw_Counts.txt:md5,a1a87603c22be8d3f3d71b4fb146a4b1", @@ -960,8 +994,8 @@ "mqc_samtools_alignment_plot_1.txt:md5,79cc672992798f7f0f1a7a6380b1f275", "multiqc_citations.txt:md5,666622de72cd728286d41118b986c243", "multiqc_fastqc.txt:md5,a9a7484add8120fc3cf3d5626a92973b", - "multiqc_featureCounts_mlib_featurecounts.txt:md5,563f1bab93754c13ba016328048e1821", - "multiqc_featureCounts_mrep_featurecounts.txt:md5,644af943658660e910e9872480631b63", + "multiqc_featureCounts_mlib_featurecounts.txt:md5,56fb6f6dd97b598e7b8816e37140cf5e", + "multiqc_featureCounts_mrep_featurecounts.txt:md5,3548b655287066f953bd7714ee927e9a", "multiqc_mlib_frip_score-plot.txt:md5,2c04017d8b96d7e4a14284519517417a", "multiqc_mlib_peak_annotation-plot.txt:md5,4a2e5fb6cbb98803c42f1c4f3a3f8fd6", "multiqc_mlib_peak_count-plot.txt:md5,aa48ff9d5acad349ceda2fc62a62bdad", @@ -980,20 +1014,20 @@ "samplesheet.valid.csv:md5,51b046b55592e95949824f21b12c7e49" ] ], + "timestamp": "2026-07-26T03:38:30.288251908", "meta": { - "nf-test": "0.9.3", - "nextflow": "26.04.1" - }, - "timestamp": "2026-05-20T12:45:20.021780783" + "nf-test": "0.9.4", + "nextflow": "25.10.4" + } }, "skip_trimming with stub": { "content": [ 213 ], + "timestamp": "2025-11-03T13:33:27.997860306", "meta": { "nf-test": "0.9.3", "nextflow": "25.04.7" - }, - "timestamp": "2025-11-03T13:33:27.997860306" + } } } \ No newline at end of file diff --git a/tests/star.nf.test.snap b/tests/star.nf.test.snap index 73777c6d..85e4e453 100644 --- a/tests/star.nf.test.snap +++ b/tests/star.nf.test.snap @@ -1,50 +1,65 @@ { "star": { "content": [ - 264, + 268, { "BAMTOOLS_FILTER": { - "samtools": "1.15.1", - "bamtools": "2.5.2" + "bamtools": "2.5.2", + "samtools": "1.15.1" }, "BAM_REMOVE_ORPHANS": { "samtools": "1.15.1" }, "BEDTOOLS_GENOMECOV": { "bedtools": "2.31.1", - "sort": 9.5 + "sort": "sort (GNU coreutils) 9.5" }, "DEEPTOOLS_COMPUTEMATRIX_REFERENCE_POINT": { - "deeptools": "3.5.5" + "deeptools": "3.5.6" }, "DEEPTOOLS_COMPUTEMATRIX_SCALE_REGIONS": { - "deeptools": "3.5.5" + "deeptools": "3.5.6" }, "DEEPTOOLS_PLOTHEATMAP": { - "deeptools": "3.5.5" + "deeptools": "3.5.6" }, "DEEPTOOLS_PLOTPROFILE": { - "deeptools": "3.5.5" + "deeptools": "3.5.6" }, "DESEQ2_QC": { - "r-base": "4.0.3", - "bioconductor-deseq2": "1.28.0" + "bioconductor-deseq2": "1.28.0", + "r-base": "4.0.3" }, "FASTQC": { "fastqc": "0.12.1" }, + "FEATURECOUNTS_MERGE": { + "sed": 4.7 + }, "FRIP_SCORE": { "bedtools": "2.30.0", "samtools": "1.15.1" }, + "GENOME_BLACKLIST_REGIONS": { + "bedtools": "2.30.0" + }, + "GET_AUTOSOMES": { + "python": "3.8.3" + }, + "GTF2BED": { + "perl": "5.26.2" + }, "HOMER_ANNOTATEPEAKS": { "homer": 4.11 }, "IGV": { "python": "3.8.3" }, + "KHMER_UNIQUEKMERS": { + "khmer": "3.0.0a3" + }, "MACS3_CALLPEAK": { - "macs3": "3.0.1" + "macs3": "3.0.4" }, "MACS3_CONSENSUS": { "python": "3.10.0", @@ -57,16 +72,16 @@ "ataqv": "1.3.1" }, "MERGED_LIBRARY_DEEPTOOLS_PLOTFINGERPRINT": { - "deeptools": "3.5.5" + "deeptools": "3.5.6" }, "MERGED_LIBRARY_PICARD_COLLECTMULTIPLEMETRICS": { - "picard": "3.0.0" + "picard": "3.4.0" }, "MULTIQC_CUSTOM_PEAKS": { "sed": 4.7 }, "PICARD_MARKDUPLICATES": { - "picard": "3.1.1" + "picard": "3.4.0" }, "PICARD_MERGESAMFILES_LIBRARY": { "picard": "3.4.0" @@ -83,35 +98,41 @@ "SAMPLESHEET_CHECK": { "python": "3.8.3" }, + "SAMTOOLS_FAIDX": { + "samtools": "1.23.1" + }, "SAMTOOLS_FLAGSTAT": { - "samtools": "1.19.2" + "samtools": 1.24 }, "SAMTOOLS_IDXSTATS": { - "samtools": "1.19.2" + "samtools": 1.24 }, "SAMTOOLS_INDEX": { - "samtools": "1.19.2" + "samtools": 1.24 }, "SAMTOOLS_SORT": { - "samtools": "1.19.2" + "samtools": 1.24 }, "SAMTOOLS_STATS": { - "samtools": "1.19.2" + "samtools": 1.24 }, "STAR_ALIGN": { "star": "2.6.1d" }, + "STAR_GENOMEGENERATE": { + "star": "2.6.1d" + }, "SUBREAD_FEATURECOUNTS": { - "subread": "2.0.1" + "subread": "2.1.1" }, "TRIMGALORE": { - "trimgalore": "0.6.10" + "trimgalore": "2.1.0" }, - "UCSC_BEDGRAPHTOBIGWIG": { - "ucsc": 445 + "TSS_EXTRACT": { + "sed": 4.7 }, - "Workflow": { - "nf-core/atacseq": "v2.2.0dev" + "UCSC_BEDGRAPHTOBIGWIG": { + "ucsc": 482 } }, [ @@ -686,13 +707,16 @@ "star/merged_library/macs3/broad_peak/OSMOTIC_STRESS_T15_PE_REP1.mLb.clN_peaks.gappedPeak", "star/merged_library/macs3/broad_peak/OSMOTIC_STRESS_T15_PE_REP1.mLb.clN_peaks.xls", "star/merged_library/macs3/broad_peak/consensus", + "star/merged_library/macs3/broad_peak/consensus/consensus_peaks.mLb.clN.PE.featureCounts.tsv", + "star/merged_library/macs3/broad_peak/consensus/consensus_peaks.mLb.clN.PE.featureCounts.tsv.summary", + "star/merged_library/macs3/broad_peak/consensus/consensus_peaks.mLb.clN.SE.featureCounts.tsv", + "star/merged_library/macs3/broad_peak/consensus/consensus_peaks.mLb.clN.SE.featureCounts.tsv.summary", "star/merged_library/macs3/broad_peak/consensus/consensus_peaks.mLb.clN.annotatePeaks.txt", "star/merged_library/macs3/broad_peak/consensus/consensus_peaks.mLb.clN.bed", "star/merged_library/macs3/broad_peak/consensus/consensus_peaks.mLb.clN.boolean.intersect.plot.pdf", "star/merged_library/macs3/broad_peak/consensus/consensus_peaks.mLb.clN.boolean.intersect.txt", "star/merged_library/macs3/broad_peak/consensus/consensus_peaks.mLb.clN.boolean.txt", - "star/merged_library/macs3/broad_peak/consensus/consensus_peaks.mLb.clN.featureCounts.txt", - "star/merged_library/macs3/broad_peak/consensus/consensus_peaks.mLb.clN.featureCounts.txt.summary", + "star/merged_library/macs3/broad_peak/consensus/consensus_peaks.mLb.clN.featureCounts.tsv", "star/merged_library/macs3/broad_peak/consensus/consensus_peaks.mLb.clN.saf", "star/merged_library/macs3/broad_peak/consensus/deseq2", "star/merged_library/macs3/broad_peak/consensus/deseq2/R_sessionInfo.log", @@ -735,34 +759,34 @@ "star/merged_library/picard_metrics/OSMOTIC_STRESS_T0_PE_REP1.mLb.clN.CollectMultipleMetrics.insert_size_metrics", "star/merged_library/picard_metrics/OSMOTIC_STRESS_T0_PE_REP1.mLb.clN.CollectMultipleMetrics.quality_by_cycle_metrics", "star/merged_library/picard_metrics/OSMOTIC_STRESS_T0_PE_REP1.mLb.clN.CollectMultipleMetrics.quality_distribution_metrics", - "star/merged_library/picard_metrics/OSMOTIC_STRESS_T0_PE_REP1.mLb.mkD.sorted.MarkDuplicates.metrics.txt", + "star/merged_library/picard_metrics/OSMOTIC_STRESS_T0_PE_REP1.mLb.mkD.sorted.metrics.txt", "star/merged_library/picard_metrics/OSMOTIC_STRESS_T0_PE_REP2.mLb.clN.CollectMultipleMetrics.alignment_summary_metrics", "star/merged_library/picard_metrics/OSMOTIC_STRESS_T0_PE_REP2.mLb.clN.CollectMultipleMetrics.base_distribution_by_cycle_metrics", "star/merged_library/picard_metrics/OSMOTIC_STRESS_T0_PE_REP2.mLb.clN.CollectMultipleMetrics.insert_size_metrics", "star/merged_library/picard_metrics/OSMOTIC_STRESS_T0_PE_REP2.mLb.clN.CollectMultipleMetrics.quality_by_cycle_metrics", "star/merged_library/picard_metrics/OSMOTIC_STRESS_T0_PE_REP2.mLb.clN.CollectMultipleMetrics.quality_distribution_metrics", - "star/merged_library/picard_metrics/OSMOTIC_STRESS_T0_PE_REP2.mLb.mkD.sorted.MarkDuplicates.metrics.txt", + "star/merged_library/picard_metrics/OSMOTIC_STRESS_T0_PE_REP2.mLb.mkD.sorted.metrics.txt", "star/merged_library/picard_metrics/OSMOTIC_STRESS_T100_SE_REP1.mLb.clN.CollectMultipleMetrics.alignment_summary_metrics", "star/merged_library/picard_metrics/OSMOTIC_STRESS_T100_SE_REP1.mLb.clN.CollectMultipleMetrics.base_distribution_by_cycle_metrics", "star/merged_library/picard_metrics/OSMOTIC_STRESS_T100_SE_REP1.mLb.clN.CollectMultipleMetrics.quality_by_cycle_metrics", "star/merged_library/picard_metrics/OSMOTIC_STRESS_T100_SE_REP1.mLb.clN.CollectMultipleMetrics.quality_distribution_metrics", - "star/merged_library/picard_metrics/OSMOTIC_STRESS_T100_SE_REP1.mLb.mkD.sorted.MarkDuplicates.metrics.txt", + "star/merged_library/picard_metrics/OSMOTIC_STRESS_T100_SE_REP1.mLb.mkD.sorted.metrics.txt", "star/merged_library/picard_metrics/OSMOTIC_STRESS_T100_SE_REP2.mLb.clN.CollectMultipleMetrics.alignment_summary_metrics", "star/merged_library/picard_metrics/OSMOTIC_STRESS_T100_SE_REP2.mLb.clN.CollectMultipleMetrics.base_distribution_by_cycle_metrics", "star/merged_library/picard_metrics/OSMOTIC_STRESS_T100_SE_REP2.mLb.clN.CollectMultipleMetrics.quality_by_cycle_metrics", "star/merged_library/picard_metrics/OSMOTIC_STRESS_T100_SE_REP2.mLb.clN.CollectMultipleMetrics.quality_distribution_metrics", - "star/merged_library/picard_metrics/OSMOTIC_STRESS_T100_SE_REP2.mLb.mkD.sorted.MarkDuplicates.metrics.txt", + "star/merged_library/picard_metrics/OSMOTIC_STRESS_T100_SE_REP2.mLb.mkD.sorted.metrics.txt", "star/merged_library/picard_metrics/OSMOTIC_STRESS_T150_SE_REP1.mLb.clN.CollectMultipleMetrics.alignment_summary_metrics", "star/merged_library/picard_metrics/OSMOTIC_STRESS_T150_SE_REP1.mLb.clN.CollectMultipleMetrics.base_distribution_by_cycle_metrics", "star/merged_library/picard_metrics/OSMOTIC_STRESS_T150_SE_REP1.mLb.clN.CollectMultipleMetrics.quality_by_cycle_metrics", "star/merged_library/picard_metrics/OSMOTIC_STRESS_T150_SE_REP1.mLb.clN.CollectMultipleMetrics.quality_distribution_metrics", - "star/merged_library/picard_metrics/OSMOTIC_STRESS_T150_SE_REP1.mLb.mkD.sorted.MarkDuplicates.metrics.txt", + "star/merged_library/picard_metrics/OSMOTIC_STRESS_T150_SE_REP1.mLb.mkD.sorted.metrics.txt", "star/merged_library/picard_metrics/OSMOTIC_STRESS_T15_PE_REP1.mLb.clN.CollectMultipleMetrics.alignment_summary_metrics", "star/merged_library/picard_metrics/OSMOTIC_STRESS_T15_PE_REP1.mLb.clN.CollectMultipleMetrics.base_distribution_by_cycle_metrics", "star/merged_library/picard_metrics/OSMOTIC_STRESS_T15_PE_REP1.mLb.clN.CollectMultipleMetrics.insert_size_metrics", "star/merged_library/picard_metrics/OSMOTIC_STRESS_T15_PE_REP1.mLb.clN.CollectMultipleMetrics.quality_by_cycle_metrics", "star/merged_library/picard_metrics/OSMOTIC_STRESS_T15_PE_REP1.mLb.clN.CollectMultipleMetrics.quality_distribution_metrics", - "star/merged_library/picard_metrics/OSMOTIC_STRESS_T15_PE_REP1.mLb.mkD.sorted.MarkDuplicates.metrics.txt", + "star/merged_library/picard_metrics/OSMOTIC_STRESS_T15_PE_REP1.mLb.mkD.sorted.metrics.txt", "star/merged_library/picard_metrics/pdf", "star/merged_library/picard_metrics/pdf/OSMOTIC_STRESS_T0_PE_REP1.mLb.clN.CollectMultipleMetrics.base_distribution_by_cycle.pdf", "star/merged_library/picard_metrics/pdf/OSMOTIC_STRESS_T0_PE_REP1.mLb.clN.CollectMultipleMetrics.insert_size_histogram.pdf", @@ -850,13 +874,16 @@ "star/merged_replicate/macs3/broad_peak/OSMOTIC_STRESS_T100_SE.mRp.clN_peaks.gappedPeak", "star/merged_replicate/macs3/broad_peak/OSMOTIC_STRESS_T100_SE.mRp.clN_peaks.xls", "star/merged_replicate/macs3/broad_peak/consensus", + "star/merged_replicate/macs3/broad_peak/consensus/consensus_peaks.mRp.clN.PE.featureCounts.tsv", + "star/merged_replicate/macs3/broad_peak/consensus/consensus_peaks.mRp.clN.PE.featureCounts.tsv.summary", + "star/merged_replicate/macs3/broad_peak/consensus/consensus_peaks.mRp.clN.SE.featureCounts.tsv", + "star/merged_replicate/macs3/broad_peak/consensus/consensus_peaks.mRp.clN.SE.featureCounts.tsv.summary", "star/merged_replicate/macs3/broad_peak/consensus/consensus_peaks.mRp.clN.annotatePeaks.txt", "star/merged_replicate/macs3/broad_peak/consensus/consensus_peaks.mRp.clN.bed", "star/merged_replicate/macs3/broad_peak/consensus/consensus_peaks.mRp.clN.boolean.intersect.plot.pdf", "star/merged_replicate/macs3/broad_peak/consensus/consensus_peaks.mRp.clN.boolean.intersect.txt", "star/merged_replicate/macs3/broad_peak/consensus/consensus_peaks.mRp.clN.boolean.txt", - "star/merged_replicate/macs3/broad_peak/consensus/consensus_peaks.mRp.clN.featureCounts.txt", - "star/merged_replicate/macs3/broad_peak/consensus/consensus_peaks.mRp.clN.featureCounts.txt.summary", + "star/merged_replicate/macs3/broad_peak/consensus/consensus_peaks.mRp.clN.featureCounts.tsv", "star/merged_replicate/macs3/broad_peak/consensus/consensus_peaks.mRp.clN.saf", "star/merged_replicate/macs3/broad_peak/consensus/deseq2", "star/merged_replicate/macs3/broad_peak/consensus/deseq2/R_sessionInfo.log", @@ -884,8 +911,8 @@ "star/merged_replicate/macs3/broad_peak/qc/macs3_peak.mRp.clN.plots.pdf", "star/merged_replicate/macs3/broad_peak/qc/macs3_peak.mRp.clN.summary.txt", "star/merged_replicate/picard_metrics", - "star/merged_replicate/picard_metrics/OSMOTIC_STRESS_T0_PE.mRp.clN.sorted.MarkDuplicates.metrics.txt", - "star/merged_replicate/picard_metrics/OSMOTIC_STRESS_T100_SE.mRp.clN.sorted.MarkDuplicates.metrics.txt", + "star/merged_replicate/picard_metrics/OSMOTIC_STRESS_T0_PE.mRp.clN.sorted.metrics.txt", + "star/merged_replicate/picard_metrics/OSMOTIC_STRESS_T100_SE.mRp.clN.sorted.metrics.txt", "star/merged_replicate/samtools_stats", "star/merged_replicate/samtools_stats/OSMOTIC_STRESS_T0_PE.mRp.clN.sorted.bam.flagstat", "star/merged_replicate/samtools_stats/OSMOTIC_STRESS_T0_PE.mRp.clN.sorted.bam.idxstats", @@ -942,54 +969,54 @@ "mqc_cutadapt_filtered_reads_plot_1.txt:md5,b78f69173122f2cacf8121eaeb815382", "mqc_cutadapt_trimmed_sequences_plot_3_Counts.txt:md5,157073209c492b89badba367b1c57d83", "mqc_cutadapt_trimmed_sequences_plot_3_Obs_Exp.txt:md5,b04ae8b2ec27d71817ae7cb666888b9b", - "mqc_deeptools_fingerprint_plot_1.txt:md5,5614a5f428cad6b1efcdffbb8487f4d0", - "mqc_fastqc_adapter_content_plot-2_1.txt:md5,7050d22f2eabdafb3d1eb81e736599af", + "mqc_deeptools_fingerprint_plot_1.txt:md5,492578b77b8df68c48e5254d3de4cbf6", + "mqc_fastqc_adapter_content_plot-2_1.txt:md5,3560a22f94aea25e27d97e056fb478ed", "mqc_fastqc_adapter_content_plot_1.txt:md5,66f3e2f6ba14599b0d6c20144df60777", - "mqc_fastqc_per_base_n_content_plot-2_1.txt:md5,7c5db7fad8afe578076466416e17bbd0", + "mqc_fastqc_per_base_n_content_plot-2_1.txt:md5,d79e95d36d955edee3e4bfb139dce967", "mqc_fastqc_per_base_n_content_plot_1.txt:md5,8d9cdd0463193b7e10332e2ca0273aca", - "mqc_fastqc_per_base_sequence_quality_plot-2_1.txt:md5,3f7c1c4998d41f10fcc48f15fc1c214f", + "mqc_fastqc_per_base_sequence_quality_plot-2_1.txt:md5,3bb6cad69480846e4003b9f0f3511caa", "mqc_fastqc_per_base_sequence_quality_plot_1.txt:md5,821cb87b0ae8bd61cd445d153b8f371a", - "mqc_fastqc_per_sequence_gc_content_plot-2_Counts.txt:md5,076f8f06afb71ddf1de87480c0a937ab", - "mqc_fastqc_per_sequence_gc_content_plot-2_Percentages.txt:md5,4f0d049c48c4cde730fdc2ee37130658", + "mqc_fastqc_per_sequence_gc_content_plot-2_Counts.txt:md5,88fb0e924094b5dd57f4003ac13fd1f4", + "mqc_fastqc_per_sequence_gc_content_plot-2_Percentages.txt:md5,a4b37bca5e61bf595c4532ffbc8b8f93", "mqc_fastqc_per_sequence_gc_content_plot_Counts.txt:md5,3fa7f0c0858d12cae8700e21774da86d", "mqc_fastqc_per_sequence_gc_content_plot_Percentages.txt:md5,a2d0c3ec413894e4dafa62ebdf44a06c", - "mqc_fastqc_per_sequence_quality_scores_plot-2_1.txt:md5,3dde643427f3229f283527966d7dd32e", + "mqc_fastqc_per_sequence_quality_scores_plot-2_1.txt:md5,841ccc3da246bd197fc966e9f8c5ca57", "mqc_fastqc_per_sequence_quality_scores_plot_1.txt:md5,3bfe1c94f710975829e2c1e3b5f16ea7", - "mqc_fastqc_sequence_counts_plot-2_1.txt:md5,83670beba48f5d0a1ff4bb038628f49e", + "mqc_fastqc_sequence_counts_plot-2_1.txt:md5,c734a06e1f3e3afc1486a0b45be880e1", "mqc_fastqc_sequence_counts_plot_1.txt:md5,d0cf8d64e742b5f446e6b602d86913b9", - "mqc_fastqc_sequence_duplication_levels_plot-2_1.txt:md5,907ad5b8fb27d2d9fd19281c8fa77e65", + "mqc_fastqc_sequence_duplication_levels_plot-2_1.txt:md5,d7ada8561d521eaf645073f7cccf7b82", "mqc_fastqc_sequence_duplication_levels_plot_1.txt:md5,23c4883ed6c22212b0c3e07a863745d1", - "mqc_fastqc_sequence_length_distribution_plot_1.txt:md5,46650932914f76713075e12934d6fcfe", - "mqc_featureCounts_assignment_plot-2_1.txt:md5,a68c726dd325fb05bdac468021e6d915", - "mqc_featureCounts_assignment_plot_1.txt:md5,96ea63ea653c829990e859cac1ead3ab", - "mqc_samtools-idxstats-mapped-reads-plot-2_Normalised_Counts.txt:md5,0365698843b5dbaf32710bd8bfe9b5ed", - "mqc_samtools-idxstats-mapped-reads-plot-2_Observed_over_Expected_Counts.txt:md5,3b625d09168ed22e200e69f4a7104cfc", - "mqc_samtools-idxstats-mapped-reads-plot-2_Raw_Counts.txt:md5,38cb8d7f7cd9c39da2240638540773b7", - "mqc_samtools-idxstats-mapped-reads-plot-3_Normalised_Counts.txt:md5,72d5f2cea14d1d7e0834e040b125ed70", - "mqc_samtools-idxstats-mapped-reads-plot-3_Observed_over_Expected_Counts.txt:md5,a22bf555cae0dda763c6df3549cb1d6f", - "mqc_samtools-idxstats-mapped-reads-plot-3_Raw_Counts.txt:md5,fbc0a126480b3ecf17d9ede478e70f9e", - "mqc_samtools-idxstats-mapped-reads-plot-4_Normalised_Counts.txt:md5,6ca49435a43c19f388e9aff980ab9084", - "mqc_samtools-idxstats-mapped-reads-plot-4_Observed_over_Expected_Counts.txt:md5,e9ee948cbf535683043b2fddf4e8fb66", - "mqc_samtools-idxstats-mapped-reads-plot-4_Raw_Counts.txt:md5,61b95fb8a4f5f8e0deb5717e18d86090", - "mqc_samtools-idxstats-mapped-reads-plot_Normalised_Counts.txt:md5,f3c8f1554674e7e8eb1affccfc010f4b", - "mqc_samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts.txt:md5,76f7552df76b2bec2bc472000a66988a", - "mqc_samtools-idxstats-mapped-reads-plot_Raw_Counts.txt:md5,98d9baa50dd5ade65979be7bd9791376", - "mqc_samtools_alignment_plot-2_1.txt:md5,f9840e1ed30305dac024d9bdd573c426", - "mqc_samtools_alignment_plot-3_1.txt:md5,79b4b6780b8324f1bcf0b81f92c7b549", - "mqc_samtools_alignment_plot-4_1.txt:md5,8241656c1b93bed4b3b725e1be6236c1", - "mqc_samtools_alignment_plot_1.txt:md5,e273e83438806ed8a61bf15052ae9251", + "mqc_fastqc_sequence_length_distribution_plot_1.txt:md5,bc3acb40acbf620b237d0f2fa8c8a1ab", + "mqc_featureCounts_assignment_plot-2_1.txt:md5,2a0468b27450c8f1e51d51e5d9e7e7f2", + "mqc_featureCounts_assignment_plot_1.txt:md5,487693d40293c1a98f0a42ee3f441c4e", + "mqc_samtools-idxstats-mapped-reads-plot-2_Normalised_Counts.txt:md5,4d253d5b204dd399d825bab5f7ff4b04", + "mqc_samtools-idxstats-mapped-reads-plot-2_Observed_over_Expected_Counts.txt:md5,7be3b0f84ad7dcb907abf11cd7681eeb", + "mqc_samtools-idxstats-mapped-reads-plot-2_Raw_Counts.txt:md5,d48215c49cf31af13d24d0ef8475d72b", + "mqc_samtools-idxstats-mapped-reads-plot-3_Normalised_Counts.txt:md5,40ab2e9370ce0e9cb7b97ab43a037bfe", + "mqc_samtools-idxstats-mapped-reads-plot-3_Observed_over_Expected_Counts.txt:md5,e9a3f537970b47dc2797ee82b36e3995", + "mqc_samtools-idxstats-mapped-reads-plot-3_Raw_Counts.txt:md5,50fc6341d6d28d1f7684ebaa26bbdde3", + "mqc_samtools-idxstats-mapped-reads-plot-4_Normalised_Counts.txt:md5,b020bc14cb13559c5ae8a906ab616051", + "mqc_samtools-idxstats-mapped-reads-plot-4_Observed_over_Expected_Counts.txt:md5,4a57c2b875a3d42af34289e71edb9751", + "mqc_samtools-idxstats-mapped-reads-plot-4_Raw_Counts.txt:md5,cb6ee731c07b0a03dc9c526e21483677", + "mqc_samtools-idxstats-mapped-reads-plot_Normalised_Counts.txt:md5,0e2d5e76c8fa3626f9f15292eac64c36", + "mqc_samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts.txt:md5,13bfa6c90bac9810790089c035c52a66", + "mqc_samtools-idxstats-mapped-reads-plot_Raw_Counts.txt:md5,5dab6ad8e2b091ea2ebbaff3813b447b", + "mqc_samtools_alignment_plot-2_1.txt:md5,f7b34db9abc4e09f6045b2618b618f5d", + "mqc_samtools_alignment_plot-3_1.txt:md5,b3fc8b725a3ec77d86062d87c4849897", + "mqc_samtools_alignment_plot-4_1.txt:md5,d5db3b7eb13353b1c35793dc2bf4a78b", + "mqc_samtools_alignment_plot_1.txt:md5,046d3410e6e5884e5d54aa0754523f85", "multiqc_citations.txt:md5,34da9f7497d275274f6dfd3b89831edb", - "multiqc_cutadapt.txt:md5,19916e059f11fa2c038c97bbb0ea190b", + "multiqc_cutadapt.txt:md5,926fcf7c5a9c5dc0a105a439c85a5f58", "multiqc_fastqc.txt:md5,a9a7484add8120fc3cf3d5626a92973b", - "multiqc_fastqc_1.txt:md5,6f694cea56d88eb91b4c9610f7a12ca5", - "multiqc_featureCounts_mlib_featurecounts.txt:md5,26b144fde7a16879ab0f859f9be2b371", - "multiqc_featureCounts_mrep_featurecounts.txt:md5,17bc5d87a6be34a2add90f1a78efe9b9", - "multiqc_mlib_frip_score-plot.txt:md5,03ca2f05877aeb795c71a9835aa7c7c8", - "multiqc_mlib_peak_annotation-plot.txt:md5,ad464cf5f4a581187a7dc98693999a27", - "multiqc_mlib_peak_count-plot.txt:md5,825d5d9d0e7d118c904eab2dfa3b912e", - "multiqc_mrep_frip_score-plot.txt:md5,c7a99f3dc6cf7756b11ca786d5bf154d", - "multiqc_mrep_peak_annotation-plot.txt:md5,3343c26c3f16ea19fc4d5a73141239f3", - "multiqc_mrep_peak_count-plot.txt:md5,0341231a30ef1f61ccec2bfd37a99d4b", + "multiqc_fastqc_1.txt:md5,58ab2bbd2d19745e5975742c6d1335d7", + "multiqc_featureCounts_mlib_featurecounts.txt:md5,9da38bbf31fda6d5ac2af16343a94e77", + "multiqc_featureCounts_mrep_featurecounts.txt:md5,74adacad81c0165b2bba6a0ca849cfe2", + "multiqc_mlib_frip_score-plot.txt:md5,172b8632976472eb78ded2270c3470fc", + "multiqc_mlib_peak_annotation-plot.txt:md5,38d611236d82efa626c8dcac8b359d2e", + "multiqc_mlib_peak_count-plot.txt:md5,69a8217b8bcb6c162b9f874f6a83e844", + "multiqc_mrep_frip_score-plot.txt:md5,bdd1045251499f6bafeed38aaeb0b5a3", + "multiqc_mrep_peak_annotation-plot.txt:md5,0fb5e026e299e3886df9da17ada0b47c", + "multiqc_mrep_peak_count-plot.txt:md5,2589ea10775ac06069b0f933dd2f2f93", "picard_histogram.txt:md5,c9aa8a5ac6841ffb3a6cc2de45b44797", "picard_histogram_1.txt:md5,c9aa8a5ac6841ffb3a6cc2de45b44797", "picard_histogram_2.txt:md5,c9aa8a5ac6841ffb3a6cc2de45b44797", @@ -1025,126 +1052,136 @@ "sourcesanspro-semiboldit.woff:md5,f1d255aa459786dfc6aa2e488ac01245", "index.html:md5,bf7747be761e56ad7c54c842ac88461a", "ataqv.js:md5,feb291b7839e9e43ed304565e3a605d9", - "configuration.js:md5,aced6e2ac008d82aabed98ca2a8b341e", + "configuration.js:md5,a2a6eed9dd615d38b4f6ad6ef414b2c4", "d3.min.js:md5,db69fb2626a71a286ee772d673138aca", "datatables.min.js:md5,e369b872620dadb05e4eb555b81f9112", "jszip.min.js:md5,09e492cb492ffa75484bbe10f1f721d1", - "OSMOTIC_STRESS_T0_PE_REP1.mLb.clN.scale_factor.txt:md5,a22d50d14b76f3a830019bbfc78febfd", - "OSMOTIC_STRESS_T0_PE_REP2.mLb.clN.scale_factor.txt:md5,4fbc241cec6a091be919fdb7068ad8a4", + "OSMOTIC_STRESS_T0_PE_REP1.mLb.clN.scale_factor.txt:md5,dea4ef85fe1a9d5db4e4b4947e52d870", + "OSMOTIC_STRESS_T0_PE_REP2.mLb.clN.scale_factor.txt:md5,1bc9d496c2222cd46074357f6841fbcc", "OSMOTIC_STRESS_T100_SE_REP1.mLb.clN.scale_factor.txt:md5,cf0e1529b9f498207ef0c094a8fb9ed7", - "OSMOTIC_STRESS_T100_SE_REP2.mLb.clN.scale_factor.txt:md5,e08f19135302dff2969254b6629820ff", - "OSMOTIC_STRESS_T150_SE_REP1.mLb.clN.scale_factor.txt:md5,db74e4b80e1d17f1761b30e5ef9c279e", - "OSMOTIC_STRESS_T15_PE_REP1.mLb.clN.scale_factor.txt:md5,30434411062e4b6579e0b66b19c07fc4", - "OSMOTIC_STRESS_T0_PE_REP1.mLb.clN_peaks.broadPeak:md5,2548b49e84483ac74c16f114d2c1d17b", - "OSMOTIC_STRESS_T0_PE_REP1.mLb.clN_peaks.gappedPeak:md5,d56c3cdad431b707b6b600276da00875", - "OSMOTIC_STRESS_T0_PE_REP1.mLb.clN_peaks.xls:md5,edf4b3f94298be07beba88de145abeb9", - "OSMOTIC_STRESS_T0_PE_REP2.mLb.clN_peaks.broadPeak:md5,dbead85e4df9c2d1be24be72886d61c9", - "OSMOTIC_STRESS_T0_PE_REP2.mLb.clN_peaks.gappedPeak:md5,a278a86e3d67a62f594decd2cb92c248", - "OSMOTIC_STRESS_T0_PE_REP2.mLb.clN_peaks.xls:md5,c1b61802c252ff61d6a517cf246719d3", + "OSMOTIC_STRESS_T100_SE_REP2.mLb.clN.scale_factor.txt:md5,f6dd1bfcaf56d3382ceb3d96de8e7649", + "OSMOTIC_STRESS_T150_SE_REP1.mLb.clN.scale_factor.txt:md5,342949ce24f97daf630349f097f84a08", + "OSMOTIC_STRESS_T15_PE_REP1.mLb.clN.scale_factor.txt:md5,0def6ba07a525bbabca4edcf76ac8215", + "OSMOTIC_STRESS_T0_PE_REP1.mLb.clN_peaks.broadPeak:md5,eb5d3f535c02ce0520a8c720339ebb62", + "OSMOTIC_STRESS_T0_PE_REP1.mLb.clN_peaks.gappedPeak:md5,04d93e076f7501cd3758e9c6145646ca", + "OSMOTIC_STRESS_T0_PE_REP1.mLb.clN_peaks.xls:md5,768352413ff1d74f676e06039f8567db", + "OSMOTIC_STRESS_T0_PE_REP2.mLb.clN_peaks.broadPeak:md5,25819461437436c7871b4185f96c7e75", + "OSMOTIC_STRESS_T0_PE_REP2.mLb.clN_peaks.gappedPeak:md5,1bbb5d99cb5f49d5f8270ffebbba1ee2", + "OSMOTIC_STRESS_T0_PE_REP2.mLb.clN_peaks.xls:md5,cff9a65484b11c40864f382f3571b226", "OSMOTIC_STRESS_T100_SE_REP1.mLb.clN_peaks.broadPeak:md5,7e0b0dbe055cc7553be6b0bb29ae477f", - "OSMOTIC_STRESS_T100_SE_REP1.mLb.clN_peaks.gappedPeak:md5,69728131921994669030baed3e87e605", - "OSMOTIC_STRESS_T100_SE_REP1.mLb.clN_peaks.xls:md5,b336f0f8c9cc5521a736ddf636279bcf", - "OSMOTIC_STRESS_T100_SE_REP2.mLb.clN_peaks.broadPeak:md5,aa4caeba7a2e0d6a0b5769373cbca014", - "OSMOTIC_STRESS_T100_SE_REP2.mLb.clN_peaks.gappedPeak:md5,2da1d3179985f427374e6c79734691a7", - "OSMOTIC_STRESS_T100_SE_REP2.mLb.clN_peaks.xls:md5,bd593937e3eea53b26ef19124d1a1bc1", - "OSMOTIC_STRESS_T150_SE_REP1.mLb.clN_peaks.broadPeak:md5,8aaa10598a935c52e63376637d55c7b0", - "OSMOTIC_STRESS_T150_SE_REP1.mLb.clN_peaks.gappedPeak:md5,1770d09db2bb066f8e9cecb4946ae973", - "OSMOTIC_STRESS_T150_SE_REP1.mLb.clN_peaks.xls:md5,de573b53e2cb09039ddf4311477c1e85", - "OSMOTIC_STRESS_T15_PE_REP1.mLb.clN_peaks.broadPeak:md5,8a19424cc30637a2f547b3ddab521ffa", - "OSMOTIC_STRESS_T15_PE_REP1.mLb.clN_peaks.gappedPeak:md5,4c2d0de6d936965413705a7d34af8812", - "OSMOTIC_STRESS_T15_PE_REP1.mLb.clN_peaks.xls:md5,4c013503aa809f3482a8d2f68d60b227", - "consensus_peaks.mLb.clN.bed:md5,7646742d8976b49ec3f90bf9d7fbe5a8", - "consensus_peaks.mLb.clN.boolean.intersect.txt:md5,35942306df818c33595d500f68547d9d", - "consensus_peaks.mLb.clN.boolean.txt:md5,8bf218731c7796d1ce8c5df84c543df3", - "consensus_peaks.mLb.clN.saf:md5,b118acbef780b61f24f88453a33dca19", + "OSMOTIC_STRESS_T100_SE_REP1.mLb.clN_peaks.gappedPeak:md5,480dccb044dc9f672cbeb2f1810982bc", + "OSMOTIC_STRESS_T100_SE_REP1.mLb.clN_peaks.xls:md5,6bf6c4812c08e09a08674993da40cf21", + "OSMOTIC_STRESS_T100_SE_REP2.mLb.clN_peaks.broadPeak:md5,1f64ae03be3ac6ea6a65bb398d6ee830", + "OSMOTIC_STRESS_T100_SE_REP2.mLb.clN_peaks.gappedPeak:md5,6c15baf6b940f23860b8dabfa740e21f", + "OSMOTIC_STRESS_T100_SE_REP2.mLb.clN_peaks.xls:md5,1f5d3f459c95a5fb8ff4ebfc641b748a", + "OSMOTIC_STRESS_T150_SE_REP1.mLb.clN_peaks.broadPeak:md5,4d412496ee6f4e918c4c6f49b3de2538", + "OSMOTIC_STRESS_T150_SE_REP1.mLb.clN_peaks.gappedPeak:md5,ca313c9a193f91084464fdc425e32262", + "OSMOTIC_STRESS_T150_SE_REP1.mLb.clN_peaks.xls:md5,ca663098945296d31365351c02af2d00", + "OSMOTIC_STRESS_T15_PE_REP1.mLb.clN_peaks.broadPeak:md5,1416515aa0cbe28a34ab89c4e25936eb", + "OSMOTIC_STRESS_T15_PE_REP1.mLb.clN_peaks.gappedPeak:md5,8096a430d12770cf14532e221eee9fb7", + "OSMOTIC_STRESS_T15_PE_REP1.mLb.clN_peaks.xls:md5,dbcefceedd33b613cb728c3e9247c4d5", + "consensus_peaks.mLb.clN.PE.featureCounts.tsv:md5,a7351a20bd920820b69912fa60680025", + "consensus_peaks.mLb.clN.PE.featureCounts.tsv.summary:md5,f51061db15a7a53047859eb25aa1b3d8", + "consensus_peaks.mLb.clN.SE.featureCounts.tsv:md5,7b58c4fe2a9c6bea003e905a8efba22b", + "consensus_peaks.mLb.clN.SE.featureCounts.tsv.summary:md5,7ac561fbdb95d761676adcd582552df3", + "consensus_peaks.mLb.clN.bed:md5,5389e3cd737a7f4b7aba15f8412240ee", + "consensus_peaks.mLb.clN.boolean.intersect.txt:md5,6733240f0bd75eea4f72cad459c8ec97", + "consensus_peaks.mLb.clN.boolean.txt:md5,e6192c22cc938c4190836c3ca5ac714f", + "consensus_peaks.mLb.clN.featureCounts.tsv:md5,375021bcf914ca06ba33d747d1377221", + "consensus_peaks.mLb.clN.saf:md5,f4a50c8a32bb50e6329a3101d042845e", "R_sessionInfo.log:md5,fb0da0d7ad6994ed66a8e68348b19676", - "OSMOTIC_STRESS_T0_PE_REP1.size_factors.txt:md5,c084ab8c295e832e4ffac54f10e5291a", - "OSMOTIC_STRESS_T0_PE_REP2.size_factors.txt:md5,95a82cd0085bcb03d0371c27dd8f7e04", - "OSMOTIC_STRESS_T100_SE_REP1.size_factors.txt:md5,52465f1c189efc4b677ceb323d3a8ccc", - "OSMOTIC_STRESS_T100_SE_REP2.size_factors.txt:md5,d7db1ed107f318f44cca945983842bca", - "OSMOTIC_STRESS_T150_SE_REP1.size_factors.txt:md5,84bc544d1c2a3797d2d81ed122871864", - "OSMOTIC_STRESS_T15_PE_REP1.size_factors.txt:md5,b33eed1d9a6eae58b7fc48cd0303c027", - "OSMOTIC_STRESS_T0_PE_REP1.mLb.clN_peaks.FRiP_mqc.tsv:md5,9ac1ae649efd0fcf3e9102081d4d66c8", + "OSMOTIC_STRESS_T0_PE_REP1.size_factors.txt:md5,99cf2a52321062b1e918327f9e6ed887", + "OSMOTIC_STRESS_T0_PE_REP2.size_factors.txt:md5,507d5f3fef5e2598a5cbc2fe15eccf83", + "OSMOTIC_STRESS_T100_SE_REP1.size_factors.txt:md5,b6bcc81889a8e7929b014205c51331a7", + "OSMOTIC_STRESS_T100_SE_REP2.size_factors.txt:md5,62bdf52336668e79eca9271cca0a7051", + "OSMOTIC_STRESS_T150_SE_REP1.size_factors.txt:md5,a527e343f4e32bd888c3dbd1075311a8", + "OSMOTIC_STRESS_T15_PE_REP1.size_factors.txt:md5,f29735d6b1fcbfa56be785ccb77bd52e", + "OSMOTIC_STRESS_T0_PE_REP1.mLb.clN_peaks.FRiP_mqc.tsv:md5,b7e15478014f9f23548c9b751e7a074e", "OSMOTIC_STRESS_T0_PE_REP1.mLb.clN_peaks.count_mqc.tsv:md5,ad7820a642434f5df39670c52ffac69c", - "OSMOTIC_STRESS_T0_PE_REP2.mLb.clN_peaks.FRiP_mqc.tsv:md5,07263c01ecd9c1988234975879e01370", - "OSMOTIC_STRESS_T0_PE_REP2.mLb.clN_peaks.count_mqc.tsv:md5,1ddd8a4d942ef2a44b0f2e1ea763887f", + "OSMOTIC_STRESS_T0_PE_REP2.mLb.clN_peaks.FRiP_mqc.tsv:md5,d912f185b2b7846272a101ab58b75812", + "OSMOTIC_STRESS_T0_PE_REP2.mLb.clN_peaks.count_mqc.tsv:md5,57eadcb0e74c599279ed0fc8b9d24cc7", "OSMOTIC_STRESS_T100_SE_REP1.mLb.clN_peaks.FRiP_mqc.tsv:md5,f8f8d3b80d1e0f513b7a2ef882d55ce2", "OSMOTIC_STRESS_T100_SE_REP1.mLb.clN_peaks.count_mqc.tsv:md5,ea421a851ce7a999430fe1ba08f4d42a", - "OSMOTIC_STRESS_T100_SE_REP2.mLb.clN_peaks.FRiP_mqc.tsv:md5,4ab2a1e016f12e82ef6e9008753051af", + "OSMOTIC_STRESS_T100_SE_REP2.mLb.clN_peaks.FRiP_mqc.tsv:md5,d1290fa3b94a12f9205475ac626c2668", "OSMOTIC_STRESS_T100_SE_REP2.mLb.clN_peaks.count_mqc.tsv:md5,7c7d22115bf19f41e1178af62e57b600", - "OSMOTIC_STRESS_T150_SE_REP1.mLb.clN_peaks.FRiP_mqc.tsv:md5,fb30d2c9552e840235f52fffcc0b0c6d", + "OSMOTIC_STRESS_T150_SE_REP1.mLb.clN_peaks.FRiP_mqc.tsv:md5,8365e7ac9191ad3d9f9e8facd9b9c44d", "OSMOTIC_STRESS_T150_SE_REP1.mLb.clN_peaks.count_mqc.tsv:md5,c1ecd3d24f2a87f42ce76adc66c4f873", - "OSMOTIC_STRESS_T15_PE_REP1.mLb.clN_peaks.FRiP_mqc.tsv:md5,219f7eee4afa753047fd7ae6691a887d", - "OSMOTIC_STRESS_T15_PE_REP1.mLb.clN_peaks.count_mqc.tsv:md5,95b301f88d0ea495d95431faf9e8fc45", - "macs3_annotatePeaks.mLb.clN.summary.txt:md5,20ec8d6c898174286ef23b7a1837f92d", - "macs3_annotatePeaks.mLb.clN.summary_mqc.tsv:md5,bd1641f72c176acad5143819e8056668", - "OSMOTIC_STRESS_T0_PE_REP1.mLb.clN.sorted.bam.flagstat:md5,6fb454bcb68e963dea90dd7c6d664cb6", - "OSMOTIC_STRESS_T0_PE_REP1.mLb.clN.sorted.bam.idxstats:md5,54ffac99e3d6fadef0e9ae738b144abb", + "OSMOTIC_STRESS_T15_PE_REP1.mLb.clN_peaks.FRiP_mqc.tsv:md5,e8f4186761ca698195e6824fa42e925b", + "OSMOTIC_STRESS_T15_PE_REP1.mLb.clN_peaks.count_mqc.tsv:md5,ea8632e1afc1aa1bdd6848cc85c84066", + "macs3_annotatePeaks.mLb.clN.summary.txt:md5,014caaed9f3285ce5fec78896c85e303", + "macs3_annotatePeaks.mLb.clN.summary_mqc.tsv:md5,df95adbdc9e2323f186a0598bd6b0a84", + "OSMOTIC_STRESS_T0_PE_REP1.mLb.clN.sorted.bam.flagstat:md5,53b58ad9e3d9a01ddb7646019ba26360", + "OSMOTIC_STRESS_T0_PE_REP1.mLb.clN.sorted.bam.idxstats:md5,59c9fbccc4656d9ba5f8ff023ee78151", "OSMOTIC_STRESS_T0_PE_REP1.mLb.mkD.sorted.bam.flagstat:md5,86b038a5e714d80822693fd4bd93cda0", "OSMOTIC_STRESS_T0_PE_REP1.mLb.mkD.sorted.bam.idxstats:md5,91b35f66c0c0b3b32190026424292eb3", - "OSMOTIC_STRESS_T0_PE_REP2.mLb.clN.sorted.bam.flagstat:md5,ec7c2c049ac658c47170997cbe6bc030", - "OSMOTIC_STRESS_T0_PE_REP2.mLb.clN.sorted.bam.idxstats:md5,58b9dd3213da1b299e1f3b7ab031ba04", - "OSMOTIC_STRESS_T0_PE_REP2.mLb.mkD.sorted.bam.flagstat:md5,5d5604d76c1d659d3aa03e26d3f54917", - "OSMOTIC_STRESS_T0_PE_REP2.mLb.mkD.sorted.bam.idxstats:md5,f9ad2a1b0f76585a06752b2a0ac166b6", + "OSMOTIC_STRESS_T0_PE_REP2.mLb.clN.sorted.bam.flagstat:md5,b5f91d02dfa2e7506e527c4824a63c12", + "OSMOTIC_STRESS_T0_PE_REP2.mLb.clN.sorted.bam.idxstats:md5,cf15b56eb317dc50147f02057a47f4d6", + "OSMOTIC_STRESS_T0_PE_REP2.mLb.mkD.sorted.bam.flagstat:md5,2668e3b1725de6cc4e48b8d304e39a5e", + "OSMOTIC_STRESS_T0_PE_REP2.mLb.mkD.sorted.bam.idxstats:md5,1557274d222c7854109a890a5dd73175", "OSMOTIC_STRESS_T100_SE_REP1.mLb.clN.sorted.bam.flagstat:md5,5e7c270fcd8eb467953d484bb1733f54", "OSMOTIC_STRESS_T100_SE_REP1.mLb.clN.sorted.bam.idxstats:md5,857efe419afc3092b88766991e29a359", "OSMOTIC_STRESS_T100_SE_REP1.mLb.mkD.sorted.bam.flagstat:md5,fe378bc0507b6bab43658bac68318170", "OSMOTIC_STRESS_T100_SE_REP1.mLb.mkD.sorted.bam.idxstats:md5,6c67ab527245e7f9c0673531c4d6bc18", - "OSMOTIC_STRESS_T100_SE_REP2.mLb.clN.sorted.bam.flagstat:md5,bc679504d2c7bc5d87df6eb5bcc04a43", - "OSMOTIC_STRESS_T100_SE_REP2.mLb.clN.sorted.bam.idxstats:md5,23d0d2e72bf58e01d568ad547227e47a", - "OSMOTIC_STRESS_T100_SE_REP2.mLb.mkD.sorted.bam.flagstat:md5,321663b7fa578b106b953cb5cd8af753", - "OSMOTIC_STRESS_T100_SE_REP2.mLb.mkD.sorted.bam.idxstats:md5,bc6503d98cacdd17de481ad5337f5052", - "OSMOTIC_STRESS_T150_SE_REP1.mLb.clN.sorted.bam.flagstat:md5,c7a2d99f02feaf98092beb689e6fcbd0", - "OSMOTIC_STRESS_T150_SE_REP1.mLb.clN.sorted.bam.idxstats:md5,4b8b29028641baedae9b468ad1f5b2d7", - "OSMOTIC_STRESS_T150_SE_REP1.mLb.mkD.sorted.bam.flagstat:md5,ac9f955709f343eba835956aeed6c51a", - "OSMOTIC_STRESS_T150_SE_REP1.mLb.mkD.sorted.bam.idxstats:md5,31b969a00fe899bc06836f79edec64d8", - "OSMOTIC_STRESS_T15_PE_REP1.mLb.clN.sorted.bam.flagstat:md5,eaf21a534ddb2d45c4e69fec81a74878", - "OSMOTIC_STRESS_T15_PE_REP1.mLb.clN.sorted.bam.idxstats:md5,b7dc543e44636e4c569c1b0064c51f3c", - "OSMOTIC_STRESS_T15_PE_REP1.mLb.mkD.sorted.bam.flagstat:md5,5c4ecd5bad2fc2c0a200cae09745d38f", - "OSMOTIC_STRESS_T15_PE_REP1.mLb.mkD.sorted.bam.idxstats:md5,60b8189bafbd5bd5d9e3500dcfed779e", - "OSMOTIC_STRESS_T0_PE.mRp.clN.scale_factor.txt:md5,027236ef18d97af8c4468c6991130e01", - "OSMOTIC_STRESS_T100_SE.mRp.clN.scale_factor.txt:md5,10f4b247ed7d98a91d9fdcb9cfa94a3d", - "OSMOTIC_STRESS_T0_PE.mRp.clN_peaks.broadPeak:md5,b1186d709f1843e4ace217f485272ea3", - "OSMOTIC_STRESS_T0_PE.mRp.clN_peaks.gappedPeak:md5,7c772ef07086b5452cd99bfa9b08e766", - "OSMOTIC_STRESS_T0_PE.mRp.clN_peaks.xls:md5,65db1cc34bfed7da437d0b708dc1344b", - "OSMOTIC_STRESS_T100_SE.mRp.clN_peaks.broadPeak:md5,f7509a148058eba471a5af089bf9caa1", - "OSMOTIC_STRESS_T100_SE.mRp.clN_peaks.gappedPeak:md5,44cd63f363fbf9f570262376f731b465", - "OSMOTIC_STRESS_T100_SE.mRp.clN_peaks.xls:md5,87df4cbb17cc528e1ab679ed66a8500a", - "consensus_peaks.mRp.clN.bed:md5,86918ef9299f0bb6e7c6c5fa6538167f", - "consensus_peaks.mRp.clN.boolean.intersect.txt:md5,7722bcd9eee345fd51603e734e396620", - "consensus_peaks.mRp.clN.boolean.txt:md5,6c51903f45d733e3bd7a4460f38f1047", - "consensus_peaks.mRp.clN.saf:md5,1d0afef0c15c6bb644ace3df53e1c448", + "OSMOTIC_STRESS_T100_SE_REP2.mLb.clN.sorted.bam.flagstat:md5,9b1a4fbd2f07fed57772939e1824ec3c", + "OSMOTIC_STRESS_T100_SE_REP2.mLb.clN.sorted.bam.idxstats:md5,373ba1b3229cb8badc681040d89732d2", + "OSMOTIC_STRESS_T100_SE_REP2.mLb.mkD.sorted.bam.flagstat:md5,b63a557ee45d93a3a6d6652bf53ce0b1", + "OSMOTIC_STRESS_T100_SE_REP2.mLb.mkD.sorted.bam.idxstats:md5,7bd135bf4add8e58db314be935d9dd04", + "OSMOTIC_STRESS_T150_SE_REP1.mLb.clN.sorted.bam.flagstat:md5,f1acb9c6985cf637b23dd92bc2f96f56", + "OSMOTIC_STRESS_T150_SE_REP1.mLb.clN.sorted.bam.idxstats:md5,227eab48d2449d79dd91909fb8914e23", + "OSMOTIC_STRESS_T150_SE_REP1.mLb.mkD.sorted.bam.flagstat:md5,bd32f154d5bf8bd4851fc43bd4d76462", + "OSMOTIC_STRESS_T150_SE_REP1.mLb.mkD.sorted.bam.idxstats:md5,a5934bacd5678da9fbec1e1aca6ee5c7", + "OSMOTIC_STRESS_T15_PE_REP1.mLb.clN.sorted.bam.flagstat:md5,8c32adbe735a4dc97dbf87730d547e96", + "OSMOTIC_STRESS_T15_PE_REP1.mLb.clN.sorted.bam.idxstats:md5,ae7f563848ef672536da7f158e1414a6", + "OSMOTIC_STRESS_T15_PE_REP1.mLb.mkD.sorted.bam.flagstat:md5,86e1620c870ef4375833a6c05d3a09fc", + "OSMOTIC_STRESS_T15_PE_REP1.mLb.mkD.sorted.bam.idxstats:md5,7057a94a521cf1a4019b88d310737d95", + "OSMOTIC_STRESS_T0_PE.mRp.clN.scale_factor.txt:md5,8a5eaabf9d8e31cf9bea82c581b712e7", + "OSMOTIC_STRESS_T100_SE.mRp.clN.scale_factor.txt:md5,b5f2d038356da25711e016317ef6135f", + "OSMOTIC_STRESS_T0_PE.mRp.clN_peaks.broadPeak:md5,8c81de493b6da8912c0366337949a986", + "OSMOTIC_STRESS_T0_PE.mRp.clN_peaks.gappedPeak:md5,ac9ae211d59e3c8d5a07637fcb5f2e90", + "OSMOTIC_STRESS_T0_PE.mRp.clN_peaks.xls:md5,9561df64e813da8f86de5ec3e52eea10", + "OSMOTIC_STRESS_T100_SE.mRp.clN_peaks.broadPeak:md5,6a0167a9715da2470d3ffb3670cb3b5f", + "OSMOTIC_STRESS_T100_SE.mRp.clN_peaks.gappedPeak:md5,ffe30696d3e468998583ee57ac3c95c7", + "OSMOTIC_STRESS_T100_SE.mRp.clN_peaks.xls:md5,d871487cf7aed92b064914d00b472f3c", + "consensus_peaks.mRp.clN.PE.featureCounts.tsv:md5,734c4c8c3562f5f2fa2f6cce7ed18c13", + "consensus_peaks.mRp.clN.PE.featureCounts.tsv.summary:md5,088ce713bacd0fb7649b1c59d36dc441", + "consensus_peaks.mRp.clN.SE.featureCounts.tsv:md5,79faf28854f55f1df31fffa4142bd8da", + "consensus_peaks.mRp.clN.SE.featureCounts.tsv.summary:md5,32025392be3ae545913695d645a6261d", + "consensus_peaks.mRp.clN.bed:md5,67afb66a825827fc3e10d2f27412d20d", + "consensus_peaks.mRp.clN.boolean.intersect.txt:md5,7679e1db16b523318d4930c8f0207936", + "consensus_peaks.mRp.clN.boolean.txt:md5,0e8ae4eae99f2f5655d2d9c67ebef80d", + "consensus_peaks.mRp.clN.featureCounts.tsv:md5,c90fad2d369d46f6121795c306be3a4d", + "consensus_peaks.mRp.clN.saf:md5,c5a5f9db859c83e74ee27112b045b7e6", "R_sessionInfo.log:md5,fb0da0d7ad6994ed66a8e68348b19676", - "OSMOTIC_STRESS_T0_PE_REP1.size_factors.txt:md5,def4ef1ff6d029e608edb60d89c001ed", - "OSMOTIC_STRESS_T0_PE_REP2.size_factors.txt:md5,acf183f63323499c0d2cb2c780b76594", - "OSMOTIC_STRESS_T100_SE_REP1.size_factors.txt:md5,b3d30d4c4c473af80d010d9cf848d3cf", - "OSMOTIC_STRESS_T100_SE_REP2.size_factors.txt:md5,d606d14c1584a19fca3b55547058621e", - "OSMOTIC_STRESS_T0_PE.mRp.clN_peaks.FRiP_mqc.tsv:md5,9c54a27a8b6cc6e0a7f7ed9c1dc20a62", + "OSMOTIC_STRESS_T0_PE_REP1.size_factors.txt:md5,c4c619b17861509ba75291f0e9aea15e", + "OSMOTIC_STRESS_T0_PE_REP2.size_factors.txt:md5,2d74aea1599784da45cb638ab03535cd", + "OSMOTIC_STRESS_T100_SE_REP1.size_factors.txt:md5,c2be0dec1f43a2b2c1ba12179f5d5854", + "OSMOTIC_STRESS_T100_SE_REP2.size_factors.txt:md5,69b05952399e56d7bd48654406489c3e", + "OSMOTIC_STRESS_T0_PE.mRp.clN_peaks.FRiP_mqc.tsv:md5,e316fc50bd5a8a88a067c9b9be7bb8f0", "OSMOTIC_STRESS_T0_PE.mRp.clN_peaks.count_mqc.tsv:md5,f1362a3c63d2c94fa2f2fadca032dbba", - "OSMOTIC_STRESS_T100_SE.mRp.clN_peaks.FRiP_mqc.tsv:md5,ff129ebd4acf7d532a3e9153e25ffdc8", - "OSMOTIC_STRESS_T100_SE.mRp.clN_peaks.count_mqc.tsv:md5,c5005dcf7f771409d6af9f8242b700fe", - "macs3_annotatePeaks.mRp.clN.summary.txt:md5,949ffb5874dab43485183fedc71f264c", - "macs3_annotatePeaks.mRp.clN.summary_mqc.tsv:md5,aaee46e391c099b2373e4a4054f97604", - "OSMOTIC_STRESS_T0_PE.mRp.clN.sorted.bam.flagstat:md5,3d75bee2e0d21a9f0a5b63b067627901", - "OSMOTIC_STRESS_T0_PE.mRp.clN.sorted.bam.idxstats:md5,c098860a16cb80dc02c9e7350650c0a3", - "OSMOTIC_STRESS_T100_SE.mRp.clN.sorted.bam.flagstat:md5,f4fd8f22ff88f5cd6f1685fe404884dd", - "OSMOTIC_STRESS_T100_SE.mRp.clN.sorted.bam.idxstats:md5,ba93fd0513c58366b31537e06da25a54" + "OSMOTIC_STRESS_T100_SE.mRp.clN_peaks.FRiP_mqc.tsv:md5,a1deb279f6b442fd0a871a8d1e988cb3", + "OSMOTIC_STRESS_T100_SE.mRp.clN_peaks.count_mqc.tsv:md5,29d619c7a2e3ba2164f8c764a49f0296", + "macs3_annotatePeaks.mRp.clN.summary.txt:md5,28f0ecd999941332e8c87b78fe6db589", + "macs3_annotatePeaks.mRp.clN.summary_mqc.tsv:md5,23fd1535843c9b24fd0f765475f9cbde", + "OSMOTIC_STRESS_T0_PE.mRp.clN.sorted.bam.flagstat:md5,f86547e70772d7e5c29b839a5079b4a0", + "OSMOTIC_STRESS_T0_PE.mRp.clN.sorted.bam.idxstats:md5,7126b4aa716d10c1e19d997fdc64d5b9", + "OSMOTIC_STRESS_T100_SE.mRp.clN.sorted.bam.flagstat:md5,dc21331f6afd6d646dc65b6596c64ad7", + "OSMOTIC_STRESS_T100_SE.mRp.clN.sorted.bam.idxstats:md5,14ae61b4381b88b505a76ff6c87f5676" ] ], + "timestamp": "2026-07-26T03:32:27.572182058", "meta": { - "nf-test": "0.9.3", - "nextflow": "26.04.1" - }, - "timestamp": "2026-05-20T13:22:07.297454404" + "nf-test": "0.9.4", + "nextflow": "25.10.4" + } }, "star with stub": { "content": [ 26 ], + "timestamp": "2026-03-20T23:41:33.115193909", "meta": { "nf-test": "0.9.3", "nextflow": "25.04.7" - }, - "timestamp": "2026-03-20T23:41:33.115193909" + } } } \ No newline at end of file diff --git a/workflows/atacseq.nf b/workflows/atacseq.nf index 9545fca5..3e8d0a22 100644 --- a/workflows/atacseq.nf +++ b/workflows/atacseq.nf @@ -15,7 +15,6 @@ include { MULTIQC } from '../modules/local/multiqc' // include { paramsSummaryMap } from 'plugin/nf-schema' include { paramsSummaryMultiqc } from '../subworkflows/nf-core/utils_nfcore_pipeline' -include { softwareVersionsToYAML } from '../subworkflows/nf-core/utils_nfcore_pipeline' include { methodsDescriptionText } from '../subworkflows/local/utils_nfcore_atacseq_pipeline' include { INPUT_CHECK } from '../subworkflows/local/input_check' include { ALIGN_STAR } from '../subworkflows/local/align_star' @@ -113,7 +112,6 @@ workflow ATACSEQ { ataqv_mito_reference = params.mito_name } - def ch_versions = channel.empty() def ch_multiqc_files = channel.empty() // @@ -124,7 +122,6 @@ workflow ATACSEQ { params.seq_center, params.with_control ) - ch_versions = ch_versions.mix(INPUT_CHECK.out.versions) // TODO: OPTIONAL, you can use nf-validation plugin to create an input channel from the samplesheet with channel.fromSamplesheet("input") // See the documentation https://nextflow-io.github.io/nf-validation/samplesheets/fromSamplesheet/ // ! There is currently no tooling to help you write a sample sheet schema @@ -166,21 +163,24 @@ workflow ATACSEQ { ch_samtools_stats = channel.empty() ch_samtools_flagstat = channel.empty() ch_samtools_idxstats = channel.empty() + + // Broadcast the singleton [ meta, fasta, fai ] reference tuple to per-sample consumers. + ch_fasta_fai = ch_fasta + .combine(ch_fai) + .map { fasta, fai -> [ [:], fasta, fai ] } + .first() + if (params.aligner == 'bwa') { FASTQ_ALIGN_BWA ( FASTQ_FASTQC_UMITOOLS_TRIMGALORE.out.reads, ch_bwa_index, false, - ch_fasta - .map { item -> - [ [:], item ] - } + ch_fasta_fai ) ch_genome_bam = FASTQ_ALIGN_BWA.out.bam ch_samtools_stats = FASTQ_ALIGN_BWA.out.stats ch_samtools_flagstat = FASTQ_ALIGN_BWA.out.flagstat ch_samtools_idxstats = FASTQ_ALIGN_BWA.out.idxstats - ch_versions = ch_versions.mix(FASTQ_ALIGN_BWA.out.versions) } // @@ -192,16 +192,12 @@ workflow ATACSEQ { ch_bowtie2_index, params.save_unaligned, false, - ch_fasta - .map { item -> - [ [:], item ] - } + ch_fasta_fai ) ch_genome_bam = FASTQ_ALIGN_BOWTIE2.out.bam ch_samtools_stats = FASTQ_ALIGN_BOWTIE2.out.stats ch_samtools_flagstat = FASTQ_ALIGN_BOWTIE2.out.flagstat ch_samtools_idxstats = FASTQ_ALIGN_BOWTIE2.out.idxstats - ch_versions = ch_versions.mix(FASTQ_ALIGN_BOWTIE2.out.versions) } // @@ -211,20 +207,17 @@ workflow ATACSEQ { FASTQ_ALIGN_CHROMAP ( FASTQ_FASTQC_UMITOOLS_TRIMGALORE.out.reads, ch_chromap_index, - ch_fasta - .map { item -> - [ [:], item ] - }, + ch_fasta_fai, + [], [], [], [], - [] + true ) ch_genome_bam = FASTQ_ALIGN_CHROMAP.out.bam ch_samtools_stats = FASTQ_ALIGN_CHROMAP.out.stats ch_samtools_flagstat = FASTQ_ALIGN_CHROMAP.out.flagstat ch_samtools_idxstats = FASTQ_ALIGN_CHROMAP.out.idxstats - ch_versions = ch_versions.mix(FASTQ_ALIGN_CHROMAP.out.versions) } // @@ -235,10 +228,7 @@ workflow ATACSEQ { ALIGN_STAR ( FASTQ_FASTQC_UMITOOLS_TRIMGALORE.out.reads, ch_star_index, - ch_fasta - .map { item -> - [ [:], item ] - }, + ch_fasta_fai, params.seq_center ?: '' ) ch_genome_bam = ALIGN_STAR.out.bam @@ -246,7 +236,6 @@ workflow ATACSEQ { ch_samtools_flagstat = ALIGN_STAR.out.flagstat ch_samtools_idxstats = ALIGN_STAR.out.idxstats ch_star_multiqc = ALIGN_STAR.out.log_final - ch_versions = ch_versions.mix(ALIGN_STAR.out.versions) } // Create channels: [ meta, [bam] ] @@ -271,48 +260,26 @@ workflow ATACSEQ { PICARD_MERGESAMFILES_LIBRARY ( ch_sort_bam ) - ch_versions = ch_versions.mix(PICARD_MERGESAMFILES_LIBRARY.out.versions.first()) // // SUBWORKFLOW: Mark duplicates in BAM files // MERGED_LIBRARY_MARKDUPLICATES_PICARD ( PICARD_MERGESAMFILES_LIBRARY.out.bam, - ch_fasta - .map { item -> - [ [:], item ] - }, - ch_fai - .map { item -> - [ [:], item ] - } + ch_fasta_fai ) - ch_versions = ch_versions.mix(MERGED_LIBRARY_MARKDUPLICATES_PICARD.out.versions) // // SUBWORKFLOW: Filter BAM file // MERGED_LIBRARY_FILTER_BAM ( MERGED_LIBRARY_MARKDUPLICATES_PICARD.out.bam - .join(MERGED_LIBRARY_MARKDUPLICATES_PICARD.out.bai, by: [0], remainder: true) - .join(MERGED_LIBRARY_MARKDUPLICATES_PICARD.out.csi, by: [0], remainder: true) - .map { - meta, bam, bai, csi -> - if (bai) { - [ meta, bam, bai ] - } else { - [ meta, bam, csi ] - } - }, + .join(MERGED_LIBRARY_MARKDUPLICATES_PICARD.out.index, by: [0]), ch_filtered_bed.first(), - ch_fasta - .map { item -> - [ [:], item ] - }, + ch_fasta_fai, ch_bamtools_filter_se_config, ch_bamtools_filter_pe_config ) - ch_versions = ch_versions.mix(MERGED_LIBRARY_FILTER_BAM.out.versions) // // MODULE: Preseq coverage analysis @@ -323,7 +290,6 @@ workflow ATACSEQ { MERGED_LIBRARY_MARKDUPLICATES_PICARD.out.bam ) ch_preseq_multiqc = MERGED_LIBRARY_PRESEQ_LCEXTRAP.out.lc_extrap - ch_versions = ch_versions.mix(MERGED_LIBRARY_PRESEQ_LCEXTRAP.out.versions.first()) } // @@ -348,31 +314,24 @@ workflow ATACSEQ { } ) ch_picardcollectmultiplemetrics_multiqc = MERGED_LIBRARY_PICARD_COLLECTMULTIPLEMETRICS.out.metrics - ch_versions = ch_versions.mix(MERGED_LIBRARY_PICARD_COLLECTMULTIPLEMETRICS.out.versions.first()) } // // SUBWORKFLOW: Shift paired-end reads // ch_merged_library_filter_bam = MERGED_LIBRARY_FILTER_BAM.out.bam - ch_merged_library_filter_bai = MERGED_LIBRARY_FILTER_BAM.out.bai + ch_merged_library_filter_index = MERGED_LIBRARY_FILTER_BAM.out.index ch_merged_library_filter_flagstat = MERGED_LIBRARY_FILTER_BAM.out.flagstat - ch_merged_library_filter_csi = MERGED_LIBRARY_FILTER_BAM.out.csi if (params.shift_reads && params.aligner != 'chromap' ) { MERGED_LIBRARY_BAM_SHIFT_READS ( - ch_merged_library_filter_bam.join(ch_merged_library_filter_bai, by: [0]), - ch_fasta - .map { item -> - [ [:], item ] - } + ch_merged_library_filter_bam.join(ch_merged_library_filter_index, by: [0]), + ch_fasta_fai ) - ch_versions = ch_versions.mix(MERGED_LIBRARY_BAM_SHIFT_READS.out.versions) ch_merged_library_filter_bam = MERGED_LIBRARY_BAM_SHIFT_READS.out.bam - ch_merged_library_filter_bai = MERGED_LIBRARY_BAM_SHIFT_READS.out.bai + ch_merged_library_filter_index = MERGED_LIBRARY_BAM_SHIFT_READS.out.index ch_merged_library_filter_flagstat = MERGED_LIBRARY_BAM_SHIFT_READS.out.flagstat - ch_merged_library_filter_csi = MERGED_LIBRARY_BAM_SHIFT_READS.out.csi } @@ -385,7 +344,6 @@ workflow ATACSEQ { ch_merged_library_filter_bam.join(ch_merged_library_filter_flagstat, by: [0]), ch_chrom_sizes ) - ch_versions = ch_versions.mix(MERGED_LIBRARY_BAM_TO_BIGWIG.out.versions) // // SUBWORKFLOW: Plot coverage across annotation with deepTools @@ -398,39 +356,29 @@ workflow ATACSEQ { ch_tss_bed ) ch_deeptoolsplotprofile_multiqc = MERGED_LIBRARY_BIGWIG_PLOT_DEEPTOOLS.out.plotprofile_table - ch_versions = ch_versions.mix(MERGED_LIBRARY_BIGWIG_PLOT_DEEPTOOLS.out.versions) } - // Create channels: [ meta, [bam], [bai] ] or [ meta, [ bam, control_bam ] [ bai, control_bai ] ] + // Create channels: [ meta, [ bam ], [ index ] ] or [ meta, [ bam, control_bam ], [ index, control_index ] ] ch_merged_library_filter_bam - .join(ch_merged_library_filter_bai, by: [0], remainder: true) - .join(ch_merged_library_filter_csi, by: [0], remainder: true) - .map { - meta, bam, bai, csi -> - if (bai) { - [ meta, bam, bai ] - } else { - [ meta, bam, csi ] - } - } - .set { ch_bam_bai } + .join(ch_merged_library_filter_index, by: [0]) + .set { ch_bam_index } if (params.with_control) { - ch_bam_bai + ch_bam_index .map { - meta, bam, bai -> - meta.control ? null : [ meta.id, [ bam ] , [ bai ] ] + meta, bam, index -> + meta.control ? null : [ meta.id, [ bam ] , [ index ] ] } - .set { ch_control_bam_bai } + .set { ch_control_bam_index } - ch_bam_bai + ch_bam_index .map { - meta, bam, bai -> - meta.control ? [ meta.control, meta, [ bam ], [ bai ] ] : null + meta, bam, index -> + meta.control ? [ meta.control, meta, [ bam ], [ index ] ] : null } - .combine(ch_control_bam_bai, by: 0) + .combine(ch_control_bam_index, by: 0) .map { item -> [ item[1] , item[2] + item[4], item[3] + item[5] ] } - .set { ch_bam_bai } + .set { ch_bam_index } } // @@ -439,24 +387,23 @@ workflow ATACSEQ { ch_deeptoolsplotfingerprint_multiqc = channel.empty() if (!params.skip_plot_fingerprint) { MERGED_LIBRARY_DEEPTOOLS_PLOTFINGERPRINT ( - ch_bam_bai + ch_bam_index ) ch_deeptoolsplotfingerprint_multiqc = MERGED_LIBRARY_DEEPTOOLS_PLOTFINGERPRINT.out.matrix - ch_versions = ch_versions.mix(MERGED_LIBRARY_DEEPTOOLS_PLOTFINGERPRINT.out.versions.first()) } // Create channel: [ val(meta), bam, control_bam ] if (params.with_control) { - ch_bam_bai + ch_bam_index .map { - meta, bams, _bais -> + meta, bams, _indexes -> [ meta , bams[0], bams[1] ] } .set { ch_bam_library } } else { - ch_bam_bai + ch_bam_index .map { - meta, bam, _bai -> + meta, bam, _index -> [ meta , bam, [] ] } .set { ch_bam_library } @@ -478,7 +425,6 @@ workflow ATACSEQ { params.skip_peak_annotation, params.skip_peak_qc ) - ch_versions = ch_versions.mix(MERGED_LIBRARY_CALL_ANNOTATE_PEAKS.out.versions) // // SUBWORKFLOW: Consensus peaks analysis @@ -503,23 +449,13 @@ workflow ATACSEQ { ch_featurecounts_library_multiqc = MERGED_LIBRARY_CONSENSUS_PEAKS.out.featurecounts_summary ch_deseq2_pca_library_multiqc = MERGED_LIBRARY_CONSENSUS_PEAKS.out.deseq2_qc_pca_multiqc ch_deseq2_clustering_library_multiqc = MERGED_LIBRARY_CONSENSUS_PEAKS.out.deseq2_qc_dists_multiqc - ch_versions = ch_versions.mix(MERGED_LIBRARY_CONSENSUS_PEAKS.out.versions) } // Create channels: [ meta, bam, bai, peak_file ] MERGED_LIBRARY_MARKDUPLICATES_PICARD .out .bam - .join(MERGED_LIBRARY_MARKDUPLICATES_PICARD.out.bai, by: [0], remainder: true) - .join(MERGED_LIBRARY_MARKDUPLICATES_PICARD.out.csi, by: [0], remainder: true) - .map { - meta, bam, bai, csi -> - if (bai) { - [ meta, bam, bai ] - } else { - [ meta, bam, csi ] - } - } + .join(MERGED_LIBRARY_MARKDUPLICATES_PICARD.out.index, by: [0]) .join(MERGED_LIBRARY_CALL_ANNOTATE_PEAKS.out.peaks, by: [0]) .set { ch_bam_peaks } @@ -535,12 +471,10 @@ workflow ATACSEQ { [], ch_autosomes ) - ch_versions = ch_versions.mix(MERGED_LIBRARY_ATAQV_ATAQV.out.versions.first()) MERGED_LIBRARY_ATAQV_MKARV ( MERGED_LIBRARY_ATAQV_ATAQV.out.json.collect { item -> item[1] } ) - ch_versions = ch_versions.mix(MERGED_LIBRARY_ATAQV_MKARV.out.versions) } // @@ -587,51 +521,36 @@ workflow ATACSEQ { PICARD_MERGESAMFILES_REPLICATE ( ch_merged_library_replicate_bam ) - ch_versions = ch_versions.mix(PICARD_MERGESAMFILES_REPLICATE.out.versions.first()) // // SUBWORKFLOW: Mark duplicates & filter BAM files after merging // MERGED_REPLICATE_MARKDUPLICATES_PICARD ( PICARD_MERGESAMFILES_REPLICATE.out.bam, - ch_fasta - .map { item -> - [ [:], item ] - }, - ch_fai - .map { item -> - [ [:], item ] - } + ch_fasta_fai ) ch_markduplicates_replicate_stats = MERGED_REPLICATE_MARKDUPLICATES_PICARD.out.stats ch_markduplicates_replicate_flagstat = MERGED_REPLICATE_MARKDUPLICATES_PICARD.out.flagstat ch_markduplicates_replicate_idxstats = MERGED_REPLICATE_MARKDUPLICATES_PICARD.out.idxstats ch_markduplicates_replicate_metrics = MERGED_REPLICATE_MARKDUPLICATES_PICARD.out.metrics - ch_versions = ch_versions.mix(MERGED_REPLICATE_MARKDUPLICATES_PICARD.out.versions) // // SUBWORKFLOW: Shift paired-end reads // Shift again, as ch_merged_library_replicate_bam is generated out of unshifted reads // ch_merged_replicate_markduplicate_bam = MERGED_REPLICATE_MARKDUPLICATES_PICARD.out.bam - ch_merged_replicate_markduplicate_bai = MERGED_REPLICATE_MARKDUPLICATES_PICARD.out.bai + ch_merged_replicate_markduplicate_index = MERGED_REPLICATE_MARKDUPLICATES_PICARD.out.index ch_merged_replicate_markduplicate_flagstat = MERGED_REPLICATE_MARKDUPLICATES_PICARD.out.flagstat - ch_merged_replicate_markduplicate_csi = MERGED_REPLICATE_MARKDUPLICATES_PICARD.out.csi if (params.shift_reads && params.aligner != 'chromap' ) { MERGED_REPLICATE_BAM_SHIFT_READS ( - ch_merged_replicate_markduplicate_bam.join(ch_merged_replicate_markduplicate_bai, by: [0]), - ch_fasta - .map { item -> - [ [:], item ] - } + ch_merged_replicate_markduplicate_bam.join(ch_merged_replicate_markduplicate_index, by: [0]), + ch_fasta_fai ) - ch_versions = ch_versions.mix(MERGED_REPLICATE_BAM_SHIFT_READS.out.versions) ch_merged_replicate_markduplicate_bam = MERGED_REPLICATE_BAM_SHIFT_READS.out.bam - ch_merged_replicate_markduplicate_bai = MERGED_REPLICATE_BAM_SHIFT_READS.out.bai + ch_merged_replicate_markduplicate_index = MERGED_REPLICATE_BAM_SHIFT_READS.out.index ch_merged_replicate_markduplicate_flagstat = MERGED_REPLICATE_BAM_SHIFT_READS.out.flagstat - ch_merged_replicate_markduplicate_csi = MERGED_REPLICATE_BAM_SHIFT_READS.out.csi } if (!params.skip_merged_replicate_bigwig) { // @@ -642,7 +561,6 @@ workflow ATACSEQ { ch_chrom_sizes ) ch_ucsc_bedgraphtobigwig_replicate_bigwig = MERGED_REPLICATE_BAM_TO_BIGWIG.out.bigwig - ch_versions = ch_versions.mix(MERGED_REPLICATE_BAM_TO_BIGWIG.out.versions) } // Create channels: [ meta, bam, ([] for control_bam) ] if (params.with_control) { @@ -690,7 +608,6 @@ workflow ATACSEQ { ch_macs3_frip_replicate_multiqc = MERGED_REPLICATE_CALL_ANNOTATE_PEAKS.out.frip_multiqc ch_macs3_peak_count_replicate_multiqc = MERGED_REPLICATE_CALL_ANNOTATE_PEAKS.out.peak_count_multiqc ch_macs3_plot_homer_annotatepeaks_replicate_multiqc = MERGED_REPLICATE_CALL_ANNOTATE_PEAKS.out.plot_homer_annotatepeaks_tsv - ch_versions = ch_versions.mix(MERGED_REPLICATE_CALL_ANNOTATE_PEAKS.out.versions) // // SUBWORKFLOW: Consensus peaks analysis @@ -711,7 +628,6 @@ workflow ATACSEQ { ch_featurecounts_replicate_multiqc = MERGED_REPLICATE_CONSENSUS_PEAKS.out.featurecounts_summary ch_deseq2_pca_replicate_multiqc = MERGED_REPLICATE_CONSENSUS_PEAKS.out.deseq2_qc_pca_multiqc ch_deseq2_clustering_replicate_multiqc = MERGED_REPLICATE_CONSENSUS_PEAKS.out.deseq2_qc_dists_multiqc - ch_versions = ch_versions.mix(MERGED_REPLICATE_CONSENSUS_PEAKS.out.versions) } } @@ -745,36 +661,25 @@ workflow ATACSEQ { "/consensus" ].join('') }, ) - ch_versions = ch_versions.mix(IGV.out.versions) } // // Collate and save software versions // - 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 + def ch_collated_versions = channel.topic('versions') .map { process, tool, version -> - [ process[process.lastIndexOf(':')+1..-1], " ${tool}: ${version}" ] + [ process[process.lastIndexOf(':') + 1..-1], " ${tool}: ${version}" ] } - .groupTuple(by:0) + .groupTuple(by: 0) .map { process, tool_versions -> - tool_versions.unique().sort() - "${process}:\n${tool_versions.join('\n')}" + def dedup = tool_versions.unique().sort() + "${process}:\n${dedup.join('\n')}" } - - def ch_collated_versions = softwareVersionsToYAML(ch_versions.mix(topic_versions.versions_file)) - .mix(topic_versions_string) .collectFile( + name: 'nf_core_atacseq_software_mqc_versions.yml', storeDir: "${outdir}/pipeline_info", - name: 'nf_core_' + 'atacseq_software_' + 'mqc_' + 'versions.yml', sort: true, - newLine: true + newLine: true, ) // @@ -848,7 +753,6 @@ workflow ATACSEQ { emit: multiqc_report = ch_multiqc_report.toList() // channel: /path/to/multiqc_report.html - versions = ch_versions // channel: [ path(versions.yml) ] } /*