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; }
private void CompleteReaction(CReaction reaction, int numSubst, int numProd) { reaction.setReversible(false); // we need to get the function from the function database CFunctionDB funcDB = CCopasiRootContainer.getFunctionList(); // it should be in the list of suitable functions // lets get all suitable functions for an irreversible reaction with numSubst substrates and // numProd products CFunctionStdVector suitableFunctions = funcDB.suitableFunctions(numSubst, numProd, COPASI.TriFalse); int i; int iMax = (int) suitableFunctions.size(); for (i = 0; i < iMax; ++i) { // we just assume that the only suitable function with Constant in // it's name is the one we want // if (suitableFunctions.get(i).getObjectName().indexOf("Constant") != -1) { if (suitableFunctions .get(i) .getObjectName() .contains("Mass action (irreversible)")) { // "Mass action (irreversible)" // // "Michaelis-Menten" break; } } System.out.println(" Function: " + i + "/" + iMax); if (i < iMax) { // we set the function. // => the method should be smart enough to associate the reaction entities with the correct // function parameters reaction.setFunction(suitableFunctions.get(i)); // TaskVectorN taskVector = dataModel.getTaskList(); // dataModel.getTask(0).getProblem(); CCopasiParameterGroup parameterGroup = reaction.getParameters(); CCopasiParameter parameter; // "Mass action (irreversible)" function has only one parameter k1 parameter = parameterGroup.getParameter("k1"); parameter.setDblValue(0.1); // michaelis-Menten /* parameter= parameterGroup.getParameter("V"); // Michaelis-Menten has 2 parameters: V and Km parameter.setDblValue(20); parameter= parameterGroup.getParameter("Km"); // "Mass action (irreversible)" function has only one parameter k1 parameter.setDblValue(10); */ // for (i = 0; i < parameterGroup.size(); i++) { // // //System.out.println(parameterGroup.getParameter(i).getObjectName()); // parameterGroup.removeParameter(i); // } // String paramName; // i=0; // //for (i = 0; i < numSubst; i++) { // paramName = "k"+(i+1); //metabolite_"+i+"_K"; // parameterGroup.addParameter(paramName, CCopasiParameter.DOUBLE); // CCopasiParameter parameter=parameterGroup.getParameter(paramName); // parameter.setDblValue(0.1); // changedObjects.add(parameter.getValueReference()); // //} } else { System.err.println("Error. Could not find suitable function."); System.exit(1); } }