{"id":27027368,"url":"https://github.com/rusteomics/mzcore","last_synced_at":"2025-12-12T12:23:27.137Z","repository":{"id":173320020,"uuid":"604829287","full_name":"rusteomics/mzcore","owner":"rusteomics","description":"A Rust library for parsing ProForma peptides and matching them against MS spectra, formally known as rustyms","archived":false,"fork":false,"pushed_at":"2025-02-10T11:13:47.000Z","size":135915,"stargazers_count":23,"open_issues_count":17,"forks_count":7,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-02-13T09:11:14.163Z","etag":null,"topics":["chemistry","mass-spectrometry","proforma","proteomics","rust"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rusteomics.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE-APACHE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":"CITATION.cff","codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-02-21T21:58:24.000Z","updated_at":"2025-02-08T08:08:03.000Z","dependencies_parsed_at":"2023-12-16T20:08:34.393Z","dependency_job_id":"ede76609-0d81-4e79-9659-af7b23bfccb7","html_url":"https://github.com/rusteomics/mzcore","commit_stats":{"total_commits":284,"total_committers":2,"mean_commits":142.0,"dds":"0.0035211267605633756","last_synced_commit":"b7f8e7ac7c0fa8bc4efadb86411db902b3241a82"},"previous_names":["snijderlab/rustyms"],"tags_count":20,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rusteomics%2Fmzcore","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rusteomics%2Fmzcore/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rusteomics%2Fmzcore/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rusteomics%2Fmzcore/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rusteomics","download_url":"https://codeload.github.com/rusteomics/mzcore/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247263962,"owners_count":20910499,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["chemistry","mass-spectrometry","proforma","proteomics","rust"],"created_at":"2025-04-04T23:25:38.954Z","updated_at":"2025-12-12T12:23:27.076Z","avatar_url":"https://github.com/rusteomics.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Oxidise your MS data analysis\n\nA set of libraries to handle peptide centric mass spectrometry calculations. Built to handle very complex peptidoforms in a sensible way. Centered around the following HUPO-PSI standards:\n- [ProForma](https://www.psidev.info/proforma) A standard notation for proteo/peptidoforms allowing for highly complex definitions\n- [mzSpecLib](https://www.psidev.info/mzspeclib) A standard notation for spectral libraries\n- [mzPAF](https://www.psidev.info/mzpaf) A standard notation of peak fragment annotation\n- [mzTab](https://www.psidev.info/mztab-specifications) A standard notation for matched peptidoforms from database and _de novo_ searches\n\nFor raw data centered HUPO-PSI standards support (eg mzML, USI) see [mzdata](https://crates.io/crates/mzdata).\n\n| Crate        | Crates.io                                                                                           | Docs                                                                                                              |\n| ------------ | --------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- |\n| 🦀 mzcore     | [![Crates.io](https://img.shields.io/crates/v/mzcore.svg)](https://crates.io/crates/mzcore)         | [![mzcore documentation](https://docs.rs/mzcore/badge.svg)](https://docs.rs/mzcore)                               |\n| 🦀 mzannotate | [![Crates.io](https://img.shields.io/crates/v/mzannotate.svg)](https://crates.io/crates/mzannotate) | [![mzannotate documentation](https://docs.rs/mzannotate/badge.svg)](https://docs.rs/mzannotate)                   |\n| 🦀 mzalign    | [![Crates.io](https://img.shields.io/crates/v/mzalign.svg)](https://crates.io/crates/mzalign)       | [![mzalign documentation](https://docs.rs/mzalign/badge.svg)](https://docs.rs/mzalign)                            |\n| 🦀 imgt       | [![Crates.io](https://img.shields.io/crates/v/imgt.svg)](https://crates.io/crates/imgt)             | [![imgt documentation](https://docs.rs/imgt/badge.svg)](https://docs.rs/imgt)                                     |\n| 🦀 mzident    | [![Crates.io](https://img.shields.io/crates/v/mzident.svg)](https://crates.io/crates/mzident)       | [![mzident documentation](https://docs.rs/mzident/badge.svg)](https://docs.rs/mzident)                            |\n| 🦀 mzcv       | [![Crates.io](https://img.shields.io/crates/v/mzcv.svg)](https://crates.io/crates/mzcv)             | [![mzcv documentation](https://docs.rs/mzcv/badge.svg)](https://docs.rs/mzcv)                                     |\n| 🐍 rustyms-py | [![PyPI version](https://badge.fury.io/py/rustyms.svg)](https://badge.fury.io/py/rustyms)           | [![Python Docs](https://readthedocs.org/projects/rustyms/badge/?version=latest)](https://rustyms.readthedocs.io/) |\n\n## Features\n\n- mzcore\n  - Read [ProForma](https://github.com/HUPO-PSI/ProForma) sequences (complete 2.0 and nearly complete 2.1)\n  - Extensive use of [uom](https://docs.rs/uom/latest/uom/) for compile time unit checking\n  - Exhaustively fuzz tested for reliability (using [cargo-afl](https://crates.io/crates/cargo-afl))\n  - Extensive support for glycans, including generating bitmap and vector images\n- mzannotate\n  - Generate theoretical fragments with control over the fragmentation model from any ProForma peptidoform\n    - Complex features supported: chimeric spectra, cross-links (also disulfides), modifications of unknown position\n    - Generate peptide backbone (a, b, c, x, y, and z) and satellite ion fragments (d, v, and w)\n    - Generate glycan fragments (B, Y, and internal fragments)\n  - Integrated with [mzdata](https://crates.io/crates/mzdata)\n  - Read and write [mzSpecLib](https://www.psidev.info/mzspeclib) and [mzPAF](https://www.psidev.info/mzpaf)\n  - Match spectra to the generated fragments\n- mzalign\n  - [Align peptides based on mass](https://pubs.acs.org/doi/10.1021/acs.jproteome.4c00188)\n  - Consecutive alignment of one sequence on a stretch of multiple sequences\n  - Indexed alignment for fast alignments for big datasets\n  - Multiple sequence alignment based on the same mass-based alignment \n- imgt\n  - Fast access to the IMGT database of antibody germlines\n- mzident\n  - Reading of multiple identified peptide file formats (amongst others: [mzTab](https://www.psidev.info/mztab-specifications), Fasta, MaxQuant, MSFragger, Novor, OPair, Peaks, and Sage)\n  - Writing of mzTab files\n- mzcv\n  - Handle ontologies both statically included and runtime updating\n- rustyms-py\n  - Python bindings are provided to several core components of the libraries. Go to the [Python documentation](https://rustyms.readthedocs.io/) for more information.\n\n## Supported formats \n\nThe final goal would be to support all open standards (or at least the ones that are (widely) used) for both reading and writing. Below is the list of formats that are currently supported.\n\n| Format | Version |  crate | Reading | Writing | Comment |\n| --- | --- | ---| --- | --- | --- |\n| [ProForma](https://github.com/HUPO-PSI/ProForma) | 2.0 \u0026 2.1 | mzcore | ✅ | ✅ | Nearly full 2.1 support (full support is planned) |\n| [mzPAF](https://www.psidev.info/mzpaf) | 1.0 |mzannotate | ✅ | ✅ | |\n| [mzSpecLib](https://www.psidev.info/mzspeclib) | 1.0 | mzannotate | ✅ | ✅ | Not all metadata is used |\n| FASTA | - | mzident | ✅ | ❌ | |\n| [mzTab](https://www.psidev.info/mztab-specifications) | 1.0 | mzident | ✅ | ✅ | Not all metadata is accessible, peptides and small molecules are ignored |\n| [Spectrum Sequence List (SSL)](https://skyline.ms/home/software/BiblioSpec/wiki-page.view?name=BiblioSpec%20input%20and%20output%20file%20formats) | - | mzident | ✅ | ❌ | Small molecules are ignored |\n\nFor raw data related formats (MGF/mzML/USI) see [mzdata](https://crates.io/crates/mzdata).\n\nThese formats are envisioned to have support for. Open an issue if you have a need for these or if you have some thoughts on the implementation. PRs to add support for these are also very welcome. Regardless of inclusion in this list any (open) standard can be suggested for inclusion.\n\n| Format | Version |  crate | Comment |\n| --- | --- | ---| --- | \n| [mzIdentML](https://www.psidev.info/peff) | 1.3 | mzident | Including support for cross-linked identifications and mzSpecLib like annotated spectra |\n| [PEFF](https://www.psidev.info/mzidentml) | 1.0 | mzident |  |\n\n# Folder organisation\n\n## mzcore/mzalign/mzannotate/mzcv/mzident/imgt\n\nThese are the main libraries. This contains all source code, databases (Unimod etc) and example data.\n\n## examples\n\nSome examples on how to use the libraries provided here, see the readme file in the examples themselves for more details.\n\n## fuzz\n\nThe harness to fuzz test the libraries for increased stability, see the readme for more details.\n\n## rustyms-py\n\nThis Rust library provides python bindings (using pyO3) for rustyms.\n\n## rustyms-generate-databases\n\nUsing the `rustyms-generate-databases` the definitions for the elemental data can be updated. See the readme on the download locations for all databases. Then run `cargo run -p rustyms-generate-databases` (from the root folder of this repository).\n\n## mzcore-update\n\nUsing the `mzcore-update` the modification databases can be updated. All databases expect RESID will be downloaded and updated. For RESID download the file `ftp://ftp.proteininformationresource.org/pir_databases/other_databases/resid/RESIDUES.XML` and place this at `mzcore-update/data/RESID.xml`, a version is already provided there are as RESID is not developed any more you likely do not need to download the file. Then run `cargo run --releases -p mzcore-update` (from the root folder of this repository).\n\n## imgt-update\n\nUsing the `imgt-update` the definitions for the germlines can be updated. Put the imgt.dat.Z file in the `imgt-update/data` directory and unpack it (this can be downloaded from https://www.imgt.org/download/LIGM-DB/imgt.dat.Z). Then run `cargo run --release -p imgt-update` (from the root folder of this repository).\n\n# Contributing\n\nAny contribution is welcome (especially adding/fixing documentation as that is very hard to do as main developer).","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frusteomics%2Fmzcore","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frusteomics%2Fmzcore","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frusteomics%2Fmzcore/lists"}