R/method-groupClade.R
af18d052
 ##' @rdname groupClade-methods
 ##' @exportMethod groupClade
df059d88
 setMethod("groupClade", signature(object="beast"),
af18d052
           function(object, node, group_name="group") {
df059d88
               groupClade_(object, node, group_name)
af18d052
           })
 
df059d88
 ##' @rdname groupClade-methods
 ##' @exportMethod groupClade
 setMethod("groupClade", signature(object="codeml"),
           function(object, node, group_name="group") {
               groupClade_(object, node, group_name)
           }
           )
af18d052
 
df059d88
 ##' @rdname groupClade-methods
 ##' @exportMethod groupClade
 setMethod("groupClade", signature(object="gg"),
           function(object, node, group_name) {
               groupClade.ggplot(object, node, group_name)
           })
af18d052
 
df059d88
 ##' @rdname groupClade-methods
 ##' @exportMethod groupClade
 setMethod("groupClade", signature(object="ggplot"),
           function(object, node, group_name) {
               groupClade.ggplot(object, node, group_name)
           })
af18d052
 
 
df059d88
 ##' @rdname groupClade-methods
 ##' @exportMethod groupClade
 setMethod("groupClade", signature(object="jplace"),
           function(object, node, group_name="group") {
               groupClade_(object, node, group_name)
           }
           )
af18d052
 
cc06d22b
 ##' group selected clade
 ##'
 ##' 
 ##' @rdname groupClade-methods
 ##' @exportMethod groupClade
 setMethod("groupClade", signature(object="nhx"),
           function(object, node, group_name="group") {
               groupClade_(object, node, group_name)
           })
 
816d760c
 ##' @rdname groupClade-methods
 ##' @exportMethod groupClade
df059d88
 setMethod("groupClade", signature(object="phylip"),
           function(object, node, group_name="group") {
               groupClade_(object, node, group_name)
816d760c
           })
 
 
 ##' @rdname groupClade-methods
 ##' @exportMethod groupClade
df059d88
 setMethod("groupClade", signature(object="phylo"),
           function(object, node, group_name="group") {
               groupClade.phylo(object, node, group_name)
816d760c
           })
 
df059d88
 
 
 groupClade.phylo <- function(object, node, group_name) {
     if (length(node) == 1) {
         clade <- extract.clade(object, node)
         tips <- clade$tip.label
     } else {
         tips <- lapply(node, function(x) {
             clade <- extract.clade(object, x)
             clade$tip.label
         })
     }
     
     groupOTU.phylo(object, tips, group_name)
 }
 
 
 groupClade_ <- function(object, node, group_name) {
     if (is(object, "phylo")) {
         object <- groupClade.phylo(object, node, group_name)
     } else {
         object@phylo <- groupClade.phylo(get.tree(object), node, group_name)
     }
     return(object)
 }
 
 
 groupClade.ggplot <- function(object, nodes, group_name) {
     df <- object$data
     df[, group_name] <- 0
     for (node in nodes) {
         df <- groupClade.df(df, node, group_name)
     }
     df[, group_name] <- factor(df[, group_name])
     object$data <- df
     return(object)
 }
 
 groupClade.df <- function(df, node, group_name) {
     foc <- c(node, get.offspring.df(df, node))
     idx <- match(foc, df$node)
     df[idx, group_name] <- max(df[, group_name]) + 1
     return(df)
 }