Feature Request: Make ToolkitAM1BCCHandler provide more consistent charges
See original GitHub issueIs 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, thensqm
should be rerun on the input, but given themaxcyc=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.
- Connectivity rearrangements can/should be checked using QCElemental’s
- Ensure that this doesn’t break anything with
ChargeIncrementModelHandler
, which has an explicit attribute about how many conformers to use.
Issue Analytics
- State:
- Created 2 years ago
- Reactions:1
- Comments:7 (2 by maintainers)
Top 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 >
Top Related Medium Post
No results found
Top Related StackOverflow Question
No results found
Troubleshoot Live Code
Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start Free
Top Related Reddit Thread
No results found
Top Related Hackernoon Post
No results found
Top Related Tweet
No results found
Top Related Dev.to Post
No results found
Top Related Hashnode Post
No results found
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.
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.
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()
.