Skip to content

Commit 93e6125

Browse files
ArthurDeclercqArthurDeclercq
authored andcommitted
updated changelog and lock file
1 parent 1fa7aed commit 93e6125

2 files changed

Lines changed: 128 additions & 6 deletions

File tree

CHANGELOG.md

Lines changed: 47 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
77

88
## [Unreleased]
99

10+
## [4.0.0] - 2026-07-17
11+
1012
### Added
1113

1214
- `annotate_spectra()` in `parse_spectra.py`: annotates all PSM spectra once before feature
@@ -30,8 +32,21 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
3032
engine internals.
3133
- `ristretto-ms` dependency: a lean, dependency-light (numpy/scikit-learn/pandas)
3234
reimplementation of the Percolator/Käll semi-supervised rescoring algorithm.
33-
- GUI: rescoring model selector (svm/lda); GUI runs now also write an HTML log file
34-
(`<prefix>.log.html`), matching the CLI.
35+
- New `ms2` feature generator backed by `ms2rescore-rs`, providing direct-spectrum features
36+
including matched-ion counts and percentages, hyperscore, and intensity-ratio features for
37+
the a, b, c, x, y, and z ion series.
38+
- Configurable IM2Deep CCS reference datasets. CSV, compressed CSV, and Parquet files are
39+
supported and must contain `peptidoform` and `CCS` columns.
40+
- Mumble integration as an optional dependency (`ms2rescore[mumble]`) for generating
41+
mass-shift candidate peptidoforms before rescoring.
42+
- Intermediate-file recovery: the current PSM state is written to
43+
`<prefix>.intermediate.tsv` when feature generation or rescoring fails.
44+
- Feature generators are skipped when all of their output features are already present,
45+
allowing interrupted runs to resume without recomputing completed features.
46+
- Full per-feature-generator test coverage for the basic, DeepLC, IM2Deep, MS2, and MS²PIP
47+
feature generators, together with end-to-end rescoring integration tests.
48+
- GUI: rescoring model selector (svm/lda); centralized fragmentation-model and fragment-tolerance
49+
controls; GUI runs now also write an HTML log file (`<prefix>.log.html`), matching the CLI.
3550

3651
### Changed
3752

@@ -41,7 +56,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
4156
are passed via `psm.spectrum`.
4257
- MS2: migrated from `ms2_features_from_ms2spectra` to `score_ms2_spectra` API. Feature set
4358
expanded to cover all ion series (a, b, c, x, y, z).
44-
- Dependencies bumped: `ms2pip>=4.2.0b1`, `ms2rescore_rs>=0.5.0b1`. Added `pyarrow>=14`.
59+
- DeepLC migrated to the v4 functional API, with dataset-wide prediction and selection of the
60+
best multitask prediction head independently for each run.
61+
- IM2Deep migrated to the v2 functional API, with dataset-wide prediction and per-run linear
62+
CCS calibration.
63+
- Dependencies bumped: `deeplc>=4.0.0b1`, `im2deep>=2.0.1`, `ms2pip>=4.2.0`,
64+
`ms2rescore_rs>=0.5.0`, and `ristretto-ms>=0.3.0`. Added `pyarrow>=14`.
4565
- numpy 2.0 compatibility in `charts.py` (`np.trapz``np.trapezoid`).
4666
- Rescoring engine replaced: mokapot → ristretto. Rescoring can no longer be skipped -- it
4767
always runs.
@@ -60,6 +80,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
6080
Mumble), not a statistically rigorous FDR-controlled count.
6181
- Protein-level rollups use ristretto's picked-protein competition (Savitski et al. 2015) when
6282
`id_decoy_pattern` is set.
83+
- Python 3.11 or newer is now required.
6384

6485
### Removed
6586

@@ -68,6 +89,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
6889
`tolerance_mode` in the top-level configuration (default: `0.02 Da`).
6990
- [BREAKING] `spectrum_path`, `spectrum_id_pattern`, `mass_mode`, and `processes` parameters
7091
removed from `MS2FeatureGenerator`. Spectra are provided via centralized `annotate_spectra()`.
92+
- [BREAKING] `ionmob` feature generator removed. Ion-mobility prediction and CCS calibration are
93+
now provided by the IM2Deep v2 feature generator.
94+
- [BREAKING] `maxquant` feature generator removed. Its relevant spectrum-derived features are
95+
now provided by the `ms2` feature generator.
7196
- [BREAKING] Mokapot rescoring engine and the `mokapot` dependency removed, along with the
7297
`ms2rescore.rescoring_engines` module.
7398
- [BREAKING] `rescoring_engine` configuration option removed (mokapot-specific: `fasta_file`,
@@ -81,8 +106,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
81106
TSV already carries all rescoring features.
82107
- [BREAKING] Ability to skip rescoring via configuration removed. `rescoring: null` is now
83108
rejected by config validation instead of being silently ignored; rescoring always runs.
84-
- [BREAKING] `ms2rescore.utils` (public) renamed to `ms2rescore._utils` (internal) and merged
85-
with the new rescoring integration layer -- no longer part of the public API surface.
109+
- [BREAKING] The public `ms2rescore.utils` module removed. General internal utilities now reside
110+
in `ms2rescore._utils`, while private ristretto integration helpers reside in
111+
`ms2rescore._ristretto_utils`; neither module is part of the public API surface.
86112

87113
### Fixed
88114

@@ -92,15 +118,30 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
92118
ms2rescore via centralized per-PSM `annotate_spectra()`.
93119
- DeepLC RT features incorrectly assigned across PSMs: missing `sort_index()` after q-value sort
94120
for calibration caused PSMs to receive another PSM's RT predictions.
121+
- Multi-run MS²PIP crash caused by observed-spectrum deduplication using `spectrum_id` alone.
122+
Spectra are now keyed by `(run, spectrum_id)`, preventing collisions between runs that reuse
123+
native scan identifiers.
124+
- Missing precursor m/z or search-engine scores produced `NaN` basic features instead of the
125+
documented `0` values because float `NaN` values were not detected by the existing `None`
126+
checks.
127+
- DeepLC multitask models always used prediction head 0 instead of selecting the head that best
128+
matched each run.
129+
- Mumble-generated candidate PSMs leaked into DeepLC and IM2Deep calibration-set selection
130+
because they inherited the original PSM's score and q-value. Generated candidates are now
131+
excluded using `get_original_hit_mask()`.
132+
- Configured IM2Deep reference datasets were incorrectly reported as missing because the
133+
file-existence check was inverted.
95134
- `processes=-1` (ms2rescore default) passed to DeepLC `num_threads`, which requires a positive
96135
integer or `None`.
97136
- Q-value NaN check in `parse_psms.py` failed when `qvalue` array contained `None` values.
98-
- `BrokenExecutor` not caught in mokapot rescoring engine.
99137
- Fragment mass tolerance fallback defaults in `core.py` incorrectly set to `20.0 ppm` instead
100138
of `0.02 Da`.
139+
- Empty or partial `rescoring` configuration dictionaries could raise `KeyError` instead of
140+
falling back to ristretto defaults.
101141
- GUI runs never wrote an HTML log file (`<prefix>.log.html`), unlike CLI runs -- the GUI's
102142
logging setup only ever attached a plain text-file handler.
103143

144+
104145
## [3.3.0a1] - 2026-04-09
105146

106147
### Added

uv.lock

Lines changed: 81 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)