{"action":"created","issue":{"url":"https://api.github.com/repos/choderalab/perses/issues/67","labels_url":"https://api.github.com/repos/choderalab/perses/issues/67/labels{/name}","comments_url":"https://api.github.com/repos/choderalab/perses/issues/67/comments","events_url":"https://api.github.com/repos/choderalab/perses/issues/67/events","html_url":"https://github.com/choderalab/perses/issues/67","id":128086922,"number":67,"title":"Parameterizing systems with ForceField","user":{"login":"jchodera","id":3656088,"avatar_url":"https://avatars.githubusercontent.com/u/3656088?v=3","gravatar_id":"","url":"https://api.github.com/users/jchodera","html_url":"https://github.com/jchodera","followers_url":"https://api.github.com/users/jchodera/followers","following_url":"https://api.github.com/users/jchodera/following{/other_user}","gists_url":"https://api.github.com/users/jchodera/gists{/gist_id}","starred_url":"https://api.github.com/users/jchodera/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jchodera/subscriptions","organizations_url":"https://api.github.com/users/jchodera/orgs","repos_url":"https://api.github.com/users/jchodera/repos","events_url":"https://api.github.com/users/jchodera/events{/privacy}","received_events_url":"https://api.github.com/users/jchodera/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"milestone":null,"comments":12,"created_at":"2016-01-22T05:21:56Z","updated_at":"2016-01-27T05:47:35Z","closed_at":null,"body":"I've now put a few methods into `simtk.openmm.app.ForceField` that give us a lot of flexibility for creating new residue definitions, either via `ffxml` files written beforehand (as in `gaff2xml`) or via a plugin that generates templates and parameters on the fly.\r\n\r\nFor creating parameters on the fly, the problem right now is that `ForceField.createSystem(topology)` only takes in a `topology` object.  If we need to parameterize a new residue (small molecule or biopolymer), it is not clear if we have sufficient information about bond order to generate conformations for parameterizing the missing residue.  \r\n\r\nNote that this doesn't affect cases where we already have or can pre-generate parameters, such as standard biopolymers (proteins and nucleic acids) and small molecule libraries (where parameters can be pregenerated).\r\n\r\nIf we had an input structure, we could in principle perceive bond order from this (e.g. using the OpenEye [`OEPerceiveBondOrders`](https://docs.eyesopen.com/toolkits/python/oechemtk/connectivity.html#bond-order-perception) method), but in Perses, if we are proposing changes to a new molecular species, we need the `System` in order to generate the geometry.  This is a chicken-and-egg problem.\r\n\r\nI see three possible solutions:\r\n* A. Find a way to to go from the `Residue` (complete with fully explicit hydrogens) and determine bond orders from connectivity alone and either specification of the charge state or inference as to the likely charge state.\r\n* B. Add optional information about bond order to `Topology` that can be used in creating the system. \r\n* C. Externally generate plausible structural data for the new residue\r\n\r\nIt turns out that `antechamber` includes a program [`bondtype`](http://ambermd.org/antechamber/ac.html#bondtype) that [infers bond order automatically](http://modem.ucsd.edu/html/publications/Atom_type.pdf), so provided this works robustly enough, I think we can use this scheme.  I don't know if we will run into trouble with it not being able to guess the appropriate ionization state, and there may be issues with the workflow\r\n```\r\nresidueTemplateGenerator -> bondtype -> OEMol -> OEOmega (coordinates) -> antechamber\r\n```\r\nbut I think it will work in principle."},"comment":{"url":"https://api.github.com/repos/choderalab/perses/issues/comments/175414834","html_url":"https://github.com/choderalab/perses/issues/67#issuecomment-175414834","issue_url":"https://api.github.com/repos/choderalab/perses/issues/67","id":175414834,"user":{"login":"jchodera","id":3656088,"avatar_url":"https://avatars.githubusercontent.com/u/3656088?v=3","gravatar_id":"","url":"https://api.github.com/users/jchodera","html_url":"https://github.com/jchodera","followers_url":"https://api.github.com/users/jchodera/followers","following_url":"https://api.github.com/users/jchodera/following{/other_user}","gists_url":"https://api.github.com/users/jchodera/gists{/gist_id}","starred_url":"https://api.github.com/users/jchodera/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jchodera/subscriptions","organizations_url":"https://api.github.com/users/jchodera/orgs","repos_url":"https://api.github.com/users/jchodera/repos","events_url":"https://api.github.com/users/jchodera/events{/privacy}","received_events_url":"https://api.github.com/users/jchodera/received_events","type":"User","site_admin":false},"created_at":"2016-01-27T05:47:35Z","updated_at":"2016-01-27T05:47:35Z","body":"`openmoltools-dev` conda package: https://anaconda.org/omnia/openmoltools-dev/files\r\n\r\nNote this requires `parmed-dev`, so you may have to `conda remove --yes parmed` first.\r\n\r\n"}}