Home > mml > family2channel.m

family2channel

PURPOSE ^

FAMILY2CHANNEL - Converts the family name to a channel name

SYNOPSIS ^

function [ChannelNames, ErrorFlag] = family2channel(varargin);

DESCRIPTION ^

FAMILY2CHANNEL - Converts the family name to a channel name
  ChannelName = family2channel(Family, Field, DeviceList)
  ChannelName = family2channel(Family, DeviceList)

  INPUTS
  1. Family - Family Name 
              Data Structure
              Accelerator Object
              or Cell Array of Families
  2. Field = Accelerator Object field name ('Monitor', 'Setpoint', etc) {Default: 'Monitor'}
  3. DeviceList ([Sector Device #] or [element #]) {Default: whole family}

  OUTPUTS
  1. ChannelName - Channel name corresponding to the Family, Field, and DeviceList

  Written by Greg Portmann

CROSS-REFERENCE INFORMATION ^

This function calls: This function is called by:

SOURCE CODE ^

0001 function [ChannelNames, ErrorFlag] = family2channel(varargin);
0002 %FAMILY2CHANNEL - Converts the family name to a channel name
0003 %  ChannelName = family2channel(Family, Field, DeviceList)
0004 %  ChannelName = family2channel(Family, DeviceList)
0005 %
0006 %  INPUTS
0007 %  1. Family - Family Name
0008 %              Data Structure
0009 %              Accelerator Object
0010 %              or Cell Array of Families
0011 %  2. Field = Accelerator Object field name ('Monitor', 'Setpoint', etc) {Default: 'Monitor'}
0012 %  3. DeviceList ([Sector Device #] or [element #]) {Default: whole family}
0013 %
0014 %  OUTPUTS
0015 %  1. ChannelName - Channel name corresponding to the Family, Field, and DeviceList
0016 %
0017 %  Written by Greg Portmann
0018 
0019 
0020 if nargin == 0
0021     error('Must have at least one input (''Family'')!');
0022 end
0023 
0024 
0025 %%%%%%%%%%%%%%%%%%%%%
0026 % Cell Array Inputs %
0027 %%%%%%%%%%%%%%%%%%%%%
0028 if iscell(varargin{1})
0029     if length(varargin) >= 3 && iscell(varargin{3})
0030         if length(varargin{1}) ~= length(varargin{3})
0031             error('Family and DeviceList must be the same size cell arrays.');
0032         end
0033     end
0034     if length(varargin) >= 2 && iscell(varargin{2})
0035         if length(varargin{1}) ~= length(varargin{2})
0036             error('If Field is a cell array, then must be the same size as Family.');
0037         end
0038     end
0039     
0040     
0041     ErrorFlag = 0;
0042     for i = 1:length(varargin{1})
0043         if length(varargin) == 1
0044             [ChannelNames{i}, ErrorTmp] = family2channel(varargin{1}{i});
0045         elseif length(varargin) == 2
0046             if iscell(varargin{2})
0047                 [ChannelNames{i}, ErrorTmp] = family2channel(varargin{1}{i}, varargin{2}{i});
0048             else
0049                 [ChannelNames{i}, ErrorTmp] = family2channel(varargin{1}{i}, varargin{2});
0050             end
0051         else            
0052             if iscell(varargin{2})
0053                 if iscell(varargin{3})
0054                     [ChannelNames{i}, ErrorTmp] = family2channel(varargin{1}{i}, varargin{2}{i}, varargin{3}{i});
0055                 else
0056                     [ChannelNames{i}, ErrorTmp] = family2channel(varargin{1}{i}, varargin{2}{i}, varargin{3});
0057                 end
0058             else
0059                 if iscell(varargin{3})
0060                     [ChannelNames{i}, ErrorTmp] = family2channel(varargin{1}{i}, varargin{2}, varargin{3}{i});
0061                 else
0062                     [ChannelNames{i}, ErrorTmp] = family2channel(varargin{1}{i}, varargin{2}, varargin{3});
0063                 end
0064             end
0065         end
0066         ErrorFlag = ErrorFlag | ErrorTmp;
0067     end
0068     return    
0069 end
0070 
0071 
0072 
0073 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
0074 % Family or data structure inputs beyond this point %
0075 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
0076 if isstruct(varargin{1})
0077     if isfield(varargin{1},'FamilyName') & isfield(varargin{1},'Field')
0078         % Data structure inputs
0079         Family = varargin{1}.FamilyName;
0080 
0081         Field = varargin{1}.Field;
0082         if length(varargin) >= 2
0083             if ischar(varargin{2})
0084                 Field = varargin{2};
0085                 varargin(2) = [];
0086             end
0087         end
0088         if length(varargin) >= 2
0089             DeviceList = varargin{2};
0090         else
0091             DeviceList = varargin{1}.DeviceList;
0092         end
0093     else
0094         % AO input
0095         Field = '';
0096         if length(varargin) >= 2
0097             if ischar(varargin{2})
0098                 Field = varargin{2};
0099                 varargin(2) = [];
0100             end
0101         end
0102         if length(varargin) >= 2
0103             DeviceList = varargin{2};
0104         else
0105             DeviceList = varargin{1}.DeviceList;
0106         end
0107         
0108         if isempty(Field)
0109             Field = 'Monitor';
0110         end
0111         if isempty(DeviceList)
0112             DeviceList = varargin{1}.DeviceList;
0113         end
0114         if isempty(DeviceList)
0115             DeviceList = family2dev(Family);
0116         end
0117 
0118         %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
0119         % CommonName Input:  Convert common names to a varargin{3} %
0120         %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
0121         if isstr(DeviceList)
0122             DeviceList = common2dev(DeviceList, Family);
0123             if isempty(DeviceList)
0124                 error('DeviceList was a string but common names could not be found.');
0125             end
0126         end
0127 
0128         [i,iNotFound] = findrowindex(DeviceList, varargin{1}.DeviceList);
0129         if ~isempty(iNotFound)
0130             error('Device at found in the input structure');
0131         end
0132         ChannelNames = varargin{1}.(Field).ChannelNames(i,:);
0133         ErrorFlag = 0;
0134 
0135         return;
0136     end
0137 
0138 else
0139     
0140     % Family input
0141     Family = varargin{1};
0142     
0143     Field = '';
0144     if length(varargin) >= 2
0145         if ischar(varargin{2})
0146             Field = varargin{2};
0147             varargin(2) = [];
0148         end
0149     end
0150     if length(varargin) >= 2
0151         DeviceList = varargin{2};
0152     else
0153         DeviceList = [];
0154     end
0155     
0156 end
0157 
0158 if isempty(Field)
0159     Field = 'Monitor';
0160 end
0161 if isempty(DeviceList)
0162     DeviceList = family2dev(Family);
0163 end
0164 
0165 
0166 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
0167 % CommonName Input:  Convert common names to a varargin{3} %
0168 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
0169 if isstr(DeviceList)
0170     DeviceList = common2dev(DeviceList, Family);
0171     if isempty(DeviceList)
0172         error('DeviceList was a string but common names could not be found.');
0173     end
0174 end
0175 
0176 
0177 %%%%%%%%%%%%
0178 % Get data %
0179 %%%%%%%%%%%%
0180 [ChannelNames, ErrorFlag] = getfamilydata(Family, Field, 'ChannelNames', DeviceList);

Generated on Mon 21-May-2007 15:29:18 by m2html © 2003