/** * Creates the simulations for SEDML. */ std::string CSEDMLExporter::createTimeCourseTask(CCopasiDataModel& dataModel, const std::string & modelId) { mpTimecourse = this->mpSEDMLDocument->createUniformTimeCourse(); mpTimecourse->setId(SEDMLUtils::getNextId("sim", mpSEDMLDocument->getNumSimulations())); //presently SEDML only supports time course CCopasiTask* pTask = (*dataModel.getTaskList())["Time-Course"]; CTrajectoryProblem* tProblem = static_cast<CTrajectoryProblem*>(pTask->getProblem()); mpTimecourse->setInitialTime(0.0); mpTimecourse->setOutputStartTime(tProblem->getOutputStartTime()); mpTimecourse->setOutputEndTime(tProblem->getStepNumber()*tProblem->getStepSize()); mpTimecourse->setNumberOfPoints(tProblem->getStepNumber()); // set the correct KISAO Term SedAlgorithm* alg = mpTimecourse->createAlgorithm(); if (pTask->getMethod()->getObjectName().find("Stochastic") != std::string::npos) alg->setKisaoID("KISAO:0000241"); else alg->setKisaoID("KISAO:0000019"); mpTimecourseTask = this->mpSEDMLDocument->createTask(); std::string taskId = SEDMLUtils::getNextId("task", mpSEDMLDocument->getNumTasks()); mpTimecourseTask->setId(taskId); mpTimecourseTask->setSimulationReference(mpTimecourse->getId()); mpTimecourseTask->setModelReference(modelId); return taskId; }
void CQTSSAResultSubWidget::saveDataToFile() { C_INT32 Answer = QMessageBox::No; QString fileName; while (Answer == QMessageBox::No) { fileName = CopasiFileDialog::getSaveFileName(this, "Save File Dialog", "untitled.txt", "Text Files (*.txt)", "Save to"); if (fileName.isEmpty()) return; // Checks whether the file exists Answer = checkSelection(fileName); if (Answer == QMessageBox::Cancel) return; } std::ofstream file(CLocaleString::fromUtf8(TO_UTF8(fileName)).c_str()); if (file.fail()) return; assert(CCopasiRootContainer::getDatamodelList()->size() > 0); CCopasiTask* mpTask = dynamic_cast<CTSSATask *>((*(*CCopasiRootContainer::getDatamodelList())[0]->getTaskList())["Time Scale Separation Analysis"]); if (!mpTask) return; CCopasiProblem* mpProblem = mpTask->getProblem(); mpProblem->printResult(&file); return; }
void CMCAResultSubwidget::slotSave() { C_INT32 Answer = QMessageBox::No; QString fileName; while (Answer == QMessageBox::No) { fileName = CopasiFileDialog::getSaveFileName(this, "Save File Dialog", "untitled.txt", "TEXT Files (*.txt)", "Save to"); if (fileName.isEmpty()) return; // Checks whether the file exists Answer = checkSelection(fileName); if (Answer == QMessageBox::Cancel) return; } std::ofstream file(CLocaleString::fromUtf8(TO_UTF8(fileName)).c_str()); if (file.fail()) return; assert(CCopasiRootContainer::getDatamodelList()->size() > 0); CCopasiTask* mpTask = dynamic_cast<CMCATask *>((*(*CCopasiRootContainer::getDatamodelList())[0]->getTaskList())["Metabolic Control Analysis"]); if (mpTask != NULL) file << mpTask->getResult(); // mpTask->printResult(file); return; }
std::string Arguments::prepareModel() const { if (!isValid()) return ""; CCopasiDataModel* model = (*CCopasiRootContainer::getDatamodelList())[0]; model->loadModel(getFilename(), NULL); if (mDisablePlots) { for (size_t index = 0; index < model->getPlotDefinitionList()->size(); ++index) { (*model->getPlotDefinitionList())[index]->setActive(false); } } if (mClearTargets) { for (size_t index = 0; index < model->getTaskList()->size(); ++index) { (*model->getTaskList())[index]->getReport().setTarget(""); } } CCopasiTask *task = getTask(); if (task != NULL) { if (isGenerateOutput()) { // calls initialize which is private COutputAssistant::getListOfDefaultOutputDescriptions(); // generate the output COutputAssistant::createDefaultOutput(mGenerateOutput, task, model); } if (haveReportFile()) task->getReport().setTarget(mReportFile); COptTask* optTask = dynamic_cast<COptTask*>(task); if (optTask != NULL) { COptProblem *problem = (COptProblem *)optTask->getProblem(); if (mSetSolutionStatistic) optTask->setMethodType(CCopasiMethod::Statistics); if (isDisableRandomizeStartValues()) problem->setRandomizeStartValues(false); if (isDisableStatistic()) problem->setCalculateStatistics(false); } } model->saveModel(getFilename() + ".view.cps", NULL, true); return getFilename() + ".view.cps"; }
CCopasiTask* Arguments::getTaskForName(const std::string& name) const { CCopasiVectorN<CCopasiTask> &taskList = *(*CCopasiRootContainer::getDatamodelList())[0]->getTaskList(); for (size_t i = 0; i < taskList.size(); ++i) { CCopasiTask *current = taskList[i]; if (current->getObjectName() == name) return current; } return NULL; }
CCopasiTask* Arguments::getFirstScheduledTask() { CCopasiVectorN<CCopasiTask> &taskList = *(*CCopasiRootContainer::getDatamodelList())[0]->getTaskList(); for (size_t i = 0; i < taskList.size(); ++i) { CCopasiTask *current = taskList[i]; if (current->isScheduled()) return current; } return NULL; }
/** * Creates the simulations for SEDML. */ std::string CSEDMLExporter::createSteadyStateTask(CCopasiDataModel& dataModel, const std::string & modelId) { SedSteadyState *steady = this->mpSEDMLDocument->createSteadyState(); steady->setId(SEDMLUtils::getNextId("steady", mpSEDMLDocument->getNumSimulations())); //presently SEDML only supports time course CCopasiTask* pTask = (*dataModel.getTaskList())["Steady-State"]; CTrajectoryProblem* tProblem = static_cast<CTrajectoryProblem*>(pTask->getProblem()); // set the correct KISAO Term SedAlgorithm* alg = steady->createAlgorithm(); alg->setKisaoID("KISAO:0000282"); SedTask *task = this->mpSEDMLDocument->createTask(); std::string taskId = SEDMLUtils::getNextId("task", mpSEDMLDocument->getNumTasks()); task->setId(taskId); task->setSimulationReference(steady->getId()); task->setModelReference(modelId); return taskId; }
/* * build the population tree */ void CCopasiSimpleSelectionTree::populateTree(const CModel * pModel, const ObjectClasses & classes) { if (!pModel) return; const CCopasiObject * pObject; Q3ListViewItem * pItem; // find all kinds of time pObject = pModel->getObject(CCopasiObjectName("Reference=Time")); if (filter(classes, pObject)) { pItem = new Q3ListViewItem(mpTimeSubtree, "Model Time"); treeItems[pItem] = pObject; } pObject = pModel->getObject(CCopasiObjectName("Reference=Initial Time")); if (filter(classes, pObject)) { pItem = new Q3ListViewItem(mpTimeSubtree, "Model Initial Time"); treeItems[pItem] = pObject; } pObject = pModel->getObjectDataModel()->getObject(CCopasiObjectName("Timer=CPU Time")); if (filter(classes, pObject)) { pItem = new Q3ListViewItem(mpTimeSubtree, "CPU time"); treeItems[pItem] = pObject; } pObject = pModel->getObjectDataModel()->getObject(CCopasiObjectName("Timer=Wall Clock Time")); if (filter(classes, pObject)) { pItem = new Q3ListViewItem(mpTimeSubtree, "real time"); treeItems[pItem] = pObject; } removeEmptySubTree(&mpTimeSubtree); // find all species (aka metabolites) and create items in the metabolite subtree const CCopasiVector<CMetab>& metabolites = pModel->getMetabolites(); unsigned int counter; unsigned int maxCount = metabolites.size(); for (counter = maxCount; counter != 0; --counter) { const CMetab* metab = metabolites[counter - 1]; std::string name = metab->getObjectName(); bool unique = isMetaboliteNameUnique(name, metabolites); if (!unique) { const CCompartment* comp = metab->getCompartment(); if (comp) { name = name + "(" + comp->getObjectName() + ")"; } } pObject = metab->getObject(CCopasiObjectName("Reference=InitialParticleNumber")); if (filter(classes, pObject)) { pItem = new Q3ListViewItem(mpMetaboliteInitialNumberSubtree, FROM_UTF8(name + "(t=0)")); treeItems[pItem] = pObject; } pObject = metab->getObject(CCopasiObjectName("Reference=ParticleNumber")); if (filter(classes, pObject)) { pItem = new Q3ListViewItem(mpMetaboliteTransientNumberSubtree, FROM_UTF8(name + "(t)")); treeItems[pItem] = pObject; } if (metab->getStatus() != CModelEntity::ASSIGNMENT) { pObject = metab->getObject(CCopasiObjectName("Reference=ParticleNumberRate")); if (filter(classes, pObject)) { pItem = new Q3ListViewItem(mpMetaboliteRateNumberSubtree, FROM_UTF8("d(" + name + ")/dt")); treeItems[pItem] = pObject; } } name = "[" + name + "]"; // Concentration pObject = metab->getObject(CCopasiObjectName("Reference=InitialConcentration")); if (filter(classes, pObject)) { pItem = new Q3ListViewItem(mpMetaboliteInitialConcentrationSubtree, FROM_UTF8(name + "(t=0)")); treeItems[pItem] = pObject; } pObject = metab->getObject(CCopasiObjectName("Reference=Concentration")); if (filter(classes, pObject)) { pItem = new Q3ListViewItem(mpMetaboliteTransientConcentrationSubtree, FROM_UTF8(name + "(t)")); treeItems[pItem] = pObject; } if (metab->getStatus() != CModelEntity::ASSIGNMENT) { pObject = metab->getObject(CCopasiObjectName("Reference=Rate")); if (filter(classes, pObject)) { pItem = new Q3ListViewItem(mpMetaboliteRateConcentrationSubtree, FROM_UTF8("d(" + name + ")/dt")); treeItems[pItem] = pObject; } } } removeEmptySubTree(&mpMetaboliteInitialNumberSubtree); removeEmptySubTree(&mpMetaboliteTransientNumberSubtree); removeEmptySubTree(&mpMetaboliteRateNumberSubtree); removeEmptySubTree(&mpMetaboliteInitialConcentrationSubtree); removeEmptySubTree(&mpMetaboliteTransientConcentrationSubtree); removeEmptySubTree(&mpMetaboliteRateConcentrationSubtree); removeEmptySubTree(&mpMetaboliteSubtree); // find all reactions and create items in the reaction subtree const CCopasiVectorNS<CReaction>& reactions = pModel->getReactions(); maxCount = reactions.size(); for (counter = maxCount; counter != 0; --counter) { const CReaction* react = reactions[counter - 1]; std::string name = "flux(" + react->getObjectName() + ")"; pObject = react->getObject(CCopasiObjectName("Reference=Flux")); if (filter(classes, pObject)) { pItem = new Q3ListViewItem(mpReactionFluxConcentrationSubtree, FROM_UTF8(name)); treeItems[pItem] = pObject; } pObject = react->getObject(CCopasiObjectName("Reference=ParticleFlux")); if (filter(classes, pObject)) { pItem = new Q3ListViewItem(mpReactionFluxNumberSubtree, FROM_UTF8("particle " + name)); treeItems[pItem] = pObject; } // create items for the reaction parameters pItem = new Q3ListViewItem(mpReactionParameterSubtree, FROM_UTF8(react->getObjectName())); const CCopasiParameterGroup & Parameters = react->getParameters(); unsigned int j; unsigned int numParameters = Parameters.size(); for (j = numParameters; j != 0; --j) { const CCopasiParameter * pParameter = Parameters.getParameter(j - 1); // We skip local parameters which ar covered by global parameters if (!react->isLocalParameter(pParameter->getObjectName())) continue; pObject = pParameter->getObject(CCopasiObjectName("Reference=Value")); if (filter(classes, pObject)) { Q3ListViewItem * pParameterItem = new Q3ListViewItem(pItem, FROM_UTF8(pParameter->getObjectName())); treeItems[pParameterItem] = pObject; } } removeEmptySubTree(&pItem); } removeEmptySubTree(&mpReactionFluxNumberSubtree); removeEmptySubTree(&mpReactionFluxConcentrationSubtree); removeEmptySubTree(&mpReactionParameterSubtree); removeEmptySubTree(&mpReactionSubtree); // find all global parameters (aka model values) variables const CCopasiVector<CModelValue>& objects = pModel->getModelValues(); maxCount = objects.size(); for (counter = maxCount; counter != 0; --counter) { const CModelEntity* object = objects[counter - 1]; std::string name = object->getObjectName(); pObject = object->getObject(CCopasiObjectName("Reference=InitialValue")); if (filter(classes, pObject)) { pItem = new Q3ListViewItem(mpModelQuantityInitialValueSubtree, FROM_UTF8(name + "(t=0)")); treeItems[pItem] = pObject; } pObject = object->getObject(CCopasiObjectName("Reference=Value")); if (filter(classes, pObject)) { pItem = new Q3ListViewItem(mpModelQuantityTransientValueSubtree, FROM_UTF8(name + "(t)")); treeItems[pItem] = pObject; } if (object->getStatus() != CModelEntity::ASSIGNMENT) { pObject = object->getObject(CCopasiObjectName("Reference=Rate")); if (filter(classes, pObject)) { pItem = new Q3ListViewItem(mpModelQuantityRateSubtree, FROM_UTF8("d(" + name + ")/dt")); treeItems[pItem] = pObject; } } } removeEmptySubTree(&mpModelQuantityRateSubtree); removeEmptySubTree(&mpModelQuantityInitialValueSubtree); removeEmptySubTree(&mpModelQuantityTransientValueSubtree); removeEmptySubTree(&mpModelQuantitySubtree); // find all compartments const CCopasiVector<CCompartment>& objects2 = pModel->getCompartments(); maxCount = objects2.size(); for (counter = maxCount; counter != 0; --counter) { const CModelEntity* object = objects2[counter - 1]; std::string name = object->getObjectName(); pObject = object->getObject(CCopasiObjectName("Reference=InitialVolume")); if (filter(classes, pObject)) { pItem = new Q3ListViewItem(mpCompartmentInitialVolumeSubtree, FROM_UTF8(name + "(t=0)")); treeItems[pItem] = pObject; } pObject = object->getObject(CCopasiObjectName("Reference=Volume")); if (filter(classes, pObject)) { pItem = new Q3ListViewItem(mpCompartmentTransientVolumeSubtree, FROM_UTF8(name + "(t)")); treeItems[pItem] = pObject; } if (object->getStatus() != CModelEntity::ASSIGNMENT) { pObject = object->getObject(CCopasiObjectName("Reference=Rate")); if (filter(classes, pObject)) { pItem = new Q3ListViewItem(mpCompartmentRateSubtree, FROM_UTF8("d(" + name + ")/dt")); treeItems[pItem] = pObject; } } } removeEmptySubTree(&mpCompartmentRateSubtree); removeEmptySubTree(&mpCompartmentInitialVolumeSubtree); removeEmptySubTree(&mpCompartmentTransientVolumeSubtree); removeEmptySubTree(&mpCompartmentSubtree); pObject = pModel->getObject(CCopasiObjectName("Reference=Avogadro Constant")); if (filter(classes, pObject)) { pItem = new Q3ListViewItem(this, "Avogadro Constant"); treeItems[pItem] = pObject; } pObject = pModel->getObject(CCopasiObjectName("Reference=Quantity Conversion Factor")); if (filter(classes, pObject)) { pItem = new Q3ListViewItem(this, "Quantity Conversion Factor"); treeItems[pItem] = pObject; } // find all model matrices const CMatrix<C_FLOAT64> &StoiMatrix = pModel->getStoi(); if (StoiMatrix.array()) { pObject = pModel->getObject(CCopasiObjectName("Array=Stoichiometry(ann)")); if (filter(classes, pObject)) { // pItem = new QListViewItem(matrixSubtree, "Stoichiometry(ann)"); pItem = new Q3ListViewItem(mpModelMatrixSubtree, FROM_UTF8(pObject->getObjectName())); treeItems[pItem] = pObject; } } const CMatrix<C_FLOAT64> &RedStoiMatrix = pModel->getRedStoi(); if (RedStoiMatrix.array()) { pObject = pModel->getObject(CCopasiObjectName("Array=Reduced stoichiometry(ann)")); if (filter(classes, pObject)) { // pItem = new QListViewItem(matrixSubtree, "Reduced stoichiometry(ann)"); pItem = new Q3ListViewItem(mpModelMatrixSubtree, FROM_UTF8(pObject->getObjectName())); treeItems[pItem] = pObject; } } const CMatrix<C_FLOAT64> &LinkMatrix = pModel->getL0(); if (LinkMatrix.array()) { pObject = pModel->getObject(CCopasiObjectName("Array=Link matrix(ann)")); if (filter(classes, pObject)) { // pItem = new QListViewItem(matrixSubtree, "Link matrix(ann)"); pItem = new Q3ListViewItem(mpModelMatrixSubtree, FROM_UTF8(pObject->getObjectName())); treeItems[pItem] = pObject; } } removeEmptySubTree(&mpModelMatrixSubtree); // find all result matrices // Metabolic Control Analysis CCopasiTask *task; assert(CCopasiRootContainer::getDatamodelList()->size() > 0); CCopasiDataModel* pDataModel = (*CCopasiRootContainer::getDatamodelList())[0]; assert(pDataModel != NULL); // MCA task = dynamic_cast<CCopasiTask*>((*pDataModel->getTaskList())["Metabolic Control Analysis"]); try { if (task && task->updateMatrices()) { //for mca the result is in the method CMCAMethod* pMethod = dynamic_cast<CMCAMethod *>(task->getMethod()); const CCopasiContainer::objectMap * pObjects = & pMethod->getObjects(); CCopasiContainer::objectMap::const_iterator its = pObjects->begin(); CArrayAnnotation *ann; for (; its != pObjects->end(); ++its) { ann = dynamic_cast<CArrayAnnotation*>(its->second); if (!ann) continue; if (!ann->isEmpty() && filter(classes, ann)) { pItem = new Q3ListViewItem(this->mpResultMCASubtree, FROM_UTF8(ann->getObjectName())); treeItems[pItem] = ann; } } } } catch (...) {} // Steady State task = dynamic_cast<CCopasiTask *>((*pDataModel->getTaskList())["Steady-State"]); try { if (task && task->updateMatrices()) { //for steady state the results are in the task const CCopasiContainer::objectMap * pObjects = & task->getObjects(); CCopasiContainer::objectMap::const_iterator its = pObjects->begin(); CArrayAnnotation *ann; for (; its != pObjects->end(); ++its) { ann = dynamic_cast<CArrayAnnotation*>(its->second); if (!ann) continue; if (!ann->isEmpty() && filter(classes, ann)) { pItem = new Q3ListViewItem(this->mpResultSteadyStateSubtree, FROM_UTF8(ann->getObjectName())); treeItems[pItem] = ann; } } } } catch (...) {} // Sensitivities task = dynamic_cast<CCopasiTask *>((*pDataModel->getTaskList())["Sensitivities"]); try { if (task && task->updateMatrices()) { //for sensitivities the result is in the problem CSensProblem *sens = dynamic_cast<CSensProblem *>(task->getProblem()); const CCopasiContainer::objectMap * pObjects = & sens->getObjects(); CCopasiContainer::objectMap::const_iterator its = pObjects->begin(); CArrayAnnotation *ann; for (; its != pObjects->end(); ++its) { ann = dynamic_cast<CArrayAnnotation*>(its->second); if (!ann) continue; if (!ann->isEmpty() && filter(classes, ann)) { pItem = new Q3ListViewItem(this->mpResultSensitivitySubtree, FROM_UTF8(ann->getObjectName())); treeItems[pItem] = (CCopasiObject *) ann; } } } } catch (...) {} removeEmptySubTree(&mpResultMCASubtree); removeEmptySubTree(&mpResultSensitivitySubtree); removeEmptySubTree(&mpResultSteadyStateSubtree); removeEmptySubTree(&mpResultMatrixSubtree); if (selectionMode() == Q3ListView::NoSelection) { // see if some objects are there, if yes set to single selection Q3ListViewItemIterator it = Q3ListViewItemIterator(this); while (it.current()) { if (treeItems.find(it.current()) != treeItems.end()) { setSelectionMode(Q3ListView::Single); setCurrentItem(it.current()); it.current()->setSelected(true); Q3ListViewItem* parent = it.current()->parent(); while (parent) { parent->setOpen(true); parent = parent->parent(); } break; } ++it; } } }
bool CExperimentSet::calculateStatistics() { mDependentObjectiveValues.resize(mDependentObjects.size()); mDependentObjectiveValues = 0.0; mDependentRMS.resize(mDependentObjects.size()); mDependentRMS = 0.0; mDependentErrorMean.resize(mDependentObjects.size()); mDependentErrorMean = 0.0; mDependentErrorMeanSD.resize(mDependentObjects.size()); mDependentErrorMeanSD = 0.0; mDependentDataCount.resize(mDependentObjects.size()); mDependentDataCount = 0; mValidValueCount = 0; // calculate the per experiment and per dependent value statistics. std::vector< CExperiment * >::iterator it = mpExperiments->begin() + mNonExperiments; std::vector< CExperiment * >::iterator end = mpExperiments->end(); size_t i, Count; C_FLOAT64 Tmp; for (; it != end; ++it) { (*it)->calculateStatistics(); const CObjectInterface ** ppObject = mDependentObjects.array(); const CObjectInterface ** ppEnd = ppObject + mDependentObjects.size(); for (i = 0; ppObject != ppEnd; ++ppObject, ++i) { Count = (*it)->getColumnValidValueCount(*ppObject); if (Count) { mDependentObjectiveValues[i] += (*it)->getObjectiveValue(*ppObject); Tmp = (*it)->getRMS(*ppObject); mDependentRMS[i] += Tmp * Tmp * Count; mDependentErrorMean[i] += (*it)->getErrorSum(*ppObject); mDependentDataCount[i] += Count; mValidValueCount += Count; } } } size_t imax = mDependentObjects.size(); for (i = 0; i != imax; i++) { Count = mDependentDataCount[i]; if (Count) { mDependentRMS[i] = sqrt(mDependentRMS[i] / Count); mDependentErrorMean[i] /= Count; } else { mDependentRMS[i] = std::numeric_limits<C_FLOAT64>::quiet_NaN(); mDependentErrorMean[i] = std::numeric_limits<C_FLOAT64>::quiet_NaN(); } } it = mpExperiments->begin() + mNonExperiments; // We need to loop again to calculate the std. deviation. for (; it != end; ++it) //over experiments { const CObjectInterface ** ppObject = mDependentObjects.array(); const CObjectInterface ** ppEnd = ppObject + mDependentObjects.size(); for (i = 0; ppObject != ppEnd; ++ppObject, ++i) { Count = (*it)->getColumnValidValueCount(*ppObject); if (Count) mDependentErrorMeanSD[i] += (*it)->getErrorMeanSD(*ppObject, mDependentErrorMean[i]); } } for (i = 0; i != imax; i++) { Count = mDependentDataCount[i]; if (Count) mDependentErrorMeanSD[i] = sqrt(mDependentErrorMeanSD[i] / Count); else mDependentErrorMeanSD[i] = std::numeric_limits<C_FLOAT64>::quiet_NaN(); } // This is the time to call the output handler to plot the fitted points. for (it = mpExperiments->begin() + mNonExperiments, imax = 0; it != end; ++it) imax = std::max(imax, (*it)->getDependentData().numRows()); CCopasiTask * pParentTask = dynamic_cast< CCopasiTask *>(getObjectAncestor("Task")); assert(pParentTask != NULL); for (i = 0; i < imax; i++) { for (it = mpExperiments->begin() + mNonExperiments; it != end; ++it) (*it)->updateFittedPointValues(i, (*it)->getExperimentType() != CTaskEnum::Task::timeCourse); //false means without simulated data pParentTask->output(COutputInterface::AFTER); } //now the extended time series for (it = mpExperiments->begin() + mNonExperiments, imax = 0; it != end; ++it) imax = std::max(imax, (*it)->extendedTimeSeriesSize()); for (i = 0; i < imax; i++) { for (it = mpExperiments->begin() + mNonExperiments; it != end; ++it) { if ((*it)->getExperimentType() == CTaskEnum::Task::timeCourse) { (*it)->updateFittedPointValuesFromExtendedTimeSeries(i); } } pParentTask->output(COutputInterface::AFTER); } return true; }