Search in sources :

Example 1 with StdzBatchProcessor

use of ambit2.dbcli.processor.StdzBatchProcessor in project ambit-mirror by ideaconsult.

the class AmbitPipeline method parseCommandStandardize.

public void parseCommandStandardize(String subcommand, long now) throws Exception {
    int page = parsePageParam();
    int pagesize = parsePageSizeParam();
    Object tmpTag = parseSdfTitleParam();
    String smiles_header = parseInputTag_Param("smiles", IteratingDelimitedFileReader.defaultSMILESHeader);
    String inchi_header = parseInputTag_Param("inchi", "InChI");
    String inchikey_header = parseInputTag_Param("inchikey", "InChIKey");
    final String sdf_title = tmpTag == null ? null : tmpTag.toString().toLowerCase();
    final StructureStandardizer standardprocessor = new StructureStandardizer(logger_cli);
    standardprocessor.setGenerate2D(parseBooleanParam(":generate2D", false));
    standardprocessor.setGenerateTautomers(parseBooleanParam(":tautomers", false));
    SMIRKSProcessor tmp = null;
    try {
        Object o = options.getParam(":smirks");
        if (o != null) {
            File smirksConfig = new File(o.toString());
            if (smirksConfig.exists()) {
                tmp = new SMIRKSProcessor(smirksConfig, logger_cli);
                tmp.setEnabled(true);
            } else
                logger_cli.log(Level.WARNING, "SMIRKS transformation file not found");
        }
    } catch (Exception x) {
        logger_cli.log(Level.SEVERE, x.getMessage());
        tmp = null;
    }
    final SMIRKSProcessor smirksProcessor = tmp;
    standardprocessor.setSplitFragments(parseBooleanParam(":splitfragments", false));
    standardprocessor.setImplicitHydrogens(parseBooleanParam(":implicith", false));
    standardprocessor.setNeutralise(parseBooleanParam(":neutralise", false));
    final String[] tags_to_keep = parsetags_to_keep();
    standardprocessor.setRankTag(parseStringParam(":tag_rank", "RANK"));
    standardprocessor.setInchiTag(parseStringParam(":tag_inchi", "InChI"));
    standardprocessor.setInchiKeyTag(parseStringParam(":tag_inchikey", "InChIKey"));
    standardprocessor.setSMILESTag(parseStringParam(":tag_smiles", "SMILES"));
    standardprocessor.setGenerateInChI(parseBooleanParam(":inchi", true));
    standardprocessor.setGenerateSMILES(parseBooleanParam(":smiles", true));
    standardprocessor.setGenerateSMILES_Canonical(parseBooleanParam(":smilescanonical", false));
    standardprocessor.setGenerateSMILES_Aromatic(parseBooleanParam(":smilesaromatic", false));
    standardprocessor.setGenerateStereofrom2D(parseBooleanParam(":generatestereofrom2d", false));
    standardprocessor.setClearIsotopes(parseBooleanParam(":setClearIsotopes", false));
    final boolean debugatomtypes = parseBooleanParam(":debugatomtypes", false);
    final int startRecord = pagesize > 0 ? (page * pagesize + 1) : 1;
    final int maxRecord = pagesize > 0 ? ((page + 1) * pagesize + 1) : pagesize;
    final File file = getInputFile();
    FileInputState in = new FileInputState(file);
    in.setOptionalInChIHeader(inchi_header);
    in.setOptionalInChIKeyHeader(inchikey_header);
    in.setOptionalSMILESHeader(smiles_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() });
    FileOutputState out = new FileOutputState(outfile);
    final IChemObjectWriter writer = out.getWriter();
    if (writer instanceof FilesWithHeaderWriter)
        ((FilesWithHeaderWriter) writer).setAddSMILEScolumn(false);
    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, 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 StdzBatchProcessor(standardprocessor, smirksProcessor, tags_to_keep, logger_cli, writer, sdf_title, debugatomtypes));
    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(in);
    } catch (Exception x) {
        StringWriter w = new StringWriter();
        x.printStackTrace(new PrintWriter(w));
        logger_cli.log(Level.WARNING, "MSG_ERR", new Object[] { x.getMessage() });
        logger_cli.log(Level.FINE, "MSG_ERR_DEBUG", new Object[] { x.getMessage(), w.toString() });
    } finally {
        try {
            if (batch != null)
                batch.close();
        } catch (Exception x) {
            logger_cli.log(Level.WARNING, "MSG_ERR", new Object[] { x.getMessage() });
        }
        if (stats != null)
            logger_cli.log(Level.INFO, "MSG_INFO", new Object[] { stats.toString() });
    }
}
Also used : PropertyChangeListener(java.beans.PropertyChangeListener) FileNotFoundException(java.io.FileNotFoundException) IChemObjectWriter(org.openscience.cdk.io.IChemObjectWriter) IStructureRecord(ambit2.base.interfaces.IStructureRecord) StringWriter(java.io.StringWriter) PrintWriter(java.io.PrintWriter) PropertyChangeEvent(java.beans.PropertyChangeEvent) FileOutputState(ambit2.core.io.FileOutputState) IBatchStatistics(net.idea.modbcum.i.batch.IBatchStatistics) IProcessor(net.idea.modbcum.i.processors.IProcessor) FileNotFoundException(java.io.FileNotFoundException) BatchDBProcessor(ambit2.db.processors.BatchDBProcessor) StructureStandardizer(ambit2.tautomers.processor.StructureStandardizer) StdzBatchProcessor(ambit2.dbcli.processor.StdzBatchProcessor) FilesWithHeaderWriter(ambit2.core.io.FilesWithHeaderWriter) SMIRKSProcessor(ambit2.smarts.processors.SMIRKSProcessor) File(java.io.File) FileInputState(ambit2.core.io.FileInputState)

Aggregations

IStructureRecord (ambit2.base.interfaces.IStructureRecord)1 FileInputState (ambit2.core.io.FileInputState)1 FileOutputState (ambit2.core.io.FileOutputState)1 FilesWithHeaderWriter (ambit2.core.io.FilesWithHeaderWriter)1 BatchDBProcessor (ambit2.db.processors.BatchDBProcessor)1 StdzBatchProcessor (ambit2.dbcli.processor.StdzBatchProcessor)1 SMIRKSProcessor (ambit2.smarts.processors.SMIRKSProcessor)1 StructureStandardizer (ambit2.tautomers.processor.StructureStandardizer)1 PropertyChangeEvent (java.beans.PropertyChangeEvent)1 PropertyChangeListener (java.beans.PropertyChangeListener)1 File (java.io.File)1 FileNotFoundException (java.io.FileNotFoundException)1 PrintWriter (java.io.PrintWriter)1 StringWriter (java.io.StringWriter)1 IBatchStatistics (net.idea.modbcum.i.batch.IBatchStatistics)1 IProcessor (net.idea.modbcum.i.processors.IProcessor)1 IChemObjectWriter (org.openscience.cdk.io.IChemObjectWriter)1