void VisualizerCSV::initData() { VisualizerAbstract::initData(); readCSV(mpOMVisualBase->getModelFile(), mpOMVisualBase->getPath()); double *time = read_csv_dataset(mpCSVData, "time"); if (time) { mpTimeManager->setStartTime(time[0]); mpTimeManager->setEndTime(time[mpCSVData->numsteps - 1]); } }
double VisualizerCSV::omcGetVarValue(const char* varName, double time) { double *timeDataSet = read_csv_dataset(mpCSVData, "time"); for (int i = 0 ; i < mpCSVData->numsteps ; i++) { if (timeDataSet[i] == time) { double *varDataSet = read_csv_dataset(mpCSVData, varName); if (varDataSet) { return varDataSet[i]; } else { std::cout<<"Did not get variable from result file. Variable name is "<<std::string(varName)<<std::endl; } } else if ((time > timeDataSet[i]) && (i + 1 < mpCSVData->numsteps) && (time < timeDataSet[i + 1])) { // interpolate double *varDataSet = read_csv_dataset(mpCSVData, varName); if (varDataSet) { return (varDataSet[i] + varDataSet[i + 1]) / 2; } else { std::cout<<"Did not get variable from result file. Variable name is "<<std::string(varName)<<std::endl; } } } return 0.0; }
static void* SimulationResultsImpl__readDataset(const char *filename, void *vars, int dimsize, int suggestReadAllVars, SimulationResult_Globals* simresglob, int runningTestsuite) { const char *msg[2] = {"",""}; void *res,*col; char *var; double *vals; int i; if (UNKNOWN_PLOT == SimulationResultsImpl__openFile(filename,simresglob)) { return NULL; } res = mmc_mk_nil(); switch (simresglob->curFormat) { case MATLAB4: { ModelicaMatVariable_t *mat_var; if (dimsize == 0) { dimsize = simresglob->matReader.nrows; } else if (simresglob->matReader.nrows != dimsize) { fprintf(stderr, "dimsize: %d, rows %d\n", dimsize, simresglob->matReader.nrows); c_add_message(NULL,-1, ErrorType_scripting, ErrorLevel_error, gettext("readDataset(...): Expected and actual dimension sizes do not match."), NULL, 0); return NULL; } if (suggestReadAllVars) { omc_matlab4_read_all_vals(&simresglob->matReader); } while (MMC_NILHDR != MMC_GETHDR(vars)) { var = MMC_STRINGDATA(MMC_CAR(vars)); vars = MMC_CDR(vars); mat_var = omc_matlab4_find_var(&simresglob->matReader,var); if (mat_var == NULL) { msg[0] = runningTestsuite ? SystemImpl__basename(filename) : filename; msg[1] = var; c_add_message(NULL,-1, ErrorType_scripting, ErrorLevel_error, gettext("Could not read variable %s in file %s."), msg, 2); return NULL; } else if (mat_var->isParam) { col=mmc_mk_nil(); for (i=0;i<dimsize;i++) col=mmc_mk_cons(mmc_mk_rcon((mat_var->index<0)?-simresglob->matReader.params[abs(mat_var->index)-1]:simresglob->matReader.params[abs(mat_var->index)-1]),col); res = mmc_mk_cons(col,res); } else { vals = omc_matlab4_read_vals(&simresglob->matReader,mat_var->index); col=mmc_mk_nil(); for (i=0;i<dimsize;i++) col=mmc_mk_cons(mmc_mk_rcon(vals[i]),col); res = mmc_mk_cons(col,res); } } return res; } case PLT: { return read_ptolemy_dataset(filename,vars,dimsize); } case CSV: { while (MMC_NILHDR != MMC_GETHDR(vars)) { var = MMC_STRINGDATA(MMC_CAR(vars)); vars = MMC_CDR(vars); vals = simresglob->csvReader ? read_csv_dataset(simresglob->csvReader,var) : NULL; if (vals == NULL) { msg[0] = runningTestsuite ? SystemImpl__basename(filename) : filename; msg[1] = var; c_add_message(NULL,-1, ErrorType_scripting, ErrorLevel_error, gettext("Could not read variable %s in file %s."), msg, 2); return NULL; } else { col=mmc_mk_nil(); for (i=0;i<dimsize;i++) { col=mmc_mk_cons(mmc_mk_rcon(vals[i]),col); } res = mmc_mk_cons(col,res); } } return res; } default: msg[0] = PlotFormatStr[simresglob->curFormat]; c_add_message(NULL,-1, ErrorType_scripting, ErrorLevel_error, gettext("readDataSet() not implemented for plot format: %s\n"), msg, 1); return NULL; } }