Identifying reactive functional groups

Topics

◼
  • Organic Chemistry
  • ◼
  • Chemical Structure
  • ◼
  • Functional Groups
  • Background

    Chemists identify functional groups in molecules visually bases on the atomic composition. Identification of which functional groups are active in a chemical reaction is also done visually by synthetic chemists who make new molecules by systematically modifying groups until the desired product is achieved. For non-chemists identifying reactive groups and non-reactive groups in a synthesis might not be so easy.

    Functions to know about

    ◼
  • Molecule
  • ◼
  • MoleculePlot3D
  • ◼
  • MoleculePattern (for highlighting in 3D plots)
  • ◼
  • AtomLabels (for visualization in 3D plots)
  • ◼
  • MoleculeValue (for data about a molecule)
  • ◼
  • MoleculeModify (for adjusting molecule objects & running geometry optimizations)
  • ◼
  • MoleculeDraw (GUI for building molecules)
  • ◼
  • FindMoleculeSubstructure
  • ◼
  • MoleculeSubstructureCount
  • ◼
  • MoleculeContainsQ
  • ◼
  • Count
  • ◼
  • Tally
  • ◼
  • Total
  • Goals

    Minimum

    ◼
  • As a warm up, build some of the common functional groups. See McMurray for more details.
  • ◼
  • Build a function that take a molecule object as input and returns an Association of functional groups and their atom numbers mimicking the output of FindMoleculeSubstructure.
  • <|"Alkene"{...},"Halide"{...}|>
    ◼
  • The new function must gracefully convert non Molecule objects into Molecule objects when possible. For all other input it should return a useful Failure object.
  • ◼
  • Add support for the user to provide their own library of functional groups as a second argument to the function. The library should be a list of Association objects where each association has two keys: "Name" and "Pattern". The name property is the formatted functional group name and the pattern is a valid MoleculePattern object.
  • Additional

    Complete in any order:
    ◼
  • There may be times when the count or tally of the functional groups in a molecule is needed but no the atom assignment to said groups. Build a function to support this use case. (See MoleculeSubstructureCount)
  • ◼
  • Can each atom be part of more than one functional group? Would an Overlaps option (See StringCases) be useful? If so implement it.
  • ◼
  • Optimize the speed of your function so that it runs smoothly on small molecules, large molecules and proteins. Consider the following
  • ◼
  • As the functional group library grows should the algorithm change?
  • ◼
  • Is MoleculeContainsQ as fast as FindMoleculeSubstructure?
  • ◼
  • If certain large functional groups are found should smaller ones be checked as well. Consider C=OOH vs C=O and OH.
  • Stretch

    Complete in any order
    ◼
  • Submit your MO function(s) as a WFR.
  • ◼
  • Build a manipulative allowing one to select a functional group to highlight any occurrences in the molecule. See the MoleculeView resource function for inspiration.
  • ◼
  • Build a plotting function to plot the identified functional groups in a molecule. See SMILESPlot resource function for inspiration.
  • ◼
  • Compare your results to those found by using FindGraphCommunities on the Molecule graph.
  • References

    ◼
  • Fast Introduction for Chemistry Students
  • ◼
  • SMILES (for quickly generating molecules)