Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
88 commits
Select commit Hold shift + click to select a range
0f72936
feat: Add initial project structure and example files for Boltz Hacka…
tobiasploetz Aug 15, 2025
6009028
feat: Add chain_id field to protein and ligand data structures and up…
tobiasploetz Aug 15, 2025
23105d1
chore: Update dependencies section in README and migrate from require…
tobiasploetz-merck Aug 15, 2025
a2c8765
feat: Add Dockerfile and environment.yml for containerized setup and …
tobiasploetz-merck Aug 18, 2025
803a288
fix: prediction dir, and some debugging options
tobiasploetz-merck Aug 19, 2025
279bf67
fix: Update submission directory path in Docker script and adjust per…
tobiasploetz-merck Aug 19, 2025
30badb6
feat: Implement MSA computation script for protein sequences using Co…
tobiasploetz-merck Aug 19, 2025
adbf034
feat: Add msa_dir parameter to functions for computing relative paths…
tobiasploetz-merck Aug 20, 2025
fa0a0dd
fix: Remove unused MSA server flag and update relative path computati…
tobiasploetz-merck Aug 20, 2025
a481450
fix: Add ground_truth structure to protein_complex and protein_ligand…
tobiasploetz-merck Aug 20, 2025
1750453
feat: Add script for computing MSAs from protein sequences in JSONL f…
tobiasploetz-merck Aug 20, 2025
a1f677c
fix: Remove chain_id from protein and ligand structures in JSON files…
tobiasploetz-merck Aug 20, 2025
1b64335
feat: Add modifications field to Protein class and update YAML output…
tobiasploetz-merck Aug 21, 2025
f0b1bab
refactor: Organize imports and enhance class structure in hackathon_a…
tobiasploetz-merck Aug 21, 2025
353381e
refactor: Move everything into hackathon dir, add
tobiasploetz-merck Aug 21, 2025
04c90bc
refactor: Update TaskType class definition and enhance MSA processing…
tobiasploetz-merck Aug 21, 2025
30ee2ab
refactor: Enhance argument parsing and streamline input handling in p…
tobiasploetz-merck Aug 22, 2025
33890b4
refactor: msa naming by datapoint Id
tobiasploetz-merck Aug 22, 2025
2703487
feat: Add parallel CAPRI-Q evaluation runner with Docker support
tobiasploetz-merck Aug 22, 2025
49a2c85
feat: Add group ID argument for submission directory and update permi…
tobiasploetz-merck Aug 22, 2025
ca97436
refactor: Streamline protein complex and ligand prediction functions,…
tobiasploetz-merck Aug 22, 2025
2b573c6
refactor: Update comments for clarity in participant modification sec…
tobiasploetz-merck Aug 22, 2025
54c552c
refactor: Enhance function documentation and add CLI argument handlin…
tobiasploetz-merck Aug 22, 2025
faea77a
refactor: Simplify post-processing functions by removing redundant va…
tobiasploetz-merck Aug 22, 2025
f189364
refactor: Update comments to clarify example usage for structure pred…
tobiasploetz-merck Aug 22, 2025
f1a5238
refactor: Update data structure to support multiple ligands in protei…
tobiasploetz-merck Aug 27, 2025
298a896
refactor: update dataclasses to allow CCD-based ligands (e.g. for org…
tobiasploetz-merck Sep 1, 2025
637f18c
refactor: Revise README to enhance clarity on setup and participant e…
tobiasploetz-merck Sep 1, 2025
df6b62e
refactor: Enhance README with additional details on post-processing a…
tobiasploetz-merck Sep 1, 2025
d7d23e4
refactor: Update preparation and post-processing functions to support…
tobiasploetz-merck Oct 2, 2025
6b96287
feat: Add AS/OS evaluation script to calculate ligand RMSD values and…
tobiasploetz-merck Oct 2, 2025
237f663
build: Add matplotlib to dependencies for enhanced plotting capabilities
tobiasploetz-merck Oct 10, 2025
37399e7
feat: store top 1 model accuracy and print top 1 summary at the end
tobiasploetz-merck Oct 10, 2025
0ec5329
fix: ensure that the query sequence is always the first entry in MSA …
tobiasploetz-merck Oct 10, 2025
e825c1f
feat: harmonize CLI args of eval scripts
tobiasploetz-merck Oct 12, 2025
ee50b9c
refactor: extract query sequence extraction logic into a separate method
tobiasploetz-merck Oct 12, 2025
82cc398
docs: add evaluation and prediction commands for both challenges
tobiasploetz-merck Oct 12, 2025
3318977
chore: remove file
tobiasploetz-merck Oct 12, 2025
325826e
feat: add --result-folder CLI arg to predict_hackathon.py to have pre…
tobiasploetz-merck Oct 12, 2025
912cf63
feat: add quick start section to hackathon README
tobiasploetz-merck Oct 12, 2025
02897c6
docs: update setup instructions to clarify forking the repository
tobiasploetz-merck Oct 12, 2025
6de025a
docs: add submission guidelines and deadline details to README
tobiasploetz-merck Oct 12, 2025
8d6b70b
docs: add link to method description in submission guidelines
tobiasploetz-merck Oct 12, 2025
a834385
feat: remove network access and ensure submission directory exists be…
tobiasploetz-merck Oct 12, 2025
c559d4a
feat: increase shared memory size for docker container
tobiasploetz-merck Oct 12, 2025
b3f81ea
docs: clarify evaluation environment restrictions regarding internet …
tobiasploetz-merck Oct 12, 2025
3bb5efd
fix: rename eval script for consistent naming
tobiasploetz-merck Oct 12, 2025
b4ae5ec
fix: path to GT structure
tobiasploetz-merck Oct 14, 2025
5cfa15d
docs: add back evaluation instructions for existing predictions
tobiasploetz-merck Oct 14, 2025
3eb6f76
docs: add hackathon instructions to README
tobiasploetz-merck Oct 14, 2025
8700834
feat: Smoothing over eval code and description
tobiasploetz-merck Oct 14, 2025
28f0cb6
fix: small bug in parsing classification results
tobiasploetz-merck Oct 14, 2025
611d6ba
docs: extend detail on functions that participants can modify
tobiasploetz-merck Oct 14, 2025
4fdf17f
feat: Add instructions on pre-submission checklist
tobiasploetz-merck Oct 14, 2025
a455243
feat: smoothing
tobiasploetz-merck Oct 14, 2025
3715efa
fix: typos
tobiasploetz-merck Oct 14, 2025
361b870
fix: small bug
tobiasploetz-merck Oct 15, 2025
dd76752
docs: update help section
tobiasploetz-merck Oct 15, 2025
45504dc
docs: update dataset download instructions and paths in README
tobiasploetz-merck Oct 16, 2025
ce610eb
feat: remove "modifications" and "ccd"
tobiasploetz-merck Oct 16, 2025
4b34b0b
fix: remove unused comment
tobiasploetz-merck Oct 16, 2025
c6c3154
Info on MSA
Hrovatin Oct 16, 2025
3b31a97
Clarifications
Hrovatin Oct 16, 2025
4e6ee79
Add image folder
Hrovatin Oct 17, 2025
2489892
workflow.drawio
Hrovatin Oct 17, 2025
b28af46
cleanup img creation
Hrovatin Oct 17, 2025
2eb627d
Additional clarifications
Hrovatin Oct 17, 2025
b7095d4
Add schematic of the workflow
Hrovatin Oct 17, 2025
4b4eec1
Clarify in diagram that there are 5 predictions
Hrovatin Oct 17, 2025
ff2a8e7
Merge pull request #2 from Hrovatin/edit/karin
tobiasploetz Oct 17, 2025
88d3ea1
fix: dataset name
tobiasploetz-merck Oct 17, 2025
ee18cbb
fix: clarification
tobiasploetz-merck Oct 17, 2025
84567e1
fix: clarify that there is only a single small molecule
tobiasploetz-merck Oct 17, 2025
f4d7c4f
Various changes to README
AVHopp Oct 17, 2025
498b7b2
Smoothing, emphasize that precomputed MSAs are always provided
tobiasploetz Oct 17, 2025
be7f31d
Merge pull request #3 from emdgroup/comments/alex
tobiasploetz Oct 17, 2025
1a82737
Fix the bash command to properly deal with line breaks
Hrovatin Oct 17, 2025
28c6d99
Merge branch 'tp/feat/hackathon-setup' into tp/feat/hackathon-setup
Hrovatin Oct 17, 2025
7e14ed6
Remove empty line
Hrovatin Oct 17, 2025
7f2475d
Delete tmp/input/8CYH_config_0.yaml
Hrovatin Oct 17, 2025
de9b462
Update gitignore with template result paths
Hrovatin Oct 17, 2025
bf8fb2a
Merge pull request #4 from Hrovatin/tp/feat/hackathon-setup
tobiasploetz Oct 17, 2025
fe26957
docs: clarify CUDA requirement for hackathon
AVHopp Oct 17, 2025
f312082
feat: add baseline results and reduce # of Ab/Ag structures to 10
tobiasploetz-merck Oct 17, 2025
ec100be
smoothing
tobiasploetz Oct 17, 2025
68b9356
Merge pull request #5 from emdgroup/cuda-requirement-docs
tobiasploetz Oct 17, 2025
efe9382
deps: adding pymol
tobiasploetz-merck Oct 17, 2025
18a4e28
chore: make workflow image a bit prettier
tobiasploetz Oct 17, 2025
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
48 changes: 48 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
# Git
.git
.gitignore
.github

# Python
__pycache__
*.pyc
*.pyo
*.pyd
.Python
env/
venv/
.venv/
pip-log.txt
pip-delete-this-directory.txt
.tox
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
*.log
.idea
.mypy_cache

# Documentation
*.md
docs/

# Development files
.vscode/
*.swp
*.swo
*~

# Build artifacts (keep minimal)
predictions/
submission/
inputs/
.tmp_spec.json

# Keep these for the container
!requirements.txt
!examples/
!src/
!scripts/
30 changes: 30 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
name: CI - Build and Test

on:
push:
branches: [ main ]
pull_request:
branches: [ main ]

jobs:
test-scaffold:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v4

- name: Set up Python 3.11
uses: actions/setup-python@v4
with:
python-version: '3.11'

- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install pyyaml
# Install any additional requirements from participants
if [ -f requirements.txt ]; then pip install -r requirements.txt; fi

- name: Test script help and argument parsing
run: |
python predict_hackathon.py --help
10 changes: 9 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -161,6 +161,14 @@ cython_debug/
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
#.idea/

# Data files
hackathon_data/

# Boltz prediction outputs
# All result files generated from a boltz prediction call
boltz_results_*/
boltz_results_*/
my_predictions/
tmp/
my_results/
asos_public_evaluation/
abag_public_evaluation/
71 changes: 71 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
# Based on Liana64's contribution https://github.com/jwohlwend/boltz/blob/5ee0e6b9740b85ff24349aacc4d69615f499490b/Dockerfile
ARG MINIFORGE_NAME=Miniforge3
ARG MINIFORGE_VERSION=23.3.1-0
ARG BASE_IMAGE=nvidia/cuda:12.3.0-runtime-ubuntu22.04

FROM ${BASE_IMAGE} AS builder
ARG MINIFORGE_NAME
ARG MINIFORGE_VERSION

RUN apt-get update && apt-get install -y --no-install-recommends \
git \
build-essential \
python3 \
python3-venv \
python3-dev \
wget \
&& wget --no-check-certificate --no-hsts https://github.com/conda-forge/miniforge/releases/download/${MINIFORGE_VERSION}/${MINIFORGE_NAME}-${MINIFORGE_VERSION}-Linux-$(uname -m).sh -O miniforge.sh \
&& bash miniforge.sh -b -p /opt/conda \
&& rm miniforge.sh \
&& /opt/conda/bin/mamba init bash

WORKDIR /app
COPY environment.yml /app/
COPY src /app/src
COPY pyproject.toml /app/pyproject.toml

RUN /opt/conda/bin/mamba env create -f environment.yml --name boltz && \
/opt/conda/bin/mamba init bash && \
/opt/conda/bin/conda run -n boltz pip install --no-cache-dir --upgrade pip && \
/opt/conda/bin/conda run -n boltz pip install --no-cache-dir .[cuda] && \
apt-get purge -y git build-essential wget && \
apt-get autoremove -y && \
apt-get clean && \
rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

FROM ${BASE_IMAGE}
COPY --from=builder /opt/conda /opt/conda

RUN apt-get update && apt-get install -y --no-install-recommends \
python3 \
build-essential \
python3-dev \
&& apt-get autoremove -y \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

ENV PATH="/opt/conda/bin:$PATH" \
LANG=C.UTF-8 \
PYTHONUNBUFFERED=1

ARG USERNAME=boltz
ARG UID=900
ARG GID=900
RUN groupadd --gid $GID $USERNAME && \
useradd --uid $UID --gid $GID --create-home --shell /bin/bash $USERNAME

WORKDIR /app

# Copy everything
COPY . /app/

RUN chown -R $USERNAME:$USERNAME /app

USER $USERNAME

# Initialize mamba and activate the boltz environment
SHELL ["/bin/bash", "-c"]
RUN mamba init bash && \
echo "mamba activate boltz" >> ~/.bashrc

CMD ["/bin/bash"]
5 changes: 5 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,11 @@

![](docs/boltz1_pred_figure.png)

## Hackathon Instructions

Please refer to the [hackathon README](hackathon/README_Hackathon.md) for instructions on how to participate in the Boltz hackathon.

**Note:** The hackathon requires at least one CUDA-enabled GPU for running inference.

## Introduction

Expand Down
7 changes: 7 additions & 0 deletions environment.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
name: boltzplatz
channels:
- conda-forge
dependencies:
- python=3.11
- pip
- pymol-open-source
19 changes: 19 additions & 0 deletions examples/specs/example_protein_complex.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
{
"datapoint_id": "complex",
"task_type": "protein_complex",
"proteins": [
{
"id": "A",
"sequence": "MVTPEGNVSLVDESLLVGV",
"msa_path": "examples/msa/seq1.a3m"
},
{
"id": "B",
"sequence": "MVTPEGNVSLVDESLLVGK",
"msa_path": "examples/msa/seq2.a3m"
}
],
"ground_truth": {
"structure": "examples/ground_truth/complex.pdb"
}
}
20 changes: 20 additions & 0 deletions examples/specs/example_protein_ligand.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
{
"datapoint_id": "affinity",
"task_type": "protein_ligand",
"proteins": [
{
"id": "A",
"sequence": "MVTPEGNVSLVDESLLVGV",
"msa_path": "examples/msa/seq1.a3m"
}
],
"ligands": [
{
"id": "B",
"smiles": "N[C@@H](Cc1ccc(O)cc1)C(=O)O"
}
],
"ground_truth": {
"structure": "examples/ground_truth/affinity.pdb"
}
}
2 changes: 2 additions & 0 deletions examples/test_dataset.jsonl
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
{"datapoint_id": "affinity", "task_type": "protein_ligand", "proteins": [{"id": "A", "sequence": "MVTPEGNVSLVDESLLVGV", "msa_path": "examples/msa/seq1.a3m"}], "ligands": [{"id": "B", "smiles": "N[C@@H](Cc1ccc(O)cc1)C(=O)O"}], "ground_truth": {"structure": "examples/ground_truth/affinity.pdb"}}
{"datapoint_id": "complex", "task_type": "protein_complex", "proteins": [{"id": "A", "sequence": "MVTPEGNVSLVDESLLVGV", "msa_path": "examples/msa/seq1.a3m"}, {"id": "B", "sequence": "MVTPEGNVSLVDESLLVGK", "msa_path": "examples/msa/seq2.a3m"}], "ground_truth": {"structure": "examples/ground_truth/complex.pdb"}}
Loading
Loading