Skip to content

CaviTracer tool for detecting channels, tunnels, pores#2018

Open
karolamik13 wants to merge 75 commits intoprody:mainfrom
karolamik13:prody-cavifinder-reorg
Open

CaviTracer tool for detecting channels, tunnels, pores#2018
karolamik13 wants to merge 75 commits intoprody:mainfrom
karolamik13:prody-cavifinder-reorg

Conversation

@karolamik13
Copy link
Contributor

@karolamik13 karolamik13 commented Dec 18, 2024

CaviTracer, created by Eryk Trzcinski, as his MSc work under my supervision.
Additional installation of open3D package is required:
pip install open3d

Test functions:
from prody import *

  1. Single PDB:
    p = parsePDB('1tqn.pdb')
    atoms = p.select("protein")
    channels, surface = calcChannels(atoms, output_path='channels_output.pdb')
    showCavities(surface)

To create 3D model to display it in ProDy
vmd_path = '/usr/local/bin/vmd'
model = getVmdModel(vmd_path, atoms)

To display channels (all or one by one):
showChannels(channels, surface=surface, model=model)
showChannels(channels, model=model)
getChannelParameters(channels)
showCavities(surface, show_surface=True)

Save all channels independently as PDB:
output = 'chanels_test'
channels, surface = calcChannels(atoms, output, separate=True)

Display channel 1:

showChannels(channels[1], model)

selected_channels = [channels[1], channels[8]]
showChannels(selected_channels, model)

selected_channels = channels[1:4]
lengths, bottlenecks, volumes = getChannelParameters(selected_channels)
selected_channels_atoms = getChannelAtoms(selected_channels)

atoms_protein = getChannelAtoms(channels, atoms)

Extracting residues that are forming channel[1]:
atoms_protein = getChannelAtoms(channels[1], atoms)
len(atoms_protein.getResnames())

distance = 4
residues = atoms_protein.select('same residue as exwithin '+str(distance)+' of resname FIL')
residues.select('name CA').getResnames(), residues.select('name CA').getResnums()
list(zip(residues.select('name CA').getResnames(), residues.select('name CA').getResnums()))

  1. Multiple frames:
    p2 = parsePDB('LXmulti.pdb')
    channels2, surfaces2 = calcChannelsMultipleFrames(p2)

To display particular channel:
channels2[4][1]

model2 = getVmdModel(vmd_path, p2)
showChannels(channels2[4][1], model2)
showChannels(channels2[4][2], model2)

  1. Trajectories:
    PDBfile = 'L_traj.pdb'
    DCDfile = 'L_traj.dcd'
    atoms = parsePDB(PDBfile)
    dcd = Trajectory(DCDfile)
    dcd.link(atoms)
    dcd.setCoords(atoms)

channels3, surfaces3 = calcChannelsMultipleFrames(atoms, dcd)
all_channels, all_surfaces=calcChannelsMultipleFrames(atoms, dcd, output_path = 'channels_dcd', separate=True)

karolamik13 and others added 30 commits August 16, 2024 16:43
recent changes in WatFinder from main ProDy
The first version of a tool for the detection of channels developed by Erykiusz Trzcinski
@jamesmkrieger
Copy link
Contributor

@jamesmkrieger did you get a chance to test this?

I don't think so really

@karolamik13
Copy link
Contributor Author

At the current stage, a few more changes are needed. CaviTracer can be omitted in the upcoming ProDy release.

Copy link
Contributor

@jamesmkrieger jamesmkrieger left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Someone still needs to go through and check this in detail, which I haven't managed to do yet

At any rate, it would be good to have unit tests please

@karolamik13
Copy link
Contributor Author

Hi James,
I plan to do it in this week. I will prepare tutorial in Jupyter Notebook file for other people who would be checking/testing CaviTracer functions.

@jamesmkrieger
Copy link
Contributor

Sounds good!

Copy link
Contributor

@jamesmkrieger jamesmkrieger left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe make that an option

@karolamik13
Copy link
Contributor Author

Maybe make that an option
If we were to have hydrogen atoms included, we should add various sphere radius for different atoms (hydrogens are crucial here being much smaller), and that will slow down a lot of predictions of the channels/tunnels. Lack of hydrogen atoms will not change much the outcome (I consulted with an expert in that field). Later, I can think about including a variety of spheres, but for now, this is the best option.

@jamesmkrieger
Copy link
Contributor

Maybe make that an option
If we were to have hydrogen atoms included, we should add various sphere radius for different atoms (hydrogens are crucial here being much smaller), and that will slow down a lot of predictions of the channels/tunnels. Lack of hydrogen atoms will not change much the outcome (I consulted with an expert in that field). Later, I can think about including a variety of spheres, but for now, this is the best option.

ok, sounds good

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants