question-mark
Stuck on an issue?

Lightrun Answers was designed to reduce the constant googling that comes with debugging 3rd party libraries. It collects links to all the places you might be looking at while hunting down a tough bug.

And, if you’re still stuck at the end, we’re happy to hop on a call to see how we can help out.

Feature Request: Make ToolkitAM1BCCHandler provide more consistent charges

See original GitHub issue

Is your feature request related to a problem? Please describe.

We have a whole heap of unresolved problems in our AM1 methods, many of which I think that we can handle in one fell swoop:

  • Protons can migrate and end up giving us partial charges for different chemical species than were input (#924)
  • The generated charges are dependent on the input conformer, and the autogenerated input conformers are affected by atom order, toolkit backend, and other factors (#926)
  • We should use ELF10 if OE is available (#983)
  • Detailed behavior and exceptions aren’t documented (#447)

While there are proposed fixes for many of these, behavior changes to our AM1 implementation are particularly sticky, since they touch process boundaries in the code, organizational/packaging boundaries in our ecosystem, and the AM1 methods in our API underlie the behavior of the ToolkitAM1BCC tag in our FFs, meaning that implementation changes in the code directly cause changes in FF behavior.

Regardless, I think that resolving some of the deficiencies above would be worth some amount of messiness/changes.

Describe the solution you’d like

  • The ToolkitAM1BCCHandler should try to assign ELF10 charges if OE is available, but just single-conformer AM1 charges if only AmberTools is available (for runtime reasons)
  • AmberTools assign_partial_charges with the AM1BCC method should default to using an “ELF1” conformer (This should make conformer generation a bit more deterministic; see preliminary results at bottom of meeting notes here)
  • The output geometry from the AmberTools wrapper (antechamber/sqm) should be checked to see whether any bonds have broken/been formed. If so, then sqm should be rerun on the input, but given the maxcyc=0 keyword, so that no minimization is performed. This will still give sub-optimal results, but they’ll be better than if a proton migration happened.
    • Connectivity rearrangements can/should be checked using QCElemental’s guess_connectivity method. Only the existence of bonds should be considered, not the order of those bonds.
  • Ensure that this doesn’t break anything with ChargeIncrementModelHandler, which has an explicit attribute about how many conformers to use.

Issue Analytics

  • State:open
  • Created 2 years ago
  • Reactions:1
  • Comments:7 (2 by maintainers)

github_iconTop GitHub Comments

1reaction
pavankumcommented, Jan 12, 2022

I think they are all about the details of implementing “ELF1” in OpenEye

Apologies for conflating different things, I was thinking more about ELF1 addressing the electrostatic collapse for certain molecules so that we don’t need restraints at all for any backend toolkit. Your proposed pathway of checking connectivity and turning off optimization resolves everything, and I realized that would need work on OE’s end since even if we pass single chosen conformer we don’t have access to turn off their restraints.

0reactions
connordavelcommented, Jan 19, 2022
  • The output geometry from the AmberTools wrapper (antechamber/sqm) should be checked to see whether any bonds have broken/been formed

In one of my scripts, this is done with the rdkit pdb reader or qcelemental which guesses bonds based on covalent radii (the qcelemental solution comes from Simon B.). Both checks seem to agree really well with each other when a chemical graph changes.

  • If so, then sqm should be rerun on the input, but given the maxcyc=0 keyword, so that no minimization is performed.

For this, I first create a list of arguments that will later be read into antechamber. These arguments are then put into antechamber on the command line and run.. Note the use of maxcyc=0 as one of these arguments.

Also, if it ever becomes useful to call sqm, am1bcc, and atomtype separately (versus just calling everything quickly with antechamber), I have code that calls sqm, and then performs bcc and file operations later in file_op().

Read more comments on GitHub >

github_iconTop Results From Across the Web

Feature Request Template: How to Manage Suggestions at ...
A feature request template provides a framework for your users to give feedback, making your life as a product manager a whole lot...
Read more >
[FEATURE REQUEST] Remove/Restructure HUGE banner at ...
Is your feature request related to a problem? Please describe. In a recent update the top area has been redesigned/restructured and takes up ......
Read more >
15 Feature Request Tools for Managing Product Feedback
A feature request tool is a platform that collects product feedback and suggestions from customers.
Read more >
A good feature request collection tool helps product managers ...
Feature request collection tools are a valuable way for product managers to gather customer feedback, organize that feedback, and create a plan ...
Read more >
12 powerful feature request software tools for SaaS - Savio
Not confident about your roadmap? Use these top tools to organize and prioritize software feature requests and build a product that sells.
Read more >

github_iconTop Related Medium Post

No results found

github_iconTop Related StackOverflow Question

No results found

github_iconTroubleshoot Live Code

Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start Free

github_iconTop Related Reddit Thread

No results found

github_iconTop Related Hackernoon Post

No results found

github_iconTop Related Tweet

No results found

github_iconTop Related Dev.to Post

No results found

github_iconTop Related Hashnode Post

No results found