|
23 | 23 |
|
24 | 24 | package org.openscience.cdk.geometry; |
25 | 25 |
|
| 26 | +import org.hamcrest.number.IsCloseTo; |
26 | 27 | import org.junit.Assert; |
27 | 28 | import org.junit.Test; |
28 | 29 | import org.openscience.cdk.Atom; |
|
41 | 42 | import org.openscience.cdk.interfaces.IRingSet; |
42 | 43 | import org.openscience.cdk.io.IChemObjectReader.Mode; |
43 | 44 | import org.openscience.cdk.io.MDLV2000Reader; |
| 45 | +import org.openscience.cdk.io.MDLV2000Writer; |
44 | 46 | import org.openscience.cdk.isomorphism.AtomMappingTools; |
| 47 | +import org.openscience.cdk.silent.SilentChemObjectBuilder; |
45 | 48 | import org.openscience.cdk.tools.diff.AtomContainerDiff; |
| 49 | +import org.openscience.cdk.tools.manipulator.AtomContainerManipulator; |
46 | 50 |
|
47 | 51 | import javax.vecmath.Point2d; |
48 | 52 | import javax.vecmath.Point3d; |
| 53 | +import java.io.IOException; |
49 | 54 | import java.io.InputStream; |
| 55 | +import java.io.StringReader; |
| 56 | +import java.util.ArrayList; |
| 57 | +import java.util.Arrays; |
| 58 | +import java.util.Collections; |
50 | 59 | import java.util.HashMap; |
| 60 | +import java.util.List; |
51 | 61 | import java.util.Map; |
52 | 62 |
|
53 | 63 | import static org.hamcrest.CoreMatchers.is; |
@@ -880,6 +890,64 @@ public void medianBondLengthWithZeroLengthBonds() { |
880 | 890 | assertThat(GeometryUtil.getBondLengthMedian(container), is(1d)); |
881 | 891 | } |
882 | 892 |
|
| 893 | + @Test public void testBasicReflection() { |
| 894 | + IAtomContainer container = SilentChemObjectBuilder.getInstance().newAtomContainer(); |
| 895 | + container.addAtom(atomAt(new Point2d(-1, 1))); |
| 896 | + container.addAtom(atomAt(new Point2d(-1, -1))); |
| 897 | + container.addAtom(atomAt(new Point2d(1, 1))); |
| 898 | + container.addAtom(atomAt(new Point2d(1, -1))); |
| 899 | + assertThat(container.getAtom(0).getPoint2d().x, IsCloseTo.closeTo(-1, 0.001)); |
| 900 | + assertThat(container.getAtom(0).getPoint2d().y, IsCloseTo.closeTo(1, 0.001)); |
| 901 | + assertThat(container.getAtom(3).getPoint2d().x, IsCloseTo.closeTo(1, 0.001)); |
| 902 | + assertThat(container.getAtom(3).getPoint2d().y, IsCloseTo.closeTo(-1, 0.001)); |
| 903 | + GeometryUtil.reflect(Arrays.asList(container.getAtom(0), |
| 904 | + container.getAtom(3)), |
| 905 | + new Point2d(-1,-1), new Point2d(1,1)); |
| 906 | + assertThat(container.getAtom(0).getPoint2d().x, IsCloseTo.closeTo(1, 0.001)); |
| 907 | + assertThat(container.getAtom(0).getPoint2d().y, IsCloseTo.closeTo(-1, 0.001)); |
| 908 | + assertThat(container.getAtom(3).getPoint2d().x, IsCloseTo.closeTo(-1, 0.001)); |
| 909 | + assertThat(container.getAtom(3).getPoint2d().y, IsCloseTo.closeTo(1, 0.001)); |
| 910 | + } |
| 911 | + |
| 912 | + @Test public void testBasicReflectionBonds() throws IOException, CDKException { |
| 913 | + String molfile = "\n" + |
| 914 | + " Mrv1810 05052109112D \n" + |
| 915 | + "\n" + |
| 916 | + " 10 10 0 0 0 0 999 V2000\n" + |
| 917 | + " -1.5138 -0.0596 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n" + |
| 918 | + " -2.2282 -0.4722 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n" + |
| 919 | + " -2.2282 -1.2972 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n" + |
| 920 | + " -1.5138 -1.7097 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n" + |
| 921 | + " -0.7993 -1.2972 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n" + |
| 922 | + " -0.7993 -0.4722 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n" + |
| 923 | + " -1.5138 0.7654 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n" + |
| 924 | + " -0.7993 1.1779 0.0000 C 0 0 1 0 0 0 0 0 0 0 0 0\n" + |
| 925 | + " -0.7993 2.0029 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n" + |
| 926 | + " -0.0848 0.7654 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0\n" + |
| 927 | + " 1 2 1 0 0 0 0\n" + |
| 928 | + " 2 3 1 0 0 0 0\n" + |
| 929 | + " 3 4 1 0 0 0 0\n" + |
| 930 | + " 4 5 1 0 0 0 0\n" + |
| 931 | + " 5 6 1 0 0 0 0\n" + |
| 932 | + " 1 6 1 0 0 0 0\n" + |
| 933 | + " 7 8 1 0 0 0 0\n" + |
| 934 | + " 8 9 1 0 0 0 0\n" + |
| 935 | + " 8 10 1 1 0 0 0\n" + |
| 936 | + " 1 7 2 0 0 0 0\n" + |
| 937 | + "M END\n"; |
| 938 | + try (MDLV2000Reader mdlr = new MDLV2000Reader(new StringReader(molfile))) { |
| 939 | + IAtomContainer mol = mdlr.read(SilentChemObjectBuilder.getInstance().newAtomContainer()); |
| 940 | + List<IAtom> atoms = new ArrayList<>(); |
| 941 | + atoms.add(mol.getAtom(6)); |
| 942 | + atoms.add(mol.getAtom(7)); |
| 943 | + atoms.add(mol.getAtom(8)); |
| 944 | + atoms.add(mol.getAtom(9)); |
| 945 | + GeometryUtil.reflect(atoms, mol.getBond(9)); |
| 946 | + assertThat(mol.getBond(8).getDisplay(), is(IBond.Display.WedgedHashBegin)); |
| 947 | + assertThat(mol.getBond(8).getStereo(), is(IBond.Stereo.DOWN)); |
| 948 | + } |
| 949 | + } |
| 950 | + |
883 | 951 | private IAtom atomAt(Point2d p) { |
884 | 952 | IAtom atom = new Atom("C"); |
885 | 953 | atom.setPoint2d(p); |
|
0 commit comments