Skip to content

Releases: JuliaHealth/KomaMRI.jl

v0.9.2

28 Aug 20:05
cf3718b

Choose a tag to compare

KomaMRI v0.9.2

Diff since v0.9.1

This should not be a breaking release, just improvements on simulation capabilities and speed.

Main Changes

  • KomaMRICore - Faster Bloch GPU: This update improves the Bloch simulation method for GPU backends, optimizing memory usage and performance. Our tests show significant speedups in simulations (PR #537 and benchmarks).
  • KomaMRIPlots - Fixed a bug on Apple Silicon caused by Kaleido_jll (Issue #386).

Other Minor Changes

  • Documentation improvements:
    • Expanded description of the Phantom data type, how to define custom motions, and added new tutorials (PR #495).
    • Improved the "How to contribute to Koma" documentation (PR #553).
  • KomaMRIBase - Changed the rotation center from geometric center to center of gravity (PR #593).
  • KomaMRI - Temporarily disabled UI tests on Apple Silicon (macOS/ARM) since they fail without a monitor, and switched the Ubuntu test to a different Electron build due to a current error in the Blink package that blocks UI CI tests (PR #565).

Merged pull requests:

  • Custom values for brain_phantom (#484) (@gsahonero)
  • Phantom documentation (#495) (@pvillacorta)
  • Remove Kaleido_jll compat entry (#530) (@cncastillo)
  • CompatHelper: bump compat for oneAPI in [weakdeps] to 2 for package KomaMRICore, (keep existing compat) (#534) (@github-actions[bot])
  • Faster Bloch GPU (#537) (@rkierulf)
  • How to test contributions (#553) (@Stockless)
  • Modified center-images.css to avoid centering badges (#554) (@cncastillo)
  • Update Rotate displacement! functions to center coordinates before applying the rotation (#561) (@pvillacorta)
  • Restrict PlutoPlotly to version 0.5 (#562) (@Stockless)
  • CompatHelper: bump compat for PlutoPlotly in [weakdeps] to 0.6 for package KomaMRIPlots, (keep existing compat) (#563) (@github-actions[bot])
  • Pluto notebooks packages update (#564) (@Stockless)
  • Fix KomaMRI UI tests: Using unsafe electron for Ubuntu, and skipped Apple Silicon tests during CI (#565) (@Stockless)
  • Bump julia-actions/julia-format from 3 to 4 (#566) (@dependabot[bot])
  • CompatHelper: bump compat for Interpolations to 0.16 for package KomaMRIBase, (keep existing compat) (#567) (@github-actions[bot])
  • CompatHelper: bump compat for Interpolations to 0.16 for package KomaMRIPlots, (keep existing compat) (#568) (@github-actions[bot])
  • Modify Bloch_RF_accuracy test to compare against OrdinaryDiffEqTsit5 (#569) (@Stockless)
  • CompatHelper: bump compat for AcceleratedKernels to 0.4 for package KomaMRICore, (keep existing compat) (#573) (@github-actions[bot])
  • Modificaton of use: Phantom{Float64}() -> Phantom() (#577) (@Stockless)
  • Update news section for KomaMRI v0.9.1 review (#578) (@Stockless)
  • Language and Clarity Improvement (#581) (@KookiesNKareem)
  • Update BuilKite's runtests.yml to set up dev environment properly for Julia 1.11 (#585) (@Stockless)
  • Fix oneAPI bool indexing issues for Julia 1.11 (#586) (@cncastillo)
  • Fix oneAPI indexing issues (#587) (@cncastillo)
  • Add flags to Buildkite codecov process (#588) (@cncastillo)
  • Flags added to official julia-coverage (#589) (@cncastillo)
  • CompatHelper: bump compat for AMDGPU in [weakdeps] to 2 for package KomaMRICore, (keep existing compat) (#592) (@github-actions[bot])
  • Change rotation center from geometric to center of gravity (#593) (@pvillacorta)
  • Reduce the number of points (N) in heart_phantom from 21 to 10 (#594) (@pvillacorta)
  • Add binder dependencies and remove unused line in docs (#601) (@pvillacorta)
  • bump v0.9.1 to v0.9.2 (#602) (@Stockless)

Closed issues:

  • Mathematica source code missing in KomaMRI repo (#207)
  • Improve consistency in keyword args like zmin/zmax and cmin/cmax (#361)
  • Fix plotting on Apple Silicon (Kaleido_jll v0.1) (#386)
  • Improve "How to Create your Own Phantom" section (#394)
  • Add Phantom Explanation section (#395)
  • Multi-slice acquisition with 3D phantom (#474)
  • Errors when generating documentation Pluto examples using Julia 1.11 (#550)
  • Badges displayed in the wrong position (#551)
  • Proposal for Phantom Generation Interface and User Data Persistence. (#556)
  • Slice offset does not works when the frequency offset is applied to rf.signal (#557)
  • plot_phantom_map not working with PlutoPlotly v0.6^ (#559)
  • crappy image with GRE sequence (#570)
  • Remove Phantom{Float64} from examples and docs (#576)
  • Centering coordinates in Rotate displacement! functions may lead to unexpected results (#582)
  • UndefVarError: artifact_dir not defined in Kaleido_jll (#595)
  • I can't get this to install in Dockers on Windows. Is it possible? (#597)
  • Add Suppressor and Plots to .binder/Project.toml (#600)

v0.9.1

06 Mar 21:15
065130a

Choose a tag to compare

KomaMRI v0.9.1

Diff since v0.9.0

Motion-Related Features and Bug fixes
These updates primarily affect KomaMRIBase. Key changes include:

  • Bug fixes related to phantom definition, motion lists, and flow experiments (PR #499, #511, #516, #520, #536).
  • Improved motion definition, allowing for easier specification of single motion instances and flexible time spans (PR #517, #531).
  • Introduction of the TimeCurve structure, enabling arbitrary temporal motion patterns that were previously challenging to replicate (PR #531).
  • Added tests for motion-related functions to improve code coverage (PR #523).

Other Minor Changes

  • Updated and expanded documentation for contributors to Koma, providing clearer guidelines and resources (PR #509, #510, #514, #518, #543).
  • KomaMRIPlots: Standardized colormaps using QMRIColors.jl for T1 and T2 maps (PR #528).
  • KomaMRICore: Removed "hack" of using cos + i sin as oneAPI.jl didn't defined cis(x) . Now we use sincos for GPU kernel code (PR #496).

Merged pull requests:

Closed issues:

  • Add Contributing Guidelines (#209)
  • Include steps for contributing using VSCode (#233)
  • An error of 'DivideError: integer division' occurs in the internal functions of simulate when using a sequence with spiral acquisition (#409)
  • Test setting fields from a Phantom @view (#412)
  • Future: use sincos once available in oneAPI.jl (#463)
  • Use color-map recommendations for MR relaxometry maps by Quantitative MR Study Group (#473)
  • Easily define Phantom motion field composed by only one Motion instance (#481)
  • Troubles defining Float32 or empty phantoms with KomaMRI 0.9 (#498)
  • Don't run CPU benchmarks on GPU workers (#501)
  • Test Motion constructors (#512)
  • Test motion-related functions (#522)
  • Resize collaborators (#525)

v0.9.0

01 Oct 18:09
ca742f6

Choose a tag to compare

KomaMRI v0.9.0

Diff since v0.8.2

This new breaking release of Koma v0.9 has multiple new features. Thanks to @rkierulf, our GSoC student, for the GPU enhancements and @pvillacorta for the new motion definitions that enable flow and shareable phantoms.

(1) Device-agnostic kernel-based simulations (more info here)
We can now use various GPU backends with the help of KernelAbstractions.jl. This means that GPU-related packages like CUDA are not installed by default. Installation and loading of the desired GPU package is needed (for example ] add CUDA, using CUDA).

(2) New simulation method, faster and better
Now Bloch has specialized implementations for CPU and GPU and the previous implementation is in BlochSimple. This new simulation method is 4-5 times faster and uses around 80 times less memory. We have seen a 100-200x improvement in some sequences, especially if they have a lot of soft RF pulses.

(3) Distributed simulations (more info here)
We also tested distributed simulations with multiple GPUs and nodes :)

(4) GPU benchmarks (here)
We have a fancy new benchmarking page to ensure that there are no performance regressions.

(5)Phantom's including flexible motions and flow (more experimental)
You can now plot phantoms with motion and define them using mix-and-match motion definitions! More complex phantoms are possible including simple motions or arbitrary motions. Many more examples of using them are coming soon! 😄 including a realistic CFD-simulated aorta! All of this is done using our new reproducible phantom definition (HDF5-based), which enables the sharing of these phantoms with complex motion.

Hope these changes make your simulations faster! 😄 As always, if you have any problems, feel free to talk to me (@cncastillo ) in Slack or post an issue or discussion on GitHub.

Merged pull requests:

Closed issues:

  • CUDA memory problems? (#125)
  • Using BuildKite for GPU related CI? (#147)
  • Use the same functions to sample RFs in the simulation than for plotting sequence (#167)
  • Separate CI for more comprehensive results (#276)
  • Add simulate function for debugging purposes (#288)
  • Create Pluto example for fat_sat_low_field (#291)
  • Reporting of phantom spatial sampling in obj.info structure. (#322)
  • GSOC Proposal Issue Tracking: Part 1 (#349)
  • GSOC Proposal Issue Tracking: Part 2 (#350)
  • Extend GPU support to include Apple (Metal.jl), AMD (AMDGPU.jl), and Intel (OneAPI.jl) (#351)
  • Profile Bloch Simulation Method (#352)
  • Create new Kernel-based Simulation Method (#353)
  • Use @LocalMem inside future kernel-based simulation functions to speed up memory access (#354)
  • Add example of Multi-GPU simulation (#355)
  • Add example and / or support for multi-node simulation (#356)
  • Simplify ArbitraryMotion struct (#371)
  • Re-use weights in interpolation for ArbitraryMotion (#372)
  • Define Nspins for SimpleMotion (#376)
  • Applying @time to simulate reveals discrepancies on resources and timing reports (#392)
  • plot_signal docstring (correction) (#401)
  • [KomaUI Plotting] obj_ui[] does not draw on first time updated. Need to press :rho or other option. (#407)
  • New motion approach to combine SimpleMotion and ArbitraryMotion into the same phantom (#410)
  • Future: use @testsetup to reduce time to run tests on GPU (#414)
  • Problems initializing KomaUI (#432)
  • Brain phantom values inconsistencies (#464)
  • spin_reset has eltype T and should be an AbstractMatrix{Bool} (#479)

v0.8.2

22 Apr 20:56
9befece

Choose a tag to compare

KomaMRI v0.8.2

Diff since v0.8.1

Merged pull requests:

Closed issues:

  • Modify Literate Examples Generation (#251)
  • plot_seq not plotting Gx if Gy is not on and vice-versa (#374)
  • KomaMRI errors when using Julia nightly (#375)
  • Simulation crashes when trying to simulate soft-RF (get_rf_center) (#378)

v0.8.1

12 Apr 17:10
bd2c310

Choose a tag to compare

KomaMRI v0.8.1

Diff since v0.8.0

Merged pull requests:

Closed issues:

  • Incorrect interpretation of time shaped RFs (#200)
  • Empty sequence adds an undesired block (#203)
  • Unnecessary samples are considered when concatenating sequences (#205)
  • Resolve Circular Dependencies in Tests Environments (#237)
  • Google Summer of Code (GSoC) (#243)
  • Refactor functions for computing moments (#268)
  • Compatible, tested or recommended julia versions for CPU and GPU? (#295)
  • Default simulate fails after clean install of KomaMRI version 0.7.5 (#298)
  • MRIReco.jl v0.8.0 incorrect initialization with multiple threads (#299)
  • Update codecov to consider new subpackages (#302)
  • Reduce spins for pelvis Phantom (#306)
  • Interpretation of '.seq' files is not matching with sequence designed on PyPulseq (#320)
  • Warning: sort(d::Dict; args...) is deprecated, use sort!(OrderedDict(d); args...) instead. (#326)
  • Can't define colormap ranges when plotting phantom object (#328)
  • [BUG] CodeCov Not Working (#335)
  • Refactor get_Mk to compute 't' and 'tadc' more efficiently (#345)
  • Performance improvements for plot_seq (function and UI) (#365)

v0.8.0

18 Jan 22:09

Choose a tag to compare

KomaMRI v0.8.0

Diff since v0.7.5

Merged pull requests:

Closed issues:

  • Annoying random update of plots in GUI (#66)
  • Separate KomaMRI into simpler subpackages (#92)
  • Add contributors to UI (#191)
  • Be more clear about the package versions in the UI (#192)
  • Koma logo in the docs is incorrect (#193)
  • Update pipeline figure to show the current organization of the Koma submodules (#194)
  • GUI gets stuck when simulating twice (#198)
  • Unattractive group of legends and colors in subplots (#199)
  • Add Contributing Guidelines (#209)
  • Add the ability to modify the seq, obj, sys, raw and image used in the UI from the REPL (#211)
  • MRD Data opened in Python appears corrupted (#214)
  • StackOverflowError on plots of large sequences (#221)
  • Precompiling KomaMRIPlots hangs on Windows (#225)
  • Add a template for reporting issues (#228)
  • KomaMRIFiles (#232)
  • Additional <userParameters> tag within XML header of exported MRD (#236)
  • Upload educational Pluto notebook (#242)
  • Update Subpackages in README (#244)
  • Update CompatHelper to also check subpacakge's compat (#245)
  • Add MRI together's talk to News section in README (#246)
  • Generete a test for slice simulation (#252)
  • Avoid Warnings During Document Generation (#255)
  • KomaMRIBase (#265)
  • Basic trapezoidal Grad usage, parameter definition with a plot. (#270)
  • KomaMRIPlots doesn't precompile in Julia 1.10.0 (#274)
  • Move Julia compat to 1.9 (#275)
  • Use nightly tests in CI (#281)
  • Increment code coverage (#282)
  • Improve the visualization of contributors and colors in the UI (#293)

v0.7.5

26 Oct 03:11

Choose a tag to compare

KomaMRI v0.7.5

Diff since v0.7.4

Merged pull requests:

Closed issues:

  • Edge cases arise during simple 1-spin simulation (#85)
  • Plots fail when used in Pluto notebooks (#166)
  • Default KomaUI sequence is different in julia versions 1.6 and 1.9 (#175)
  • Long file names overflow from UI's navbar (#176)
  • Adding code style, compatible Julia version, and license to README.md (#188)
  • Add KomaMRI.jl to MRHub (#196)
  • Bug with Δf in RF_sinc function (#197)
  • Replicate pulseq functions to create sequences (#206)

v0.7.4

13 Jul 11:59
c7c3f24

Choose a tag to compare

KomaMRI v0.7.4

Diff since v0.7.3

Closed issues:

  • Exporting results to .mat from the GUI (#70)
  • Solve edge-case for avoiding additional delay in the acquisition (#88)
  • Separate simulation base to KomaMRIBase subpackage (#92)
  • Problem with ADC next to RF object (#161)
  • Discretization of gradient waveform fails for square gradients / very high slew rates (#162)
  • KomaUI not working in Julia 1.9 (#168)

Merged pull requests:

  • Modules KomaMRICore and KomaMRIPlots (#148) (@beorostica)
  • Fix for no-gpu devices (#153) (@beorostica)
  • CompatHelper: add new compat entry for KomaMRICore at version 0.7, (keep existing compat) (#154) (@github-actions[bot])
  • Change UUID of KomaMRIPlots subpackage (#156) (@beorostica)
  • Add compat version 0.7 for KomaMRICore (#157) (@beorostica)
  • Apidocs (#158) (@beorostica)
  • CompatHelper: add new compat entry for KomaMRIPlots at version 0.7, (keep existing compat) (#159) (@github-actions[bot])
  • Update ci.yml for codecov subpackages (#160) (@beorostica)
  • KomaMRI v0.7.4: Bug fixes and minor features (#163) (@cncastillo)
  • Avoid dialog (#171) (@beorostica)
  • CompatHelper: add new compat entry for MAT at version 0.10, (keep existing compat) (#172) (@github-actions[bot])
  • Update Project.toml for KomaMRIPlots to v0.7.6 (#173) (@beorostica)

v0.7.3

05 Jan 18:36

Choose a tag to compare

KomaMRI v0.7.3

Diff since v0.7.2

Closed issues:

  • Two definitions for DiscreteSequence #146 (@cncastillo)
  • Hwloc still being used in KomaUI #144 (@cncastillo)
  • Blink v0.12.6 removed functions AtomShell.isinstalled() and AtomShell.install() used in KomaMRI.jl #143 (@cncastillo)

v0.7.2

30 Dec 19:01

Choose a tag to compare

KomaMRI v0.7.2

Diff since v0.7.1

Closed issues:

Merged pull requests: