primaryodors / primarydock

PrimaryOdors.org molecular docker.
Other
6 stars 3 forks source link

Prevent multiple connected atoms from unnaturally amplifying ionic bonds. #426

Closed primaryodors closed 5 months ago

primaryodors commented 5 months ago

Previously, an ionic bond between conjugated ions would be counted multiple times, once for each pair of atoms that could interact. For example, the bond between a carboxylate ion and a guanidinium group could include the interactions between each oxygen atom and each hydrogen atom, each oxygen and each nitrogen, etc. The result was ionic bonds routinely being calculated as being several hundred kJ/mol in strength, when a typical ionic bond under ideal conditions should be at most around 60 kJ/mol.

This PR offers a solution by keeping track of each conjugated system and, if an ionic bond is measured between it and any oppositely charged ion, marking the conjugation as "spent" until the next time intermolecular forces are measured. The OR51E2 propionate test elucidates the change, with hydrogen bonding strength exceeding ionic bond strength, as it should, compared to the previous result in which the reverse was the case.

PDB file: pdbs/OR51/OR51E2.bound.pdb
Ligand: sdf/propionic_acid.sdf

Static dock - no path nodes.

Pose: 1
Node: 0
# Binding energies:
BENERG:
Met100: -0.00734661
His104: -0.373798
Phe155: -0.221667
Leu158: -0.447505
Val179: -0.104339
His180: 0.73207
Gln181: -1.4599
Asp182: 7.06171
Met184: -0.347093
Lys185: 1.44876
Asn194: 0.440584
Val195: 0.70997
Tyr197: -0.0919579
Gly198: 1.49678
Leu199: -0.477329
Ala201: -0.267518
Ile202: -0.945552
Leu203: -0.00468181
Met206: -0.0163764
Ser258: -17.3818
His261: -0.11028
Arg262: -41.5602

Total ionic: -29.4012
Total H-bond: -40.2665
Total pi stack: -0.173314
Total polar-pi and cation-pi: -0
Total metal coordination: -0
Total van der Waals: -1.70663
Total: -47.8293

Still, this PR is not a perfect solution, as it operates on a first-come first-serve basis, i.e. the interaction between whichever pair of atoms from the ions is first to be processed is the only ionic interaction to be calculated for either ion. Suppose a guanidinium group were placed between two carboxylate ions, only one side will register an ionic interaction. The ideal would be to split up the charge between all interacting atoms of all interacting molecules, weighted by their distances and anisotropies. As that would be a large coding project, with the potential to result in a performance hit, and since hydrogen bonds can still be figured between oppositely charged organic ions, this simpler solution is adequate and preferable.

primaryodors commented 5 months ago

Waiting on TAAR8 cadaverine test. All other tests are good.

primaryodors commented 5 months ago
PDB file: pdbs/TAAR/TAAR8.active.pdb
Ligand: sdf/cadaverine.sdf

Static dock - no path nodes.

Pose: 1
Node: 0
# Binding energies:
BENERG:
Ser88: 1.8425
Arg91: 4.24292
Cys104: 0.253095
His107: -0.492414
Ser108: -1.07432
Asp111: -56.5733
Val112: -0.0679735
Ala113: -0.00938871
Cys115: 0.0367323
Tyr116: -0.787112
Tyr162: 0.0041697
Phe167: -0.0335289
Ile191: -0.019613
Val193: -0.0218828
Trp197: -0.27025
Val198: 1.2609
Asp201: -40.1142
Phe202: 0.0425035
Phe205: -0.0184017
Tyr273: 6.83868
Thr274: -0.0055198
Ile277: -0.258256
Tyr292: -0.265052
Cys296: -0.493967
Ala299: -0.0173632
Tyr300: -1.81705

Total ionic: -92.5274
Total H-bond: -17.777
Total pi stack: -0
Total polar-pi and cation-pi: -0
Total metal coordination: -0
Total van der Waals: -2.49455
Total: -77.2427