Skip to content

Tags: JuliaHealth/KomaMRI.jl

Tags

v0.9.1

[Diff since v0.9.0](v0.9.0...v0.9.1)

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:**
- Update README.md with v0.9 news (#493) (@calberolalopez)
- Update to use cis instead of cos + i sin (#496) (@cncastillo)
- CompatHelper: bump compat for PlutoPlotly in [weakdeps] to 0.6 for package KomaMRIPlots, (keep existing compat) (#497) (@github-actions[bot])
- Fix Phantom-related bugs (#498 and more) (#499) (@pvillacorta)
- Avoid GPU runners for CPU jobs, and fix hanging CPU tests (#502) (@cncastillo)
- CompatHelper: bump compat for Functors to 0.5 for package KomaMRICore, (keep existing compat) (#507) (@github-actions[bot])
- How to contribute to Koma docs (#509) (@Stockless)
- Fixing text some details in dev documentation (#510) (@Stockless)
- Adjust reset flag interpolation to trigger at jump (#511) (@pvillacorta)
- Bump codecov/codecov-action from 4 to 5 (#513) (@dependabot[bot])
- Fix asset paths for "5-contribute-to-koma.md" (#514) (@Stockless)
- Fixed incorrect assets path (#515) (@Stockless)
- Fix flow-related functions (#516) (@pvillacorta)
- Ease motion definition when only one motion is needed (#517) (@pvillacorta)
- Limited size of large assets in light mode (#518) (@Stockless)
- Solve bug in `SpinRanges` when indexing a phantom with a BitVector  (#520) (@pvillacorta)
- Test motion-related functions (#523) (@pvillacorta)
- Limit 'NadcsPerImage' to be at least 1 (#527) (@Stockless)
- Adding standard T1 and T2 colormaps from QMRIColors.jl (#528) (@Stockless)
- Flexibilize the definition of motion time spans (#531) (@pvillacorta)
- Fix motion bugs and add `colorscale` keyword in `plot_image` (#536) (@pvillacorta)
- Resize contributors (#541) (@Stockless)
- Contributing guidelines update (#543) (@Stockless)
- replace all "cmin" and "cmax" with "zmin" and "zmax" respectibly (#546) (@Stockless)
- bump v0.9.0 to v0.9.1 (#547) (@Stockless)

**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

[Diff since v0.8.2](v0.8.2...v0.9.0)

This new **breaking release** of Koma v0.9 has multiple new features. Thanks to @rkierulf, our [GSoC student](https://juliahealth.org/JuliaHealthBlog/posts/ryan-gsoc/Ryan_GSOC.html), 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](https://juliahealth.org/KomaMRI.jl/dev/explanation/4-gpu-explanation/))
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](https://juliahealth.org/KomaMRI.jl/dev/how-to/4-run-distributed-simulations/))
We also tested distributed simulations with multiple GPUs and nodes :)

**(4) GPU benchmarks** ([here](https://juliahealth.org/KomaMRI.jl/benchmarks/))
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](https://juliahealth.org/KomaMRI.jl/dev/tutorial/05-SimpleMotion/) or [arbitrary motions](https://juliahealth.org/KomaMRI.jl/dev/tutorial/06-DiffusionMotion/). 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)` to `reduce(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` when `length(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` has `eltype` T and should be an `AbstractMatrix{Bool}` (#479)

v0.8.2

[Diff since v0.8.1](v0.8.1...v0.8.2)

**Merged pull requests:**
- Documentation restructure (#377) (@beorostica)
- Update Koma package versions (#379) (@beorostica)

**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

[Diff since v0.8.0](v0.8.0...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-wide `CODECOV_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, 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

[Diff since v0.7.5](v0.7.5...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` 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

[Diff since v0.7.4](v0.7.4...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

[Diff since v0.7.3](v0.7.3...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

[Diff since v0.7.2](v0.7.2...v0.7.3)

v0.7.2

[Diff since v0.7.1](v0.7.1...v0.7.2)

**Closed issues:**
- Default number of threads for CPU parallelization (#141)

**Merged pull requests:**
- Literate (#140) (@beorostica)

v0.7.1

[Diff since v0.7.0](v0.7.0...v0.7.1)