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()); }
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); }
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); }