//------------------------------------------------------------------------------ void LocatedEventTable::CollectData(const wxString &forCurve, RealArray &xv, RealArray &yv) { xv.clear(); yv.clear(); for (UnsignedInt i = 0; i < events.size(); ++i) { if ((events[i]->dataName == forCurve) && (events[i]->partner != NULL)) { if (events[i]->isEntry) { xv.push_back(events[i]->epoch); yv.push_back(events[i]->duration); } } } }
bool ASMu2D::getGrevilleParameters (RealArray& prm, int dir) const { if (!lrspline || dir < 0 || dir > 1) return false; prm.clear(); prm.reserve(lrspline->nBasisFunctions()); for(LR::Basisfunction *b : lrspline->getAllBasisfunctions()) prm.push_back(b->getGrevilleParameter()[dir]); return true; }
bool SplineField2D::valueGrid (RealArray& val, const int* npe) const { val.clear(); if (!basis) return false; // Compute parameter values of the visualization points std::array<RealArray,2> gpar; for (int dir = 0; dir < 2; dir++) { int nSegPerSpan = npe[dir] - 1; if (nSegPerSpan < 1) return false; RealArray::const_iterator uit = basis->basis(dir).begin(); double ucurr = 0.0, uprev = *(uit++); while (uit != basis->basis(dir).end()) { ucurr = *(uit++); if (ucurr > uprev) if (nSegPerSpan == 1) gpar[dir].push_back(uprev); else for (int i = 0; i < nSegPerSpan; i++) { double xg = (double)(2*i-nSegPerSpan)/(double)nSegPerSpan; gpar[dir].push_back(0.5*(ucurr*(1.0+xg) + uprev*(1.0-xg))); } uprev = ucurr; } if (ucurr > gpar[dir].back()) gpar[dir].push_back(ucurr); } // Evaluate the field in the visualization points val.reserve(gpar[0].size()*gpar[1].size()); for (size_t j = 0; j < gpar[1].size(); j++) for (size_t i = 0; i < gpar[0].size(); i++) { Go::BasisPtsSf spline; basis->computeBasis(gpar[0][i],gpar[1][j],spline); IntVec ip; ASMs2D::scatterInd(basis->numCoefs_u(),basis->numCoefs_v(), basis->order_u(),basis->order_v(), spline.left_idx,ip); Vector Vnod; utl::gather(ip,1,values,Vnod); val.push_back(Vnod.dot(spline.basisValues)); } return true; }
bool ASMs2D::getQuasiInterplParameters (RealArray& prm, int dir) const { if (!surf || dir < 0 || dir > 1) return false; const Go::BsplineBasis& basis = surf->basis(dir); RealArray knots_simple; basis.knotsSimple(knots_simple); prm.clear(); for (size_t i = 0; i+1 < knots_simple.size(); i++) { prm.push_back(knots_simple[i]); prm.push_back(0.5*(knots_simple[i]+knots_simple[i+1])); } prm.push_back(knots_simple.back()); return true; }
//------------------------------------------------------------------------------ void Estimator::PlotResiduals() { #ifdef DEBUG_RESIDUAL_PLOTS MessageInterface::ShowMessage("Entered PlotResiduals\n"); MessageInterface::ShowMessage("Processing plot with %d Residuals\n", measurementResiduals.size()); #endif std::vector<RealArray*> dataBlast; RealArray epochs; RealArray values; RealArray hiErrors; RealArray lowErrors; RealArray *hi = NULL, *low = NULL; for (UnsignedInt i = 0; i < residualPlots.size(); ++i) { dataBlast.clear(); epochs.clear(); values.clear(); if (showErrorBars) { hiErrors.clear(); lowErrors.clear(); if (hiLowData.size() > 0) { hi = hiLowData[0]; if (hiLowData.size() > 1) { low = hiLowData[1]; } } } // Collect residuals by plot for (UnsignedInt j = 0; j < measurementResiduals.size(); ++j) { if (residualPlots[i]->UsesData(measurementResidualID[j]) >= 0) { epochs.push_back(measurementEpochs[j]); values.push_back(measurementResiduals[j]); if (hi && showErrorBars) { hiErrors.push_back((*hi)[j]); } if (low && showErrorBars) lowErrors.push_back((*low)[j]); } } if (epochs.size() > 0) { dataBlast.push_back(&epochs); dataBlast.push_back(&values); residualPlots[i]->TakeAction("ClearData"); residualPlots[i]->Deactivate(); residualPlots[i]->SetData(dataBlast, hiErrors, lowErrors); residualPlots[i]->TakeAction("Rescale"); residualPlots[i]->Activate(); } #ifdef DEBUG_RESIDUALS // Dump the data to screen MessageInterface::ShowMessage("DataDump for residuals plot %d:\n", i); for (UnsignedInt k = 0; k < epochs.size(); ++k) { MessageInterface::ShowMessage(" %.12lf %.12lf", epochs[k], values[k]); if (hi) if (hi->size() > k) if (low) MessageInterface::ShowMessage(" + %.12lf", (*hi)[k]); else MessageInterface::ShowMessage(" +/- %.12lf", (*hi)[k]); if (low) if (low->size() > k) MessageInterface::ShowMessage(" - %.12lf", (*low)[k]); MessageInterface::ShowMessage("\n"); } #endif } }