source: MML/trunk/mml/links/tango/family2tango.m @ 4

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

Initial import--MML version from SOLEIL@2013

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