diff --git a/assets/css/styles_override.css b/assets/css/styles_override.css index 1c48fd7..ef8a8b8 100644 --- a/assets/css/styles_override.css +++ b/assets/css/styles_override.css @@ -1,95 +1,258 @@ -#backtotop a:after { - content: "⇧"; +/* Back to top – colour override to match footer theme */ +#backtotop a { + background-color: #0b214a; + border: 2px solid rgba(255, 255, 255, 0.25); } + +#backtotop.visible a:hover { + background-color: #1a3a7a; +} + .hero-title-content { - max-width: 1200px; - margin: 1vh auto; + max-width: 1200px; + margin: 1vh auto; } .hero-logo { - max-height: 200px; + max-height: 200px; } .navbar.is-fresh .navbar-item.has-dropdown .navbar-link { - color: var(--colorPrimaryDark); + color: var(--colorPrimaryDark); } .navbar.is-fresh .navbar-brand img { - max-height: 50px !important; - height: 50px; + max-height: 50px !important; + height: 50px; } @media only screen and (max-width: 850px) { - .social-media-icons { - width: 100%; - } + .social-media-icons { + width: 100%; + } } @media only screen and (max-width: 600px) { - .hero-logo { - max-height: 150px; - } + .hero-logo { + max-height: 150px; + } } @media only screen and (max-width: 400px) { - .hero-logo { - max-height: 120px; - } + .hero-logo { + max-height: 120px; + } } @media only screen and (max-width: 320px) { - .hero-logo { - max-height: 100px; - } + .hero-logo { + max-height: 100px; + } } -/* Footer */ -@media (max-width: 850px){ - .footer-column > ul.link-list { - padding-left: unset; - } +/* ============================================= + FOOTER — REDESIGN + ============================================= */ - .footer-column { - padding-left: unset; - } +.footer-redesign { + background-color: #0b214a; + color: #e2e8f0; + padding: 3rem 0 0; + font-family: inherit; } -.footer-logo-column { - display: flex; - justify-content: flex-start; - flex-direction: column; - padding: 0.5rem; +/* ---- Inner wrapper (brand + link grid) ---- */ +.footer-inner { + max-width: 1200px; + margin: 0 auto; + padding: 0 2rem 2.5rem; + display: flex; + gap: 3rem; + align-items: flex-start; } -.footer-column { - padding-left: 30px; +/* ---- Brand block ---- */ +.footer-brand { + flex: 0 0 200px; } -.social-media-icons { - display: flex; +.footer-title { + font-size: 1.75rem; + font-weight: 800; + color: #ffffff; + margin-bottom: 1.5rem; + letter-spacing: -0.3px; } -@media (max-width: 400px) { - ul { - padding-left: 0px !important; - padding-right: 30px; - } - } +/* ---- Partner logo row ---- */ +.footer-partners { + display: flex; + flex-wrap: wrap; + gap: 1.25rem; + align-items: center; + /* Removed container-level opacity */ +} -/* Icon size slightly enlargened for footer */ -#footer .social-media-icons { - font-size: 1.5em; +.footer-partners a { + display: inline-flex; + align-items: center; + justify-content: center; + min-width: 44px; + /* Ensure touch target is large enough */ + min-height: 44px; } -#footer svg.icon { - fill: #1e87f0; +.footer-link-group ul li a:focus-visible, +.footer-socials a:focus-visible { + color: #ffffff; + outline: 2px solid rgba(255, 255, 255, 0.45); + outline-offset: 4px; } -/* For information ⓘ, when icon is missing */ -#footer .icon { - color: #1e87f0; +.footer-partners img { + max-height: 36px; + width: auto; + object-fit: contain; + filter: brightness(0) invert(1); + opacity: 0.7; + /* Individual logo is dimmed */ + transition: opacity 0.2s ease; } -.img-fit { - object-fit: contain; +.footer-partners a:hover img, +.footer-partners a:focus-visible img { + opacity: 1; + /* Lights up to full brightness on hover/focus */ +} + +/* ---- Link columns grid ---- */ +.footer-links { + flex: 1; + display: grid; + grid-template-columns: repeat(4, 1fr); + gap: 2rem; +} + +/* ---- Column heading ---- */ +.footer-group-heading { + font-size: 0.68rem; + font-weight: 700; + letter-spacing: 0.12em; + text-transform: uppercase; + color: rgba(255, 255, 255, 0.45); + margin: 0 0 0.875rem 0; + padding: 0; +} + +/* ---- Link list ---- */ +.footer-link-group ul { + list-style: none; + margin: 0; + padding: 0; +} + +.footer-link-group ul li a { + color: #c8d4e8; + text-decoration: none; + font-size: 0.9rem; + display: flex; + align-items: center; + min-height: 44px; + transition: color 0.2s ease; +} + +.footer-link-group ul li a:hover { + color: #ffffff; + text-decoration: underline; +} + +/* ---- Bottom bar ---- */ +.footer-bottom { + max-width: 1200px; + margin: 0 auto; + padding: 1.25rem 2rem; + border-top: 1px solid rgba(255, 255, 255, 0.1); + display: flex; + align-items: center; + justify-content: space-between; + flex-wrap: wrap; + gap: 1rem; +} + +/* ---- Social icons ---- */ +.footer-socials { + display: flex; + gap: 0.75rem; + align-items: center; } + +.footer-socials a { + display: inline-flex; + align-items: center; + justify-content: center; + min-width: 44px; + min-height: 44px; + color: #c8d4e8; + transition: color 0.2s ease; +} + +.footer-socials a:hover { + color: #ffffff; +} + +.footer-socials svg.icon { + width: 1.4rem; + height: 1.4rem; + fill: currentColor; +} + +/* ---- Copyright ---- */ +.footer-copyright { + color: rgba(255, 255, 255, 0.45); + font-size: 0.85rem; +} + +/* ============================================= + FOOTER — MOBILE (max-width: 768px) + ============================================= */ +@media (max-width: 768px) { + .footer-inner { + flex-direction: column; + gap: 2rem; + padding: 0 1.25rem 2rem; + } + + .footer-brand { + flex: unset; + width: 100%; + } + + .footer-partners { + flex-direction: row; + flex-wrap: wrap; + gap: 1rem; + } + + .footer-links { + width: 100%; + grid-template-columns: repeat(2, 1fr); + gap: 1.25rem 1rem; + } + + .footer-link-group ul li a { + text-align: left; + } + + .footer-bottom { + padding: 1.25rem; + flex-direction: column; + align-items: flex-start; + } +} + +/* ============================================= + UTILITIES + ============================================= */ +.img-fit { + object-fit: contain; +} \ No newline at end of file diff --git a/config.yaml b/config.yaml index 1f99991..475c084 100644 --- a/config.yaml +++ b/config.yaml @@ -139,6 +139,7 @@ languages: icon: discord quicklinks: column1: + heading: RESOURCES links: - text: Install link: https://openms.readthedocs.io/en/latest/about/installation.html @@ -147,6 +148,7 @@ languages: - text: Citing OpenMS link: /citing-openms column2: + heading: COMMUNITY links: - text: Community link: /communication @@ -155,6 +157,7 @@ languages: - text: Code of conduct link: /code-of-conduct column3: + heading: ABOUT links: - text: OpenMS Inc. link: /about @@ -163,6 +166,7 @@ languages: - text: Jobs link: /jobs column4: + heading: LEGAL links: - text: Terms of use link: /terms diff --git a/content/en/news/gsoc2025.md b/content/en/news/gsoc2025.md index c545adb..2ef20be 100644 --- a/content/en/news/gsoc2025.md +++ b/content/en/news/gsoc2025.md @@ -1,21 +1,201 @@ --- -title: GSoC 2025 – Two Projects Accepted! -authors: ["Matteo Pilz, Timo Sachsenberg"] -date: 2025-05-20 -summary: We're thrilled to announce that two OpenMS projects have been accepted for Google Summer of Code 2025! 🚀 +title: Google Summer of Code 2025 +authors: ["OpenMS Team"] +date: 2025-01-31 +summary: The OpenMS team applies as an organization for GSoC 2025 and invites the computational mass spectrometry community to join us in this effort. --- -🎉 OpenMS is part of GSoC 2025 – Two Projects Accepted! +# OpenMS Invites the Computational Mass Spectrometry Community to Join Google Summer of Code 2025! -We're thrilled to announce that two OpenMS projects have been accepted for Google Summer of Code 2025! 🚀
-A big thank you to everyone who took the time to submit a proposal. Your enthusiasm and creativity are what make open-source thrive.
-This year’s GSoC was extremely competitive, with: -- 📌 15,240 applicants from 130 countries -- 📌 23,559 proposals submitted -- 📌 185 mentoring organizations (including OpenMS!) -- 📌 2,350+ mentors and admins -- 📌 And notably, 66.3% of applicants were completely new to open source – an incredible stat that reflects the growing impact of this program. +[Google Summer of Code (GSoC) 2025](https://summerofcode.withgoogle.com) OpenMS is planning to apply as an umbrella organization and we would like to extend an invitation to other projects and groups within the computational mass spectrometry and proteomics/metabolomics communities to join us in this effort. If your project aligns with the goals of GSoC and you are interested in mentoring a student project, we encourage you to submit a short proposals by **February 7th 2025 at 23:59 UTC.** -We're proud to be part of this global community, and we’re looking forward to working with our selected contributors on advancing open mass spectrometry software. +> **Note:** Current status: We are no longer accepting project proposals from mentors. -More info: [OpenMS GSoC 2025 program page](https://summerofcode.withgoogle.com/programs/2025/organizations/openms) \ No newline at end of file +--- + +## GSoC Contributors + +- Make sure you are [eligible](https://summerofcode.withgoogle.com/get-started) to participate in GSoC 2025. +- remember the [GSOC 2025 timeline](https://developers.google.com/open-source/gsoc/timeline) +- Read the [DOs and DON'Ts document](https://opensource.googleblog.com/2011/03/dos-and-donts-of-google-summer-of-code.html) to gauge your interest in participating in this year's GSoC 2025. +- Review the list of themes and the projects available within. If you have specific questions about a project, our mentors are active on [Discord](https://discord.com/invite/4TAGhqJ7s5) and we will happily assist you. +- Follow our instructions below on how to submit a proposal to us. + +--- + +## Submitting an Application: + +- Proposal must be uploaded to the GSoC webpage before the official deadline. Ensure your CV and contact information are included in the proposal document. +- We highly recommend to get in touch with the mentors before submitting your proposal. + +--- + +## Available Projects + +## Theme A) Visualization and User-Friendly Tools + +### 1) Peptide m/z Calculator + +**Proposed Mentors:** Arslan Siraj, Tom Müller +**Skills:** Python, Git, Streamlit +**Estimated Project Length:** 90 hours | **Difficulty:** Easy + +In mass spectrometry (MS) proteomics and metabolomics, one common task is to compute the mass-to-charge (m/z) ratio of the analyte so that it can be located in a spectrum. Although the calculation is computationally simple and can easily be performed by the pyopenms package, this simple, commonly used calculation can be cumbersome for wet lab scientists with little programming experience. In this project the student will use the new [OpenMS-WebApps template](https://pubs.acs.org/doi/10.1021/acs.jproteome.4c00872) to create a simple GUI to allow researchers to perform this calculation. This calculation can be performed using pyopenms as demonstrated [pyOpenMS peptide and protein guide](https://pyopenms.readthedocs.io/en/latest/user_guide/peptides_proteins.html) Furthermore, this outcome web application further can be extend to other MS calculations tasks (e.g. theoretical spectra generation etc.) for quick interpretation of MS data. + +--- + +### 2) Write a generic visualization app for mzQC + +**Proposed Mentors:** Chris Bielow, Arslan Siraj +**Skills:** Visualization, Controlled Vocabularies, Python|R +**Estimated Project Length:** 175 hours | **Difficulty:** Easy to Medium + +Adoption and public exposure of quality control in mass-spectrometry (MS) has gained increasing traction in recent years. The Proteomics Standard Initiative (PSI) has developed an open exchange format +named [mzQC](https://hupo-psi.github.io/mzQC/), which aims to foster capturing, exchanging and archiving quality control related data across all MS-based OMICS, such as proteomics, metabolomics and lipidomics. +Currently, there exists no package which is capable of visualizing and summarizing the content of any given mzQC file (e.g. as obtained from a publication's supplemental material). + +Tasks: + +1. Pick a visualization framework of your choice (e.g. Streamlit or R Shiny) and write code (Python or R) to allow a user to explore the content of a given (uploaded) mzQC file. +2. Visualization could be a textual summary as well as (interactive) plots for the QC data contained within the mzQC file. Depending on the metrics properties, automated plot types should be chosen. + +--- + +### 3) Improving PyOpenMS Tool Parameter Accessibility + +**Proposed Mentors:** Tom Müller, Joshua Charkow +**Skills:** Python, Cython, Git +**Estimated Project Length:** 175 hours | **Difficulty:** Medium + +PyOpenMS provides Python bindings for OpenMS, a powerful open-source C++ library for computational mass spectrometry. These bindings are automatically generated using Cython and the autowrap package. While C++ developers prioritize performance and fine-grained control, Python developers emphasize readability and ease of use. Simply exposing a C++ API to Python often results in an interface that feels unnatural to Python users. +One area where this is particularly evident in PyOpenMS is the handling of parameters in OpenMS algorithms. Currently, retrieving and modifying parameters requires multiple steps: instantiating an object from an algorithm class, calling a method to obtain parameters, modifying them through a dedicated ‘Param’ class, and applying them via a setter method. This workflow is complex and does not align with Pythonic conventions. +The task is to improve the usability of PyOpenMS by enabling parameter setting directly via keyword arguments when instantiating objects of an algorithm class and making parameters easily accessible through the help() function for interactive exploration. + +Tasks: + +1. Modify the Cython binding for function type checking and conversion. +2. Add Pythonic helper functions for type checking and conversion. +3. Port the C++ tool documentation to Python. + +--- + +## Theme B) Data Formats and Interoperability + +### 1) Pythonic mzML handling + +**Proposed Mentors:** Joshua Charkow, Tom Müller +**Skills:** Python, Git +**Estimated Project Length:** 175 hours | Difficulty: Easy + +Liquid-Chromatography-Mass Spectrometry data is commonly stored in sparse multidimensional data containing billions of peaks and can easily exceed a few gigabytes when compressed on disk. Python is commonly used in the field for exploratory analysis and development of novel data processing algorithms. The most common format for storing mass spectrometry data is in .mzML, an XML based format Although numerous libraries exist for parsing .mzML files in Python, an open source XML based format most commonly used in the field, each library contains its own UI which might not be intuitive for data scientists just starting with mass spectrometry. Recently, the [alphatims](https://github.com/MannLabs/alphatims) package was introduced which stores mass spectrometry data in a pandas dataframe like structure making it quite accessible data manipulation and exploration. Notably, this format takes advantage of python’s slicing syntax making it intuitive for all data scientists. However, this package only supports “.d” files which are vendor specific and not applicable to the broader mass spectrometry community. In this project, the student will create a “pythonic” .mzML file reader inspired by alphatims by extending the current available .mzML python parsers. + +Tasks: + +1. Leaverage the pyopenms documentation to get familiar with pyopenms .mzML file reading. +2. Create a class which allows for splicing of the .mzML file across various dimensions and returning a DataFrame object. +3. Benchmarking this class on various .mzML files for read times and memory usage. +4. creating a python package and releasing it on PyPI. + +--- + +### 2) Write a C++ library to read/write mzQC + +**Proposed Mentors:** Chris Bielow, Nils Hoffmann +**Skills:** C++, Controlled Vocabularies, JSON, CMake, GitHub CI +**Estimated Project Length:** 350 hours | **Difficulty:** Easy to Medium + +Adoption and public exposure of quality control in mass-spectrometry (MS) has gained increasing traction in recent years. The Proteomics Standard Initiative (PSI) has developed an open exchange format +named [mzQC](https://hupo-psi.github.io/mzQC/),which aims to foster capturing, exchanging and archiving quality control related data across all MS-based OMICS, such as proteomics, metabolomics and lipidomics. +Currently, there exist core libraries to read and write mzQC in Python, R, and Java. See [MS-Quality-Hub](https://github.com/MS-Quality-Hub). + +Tasks: + +1. implement a new mzQC Core library in C++ which supports reading/writing of mzQC +2. publish the library on GitHub under a permissive license (BSD-3clause) as a subproject of [MS-Quality-Hub](https://github.com/MS-Quality-Hub). +3. write class/unit tests and run them using GithubActions +4. integrate your library into OpenMS (incl. adaptation of the build system to include your library) and substitute existing code to create an mzQC + +--- + +### 3) Integrate Apache Parquet into OpenMS Build System + +**Proposed Mentors:** Timo Sachsenberg, Samuel Wein +**Skills:** CMake, GitHub CI, C++, Python +**Estimated Project Length:** 350 hours | **Difficulty:** Medium + +Proteomics and metabolomics mass spectrometry studies are generating datasets of unprecedented size as they scale to include more and more samples. Managing and processing these large datasets efficiently requires robust and scalable data handling solutions to make results readily available for downstream processing tasks like machine learning. + +The task is to integrate Apache Parquet, a columnar storage format, into OpenMS as a fundamental step toward enabling faster data processing, reducing memory usage, and improving scalability. The integration will involve: + +1. Updating the OpenMS build system with new CMake configurations. +2. Developing comprehensive tests to validate functionality and performance. +3. Adapting CI/CD pipelines for macOS, Linux, and Windows to ensure cross-platform compatibility. + +--- + +### 4) Universal Mass Spectrometry Data Processing in Python + +**Proposed Mentors:** Wout Bittremieux, Janne Heirman +**Skills:** Python, R, GitHub CI +**Estimated Project Length:** 350 hours | Difficulty: Medium + +A major challenge in mass spectrometry (MS) data analysis is the lack of interoperability between different open-source software tools. While various data processing packages in Python exist, many of these suffer from development inefficiencies due to having to implement duplicate functionality. + +This project aims to address these inefficiences by integrating leading open-source MS processing and visualization tools, such as spectrum_utils, pyOpenMS, Pyteomics, and matchms. The goal is to seamlessly connect these tools, harnessing similar internal MS data representations across different tools, allowing users to easily move between different software tools without redundant re-implementation of core functionality. + +To achieve this, we will develop translation layers between different MS tools, enabling smooth data exchange both within and across programming languages; optimize existing algorithms to handle the ever-growing size of MS datasets efficiently, ensuring faster and more scalable data processing; and create a unified workflow that makes MS analysis more intuitive, accessible, and powerful for researchers worldwide. + +By building these bridges, this project will empower scientists to focus on discoveries rather than data format headaches, fostering collaboration and innovation across the mass spectrometry community. + +--- + +## Theme C) Machine Learning and Advanced Computational Methods + +### 1) Diffusion Deconvolution of DIA-MS/MS Data (D^4 | dquartic) + +**Proposed Mentors:** Justin Sing, Leon Xu +**Skills:** Python, PyTorch, Deep Learning +**Estimated Project Length:** 350 hours | **Difficulty:** Medium to Advanced + +Diffusion models have revolutionized generative AI, excelling in tasks like image enhancement and speech separation. This project applies similar principles to Data-Independent Acquisition Mass Spectrometry (DIA-MS)—a technique that captures complex, overlapping signals requiring deconvolution. This project offers an exciting opportunity to apply deep learning & generative AI techniques to a real-world bioinformatics challenge. If you enjoy working on AI models for signal processing, deconvolution, and scientific applications, we’d love to have you on board! + +Problem: DIA-MS produces two correlated data types: +MS1: A low-resolution "overview" (analogous to a blurry image or background noise in audio). +MS2: Detailed but highly multiplexed signals (akin to overlapping voices in an audio recording). + +The goal is to train a diffusion model to deconvolve and denoise MS2 signals, using MS1 as a guiding signal—similar to how Stable Diffusion refines blurry images or Whisper (OpenAI) separates speech from noise. + +Current Progress & Next Steps: + +A baseline U-Net-based diffusion model already shows promising results on synthetic mixtures of DIA-MS data. The next phase is to: + +a. Train the model on raw DIA-MS data for direct peptide signal separation. +b. Integrate MS1 and MS2 peptide feature masks (from OpenSwath, DIA-NN, or Spectronaut) as conditioning signals—similar to how segmentation masks guide image super-resolution. +c. Investigate pseudo-DDA spectra generation (e.g., diaUMPIRE, diaTracer) by incorporating intermediate deconvolution steps. + +Tasks: + +1. Optimize Data Loading: Implement efficient pipelines for handling large-scale DIA-MS data. +2. Improve Memory Efficiency: Apply quantization to reduce model footprint, similar to vision models. +3. Enhance Conditioning Signals: Refine how the model extracts targeted peptide signals from MS1/MS2 data. +4. Explore Alternative Architectures: Test transformer-based backbones (e.g., ViTs) for potential performance gains. + +--- + +### 2) Optimizing Casanovo for Fast and Accurate De Novo Peptide Sequencing + +**Proposed Mentors:** William Stafford Noble, Wout Bittremieux +**Skills:** Python, PyTorch, deep learning, profiling +**Estimated Project Length:** 350 hours | Difficulty: Advanced + +De novo peptide sequencing is a powerful approach for molecular discovery by deciphering peptides directly from tandem mass spectrometry (MS/MS) data. Casanovo is a state-of-the-art AI tool that treats de novo sequencing like a language translation problem—converting sequences of peaks in an MS/MS spectrum into amino acid sequences, just like translating one language into another. Powered by a transformer deep neural network, Casanovo has already revolutionized peptide sequencing, but its inference speed remains a bottleneck, particularly during beam search decoding, the step responsible for selecting the best peptide candidates. + +By making Casanovo faster and more efficient, we can unlock new biological insights at an unprecedented scale. Whether it's identifying unknown proteins, uncovering disease biomarkers, or advancing drug discovery, your contributions will have a real-world impact on science and healthcare. If you love machine learning, performance optimization, and AI-driven discovery, this project is your chance to make a difference in computational biology! + +This project aims to optimize Casanovo's speed, enabling researchers to process larger datasets, make new discoveries faster, and push the boundaries of proteomics research. You will: + +a. Profile performance bottlenecks in Casanovo's inference pipeline to pinpoint slowdowns. +b. Optimize beam search decoding and other key computations to improve runtime efficiency. +c. Enhance scalability, ensuring Casanovo can handle the growing demands of big-data proteomics. + +--- diff --git a/layouts/partials/footer.html b/layouts/partials/footer.html index 6eb5884..d219add 100644 --- a/layouts/partials/footer.html +++ b/layouts/partials/footer.html @@ -1,60 +1,68 @@ -{{- $footer := .Site.Params.footer }} -{{- $title := index $footer "title" }} -{{- $deployedBy := index $footer "deployedBy" }} +{{- $footer := .Site.Params.footer }} +{{- $title := index $footer "title" }} +{{- $deployedBy := index $footer "deployedBy" }} {{- $sponsorLogo1 := index $footer "sponsorLogo1" }} {{- $sponsorLogo2 := index $footer "sponsorLogo2" }} {{- $sponsorLogo3 := index $footer "sponsorLogo3" }} -{{- $quickLinks := index $footer "quicklinks" }} +{{- $quickLinks := index $footer "quicklinks" }} {{- $socialMedia := index $footer "socialmedia" }} -{{- $logo := index $footer "logo" }} -{{- $navbarLogo := .Site.Params.navbarlogo }} - \ No newline at end of file