1 | function [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 | |
---|
26 | if nargin == 0 |
---|
27 | DirName = ''; |
---|
28 | end |
---|
29 | |
---|
30 | if nargin < 2 |
---|
31 | PlotFlag = 1; |
---|
32 | end |
---|
33 | |
---|
34 | if isempty(DirName) |
---|
35 | DirName = [getfamilydata('Directory', 'DataRoot'),'QMS\']; |
---|
36 | DirName = uigetdir(DirName, 'Select directory where the QMS data are located'); |
---|
37 | end |
---|
38 | |
---|
39 | StartDir = pwd; |
---|
40 | cd(DirName); |
---|
41 | |
---|
42 | Files = dir; |
---|
43 | |
---|
44 | X = []; |
---|
45 | Y = []; |
---|
46 | BPMxFamily = []; |
---|
47 | QUADxFamily = []; |
---|
48 | BPMyFamily = []; |
---|
49 | QUADyFamily = []; |
---|
50 | DateMatX = []; |
---|
51 | DateMatY = []; |
---|
52 | for 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 |
---|
112 | end |
---|
113 | |
---|
114 | [DateMatX, iX] = sortrows(DateMatX); |
---|
115 | [DateMatY, iY] = sortrows(DateMatY); |
---|
116 | X = X(iX,:); |
---|
117 | Y = Y(iY,:); |
---|
118 | BPMxFamily = BPMxFamily(iX,:); |
---|
119 | BPMyFamily = BPMyFamily(iY,:); |
---|
120 | QUADxFamily = QUADxFamily(iX,:); |
---|
121 | QUADyFamily = QUADyFamily(iY,:); |
---|
122 | |
---|
123 | cd(StartDir); |
---|
124 | |
---|
125 | |
---|
126 | if 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 | |
---|
144 | end |
---|