source: MML/trunk/machine/SOLEIL/StorageRing/bpm/getabcd.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: 2.7 KB
Line 
1function [AM, tout, DataTime, ErrorFlag] = getabcd(varargin)
2%getabcd - Returns the horizontal orbit
3%  [AM, tout, DataTime]  = getabcd(DeviceList, t, FreshDataFlag, TimeOutPeriod)
4%         or
5%  [AM, tout, DataTime]  = getabcd(DataStructure, t, FreshDataFlag, TimeOutPeriod)
6%
7%  INPUTS
8%  1. DeviceList or DataStructure  (see help getpv)
9%  2. t  (see help getpv)
10%  3. FreshDataFlag  (see help getpv)
11%  4. TimeOutPeriod  (see help getpv)
12%  5. 'Struct' will return a data structure
13%     'Numeric' will return a vector output {default}
14%  6. 'Archive' will save a BPM data structure to \<DataRoot>\BPM\
15%      with filename BPMy<Date><Time>.mat
16%
17%  OUTPUTS
18%  1. AM = orbit vector or data structure
19%  2. tout  (see help getpv)
20%  3. DataTime
21%  4. ErrorFlag  (see help getpv)
22%
23%  NOTE
24%  1. 'Struct', 'Numeric', and 'Archive' are not case sensitive
25%  2. All inputs are optional
26%
27%  EXAMPLE
28%  1. <a href="matlab: plot(getspos(gethbpmfamily),getabcd); xlabel('BPM Position [meters]'); ylabel('Horizontal Orbit');">plot(getabcd);</a>
29%
30%  See also gety, getbpm, getam, getpv
31%
32%  Written by Greg Portmann
33
34
35%  Family = gethbpmfamily;
36Family = 'BPMx'; % faster
37
38
39% Get input flags
40StructOutputFlag = 0;
41ArchiveFlag = 0;
42for i = length(varargin):-1:1
43    if isstr(varargin{i})
44        if strcmpi(varargin{i},'struct')
45            StructOutputFlag = 1;
46            %varargin(i) = [];
47        elseif strcmpi(varargin{i},'numeric')
48            StructOutputFlag = 0;
49            %varargin(i) = [];
50        elseif strcmpi(varargin{i},'archive')
51            ArchiveFlag = 1;
52            varargin(i) = [];
53        end
54    end
55end
56
57devName = family2tangodev('BPMx', []);
58SwitchingFlag = 1;
59Kx = 11.4; % mm
60Kz = 11.4; % mm
61
62for k=1:length(devName)
63
64    attributes = {'XPosSA', 'ZPosSA', 'VaSA', 'VbSA', 'VcSA', 'VdSA', 'SumSA', 'QuadSA'};
65    rep = tango_read_attributes2(devName{k}, attributes);
66    for ik =1:8,
67        data.(rep(ik).name) = rep(ik).value;
68    end
69
70    % get data from TANGO static database
71    [libera_RF_offset,block_offset,BBA_offset,survey_offset]=get_bpm_offsets(devName{k});
72
73    % Direct Build data
74        Sumbuild = sum([data.(rep(3).name); data.(rep(4).name); data.(rep(5).name); data.(rep(6).name)]);
75
76        Xbuild = Kx*(data.(rep(3).name)-data.(rep(4).name)-data.(rep(5).name)+data.(rep(6).name))./Sumbuild - ...
77            (block_offset(1)+survey_offset(1)+BBA_offset(1));
78        Zbuild = Kz*(data.(rep(3).name)+data.(rep(4).name)-data.(rep(5).name)-data.(rep(6).name))./Sumbuild - ...
79            (block_offset(2)+survey_offset(2)+BBA_offset(2));
80
81        if ~SwitchingFlag
82            Xbuild = Xbuild - libera_RF_offset(1);
83            Zbuild = Zbuild - libera_RF_offset(2);
84        end
85     AM(k) = data;
86end
Note: See TracBrowser for help on using the repository browser.