-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathprocess_pdb.py
56 lines (40 loc) · 1.72 KB
/
process_pdb.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
import os
from Bio.PDB import is_aa
from Bio.PDB import PDBParser, PDBIO, Select
class ProtSelect(Select):
def accept_residue(self, residue):
return 1 if is_aa(residue) == True else 0
class RNASelect(Select):
def accept_residue(self, residue):
return 1 if is_aa(residue) == False and residue.id[0] != "W" else 0
# remove heteroatom
class RemoveHeteroatoms(Select):
def accept_residue(self, residue):
return 1 if residue.id[0] == " " else 0
# split complex into protein and RNA
def split_complex(src_path, save_path, complexs):
for complex in complexs:
# path = os.path.join(src_path, complex)
path = os.path.join(save_path, complex.lower())
if not os.path.exists(path):
os.makedirs(path)
pdb = PDBParser().get_structure(complex, f"{src_path}/{complex}.pdb")
io = PDBIO()
io.set_structure(pdb)
io.save(f"{path}/{complex.lower()}_protein.pdb", ProtSelect())
io.save(f"{path}/{complex.lower()}_ligand.pdb", RNASelect())
# remove heteroatom
def remove_heteroatom(src_path, save_path, complexs):
for complex in complexs:
path = os.path.join(src_path, complex)
dst_path = os.path.join(save_path, complex.lower())
if not os.path.exists(dst_path):
os.makedirs(dst_path)
pdb = PDBParser().get_structure(complex, f"{path}/{complex}_protein.pdb")
io = PDBIO()
io.set_structure(pdb)
io.save(f"{dst_path}/{complex.lower()}_protein.pdb", RemoveHeteroatoms())
pdb = PDBParser().get_structure(complex, f"{path}/{complex}_ligand.pdb")
io = PDBIO()
io.set_structure(pdb)
io.save(f"{dst_path}/{complex.lower()}_ligand.pdb", RemoveHeteroatoms())