/** * Convenience method that perceives atom types (CDK scheme) and * adds explicit hydrogens accordingly. It does not create 2D or 3D * coordinates for the new hydrogens. * * @param container to which explicit hydrogens are added. */ protected void addExplicitHydrogens(IAtomContainer container) throws Exception { addImplicitHydrogens(container); AtomContainerManipulator.convertImplicitToExplicitHydrogens(container); }
protected void computeFingerprintsWithExplicitHydrogens() { AtomContainerManipulator.convertImplicitToExplicitHydrogens(molecule); cdkAromaticBonds = null; implicit = false; for (int k=0; k < fingerprints.length; ++k) { if (cdkFingerprintVersion.getFingerprintTypeAt(k).requiresExplicitHydrogens) computeFp(k, cdkFingerprintVersion.getFingerprintTypeAt(k)); } }
private IAtomContainer loadSmi(String smi) throws InvalidSmilesException { IAtomContainer mol = smipar.parseSmiles(smi); AtomContainerManipulator.convertImplicitToExplicitHydrogens(mol); return mol; }
void test(IAtomContainer container, Stereocenters.Type type, String mesg, boolean hnorm) { assertThat(mesg, Stereocenters.of(container).elementType(0), is(type)); if (hnorm) { AtomContainerManipulator.convertImplicitToExplicitHydrogens(container); assertThat(mesg + " (unsupressed hydrogens)", Stereocenters.of(container).elementType(0), is(type)); } }
static public IAtomContainer prepareMolecule(IAtomContainer molecule) throws CDKException { if(!ConnectivityChecker.isConnected(molecule)){ throw new CDKException("The structure is not fully connected"); } AtomContainerManipulator.percieveAtomTypesAndConfigureAtoms(molecule); CDKHueckelAromaticityDetector.detectAromaticity(molecule); CDKHydrogenAdder hydrogenator = CDKHydrogenAdder.getInstance(molecule.getBuilder()); hydrogenator.addImplicitHydrogens(molecule); AtomContainerManipulator.convertImplicitToExplicitHydrogens(molecule); return molecule; }
private void addExplicitHydrogens(IAtomContainer container) { try { CDKAtomTypeMatcher matcher = CDKAtomTypeMatcher.getInstance(container.getBuilder()); for (IAtom atom : container.atoms()) { IAtomType type = matcher.findMatchingAtomType(container, atom); AtomTypeManipulator.configure(atom, type); } CDKHydrogenAdder hAdder = CDKHydrogenAdder.getInstance(container.getBuilder()); hAdder.addImplicitHydrogens(container); AtomContainerManipulator.convertImplicitToExplicitHydrogens(container); } catch (Exception ex1) { logger.debug("Error in hydrogen addition"); } }
@Test public void convertExplicitHydrogen_chiralCarbon() throws Exception { SmilesParser smipar = new SmilesParser(SilentChemObjectBuilder.getInstance()); IAtomContainer m = smipar.parseSmiles("C[C@H](CC)O"); AtomContainerManipulator.convertImplicitToExplicitHydrogens(m); assertThat(SmilesGenerator.isomeric().create(m), is("C([C@](C(C([H])([H])[H])([H])[H])(O[H])[H])([H])([H])[H]")); }
@Test public void convertExplicitHydrogen_sulfoxide() throws Exception { SmilesParser smipar = new SmilesParser(SilentChemObjectBuilder.getInstance()); IAtomContainer m = smipar.parseSmiles("[S@](=O)(C)CC"); AtomContainerManipulator.convertImplicitToExplicitHydrogens(m); assertThat(SmilesGenerator.isomeric().create(m), is("[S@](=O)(C([H])([H])[H])C(C([H])([H])[H])([H])[H]")); }
@Test public void testBenzeneFromSmiles() throws Exception { SmilesParser sp = new SmilesParser(DefaultChemObjectBuilder.getInstance()); mol = sp.parseSmiles("C1=CC=CC=C1"); AtomContainerManipulator.percieveAtomTypesAndConfigureAtoms(mol); Aromaticity.cdkLegacy().apply(mol); AtomContainerManipulator.convertImplicitToExplicitHydrogens(mol); matcher.setRingSet(getRings()); Iterator<IAtom> atoms = mol.atoms().iterator(); while (atoms.hasNext()) { IAtom atom = atoms.next(); if (atom.getSymbol().equals("C")) { Assert.assertTrue(testAtom("SaaCH", atom)); } } }
private static IAtomContainer parseSmiles(String smiles) throws CDKException { parser = new SmilesParser(SilentChemObjectBuilder.getInstance()); IAtomContainer molecule = parser.parseSmiles(smiles); AtomContainerManipulator.percieveAtomTypesAndConfigureUnsetProperties(molecule); AtomContainerManipulator.convertImplicitToExplicitHydrogens(molecule); Aromaticity.cdkLegacy().apply(molecule); return molecule; }
private static IAtomContainer parseSmiles(String smiles) throws CDKException { parser = new SmilesParser(SilentChemObjectBuilder.getInstance()); IAtomContainer molecule = parser.parseSmiles(smiles); AtomContainerManipulator.percieveAtomTypesAndConfigureUnsetProperties(molecule); AtomContainerManipulator.convertImplicitToExplicitHydrogens(molecule); Aromaticity.cdkLegacy().apply(molecule); return molecule; }
@Override public DescriptorValue calculate(IAtomContainer container) { IAtomContainer struct; try { struct = (IAtomContainer) container.clone(); AtomContainerManipulator.percieveAtomTypesAndConfigureUnsetProperties(struct); CDKHydrogenAdder hAdder = CDKHydrogenAdder.getInstance(struct.getBuilder()); hAdder.addImplicitHydrogens(struct); AtomContainerManipulator.convertImplicitToExplicitHydrogens(struct); Aromaticity.cdkLegacy().apply(struct); } catch (CloneNotSupportedException e) { return getDummyDescriptorValue(e); } catch (CDKException e) { return getDummyDescriptorValue(e); } return new DescriptorValue(getSpecification(), getParameterNames(), getParameters(), new DoubleResult(jplogp.calcLogP(struct)), getDescriptorNames()); }
@Test public void testGetFingerprintAsBytes() throws CDKException { IAtomContainer mol = parser.parseSmiles("C=C(C1=CC=C(C=C1)O)NNC2=C(C(=NC(=C2Cl)Cl)C(=O)O)Cl"); AtomContainerManipulator.percieveAtomTypesAndConfigureAtoms(mol); CDKHydrogenAdder adder = CDKHydrogenAdder.getInstance(mol.getBuilder()); adder.addImplicitHydrogens(mol); AtomContainerManipulator.convertImplicitToExplicitHydrogens(mol); Aromaticity.cdkLegacy().apply(mol); PubchemFingerprinter printer = new PubchemFingerprinter(mol.getBuilder()); BitSet fp = printer.getBitFingerprint(mol).asBitSet(); byte[] actual = printer.getFingerprintAsBytes(); byte[] expected = Arrays.copyOf(toByteArray(fp), actual.length); Assert.assertArrayEquals(expected, actual); }
/** * @cdk.bug 2449257 */ @Test public void testEthaneExplicitH() throws Exception { IAtomContainer container = makeEthane(); AtomContainerManipulator.percieveAtomTypesAndConfigureAtoms(container); CDKHydrogenAdder adder = CDKHydrogenAdder.getInstance(container.getBuilder()); adder.addImplicitHydrogens(container); AtomContainerManipulator.convertImplicitToExplicitHydrogens(container); IMolecularDescriptor descriptor = new RotatableBondsCountDescriptor(); descriptor.setParameters(new Object[]{false, false}); DescriptorValue result = descriptor.calculate(container); Assert.assertEquals(0, ((IntegerResult) result.getValue()).intValue()); }
/** * @cdk.bug 2449257 */ @Test public void testEthaneIncludeTerminalsExplicitH() throws Exception { IAtomContainer container = makeEthane(); AtomContainerManipulator.percieveAtomTypesAndConfigureAtoms(container); CDKHydrogenAdder adder = CDKHydrogenAdder.getInstance(container.getBuilder()); adder.addImplicitHydrogens(container); AtomContainerManipulator.convertImplicitToExplicitHydrogens(container); IMolecularDescriptor descriptor = new RotatableBondsCountDescriptor(); descriptor.setParameters(new Object[]{true, false}); DescriptorValue result = descriptor.calculate(container); Assert.assertEquals(1, ((IntegerResult) result.getValue()).intValue()); }
/** * @cdk.bug 2449257 */ @Test public void testButaneIncludeTerminalsExplicitH() throws Exception { IAtomContainer container = makeButane(); AtomContainerManipulator.percieveAtomTypesAndConfigureAtoms(container); CDKHydrogenAdder adder = CDKHydrogenAdder.getInstance(container.getBuilder()); adder.addImplicitHydrogens(container); AtomContainerManipulator.convertImplicitToExplicitHydrogens(container); IMolecularDescriptor descriptor = new RotatableBondsCountDescriptor(); descriptor.setParameters(new Object[]{true, false}); DescriptorValue result = descriptor.calculate(container); Assert.assertEquals(3, ((IntegerResult) result.getValue()).intValue()); }
/** * @cdk.bug 2449257 */ @Test public void testButaneExplicitH() throws Exception { IAtomContainer container = makeButane(); AtomContainerManipulator.percieveAtomTypesAndConfigureAtoms(container); CDKHydrogenAdder adder = CDKHydrogenAdder.getInstance(container.getBuilder()); adder.addImplicitHydrogens(container); AtomContainerManipulator.convertImplicitToExplicitHydrogens(container); IMolecularDescriptor descriptor = new RotatableBondsCountDescriptor(); descriptor.setParameters(new Object[]{false, false}); DescriptorValue result = descriptor.calculate(container); Assert.assertEquals(1, ((IntegerResult) result.getValue()).intValue()); }
@Test public void testBenzene() throws CDKException { IAtomContainer mol = parser.parseSmiles("c1ccccc1"); AtomContainerManipulator.percieveAtomTypesAndConfigureAtoms(mol); CDKHydrogenAdder adder = CDKHydrogenAdder.getInstance(mol.getBuilder()); adder.addImplicitHydrogens(mol); AtomContainerManipulator.convertImplicitToExplicitHydrogens(mol); Aromaticity.cdkLegacy().apply(mol); IFingerprinter printer = new PubchemFingerprinter(DefaultChemObjectBuilder.getInstance()); BitSet fp = printer.getBitFingerprint(mol).asBitSet(); BitSet ref = PubchemFingerprinter .decode("AAADcYBgAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAABAAAAGAAAAAAACACAEAAwAIAAAACAACBCAAACAAAgAAAIiAAAAIgIICKAERCAIAAggAAIiAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="); Assert.assertEquals(ref, fp); }
@Test public void testConvertImplicitToExplicitHydrogens_IAtomContainer() throws Exception { IAtomContainer mol = new AtomContainer(); // ethene mol.addAtom(new Atom("C")); mol.getAtom(0).setImplicitHydrogenCount(2); mol.addAtom(new Atom("C")); mol.getAtom(1).setImplicitHydrogenCount(2); mol.addBond(0, 1, Order.DOUBLE); Assert.assertEquals(2, mol.getAtomCount()); Assert.assertEquals(1, mol.getBondCount()); AtomContainerManipulator.convertImplicitToExplicitHydrogens(mol); Assert.assertEquals(6, mol.getAtomCount()); Assert.assertEquals(5, mol.getBondCount()); }
@Test public void testConvertImplicitToExplicitHydrogens_IAtomContainer2() throws Exception { IAtomContainer mol = new AtomContainer(); // ethane mol.addAtom(new Atom("C")); mol.addAtom(new Atom("C")); mol.getAtom(0).setImplicitHydrogenCount(3); mol.getAtom(1).setImplicitHydrogenCount(3); mol.addBond(0, 1, Order.SINGLE); Assert.assertEquals(2, mol.getAtomCount()); Assert.assertEquals(1, mol.getBondCount()); AtomContainerManipulator.convertImplicitToExplicitHydrogens(mol); Assert.assertEquals(8, mol.getAtomCount()); Assert.assertEquals(7, mol.getBondCount()); }