function m = addTwo2One(m, from1, from2, to, fwd)
% ADDTWO2ONE adds a x(1) + x(2) --> x(3) reaction to the model.
%
% m = addTwo2One(m, from1, from2, to, fwd) adds a reaction to the model m of the 
% form:
%                      p(fwd)
% x(from1) + x(from2) -------> x(to)
%
% See also
%   addTwo2OneRev
%   addOne2Two
%   addOne2One
%   addInputTwo2One

% This work is licensed under the Creative Commons Attribution-Noncommercial-No Derivative 
% Works 3.0 United States License. To view a copy of this license, visit 
% http://creativecommons.org/licenses/by-nc-nd/3.0/us/ or send a letter to Creative Commons,
% 171 Second Street, Suite 300, San Francisco, California, 94105, USA.

    m = a2add(m, from1, from2,    to, fwd,  1);
    m = a2add(m, from1, from2, from1, fwd, -1);
    m = a2add(m, from1, from2, from2, fwd, -1);

    % add term to stoichiometry matrix    
    m.nR            = m.nR+1;
    [m.spinds.i_S, m.spinds.j_S, m.spinds.x_S, m.spinds.n_S] = ...
            sparse_vec(m.spinds.i_S, m.spinds.j_S, m.spinds.x_S, m.spinds.n_S, to, m.nR, 1);
    [m.spinds.i_S, m.spinds.j_S, m.spinds.x_S, m.spinds.n_S] = ...
            sparse_vec(m.spinds.i_S, m.spinds.j_S, m.spinds.x_S, m.spinds.n_S, from1, m.nR, -1);
    [m.spinds.i_S, m.spinds.j_S, m.spinds.x_S, m.spinds.n_S] = ...
            sparse_vec(m.spinds.i_S, m.spinds.j_S, m.spinds.x_S, m.spinds.n_S, from2, m.nR, -1);
end