Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
ced3b8c
feat: allow Bruker DIA MS2 centroiding without denoising (#9151)
timosachsenberg Apr 15, 2026
1099aa1
fix(opentims): register FetchContent target in build-tree export set
michalsta Apr 15, 2026
cdb8089
fix(opentims): force static build and remove sqlite3 CMake dep for Fe…
michalsta Apr 15, 2026
2155f70
fix(opentims): treat empty INTERFACE_COMPILE_DEFINITIONS as manual-fa…
michalsta Apr 15, 2026
b292dcb
refactor: extract loadMS1Spectrum helper in BrukerTimsFile (#9152)
timosachsenberg Apr 15, 2026
894caef
fix: mark Bruker TDF spectra as CENTROID so downstream tools accept t…
jonasscheid Apr 15, 2026
0a62696
docs: sync CHANGELOG with recent changes (2026-04-16) (#9157)
github-actions[bot] Apr 16, 2026
96b55c4
feat: Bruker timsTOF MS1 frame aggregation (DIA + DDA) (#9158)
timosachsenberg Apr 16, 2026
2c00af4
refactor: merge LinearResampler into LinearResamplerAlign (#9153) (#9…
LuBox2K Apr 16, 2026
925f470
contrib: Treat as a submodule so we don't release it separately (#9155)
pjones Apr 16, 2026
4e1703b
Fix outdated links in contributing guide
Adi-gitX Apr 16, 2026
9a8925d
Update CONTRIBUTING.md
jpfeuffer Apr 16, 2026
622398f
Fix capitalization in documentation requirements
jpfeuffer Apr 16, 2026
6bb28b7
feat: Bruker DDA native ID + load_ms1 toggle + CometAdapter mzParser …
timosachsenberg Apr 16, 2026
2e25d1c
docs: sync CHANGELOG with recent changes (2026-04-17) (#9165)
github-actions[bot] Apr 17, 2026
7f6c21c
feat(ProSE): add -out_pin for Percolator input file output (#9166)
timosachsenberg Apr 17, 2026
2bef3b4
fix(ProSE): honor ions:add_* parameters in scoring path (#9167)
timosachsenberg Apr 17, 2026
69f08c3
Implemented a checkup for the cleavge points and stops. It should onl…
TheClaervoyant Apr 17, 2026
5cca9e9
Shifted the Constructor of DigestionEnzyme. Refactored into Digestion…
TheClaervoyant Apr 22, 2026
892038b
Letzter Stand der Dinge - Base Class Test geschrieben und zuzsammenhä…
TheClaervoyant May 23, 2026
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
92 changes: 69 additions & 23 deletions .github/workflows/openms_ci_matrix_full.yml
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,60 @@ on:

# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
# NOTE: This job is temporary until we get rid of contrib.
prepare-contrib-for-windows:
runs-on: windows-2025
steps:
- name: Clone OpenMS
uses: actions/checkout@v6
- name: Set up Visual Studio shell
uses: egor-tensin/vs-shell@v2
with: { arch: x64 }

- name: Identify contrib submodule revision for cache key
id: contrib-rev
shell: bash
run: |
rev=$(git submodule status --cached -- contrib | sed -E 's/^-?//' | cut -d' ' -f1)
echo "rev=$rev" >> "$GITHUB_OUTPUT"

- name: Cache contrib
id: cache-contrib
uses: actions/cache@v5
with:
path: contrib/build
key: ${{ runner.os }}-${{ steps.contrib-rev.outputs.rev }}

- name: Fetch contrib if not in cache
if: steps.cache-contrib.outputs.cache-hit != 'true'
shell: bash
run: |
git submodule update --init -- contrib
mkdir -p contrib/build

- name: Build contrib if not in cache
if: steps.cache-contrib.outputs.cache-hit != 'true'
shell: pwsh
run: |
$NPROC = $env:NUMBER_OF_PROCESSORS
if (-not $NPROC) { $NPROC = 4 }
$env:CMAKE_BUILD_PARALLEL_LEVEL = $NPROC
Set-Location "${{ github.workspace }}\contrib\build"
cmake -G"Visual Studio 17 2022" -Ax64 -DBUILD_TYPE=ALL "${{ github.workspace }}\contrib"
if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }

- name: Upload Contrib
uses: actions/upload-artifact@v7
with:
name: contrib-${{ steps.contrib-rev.outputs.rev }}
path: |
contrib/build/lib/
contrib/build/bin/
contrib/build/include/
retention-days: 7

build-and-test:
needs: prepare-contrib-for-windows
strategy:
fail-fast: false
matrix:
Expand Down Expand Up @@ -326,28 +379,6 @@ jobs:
echo "cmake_prefix=$(brew --prefix);$(brew --prefix libomp)" >>"$GITHUB_OUTPUT"
fi

- name: Cache contrib (Windows)
if: startsWith(matrix.os, 'windows')
id: cache-contrib
uses: actions/cache@v4
with:
path: ${{ github.workspace }}/OpenMS/contrib
key: ${{ runner.os }}-contrib4

- name: Download contrib build from archive (Windows)
if: startsWith(matrix.os, 'windows') && steps.cache-contrib.outputs.cache-hit != 'true'
shell: bash
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
cd OpenMS/contrib
# Download the file using the URL fetched from GitHub
gh release download -R OpenMS/contrib --pattern 'contrib_build-Windows.tar.gz'
# Extract the archive
7z x -so contrib_build-Windows.tar.gz | 7z x -si -ttar
rm contrib_build-Windows.tar.gz
ls -la

- name: Build libcurl from source (Windows)
if: startsWith(matrix.os, 'windows')
shell: bash
Expand Down Expand Up @@ -378,6 +409,21 @@ jobs:
${{ runner.os }}-${{ runner.arch }}-${{ matrix.compiler }}-${{ matrix.compiler_ver }}-ccache-develop
${{ runner.os }}-${{ runner.arch }}-${{ matrix.compiler }}-${{ matrix.compiler_ver }}-ccache-

- name: Identify contrib submodule revision for cache key
id: contrib-rev
shell: bash
run: |
cd OpenMS
rev=$(git submodule status --cached -- contrib | sed -E 's/^-?//' | cut -d' ' -f1)
echo "rev=$rev" >> "$GITHUB_OUTPUT"

- name: Download contrib artifact for Windows
if: runner.os == 'Windows'
uses: actions/download-artifact@v4
with:
name: contrib-${{ steps.contrib-rev.outputs.rev }}
path: OpenMS/contrib/build

- name: Add THIRDPARTY
shell: bash
run: |
Expand Down Expand Up @@ -453,7 +499,7 @@ jobs:
PYOPENMS: "${{ startsWith(matrix.os, 'ubuntu') && matrix.compiler == 'g++' && 'ON' || 'OFF' }}"
NO_DEPENDENCIES: "${{ startsWith(matrix.os, 'ubuntu') && matrix.compiler == 'g++' && 'OFF' || 'ON' }}"
CMAKE_PREFIX_PATH: "${{ steps.tools-prefix.outputs.cmake_prefix }};${{ steps.conda-setup.outputs.cmake_prefix }}"
OPENMS_CONTRIB_LIBS: "${{ github.workspace }}/OpenMS/contrib"
OPENMS_CONTRIB_LIBS: "${{ github.workspace }}/OpenMS/contrib/build"
CI_PROVIDER: "GitHub-Actions"
CMAKE_GENERATOR: "Ninja"
SOURCE_DIRECTORY: "${{ github.workspace }}/OpenMS"
Expand Down
2 changes: 2 additions & 0 deletions AUTHORS
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ the authors tag in the respective file header.
- Achal Bajpai
- Aditya Muzumdar
- Ahmed Khalil
- Alen Saric
- Alexandra Scherbart
- Alexandra Zerck
- Amanda Wein
Expand Down Expand Up @@ -73,6 +74,7 @@ the authors tag in the respective file header.
- Leon Bichmann
- Leon Kuchenbecker
- Lucia Espona
- Luis Jacob Keller
- Lukas Mueller
- Lukas Zimmermann
- Marcel Schilling
Expand Down
8 changes: 8 additions & 0 deletions CHANGELOG
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,10 @@ General:
- Fix: TheoreticalSpectrumGenerator: corrected m/z calculation for b/a neutral-loss fragment ions; the neutral-loss loop previously omitted the first residue mass, causing all b/a neutral-loss fragments to report masses that were too low by the first residue's internal mass (#9078, #9084)
- Fix: LinearResampler: right_index was clamped to the number of raw data points instead of the number of resampled points; when resampled points far outnumber raw points (e.g. fine spacing over a wide m/z range), this caused extreme intensity spikes; bug introduced in 2008 and masked by LinearResamplerAlign which has an independent correct implementation (#9127)
- Transparent .zip decompression for XML-based formats (mzML, idXML, etc.) and Bruker .d directories: files with a .zip extension are now decompressed on-the-fly during parsing; .d.zip archives are extracted to a temporary directory and loaded via BrukerTimsFile; no conversion step required (#9139)
- Fix: BrukerTimsFile: DDA-PASEF and DIA-PASEF spectra are now marked as CENTROID (PeakType::PEAK) so downstream tools that check spectrum type (e.g. FeatureFinderMultiplex, OpenSwathWorkflow) accept them without extra conversion (#9154)
- Bruker TimsTOF MS1 frame aggregation for DIA-PASEF and DDA-PASEF: new BrukerTimsFile::Config fields (ms1_n_neighbors, ms1_min_support, ms1_max_rt_distance_sec, ms1_centroid_max_peaks) sum peaks from 2N+1 adjacent MS1 frames into a sparse (mz_bin, scan_id) grid per center frame, composable with the existing within-frame IM centroiding (ms1_centroid_mz_ppm and ms1_centroid_im_pct). Exposed through FileConverter as -bruker:ms1_n_neighbors, -bruker:ms1_min_support, -bruker:ms1_max_rt_distance_sec, -bruker:ms1_centroid_max_peaks. Disabled by default. Also renames the internal DIAFrameAggregator class to FrameAggregator (scope-agnostic now that MS1 uses it), guards its (mz_bin, scan_id) grid lookups against uint32 wrap at scan_id=0, and switches the skip_denoise predicate in the MS2 aggregation loop from index-span to actual contributing-frame count (closes #9151 TODO).
- BrukerTimsFile: DDA MS2 native IDs changed from "scan=<precursor_id>" to "frame=<frame_id> scan=<scan_begin> precursor=<precursor_id>". The frame/scan pair follows the PSI-MS MS:1002818 ("Bruker TDF nativeID format") convention (scan is the TIMS isolation-window scan_begin); the trailing "precursor=<P>" token is required for uniqueness under OpenMS's per-Precursors.Id aggregation (different precursors can share the same (frame, scan_begin) via PASEF co-isolation with different IsolationMz, and multi-cycle precursors can collide on their first entry) — this mirrors the convention pwiz uses in its "combined" mode ("merged=N frame=F scanStart=A scanEnd=B"), where extra tokens are added while the SourceFile CV accession remains MS:1002818. The Bruker Precursors.Id is ALSO duplicated as a typed MetaValue "bruker_precursor_id" for direct programmatic access. SpectrumNativeIDParser now recognizes MS:1002818 and the "frame=" prefix so downstream scan-number extraction (SpectrumLookup, USI, PepXMLFile, PercolatorInfile, IDMapper) works for Bruker .d output. New BrukerTimsFile::Config field load_ms1 (CLI: -bruker:load_ms1, default true): disable to skip MS1 loading entirely for MS2-only workflows (peptide database search) — cuts memory and time substantially. CometAdapter automatically sets load_ms1=false when searching MS2. BrukerTimsFile::transform() progress now matches actually-emitted spectra in DIA mode (per-WindowGroup sum, not frames × all_windows) and respects load_ms1 across all modes.
- CometAdapter: workaround for a latent bug in Comet's bundled mzParser (MSToolkit/saxmzmlhandler.cpp) that segfaults when mzML files contain mixed "frame=..." and "scan=..." native IDs with overlapping numeric values — which is exactly the Bruker .d DDA/DIA case. CometAdapter rewrites Bruker .d native IDs to monotonic "index=N" before handing the temp mzML to Comet, and translates PSM spectrum references back to the original Bruker IDs after Comet finishes. Upstream fix for cindex::compare's strict-weak-ordering violation should be filed against UWPR/Comet.

Dependencies:
- PyOpenMS: Autowrap/Cython replaced with nanobind; nanobind 2.10.0+ fetched automatically (#8699)
Expand All @@ -50,6 +54,8 @@ Dependencies:
- boost-process added as a header-only dependency for cross-platform subprocess management (#8939)
- ENABLE_TDL CMake option (required for CWL/Common Workflow Language file support) now defaults to OFF; set -DENABLE_TDL=ON to re-enable (#9067)
- Boost minimum version requirement raised from 1.78 to 1.81 (#9095)
- opentims: CMake now searches for a system-installed opentims_cpp via FindOpentims.cmake before falling back to a FetchContent git clone; packagers and users with opentims already installed can set opentims_DIR or opentims_ROOT to skip the download (#9147, #9148)
- contrib: the contrib directory is now a git submodule; developers and packagers building from a git clone must run `git submodule update --init` (or clone with `--recurse-submodules`) to obtain the vendored third-party libraries (#9155)

TOPP tools:
Changes:
Expand Down Expand Up @@ -111,6 +117,7 @@ TOPP tools:
- Bruker DIA MS2 frame aggregation, denoising, and OpenSwath streaming: new BrukerTimsFile::Config fields (bruker:dia_ms2_n_neighbors, bruker:dia_ms2_min_support, bruker:dia_ms2_centroid) enable grid-based denoising and 2D peak picking of DIA MS2 frames; aggregated spectra can be streamed directly into the OpenSwath pipeline without prior mzML conversion; registered in FileConverter and PeakPickerIM; requires WITH_TIMSRUST=ON (#9129)
- Fix: BrukerTimsFile::loadDIAStreaming now sorts each spectrum's peaks by m/z before feeding them to the OpenSwath consumer; unsorted peaks (caused by TIMS scan ordering) silently produced empty chromatograms, breaking iRT calibration on .d DIA input (#9135)
- Fix: segfault when use_consensus=false; hull_points returned by PeakIntegrator::integratePeak varied in size per-transition, causing Eigen::Map to read past the end of the shorter vector in MRMScoring::initializeXCorrMatrix; fixed by padding hull_points to the full resampled chromatogram length in non-consensus mode (#9143)
- Allow Bruker DIA MS2 centroiding without denoising: bruker:dia_ms2_min_support can now be set to 0; with centroid=true and min_support=0 every populated grid cell is a centroid candidate, skipping the neighbor-support filter; useful for low-density data where the 3×3 denoising step discards real peaks (#9151)

PyOpenMS:
- BREAKING: Binding backend replaced from Autowrap/Cython to hand-maintained nanobind C++ bindings (#8699)
Expand Down Expand Up @@ -291,6 +298,7 @@ OpenMS Library:
- BREAKING: PeptideAndProteinQuant channel identifiers changed from Int to UInt (#8516)
- BREAKING: Plain enums migrated to enum class (Sample::SampleState, OpenMS_OS, etc.) (#8622)
- ILPDCWrapper: Performance improvement using std::unordered_map (~3.5x speedup) (#8618)
- DELETION: deleted Class LinearResampler and refactored functionality into LinearResamplerAlign (#9153)
- OpenSwath: Use unordered_map for O(1) lookups, improving performance (#8651)
- DataValue: Enhanced conversion error messages with type and value context (#8572)
- BayesianProteinInferenceAlgorithm: Now requires single merged ProteinIdentification run (#8480)
Expand Down
10 changes: 5 additions & 5 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,14 +29,14 @@ If you are an official OpenMS team member:

# Opening a Pull Request

Before getting started we recommend taking a look at our GitHub-Wiki: https://github.com/OpenMS/OpenMS/wiki#-for-developers
Before getting started we recommend taking a look at the developer guide:
https://openms.readthedocs.io/en/latest/manual/develop.html

Before you open the pull request, make sure you
- adhere to [our coding conventions](https://github.com/OpenMS/OpenMS/wiki/Coding-conventions)
- have [unit tests and functional tests](https://github.com/OpenMS/OpenMS/wiki/Write-tests) - see also [this example](https://github.com/OpenMS/OpenMS/blob/develop/src/tests/class_tests/openms/source/MSNumpressCoder_test.cpp)
- Have [proper documentation](https://github.com/OpenMS/OpenMS/wiki/Coding-conventions#doxygen) - see also [this example](https://github.com/OpenMS/OpenMS/blob/develop/src/openms/include/OpenMS/FORMAT/MSNumpressCoder.h)
- adhere to [our coding conventions](https://openms.readthedocs.io/en/latest/manual/develop.html#coding-conventions)
- have [unit tests and functional tests](https://openms.readthedocs.io/en/latest/manual/develop.html#automated-unit-tests) - see also [this example](https://github.com/OpenMS/OpenMS/blob/develop/src/tests/class_tests/openms/source/MSNumpressCoder_test.cpp)
- have [proper documentation](https://openms.readthedocs.io/en/latest/manual/develop/developer-faq.html#doxygen-documentation) - see also [this example](https://github.com/OpenMS/OpenMS/blob/develop/src/openms/include/OpenMS/FORMAT/MSNumpressCoder.h)
- have Python bindings — nanobind binding files are in `src/pyOpenMS/bindings/`; see `src/pyOpenMS/CLAUDE.md` for wrapping instructions

A core developer will review your changes to the main development branch (develop) and approve them (or ask for modifications). You may indicate the prefered reviewer(s) by adding links to them in a comment section (e.g., @cbielow @hendrikweisser @hroest @jpfeuffer @timosachsenberg)

Also consider getting in contact with the core developers early. They might provide additional guidance and valuable information on how your specific aim is achieved. This might give you a head start in, for example, developing novel tools or algorithms.
Expand Down
36 changes: 28 additions & 8 deletions cmake/cmake_findExternalLibs.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -376,7 +376,7 @@ if (WITH_OPENTIMS)
# conservatively inject sqlite3 because we cannot know how it was built.
get_target_property(_opentims_defs opentims::opentims_cpp INTERFACE_COMPILE_DEFINITIONS)
if(_opentims_defs MATCHES "OPENTIMS_LINK_SQLITE_STATICALLY"
OR (_opentims_defs MATCHES "NOTFOUND" AND NOT opentims_FOUND))
OR ((_opentims_defs MATCHES "NOTFOUND" OR _opentims_defs STREQUAL "") AND NOT opentims_FOUND))
target_include_directories(opentims::opentims_cpp INTERFACE
"${CMAKE_SOURCE_DIR}/src/openms/extern/SQLiteCpp/sqlite3")
target_link_libraries(opentims::opentims_cpp INTERFACE sqlite3)
Expand All @@ -398,12 +398,31 @@ if (WITH_OPENTIMS)
set(OPENTIMS_BUILD_LIB ON CACHE BOOL "" FORCE)
set(OPENTIMS_BUILD_PYTHON OFF CACHE BOOL "" FORCE)
set(OPENTIMS_LINK_SQLITE_STATICALLY ON CACHE BOOL "" FORCE)
FetchContent_MakeAvailable(opentims)

# Provide OpenMS's sqlite3 headers and library to opentims
# OpenMS sets BUILD_SHARED_LIBS=true (to build libOpenMS.so). Without this
# override, opentims's CMakeLists.txt would build libopentims_cpp.so instead
# of libopentims_cpp.a. A shared opentims would land in _deps/opentims-build/
# rather than the system lib path, so the build-time linker would fail with
# "undefined reference to TimsDataHandle" when linking test binaries against
# libOpenMS.so (because libopentims_cpp.so's directory is not in the test's
# -L search path). Force static so all opentims symbols get absorbed into
# libOpenMS.so at link time.
set(_openms_saved_build_shared_libs ${BUILD_SHARED_LIBS})
set(BUILD_SHARED_LIBS OFF)
FetchContent_MakeAvailable(opentims)
set(BUILD_SHARED_LIBS ${_openms_saved_build_shared_libs})

# Provide OpenMS's sqlite3 headers to opentims so it compiles with
# OPENTIMS_LINK_SQLITE_STATICALLY (direct sqlite3 calls vs. dlopen).
# We intentionally do NOT call target_link_libraries(opentims_cpp PRIVATE sqlite3)
# here: adding the CMake sqlite3 target as a PRIVATE dep of a STATIC library
# would require sqlite3 to appear in the CMake export sets, which creates
# conflicts with SQLiteCpp's own sqlite3 export. The sqlite3 symbols are
# resolved at final link time through OpenMS's own SQLiteCpp dependency
# (SQLiteCpp PUBLIC-links sqlite3, so libsqlite3.a already appears in
# libOpenMS.so's link command after libopentims_cpp.a).
target_include_directories(opentims_cpp PRIVATE
"${CMAKE_SOURCE_DIR}/src/openms/extern/SQLiteCpp/sqlite3")
target_link_libraries(opentims_cpp PRIVATE sqlite3)

# ZSTD: prefer system; fall back to opentims's bundled decoder.
set(_OPENTIMS_SRC "${opentims_SOURCE_DIR}/src/opentims++")
Expand All @@ -427,11 +446,12 @@ if (WITH_OPENTIMS)
# opentims::opentims_cpp regardless of how the library was obtained.
add_library(opentims::opentims_cpp ALIAS opentims_cpp)

# Add opentims_cpp to the OpenMSTargets export set (same as Evergreen,
# SQLiteCpp, and other bundled deps). CMake requires all targets linked
# by an exported target to be either imported or in an export set — even
# for PRIVATE deps of a shared library.
# Add opentims_cpp to both the install-tree and build-tree export sets
# (same pattern as Evergreen, IsoSpec, and other bundled deps).
# install_library() → OpenMSTargets install export
# openms_register_export_target() → _OPENMS_EXPORT_TARGETS build-tree export()
install_library(opentims_cpp)
openms_register_export_target(opentims_cpp)

message(STATUS "opentims: built from source (${opentims_SOURCE_DIR})")
endif()
Expand Down
4 changes: 2 additions & 2 deletions doc/code_examples/Tutorial_SavitzkyGolayFilter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
//

#include <OpenMS/PROCESSING/SMOOTHING/SavitzkyGolayFilter.h>
#include <OpenMS/PROCESSING/RESAMPLING/LinearResampler.h>
#include <OpenMS/PROCESSING/RESAMPLING/LinearResamplerAlign.h>
#include <OpenMS/FORMAT/FileHandler.h>
#include <OpenMS/KERNEL/StandardTypes.h>
#include <OpenMS/openms_data_path.h> // exotic header for path to tutorial data
Expand All @@ -21,7 +21,7 @@ int main(int argc, const char** argv)
// Load the dta file into the spectrum
FileHandler().loadSpectrum(file_dta, spectrum);

LinearResampler lr;
LinearResamplerAlign lr;
Param param_lr;
param_lr.setValue("spacing", 0.01);
lr.setParameters(param_lr);
Expand Down
2 changes: 0 additions & 2 deletions doc/doxygen/parameters/DefaultParamHandlerDocumenter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,6 @@
#include <OpenMS/PROCESSING/SMOOTHING/GaussFilter.h>
#include <OpenMS/PROCESSING/SMOOTHING/LowessSmoothing.h>
#include <OpenMS/PROCESSING/SMOOTHING/SavitzkyGolayFilter.h>
#include <OpenMS/PROCESSING/RESAMPLING/LinearResampler.h>
#include <OpenMS/PROCESSING/FILTERING/NLargest.h>
#include <OpenMS/PROCESSING/SCALING/Normalizer.h>
#include <OpenMS/PROCESSING/SPECTRAMERGING/SpectraMerger.h>
Expand Down Expand Up @@ -390,7 +389,6 @@ int main(int argc, char** argv)
DOCME(ItraqEightPlexQuantitationMethod);
DOCME(ItraqFourPlexQuantitationMethod);
DOCME(LabeledPairFinder);
DOCME(LinearResampler);
DOCME(MSPFile);
DOCME(MapAlignmentAlgorithmPoseClustering);
DOCME(SpectrumAnnotator);
Expand Down
Loading
Loading