All notable changes to the UWPR fork of Monocle are documented here. The format follows Keep a Changelog.
Release builds are tagged by CI as v<version>.<build number> (for example
v0.5.12). The output files written by Monocle record the version together with
the short commit hash of the build (for example 0.5+6e08134).
- Monocle.UI: ThermoFisher.CommonCore packages bumped 7.1.21 -> 8.0.42 to match
the core library; removed the stale, unreferenced 5.0.7 (net471) Thermo and
zlib.net 1.0.4.0 package copies under
Monocle.UI/packages; dropped the unnecessary Microsoft.CSharp package reference (NU1510).
0.5 - 2026-09-11
First release of the UWPR fork. Based on
gygilab/Monocle at commit 14d0135
(leave binaryDataArray blank when there are no peaks).
- CLI:
-f/--Fileaccepts multiple input files and wildcard patterns such as*.raw. Wildcards are expanded in-process on Windows; on Linux the shell expands them and the results arrive as multiple values. - CLI: new
-p/--NumConcurrentoption controls how many files are processed at once (default 4). Files are processed with a parallel loop. - CLI: with multiple input files,
-o/--OutputFilePathmust be an existing directory. With a single input file it may be a directory or a file path. - mzXML:
<msInstrument>header block with manufacturer, model, ionisation, mass analyzer, and acquisition software name and version, read from the RAW file. - mzXML:
injectionTimeattribute on each<scan>element. - mzML:
<sourceFileList>inside<fileDescription>with the Thermo nativeID format, Thermo RAW format, and a SHA-1 hash of the source file. - mzML:
<referenceableParamGroup>carrying the Thermo Electron instrument model (MS:1000492) when the model is known, referenced from<instrumentConfiguration>. ScanFileHeadergainsInstrumentIonization,InstrumentMassAnalyzer,AcquisitionSoftwareName, andAcquisitionSoftwareVersion.RawReadermaps Thermo ionization mode and mass analyzer enums to standard abbreviations (NSI, ESI, APCI, FTMS, ITMS, and others).- README: Linux self-contained publish command and multi-file usage examples.
- CLAUDE.md with build commands and an architecture overview.
- All projects target .NET 10 LTS (
net10.0,net10.0-windowsfor the UI), up from .NET 6. Microsoft.Data.Sqlite updated to 10.0.12 and Microsoft.NET.Test.Sdk to 17.12.0. - GitHub Actions workflows and the Docker build images use the .NET 10 SDK. They previously pinned .NET 6.
- mzXML and mzML
softwareelements report the real informational version with the short commit hash instead of the hardcoded value1. - mzML software element uses the registered HUPO-PSI term for Monocle (MS:1003977) instead of the generic custom unreleased software tool term.
- mzML: cv name for MS:1000563 corrected to Thermo RAW format.
- mzXML:
precursorMz,lowMz,highMz, andbasePeakMzare written with six decimal places andprecursorIntensitywith four, instead of 17-digit round-trip strings. - mzXML: instrument manufacturer is reported as Thermo Scientific.
- CLI: per-file log messages include the file name, and
reader.Close()is called on every code path. - Performance: mzXML and mzML readers replace reflection-based property setting with static setter dictionaries.
- Performance: the isotope scoring loop in
Monocle.Runuses a stack-allocated span instead of allocating a sublist for every candidate offset.VectorandPeptideEnvelopeExtractorgainSpan<double>overloads. - Performance: endian conversion in the mzXML reader and writer uses
BinaryPrimitivesinstead of per-peak byte array allocation and reversal. - Performance: nearby-scan selection uses an ordinal case-insensitive comparison instead of lowercasing the filter line.
- Help text and option descriptions list mzML alongside mzXML and CSV.
- CI release tags now use the
v0.5.prefix.
- mzDB reader tested the intensity flag for the baseline and noise offsets, so baseline and noise values were decoded incorrectly.
PeakMatcher.Matchcrashed when a scan had no centroids. It now returns -1.- mzML reader threw on spectra whose binary m/z or intensity arrays were null.
RawReaderprecursor intensity search never ran because the binary search upper bound was initialized to zero. After that fix, the linear scan started from the last midpoint instead of the lower bound and could skip in-window peaks. Both are corrected.RawReaderresolves symlinks before passing the path to the Thermo file factory, fixing failures on Linux.- CLI leaked the reader handle when run with
--header-only. - CLI threw an unhandled exception when required arguments were missing. It now exits with a nonzero status.
MzXmlWriter.CalculateFileHashopens the source file read-only with shared access, so it no longer conflicts with the writer's exclusive handle.- mzDB reader and writer disable SQLite connection pooling and dispose the connection after closing, so file handles release immediately under .NET 8.
- mzDB writer tests use a class fixture so database setup runs once per class, fixing file-lock races exposed by .NET 8.
- Trimmed self-contained Linux publish was broken since .NET 7 changed the
default trim mode to full. The trimmed binary crashed on startup because the
trimmer removed the option property setters CommandLineParser fills through
reflection, and
--header-onlyfailed because reflection-based JSON serialization is disabled in trimmed builds. The CLI project now setsTrimModetopartialand serializes the header through a source-generatedJsonSerializerContext. - Publish commands in the README, CI workflows, and deb/rpm scripts name
Monocle.CLI.csprojexplicitly. Runningdotnet publishin the CLI folder picked up the solution file, which applied trimming to the library project and failed with IL1034.