Skip to content

feat: v1.0.0 — robustness, DDA support, new params, InfinDIA, docs#32

Merged
ypriverol merged 24 commits intodevfrom
dda
Apr 7, 2026
Merged

feat: v1.0.0 — robustness, DDA support, new params, InfinDIA, docs#32
ypriverol merged 24 commits intodevfrom
dda

Conversation

@ypriverol
Copy link
Copy Markdown
Member

Summary

Comprehensive pre-release work for quantmsdiann covering robustness fixes, DDA support, new DIA-NN parameters, and documentation.

Robustness (Week 1)

  • Add set -o pipefail to 4 modules with tee pipes masking failures
  • Add error_retry label to all 5 DIA-NN analysis modules
  • Guard ch_searchdb and ch_experiment_meta with ifEmpty to prevent silent hangs

DDA Support (Week 2)

  • New diann_dda param — passes --dda to all DIA-NN steps
  • Version guard: requires DIA-NN >= 2.3.2 (-profile diann_v2_3_2)
  • Accepts DDA acquisition method in SDRF when diann_dda=true
  • DIA-NN 2.3.2 version config added
  • Test config: test_dda using BSA dataset

New Features (Week 3)

  • --diann_light_models: 10x faster library generation
  • --diann_export_quant: fragment-level parquet export
  • --diann_site_ms1_quant: MS1 apex PTM quantification
  • InfinDIA groundwork (enable_infin_dia, diann_pre_select)
  • test_dia_skip_preanalysis test config for previously untested code path

Documentation (Week 4)

  • docs/parameters.md: comprehensive reference for all ~70 parameters
  • docs/usage.md: DDA mode, preprocessing, extra_args scope, version selection, verbose output
  • docs/output.md: Parquet vs TSV, MSstats format
  • pmultiqc citation added
  • README updated with DIA-NN version table

Issues

External PRs Required

  • bigbio/quantms-containers — Build and push ghcr.io/bigbio/diann:2.3.2
  • bigbio/quantms-test-datasets — Add acquisition method column to BSA SDRF

Test plan

  • Existing CI tests pass (test_dia, test_dia_dotd)
  • New test_dda passes with BSA dataset on DIA-NN 2.3.2
  • test_dia_skip_preanalysis passes
  • nf-core lint: 0 failures
  • pre-commit: all passing

ypriverol and others added 11 commits April 3, 2026 11:26
13-task plan covering robustness fixes, DDA support, new DIA-NN params,
InfinDIA groundwork, comprehensive documentation, and issue cleanup.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Without pipefail, if the command before tee fails, tee returns 0 and
the Nextflow task appears to succeed. This masked failures in
generate_cfg, diann_msstats, samplesheet_check, and sdrf_parsing.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
These are the longest-running tasks and most susceptible to transient
failures (OOM, I/O timeouts). The error_retry label enables automatic
retry on signal exits (130-145, 104, 175).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Guard ch_searchdb and ch_experiment_meta with ifEmpty to fail fast
with clear error messages instead of hanging indefinitely.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Adds conf/diann_versions/v2_3_2.config with ghcr.io/bigbio/diann:2.3.2
container. Use -profile diann_v2_3_2 to opt in. Default stays 1.8.1.
Enables DDA support and InfinDIA features.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- New param diann_dda (boolean, default: false)
- Version guard: requires DIA-NN >= 2.3.2
- Passes --dda to all 5 DIA-NN modules when enabled
- Accepts DDA acquisition method in SDRF when diann_dda=true
- Added --dda to blocked lists in all modules

Closes #5

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- test_dda: BSA dataset with diann_dda=true on DIA-NN 2.3.2
- test_dia_skip_preanalysis: tests previously untested skip path
Both added to extended_ci.yml stage 2a.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- diann_light_models: 10x faster in-silico library generation
- diann_export_quant: fragment-level parquet export
- diann_site_ms1_quant: MS1 apex intensities for PTM quantification
All require DIA-NN >= 2.0.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Experimental support for InfinDIA (DIA-NN 2.3.0+). Passes --infin-dia
to library generation when enabled. Version guard enforces >= 2.3.0.
No test config — InfinDIA requires large databases.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Complete reference for all ~70 pipeline parameters grouped by category
with types, defaults, descriptions, and version requirements.

Closes #1

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- DDA mode documentation with limitations
- Missing param sections (preprocessing, extra_args scope, verbose output)
- DIA-NN version selection guide
- Parquet vs TSV output explanation
- MSstats format section
- pmultiqc citation added
- README updated with version table and parameter reference link

Closes #3, #9, #15

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@qodo-code-review
Copy link
Copy Markdown

ⓘ You are approaching your monthly quota for Qodo. Upgrade your plan

Review Summary by Qodo

v1.0.0 release — robustness fixes, DDA support, new params, InfinDIA groundwork, comprehensive docs

✨ Enhancement 🐞 Bug fix 🧪 Tests 📝 Documentation

Grey Divider

Walkthroughs

Description
• Robustness fixes: pipefail guards, error_retry labels, empty input guards
• DDA support via --diann_dda flag (requires DIA-NN >= 2.3.2)
• New DIA-NN feature parameters: light-models, export-quant, site-ms1-quant
• InfinDIA groundwork with enable_infin_dia and diann_pre_select params
• DIA-NN 2.3.2 version config and two new test configs (test_dda, test_dia_skip_preanalysis)
• Comprehensive documentation: parameters.md, expanded usage.md, output.md updates, README version
  table
Diagram
flowchart LR
  A["Robustness Fixes<br/>pipefail, error_retry,<br/>empty guards"] --> B["DDA Support<br/>--diann_dda flag<br/>v2.3.2 required"]
  A --> C["New Features<br/>light-models<br/>export-quant<br/>site-ms1-quant"]
  A --> D["InfinDIA<br/>Groundwork<br/>enable_infin_dia"]
  B --> E["Test Configs<br/>test_dda<br/>test_dia_skip_preanalysis"]
  C --> F["Documentation<br/>parameters.md<br/>usage.md<br/>output.md"]
  D --> F
  E --> G["v1.0.0 Release"]
  F --> G
Loading

Grey Divider

File Changes

1. .github/workflows/extended_ci.yml 🧪 Tests +2/-1

Add test_dda and test_dia_skip_preanalysis to CI matrix

.github/workflows/extended_ci.yml


2. CITATIONS.md 📝 Documentation +4/-0

Add pmultiqc citation entry

CITATIONS.md


3. README.md 📝 Documentation +11/-0

Add DIA-NN version support table and docs link

README.md


View more (21)
4. conf/diann_versions/v2_3_2.config ⚙️ Configuration changes +14/-0

New DIA-NN 2.3.2 version config with container override

conf/diann_versions/v2_3_2.config


5. conf/tests/test_dda.config 🧪 Tests +52/-0

New test config for DDA analysis with BSA dataset

conf/tests/test_dda.config


6. conf/tests/test_dia_skip_preanalysis.config 🧪 Tests +48/-0

New test config for skip_preliminary_analysis code path

conf/tests/test_dia_skip_preanalysis.config


7. docs/output.md 📝 Documentation +8/-0

Add Parquet vs TSV and MSstats output sections

docs/output.md


8. docs/parameters.md 📝 Documentation +162/-0

Comprehensive parameter reference for all ~70 pipeline params

docs/parameters.md


9. docs/usage.md 📝 Documentation +60/-0

Add DDA mode, preprocessing, version selection, verbose output docs

docs/usage.md


10. docs/v1-release-roadmap.md 📝 Documentation +36/-20

Update roadmap formatting and issue status table

docs/v1-release-roadmap.md


11. modules/local/diann/assemble_empirical_library/main.nf ✨ Enhancement +4/-1

Add error_retry label and --dda flag support

modules/local/diann/assemble_empirical_library/main.nf


12. modules/local/diann/diann_msstats/main.nf 🐞 Bug fix +1/-0

Add pipefail to prevent tee pipe failure masking

modules/local/diann/diann_msstats/main.nf


13. modules/local/diann/final_quantification/main.nf ✨ Enhancement +8/-1

Add error_retry label and new feature flags (dda, export-quant, site-ms1-quant)

modules/local/diann/final_quantification/main.nf


14. modules/local/diann/generate_cfg/main.nf 🐞 Bug fix +1/-0

Add pipefail to prevent tee pipe failure masking

modules/local/diann/generate_cfg/main.nf


15. modules/local/diann/individual_analysis/main.nf ✨ Enhancement +4/-1

Add error_retry label and --dda flag support

modules/local/diann/individual_analysis/main.nf


16. modules/local/diann/insilico_library_generation/main.nf ✨ Enhancement +11/-1

Add error_retry label and feature flags (dda, light-models, infin-dia, pre-select)

modules/local/diann/insilico_library_generation/main.nf


17. modules/local/diann/preliminary_analysis/main.nf ✨ Enhancement +4/-1

Add error_retry label and --dda flag support

modules/local/diann/preliminary_analysis/main.nf


18. modules/local/samplesheet_check/main.nf 🐞 Bug fix +1/-0

Add pipefail to prevent tee pipe failure masking

modules/local/samplesheet_check/main.nf


19. modules/local/sdrf_parsing/main.nf 🐞 Bug fix +1/-0

Add pipefail to prevent tee pipe failure masking

modules/local/sdrf_parsing/main.nf


20. nextflow.config ⚙️ Configuration changes +11/-0

Add DDA, feature, and InfinDIA params; new test and version profiles

nextflow.config


21. nextflow_schema.json ⚙️ Configuration changes +35/-0

Add schema definitions for new DDA, feature, and InfinDIA parameters

nextflow_schema.json


22. subworkflows/local/create_input_channel/main.nf ✨ Enhancement +7/-9

Accept DDA acquisition method when diann_dda flag enabled

subworkflows/local/create_input_channel/main.nf


23. workflows/dia.nf ✨ Enhancement +17/-2

Add version guards for DDA and InfinDIA; add empty input guards

workflows/dia.nf


24. docs/plans/2026-04-03-v1-release-implementation.md Additional files +805/-0

...

docs/plans/2026-04-03-v1-release-implementation.md


Grey Divider

Qodo Logo

@qodo-code-review
Copy link
Copy Markdown

qodo-code-review bot commented Apr 3, 2026

Code Review by Qodo

🐞 Bugs (2) 📘 Rule violations (0) 📎 Requirement gaps (2) 🎨 UX Issues (0)

Grey Divider


Action required

1. diann_pre_select default is null 📎 Requirement gap ≡ Correctness
Description
The PR introduces diann_pre_select but leaves its default as null and does not expose the
required immunopeptidomics/InfinDIA control parameters (e.g. diann_immunopeptidomics,
diann_pre_select_force, diann_ref_library). This violates the requirement to expose and wire the
specified immunopeptidomics/InfinDIA parameters with correct defaults/behavior.
Code

nextflow.config[R63-65]

+    // DIA-NN: InfinDIA (experimental, v2.3.0+)
+    enable_infin_dia        = false  // Enable InfinDIA for ultra-large search spaces
+    diann_pre_select        = null   // --pre-select N precursor limit for InfinDIA
Evidence
Compliance ID 2 requires diann_pre_select to exist with default 100000 and also requires
additional parameters (diann_immunopeptidomics, diann_pre_select_force, diann_ref_library).
The PR-added config/schema/docs show diann_pre_select is present but has no default (or is set to
null) and the required companion parameters are not exposed here.

Expose and wire immunopeptidomics/InfinDIA parameters
nextflow.config[53-66]
nextflow_schema.json[496-506]
docs/parameters.md[135-141]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
Compliance requires immunopeptidomics/InfinDIA parameters to be exposed and wired with specific defaults/behavior. The PR adds `diann_pre_select` but leaves its default as `null` and does not expose the required companion parameters (`diann_immunopeptidomics`, `diann_pre_select_force`, `diann_ref_library`).
## Issue Context
Per the checklist, these parameters must exist with the specified defaults and be propagated to the correct DIA-NN flags when immunopeptidomics/InfinDIA mode is active.
## Fix Focus Areas
- nextflow.config[53-66]
- nextflow_schema.json[472-506]
- docs/parameters.md[135-143]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


2. Missing .site_report.parquet output 📎 Requirement gap ☼ Reliability
Description
The PR adds support for --site-ms1-quant in FINAL_QUANTIFICATION but the process outputs do not
capture the optional .site_report.parquet artifact. This violates the requirement to capture the
site-level report when generated.
Code

modules/local/diann/final_quantification/main.nf[R72-74]

+    diann_dda_flag = params.diann_dda ? "--dda" : ""
+    diann_export_quant = params.diann_export_quant ? "--export-quant" : ""
+    diann_site_ms1_quant = params.diann_site_ms1_quant ? "--site-ms1-quant" : ""
Evidence
Compliance ID 10 requires .site_report.parquet to be captured as an optional output when
--site-ms1-quant is enabled. The PR wires the flag into the DIA-NN invocation, but the module
output declarations do not include any .site_report.parquet path pattern.

Support site-level quantification flag and optional .site_report.parquet output capture
modules/local/diann/final_quantification/main.nf[72-106]
modules/local/diann/final_quantification/main.nf[23-33]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
`FINAL_QUANTIFICATION` now supports `--site-ms1-quant`, but the process does not emit/capture the additional `.site_report.parquet` artifact as an optional output.
## Issue Context
When DIA-NN produces site-level quantification, it can generate a site report parquet file that downstream steps/users may need. The compliance checklist requires capturing it as an optional output.
## Fix Focus Areas
- modules/local/diann/final_quantification/main.nf[23-33]
- modules/local/diann/final_quantification/main.nf[72-106]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


3. No guards for v2 flags🐞 Bug ☼ Reliability
Description
--diann_light_models, --diann_export_quant, and --diann_site_ms1_quant are enabled purely by
params, but there is no workflow guard to prevent them being used with the default DIA-NN 1.8.1
container/version, which will make DIA-NN fail on unknown flags.
Code

modules/local/diann/final_quantification/main.nf[R72-74]

+    diann_dda_flag = params.diann_dda ? "--dda" : ""
+    diann_export_quant = params.diann_export_quant ? "--export-quant" : ""
+    diann_site_ms1_quant = params.diann_site_ms1_quant ? "--site-ms1-quant" : ""
Evidence
The default pipeline version is set to DIA-NN 1.8.1, and the DIA-NN processes default to a 1.8.1
container. The modules append the new v2.0+ flags when the params are true, without any version
gating, so a user can trivially configure an invalid combination that fails at runtime.

nextflow.config[53-61]
modules/local/diann/insilico_library_generation/main.nf[7-10]
modules/local/diann/insilico_library_generation/main.nf[49-79]
modules/local/diann/final_quantification/main.nf[7-10]
modules/local/diann/final_quantification/main.nf[71-108]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
The pipeline exposes DIA-NN 2.0+ feature params (`diann_light_models`, `diann_export_quant`, `diann_site_ms1_quant`) but does not prevent enabling them with the default DIA-NN 1.8.1 runtime. When enabled, the corresponding modules pass `--light-models`, `--export-quant`, and `--site-ms1-quant` to DIA-NN, which will fail on older versions.
### Issue Context
`nextflow.config` defaults `diann_version` to `1.8.1`, and DIA-NN processes default to a `diann:v1.8.1_cv1` container. Users can set these params without selecting a `diann_v2_*` profile.
### Fix Focus Areas
- workflows/dia.nf[39-51]
- modules/local/diann/insilico_library_generation/main.nf[49-79]
- modules/local/diann/final_quantification/main.nf[71-108]
### Implementation notes
- Add a workflow-level guard similar to the DDA/InfinDIA guards:
- if `params.diann_light_models` and DIA-NN < 2.0 -> `error(...)`
- if `params.diann_export_quant` and DIA-NN < 2.0 -> `error(...)`
- if `params.diann_site_ms1_quant` and DIA-NN < 2.0 -> `error(...)`
- Reuse the same semver comparison helper as in the other guard(s) (avoid string `<`).

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools



Remediation recommended

4. Broken version comparisons 🐞 Bug ≡ Correctness
Description
workflows/dia.nf compares params.diann_version as a plain string (e.g. < '2.3.2'), which is
lexicographic and can mis-evaluate versions like 2.10.0 or 2.3.10, incorrectly failing supported
runs or allowing unsupported ones.
Code

workflows/dia.nf[R39-47]

+    // Version guard for DDA mode
+    if (params.diann_dda && params.diann_version < '2.3.2') {
+        error("DDA mode (--diann_dda) requires DIA-NN >= 2.3.2. Current version: ${params.diann_version}. Use -profile diann_v2_3_2")
+    }
+
+    // Version guard for InfinDIA
+    if (params.enable_infin_dia && params.diann_version < '2.3.0') {
+        error("InfinDIA requires DIA-NN >= 2.3.0. Current version: ${params.diann_version}. Use -profile diann_v2_3_2")
+    }
Evidence
Groovy string comparison is lexicographic; the workflow uses it for DDA/InfinDIA guards while
diann_version is configured as a quoted string, so future versions with multi-digit components can
be ordered incorrectly.

workflows/dia.nf[39-47]
nextflow.config[53-65]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
`params.diann_version` is compared as a string in `workflows/dia.nf` (e.g. `params.diann_version < '2.3.2'`). This is a lexicographic comparison and will mis-order versions with multi-digit components (e.g. `2.10.0`, `2.3.10`).
### Issue Context
These checks gate feature flags (`--diann_dda`, `enable_infin_dia`) and must be semver-correct to avoid false errors or missing enforcement.
### Fix Focus Areas
- workflows/dia.nf[39-47]
### Implementation notes
- Introduce a small helper that compares versions numerically (e.g. tokenize on `.` and compare integer tuples), or use a Groovy version comparator if available in the runtime.
- Use the helper for both DDA and InfinDIA guards (and any future guards).

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools



Advisory comments

5. pre-select value misdetected 🐞 Bug ⚙ Maintainability
Description
INSILICO_LIBRARY_GENERATION builds pre_select_flag using Groovy truthiness, so
--diann_pre_select 0 is silently treated as unset, and the schema allows any integer without a
minimum bound.
Code

modules/local/diann/insilico_library_generation/main.nf[R50-53]

+    diann_dda_flag = params.diann_dda ? "--dda" : ""
+    diann_light_models = params.diann_light_models ? "--light-models" : ""
+    infin_dia_flag = params.enable_infin_dia ? "--infin-dia" : ""
+    pre_select_flag = params.diann_pre_select ? "--pre-select $params.diann_pre_select" : ""
Evidence
The module uses params.diann_pre_select ? ... : '', where 0 evaluates to false, and the schema
declares diann_pre_select as an integer without constraints, making accidental/invalid values
easier to pass silently.

modules/local/diann/insilico_library_generation/main.nf[50-53]
nextflow_schema.json[502-506]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
`pre_select_flag` is set via Groovy truthiness (`params.diann_pre_select ? ... : ''`), which treats `0` as falsy and can silently drop the flag. Additionally, the schema allows any integer for `diann_pre_select` with no minimum.
### Issue Context
This is user-facing parameter validation: it’s safer to (a) check explicitly for null and (b) validate expected bounds.
### Fix Focus Areas
- modules/local/diann/insilico_library_generation/main.nf[50-53]
- nextflow_schema.json[502-506]
### Implementation notes
- Change to an explicit check and enforce bounds, e.g. only emit the flag when `params.diann_pre_select != null && params.diann_pre_select > 0`.
- In `nextflow_schema.json`, add a constraint like `"minimum": 1` for `diann_pre_select` (and consider a brief validation message in docs/help_text).

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


Grey Divider

ⓘ The new review experience is currently in Beta. Learn more

Grey Divider

Qodo Logo

@coderabbitai
Copy link
Copy Markdown

coderabbitai bot commented Apr 3, 2026

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 158048dc-a4f5-46ff-a72d-268275a4e82d

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch dda

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Comment on lines +63 to +65
// DIA-NN: InfinDIA (experimental, v2.3.0+)
enable_infin_dia = false // Enable InfinDIA for ultra-large search spaces
diann_pre_select = null // --pre-select N precursor limit for InfinDIA
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Action required

1. diann_pre_select default is null 📎 Requirement gap ≡ Correctness

The PR introduces diann_pre_select but leaves its default as null and does not expose the
required immunopeptidomics/InfinDIA control parameters (e.g. diann_immunopeptidomics,
diann_pre_select_force, diann_ref_library). This violates the requirement to expose and wire the
specified immunopeptidomics/InfinDIA parameters with correct defaults/behavior.
Agent Prompt
## Issue description
Compliance requires immunopeptidomics/InfinDIA parameters to be exposed and wired with specific defaults/behavior. The PR adds `diann_pre_select` but leaves its default as `null` and does not expose the required companion parameters (`diann_immunopeptidomics`, `diann_pre_select_force`, `diann_ref_library`).

## Issue Context
Per the checklist, these parameters must exist with the specified defaults and be propagated to the correct DIA-NN flags when immunopeptidomics/InfinDIA mode is active.

## Fix Focus Areas
- nextflow.config[53-66]
- nextflow_schema.json[472-506]
- docs/parameters.md[135-143]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools

ypriverol and others added 2 commits April 3, 2026 18:36
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Add version guard for DIA-NN 2.0+ params (--light-models,
  --export-quant, --site-ms1-quant) to prevent crashes with 1.8.1
- Add *.site_report.parquet as optional output in FINAL_QUANTIFICATION
  for site-level PTM quantification

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Copy link
Copy Markdown
Contributor

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 prepares the workflows/dia.nf-based pipeline for a v1.0.0 release by improving failure robustness, adding DIA-NN v2.3.2-based DDA support and new DIA-NN feature parameters, and expanding user documentation/test coverage.

Changes:

  • Add DDA mode support (--diann_dda) with DIA-NN version/profile wiring and pass-through of --dda to DIA-NN steps.
  • Improve robustness via error_retry labeling, pipefail in relevant scripts, and .ifEmpty { error(...) } guards to avoid silent hangs.
  • Add/expand docs and CI test profiles (including new DDA and skip-preanalysis test configs) and add a DIA-NN 2.3.2 version profile.

Reviewed changes

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

Show a summary per file
File Description
workflows/dia.nf Adds version guards and empty-channel guards for DB/meta channels.
subworkflows/local/create_input_channel/main.nf Extends acquisition-method validation to allow DDA when --diann_dda is enabled.
README.md Adds supported DIA-NN versions table and link to parameter docs.
nextflow.config Adds new params, new test profiles, and DIA-NN 2.3.2 profile include.
nextflow_schema.json Documents new params (diann_dda, InfinDIA, new DIA-NN flags) in the schema.
modules/local/sdrf_parsing/main.nf Adds set -o pipefail in the process script.
modules/local/samplesheet_check/main.nf Adds set -o pipefail in the process script.
modules/local/diann/preliminary_analysis/main.nf Adds error_retry label, blocks/strips --dda from extra args, and passes --dda when enabled.
modules/local/diann/insilico_library_generation/main.nf Adds error_retry, supports --dda, --light-models, and InfinDIA flags.
modules/local/diann/individual_analysis/main.nf Adds error_retry, blocks/strips --dda from extra args, and passes --dda when enabled.
modules/local/diann/generate_cfg/main.nf Adds set -o pipefail in the process script.
modules/local/diann/final_quantification/main.nf Adds error_retry, supports --dda, --export-quant, and --site-ms1-quant.
modules/local/diann/diann_msstats/main.nf Adds set -o pipefail in the process script.
modules/local/diann/assemble_empirical_library/main.nf Adds error_retry, blocks/strips --dda from extra args, and passes --dda when enabled.
docs/v1-release-roadmap.md Removes the old roadmap/design-spec document.
docs/usage.md Adds DDA mode usage/limitations, preprocessing options, extra args guidance, version selection, and verbose outputs info.
docs/plans/2026-04-03-v1-release-implementation.md Adds a detailed internal implementation plan document.
docs/parameters.md Adds a comprehensive parameter reference.
docs/output.md Documents parquet vs TSV output and MSstats conversion output.
conf/tests/test_dia_skip_preanalysis.config Adds a new CI test profile for the skip-preanalysis code path.
conf/tests/test_dda.config Adds a new CI test profile for DDA mode (DIA-NN 2.3.2 container).
conf/diann_versions/v2_3_2.config Adds DIA-NN 2.3.2 version/profile configuration.
CITATIONS.md Adds a pmultiqc citation entry.
.github/workflows/extended_ci.yml Adds test_dda and test_dia_skip_preanalysis to extended CI matrix.

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

Comment on lines +80 to +82
meta.acquisition_method = "dda"
} else if (acqMethod.isEmpty()) {
meta.acquisition_method = params.diann_dda ? "dda" : "dia"
Copy link

Copilot AI Apr 3, 2026

Choose a reason for hiding this comment

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

Setting meta.acquisition_method = "dda" will cause DDA files to be dropped by the downstream branching in workflows/quantmsdiann.nf (it currently only routes items where acquisition_method contains "dia" into the DIA workflow). As a result, --diann_dda true can lead to an empty input channel for the main workflow. Either keep acquisition_method as "dia" for routing purposes (and rely on params.diann_dda for mode), or update the branching logic to include DDA when --diann_dda is enabled.

Suggested change
meta.acquisition_method = "dda"
} else if (acqMethod.isEmpty()) {
meta.acquisition_method = params.diann_dda ? "dda" : "dia"
// Preserve DIA-NN routing compatibility; DDA mode is controlled by params.diann_dda downstream.
meta.acquisition_method = "dia"
} else if (acqMethod.isEmpty()) {
// Default to the routing value expected by downstream DIA-NN branching.
meta.acquisition_method = "dia"

Copilot uses AI. Check for mistakes.
Comment on lines +22 to +37
params {
config_profile_name = 'Test profile for DDA analysis'
config_profile_description = 'DDA test using BSA dataset with DIA-NN 2.3.2.'

outdir = './results_dda'

// Input data - BSA DDA dataset
input = 'https://raw.githubusercontent.com/bigbio/quantms-test-datasets/quantms/testdata/lfq_ci/BSA/BSA_design.sdrf.tsv'
database = 'https://raw.githubusercontent.com/bigbio/quantms-test-datasets/quantms/testdata/lfq_ci/BSA/18Protein_SoCe_Tr_detergents_trace.fasta'

// DDA mode
diann_dda = true

// Search parameters matching BSA dataset
min_peptide_length = 7
max_peptide_length = 30
Copy link

Copilot AI Apr 3, 2026

Choose a reason for hiding this comment

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

test_dda.config enables diann_dda = true and pins the DIA-NN container to 2.3.2, but it does not set params.diann_version. With the new version guard in workflows/dia.nf, this profile will fail immediately because the default diann_version remains 1.8.1. Set params.diann_version = '2.3.2' here (or ensure CI runs with -profile diann_v2_3_2 in addition to test_dda).

Copilot uses AI. Check for mistakes.
@ypriverol
Copy link
Copy Markdown
Member Author

Code review

Found 2 issues:

  1. test_dda.config missing diann_version -- DDA test will always fail the version guard. The config sets diann_dda = true but does not set diann_version = '2.3.2'. The default is '1.8.1' (nextflow.config line 54), so the version guard if (params.diann_dda && params.diann_version < '2.3.2') in dia.nf will always error. The container override to ghcr.io/bigbio/diann:2.3.2 only changes the Docker image, not params.diann_version. Fix: add diann_version = '2.3.2' to the params block in test_dda.config.

params {
config_profile_name = 'Test profile for DDA analysis'
config_profile_description = 'DDA test using BSA dataset with DIA-NN 2.3.2.'
outdir = './results_dda'
// Input data - BSA DDA dataset
input = 'https://raw.githubusercontent.com/bigbio/quantms-test-datasets/quantms/testdata/lfq_ci/BSA/BSA_design.sdrf.tsv'
database = 'https://raw.githubusercontent.com/bigbio/quantms-test-datasets/quantms/testdata/lfq_ci/BSA/18Protein_SoCe_Tr_detergents_trace.fasta'
// DDA mode
diann_dda = true
// Search parameters matching BSA dataset
min_peptide_length = 7
max_peptide_length = 30
max_precursor_charge = 3
allowed_missed_cleavages = 1
diann_normalize = false
publish_dir_mode = 'symlink'
max_mods = 2
}

  1. meta.acquisition_method = "dda" causes DDA files to be silently dropped. When diann_dda=true and the SDRF has a DDA acquisition method, create_input_channel sets meta.acquisition_method = "dda". However, quantmsdiann.nf line 67 branches on item[0].acquisition_method.toLowerCase().contains("dia") -- since "dda".contains("dia") is false, all DDA files are filtered out and the pipeline silently completes with no output. Fix: either keep meta.acquisition_method = "dia" for routing (relying on params.diann_dda for the actual flag), or update the branch condition to also match "dda".

FILE_PREPARATION.out.results
.branch { item ->
dia: item[0].acquisition_method.toLowerCase().contains("dia")
}
.set { ch_fileprep_result }
//

Generated with Claude Code

- If this code review was useful, please react with 👍. Otherwise, react with 👎.

1. test_dda.config: Add diann_version = '2.3.2' so the version guard
   doesn't reject DDA mode (default is 1.8.1, guard requires >= 2.3.2)

2. quantmsdiann.nf: Update branch condition to also match "dda"
   acquisition method. Previously "dda".contains("dia") was false,
   causing all DDA files to be silently dropped from processing.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
ypriverol and others added 2 commits April 4, 2026 07:32
These flags exist in DIA-NN 1.8.x but were removed in 2.3.x, causing
'unrecognised option' warnings. Only pass them for versions < 2.3.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Merge dev branch (version bump, tdf2mzml removal, lint fixes, DOI update)
- Update test_dda.config to use PXD022287 HeLa DDA dataset with subset FASTA
- Add test_dda profile to CI matrix in ci.yml

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@github-actions
Copy link
Copy Markdown

github-actions bot commented Apr 7, 2026

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

Posted for pipeline commit 9f4ee58

+| ✅ 106 tests passed       |+
#| ❔  19 tests were ignored |#
#| ❔   1 tests had warnings |#
!| ❗   4 tests had warnings |!
Details

❗ Test warnings:

  • files_exist - File not found: conf/igenomes.config
  • files_exist - File not found: conf/igenomes_ignored.config
  • files_exist - File not found: .github/workflows/awstest.yml
  • files_exist - File not found: .github/workflows/awsfulltest.yml

❔ Tests ignored:

❔ Tests fixed:

✅ Tests passed:

Run details

  • nf-core/tools version 3.5.2
  • Run at 2026-04-07 12:15:36

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
ypriverol and others added 4 commits April 7, 2026 08:52
The test_dda profile uses ghcr.io/bigbio/diann:2.3.2 which is a
private container requiring authentication. Add Docker login step
(matching merge_ci.yml) conditioned on test_dda profile.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Remove implementation plan from repo, add docs/plans/ to .gitignore
- Add lib/VersionUtils.groovy for semantic version comparison
  (prevents string comparison bugs like '2.10.0' < '2.3')
- Update all version guards in dia.nf and module scripts to use
  VersionUtils.versionLessThan/versionAtLeast

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
DDA analysis support is a major feature warranting a major version bump.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Rename output version→versions in sdrf_parsing/meta.yml
- Add ch_ prefix to input_file→ch_input_file in input_check/meta.yml
- Fix grammar in pmultiqc and diann_msstats meta.yml descriptions
- Fix glob pattern in decompress_dotd/meta.yml (double-dot expansion)
- Update CITATIONS.md to link published Nature Methods article
- Fix schema_input.json error messages (source name, whitespace)
- Standardize quantmsdiann keyword in utils meta.yml

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Copy link
Copy Markdown
Contributor

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

Copilot reviewed 30 out of 31 changed files in this pull request and generated 6 comments.


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

ypriverol and others added 2 commits April 7, 2026 13:10
DDA mode is now automatically detected from the SDRF
`comment[proteomics data acquisition method]` column when it contains
`data-dependent acquisition`. The `--diann_dda` flag is kept as a
fallback for SDRFs that lack this column.

- Modules now read acquisition method from meta instead of params
- INSILICO_LIBRARY_GENERATION receives is_dda as input from workflow
- Version guard triggers for both param and SDRF-detected DDA
- Updated docs, parameters, and schema to reflect auto-detection

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Revert meta.yml input_file naming to match workflow interface
- Gate --pre-select behind enable_infin_dia (InfinDIA-only flag)
- Tighten --direct-quant version check from 1.9 to 1.9.2
- Improve GHCR login: guard both token and username, skip test_dda
  gracefully on fork PRs where credentials are unavailable

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@ypriverol ypriverol merged commit a94c1de into dev Apr 7, 2026
25 of 32 checks passed
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.

2 participants