From 7769b09e777c4267a9f671ece1bcf0dcd9817b13 Mon Sep 17 00:00:00 2001 From: CaroAMN Date: Mon, 19 Jan 2026 10:41:30 +0100 Subject: [PATCH] update workflow to take zip archives or directories as input --- tests/default.nf.test.snap | 2 +- workflows/lsmquant.nf | 78 +++++++++++++++++++++----------------- 2 files changed, 44 insertions(+), 36 deletions(-) diff --git a/tests/default.nf.test.snap b/tests/default.nf.test.snap index 09bfa74..4f92227 100644 --- a/tests/default.nf.test.snap +++ b/tests/default.nf.test.snap @@ -596,6 +596,6 @@ "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2026-01-08T16:39:39.287319338" + "timestamp": "2026-01-19T10:22:27.699733167" } } \ No newline at end of file diff --git a/workflows/lsmquant.nf b/workflows/lsmquant.nf index fbf42bd..cb860d1 100644 --- a/workflows/lsmquant.nf +++ b/workflows/lsmquant.nf @@ -34,47 +34,55 @@ workflow LSMQUANT { ch_versions = Channel.empty() ch_multiqc_files = Channel.empty() - // stage input files into the working directory - // if test profile then first data needs to be unzipped - if ( workflow.profile.contains('test') ) { - params.stage = 'preprocessing' - samplesheet - .map { meta, img_directory, parameter_file -> - tuple(meta, img_directory) - } - .set { img_archive } + // branch input channel based on whether zip archive or directory + samplesheet.branch { meta, img_directory, parameter_file -> + zip_archive: img_directory[0].endsWith(".zip") + return tuple(meta, img_directory, parameter_file) + directory: true + return tuple(meta, img_directory, parameter_file) + } + .set { samplesheet_split } - UNZIP (img_archive) - ch_versions = ch_versions.mix(UNZIP.out.versions) - def unzipped_output = UNZIP.out.unzipped_archive + // if zip archive then unzip first + samplesheet_split.zip_archive + .map { meta, zip, parameter_file -> + tuple(meta, zip) + } + .set { zip_archive } + + UNZIP (zip_archive) + ch_versions = ch_versions.mix(UNZIP.out.versions) + unzipped_output = UNZIP.out.unzipped_archive + // join unzipped output with parameter file + unzipped_output + .join(samplesheet_split.zip_archive) + .map { meta, unzipped, zip, parameter_file -> + tuple(meta, unzipped, parameter_file) + } + .set { ch_unzipped } - unzipped_output - .join(samplesheet) - .map { meta, unzipped, raw_img_directory, parameter_file -> - tuple(meta, unzipped, parameter_file) - } - .set { ch_samplesheet } - } - else { - samplesheet - .map { meta, img_directory, parameter_file -> - tuple(meta, img_directory) - } - .set { img_dir } + // if directory then stage files + samplesheet_split.directory + .map { meta, img_directory, parameter_file -> + tuple(meta, img_directory) + } + .set { img_dir } - STAGEFILES (img_dir) + STAGEFILES (img_dir) + ch_versions = ch_versions.mix(STAGEFILES.out.versions) + staged_images = STAGEFILES.out.raw_files - ch_versions = ch_versions.mix(STAGEFILES.out.versions) - def staged_images = STAGEFILES.out.raw_files + staged_images + .join(samplesheet_split.directory) + .map { meta, staged, raw_img_directory, parameter_file -> + tuple(meta, staged, parameter_file) + } + .set { ch_stagedfiles } - staged_images - .join(samplesheet) - .map { meta, staged, raw_img_directory, parameter_file -> - tuple(meta, staged, parameter_file) - } - .set { ch_samplesheet } - } + // combine unzipped and staged files channels + ch_samplesheet = Channel.empty() + ch_samplesheet = ch_unzipped.mix(ch_stagedfiles) // run different workflows according to parameter setting // the complete analysis workflow with the option of ara registration