Download EPT/scripts/process_data/process_PDBBind.py from BAAI/AIDD: direct link, hf CLI and curl.
- Browser
- Download file 3.45 kB
-
https://huggingface.co/BAAI/AIDD/resolve/main/EPT/scripts/process_data/process_PDBBind.py
- Command line
-
hf download hf://BAAI/AIDD/EPT/scripts/process_data/process_PDBBind.py
-
curl -L -o process_PDBBind.py https://huggingface.co/BAAI/AIDD/resolve/main/EPT/scripts/process_data/process_PDBBind.py
3.45 kB
| #!/usr/bin/python | |
| # -*- coding:utf-8 -*- | |
| import os | |
| import re | |
| import argparse | |
| import numpy as np | |
| from utils.logger import print_log | |
| from data.converter.blocks_to_data import blocks_to_data | |
| from data.converter.mol2_to_blocks import mol2_to_blocks | |
| from data.converter.pdb_to_list_blocks import pdb_to_list_blocks | |
| from data.mmap_dataset import create_mmap | |
| def parse(): | |
| parser = argparse.ArgumentParser(description='Process PDBBind') | |
| parser.add_argument('--data_dir', type=str, required=True, | |
| help='Directory of scPDB data') | |
| parser.add_argument('--out_dir', type=str, required=True, | |
| help='Output directory') | |
| return parser.parse_args() | |
| def parse_index(fpath): | |
| with open(fpath, 'r') as fin: | |
| lines = fin.readlines() | |
| data = {} | |
| for line in lines: | |
| if line.startswith('#'): | |
| continue | |
| line = re.split(r'\s+', line) | |
| pdb_id, resolution, year, kd = line[:4] | |
| data[pdb_id] = kd | |
| return data | |
| def process_iterator_PP(data_dir): | |
| indexes = parse_index(os.path.join(data_dir, 'index', 'INDEX_general_PP.2020')) | |
| for pdb_id in indexes: | |
| list_blocks = pdb_to_list_blocks(os.path.join(data_dir, f'{pdb_id}.ent.pdb')) | |
| data = blocks_to_data(*list_blocks) | |
| for key in data: | |
| if isinstance(data[key], np.ndarray): | |
| data[key] = data[key].tolist() | |
| yield pdb_id, data, [len(data['B']), indexes[pdb_id]] | |
| def process_iterator_PL(data_dir, index_file): | |
| indexes = parse_index(index_file) | |
| for pdb_id in indexes: | |
| if not os.path.exists(os.path.join(data_dir, pdb_id)): | |
| continue | |
| prot_fname = os.path.join(data_dir, pdb_id, f'{pdb_id}_protein.pdb') | |
| sm_fname = os.path.join(data_dir, pdb_id, f'{pdb_id}_ligand.mol2') | |
| list_blocks1 = pdb_to_list_blocks(prot_fname) | |
| blocks2 = mol2_to_blocks(sm_fname) | |
| data = blocks_to_data(*(list_blocks1 + [blocks2])) | |
| for key in data: | |
| if isinstance(data[key], np.ndarray): | |
| data[key] = data[key].tolist() | |
| yield pdb_id, data, [len(data['B']), indexes[pdb_id]] | |
| def main(args): | |
| print_log(f'Processing PP') | |
| PP_index_file = os.path.join(args.data_dir, 'PP', 'index', 'INDEX_general_PP.2020') | |
| PP_index = parse_index(PP_index_file) | |
| create_mmap( | |
| process_iterator_PP(os.path.join(args.data_dir, 'PP')), | |
| os.path.join(args.out_dir, 'PP'), len(PP_index) | |
| ) | |
| print_log(f'Processing PL refined set') | |
| PL_refine_index_file = os.path.join(args.data_dir, 'refined-set', 'index', 'INDEX_refined_set.2020') | |
| PL_refine_index = parse_index(PL_refine_index_file) | |
| create_mmap( | |
| process_iterator_PL( | |
| os.path.join(args.data_dir, 'refined-set'), | |
| PL_refine_index_file, | |
| ), os.path.join(args.out_dir, 'refined-set'), len(PL_refine_index) | |
| ) | |
| print_log(f'Processing PL others') | |
| PL_other_index_file = os.path.join(args.data_dir, 'v2020-other-PL', 'index', 'INDEX_general_PL.2020') | |
| PL_other_index = parse_index(PL_other_index_file) | |
| create_mmap( | |
| process_iterator_PL( | |
| os.path.join(args.data_dir, 'v2020-other-PL'), | |
| PL_other_index_file, | |
| ), os.path.join(args.out_dir, 'v2020-other-PL'), len(PL_other_index) - len(PL_refine_index) | |
| ) | |
| print_log('Finished!') | |
| if __name__ == '__main__': | |
| main(parse()) | |