From d7a62ee5a12b8b3f7081d8e0eb1204852e1827e5 Mon Sep 17 00:00:00 2001 From: Egon Willighagen Date: Sat, 15 Jun 2024 21:48:43 +0200 Subject: [PATCH] Ported the first part of the Depiction chapter --- README.md | 2 +- atomsbonds.md | 2 +- builders.md | 12 +-- cheminfo.md | 4 +- chemobject.md | 8 +- code/AtomContainersLoopingInSet.code.md | 2 +- code/GuessSMILES.code.md | 2 +- code/ObjectListening.code.md | 10 +-- code/RenderMolecule.code.md | 20 +++++ code/SimpleFingerprintDemo.code.md | 2 +- code/TPSACalc.code.md | 2 +- depiction.md | 60 +++++++++++++ descriptor.md | 18 ++-- graph.md | 2 +- images/generated/CTR2.png | Bin 2517 -> 2517 bytes images/generated/FixPyrroleBondOrders.png | Bin 24129 -> 24129 bytes images/generated/InChIAtomNumbers.png | Bin 1245 -> 1245 bytes images/generated/InChIAtomNumbersBenzene.png | Bin 3329 -> 3329 bytes images/generated/MethaneExplicit.png | Bin 792 -> 792 bytes images/generated/MethaneImplicit.png | Bin 391 -> 391 bytes images/generated/RenderAdenine.png | Bin 20732 -> 20732 bytes images/generated/RenderAdenineWithNumbers.png | Bin 8148 -> 8148 bytes images/generated/RenderMolecule.png | Bin 0 -> 2085 bytes images/generated/RenderOxazole.png | Bin 4061 -> 4061 bytes images/generated/StereoisomerOne.png | Bin 1688 -> 1688 bytes images/generated/StereoisomerTwo.png | Bin 1832 -> 1832 bytes inchi.md | 2 +- index.md | 82 +++++++++--------- indexList.md | 4 + introduction.md | 4 +- io.md | 6 +- migration.md | 4 +- missing.md | 10 +-- protein.md | 2 +- reaction.md | 3 + 35 files changed, 176 insertions(+), 87 deletions(-) create mode 100644 code/RenderMolecule.code.md create mode 100644 depiction.md create mode 100644 images/generated/RenderMolecule.png diff --git a/README.md b/README.md index 980302a..e034fd8 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ # Groovy Cheminformatics with the Chemistry Development Kit -[Edition 2.9-1](https://egonw.github.io/cdkbook/) +[Edition 2.9-2](https://egonw.github.io/cdkbook/) **Egon L. Willighagen** PhD
Long time CDK developer diff --git a/atomsbonds.md b/atomsbonds.md index b7f20e0..68e941a 100644 --- a/atomsbonds.md +++ b/atomsbonds.md @@ -644,6 +644,6 @@ in ring sets, explained in Section ??. ## References -1. Steinbeck C, Han Y, Kuhn S, Horlacher O, Luttmann E, Luttmann E, et al. The Chemistry Development Kit (CDK): an open-source Java library for Chemo- and Bioinformatics. JCICS. 2003 Feb 11;43(2):493–500. doi:[10.1021/CI025584Y](https://doi.org/10.1021/CI025584Y) ([Scholia](https://scholia.toolforge.org/doi/10.1021/CI025584Y)) +1. Steinbeck C, Han Y, Kuhn S, Horlacher O, Luttmann E, Willighagen E. The Chemistry Development Kit (CDK): an open-source Java library for Chemo- and Bioinformatics. JCICS. 2003 Feb 11;43(2):493–500. doi:[10.1021/CI025584Y](https://doi.org/10.1021/CI025584Y) ([Scholia](https://scholia.toolforge.org/doi/10.1021/CI025584Y)) 2. Balaban AT. Applications of graph theory in chemistry. JCICS. 1985 Aug 1;25(3):334–43. doi:[10.1021/CI00047A033](https://doi.org/10.1021/CI00047A033) ([Scholia](https://scholia.toolforge.org/doi/10.1021/CI00047A033)) diff --git a/builders.md b/builders.md index 0e3305e..0a14a1a 100644 --- a/builders.md +++ b/builders.md @@ -66,7 +66,7 @@ refactoring to do. ## Implementations -As indicated earlier, there are various implementations. CDK 2.8 +As indicated earlier, there are various implementations. CDK 2.9 has three implementations: the default builder, a builder to create debug output creating classes, and two builders that create data classes that do not send around change events. @@ -108,11 +108,11 @@ event is when the atom was added, while the second event is caused by the element symbol of the atom changing: ```plain -Event: org.openscience.cdk.event.ChemObjectChangeEvent[source=AtomContainer(55... - 9087077, #A:1, AtomRef{Atom(1566104673, S:C, AtomType(1566104673, FC:0, Isot... - ope(1566104673, Element(1566104673, S:C, AN:6))))})] -Event: org.openscience.cdk.event.ChemObjectChangeEvent[source=Atom(1566104673,... - S:N, AtomType(1566104673, FC:0, Isotope(1566104673, Element(1566104673, S:N... +Event: org.openscience.cdk.event.ChemObjectChangeEvent[source=AtomContainer(73... + 4370487, #A:1, AtomRef{Atom(1091523506, S:C, AtomType(1091523506, FC:0, Isot... + ope(1091523506, Element(1091523506, S:C, AN:6))))})] +Event: org.openscience.cdk.event.ChemObjectChangeEvent[source=Atom(1091523506,... + S:N, AtomType(1091523506, FC:0, Isotope(1091523506, Element(1091523506, S:N... , AN:7))))] ``` diff --git a/cheminfo.md b/cheminfo.md index 9b942e7..2b2287d 100644 --- a/cheminfo.md +++ b/cheminfo.md @@ -318,8 +318,8 @@ Kit supports this multidisciplenaire research. 27. de Jong S. SIMPLS: An alternative approach to partial least squares regression. Chemometr Intell Lab. 1993 Mar;18(3):251–63. doi:[10.1016/0169-7439(93)85002-X](https://doi.org/10.1016/0169-7439(93)85002-X) ([Scholia](https://scholia.toolforge.org/doi/10.1016/0169-7439(93)85002-X)) 28. Todeschini R, Consonni V. Handbook of Molecular Descriptors. 2000. doi:[10.1002/9783527613106](https://doi.org/10.1002/9783527613106) ([Scholia](https://scholia.toolforge.org/doi/10.1002/9783527613106)) 29. J. K. Wegner, PhD thesis, Eberhard-Karls-Universität Tübingen, Tübingen, Germany, 2006 -30. Steinbeck C, Han Y, Kuhn S, Horlacher O, Luttmann E, Luttmann E, et al. The Chemistry Development Kit (CDK): an open-source Java library for Chemo- and Bioinformatics. JCICS. 2003 Feb 11;43(2):493–500. doi:[10.1021/CI025584Y](https://doi.org/10.1021/CI025584Y) ([Scholia](https://scholia.toolforge.org/doi/10.1021/CI025584Y)) -31. Steinbeck C, Hoppe C, Hoppe C, Kuhn S, Floris M, Guha R, et al. Recent Developments of the Chemistry Development Kit (CDK) - An Open-Source Java Library for Chemo- and Bioinformatics. Curr Pharm Des [Internet]. 2006 Jun 1;12(17):2111–20. Available from: https://cdk.github.io/cdk-paper-2/ doi:[10.2174/138161206777585274](https://doi.org/10.2174/138161206777585274) ([Scholia](https://scholia.toolforge.org/doi/10.2174/138161206777585274)) +30. Steinbeck C, Han Y, Kuhn S, Horlacher O, Luttmann E, Willighagen E. The Chemistry Development Kit (CDK): an open-source Java library for Chemo- and Bioinformatics. JCICS. 2003 Feb 11;43(2):493–500. doi:[10.1021/CI025584Y](https://doi.org/10.1021/CI025584Y) ([Scholia](https://scholia.toolforge.org/doi/10.1021/CI025584Y)) +31. Steinbeck C, Hoppe C, Kuhn S, Floris M, Guha R, Willighagen E. Recent Developments of the Chemistry Development Kit (CDK) - An Open-Source Java Library for Chemo- and Bioinformatics. Curr Pharm Des [Internet]. 2006 Jun 1;12(17):2111–20. Available from: https://cdk.github.io/cdk-paper-2/ doi:[10.2174/138161206777585274](https://doi.org/10.2174/138161206777585274) ([Scholia](https://scholia.toolforge.org/doi/10.2174/138161206777585274)) 32. Kowalski BR. Chemometrics. Anal Chem. 1980 Apr;52(5):112–22. doi:[10.1021/AC50055A016](https://doi.org/10.1021/AC50055A016) ([Scholia](https://scholia.toolforge.org/doi/10.1021/AC50055A016)) 33. BK L. Chemometrics. Anal Chem. 2000 Jun 1;72(12):91R-97R. doi:[10.1021/A1000016X](https://doi.org/10.1021/A1000016X) ([Scholia](https://scholia.toolforge.org/doi/10.1021/A1000016X)) 34. Buydens LMC, Reijmers TH, Beckers MLM, Wehrens R. Molecular data-mining: a challenge for chemometrics. Chemometr Intell Lab. 1999 Oct;49(2):121–33. doi:[10.1016/S0169-7439(99)00039-8](https://doi.org/10.1016/S0169-7439(99)00039-8) ([Scholia](https://scholia.toolforge.org/doi/10.1016/S0169-7439(99)00039-8)) diff --git a/chemobject.md b/chemobject.md index 3a55d7f..c872578 100644 --- a/chemobject.md +++ b/chemobject.md @@ -69,8 +69,8 @@ which outputs: ```plain Number of containers: 2 -container's hashcode 1263085541 -container's hashcode 1281205497 +container's hashcode 32777062 +container's hashcode 1187406578 ``` The other options is to use a regular for-loop: @@ -89,8 +89,8 @@ which requires more coding, but has the advantage that it keeps track of the ind ```plain Number of containers: 2 -container 0 has hashcode 632168320 -container 1 has hashcode 1761382759 +container 0 has hashcode 517960153 +container 1 has hashcode 551377008 ``` ## IReactionSet and IRingSet diff --git a/code/AtomContainersLoopingInSet.code.md b/code/AtomContainersLoopingInSet.code.md index 58a97fc..f66eb92 100644 --- a/code/AtomContainersLoopingInSet.code.md +++ b/code/AtomContainersLoopingInSet.code.md @@ -20,6 +20,6 @@ for (atomContainer in set.atomContainers()) { **Output:** ```plain Number of containers: 2 -container's hashcode 285831951 container's hashcode 32777062 +container's hashcode 1187406578 ``` diff --git a/code/GuessSMILES.code.md b/code/GuessSMILES.code.md index b06f226..f0a9353 100644 --- a/code/GuessSMILES.code.md +++ b/code/GuessSMILES.code.md @@ -1,7 +1,7 @@ # GuessSMILES.groovyl **Source code:** ```groovy -@Grab(group='org.openscience.cdk', module='cdk-bundle', version='2.8') +@Grab(group='org.openscience.cdk', module='cdk-bundle', version='2.9') import java.io.*; import org.openscience.cdk.io.*; diff --git a/code/ObjectListening.code.md b/code/ObjectListening.code.md index f3da3dc..e528f8c 100644 --- a/code/ObjectListening.code.md +++ b/code/ObjectListening.code.md @@ -21,10 +21,10 @@ atom1.setSymbol("N") ``` **Output:** ```plain -Event: org.openscience.cdk.event.ChemObjectChangeEvent[source=AtomContainer(19... - 63448684, #A:1, AtomRef{Atom(1913714009, S:C, AtomType(1913714009, FC:0, Iso... - tope(1913714009, Element(1913714009, S:C, AN:6))))})] -Event: org.openscience.cdk.event.ChemObjectChangeEvent[source=Atom(1913714009,... - S:N, AtomType(1913714009, FC:0, Isotope(1913714009, Element(1913714009, S:N... +Event: org.openscience.cdk.event.ChemObjectChangeEvent[source=AtomContainer(73... + 4370487, #A:1, AtomRef{Atom(1091523506, S:C, AtomType(1091523506, FC:0, Isot... + ope(1091523506, Element(1091523506, S:C, AN:6))))})] +Event: org.openscience.cdk.event.ChemObjectChangeEvent[source=Atom(1091523506,... + S:N, AtomType(1091523506, FC:0, Isotope(1091523506, Element(1091523506, S:N... , AN:7))))] ``` diff --git a/code/RenderMolecule.code.md b/code/RenderMolecule.code.md new file mode 100644 index 0000000..e3b963a --- /dev/null +++ b/code/RenderMolecule.code.md @@ -0,0 +1,20 @@ +# RenderMolecule.groovy +**Source code:** +```groovy +@Grab(group='org.openscience.cdk', module='cdk-bundle', version='2.9') + +import org.openscience.cdk.depict.*; +import org.openscience.cdk.interfaces.*; +import org.openscience.cdk.templates.*; +IAtomContainer triazole = MoleculeFactory.make123Triazole() +new DepictionGenerator() + .withSize(600, 600) + .withMargin(0.1) + .withZoom(3.0) + .withAtomColors() + .depict(triazole) + .writeTo("RenderMolecule.png"); +``` +**Output:** +```plain +``` diff --git a/code/SimpleFingerprintDemo.code.md b/code/SimpleFingerprintDemo.code.md index a8354b6..a65081b 100644 --- a/code/SimpleFingerprintDemo.code.md +++ b/code/SimpleFingerprintDemo.code.md @@ -1,7 +1,7 @@ # SimpleFingerprintDemo.groovyl **Source code:** ```groovy -@Grab(group='org.openscience.cdk', module='cdk-bundle', version='2.8') +@Grab(group='org.openscience.cdk', module='cdk-bundle', version='2.9') import org.openscience.cdk.interfaces.*; import org.openscience.cdk.templates.*; diff --git a/code/TPSACalc.code.md b/code/TPSACalc.code.md index 97487ae..039fd1c 100644 --- a/code/TPSACalc.code.md +++ b/code/TPSACalc.code.md @@ -29,7 +29,7 @@ value = result.getValue() ``` **Output:** ```plain -Specification: org.openscience.cdk.qsar.DescriptorSpecification@369ad7da +Specification: org.openscience.cdk.qsar.DescriptorSpecification@3e98b933 Parameters names: [checkAromaticity] Parameters values: [false] Exception: null diff --git a/depiction.md b/depiction.md new file mode 100644 index 0000000..74ec771 --- /dev/null +++ b/depiction.md @@ -0,0 +1,60 @@ + +# Depiction + +The CDK originates from the merger of Jmol and JChemPaint [1]. As such, CDK has long +contained code to depict molecules. However, after the 1.0 series, a rewrite of the code base +was initiated, causing the CDK 1.2 series to not be available with rendering functionality. +During the development of the 1.4 series, the rendering code became gradually available as +a set of patches, and, separately, as a JChemPaint applet. The new rendering code has +entered the CDK. + +However, if you need rendering of reaction schemes or the editing functionality found +in JChemPaint, you still need the CDK-JChemPaint patch. + +## Molecules + +Rendering molecules to an image is done in a few steps. First, an `Image` needs +to be defined, for example, of 200 by 200 pixels. The next step is to define what is to be +generated, and how. The most basic rendering requires a few generators: one for the overall +scene, one for atoms, and one for bonds. Therefore, we add a [`BasicSceneGenerator`](http://cdk.github.io/cdk/latest/docs/api/org/openscience/cdk/renderer/generators/BasicSceneGenerator.html), +a [`BasicAtomGenerator`](http://cdk.github.io/cdk/latest/docs/api/org/openscience/cdk/renderer/generators/BasicAtomGenerator.html), and a [`BasicBondGenerator`](http://cdk.github.io/cdk/latest/docs/api/org/openscience/cdk/renderer/generators/BasicBondGenerator.html). +We will see later that we can add further generators to add further visualization. +Now that we defined what we want to have depicted, we construct a renderer. Because we +are rendering a molecule here, we simply use the [`AtomContainerRenderer`](http://cdk.github.io/cdk/latest/docs/api/org/openscience/cdk/renderer/AtomContainerRenderer.html). + + +![](images/generated/RenderMolecule.png) +
**Figure 16.1**: 2D diagram of triazole + +We also need to define, however, what rendering platform we want to use. The Java +community has a few options, with the AWT/Swing platform to be the reference implementation +provided by Oracle, and the SWT toolkit as a popular second. In fact, the redesign +was needed to be able to support both widget toolkits. For rendering images, +we can use the AWT toolkit. Therefore, we use a [`AWTFontManager`](http://cdk.github.io/cdk/latest/docs/api/org/openscience/cdk/renderer/font/AWTFontManager.html) to help the +renderer draw texts. We get our `Graphics2D` object to which will be drawn from the +earlier created image, and we set some basic properties. +Then we are ready to draw the molecule to the graphics object with the `paint()` +method, and here again we need a AWT-specific class: the [`AWTDrawVisitor`](http://cdk.github.io/cdk/latest/docs/api/org/openscience/cdk/renderer/visitor/AWTDrawVisitor.html). + +What then remains is to save the image to a PNG image file with the +`ImageIO` helper class. + +The full code example then looks like: + +**Script** [code/RenderMolecule.groovy](code/RenderMolecule.code.md) +```groovy +new DepictionGenerator() + .withSize(600, 600) + .withMargin(0.1) + .withZoom(3.0) + .withAtomColors() + .depict(triazole) + .writeTo("RenderMolecule.png"); +``` + +This results in the image of triazole given in Figure [16.1](#fig:fig:triazole). + +## References + +1. Krause S, Willighagen E, Steinbeck C. JChemPaint - Using the Collaborative Forces of the Internet to Develop a Free Editor for 2D Chemical Structures. Molecules. 2000 Jan 28;5(1):93–8. doi:[10.3390/50100093](https://doi.org/10.3390/50100093) ([Scholia](https://scholia.toolforge.org/doi/10.3390/50100093)) + diff --git a/descriptor.md b/descriptor.md index 57def80..14342aa 100644 --- a/descriptor.md +++ b/descriptor.md @@ -61,7 +61,7 @@ allowing one to mix descriptor calculation by various tools and to keep track of what value came from what vendor. For example, we can inspect these field values for the TPSA descriptor -(see Section [17.3](properties.md#sec:tpsa)): +(see Section [18.3](properties.md#sec:tpsa)): **Script 17.1** [code/TPSASpecs.groovy](code/TPSASpecs.code.md) ```groovy @@ -80,7 +80,7 @@ Title: org.openscience.cdk.qsar.descriptors.molecular.TPSADescriptor Reference: http://www.blueobelisk.org/ontologies/chemoinformatics-algorithms/#... tpsa Vendor: The Chemistry Development Kit -Identifier: 2.8 +Identifier: 2.9 ``` The identifier values originally referred to a String which held the @@ -126,7 +126,7 @@ descriptor.parameterNames.each { name -> } ``` -which tells us how we can tune the descriptor calculation (see also Section [18.5](#sec:noCount)): +which tells us how we can tune the descriptor calculation (see also Section [19.5](#sec:noCount)): ```plain elementName -> java.lang.String @@ -178,11 +178,11 @@ java.lang.Boolean -> true With this information about the descriptor now clear, it is time to look at a descriptor value calculation. A molecular descriptor in the CDK is symbolized by the [`IMolecularDescriptor`](http://cdk.github.io/cdk/latest/docs/api/org/openscience/cdk/qsar/IMolecularDescriptor.html) interface, which extends the [`IDescriptor`](http://cdk.github.io/cdk/latest/docs/api/org/openscience/cdk/qsar/IDescriptor.html) interface, -as shown in Figure [18.1](#fig:descriptorInheritance). +as shown in Figure [19.1](#fig:descriptorInheritance). ![](images/descriptor.png) -
**Figure 18.1**: The IDescriptor interface has a few derived interfaces, but only IMolecularDescriptor is shown here. +
**Figure 19.1**: The IDescriptor interface has a few derived interfaces, but only IMolecularDescriptor is shown here. The relevant method now is the `calculate(IAtomContainer)` method, which returns a [`DescriptorValue`](http://cdk.github.io/cdk/latest/docs/api/org/openscience/cdk/qsar/DescriptorValue.html). This class is returned rather than a double, because descriptors @@ -207,7 +207,7 @@ value = result.getValue() The output shows us that quite some metadata is preserved: ```plain -Specification: org.openscience.cdk.qsar.DescriptorSpecification@241fc278 +Specification: org.openscience.cdk.qsar.DescriptorSpecification@3e98b933 Parameters names: [checkAromaticity] Parameters values: [false] Exception: null @@ -262,14 +262,14 @@ Calculated values: 7 ``` The [`IDescriptorResult`](http://cdk.github.io/cdk/latest/docs/api/org/openscience/cdk/qsar/result/IDescriptorResult.html) interface is currently implemented by various classes, -outlined in Figure [18.2](#fig:descriptorResults). Each of the classes has a slightly different +outlined in Figure [19.2](#fig:descriptorResults). Each of the classes has a slightly different API to get the actual values. The [`IntegerResult`](http://cdk.github.io/cdk/latest/docs/api/org/openscience/cdk/qsar/result/IntegerResult.html), [`DoubleResult`](http://cdk.github.io/cdk/latest/docs/api/org/openscience/cdk/qsar/result/DoubleResult.html), and [`BooleanResult`](http://cdk.github.io/cdk/latest/docs/api/org/openscience/cdk/qsar/result/BooleanResult.html) classes have the methods `intValue()`, `doubleValue()`, and `booleanValue()` respectively. ![](images/descriptorResults.png) -
**Figure 18.2**: The IDescriptorResults interface has several implementation, each wrapping calculated descriptor values. +
**Figure 19.2**: The IDescriptorResults interface has several implementation, each wrapping calculated descriptor values. The two array variants, [`IntegerArrayResult`](http://cdk.github.io/cdk/latest/docs/api/org/openscience/cdk/qsar/result/IntegerArrayResult.html) and [`DoubleArrayResult`](http://cdk.github.io/cdk/latest/docs/api/org/openscience/cdk/qsar/result/DoubleArrayResult.html), work slightly different, and both provide a `get(int)` method to iterate over all @@ -334,7 +334,7 @@ the case for all descriptors, but many take this approach. ## References 1. Wikberg J, Eklund M, Willighagen E, Spjuth O, Lapins M, Engkvist O, et al. Introduction to Pharmaceutical Bioinformatics. 2018. -2. Steinbeck C, Hoppe C, Hoppe C, Kuhn S, Floris M, Guha R, et al. Recent Developments of the Chemistry Development Kit (CDK) - An Open-Source Java Library for Chemo- and Bioinformatics. Curr Pharm Des [Internet]. 2006 Jun 1;12(17):2111–20. Available from: https://cdk.github.io/cdk-paper-2/ doi:[10.2174/138161206777585274](https://doi.org/10.2174/138161206777585274) ([Scholia](https://scholia.toolforge.org/doi/10.2174/138161206777585274)) +2. Steinbeck C, Hoppe C, Kuhn S, Floris M, Guha R, Willighagen E. Recent Developments of the Chemistry Development Kit (CDK) - An Open-Source Java Library for Chemo- and Bioinformatics. Curr Pharm Des [Internet]. 2006 Jun 1;12(17):2111–20. Available from: https://cdk.github.io/cdk-paper-2/ doi:[10.2174/138161206777585274](https://doi.org/10.2174/138161206777585274) ([Scholia](https://scholia.toolforge.org/doi/10.2174/138161206777585274)) 3. Guha R, Howard MT, Hutchison GR, Murray-Rust P, Rzepa HS, Steinbeck C, et al. The Blue Obelisk-interoperability in chemical informatics. JCIM. 2006 Feb 22;46(3):991–8. doi:[10.1021/CI050400B](https://doi.org/10.1021/CI050400B) ([Scholia](https://scholia.toolforge.org/doi/10.1021/CI050400B)) 4. Spjuth O, Willighagen E, Guha R, Eklund M, Wikberg J. Towards interoperable and reproducible QSAR analyses: Exchange of datasets. J Cheminform. 2010;2(1):5. doi:[10.1186/1758-2946-2-5](https://doi.org/10.1186/1758-2946-2-5) ([Scholia](https://scholia.toolforge.org/doi/10.1186/1758-2946-2-5)) 5. [https://stackoverflow.com/questions/9363550/how-to-prevent-getting-a-groovy-boolean-in-an-object-array](https://stackoverflow.com/questions/9363550/how-to-prevent-getting-a-groovy-boolean-in-an-object-array) diff --git a/graph.md b/graph.md index 1507e5c..9a10001 100644 --- a/graph.md +++ b/graph.md @@ -268,7 +268,7 @@ Another important aspect of the chemical graph, is that the graph uniquely places atoms in the molecule. That is, the graphs allows us to uniquely identify, and therefore, number atoms in the molecule. This is an important aspect of cheminformatics, and the concept behind canonicalization, such -as used to create canonical SMILES. The InChI library (see Chapter [19](inchi.md#sec:inchi)) +as used to create canonical SMILES. The InChI library (see Chapter [20](inchi.md#sec:inchi)) implements such an algorithm, and we can use it to assign unique integers to all atoms in a chemical graph. diff --git a/images/generated/CTR2.png b/images/generated/CTR2.png index 0a0ac5d2c9d320c962aa2a7c0c6f66e960575aa4..b7e211195b62dacf905c2cd6c44ed1c0315767da 100644 GIT binary patch delta 107 zcmcaAd{uaZCNn1+zp${d)Wy?xHXAYfvxS)H8k&X}T3UgTwt<0_fq|dyrd$RF2GtVR qh?11Vl2ohQ{FKbJN(LhXBNJT%EE?UftDnm{r-UW|GGZO> diff --git a/images/generated/FixPyrroleBondOrders.png b/images/generated/FixPyrroleBondOrders.png index 1bd5c74efc06cc0a806d63fbf3ee60f3b23fc9cc..504a618102958f0d1579baf03cd942e6aa9e7b12 100644 GIT binary patch delta 107 zcmX@OhwTW`(bv8C-$A*~c8k&X}T3Q(ySs7bu8yHv_802zkJY!&B tP%UwdC`m~yNwvz&PsvQHWH2%?GSM}_qCqBnLKIK~gQu&X%Q~loCIEFM9Q6PI delta 107 zcmX@OhwTx diff --git a/images/generated/InChIAtomNumbers.png b/images/generated/InChIAtomNumbers.png index d5671dd424e75a21dc6db87a12cae99f9d786c0d..be87c1b91b3221b43200e3d173cc61069b6f5281 100644 GIT binary patch delta 84 zcmcc1d6#oSDJL7huoQ=5+0M$1b=)lCX1a!^A%>P#MrKw9=Gq1ZRt5&U0>3CtUce%y Wj79D=kIy^?An44X|inU*-c;&%og6>gTe~DWM4f$!8mV delta 105 zcmZpaYLuE#%E`jc#VO2If2n+9ojy;9iLQZph@pX%fu)t9rM3Z(VNlc3KZSvTLAAs+ oq9i4;B-JW6KP5A*lEKKp2&fv12Huzopr0K{7xT>t<8 diff --git a/images/generated/MethaneExplicit.png b/images/generated/MethaneExplicit.png index d8525512b5637fc494d20b5482b9e16d065939a3..a4db9ef73cfd61e8337057f44b1c352637f24a02 100644 GIT binary patch delta 84 zcmbQiHiKo9P;wh8S8}8ChBxTWT8^SQ!{heRWxI@@*z5 WWh`<}wr8(p00K`}KbLh*2~7YE-xzEF delta 84 zcmbQiHiK}K|jb#6@JCb|aZA%+H4hDKIKhS~-ORt5$?x*n-dzRe`1 Wj76^Vdem$NAn Tg_1xX0}yz+`njxgN@xNAomCZ1 delta 83 zcmZo?ZfBlQ%E`jc#lzdkE*&_rZmYP7u7P=op@Eg5k(Hsbwt<0_fx*LBU*1mkVw6(G VA~)fI@ diff --git a/images/generated/RenderAdenine.png b/images/generated/RenderAdenine.png index a5d76279e6dd875799964b721f7e496d96741be2..ca4dc4274dc93f6fad2ac4587046ab9015595869 100644 GIT binary patch delta 86 zcmeyfknzt##tD_2Z2ZD}+}|$RPutj}79eh>YiJr`XlZ3=Vr6KkZD3$!V9;SxzH9RS Y04ZfGaz7K#voQdHr>mdKI;Vst0I0tiuK)l5 delta 86 zcmeyfknzt##tD_2EbN?CiWaRA^ENiA1&EvI8kmO|SX!A{SQ#5@8yHv_7|7lG?K*jX YfRr*8x%_75pA10Y>FVdQ&MBb@0D(6dP5=M^ diff --git a/images/generated/RenderAdenineWithNumbers.png b/images/generated/RenderAdenineWithNumbers.png index 19de1ad7910efb4019b4c674c39672e4e3563060..ef7d0b143788ac4245dc57bde708ec98efbbd0ad 100644 GIT binary patch delta 105 zcmca&f5m=6DJL7hu%w}BT+*hEbxiUhX1a!^A%>P#My6IKmf8jeRt5&G!d7hz3=FCz rt`Q|Ei6yC4x%nxXX_X8{21X{j23RzF@oTaIYGCkm^>bP0l+XkK1f(2M delta 105 zcmca&f5m=6DJKg%7l&C$f_dS_IwtuL6I}!I5JLki0}Crt6Kw+^!=UVT_XGw82GtVR ph?11Vl2ohQ{FKbJN(LhXBcN(58ra*6b$}WeJYD@<);T3K0RRnn8_xg$ diff --git a/images/generated/RenderMolecule.png b/images/generated/RenderMolecule.png new file mode 100644 index 0000000000000000000000000000000000000000..61db51b1729574b1d35a6648eaa4ec5eef12c653 GIT binary patch literal 2085 zcmZ{kc{G&!AIBdumx#K_R8(ADay7D3!%d0oVnUC7j8Pa%y0&X6OUfQ9ONpDS%{sPh zp|K>S#WJo@)&?^}ROESP=6U8fzw`U+_s9L7^ZCBd=lwaa^F8N%zUPzXU~eHUDK7~C zfV7pR89}J|!b+3aCcI&9?GmAgT{>-d8UX5UN%4I!!d}VOl3)h_F{%KNa2)`+LMvez z03x&ifK3Ddd?5hryigu8(#m0p7MgLTKRFgJiYS}IgZ=+7MWi}4P7AXi}2=_;LBIEw1%Hv z%v)GS`Fw%v6Y$;!%#jEtOHL}!`k z_f0|ndxZWGP0r_8`N7(b(3>$N?LN;w04Bw9-NRuA3VhZVHgbik+xQ**$jbqQy^6N> zB9R%~u$$cHG-PEBgH?cTlnRL`-i!U#l2HWp?;D(0Z2un`ZpvNIQ7{%NP|ZuuCj=?S5=%h$&~5&%TO z{}nJN^p?cKtA!s3qiSV#+9{f`dXIHR)?&{~#qG8Egz~@_?zX$Ws*x~vl^dI?CEC=~ zqGvxa+T~&cZ9*$MRv!h+g$kT!LM$)W-zG0bH+-jUB|doYt8SNJ7g?7ln&7HOR+GP8 z6I9h7uczGSYdRsy4%iUkd{xz~Ti! z*E*HCpXmtxRzW0|kjn`xFX@5j97BvTk8$iO8{sH)Qf3zgfJ}dZybK!yfP( zS{DD5wgaR3^PP=9Bb8zGH?``qPwkl2jGVgs0qKEj*(X7}-35Vwn(j4a!%~Sg; zF8VP$v`ZP$)U*wI%7RK~4ycddnJ0N5%T2G_fR9_=>W>Te1*Fja;?KEdb$cPZsK zcE+oiD%0~hpm*9<#ihg^J34TGoVst#LxQ7`(7Yt%u_Nsr5xQHp8UmkCa+d zLCRk$I0%Ph*-&Q>G`+QC!UC3#=?$p)BK`C#qA{r_<2}7{U8$Fz@Zx>ryv?zQ^nqGRXuWmL}XX>`ROAC#= zlrAQfefB=*j&Ot>q^j0FPLm6!lEL-R3UKZxn{G13Tpz}+^mzpk&ma+Xf|Hd*Xu`{mWMzR#4|k+MM#8I6jos%tu$J`vXPh z`kHTX70k84GPZFxuEH&h?5H1Wh#kKaMsoa=CY!--ZKpofy}2y|fA#=4Hc&iMHoap7 zyBSAy9~-(qRrUpXgN+E*avvMMH&KQzS7A3jscvKMibl%@{>jAJ*=o7z4HUjBn|vLF z9X6)A>J1ePm9biEv344%wO#r_yPH@1j@JBGefew1h5gP)uD=MX&WDerF&q5RY$k+b z?7KbJ;NJrzn=2GCn*A@Caj>gZT@e|P-x`BI(4+G;7;f?MOW7Zoo|#7Z^~DEux$2qy zg%7rRKgDio)Xs1*~7j90KaC0!6>=W*X_r2mL6hKEyM^8h`Kto&K wN&5s|`#4_5;HZ`sUQ26It;Y5LfZ$Maz{NlR9e5gnWeNen%G}FVdQ&MBb@0P;o_RenderAdenine --> ![](images/generated/RenderAdenine.png) -
**Figure 19.1**: 2D diagram of one of the tautomers of adenine. +
**Figure 20.1**: 2D diagram of one of the tautomers of adenine. ### Stereoisomerism diff --git a/index.md b/index.md index e6391dc..2119c78 100644 --- a/index.md +++ b/index.md @@ -20,12 +20,12 @@ "keywords":"cheminformatics, chemoinformatics, java, Groovy, Chemistry Development Kit, CDK", "license":"CC BY-SA 4.0", "url": "https://egonw.github.io/cdkbook/", - "version":"2.9-1" + "version":"2.9-2" } -Edition 2.9-1 +Edition 2.9-2 **Egon L. Willighagen** PhD
Long time CDK developer @@ -165,44 +165,46 @@ to Python, please [file a request here](https://github.com/egonw/chempyformatics 15.4.2. [Explicit Hydrogens](missing.md#explicit-hydrogens)
15.5. [2D Coordinates](missing.md#2d-coordinates)
15.6. [Unknown Molecular Formula](missing.md#unknown-molecular-formula)
-16. [Substructure Searching](substructure.md)
-16.1. [Fingerprints](substructure.md#fingerprints)
-16.1.1. [MACCS Fingerprints](substructure.md#maccs-fingerprints)
-16.1.2. [ECFP and FCFP Fingerprints](substructure.md#ecfp-and-fcfp-fingerprints)
-17. [Molecular Properties](properties.md)
-17.1. [Molecular Mass](properties.md#molecular-mass)
-17.1.1. [Implicit Hydrogens](properties.md#implicit-hydrogens)
-17.2. [LogP](properties.md#logp)
-17.3. [Total Polar Surface Area](properties.md#total-polar-surface-area)
-17.4. [Van der Waals Volume](properties.md#van-der-waals-volume)
-17.5. [Aromaticity](properties.md#aromaticity)
-18. [Molecular Descriptors](descriptor.md)
-18.1. [Descriptors and Specifications](descriptor.md#descriptors-and-specifications)
-18.1.1. [IImplementationSpecification](descriptor.md#iimplementationspecification)
-18.2. [IDescriptor](descriptor.md#idescriptor)
-18.3. [IMolecularDescriptor](descriptor.md#imoleculardescriptor)
-18.4. [IDescriptorResult](descriptor.md#idescriptorresult)
-18.5. [Counting Nitrogens and Oxygens](descriptor.md#counting-nitrogens-and-oxygens)
-19. [InChI](inchi.md)
-19.1. [Layers](inchi.md#layers)
-19.1.1. [Fixed Hydrogens](inchi.md#fixed-hydrogens)
-19.1.2. [Stereoisomerism](inchi.md#stereoisomerism)
-20. [Chemistry Toolkit Rosetta](ctr.md)
-20.1. [Heavy atom counts from an SD file](ctr.md#heavy-atom-counts-from-an-sd-file)
-20.2. [Depict a compound as an image](ctr.md#depict-a-compound-as-an-image)
-20.3. [Working with SD tag data](ctr.md#working-with-sd-tag-data)
-21. [Migration](migration.md)
-21.1. [CDK 2.0 to 2.3](migration.md#cdk-20-to-23)
-21.2. [CDK 1.4 to 2.0](migration.md#cdk-14-to-20)
-21.2.1. [Removed classes](migration.md#removed-classes)
-21.2.2. [Renamed classes and methods](migration.md#renamed-classes-and-methods)
-21.2.3. [Changed behavior](migration.md#changed-behavior)
-21.2.4. [Constructors that now require a builder](migration.md#constructors-that-now-require-a-builder)
-21.2.5. [Static methods that are no longer](migration.md#static-methods-that-are-no-longer)
-21.2.6. [IsotopeFactory](migration.md#isotopefactory)
-21.2.7. [IFingerPrinter](migration.md#ifingerprinter)
-21.2.8. [SMILESGenerator](migration.md#smilesgenerator)
-21.2.9. [Aromaticity calculations](migration.md#aromaticity-calculations)
+16. [Depiction](depiction.md)
+16.1. [Molecules](depiction.md#molecules)
+17. [Substructure Searching](substructure.md)
+17.1. [Fingerprints](substructure.md#fingerprints)
+17.1.1. [MACCS Fingerprints](substructure.md#maccs-fingerprints)
+17.1.2. [ECFP and FCFP Fingerprints](substructure.md#ecfp-and-fcfp-fingerprints)
+18. [Molecular Properties](properties.md)
+18.1. [Molecular Mass](properties.md#molecular-mass)
+18.1.1. [Implicit Hydrogens](properties.md#implicit-hydrogens)
+18.2. [LogP](properties.md#logp)
+18.3. [Total Polar Surface Area](properties.md#total-polar-surface-area)
+18.4. [Van der Waals Volume](properties.md#van-der-waals-volume)
+18.5. [Aromaticity](properties.md#aromaticity)
+19. [Molecular Descriptors](descriptor.md)
+19.1. [Descriptors and Specifications](descriptor.md#descriptors-and-specifications)
+19.1.1. [IImplementationSpecification](descriptor.md#iimplementationspecification)
+19.2. [IDescriptor](descriptor.md#idescriptor)
+19.3. [IMolecularDescriptor](descriptor.md#imoleculardescriptor)
+19.4. [IDescriptorResult](descriptor.md#idescriptorresult)
+19.5. [Counting Nitrogens and Oxygens](descriptor.md#counting-nitrogens-and-oxygens)
+20. [InChI](inchi.md)
+20.1. [Layers](inchi.md#layers)
+20.1.1. [Fixed Hydrogens](inchi.md#fixed-hydrogens)
+20.1.2. [Stereoisomerism](inchi.md#stereoisomerism)
+21. [Chemistry Toolkit Rosetta](ctr.md)
+21.1. [Heavy atom counts from an SD file](ctr.md#heavy-atom-counts-from-an-sd-file)
+21.2. [Depict a compound as an image](ctr.md#depict-a-compound-as-an-image)
+21.3. [Working with SD tag data](ctr.md#working-with-sd-tag-data)
+22. [Migration](migration.md)
+22.1. [CDK 2.0 to 2.3](migration.md#cdk-20-to-23)
+22.2. [CDK 1.4 to 2.0](migration.md#cdk-14-to-20)
+22.2.1. [Removed classes](migration.md#removed-classes)
+22.2.2. [Renamed classes and methods](migration.md#renamed-classes-and-methods)
+22.2.3. [Changed behavior](migration.md#changed-behavior)
+22.2.4. [Constructors that now require a builder](migration.md#constructors-that-now-require-a-builder)
+22.2.5. [Static methods that are no longer](migration.md#static-methods-that-are-no-longer)
+22.2.6. [IsotopeFactory](migration.md#isotopefactory)
+22.2.7. [IFingerPrinter](migration.md#ifingerprinter)
+22.2.8. [SMILESGenerator](migration.md#smilesgenerator)
+22.2.9. [Aromaticity calculations](migration.md#aromaticity-calculations)
[Index](indexList.md)
diff --git a/indexList.md b/indexList.md index 05da3f0..056e319 100644 --- a/indexList.md +++ b/indexList.md @@ -17,6 +17,7 @@ canonicalization [graph](graph.md#tp13)
canonical SMILES [graph](graph.md#tp14)
CAS [cheminfo](cheminfo.md#tp17)
CASE [cheminfo](cheminfo.md#tp21)
+CDK-JChemPaint [depiction](depiction.md#tp3)
CDKOWLReader [ioclasseslist](ioclasseslist.md#tp1)
CDKOWLWriter [ioclasseslist](ioclasseslist.md#tp2)
CDKSourceCodeWriter [ioclasseslist](ioclasseslist.md#tp3)
@@ -98,6 +99,7 @@ isomeric SMILES [io](io.md#tp13)
IUPAC name [cheminfo](cheminfo.md#tp5)
Java application [writingApps](writingApps.md#tp1)
javac [writingApps](writingApps.md#tp2)
+JChemPaint [depiction](depiction.md#tp1)
JNI-InChI [inchi](inchi.md#tp2)
line notation [io](io.md#tp8)
line notations [cheminfo](cheminfo.md#tp6)
@@ -145,6 +147,7 @@ periodic table [missing](missing.md#tp3)
period [missing](missing.md#tp5)
PLS [cheminfo](cheminfo.md#tp26)
PMPReader [ioclasseslist](ioclasseslist.md#tp32)
+PNG [depiction](depiction.md#tp4)
principal component analysis [cheminfo](cheminfo.md#tp27)
products [reaction](reaction.md#tp3)
properties [atomsbonds](atomsbonds.md#tp20)
@@ -157,6 +160,7 @@ quantum chemistry [cheminfo](cheminfo.md#tp23)
radical [unpairedelectrons](unpairedelectrons.md#tp5)
reactants [reaction](reaction.md#tp2)
reaction [reaction](reaction.md#tp1)
+rendering [depiction](depiction.md#tp2)
RGroupQueryReader [ioclasseslist](ioclasseslist.md#tp42)
RGroupQueryWriter [ioclasseslist](ioclasseslist.md#tp43)
ring bonds [graph](graph.md#tp4)
diff --git a/introduction.md b/introduction.md index 8433309..96b32cb 100644 --- a/introduction.md +++ b/introduction.md @@ -34,9 +34,9 @@ knowledge to a minimum, the examples will be pretty verbose. ## References -1. Steinbeck C, Han Y, Kuhn S, Horlacher O, Luttmann E, Luttmann E, et al. The Chemistry Development Kit (CDK): an open-source Java library for Chemo- and Bioinformatics. JCICS. 2003 Feb 11;43(2):493–500. doi:[10.1021/CI025584Y](https://doi.org/10.1021/CI025584Y) ([Scholia](https://scholia.toolforge.org/doi/10.1021/CI025584Y)) +1. Steinbeck C, Han Y, Kuhn S, Horlacher O, Luttmann E, Willighagen E. The Chemistry Development Kit (CDK): an open-source Java library for Chemo- and Bioinformatics. JCICS. 2003 Feb 11;43(2):493–500. doi:[10.1021/CI025584Y](https://doi.org/10.1021/CI025584Y) ([Scholia](https://scholia.toolforge.org/doi/10.1021/CI025584Y)) 2. Krause S, Willighagen E, Steinbeck C. JChemPaint - Using the Collaborative Forces of the Internet to Develop a Free Editor for 2D Chemical Structures. Molecules. 2000 Jan 28;5(1):93–8. doi:[10.3390/50100093](https://doi.org/10.3390/50100093) ([Scholia](https://scholia.toolforge.org/doi/10.3390/50100093)) -3. Steinbeck C, Hoppe C, Hoppe C, Kuhn S, Floris M, Guha R, et al. Recent Developments of the Chemistry Development Kit (CDK) - An Open-Source Java Library for Chemo- and Bioinformatics. Curr Pharm Des [Internet]. 2006 Jun 1;12(17):2111–20. Available from: https://cdk.github.io/cdk-paper-2/ doi:[10.2174/138161206777585274](https://doi.org/10.2174/138161206777585274) ([Scholia](https://scholia.toolforge.org/doi/10.2174/138161206777585274)) +3. Steinbeck C, Hoppe C, Kuhn S, Floris M, Guha R, Willighagen E. Recent Developments of the Chemistry Development Kit (CDK) - An Open-Source Java Library for Chemo- and Bioinformatics. Curr Pharm Des [Internet]. 2006 Jun 1;12(17):2111–20. Available from: https://cdk.github.io/cdk-paper-2/ doi:[10.2174/138161206777585274](https://doi.org/10.2174/138161206777585274) ([Scholia](https://scholia.toolforge.org/doi/10.2174/138161206777585274)) 4. Willighagen E, Mayfield JW, Alvarsson J, Berg A, Carlsson L, Jeliazkova N, et al. The Chemistry Development Kit (CDK) v2.0: atom typing, depiction, molecular formulas, and substructure searching. J Cheminform. 2017 Jun 6;9(1). doi:[10.1186/S13321-017-0220-4](https://doi.org/10.1186/S13321-017-0220-4) ([Scholia](https://scholia.toolforge.org/doi/10.1186/S13321-017-0220-4)) 5. Gasteiger J, Engel T, editors. Chemoinformatics: A Textbook. Weinheim, Deutschland: Wiley-VCH; 2003. 6. Leach AR, Gillet VJ. An introduction to chemoinformatics. Berlin, Deutschland: Springer Science+Business Media; 2007. diff --git a/io.md b/io.md index 569c63a..f01b191 100644 --- a/io.md +++ b/io.md @@ -417,7 +417,7 @@ location: 6, 31-33: invalid symbol: D location: 7, 31-33: invalid symbol: T ``` -Because of an issue in version 2.8 of the CDK, the above does not show any warnings. +Because of an issue in version 2.9 of the CDK, the above does not show any warnings. This has been fixed in CDK 2.3, see [commit 547b028e17656f54a080a885a166377320b3a8ad](https://github.com/cdk/cdk/commit/547b028e17656f54a080a885a166377320b3a8ad). @@ -795,7 +795,7 @@ Isomeric SMILES: F[C@@H](Cl)Br ``` Of course, this does require that aromaticity has been perceived, as explained -in Section [17.5](properties.md#sec:aromaticity). +in Section [18.5](properties.md#sec:aromaticity). ## Recipes @@ -890,7 +890,7 @@ Double bonds: 5 ### SDF files with properties SDF files are quite similar to MDL files but can have an arbitrary number of -chemical structures and have properties (see also Section [20.3](ctr.md#sec:ctr4)). An example file from +chemical structures and have properties (see also Section [21.3](ctr.md#sec:ctr4)). An example file from [ChEMBL](https://www.ebi.ac.uk/chembl/compound_report_card/CHEMBL3183843/) [7]: diff --git a/migration.md b/migration.md index 7545ea1..4b41f39 100644 --- a/migration.md +++ b/migration.md @@ -86,7 +86,7 @@ The [`DescriptorEngine`](http://cdk.github.io/cdk/latest/docs/api/org/openscienc #### SMARTSQueryTool The second constructor that now needs a [`IChemObjectBuilder`](http://cdk.github.io/cdk/latest/docs/api/org/openscience/cdk/interfaces/IChemObjectBuilder.html) is that of the -[`SMARTSQueryTool`](http://cdk.github.io/cdk/latest/docs/api/org/openscience/cdk/smiles/smarts/SMARTSQueryTool.html). Here it is passed on to the `SMARTSParser` which +`SMARTSQueryTool`. Here it is passed on to the `SMARTSParser` which needs it for its data structure for the matching. #### ModelBuilder3D @@ -209,7 +209,7 @@ println "$smiles" ### Aromaticity calculations -Aromaticity is differently calculated now, see Section [17.5](properties.md#sec:aromaticity). +Aromaticity is differently calculated now, see Section [18.5](properties.md#sec:aromaticity). ## References diff --git a/missing.md b/missing.md index 3ea01f9..b843d2d 100644 --- a/missing.md +++ b/missing.md @@ -301,11 +301,11 @@ for (atom in butanol.atoms()) { which will generate the coordinate starting with an initial direction: ```plain -C: (-1.7763568394002505E-15, -1.3322676295501878E-15) -C: (0.0, 1.4999999999999991) -C: (-1.299038105676657, 2.2500000000000018) -O: (-2.5980762113533165, 1.5000000000000049) -C: (-1.299038105676652, 3.750000000000002) +C: (0.9742785792574944, 2.0624999999999982) +C: (-0.32475952641916295, 2.8125) +C: (-1.6237976320958227, 2.062500000000002) +O: (-1.6237976320958263, 0.5625000000000024) +C: (-2.9228357377724787, 2.812500000000007) ``` diff --git a/protein.md b/protein.md index 5cbe761..deb000b 100644 --- a/protein.md +++ b/protein.md @@ -147,6 +147,6 @@ Monomer name: ALAA9 ## References 1. Henrick K, Feng Z, Bluhm WF, Dimitropoulos D, Doreleijers JF, Dutta S, et al. Remediation of the protein data bank archive. NAR. 2008 Jan;36(Database issue):D426-33. doi:[10.1093/NAR/GKM937](https://doi.org/10.1093/NAR/GKM937) ([Scholia](https://scholia.toolforge.org/doi/10.1093/NAR/GKM937)) -2. MM T, WA H. Highly ordered crystals of the plant seed protein crambin. J Mol Biol. 1979 Jan 1;127(2):219–23. doi:[10.1016/0022-2836(79)90242-0](https://doi.org/10.1016/0022-2836(79)90242-0) ([Scholia](https://scholia.toolforge.org/doi/10.1016/0022-2836(79)90242-0)) +2. Teeter MM, Hendrickson WA. Highly ordered crystals of the plant seed protein crambin. J Mol Biol [Internet]. 1979 Jan 1;127(2):219–23. Available from: https://api.elsevier.com/content/article/PII:0022283679902420?httpAccept=text/xml doi:[10.1016/0022-2836(79)90242-0](https://doi.org/10.1016/0022-2836(79)90242-0) ([Scholia](https://scholia.toolforge.org/doi/10.1016/0022-2836(79)90242-0)) diff --git a/reaction.md b/reaction.md index ba244bc..76fd3e7 100644 --- a/reaction.md +++ b/reaction.md @@ -43,6 +43,9 @@ which returns us these current options: FORWARD BACKWARD BIDIRECTIONAL +NO_GO +RETRO_SYNTHETIC +RESONANCE ``` There are matching get methods to access all reactants and products: