\HeaderA{simLL}{Functions to compute similarities between GO graphs and also
between Entrez Gene IDs based on their induced GO graphs.}{simLL}
\aliasA{simLP}{simLL}{simLP}
\aliasA{simUI}{simLL}{simUI}
\keyword{manip}{simLL}
\begin{Description}\relax
Both \code{simUI} and \code{simLP} compute a similarity measure
between two GO graphs. For \code{simLL}, first the induced GO graph
for each of its arguments is found and then these are passed to one
of \code{simUI} or \code{simLP}.
\end{Description}
\begin{Usage}
\begin{verbatim}
simLL(ll1, ll2, Ontology = "MF", measure = "LP", dropCodes = NULL,
      mapfun = NULL, chip = NULL)
simUI(g1, g2)
simLP(g1, g2)
\end{verbatim}
\end{Usage}
\begin{Arguments}
\begin{ldescription}
\item[\code{ll1}] A Entrez Gene ID as a character vector. 
\item[\code{ll2}] A Entrez Gene ID as a character vector.
\item[\code{Ontology}] Which ontology to use ("MF", "BP", "CC"). 
\item[\code{measure}] Which measure to use ("LP", "UI"). 
\item[\code{dropCodes}] A set of evidence codes to be ignored in
constructing the induced GO graphs. 
\item[\code{mapfun}] A function taking a character vector of Entrez Gene IDs
as its only argument and returning a list of "GO lists" matching the
structure of the lists in the GO maps of annotation data packages.
The function should behave similarly to \code{mget(x, eg2gomap,
      ifnotfound=NA)}, that is, \code{NA} should be returned if a
specified
Entrez ID has no GO mapping.  See details for the interaction of
\code{mapfun} and \code{chip}.
\item[\code{chip}] The name of a DB-based annotation data package (the name
will end in ".db").  This package will be used to generate an Entrez
ID to GO ID mapping instead of \code{mapfun}.
\item[\code{g1}] An instance of the \code{graph} class.
\item[\code{g2}] An instance of the \code{graph} class.
\end{ldescription}
\end{Arguments}
\begin{Details}\relax
For each of \code{ll1} and \code{ll2} the set of most specific GO
terms within the ontology specified (\code{Ontology}) that are not
based on any excluded evidence code (\code{dropCodes}) are found.  The
mapping is achieved in one of three ways:

\Enumerate{
\item If \code{mapfun} is provided, it will be used to perform the
needed lookups.  In this case, \code{chip} will be ignored.

\item If \code{chip} is provided and \code{mapfun=NULL}, then the
needed lookups will be done based on the Entrez to GO mappings
encapsulated in the specified annotation data package.  This is
the recommended usage.

\item If \code{mapfun} and \code{chip} are \code{NULL} or missing,
then the function will attempt to load the GO package (the
environment-based package, distinct from GO.db).  This package
contains a legacy environment mapping Entrez IDs to GO IDs.  If
the GO package is not available, an error will be raised.
Omitting both \code{mapfun} and \code{chip} is not recommended as
it is not compatible with the DB-based annotation data packages.
}

Next, the induced GO graphs are computed.

Finally these graphs are passed to one of \code{simUI}, (union
intersection), or \code{simLP} (longest path). For \code{simUI} the
distance is the size of the intersection of the node sets divided by
the size of the union of the node sets. Large values indicate more
similarity. These similarities are between 0 and 1.

For \code{simLP} the length of the longest path in the intersection
graph of the two supplied graph. Again, large values indicate more
similarity. Similarities are between 0 and the maximum leaf depth of
the graph for the specified ontology.
\end{Details}
\begin{Value}
A list with:
\begin{ldescription}
\item[\code{sim }] The numeric similarity measure.
\item[\code{measure}] Which measure was used.
\item[\code{g1}] The graph induced by \code{ll1}.
\item[\code{g2}] The graph induced by \code{ll2}.
\end{ldescription}


If one of the supplied Gene IDs does not have any GO terms associated
with it, in the selected ontology and with the selected evidence codes
then \code{NA} is returned.
\end{Value}
\begin{Author}\relax
R. Gentleman
\end{Author}
\begin{SeeAlso}\relax
\code{\LinkA{makeGOGraph}{makeGOGraph}}
\end{SeeAlso}
\begin{Examples}
\begin{ExampleCode}
  library("hgu95av2.db")
  eg1 = c("9184", "3547")

  bb = simLL(eg1[1], eg1[2], "BP", chip="hgu95av2.db")
\end{ExampleCode}
\end{Examples}

