2021-04-21 Wagner/Pulido session

Date

Apr 21, 2021

Participants

  • @Iván Pulido

  • @Jeffrey Wagner

Goals

  •  

Discussion topics

Item

Notes

Item

Notes

Molecule mutability?

  • Offering just merge_molecules may not be the best way to handle chemical modifications in general. What if, instead of connecting two complete molecules, users want to mutate one molecule with a common core into another?

    • Reaction SMARTS

  • How many different modifications will users want?

    1. Sticking two molecules together by replacing a hydrogen

    2. Sticking two molecules together by replacing a group of many atoms from one or both

    3. Mutating one atom into another atom

      1. if the existing atom only has one bond

      2. if the existing atom has many bonds

        1. eg, Replace one alpha carbon in a protein with a silicon

    4. Deleting an atom/group of atoms

      1.  

    5. Adding/replacing groups of atoms

      1. What would protonation look like? Is the “proton” molecule valid before the modification?

    6. Adding another structure with many connection points/in a way that forms a ring

    7. Replacing one residue with another (Generally, replacing a linker in the middle of a molecule)

    8. Breaking open an aromatic ring in such a way that a previously sp2 carbon becomes sp3 and needs a hydrogen

      1. This is probably an unreasonable thing to provide – Conjugation is compicated and we can’t deal with in-place switching of hybridization. If a user needs to do this they need to replace the entire substructure containing the conjugation with a non-conjugated version.

    9. Making a new bond within an existing molecule

  • What kinds of general processes can we provide to cover which cases above?

    • “take two molecules, delete a hydrogen on each, and make a new bond joining them where the Hs used to be”:

      • a, ci, …

    • “Take two molecules, a list of atoms to delete in each, and a atom from each to be the new connection point”:

      • a,

    • combine_molecules(mol1, mol2, [connection_atoms_in_mol1], [connection_atoms_in_mol2], [atoms_to_delete_in_mol1], [atoms_to_delete_in_mol2], )

       

      • a, b, ci, cii (stereochemistry?), d, e, f, g, i

  • Are there structures that have features that can not appear in any other molecule?

  • Are there transformations/reactions that go through states that aren’t valid molecules?

  • So, combine_molecules above could handle every situation we can think of. Are there better alternative solutions with equivalent functionality?

    • Reaction SMARTS do_rxn(…? No, reaction SMARTS could be promiscuous, and RDKit can handle the “multiple transformations” thing better than we can.

    • delete_atoms([atoms_to_delete], cap='H')

    • add_substructure(substructure_to_add, connection_point, delete_atoms_mo1, delete_atoms_mol2)

    •  

To dos

  • Molecule vs. topology iterators → Make a “TopologyHierarchy” mirror of all “MoleculeHierarchies” when a molecule joins a Topology

    • would this force an unwanted order based on the order of TopologyMolecules, instead of another sorting system?

  • Virtualsites?

  • merge_molecules should append iterators

  • Hybrid topology from merge?

Questions for perses devs

  • We’ve thought through how to support combining two whole, valid molecules. This is a nicely-scoped case, because the hybridization/formal charge/complicated stuff about each atom has to be set in each separate input molecule before they can be combined, which makes the problem space simpler for us. However, it’s possible that the way that you represent transformations has fragments stored as “incomplete” molecules. Is this the case, and if so, what do these “fragments” look like, and how should we support them?

Action items

Decisions