Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Resolving regressions in SMSD - it seems to be that the existing code…
… won't match a aromatic double bond with an aromatic single bond (i.e. they both have to be single).

Change-Id: Ib47b2aa3d17649424a53bfeddafa10cee427acca
Signed-off-by: Egon Willighagen <egonw@users.sourceforge.net>
  • Loading branch information
johnmay authored and egonw committed Sep 29, 2013
1 parent f30223d commit 96794e1
Show file tree
Hide file tree
Showing 5 changed files with 43 additions and 4 deletions.
2 changes: 2 additions & 0 deletions src/META-INF/test-smsd.libdepends
Expand Up @@ -4,3 +4,5 @@ log4j.jar
jgrapht-0.6.0.jar
signatures-1.1.jar
guava-14.0.1.jar
beam-core-0.2-SNAPSHOT.jar
beam-func-0.2-SNAPSHOT.jar
Expand Up @@ -24,6 +24,7 @@
*/
package org.openscience.cdk.smsd.tools;

import org.openscience.cdk.AtomContainer;
import org.openscience.cdk.CDKConstants;
import org.openscience.cdk.DefaultChemObjectBuilder;
import org.openscience.cdk.annotations.TestClass;
Expand Down Expand Up @@ -109,8 +110,8 @@ public static void configure(IAtomContainer mol) {
try {
// figure out which atoms are in aromatic rings:
CDKHydrogenAdder cdk = CDKHydrogenAdder.getInstance(DefaultChemObjectBuilder.getInstance());
cdk.addImplicitHydrogens(mol);
ExtAtomContainerManipulator.percieveAtomTypesAndConfigureAtoms(mol);
cdk.addImplicitHydrogens(mol);

CDKHueckelAromaticityDetector.detectAromaticity(mol);
// figure out which rings are aromatic:
Expand Down
17 changes: 17 additions & 0 deletions src/test/org/openscience/cdk/smsd/SMSDTest.java
Expand Up @@ -52,6 +52,7 @@
import org.openscience.cdk.smsd.interfaces.Algorithm;
import org.openscience.cdk.smsd.tools.ExtAtomContainerManipulator;
import org.openscience.cdk.smsd.tools.MolHandler;
import org.openscience.cdk.tools.manipulator.AtomContainerManipulator;

/**
* @author Syed Asad Rahman <asad@ebi.ac.uk>
Expand Down Expand Up @@ -125,9 +126,14 @@ public void testSearchMCS() throws CDKException {
try {
System.out.println("searchMCS");
SmilesParser sp = new SmilesParser(DefaultChemObjectBuilder.getInstance());
sp.setPreservingAromaticity(true);
IAtomContainer target = null;
target = sp.parseSmiles("C\\C=C/Nc1cccc(c1)N(O)\\C=C\\C\\C=C\\C=C/C");
AtomContainerManipulator.percieveAtomTypesAndConfigureAtoms(target);
IAtomContainer queryac = sp.parseSmiles("Nc1ccccc1");
AtomContainerManipulator.percieveAtomTypesAndConfigureAtoms(queryac);
CDKHueckelAromaticityDetector.detectAromaticity(target);
CDKHueckelAromaticityDetector.detectAromaticity(queryac);
Isomorphism smsd1 = new Isomorphism(Algorithm.DEFAULT, true);
smsd1.init(queryac, target, true, true);
smsd1.setChemFilters(true, true, true);
Expand Down Expand Up @@ -211,8 +217,14 @@ public void testSet_MolHandler_MolHandler() throws CDKException {
public void testGetAllAtomMapping() throws CDKException {
System.out.println("getAllAtomMapping");
SmilesParser sp = new SmilesParser(DefaultChemObjectBuilder.getInstance());
sp.setPreservingAromaticity(true);
IAtomContainer target = sp.parseSmiles("C\\C=C/Nc1cccc(c1)N(O)\\C=C\\C\\C=C\\C=C/C");
IAtomContainer queryac = sp.parseSmiles("Nc1ccccc1");
AtomContainerManipulator.percieveAtomTypesAndConfigureAtoms(target);
AtomContainerManipulator.percieveAtomTypesAndConfigureAtoms(queryac);
CDKHueckelAromaticityDetector.detectAromaticity(target);
CDKHueckelAromaticityDetector.detectAromaticity(queryac);


ExtAtomContainerManipulator.percieveAtomTypesAndConfigureAtoms(queryac);
ExtAtomContainerManipulator.percieveAtomTypesAndConfigureAtoms(target);
Expand All @@ -237,8 +249,13 @@ public void testGetAllAtomMapping() throws CDKException {
public void testGetAllMapping() throws CDKException {
System.out.println("getAllMapping");
SmilesParser sp = new SmilesParser(DefaultChemObjectBuilder.getInstance());
sp.setPreservingAromaticity(true);
IAtomContainer target = sp.parseSmiles("C\\C=C/Nc1cccc(c1)N(O)\\C=C\\C\\C=C\\C=C/C");
IAtomContainer queryac = sp.parseSmiles("Nc1ccccc1");
AtomContainerManipulator.percieveAtomTypesAndConfigureAtoms(target);
AtomContainerManipulator.percieveAtomTypesAndConfigureAtoms(queryac);
CDKHueckelAromaticityDetector.detectAromaticity(target);
CDKHueckelAromaticityDetector.detectAromaticity(queryac);

Isomorphism smsd1 = new Isomorphism(Algorithm.DEFAULT, true);
smsd1.init(queryac, target, true, true);
Expand Down
Expand Up @@ -43,6 +43,7 @@
import org.openscience.cdk.smsd.interfaces.AbstractMCSAlgorithmTest;
import org.openscience.cdk.smsd.interfaces.Algorithm;
import org.openscience.cdk.smsd.tools.MolHandler;
import org.openscience.cdk.tools.manipulator.AtomContainerManipulator;

/**
* Unit testing for the {@link MCSPlusHandler} class.
Expand Down Expand Up @@ -152,11 +153,14 @@ public void testSet_MolHandler_MolHandler() throws InvalidSmilesException {
* @throws InvalidSmilesException
*/
@Test
public void testGetAllAtomMapping() throws InvalidSmilesException {
public void testGetAllAtomMapping() throws CDKException {
System.out.println("getAllAtomMapping");
SmilesParser sp = new SmilesParser(DefaultChemObjectBuilder.getInstance());
sp.setPreservingAromaticity(true);
IAtomContainer target = sp.parseSmiles("C\\C=C/Nc1cccc(c1)N(O)\\C=C\\C\\C=C\\C=C/C");
IAtomContainer queryac = sp.parseSmiles("Nc1ccccc1");
AtomContainerManipulator.percieveAtomTypesAndConfigureAtoms(target);
AtomContainerManipulator.percieveAtomTypesAndConfigureAtoms(queryac);

MCSPlusHandler smsd1 = new MCSPlusHandler();
MolHandler mol1 = new MolHandler(queryac, true, true);
Expand All @@ -173,11 +177,14 @@ public void testGetAllAtomMapping() throws InvalidSmilesException {
* @throws InvalidSmilesException
*/
@Test
public void testGetAllMapping() throws InvalidSmilesException {
public void testGetAllMapping() throws CDKException {
System.out.println("getAllMapping");
SmilesParser sp = new SmilesParser(DefaultChemObjectBuilder.getInstance());
sp.setPreservingAromaticity(true);
IAtomContainer target = sp.parseSmiles("C\\C=C/Nc1cccc(c1)N(O)\\C=C\\C\\C=C\\C=C/C");
IAtomContainer queryac = sp.parseSmiles("Nc1ccccc1");
AtomContainerManipulator.percieveAtomTypesAndConfigureAtoms(target);
AtomContainerManipulator.percieveAtomTypesAndConfigureAtoms(queryac);

MCSPlusHandler smsd1 = new MCSPlusHandler();
MolHandler mol1 = new MolHandler(queryac, true, true);
Expand Down
Expand Up @@ -27,12 +27,14 @@
import org.junit.Assert;
import org.junit.Test;
import org.openscience.cdk.DefaultChemObjectBuilder;
import org.openscience.cdk.aromaticity.CDKHueckelAromaticityDetector;
import org.openscience.cdk.exception.CDKException;
import org.openscience.cdk.exception.InvalidSmilesException;
import org.openscience.cdk.interfaces.IAtomContainer;
import org.openscience.cdk.smiles.SmilesParser;
import org.openscience.cdk.smsd.Isomorphism;
import org.openscience.cdk.smsd.interfaces.Algorithm;
import org.openscience.cdk.tools.manipulator.AtomContainerManipulator;

/**
* Unit testing for the {@link SubStructureSearchAlgorithms} class.
Expand Down Expand Up @@ -219,8 +221,13 @@ public void testGetFirstMapping() throws InvalidSmilesException, CDKException {
public void testGetAllMapping() throws InvalidSmilesException, CDKException {
System.out.println("getAllMapping");
SmilesParser sp = new SmilesParser(DefaultChemObjectBuilder.getInstance());
sp.setPreservingAromaticity(true);
IAtomContainer target = sp.parseSmiles("C\\C=C/Nc1cccc(c1)N(O)\\C=C\\C\\C=C\\C=C/C");
IAtomContainer queryac = sp.parseSmiles("Nc1ccccc1");
AtomContainerManipulator.percieveAtomTypesAndConfigureAtoms(target);
AtomContainerManipulator.percieveAtomTypesAndConfigureAtoms(queryac);
CDKHueckelAromaticityDetector.detectAromaticity(target);
CDKHueckelAromaticityDetector.detectAromaticity(queryac);

Isomorphism smsd1 = new Isomorphism(Algorithm.DEFAULT, true);
smsd1.init(queryac, target, true, true);
Expand Down Expand Up @@ -257,8 +264,13 @@ public void testGetFirstAtomMapping() throws InvalidSmilesException, CDKExceptio
public void testGetAllAtomMapping() throws InvalidSmilesException, CDKException {
System.out.println("getAllAtomMapping");
SmilesParser sp = new SmilesParser(DefaultChemObjectBuilder.getInstance());
sp.setPreservingAromaticity(true);
IAtomContainer target = sp.parseSmiles("C\\C=C/Nc1cccc(c1)N(O)\\C=C\\C\\C=C\\C=C/C");
IAtomContainer queryac = sp.parseSmiles("Nc1ccccc1");
IAtomContainer queryac = sp.parseSmiles("Nc1ccccc1");
AtomContainerManipulator.percieveAtomTypesAndConfigureAtoms(target);
AtomContainerManipulator.percieveAtomTypesAndConfigureAtoms(queryac);
CDKHueckelAromaticityDetector.detectAromaticity(target);
CDKHueckelAromaticityDetector.detectAromaticity(queryac);

Isomorphism smsd1 = new Isomorphism(Algorithm.DEFAULT, true);
smsd1.init(queryac, target, true, true);
Expand Down

0 comments on commit 96794e1

Please sign in to comment.