source: MML/trunk/mml/links/tango/tango2common.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: 4.6 KB
Line 
1function [CommonNames, ErrorFlag] = tango2common(TangoNames, Field, Family);
2%TANGO2COMMON - Converts TANGO name to common name
3% [CommonNames, ErrorFlag] = tango2common(TangoNames, Field, Family)
4%
5%  INPUTS
6%  1. TangoNames = List of Tango names (string, matrix, cell array)
7%  2. Field = Accelerator Object field name ('Monitor', 'Setpoint', etc) {'Monitor'}
8%  3. Family = Family Name
9%              Accelerator Object
10%              Cell Array of Accelerator Objects or Family Names
11%              [] search all families {default}
12%
13%  OUPUTS
14%  1. CommonNames = Common names corresponding to the Tango name
15%                   If the common name cannot be found an empty strings
16%                   (or a blank string for matrix inputs) is returned
17%  2. ErrorFlag = Number of errors found
18%
19%  NOTES
20%  1. TangoNames can be a cell array when Field and Family are not
21%  2. For DataType='vector' only the first common names is returned (DeviceList would be needed as an input)
22%
23%  EXAMPLES
24%  1. tango2common('ANS-C01/DGsim/BPM.1/X')
25%
26% See Also tango2dev, tango2family, common2family
27
28%
29% Written by Laurent Nadolski
30% Revision 26 feb 2005: row feature turned off for cells
31
32if nargin < 1
33    error('Must have at least 1 input (''TangoNames'')');
34end
35if nargin < 2
36    Field = 'Monitor';
37end
38if isempty(Field)
39    Field = 'Monitor';
40end
41if nargin < 3
42    Family = [];
43end
44
45%% Cell inputs
46if iscell(TangoNames)
47    if iscell(Family)
48        if length(Family) ~= length(TangoNames)
49            error('Family and TangoNames must be the same size cell arrays.');
50        end
51    end
52    if iscell(Field)
53        if length(Field) ~= length(TangoNames)
54            error('Field and TangoNames must be the same size cell arrays.');
55        end
56    end
57
58    for i = 1:length(TangoNames)
59        if iscell(Family)
60            if iscell(Field)
61                [CommonNames{i}, ErrorFlag{i}] = tango2common(TangoNames{i}, Field{i}, Family{i});
62            else
63                [CommonNames{i}, ErrorFlag{i}] = tango2common(TangoNames{i}, Field, Family{i});
64            end
65        else
66            if iscell(Field)
67                [CommonNames{i}, ErrorFlag{i}] = tango2common(TangoNames{i}, Field{i}, Family);
68            else
69                [CommonNames{i}, ErrorFlag{i}] = tango2common(TangoNames{i}, Field, Family);
70            end
71        end
72    end
73    return
74end
75% End cell input
76
77%% Search all families
78if isempty(Family)
79    CommonNames = [];
80    ErrorFlag = 0;
81    FamilyList = getfamilylist;
82
83    for i = 1:size(TangoNames,1)
84        Name = deblank(TangoNames(i,:));
85        Found = 0;
86        for j = 1:size(FamilyList, 1)           
87            CommonName = tango2common(Name, Field, deblank(FamilyList(j,:)));
88            if ~isempty(CommonName)
89                Found = 1;
90                break
91            end
92        end
93        if Found
94            NewCommonName = CommonName;
95        else
96            NewCommonName = ' ';
97            ErrorFlag = ErrorFlag + 1;
98        end
99        CommonNames = strvcat(CommonNames, NewCommonName);
100    end
101    CommonNames = deblank(CommonNames);
102    return
103end
104
105
106%% CommonNames can be a matrix
107CommonNames = [];
108ErrorFlag = 0;
109for i = 1:size(TangoNames,1)
110    Name = deblank(TangoNames(i,:));
111
112    TangoNamesTotal = getfamilydata(Family, Field, 'TangoNames');
113   
114    if iscell(TangoNamesTotal)       
115        [name,j,k] = intersect(Name, TangoNamesTotal);
116    else
117        [name,j,k] = intersect(Name, TangoNamesTotal, 'rows');
118    end
119
120    if isempty(name) & length(Name) ~= size(TangoNamesTotal)
121        Name = [repmat(' ',size(Name,1),size(TangoNamesTotal,2)-size(Name,2)) Name];
122        if iscell(TangoNamesTotal)
123            [name,j,k] = intersect(Name, TangoNamesTotal);
124        else
125            [name,j,k] = intersect(Name, TangoNamesTotal, 'rows');
126        end
127    end
128
129    if isempty(name)
130        Name = deblank(TangoNames(i,:));
131        if length(Name)~=size(TangoNamesTotal)
132            Name = [Name repmat(' ',size(Name,1),size(TangoNamesTotal,2)-size(Name,2))];
133            if iscell(TangoNamesTotal)
134                [name,j,k] = intersect(Name, TangoNamesTotal);
135            else
136                [name,j,k] = intersect(Name, TangoNamesTotal, 'rows');
137            end
138        end
139    end
140
141    if ~isempty(k)
142        CommonNamesTotal = getfamilydata(Family, 'CommonNames');
143
144        if isempty(CommonNamesTotal)
145            NewCommonName = ' ';
146            ErrorFlag = ErrorFlag + 1;
147        else
148            NewCommonName = CommonNamesTotal(k,:);
149        end
150    else
151        NewCommonName = ' ';
152        ErrorFlag = ErrorFlag + 1;
153    end
154    CommonNames = strvcat(CommonNames, NewCommonName);
155end
156
157CommonNames = deblank(CommonNames);
Note: See TracBrowser for help on using the repository browser.