We want to support the link-atom method for ML/MM simulations in which the ML-MM region boundary cuts across one or more bonds. I already have a tentative implementation for mechanical embedding but want to open this issue to solicit feedback about API details and other related matters.
For mechanical embedding, support can be largely automatic, and bonds from the ML region that have been cut and require capping with additional atoms can be identified from the topology and ML region atom indices.
- Is there any reason to support capping atoms other than hydrogen?
- Our tests suggest the best approach for positioning the capping atoms is to place them at a fixed distance along the cut bonds. We can guess an appropriate distance using a built-in table of covalent radii. However, we'll want to allow users to override this; would something like
linkAtomDistances=[(mlAtomIndex, mmAtomIndex, distance), ...] as a keyword argument for the embedding make sense?
A more general question relates to support for other generic embedding plugins and potential-specific embedding methods. To set up the link-atom method requires adding the appropriate virtual sites, as well as finding the appropriate bonded terms to remove. We don't want each plugin to have to implement this over and over. What kind of customization, if any, will embeddings need to be able to make to this process? (An embedding should also be able to reject ML regions cutting across bonds if it can't support them.)
We want to support the link-atom method for ML/MM simulations in which the ML-MM region boundary cuts across one or more bonds. I already have a tentative implementation for mechanical embedding but want to open this issue to solicit feedback about API details and other related matters.
For mechanical embedding, support can be largely automatic, and bonds from the ML region that have been cut and require capping with additional atoms can be identified from the topology and ML region atom indices.
linkAtomDistances=[(mlAtomIndex, mmAtomIndex, distance), ...]as a keyword argument for the embedding make sense?A more general question relates to support for other generic embedding plugins and potential-specific embedding methods. To set up the link-atom method requires adding the appropriate virtual sites, as well as finding the appropriate bonded terms to remove. We don't want each plugin to have to implement this over and over. What kind of customization, if any, will embeddings need to be able to make to this process? (An embedding should also be able to reject ML regions cutting across bonds if it can't support them.)