Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

score discrepancies #154

Open
michelsanner opened this issue May 22, 2021 · 4 comments
Open

score discrepancies #154

michelsanner opened this issue May 22, 2021 · 4 comments

Comments

@michelsanner
Copy link

Hello
I am score a receptor ligand complex with the original Vina binary and with oddt and I get different number for the inter- hydrogen term which also leads to difference for he affinity value

./vina --receptor receptors/1A30_FH_receptor.pdbqt --ligandligands/1A30_FH_ligand.pdbqt --score_only
...
Affinity: -4.99866 (kcal/mol)
Intermolecular contributions to the terms, before weighting:
gauss 1 : 85.68172
gauss 2 : 1306.81599
repulsion : 4.71110
hydrophobic : 20.49321
Hydrogen : 3.59471

import oddt
from oddt.scoring.descriptors import oddt_vina_descriptor
rec = list(oddt.toolkit.readfile('pdbqt', '1A30_FH_receptor.pdbqt'))[0]
pep = oddt.toolkit.readfile('pdbqt', '1A30_FH_ligand.pdbqt')
vinascore = oddt_vina_descriptor()
values = vinascore.build(pep, rec)

values contains
[-5.927179336547852, 85.6817398071289, 1306.8160400390625, 4.711095809936523, 20.49320411682129, 6.018104553222656, 40.36888122558594, 253.72946166992188, 0.5798547863960266, 5.698793888092041, 0.7290220856666565, 12.0]

as you can see Hydrogen original is 3.59471 and the oddt value is 6.018104553222656 while the other terms match

the files I am using are 1A30_FH_receptor.pdbqt and 1A30_FH_ligand.pdbqt provided it he attached zip file

(https://github.com/oddt/oddt/files/6525696/1A30.zip)

Thanks for any thoughts on this

-Michel

@mwojcikowski
Copy link
Contributor

Hi Michel,

Thanks for reporting the issue. May you please share how you prepared the molecules in PDBQT format? Reading back PDBQT files is many times not the best idea, as they loose information about connectivity, bond orders in particular. I assume that you use OB as the toolkit. When I read back your ligand file this is what OB generates

obabel 1A30_FH_ligand.pdbqt -osmi
[C](NC(=O)[C]([C][C]C(=O)[O])[NH3])(C(=O)N[C]([C][C]([C])[C])C(=O)[O])[C]C(=O)[O]	1A30_FH_ligand.pdbqt
1 molecule converted

As you can see there are some radicals, which might be the issue here. I would recommend starting with a format that has proper bond orders, which are essential for marking donors and acceptors.

Alternatively there is an autodock_vina_descriptor which uses native Vina library and should work for you.

@michelsanner
Copy link
Author

Thanks for your reply Maciej
I did not prepare the PDBQT files but used from a paper published by Rentzsch et al 10.1093/bib/bbv008 but i do not understand why it would make a difference. I run both programs using the native PDBQT format. I would expect both program to end up doing the same thing or am I missing something ?
Are you saying that your program reads the PDBQT (which provides all the data needed for Vina) but then somehow reassigns atom types?

Will the AutoDock_vina_decriptor return ligand internal energies ?

the reason for my email was mainly that a user sing Vina with some PDBQT files would expect to get the same results when using oddt with the same input files.

-Michel

@mwojcikowski
Copy link
Contributor

oddt_vina_sescriptor scores the representation of molecule in the toolkit, Openbabel or RDKit. If you produce PDBQT with ODDT I would expect the scores to be identical. In your case, the PDBQT is already there so what you should be using is the aforementioned autodock_vina_descriptor, which should produce 1:1 results for you - it uses vina --score_only binary and should produce the exact set of partial scores as Vina does out of the box.

The exact command line can be found here:

subprocess.check_output([self.executable, '--score_only',
'--receptor', self.protein_file,
'--ligand', ligand_file] + self.params,
stderr=subprocess.STDOUT))

The oddt_vina_sescriptor was intended as a faster alternative to be used in ODDT pipelines, as it avoids expensive IO and conversion to PDBQT which is prone to error, as you witnessed.

@michelsanner
Copy link
Author

yes you are right, the AutoDockVina.py will run the same binary as used on the command line and give me the same values, although it does not report the ligand internal energy terms.

I generated PDBQT files ODDT and compared with my PDBWT files. The only differences is the AutoDock atom type of sulfur atoms in MET36, MET46,CYS67 and CYS95 in both chains A and B of the receptor which are SA in my file and S in the files produced by ODDT. However, none of these amino acid are close enough to the ligand to hydrogen bond.

In AutoDock the donors and acceptors are encoded by the atom type HD, OA, SA etc, but I guess this gets overwritten by your perception of donors and acceptors, even when the input is the native PDBQT used by Vina. I guess that is what leads to the differences in the results.

However, what I do not understand is that when I run Vina on the PDBQT files generated with ODDT I get the same results as with my PDBQT files i.e. hydrogen = 3.59471 not 6.018104553222656 which is to be expected as the only difference in PDBQT files is the TYPE of S atoms which do not interact with the ligand. So I am still unclear where and why the difference arises.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants