/** * Constructs an empty, forward reaction. */ public Reaction() { this.reactants = getBuilder().newInstance(IAtomContainerSet.class); this.products = getBuilder().newInstance(IAtomContainerSet.class); this.agents = getBuilder().newInstance(IAtomContainerSet.class); this.map = new Mapping[growArraySize]; mappingCount = 0; reactionDirection = IReaction.Direction.FORWARD; }
@Test public void writeMoreThan8Radicals() throws Exception { IAtomContainer mol = builder.newAtomContainer(); for (int i = 0; i < 20; i++) { IAtom atom = builder.newAtom(); atom.setSymbol("C"); mol.addAtom(atom); mol.addSingleElectron(builder.newInstance(ISingleElectron.class, atom)); } StringWriter sw = new StringWriter(); try (MDLV2000Writer mdlw = new MDLV2000Writer(sw)) { mdlw.write(mol); } assertThat(sw.toString(), containsString("M RAD 8 9 2 10 2 11 2 12 2 13 2 14 2 15 2 16 2")); }
/** * Unit test ensures an exception is thrown if more the two elements are * passed to the constructor. When IDoubleBondStereoChemistry.getBonds() * is invoked the fixed size array is copied to an array of size 2. If * more then 2 bonds are given they would be truncated. * * @cdk.bug 1273 */ @Test(expected = IllegalArgumentException.class) public void testConstructor_TooManyBonds() { IChemObjectBuilder builder = DefaultChemObjectBuilder.getInstance(); IBond b1 = builder.newBond(); IBond b2 = builder.newBond(); IBond b3 = builder.newBond(); new DoubleBondStereochemistry(builder.newInstance(IBond.class), new IBond[]{b1,b2,b3}, Conformation.OPPOSITE); }
@Test public void writeCarbon13AtomProps() throws Exception { IAtomContainer mol = builder.newAtomContainer(); IAtom atom = builder.newAtom(); atom.setSymbol("C"); atom.setMassNumber(13); mol.addAtom(atom); StringWriter sw = new StringWriter(); try (MDLV2000Writer mdlw = new MDLV2000Writer(sw)) { mdlw.write(mol); } assertThat(sw.toString(), containsString("C 1")); }
@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)); }
@Test public void radicalCanon() throws Exception { IChemObjectBuilder builder = SilentChemObjectBuilder.getInstance(); IAtomContainer mola = builder.newAtomContainer(); mola.addAtom(builder.newInstance(IAtom.class, "CH3")); mola.addAtom(builder.newInstance(IAtom.class, "CH2")); mola.addAtom(builder.newInstance(IAtom.class, "CH2")); mola.addAtom(builder.newInstance(IAtom.class, "CH2")); mola.addAtom(builder.newInstance(IAtom.class, "CH2")); mola.addAtom(builder.newInstance(IAtom.class, "CH1")); mola.addAtom(builder.newInstance(IAtom.class, "CH3")); mola.addBond(1, 2, IBond.Order.SINGLE); mola.addBond(2, 3, IBond.Order.SINGLE); mola.addBond(3, 4, IBond.Order.SINGLE); mola.addBond(4, 5, IBond.Order.SINGLE); mola.addBond(5, 6, IBond.Order.SINGLE); mola.addBond(0, 5, IBond.Order.SINGLE); mola.addSingleElectron(1); SmilesParser smipar = new SmilesParser(builder); IAtomContainer molb = smipar.parseSmiles("CC(CCC[CH2])C |^1:5|"); SmilesGenerator smigen = new SmilesGenerator(SmiFlavor.Canonical | SmiFlavor.CxRadical); assertThat(smigen.create(mola), is(smigen.create(molb))); } }
/** * Create a new empty atom container instance. * @return a new atom container instance */ private IAtomContainer emptyContainer() { return builder.newAtomContainer(); }
@Test public void testSetStereoElements_List() { IAtomContainer container = (IAtomContainer) newChemObject(); IAtom atom = container.getBuilder().newAtom(); IBond bond = container.getBuilder().newBond(); IAtom a1 = container.getBuilder().newAtom(); IAtom a2 = container.getBuilder().newAtom(); IAtom a3 = container.getBuilder().newAtom(); IAtom a4 = container.getBuilder().newAtom(); IBond b1 = container.getBuilder().newBond(); IBond b2 = container.getBuilder().newBond(); Assert.assertThat("empty container had stereo elements", container.stereoElements().iterator().hasNext(), is(false)); List<IStereoElement> dbElements = new ArrayList<IStereoElement>(); dbElements.add(new DoubleBondStereochemistry(bond, new IBond[]{b1, b2}, IDoubleBondStereochemistry.Conformation.TOGETHER)); container.setStereoElements(dbElements); Iterator<IStereoElement> first = container.stereoElements().iterator(); Assert.assertThat("container did not have stereo elements", first.hasNext(), is(true)); Assert.assertThat("expected element to equal set element (double bond)", first.next(), is(dbElements.get(0))); Assert.assertThat("container had more then one stereo element", first.hasNext(), is(false)); List<IStereoElement> tetrahedralElements = new ArrayList<IStereoElement>(); tetrahedralElements.add(new TetrahedralChirality(atom, new IAtom[]{a1, a2, a3, a4}, ITetrahedralChirality.Stereo.CLOCKWISE)); container.setStereoElements(tetrahedralElements); Iterator<IStereoElement> second = container.stereoElements().iterator(); Assert.assertThat("container did not have stereo elements", second.hasNext(), is(true)); Assert.assertThat("expected element to equal set element (tetrahedral)", second.next(), is(tetrahedralElements.get(0))); Assert.assertThat("container had more then one stereo element", second.hasNext(), is(false)); }
/** * Create a new atom for the provided symbol. The atom is created by cloning * an existing 'template'. Unfortunately IChemObjectBuilders really show a * slow down when SMILES processing. * * @param element Beam element * @return new atom with configured symbol and atomic number */ private IAtom createAtom(Element element) { IAtom atom = builder.newAtom(); atom.setSymbol(element.symbol()); atom.setAtomicNumber(element.atomicNumber()); return atom; } }
/** * {@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); }
/** * Implementation of the startElement() procedure overwriting the * DefaultHandler interface. * * @param uri the Universal Resource Identifier * @param local the local name (without namespace part) * @param raw the complete element name (with namespace part) * @param atts the attributes of this element */ @Override public void startElement(String uri, String local, String raw, Attributes atts) { currentChars = ""; logger.debug("startElement: ", raw); logger.debug("uri: ", uri); logger.debug("local: ", local); logger.debug("raw: ", raw); if ("INChI".equals(local)) { // check version for (int i = 0; i < atts.getLength(); i++) { if (atts.getQName(i).equals("version")) logger.info("INChI version: ", atts.getValue(i)); } } else if ("structure".equals(local)) { tautomer = builder.newAtomContainer(); } else { // skip all other elements } }
@Test public void writeCarbon12() throws Exception { IAtomContainer mol = builder.newAtomContainer(); IAtom atom = builder.newAtom(); atom.setSymbol("C"); atom.setMassNumber(12); mol.addAtom(atom); StringWriter sw = new StringWriter(); try (MDLV2000Writer mdlw = new MDLV2000Writer(sw)) { mdlw.write(mol); } assertThat(sw.toString(), containsString("M ISO 1 1 12")); }
@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(expected = NoSuchAtomException.class) public void testGetMinBondOrderNoSuchAtom() { IAtomContainer container = (IAtomContainer) newChemObject(); IChemObjectBuilder builder = container.getBuilder(); IAtom a1 = builder.newAtom(); IAtom a2 = builder.newAtom(); container.addAtom(a1); assertThat(container.getMinimumBondOrder(a2), is(IBond.Order.UNSET)); }
/** * {@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); }
@Override public void startDocument() { super.startDocument(); // cdo.startObject("Frame"); currentChemModel = currentChemFile.getBuilder().newInstance(IChemModel.class); }
private static IAtomContainer newAtomContainer() { return DefaultChemObjectBuilder.getInstance().newAtomContainer(); }
@Test public void writeChargeAtomProps() throws Exception { IAtomContainer mol = builder.newAtomContainer(); IAtom atom = builder.newAtom(); atom.setSymbol("C"); atom.setFormalCharge(+1); mol.addAtom(atom); StringWriter sw = new StringWriter(); try (MDLV2000Writer mdlw = new MDLV2000Writer(sw)) { mdlw.write(mol); } assertThat(sw.toString(), containsString("C 0 3")); }
@Test public void getSelfBond() { IAtomContainer mol = (IAtomContainer) newChemObject(); IAtom a1 = mol.getBuilder().newAtom(); IAtom a2 = mol.getBuilder().newAtom(); IAtom a3 = mol.getBuilder().newAtom(); IBond b1 = mol.getBuilder().newBond(); IBond b2 = mol.getBuilder().newBond(); b1.setAtom(a1, 0); b1.setAtom(a2, 1); b2.setAtom(a2, 0); b2.setAtom(a3, 1); mol.addAtom(a1); mol.addAtom(a2); mol.addAtom(a3); mol.addBond(b1); mol.addBond(b2); assertThat(mol.getBond(a1, a1), is(nullValue())); } }
@Test(expected = NoSuchAtomException.class) public void testGetMaxBondOrderNoSuchAtom() { IAtomContainer container = (IAtomContainer) newChemObject(); IChemObjectBuilder builder = container.getBuilder(); IAtom a1 = builder.newAtom(); IAtom a2 = builder.newAtom(); container.addAtom(a1); assertThat(container.getMaximumBondOrder(a2), is(IBond.Order.UNSET)); }