bool CReportDefinition::preCompileTable(const std::vector< CCopasiContainer * > & listOfContainer) { bool success = true; mHeaderVector.clear(); mBodyVector.clear(); mFooterVector.clear(); std::vector<CRegisteredObjectName>::const_iterator it = mTableVector.begin(); std::vector<CRegisteredObjectName>::const_iterator end = mTableVector.end(); CCopasiDataModel* pDataModel = getObjectDataModel(); CCopasiObject * pObject; for (; it != end; ++it) { pObject = pDataModel->ObjectFromName(listOfContainer, *it); if (pObject != NULL) { addTableElement(pObject); } else { CCopasiMessage(CCopasiMessage::WARNING, MCCopasiTask + 6, it->c_str()); } } return success; }
bool CFitProblem::initialize() { mHaveStatistics = false; if (!COptProblem::initialize()) { while (CCopasiMessage::peekLastMessage().getNumber() == MCOptimization + 5 || CCopasiMessage::peekLastMessage().getNumber() == MCOptimization + 7) CCopasiMessage::getLastMessage(); if (CCopasiMessage::getHighestSeverity() > CCopasiMessage::WARNING && CCopasiMessage::peekLastMessage().getNumber() != MCCopasiMessage + 1) return false; } std::vector< CCopasiContainer * > ContainerList; ContainerList.push_back(getObjectAncestor("Vector")); CCopasiDataModel* pDataModel = getObjectDataModel(); assert(pDataModel != NULL); mpSteadyState = dynamic_cast< CSteadyStateTask * >(pDataModel->ObjectFromName(ContainerList, *mpParmSteadyStateCN)); if (mpSteadyState == NULL) mpSteadyState = static_cast<CSteadyStateTask *>((*pDataModel->getTaskList())["Steady-State"]); // We only need to initialize the steady-state task if steady-state data is present. if (mpExperimentSet->hasDataForTaskType(CCopasiTask::steadyState)) { mpSteadyState->initialize(CCopasiTask::NO_OUTPUT, NULL, NULL); } mpTrajectory = dynamic_cast< CTrajectoryTask * >(pDataModel->ObjectFromName(ContainerList, *mpParmTimeCourseCN)); if (mpTrajectory == NULL) mpTrajectory = static_cast<CTrajectoryTask *>((*pDataModel->getTaskList())["Time-Course"]); // We only need to initialize the trajectory task if time course data is present. if (mpExperimentSet->hasDataForTaskType(CCopasiTask::timeCourse)) { mpTrajectory->initialize(CCopasiTask::NO_OUTPUT, NULL, NULL); } ContainerList.clear(); ContainerList.push_back(mpModel); CFitTask * pTask = dynamic_cast<CFitTask *>(getObjectParent()); if (pTask) { ContainerList.push_back(pTask); ContainerList.push_back(mpSteadyState); ContainerList.push_back(mpTrajectory); } if (!mpExperimentSet->compile(ContainerList)) return false; // Build a matrix of experiment and experiment local items. mExperimentUpdateMethods.resize(mpExperimentSet->getExperimentCount(), mpOptItems->size()); mExperimentUpdateMethods = NULL; mExperimentInitialRefreshes.resize(mpExperimentSet->getExperimentCount()); std::vector< std::set< const CCopasiObject * > > ObjectSet; ObjectSet.resize(mpExperimentSet->getExperimentCount()); std::vector<COptItem * >::iterator it = mpOptItems->begin(); std::vector<COptItem * >::iterator end = mpOptItems->end(); std::vector<COptItem * >::iterator itTmp; CFitItem * pItem; unsigned C_INT32 i, imax; unsigned C_INT32 j; unsigned C_INT32 Index; imax = mSolutionVariables.size(); mFisher.resize(imax, imax); mpFisherMatrix->resize(); mCorrelation.resize(imax, imax); mpCorrelationMatrix->resize(); for (j = 0; it != end; ++it, j++) { pItem = static_cast<CFitItem *>(*it); pItem->updateBounds(mpOptItems->begin()); std::string Annotation = pItem->getObjectDisplayName(); imax = pItem->getExperimentCount(); if (imax == 0) { for (i = 0, imax = mpExperimentSet->getExperimentCount(); i < imax; i++) { mExperimentUpdateMethods(i, j) = pItem->COptItem::getUpdateMethod(); ObjectSet[i].insert(pItem->getObject()); } } else { Annotation += "; {" + pItem->getExperiments() + "}"; for (i = 0; i < imax; i++) { if ((Index = mpExperimentSet->keyToIndex(pItem->getExperiment(i))) == C_INVALID_INDEX) return false; mExperimentUpdateMethods(Index, j) = pItem->COptItem::getUpdateMethod(); ObjectSet[Index].insert(pItem->getObject()); }; } mpFisherMatrix->setAnnotationString(0, j, Annotation); mpFisherMatrix->setAnnotationString(1, j, Annotation); mpCorrelationMatrix->setAnnotationString(0, j, Annotation); mpCorrelationMatrix->setAnnotationString(1, j, Annotation); } for (i = 0, imax = mpExperimentSet->getExperimentCount(); i < imax; i++) mExperimentInitialRefreshes[i] = mpModel->buildInitialRefreshSequence(ObjectSet[i]); // Build a matrix of experiment and constraint items; mExperimentConstraints.resize(mpExperimentSet->getExperimentCount(), mpConstraintItems->size()); mExperimentConstraints = NULL; mExperimentConstraintRefreshes.resize(mpExperimentSet->getExperimentCount()); ObjectSet.clear(); ObjectSet.resize(mpExperimentSet->getExperimentCount()); it = mpConstraintItems->begin(); end = mpConstraintItems->end(); CFitConstraint * pConstraint; std::set< const CCopasiObject * >::const_iterator itDepend; std::set< const CCopasiObject * >::const_iterator endDepend; for (j = 0; it != end; ++it, j++) { pConstraint = static_cast<CFitConstraint *>(*it); itDepend = pConstraint->getDirectDependencies().begin(); endDepend = pConstraint->getDirectDependencies().end(); imax = pConstraint->getExperimentCount(); if (imax == 0) { for (i = 0, imax = mpExperimentSet->getExperimentCount(); i < imax; i++) { mExperimentConstraints(i, j) = pConstraint; ObjectSet[i].insert(itDepend, endDepend); } } else { for (i = 0; i < imax; i++) { if ((Index = mpExperimentSet->keyToIndex(pConstraint->getExperiment(i))) == C_INVALID_INDEX) return false; mExperimentConstraints(Index, j) = pConstraint; ObjectSet[Index].insert(itDepend, endDepend); }; } } for (i = 0, imax = mpExperimentSet->getExperimentCount(); i < imax; i++) mExperimentConstraintRefreshes[i] = CCopasiObject::buildUpdateSequence(ObjectSet[i], mpModel->getUptoDateObjects()); mExperimentDependentValues.resize(mpExperimentSet->getDataPointCount()); if (!mpSteadyState) { mpSteadyState = dynamic_cast< CSteadyStateTask * >((*pDataModel->getTaskList())["Steady-State"]); if (mpSteadyState == NULL) fatalError(); setValue("Steady-State", mpSteadyState->getKey()); mpSteadyState->initialize(CCopasiTask::NO_OUTPUT, NULL, NULL); ContainerList.push_back(mpSteadyState); } if (!mpTrajectory) { mpTrajectory = dynamic_cast< CTrajectoryTask * >((*pDataModel->getTaskList())["Time-Course"]); if (mpTrajectory == NULL) fatalError(); setValue("Time-Course", mpTrajectory->getKey()); mpTrajectory->initialize(CCopasiTask::NO_OUTPUT, NULL, NULL); ContainerList.push_back(mpTrajectory); } pdelete(mpTrajectoryProblem); mpTrajectoryProblem = new CTrajectoryProblem(*static_cast<CTrajectoryProblem *>(mpTrajectory->getProblem())); static_cast<CTrajectoryProblem *>(mpTrajectory->getProblem())->setStepNumber(1); pdelete(mpInitialState); mpInitialState = new CState(mpModel->getInitialState()); return true; }