Hi all,

I've written a function that can write mgh files from R (
http://www.r-project.org/). Hopefully some of you will find it useful. It's
more or less a translation of save_mgh.m.

If you're looking for a function that can read mgh files into R, load.mgh.R
is included in a package I wrote which can be found here:
http://www.nitrc.org/frs/download.php/4629/cortex_0.1.tar.gz

I recommend using load.mgh.R to read data in, only because save.mgh.R
follows the same scheme within R for storing data. I'll include save.mgh.R
in this package at some stage.

If you run into problems with either of these let me know & I'll do my best
to help.

Code is pasted below between the lines below, copy this into a text file
and save as "save.mgh.R"

Example usage (in R):

>my.surface <- load.mgh("hpardoe.lh.thickness.fsaverage.mgh")
>my.surface$x <- rnorm(163842, mean = 3, sd = 0.3) # replaces thickness
values with random noise
>save.mgh(vol = my.surface, fname = "test.lh.mgh")

you can then open "test.lh.mgh" in freeview.

Best wishes
Heath

----------------------------------------------
save.mgh <-function(vol,fname) {

# R translation of save_mgh.m
# written by Heath Pardoe, heath.par...@nyumc.org, 09/12/2013

MRI.UCHAR <-  0
MRI.INT <-    1
MRI.LONG <-   2
MRI.FLOAT <-  3
MRI.SHORT <-  4
MRI.BITMAP <- 5
MRI.TENSOR <- 6
slices <- c(1:256)

fid <- file(fname,open = "wb", blocking = TRUE)

width <- vol$ndim1
height <- vol$ndim2
depth <- vol$ndim3

writeBin(as.integer(1),fid,size = 4, endian = "big")
writeBin(as.integer(width),fid,size = 4, endian = "big")
writeBin(as.integer(height),fid,size = 4, endian = "big")
writeBin(as.integer(depth),fid,size = 4, endian = "big")
writeBin(as.integer(1),fid,size = 4, endian = "big")

# HP note: I've ignored all the diffusion tensor stuff
writeBin(as.integer(MRI.FLOAT),fid,size = 4, endian = "big")

writeBin(as.integer(1),fid,size = 4, endian = "big")
# dof = fread(fid, 1, 'int');
## HP note: ignored ^this line^ from save_mgh.m

UNUSED.SPACE.SIZE <- 256
USED.SPACE.SIZE <- (3*4+4*3*4)  # space for ras transform

unused.space.size <- UNUSED.SPACE.SIZE - 2

# ignored all the stuff about "M" - could probably do it if necessary so
let me know
#if (nargin > 2)
## fwrite(fid, 1, 'short')        # ras.good.flag <- 0
# writeBin(1,fid,size = 2, endian = "big")
# unused.space.size <- unused.space.size - USED.SPACE.SIZE
## fwrite(fid, sizes(1), 'float32')  # xsize
## fwrite(fid, sizes(2), 'float32')  # ysize
## fwrite(fid, sizes(3), 'float32')  # zsize
#
# fwrite(fid, M(1,1), 'float32')   # x.r
# fwrite(fid, M(2,1), 'float32')   # x.a
# fwrite(fid, M(3,1), 'float32')   # x.s

# fwrite(fid, M(1,2), 'float32')   # y.r
# fwrite(fid, M(2,2), 'float32')   # y.a
# fwrite(fid, M(3,2), 'float32')   # y.s

# fwrite(fid, M(1,3), 'float32')   # z.r
# fwrite(fid, M(2,3), 'float32')   # z.a
# fwrite(fid, M(3,3), 'float32')   # z.s

# fwrite(fid, M(1,4), 'float32')   # c.r
# fwrite(fid, M(2,4), 'float32')   # c.a
# fwrite(fid, M(3,4), 'float32')   # c.s
#else
# fwrite(fid, 0, 'short')        # ras.good.flag <- 0
 writeBin(as.integer(0),fid,size = 2, endian = "big")

#   } #

writeBin(as.integer(rep.int(0,unused.space.size)),fid,size = 1)
bpv <- 4    # bytes/voxel
nelts <- width * height   # bytes per slice
writeBin(vol$x,fid, size = 4, endian = "big")
close(fid)
}
---------------------------------------------

-- 
Heath Pardoe, PhD
Research Scientist
School of Medicine
New York University

223 East 34th Street
New York, NY 10016
Office: +1-646-754-5320
Cell:   +1-347-285-1126
Skype: hpardoe
https://sites.google.com/site/hpardoe/
_______________________________________________
Freesurfer mailing list
Freesurfer@nmr.mgh.harvard.edu
https://mail.nmr.mgh.harvard.edu/mailman/listinfo/freesurfer


The information in this e-mail is intended only for the person to whom it is
addressed. If you believe this e-mail was sent to you in error and the e-mail
contains patient information, please contact the Partners Compliance HelpLine at
http://www.partners.org/complianceline . If the e-mail was sent to you in error
but does not contain patient information, please contact the sender and properly
dispose of the e-mail.

Reply via email to