########################################################################/-Rdoc TURNED OFF-**
# @RdocFunction .readCelHeaderV4
#
# @title "Read the header of a CEL v4 (binary) file"
#
# \description{
# @get "title".
# }
#
# @synopsis
#
# \arguments{
# \item{con}{An open and readable @connection.}
# }
#
# \value{
# Returns a named @list structure.
# }
#
# \details{
# When the header is read, the file pointer is at the beginning
# of the data section. See also @see "base::seek".
# This is an internal function that is used mainly to skip the CEL header
# to reach the data section. It does not make use of Fusion SDK.
# }
#
# @author "HB"
#
# @keyword IO
# @keyword File
# @keyword internal
#**-Rdoc TURNED OFF-/#######################################################################
.readCelHeaderV4 <- function(con, ...) {
readInteger <- function(con, ...) {
readBin(con, what="integer", size=4, n=1, signed=TRUE, endian="little");
}
readShort <- function(con, ...) {
readBin(con, what="integer", size=2, n=1, signed=TRUE, endian="little");
}
readFloat <- function(con, ...) {
readBin(con, what="double", size=4, n=1, endian="little");
}
readDWord <- function(con, ...) {
# NOTE: Ideally we would use signed=FALSE here, but there is no
# integer data type in R that can hold 4-byte unsigned integers.
# Because of this limitation, readBin() will give a warning that
# signed=FALSE only works for size=1 or 2.
# WORKAROUND: Use signed=TRUE and assume there are no values
# greater that .Machine$integer.max == 2^31-1. /HB 2015-04-15
readBin(con, what="integer", size=4, n=1, signed=TRUE, endian="little");
}
readString <- function(con, ...) {
len <- readInteger(con); # Number of characters to read
readChar(con, nchars=len);
}
# Read and validate the MAGIC
magic <- readInteger(con);
if (magic != 64) {
stop("Could not read CEL v4 file. File format error: MAGIC == ", magic);
}
list(
magic = magic,
version = readInteger(con),
cols = readInteger(con),
rows = readInteger(con),
total = readInteger(con),
hdr = readString(con),
algorithm = readString(con),
parameters = readString(con),
cellmargin = readInteger(con),
noutliers = readDWord(con),
nmasked = readDWord(con),
nsubgrids = readInteger(con)
)
} # .readCelHeaderV4()
############################################################################
# HISTORY:
# 2011-11-01
# o CLEANUP: Changed a signed=FALSE to signed=TRUE for a readBin() call
# reading 4-byte integers in .readCelHeaderV4().
# 2006-06-18
# o Created. Used by updateCel() to skip header to reach data section.
############################################################################
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.