function [ecg RVepInt RVenInt LVepInt LVenInt] = ecgGen(t,p,debug)

% ecg = ecgGen(t,p)
%
% Input Variables
%   t - time points at which to generate ECG signal
%   p - parameters to generate signal
%   p.RVep - right venticular epicaridal parameters
%   p.RVen - right venticular endocaridal parameters
%   p.LVep - left venticular epicaridal parameters
%   p.LVen - left venticular endocaridal parameters
%   p.*.mag - magnitude of coresponding signal
%   p.*.sig - sigmoid parameters [slopeStart start slopeEnd end]
%
% Output Variables
%   ecg - simulated ecg
%
% Description
%   Uses a model based approach to generate an ECG.

% Created
%   4/21/2006, Richard J. Povinelli, Marquette University
%
% Modified
%   Mohamed A Mneimneh, Marquette University
% 
% This software is released under the terms of the GNU General
% Public License (http://www.gnu.org/copyleft/gpl.html).

AVPos = p.AV.mag * diffsigmoid(t,p.AV.sig + [0 p.AV.posDelta1 0 p.AV.posDelta2]);
AVNeg = p.AV.mag * diffsigmoid(t,p.AV.sig + [0 p.AV.posDelta1 0 p.AV.posDelta2]);

RVepPos = p.RVep.mag * diffsigmoid(t,p.RVep.sig + [0 p.RVep.posDelta1 0 p.RVep.posDelta2]);
RVenPos = p.RVen.mag * diffsigmoid(t,p.RVen.sig + [0 p.RVen.posDelta1 0 p.RVen.posDelta2]);
LVepPos = p.LVep.mag * diffsigmoid(t,p.LVep.sig + [0 p.LVep.posDelta1 0 p.LVep.posDelta2]);
LVenPos = p.LVen.mag * diffsigmoid(t,p.LVen.sig + [0 p.LVen.posDelta1 0 p.LVen.posDelta2]);
RVepNeg = p.RVep.mag * diffsigmoid(t,p.RVep.sig + [0 p.RVep.negDelta1 0 p.RVep.negDelta2]);
RVenNeg = p.RVen.mag * diffsigmoid(t,p.RVen.sig + [0 p.RVen.negDelta1 0 p.RVen.negDelta2]);
LVepNeg = p.LVep.mag * diffsigmoid(t,p.LVep.sig + [0 p.LVep.negDelta1 0 p.LVep.negDelta2]);
LVenNeg = p.LVen.mag * diffsigmoid(t,p.LVen.sig + [0 p.LVen.negDelta1 0 p.LVen.negDelta2]);


% ecg = RVenPos - RVenNeg + ...
%       LVepPos - LVepNeg + ...
%       LVenPos - LVenNeg;
ecg = AVPos - AVNeg   + ...
    RVepPos - RVepNeg + ...
    RVenPos - RVenNeg + ...
    LVepPos - LVepNeg + ...
    LVenPos - LVenNeg;


if nargin == 3 %debug
    %     AVInt   =  Lintersect(AVPos,AVNeg);
    RVepInt =  Lintersect(RVepPos,RVepNeg);
    RVenInt =  Lintersect(RVenPos,RVenNeg);
    LVepInt =  Lintersect(LVepPos,LVepNeg);
    LVenInt =  Lintersect(LVenPos,LVenNeg);

end %if