%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% FUNCTION:    fromParfrac
%
% DESCRIPTION: Construct a rational from parfrac model
%
% CALL:        r = Parfrac(a, pl)
%
% PARAMETER:   pl   - plist
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function r = fromParfrac(r, pli)

  VERSION = '$Id: fromParfrac.m,v 1.10 2011/08/15 12:41:52 hewitson Exp $';


  % get pzmodel info
  ii = rational.getInfo('rational', 'From Parfrac');

  % Set the method version string in the minfo object
  ii.setMversion([VERSION '-->' ii.mversion]);

  % Combine input plist with default values
  pl = applyDefaults(ii.plists, pli);
  
  % Extrac model
  
  pf = find(pl, 'parfrac');
  [a,b] = residue(pf.res,pf.poles,pf.dir);
  
  % Set fields
  r.num = a;
  r.den = b;

  % Override model properties from the parfrac object
  
  if isempty(pl.find('ounits'))
    pl.pset('ounits', pf.ounits);
  end
  
  if isempty(pl.find('iunits'))
    pl.pset('iunits', pf.iunits);
  end
    
  if isempty(pl.find('name'))
    pl.pset('name', sprintf('rational(%s)', pf.name));
  end
  
  if isempty(pl.find('description'))
    pl.pset('description', pf.description);
  end
  
  % Add history
  r.addHistory(ii, pl, [], pf.hist);

  % Set object properties
  r.setObjectProperties(pl);
  
end
