source: MML/trunk/mml/quadgetdata.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: 5.0 KB
Line 
1function [X, Y, BPMxFamily, QUADxFamily, BPMyFamily, QUADyFamily, DateMatX, DateMatY] = quadgetdata(DirName, PlotFlag)
2%QUADGETDATA - Collect the date from a quadrupole center run.
3%              When all the quadrupole center data files are stored in a directory this function
4%              will go through all the files and pull out some of the important information.
5%
6%  [X, Y, BPMxFamily, QUADxFamily, BPMyFamily, QUADyFamily, XfileDate, YfilesDate] = quadgetdata(DirName)
7%
8%  INPUTS
9%  1. DirName - Directory name to look for quadrupole center files 
10%               [] to browse {Default}
11%  2. PlotFlag - 0 to just get data without plotting results, else, plot results
12
13%  OUTPUTS
14%  1. X - Horizontal output matrix (format below)
15%  2. Y - Vertical output matrix (format below)
16%
17%             1&2     3       4        5     6       7         8         9
18%  Output = [BPMDev Center CenterSTD BPMpos DCCT BPMATIndex Quadpos QuadATIndex]
19%
20%  3-6. BPMxFamily, QUADxFamily, BPMyFamily, QUADyFamily - Family name for each center measurement
21%  7-8. XfileDate, YfilesDate - Date string for the file name
22%
23%  Written by Greg Portmann
24
25
26if nargin == 0
27    DirName = '';
28end
29
30if nargin < 2
31    PlotFlag = 1;
32end
33
34if isempty(DirName)
35    DirName = [getfamilydata('Directory', 'DataRoot'),'QMS\'];
36    DirName = uigetdir(DirName, 'Select directory where the QMS data are located');
37end
38
39StartDir = pwd;
40cd(DirName);
41
42Files = dir;
43
44X = [];
45Y = [];
46BPMxFamily = [];
47QUADxFamily = [];
48BPMyFamily = [];
49QUADyFamily = [];
50DateMatX = [];
51DateMatY = [];
52for i = 1:length(Files)
53    if exist(Files(i).name) == 2
54        clear QMS DelHCM DelVCM
55        try
56            load(Files(i).name)
57
58            %Files(i).name
59
60            % Old middle layer
61            if exist('DelHCM')
62                clear q
63                [q.Center, q.CenterSTD, ErrorString] = quadhplt(Files(i).name);
64                q.BPMFamily = 'BPMx';
65                q.BPMDev = BPMnum + [0 1];
66                q.DCCT = NaN;
67                [q.QuadFamily, q.QuadDev] = bpm2quad(q.BPMFamily, q.BPMDev);
68
69                X = [X; q.BPMDev q.Center q.CenterSTD getspos(q.BPMFamily, q.BPMDev) min(q.DCCT) family2atindex(q.BPMFamily, q.BPMDev) getspos(q.QuadFamily, q.QuadDev) family2atindex(q.QuadFamily, q.QuadDev)];
70                BPMxFamily = strvcat(BPMxFamily, q.BPMFamily);
71                QUADxFamily = strvcat(QUADxFamily, q.QuadFamily);
72                DateMatX = [DateMatX; Files(i).date];
73               
74            elseif exist('DelVCM')
75                clear q
76                [q.Center, q.CenterSTD, ErrorString] = quadvplt(Files(i).name);
77                q.BPMFamily = 'BPMy';
78                q.BPMDev = BPMnum + [0 1];
79                q.DCCT = NaN;
80                [q.QuadFamily, q.QuadDev] = bpm2quad(q.BPMFamily, q.BPMDev);
81
82                Y = [Y; q.BPMDev q.Center q.CenterSTD getspos(q.BPMFamily, q.BPMDev) min(q.DCCT) family2atindex(q.BPMFamily, q.BPMDev) getspos(q.QuadFamily, q.QuadDev) family2atindex(q.QuadFamily, q.QuadDev)];
83                BPMyFamily = strvcat(BPMyFamily, q.BPMFamily);
84                QUADyFamily = strvcat(QUADyFamily, q.QuadFamily);
85                DateMatY = [DateMatY; Files(i).date];
86
87            else
88
89                % New middle layer
90                q = QMS;
91
92                %fprintf('   %d.  %s(%d,%d)\n', i, q.QuadFamily, q.QuadDev);
93
94                if q.QuadPlane == 1
95                    X = [X; q.BPMDev q.Center q.CenterSTD getspos(q.BPMFamily, q.BPMDev) min(q.DCCT) family2atindex(q.BPMFamily, q.BPMDev) getspos(q.QuadFamily, q.QuadDev) family2atindex(q.QuadFamily, q.QuadDev)];
96                    BPMxFamily = strvcat(BPMxFamily, q.BPMFamily);
97                    QUADxFamily = strvcat(QUADxFamily, q.QuadFamily);
98                    DateMatX = [DateMatX; Files(i).date];
99                else
100                    Y = [Y; q.BPMDev q.Center q.CenterSTD getspos(q.BPMFamily, q.BPMDev) min(q.DCCT) family2atindex(q.BPMFamily, q.BPMDev) getspos(q.QuadFamily, q.QuadDev) family2atindex(q.QuadFamily, q.QuadDev)];
101                    BPMyFamily = strvcat(BPMyFamily, q.BPMFamily);
102                    QUADyFamily = strvcat(QUADyFamily, q.QuadFamily);
103                    DateMatY = [DateMatY; Files(i).date];
104                end
105                if any(q.DCCT<5)
106                    fprintf('   %s(%d,%d) (%s) shows a beam less than 5 mamps during the experiment!\n', q.BPMFamily, q.BPMDev, Files(i).name);
107                end
108            end
109        catch
110        end
111    end
112end
113
114[DateMatX, iX] = sortrows(DateMatX);
115[DateMatY, iY] = sortrows(DateMatY);
116X = X(iX,:);
117Y = Y(iY,:);
118BPMxFamily = BPMxFamily(iX,:);
119BPMyFamily = BPMyFamily(iY,:);
120QUADxFamily = QUADxFamily(iX,:);
121QUADyFamily = QUADyFamily(iY,:);
122
123cd(StartDir);
124
125
126if PlotFlag
127
128    % Plot data
129    L = getfamilydata('Circumference');
130
131    figure;
132    subplot(2,1,1);
133    errorbar(X(:,5), X(:,3), X(:,4), '.b');
134    ylabel('Horizontal [mm]');
135    xaxis([0 L]);
136    title('BPM Offset');
137
138    subplot(2,1,2);
139    errorbar(Y(:,5), Y(:,3), Y(:,4), '.b');
140    xlabel('BPM Position [meters]');
141    ylabel('Vertical [mm]');
142    xaxis([0 L]);
143
144end
Note: See TracBrowser for help on using the repository browser.