[ANN] Four new fMRI-related packages: CIFTI.jl, WatershedParcellation.jl, and more

For anyone working with surface space fMRI data (e.g. CIFTI and GIFTI files), I’d like to announce that I’ve finished up some substantial updates to my CIFTI.jl package mentioned above, and to related packages in my fMRI mini-ecosystem: CorticalSurfaces, CorticalParcels, and, especially, ObservableCortex. (WatershershedParcellation has not yet gotten an update but it will soon.)

Here’s a link to my original announcement about ObservableCortex, a set of routines that attempt to leverage my surface space abstractions from those other packages and expose the power of interactive/animated 3d plotting with Makie and Observables in this domain. When I first made this package a couple years ago, I didn’t know enough about how Observables actually worked in order to properly expose its interface, but I hope I’ve remedied that now. I’m also working on an set of much more extensive demos.

These packages came out of my time working with a neuroimaging research group from 2019 to 2024. When I made them a couple years ago, the idea was to build the set of tools that I wish I’d had from the beginning in my work there. Now I’ve taken the time to go back through the packages, update them, and hopefully bring them closer to full realization of their potential. I hope some people may find them useful.

To address what has changed. In all packages I’ve made method signatures more generic and have cleaned up dependencies. CIFTI and ObservableCortex have had the heaviest breaking updates and new features so I’ll list those here:

CIFTI v2.0.0

Breaking changes

  • Heavily revised error-handling throughout

New features

  • New accessors eltype, brainstructure, data, index_types, and istransposed
  • New examples/lazy.jl to demonstrate how you could use the package for lazy or incremental reading of CIFTI data (for example if the file(s) are too big or too numerous to fit in RAM)

ObservableCortex v0.4.0

Breaking changes

  • Renamed OrthographicView → Panel, OrthographicLayout → PanelLayout, and Montage.views → Montage.panels
  • Updated dependencies, especially CIFTI for v2.0, and CorticalSurfaces and CorticalParcels for v0.11
  • Made method signatures more generic where possible

New features

  • Montage now contains a plots component that stores a matrix of Makie.Mesh plots, which are accessible now by getindex(m::Montage, ...) (see README for more info)
  • plot!(m::Montage, ...) now accepts an Observable as the values to plot
  • Improved tests and extended demos (the latter still in progress)