read.m
上传用户:haiyisale
上传日期:2013-01-09
资源大小:3246k
文件大小:4k
源码类别:

波变换

开发平台:

Matlab

  1. function varargout = read(t,varargin)
  2. %READ Read values in DTREE object fields.
  3. %   VARARGOUT = READ(T,VARARGIN) is the most general syntax to read
  4. %   one or more property values from the fields of a DTREE object.
  5. %
  6. %   The different ways to call the READ function are:
  7. %     PropValue = READ(T,'PropName') or
  8. %     PropValue = READ(T,'PropName','PropParam')
  9. %     Or combinations of previous syntax:
  10. %     [PropValue1,PropValue2, ...] = ...
  11. %         READ(T,'PropName1','PropParam1','PropName2','PropParam2',...)
  12. %         PropParam is optional.
  13. %
  14. %   The valid choices for PropName are:
  15. %     'sizes': with PropParam = Vector of node indices.
  16. %
  17. %     'data' :
  18. %        without PropParam or
  19. %        with PropParam = One terminal node indices or
  20. %             PropParam = Column vector of terminal node indices.
  21. %        In the last case, the PropValue is a cell array.
  22. %
  23. %   Examples:
  24. %     x = [0:0.1:1];
  25. %     t = dtree(2,3,x);
  26. %     t = nodejoin(t,[4;5]);
  27. %     sAll = read(t,'sizes');
  28. %     sNod = read(t,'sizes',[0,4,5]);
  29. %     dAll = read(t,'data');
  30. %     dNod = read(t,'data',[4;5]);
  31. %     stnAll = read(t,'tnsizes');
  32. %     stnNod = read(t,'tnsizes',[4,5]);
  33. % INTERNAL OPTIONS:
  34. %------------------
  35. % 'tnsizes':
  36. %    Without PropParam or with PropParam = Vector of terminal node ranks.
  37. %    The terminal nodes are ordered from left to right.
  38. %
  39. % 'an':
  40. %    With PropParam = Vector of nodes indices.
  41. %    NODES = READ(T,'an') returns all nodes of T.
  42. %    NODES = READ(T,'an',NODES) returns the valid nodes of T
  43. %    contained in the vector NODES.
  44. %
  45. %   See also DISP, GET, SET, WRITE.
  46. %   M. Misiti, Y. Misiti, G. Oppenheim, J.M. Poggi 01-Jan-97.
  47. %   Last Revision: 23-May-2003.
  48. %   Copyright 1995-2004 The MathWorks, Inc.
  49. %   $Revision: 1.6.4.2 $  $Date: 2004/03/15 22:37:34 $
  50. nbin = length(varargin);
  51. varargin{nbin+1} = 'all';
  52. k    = 1;
  53. kout = 1;
  54. while k<=nbin
  55.   argNAME = varargin{k};  
  56.   switch argNAME
  57.       case {'an','sizes'}
  58.          switch argNAME
  59.            case 'an'    , col = 1;
  60.            case 'sizes' , col = 2:3;
  61.          end
  62.          if ischar(varargin{k+1}) % all nodes
  63.              i_nodes = [1:size(t.allNI,1)]';
  64.              if isequal(varargin{k+1},'all') , k = k+1; end
  65.          else
  66.              i_nodes = gidxsint(t.allNI(:,1),varargin{k+1});
  67.              k = k+1;
  68.          end
  69.          varargout{kout} = t.allNI(i_nodes,col);
  70.          kout = kout+1;
  71.       case 'data'
  72.          nextarg = varargin{k+1};
  73.          if ischar(nextarg)
  74.              if isequal(nextarg,'all') , k = k+1; end
  75.              varargout{kout} = t.terNI{2};
  76.          else
  77.              n_rank = istnode(t,nextarg);
  78.              if any(n_rank==0)
  79.                   error('Invalid node value.');
  80.              end
  81.              k = k+1;
  82.              data = fmdtree('tn_read',t,'data',n_rank);
  83.              if length(n_rank)==1
  84.                  varargout{kout} = data{1};
  85.              else
  86.                  varargout{kout} = data;
  87.              end
  88.              kout = kout+1;
  89.          end
  90.       case 'tnsizes'
  91.          % optional next argument:
  92.          % nodes indices in tree structure or 'all'
  93.          %-------------------------------------------
  94.          nextarg = varargin{k+1};
  95.          if ischar(nextarg) && ~strcmp(nextarg,'all')
  96.              nextarg = 'all';
  97.          else
  98.              k = k+1;
  99.          end
  100.          varargout{kout} = fmdtree('tn_read',t,'sizes',nextarg);
  101.          kout = kout+1;
  102.       otherwise
  103.          error('Unknown object field.');
  104.   end
  105.   k = k+1;
  106. end