## ##' parse RAxML bootstrapping analysis output
## ##'
## ##' 
## ##' @title read.raxml
## ##' @param file RAxML bootstrapping analysis output
## ##' @return raxml object
## ##' @export
## ##' @author Guangchuang Yu
## read.raxml <- function(file) {
##     tree.text <- readLines(file)
##     tree_text <- gsub('(:[0-9\\.eE+\\-]+)\\[(\\d+)\\]', '\\@\\2\\1', tree.text)
##     phylo <- read.tree(text=tree_text)
##     if(any(grepl('@', phylo$node.label))) {
##         bootstrap <- as.numeric(gsub("[^@]*@(\\d+)", "\\1", phylo$node.label))
##         phylo$node.label <- gsub("@\\d+", "", phylo$node.label)
##     }

##     if (all(phylo$node.label == "")) {
##         phylo$node.label <- NULL
##     }

##     bootstrap <- data.frame(node = Ntip(phylo) + 1:phylo$Nnode,
##                             bootstrap = bootstrap)

##     new("raxml",
##         file      = file,
##         fields    = "bootstrap",
##         treetext  = tree.text,
##         phylo     = phylo,
##         bootstrap = bootstrap
##         )
## }


## ##' @rdname show-methods
## ##' @importFrom ape print.phylo
## ##' @exportMethod show
## setMethod("show", signature(object = "raxml"),
##           function(object) {
##               cat("'raxml' S4 object that stored information of\n\t",
##                   paste0("'", object@file, "'.\n\n"))
##               cat("...@ tree: ")
##               print.phylo(get.tree(object))                  
##               cat("\nwith the following features available:\n")
##               print_fields(object)
##           })

## ##' @rdname groupOTU-methods
## ##' @exportMethod groupOTU
## setMethod("groupOTU", signature(object="raxml"),
##           function(object, focus, group_name="group") {
##               groupOTU_(object, focus, group_name)
##           }
##           )

## ##' @rdname groupClade-methods
## ##' @exportMethod groupClade
## setMethod("groupClade", signature(object="raxml"),
##           function(object, node, group_name="group") {
##               groupClade_(object, node, group_name)
##           })

## ##' @rdname scale_color-methods
## ##' @exportMethod scale_color
## setMethod("scale_color", signature(object="raxml"),
##           function(object, by="bootstrap", ...) {
##               scale_color_(object, by, ...)
##           })


## ##' @rdname gzoom-methods
## ##' @exportMethod gzoom
## setMethod("gzoom", signature(object="raxml"),
##           function(object, focus, subtree=FALSE, widths=c(.3, .7)) {
##               gzoom.phylo(get.tree(object), focus, subtree, widths)
##           })


## ##' @rdname get.tree-methods
## ##' @exportMethod get.tree
## setMethod("get.tree", signature(object="raxml"),
##           function(object,...) {
##               object@phylo
##           }
##           )


## ##' @rdname get.fields-methods
## ##' @exportMethod get.fields
## setMethod("get.fields", signature(object="raxml"),
##           function(object, ...) {
##               get.fields.tree(object)
##           }
##           )