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