source: MML/trunk/mml/rmoffset.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: 5.3 KB
Line 
1function Data = rmoffset(varargin)
2%RMOFFSET - Remove the offset values for data set
3%  Data = rmoffset(DataStructure)
4%  Data = rmoffset(Family, DataIn, DeviceList)
5%  Data = rmoffset(Family, Field, DataIn, DeviceList)
6%
7%  INPUTS
8%  1. Family - Family Name
9%              Data Structure
10%              Accelerator Object
11%  2. Field - MML field name ('Monitor', 'Setpoint', etc) {Default: 'Monitor' for BPM, 'Setpoint' for magnet}
12%  3. DataIn - Input data
13%  4. DeviceList ([Sector Device #] or [element #]) {Default: whole family}
14%  5. 'Physics'  - Use physics  units (optional override of units)
15%     'Hardware' - Use hardware units (optional override of units)
16%  6. 'Struct'  - Return a data structure
17%     'Numeric' - Return numeric outputs  {Default}
18%     'Object'  - Return a accelerator object (AccObj)
19%
20%  OUTPUTS
21%  1. Data - Input data with a offset value removed
22%
23%  See also rmgolden, getoffset, getgolden
24%
25%  Written by Greg Portmann
26
27
28
29%%%%%%%%%%%%%%%%%
30% Input parsing %
31%%%%%%%%%%%%%%%%%
32UnitsFlagCell = {};
33StructFlag = 0;
34NumericFlag = 0;
35for i = length(varargin):-1:1
36    if isstruct(varargin{i})
37        % Ignor structures
38    elseif iscell(varargin{i})
39        % Ignor cells
40    elseif strcmpi(varargin{i},'struct')
41        StructFlag = 1;
42        NumericFlag = 0;
43        varargin(i) = [];
44    elseif strcmpi(varargin{i},'numeric')
45        StructFlag = 0;
46        NumericFlag = 1;
47        varargin(i) = [];
48    elseif strcmpi(varargin{i},'simulator') || strcmpi(varargin{i},'model') || strcmpi(varargin{i},'Online') || strcmpi(varargin{i},'Manual')
49        % Remove and ignor
50        varargin(i) = [];
51    elseif strcmpi(varargin{i},'physics')
52        UnitsFlagCell = {'Physics'};
53        varargin(i) = [];
54    elseif strcmpi(varargin{i},'hardware')
55        UnitsFlagCell = {'Hardware'};
56        varargin(i) = [];
57    end
58end
59
60
61if isempty(varargin)
62    error('Must have at least a family name input');
63elseif iscell(varargin{1})
64    % Cell input
65    for i = 1:length(varargin{1})
66        if length(varargin) == 1
67            Data{i} = rmoffset(varargin{1}{i}, UnitsFlagCell{:});
68        elseif length(varargin) == 2
69            Data{i} = rmoffset(varargin{1}{i}, varargin{2}{i}, UnitsFlagCell{:});
70        elseif length(varargin) == 3
71            Data{i} = rmoffset(varargin{1}{i}, varargin{2}{i}, varargin{3}{i}, UnitsFlagCell{:});
72        else
73            Data{i} = rmoffset(varargin{1}{i}, varargin{2}{i}, varargin{3}{i}, varargin{4}{i}, UnitsFlagCell{:});
74        end
75    end
76    return
77end
78
79
80
81%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
82% Family or data structure inputs beyond this point %
83%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
84Family = varargin{1};
85if isstruct(Family)
86    if ~NumericFlag
87        StructFlag = 1;
88        StructOut = Family;
89    end
90   
91    % Data structure inputs
92    if length(varargin) < 2
93        if isfield(Family,'Field')
94            Field = Family.Field;
95        else
96            Field = '';
97        end
98    end
99    if length(varargin) < 3
100        if isfield(Family,'Data')
101            Data = Family.Data;
102        else
103            error('A .Data field must exist for data structure inputs.');
104        end
105    end
106    if length(varargin) < 4
107        if isfield(Family,'DeviceList')
108            DeviceList = Family.DeviceList;
109        else
110            DeviceList = [];
111        end
112    end
113    if isempty(UnitsFlagCell)
114        if isfield(Family,'Units')
115            UnitsFlagCell{1} = Family.Units;
116        end
117    end
118    if isfield(Family,'FamilyName')
119        Family = Family.FamilyName;
120    else
121        error('For data structure inputs FamilyName field must exist')
122    end
123else
124    % Family string input
125    if length(varargin) >= 2 && ischar(varargin{2})
126        Field = varargin{2};
127        varargin(2) = [];
128    else
129        Field = '';
130    end
131    if length(varargin) >= 2
132        Setpoints = varargin{2};
133    else
134        Setpoints = '';
135    end
136    if length(varargin) >= 3
137        DeviceList = varargin{3};
138    else
139        DeviceList = [];
140    end
141
142    StructOut = [];
143end
144
145if isnumeric(Field)
146    DeviceList = Data;
147    Data = Field;
148    Field = '';
149end
150if isempty(Field)
151    if ismemberof(Family,'BPM') || ismemberof(Family,'TUNE') || strcmpi(Family, 'TUNE')
152        Field = 'Monitor';
153    else
154        Field = 'Setpoint';
155    end
156end
157
158if isempty(DeviceList)
159    DeviceList = family2dev(Family);
160end
161if (size(DeviceList,2) == 1)
162    DeviceList = elem2dev(Family, DeviceList);
163end
164
165if isempty(Data) || ~isnumeric(Data)
166    %error('Data input required');   
167    Data = getpv(Family, Field, DeviceList);
168end
169
170if size(Data,1) == 1
171    Data = ones(size(DeviceList,1),1) * Data;
172end
173
174%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
175% CommonName Input:  Convert common names to a DeviceList %
176%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
177if ischar(DeviceList)
178    DeviceList = common2dev(DeviceList, Family);
179    if isempty(DeviceList)
180        error('DeviceList was a string but common names could not be found.');
181    end
182end
183
184
185%%%%%%%%%%%%
186% rmoffset %
187%%%%%%%%%%%%
188
189Offset = getoffset(Family, Field, DeviceList, UnitsFlagCell{:});
190
191for i = 1:size(Data,1)
192    Data(i,:) = Data(i,:) - Offset(i,:);
193end
194
195
196if StructFlag
197    if isempty(StructOut)
198        StructOut = family2datastruct(Family, Field, DeviceList);
199        StructOut.DataDescriptor = 'rmoffset';
200    end
201    StructOut.Data = Data;
202    Data = StructOut;
203end
204
205
Note: See TracBrowser for help on using the repository browser.