All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.openscience.cdk.reaction.ReactionEngine Maven / Gradle / Ivy

There is a newer version: 2.9
Show newest version
/* 
 * Copyright (C) 2008  Miguel Rojas 
 *               2014  Mark B Vine (orcid:0000-0002-7794-0426)
 *
 *  Contact: [email protected]
 *
 *  This program is free software; you can redistribute it and/or
 *  modify it under the terms of the GNU Lesser General Public License
 *  as published by the Free Software Foundation; either version 2.1
 *  of the License, or (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU Lesser General Public License for more details.
 *
 *  You should have received a copy of the GNU Lesser General Public License
 *  along with this program; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
 */
package org.openscience.cdk.reaction;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;

import org.openscience.cdk.annotations.TestClass;
import org.openscience.cdk.annotations.TestMethod;
import org.openscience.cdk.dict.Dictionary;
import org.openscience.cdk.dict.DictionaryDatabase;
import org.openscience.cdk.dict.EntryReact;
import org.openscience.cdk.exception.CDKException;
import org.openscience.cdk.reaction.type.parameters.IParameterReact;
import org.openscience.cdk.tools.ILoggingTool;
import org.openscience.cdk.tools.LoggingToolFactory;

/**
 * 

The base class for all chemical reactions objects in this cdk. * It provides methods for adding parameters

* * @author Miguel Rojas * * @cdk.created 2008-02-01 * @cdk.module reaction * @cdk.set reaction-types * @cdk.githash */ @TestClass("org.openscience.cdk.reaction.ReactionEngineTest") public class ReactionEngine { private static ILoggingTool logger = LoggingToolFactory.createLoggingTool(ReactionEngine.class); private Dictionary dictionary; public HashMap paramsMap; public IReactionMechanism mechanism; public List paramsMap2; /** * Constructor of the ReactionEngine object. */ public ReactionEngine() { try { IReactionProcess reaction = (IReactionProcess) this; EntryReact entry = initiateDictionary("reaction-processes", (IReactionProcess) reaction); initiateParameterMap2(entry); reaction.setParameterList(getParameterList()); extractMechanism(entry); } catch (Exception e) { e.printStackTrace(); } } /** * Extract the mechanism necessary for this reaction. * * @param entry The EntryReact object */ private void extractMechanism(EntryReact entry) { String mechanismName = "org.openscience.cdk.reaction.mechanism." + entry.getMechanism(); try { mechanism = (IReactionMechanism) this.getClass().getClassLoader().loadClass(mechanismName).newInstance(); logger.info("Loaded mechanism: ", mechanismName); } catch (ClassNotFoundException exception) { logger.error("Could not find this IReactionMechanism: ", mechanismName); logger.debug(exception); } catch (InstantiationException | IllegalAccessException exception) { logger.error("Could not load this IReactionMechanism: ", mechanismName); logger.debug(exception); } } /** * Open the Dictionary OWLReact. * * @param nameDict Name of the Dictionary * @param reaction The IReactionProcess * @return The entry for this reaction */ private EntryReact initiateDictionary(String nameDict, IReactionProcess reaction) { DictionaryDatabase db = new DictionaryDatabase(); dictionary = db.getDictionary(nameDict); String entryString = reaction.getSpecification().getSpecificationReference(); entryString = entryString.substring(entryString.indexOf('#') + 1, entryString.length()); return (EntryReact) dictionary.getEntry(entryString.toLowerCase()); } /** * Creates a map with the name and type of the parameters. */ private void initiateParameterMap2(EntryReact entry) { List> paramDic = entry.getParameterClass(); paramsMap2 = new ArrayList(); for (Iterator> it = paramDic.iterator(); it.hasNext();) { List param = it.next(); String paramName = "org.openscience.cdk.reaction.type.parameters." + param.get(0); try { IParameterReact ipc = (IParameterReact) this.getClass().getClassLoader().loadClass(paramName) .newInstance(); ipc.setParameter(Boolean.parseBoolean(param.get(1))); ipc.setValue(param.get(2)); logger.info("Loaded parameter class: ", paramName); paramsMap2.add(ipc); } catch (ClassNotFoundException exception) { logger.error("Could not find this IParameterReact: ", paramName); logger.debug(exception); } catch (InstantiationException | IllegalAccessException exception) { logger.error("Could not load this IParameterReact: ", paramName); logger.debug(exception); } } } /** * Returns the current parameter Map for this reaction. * * Must be done before calling * calculate as the parameters influence the calculation outcome. * * @param params A List of Objects containing the parameters for this reaction. * The key must be included into the Dictionary reacton-processes * @throws CDKException if invalid number of type of parameters are passed to it * * @see #getParameterList */ @TestMethod(value = "testSetParameterList_List") public void setParameterList(List params) throws CDKException { paramsMap2 = params; } /** * Returns the current parameter values. * * @return A List of Object containing the name and the type of the parameter * @see #setParameterList * */ @TestMethod(value = "testGetParameterList") public List getParameterList() { return paramsMap2; } /** * Return the IParameterReact if it exists given the class. * * @param paramClass The class * @return The IParameterReact */ @TestMethod(value = "testGetParameterClass_Class") public IParameterReact getParameterClass(Class paramClass) { for (Iterator it = paramsMap2.iterator(); it.hasNext();) { IParameterReact ipr = it.next(); if (ipr.getClass().equals(paramClass)) return ipr; } return null; } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy