source: MML/trunk/mml/family2tol.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.5 KB
Line 
1function [Data, ErrorFlag] = family2tol(varargin)
2%FAMILY2TOL - Return the (SP-AM) tolerance for a family
3%  [Tol, ErrorFlag] = family2tol(Family, Field, DeviceList)
4%  [Tol, ErrorFlag] = family2tol(Family, DeviceList)
5%
6%  INPUTS
7%  1. Family - Family Name
8%              Data Structure
9%              Accelerator Object
10%  2. Field - Accelerator Object field name ('Monitor', 'Setpoint', etc) {Default: 'Setpoint'}
11%  3. DeviceList ([Sector Device #] or [element #]) {Default: Entire family}
12%  4. 'Physics'  - Use physics  units (optional override of units)
13%     'Hardware' - Use hardware units (optional override of units)
14%  5. 'Numeric' - Numeric output {Default}
15%     'Struct'  - Data structure output
16%
17%  OUTPUTS
18%  1. Tol = Tolerance field corresponding to the Family, Field, and DeviceList
19%
20%  NOTES
21%  1. If Family is a cell array, then DeviceList and Field can also be a cell arrays
22%
23%  Written by Greg Portmann
24
25
26%%%%%%%%%%%%%%%%%
27% Input Parsing %
28%%%%%%%%%%%%%%%%%
29UnitsFlagCell = {};
30StructOutputFlag = 0;
31for i = length(varargin):-1:1
32    if isstruct(varargin{i})
33        % Ignor structures
34    elseif iscell(varargin{i})
35        % Ignor cells
36    elseif strcmpi(varargin{i},'struct')
37        StructOutputFlag = 1;
38        varargin(i) = [];
39    elseif strcmpi(varargin{i},'numeric')
40        StructOutputFlag = 0;
41        varargin(i) = [];
42    elseif strcmpi(varargin{i},'simulator') || strcmpi(varargin{i},'model') || strcmpi(varargin{i},'Online') || strcmpi(varargin{i},'Manual')
43        % Remove and ignor
44        varargin(i) = [];
45    elseif strcmpi(varargin{i},'physics')
46        UnitsFlagCell = {'Physics'};
47        varargin(i) = [];
48    elseif strcmpi(varargin{i},'hardware')
49        UnitsFlagCell = {'Hardware'};
50        varargin(i) = [];
51    end
52end
53
54if isempty(varargin)
55    error('Must have at least a family name input');
56end
57
58
59%%%%%%%%%%%%%%%%%%%%%
60% Cell Array Inputs %
61%%%%%%%%%%%%%%%%%%%%%
62if iscell(varargin{1})
63    for i = 1:length(varargin{1})
64        if length(varargin) < 2
65            [Data{i}, ErrorFlag{i}] = family2tol(varargin{1}{i}, UnitsFlagCell{:});
66        elseif length(varargin) < 3
67            if iscell(varargin{2})
68                [Data{i}, ErrorFlag{i}] = family2tol(varargin{1}{i}, varargin{2}{i}, UnitsFlagCell{:});
69            else
70                [Data{i}, ErrorFlag{i}] = family2tol(varargin{1}{i}, varargin{2}, UnitsFlagCell{:});
71            end
72        else
73            if iscell(varargin{2})
74                if iscell(varargin{3})
75                    [Data{i}, ErrorFlag{i}] = family2tol(varargin{1}{i}, varargin{2}{i}, varargin{3}{i}, UnitsFlagCell{:});
76                else
77                    [Data{i}, ErrorFlag{i}] = family2tol(varargin{1}{i}, varargin{2}{i}, varargin{3}, UnitsFlagCell{:});
78                end
79            else
80                if iscell(varargin{3})
81                    [Data{i}, ErrorFlag{i}] = family2tol(varargin{1}{i}, varargin{2}, varargin{3}{i}, UnitsFlagCell{:});
82                else
83                    [Data{i}, ErrorFlag{i}] = family2tol(varargin{1}{i}, varargin{2}, varargin{3}, UnitsFlagCell{:});
84                end
85            end
86        end
87    end
88    return
89end
90
91
92%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
93% Parse Family, Field, DeviceList %
94%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
95[Family, Field, DeviceList, UnitsFlag] = inputparsingffd(varargin{:});
96
97
98% Units flag
99if isempty(UnitsFlagCell)
100    % For structure inputs, use the units in the structure (from inputparsingffd)
101    % Else, get the default family value
102    if isempty(UnitsFlag)
103        UnitsFlag = getunits(Family);
104    end
105else
106    % Input override has priority
107    UnitsFlag = UnitsFlagCell{1};
108end
109
110
111% Default field is Setpoint
112if isempty(Field)
113    Field = 'Setpoint';
114end
115
116
117%%%%%%%%%%%%
118% Get data %
119%%%%%%%%%%%%
120[Data, ErrorFlag] = getfamilydata(Family, Field, 'Tolerance', DeviceList);
121
122
123
124%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
125% Change to physics units if requested %
126%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
127if strcmpi(UnitsFlag,'Physics')
128    Data = hw2physics(Family, Field, Data, DeviceList);
129end
130
131
132%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
133% Return a data structure if requested %
134%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
135if StructOutputFlag
136    DataNumeric = Data;
137    if isempty(UnitsFlag)
138        Data = family2datastruct(Family, Field, DeviceList);
139    else
140        Data = family2datastruct(Family, Field, DeviceList, UnitsFlag);
141    end
142    Data.Data = DataNumeric;
143    Data.DataDescriptor = sprintf('%s.%s Tolerance', Family, Field);
144    Data.CreatedBy = 'family2tol';
145end
146
Note: See TracBrowser for help on using the repository browser.