estimateIRfluid function

Estimate parameters in Inversion Recovery MRI experiments model for CSF voxel

Estimate parameters in Inversion Recovery MRI experiments model for CSF voxel

The Inversion Recovery MRI signal in voxel containing only CSF follows is modeled as SInvTime=par[1]abs(12exp(InvTimepar[2]))S_InvTime = par[1] * abs( 1 - 2 * exp(-InvTime*par[2]) ) dependings on two parameters. These parameters are assumed to be tissue (and scanner) dependent.

estimateIRfluid(IRdataobj, TEScale = 100, dataScale = 1000, method = c("NLR", "QL"), varest = c("RSS", "data"), verbose = TRUE, lower = c(0, 0), upper = c(2, 2))

Arguments

  • IRdataobj: Object of class "IRdata" as generated by function readIRData.
  • TEScale: Internal scale factor for Echo Times. This influences parameter scales in numerical calculations.
  • dataScale: Internal scale factor for MR signals. This influences parameter scales in numerical calculations.
  • method: Either "NLS" for nonlinear least squares (ignores Rician bias) or "QL" for Quasi-Likelihood. The second option is more accurate but requires additional information and is computationally more expensive.
  • varest: Method to, in case of method="QR", estimate sigmaif not provided. Either from residual sums of squares ("RSS") or MR signals ("data") using function varest from package aws. Only to be used in case that no image registration was needed as preprocessing.
  • verbose: Logical. Provide some runtime diagnostics.
  • lower: Lower bounds for parameter values.
  • upper: Upper bounds for parameter values.

Details

The Inversion Recovery MRI signal in voxel containing only CSF follows is modeled as SInvTime=par[1]abs(12exp(InvTimepar[2]))S_InvTime = par[1] * abs( 1 - 2 * exp(-InvTime*par[2]) ) dependings on two parameters. These parameters are assumed to be tissue (and scanner) dependent.

Returns

List of class IRfluid with components - IRdata: 4D array containing the IRMRI data, first dimension refers to inversion times

  • InvTimes: vector of inversion times

  • segm: segmentation codes, 1 for CSF, 2 for GM, 3 for WM, 0 for out of brain

  • sigma: noise standard deviation, if not specified estimated fron CSF areas in image with largest inversion time

  • L: effective number of coils

  • Sf: Global estimate of maximal fluid signal

  • Rf: Global estimate of fluid relaxation rate

  • Sx: Array of maximal signals

  • Rx: Array of relaxation rates

  • sigma: Array of provided or estimated noise standard deviations

  • Convx: Array of convergence indicators

  • method: "NLS" for nonlinear regression or "QL" for quasi likelihood.

  • varest: Method used for variance estimation

The arrays only contain entries for fluid voxel.

References

J. Polzehl and K. Tabelow (2023), Magnetic Resonance Brain Imaging: Modeling and Data Analysis Using R, 2nd Edition, Chapter 7, Springer, Use R! Series. doi:10.1007/978-3-031-38949-8_7.

J. Polzehl and K. Tabelow (2023), Magnetic Resonance Brain Imaging - Modeling and Data Analysis Using R: Code and Data. doi:10.20347/WIAS.DATA.6.

Author(s)

Karsten Tabelow tabelow@wias-berlin.de

J"org Polzehl polzehl@wias-berlin.de

See Also

estimateIR, estimateIRsolid, estimateIRsolidfixed,smoothIRSolid

Examples

dataDir0 <- system.file("extdataIR", package = "qMRI") dataDir <- tempdir() library(oro.nifti) library(qMRI) segm <- readNIfTI(file.path(dataDir0,"Brainweb_segm")) Sf <- 900 Rf <- 0.000285 Sgm <- 400 Rgm <- 0.00075 fgm <- .15 Swm <- 370 Rwm <- 0.0011 fwm <- .05 InvTimes0 <- c(100, 200, 400, 600, 800, 1200, 1600, 2000, 2500, 3000, 3500, 4000, 4500, 5000, 6000, 15000) nTimes <- length(InvTimes0) sigma <- 40 ## generate IR signal IRdata <- generateIRData(segm, c(Sf,Rf), c(fgm,Rgm,Sgm), c(fwm,Rwm,Swm), InvTimes0, sigma) for(i in 1:9) writeNIfTI(as.nifti(IRdata[i,,,]), file.path(dataDir,paste0("IR0",i))) for(i in 10:nTimes) writeNIfTI(as.nifti(IRdata[i,,,]), file.path(dataDir,paste0("IR",i))) ## generate IRdata object t1Files <- list.files(dataDir,"*.nii.gz",full.names=TRUE) segmFile <- file.path(dataDir0,"Brainweb_segm") IRdata <- readIRData(t1Files, InvTimes0, segmFile, sigma=sigma, L=1, segmCodes=c("CSF","GM","WM")) ## estimate fluid setCores(2) # parallel mode using 2 threads IRfluid <- estimateIRfluid(IRdata, method="NLR", verbose=FALSE) cat("Estimated parameters Sf:", IRfluid$Sf, " Rf:", IRfluid$Rf, "\n")