Repository navigation
feat(convert): read Thermo .raw directly, opt-in (convert.thermo_native, build feature thermo) - #217
Merged
Merged
Conversation
…mo_native, build feature thermo) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…OG and a CI lint One thread reads the .raw through RawFileReader, which is serial, and the thread pool decodes the spectra in batches of 512 that are folded back in file order: byte-identical spectra artifacts to the one-thread decode. docs/04_convert.md gains "Native Thermo reading" (mechanism, the measured comparison with ThermoRawFileParser 1.4.5 on PXD071205 Astral files, the .NET 8 runtime, the Windows crt-static and Linux glibc build requirements, and the RawFileReader licence; release builds do not enable the feature). CI lints the `thermo` feature, which no release build enables, so it cannot rot unnoticed. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Conflicts: CHANGELOG.md (the native Thermo entry goes under Added in main's Unreleased section, after the 0.8.0 release) and the generated docs/24_config_reference.md (regenerated). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…2026-0382, -0381) Both reach the lockfile through the thermo feature (nethost-sys's build-time NuGet download); semver-compatible updates. THIRD_PARTY_LICENSES.md and sbom.cdx.json regenerated. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
CHANGELOG.md: both Unreleased Added entries kept (native Thermo reading, mbr.second_pass_prefilter_keep_decoys); docs/24 and the config schema regenerated. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
docs/24_config_reference.md and configs/config-schema.json regenerated: the GitHub-side merge 7ba0400 left them stale against main's new search_seed keys, which failed ci/gen_config_reference.py --check. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…e's build chain
RUSTSEC-2026-0367, -0368 and -0369 (zip extraction: SUID/SGID bits kept,
symlinks outside the destination, permissions applied through symlinks)
reach the lockfile only through the opt-in thermo feature: mzdata ->
thermorawfilereader 0.8.0 -> netcorehost ^0.18 -> nethost-sys 0.7.3, whose
build script downloads Microsoft's nethost NuGet package from nuget.org and
unpacks it with zip 6.0.0. Nothing extracts an archive at run time and
release builds do not enable the feature. The fix is zip 9.0, and no release
in the chain reaches it (nethost-sys 0.8.0 still requires zip ^8.3), so the
engine audit ignores the three IDs, with the reason and the removal
condition in the workflow comment and in docs/04 ("Native Thermo reading").
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Merged
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Reads a Thermo
.rawdirectly instead of converting it to mzML first. This is opt-in at two levels: a Cargo feature (thermo) that no release build enables, and a configuration key (convert.thermo_native, defaultfalse).How it works
mzdata'sthermofeature hosts Thermo's RawFileReader on a .NET 8 runtime.raw::ensure_mzmlpasses the.rawthrough underconvert.thermo_native.convertreads it with vendor centroiding, the same peak picking ThermoRawFileParser applies by default.peaks_of. The mzML path is unchanged.instrument::from_configurationsskips the serial number and the instrument-method text that mzdata stores ascustomization, so the Astral defaults apply as they do for an mzML.params.reader = "thermorawfilereader"andparams.centroiding = "vendor".convert.thermo_nativewith a message rather than falling back to a converter.Measured against ThermoRawFileParser 1.4.5 on PXD071205 Astral files (docs/04_convert.md, "Native Thermo reading"):
The spectra of all six runs were compared one by one, with the same result. The parallel decode is byte-identical to the one-thread decode on a 5 min file. Its timing on the 15 min file will follow once the test host is free.
Requirements and limits
DOTNET_ROOTwhen it is not in the default location).RUSTFLAGS="-C target-feature=+crt-static", because the downloaded .NET host library uses the static C runtime.Checks
🤖 Generated with Claude Code