Search in sources :

Example 1 with IFingerprinter

use of org.openscience.cdk.fingerprint.IFingerprinter in project ambit-mirror by ideaconsult.

the class Context method parseFingerprinterParams.

protected List<IFingerprinter> parseFingerprinterParams() {
    final List<IFingerprinter> fps = new ArrayList<IFingerprinter>();
    int fplen = 1024;
    int fptype = CircularFingerprinter.CLASS_ECFP6;
    try {
        Object o = options.getParam(":fplen");
        try {
            if (o != null)
                fplen = Integer.parseInt(o.toString());
        } catch (Exception x) {
        }
        o = options.getParam(":fptype");
        try {
            if (o != null)
                fptype = _fptype.valueOf(o.toString()).getCode();
        } catch (Exception x) {
        }
        o = options.getParam(":fpclass");
        if (o != null) {
            String[] fpclass = o.toString().split(",");
            Class clazz = null;
            for (String fp : fpclass) try {
                if (fp.indexOf(".") < 0)
                    fp = "org.openscience.cdk.fingerprint." + fp.trim();
                else
                    fp = fp.trim();
                clazz = Class.forName(fp);
                Object fingerprinter = null;
                if (clazz.equals(CircularFingerprinter.class)) {
                    fingerprinter = new CircularFingerprinter(fptype, fplen);
                } else {
                    fingerprinter = clazz.newInstance();
                }
                if (fingerprinter instanceof IFingerprinter)
                    fps.add((IFingerprinter) fingerprinter);
            } catch (Exception x) {
                if (clazz != null)
                    try {
                        Object fingerprinter = clazz.getDeclaredConstructor(IChemObjectBuilder.class).newInstance(SilentChemObjectBuilder.getInstance());
                        if (fingerprinter instanceof IFingerprinter)
                            fps.add((IFingerprinter) fingerprinter);
                    } catch (Exception xx) {
                        logger_cli.log(Level.SEVERE, "MSG_ERR_CLASS", new Object[] { fp, x.toString() });
                    }
            }
        }
    } catch (Exception x) {
    }
    if (fps.size() == 0) {
        fps.add(new org.openscience.cdk.fingerprint.CircularFingerprinter(fptype, fplen));
    // fps.add(new AtomEnvironentMatrix());
    }
    StringBuilder b = new StringBuilder();
    for (IFingerprinter fp : fps) {
        b.append("\n");
        b.append(fp.getClass().getName());
    }
    logger_cli.log(Level.INFO, "MSG_FP", new Object[] { b.toString() });
    return fps;
}
Also used : ArrayList(java.util.ArrayList) IFingerprinter(org.openscience.cdk.fingerprint.IFingerprinter) CircularFingerprinter(org.openscience.cdk.fingerprint.CircularFingerprinter) ICountFingerprint(org.openscience.cdk.fingerprint.ICountFingerprint) IBitFingerprint(org.openscience.cdk.fingerprint.IBitFingerprint) AmbitException(net.idea.modbcum.i.exceptions.AmbitException) SQLException(java.sql.SQLException) ConnectException(java.net.ConnectException) IOException(java.io.IOException) OperationNotSupportedException(javax.naming.OperationNotSupportedException) FileNotFoundException(java.io.FileNotFoundException) CircularFingerprinter(org.openscience.cdk.fingerprint.CircularFingerprinter)

Example 2 with IFingerprinter

use of org.openscience.cdk.fingerprint.IFingerprinter in project ambit-mirror by ideaconsult.

the class Context method parseCommandFingerprints.

public void parseCommandFingerprints(String subcommand, long now) throws Exception {
    boolean multifile = true;
    int page = parsePageParam();
    int pagesize = parsePageSizeParam();
    final boolean fp_count = parseWriteCountParam();
    final boolean fp_raw = parseWriteRawParam();
    String smiles_header = parseInputTag_Param("smiles", IteratingDelimitedFileReader.defaultSMILESHeader);
    String inchi_header = parseInputTag_Param("inchi", "InChI");
    String inchikey_header = parseInputTag_Param("inchikey", "InChIKey");
    Object tmpTag = parseSdfTitleParam();
    final String[] tags_to_keep = parsetags_to_keep();
    final String sdf_title = tmpTag == null ? null : tmpTag.toString().toLowerCase();
    final int startRecord = pagesize > 0 ? (page * pagesize + 1) : 1;
    final int maxRecord = pagesize > 0 ? ((page + 1) * pagesize + 1) : pagesize;
    final File file = getInputFile();
    FileInputState input = new FileInputState(file);
    input.setOptionalSMILESHeader(smiles_header);
    input.setOptionalInChIHeader(inchi_header);
    input.setOptionalInChIKeyHeader(inchikey_header);
    if (options.output == null)
        throw new FileNotFoundException("Output file not specified. Please use -o {file}");
    final File outfile = new File(options.output);
    logger_cli.log(Level.INFO, "MSG_INFO_READINGWRITING", new Object[] { file.getAbsoluteFile(), outfile.getAbsolutePath() });
    final List<IFingerprinter> fps = parseFingerprinterParams();
    FileOutputState out = null;
    final IChemObjectWriter awriter;
    if (multifile) {
        awriter = new MultiFingerprintsWriter(outfile, fps, tags_to_keep);
    } else {
        out = new FileOutputState(outfile);
        awriter = out.getWriter();
        if (awriter instanceof FilesWithHeaderWriter)
            ((FilesWithHeaderWriter) awriter).setAddSMILEScolumn(false);
    }
    final IChemObjectWriter writer = awriter;
    final boolean writesdf = writer instanceof SDFWriter;
    final Map<Object, Property> tags = new HashMap<>();
    Property newtag = Property.getSMILESInstance();
    newtag.setName("SMILES");
    newtag.setEnabled(false);
    tags.put(Property.opentox_SMILES, newtag);
    tags.put(Property.getSMILESInstance(), newtag);
    newtag = Property.getInChIInstance();
    newtag.setEnabled(false);
    tags.put(Property.opentox_InChI, newtag);
    tags.put("InChI", newtag);
    tags.put(Property.getInChIInstance(), newtag);
    newtag = Property.getInChIKeyInstance();
    newtag.setEnabled(true);
    newtag.setName("InChIKey");
    tags.put(Property.opentox_InChIKey, newtag);
    tags.put(Property.getInChIKeyInstance(), newtag);
    newtag = Property.getInstance(CDKConstants.TITLE, CDKConstants.TITLE);
    newtag.setEnabled(false);
    tags.put(CDKConstants.TITLE, newtag);
    tags.put(newtag, newtag);
    newtag = Property.getInstance("CHEMBL", "CHEMBL");
    newtag.setEnabled(false);
    tags.put("CHEMBL", newtag);
    tags.put(newtag, newtag);
    final BatchDBProcessor<IStructureRecord> batch = new BatchDBProcessor<IStructureRecord>() {

        @Override
        public void onItemRead(IStructureRecord input, IBatchStatistics stats) {
            super.onItemRead(input, stats);
            if ((maxRecord > 0) && stats.getRecords(RECORDS_STATS.RECORDS_READ) >= (maxRecord))
                cancel();
        }

        @Override
        public boolean skip(IStructureRecord input, IBatchStatistics stats) {
            return (stats.getRecords(RECORDS_STATS.RECORDS_READ) < startRecord) || ((maxRecord > 0) && (stats.getRecords(RECORDS_STATS.RECORDS_READ) >= maxRecord));
        }

        @Override
        public void onItemSkipped(IStructureRecord input, IBatchStatistics stats) {
            super.onItemSkipped(input, stats);
            if (stats.isTimeToPrint(getSilentInterval() * 2))
                propertyChangeSupport.firePropertyChange(PROPERTY_BATCHSTATS, null, stats);
        }

        @Override
        public void onItemProcessing(IStructureRecord input, Object output, IBatchStatistics stats) {
        }

        @Override
        public void onError(IStructureRecord input, Object output, IBatchStatistics stats, Exception x) {
            super.onError(input, output, stats, x);
            logger_cli.log(Level.SEVERE, "MSG_ERR", new Object[] { x.getMessage() });
        }

        @Override
        public long getSilentInterval() {
            return 30000L;
        }

        @Override
        public void close() throws Exception {
            try {
                writer.close();
            } catch (Exception x) {
            } finally {
            }
            super.close();
        }
    };
    batch.setProcessorChain(new ProcessorsChain<IStructureRecord, IBatchStatistics, IProcessor>());
    batch.getProcessorChain().add(new DefaultAmbitProcessor<IStructureRecord, IStructureRecord>() {

        protected MoleculeReader molReader = new MoleculeReader(true, false);

        @Override
        public IStructureRecord process(IStructureRecord record) throws Exception {
            IAtomContainer mol;
            IAtomContainer processed = null;
            try {
                mol = molReader.process(record);
                if (mol != null) {
                    for (Property p : record.getRecordProperties()) {
                        Object v = record.getRecordProperty(p);
                        String pname = p.getName().replace("http://www.opentox.org/api/1.1#", "");
                        // already parsed
                        if (tags_to_keep != null && Arrays.binarySearch(tags_to_keep, pname) < 0)
                            continue;
                        else
                            mol.setProperty(p, v);
                    }
                    if (tags_to_keep != null) {
                        List<String> toRemove = null;
                        Iterator pi = mol.getProperties().keySet().iterator();
                        while (pi.hasNext()) {
                            Object p = pi.next();
                            if (Arrays.binarySearch(tags_to_keep, p.toString()) < 0) {
                                if (toRemove == null)
                                    toRemove = new ArrayList<String>();
                                toRemove.add(p.toString());
                            }
                        }
                        if (toRemove != null)
                            for (String propertyToRemove : toRemove) mol.removeProperty(propertyToRemove);
                    }
                } else {
                    logger_cli.log(Level.SEVERE, "MSG_FINGEPRINTGEN", new Object[] { "Empty molecule", getIds(record) });
                    return record;
                }
                AtomContainerManipulator.percieveAtomTypesAndConfigureAtoms(mol);
            } catch (Exception x) {
                logger_cli.log(Level.SEVERE, "MSG_ERR_MOLREAD", new Object[] { getIds(record), x.toString() });
                return record;
            } finally {
            }
            processed = mol;
            for (IFingerprinter fp : fps) {
                ICountFingerprint cfp = null;
                try {
                    cfp = fp.getCountFingerprint(processed);
                } catch (Exception x) {
                    logger.log(Level.FINER, x.getMessage());
                }
                IBitFingerprint bfp = null;
                try {
                    bfp = fp.getBitFingerprint(processed);
                } catch (Exception x) {
                }
                Map<String, Integer> fpraw = null;
                try {
                    if (fp_raw)
                        fpraw = fp.getRawFingerprint(processed);
                } catch (Exception x) {
                }
                try {
                    if (cfp != null) {
                        if (fp_count)
                            processed.setProperty(fp.getClass().getName() + ".count", cfp);
                        processed.setProperty(fp.getClass().getName(), cfp);
                    }
                    if (bfp != null)
                        processed.setProperty(fp.getClass().getName() + ".hashed", bfp);
                    if (fpraw != null)
                        processed.setProperty(fp.getClass().getName() + ".raw", fpraw);
                } catch (Exception x) {
                    // StringWriter w = new StringWriter();
                    // x.printStackTrace(new PrintWriter(w));
                    logger_cli.log(Level.SEVERE, "MSG_FINGEPRINTGEN", new Object[] { x.getMessage(), getIds(record) });
                    if (processed != null)
                        processed.setProperty("ERROR." + fp.getClass().getName(), x.getMessage());
                } finally {
                    if (processed != null)
                        processed.addProperties(mol.getProperties());
                }
            }
            if (processed != null)
                try {
                    if (writesdf && sdf_title != null) {
                        for (Entry<Object, Object> p : processed.getProperties().entrySet()) if (sdf_title.equals(p.getKey().toString().toLowerCase())) {
                            processed.setProperty(CDKConstants.TITLE, p.getValue());
                            break;
                        }
                    }
                    StructureStandardizer.renameTags(processed, tags, true);
                    writer.write(processed);
                } catch (Exception x) {
                    // StringWriter w = new StringWriter();
                    // x.printStackTrace(new PrintWriter(w));
                    logger_cli.log(Level.SEVERE, "MSG_FINGEPRINTGEN", new Object[] { x.getMessage(), getIds(record) });
                }
            else {
                logger_cli.log(Level.SEVERE, "MSG_FINGEPRINTGEN", new Object[] { "Empty molecule", getIds(record) });
            }
            return record;
        }
    });
    batch.addPropertyChangeListener(new PropertyChangeListener() {

        @Override
        public void propertyChange(PropertyChangeEvent evt) {
            if (AbstractBatchProcessor.PROPERTY_BATCHSTATS.equals(evt.getPropertyName()))
                logger_cli.log(Level.INFO, evt.getNewValue().toString());
        }
    });
    /*
		 * standardprocessor.setCallback(new
		 * DefaultAmbitProcessor<IAtomContainer, IAtomContainer>() {
		 * 
		 * @Override public IAtomContainer process(IAtomContainer target) throws
		 * Exception { try { //writer.write(target); } catch (Exception x) {
		 * logger.log(Level.SEVERE, x.getMessage()); } return target; } });
		 */
    IBatchStatistics stats = null;
    try {
        stats = batch.process(input);
    } catch (Exception x) {
        logger_cli.log(Level.WARNING, x.getMessage(), x);
    } finally {
        try {
        } catch (Exception x) {
            logger_cli.warning(x.getMessage());
        }
        try {
            if (batch != null)
                batch.close();
        } catch (Exception x) {
            logger_cli.warning(x.getMessage());
        }
        if (stats != null)
            logger_cli.log(Level.INFO, stats.toString());
    }
}
Also used : IAtomContainer(org.openscience.cdk.interfaces.IAtomContainer) PropertyChangeListener(java.beans.PropertyChangeListener) HashMap(java.util.HashMap) FileNotFoundException(java.io.FileNotFoundException) SDFWriter(org.openscience.cdk.io.SDFWriter) IFingerprinter(org.openscience.cdk.fingerprint.IFingerprinter) IChemObjectWriter(org.openscience.cdk.io.IChemObjectWriter) IStructureRecord(ambit2.base.interfaces.IStructureRecord) MoleculeReader(ambit2.core.processors.structure.MoleculeReader) Iterator(java.util.Iterator) ArrayList(java.util.ArrayList) List(java.util.List) Property(ambit2.base.data.Property) IBitFingerprint(org.openscience.cdk.fingerprint.IBitFingerprint) PropertyChangeEvent(java.beans.PropertyChangeEvent) FileOutputState(ambit2.core.io.FileOutputState) IBatchStatistics(net.idea.modbcum.i.batch.IBatchStatistics) IProcessor(net.idea.modbcum.i.processors.IProcessor) ICountFingerprint(org.openscience.cdk.fingerprint.ICountFingerprint) IBitFingerprint(org.openscience.cdk.fingerprint.IBitFingerprint) BatchDBProcessor(ambit2.db.processors.BatchDBProcessor) AmbitException(net.idea.modbcum.i.exceptions.AmbitException) SQLException(java.sql.SQLException) ConnectException(java.net.ConnectException) IOException(java.io.IOException) OperationNotSupportedException(javax.naming.OperationNotSupportedException) FileNotFoundException(java.io.FileNotFoundException) ICountFingerprint(org.openscience.cdk.fingerprint.ICountFingerprint) FilesWithHeaderWriter(ambit2.core.io.FilesWithHeaderWriter) MultiFingerprintsWriter(ambit2.core.io.fp.MultiFingerprintsWriter) File(java.io.File) FileInputState(ambit2.core.io.FileInputState) Map(java.util.Map) HashMap(java.util.HashMap)

Example 3 with IFingerprinter

use of org.openscience.cdk.fingerprint.IFingerprinter in project ambit-mirror by ideaconsult.

the class FingerprinterTest method testDescriptor.

public void testDescriptor(Fingerprint2DescriptorWrapper wrapper) throws Exception {
    IAtomContainer mol = MoleculeFactory.make123Triazole();
    AtomContainerManipulator.percieveAtomTypesAndConfigureAtoms(mol);
    CDKHueckelAromaticityDetector.detectAromaticity(mol);
    CDKHydrogenAdder adder = CDKHydrogenAdder.getInstance(SilentChemObjectBuilder.getInstance());
    adder.addImplicitHydrogens(mol);
    MoleculeTools.convertImplicitToExplicitHydrogens(mol);
    IFingerprinter fp = wrapper.getFingerprinter();
    BitSet bs = fp.getBitFingerprint(mol).asBitSet();
    DescriptorValue result = wrapper.calculate(mol);
    Assert.assertEquals(bs.toString(), ((StringDescriptorResultType) result.getValue()).getValue());
    Assert.assertEquals(fp.getClass().getName(), result.getNames()[0]);
    Assert.assertEquals(wrapper.getClass().getName(), result.getSpecification().getImplementationIdentifier());
}
Also used : IAtomContainer(org.openscience.cdk.interfaces.IAtomContainer) BitSet(java.util.BitSet) CDKHydrogenAdder(org.openscience.cdk.tools.CDKHydrogenAdder) IFingerprinter(org.openscience.cdk.fingerprint.IFingerprinter) DescriptorValue(org.openscience.cdk.qsar.DescriptorValue)

Example 4 with IFingerprinter

use of org.openscience.cdk.fingerprint.IFingerprinter in project ambit-mirror by ideaconsult.

the class FingerprinterTest method testPubChem.

@Test
public void testPubChem() throws Exception {
    IAtomContainer mol = MoleculeFactory.make123Triazole();
    IFingerprinter fp = new PubchemFingerprinter(SilentChemObjectBuilder.getInstance());
    AtomContainerManipulator.percieveAtomTypesAndConfigureAtoms(mol);
    CDKHydrogenAdder h = CDKHydrogenAdder.getInstance(SilentChemObjectBuilder.getInstance());
    h.addImplicitHydrogens(mol);
    CDKHueckelAromaticityDetector.detectAromaticity(mol);
    BitSet bs1 = fp.getBitFingerprint(mol).asBitSet();
    BitSet bs2 = fp.getBitFingerprint(mol).asBitSet();
    // fails if aromaticity was not detected!
    Assert.assertEquals(bs1, bs2);
}
Also used : IAtomContainer(org.openscience.cdk.interfaces.IAtomContainer) PubchemFingerprinter(org.openscience.cdk.fingerprint.PubchemFingerprinter) BitSet(java.util.BitSet) CDKHydrogenAdder(org.openscience.cdk.tools.CDKHydrogenAdder) IFingerprinter(org.openscience.cdk.fingerprint.IFingerprinter) Test(org.junit.Test)

Aggregations

IFingerprinter (org.openscience.cdk.fingerprint.IFingerprinter)4 IAtomContainer (org.openscience.cdk.interfaces.IAtomContainer)3 FileNotFoundException (java.io.FileNotFoundException)2 IOException (java.io.IOException)2 ConnectException (java.net.ConnectException)2 SQLException (java.sql.SQLException)2 ArrayList (java.util.ArrayList)2 BitSet (java.util.BitSet)2 OperationNotSupportedException (javax.naming.OperationNotSupportedException)2 AmbitException (net.idea.modbcum.i.exceptions.AmbitException)2 IBitFingerprint (org.openscience.cdk.fingerprint.IBitFingerprint)2 ICountFingerprint (org.openscience.cdk.fingerprint.ICountFingerprint)2 CDKHydrogenAdder (org.openscience.cdk.tools.CDKHydrogenAdder)2 Property (ambit2.base.data.Property)1 IStructureRecord (ambit2.base.interfaces.IStructureRecord)1 FileInputState (ambit2.core.io.FileInputState)1 FileOutputState (ambit2.core.io.FileOutputState)1 FilesWithHeaderWriter (ambit2.core.io.FilesWithHeaderWriter)1 MultiFingerprintsWriter (ambit2.core.io.fp.MultiFingerprintsWriter)1 MoleculeReader (ambit2.core.processors.structure.MoleculeReader)1