Skip to content

Commit

Permalink
Sort out MriImage coercion: forward-compatibility with divest 1.0, on…
Browse files Browse the repository at this point in the history
…ly register methods for "nifti" if oro.nifti can be loaded
  • Loading branch information
jonclayden committed Feb 16, 2024
1 parent 7c72e82 commit 449b95d
Showing 1 changed file with 21 additions and 18 deletions.
39 changes: 21 additions & 18 deletions tractor.base/R/12_coerce.R
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
setOldClass(c("niftiImage", "internalImage"))
setOldClass("niftiImage")
setOldClass(c("internalImage", "niftiImage"))

.convertNiftiImage <- function (from)
{
if (requireNamespace("divest",quietly=TRUE) && packageVersion("divest") >= "1.0")
setOldClass(c("divestImage", "internalImage", "niftiImage"))

setAs("niftiImage", "MriImage", function (from) {
# Pick up divest attributes and convert to tags (anonymising by default)
attribs <- attributes(from)
anonymise <- attr(from, "anonymise") %||% TRUE
Expand Down Expand Up @@ -36,23 +39,23 @@ setOldClass(c("niftiImage", "internalImage"))
reordered <- attr(from, "reordered") %||% FALSE

return (MriImage$new(imageDims=dim(from), pixdim(from), voxelDimUnits=pixunits(from), origin=origin(from), xform=xform(from), reordered=reordered, tags=tags, data=data))
}

setAs("niftiImage", "MriImage", .convertNiftiImage)
setAs("internalImage", "MriImage", .convertNiftiImage)

setAs("MriImage", "nifti", function(from) {
if (is.null(getOption("niftiAuditTrail")))
options(niftiAuditTrail=FALSE)

nifti <- as.array(retrieveNifti(from))
if (RNifti:::hasData(nifti))
nifti <- updateNifti(nifti, list(cal_min=min(nifti,na.rm=TRUE), cal_max=max(nifti,na.rm=TRUE)))

return (oro.nifti::nii2oro(nifti))
})

setAs("nifti", "MriImage", function(from) as(retrieveNifti(from), "MriImage"))
if (requireNamespace("oro.nifti", quietly=TRUE))
{
setAs("MriImage", "nifti", function(from) {
if (is.null(getOption("niftiAuditTrail")))
options(niftiAuditTrail=FALSE)

nifti <- as.array(retrieveNifti(from))
if (RNifti:::hasData(nifti))
nifti <- updateNifti(nifti, list(cal_min=min(nifti,na.rm=TRUE), cal_max=max(nifti,na.rm=TRUE)))

return (oro.nifti::nii2oro(nifti))
})

setAs("nifti", "MriImage", function(from) as(retrieveNifti(from), "MriImage"))
}

# MriImage methods for RNifti generics
#' @export
Expand Down

0 comments on commit 449b95d

Please sign in to comment.