200 std::vector<InvToken> tokens;
203 int nSrc =
static_cast<int>(estimate.
data.rows());
204 int nTimes =
static_cast<int>(estimate.
data.cols());
205 int srcStride = stride(nSrc, options.
maxSources);
207 int effSrc = (nSrc + srcStride - 1) / srcStride;
208 int effTime = (nTimes + timeStride - 1) / timeStride;
212 est +=
static_cast<size_t>(effSrc) * (1 + effTime) + effSrc + 6;
217 est +=
static_cast<size_t>(estimate.
positions.rows()) * 3 + 2;
225 tokens.emplace_back(methodToTokenId(estimate.
method));
239 for (
int s = 0; s < nSrc; s += srcStride)
243 for (
int s = 0; s < nSrc; s += srcStride) {
245 for (
int t = 0; t < nTimes; t += timeStride)
254 int nPos =
static_cast<int>(estimate.
positions.rows());
255 for (
int i = 0; i < nPos; i += srcStride) {
268 for (
const auto &grp : estimate.
couplings) {
274 for (
size_t k = 0; k < grp.gridIndices.size(); ++k) {
276 if (k < grp.moments.size()) {
277 tokens.emplace_back(
InvTokenId::MomX,
static_cast<float>(grp.moments[k].x()));
278 tokens.emplace_back(
InvTokenId::MomY,
static_cast<float>(grp.moments[k].y()));
279 tokens.emplace_back(
InvTokenId::MomZ,
static_cast<float>(grp.moments[k].z()));
284 int n =
static_cast<int>(grp.gridIndices.size());
285 for (
int r = 0; r < n && r < grp.correlations.rows(); ++r)
286 for (
int c = r; c < n && c < grp.correlations.cols(); ++c)
326 tokens.emplace_back(measureToTokenId(conn.measure));
333 int n =
static_cast<int>(conn.matrix.rows());
335 for (
int r = 0; r < n; ++r)
336 for (
int c = 0; c < n; ++c)
357 const size_t len = tokens.size();
359 auto advance = [&]() ->
const InvToken& {
360 return tokens[pos++];
377 if (isMethodToken(peek()))
378 est.
method = tokenIdToMethod(advance().
id);
379 else if (isSpaceToken(peek()))
381 else if (isOrientToken(peek()))
386 if (pos < len) ++pos;
392 int nSrc = 0, nTime = 0;
393 std::vector<int> verts;
394 std::vector<std::vector<float>> rows;
400 nSrc =
static_cast<int>(g.
value); ++pos;
402 nTime =
static_cast<int>(g.
value); ++pos;
411 verts.push_back(
static_cast<int>(g.
value)); ++pos;
414 std::vector<float> row;
416 row.push_back(tokens[pos].value);
419 rows.push_back(std::move(row));
424 if (pos < len) ++pos;
427 int effSrc =
static_cast<int>(rows.size());
428 int effTime = effSrc > 0 ?
static_cast<int>(rows[0].size()) : 0;
429 if (effSrc > 0 && effTime > 0) {
430 est.
data = MatrixXd(effSrc, effTime);
431 for (
int s = 0; s < effSrc; ++s)
432 for (
int t = 0; t < effTime && t < static_cast<int>(rows[s].size()); ++t)
433 est.
data(s, t) =
static_cast<double>(rows[s][t]);
435 est.
vertices = VectorXi(
static_cast<int>(verts.size()));
436 for (
int i = 0; i < static_cast<int>(verts.size()); ++i)
443 std::vector<Vector3f> posVec;
447 p.x() = tokens[pos].value;
448 p.y() = tokens[pos + 1].value;
449 p.z() = tokens[pos + 2].value;
456 if (pos < len) ++pos;
458 est.
positions = MatrixX3f(
static_cast<int>(posVec.size()), 3);
459 for (
int i = 0; i < static_cast<int>(posVec.size()); ++i)
460 est.
positions.row(i) = posVec[i].transpose();
477 if (grp.
tmin == 0.0f && grp.
tmax == 0.0f)
483 nIdx =
static_cast<int>(ct.
value); ++pos;
488 m.x() =
static_cast<double>(tokens[pos].value);
489 m.y() =
static_cast<double>(tokens[pos + 1].value);
490 m.z() =
static_cast<double>(tokens[pos + 2].value);
498 for (
int r = 0; r < n; ++r) {
500 double v =
static_cast<double>(tokens[pos].value);
513 if (pos < len) ++pos;
519 if (pos < len) ++pos;
553 if (pos < len) ++pos;
559 if (pos < len) ++pos;
572 int freqIdx = 0, timeIdx = 0;
576 if (isMeasureToken(ct.
id)) {
577 conn.
measure = tokenIdToMeasure(ct.
id); ++pos;
589 n =
static_cast<int>(ct.
value); ++pos;
591 conn.
matrix = MatrixXd(n, n);
592 for (
int r = 0; r < n; ++r)
594 conn.
matrix(r, c) =
static_cast<double>(tokens[pos].value);
599 if (pos < len) ++pos;
605 if (pos < len) ++pos;
614 if (est.
data.cols() > 0 && est.
tstep > 0) {
615 est.
times = RowVectorXf(est.
data.cols());
617 for (
int i = 1; i < est.
times.size(); ++i)