271 std::vector<InvToken> tokens;
274 int nSrc =
static_cast<int>(estimate.
data.rows());
275 int nTimes =
static_cast<int>(estimate.
data.cols());
276 int srcStride = stride(nSrc, options.
maxSources);
278 int effSrc = (nSrc + srcStride - 1) / srcStride;
279 int effTime = (nTimes + timeStride - 1) / timeStride;
283 est +=
static_cast<size_t>(effSrc) * (1 + effTime) + effSrc + 6;
288 est +=
static_cast<size_t>(estimate.
positions.rows()) * 3 + 2;
296 tokens.emplace_back(methodToTokenId(estimate.
method));
310 for (
int s = 0; s < nSrc; s += srcStride)
314 for (
int s = 0; s < nSrc; s += srcStride) {
316 for (
int t = 0; t < nTimes; t += timeStride)
325 int nPos =
static_cast<int>(estimate.
positions.rows());
326 for (
int i = 0; i < nPos; i += srcStride) {
339 for (
const auto& grp : estimate.
couplings) {
345 for (
size_t k = 0; k < grp.gridIndices.size(); ++k) {
347 if (k < grp.moments.size()) {
348 tokens.emplace_back(
InvTokenId::MomX,
static_cast<float>(grp.moments[k].x()));
349 tokens.emplace_back(
InvTokenId::MomY,
static_cast<float>(grp.moments[k].y()));
350 tokens.emplace_back(
InvTokenId::MomZ,
static_cast<float>(grp.moments[k].z()));
355 int n =
static_cast<int>(grp.gridIndices.size());
356 for (
int r = 0; r < n && r < grp.correlations.rows(); ++r)
357 for (
int c = r; c < n && c < grp.correlations.cols(); ++c)
397 tokens.emplace_back(measureToTokenId(conn.measure));
404 int n =
static_cast<int>(conn.matrix.rows());
406 for (
int r = 0; r < n; ++r)
407 for (
int c = 0; c < n; ++c)
428 const size_t len = tokens.size();
430 auto advance = [&]() ->
const InvToken& {
431 return tokens[pos++];
449 if (isMethodToken(peek()))
450 est.
method = tokenIdToMethod(advance().
id);
451 else if (isSpaceToken(peek()))
453 else if (isOrientToken(peek()))
465 std::vector<int> verts;
466 std::vector<std::vector<float>> rows;
485 verts.push_back(
static_cast<int>(g.
value));
489 std::vector<float> row;
491 row.push_back(tokens[pos].value);
494 rows.push_back(std::move(row));
503 int effSrc =
static_cast<int>(rows.size());
504 int effTime = effSrc > 0 ?
static_cast<int>(rows[0].size()) : 0;
505 if (effSrc > 0 && effTime > 0) {
506 est.
data = MatrixXd(effSrc, effTime);
507 for (
int s = 0; s < effSrc; ++s)
508 for (
int t = 0; t < effTime && t < static_cast<int>(rows[s].size()); ++t)
509 est.
data(s, t) =
static_cast<double>(rows[s][t]);
511 est.
vertices = VectorXi(
static_cast<int>(verts.size()));
512 for (
int i = 0; i < static_cast<int>(verts.size()); ++i)
519 std::vector<Vector3f> posVec;
523 p.x() = tokens[pos].value;
524 p.y() = tokens[pos + 1].value;
525 p.z() = tokens[pos + 2].value;
535 est.
positions = MatrixX3f(
static_cast<int>(posVec.size()), 3);
536 for (
int i = 0; i < static_cast<int>(posVec.size()); ++i)
537 est.
positions.row(i) = posVec[i].transpose();
567 m.x() =
static_cast<double>(tokens[pos].value);
568 m.y() =
static_cast<double>(tokens[pos + 1].value);
569 m.z() =
static_cast<double>(tokens[pos + 2].value);
577 for (
int r = 0; r < n; ++r) {
579 double v =
static_cast<double>(tokens[pos].value);
686 int freqIdx = 0, timeIdx = 0;
690 if (isMeasureToken(ct.
id)) {
714 n =
static_cast<int>(ct.
value);
717 conn.
matrix = MatrixXd(n, n);
718 for (
int r = 0; r < n; ++r)
720 conn.
matrix(r, c) =
static_cast<double>(tokens[pos].value);
742 if (est.
data.cols() > 0 && est.
tstep > 0) {
743 est.
times = RowVectorXf(est.
data.cols());
745 for (
int i = 1; i < est.
times.size(); ++i)