void CQExperimentData::slotExperimentAdd() { mShowError = false; CExperiment Experiment(mpDataModel); CExperiment * pExperiment = mpExperimentSetCopy->addExperiment(Experiment); size_t First, Last; mpFileInfo->getFirstUnusedSection(First, Last); pExperiment->setFirstRow((unsigned C_INT32) First); pExperiment->setLastRow((unsigned C_INT32) Last); pExperiment->setHeaderRow((unsigned C_INT32) First); pExperiment->setFileName(mpFileInfo->getFileName()); pExperiment->setNumColumns((unsigned C_INT32) pExperiment->guessColumnNumber()); mpFileInfo->sync(); mpBoxExperiment->addItem(FROM_UTF8(pExperiment->getObjectName())); mpBoxExperiment->setCurrentRow(mpBoxExperiment->count() - 1); syncExperiments(); mpBtnExperimentAdd->setEnabled(mpFileInfo->getFirstUnusedSection(First, Last)); mShowError = true; }
void CQExperimentData::slotOK() { mpBtnOK->setFocus(); // Force the save all current changes. slotExperimentChanged(NULL, NULL); CExperiment * pExperiment; size_t i = mpExperimentSet->getExperimentCount() - 1; for (; i != C_INVALID_INDEX; i--) { pExperiment = dynamic_cast<CExperiment *>(CCopasiRootContainer::getKeyFactory()->get(mKeyMap[mpExperimentSet->getExperiment(i)->CCopasiParameter::getKey()])); if (pExperiment) { *mpExperimentSet->getExperiment(i) = *pExperiment; mpExperimentSetCopy->removeParameter(pExperiment->getObjectName()); } else mpExperimentSet->removeExperiment(i); } emit experimentChanged(); for (i = 0; i < mpExperimentSetCopy->getExperimentCount(); i++) mpExperimentSet->addExperiment(*mpExperimentSetCopy->getExperiment(i)); #ifdef COPASI_CROSSVALIDATION if (mCrossValidation) { CCrossValidationSet * pSet = static_cast< CCrossValidationSet * >(mpExperimentSet); if (QString::number(pSet->getWeight()) != mpEditWeight->text()) { pSet->setWeight(mpEditWeight->text().toDouble()); } if (QString::number(pSet->getThreshold()) != mpEditThreshold->text()) { pSet->setThreshold(mpEditThreshold->text().toUInt()); } } #endif // COPASI_CROSSVALIDATION pdelete(mpExperimentSetCopy); accept(); }
void CFitProblem::printResult(std::ostream * ostream) const { std::ostream & os = *ostream; if (mSolutionVariables.size() == 0) { return; } os << "Objective Function Value:\t" << mSolutionValue << std::endl; os << "Standard Deviation:\t" << mSD << std::endl; CCopasiTimeVariable CPUTime = const_cast<CFitProblem *>(this)->mCPUTime.getElapsedTime(); os << "Function Evaluations:\t" << mCounter << std::endl; os << "CPU Time [s]:\t" << CCopasiTimeVariable::LL2String(CPUTime.getSeconds(), 1) << "." << CCopasiTimeVariable::LL2String(CPUTime.getMilliSeconds(true), 3) << std::endl; os << "Evaluations/Second [1/s]:\t" << mCounter / (C_FLOAT64)(CPUTime.getMilliSeconds() / 1e3) << std::endl; os << std::endl; std::vector< COptItem * >::const_iterator itItem = mpOptItems->begin(); std::vector< COptItem * >::const_iterator endItem = mpOptItems->end(); CFitItem * pFitItem; CExperiment * pExperiment; unsigned C_INT32 i, j; os << "\tParameter\tValue\tGradient\tStandard Deviation" << std::endl; for (i = 0; itItem != endItem; ++itItem, i++) { os << "\t" << (*itItem)->getObjectDisplayName(); pFitItem = static_cast<CFitItem *>(*itItem); if (pFitItem->getExperimentCount() != 0) { os << " ("; for (j = 0; j < pFitItem->getExperimentCount(); j++) { if (j) os << ", "; pExperiment = dynamic_cast< CExperiment * >(CCopasiRootContainer::getKeyFactory()->get(pFitItem->getExperiment(j))); if (pExperiment) os << pExperiment->getObjectName(); } os << ")"; } if (mHaveStatistics) { os << ":\t" << mSolutionVariables[i]; os << "\t" << mGradient[i]; os << "\t" << mParameterSD[i]; } else { os << ":\t" << std::numeric_limits<C_FLOAT64>::quiet_NaN(); os << "\t" << std::numeric_limits<C_FLOAT64>::quiet_NaN(); os << "\t" << std::numeric_limits<C_FLOAT64>::quiet_NaN(); } os << std::endl; } os << std::endl; if (mHaveStatistics) { os << "Parameter Interdependence:" << std::endl; os << " " << mFisher << std::endl; unsigned C_INT32 k, kmax = mpExperimentSet->getExperimentCount(); for (k = 0; k < kmax; k++) { mpExperimentSet->getExperiment(k)->printResult(ostream); os << std::endl; } } }
bool CQFittingWidget::saveTask() { CFitTask * pTask = dynamic_cast< CFitTask * >(mpTask); if (!pTask) return false; saveCommon(); saveMethod(); CFitProblem * pProblem = dynamic_cast<CFitProblem *>(mpTask->getProblem()); if (!pProblem) return false; std::map<std::string, std::string> ExperimentMap; std::map<std::string, std::string> CrossValidationMap; // Save experiment set CExperimentSet * pExperimentSet = dynamic_cast<CExperimentSet *>(pProblem->getGroup("Experiment Set")); std::string Name; CExperiment * pExperiment; size_t i, imax; std::set<CExperiment *> DealtWith; for (i = pExperimentSet->getExperimentCount() - 1; i != C_INVALID_INDEX; i--) { pExperiment = dynamic_cast<CExperiment *>(CCopasiRootContainer::getKeyFactory()->get(mExperimentKeyMap[pExperimentSet->getExperiment(i)->CCopasiParameter::getKey()])); if (pExperiment && pExperiment == mpExperimentSet->getExperiment(pExperiment->getObjectName())) { if (!(*pExperimentSet->getExperiment(i) == *pExperiment)) { *pExperimentSet->getExperiment(i) = *pExperiment; mChanged = true; } DealtWith.insert(pExperiment); } else { mExperimentKeyMap.erase(pExperimentSet->getExperiment(i)->CCopasiParameter::getKey()); pExperimentSet->removeExperiment(i); mChanged = true; } } for (i = 0, imax = mpExperimentSet->getExperimentCount(); i < imax; i++) { pExperiment = mpExperimentSet->getExperiment(i); if (DealtWith.count(pExperiment)) continue; pExperiment = pExperimentSet->addExperiment(*pExperiment); mExperimentKeyMap[pExperiment->CCopasiParameter::getKey()] = mpExperimentSet->getExperiment(i)->CCopasiParameter::getKey(); mChanged = true; } // We need to invert the key map for saving! std::map<std::string, std::string>::iterator it = mExperimentKeyMap.begin(); std::map<std::string, std::string>::iterator end = mExperimentKeyMap.end(); for (; it != end; ++it) ExperimentMap[it->second] = it->first; // Save cross validation experiment set CCrossValidationSet * pCrossValidationSet = dynamic_cast<CCrossValidationSet *>(pProblem->getGroup("Validation Set")); if (pCrossValidationSet->getWeight() != mpCrossValidationSet->getWeight()) { pCrossValidationSet->setWeight(mpCrossValidationSet->getWeight()); mChanged = true; } if (pCrossValidationSet->getThreshold() != mpCrossValidationSet->getThreshold()) { pCrossValidationSet->setThreshold(mpCrossValidationSet->getThreshold()); mChanged = true; } DealtWith.clear(); for (i = pCrossValidationSet->getExperimentCount() - 1; i != C_INVALID_INDEX; i--) { pExperiment = dynamic_cast<CExperiment *>(CCopasiRootContainer::getKeyFactory()->get(mCrossValidationKeyMap[pCrossValidationSet->getExperiment(i)->CCopasiParameter::getKey()])); if (pExperiment && pExperiment == mpCrossValidationSet->getExperiment(pExperiment->getObjectName())) { if (!(*pCrossValidationSet->getExperiment(i) == *pExperiment)) { *pCrossValidationSet->getExperiment(i) = *pExperiment; mChanged = true; } DealtWith.insert(pExperiment); } else { mCrossValidationKeyMap.erase(pCrossValidationSet->getExperiment(i)->CCopasiParameter::getKey()); pCrossValidationSet->removeExperiment(i); mChanged = true; } } for (i = 0, imax = mpCrossValidationSet->getExperimentCount(); i < imax; i++) { pExperiment = mpCrossValidationSet->getExperiment(i); if (DealtWith.count(pExperiment)) continue; pExperiment = pCrossValidationSet->addExperiment(*pExperiment); mCrossValidationKeyMap[pExperiment->CCopasiParameter::getKey()] = mpCrossValidationSet->getExperiment(i)->CCopasiParameter::getKey(); mChanged = true; } // We need to invert the key map for saving! it = mCrossValidationKeyMap.begin(); end = mCrossValidationKeyMap.end(); for (; it != end; ++it) CrossValidationMap[it->second] = it->first; if (mpCheckRandomize->isChecked() != pProblem->getRandomizeStartValues()) { mChanged = true; pProblem->setRandomizeStartValues(mpCheckRandomize->isChecked()); } if (mpCreateParameterSets->isChecked() != pProblem->getCreateParameterSets()) { mChanged = true; pProblem->setCreateParameterSets(mpCreateParameterSets->isChecked()); } if (mpCheckStatistics->isChecked() != pProblem->getCalculateStatistics()) { mChanged = true; pProblem->setCalculateStatistics(mpCheckStatistics->isChecked()); } mChanged |= mpParameters->save(&ExperimentMap, &CrossValidationMap); mChanged |= mpConstraints->save(&ExperimentMap, &CrossValidationMap); assert(mpDataModel != NULL); if (mChanged) mpDataModel->changed(); mChanged = false; return true; }