diff --git a/dev/.documenter-siteinfo.json b/dev/.documenter-siteinfo.json index 96a3c7b..62aca57 100644 --- a/dev/.documenter-siteinfo.json +++ b/dev/.documenter-siteinfo.json @@ -1 +1 @@ -{"documenter":{"julia_version":"1.10.0","generation_timestamp":"2024-02-02T11:11:39","documenter_version":"1.2.1"}} \ No newline at end of file +{"documenter":{"julia_version":"1.10.0","generation_timestamp":"2024-02-02T14:06:50","documenter_version":"1.2.1"}} \ No newline at end of file diff --git a/dev/api/index.html b/dev/api/index.html index 368860a..d56fd82 100644 --- a/dev/api/index.html +++ b/dev/api/index.html @@ -5,7 +5,7 @@ - `T1` : Longitudinal relaxation - `TE` : Echo Time - `TR` : Repetition time -- `ETL` : Echo Train Length

Output :

- Amplitude of each echoes
source
Subspace_MESE.MESE_basis_EPGFunction
MESE_basis_EPG(NUM_BASIS::Int,TE,ETL::Int,T2_vec::Union{AbstractVector,AbstractFloat},B1_vec::Union{AbstractVector,AbstractFloat} = 1.0,T1_vec::Union{AbstractVector,AbstractFloat}=1000.0;TR = 1000.0,dummy::Int = 3)
+- `ETL` : Echo Train Length

Output :

- Amplitude of each echoes
source
Subspace_MESE.MESE_basis_EPGFunction
MESE_basis_EPG(NUM_BASIS::Int,TE,ETL::Int,T2_vec::Union{AbstractVector,AbstractFloat},B1_vec::Union{AbstractVector,AbstractFloat} = 1.0,T1_vec::Union{AbstractVector,AbstractFloat}=1000.0;TR = 1000.0,dummy::Int = 3)
 
 Generate a temporal basis for a Multi-Echo Spin-Echo sequence with an Extended Phase Graph model for various value of T2/B1/T1

stored as a vector in T2_vec/B1_vec/T1_vec.

Input :

- `NUM_BASIS::Int : Number of temporal basis to extract
 - `TE::AbstractFloat` : Cartesian acquisition with a fully-sampled center.
@@ -23,7 +23,7 @@
 ETL = 50
 NUM_BASIS = 6
 
-basis_epg, epg_dict =MESE_basis_EPG(NUM_BASIS,TE,ETL,T2_vec,B1_vec,T1_vec;TR=TR,dummy=dummy)
source
Subspace_MESE.MESE_basis_expMethod
    MESE_basis_exp(NUM_BASIS::Int,TE::AbstractFloat,ETL::Int, T2_vec::AbstractVector;removeFirstPoint::Bool=false)

Generate a temporal basis for a Multi-Echo Spin-Echo sequence with an exponential model.for various value of T2 stored as a vector in T2_vec. The first point of the echo train can be removed from the dictionnary with the keyword removeFirstPoint to minimize the effect of stimulated echoes.

Input :

- `NUM_BASIS::Int : Number of temporal basis to extract
+basis_epg, epg_dict =MESE_basis_EPG(NUM_BASIS,TE,ETL,T2_vec,B1_vec,T1_vec;TR=TR,dummy=dummy)
source
Subspace_MESE.MESE_basis_expMethod
    MESE_basis_exp(NUM_BASIS::Int,TE::AbstractFloat,ETL::Int, T2_vec::AbstractVector;removeFirstPoint::Bool=false)

Generate a temporal basis for a Multi-Echo Spin-Echo sequence with an exponential model.for various value of T2 stored as a vector in T2_vec. The first point of the echo train can be removed from the dictionnary with the keyword removeFirstPoint to minimize the effect of stimulated echoes.

Input :

- `NUM_BASIS::Int : Number of temporal basis to extract
 - `TE::AbstractFloat` : Cartesian acquisition with a fully-sampled center.
 - `ETL::Int` : Echo Train Length
 - `T2_vec::AbstractVector` : Vector of T₂ values used to generate the signal dictionnary

Keyword :

- `removeFirstPoint::Bool=False` : Remove the first point of the dictionnary before the svd

Output :

- `basis` : Matrix of size (ETL,NUM_BASIS)
@@ -32,7 +32,7 @@
 ETL = 50
 NUM_BASIS = 6
 
-basis_exp,exp_dict = MESE_basis_exp(NUM_BASIS,TE,ETL,T2_vec)
source
Subspace_MESE.RawAcquisitionData_MESEMethod
RawAcquisitionData_MESE(b::BrukerFile)

Convert a Bruker dataset acquired with the aMESECS sequence into a RawAcquisitionData object compatible with the MRIReco functions.

Input : - b::BrukerFile

Output : - raw::RawAcquisitionData

source
Subspace_MESE.T2Fit_epg_noiseMethod
T2Fit_epg_noise(ima::Array{T,N}, t::AbstractVector{T},T1=1000.0,TE=7.0; EPGthresh = 1e-5,p0=nothing,mask = nothing) where {T<:Real,N}

WIP

source
Subspace_MESE.T2Fit_exp_noiseMethod
    T2Fit_exp_noise(ima::Array{T,N}, t::AbstractVector{T}; removePoint::Bool=true, L::Int=1, mask = nothing) where {T<:Real,N}

Fit the relaxation parameters T2 with the equation : $S(t) = \sqrt{(M_0 \exp(-\frac{t}{T2}))^2 + 2 L \sigma_g^2}$ where L est le nombre de canaux, et $\sigma_g$ le bruit gaussien sur les image

Arguments

  • ima::Array{T,N}: multi-dimensionnal images. Last dimension stores the temporal dimension
  • t::AbstractVector{<:Real}: times vector in ms
  • p0=nothing: starting values for fit, if empty p0=[maximum(ima),30,maximum(ima)*0.1]

Keywords

  • removePoint::Bool=true: remove the first point before fitting
  • L::Int=1: Number of coil elements
  • mask::

Returns

  • fit_params : parameter maps last dimension stores the following maps (M₀ , T₂ , σ)

Bibliography

  • Cárdenas-Blanco A, Tejos C, Irarrazaval P, Cameron I. Noise in magnitude magnetic

resonance images. Concepts Magn Reson Part A [Internet]. 2008 Nov;32A(6):409?16. Available from: http://doi.wiley.com/10.1002/cmr.a.20124

  • Feng Y, He T, Gatehouse PD, Li X, Harith Alam M, Pennell DJ, et al. Improved MRI R 2 *

relaxometry of iron-loaded liver with noise correction. Magn Reson Med [Internet]. 2013 Dec;70(6):1765?74. Available from: http://doi.wiley.com/10.1002/mrm.24607

source
Subspace_MESE.basis_calibrationMethod
basis_calibration(NUM_BASIS::Int,acq::AcquisitionData{T,D},crop_size::NTuple{D,Int}) where {T,D}

k_bart = kDataCart(acq);

Extract a temporal basis from a low-resolution images reconstructed using a fully sampled area at the center of the k-space with a size crop_size.

Input :

- `NUM_BASIS::Int : Number of temporal basis to extract
+basis_exp,exp_dict = MESE_basis_exp(NUM_BASIS,TE,ETL,T2_vec)
source
Subspace_MESE.RawAcquisitionData_MESEMethod
RawAcquisitionData_MESE(b::BrukerFile)

Convert a Bruker dataset acquired with the aMESECS sequence into a RawAcquisitionData object compatible with the MRIReco functions.

Input : - b::BrukerFile

Output : - raw::RawAcquisitionData

source
Subspace_MESE.T2Fit_epg_noiseMethod
T2Fit_epg_noise(ima::Array{T,N}, t::AbstractVector{T},T1=1000.0,TE=7.0; EPGthresh = 1e-5,p0=nothing,mask = nothing) where {T<:Real,N}

WIP

source
Subspace_MESE.T2Fit_exp_noiseMethod
    T2Fit_exp_noise(ima::Array{T,N}, t::AbstractVector{T}; removePoint::Bool=true, L::Int=1, mask = nothing) where {T<:Real,N}

Fit the relaxation parameters T2 with the equation : $S(t) = \sqrt{(M_0 \exp(-\frac{t}{T2}))^2 + 2 L \sigma_g^2}$ where L est le nombre de canaux, et $\sigma_g$ le bruit gaussien sur les image

Arguments

  • ima::Array{T,N}: multi-dimensionnal images. Last dimension stores the temporal dimension
  • t::AbstractVector{<:Real}: times vector in ms
  • p0=nothing: starting values for fit, if empty p0=[maximum(ima),30,maximum(ima)*0.1]

Keywords

  • removePoint::Bool=true: remove the first point before fitting
  • L::Int=1: Number of coil elements
  • mask::

Returns

  • fit_params : parameter maps last dimension stores the following maps (M₀ , T₂ , σ)

Bibliography

  • Cárdenas-Blanco A, Tejos C, Irarrazaval P, Cameron I. Noise in magnitude magnetic

resonance images. Concepts Magn Reson Part A [Internet]. 2008 Nov;32A(6):409?16. Available from: http://doi.wiley.com/10.1002/cmr.a.20124

  • Feng Y, He T, Gatehouse PD, Li X, Harith Alam M, Pennell DJ, et al. Improved MRI R 2 *

relaxometry of iron-loaded liver with noise correction. Magn Reson Med [Internet]. 2013 Dec;70(6):1765?74. Available from: http://doi.wiley.com/10.1002/mrm.24607

source
Subspace_MESE.basis_calibrationMethod
basis_calibration(NUM_BASIS::Int,acq::AcquisitionData{T,D},crop_size::NTuple{D,Int}) where {T,D}

k_bart = kDataCart(acq);

Extract a temporal basis from a low-resolution images reconstructed using a fully sampled area at the center of the k-space with a size crop_size.

Input :

- `NUM_BASIS::Int : Number of temporal basis to extract
 - `acq::AcquisitionData` : Cartesian acquisition with a fully-sampled center.
 - `crop_size::NTuple{D,Int})` : size of the  central part of k-space used

Output :

- `basis` : Matrix of size (ETL,NUM_BASIS)
 - `calib_dict` : Dictionnary of signal used to generate the basis

Example :

b = BrukerFile("path/to/dataset")
@@ -40,7 +40,7 @@
 raw = RawAcquisitionData_MESE(b)
 acq = AcquisitionData(raw,OffsetBruker = true);
 
-basis, calib_dict = MESE_basis_calibration(acq,(15,15,15),6)
source
Subspace_MESE.subspace_bart_reconstructionMethod
subspace_bart_reconstruction(acq::AcquisitionData,params::Dict{Symbol,Any},bart_path::AbstractString)

Reconstruction of the accelerated MESE sequence with BART.

Input :

- `acq::AcquisitionData` : Cartesian acquisition with a fully-sampled center.
+basis, calib_dict = MESE_basis_calibration(acq,(15,15,15),6)
source
Subspace_MESE.subspace_bart_reconstructionMethod
subspace_bart_reconstruction(acq::AcquisitionData,params::Dict{Symbol,Any},bart_path::AbstractString)

Reconstruction of the accelerated MESE sequence with BART.

Input :

- `acq::AcquisitionData` : Cartesian acquisition with a fully-sampled center.
 - `params::Dict{Symbol,Any}` : size of the  central part of k-space used
 - `bart_path::AbstractString` : path to the BART executable library

Output :

- `basis` : Matrix of size (ETL,NUM_BASIS)
 - `calib_dict` : Dictionnary of signal used to generate the basis

Example :

b = BrukerFile("path/to/dataset")
@@ -48,4 +48,4 @@
 raw = RawAcquisitionData_MESE(b)
 acq = AcquisitionData(raw,OffsetBruker = true);
 
-basis, calib_dict = MESE_basis_calibration(acq,(15,15,15),6)
source
+basis, calib_dict = MESE_basis_calibration(acq,(15,15,15),6)source diff --git a/dev/building_basis/index.html b/dev/building_basis/index.html index dd16e8e..f0a5c60 100644 --- a/dev/building_basis/index.html +++ b/dev/building_basis/index.html @@ -8,7 +8,7 @@ ETL = 50 NUM_BASIS = 6 -basis_exp,exp_dict = MESE_basis_exp(NUM_BASIS,TE,ETL,T2_vec)source

In the publication, the subspace is extracted from a dictionary generated with a range of $T_2$ from 1 ms to 2000 ms with a step of 1 ms.

Other approachs can be used :

Let's take a look at the first 6 subspace vectors from a linear repartition :

using Subspace_MESE
+basis_exp,exp_dict = MESE_basis_exp(NUM_BASIS,TE,ETL,T2_vec)
source

In the publication, the subspace is extracted from a dictionary generated with a range of $T_2$ from 1 ms to 2000 ms with a step of 1 ms.

Other approachs can be used :

Let's take a look at the first 6 subspace vectors from a linear repartition :

using Subspace_MESE
 
 T2_vec = 1.0:1.0:2000.0
 TE = 7.0
@@ -44,7 +44,7 @@
 ETL = 50
 NUM_BASIS = 6
 
-basis_epg, epg_dict =MESE_basis_EPG(NUM_BASIS,TE,ETL,T2_vec,B1_vec,T1_vec;TR=TR,dummy=dummy)
source

In order to generate the EPG subspace, more parameters need to be defined. Specifically, the range of $B_1$ to be expected in the acquisition might be larger for surfacic transmit coil than for volumic coils that have a homogeneous $B_1^+$ field.

Of note, B1vec, T2vec, T1vec can also be passed as float values rather than vectors. In the publication, the T1vec was fixed to 1000 ms.

using Subspace_MESE
+basis_epg, epg_dict =MESE_basis_EPG(NUM_BASIS,TE,ETL,T2_vec,B1_vec,T1_vec;TR=TR,dummy=dummy)
source

In order to generate the EPG subspace, more parameters need to be defined. Specifically, the range of $B_1$ to be expected in the acquisition might be larger for surfacic transmit coil than for volumic coils that have a homogeneous $B_1^+$ field.

Of note, B1vec, T2vec, T1vec can also be passed as float values rather than vectors. In the publication, the T1vec was fixed to 1000 ms.

using Subspace_MESE
 B1_vec = 0.8:0.01:1.0
 T2_vec = 1.0:1.0:2000.0
 T1_vec = 1000.0 #can also be a vector of float
@@ -73,9 +73,9 @@
 raw = RawAcquisitionData_MESE(b)
 acq = AcquisitionData(raw,OffsetBruker = true);
 
-basis, calib_dict = MESE_basis_calibration(acq,(15,15,15),6)
source

The calibration subspace reconstructs low-resolution images from a fully sampled area of the k-space.

You can generate the subspace from the acquired accelerated acquisition with the parameter crop_size equal to the size of the fully sampled area of the k-space.

But you can also generate the subspace from a different fully acquisition (for example on a control acquisition)

b = BrukerFile("path/to/dataset")
+basis, calib_dict = MESE_basis_calibration(acq,(15,15,15),6)
source

The calibration subspace reconstructs low-resolution images from a fully sampled area of the k-space.

You can generate the subspace from the acquired accelerated acquisition with the parameter crop_size equal to the size of the fully sampled area of the k-space.

But you can also generate the subspace from a different fully acquisition (for example on a control acquisition)

b = BrukerFile("path/to/dataset")
 
 raw = RawAcquisitionData_MESE(b)
 acq = AcquisitionData(raw,OffsetBruker = true);
 
-basis,_ = MESE_basis_calibration(acq,(15,15,15),6)
+basis,_ = MESE_basis_calibration(acq,(15,15,15),6) diff --git a/dev/convert/index.html b/dev/convert/index.html index deec047..9b320f5 100644 --- a/dev/convert/index.html +++ b/dev/convert/index.html @@ -9,4 +9,4 @@ params[:reco] = "direct" im_u = reconstruction(acq, params);

This returns images which can be artifacted in the case of an undersampled acquisitioncan.

We can combine the different coil elements with a sum of squares :

using Subspace_MESE.MRICoilSensitivities
-im_u_sos = mergeChannels(im_u)
+im_u_sos = mergeChannels(im_u) diff --git a/dev/fit_T2/index.html b/dev/fit_T2/index.html index f246037..caead3c 100644 --- a/dev/fit_T2/index.html +++ b/dev/fit_T2/index.html @@ -1,2 +1,2 @@ -T₂ mapping · Subspace_MESE.jl

Fitting the data

The reconstruction and the fitting parts are totally independent.

The fitting functions expect a multidimensionnal-array with the echoes along the last dimension. The images should not be in complex, remember to use abs.(img).

Exponential $T_2$ fitting + noise

In the publication we used an analytical model to fit the exponential decay of the echoes :

\[S(t) = \sqrt{\left(M_0 \ exp(-\frac{t}{T_2})\right)^2 + 2 \ L \ \sigma_g^2}\]

where L is the number of coil and $\sigma_g$ corresponds to the gaussian noise level on the image.

You can perform this fit with the following function :

Subspace_MESE.T2Fit_exp_noiseFunction
    T2Fit_exp_noise(ima::Array{T,N}, t::AbstractVector{T}; removePoint::Bool=true, L::Int=1, mask = nothing) where {T<:Real,N}

Fit the relaxation parameters T2 with the equation : $S(t) = \sqrt{(M_0 \exp(-\frac{t}{T2}))^2 + 2 L \sigma_g^2}$ where L est le nombre de canaux, et $\sigma_g$ le bruit gaussien sur les image

Arguments

  • ima::Array{T,N}: multi-dimensionnal images. Last dimension stores the temporal dimension
  • t::AbstractVector{<:Real}: times vector in ms
  • p0=nothing: starting values for fit, if empty p0=[maximum(ima),30,maximum(ima)*0.1]

Keywords

  • removePoint::Bool=true: remove the first point before fitting
  • L::Int=1: Number of coil elements
  • mask::

Returns

  • fit_params : parameter maps last dimension stores the following maps (M₀ , T₂ , σ)

Bibliography

  • Cárdenas-Blanco A, Tejos C, Irarrazaval P, Cameron I. Noise in magnitude magnetic

resonance images. Concepts Magn Reson Part A [Internet]. 2008 Nov;32A(6):409?16. Available from: http://doi.wiley.com/10.1002/cmr.a.20124

  • Feng Y, He T, Gatehouse PD, Li X, Harith Alam M, Pennell DJ, et al. Improved MRI R 2 *

relaxometry of iron-loaded liver with noise correction. Magn Reson Med [Internet]. 2013 Dec;70(6):1765?74. Available from: http://doi.wiley.com/10.1002/mrm.24607

source

The keyword removePoint can be used to delete the first point in the TE vector as well as the first temporal volume in order to reduce the sensitivity of the fit to the stimulated echo.

EPG $T_2$ fitting + noise (WIP)

Another possibility is to fit the equation with an EPG model that, in addition to $M_0$/$T_2$/$\sigma$, also fits the $B_1$ field.

With the current implementation, the fit is not robust enough and also takes too long to use on a 3D volume.

T2Fit_epg_noise
+T₂ mapping · Subspace_MESE.jl

Fitting the data

The reconstruction and the fitting parts are totally independent.

The fitting functions expect a multidimensionnal-array with the echoes along the last dimension. The images should not be in complex, remember to use abs.(img).

Exponential $T_2$ fitting + noise

In the publication we used an analytical model to fit the exponential decay of the echoes :

\[S(t) = \sqrt{\left(M_0 \ exp(-\frac{t}{T_2})\right)^2 + 2 \ L \ \sigma_g^2}\]

where L is the number of coil and $\sigma_g$ corresponds to the gaussian noise level on the image.

You can perform this fit with the following function :

Subspace_MESE.T2Fit_exp_noiseFunction
    T2Fit_exp_noise(ima::Array{T,N}, t::AbstractVector{T}; removePoint::Bool=true, L::Int=1, mask = nothing) where {T<:Real,N}

Fit the relaxation parameters T2 with the equation : $S(t) = \sqrt{(M_0 \exp(-\frac{t}{T2}))^2 + 2 L \sigma_g^2}$ where L est le nombre de canaux, et $\sigma_g$ le bruit gaussien sur les image

Arguments

  • ima::Array{T,N}: multi-dimensionnal images. Last dimension stores the temporal dimension
  • t::AbstractVector{<:Real}: times vector in ms
  • p0=nothing: starting values for fit, if empty p0=[maximum(ima),30,maximum(ima)*0.1]

Keywords

  • removePoint::Bool=true: remove the first point before fitting
  • L::Int=1: Number of coil elements
  • mask::

Returns

  • fit_params : parameter maps last dimension stores the following maps (M₀ , T₂ , σ)

Bibliography

  • Cárdenas-Blanco A, Tejos C, Irarrazaval P, Cameron I. Noise in magnitude magnetic

resonance images. Concepts Magn Reson Part A [Internet]. 2008 Nov;32A(6):409?16. Available from: http://doi.wiley.com/10.1002/cmr.a.20124

  • Feng Y, He T, Gatehouse PD, Li X, Harith Alam M, Pennell DJ, et al. Improved MRI R 2 *

relaxometry of iron-loaded liver with noise correction. Magn Reson Med [Internet]. 2013 Dec;70(6):1765?74. Available from: http://doi.wiley.com/10.1002/mrm.24607

source

The keyword removePoint can be used to delete the first point in the TE vector as well as the first temporal volume in order to reduce the sensitivity of the fit to the stimulated echo.

EPG $T_2$ fitting + noise (WIP)

Another possibility is to fit the equation with an EPG model that, in addition to $M_0$/$T_2$/$\sigma$, also fits the $B_1$ field.

With the current implementation, the fit is not robust enough and also takes too long to use on a 3D volume.

T2Fit_epg_noise
diff --git a/dev/generated/examples/subspace_julia_epg/index.html b/dev/generated/examples/subspace_julia_epg/index.html index c756dc8..8a078a8 100644 --- a/dev/generated/examples/subspace_julia_epg/index.html +++ b/dev/generated/examples/subspace_julia_epg/index.html @@ -166,4 +166,4 @@ save("fig_bart_julia.png",f) save("fig_bart_julia.eps",f) -save("fig_bart_julia.pdf",f)

This page was generated using Literate.jl.

+save("fig_bart_julia.pdf",f)

This page was generated using Literate.jl.

diff --git a/dev/index.html b/dev/index.html index d63ce4d..3adcea8 100644 --- a/dev/index.html +++ b/dev/index.html @@ -1,2 +1,2 @@ -Home · Subspace_MESE.jl

Subspace_MESE

Documentation for the Subspace_MESE package, which implements the necessary functions to convert and reconstruct an accelerated 3D Multi-Echo Spin-Echo sequence with a subspace reconstruction in order to generate T2 maps.

Bruker Acquisition

This package is compatible with the sequence : a_MESE_CS which is available as a binary file in the folder : MRI/PV6.0.1/

The sequence is only available for the version PV6.0.1, implementation under PV360.6.5 is in progress. The protocol used for an acceleration factor of CS=6/8/10 is also available.

Reconstruction Pipeline

The reconstruction pipeline includes 4 steps :

  • Conversion of the Bruker rawdataset to a MRIReco compatible format (/src/bruker_sequence.jl)
  • Generation of the subspace (/src/build_basis.jl)
  • Reconstruction of the subspace coefficient and the virtual echo images
  • T2 fitting (/src/fit_T2_MESE.jl)

Reconstruction Pipeline

Those steps are described in their dedicated sections.

Example

Reproduction of figure 8 can be performed at this link : https://atrotier.github.io/PAPERsubspaceMESE/dev/generated/examples/subspacejuliaepg/

+Home · Subspace_MESE.jl

Subspace_MESE

Documentation for the Subspace_MESE package, which implements the necessary functions to convert and reconstruct an accelerated 3D Multi-Echo Spin-Echo sequence with a subspace reconstruction in order to generate T2 maps.

Bruker Acquisition

This package is compatible with the sequence : a_MESE_CS which is available as a binary file in the folder : MRI/PV6.0.1/

The sequence is only available for the version PV6.0.1, implementation under PV360.6.5 is in progress. The protocol used for an acceleration factor of CS=6/8/10 is also available.

Reconstruction Pipeline

The reconstruction pipeline includes 4 steps :

  • Conversion of the Bruker rawdataset to a MRIReco compatible format (/src/bruker_sequence.jl)
  • Generation of the subspace (/src/build_basis.jl)
  • Reconstruction of the subspace coefficient and the virtual echo images
  • T2 fitting (/src/fit_T2_MESE.jl)

Reconstruction Pipeline

Those steps are described in their dedicated sections.

Example

Reproduction of figure 8 can be performed at this link : https://atrotier.github.io/PAPERsubspaceMESE/dev/generated/examples/subspacejuliaepg/

diff --git a/dev/reconstruction_subspace/index.html b/dev/reconstruction_subspace/index.html index a78f018..baf9f5f 100644 --- a/dev/reconstruction_subspace/index.html +++ b/dev/reconstruction_subspace/index.html @@ -32,4 +32,4 @@ params[:λ] = 0.01 params[:basis]=basis -im_sub_bart,im_TE_bart = subspace_bart_reconstruction(acq,params,"/home/CODE/bart/bart")

If you need more control over the reconstruction parameters for BART, take a look at the function (only 20 lines)

Note

The regularization parameters between MRIReco.jl and BART are different and need to be adjusted manually. This can be explained by some low-level differences in the FISTA algorithm / Wavelet transform and also due to scaling of the data prior to the algorithm.

+im_sub_bart,im_TE_bart = subspace_bart_reconstruction(acq,params,"/home/CODE/bart/bart")

If you need more control over the reconstruction parameters for BART, take a look at the function (only 20 lines)

Note

The regularization parameters between MRIReco.jl and BART are different and need to be adjusted manually. This can be explained by some low-level differences in the FISTA algorithm / Wavelet transform and also due to scaling of the data prior to the algorithm.