Skip to content

reverting paramsheet to profiles#644

Open
suzannejin wants to merge 16 commits intodevfrom
fix_param_priority
Open

reverting paramsheet to profiles#644
suzannejin wants to merge 16 commits intodevfrom
fix_param_priority

Conversation

@suzannejin
Copy link

Solves #472

@github-actions
Copy link

github-actions bot commented Feb 17, 2026

nf-core pipelines lint overall result: Passed ✅ ⚠️

Posted for pipeline commit 4baf4a8

+| ✅ 384 tests passed       |+
#| ❔  10 tests were ignored |#
#| ❔   1 tests had warnings |#
!| ❗  20 tests had warnings |!
Details

❗ Test warnings:

  • readme - README contains the placeholder zenodo.XXXXXXX. This should be replaced with the zenodo doi (after the first release).
  • pipeline_todos - TODO string in nextflow.config: Update the field with the details of the contributors to your pipeline. New with Nextflow version 24.10.0
  • pipeline_todos - TODO string in base.config: Check the defaults for all processes
  • pipeline_todos - TODO string in main.nf: Optionally add in-text citation tools to this list.
  • pipeline_todos - TODO string in main.nf: Optionally add bibliographic entries to this list.
  • pipeline_todos - TODO string in main.nf: Only uncomment below if logic in toolCitationText/toolBibliographyText has been filled!
  • schema_lint - Parameter input is not defined in the correct subschema (input_output_options)
  • schema_description - No description provided in schema for parameter: deseq2_seed
  • schema_description - No description provided in schema for parameter: dream_p_value
  • schema_description - No description provided in schema for parameter: dream_lfc
  • schema_description - No description provided in schema for parameter: dream_confint
  • schema_description - No description provided in schema for parameter: dream_proportion
  • schema_description - No description provided in schema for parameter: dream_stdev_coef_lim
  • schema_description - No description provided in schema for parameter: dream_trend
  • schema_description - No description provided in schema for parameter: dream_robust
  • schema_description - No description provided in schema for parameter: dream_winsor_tail_p
  • schema_description - No description provided in schema for parameter: dream_ddf
  • schema_description - No description provided in schema for parameter: dream_reml
  • schema_description - No description provided in schema for parameter: dream_apply_voom
  • schema_description - No description provided in schema for parameter: dream_adjust_method

❔ Tests ignored:

  • files_exist - File is ignored: assets/multiqc_config.yml
  • nextflow_config - Config default ignored: params.report_file
  • nextflow_config - Config default ignored: params.logo_file
  • nextflow_config - Config default ignored: params.css_file
  • nextflow_config - Config default ignored: params.citations_file
  • files_unchanged - File ignored due to lint config: .github/CONTRIBUTING.md
  • files_unchanged - File ignored due to lint config: assets/nf-core-differentialabundance_logo_light.png
  • files_unchanged - File ignored due to lint config: docs/images/nf-core-differentialabundance_logo_light.png
  • files_unchanged - File ignored due to lint config: docs/images/nf-core-differentialabundance_logo_dark.png
  • multiqc_config - multiqc_config

❔ Tests fixed:

✅ Tests passed:

Run details

  • nf-core/tools version 3.5.1
  • Run at 2026-02-27 15:25:46

@suzannejin suzannejin changed the title first commit reverting paramsheet to profiles reverting paramsheet to profiles Feb 18, 2026
@suzannejin suzannejin marked this pull request as ready for review February 24, 2026 15:47
Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR implements the dual-mode configuration approach from #472 by making profiles the default (single-run) mechanism and only using paramsheets for explicit multi-run benchmarking. It updates pipeline configuration resolution, adds analysis profiles, and refactors tests/docs accordingly.

Changes:

  • Switch paramset resolution to use paramsheet only when --paramsheet is provided, otherwise run in profile (single-run) mode.
  • Add/restore analysis profiles (rnaseq/affy/maxquant/soft and variants) via new conf/**.config files and nextflow.config profile entries.
  • Update docs and tests to reflect the two-mode architecture; remove the shipped default paramsheet.

Reviewed changes

Copilot reviewed 39 out of 42 changed files in this pull request and generated 4 comments.

Show a summary per file
File Description
tests/test_soft.nf.test.snap Snapshot updated for soft profile output paths and meta.
tests/test_soft.nf.test Test now loads conf/soft/soft.config and sets explicit inputs instead of paramsheet.
tests/test_rnaseq_limma.nf.test Tests now use rnaseq limma profile configs and explicit inputs (no paramsheet).
tests/test_rnaseq_dream.nf.test.snap Snapshot updated for rnaseq dream output path naming and meta.
tests/test_rnaseq_dream.nf.test Tests now use rnaseq dream profile configs and explicit inputs/overrides.
tests/test_rnaseq_deseq2.nf.test Tests now use rnaseq DESeq2 profile configs and explicit inputs/overrides.
tests/test_nogtf.nf.test.snap Snapshot updated for rnaseq “no gtf” output paths and meta.
tests/test_nogtf.nf.test Test now loads conf/rnaseq/rnaseq.config and sets explicit inputs.
tests/test_maxquant.nf.test.snap Snapshot updated for maxquant output paths and meta.
tests/test_maxquant.nf.test Test now loads conf/maxquant/maxquant.config and sets explicit inputs.
tests/test_many.nf.test.snap Snapshot updated for multi-run test paramset naming and meta.
tests/test_many.nf.test Multi-run test still uses paramsheet mode but with renamed test paramsets.
tests/test_affy.nf.test Tests now load affy profile configs and set explicit inputs/overrides.
tests/default.nf.test “with formula” test now uses conf/test.config and explicit overrides.
subworkflows/local/utils_nfcore_differentialabundance_pipeline/main.nf Paramset resolution now switches modes based on params.paramsheet; default config uses profile paramset_name.
nextflow_schema.json Schema text updated to explain two-mode behavior; paramsheet default removed.
nextflow.config params.paramsheet default set to null; adds analysis profiles under profiles {}.
docs/usage.md Documents single-run vs multi-run modes and precedence; updates examples/profiles listing.
conf/testdata.yaml Removed legacy testdata paramsets file.
conf/test_paramsheet.yaml Refactored to be a self-contained test paramsheet (data/config/test blocks).
conf/test.config Now includes rnaseq DESeq2+GSEA config instead of setting paramset_name directly.
conf/soft/soft.config New soft analysis profile config.
conf/rnaseq/rnaseq_limma_gsea.config New rnaseq limma+GSEA profile config.
conf/rnaseq/rnaseq_limma_gprofiler2.config New rnaseq limma+gprofiler2 profile config.
conf/rnaseq/rnaseq_limma_decoupler.config New rnaseq limma+decoupler profile config.
conf/rnaseq/rnaseq_limma.config New rnaseq limma base profile config.
conf/rnaseq/rnaseq_dream_decoupler.config New rnaseq dream+decoupler profile config.
conf/rnaseq/rnaseq_dream.config New rnaseq dream base profile config.
conf/rnaseq/rnaseq_deseq2_gsea.config New rnaseq DESeq2+GSEA profile config.
conf/rnaseq/rnaseq_deseq2_gprofiler2.config New rnaseq DESeq2+gprofiler2 profile config.
conf/rnaseq/rnaseq.config New rnaseq base (DESeq2 default) profile config.
conf/paramsheet.yaml Removed shipped default paramsheet.
conf/maxquant/maxquant.config New maxquant analysis profile config.
conf/affy/affy_limma_gsea.config New affy limma+GSEA profile config.
conf/affy/affy_limma_gprofiler2.config New affy limma+gprofiler2 profile config.
conf/affy/affy.config New affy base profile config.
README.md Updates usage guidance to analysis profiles + optional paramsheet mode.
CHANGELOG.md Adds entry describing the profile-first reversion.
Comments suppressed due to low confidence (1)

conf/test_paramsheet.yaml:184

  • affy_testdata points to a human GMT (h.all...Hs.symbols.gmt), but the derived test config sets gprofiler2_organism: "mmusculus", which overrides the GMT and queries mouse gene sets. Consider changing this to hsapiens (or omit it) so the test configuration matches the dataset species.
- paramset_name: test_affy_limma_gprofiler2
  include: test_paramsheet/affy_limma_gprofiler2,test_paramsheet/affy_testdata
  observations_id_col: name
  observations_name_col: name
  exploratory_main_variable: contrasts
  differential_max_pval: 0.05
  differential_max_qval: 0.05
  differential_min_fold_change: 1.5
  gprofiler2_organism: "mmusculus"


💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

differential_min_fold_change = 1.5

// gprofiler2
gprofiler2_organism = 'mmusculus'
Copy link

Copilot AI Feb 24, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This test uses a human Hallmark GMT (h.all...Hs.symbols.gmt) but sets gprofiler2_organism = 'mmusculus', which will override the GMT and query mouse gene sets instead. Set this to hsapiens (or leave it unset to keep using the provided human GMT) to avoid silently testing the wrong species.

Suggested change
gprofiler2_organism = 'mmusculus'
gprofiler2_organism = 'hsapiens'

Copilot uses AI. Check for mistakes.
Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@copilot create a issue to check this out (indeed the GSE50790 study uses human samples)

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

created this issue #651 for this

@pinin4fjords
Copy link
Member

@suzannejin are you happy with this? Have you reviewed the AI's work yet?

Copy link
Member

@grst grst left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The re-added profiles and docs-related changes LGTM.

I think currently the custom logic in getParamsetConfigurations() gets triggered no matter if a paramset is defined or not. I'm wondering if we could get a clearer separation of the "standard" and "custom" logic, by not even invoking that code if no paramsheet is set.

// Use paramsheet if paramset_name is provided, otherwise use default params
def paramsets = (params.paramset_name) ? getParamsheetConfigurations() : getDefaultConfigurations()
// Use paramsheet if --paramsheet is explicitly provided, otherwise use default params (profile mode)
def paramsets = (params.paramsheet) ? getParamsheetConfigurations() : getDefaultConfigurations()
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What's the default configuration? Why do we even have to invoke getParamsetConfigurations() when no paramsheet is specified?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

default is just the params scope put inside the ch_paramsheet channel (this channel is needed to parse any other channel, see here for example).

@suzannejin
Copy link
Author

@suzannejin are you happy with this? Have you reviewed the AI's work yet?

Hi @pinin4fjords , it is ready for me.
Copilot's suggestion about correcting Gprofiler's database would go for a next issue imo.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants