source: MML/trunk/mml/links/tango/tangodev2dev.m

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

Initial import--MML version from SOLEIL@2013

File size: 3.6 KB
Line 
1function [DeviceList, ErrorFlag] = tangodev2dev(TangoNames, FamilyList)
2%TANGO2DEV - Convert TANGO name to device list name
3%  [DeviceList, ErrorFlag] = tangodev2dev(TangoName, Family)
4%
5%  INPUTS
6%  1. TangoNames = List of Tango names (string, matrix, or cell array)
7%  2. Family = optional input to limit the search (string, matrix, structure, or cell array)
8%
9%  OUTPUTS
10%  1. DeviceList = DeviceList name corresponding to the channel name
11%                 If the TangoNames cannot be found an empty matrix
12%                 (or a [NaN NaN] for matrix inputs) is returned
13%  2. ErrorFlag = Number of errors found
14%
15%  EXAMPLES
16%  1. tangodev2dev('ANS-C01/DG/BPM.1')
17%  2. tangodev2dev({'ANS-C01/DG/BPM.1'; 'ANS-C01/DG/BPM.1'})
18%
19%  See Also tango2family, dev2tango, tango2common, tango2dev
20
21%
22% Written by Laurent S. Nadolski
23
24if nargin < 1
25    error('Must have 1 input (''TangoNames'')');
26end
27if nargin < 2
28    FamilyList = [];
29end
30
31% Cell inputs
32if iscell(TangoNames)
33    if iscell(FamilyList)
34        if length(FamilyList) ~= length(TangoNames)
35            error('Family and TangoNames must be the same size cell arrays.');
36        end
37    end
38
39    for i = 1:length(TangoNames)
40        if iscell(FamilyList)
41            [DeviceList{i}, ErrorFlag{i}] = tangodev2dev(TangoNames{i}, FamilyList{i});
42        else
43            [DeviceList{i}, ErrorFlag{i}] = tangodev2dev(TangoNames{i}, FamilyList);
44        end
45    end
46    return;
47end
48% End cell input
49
50ErrorFlag = 0;
51DeviceList = [];
52
53%% Set FamilyList
54if isempty(FamilyList)
55    FamilyList = getfamilylist;
56elseif isstruct(FamilyList)
57    % Structures are ok
58    FamilyList = FamilyList.FamilyName;
59end
60
61for i = 1:size(TangoNames,1)
62    Found = 0;
63    for l = 1:size(FamilyList, 1)
64        FamilyTest = deblank(FamilyList(l,:));
65            TangoNamesTotal = getfamilydata(FamilyTest, 'DeviceName');
66            if ~isempty(TangoNamesTotal)
67                Name = deblank(TangoNames(i,:));
68                if iscell(TangoNamesTotal)
69                    [name,j,k] = intersect(Name, TangoNamesTotal);
70                else
71                    [name,j,k] = intersect(Name, TangoNamesTotal, 'rows');
72                end
73                if isempty(name) & length(Name) ~= size(TangoNamesTotal)
74                    Name = [repmat(' ',size(Name,1),size(TangoNamesTotal,2)-size(Name,2)) Name];
75                    if iscell(TangoNamesTotal)
76                        [name,j,k] = intersect(Name, TangoNamesTotal);
77                    else
78                        [name,j,k] = intersect(Name, TangoNamesTotal, 'rows');
79                    end
80                end
81                if isempty(name)
82                    Name = deblank(TangoNames(i,:));
83                    if length(Name)~=size(TangoNamesTotal)
84                        Name = [Name repmat(' ',size(Name,1),size(TangoNamesTotal,2)-size(Name,2))];
85                        if iscell(TangoNamesTotal)
86                            [name,j,k] = intersect(Name, TangoNamesTotal);
87                        else
88                            [name,j,k] = intersect(Name, TangoNamesTotal, 'rows');
89                        end
90                    end
91                end
92                if ~isempty(k)
93                    Found = 1;
94                    break
95                end
96            end
97            if Found
98                break
99            end
100        if Found
101            break
102        end
103    end
104    if Found
105        DeviceListTotal = getfamilydata(FamilyTest,'DeviceList');
106        Dev = DeviceListTotal(k,:);
107    else
108        Dev = [NaN NaN];
109        ErrorFlag = ErrorFlag + 1;
110    end
111
112    DeviceList = [DeviceList; Dev];
113end
114
115if all(isnan(DeviceList))
116    DeviceList = [];
117end
118% End all family search
Note: See TracBrowser for help on using the repository browser.