source: MML/trunk/mml/family2channel.m @ 4

Last change on this file since 4 was 4, checked in by zhangj, 11 years ago

Initial import--MML version from SOLEIL@2013

File size: 5.3 KB
Line 
1function [ChannelNames, ErrorFlag] = family2channel(varargin);
2%FAMILY2CHANNEL - Converts the family name to a channel name
3%  ChannelName = family2channel(Family, Field, DeviceList)
4%  ChannelName = family2channel(Family, DeviceList)
5%
6%  INPUTS
7%  1. Family - Family Name
8%              Data Structure
9%              Accelerator Object
10%              or Cell Array of Families
11%  2. Field = Accelerator Object field name ('Monitor', 'Setpoint', etc) {Default: 'Monitor'}
12%  3. DeviceList ([Sector Device #] or [element #]) {Default: whole family}
13%
14%  OUTPUTS
15%  1. ChannelName - Channel name corresponding to the Family, Field, and DeviceList
16%
17%  Written by Greg Portmann
18
19
20if nargin == 0
21    error('Must have at least one input (''Family'')!');
22end
23
24
25%%%%%%%%%%%%%%%%%%%%%
26% Cell Array Inputs %
27%%%%%%%%%%%%%%%%%%%%%
28if iscell(varargin{1})
29    if length(varargin) >= 3 && iscell(varargin{3})
30        if length(varargin{1}) ~= length(varargin{3})
31            error('Family and DeviceList must be the same size cell arrays.');
32        end
33    end
34    if length(varargin) >= 2 && iscell(varargin{2})
35        if length(varargin{1}) ~= length(varargin{2})
36            error('If Field is a cell array, then must be the same size as Family.');
37        end
38    end
39   
40   
41    ErrorFlag = 0;
42    for i = 1:length(varargin{1})
43        if length(varargin) == 1
44            [ChannelNames{i}, ErrorTmp] = family2channel(varargin{1}{i});
45        elseif length(varargin) == 2
46            if iscell(varargin{2})
47                [ChannelNames{i}, ErrorTmp] = family2channel(varargin{1}{i}, varargin{2}{i});
48            else
49                [ChannelNames{i}, ErrorTmp] = family2channel(varargin{1}{i}, varargin{2});
50            end
51        else           
52            if iscell(varargin{2})
53                if iscell(varargin{3})
54                    [ChannelNames{i}, ErrorTmp] = family2channel(varargin{1}{i}, varargin{2}{i}, varargin{3}{i});
55                else
56                    [ChannelNames{i}, ErrorTmp] = family2channel(varargin{1}{i}, varargin{2}{i}, varargin{3});
57                end
58            else
59                if iscell(varargin{3})
60                    [ChannelNames{i}, ErrorTmp] = family2channel(varargin{1}{i}, varargin{2}, varargin{3}{i});
61                else
62                    [ChannelNames{i}, ErrorTmp] = family2channel(varargin{1}{i}, varargin{2}, varargin{3});
63                end
64            end
65        end
66        ErrorFlag = ErrorFlag | ErrorTmp;
67    end
68    return   
69end
70
71
72
73%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
74% Family or data structure inputs beyond this point %
75%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
76if isstruct(varargin{1})
77    if isfield(varargin{1},'FamilyName') & isfield(varargin{1},'Field')
78        % Data structure inputs
79        Family = varargin{1}.FamilyName;
80
81        Field = varargin{1}.Field;
82        if length(varargin) >= 2
83            if ischar(varargin{2})
84                Field = varargin{2};
85                varargin(2) = [];
86            end
87        end
88        if length(varargin) >= 2
89            DeviceList = varargin{2};
90        else
91            DeviceList = varargin{1}.DeviceList;
92        end
93    else
94        % AO input
95        Field = '';
96        if length(varargin) >= 2
97            if ischar(varargin{2})
98                Field = varargin{2};
99                varargin(2) = [];
100            end
101        end
102        if length(varargin) >= 2
103            DeviceList = varargin{2};
104        else
105            DeviceList = varargin{1}.DeviceList;
106        end
107       
108        if isempty(Field)
109            Field = 'Monitor';
110        end
111        if isempty(DeviceList)
112            DeviceList = varargin{1}.DeviceList;
113        end
114        if isempty(DeviceList)
115            DeviceList = family2dev(Family);
116        end
117
118        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
119        % CommonName Input:  Convert common names to a varargin{3} %
120        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
121        if isstr(DeviceList)
122            DeviceList = common2dev(DeviceList, Family);
123            if isempty(DeviceList)
124                error('DeviceList was a string but common names could not be found.');
125            end
126        end
127
128        [i,iNotFound] = findrowindex(DeviceList, varargin{1}.DeviceList);
129        if ~isempty(iNotFound)
130            error('Device at found in the input structure');
131        end
132        ChannelNames = varargin{1}.(Field).ChannelNames(i,:);
133        ErrorFlag = 0;
134
135        return;
136    end
137
138else
139   
140    % Family input
141    Family = varargin{1};
142   
143    Field = '';
144    if length(varargin) >= 2
145        if ischar(varargin{2})
146            Field = varargin{2};
147            varargin(2) = [];
148        end
149    end
150    if length(varargin) >= 2
151        DeviceList = varargin{2};
152    else
153        DeviceList = [];
154    end
155   
156end
157
158if isempty(Field)
159    Field = 'Monitor';
160end
161if isempty(DeviceList)
162    DeviceList = family2dev(Family);
163end
164
165
166%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
167% CommonName Input:  Convert common names to a varargin{3} %
168%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
169if isstr(DeviceList)
170    DeviceList = common2dev(DeviceList, Family);
171    if isempty(DeviceList)
172        error('DeviceList was a string but common names could not be found.');
173    end
174end
175
176
177%%%%%%%%%%%%
178% Get data %
179%%%%%%%%%%%%
180[ChannelNames, ErrorFlag] = getfamilydata(Family, Field, 'ChannelNames', DeviceList);
Note: See TracBrowser for help on using the repository browser.