\name{simOGraph}
\alias{simOGraph}
\title{
  Simulate oncogenetic/CBN/XMPN DAGs.
}
\description{
  Simulate DAGs that represent restrictions in the accumulation of mutations.
}
\usage{
simOGraph(n, h = ifelse(n >= 4, 4, n), conjunction = TRUE, nparents = 3,
multilevelParent = TRUE, removeDirectIndirect = TRUE, rootName = "Root",
geneNames = seq.int(n), out = c("adjmat", "rT"),
s = 0.1, sh = -0.1, typeDep = "AND")

}

\arguments{
  \item{n}{
    Number of nodes, or edges, in the graph. Like the number of genes.
}
  \item{h}{
    Approximate height of the graph. See details.
  }
  \item{conjunction}{
    If TRUE, conjunctions (i.e., multiple parents for a node) are allowed.
}
\item{nparents}{
  Maximum number of parents of a node, when \code{conjunction} is TRUE.
}
\item{multilevelParent}{
  Can a node have parents at different heights (i.e., parents that are
  at different distance from the root node)?
}
  \item{removeDirectIndirect}{
    Ensure that no two nodes are connected both directly (i.e., with an
  edge between them) and indirectly, through intermediate nodes. If
  TRUE, we return the transitive reduction of the DAG.
  %% the final DAG returned is the transitive reduction of thethe direct
  %% connections are removed from the graph starting from the bottom.
}
\item{rootName}{
  The name you want to give the "Root" node.
}

\item{geneNames}{
  The names you want to give the the non-root nodes.
}


\item{out}{Whether the ouptut should be an adjacency matrix  or a
  "restriction table", as used in   \code{\link{allFitnessEffects}}.}

\item{s}{If using as output a restriction, the default value for s. See
\code{\link{allFitnessEffects}}.}

\item{sh}{If using as output a restriction, the default value for
sh. See \code{\link{allFitnessEffects}}}

\item{typeDep}{If using as output a restriction, the default value for
"typeDep". See \code{\link{allFitnessEffects}}}

}

\details{
  This is a simple, heuristic procedure for generating graphs of
  restrictions that seem compatible with published trees in the
  oncogenetic literature.

  The basic procedure is as follows: nodes (argument \code{n}) are split
  into approximately equally sized \code{h} groups, and then each node
  from a level is connected to nodes chosen randomly from nodes of the
  remaing superior (i.e., closer to the Root) levels. The number of
  edges comes from a uniform distribution between 1 and \code{nparents}.

  The actual depth of the graph can be smaller than \code{h} because
  nodes from a level might be connected to superior levels skipping
  intermediate ones.

  See the vignette for further discussion about arguments. 

}
\value{
  An adjacency matrix for a directed graph or a data frame to be used as
  input, as "restriction table" in  \code{\link{allFitnessEffects}}.

}
\author{Ramon Diaz-Uriarte}

\examples{
(a1 <- simOGraph(10))
library(graph) ## for simple plotting
plot(as(a1, "graphNEL"))

simOGraph(3, geneNames = LETTERS[1:3])
}

\keyword{ graphs }
\keyword{ datagen }