Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .nf-core.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,4 +15,4 @@ template:
skip_features:
- fastqc
- igenomes
version: 3.2.0dev
version: 3.2.0
16 changes: 14 additions & 2 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,23 +3,34 @@
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## 3.2.0dev - [release name] - [date]
## 3.2.0 - Solitude - 23/04/26

### `Added`

- Added support for single run quantification [#438](https://github.com/nf-core/mhcquant/pull/438)
- Added per-sample search parameter support via samplesheet with SearchPreset column and individual parameter overrides [#439](https://github.com/nf-core/mhcquant/pull/439)
- Added per-sample search parameter support via samplesheet with SearchPreset column [#439](https://github.com/nf-core/mhcquant/pull/439)
- Added PRIDE ID and SDRF sheet support [#445](https://github.com/nf-core/mhcquant/pull/445)
- Added ion mobility export and MultiQC distribution plot for timsTOF data [#441](https://github.com/nf-core/mhcquant/pull/441)

### `Fixed`

- Fixed `EPICORE` running only once instead of per sample when `--fasta` is used, by broadcasting `ch_fasta` to `EPICORE` via `.first()` [#446](https://github.com/nf-core/mhcquant/pull/446)
- Fixed `SUMMARIZE_RESULTS` crash with `--quantify` caused by OpenMS 3.5.0 TextExporter phantom column bug ([OpenMS/OpenMS#9120](https://github.com/OpenMS/OpenMS/issues/9120)) [#444](https://github.com/nf-core/mhcquant/pull/444)
- Fixed an issue where stripping the sequence in `SUMMARIZE_RESULTS` did not work for complex modifications [#436](https://github.com/nf-core/mhcquant/pull/436)
- Fixed `tdf2mzml` container entrypoint issue by pinning to `0.5_noentry` and invoking the CLI explicitly [#447](https://github.com/nf-core/mhcquant/pull/447)
- Fixed `OPENMS_FILECONVERTER` version extraction emitting a SOH byte due to a single-backslash sed backreference [#447](https://github.com/nf-core/mhcquant/pull/447)
- Fixed `OPENMS_IDMASSACCURACY` process argument to use `meta.precursor_error_units` so per-sample preset overrides apply [#447](https://github.com/nf-core/mhcquant/pull/447)

### `Changed`

- Migrate to topic channels [#431](https://github.com/nf-core/mhcquant/pull/431)
- Bumped `openms/fileconverter`, `openms/featurefinderidentification` and `openms/idconflictresolver` local modules to OpenMS 3.5.0 [#447](https://github.com/nf-core/mhcquant/pull/447)
- Rewrote `openms/idmassaccuracy` meta.yml to reflect the actual process I/O [#447](https://github.com/nf-core/mhcquant/pull/447)
- Tightened preset normalization so empty/whitespace `FixedMods` and `VariableMods` cells are treated as empty (preserves the existing `-fixed_modifications` CLI call) [#447](https://github.com/nf-core/mhcquant/pull/447)
- Migrated `conf/test_single_quant.config` from deprecated `max_cpus`/`max_memory`/`max_time` to `process.resourceLimits` [#447](https://github.com/nf-core/mhcquant/pull/447)
- Replaced local `openms/textexporter` module with the `nf-core/modules` equivalent; preserved the `_exported` output suffix via `ext.prefix` to keep SUMMARIZE_RESULTS input/output filenames distinct [#447](https://github.com/nf-core/mhcquant/pull/447)
- Replaced local `openms/fileconverter` module with the `nf-core/modules` equivalent; updated `PROCESS_FEATURE` to consume the renamed `converted` output channel [#449](https://github.com/nf-core/mhcquant/pull/449)
- Sealed search-preset values: when a samplesheet row sets `SearchPreset`, preset values are no longer overridable via `--<param>`, `-params-file`, or `-c` for that row; rows without a preset resolve from `params` as before. Removed the fragile `workflow.commandLine` regex from `resolveSearchParams` (renamed to `resolvePresetParams`). Documented the new precedence in `docs/usage.md`. [#449](https://github.com/nf-core/mhcquant/pull/449)

### `Dependencies`

Expand All @@ -29,6 +40,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
| `MultiQC` | 1.31.0 | 1.33.0 |
| `Nf-core` | 3.4.1 | 3.5.1 |
| `openms` | 3.4.1 | 3.5.0 |
| `tdf2mzml` | 0.3.0 | 0.5.0 |

## 3.1.0 - BlüBa - 07/01/26

Expand Down
2 changes: 1 addition & 1 deletion assets/multiqc_config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ custom_logo_url: https://github.com/nf-core/mhcquant
custom_logo_title: "nf-core/mhcquant"

report_comment: >
This report has been generated by the <a href="https://github.com/nf-core/mhcquant/tree/dev" target="_blank">nf-core/mhcquant</a> analysis pipeline. For information about how to interpret these results, please see the <a href="https://nf-co.re/mhcquant/dev/docs/output" target="_blank">documentation</a>.
This report has been generated by the <a href="https://github.com/nf-core/mhcquant/releases/tag/3.2.0" target="_blank">nf-core/mhcquant</a> analysis pipeline. For information about how to interpret these results, please see the <a href="https://nf-co.re/mhcquant/3.2.0/docs/output" target="_blank">documentation</a>.
report_section_order:
"nf-core-mhcquant-methods-description":
order: -1000
Expand Down
20 changes: 10 additions & 10 deletions assets/search_presets.tsv
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
PresetName PeptideMinLength PeptideMaxLength PrecursorMassRange PrecursorCharge PrecursorMassTolerance PrecursorErrorUnit FragmentMassTolerance FragmentBinOffset MS2PIPModel ActivationMethod Instrument NumberMods FixedMods VariableMods
lumos_class1 8 14 800:2500 2:3 5 ppm 0.01 0.0 Immuno-HCD HCD high_res 3 Oxidation (M)
lumos_class2 8 30 800:5000 2:5 5 ppm 0.01 0.0 Immuno-HCD HCD high_res 5 Oxidation (M)
qe_class1 8 14 800:2500 2:3 5 ppm 0.01 0.0 Immuno-HCD HCD high_res 3 Oxidation (M)
qe_class2 8 30 800:5000 2:5 5 ppm 0.01 0.0 Immuno-HCD HCD high_res 5 Oxidation (M)
timstof_class1 8 14 800:2500 1:4 20 ppm 0.01 0.0 timsTOF CID high_res 3 Oxidation (M)
timstof_class2 8 30 800:5000 1:5 20 ppm 0.01 0.0 timsTOF CID high_res 5 Oxidation (M)
astral_class1 8 14 800:2500 2:3 5 ppm 0.01 0.0 Immuno-HCD HCD high_res 3 Oxidation (M)
astral_class2 8 30 800:5000 2:5 5 ppm 0.01 0.0 Immuno-HCD HCD high_res 5 Oxidation (M)
xl_class1 8 14 800:2500 2:3 5 ppm 0.50025 0.4 CIDch2 CID low_res 3 Oxidation (M)
xl_class2 8 30 800:5000 2:5 5 ppm 0.50025 0.4 CIDch2 CID low_res 5 Oxidation (M)
lumos_class1 8 14 800:2500 2:3 5 ppm 0.01 0.0 Immuno-HCD HCD high_res 3 Oxidation (M)
lumos_class2 8 30 800:5000 2:5 5 ppm 0.01 0.0 Immuno-HCD HCD high_res 5 Oxidation (M)
qe_class1 8 14 800:2500 2:3 5 ppm 0.01 0.0 Immuno-HCD HCD high_res 3 Oxidation (M)
qe_class2 8 30 800:5000 2:5 5 ppm 0.01 0.0 Immuno-HCD HCD high_res 5 Oxidation (M)
timstof_class1 8 14 800:2500 1:4 20 ppm 0.01 0.0 timsTOF CID high_res 3 Oxidation (M)
timstof_class2 8 30 800:5000 1:5 20 ppm 0.01 0.0 timsTOF CID high_res 5 Oxidation (M)
astral_class1 8 14 800:2500 2:3 5 ppm 0.01 0.0 Immuno-HCD HCD high_res 3 Oxidation (M)
astral_class2 8 30 800:5000 2:5 5 ppm 0.01 0.0 Immuno-HCD HCD high_res 5 Oxidation (M)
xl_class1 8 14 800:2500 2:3 5 ppm 0.50025 0.4 CIDch2 CID low_res 3 Oxidation (M)
xl_class2 8 30 800:5000 2:5 5 ppm 0.50025 0.4 CIDch2 CID low_res 5 Oxidation (M)
8 changes: 4 additions & 4 deletions conf/base.config
Original file line number Diff line number Diff line change
Expand Up @@ -58,10 +58,10 @@ process {
errorStrategy = 'retry'
maxRetries = 2
}
withName:NFCORE_MHCQUANT:MHCQUANT:PREPARE_SPECTRA:TDF2MZML {
cpus = { 1 * task.attempt, 'cpus' }
memory = { 10.GB * task.attempt, 'memory' }
time = { 16.h * task.attempt, 'time' }
withName: 'TDF2MZML' {
cpus = { 1 * task.attempt }
memory = { 10.GB * task.attempt }
time = { 16.h * task.attempt }
}
withName: 'PRIDEPY_FETCH_SDRF' {
errorStrategy = 'retry'
Expand Down
80 changes: 36 additions & 44 deletions conf/modules.config
Original file line number Diff line number Diff line change
Expand Up @@ -273,37 +273,31 @@ process {
}

process {
if (params.quantify) {
withName: 'NFCORE_MHCQUANT:MHCQUANT:QUANT:OPENMS_IDSCORESWITCHER' {
ext.args = [
"-new_score COMET:xcorr",
"-new_score_orientation higher_better",
"-old_score q-value"
].join(' ').trim()
publishDir = [
mode: params.publish_dir_mode,
pattern: '*.idXML',
enabled: false
]
}
withName: 'NFCORE_MHCQUANT:MHCQUANT:QUANT:OPENMS_IDSCORESWITCHER' {
ext.args = [
"-new_score COMET:xcorr",
"-new_score_orientation higher_better",
"-old_score q-value"
].join(' ').trim()
publishDir = [
mode: params.publish_dir_mode,
pattern: '*.idXML',
enabled: false
]
}
}

process {
if (params.rescoring_engine == 'mokapot') {
withName: 'NFCORE_MHCQUANT:MHCQUANT:RESCORE:OPENMS_IDSCORESWITCHER' {
ext.prefix = {"${meta.id}"}
ext.args = [
"-new_score q-value",
"-new_score_orientation lower_better",
"-old_score expect"
].join(' ').trim()
publishDir = [
mode: params.publish_dir_mode,
pattern: '*.idXML',
enabled: false
]
}
withName: 'NFCORE_MHCQUANT:MHCQUANT:RESCORE:OPENMS_IDSCORESWITCHER' {
ext.prefix = {"${meta.id}"}
ext.args = [
"-new_score q-value",
"-new_score_orientation lower_better",
"-old_score expect"
].join(' ').trim()
publishDir = [
mode: params.publish_dir_mode,
pattern: '*.idXML',
enabled: false
]
}
}

Expand Down Expand Up @@ -370,7 +364,7 @@ process {
withName: 'OPENMS_IDMASSACCURACY' {
ext.prefix = {"${meta.spectra}"}
ext.args = { [
(params.precursor_error_units == 'ppm') ? "-precursor_error_ppm": "",
(meta.precursor_error_units == 'ppm') ? "-precursor_error_ppm": "",
"-fragment_mass_tolerance ${meta.fragment_mass_tolerance}"
].join(' ').trim() }
publishDir = [
Expand Down Expand Up @@ -470,6 +464,7 @@ process {
}

withName: 'OPENMS_TEXTEXPORTER' {
ext.prefix = { "${meta.id}_exported" }
ext.args = '-id:peptides_only -id:add_hit_metavalues 0 -id:add_metavalues 0'
publishDir = [
enabled: false
Expand Down Expand Up @@ -546,19 +541,16 @@ process {
}

process {

if (params.annotate_ions) {
withName: 'PYOPENMS_IONANNOTATOR' {
ext.args = { [
"--precursor_charge ${meta.prec_charge}",
"--fragment_mass_tolerance ${meta.fragment_mass_tolerance}",
"--remove_precursor_peak ${params.remove_precursor_peak}"
].join(' ').trim() }
publishDir = [
path: {"${params.outdir}/intermediate_results/ion_annotations"},
mode: params.publish_dir_mode,
pattern: '*.tsv'
]
}
withName: 'PYOPENMS_IONANNOTATOR' {
ext.args = { [
"--precursor_charge ${meta.prec_charge}",
"--fragment_mass_tolerance ${meta.fragment_mass_tolerance}",
"--remove_precursor_peak ${params.remove_precursor_peak}"
].join(' ').trim() }
publishDir = [
path: {"${params.outdir}/intermediate_results/ion_annotations"},
mode: params.publish_dir_mode,
pattern: '*.tsv'
]
}
}
13 changes: 8 additions & 5 deletions conf/test_single_quant.config
Original file line number Diff line number Diff line change
Expand Up @@ -7,15 +7,18 @@
* nextflow run main.nf -profile test_single_quant,<docker/singularity>
* */

process {
resourceLimits = [
cpus: 2,
memory: '6.GB',
time: '6.h'
]
}

params {
config_profile_name = 'Test single replicate profile'
config_profile_description = 'Test dataset to check pipeline function for single replicate'

// Limit resources so that this can run on GitHub Actions
max_cpus = 2
max_memory = '6.GB'
max_time = '6.h'

// Input data
input = params.pipelines_testdata_base_path + 'mhcquant/testdata/sample_sheet_single_quant.tsv'

Expand Down
13 changes: 8 additions & 5 deletions docs/usage.md
Original file line number Diff line number Diff line change
Expand Up @@ -90,13 +90,16 @@ ID Sample Condition ReplicateFileName SearchPreset

### Parameter precedence

Search parameters are resolved with the following precedence (highest to lowest):
When a samplesheet row sets `SearchPreset`, the preset's values are sealed in for that row's search — they cannot be overridden by `--<param>` on the CLI, by `-params-file`, or by `-c`. The following keys are sealed by the preset:

1. **Command-line parameters** (e.g. `--fragment_mass_tolerance 0.05`) -- CLI overrides take highest priority and apply to all samples
2. **Search preset** (e.g. `SearchPreset: lumos_class1`) -- preset values fill in any parameters not specified via CLI
3. **Config defaults** (`nextflow.config`) -- built-in defaults are used as a final fallback
`instrument`, `activation_method`, `digest_mass_range`, `prec_charge`, `precursor_mass_tolerance`, `precursor_error_units`, `fragment_mass_tolerance`, `fragment_bin_offset`, `number_mods`, `ms2pip_model`, `peptide_min_length`, `peptide_max_length`, `fixed_mods`, `variable_mods`.

This means a CLI flag like `--fragment_mass_tolerance 0.05` will override all presets for that parameter.
Rows that do **not** set `SearchPreset` resolve every key from the global Nextflow parameters (CLI > `-params-file` > `nextflow.config` defaults), exactly as in earlier releases.

If you want to deviate from a built-in preset for a one-off run, either:

1. Leave `SearchPreset` empty on the relevant rows and pass the values via `--<param>` / `-params-file` / a custom config; or
2. Add a custom row to your own search-presets TSV (see `--search_presets`) and reference it by name from `SearchPreset`.

> [!NOTE]
> When using `--global_fdr`, samples sharing the same `SearchPreset` value are grouped together for global FDR estimation. Samples without a preset are grouped under a common `global` group.
Expand Down
10 changes: 10 additions & 0 deletions modules.json
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,11 @@
"git_sha": "ca1cd2456f36c913fb3cfb6bdfbf9d1794fd493b",
"installed_by": ["modules"]
},
"openms/fileconverter": {
"branch": "master",
"git_sha": "924841ecdeb9b2aea108eda13cacf45a2452d35f",
"installed_by": ["modules"]
},
"openms/filefilter": {
"branch": "master",
"git_sha": "ca1cd2456f36c913fb3cfb6bdfbf9d1794fd493b",
Expand Down Expand Up @@ -55,6 +60,11 @@
"git_sha": "ca1cd2456f36c913fb3cfb6bdfbf9d1794fd493b",
"installed_by": ["modules"]
},
"openms/textexporter": {
"branch": "master",
"git_sha": "6d46786420b4d7bc88eba026eb389c0c5535d120",
"installed_by": ["modules"]
},
"openmsthirdparty/cometadapter": {
"branch": "master",
"git_sha": "ca1cd2456f36c913fb3cfb6bdfbf9d1794fd493b",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,4 @@ channels:
- conda-forge
- bioconda
dependencies:
- bioconda::openms=3.4.1
- bioconda::openms=3.5.0
4 changes: 2 additions & 2 deletions modules/local/openms/featurefinderidentification/main.nf
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ process OPENMS_FEATUREFINDERIDENTIFICATION {

conda "${moduleDir}/environment.yml"
container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ?
'https://depot.galaxyproject.org/singularity/openms:3.4.1--h81ffffe_1' :
'biocontainers/openms:3.4.1--h81ffffe_1' }"
'https://depot.galaxyproject.org/singularity/openms:3.5.0--h78fb946_0' :
'biocontainers/openms:3.5.0--h78fb946_0' }"


input:
Expand Down
7 changes: 0 additions & 7 deletions modules/local/openms/fileconverter/environment.yml

This file was deleted.

36 changes: 0 additions & 36 deletions modules/local/openms/fileconverter/main.nf

This file was deleted.

2 changes: 1 addition & 1 deletion modules/local/openms/idconflictresolver/environment.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,4 @@ channels:
- conda-forge
- bioconda
dependencies:
- bioconda::openms=3.4.1
- bioconda::openms=3.5.0
4 changes: 2 additions & 2 deletions modules/local/openms/idconflictresolver/main.nf
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ process OPENMS_IDCONFLICTRESOLVER {

conda "${moduleDir}/environment.yml"
container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ?
'https://depot.galaxyproject.org/singularity/openms:3.4.1--h81ffffe_1' :
'biocontainers/openms:3.4.1--h81ffffe_1' }"
'https://depot.galaxyproject.org/singularity/openms:3.5.0--h78fb946_0' :
'biocontainers/openms:3.5.0--h78fb946_0' }"

input:
tuple val(meta), path(consensus)
Expand Down
2 changes: 1 addition & 1 deletion modules/local/openms/idmassaccuracy/main.nf
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ process OPENMS_IDMASSACCURACY {
output:
tuple val(meta), path("*frag_mass_err.tsv") , emit: frag_err
tuple val(meta), path("*prec_mass_err.tsv") , emit: prec_err, optional: true
tuple val("${task.process}"), val('openms'), eval("FileInfo --help 2>&1 | sed -nE 's/^Version: ([0-9.]+).*/\\1/p'"), topic: versions
tuple val("${task.process}"), val('openms'), eval("FileInfo --help 2>&1 | sed -nE 's/^Version: ([0-9.]+).*/\\1/p'"), topic: versions

when:
task.ext.when == null || task.ext.when
Expand Down
Loading
Loading