Utils

Setup

Copy files

Using list(Path('files').rglob('*.pdb')) will get all the pdb files of subfolders. Here we define a function that can limit the depth of search.


source

rglob


def rglob(
    path, pattern, max_depth
):

Get a file list given folder depths

file_list = list(rglob('files','*.pdb',1))
file_list
[PosixPath('/teamspace/studios/this_studio/kdock/nbs/core/files/7OFF_receptor.pdb'),
 PosixPath('/teamspace/studios/this_studio/kdock/nbs/core/files/7OFF_lig.pdb'),
 PosixPath('/teamspace/studios/this_studio/kdock/nbs/core/files/7OFF.pdb')]

source

copy_files


def copy_files(
    file_list, dest_dir
):

Copy a list of files to the destination directory, or zip them if dest_dir ends with .zip.

# copy_files(file_list,'files/protein.zip') # support zip
copy_files(file_list,'files/protein')
Copied 3 files to files/protein

Get receptor and ligand from pdb


source

get_rec_lig


def get_rec_lig(
    pdb_id:str, # pdb id for download
    lig_id:str, # ligand id shown on the protein page
    out_dir:str='.', # directory path to save pdb files
):

Download pdb and extract receptor and ligand from a PDB ID.

rec_path,lig_path = get_rec_lig('7OFF','VCB','files')
rec_path,lig_path
7OFF.pdb is detected!
('/teamspace/studios/this_studio/kdock/nbs/core/files/7OFF_receptor.pdb',
 '/teamspace/studios/this_studio/kdock/nbs/core/files/7OFF_lig.sdf')

Get ligand box


source

get_box


def get_box(
    sdf_file, autobox_add:float=4.0, tolist:bool=False
):

Get the box coordinates of ligand.sdf; mimic GNINA’s –autobox_ligand behavior.

box = get_box(lig_path)
box
{'center_x': 38.848,
 'center_y': -26.77,
 'center_z': 10.419,
 'size_x': 14.652,
 'size_y': 8.942,
 'size_z': 12.509}
box_list = get_box(lig_path,tolist=True)
box_list
[38.848, -26.77, 10.419, 14.652, 8.942, 12.509]

Visualize mol


source

view_mol


def view_mol(
    file, # sdf or pdb file
):

Visualize pdb or sdf file

view_mol('files/7OFF_receptor.pdb')

3Dmol.js failed to load for some reason. Please check your browser console for error messages.


source

view_complex


def view_complex(
    receptor, # protein file
    ligand, # ligand (green), or docked ligand
    ori_ligand:NoneType=None, # original ligand (yellow)
    box:NoneType=None, # optional box: [x, y, z, sizeX, sizeY, sizeZ]
):

Visualize the receptor, ligand, optional original ligand, and optional box via py3Dmol.

box_list = get_box('files/7OFF_lig.sdf',tolist=True)
box_list
[38.848, -26.77, 10.419, 14.652, 8.942, 12.509]
view_complex('files/7OFF.pdb','files/7OFF_lig.sdf',box=box_list)

3Dmol.js failed to load for some reason. Please check your browser console for error messages.

End