2021-03-26 Wagner/Thompson Biopolymer Topology working session

Date

Mar 26, 2021

Participants

  • @Jeffrey Wagner

  • @Matt Thompson

Discussion topics

Notes

Notes

  • What Topology functionality is needed in the short run?

    • Some way to load a protein topology to begin with

    • Pathways where we’ll need to export a molecule with residues

      • The molecule was parameterized using OFFTK

      • The molecule was loaded from .gro or .prmtop

    • Will OpenFF parameterization ever affect residue/atom definitions?

      • Let’s assume “No”

    • Will we need to know residues, segments, chains, etc?

      • Let’s assume “yes” and that the final biopolymer object will be able to support efficient lookups based on arbitrary metadata

    • Can we have a topology where some components have residues/chains and others don't?

      • Yes, it should be allowed to an OpenFF System to exist with a mix of atomtyped / residue-organized components, and residue-agnostic components. The exporters will, at the last minute, assign residue names to things that need them.

  • Would we want to use a MDTraj Topology directly, or wrap one in such a way that it looks like an OpenFF Topology with extra API points?

    • What is required?

      • Build one up atom-by-atom and bond-by-bond (natively supporting atom types!)

      • Read PDBs

      • Maybe read some other formats (eg prmtop) good too

  • What kind of workflow should we try to make that REQUIRES correct atom typing?

    • ???

    • Could try to mimic the output of AMBER protein param (but we don’t have an AMBER exporter yet)

    •  

  • What’s the difference between using eg. an MDTraj topology, and just carrying around a bunch of dictionaries with an OFF Topology that have residue mappings and stuff?

    • So, what if we effectively had OFFBioTop = (OFFTop, MDTrajTop)?

    • We should carry around a MDTraj topology becuase it has an API and a dictionary doesn’t

  •  

class OFFBioTop(OFFTop): def __init__(self, mdtrajtop, *args, **kwargs): self.mdtrajtop = mdtrajtop super().__init__(*args, **kwargs) off_top = Topology.from_openmm(omm_top, unique_molecule=[molecules]) off_biotop = OFFBioTop(mdtraj_top, off_top) off_biotop.mdtrajtop.atoms[0].type >>> "CG" ff = ForceField('openff-1.3.0.offxml') off_sys = ff.create_openff_system(off_biotop) [atom.index for atom in off_sys.topology.mdtrajtop.residues[0]] >>> [1,2,3,4,54,5,7,8] [atom.type for atom in off_sys.topology.mdtrajtop.residues[0]] >>> ['CA', 'CB', "NH", "HN", ...] [atom.index for atom in off_sys.topology.mdtrajtop.selectAtoms('ALA')] >>> [14,32,53,43,54,15,74,84]

 

 

 

 

|-OFFTop (which can contain arbitrary hierarchy info like residues/chains) |---OFFAtomTypeTop |---OFFCheminfTop

Action items

Decisions