require(rhdf5) setClass ( Class = "GROUP_INFO" , representation =representation ( fid="H5IdComponent" ,gid="H5IdComponent" , gname="character" ), prototype = prototype ( fid = NULL, gid = NULL, gname = ""), validity = function ( object ){ cat ( "------- GROUP_INFO : method inspector -------- \n " ) if(is( object@gid, "H5IdComponent") == FALSE ){ stop ( " [ GROUP_INFO : inspector ] Error in the group name") }else{} return(TRUE) } ) group_info <- function(fid, gname){ cat("------- GROUP_INFO : method constructor --------\n") if (missing(fid)) stop("Missing the H5 file identifier") if (missing(gname)) stop("Missing group name") new(Class="GROUP_INFO", fileid = fid, groupname = gname) } setMethod( f = "initialize", signature = "GROUP_INFO", definition = function(.Object, fileid, groupname){ cat("------- GROUP_INFO : initializator --------\n") .Object@gname <- groupname .Object@fid <- fileid tmp <- H5Gopen(fileid, groupname) .Object@gid <- tmp validObject (.Object) return(.Object) } ) setGeneric( # Get the number of group attributes name = "getNGroupAttr", def = function(object){ standardGeneric("getNGroupAttr")} ) setMethod(f = "getNGroupAttr", signature = "GROUP_INFO", definition = function (object) { cat ( "------- GROUP_INFO : method getNGroupAttr --------\n " ) return(H5Oget_num_attrs(object@gid)) cat ( "------- End method getNGroupAttr --------\n " ) } ) setGeneric( # Get a group attribute name = "getGroupAttr", def = function(object, attr){ standardGeneric("getGroupAttr")} ) setMethod(f = "getGroupAttr", signature = "GROUP_INFO", definition = function (object, attr) { cat ( "------- GROUP_INFO : method getGroupAttr --------\n " ) id <- H5Aopen( object@gid, attr) value = H5Aread(id) return(value) H5Aclose(id) cat ( "------- End method getGroupAttr --------\n " ) } ) setGeneric( # Get a dataset attribute name = "getSdsAttr", def = function(object, sdsName, attr){ standardGeneric("getSdsAttr")} ) setMethod(f = "getSdsAttr", signature = "GROUP_INFO", definition = function (object, sdsName, attr) { cat ( "------- GROUP_INFO : method getSdsAttr --------\n " ) sid <- H5Dopen(object@gid, sdsName) id <- H5Aopen( sid, attr) value = H5Aread(id) return(value) H5Aclose(id) cat ( "------- End method getSdsAttr --------\n " ) } ) setGeneric( # Display sub groups names name = "listSubGroups", def = function(object){ standardGeneric("listSubGroups")} ) setMethod(f = "listSubGroups", signature = "GROUP_INFO", definition = function (object) { cat ( "------- GROUP_INFO : method listSubGroups * * * \n " ) L = list() br = h5ls(object@gid) for (i in 1:dim(br)[1]){ if ((br$otype[i] == "H5I_GROUP") & (br$group[i] != "/")) { L[length(L) + 1] <- paste0(br$group[i],"/", br$name[i]) } } return(L) cat ( "------- End method lisSubtGroups * * * \n " ) } ) setGeneric( # Get a datasets names list of a group name = "listSds", def = function(object){ standardGeneric("listSds")} ) setMethod(f = "listSds", signature = "GROUP_INFO", definition = function (object) { cat ( "------- GROUP_INFO : method listSds * * * \n " ) L = list() br = h5ls(object@gid) for (i in 1:dim(br)[1]){ if (br$otype[i] == "H5I_DATASET") { if (br$group[i] != "/") L[length(L) + 1] <- paste0(br$group[i],"/", br$name[i]) else L[length(L) + 1] <- br$name[i] } } return(L) cat ( "------- End method lisSdss * * * \n " ) } ) setGeneric( # Read sds binary data name = "readBinaryData", def = function(object, sdsName, ... ){ standardGeneric("readBinaryData")} ) setMethod(f = "readBinaryData", signature = "GROUP_INFO", definition = function (object, sdsName, ...) { cat ( "------- GROUP_INFO : method readBinaryData --------\n " ) loc = paste0(object@gname, "/",sdsName) data <- h5read(object@fid, loc,...) return(t(data)) cat ( "------- End method readBinaryData --------\n " ) } ) setGeneric( # Read sds scaled data name = "readScaledData", def = function(object, sdsName, ... ){ standardGeneric("readScaledData")} ) setMethod(f = "readScaledData", signature = "GROUP_INFO", definition = function (object, sdsName, ...) { cat ( "------- GROUP_INFO : method readScaledData --------\n " ) if((H5Aexists(object@fid, "/sds/_FillValue") == TRUE ) && (H5Aexists(object@fid, "/sds/scale_factor") == TRUE ) && (H5Aexists(object@fid, "/sds/add_offset") == TRUE )){ fill = getSdsAttr(object, sdsName, "_FillValue") scale_factor = getSdsAttr(object, sdsName, "scale_factor") offset = getSdsAttr(object, sdsName, "add_offset") } else{ cat ("------- Calling metohd ReadBinaryData --------\n ") newData = readBinaryData(object, sdsName, ...) return(newData) stop("------- End method readScaledData --------\n ") } loc = paste0(object@gname, "/",sdsName) data <- h5read(object@fid, loc,...) newData = as.numeric(scale_factor) * (data - as.numeric(offset)) return(t(newData)) cat ( "------- End method readScaledData --------\n " ) } )