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