bool aService::copyFile(const QString& srcFileName, const QString& destFileName, bool replaceIfExists) { QFile srcFile(srcFileName); QFile destFile(destFileName); if(!srcFile.exists()) { aLog::print(aLog::MT_ERROR, QObject::tr("aService copy: source file %1 not exist").arg(srcFileName)); return false; } if(destFile.exists() && !replaceIfExists) { aLog::print(aLog::MT_ERROR, QObject::tr("aService copy: replace destination file %1").arg(destFileName)); return false; } if(!srcFile.open( IO_ReadOnly )) { aLog::print(aLog::MT_ERROR, QObject::tr("aService copy: source file %1 open for read error").arg(srcFileName)); return false; } if(!destFile.open( IO_WriteOnly)) { aLog::print(aLog::MT_ERROR, QObject::tr("aService copy: destination file %1 open for write error").arg(destFileName)); return false; } const int BUFFER_SIZE = 1024; Q_INT8 buffer[BUFFER_SIZE]; QDataStream srcStream(&srcFile); QDataStream destStream(&destFile); while(!srcStream.atEnd()) { int i = 0; while(!srcStream.atEnd() && i < BUFFER_SIZE) { srcStream >> buffer[i]; i++; } for(int k = 0; k < i; k++) { destStream << buffer[k]; } } srcFile.close(); destFile.close(); aLog::print(aLog::MT_INFO, QObject::tr("aService copy file %1 to %2 ok").arg(srcFileName).arg(destFileName)); return true; }
// Copy, recursively if necessary, the source to the destination bool Foam::cp(const fileName& src, const fileName& dest) { // Make sure source exists. if (!exists(src)) { return false; } fileName destFile(dest); // Check type of source file. if (src.type() == fileName::FILE) { // If dest is a directory, create the destination file name. if (destFile.type() == fileName::DIRECTORY) { destFile = destFile/src.name(); } // Make sure the destination directory exists. if (!isDir(destFile.path()) && !mkDir(destFile.path())) { return false; } // Open and check streams. std::ifstream srcStream(src.c_str()); if (!srcStream) { return false; } std::ofstream destStream(destFile.c_str()); if (!destStream) { return false; } // Copy character data. char ch; while (srcStream.get(ch)) { destStream.put(ch); } // Final check. if (!srcStream.eof() || !destStream) { return false; } } else if (src.type() == fileName::DIRECTORY) { // If dest is a directory, create the destination file name. if (destFile.type() == fileName::DIRECTORY) { destFile = destFile/src.component(src.components().size() -1); } // Make sure the destination directory exists. if (!isDir(destFile) && !mkDir(destFile)) { return false; } // Copy files fileNameList contents = readDir(src, fileName::FILE, false); forAll(contents, i) { if (POSIX::debug) { Info<< "Copying : " << src/contents[i] << " to " << destFile/contents[i] << endl; } // File to file. cp(src/contents[i], destFile/contents[i]); } // Copy sub directories. fileNameList subdirs = readDir(src, fileName::DIRECTORY); forAll(subdirs, i) { if (POSIX::debug) { Info<< "Copying : " << src/subdirs[i] << " to " << destFile << endl; } // Dir to Dir. cp(src/subdirs[i], destFile); } } return true; }
/** reads the configuration file .cuterc*/ void readConfig() { QDir dir = QDir::home(); if( !dir.cd(".cute") ){ dir.cd(".cute"); QFileInfo fi(dir, ".cute"); if(fi.exists()){ if(fi.isDir()) QMessageBox::warning(qApp->mainWidget(), "CUTE", "Cannot cd into .cute"); else QMessageBox::warning(qApp->mainWidget(), "CUTE", "Cannot create directory"); } else{ QMessageBox::information(qApp->mainWidget(), "CUTE", "Creating ~/.cute directory"); if(!dir.mkdir(".cute")) QMessageBox::information(qApp->mainWidget(), "CUTE", "Could not create ~/.cute directory"); else{ dir.cd(".cute"); if(!dir.mkdir("scripts")) QMessageBox::information(qApp->mainWidget(), "CUTE", "Could not create ~/.cute/scripts directory"); if(!dir.mkdir("macros")) QMessageBox::information(qApp->mainWidget(), "CUTE", "Could not create ~/.cute/macros directory"); if(!dir.mkdir("sessions")) QMessageBox::information(qApp->mainWidget(), "CUTE", "Could not create ~/.cute/sessions directory"); } } } // if cute version >= 0.1.6 langs dir is required if( !QDir(QDir::homeDirPath()+QDir::separator()+".cute"+QDir::separator()+"langs").exists() ) { QDir destDir = QDir::home(); destDir.cd(".cute"); destDir.mkdir("langs"); destDir.cd("langs"); QDir srcDir(LANG_DIR); QString data; QStringList dirList = srcDir.entryList(); for( int i = 2; i < dirList.count(); i++) if( QFileInfo(srcDir.absPath()+QDir::separator()+dirList[i]).isFile()) { QFile srcFile(srcDir.absPath()+QDir::separator()+dirList[i]); QFile destFile(destDir.absPath()+QDir::separator()+dirList[i]); if(destFile.exists()) continue; QTextStream destStream(&destFile); QTextStream srcStream(&srcFile); srcFile.open(IO_ReadOnly); destFile.open(IO_WriteOnly); data = srcStream.read(); destStream << data; srcFile.close(); destFile.close(); } } QFile file(QDir::homeDirPath()+"/.cuterc"); if(!file.exists()){ QMessageBox::information(qApp->mainWidget(), "CUTE", "Creating ~/.cuterc"); file.open(IO_ReadOnly); file.close(); return; } //FILE *c_file = fopen("/home/heiko/.cuterc", "r"); //PyRun_SimpleFile(c_file, ".cuterc"); QString const_cmd("execfile(\".cuterc\")\n"); dir = QDir::current(); QDir::setCurrent( QDir::homeDirPath() ); char *cmd = new char[1024]; strcpy(cmd, const_cmd.latin1()); PyRun_SimpleString(cmd); // read language config files QDir langDir = QDir(QDir::homeDirPath()+QDir::separator()+".cute"+QDir::separator()+"langs"); QStringList langEntryList = langDir.entryList(); QString langFile; for( int i = 2; i < langEntryList.count(); i++ ){ QString langFile = langDir.absPath()+QDir::separator()+langEntryList[i]; QFileInfo fi(langDir, langFile); if(fi.isFile()){ langFile = QString("execfile(\"")+langFile+QString("\")\n"); char *cmd = strdup(langFile); PyRun_SimpleString( cmd ); } } QDir::setCurrent( dir.absPath() ); }
bool UiController::NewExperimenLoadfromCSV(const QString &fileName) { QFile file(fileName); if(!file.open(QIODevice::ReadOnly)) return false; QTextStream srcStream(&file); /* очень нужная штука для расшифровки кодировки*/ QTextCodec *codec = QTextCodec::codecForName("Windows-1251"); if (codec!= NULL) { srcStream.setCodec(codec); } else { assert(1); } /* очень нужная штука для расшифровки кодировки*/ QStringList evaluateFunction; int replicaDelimiter; int factorCount; int generalFactorCount; int replica_row_count; QString tmp_str = srcStream.readLine(); QString function = tmp_str.split(QRegExp(";"))[1]; QString measure = ""; if ("" != function) { measure = srcStream.readLine().split(QRegExp(";"))[1]; evaluateFunction << function << measure; } else { evaluateFunction << "" << ""; } QString tmp; QStringList descriptions; QStringList tmpList; std::vector<double> *center; std::vector<double> *delta; double num; tmp = srcStream.readLine(); if ("" == tmp.split(QRegExp(";"))[1]) { tmp = srcStream.readLine(); } if ("" != tmp) { tmp = tmp.split(QRegExp(";"))[1]; factorCount = tmp.toInt(); tmp = srcStream.readLine().split(QRegExp(";"))[1]; replica_row_count = tmp.toInt(); tmp = srcStream.readLine().split(QRegExp(";"))[1]; replicaDelimiter = tmp.toInt(); tmp = srcStream.readLine().split(QRegExp(";"))[1]; generalFactorCount = tmp.toInt(); srcStream.readLine(); center = new std::vector<double>(factorCount); delta = new std::vector<double>(factorCount); for(size_t i = 0; i < factorCount; i++) { tmpList = srcStream.readLine().split(QRegExp(";")); tmp = ExperimentTable::doubleWithDot(tmpList[1]); num = tmp.toDouble(); center->at(i) = num; } srcStream.readLine(); for(size_t i = 0; i < factorCount; i++) { tmpList = srcStream.readLine().split(QRegExp(";")); tmp = ExperimentTable::doubleWithDot(tmpList[1]); num = tmp.toDouble(); delta->at(i) = num*2; } quint64 descrCount; tmp = srcStream.readLine().split(QRegExp(";"))[1]; descrCount = tmp.toULongLong(); srcStream.readLine(); if(descrCount > 0) { for(size_t i = 0; i < descrCount; i++) { tmpList = srcStream.readLine().split(QRegExp(";")); QString d = ExperimentTable::doubleWithDot(tmpList[1]);; descriptions << d.replace("\"",""); } } QString intLevString = srcStream.readLine().split(QRegExp(";"))[1]; _interactionLevel = intLevString.toInt(); } // Model Type bool isMax = true; double strideParameter = 0.50; int numberStride = 7; double interestAllowedDeviation = 30; tmp = srcStream.readLine(); tmp = tmp.split(QRegExp(";"))[1]; if("MATHMODEL" == tmp) { _ModelType = MATHMODEL; } else { srcStream.readLine(); tmp = srcStream.readLine(); tmp = tmp.split(QRegExp(";"))[1]; bool isMax = tmp.toInt(); tmp = srcStream.readLine(); tmp = ExperimentTable::doubleWithDot(tmp.split(QRegExp(";"))[1]); double strideParameter = tmp.toDouble(); tmp = srcStream.readLine(); tmp = tmp.split(QRegExp(";"))[1]; int numberStride = tmp.toInt(); tmp = srcStream.readLine(); tmp = ExperimentTable::doubleWithDot(tmp.split(QRegExp(";"))[1]); double interestAllowedDeviation = tmp.toDouble(); _ModelType = EXTRSEARCH; } quint64 size; vector<vector<YInfo> > m_values; tmp = srcStream.readLine(); if ("" != tmp) { tmp = tmp.split(QRegExp(";"))[1]; _paral = tmp.toULongLong(); srcStream.readLine(); ResponcesSourseFunction *src = new ResponcesSourseFunction(); src->ActualFactNum = generalFactorCount; src->FactNum = factorCount; src->MinFactNum = -1; src->parall = _paral; src->PFEnum = pow(2., src->FactNum); src->Descriptions = descriptions; src->FactDivergences = *delta; src->FactValues = *center; if ("" == function) { src->SetEvaluateFunction("",""); } else { QString tmpstr=function; if ("degrees" == measure) { tmpstr=src->CheckFormulaForTrinometricFunctions(tmpstr); } src->SetEvaluateFunction(function,tmpstr); } src->DrobRepl=2./3; _dataSrc = src; _experimentTable = ExperimentTable::createExperimentTable(ReplicaGradient, factorCount, replicaDelimiter, _interactionLevel, evaluateFunction.at(0), evaluateFunction.at(1), _ModelType); _experimentTable->setIsMax(isMax); _experimentTable->setStrideParameter(strideParameter); _experimentTable->setNumberStride(numberStride); _experimentTable->setInterestAllowedDeviation(interestAllowedDeviation); _experimentTable->x().setFactorsDescriptions(descriptions); assert(_dataSrc->inputsCount() == _experimentTable->x().count()); assert(_dataSrc->actualInputsCount() == _experimentTable->x().generalFactorCount()); assert(_experimentTable->rowCount() >= pow(2., _dataSrc->actualInputsCount())); _experimentTable->x().setFactorsDescriptions(_dataSrc->getDescriptions()); for(int i = 0; i < _dataSrc->inputsCount(); i++) { _experimentTable->x().setXcenter(i, _dataSrc->centerFor(i)); double min, max; _dataSrc->intervalFor(i, &min, &max); _experimentTable->x().setXdelta(i, max / 2.); } if ("" == evaluateFunction.at(0)) { m_values.resize(replica_row_count); for(size_t i = 0; i < replica_row_count; i++) { tmpList = srcStream.readLine().split(QRegExp(";")); if (_paral + 1 == tmpList.length()) { for(size_t j = 0; j < _paral; j++) { double value; bool IsTrusted; tmp = ExperimentTable::doubleWithDot(tmpList[1 + j]); value = tmp.toDouble(); YInfo yi; yi.Value = value; yi.IsTrusted = true; m_values[i].push_back(yi); } _experimentTable->y().set_at(i, m_values[i]); //add it to table } else { for(size_t j = 0; j < _paral; j++) { double value; bool IsTrusted; if (tmpList.length() > j+1) { tmp = ExperimentTable::doubleWithDot(tmpList[1 + j]); value = tmp.toDouble(); } else { value = 0; } YInfo yi; yi.Value = value; yi.IsTrusted = true; m_values[i].push_back(yi); } _experimentTable->y().set_at(i, m_values[i]); //add it to table } } } else { for(int i = 0; i < _experimentTable->rowCount(); i++) { std::vector<int> coords; for(int j = 0; j < _experimentTable->x().count(); j++) coords.push_back((int)_experimentTable->x().norm_at(j, i)); std::vector<double> yy = _dataSrc->getYdata(coords); //request y data for coords. std::vector<YInfo> info; for(size_t j = 0; j < yy.size(); j++) { YInfo inf; inf.IsTrusted = true; inf.Value = yy[j]; info.push_back(inf); } _experimentTable->y().set_at(i, info); //add it to table } } _view->updateInputs(*_experimentTable); if (_isFormulaModel) { _view->updateYY(*_experimentTable); } this->calcY(0.2); this->calcB(0.2); } if (MATHMODEL == _ModelType) { _view->setOptimumDesabled(); } return true; }
bool UiController::loadModel(const QString &fileName) { if (fileName=="") return false; //_experimentTable->load(fileName.toAscii().data()); QFile file(fileName); if(!file.open(QIODevice::ReadOnly)) return false; QTextStream srcStream(&file); /* очень нужная штука для расшифровки кодировки*/ QTextCodec *codec = QTextCodec::codecForName("Windows-1251"); if (codec!= NULL) { srcStream.setCodec(codec); } else { assert(1); } int ModelType; srcStream >> ModelType; if (0 == ModelType) { _ModelType = EXTRSEARCH; } else { _ModelType = MATHMODEL; } _experimentTable = ExperimentTable::createExperimentTable(ReplicaGradient, 2, 1, 1, "", "grad"); bool r = _experimentTable->load(fileName.toAscii().data()); if(r) { size_t factors = _experimentTable->x().count(); std::vector<double> d, v; for(size_t i = 0; i < factors; i++) { d.push_back(_experimentTable->x().xDelta((int)i) * 2); v.push_back(_experimentTable->x().xCenter((int)i)); } QString displayFunction=""; QString cornerMetric=""; QStringList EvalFuncData; EvalFuncData.append(_experimentTable->getEvaluateFunction()); if (EvalFuncData.count()>0) { displayFunction =_experimentTable->getEvaluateFunction().at(0); cornerMetric = _experimentTable->getEvaluateFunction().at(1); } setDataSource(_experimentTable->x().generalFactorCount(), factors, v, d, _experimentTable->x().factorsDescriptions(), displayFunction, cornerMetric ); _interactionLevel = _experimentTable->x().getInteractionLevel(); if ("" != _experimentTable->getEvaluateFunction().at(0)) { //init _experimentTable from data source dataSrc int replicaDelim = pow(2., _dataSrc->inputsCount()) / pow(2., _dataSrc->actualInputsCount()); QString displayFunction1 = _dataSrc->getEvaluateFunction().at(0); QString conerMeasure = _dataSrc->getEvaluateFunction().at(1); _experimentTable = ExperimentTable::createExperimentTable(ReplicaGradient, _dataSrc->inputsCount(), replicaDelim, _interactionLevel, displayFunction1, conerMeasure); assert(_dataSrc->inputsCount() == _experimentTable->x().count()); assert(_dataSrc->actualInputsCount() == _experimentTable->x().generalFactorCount()); assert(_experimentTable->rowCount() >= pow(2., _dataSrc->actualInputsCount())); _experimentTable->x().setFactorsDescriptions(_dataSrc->getDescriptions()); for(int i = 0; i < _dataSrc->inputsCount(); i++) { _experimentTable->x().setXcenter(i, _dataSrc->centerFor(i)); double min, max; _dataSrc->intervalFor(i, &min, &max); _experimentTable->x().setXdelta(i, max / 2.); } for(int i = 0; i < _experimentTable->rowCount(); i++) { std::vector<int> coords; for(int j = 0; j < _experimentTable->x().count(); j++) coords.push_back((int)_experimentTable->x().norm_at(j, i)); std::vector<double> yy = _dataSrc->getYdata(coords); //request y data for coords. std::vector<YInfo> info; for(size_t j = 0; j < yy.size(); j++) { YInfo inf; inf.IsTrusted = true; inf.Value = yy[j]; info.push_back(inf); } _experimentTable->y().set_at(i, info); //add it to table } _view->updateInputs(*_experimentTable); if (_isFormulaModel) _view->updateYY(*_experimentTable); return true; } else { if (EvalFuncData.count()>0) { if (""!=EvalFuncData.at(0)) { for(int i = 0; i < _experimentTable->rowCount(); i++) { std::vector<int> coords; for(int j = 0; j < _experimentTable->x().count(); j++) coords.push_back((int)_experimentTable->x().norm_at(j, i)); std::vector<double> yy = _dataSrc->getYdata(coords); //request y data for coords. std::vector<YInfo> info; for(size_t j = 0; j < yy.size(); j++) { YInfo inf; inf.IsTrusted = true; inf.Value = yy[j]; info.push_back(inf); } _experimentTable->y().set_at(i, info); //add it to table } } } _paral = _experimentTable->y().getParal(); _interactionLevel = _experimentTable->x().getInteractionLevel(); _modelHasData = true; _view->updateInputs(*_experimentTable); _view->updateBcoefs(*_experimentTable); _view->updateYY(*_experimentTable); //_view->updateGr(*_experimentTable); } } return r; }