Repository files navigation

dyAb: Flow Matching for Flexible Antibody Design with AlphaFold-driven Pre-binding Antigen

The official implementation of our AAAI 25' paper dyAb: Flow Matching for Flexible Antibody Design with AlphaFold-driven Pre-binding Antigen.

Quick Links

Setup

The environment and prerequisites

1. Environment

We have provided the env.yml for creating the runtime conda environment just by running:

conda env create -f env.yml

2. Scorers

Please first prepare the scorers for TMscore and DockQ as follows:

The source code for assessing TMscore is at evaluation/TMscore.cpp. Please compile it by:

g++ -static -O3 -ffast-math -lm -o evaluation/TMscore evaluation/TMscore.cpp

To prepare the DockQ scorer, please clone its official github and compile the prerequisites according to its instructions. After that, please revise the DOCKQ_DIR variable in the configs.py to point to the directory containing the DockQ project (e.g. ./DockQ).

The lDDT scorer is in the conda environment, and the $\Delta\Delta G$ scorer is integrated into our codes, therefore they don't need additional preparations.

3. PDB data

Please download all the structure data of antibodies from the download page of SAbDab. Please enter the Downloads tab on the left of the web page and download the archived zip file for the structures, then decompress it:

wget https://opig.stats.ox.ac.uk/webapps/newsabdab/sabdab/archive/all/ -O all_structures.zip
unzip all_structures.zip

You should get a folder named all_structures with the following hierarchy:

├── all_structures
│ ├── chothia
│ ├── imgt
│ ├── raw

Each subfolder contains the pdb files renumbered with the corresponding scheme. We use IMGT in the paper, so the imgt subfolder is what we care about.

Since pdb files are heavy to process, usually people will generate a summary file for the structural database which records the basic information about each structure for fast access. We have provided the summary of the dataset retrieved at November 12, 2022 (summaries/sabdab_summary.tsv). Since the dataset is updated on a weekly basis, if you want to use the latest version, please download it from the official website.

For the AFDB part, we extracted the antigen sequence from the original antigen-antibody complex and used AlphaFold2 to predict its structure. Then, we aligned them with the original antigen structures using Kabsch algorithm and replaced the original epitopes with the AlphaFold-predicted ones. We have provided the processed dataset we curated for the experiments, which covers all the required PDB files among various datasets. The datasets and checkpoints could be downloaded here. After unzipping the folder, the AF2_antigen_aligned_pdbs folder should be placed under all_data folder, and the corresponding json files should also be placed there. All other checkpoints should be placed under checkpoints folder.

Data Preprocessing

Data

We follow the data preprocessing techiniques proposed by DyMEAN, who have provided the script for all these procedures in scripts/data_preprocess.sh. Suppose the IMGT-renumbered pdb data are located at all_structures/imgt/, and that you want to store the processed data (~5G) at all_data, you can simply run:

bash scripts/data_preprocess.sh all_structures/imgt all_data

Then, we have provided the AF2-predicted antigens needed in the training/inferencing process. Follow the link to download the AF2_antigen_aligned_pdbs folder and af2_monomer_pdbid.json, place them under all_data folder.

Experiments

The trained checkpoints for each task are provided here github release page. To use them, please download the ones you are interested in and save them into the folder ./checkpoints. For the affinity optimization task, we used the same predictor as dyMEAN's.

CDR-H3 Design

We use SAbDab for training and RAbD for testing. Please first revise the settings in scripts/train/configs/single_cdr_design.json (path to datasets and other hyperparameters) and then run the below command for training:

python train.py --task single_cdr_design --gpus 1 --wandb_offline 1 --flexible 1 --model_type dyAb --ex_name dyAb_single_cdrh3_m1 --module_type 1

We have also provided the trained checkpoint at checkpoints/best_cdr.ckpt. Then please revise the path to the test set in scripts/test/test.sh and run the following command for testing:

bash test_cdr.sh <ckpt_path> <test_set_path> <save_dir> <use_af2ag>

For example, you can run

bash test_cdr.sh "./checkpoints/best_cdrh3.ckpt" \
"./all_data/RAbD/test.json" \
"./results/single_cdr_design/" \
"True"

which will save the generated results (PDB files and a summary.json) to ./results/single_cdr_design/.

Affinity Optimization

We use SAbDab for training and the antibodies in SKEMPI V2.0 for testing. Similarly, please first revise the settings in scripts/train/configs/single_cdr_opt.json.

For training, you can run

pythontrain.py--tasksingle_cdr_opt--gpus1--wandb_offline1--flexible1--model_typedyAbOpt--train_set ./all_data/SKEMPI/train.json--valid_set ./all_data/SKEMPI/valid.json--test_setall_data/SKEMPI/test.json--save_dir ./all_data/RAbD/single_cdr_opt/--ex_namedyAbOpt_v1--module_type1

We have provided the trained checkpoints at checkpoints/best_affi_opt.ckpt and checkpoints/cdrh3_ddg_predictor.ckpt. The optimization test can be conducted through:

pythonopt_gen_new.py--ckpt ./checkpoints/best_opt.ckpt \
--predictor_ckpt ./checkpoints/cdrh3_ddg_predictor.ckpt \
--summary_json ./all_data/SKEMPI/test.json \
--save_dir ./results/affi_8_50/ \
--num_residue_changes8 \
--num_optimize_steps50

which will do 50 steps of gradient search without restrictions on the maximum number of changed residues (change 8 to any number to restrict the upperbound of $\Delta L$).

Complex Structure Prediction

Same as dyMEAN, we also use SAbDab for training and IgFold for testing. To train the model, you can run:

python train.py --task struct_prediction --gpus 1 --wandb_offline 1 --flexible 1 --model_type dyAb --ex_name dyAb_struct_pred_2 --module_type 1 --batch_size 64&

We have also provided the trained checkpoint at checkpoints/best_struc_pred.ckpt. Then please run the following command for testing: Otherwise, you can also run the following command to test the model.

bash test_pred.sh "./checkpoints/best_pred.ckpt" \
"./all_data/IgFold/test.json" \
"./results/struct_pred/" \
"True"

Evaluation

To obtain the metrics for CDR-H3 design and Structure prediction task, you can run

python cal_metrics.py --test_set "path to your summery.json"

As you can find a summary.json under each folder you choose to store the results, you may also change the config in ./scripts/configs.

Note: you may change the path for the referenced PDB file(i.e. before/after renumbering), which may introduce slight variance to the results.

For the metrics in the affinity optimization task, you can easily find it in the log.txt file under the output folder.

Contact

Feel free to contact us at tancheng@westlake.edu.cn or yj.zhang@mail.mcgill.ca

Acknowledgements

We highly thank "dyMEAN: End-to-End Full-Atom Antibody Design". [paper, code]

Debugging Issues

Also, if you encounter any issues related to Rosetta, you can simply go into the Rosetta/rosetta.source.release-337/main/source folder and recomplie it using the following command:

./scons.py mode=release bin 

Citation

@inproceedings{tan2025dyab,
title={dyAb: Flow Matching for Flexible Antibody Design with AlphaFold-driven Pre-binding Antigen},
author={Tan, Cheng and Zhang, Yijie and Gao, Zhangyang and Huang, Yufei and Lin, Haitao and Wu, Lirong and Wu, Fandi and Blanchette, Mathieu and Li, Stan Z},
booktitle={Proceedings of the AAAI Conference on Artificial Intelligence},
volume={39},
number={1},
pages={782--790},
year={2025}
}

About

The official implementation of the AAAI'25 paper "dyAb: Flow Matching for Flexible Antibody Design with AlphaFold-driven Pre-binding Antigen".

Resources

Stars

14 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

dyAb: Flow Matching for Flexible Antibody Design with AlphaFold-driven Pre-binding Antigen

The official implementation of our AAAI 25' paper dyAb: Flow Matching for Flexible Antibody Design with AlphaFold-driven Pre-binding Antigen.

Quick Links

Setup

The environment and prerequisites

1. Environment

We have provided the env.yml for creating the runtime conda environment just by running:

conda env create -f env.yml

2. Scorers

Please first prepare the scorers for TMscore and DockQ as follows:

The source code for assessing TMscore is at evaluation/TMscore.cpp. Please compile it by:

g++ -static -O3 -ffast-math -lm -o evaluation/TMscore evaluation/TMscore.cpp

To prepare the DockQ scorer, please clone its official github and compile the prerequisites according to its instructions. After that, please revise the DOCKQ_DIR variable in the configs.py to point to the directory containing the DockQ project (e.g. ./DockQ).

The lDDT scorer is in the conda environment, and the $\Delta\Delta G$ scorer is integrated into our codes, therefore they don't need additional preparations.

3. PDB data

Please download all the structure data of antibodies from the download page of SAbDab. Please enter the Downloads tab on the left of the web page and download the archived zip file for the structures, then decompress it:

wget https://opig.stats.ox.ac.uk/webapps/newsabdab/sabdab/archive/all/ -O all_structures.zip
unzip all_structures.zip

You should get a folder named all_structures with the following hierarchy:

├── all_structures
│ ├── chothia
│ ├── imgt
│ ├── raw

Each subfolder contains the pdb files renumbered with the corresponding scheme. We use IMGT in the paper, so the imgt subfolder is what we care about.

Since pdb files are heavy to process, usually people will generate a summary file for the structural database which records the basic information about each structure for fast access. We have provided the summary of the dataset retrieved at November 12, 2022 (summaries/sabdab_summary.tsv). Since the dataset is updated on a weekly basis, if you want to use the latest version, please download it from the official website.

For the AFDB part, we extracted the antigen sequence from the original antigen-antibody complex and used AlphaFold2 to predict its structure. Then, we aligned them with the original antigen structures using Kabsch algorithm and replaced the original epitopes with the AlphaFold-predicted ones. We have provided the processed dataset we curated for the experiments, which covers all the required PDB files among various datasets. The datasets and checkpoints could be downloaded here. After unzipping the folder, the AF2_antigen_aligned_pdbs folder should be placed under all_data folder, and the corresponding json files should also be placed there. All other checkpoints should be placed under checkpoints folder.

Data Preprocessing

Data

We follow the data preprocessing techiniques proposed by DyMEAN, who have provided the script for all these procedures in scripts/data_preprocess.sh. Suppose the IMGT-renumbered pdb data are located at all_structures/imgt/, and that you want to store the processed data (~5G) at all_data, you can simply run:

bash scripts/data_preprocess.sh all_structures/imgt all_data

Then, we have provided the AF2-predicted antigens needed in the training/inferencing process. Follow the link to download the AF2_antigen_aligned_pdbs folder and af2_monomer_pdbid.json, place them under all_data folder.

Experiments

The trained checkpoints for each task are provided here github release page. To use them, please download the ones you are interested in and save them into the folder ./checkpoints. For the affinity optimization task, we used the same predictor as dyMEAN's.

CDR-H3 Design

We use SAbDab for training and RAbD for testing. Please first revise the settings in scripts/train/configs/single_cdr_design.json (path to datasets and other hyperparameters) and then run the below command for training:

python train.py --task single_cdr_design --gpus 1 --wandb_offline 1 --flexible 1 --model_type dyAb --ex_name dyAb_single_cdrh3_m1 --module_type 1

We have also provided the trained checkpoint at checkpoints/best_cdr.ckpt. Then please revise the path to the test set in scripts/test/test.sh and run the following command for testing:

bash test_cdr.sh <ckpt_path> <test_set_path> <save_dir> <use_af2ag>

For example, you can run

bash test_cdr.sh "./checkpoints/best_cdrh3.ckpt" \
"./all_data/RAbD/test.json" \
"./results/single_cdr_design/" \
"True"

which will save the generated results (PDB files and a summary.json) to ./results/single_cdr_design/.

Affinity Optimization

We use SAbDab for training and the antibodies in SKEMPI V2.0 for testing. Similarly, please first revise the settings in scripts/train/configs/single_cdr_opt.json.

For training, you can run

pythontrain.py--tasksingle_cdr_opt--gpus1--wandb_offline1--flexible1--model_typedyAbOpt--train_set ./all_data/SKEMPI/train.json--valid_set ./all_data/SKEMPI/valid.json--test_setall_data/SKEMPI/test.json--save_dir ./all_data/RAbD/single_cdr_opt/--ex_namedyAbOpt_v1--module_type1

We have provided the trained checkpoints at checkpoints/best_affi_opt.ckpt and checkpoints/cdrh3_ddg_predictor.ckpt. The optimization test can be conducted through:

pythonopt_gen_new.py--ckpt ./checkpoints/best_opt.ckpt \
--predictor_ckpt ./checkpoints/cdrh3_ddg_predictor.ckpt \
--summary_json ./all_data/SKEMPI/test.json \
--save_dir ./results/affi_8_50/ \
--num_residue_changes8 \
--num_optimize_steps50

which will do 50 steps of gradient search without restrictions on the maximum number of changed residues (change 8 to any number to restrict the upperbound of $\Delta L$).

Complex Structure Prediction

Same as dyMEAN, we also use SAbDab for training and IgFold for testing. To train the model, you can run:

python train.py --task struct_prediction --gpus 1 --wandb_offline 1 --flexible 1 --model_type dyAb --ex_name dyAb_struct_pred_2 --module_type 1 --batch_size 64&

We have also provided the trained checkpoint at checkpoints/best_struc_pred.ckpt. Then please run the following command for testing: Otherwise, you can also run the following command to test the model.

bash test_pred.sh "./checkpoints/best_pred.ckpt" \
"./all_data/IgFold/test.json" \
"./results/struct_pred/" \
"True"

Evaluation

To obtain the metrics for CDR-H3 design and Structure prediction task, you can run

python cal_metrics.py --test_set "path to your summery.json"

As you can find a summary.json under each folder you choose to store the results, you may also change the config in ./scripts/configs.

Note: you may change the path for the referenced PDB file(i.e. before/after renumbering), which may introduce slight variance to the results.

For the metrics in the affinity optimization task, you can easily find it in the log.txt file under the output folder.

Contact

Feel free to contact us at tancheng@westlake.edu.cn or yj.zhang@mail.mcgill.ca

Acknowledgements

We highly thank "dyMEAN: End-to-End Full-Atom Antibody Design". [paper, code]

Debugging Issues

Also, if you encounter any issues related to Rosetta, you can simply go into the Rosetta/rosetta.source.release-337/main/source folder and recomplie it using the following command:

./scons.py mode=release bin 

Citation

@inproceedings{tan2025dyab,
title={dyAb: Flow Matching for Flexible Antibody Design with AlphaFold-driven Pre-binding Antigen},
author={Tan, Cheng and Zhang, Yijie and Gao, Zhangyang and Huang, Yufei and Lin, Haitao and Wu, Lirong and Wu, Fandi and Blanchette, Mathieu and Li, Stan Z},
booktitle={Proceedings of the AAAI Conference on Artificial Intelligence},
volume={39},
number={1},
pages={782--790},
year={2025}
}

About

The official implementation of the AAAI'25 paper "dyAb: Flow Matching for Flexible Antibody Design with AlphaFold-driven Pre-binding Antigen".

Resources

Stars

14 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

dyAb: Flow Matching for Flexible Antibody Design with AlphaFold-driven Pre-binding Antigen

The official implementation of our AAAI 25' paper dyAb: Flow Matching for Flexible Antibody Design with AlphaFold-driven Pre-binding Antigen.

Quick Links

Setup

The environment and prerequisites

1. Environment

We have provided the env.yml for creating the runtime conda environment just by running:

conda env create -f env.yml

2. Scorers

Please first prepare the scorers for TMscore and DockQ as follows:

The source code for assessing TMscore is at evaluation/TMscore.cpp. Please compile it by:

g++ -static -O3 -ffast-math -lm -o evaluation/TMscore evaluation/TMscore.cpp

To prepare the DockQ scorer, please clone its official github and compile the prerequisites according to its instructions. After that, please revise the DOCKQ_DIR variable in the configs.py to point to the directory containing the DockQ project (e.g. ./DockQ).

The lDDT scorer is in the conda environment, and the $\Delta\Delta G$ scorer is integrated into our codes, therefore they don't need additional preparations.

3. PDB data

Please download all the structure data of antibodies from the download page of SAbDab. Please enter the Downloads tab on the left of the web page and download the archived zip file for the structures, then decompress it:

wget https://opig.stats.ox.ac.uk/webapps/newsabdab/sabdab/archive/all/ -O all_structures.zip
unzip all_structures.zip

You should get a folder named all_structures with the following hierarchy:

├── all_structures
│ ├── chothia
│ ├── imgt
│ ├── raw

Each subfolder contains the pdb files renumbered with the corresponding scheme. We use IMGT in the paper, so the imgt subfolder is what we care about.

Since pdb files are heavy to process, usually people will generate a summary file for the structural database which records the basic information about each structure for fast access. We have provided the summary of the dataset retrieved at November 12, 2022 (summaries/sabdab_summary.tsv). Since the dataset is updated on a weekly basis, if you want to use the latest version, please download it from the official website.

For the AFDB part, we extracted the antigen sequence from the original antigen-antibody complex and used AlphaFold2 to predict its structure. Then, we aligned them with the original antigen structures using Kabsch algorithm and replaced the original epitopes with the AlphaFold-predicted ones. We have provided the processed dataset we curated for the experiments, which covers all the required PDB files among various datasets. The datasets and checkpoints could be downloaded here. After unzipping the folder, the AF2_antigen_aligned_pdbs folder should be placed under all_data folder, and the corresponding json files should also be placed there. All other checkpoints should be placed under checkpoints folder.

Data Preprocessing

Data

We follow the data preprocessing techiniques proposed by DyMEAN, who have provided the script for all these procedures in scripts/data_preprocess.sh. Suppose the IMGT-renumbered pdb data are located at all_structures/imgt/, and that you want to store the processed data (~5G) at all_data, you can simply run:

bash scripts/data_preprocess.sh all_structures/imgt all_data

Then, we have provided the AF2-predicted antigens needed in the training/inferencing process. Follow the link to download the AF2_antigen_aligned_pdbs folder and af2_monomer_pdbid.json, place them under all_data folder.

Experiments

The trained checkpoints for each task are provided here github release page. To use them, please download the ones you are interested in and save them into the folder ./checkpoints. For the affinity optimization task, we used the same predictor as dyMEAN's.

CDR-H3 Design

We use SAbDab for training and RAbD for testing. Please first revise the settings in scripts/train/configs/single_cdr_design.json (path to datasets and other hyperparameters) and then run the below command for training:

python train.py --task single_cdr_design --gpus 1 --wandb_offline 1 --flexible 1 --model_type dyAb --ex_name dyAb_single_cdrh3_m1 --module_type 1

We have also provided the trained checkpoint at checkpoints/best_cdr.ckpt. Then please revise the path to the test set in scripts/test/test.sh and run the following command for testing:

bash test_cdr.sh <ckpt_path> <test_set_path> <save_dir> <use_af2ag>

For example, you can run

bash test_cdr.sh "./checkpoints/best_cdrh3.ckpt" \
"./all_data/RAbD/test.json" \
"./results/single_cdr_design/" \
"True"

which will save the generated results (PDB files and a summary.json) to ./results/single_cdr_design/.

Affinity Optimization

We use SAbDab for training and the antibodies in SKEMPI V2.0 for testing. Similarly, please first revise the settings in scripts/train/configs/single_cdr_opt.json.

For training, you can run

pythontrain.py--tasksingle_cdr_opt--gpus1--wandb_offline1--flexible1--model_typedyAbOpt--train_set ./all_data/SKEMPI/train.json--valid_set ./all_data/SKEMPI/valid.json--test_setall_data/SKEMPI/test.json--save_dir ./all_data/RAbD/single_cdr_opt/--ex_namedyAbOpt_v1--module_type1

We have provided the trained checkpoints at checkpoints/best_affi_opt.ckpt and checkpoints/cdrh3_ddg_predictor.ckpt. The optimization test can be conducted through:

pythonopt_gen_new.py--ckpt ./checkpoints/best_opt.ckpt \
--predictor_ckpt ./checkpoints/cdrh3_ddg_predictor.ckpt \
--summary_json ./all_data/SKEMPI/test.json \
--save_dir ./results/affi_8_50/ \
--num_residue_changes8 \
--num_optimize_steps50

which will do 50 steps of gradient search without restrictions on the maximum number of changed residues (change 8 to any number to restrict the upperbound of $\Delta L$).

Complex Structure Prediction

Same as dyMEAN, we also use SAbDab for training and IgFold for testing. To train the model, you can run:

python train.py --task struct_prediction --gpus 1 --wandb_offline 1 --flexible 1 --model_type dyAb --ex_name dyAb_struct_pred_2 --module_type 1 --batch_size 64&

We have also provided the trained checkpoint at checkpoints/best_struc_pred.ckpt. Then please run the following command for testing: Otherwise, you can also run the following command to test the model.

bash test_pred.sh "./checkpoints/best_pred.ckpt" \
"./all_data/IgFold/test.json" \
"./results/struct_pred/" \
"True"

Evaluation

To obtain the metrics for CDR-H3 design and Structure prediction task, you can run

python cal_metrics.py --test_set "path to your summery.json"

As you can find a summary.json under each folder you choose to store the results, you may also change the config in ./scripts/configs.

Note: you may change the path for the referenced PDB file(i.e. before/after renumbering), which may introduce slight variance to the results.

For the metrics in the affinity optimization task, you can easily find it in the log.txt file under the output folder.

Contact

Feel free to contact us at tancheng@westlake.edu.cn or yj.zhang@mail.mcgill.ca

Acknowledgements

We highly thank "dyMEAN: End-to-End Full-Atom Antibody Design". [paper, code]

Debugging Issues

Also, if you encounter any issues related to Rosetta, you can simply go into the Rosetta/rosetta.source.release-337/main/source folder and recomplie it using the following command:

./scons.py mode=release bin 

Citation

@inproceedings{tan2025dyab,
title={dyAb: Flow Matching for Flexible Antibody Design with AlphaFold-driven Pre-binding Antigen},
author={Tan, Cheng and Zhang, Yijie and Gao, Zhangyang and Huang, Yufei and Lin, Haitao and Wu, Lirong and Wu, Fandi and Blanchette, Mathieu and Li, Stan Z},
booktitle={Proceedings of the AAAI Conference on Artificial Intelligence},
volume={39},
number={1},
pages={782--790},
year={2025}
}

About

The official implementation of the AAAI'25 paper "dyAb: Flow Matching for Flexible Antibody Design with AlphaFold-driven Pre-binding Antigen".

Resources

Stars

14 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

dyAb: Flow Matching for Flexible Antibody Design with AlphaFold-driven Pre-binding Antigen

The official implementation of our AAAI 25' paper dyAb: Flow Matching for Flexible Antibody Design with AlphaFold-driven Pre-binding Antigen.

Quick Links

Setup

The environment and prerequisites

1. Environment

We have provided the env.yml for creating the runtime conda environment just by running:

conda env create -f env.yml

2. Scorers

Please first prepare the scorers for TMscore and DockQ as follows:

The source code for assessing TMscore is at evaluation/TMscore.cpp. Please compile it by:

g++ -static -O3 -ffast-math -lm -o evaluation/TMscore evaluation/TMscore.cpp

To prepare the DockQ scorer, please clone its official github and compile the prerequisites according to its instructions. After that, please revise the DOCKQ_DIR variable in the configs.py to point to the directory containing the DockQ project (e.g. ./DockQ).

The lDDT scorer is in the conda environment, and the $\Delta\Delta G$ scorer is integrated into our codes, therefore they don't need additional preparations.

3. PDB data

Please download all the structure data of antibodies from the download page of SAbDab. Please enter the Downloads tab on the left of the web page and download the archived zip file for the structures, then decompress it:

wget https://opig.stats.ox.ac.uk/webapps/newsabdab/sabdab/archive/all/ -O all_structures.zip
unzip all_structures.zip

You should get a folder named all_structures with the following hierarchy:

├── all_structures
│ ├── chothia
│ ├── imgt
│ ├── raw

Each subfolder contains the pdb files renumbered with the corresponding scheme. We use IMGT in the paper, so the imgt subfolder is what we care about.

Since pdb files are heavy to process, usually people will generate a summary file for the structural database which records the basic information about each structure for fast access. We have provided the summary of the dataset retrieved at November 12, 2022 (summaries/sabdab_summary.tsv). Since the dataset is updated on a weekly basis, if you want to use the latest version, please download it from the official website.

For the AFDB part, we extracted the antigen sequence from the original antigen-antibody complex and used AlphaFold2 to predict its structure. Then, we aligned them with the original antigen structures using Kabsch algorithm and replaced the original epitopes with the AlphaFold-predicted ones. We have provided the processed dataset we curated for the experiments, which covers all the required PDB files among various datasets. The datasets and checkpoints could be downloaded here. After unzipping the folder, the AF2_antigen_aligned_pdbs folder should be placed under all_data folder, and the corresponding json files should also be placed there. All other checkpoints should be placed under checkpoints folder.

Data Preprocessing

Data

We follow the data preprocessing techiniques proposed by DyMEAN, who have provided the script for all these procedures in scripts/data_preprocess.sh. Suppose the IMGT-renumbered pdb data are located at all_structures/imgt/, and that you want to store the processed data (~5G) at all_data, you can simply run:

bash scripts/data_preprocess.sh all_structures/imgt all_data

Then, we have provided the AF2-predicted antigens needed in the training/inferencing process. Follow the link to download the AF2_antigen_aligned_pdbs folder and af2_monomer_pdbid.json, place them under all_data folder.

Experiments

The trained checkpoints for each task are provided here github release page. To use them, please download the ones you are interested in and save them into the folder ./checkpoints. For the affinity optimization task, we used the same predictor as dyMEAN's.

CDR-H3 Design

We use SAbDab for training and RAbD for testing. Please first revise the settings in scripts/train/configs/single_cdr_design.json (path to datasets and other hyperparameters) and then run the below command for training:

python train.py --task single_cdr_design --gpus 1 --wandb_offline 1 --flexible 1 --model_type dyAb --ex_name dyAb_single_cdrh3_m1 --module_type 1

We have also provided the trained checkpoint at checkpoints/best_cdr.ckpt. Then please revise the path to the test set in scripts/test/test.sh and run the following command for testing:

bash test_cdr.sh <ckpt_path> <test_set_path> <save_dir> <use_af2ag>

For example, you can run

bash test_cdr.sh "./checkpoints/best_cdrh3.ckpt" \
"./all_data/RAbD/test.json" \
"./results/single_cdr_design/" \
"True"

which will save the generated results (PDB files and a summary.json) to ./results/single_cdr_design/.

Affinity Optimization

We use SAbDab for training and the antibodies in SKEMPI V2.0 for testing. Similarly, please first revise the settings in scripts/train/configs/single_cdr_opt.json.

For training, you can run

pythontrain.py--tasksingle_cdr_opt--gpus1--wandb_offline1--flexible1--model_typedyAbOpt--train_set ./all_data/SKEMPI/train.json--valid_set ./all_data/SKEMPI/valid.json--test_setall_data/SKEMPI/test.json--save_dir ./all_data/RAbD/single_cdr_opt/--ex_namedyAbOpt_v1--module_type1

We have provided the trained checkpoints at checkpoints/best_affi_opt.ckpt and checkpoints/cdrh3_ddg_predictor.ckpt. The optimization test can be conducted through:

pythonopt_gen_new.py--ckpt ./checkpoints/best_opt.ckpt \
--predictor_ckpt ./checkpoints/cdrh3_ddg_predictor.ckpt \
--summary_json ./all_data/SKEMPI/test.json \
--save_dir ./results/affi_8_50/ \
--num_residue_changes8 \
--num_optimize_steps50

which will do 50 steps of gradient search without restrictions on the maximum number of changed residues (change 8 to any number to restrict the upperbound of $\Delta L$).

Complex Structure Prediction

Same as dyMEAN, we also use SAbDab for training and IgFold for testing. To train the model, you can run:

python train.py --task struct_prediction --gpus 1 --wandb_offline 1 --flexible 1 --model_type dyAb --ex_name dyAb_struct_pred_2 --module_type 1 --batch_size 64&

We have also provided the trained checkpoint at checkpoints/best_struc_pred.ckpt. Then please run the following command for testing: Otherwise, you can also run the following command to test the model.

bash test_pred.sh "./checkpoints/best_pred.ckpt" \
"./all_data/IgFold/test.json" \
"./results/struct_pred/" \
"True"

Evaluation

To obtain the metrics for CDR-H3 design and Structure prediction task, you can run

python cal_metrics.py --test_set "path to your summery.json"

As you can find a summary.json under each folder you choose to store the results, you may also change the config in ./scripts/configs.

Note: you may change the path for the referenced PDB file(i.e. before/after renumbering), which may introduce slight variance to the results.

For the metrics in the affinity optimization task, you can easily find it in the log.txt file under the output folder.

Contact

Feel free to contact us at tancheng@westlake.edu.cn or yj.zhang@mail.mcgill.ca

Acknowledgements

We highly thank "dyMEAN: End-to-End Full-Atom Antibody Design". [paper, code]

Debugging Issues

Also, if you encounter any issues related to Rosetta, you can simply go into the Rosetta/rosetta.source.release-337/main/source folder and recomplie it using the following command:

./scons.py mode=release bin 

Citation

@inproceedings{tan2025dyab,
title={dyAb: Flow Matching for Flexible Antibody Design with AlphaFold-driven Pre-binding Antigen},
author={Tan, Cheng and Zhang, Yijie and Gao, Zhangyang and Huang, Yufei and Lin, Haitao and Wu, Lirong and Wu, Fandi and Blanchette, Mathieu and Li, Stan Z},
booktitle={Proceedings of the AAAI Conference on Artificial Intelligence},
volume={39},
number={1},
pages={782--790},
year={2025}
}

About

The official implementation of the AAAI'25 paper "dyAb: Flow Matching for Flexible Antibody Design with AlphaFold-driven Pre-binding Antigen".

Resources

Stars

14 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

dyAb: Flow Matching for Flexible Antibody Design with AlphaFold-driven Pre-binding Antigen

The official implementation of our AAAI 25' paper dyAb: Flow Matching for Flexible Antibody Design with AlphaFold-driven Pre-binding Antigen.

Quick Links

Setup

The environment and prerequisites

1. Environment

We have provided the env.yml for creating the runtime conda environment just by running:

conda env create -f env.yml

2. Scorers

Please first prepare the scorers for TMscore and DockQ as follows:

The source code for assessing TMscore is at evaluation/TMscore.cpp. Please compile it by:

g++ -static -O3 -ffast-math -lm -o evaluation/TMscore evaluation/TMscore.cpp

To prepare the DockQ scorer, please clone its official github and compile the prerequisites according to its instructions. After that, please revise the DOCKQ_DIR variable in the configs.py to point to the directory containing the DockQ project (e.g. ./DockQ).

The lDDT scorer is in the conda environment, and the $\Delta\Delta G$ scorer is integrated into our codes, therefore they don't need additional preparations.

3. PDB data

Please download all the structure data of antibodies from the download page of SAbDab. Please enter the Downloads tab on the left of the web page and download the archived zip file for the structures, then decompress it:

wget https://opig.stats.ox.ac.uk/webapps/newsabdab/sabdab/archive/all/ -O all_structures.zip
unzip all_structures.zip

You should get a folder named all_structures with the following hierarchy:

├── all_structures
│ ├── chothia
│ ├── imgt
│ ├── raw

Each subfolder contains the pdb files renumbered with the corresponding scheme. We use IMGT in the paper, so the imgt subfolder is what we care about.

Since pdb files are heavy to process, usually people will generate a summary file for the structural database which records the basic information about each structure for fast access. We have provided the summary of the dataset retrieved at November 12, 2022 (summaries/sabdab_summary.tsv). Since the dataset is updated on a weekly basis, if you want to use the latest version, please download it from the official website.

For the AFDB part, we extracted the antigen sequence from the original antigen-antibody complex and used AlphaFold2 to predict its structure. Then, we aligned them with the original antigen structures using Kabsch algorithm and replaced the original epitopes with the AlphaFold-predicted ones. We have provided the processed dataset we curated for the experiments, which covers all the required PDB files among various datasets. The datasets and checkpoints could be downloaded here. After unzipping the folder, the AF2_antigen_aligned_pdbs folder should be placed under all_data folder, and the corresponding json files should also be placed there. All other checkpoints should be placed under checkpoints folder.

Data Preprocessing

Data

We follow the data preprocessing techiniques proposed by DyMEAN, who have provided the script for all these procedures in scripts/data_preprocess.sh. Suppose the IMGT-renumbered pdb data are located at all_structures/imgt/, and that you want to store the processed data (~5G) at all_data, you can simply run:

bash scripts/data_preprocess.sh all_structures/imgt all_data

Then, we have provided the AF2-predicted antigens needed in the training/inferencing process. Follow the link to download the AF2_antigen_aligned_pdbs folder and af2_monomer_pdbid.json, place them under all_data folder.

Experiments

The trained checkpoints for each task are provided here github release page. To use them, please download the ones you are interested in and save them into the folder ./checkpoints. For the affinity optimization task, we used the same predictor as dyMEAN's.

CDR-H3 Design

We use SAbDab for training and RAbD for testing. Please first revise the settings in scripts/train/configs/single_cdr_design.json (path to datasets and other hyperparameters) and then run the below command for training:

python train.py --task single_cdr_design --gpus 1 --wandb_offline 1 --flexible 1 --model_type dyAb --ex_name dyAb_single_cdrh3_m1 --module_type 1

We have also provided the trained checkpoint at checkpoints/best_cdr.ckpt. Then please revise the path to the test set in scripts/test/test.sh and run the following command for testing:

bash test_cdr.sh <ckpt_path> <test_set_path> <save_dir> <use_af2ag>

For example, you can run

bash test_cdr.sh "./checkpoints/best_cdrh3.ckpt" \
"./all_data/RAbD/test.json" \
"./results/single_cdr_design/" \
"True"

which will save the generated results (PDB files and a summary.json) to ./results/single_cdr_design/.

Affinity Optimization

We use SAbDab for training and the antibodies in SKEMPI V2.0 for testing. Similarly, please first revise the settings in scripts/train/configs/single_cdr_opt.json.

For training, you can run

pythontrain.py--tasksingle_cdr_opt--gpus1--wandb_offline1--flexible1--model_typedyAbOpt--train_set ./all_data/SKEMPI/train.json--valid_set ./all_data/SKEMPI/valid.json--test_setall_data/SKEMPI/test.json--save_dir ./all_data/RAbD/single_cdr_opt/--ex_namedyAbOpt_v1--module_type1

We have provided the trained checkpoints at checkpoints/best_affi_opt.ckpt and checkpoints/cdrh3_ddg_predictor.ckpt. The optimization test can be conducted through:

pythonopt_gen_new.py--ckpt ./checkpoints/best_opt.ckpt \
--predictor_ckpt ./checkpoints/cdrh3_ddg_predictor.ckpt \
--summary_json ./all_data/SKEMPI/test.json \
--save_dir ./results/affi_8_50/ \
--num_residue_changes8 \
--num_optimize_steps50

which will do 50 steps of gradient search without restrictions on the maximum number of changed residues (change 8 to any number to restrict the upperbound of $\Delta L$).

Complex Structure Prediction

Same as dyMEAN, we also use SAbDab for training and IgFold for testing. To train the model, you can run:

python train.py --task struct_prediction --gpus 1 --wandb_offline 1 --flexible 1 --model_type dyAb --ex_name dyAb_struct_pred_2 --module_type 1 --batch_size 64&

We have also provided the trained checkpoint at checkpoints/best_struc_pred.ckpt. Then please run the following command for testing: Otherwise, you can also run the following command to test the model.

bash test_pred.sh "./checkpoints/best_pred.ckpt" \
"./all_data/IgFold/test.json" \
"./results/struct_pred/" \
"True"

Evaluation

To obtain the metrics for CDR-H3 design and Structure prediction task, you can run

python cal_metrics.py --test_set "path to your summery.json"

As you can find a summary.json under each folder you choose to store the results, you may also change the config in ./scripts/configs.

Note: you may change the path for the referenced PDB file(i.e. before/after renumbering), which may introduce slight variance to the results.

For the metrics in the affinity optimization task, you can easily find it in the log.txt file under the output folder.

Contact

Feel free to contact us at tancheng@westlake.edu.cn or yj.zhang@mail.mcgill.ca

Acknowledgements

We highly thank "dyMEAN: End-to-End Full-Atom Antibody Design". [paper, code]

Debugging Issues

Also, if you encounter any issues related to Rosetta, you can simply go into the Rosetta/rosetta.source.release-337/main/source folder and recomplie it using the following command:

./scons.py mode=release bin 

Citation

@inproceedings{tan2025dyab,
title={dyAb: Flow Matching for Flexible Antibody Design with AlphaFold-driven Pre-binding Antigen},
author={Tan, Cheng and Zhang, Yijie and Gao, Zhangyang and Huang, Yufei and Lin, Haitao and Wu, Lirong and Wu, Fandi and Blanchette, Mathieu and Li, Stan Z},
booktitle={Proceedings of the AAAI Conference on Artificial Intelligence},
volume={39},
number={1},
pages={782--790},
year={2025}
}

About

The official implementation of the AAAI'25 paper "dyAb: Flow Matching for Flexible Antibody Design with AlphaFold-driven Pre-binding Antigen".

Resources

Stars

14 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

dyAb: Flow Matching for Flexible Antibody Design with AlphaFold-driven Pre-binding Antigen

The official implementation of our AAAI 25' paper dyAb: Flow Matching for Flexible Antibody Design with AlphaFold-driven Pre-binding Antigen.

Quick Links

Setup

The environment and prerequisites

1. Environment

We have provided the env.yml for creating the runtime conda environment just by running:

conda env create -f env.yml

2. Scorers

Please first prepare the scorers for TMscore and DockQ as follows:

The source code for assessing TMscore is at evaluation/TMscore.cpp. Please compile it by:

g++ -static -O3 -ffast-math -lm -o evaluation/TMscore evaluation/TMscore.cpp

To prepare the DockQ scorer, please clone its official github and compile the prerequisites according to its instructions. After that, please revise the DOCKQ_DIR variable in the configs.py to point to the directory containing the DockQ project (e.g. ./DockQ).

The lDDT scorer is in the conda environment, and the $\Delta\Delta G$ scorer is integrated into our codes, therefore they don't need additional preparations.

3. PDB data

Please download all the structure data of antibodies from the download page of SAbDab. Please enter the Downloads tab on the left of the web page and download the archived zip file for the structures, then decompress it:

wget https://opig.stats.ox.ac.uk/webapps/newsabdab/sabdab/archive/all/ -O all_structures.zip
unzip all_structures.zip

You should get a folder named all_structures with the following hierarchy:

├── all_structures
│ ├── chothia
│ ├── imgt
│ ├── raw

Each subfolder contains the pdb files renumbered with the corresponding scheme. We use IMGT in the paper, so the imgt subfolder is what we care about.

Since pdb files are heavy to process, usually people will generate a summary file for the structural database which records the basic information about each structure for fast access. We have provided the summary of the dataset retrieved at November 12, 2022 (summaries/sabdab_summary.tsv). Since the dataset is updated on a weekly basis, if you want to use the latest version, please download it from the official website.

For the AFDB part, we extracted the antigen sequence from the original antigen-antibody complex and used AlphaFold2 to predict its structure. Then, we aligned them with the original antigen structures using Kabsch algorithm and replaced the original epitopes with the AlphaFold-predicted ones. We have provided the processed dataset we curated for the experiments, which covers all the required PDB files among various datasets. The datasets and checkpoints could be downloaded here. After unzipping the folder, the AF2_antigen_aligned_pdbs folder should be placed under all_data folder, and the corresponding json files should also be placed there. All other checkpoints should be placed under checkpoints folder.

Data Preprocessing

Data

We follow the data preprocessing techiniques proposed by DyMEAN, who have provided the script for all these procedures in scripts/data_preprocess.sh. Suppose the IMGT-renumbered pdb data are located at all_structures/imgt/, and that you want to store the processed data (~5G) at all_data, you can simply run:

bash scripts/data_preprocess.sh all_structures/imgt all_data

Then, we have provided the AF2-predicted antigens needed in the training/inferencing process. Follow the link to download the AF2_antigen_aligned_pdbs folder and af2_monomer_pdbid.json, place them under all_data folder.

Experiments

The trained checkpoints for each task are provided here github release page. To use them, please download the ones you are interested in and save them into the folder ./checkpoints. For the affinity optimization task, we used the same predictor as dyMEAN's.

CDR-H3 Design

We use SAbDab for training and RAbD for testing. Please first revise the settings in scripts/train/configs/single_cdr_design.json (path to datasets and other hyperparameters) and then run the below command for training:

python train.py --task single_cdr_design --gpus 1 --wandb_offline 1 --flexible 1 --model_type dyAb --ex_name dyAb_single_cdrh3_m1 --module_type 1

We have also provided the trained checkpoint at checkpoints/best_cdr.ckpt. Then please revise the path to the test set in scripts/test/test.sh and run the following command for testing:

bash test_cdr.sh <ckpt_path> <test_set_path> <save_dir> <use_af2ag>

For example, you can run

bash test_cdr.sh "./checkpoints/best_cdrh3.ckpt" \
"./all_data/RAbD/test.json" \
"./results/single_cdr_design/" \
"True"

which will save the generated results (PDB files and a summary.json) to ./results/single_cdr_design/.

Affinity Optimization

We use SAbDab for training and the antibodies in SKEMPI V2.0 for testing. Similarly, please first revise the settings in scripts/train/configs/single_cdr_opt.json.

For training, you can run

pythontrain.py--tasksingle_cdr_opt--gpus1--wandb_offline1--flexible1--model_typedyAbOpt--train_set ./all_data/SKEMPI/train.json--valid_set ./all_data/SKEMPI/valid.json--test_setall_data/SKEMPI/test.json--save_dir ./all_data/RAbD/single_cdr_opt/--ex_namedyAbOpt_v1--module_type1

We have provided the trained checkpoints at checkpoints/best_affi_opt.ckpt and checkpoints/cdrh3_ddg_predictor.ckpt. The optimization test can be conducted through:

pythonopt_gen_new.py--ckpt ./checkpoints/best_opt.ckpt \
--predictor_ckpt ./checkpoints/cdrh3_ddg_predictor.ckpt \
--summary_json ./all_data/SKEMPI/test.json \
--save_dir ./results/affi_8_50/ \
--num_residue_changes8 \
--num_optimize_steps50

which will do 50 steps of gradient search without restrictions on the maximum number of changed residues (change 8 to any number to restrict the upperbound of $\Delta L$).

Complex Structure Prediction

Same as dyMEAN, we also use SAbDab for training and IgFold for testing. To train the model, you can run:

python train.py --task struct_prediction --gpus 1 --wandb_offline 1 --flexible 1 --model_type dyAb --ex_name dyAb_struct_pred_2 --module_type 1 --batch_size 64&

We have also provided the trained checkpoint at checkpoints/best_struc_pred.ckpt. Then please run the following command for testing: Otherwise, you can also run the following command to test the model.

bash test_pred.sh "./checkpoints/best_pred.ckpt" \
"./all_data/IgFold/test.json" \
"./results/struct_pred/" \
"True"

Evaluation

To obtain the metrics for CDR-H3 design and Structure prediction task, you can run

python cal_metrics.py --test_set "path to your summery.json"

As you can find a summary.json under each folder you choose to store the results, you may also change the config in ./scripts/configs.

Note: you may change the path for the referenced PDB file(i.e. before/after renumbering), which may introduce slight variance to the results.

For the metrics in the affinity optimization task, you can easily find it in the log.txt file under the output folder.

Contact

Feel free to contact us at tancheng@westlake.edu.cn or yj.zhang@mail.mcgill.ca

Acknowledgements

We highly thank "dyMEAN: End-to-End Full-Atom Antibody Design". [paper, code]

Debugging Issues

Also, if you encounter any issues related to Rosetta, you can simply go into the Rosetta/rosetta.source.release-337/main/source folder and recomplie it using the following command:

./scons.py mode=release bin 

Citation

@inproceedings{tan2025dyab,
title={dyAb: Flow Matching for Flexible Antibody Design with AlphaFold-driven Pre-binding Antigen},
author={Tan, Cheng and Zhang, Yijie and Gao, Zhangyang and Huang, Yufei and Lin, Haitao and Wu, Lirong and Wu, Fandi and Blanchette, Mathieu and Li, Stan Z},
booktitle={Proceedings of the AAAI Conference on Artificial Intelligence},
volume={39},
number={1},
pages={782--790},
year={2025}
}

About

The official implementation of the AAAI'25 paper "dyAb: Flow Matching for Flexible Antibody Design with AlphaFold-driven Pre-binding Antigen".

Resources

Stars

14 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

dyAb: Flow Matching for Flexible Antibody Design with AlphaFold-driven Pre-binding Antigen

The official implementation of our AAAI 25' paper dyAb: Flow Matching for Flexible Antibody Design with AlphaFold-driven Pre-binding Antigen.

Quick Links

Setup

The environment and prerequisites

1. Environment

We have provided the env.yml for creating the runtime conda environment just by running:

conda env create -f env.yml

2. Scorers

Please first prepare the scorers for TMscore and DockQ as follows:

The source code for assessing TMscore is at evaluation/TMscore.cpp. Please compile it by:

g++ -static -O3 -ffast-math -lm -o evaluation/TMscore evaluation/TMscore.cpp

To prepare the DockQ scorer, please clone its official github and compile the prerequisites according to its instructions. After that, please revise the DOCKQ_DIR variable in the configs.py to point to the directory containing the DockQ project (e.g. ./DockQ).

The lDDT scorer is in the conda environment, and the $\Delta\Delta G$ scorer is integrated into our codes, therefore they don't need additional preparations.

3. PDB data

Please download all the structure data of antibodies from the download page of SAbDab. Please enter the Downloads tab on the left of the web page and download the archived zip file for the structures, then decompress it:

wget https://opig.stats.ox.ac.uk/webapps/newsabdab/sabdab/archive/all/ -O all_structures.zip
unzip all_structures.zip

You should get a folder named all_structures with the following hierarchy:

├── all_structures
│ ├── chothia
│ ├── imgt
│ ├── raw

Each subfolder contains the pdb files renumbered with the corresponding scheme. We use IMGT in the paper, so the imgt subfolder is what we care about.

Since pdb files are heavy to process, usually people will generate a summary file for the structural database which records the basic information about each structure for fast access. We have provided the summary of the dataset retrieved at November 12, 2022 (summaries/sabdab_summary.tsv). Since the dataset is updated on a weekly basis, if you want to use the latest version, please download it from the official website.

For the AFDB part, we extracted the antigen sequence from the original antigen-antibody complex and used AlphaFold2 to predict its structure. Then, we aligned them with the original antigen structures using Kabsch algorithm and replaced the original epitopes with the AlphaFold-predicted ones. We have provided the processed dataset we curated for the experiments, which covers all the required PDB files among various datasets. The datasets and checkpoints could be downloaded here. After unzipping the folder, the AF2_antigen_aligned_pdbs folder should be placed under all_data folder, and the corresponding json files should also be placed there. All other checkpoints should be placed under checkpoints folder.

Data Preprocessing

Data

We follow the data preprocessing techiniques proposed by DyMEAN, who have provided the script for all these procedures in scripts/data_preprocess.sh. Suppose the IMGT-renumbered pdb data are located at all_structures/imgt/, and that you want to store the processed data (~5G) at all_data, you can simply run:

bash scripts/data_preprocess.sh all_structures/imgt all_data

Then, we have provided the AF2-predicted antigens needed in the training/inferencing process. Follow the link to download the AF2_antigen_aligned_pdbs folder and af2_monomer_pdbid.json, place them under all_data folder.

Experiments

The trained checkpoints for each task are provided here github release page. To use them, please download the ones you are interested in and save them into the folder ./checkpoints. For the affinity optimization task, we used the same predictor as dyMEAN's.

CDR-H3 Design

We use SAbDab for training and RAbD for testing. Please first revise the settings in scripts/train/configs/single_cdr_design.json (path to datasets and other hyperparameters) and then run the below command for training:

python train.py --task single_cdr_design --gpus 1 --wandb_offline 1 --flexible 1 --model_type dyAb --ex_name dyAb_single_cdrh3_m1 --module_type 1

We have also provided the trained checkpoint at checkpoints/best_cdr.ckpt. Then please revise the path to the test set in scripts/test/test.sh and run the following command for testing:

bash test_cdr.sh <ckpt_path> <test_set_path> <save_dir> <use_af2ag>

For example, you can run

bash test_cdr.sh "./checkpoints/best_cdrh3.ckpt" \
"./all_data/RAbD/test.json" \
"./results/single_cdr_design/" \
"True"

which will save the generated results (PDB files and a summary.json) to ./results/single_cdr_design/.

Affinity Optimization

We use SAbDab for training and the antibodies in SKEMPI V2.0 for testing. Similarly, please first revise the settings in scripts/train/configs/single_cdr_opt.json.

For training, you can run

pythontrain.py--tasksingle_cdr_opt--gpus1--wandb_offline1--flexible1--model_typedyAbOpt--train_set ./all_data/SKEMPI/train.json--valid_set ./all_data/SKEMPI/valid.json--test_setall_data/SKEMPI/test.json--save_dir ./all_data/RAbD/single_cdr_opt/--ex_namedyAbOpt_v1--module_type1

We have provided the trained checkpoints at checkpoints/best_affi_opt.ckpt and checkpoints/cdrh3_ddg_predictor.ckpt. The optimization test can be conducted through:

pythonopt_gen_new.py--ckpt ./checkpoints/best_opt.ckpt \
--predictor_ckpt ./checkpoints/cdrh3_ddg_predictor.ckpt \
--summary_json ./all_data/SKEMPI/test.json \
--save_dir ./results/affi_8_50/ \
--num_residue_changes8 \
--num_optimize_steps50

which will do 50 steps of gradient search without restrictions on the maximum number of changed residues (change 8 to any number to restrict the upperbound of $\Delta L$).

Complex Structure Prediction

Same as dyMEAN, we also use SAbDab for training and IgFold for testing. To train the model, you can run:

python train.py --task struct_prediction --gpus 1 --wandb_offline 1 --flexible 1 --model_type dyAb --ex_name dyAb_struct_pred_2 --module_type 1 --batch_size 64&

We have also provided the trained checkpoint at checkpoints/best_struc_pred.ckpt. Then please run the following command for testing: Otherwise, you can also run the following command to test the model.

bash test_pred.sh "./checkpoints/best_pred.ckpt" \
"./all_data/IgFold/test.json" \
"./results/struct_pred/" \
"True"

Evaluation

To obtain the metrics for CDR-H3 design and Structure prediction task, you can run

python cal_metrics.py --test_set "path to your summery.json"

As you can find a summary.json under each folder you choose to store the results, you may also change the config in ./scripts/configs.

Note: you may change the path for the referenced PDB file(i.e. before/after renumbering), which may introduce slight variance to the results.

For the metrics in the affinity optimization task, you can easily find it in the log.txt file under the output folder.

Contact

Feel free to contact us at tancheng@westlake.edu.cn or yj.zhang@mail.mcgill.ca

Acknowledgements

We highly thank "dyMEAN: End-to-End Full-Atom Antibody Design". [paper, code]

Debugging Issues

Also, if you encounter any issues related to Rosetta, you can simply go into the Rosetta/rosetta.source.release-337/main/source folder and recomplie it using the following command:

./scons.py mode=release bin 

Citation

@inproceedings{tan2025dyab,
title={dyAb: Flow Matching for Flexible Antibody Design with AlphaFold-driven Pre-binding Antigen},
author={Tan, Cheng and Zhang, Yijie and Gao, Zhangyang and Huang, Yufei and Lin, Haitao and Wu, Lirong and Wu, Fandi and Blanchette, Mathieu and Li, Stan Z},
booktitle={Proceedings of the AAAI Conference on Artificial Intelligence},
volume={39},
number={1},
pages={782--790},
year={2025}
}

About

The official implementation of the AAAI'25 paper "dyAb: Flow Matching for Flexible Antibody Design with AlphaFold-driven Pre-binding Antigen".

Resources

Stars

14 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

dyAb: Flow Matching for Flexible Antibody Design with AlphaFold-driven Pre-binding Antigen

The official implementation of our AAAI 25' paper dyAb: Flow Matching for Flexible Antibody Design with AlphaFold-driven Pre-binding Antigen.

Quick Links

Setup

The environment and prerequisites

1. Environment

We have provided the env.yml for creating the runtime conda environment just by running:

conda env create -f env.yml

2. Scorers

Please first prepare the scorers for TMscore and DockQ as follows:

The source code for assessing TMscore is at evaluation/TMscore.cpp. Please compile it by:

g++ -static -O3 -ffast-math -lm -o evaluation/TMscore evaluation/TMscore.cpp

To prepare the DockQ scorer, please clone its official github and compile the prerequisites according to its instructions. After that, please revise the DOCKQ_DIR variable in the configs.py to point to the directory containing the DockQ project (e.g. ./DockQ).

The lDDT scorer is in the conda environment, and the $\Delta\Delta G$ scorer is integrated into our codes, therefore they don't need additional preparations.

3. PDB data

Please download all the structure data of antibodies from the download page of SAbDab. Please enter the Downloads tab on the left of the web page and download the archived zip file for the structures, then decompress it:

wget https://opig.stats.ox.ac.uk/webapps/newsabdab/sabdab/archive/all/ -O all_structures.zip
unzip all_structures.zip

You should get a folder named all_structures with the following hierarchy:

├── all_structures
│ ├── chothia
│ ├── imgt
│ ├── raw

Each subfolder contains the pdb files renumbered with the corresponding scheme. We use IMGT in the paper, so the imgt subfolder is what we care about.

Since pdb files are heavy to process, usually people will generate a summary file for the structural database which records the basic information about each structure for fast access. We have provided the summary of the dataset retrieved at November 12, 2022 (summaries/sabdab_summary.tsv). Since the dataset is updated on a weekly basis, if you want to use the latest version, please download it from the official website.

For the AFDB part, we extracted the antigen sequence from the original antigen-antibody complex and used AlphaFold2 to predict its structure. Then, we aligned them with the original antigen structures using Kabsch algorithm and replaced the original epitopes with the AlphaFold-predicted ones. We have provided the processed dataset we curated for the experiments, which covers all the required PDB files among various datasets. The datasets and checkpoints could be downloaded here. After unzipping the folder, the AF2_antigen_aligned_pdbs folder should be placed under all_data folder, and the corresponding json files should also be placed there. All other checkpoints should be placed under checkpoints folder.

Data Preprocessing

Data

We follow the data preprocessing techiniques proposed by DyMEAN, who have provided the script for all these procedures in scripts/data_preprocess.sh. Suppose the IMGT-renumbered pdb data are located at all_structures/imgt/, and that you want to store the processed data (~5G) at all_data, you can simply run:

bash scripts/data_preprocess.sh all_structures/imgt all_data

Then, we have provided the AF2-predicted antigens needed in the training/inferencing process. Follow the link to download the AF2_antigen_aligned_pdbs folder and af2_monomer_pdbid.json, place them under all_data folder.

Experiments

The trained checkpoints for each task are provided here github release page. To use them, please download the ones you are interested in and save them into the folder ./checkpoints. For the affinity optimization task, we used the same predictor as dyMEAN's.

CDR-H3 Design

We use SAbDab for training and RAbD for testing. Please first revise the settings in scripts/train/configs/single_cdr_design.json (path to datasets and other hyperparameters) and then run the below command for training:

python train.py --task single_cdr_design --gpus 1 --wandb_offline 1 --flexible 1 --model_type dyAb --ex_name dyAb_single_cdrh3_m1 --module_type 1

We have also provided the trained checkpoint at checkpoints/best_cdr.ckpt. Then please revise the path to the test set in scripts/test/test.sh and run the following command for testing:

bash test_cdr.sh <ckpt_path> <test_set_path> <save_dir> <use_af2ag>

For example, you can run

bash test_cdr.sh "./checkpoints/best_cdrh3.ckpt" \
"./all_data/RAbD/test.json" \
"./results/single_cdr_design/" \
"True"

which will save the generated results (PDB files and a summary.json) to ./results/single_cdr_design/.

Affinity Optimization

We use SAbDab for training and the antibodies in SKEMPI V2.0 for testing. Similarly, please first revise the settings in scripts/train/configs/single_cdr_opt.json.

For training, you can run

pythontrain.py--tasksingle_cdr_opt--gpus1--wandb_offline1--flexible1--model_typedyAbOpt--train_set ./all_data/SKEMPI/train.json--valid_set ./all_data/SKEMPI/valid.json--test_setall_data/SKEMPI/test.json--save_dir ./all_data/RAbD/single_cdr_opt/--ex_namedyAbOpt_v1--module_type1

We have provided the trained checkpoints at checkpoints/best_affi_opt.ckpt and checkpoints/cdrh3_ddg_predictor.ckpt. The optimization test can be conducted through:

pythonopt_gen_new.py--ckpt ./checkpoints/best_opt.ckpt \
--predictor_ckpt ./checkpoints/cdrh3_ddg_predictor.ckpt \
--summary_json ./all_data/SKEMPI/test.json \
--save_dir ./results/affi_8_50/ \
--num_residue_changes8 \
--num_optimize_steps50

which will do 50 steps of gradient search without restrictions on the maximum number of changed residues (change 8 to any number to restrict the upperbound of $\Delta L$).

Complex Structure Prediction

Same as dyMEAN, we also use SAbDab for training and IgFold for testing. To train the model, you can run:

python train.py --task struct_prediction --gpus 1 --wandb_offline 1 --flexible 1 --model_type dyAb --ex_name dyAb_struct_pred_2 --module_type 1 --batch_size 64&

We have also provided the trained checkpoint at checkpoints/best_struc_pred.ckpt. Then please run the following command for testing: Otherwise, you can also run the following command to test the model.

bash test_pred.sh "./checkpoints/best_pred.ckpt" \
"./all_data/IgFold/test.json" \
"./results/struct_pred/" \
"True"

Evaluation

To obtain the metrics for CDR-H3 design and Structure prediction task, you can run

python cal_metrics.py --test_set "path to your summery.json"

As you can find a summary.json under each folder you choose to store the results, you may also change the config in ./scripts/configs.

Note: you may change the path for the referenced PDB file(i.e. before/after renumbering), which may introduce slight variance to the results.

For the metrics in the affinity optimization task, you can easily find it in the log.txt file under the output folder.

Contact

Feel free to contact us at tancheng@westlake.edu.cn or yj.zhang@mail.mcgill.ca

Acknowledgements

We highly thank "dyMEAN: End-to-End Full-Atom Antibody Design". [paper, code]

Debugging Issues

Also, if you encounter any issues related to Rosetta, you can simply go into the Rosetta/rosetta.source.release-337/main/source folder and recomplie it using the following command:

./scons.py mode=release bin 

Citation

@inproceedings{tan2025dyab,
title={dyAb: Flow Matching for Flexible Antibody Design with AlphaFold-driven Pre-binding Antigen},
author={Tan, Cheng and Zhang, Yijie and Gao, Zhangyang and Huang, Yufei and Lin, Haitao and Wu, Lirong and Wu, Fandi and Blanchette, Mathieu and Li, Stan Z},
booktitle={Proceedings of the AAAI Conference on Artificial Intelligence},
volume={39},
number={1},
pages={782--790},
year={2025}
}

About

The official implementation of the AAAI'25 paper "dyAb: Flow Matching for Flexible Antibody Design with AlphaFold-driven Pre-binding Antigen".

Resources

Stars

14 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages