Download EPT/scripts/process_data/process_LBA.py from BAAI/AIDD: direct link, hf CLI and curl.
- Browser
- Download file 2.45 kB
-
https://huggingface.co/BAAI/AIDD/resolve/main/EPT/scripts/process_data/process_LBA.py
- Command line
-
hf download hf://BAAI/AIDD/EPT/scripts/process_data/process_LBA.py
-
curl -L -o process_LBA.py https://huggingface.co/BAAI/AIDD/resolve/main/EPT/scripts/process_data/process_LBA.py
2.45 kB
| #!/usr/bin/python | |
| # -*- coding:utf-8 -*- | |
| import os | |
| import argparse | |
| from typing import List, Tuple, Optional | |
| import numpy as np | |
| import pandas as pd | |
| from rdkit import Chem | |
| import json | |
| import pickle | |
| from utils.logger import print_log | |
| from data.format import Block, Atom | |
| from data.format import VOCAB as VOCAB | |
| from data.converter.df_to_blocks import df_to_blocks | |
| from data.converter.blocks_to_data import blocks_to_data | |
| from data.mmap_dataset import create_mmap | |
| from data.atom3d_lmdb import LMDBDataset | |
| from data.tokenizer.tokenize_3d import TOKENIZER, tokenize_3d | |
| def parse(): | |
| parser = argparse.ArgumentParser(description='Process molecule data from LBA dataset.') | |
| parser.add_argument('--base_path', type=str, required=True, | |
| help='Directory of rdkit_folder') | |
| parser.add_argument('--out_dir', type=str, required=True, | |
| help='Output directory') | |
| return parser.parse_args() | |
| def process_iterator(base_data): | |
| for item in base_data: | |
| # receptor | |
| blocks1 = df_to_blocks(item['atoms_pocket'], key_atom_name='name') | |
| # ligand (each block is an atom) | |
| blocks2 = [] | |
| for row in item['atoms_ligand'].itertuples(): | |
| atom = Atom( | |
| atom_name=getattr(row, 'name'), # e.g. C1, C2, ..., these position code will be a unified encoding such as <sm> (small molecule) in our framework | |
| coordinate=[getattr(row, axis) for axis in ['x', 'y', 'z']], | |
| element=getattr(row, 'element'), | |
| pos_code=VOCAB.atom_pos_sm | |
| ) | |
| blocks2.append(Block( | |
| symbol=atom.element.lower(), | |
| units=[atom] | |
| )) | |
| data = blocks_to_data(blocks1, blocks2) | |
| for key in data: | |
| if isinstance(data[key], np.ndarray): | |
| data[key] = data[key].tolist() | |
| # id, data, [len] (only save the lengths as the properties) | |
| yield item['id'], data, [item['scores']['neglog_aff']] | |
| def main(args): | |
| for split in ['train', 'val', 'test']: | |
| print_log(f'Processing {split} dataset ...') | |
| base_data = LMDBDataset(os.path.join(args.base_path, split)) | |
| create_mmap( | |
| process_iterator(base_data), | |
| os.path.join(args.out_dir,split), | |
| len(base_data) | |
| ) | |
| print_log('Finished!') | |
| if __name__ == '__main__': | |
| main(parse()) |