{"id":44469414,"url":"https://github.com/wilhelm-lab/dlomix","last_synced_at":"2026-02-12T21:04:48.927Z","repository":{"id":43095530,"uuid":"406410117","full_name":"wilhelm-lab/dlomix","owner":"wilhelm-lab","description":"Python framework for Deep Learning in Proteomics","archived":false,"fork":false,"pushed_at":"2026-02-07T16:08:02.000Z","size":390221,"stargazers_count":38,"open_issues_count":5,"forks_count":11,"subscribers_count":6,"default_branch":"main","last_synced_at":"2026-02-08T00:49:05.879Z","etag":null,"topics":["deep-learning","framework","machine-learning","mass-spectrometry","peptide-sequences","peptides","proteomics"],"latest_commit_sha":null,"homepage":"https://dlomix.readthedocs.io/","language":"Jupyter Notebook","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/wilhelm-lab.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2021-09-14T14:53:04.000Z","updated_at":"2025-12-31T09:15:59.000Z","dependencies_parsed_at":"2023-02-16T01:45:17.774Z","dependency_job_id":"abf104e0-a51c-45e5-b1eb-76f6e676c2bc","html_url":"https://github.com/wilhelm-lab/dlomix","commit_stats":{"total_commits":157,"total_committers":4,"mean_commits":39.25,"dds":"0.47770700636942676","last_synced_commit":"d256a271c9ee411855beb7cf7065b93dbcb11fcf"},"previous_names":[],"tags_count":19,"template":false,"template_full_name":null,"purl":"pkg:github/wilhelm-lab/dlomix","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wilhelm-lab%2Fdlomix","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wilhelm-lab%2Fdlomix/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wilhelm-lab%2Fdlomix/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wilhelm-lab%2Fdlomix/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/wilhelm-lab","download_url":"https://codeload.github.com/wilhelm-lab/dlomix/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wilhelm-lab%2Fdlomix/sbom","scorecard":{"id":1240038,"data":{"date":"2025-11-17","repo":{"name":"github.com/wilhelm-lab/dlomix","commit":"2341f5b60e3296d52e82c59525e8476dd229a976"},"scorecard":{"version":"v5.4.1-0.20251120163002-1d52e157fc46","commit":"1d52e157fc46eb48937ec6ea11adbeff64595731"},"score":4.8,"checks":[{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/1d52e157fc46eb48937ec6ea11adbeff64595731/docs/checks.md#dangerous-workflow"}},{"name":"Code-Review","score":3,"reason":"Found 4/11 approved changesets -- score normalized to 3","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/1d52e157fc46eb48937ec6ea11adbeff64595731/docs/checks.md#code-review"}},{"name":"Maintained","score":3,"reason":"3 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 3","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/1d52e157fc46eb48937ec6ea11adbeff64595731/docs/checks.md#maintained"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/build.yaml:1","Warn: no topLevel permission defined: .github/workflows/pypi.yaml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/1d52e157fc46eb48937ec6ea11adbeff64595731/docs/checks.md#token-permissions"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/1d52e157fc46eb48937ec6ea11adbeff64595731/docs/checks.md#binary-artifacts"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/1d52e157fc46eb48937ec6ea11adbeff64595731/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/1d52e157fc46eb48937ec6ea11adbeff64595731/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/1d52e157fc46eb48937ec6ea11adbeff64595731/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/1d52e157fc46eb48937ec6ea11adbeff64595731/docs/checks.md#license"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/1d52e157fc46eb48937ec6ea11adbeff64595731/docs/checks.md#vulnerabilities"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/1d52e157fc46eb48937ec6ea11adbeff64595731/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/1d52e157fc46eb48937ec6ea11adbeff64595731/docs/checks.md#branch-protection"}},{"name":"Packaging","score":10,"reason":"packaging workflow detected","details":["Info: Project packages its releases by way of GitHub Actions.: .github/workflows/pypi.yaml:11"],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/1d52e157fc46eb48937ec6ea11adbeff64595731/docs/checks.md#packaging"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build.yaml:19: update your workflow using https://app.stepsecurity.io/secureworkflow/wilhelm-lab/dlomix/build.yaml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build.yaml:21: update your workflow using https://app.stepsecurity.io/secureworkflow/wilhelm-lab/dlomix/build.yaml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/pypi.yaml:17: update your workflow using https://app.stepsecurity.io/secureworkflow/wilhelm-lab/dlomix/pypi.yaml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/pypi.yaml:19: update your workflow using https://app.stepsecurity.io/secureworkflow/wilhelm-lab/dlomix/pypi.yaml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/pypi.yaml:30: update your workflow using https://app.stepsecurity.io/secureworkflow/wilhelm-lab/dlomix/pypi.yaml/main?enable=pin","Warn: containerImage not pinned by hash: .devcontainer/Dockerfile:1: pin your Docker image by updating python:3.9-slim to python:3.9-slim@sha256:2d97f6910b16bd338d3060f261f53f144965f755599aab1acda1e13cf1731b1b","Warn: pipCommand not pinned by hash: .devcontainer/Dockerfile:8-9","Warn: pipCommand not pinned by hash: .devcontainer/Dockerfile:8-9","Warn: pipCommand not pinned by hash: .github/workflows/pypi.yaml:24","Warn: pipCommand not pinned by hash: .github/workflows/pypi.yaml:25","Info:   0 out of   4 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   1 third-party GitHubAction dependencies pinned","Info:   0 out of   1 containerImage dependencies pinned","Info:   0 out of   4 pipCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/1d52e157fc46eb48937ec6ea11adbeff64595731/docs/checks.md#pinned-dependencies"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 30 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/1d52e157fc46eb48937ec6ea11adbeff64595731/docs/checks.md#sast"}}]},"last_synced_at":"2025-11-28T07:18:08.152Z","repository_id":43095530,"created_at":"2025-11-28T07:18:08.153Z","updated_at":"2025-11-28T07:18:08.153Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29381053,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-12T20:34:40.886Z","status":"ssl_error","status_checked_at":"2026-02-12T20:23:00.490Z","response_time":55,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["deep-learning","framework","machine-learning","mass-spectrometry","peptide-sequences","peptides","proteomics"],"created_at":"2026-02-12T21:04:48.283Z","updated_at":"2026-02-12T21:04:48.920Z","avatar_url":"https://github.com/wilhelm-lab.png","language":"Jupyter Notebook","funding_links":[],"categories":[],"sub_categories":[],"readme":"# DLOmix\n\n[![Docs](https://readthedocs.org/projects/dlomix/badge/?version=stable)](https://dlomix.readthedocs.io/en/stable/?badge=stable)\n[![Build](https://github.com/wilhelm-lab/dlomix/actions/workflows/build.yaml/badge.svg)](https://github.com/wilhelm-lab/dlomix/actions/workflows/build.yaml)\n[![PyPI](https://github.com/wilhelm-lab/dlomix/actions/workflows/pypi.yaml/badge.svg)](https://github.com/wilhelm-lab/dlomix/actions/workflows/pypi.yaml)\n\n**DLOmix** is a Python framework for Deep Learning in Proteomics. DLOmix provides multi-backend support for both **TensorFlow/Keras** and **PyTorch**, allowing researchers to choose their preferred deep learning framework while maintaining identical APIs and functionality. The dataset module is built upon HuggingFace `datasets` and can provide both TensorFlow and PyTorch tensors.\n\n**Note:Multi-backend support was introduced in `dlomix==0.2`. Earlier versions supported TensorFlow/Keras only. **\n\nThe PyTorch implementation was largely introduced during a hackathon as part of the EuBIC Developer Meeting 2025. We appreciate the efforts and contributions of the team who joined the hackathon and the efforts of the EuBIC team and organizers.\n\n**\n\n## Backend Selection\n\nDLOmix automatically detects and uses the appropriate backend based on your environment setup. You can control which backend to use through the `DLOMIX_BACKEND` environment variable:\n\n### TensorFlow Backend (Default)\n```bash\n# Set TensorFlow as backend (default)\nexport DLOMIX_BACKEND=tensorflow\n# or\nexport DLOMIX_BACKEND=tf\n\n# Install DLOmix with TensorFlow\npip install dlomix[tensorflow]\n\n# Or install tensorflow separately (existing installation), then only install dlomix\npip install dlomix\n```\n\n### PyTorch Backend\n```bash\n# Set PyTorch as backend\nexport DLOMIX_BACKEND=pytorch\n# or\nexport DLOMIX_BACKEND=torch\n# or\nexport DLOMIX_BACKEND=pt\n\n# Install DLOmix with PyTorch support\npip install dlomix[pytorch]\n\n# Or install pytorch separately (existing installation), then only install dlomix\npip install dlomix\n```\n\n**Note**: The backend must be set **before** importing DLOmix. If no backend is specified, DLOmix defaults to TensorFlow with a user warning.\n\n## Usage\nExperiment a simple retention time prediction use-case using Google Colab \u0026nbsp;\u0026nbsp; [![Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/wilhelm-lab/dlomix/blob/develop/notebooks/Example_RTModel_Walkthrough_colab.ipynb)\n\nA version that includes experiment tracking with [Weights and Biases](https://www.wandb.ai) is available here \u0026nbsp;\u0026nbsp; [![Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/wilhelm-lab/dlomix/blob/develop/notebooks/Example_RTModel_Walkthrough_colab-weights-and-biases.ipynb)\n\n**Resources Repository**\n\nMore learning resources can be found in the [dlomix-resources](https://github.com/wilhelm-lab/dlomix-resources) repository.\n\n## Installation\n\n### Quick Start\n```bash\n# Basic installation\n# TensorFlow and PyTorch not installed, please install separately\npip install dlomix\n\n# Install DLOmix and additionally install specific backend\npip install dlomix[tensorflow]  # TensorFlow backend\npip install dlomix[pytorch]     # PyTorch backend\n\n```\n\n\n**General Package Overview**\n\nDLOmix provides a unified API across both TensorFlow and PyTorch backends:\n\n-  `data`: structures for modeling input data, processing functions, and feature extractions based on Hugging Face datasets `Dataset` and `DatasetDict` (backend-agnostic)\n-  `eval`: classes for evaluating models and reporting results (backend-specific implementations)\n-  `layers`: custom layers for building models\n   - TensorFlow: based on `tf.keras.layers.Layer`\n   - PyTorch: based on `torch.nn.Module`\n-  `losses`: custom loss functions\n   - TensorFlow: compatible with `model.fit()`\n   - PyTorch: compatible with standard PyTorch training loops\n- `models`: common model architectures for relevant use-cases\n   - TensorFlow: based on `tf.keras.Model`\n   - PyTorch: based on `torch.nn.Module`\n-  `pipelines`: high-level pipeline implementations (backend-agnostic)\n-  `reports`: classes for generating reports (backend-agnostic)\n-  `constants.py`: constants and configuration values\n\n**Available Models by Backend**\n\n| Model | TensorFlow/Keras | PyTorch |\n|-------|------------|---------|\n| `PrositRetentionTimePredictor` [1] | ✅ | ✅ |\n| `PrositIntensityPredictor` [1] | ✅ | ✅ |\n| `ChargeStatePredictor` | ✅ | ✅ |\n| `DetectabilityModel` [4] | ✅ | ✅ |\n| `DeepLCRetentionTimePredictor` [2,3] | ✅ | ❌ |\n| `Ionmob` [5] | ❌ | ✅ |\n| `PIMMS-CF` [6] | ❌ | ⚠ (experimental) |\n\n\n\n**Use-cases**\n\n- Retention Time Prediction:\n    - a regression problem where the retention time of a peptide sequence is to be predicted.\n\n- Fragment Ion Intensity Prediction:\n    - a multi-output regression problem where the intensity values for fragment ions are predicted given a peptide sequence along with some additional features.\n\n- Peptide Detectability (Pfly) [4]:\n    - a multi-class classification problem where the detectability of a peptide is predicted given the peptide sequence.\n\n\n## Developing DLOmix\nTo install dlomix, along with the tools needed to develop and run tests, run the following command in your virtualenv:\n```bash\n$ pip install -e .[dev]\n```\n\n\n## References\n\n[**Prosit**]\n\n[1] Gessulat, S., Schmidt, T., Zolg, D. P., Samaras, P., Schnatbaum, K., Zerweck, J., ... \u0026 Wilhelm, M. (2019). Prosit: proteome-wide prediction of peptide tandem mass spectra by deep learning. Nature methods, 16(6), 509-518.\n\n[**DeepLC**]\n\n[2] DeepLC can predict retention times for peptides that carry as-yet unseen modifications\nRobbin Bouwmeester, Ralf Gabriels, Niels Hulstaert, Lennart Martens, Sven Degroeve\nbioRxiv 2020.03.28.013003; doi: 10.1101/2020.03.28.013003\n\n[3] Bouwmeester, R., Gabriels, R., Hulstaert, N. et al. DeepLC can predict retention times for peptides that carry as-yet unseen modifications. Nat Methods 18, 1363–1369 (2021). https://doi.org/10.1038/s41592-021-01301-5\n\n[**Detectability - Pfly**]\n\n[4] Abdul-Khalek, N., Picciani, M., Wimmer, R., Overgaard, M. T., Wilhelm, M., \u0026 Gregersen Echers, S. (2024). To fly, or not to fly, that is the question: A deep learning model for peptide detectability prediction in mass spectrometry. bioRxiv, 2024-10.\n\n[**IonMob**]\n\n[5] Teschner, D., Gomez-Zepeda, D., Declercq, A., Łącki, M. K., Avci, S., Bob, K., ... \u0026 Hildebrandt, A. (2023). Ionmob: a Python package for prediction of peptide collisional cross-section values. Bioinformatics, 39(9), btad486.\n\n[**PIMMS**]\n\n[6] Webel, H., Niu, L., Nielsen, A.B. et al.\nImputation of label-free quantitative mass spectrometry-based proteomics data using self-supervised deep learning.\nNat Commun 15, 5405 (2024).\nhttps://doi.org/10.1038/s41467-024-48711-5\n\n\n### Credit\n\n**PyTorch Implementation Hackathon during EuBIC Developer Meeting 2025**\n\n- Ayla Schröder\n- Henry Webel\n- David Teschner\n- Stan Reinders\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwilhelm-lab%2Fdlomix","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwilhelm-lab%2Fdlomix","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwilhelm-lab%2Fdlomix/lists"}