S-PLUS Library - AnalyzeIO

INTRODUCTION

This page explains how to install the S-PLUS library AnalyzeIO. I assume that you have a basic knowledge of UNIX/LINUX and that you already have S-PLUS (5.x, 6.0) installed on your machine.

AnalyzeIO contains functions that allow ANALYZE image format .img and .hdr files to be read into S-PLUS automatically

I created this package for two reasons.

(1) These functions provide an interface between S-PLUS and ANALYZE files. Many fMRI datasets are stored in this format and S-PLUS provides a very flexible platform upon which to explore and analyze these datasets. I hope this may be useful to other Statisticians/Researchers.

(2) I wanted to practise how to create a S-PLUS library! To do this i used the book `S Programming' by Venables and Ripley.

If you have any problems/suggestions using this package, please email me on marchini@stats.ox.ac.uk

INSTALLATION

1. Download the g-zipped tar archive  AnalyzeIO.tar.gz

2. Unzip the file using                   gunzip AnalyzeIO.tar.gz

3. Unpack the archive using       tar -xvf AnalyzeIO.tar

This will create a directory in called AnalyzeIO

4.  Move this directory (with it's contents) to the default S-PLUS library tree on your machine IF you have permission.
    If not create your own library directory somewhere i.e.   mkdir ~/lib and move the directory AnalyzeIO there.

5.  Create the library from within the AnalyzeIO directory using

                   ./INS5        (for S_PLUS 5.x)

or
                    ./INS6   (for S_PLUS 6.x)

6.  You can then start an S-PLUS session from where you like and load the library using

    library(AnalyzeIO,lib.loc="~/lib") - Assuming you put it in ~/lib
or
    library(AnalyzeIO) - Assuming you put it into the default S-PLUS library tree

7. Use the EXAMPLES section to see how the functions work.

FUNCTIONS

The package contains the following functions

f.read.analyze.header - reads a .hdr file and returns it as a list
f.read.analyze.volume - reads in a .img file into an array
f.read.analyze.slice - reads in a specified slice from a .img file
f.read.analyze.slice.at.all.time.points - reads in a specified slice from a .img file
f.read.analyze.ts - reads in a specified time series from a .img file
f.analyze.file.summary - summarises the contents of a .img file
f.spectral.summary - plots a graphical summary of the frequency characteristics of an fMRI dataset stored in a .img file
f.basic.hdr.list.create - creates a basic list that can be used to write a .hdr file
f.write.analyze - creates a .img and .hdr pair of files froma given array
f.write.array.to.img.2bytes - writes an array into a .img file of 2 byte integers
f.write.array.to.img.float - writes an array into a .img file of 4 byte flotas
f.write.list.to.hdr - writes a list to a .hdr file

The functions come with help files

EXAMPLES

You can download a g-zipped .img/.hdr image pair from

http://www.stats.ox.ac.uk/~marchini/software/example.img.gz
http://www.stats.ox.ac.uk/~marchini/software/example.hdr.gz

The file example.img is a 4D fMRI dataset.
There are 21 axial slices each consisting of a 64x64 grid of 4mmx4mmx6mm voxels.
There is only one time point.

For the purpose of this example I assume you have put them in the same directory in which you started an S-PLUS session and unzipped them.

1.  Load the library AnalyzeIO  (as described above).

2. Get a summary of the data stored in the .img file using

 >f.analyze.file.summary("./example.img")
[1]
[1]        File name: ./example.img
[1]   Data Dimension: 4-D
[1]      X dimension: 64
[1]      Y dimension: 64
[1]      Z dimension: 21
[1]   Time dimension: 1 time points
[1] Voxel dimensions: 4mmx4mmx6mm
[1]        Data type: signed short (16 bits per voxel)
 

3. Read in the data from the .img file into an array using

 >A<-f.read.analyze.volume("./example.img")

4. Check the dimensions of the array

 >dim(A)
[1] 64 64 21  1

6. Print out a slice of the dataset using

 >image(A[,,10,1])

7. Read in a specific slice

 >B<-f.read.analyze.slice("./example.img",slice=5,tpt=1)

and plot it using

 >image(B)

8. Read in a time series from a given location

 >f.read.analyze.ts("./example.img",x=30,y=30,z=10)

NB. Because example.img consists of only one time point this will only return one value

9. Create an array and save it in a file of 4 byte floats

>a<-array(rnorm(20*30*40*3),dim=c(20,30,40,3))
>file<-"temp"
>f.write.analyze(a,file,size="float")
 

PROBLEMS/SUGGESTIONS

If you have any problems/suggestions using this package, please email me on marchini@stats.ox.ac.uk