/** * {@inheritDoc} */ @Override public void setAtoms(IAtom[] atoms) { bond.setAtoms(atoms); }
/** * {@inheritDoc} */ @Override public void setAtoms(IAtom[] atoms) { bond.setAtoms(atoms); }
/** * Sets a wedge bond, because wedges are relative we may need to flip * the storage order on the bond. * * @param bond the bond * @param end the expected end atom (fat end of wedge) * @param style the wedge style */ private void setWedge(IBond bond, IAtom end, IBond.Stereo style) { if (!bond.getEnd().equals(end)) bond.setAtoms(new IAtom[]{bond.getEnd(), bond.getBegin()}); bond.setStereo(style); }
/** * Sets a wedge bond, because wedges are relative we may need to flip * the storage order on the bond. * * @param bond the bond * @param end the expected end atom (fat end of wedge) * @param style the wedge style */ private void setWedge(IBond bond, IAtom end, IBond.Stereo style) { if (!bond.getEnd().equals(end)) bond.setAtoms(new IAtom[]{bond.getEnd(), bond.getBegin()}); bond.setStereo(style); }
/** * {@inheritDoc} */ @Override public void addBond(int beg, int end, Order order, Stereo stereo) { IBond bond = getBuilder().newBond(); bond.setAtoms(new IAtom[]{getAtom(beg), getAtom(end)}); bond.setOrder(order); bond.setStereo(stereo); addBond(bond); }
/** * {@inheritDoc} */ @Override public void addBond(int beg, int end, Order order, Stereo stereo) { IBond bond = getBuilder().newBond(); bond.setAtoms(new IAtom[]{getAtom(beg), getAtom(end)}); bond.setOrder(order); bond.setStereo(stereo); addBond(bond); }
/** * {@inheritDoc} */ @Override public void addBond(int beg, int end, Order order, Stereo stereo) { IBond bond = getBuilder().newBond(); bond.setAtoms(new IAtom[]{getAtom(beg), getAtom(end)}); bond.setOrder(order); bond.setStereo(stereo); addBond(bond); }
/** * {@inheritDoc} */ @Override public void addBond(int beg, int end, Order order, Stereo stereo) { IBond bond = getBuilder().newBond(); bond.setAtoms(new IAtom[]{getAtom(beg), getAtom(end)}); bond.setOrder(order); bond.setStereo(stereo); addBond(bond); }
private static IAtomContainer permuteA(int[] p, IAtomContainer atomContainer) { IAtomContainer permutedContainer = null; try { permutedContainer = atomContainer.getBuilder().newInstance(IAtomContainer.class); for (int i = 0; i < p.length; i++) { IAtom atom = atomContainer.getAtom(p[i]); permutedContainer.addAtom(atom.clone()); } for (IBond bond : atomContainer.bonds()) { IBond clonedBond = bond.clone(); clonedBond.setAtoms(new IAtom[clonedBond.getAtomCount()]); int i = 0; for (IAtom atom : bond.atoms()) { int index = atomContainer.indexOf(atom); IAtom permutedAtom = permutedContainer.getAtom(p[index]); clonedBond.setAtom(permutedAtom, i++); } permutedContainer.addBond(clonedBond); } } catch (CloneNotSupportedException cne) { //? out.println(cne); } return permutedContainer; }
private static IAtomContainer permuteA(int[] p, IAtomContainer atomContainer) { IAtomContainer permutedContainer = null; try { permutedContainer = atomContainer.getBuilder().newInstance(IAtomContainer.class); for (int i = 0; i < p.length; i++) { IAtom atom = atomContainer.getAtom(p[i]); permutedContainer.addAtom((IAtom) atom.clone()); } for (IBond bond : atomContainer.bonds()) { IBond clonedBond = (IBond) bond.clone(); clonedBond.setAtoms(new IAtom[clonedBond.getAtomCount()]); int i = 0; for (IAtom atom : bond.atoms()) { int index = atomContainer.indexOf(atom); IAtom permutedAtom = permutedContainer.getAtom(p[index]); clonedBond.setAtom(permutedAtom, i++); } permutedContainer.addBond(clonedBond); } } catch (CloneNotSupportedException cne) { //? System.out.println(cne); } return permutedContainer; }
@Test public void setConnectedAtomsAfterAddBond() { IAtomContainer mol = (IAtomContainer) newChemObject(); IAtom a1 = mol.getBuilder().newAtom(); IAtom a2 = mol.getBuilder().newAtom(); IBond b1 = mol.getBuilder().newBond(); mol.addAtom(a1); mol.addAtom(a2); mol.addBond(b1); // can't call on b1! mol.getBond(0).setAtoms(new IAtom[]{a1, a2}); assertThat(mol.getConnectedBondsCount(a1), is(1)); assertThat(mol.getConnectedBondsCount(a2), is(1)); }
@Test public void preserveAdjacencyOnSetAtoms() { IAtomContainer mol = (IAtomContainer) newChemObject(); IAtom a1 = mol.getBuilder().newAtom(); IAtom a2 = mol.getBuilder().newAtom(); IAtom a3 = mol.getBuilder().newAtom(); IAtom a4 = mol.getBuilder().newAtom(); IBond b1 = mol.getBuilder().newBond(); IBond b2 = mol.getBuilder().newBond(); IBond b3 = mol.getBuilder().newBond(); b1.setAtoms(new IAtom[]{a1, a2}); b2.setAtoms(new IAtom[]{a2, a3}); b3.setAtoms(new IAtom[]{a3, a4}); mol.addAtom(a1); mol.addAtom(a2); mol.addAtom(a3); mol.addAtom(a4); mol.addBond(b1); mol.addBond(b2); mol.addBond(b3); assertThat(mol.getConnectedBondsCount(a1), is(1)); assertThat(mol.getConnectedBondsCount(a2), is(2)); assertThat(mol.getConnectedBondsCount(a3), is(2)); assertThat(mol.getConnectedBondsCount(a4), is(1)); mol.setAtoms(new IAtom[]{a3, a4, a2, a1}); assertThat(mol.getConnectedBondsCount(a1), is(1)); assertThat(mol.getConnectedBondsCount(a2), is(2)); assertThat(mol.getConnectedBondsCount(a3), is(2)); assertThat(mol.getConnectedBondsCount(a4), is(1)); }
@Test public void changeConnectedAtomsAfterAddBond() { IAtomContainer mol = (IAtomContainer) newChemObject(); IAtom a1 = mol.getBuilder().newAtom(); IAtom a2 = mol.getBuilder().newAtom(); IAtom a3 = mol.getBuilder().newAtom(); IBond b1 = mol.getBuilder().newBond(); mol.addAtom(a1); mol.addAtom(a2); mol.addAtom(a3); b1.setAtoms(new IAtom[]{a1, a2}); mol.addBond(b1); assertThat(mol.getConnectedBondsCount(a1), is(1)); assertThat(mol.getConnectedBondsCount(a2), is(1)); assertThat(mol.getConnectedBondsCount(a3), is(0)); mol.getBond(0).setAtom(a3, 0); assertThat(mol.getConnectedBondsCount(a1), is(0)); assertThat(mol.getConnectedBondsCount(a2), is(1)); assertThat(mol.getConnectedBondsCount(a3), is(1)); mol.getBond(0).setAtom(a1, 1); assertThat(mol.getConnectedBondsCount(a1), is(1)); assertThat(mol.getConnectedBondsCount(a2), is(0)); assertThat(mol.getConnectedBondsCount(a3), is(1)); }
/**{@inheritDoc} */ @Override IDoubleBondStereochemistry createGeometric(int u, int v, Stereocenters stereocenters) { if (hasUnspecifiedParity(container.getAtom(u)) || hasUnspecifiedParity(container.getAtom(v))) return null; int[] us = graph[u]; int[] vs = graph[v]; int x = us[0] == v ? us[1] : us[0]; int w = vs[0] == u ? vs[1] : vs[0]; IAtom uAtom = container.getAtom(u); IAtom vAtom = container.getAtom(v); IAtom uSubstituentAtom = container.getAtom(x); IAtom vSubstituentAtom = container.getAtom(w); if (uAtom.getPoint3d() == null || vAtom.getPoint3d() == null || uSubstituentAtom.getPoint3d() == null || vSubstituentAtom.getPoint3d() == null) return null; int parity = parity(uAtom.getPoint3d(), vAtom.getPoint3d(), uSubstituentAtom.getPoint3d(), vSubstituentAtom.getPoint3d()); Conformation conformation = parity > 0 ? Conformation.OPPOSITE : Conformation.TOGETHER; IBond bond = bondMap.get(u, v); bond.setAtoms(new IAtom[]{uAtom, vAtom}); return new DoubleBondStereochemistry(bond, new IBond[]{bondMap.get(u, x), bondMap.get(v, w),}, conformation); }
@Test public void testSetAtoms_arrayIAtom() { IBond b = (IBond) newChemObject(); IAtom[] atomsToAdd = new IAtom[2]; atomsToAdd[0] = b.getBuilder().newInstance(IAtom.class, "C"); atomsToAdd[1] = b.getBuilder().newInstance(IAtom.class, "O"); b.setAtoms(atomsToAdd); Assert.assertEquals(2, b.getAtomCount()); Assert.assertEquals(atomsToAdd[0], b.getBegin()); Assert.assertEquals(atomsToAdd[1], b.getEnd()); }
@Test public void testSetAtomUpdatesBonds() { IAtomContainer container = (IAtomContainer) newChemObject(); IAtom a1 = container.getBuilder().newAtom(); IAtom a2 = container.getBuilder().newAtom(); IAtom a3 = container.getBuilder().newAtom(); IBond b1 = container.getBuilder().newBond(); IBond b2 = container.getBuilder().newBond(); a1.setSymbol("C"); a2.setSymbol("C"); a2.setSymbol("O"); b1.setOrder(IBond.Order.SINGLE); b1.setAtoms(new IAtom[]{a1, a2}); b2.setOrder(IBond.Order.SINGLE); b2.setAtoms(new IAtom[]{a2, a3}); container.addAtom(a1); container.addAtom(a2); container.addAtom(a3); container.addBond(b1); container.addBond(b2); IAtom a4 = container.getBuilder().newAtom(); container.setAtom(2, a4); assertThat(b2.getEnd(), is(a4)); }
@Test public void testSetAtomUpdatesSingleElectron() { IAtomContainer container = (IAtomContainer) newChemObject(); IChemObjectBuilder bldr = container.getBuilder(); IAtom a1 = bldr.newAtom(); IAtom a2 = bldr.newAtom(); IAtom a3 = bldr.newAtom(); IBond b1 = bldr.newBond(); IBond b2 = bldr.newBond(); a1.setSymbol("C"); a2.setSymbol("C"); a2.setSymbol("O"); b1.setOrder(IBond.Order.SINGLE); b1.setAtoms(new IAtom[]{a1, a2}); b2.setOrder(IBond.Order.SINGLE); b2.setAtoms(new IAtom[]{a2, a3}); container.addAtom(a1); container.addAtom(a2); container.addAtom(a3); container.addBond(b1); container.addBond(b2); ISingleElectron se = bldr.newInstance(ISingleElectron.class); se.setAtom(a3); container.addSingleElectron(se); IAtom a4 = bldr.newAtom(); container.setAtom(2, a4); assertThat(se.getAtom(), is(a4)); }
bond.setAtoms(new IAtom[]{container.getAtom(u), container.getAtom(v)});
@Test public void testGetConnectedAtoms_IAtom() { IBond b = (IBond) newChemObject(); IAtom[] atoms = new IAtom[3]; atoms[0] = b.getBuilder().newInstance(IAtom.class, "B"); atoms[1] = b.getBuilder().newInstance(IAtom.class, "H"); atoms[2] = b.getBuilder().newInstance(IAtom.class, "B"); b.setAtoms(atoms); b.setOrder(IBond.Order.SINGLE); // C=O bond IAtom[] connectedAtoms = b.getConnectedAtoms(atoms[1]); Assert.assertNotNull(connectedAtoms); Assert.assertEquals(2, connectedAtoms.length); Assert.assertNotNull(connectedAtoms[0]); Assert.assertNotNull(connectedAtoms[1]); // test default return value connectedAtoms = b.getConnectedAtoms(b.getBuilder().newInstance(IAtom.class)); Assert.assertNull(connectedAtoms); }