source: MML/trunk/mml/getroll.m

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

Initial import--MML version from SOLEIL@2013

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