RemoveAllGlobalQuantityRowsCommand::RemoveAllGlobalQuantityRowsCommand(CQGlobalQuantityDM * pGlobalQuantityDM, const QModelIndex&)
{
  mpGlobalQuantityDM = pGlobalQuantityDM;

  assert(CCopasiRootContainer::getDatamodelList()->size() > 0);
  CCopasiDataModel* pDataModel = (*CCopasiRootContainer::getDatamodelList())[0];
  assert(pDataModel != NULL);
  CModel * pModel = pDataModel->getModel();

  assert(pModel != NULL);

  for (int i = 0; i != pGlobalQuantityDM->rowCount() - 1; ++i)
    {

      UndoGlobalQuantityData *data = new UndoGlobalQuantityData();

      if (pModel->getModelValues()[i])
        {
          data->setName(pModel->getModelValues()[i]->getObjectName());
          data->setStatus(pModel->getModelValues()[i]->getStatus());

          if (pModel->getModelValues()[i]->getStatus() != CModelEntity::ASSIGNMENT)
            {
              data->setInitialValue(pModel->getModelValues()[i]->getInitialValue());
            }

          // set expression
          if (pModel->getModelValues()[i]->getStatus() != CModelEntity::FIXED)
            {
              data->setExpression(pModel->getModelValues()[i]->getExpression());
            }

          // set initial expression
          if (pModel->getModelValues()[i]->getStatus() != CModelEntity::ASSIGNMENT)
            {
              data->setInitialExpression(pModel->getModelValues()[i]->getInitialExpression());
            }

          setDependentObjects(pModel->getModelValues()[i]->getDeletedObjects());
          data->setReactionDependencyObjects(getReactionData());
          data->setSpecieDependencyObjects(getSpecieData());
          data->setEventDependencyObjects(getEventData());
          mpGlobalQuantityData.append(data);
        }
    }

  mType = GLOBALQUANTITYREMOVEALL;
  setEntityType("Global Quantity");
  this->setText(removeAllGlobalQuantityRowsText());
}
Exemplo n.º 2
0
DeleteSpecieCommand::DeleteSpecieCommand(CQSpeciesDetail *pSpecieDetail)
{
  mpSpecieDetail = pSpecieDetail;
  mFirstTime = true;
  mpSpecieData = new UndoSpecieData();

  mpReactionData = new  QList <UndoReactionData*>();
  mpGlobalQuantityData = new  QList <UndoGlobalQuantityData*>();
  mpEventData = new  QList <UndoEventData*>();

  std::string sName = mpSpecieDetail->mpMetab->getObjectName();
  mpSpecieData->setName(sName);

  mpSpecieData->setStatus(mpSpecieDetail->mpMetab->getStatus());

  if (mpSpecieDetail->mpMetab->getStatus() != CModelEntity::ASSIGNMENT)
    {
      mpSpecieData->setIConc(mpSpecieDetail->mpMetab->getInitialConcentration());
    }

  if (mpSpecieDetail->mpMetab->getStatus() ==  CModelEntity::ASSIGNMENT || mpSpecieDetail->mpMetab->getStatus() == CModelEntity::ODE)
    {
      mpSpecieData->setExpression(mpSpecieDetail->mpMetab->getExpression());
    }

  // set initial expression
  if (mpSpecieDetail->mpMetab->getStatus() != CModelEntity::ASSIGNMENT)
    {
      mpSpecieData->setInitialExpression(mpSpecieDetail->mpMetab->getInitialExpression());
    }

  //store to be deleted data
  //QList<UndoReactionData*> *dependencyObjects = new QList<UndoReactionData*>();
  setDependentObjects(mpSpecieDetail->mpMetab->getDeletedObjects());
  mpSpecieData->setReactionDependencyObjects(getReactionData());
  mpSpecieData->setGlobalQuantityDependencyObjects(getGlobalQuantityData());
  mpSpecieData->setEventDependencyObjects(getEventData());

  mType = SPECIEDELETE;
  setEntityType("Species");
  setName(sName);
  this->setText(deleteSpecieText(sName));
}
RemoveCompartmentRowsCommand::RemoveCompartmentRowsCommand(QModelIndexList rows, CQCompartmentDM * pCompartmentDM, const QModelIndex&)
{
  mpCompartmentDM = pCompartmentDM;
  mRows = rows;
  mFirstTime = true;

  assert(CCopasiRootContainer::getDatamodelList()->size() > 0);
  CCopasiDataModel* pDataModel = (*CCopasiRootContainer::getDatamodelList())[0];
  assert(pDataModel != NULL);
  CModel * pModel = pDataModel->getModel();

  assert(pModel != NULL);

  QModelIndexList::const_iterator i;

  for (i = rows.begin(); i != rows.end(); ++i)
    {
      UndoCompartmentData *data = new UndoCompartmentData();

      if (!pCompartmentDM->isDefaultRow(*i) && pModel->getCompartments()[(*i).row()])
        {
          mpSpecieData = new QList <UndoSpecieData*>();
          mpReactionData = new  QList <UndoReactionData*>();
          mpGlobalQuantityData = new  QList <UndoGlobalQuantityData*>();
          mpEventData = new  QList <UndoEventData*>();
          data->setName(pModel->getCompartments()[(*i).row()]->getObjectName());
          data->setStatus(pModel->getCompartments()[(*i).row()]->getStatus());
          data->setInitialValue(pModel->getCompartments()[(*i).row()]->getInitialValue());
          setDependentObjects(pModel->getCompartments()[(*i).row()]->getDeletedObjects());
          data->setReactionDependencyObjects(getReactionData());
          data->setSpecieDependencyObjects(getSpecieData());
          data->setGlobalQuantityDependencyObjects(getGlobalQuantityData());
          data->setEventDependencyObjects(getEventData());

          mpCompartmentData.append(data);
        }
    }

  this->setText(removeCompartmentRowsText());

  mType = COMPARTMENTREMOVE;
  setEntityType("Compartment");
}
DeleteGlobalQuantityCommand::DeleteGlobalQuantityCommand(CQModelValue *pModelValue)
{
  mpModelValue = pModelValue;
  mFirstTime = true;
  mpGlobalQuantityData = new UndoGlobalQuantityData();
  std::string sName = mpModelValue->mpModelValue->getObjectName();
  mpGlobalQuantityData->setName(sName);
  mpGlobalQuantityData->setStatus(mpModelValue->mpModelValue->getStatus());

  if (mpModelValue->mpModelValue->getStatus() != CModelEntity::ASSIGNMENT)
    {
      mpGlobalQuantityData->setInitialValue(mpModelValue->mpModelValue->getInitialValue());
    }

  if (mpModelValue->mpModelValue->getStatus() != CModelEntity::FIXED)
    {
      mpGlobalQuantityData->setExpression(mpModelValue->mpModelValue->getExpression());
    }

  // set initial expression
  if (mpModelValue->mpModelValue->getStatus() != CModelEntity::ASSIGNMENT)
    {
      mpGlobalQuantityData->setInitialExpression(mpModelValue->mpModelValue->getInitialExpression());
    }

  //store to be deleted data
  setDependentObjects(mpModelValue->mpModelValue->getDeletedObjects());
  mpGlobalQuantityData->setReactionDependencyObjects(getReactionData());
  mpGlobalQuantityData->setSpecieDependencyObjects(getSpecieData());
  mpGlobalQuantityData->setEventDependencyObjects(getEventData());

  mType = GLOBALQUANTITYDELETE;
  setEntityType("Global Quantity");
  this->setText(deleteGlobalQuantityText(sName));
  setName(sName);
}
Exemplo n.º 5
0
void Transform::expand(    CycleData& cyData, EventData& evData,
        map< string, WaveformTable>& wftMap,
        vector<string> pinList, double timescale) {

    assert( timescale >= 0.0);
    assert( timescale <= 1.0);

    if(timescale == 0.0) {
        //
        // Calculate timescale
        //
        vector<double> res;
        map<string, WaveformTable>::iterator iter;
        for(iter = wftMap.begin(); iter != wftMap.end(); iter++) {
            res.push_back( iter->second.getEventResolution());
        }
        double minRes = *(min_element( res.begin(), res.end()));
        double exponent = ceil( log10(1/minRes));
        timescale = pow( 10.0, -exponent);

        //applog.debug << "Calculating timescale : " << timescale << endl;
        //applog.debug << "minRes = " << minRes << " exponent = " << exponent << endl;

        assert( timescale >= 0.0);
        assert( timescale <= 1.0);
    }

    //if(debug)
        //cyData.print( applog.debug);

    SignalHeader signalHeader = cyData.getSignalHeader();

    vector<string> pinNames;
    for(unsigned int i=0; i < signalHeader.size(); i++) {
        pinNames.push_back( signalHeader[i].name);
    }

    evData.setSignalHeader( signalHeader);

    unsigned long numVectors = cyData.getNumVectors();

    unsigned long long periodBeginTimestamp = 0;
    unsigned long loopSum = 0;
    for(unsigned long vecNum=0; vecNum < numVectors; vecNum++) {
        CycleData::PeriodData periodData;
        cyData.getPeriodData( periodData, vecNum);


//        periodData.print( applog.debug);

        WaveformTable wft = wftMap[periodData.wftRef];
        double period = wft.period.value;

        // Need my_round due to fractional error
        unsigned long long periodTimestamp = (unsigned long long) my_round(period/timescale);

        EventData periodEventData;

        getEventData( periodData, wft, periodEventData, pinNames, timescale);

//        periodEventData.print( applog.debug);
        
        for(unsigned int i=0; i <= periodData.loopCount; i++) {
            // append event data
            //applog.debug << "Adding events at timestamp " << periodBeginTimestamp << endl;
            evData.add( periodEventData, periodBeginTimestamp);
//            periodBeginTimestamp = (unsigned long long) (((vecNum + 1 + loopSum + i)*period)/timescale);
            periodBeginTimestamp = (unsigned long long) ((vecNum + 1 + loopSum + i)*periodTimestamp);
        }
        loopSum += periodData.loopCount;
    }

    evData.setTimescale( timescale);
}