Releases: JuliaHealth/KomaMRI.jl
v0.9.0
KomaMRI v0.9.0
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:
- Motion Phantom (#184) (@pvillacorta)
- Bump codecov/codecov-action from 4.1.1 to 4.3.0 (#384) (@dependabot[bot])
- Bump julia-actions/setup-julia from 1 to 2 (#385) (@dependabot[bot])
- Tutorial for SimpleMotion creation and simulation (#387) (@pvillacorta)
- Update nightly.yml (#388) (@cncastillo)
- Adding "How to Cite Koma" section to docs (#389) (@cncastillo)
- Bump julia-actions/julia-format from 2 to 3 (#398) (@dependabot[bot])
- Update DisplayFunctions.jl (#402) (@curtcorum)
- Add Binder badge to Literate tutorials (#403) (@cncastillo)
- Extend GPU support to Metal, ROCm, and oneAPI backends (#405) (@rkierulf)
- Fix some test failures (#406) (@rkierulf)
- Optimize ArbitraryMotion (continuation) (#408) (@pvillacorta)
- Add Buildkite GPU pipeline (#411) (@rkierulf)
- Fix plot phantom function (#413) (@pvillacorta)
- Fixing testing environments for GPU backends (#415) (@cncastillo)
- Add kernel-based matrix cumsum (#416) (@rkierulf)
- Initial benchmarking implementation: steps to run benchmarks and comb… (#418) (@rkierulf)
- Fix typos in docstrings (#419) (@pvillacorta)
- [DOCS] Add JuliaHealth Star Counter Badge to README (#420) (@TheCedarPrince)
- Updates to github-action-benchmark index.html (#421) (@rkierulf)
- Fixing issues in Julia 1.11 and Julia 1.12 (#422) (@cncastillo)
- Fix monorepo script not working for pushes to main (#423) (@rkierulf)
- Change 'main' to 'master' so benchmarking action actually runs (#424) (@rkierulf)
- Including details about prints of simulate (#431) (@gsahonero)
- Bump to 0.9.0-DEV (#434) (@cncastillo)
- New Motion (#442) (@pvillacorta)
- Optimize run_spin_precession! and run_spin_excitation! for CPU (#443) (@rkierulf)
- Change
reduce(vcat, itr)
toreduce(vcat, [itr])
(#444) (@cncastillo) - Pkg version handling and choosable test backend for VSCode (#453) (@cncastillo)
- Pkg version handling and choosable test backend for VSCode (again) (#455) (@cncastillo)
- CompatHelper: bump compat for PlutoPlotly in [weakdeps] to 0.5 for package KomaMRIPlots, (keep existing compat) (#456) (@github-actions[bot])
- Fixing benchmark comments on PRs (#457) (@cncastillo)
- Optimize run_spin_precession! for GPU (#459) (@rkierulf)
- CompatHelper: bump compat for AMDGPU in [weakdeps] to 1 for package KomaMRICore, (keep existing compat) (#460) (@github-actions[bot])
- CompatHelper: bump compat for MRIReco to 0.9, (keep existing compat) (#461) (@github-actions[bot])
- Optimize run_spin_excitation! for GPU (#462) (@rkierulf)
- Fixing brain phantom values (#465) (@gsahonero)
- Add Distributed Examples to Documentation (#468) (@rkierulf)
- Include more specific SLURM instructions (#469) (@cncastillo)
- GSOC: Add GPU Explanation Section to Documentation (#470) (@rkierulf)
- Fix extra allocations when benchmarking with no motion (#483) (@pvillacorta)
- Fix bug in
plot_phantom_map
whenlength(obj)
>max_spins
(#485) (@pvillacorta) - Fix sum of
Grad
s (#486) (@pvillacorta) - Fix bugs related with
SpinRange
and flow (#488) (@pvillacorta) - Diffusion tutorial for isotropic diffusion (#489) (@tinorodriguez)
- Fix
plot_phantom_map
for dynamic phantoms (#490) (@pvillacorta) - Changing size of plot for diffusion example (#491) (@cncastillo)
- KomaMRI v0.9 (#492) (@cncastillo)
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
haseltype
T and should be anAbstractMatrix{Bool}
(#479)
v0.8.2
KomaMRI v0.8.2
Merged pull requests:
- Documentation restructure (#377) (@beorostica)
- Update Koma package versions (#379) (@beorostica)
Closed issues:
v0.8.1
KomaMRI v0.8.1
Merged pull requests:
- Add GPU tested compatibility in documentation (#300) (@beorostica)
- Update codecov to consider all subdirectories (#303) (@beorostica)
- read and store signature in seq.DEF["signature"] (#313) (@aTrotier)
- Fixes for no gradients in seq file. (#314) (@curtcorum)
- KomaMRIFiles: RF phase read with the opposite sign from Pulseq (#315) (@beorostica)
- Hot fix empty grad (#316) (@beorostica)
- Hot version updates (#317) (@beorostica)
- Upsample phantoms (#319) (@curtcorum)
- Incorrect gradient interpretation when waveforms do not end in zero (#321) (@beorostica)
- Remove deprecation warning for sort function (#327) (@beorostica)
- Fix colormap bug when ploting phantom maps (#330) (@beorostica)
- Remove air tissue from pelvis phantom example (#331) (@beorostica)
- Refactor moment functions (#332) (@beorostica)
- CI: Set up Dependabot to auto-update pinned GitHub Actions (#336) (@DilumAluthge)
- CI: Update
codecov-action
to v4.1.1, and pass the organization-wideCODECOV_TOKEN
secret (#337) (@DilumAluthge) - CI: Add a manual (
workflow_dispatch
) trigger for CompatHelper; also don't run CompatHelper on PRs (#338) (@DilumAluthge) - Bump actions/checkout from 3 to 4 (#340) (@dependabot[bot])
- Bump actions/cache from 3 to 4 (#341) (@dependabot[bot])
- Anisotropic Phantoms (#342) (@curtcorum)
- Add an example Buildkite pipeline file (#344) (@DilumAluthge)
- Julia formatter (#369) (@cncastillo)
- Update Docs (#370) (@beorostica)
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, usesort!(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
KomaMRI v0.8.0
Merged pull requests:
- Improve UI Observables management (#210) (@beorostica)
- Fix StackOverflow error plots of big sequences (#220) (@gabuzi)
- KomaMRIIO subpackage (#231) (@beorostica)
- Add contibuting guidelines (#234) (@beorostica)
- KomaMRIBase (#239) (@cncastillo)
- KomaMRIBase/KomaMRIFiles: Avoid Circular Deps (#240) (@beorostica)
- Add contributors in README and GUI (#247) (@beorostica)
- Add educational example to docs (#248) (@beorostica)
- Create Template for Issues (#249) (@beorostica)
- Add Template for Issues (#250) (@beorostica)
- Add educational Pluto example (#253) (@beorostica)
- Templates for Issues (#254) (@beorostica)
- Update Issue Templates (#257) (@beorostica)
- Fix multiple docs warnings (#258) (@beorostica)
- Include Koma subpackages in CompatHelper (#259) (@beorostica)
- CompatHelper: bump compat for Adapt to 4 for package KomaMRICore, (keep existing compat) (#261) (@github-actions[bot])
- CompatHelper: bump compat for Interpolations to 0.15 for package KomaMRICore, (keep existing compat) (#262) (@github-actions[bot])
- CompatHelper: bump compat for Interpolations to 0.15 for package KomaMRIPlots, (keep existing compat) (#263) (@github-actions[bot])
- Fix URL for educational Pluto example (#266) (@beorostica)
- Pluto Educational Example (#267) (@beorostica)
- Update README.md (#269) (@pabloirarrazaval)
- Fixing precompilation problems in Julia 1.10.0 (#277) (@cncastillo)
- Add test for
simulate_slice_profile
function (#280) (@beorostica) - Run nightly CI on push trigger (#283) (@beorostica)
- Transform text to path in .svg image (#285) (@beorostica)
- Update koma subdir image (#289) (@beorostica)
- Patch CI for compat (#290) (@beorostica)
- CompatHelper: bump compat for Interpolations to 0.15 for package KomaMRIBase, (keep existing compat) (#292) (@github-actions[bot])
- Improve the visualization of the contributors in the UI (#294) (@beorostica)
- Display Koma package versions in issue template (#296) (@beorostica)
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
andimage
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
KomaMRI v0.7.5
Merged pull requests:
- Use reshape() instead of ;; (#177) (@beorostica)
- Fix long names displayed in the sidebar (#180) (@beorostica)
- UI update. (#181) (@cncastillo)
- Update README.md [skip ci] (#182) (@cncastillo)
- Update README.md [skip ci] (#185) (@cncastillo)
- CompatHelper: bump compat for MRIReco to 0.8, (keep existing compat) (#186) (@github-actions[bot])
- KomaMRIPlots Pluto compatibility (#195) (@cncastillo)
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
KomaMRI v0.7.4
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
KomaMRI v0.7.3
Closed issues:
- Two definitions for DiscreteSequence #146 (@cncastillo)
- Hwloc still being used in KomaUI #144 (@cncastillo)
- Blink v0.12.6 removed functions
AtomShell.isinstalled()
andAtomShell.install()
used in KomaMRI.jl #143 (@cncastillo)
v0.7.2
KomaMRI v0.7.2
Closed issues:
- Default number of threads for CPU parallelization (#141) (@cncastillo )
Merged pull requests:
- Literate (#140) (@beorostica)
v0.7.1
KomaMRI v0.7.1
Closed issues:
- DisplayFunctions: RF phase is incorrectly calculated (#130) @cncastillo
- DisplayFunctions: Timings of RF waveform are slightly incorrect when
rf_max_samples
is less than the actual number of samples (#131) @cncastillo - Signal was being conjugated (affected "return_type" => "raw") (#129) @cncastillo
- Pulseq
read_seq
prints unnecessary spaces (#133) @cncastillo - KomaUI prints some unnecessary spaces (#135) @cncastillo
- Clean /examples/ folder (#137) @cncastillo
v0.7.0
KomaMRI v0.7.0
Closed issues:
- RF implementation with GPU acceleration (#2) @cncastillo
- Documentation versions (stable & dev) (#115) @beorostica
- Move
gpu
function calls tosimulate
(#116) @cncastillo - Solve edge-case for one acquisition sample (#117) @cncastillo
- T2 decay was incorrectly calculated for the first sample after a delay. (#118) @cncastillo
- Move
get_grad
andget_rfs
function calls tosimulate
, to used them only once. (Low priority) (#119) @cncastillo - Type stability in core simulation types and functions (Phantom, DiscreteSequence, Magnetization). (#120) @cncastillo
Merged pull requests:
- Update make.jl (#114) (@beorostica)
- CompatHelper: add new compat entry for Adapt at version 3, (keep existing compat) (#122) (@github-actions[bot])
- CompatHelper: add new compat entry for Functors at version 0.4, (keep existing compat) (#123) (@github-actions[bot])
- CompatHelper: add new compat entry for Parameters at version 0.12, (keep existing compat) (#124) (@github-actions[bot])