Skip to content

tools.rovir_fov: ROVir coil compression from non-Cartesian samples, rejecting what lies past the field of view - #168

Merged
mcencini merged 2 commits into
mainfrom
claude/project-thread-oc1ecw
Nov 3, 2026
Merged

mcencini merged 2 commits into
mainfrom
claude/project-thread-oc1ecw

Conversation

@mcencini

@mcencini mcencini commented Nov 3, 2026 •

Copy link
Copy Markdown
Collaborator

Requested by Matteo · project thread

Gridding onto the field of view without oversampling (iGROG) folds whatever lies past its edge, such as the neck below a head, back into the image. tools.rovir_fov(kspace, traj, coils, keep=None, size=48, extent=2.0, iterations=15, return_energy=False) removes that interference before the recon:

  • Each channel's k-space centre is gridded with linop.NUFFT's adjoint onto a size image covering extent × the FOV. One Pipe-Menon density (estimate_density) serves every readout.
  • The wanted region is the FOV and the interference region is the rest. Both are geometric, with no anatomy mask.
  • The existing tools.rovir (BART) solves the generalized eigenproblem, and its orthonormalization keeps whitened noise white.
  • The keep best directions are kept, then SVD-compressed to coils. ROVir alone keeps weak directions: on Deli-CS it kept only a fifth of the brain's energy.
  • It returns a matrix for tools.ccapply(p=coils), and optionally the energy kept and the outside/inside ratio.

This moves mri2qmap.data.rovir from mcencini/mri2qmap-bartorch v0.2.0 upstream. There, ROVir 36 then SVD to 6 coils removes the iGROG top-of-head aliasing on val_case000.

Tests: tests/test_rovir_fov.py checks two things on a synthetic case. A source past the FOV seen by its own coils is rejected while one inside is kept, with orthonormal virtual coils. And ccapply applies the matrix as the stated virtual coils. Locally, with the 0.0.19 library, test_rovir_fov, test_docs, test_docstrings, test_namespace and test_tools gave 139 passed and 2 skipped. A docs row has been added in docs/api/tools.md.

🤖 Generated with Claude Code

https://claude.ai/code/session_01MFB6QMaLvegueS4t1MX9Hz

…s outside the field of view, then SVD to the virtual coils (WIP)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MFB6QMaLvegueS4t1MX9Hz
@mcencini mcencini self-assigned this Nov 3, 2026
…d from them all

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MFB6QMaLvegueS4t1MX9Hz
@mcencini
mcencini marked this pull request as ready for review November 3, 2026 18:34
@codecov

codecov Bot commented Nov 3, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

@mcencini
mcencini merged commit e723d80 into main Nov 3, 2026
18 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants