Identifying reactive functional groups
Topics
Topics
◼
Organic Chemistry
◼
Chemical Structure
◼
Functional Groups
Background
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
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
Goals
Minimum
Minimum
◼
◼
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
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
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
References
◼
SMILES (for quickly generating molecules)