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? How many different modifications will users want? Sticking two molecules together by replacing a hydrogen Sticking two molecules together by replacing a group of many atoms from one or both Mutating one atom into another atom if the existing atom only has one bond if the existing atom has many bonds eg, Replace one alpha carbon in a protein with a silicon
Deleting an atom/group of atoms
Adding/replacing groups of atoms What would protonation look like? Is the “proton” molecule valid before the modification?
Adding another structure with many connection points/in a way that forms a ring Replacing one residue with another (Generally, replacing a linker in the middle of a molecule) Breaking open an aromatic ring in such a way that a previously sp2 carbon becomes sp3 and needs a hydrogen 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.
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”: “Take two molecules, a list of atoms to delete in each, and a atom from each to be the new connection point”: 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)
|
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?
|