本文整理汇总了C++中CEvent::getTriggerExpressionPtr方法的典型用法代码示例。如果您正苦于以下问题:C++ CEvent::getTriggerExpressionPtr方法的具体用法?C++ CEvent::getTriggerExpressionPtr怎么用?C++ CEvent::getTriggerExpressionPtr使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CEvent
的用法示例。
在下文中一共展示了CEvent::getTriggerExpressionPtr方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: duplicateEvent
void CModelExpansion::duplicateEvent(CEvent* source, const std::string & index, const SetOfModelElements & sourceSet, ElementsMap & emap)
{
//if the source object has already been duplicated: do nothing
if (emap.exists(source))
return;
CEvent* newObj = NULL;
if (expressionContainsObject(source->getTriggerExpressionPtr(), sourceSet)
|| expressionContainsObject(source->getDelayExpressionPtr(), sourceSet))
{
//we need to duplicate the event itself (because the trigger refers to a duplicated object)
//try creating the object until we find a name that is not yet used
std::ostringstream infix;
do
{
std::ostringstream name;
name << source->getObjectName() << infix.str() << index;
newObj = mpModel->createEvent(name.str());
infix << "_";
}
while (!newObj);
//add duplicated object to the map
emap.add(source, newObj);
//now do the trigger
newObj->setTriggerExpression(source->getTriggerExpression());
newObj->getTriggerExpressionPtr()->compile(); //I don't know why this is necessary
updateExpression(newObj->getTriggerExpressionPtr(), index, sourceSet, emap);
//delay
newObj->setDelayExpression(source->getDelayExpression());
newObj->getDelayExpressionPtr()->compile(); //I don't know why this is necessary
updateExpression(newObj->getDelayExpressionPtr(), index, sourceSet, emap);
newObj->setDelayAssignment(source->getDelayAssignment());
}
else
{
newObj = source; //no copying necessary
//add duplicated object to the map
emap.add(source, newObj);
}
//now the event assignments...
size_t i;
for (i = 0; i < source->getAssignments().size(); ++i)
{
const CEventAssignment* pSourceAssignment = source->getAssignments()[i];
//const CModelEntity * pSourceTarget = dynamic_cast<const CModelEntity * >(CCopasiRootContainer::getKeyFactory()->get(pSourceAssignment->getTargetKey()));
if (sourceSet.contains(pSourceAssignment->getTargetKey()))
{
//we assume that the duplicate of the target object already exists.
//this should be true since events are duplicated last.
if (!emap.exists(pSourceAssignment->getTargetKey()))
continue;
//create duplicate of assignment (this can be either in the original event or in the
//duplicate of an event)
CEventAssignment * pNewAssignment = new CEventAssignment(emap.getDuplicateKey(pSourceAssignment->getTargetKey()));
newObj->getAssignments().add(pNewAssignment, true);
//we do an assumption:
//It should not happen that the assignment expression contains a reference to an object that is duplicated,
//but the assignment target is not duplicated.
//now copy the expression
pNewAssignment->setExpression(pSourceAssignment->getExpression());
pNewAssignment->getExpressionPtr()->compile();
updateExpression(pNewAssignment->getExpressionPtr(), index, sourceSet, emap);
}
}
newObj->setNotes(source->getNotes());
newObj->setMiriamAnnotation(source->getMiriamAnnotation(), newObj->getKey(), source->getKey());
}
示例2: mergeMetabolites
bool CModelMerging::mergeMetabolites(std::string toKey, std::string key)
{
bool info = false;
//merge in the relevant reactions
size_t i, imax = mpModel->getReactions().size();
size_t j, jmax;
for (i = 0; i < imax; ++i)
{
CReaction * reac = &mpModel->getReactions()[i];
jmax = reac->getChemEq().getSubstrates().size();
for (j = 0; j < jmax; ++j)
{
CChemEqElement * subst = const_cast< CChemEqElement * >(&reac->getChemEq().getSubstrates()[j]);
if (subst->getMetabolite()->getKey() == key)
subst->setMetabolite(toKey);
}
jmax = reac->getChemEq().getProducts().size();
for (j = 0; j < jmax; ++j)
{
CChemEqElement * prod = const_cast< CChemEqElement * >(&reac->getChemEq().getProducts()[j]);
if (prod->getMetabolite()->getKey() == key)
prod->setMetabolite(toKey);
}
jmax = reac->getChemEq().getModifiers().size();
for (j = 0; j < jmax; ++j)
{
CChemEqElement * modif = const_cast< CChemEqElement * >(&reac->getChemEq().getModifiers()[j]);
if (modif->getMetabolite()->getKey() == key)
modif->setMetabolite(toKey);
}
//change parameters of the kinetic function
for (j = 0; j < reac->getFunctionParameters().size(); ++j)
{
switch (reac->getFunctionParameters()[j]->getUsage())
{
case CFunctionParameter::SUBSTRATE:
case CFunctionParameter::PRODUCT:
case CFunctionParameter::MODIFIER:
//translate the metab keys
{
//we assume that only SUBSTRATE, PRODUCT, MODIFIER can be vectors
size_t k, kmax = reac->getParameterMappings()[j].size();
for (k = 0; k < kmax; ++k)
if (reac->getParameterMappings()[j][k] == key)
reac->getParameterMappings()[j][k] = toKey;
}
break;
case CFunctionParameter::TIME:
break;
case CFunctionParameter::VOLUME:
// ??? TODO : have to ask
break;
case CFunctionParameter::PARAMETER:
break;
default:
return info;
break;
}
}
}
imax = mpModel->getEvents().size();
for (i = 0; i < imax; ++i)
{
CEvent * event = &mpModel->getEvents()[i];
if (!event) return info;
/* merge in trigger expressions */
CExpression* pExpression = event->getTriggerExpressionPtr();
if (pExpression == NULL) return info;
if (!mergeInExpression(toKey, key, pExpression)) return info;
pExpression = event->getDelayExpressionPtr();
//.........这里部分代码省略.........