\name{doubleReact}
\alias{doubleReact}

\encoding{utf8}

\title{Identifies Identical Reactions}

\description{
  The function \code{doubleReact} identifies identical reactions
  (isoenzymes) in a model.
}

\usage{
  doubleReact(model, checkRev = TRUE, linInd = FALSE)
}

\arguments{
  \item{model}{
    An object of class \code{\linkS4class{modelorg}}.
  }
  \item{checkRev}{
    A single logical value. If set to \code{TRUE}, two reactions are identical,
    if, additionally to the stoichiometric coefficients, the direction of the
    reactions is the same (the corresponding value of slot
    \code{\link{react_rev}} of the model).\cr
    Default: \code{TRUE}.
  }
  \item{linInd}{
    A single logical value. If set to \code{TRUE}, two reactions are identical,
    if the vectors of stoichiometric coefficients are linear dependent.
    For example, two reactions with coefficients \eqn{(1, 1, -1)} and
    \eqn{(2, 2, -2)} are linear dependent. If the coefficients have different
    signs, for example \eqn{(-1, 1)} and \eqn{(1, -1)} (the first reaction
    being forward direction and the second one being backward direction), they
    are not identical. If \code{linInd} is set to \code{FALSE}, the
    stoichiometric must be identical, for two reactions considered to be
    identical.
    Default: \code{FALSE}.
  }
}

\details{
  In the first step, the stoichiometric matrix S is divided into
  groups of reactions containing the same number of metabolites. After
  that, the row indices of the non-zero elements of these matrices are
  compared. If identical pairs are found, we check the corresponding
  values in S. If they are also identical, the reversibility of the reactions
  are examined. If they are the same, the two reactions are called identical.
}

\value{
  If no identical reactions were found, the return value is
  FALSE. Otherwise a list is returned, ordered by the number of
  metabolites used in each reaction. Each element is a numerical vector
  containing the indices (column number fo the stoichiometrix matrix) of
  identical reactions.
}


\author{
  Gabriel Gelius-Dietrich <geliudie@uni-duesseldorf.de>

  Maintainer: Claus Jonathan Fritzemeier <clausjonathan.fritzemeier@uni-duesseldorf.de>
}


\note{
  At the moment, the directions of a pair of reactions is not
  compared. Meaning, that if concerning to the values in S the reaction
  is in forward direction, but not when including the flux values,
  \code{doubleReact} will not find it.
}

\examples{
  data(Ec_core)
  Ec_dr <- doubleReact(Ec_core)
}

\keyword{manip}