prody / ProDy

A Python Package for Protein Dynamics Analysis
http://prody.csb.pitt.edu
Other
417 stars 152 forks source link

Doubts about Perturbation Response Scanning (PRS) implementation #1369

Closed fnaj77 closed 3 years ago

fnaj77 commented 3 years ago

Hi, I just installed ProDy and I'm trying to use Perturbation Response Scanning (PRS) analysis but I have some doubts about the correctness of its implementation in ProDy.

In all published papers[1-4] listed in its tutorial introduction page[5] the method is, essentially, described as the application of random forces to the covariance matrix of the protein under study.

My doubts stem from the fact the looking at the calcPerturbResponse function[6] there are no random forces applied to the covariance matrix at all, but only rows and columns summations of the squared covariance matrix (lines 92 and 99 of perturb.py source file).

As proof, if you run the analysis twice with the same protein, you get the exact same results, while I would expect to get, at least slightly, different values as random forces are involved in the analysis.

You can test it running twice the tutorial example: from prody import * from pylab import * ion() ` ampar_ca = parsePDB('3kg2', subset='ca') anm_ampar = ANM('AMPAR 3kg2') anm_ampar.buildHessian(ampar_ca) anm_ampar.calcModes('all') prs_mat1, effectiveness1, sensitivity1 = calcPerturbResponse(anm_ampar) prs_mat2, effectiveness2, sensitivity2 = calcPerturbResponse(anm_ampar) prs_mat1 == prs_mat2 effectiveness1 == effectiveness2 sensitivity1 == sensitivity2`

Am I missing or misunderstanding something? Thank you for your help.

[1] Atilgan C, Atilgan AR. Perturbation-response scanning reveals ligand entry-exit mechanisms of ferric binding protein. PLoS Comput. Biol. 2009 5:e1000544. [2] Atilgan C, Gerek ZN, Ozkan SB, Atilgan AR. Manipulation of conformational change in proteins by single-residue perturbations. Biophys. J. 2010 99(3):933-43 [3] General IJ, Liu Y, Blackburn ME, Mao W, Gierasch LM, Bahar I. ATPase subdomain IA is a mediator of interdomain allostery in Hsp70 molecular chaperones. PLoS Comput. Biol. 2014 10:e1003624. [4] Dutta A, Krieger J, Lee JY, Garcia-Nafria J, Greger IH, Bahar I. Cooperative Dynamics of Intact AMPA and NMDA Glutamate Receptors: Similarities and Subfamily-Specific Differences. Structure 2015 23:1692-1704 [5] http://prody.csb.pitt.edu/tutorials/prs_tutorial/intro.html [6] http://prody.csb.pitt.edu/_modules/prody/dynamics/perturb.html#calcPerturbResponse

jamesmkrieger commented 3 years ago

Hi,

No, you're not misunderstanding anything. Our implementation does indeed differ from the canonical one.

What we have done is looked at the maths further and realised that under the influence of enough random forces, the theory collapses to the covariance giving the response magnitude directly. Therefore, our implementation is a sped up version for the limit of large numbers of forces. This does have limitations, of course, such as the inability to look at the effects of individual forces and obtain 3D information, and we are planning to expand it at some point, but what we have should still be valid.

I hope this addresses your concerns.

Best wishes James

fnaj77 commented 3 years ago

Hi James, thank you very much for the fast and clear answer.

Sadly, the ability to look at the effects of individual forces and obtain 3D information is exactly what I was looking for. Is there a canonical implementation of the method in a old ProDy version that I can use?

Alternatively, do you already have an estimated release date of the expanded version of the method to get what I looking for?

Thank you again.

jamesmkrieger commented 3 years ago

Yes, it should be in v1.8

No, I don't know when I'll unify the two versions but it is definitely on my things wanted list. I had an issue about this before (#374).

fnaj77 commented 3 years ago

The oldest version of ProDy with the PRS analysis that I can find here on github is 1.9 and it is already in its new form, without the application of random forces.

Anyway, despite its inability to obtain 3D deformations, is it correct to say that the results of the new procedure can be used and interpreted in the same way of the canonical method?

In particular, even if not covered in the tutorial, can I calculate the pearson correlation coefficient between each row of the perturbation matrix and the experimental displacements to calculate the goodness of the predicted perturbation?

jamesmkrieger commented 3 years ago

You should be able to access more from pypi using pip:

pip install prody==1.8

fnaj77 commented 3 years ago

Sorry, I was not clear, I can't find the PRS analysis (perturb.py file, actually) before version 1.9. The PRS analysis defined in perturb.py in branch 1.9 is already in its new form, without the application of random forces.

jamesmkrieger commented 3 years ago

PRS is not in its own file at that point but is part of dynamics/analysis.py

fnaj77 commented 3 years ago

Sorry James, I assumed it was in the same file. I find out the function with the canonical implementation of the method, thank you very much.

Is there already somewhere in the code an helper function to perform the analysis of the directionality of the response to the applied random forces? Something that I can use to produce an image like Fig.7 present in the original paper[1]? Or have I to implement it from scratch?

[1] Atilgan C, Atilgan AR. Perturbation-response scanning reveals ligand entry-exit mechanisms of ferric binding protein. PLoS Comput. Biol. 2009 5:e1000544.

jamesmkrieger commented 3 years ago

You're welcome.

No, we don't have anything like that so you'll have to implement it from scratch and I'd really appreciate it if you could share that with us as a pull request.

Also, I've just added the canonical PRS back with the turbo=False option. See #1371

fnaj77 commented 3 years ago

Ok James, thank you again for the valuable help.

I'll be on paternal leave starting next week, so I'm not sure I can get something general and polished enough for a decent pr soon. Anyway, I'll definitely share my solution to get the directionality of the response when ready.

If you agree I'm going to close this issue, or do you prefer to leave it open as a feature request for a function to get the 3D direction of the response?

jamesmkrieger commented 3 years ago

Yes, you can close it as I reopened mine on the 3D directionality and linked them with cross-references.

Whatever you can do would be great and feel free to share it with me at jamesmkrieger@gmail.com if you don’t feel it’s ready for people to see generally.

Thanks very much again and hope you have a good paternal leave.

fnaj77 commented 3 years ago

Ok, thanks again!

jamesmkrieger commented 3 years ago

Just to note that my PRS implementation wasn't quite ready as I hadn't defined repeats anywhere. Now it's a kwarg with default value 100 as in ProDy 1.8

jamesmkrieger commented 2 years ago

Apologies for not merging this until now. Now it should be done.

jamesmkrieger commented 2 years ago

I will also soon be making a release of ProDy 2.0.1, which should include this