/** * Add extended tetrahedral stereo configuration to the Beam GraphBuilder. * * @param et stereo element specifying tetrahedral configuration * @param gb the current graph builder * @param indices atom indices */ private static void addExtendedTetrahedralConfiguration(ExtendedTetrahedral et, GraphBuilder gb, Map<IAtom, Integer> indices) { IAtom[] ligands = et.peripherals(); int u = indices.get(et.focus()); int vs[] = new int[]{indices.get(ligands[0]), indices.get(ligands[1]), indices.get(ligands[2]), indices.get(ligands[3])}; gb.extendedTetrahedral(u).lookingFrom(vs[0]).neighbors(vs[1], vs[2], vs[3]) .winding(et.winding() == CLOCKWISE ? Configuration.CLOCKWISE : Configuration.ANTI_CLOCKWISE).build(); }
/** * (R)-penta-2,3-diene */ @Test public void r_penta_2_3_diene() throws Exception { InChIToStructure parser = new InChIToStructure("InChI=1S/C5H8/c1-3-5-4-2/h3-4H,1-2H3/t5-/m0/s1", SilentChemObjectBuilder.getInstance()); IAtomContainer container = parser.getAtomContainer(); Iterator<IStereoElement> ses = container.stereoElements().iterator(); Assert.assertThat(container, is(instanceOf(SilentChemObjectBuilder.getInstance().newAtomContainer().getClass()))); assertTrue(ses.hasNext()); IStereoElement se = ses.next(); assertThat(se, is(instanceOf(ExtendedTetrahedral.class))); ExtendedTetrahedral element = (ExtendedTetrahedral) se; assertThat(element.peripherals(), is(new IAtom[]{container.getAtom(5), container.getAtom(0), container.getAtom(1), container.getAtom(6)})); assertThat(element.focus(), is(container.getAtom(4))); assertThat(element.winding(), is(ITetrahedralChirality.Stereo.ANTI_CLOCKWISE)); }
/** * (S)-penta-2,3-diene */ @Test public void s_penta_2_3_diene() throws Exception { InChIToStructure parser = new InChIToStructure("InChI=1S/C5H8/c1-3-5-4-2/h3-4H,1-2H3/t5-/m1/s1", SilentChemObjectBuilder.getInstance()); IAtomContainer container = parser.getAtomContainer(); Iterator<IStereoElement> ses = container.stereoElements().iterator(); Assert.assertThat(container, is(instanceOf(SilentChemObjectBuilder.getInstance().newAtomContainer().getClass()))); assertTrue(ses.hasNext()); IStereoElement se = ses.next(); assertThat(se, is(instanceOf(ExtendedTetrahedral.class))); ExtendedTetrahedral element = (ExtendedTetrahedral) se; assertThat(element.peripherals(), is(new IAtom[]{container.getAtom(5), container.getAtom(0), container.getAtom(1), container.getAtom(6)})); assertThat(element.focus(), is(container.getAtom(4))); assertThat(element.winding(), is(ITetrahedralChirality.Stereo.CLOCKWISE)); }
@Test public void extendedTetrahedral_ccw() throws Exception { IAtomContainer ac = convert("CC=[C@]=CC"); Iterator<IStereoElement> elements = ac.stereoElements().iterator(); assertTrue(elements.hasNext()); IStereoElement element = elements.next(); assertThat(element, is(instanceOf(ExtendedTetrahedral.class))); ExtendedTetrahedral extendedTetrahedral = (ExtendedTetrahedral) element; assertThat(extendedTetrahedral.winding(), is(ANTI_CLOCKWISE)); assertThat(extendedTetrahedral.focus(), is(ac.getAtom(2))); assertThat(extendedTetrahedral.peripherals(), is(new IAtom[]{ac.getAtom(0), ac.getAtom(1), ac.getAtom(3), ac.getAtom(4)})); }
@Test public void extendedTetrahedral_cw() throws Exception { IAtomContainer ac = convert("CC=[C@@]=CC"); Iterator<IStereoElement> elements = ac.stereoElements().iterator(); assertTrue(elements.hasNext()); IStereoElement element = elements.next(); assertThat(element, is(instanceOf(ExtendedTetrahedral.class))); ExtendedTetrahedral extendedTetrahedral = (ExtendedTetrahedral) element; assertThat(extendedTetrahedral.winding(), is(CLOCKWISE)); assertThat(extendedTetrahedral.focus(), is(ac.getAtom(2))); assertThat(extendedTetrahedral.peripherals(), is(new IAtom[]{ac.getAtom(0), ac.getAtom(1), ac.getAtom(3), ac.getAtom(4)})); }
final IBond[] bonds = new IBond[4]; int p = parity(element.winding());
final IBond[] bonds = new IBond[4]; int p = parity(element.winding());
Stereo winding = extendedTetrahedral.winding();
Stereo winding = extendedTetrahedral.winding();
@Test public void createExtendedTetrahedralFrom3DCoordinates_cw() throws Exception { IAtomContainer m = new AtomContainer(7, 6, 0, 0); m.addAtom(atom("C", 3, 0.1925, -2.7911, 1.8739)); m.addAtom(atom("C", 0, -0.4383, -2.0366, 0.8166)); m.addAtom(atom("C", 0, 0.2349, -1.2464, 0.0943)); m.addAtom(atom("C", 0, 0.9377, -0.4327, -0.5715)); m.addAtom(atom("C", 3, 1.0851, 0.9388, -0.1444)); m.addAtom(atom("H", 0, 1.3810, -0.7495, -1.4012)); m.addAtom(atom("H", 0, -1.4096, -2.1383, 0.6392)); m.addBond(1, 0, IBond.Order.SINGLE); m.addBond(1, 2, IBond.Order.DOUBLE); m.addBond(2, 3, IBond.Order.DOUBLE); m.addBond(3, 4, IBond.Order.SINGLE); m.addBond(1, 6, IBond.Order.SINGLE); m.addBond(3, 5, IBond.Order.SINGLE); List<IStereoElement> stereos = StereoElementFactory.using3DCoordinates(m).createAll(); assertThat(stereos.size(), is(1)); assertThat(stereos.get(0), instanceOf(ExtendedTetrahedral.class)); ExtendedTetrahedral et = (ExtendedTetrahedral) stereos.get(0); assertThat(et.winding(), is(ITetrahedralChirality.Stereo.CLOCKWISE)); assertThat(et.peripherals(), is(new IAtom[]{m.getAtom(0), m.getAtom(6), m.getAtom(4), m.getAtom(5)})); assertThat(et.focus(), is(m.getAtom(2))); }
@Test public void createExtendedTetrahedralFrom3DCoordinates_ccw() throws Exception { IAtomContainer m = new AtomContainer(7, 6, 0, 0); m.addAtom(atom("C", 3, -1.4096, -2.1383, 0.6392)); m.addAtom(atom("C", 0, -0.4383, -2.0366, 0.8166)); m.addAtom(atom("C", 0, 0.2349, -1.2464, 0.0943)); m.addAtom(atom("C", 0, 0.9377, -0.4327, -0.5715)); m.addAtom(atom("C", 3, 1.0851, 0.9388, -0.1444)); m.addAtom(atom("H", 0, 1.3810, -0.7495, -1.4012)); m.addAtom(atom("H", 0, 0.1925, -2.7911, 1.8739)); m.addBond(1, 0, IBond.Order.SINGLE); m.addBond(1, 2, IBond.Order.DOUBLE); m.addBond(2, 3, IBond.Order.DOUBLE); m.addBond(3, 4, IBond.Order.SINGLE); m.addBond(1, 6, IBond.Order.SINGLE); m.addBond(3, 5, IBond.Order.SINGLE); List<IStereoElement> stereos = StereoElementFactory.using3DCoordinates(m).createAll(); assertThat(stereos.size(), is(1)); assertThat(stereos.get(0), instanceOf(ExtendedTetrahedral.class)); ExtendedTetrahedral et = (ExtendedTetrahedral) stereos.get(0); assertThat(et.winding(), is(ITetrahedralChirality.Stereo.ANTI_CLOCKWISE)); assertThat(et.peripherals(), is(new IAtom[]{m.getAtom(0), m.getAtom(6), m.getAtom(4), m.getAtom(5)})); assertThat(et.focus(), is(m.getAtom(2))); }
@Test public void createExtendedTetrahedralFrom2DCoordinatesImplicitHydrogens_cw() throws Exception { IAtomContainer m = new AtomContainer(7, 6, 0, 0); m.addAtom(atom("C", 3, -1.56d, 0.78d)); m.addAtom(atom("C", 1, -1.13d, 1.49d)); m.addAtom(atom("C", 0, -0.31d, 1.47d)); m.addAtom(atom("C", 1, 0.52d, 1.46d)); m.addAtom(atom("C", 3, 0.94d, 2.17d)); m.addBond(1, 0, IBond.Order.SINGLE, IBond.Stereo.UP); m.addBond(1, 2, IBond.Order.DOUBLE, IBond.Stereo.NONE); m.addBond(2, 3, IBond.Order.DOUBLE, IBond.Stereo.NONE); m.addBond(3, 4, IBond.Order.SINGLE); ExtendedTetrahedral et = StereoElementFactory.using2DCoordinates(m).createExtendedTetrahedral(2, Stereocenters.of(m)); assertThat(et.winding(), is(ITetrahedralChirality.Stereo.CLOCKWISE)); assertThat(et.peripherals(), is(new IAtom[]{m.getAtom(0), m.getAtom(1), m.getAtom(4), m.getAtom(3)})); assertThat(et.focus(), is(m.getAtom(2))); }
@Test public void createExtendedTetrahedralFrom2DCoordinatesImplicitHydrogens_ccw() throws Exception { IAtomContainer m = new AtomContainer(7, 6, 0, 0); m.addAtom(atom("C", 3, -1.56d, 0.78d)); m.addAtom(atom("C", 1, -1.13d, 1.49d)); m.addAtom(atom("C", 0, -0.31d, 1.47d)); m.addAtom(atom("C", 1, 0.52d, 1.46d)); m.addAtom(atom("C", 3, 0.94d, 2.17d)); m.addBond(1, 0, IBond.Order.SINGLE, IBond.Stereo.DOWN); m.addBond(1, 2, IBond.Order.DOUBLE, IBond.Stereo.NONE); m.addBond(2, 3, IBond.Order.DOUBLE, IBond.Stereo.NONE); m.addBond(3, 4, IBond.Order.SINGLE); ExtendedTetrahedral et = StereoElementFactory.using2DCoordinates(m).createExtendedTetrahedral(2, Stereocenters.of(m)); assertThat(et.winding(), is(ITetrahedralChirality.Stereo.ANTI_CLOCKWISE)); assertThat(et.peripherals(), is(new IAtom[]{m.getAtom(0), m.getAtom(1), m.getAtom(4), m.getAtom(3)})); assertThat(et.focus(), is(m.getAtom(2))); }
@Test public void createExtendedTetrahedralFrom2DCoordinates_cw() throws Exception { IAtomContainer m = new AtomContainer(7, 6, 0, 0); m.addAtom(atom("C", 3, -1.56d, 0.78d)); m.addAtom(atom("C", 0, -1.13d, 1.49d)); m.addAtom(atom("C", 0, -0.31d, 1.47d)); m.addAtom(atom("C", 0, 0.52d, 1.46d)); m.addAtom(atom("C", 3, 0.94d, 2.17d)); m.addAtom(atom("H", 0, 0.92d, 0.74d)); m.addAtom(atom("H", 0, -1.53d, 2.21d)); m.addBond(1, 0, IBond.Order.SINGLE, IBond.Stereo.UP); m.addBond(1, 2, IBond.Order.DOUBLE, IBond.Stereo.NONE); m.addBond(2, 3, IBond.Order.DOUBLE, IBond.Stereo.NONE); m.addBond(3, 4, IBond.Order.SINGLE); m.addBond(1, 6, IBond.Order.SINGLE, IBond.Stereo.DOWN); m.addBond(3, 5, IBond.Order.SINGLE); ExtendedTetrahedral et = StereoElementFactory.using2DCoordinates(m).createExtendedTetrahedral(2, Stereocenters.of(m)); assertThat(et.winding(), is(ITetrahedralChirality.Stereo.CLOCKWISE)); assertThat(et.peripherals(), is(new IAtom[]{m.getAtom(0), m.getAtom(6), m.getAtom(4), m.getAtom(5)})); assertThat(et.focus(), is(m.getAtom(2))); }
@Test public void createExtendedTetrahedralFrom2DCoordinates_ccw() throws Exception { IAtomContainer m = new AtomContainer(7, 6, 0, 0); m.addAtom(atom("C", 3, -1.56d, 0.78d)); m.addAtom(atom("C", 0, -1.13d, 1.49d)); m.addAtom(atom("C", 0, -0.31d, 1.47d)); m.addAtom(atom("C", 0, 0.52d, 1.46d)); m.addAtom(atom("C", 3, 0.94d, 2.17d)); m.addAtom(atom("H", 0, 0.92d, 0.74d)); m.addAtom(atom("H", 0, -1.53d, 2.21d)); m.addBond(1, 0, IBond.Order.SINGLE, IBond.Stereo.DOWN); m.addBond(1, 2, IBond.Order.DOUBLE, IBond.Stereo.NONE); m.addBond(2, 3, IBond.Order.DOUBLE, IBond.Stereo.NONE); m.addBond(3, 4, IBond.Order.SINGLE); m.addBond(1, 6, IBond.Order.SINGLE, IBond.Stereo.UP); m.addBond(3, 5, IBond.Order.SINGLE); ExtendedTetrahedral et = StereoElementFactory.using2DCoordinates(m).createExtendedTetrahedral(2, Stereocenters.of(m)); assertThat(et.winding(), is(ITetrahedralChirality.Stereo.ANTI_CLOCKWISE)); assertThat(et.peripherals(), is(new IAtom[]{m.getAtom(0), m.getAtom(6), m.getAtom(4), m.getAtom(5)})); assertThat(et.focus(), is(m.getAtom(2))); }