public CModel createModel(CCopasiDataModel dataModel) { try { dataModel.newModel(); } catch (Exception e) { return null; } CModel model = dataModel.getModel(); model.setVolumeUnit(CModel.fl); model.setTimeUnit(CModel.s); model.setQuantityUnit(CModel.fMol); CCompartment comp = model.createCompartment("CompartmentA"); CMetab A = model.createMetabolite("A", comp.getObjectName()); A.setInitialConcentration(2.0e-4); CMetab B = model.createMetabolite("B", comp.getObjectName()); B.setInitialConcentration(0.0); CReaction react = model.createReaction("Decay_1"); react.addSubstrate(A.getKey()); react.addProduct(B.getKey()); react.setReversible(false); react.setFunction("Mass action (irreversible)"); react.setParameterValue("k1", 0.5); StringStdVector mapping = new StringStdVector(); mapping.add(react.getChemEq().getSubstrate(0).getMetabolite().getKey()); react.setParameterMappingVector( react.getFunction().getVariables().getParameter(1).getObjectName(), mapping); ; model.compileIfNecessary(); ObjectStdVector changedObjects = new ObjectStdVector(); changedObjects.add(comp.getObject(new CCopasiObjectName("Reference=InitialVolume"))); changedObjects.add(A.getObject(new CCopasiObjectName("Reference=InitialConcentration"))); changedObjects.add(B.getObject(new CCopasiObjectName("Reference=InitialConcentration"))); changedObjects.add( react.getParameters().getParameter(0).getObject(new CCopasiObjectName("Reference=Value"))); model.updateInitialValues(changedObjects); return model; }
public static CSteadyStateTask runSteadyStateCalculation( CCopasiDataModel dataModel, HashMap<String, Object> problemParameters, HashMap<String, Object> methodParameters) { CSteadyStateTask steadyStateTask = (CSteadyStateTask) dataModel.addTask(CCopasiTask.steadyState); if (steadyStateTask == null) return null; CSteadyStateProblem steadyStateProblem = (CSteadyStateProblem) steadyStateTask.getProblem(); if (steadyStateProblem == null) return null; Set<String> keySet = problemParameters.keySet(); for (Iterator<String> it = keySet.iterator(); it.hasNext(); ) { String key = (String) it.next(); CCopasiParameter param = steadyStateProblem.getParameter(key); if (param == null) { return null; } Object o = problemParameters.get(key); if (o instanceof Double) { param.setDblValue(((Double) o).doubleValue()); } else if (o instanceof Integer) { param.setIntValue(((Integer) o).intValue()); } else if (o instanceof Boolean) { param.setBoolValue(((Boolean) o).booleanValue()); } else if (o instanceof String) { param.setStringValue(((String) o)); } else { System.err.println("Error. Unknown parameter type."); } } CNewtonMethod newtonMethod = (CNewtonMethod) steadyStateTask.getMethod(); if (newtonMethod == null) { return null; } keySet = methodParameters.keySet(); for (Iterator<String> it = keySet.iterator(); it.hasNext(); ) { String key = (String) it.next(); CCopasiParameter param = newtonMethod.getParameter(key); if (param == null) { return null; } Object o = methodParameters.get(key); if (o instanceof Double) { param.setDblValue(((Double) o).doubleValue()); } else if (o instanceof Integer) { param.setIntValue(((Integer) o).intValue()); } else if (o instanceof Boolean) { param.setBoolValue(((Boolean) o).booleanValue()); } else if (o instanceof String) { param.setStringValue(((String) o)); } else { System.err.println("Error. Unknown parameter type."); } } boolean result = false; try { result = steadyStateTask.process(true); } catch (Exception e) { System.err.println("ERROR: " + e.getMessage()); } if (!result) { return null; } return steadyStateTask; }