Search in sources :

Example 1 with AtomContainerSet

use of org.openscience.cdk.AtomContainerSet in project MetFragRelaunched by ipb-halle.

the class SDFDeuteriumGeneration method main.

public static void main(String[] args) throws Exception {
    boolean withAromaticRings = false;
    boolean combinatorial = true;
    /*
		 * read input inchis
		 */
    ArrayList<String> inchis = new ArrayList<String>();
    ArrayList<Integer> numberToAddDeuteriums = new ArrayList<Integer>();
    ArrayList<String> identifiers = new ArrayList<String>();
    BufferedReader breader = new BufferedReader(new FileReader(new File(args[0])));
    String line = "";
    int identifier = 1;
    while ((line = breader.readLine()) != null) {
        String[] tmp = line.trim().split("\\s+");
        inchis.add(tmp[0].trim());
        if (tmp.length >= 2)
            numberToAddDeuteriums.add(Integer.parseInt(tmp[1].trim()));
        if (tmp.length == 3)
            identifiers.add(tmp[2].trim());
        else
            identifiers.add(identifier + "");
        identifier++;
    }
    breader.close();
    /*
		 * generate deuterated version of inchi
		 */
    IAtomContainerSet set = new AtomContainerSet();
    SmilesGenerator sg = new SmilesGenerator(SmiFlavor.Generic);
    CDKHydrogenAdder adder = CDKHydrogenAdder.getInstance(DefaultChemObjectBuilder.getInstance());
    for (int j = 0; j < inchis.size(); j++) {
        /*
			 * build the inchi atom container
			 */
        IAtomContainer its = InChIGeneratorFactory.getInstance().getInChIToStructure(inchis.get(j), SilentChemObjectBuilder.getInstance()).getAtomContainer();
        AtomContainerManipulator.percieveAtomTypesAndConfigureAtoms(its);
        try {
            adder.addImplicitHydrogens(its);
        } catch (Exception e) {
            System.out.println("missed " + inchis.get(j) + " " + identifiers.get(j));
            continue;
        }
        AtomContainerManipulator.convertImplicitToExplicitHydrogens(its);
        int numberDeuteriums = 0;
        int numberDeuteriumsEasilyExchanged = 0;
        int numberDeuteriumsAromaticExchanged = 0;
        int[] toExchange = searchForDeuteriumExchangeablePositions(new String[] { "O", "N", "S" }, its);
        if (!combinatorial || (numberToAddDeuteriums.size() == 0 || toExchange.length <= numberToAddDeuteriums.get(j))) {
            for (int i = 0; i < toExchange.length; i++) {
                int numberExchanged = setAllExplicitDeuteriums(its, i);
                numberDeuteriums += numberExchanged;
                numberDeuteriumsEasilyExchanged += numberExchanged;
            }
        } else if (toExchange.length > numberToAddDeuteriums.get(j)) {
            ArrayList<IAtomContainer> deuteratedStrutures = new ArrayList<IAtomContainer>();
            ArrayList<Integer> numberDeuteriumsVec = new ArrayList<Integer>();
            ArrayList<Integer> numberDeuteriumsEasilyExchangedVec = new ArrayList<Integer>();
            // get all possible combinations of exchanges with given number
            // of exchangeable hydrogens
            int[][] combs = getCombinations(toExchange, numberToAddDeuteriums.get(j));
            for (int k = 0; k < combs.length; k++) {
                numberDeuteriumsEasilyExchanged = 0;
                numberDeuteriums = 0;
                IAtomContainer itsNew = InChIGeneratorFactory.getInstance().getInChIToStructure(inchis.get(j), SilentChemObjectBuilder.getInstance()).getAtomContainer();
                AtomContainerManipulator.percieveAtomTypesAndConfigureAtoms(itsNew);
                adder.addImplicitHydrogens(itsNew);
                AtomContainerManipulator.convertImplicitToExplicitHydrogens(itsNew);
                for (int l = 0; l < combs[k].length; l++) {
                    addExplicitDeuterium(itsNew, combs[k][l]);
                    numberDeuteriumsEasilyExchanged++;
                    numberDeuteriums++;
                }
                numberDeuteriumsVec.add(numberDeuteriums);
                numberDeuteriumsEasilyExchangedVec.add(numberDeuteriumsEasilyExchanged);
                deuteratedStrutures.add(itsNew);
            }
            for (int k = 0; k < deuteratedStrutures.size(); k++) {
                String inchi = inchis.get(j);
                IAtomContainer con = deuteratedStrutures.get(k);
                HDByteMolecularFormula formula = null;
                try {
                    formula = new HDByteMolecularFormula(inchi.split("/")[1]);
                } catch (Exception e) {
                    System.err.println(identifiers.get(j));
                    e.printStackTrace();
                    System.exit(1);
                }
                formula.setNumberHydrogens((short) formula.getNumberHydrogens());
                formula.setNumberDeuterium((short) (int) numberDeuteriumsVec.get(k));
                InChIGenerator gen = InChIGeneratorFactory.getInstance().getInChIGenerator(con);
                String inchiKey = gen.getInchiKey();
                con.setProperty(VariableNames.IDENTIFIER_NAME, identifiers.get(j) + "-" + (k + 1));
                con.setProperty(VariableNames.INCHI_NAME, inchi);
                // con.setProperty(VariableNames.SMILES_NAME, sg.create(deuteratedStrutures.get(k)));
                con.setProperty(VariableNames.MOLECULAR_FORMULA_NAME, formula.toString());
                con.setProperty(VariableNames.MONOISOTOPIC_MASS_NAME, formula.getMonoisotopicMass());
                con.setProperty(VariableNames.INCHI_KEY_1_NAME, inchiKey.split("-")[0]);
                con.setProperty(VariableNames.INCHI_KEY_2_NAME, inchiKey.split("-")[1]);
                con.setProperty("OSN-Deuteriums", numberDeuteriumsEasilyExchangedVec.get(k));
                con.setProperty("AromaticDeuteriums", 0);
                con.setProperty("MissedDeuteriums", (toExchange.length - numberToAddDeuteriums.get(j)));
                set.addAtomContainer(con);
                System.out.println(identifiers.get(j) + "-" + (k + 1) + "|" + inchi + "|" + sg.create(deuteratedStrutures.get(k)) + "|" + formula.toString() + "|" + formula.getMonoisotopicMass() + "|" + inchiKey.split("-")[0] + "|" + inchiKey.split("-")[1] + "|" + numberDeuteriumsEasilyExchangedVec.get(k) + "|0|" + (toExchange.length - numberToAddDeuteriums.get(j)));
            }
            continue;
        }
        if (withAromaticRings || (numberToAddDeuteriums.size() != 0 && numberToAddDeuteriums.get(j) > numberDeuteriums)) {
            int numberMissing = numberToAddDeuteriums.get(j) - numberDeuteriums;
            numberDeuteriums += numberMissing;
            numberDeuteriumsAromaticExchanged += numberMissing;
        }
        String inchi = inchis.get(j);
        InChIGenerator gen = InChIGeneratorFactory.getInstance().getInChIGenerator(its);
        String inchiKey = gen.getInchiKey();
        HDByteMolecularFormula formula = null;
        try {
            formula = new HDByteMolecularFormula(inchi.split("/")[1]);
        } catch (Exception e) {
            System.err.println(identifiers.get(j));
            e.printStackTrace();
            System.exit(1);
        }
        formula.setNumberHydrogens((short) formula.getNumberHydrogens());
        formula.setNumberDeuterium((short) numberDeuteriums);
        if (numberToAddDeuteriums.size() == 0 || numberDeuteriums == numberToAddDeuteriums.get(j)) {
            System.out.println(identifiers.get(j) + "|" + inchi + "|" + sg.create(its) + "|" + formula.toString() + "|" + formula.getMonoisotopicMass() + "|" + inchiKey.split("-")[0] + "|" + inchiKey.split("-")[1] + "|" + numberDeuteriumsEasilyExchanged + "|" + numberDeuteriumsAromaticExchanged + "|0");
            its.setProperty(VariableNames.IDENTIFIER_NAME, identifiers.get(j));
            its.setProperty(VariableNames.INCHI_NAME, inchi);
            // its.setProperty(VariableNames.SMILES_NAME, sg.create(its));
            its.setProperty(VariableNames.MOLECULAR_FORMULA_NAME, formula.toString());
            its.setProperty(VariableNames.MONOISOTOPIC_MASS_NAME, formula.getMonoisotopicMass());
            its.setProperty(VariableNames.INCHI_KEY_1_NAME, inchiKey.split("-")[0]);
            its.setProperty(VariableNames.INCHI_KEY_2_NAME, inchiKey.split("-")[1]);
            its.setProperty("OSN-Deuteriums", numberDeuteriumsEasilyExchanged);
            its.setProperty("AromaticDeuteriums", numberDeuteriumsAromaticExchanged);
            its.setProperty("MissedDeuteriums", 0);
            set.addAtomContainer(its);
        } else if (!combinatorial)
            System.err.println("discarded to many easy exchangeable hydrogens " + numberDeuteriums + " " + identifiers.get(j));
    }
    try {
        SDFWriter writer = new SDFWriter(new java.io.FileWriter(new java.io.File(args[1])));
        writer.write(set);
        writer.close();
    } catch (java.io.IOException e) {
        e.printStackTrace();
    } catch (CDKException e) {
        e.printStackTrace();
    }
}
Also used : IAtomContainer(org.openscience.cdk.interfaces.IAtomContainer) ArrayList(java.util.ArrayList) SDFWriter(org.openscience.cdk.io.SDFWriter) SmilesGenerator(org.openscience.cdk.smiles.SmilesGenerator) FileReader(java.io.FileReader) InChIGenerator(org.openscience.cdk.inchi.InChIGenerator) CDKException(org.openscience.cdk.exception.CDKException) AtomContainerSet(org.openscience.cdk.AtomContainerSet) IAtomContainerSet(org.openscience.cdk.interfaces.IAtomContainerSet) CDKException(org.openscience.cdk.exception.CDKException) IAtomContainerSet(org.openscience.cdk.interfaces.IAtomContainerSet) BufferedReader(java.io.BufferedReader) CDKHydrogenAdder(org.openscience.cdk.tools.CDKHydrogenAdder) HDByteMolecularFormula(de.ipbhalle.metfraglib.molecularformula.HDByteMolecularFormula) File(java.io.File)

Example 2 with AtomContainerSet

use of org.openscience.cdk.AtomContainerSet in project MetFragRelaunched by ipb-halle.

the class FragmentListWriterSDF method writeSingleMatchList.

private boolean writeSingleMatchList(ICandidate candidate, MatchList matchList, String completeFilePath) {
    IAtomContainerSet set = new AtomContainerSet();
    for (int i = 0; i < matchList.getNumberElements(); i++) {
        IAtomContainer fragmentAtomContainer = matchList.getElement(i).getBestMatchedFragment().getStructureAsIAtomContainer(candidate.getPrecursorMolecule());
        fragmentAtomContainer.setProperty("MolecularFormula", matchList.getElement(i).getModifiedFormulaStringOfBestMatchedFragment(candidate.getPrecursorMolecule()).toString());
        String brokenBonds = "";
        int[] brokenBondIndeces = matchList.getElement(i).getBestMatchedFragment().getBrokenBondIndeces();
        String bondStrings = "";
        for (int index : brokenBondIndeces) {
            brokenBonds += index + ";";
            bondStrings += ((BitArrayPrecursor) candidate.getPrecursorMolecule()).getBondAsString((short) index) + ";";
        }
        if (bondStrings.length() != 0)
            bondStrings = bondStrings.substring(0, bondStrings.length() - 1);
        if (brokenBonds.length() != 0)
            brokenBonds = brokenBonds.substring(0, brokenBonds.length() - 1);
        fragmentAtomContainer.setProperty("BrokenBondsStrings", bondStrings);
        fragmentAtomContainer.setProperty("BrokenBonds", brokenBonds);
        fragmentAtomContainer.setProperty("Match", matchList.getElement(i).toString());
        set.addAtomContainer(fragmentAtomContainer);
    }
    try {
        SDFWriter sdfWriter = new SDFWriter(new FileWriter(new File(completeFilePath)));
        sdfWriter.write(set);
        sdfWriter.close();
        return true;
    } catch (IOException e) {
        e.printStackTrace();
        return false;
    } catch (CDKException e) {
        e.printStackTrace();
        return false;
    }
}
Also used : IAtomContainer(org.openscience.cdk.interfaces.IAtomContainer) CDKException(org.openscience.cdk.exception.CDKException) IAtomContainerSet(org.openscience.cdk.interfaces.IAtomContainerSet) FileWriter(java.io.FileWriter) SDFWriter(org.openscience.cdk.io.SDFWriter) IOException(java.io.IOException) File(java.io.File) AtomContainerSet(org.openscience.cdk.AtomContainerSet) IAtomContainerSet(org.openscience.cdk.interfaces.IAtomContainerSet) BitArrayPrecursor(de.ipbhalle.metfraglib.precursor.BitArrayPrecursor)

Example 3 with AtomContainerSet

use of org.openscience.cdk.AtomContainerSet in project MORTAR by FelixBaensch.

the class Importer method importSMILESFile.

// </editor-fold>
// 
// <editor-fold desc="protected methods" defaultstate="collapsed">
/**
 * Imports a SMILES file. This method is able to parse different types of SMILES files, e.g. with and without header
 * or with only one column or two (SMILES and name/ID, which is in which column is detected).
 * Protected and not private for testing in class ImporterTest.
 *
 * @param aFile a SMILES codes-containing *.txt or *.smi file
 * @return the imported molecules in an IAtomContainerSet
 * @throws IOException if the given file does not fit to the expected format of a SMILES file
 * @author Samuel Behr
 */
protected IAtomContainerSet importSMILESFile(File aFile) throws IOException {
    try (FileReader tmpSmilesFileReader = new FileReader(aFile);
        BufferedReader tmpSmilesFileBufferedReader = new BufferedReader(tmpSmilesFileReader, BasicDefinitions.BUFFER_SIZE)) {
        IAtomContainerSet tmpAtomContainerSet = new AtomContainerSet();
        // AtomContainer to save the parsed SMILES in
        IAtomContainer tmpMolecule = new AtomContainer();
        SmilesParser tmpSmilesParser = new SmilesParser(DefaultChemObjectBuilder.getInstance());
        String tmpSmilesFileNextLine = "";
        String tmpSmilesFileDeterminedSeparator = "";
        String[] tmpProcessedLineArray;
        int tmpSmilesCodeExpectedPosition = 0;
        int tmpIDExpectedPosition = 0;
        int tmpSmilesFileParsableLinesCounter = 0;
        int tmpSmilesFileInvalidLinesCounter = 0;
        // marking the BufferedReader to reset the reader after checking the format and determining the separator
        tmpSmilesFileBufferedReader.mark(BasicDefinitions.BUFFER_SIZE);
        // as potential headline the first line should be avoided for separator determination
        String tmpSmilesFileFirstLine = tmpSmilesFileBufferedReader.readLine();
        /*  first block
                Checking for parsable SMILES code and saving the determined separator (if one is used).
                If no parsable SMILES code is found in the second and third line of the file, tmpMolecule stays empty
                and the file is assumed to be no SMILES file -> return null
             */
        int tmpFilesLine = 2;
        findSeparatorLoop: while (!Thread.currentThread().isInterrupted() && tmpFilesLine <= 3) {
            if ((tmpSmilesFileNextLine = tmpSmilesFileBufferedReader.readLine()) == null) {
                // if the file's end is reached at this point, the first line is used to determine the separator
                if (tmpSmilesFileFirstLine != null || !tmpSmilesFileFirstLine.isEmpty()) {
                    tmpSmilesFileNextLine = tmpSmilesFileFirstLine;
                    tmpSmilesFileFirstLine = null;
                } else {
                    break;
                }
            }
            for (String tmpSeparator : BasicDefinitions.POSSIBLE_SMILES_FILE_SEPARATORS) {
                // maximum of two array elements expected, otherwise the separator or the line itself are assumed to be invalid
                tmpProcessedLineArray = tmpSmilesFileNextLine.split(tmpSeparator, 3);
                if (tmpProcessedLineArray.length > 2) {
                    continue;
                }
                int tmpIndex = 0;
                for (String tmpNextElementOfLine : tmpProcessedLineArray) {
                    if (tmpNextElementOfLine.isEmpty()) {
                        continue;
                    }
                    try {
                        tmpMolecule = tmpSmilesParser.parseSmiles(tmpNextElementOfLine);
                        if (!tmpMolecule.isEmpty()) {
                            tmpSmilesFileDeterminedSeparator = tmpSeparator;
                            tmpSmilesCodeExpectedPosition = tmpIndex;
                            if (tmpProcessedLineArray.length > 1) {
                                if (tmpSmilesCodeExpectedPosition == 0) {
                                    tmpIDExpectedPosition = 1;
                                } else {
                                    tmpIDExpectedPosition = 0;
                                }
                            }
                            break findSeparatorLoop;
                        }
                    } catch (InvalidSmilesException anException) {
                        tmpIndex++;
                    }
                }
            }
            tmpFilesLine++;
        }
        if (tmpMolecule.isEmpty()) {
            throw new IOException("Chosen file does not fit to the expected format of a SMILES file.");
        }
        // resetting the BufferedReader to the first line of the file
        tmpSmilesFileBufferedReader.reset();
        // to avoid the memory of unnecessary data
        tmpSmilesFileBufferedReader.mark(0);
        /*  second block
                Reading the file line by line and adding an AtomContainer to the AtomContainerSet for each line with parsable SMILES code
             */
        while (!Thread.currentThread().isInterrupted() && (tmpSmilesFileNextLine = tmpSmilesFileBufferedReader.readLine()) != null) {
            // trying to parse as SMILES code
            try {
                tmpProcessedLineArray = tmpSmilesFileNextLine.split(tmpSmilesFileDeterminedSeparator, 2);
                if (!tmpProcessedLineArray[tmpSmilesCodeExpectedPosition].isEmpty()) {
                    tmpMolecule = tmpSmilesParser.parseSmiles(tmpProcessedLineArray[tmpSmilesCodeExpectedPosition]);
                    tmpSmilesFileParsableLinesCounter++;
                } else {
                    tmpSmilesFileInvalidLinesCounter++;
                    continue;
                }
            } catch (InvalidSmilesException | IndexOutOfBoundsException anException) {
                // case: invalid line or SMILES code
                tmpSmilesFileInvalidLinesCounter++;
                continue;
            }
            // setting the name of the atom container
            String tmpName = "";
            if (tmpProcessedLineArray.length > 1 && !tmpProcessedLineArray[tmpIDExpectedPosition].isEmpty()) {
                tmpName = tmpProcessedLineArray[tmpIDExpectedPosition];
            } else {
                tmpName = FileUtil.getFileNameWithoutExtension(aFile) + tmpSmilesFileParsableLinesCounter;
            }
            tmpMolecule.setProperty(Importer.MOLECULE_NAME_PROPERTY_KEY, tmpName);
            // adding tmpMolecule to the AtomContainerSet
            tmpAtomContainerSet.addAtomContainer(tmpMolecule);
        }
        Importer.LOGGER.log(Level.INFO, "\tSmilesFile ParsableLinesCounter:\t" + tmpSmilesFileParsableLinesCounter + "\n\tSmilesFile InvalidLinesCounter:\t\t" + tmpSmilesFileInvalidLinesCounter);
        return tmpAtomContainerSet;
    }
}
Also used : SmilesParser(org.openscience.cdk.smiles.SmilesParser) IAtomContainer(org.openscience.cdk.interfaces.IAtomContainer) IOException(java.io.IOException) AtomContainerSet(org.openscience.cdk.AtomContainerSet) IAtomContainerSet(org.openscience.cdk.interfaces.IAtomContainerSet) IAtomContainer(org.openscience.cdk.interfaces.IAtomContainer) AtomContainer(org.openscience.cdk.AtomContainer) IAtomContainerSet(org.openscience.cdk.interfaces.IAtomContainerSet) BufferedReader(java.io.BufferedReader) FileReader(java.io.FileReader) InvalidSmilesException(org.openscience.cdk.exception.InvalidSmilesException)

Example 4 with AtomContainerSet

use of org.openscience.cdk.AtomContainerSet in project cdk by cdk.

the class AtomContainerSetManipulatorTest method testRemoveAtomAndConnectedElectronContainers_IAtomContainerSet_IAtom.

@Test
public void testRemoveAtomAndConnectedElectronContainers_IAtomContainerSet_IAtom() {
    IAtomContainerSet ms = new AtomContainerSet();
    IAtomContainer mol = new AtomContainer();
    mol.addAtom(new Atom("O"));
    mol.addAtom(new Atom("O"));
    mol.addBond(0, 1, IBond.Order.DOUBLE);
    IAtom atom = mol.getAtom(0);
    ms.addAtomContainer(mol);
    IAtom otherAtom = new Atom("O");
    AtomContainerSetManipulator.removeAtomAndConnectedElectronContainers(ms, otherAtom);
    Assert.assertEquals(1, AtomContainerSetManipulator.getBondCount(ms));
    Assert.assertEquals(2, AtomContainerSetManipulator.getAtomCount(ms));
    AtomContainerSetManipulator.removeAtomAndConnectedElectronContainers(ms, atom);
    Assert.assertEquals(0, AtomContainerSetManipulator.getBondCount(ms));
    Assert.assertEquals(1, AtomContainerSetManipulator.getAtomCount(ms));
}
Also used : IAtomContainer(org.openscience.cdk.interfaces.IAtomContainer) IAtomContainer(org.openscience.cdk.interfaces.IAtomContainer) AtomContainer(org.openscience.cdk.AtomContainer) IAtomContainerSet(org.openscience.cdk.interfaces.IAtomContainerSet) AtomContainerSet(org.openscience.cdk.AtomContainerSet) IAtomContainerSet(org.openscience.cdk.interfaces.IAtomContainerSet) Atom(org.openscience.cdk.Atom) IAtom(org.openscience.cdk.interfaces.IAtom) IAtom(org.openscience.cdk.interfaces.IAtom) Test(org.junit.Test)

Example 5 with AtomContainerSet

use of org.openscience.cdk.AtomContainerSet in project cdk by cdk.

the class AtomContainerSetManipulatorTest method testRemoveElectronContainer_IAtomContainerSet_IElectronContainer.

@Test
public void testRemoveElectronContainer_IAtomContainerSet_IElectronContainer() {
    IAtomContainerSet ms = new AtomContainerSet();
    IAtomContainer mol = new AtomContainer();
    mol.addAtom(new Atom("O"));
    mol.addAtom(new Atom("O"));
    mol.addBond(0, 1, IBond.Order.DOUBLE);
    IBond bond = mol.getBond(0);
    ms.addAtomContainer(mol);
    IBond otherBond = new Bond(new Atom(), new Atom());
    AtomContainerSetManipulator.removeElectronContainer(ms, otherBond);
    Assert.assertEquals(1, AtomContainerSetManipulator.getBondCount(ms));
    AtomContainerSetManipulator.removeElectronContainer(ms, bond);
    Assert.assertEquals(0, AtomContainerSetManipulator.getBondCount(ms));
}
Also used : IAtomContainer(org.openscience.cdk.interfaces.IAtomContainer) IAtomContainer(org.openscience.cdk.interfaces.IAtomContainer) AtomContainer(org.openscience.cdk.AtomContainer) IAtomContainerSet(org.openscience.cdk.interfaces.IAtomContainerSet) IBond(org.openscience.cdk.interfaces.IBond) Bond(org.openscience.cdk.Bond) IBond(org.openscience.cdk.interfaces.IBond) AtomContainerSet(org.openscience.cdk.AtomContainerSet) IAtomContainerSet(org.openscience.cdk.interfaces.IAtomContainerSet) Atom(org.openscience.cdk.Atom) IAtom(org.openscience.cdk.interfaces.IAtom) Test(org.junit.Test)

Aggregations

AtomContainerSet (org.openscience.cdk.AtomContainerSet)30 IAtomContainerSet (org.openscience.cdk.interfaces.IAtomContainerSet)30 IAtomContainer (org.openscience.cdk.interfaces.IAtomContainer)26 Test (org.junit.Test)18 AtomContainer (org.openscience.cdk.AtomContainer)16 IAtom (org.openscience.cdk.interfaces.IAtom)12 Atom (org.openscience.cdk.Atom)11 InputStream (java.io.InputStream)6 SimpleChemObjectReaderTest (org.openscience.cdk.test.io.SimpleChemObjectReaderTest)6 StringWriter (java.io.StringWriter)5 ChemObjectWriterTest (org.openscience.cdk.test.io.ChemObjectWriterTest)5 BufferedReader (java.io.BufferedReader)4 FileReader (java.io.FileReader)4 ArrayList (java.util.ArrayList)4 ChemModel (org.openscience.cdk.ChemModel)4 CDKException (org.openscience.cdk.exception.CDKException)4 SDFWriter (org.openscience.cdk.io.SDFWriter)4 IteratingSMILESReader (org.openscience.cdk.io.iterator.IteratingSMILESReader)4 File (java.io.File)3 FileInputStream (java.io.FileInputStream)3