source: MML/trunk/machine/SOLEIL/doc_html/machine/Soleil/StorageRing/getbpmrawdata_mat.html @ 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: 20.5 KB
Line 
1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
2                "http://www.w3.org/TR/REC-html40/loose.dtd">
3<html>
4<head>
5  <title>Description of getbpmrawdata_mat</title>
6  <meta name="keywords" content="getbpmrawdata_mat">
7  <meta name="description" content="GETBPMRAWDATA - Gets turn by turn data for  BPM">
8  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
9  <meta name="generator" content="m2html &copy; 2003 Guillaume Flandin">
10  <meta name="robots" content="index, follow">
11  <link type="text/css" rel="stylesheet" href="../../../m2html.css">
12</head>
13<body>
14<a name="_top"></a>
15<div><a href="../../../index.html">Home</a> &gt;  <a href="#">machine</a> &gt; <a href="#">Soleil</a> &gt; <a href="index.html">StorageRing</a> &gt; getbpmrawdata_mat.m</div>
16
17<!--<table width="100%"><tr><td align="left"><a href="../../../index.html"><img alt="<" border="0" src="../../../left.png">&nbsp;Master index</a></td>
18<td align="right"><a href="index.html">Index for machine/Soleil/StorageRing&nbsp;<img alt=">" border="0" src="../../../right.png"></a></td></tr></table>-->
19
20<h1>getbpmrawdata_mat
21</h1>
22
23<h2><a name="_name"></a>PURPOSE <a href="#_top"><img alt="^" border="0" src="../../../up.png"></a></h2>
24<div class="box"><strong>GETBPMRAWDATA - Gets turn by turn data for  BPM</strong></div>
25
26<h2><a name="_synopsis"></a>SYNOPSIS <a href="#_top"><img alt="^" border="0" src="../../../up.png"></a></h2>
27<div class="box"><strong>function varargout = getbpmrawdata_mat(varargin) </strong></div>
28
29<h2><a name="_description"></a>DESCRIPTION <a href="#_top"><img alt="^" border="0" src="../../../up.png"></a></h2>
30<div class="fragment"><pre class="comment"> GETBPMRAWDATA - Gets turn by turn data for  BPM
31
32  INPUTS
33  1. num - bpm number (scalar or vector) list ([] means all valid BPM)
34
35  Optional input arguments
36  2. Optional display
37     'Display'   - Plot BPM data X,Z, Sum, Q
38     'NoDisplay' - No plotting
39  3. 'NoArchive' - No file archive {Default}
40     'Archive'   - Save a dispersion data structure to \&lt;Directory.BPMData&gt;\&lt;DispArchiveFile&gt;&lt;Date&gt;&lt;Time&gt;.mat
41                   To change the filename, included the filename after the 'Archive', '' to browse
42                   Structure output  is forced
43  4. 'Struct'    - Return out as a structure
44  5. 'Freezing'  - Buffer freezing mechanism
45     'NoFreezing'
46
47  OUTPUTS
48  structure output if 'Struct' precised
49  AM
50
51  vector output
52  1. X - Horizontal data
53  2. Z - Vertical data
54  3. Sum - Sum signal data
55  4. Q  - Quadrupole signal data
56  5. Va - electrode data
57  6. Vb - electrode data
58  7. Vc - electrode data
59  8. Vd - electrode data
60
61  EXAMPLES
62  1. Display BPM 18
63      getbpmrawdata(18)
64  2. Display all valid BPM and output data as a structure
65      getbpmrawdata([],'Struct');
66  3. Output all valid BPM data
67      [X Z Sum Q Va Vb Vc Vd] = getbpmrawdata([],'NoDisplay');
68  4. Archives BPM 17 and 18 w/o displaying
69     getbpmrawdata([17 18],'Archive','NoDisplay');
70  5. Archives BPM 17 and 18 w/o displaying w/ buffer freezing mechanism
71     getbpmrawdata([17 18],'Archive','NoDisplay','Freezing');
72
73 See Also anabpmfirstturn</pre></div>
74
75<!-- crossreference -->
76<h2><a name="_cross"></a>CROSS-REFERENCE INFORMATION <a href="#_top"><img alt="^" border="0" src="../../../up.png"></a></h2>
77This function calls:
78<ul style="list-style-image:url(../../../matlabicon.gif)">
79<li><a href="getbpmrawdata_mat.html" class="code" title="function varargout = getbpmrawdata_mat(varargin)">getbpmrawdata_mat</a>        GETBPMRAWDATA - Gets turn by turn data for  BPM</li></ul>
80This function is called by:
81<ul style="list-style-image:url(../../../matlabicon.gif)">
82<li><a href="getbpmrawdata_mat.html" class="code" title="function varargout = getbpmrawdata_mat(varargin)">getbpmrawdata_mat</a>        GETBPMRAWDATA - Gets turn by turn data for  BPM</li></ul>
83<!-- crossreference -->
84
85
86<h2><a name="_source"></a>SOURCE CODE <a href="#_top"><img alt="^" border="0" src="../../../up.png"></a></h2>
87<div class="fragment"><pre>0001 <a name="_sub0" href="#_subfunctions" class="code">function varargout = getbpmrawdata_mat(varargin)</a>
880002 <span class="comment">% GETBPMRAWDATA - Gets turn by turn data for  BPM</span>
890003 <span class="comment">%</span>
900004 <span class="comment">%  INPUTS</span>
910005 <span class="comment">%  1. num - bpm number (scalar or vector) list ([] means all valid BPM)</span>
920006 <span class="comment">%</span>
930007 <span class="comment">%  Optional input arguments</span>
940008 <span class="comment">%  2. Optional display</span>
950009 <span class="comment">%     'Display'   - Plot BPM data X,Z, Sum, Q</span>
960010 <span class="comment">%     'NoDisplay' - No plotting</span>
970011 <span class="comment">%  3. 'NoArchive' - No file archive {Default}</span>
980012 <span class="comment">%     'Archive'   - Save a dispersion data structure to \&lt;Directory.BPMData&gt;\&lt;DispArchiveFile&gt;&lt;Date&gt;&lt;Time&gt;.mat</span>
990013 <span class="comment">%                   To change the filename, included the filename after the 'Archive', '' to browse</span>
1000014 <span class="comment">%                   Structure output  is forced</span>
1010015 <span class="comment">%  4. 'Struct'    - Return out as a structure</span>
1020016 <span class="comment">%  5. 'Freezing'  - Buffer freezing mechanism</span>
1030017 <span class="comment">%     'NoFreezing'</span>
1040018 <span class="comment">%</span>
1050019 <span class="comment">%  OUTPUTS</span>
1060020 <span class="comment">%  structure output if 'Struct' precised</span>
1070021 <span class="comment">%  AM</span>
1080022 <span class="comment">%</span>
1090023 <span class="comment">%  vector output</span>
1100024 <span class="comment">%  1. X - Horizontal data</span>
1110025 <span class="comment">%  2. Z - Vertical data</span>
1120026 <span class="comment">%  3. Sum - Sum signal data</span>
1130027 <span class="comment">%  4. Q  - Quadrupole signal data</span>
1140028 <span class="comment">%  5. Va - electrode data</span>
1150029 <span class="comment">%  6. Vb - electrode data</span>
1160030 <span class="comment">%  7. Vc - electrode data</span>
1170031 <span class="comment">%  8. Vd - electrode data</span>
1180032 <span class="comment">%</span>
1190033 <span class="comment">%  EXAMPLES</span>
1200034 <span class="comment">%  1. Display BPM 18</span>
1210035 <span class="comment">%      getbpmrawdata(18)</span>
1220036 <span class="comment">%  2. Display all valid BPM and output data as a structure</span>
1230037 <span class="comment">%      getbpmrawdata([],'Struct');</span>
1240038 <span class="comment">%  3. Output all valid BPM data</span>
1250039 <span class="comment">%      [X Z Sum Q Va Vb Vc Vd] = getbpmrawdata([],'NoDisplay');</span>
1260040 <span class="comment">%  4. Archives BPM 17 and 18 w/o displaying</span>
1270041 <span class="comment">%     getbpmrawdata([17 18],'Archive','NoDisplay');</span>
1280042 <span class="comment">%  5. Archives BPM 17 and 18 w/o displaying w/ buffer freezing mechanism</span>
1290043 <span class="comment">%     getbpmrawdata([17 18],'Archive','NoDisplay','Freezing');</span>
1300044 <span class="comment">%</span>
1310045 <span class="comment">% See Also anabpmfirstturn</span>
1320046
1330047 <span class="comment">%</span>
1340048 <span class="comment">% Written by Laurent S. Nadolski</span>
1350049
1360050 <span class="comment">% TODO freezing mechanism: introduce group</span>
1370051
1380052 DisplayFlag = 1;
1390053 ArchiveFlag = 0;
1400054 StructureFlag = 0;
1410055 FreezingFlag = 0;
1420056 FileName=<span class="string">''</span>;
1430057 varargin2 = {};
1440058
1450059 <span class="keyword">if</span> ~exist(<span class="string">'DeviceName'</span>,<span class="string">'var'</span>)
1460060     DeviceName = [];
1470061 <span class="keyword">end</span>
1480062
1490063 <span class="keyword">for</span> i = length(varargin):-1:1
1500064     <span class="keyword">if</span> strcmpi(varargin{i},<span class="string">'Display'</span>)
1510065         DisplayFlag = 1;
1520066         varargin2 = {varargin2{:} varargin{i}};
1530067         varargin(i) = [];
1540068     <span class="keyword">elseif</span> strcmpi(varargin{i},<span class="string">'NoDisplay'</span>)
1550069         DisplayFlag = 0;
1560070         varargin2 = {varargin2{:} varargin{i}};
1570071         varargin(i) = [];
1580072     <span class="keyword">elseif</span> strcmpi(varargin{i},<span class="string">'Archive'</span>)
1590073         ArchiveFlag = 1;
1600074         StructureFlag = 1;
1610075 <span class="comment">%        varargin2 = {varargin2{:} varargin{i}};</span>
1620076         varargin(i) = [];
1630077     <span class="keyword">elseif</span> strcmpi(varargin{i},<span class="string">'NoArchive'</span>)
1640078         ArchiveFlag = 0;
1650079 <span class="comment">%        varargin2 = {varargin2{:} varargin{i}};</span>
1660080         varargin(i) = [];
1670081     <span class="keyword">elseif</span> strcmpi(varargin{i},<span class="string">'Struct'</span>)
1680082         StructureFlag = 1;
1690083         varargin2 = {varargin2{:} varargin{i}};
1700084         varargin(i) = [];
1710085     <span class="keyword">elseif</span> strcmpi(varargin{i},<span class="string">'Freezing'</span>)
1720086         FreezingFlag = 1;
1730087         varargin(i) = [];
1740088     <span class="keyword">elseif</span> strcmpi(varargin{i},<span class="string">'NoFreezing'</span>)
1750089         FreezingFlag = 0;
1760090         varargin(i) = [];
1770091     <span class="keyword">end</span>
1780092 <span class="keyword">end</span>
1790093
1800094 AO = getfamilydata(<span class="string">'BPMx'</span>);
1810095 <span class="comment">% if empty select all valid BPM</span>
1820096
1830097 <span class="keyword">if</span> isempty(varargin)
1840098     num = 1:length(AO.DeviceName);
1850099 <span class="keyword">else</span>
1860100     num = varargin{1};
1870101     <span class="keyword">if</span> isempty(num)
1880102         num = 1:length(AO.DeviceName);
1890103     <span class="keyword">end</span>
1900104 <span class="keyword">end</span>
1910105
1920106 <span class="comment">% Status one devices</span>
1930107 valid  = find(AO.Status);
1940108 num    = intersect(num,valid);
1950109
1960110 <span class="keyword">if</span> isempty(num)
1970111     disp(<span class="string">'All BPM not valid'</span>)
1980112     <span class="keyword">return</span>;
1990113 <span class="keyword">end</span>
2000114
2010115 <span class="comment">%</span>
2020116 <span class="comment">% % read BPM number of samples</span>
2030117 <span class="comment">% % If all not the same stop program and ask action to user</span>
2040118 <span class="comment">% for k = 1:length(num)</span>
2050119 <span class="comment">%     modestr{k} = char(readattribute([AO.DeviceName{num(k)} '/Mode']));</span>
2060120 <span class="comment">% end</span>
2070121 <span class="comment">%</span>
2080122 <span class="comment">% for k = 1:length(num)</span>
2090123 <span class="comment">%     sampleNumber(k) = readattribute([AO.DeviceName{num(k)} '/NumSamples']);</span>
2100124 <span class="comment">% end</span>
2110125 <span class="comment">%</span>
2120126 <span class="comment">% notTheSame = sampleNumber-sampleNumber(1);</span>
2130127 <span class="comment">%</span>
2140128 <span class="comment">% if ~all(strcmp(modestr,modestr{1}))</span>
2150129 <span class="comment">%    disp([mfilename ' STOP!']);</span>
2160130 <span class="comment">%    error('Not all BPM in the same mode')</span>
2170131 <span class="comment">%    return;</span>
2180132 <span class="comment">% end</span>
2190133 <span class="comment">%</span>
2200134 <span class="comment">% if (sum(notTheSame) ~= 0)</span>
2210135 <span class="comment">%    disp([mfilename ' STOP!']);</span>
2220136 <span class="comment">%    error('Not all BPM with the same number of samples')</span>
2230137 <span class="comment">%    return;</span>
2240138 <span class="comment">% end</span>
2250139
2260140 <span class="comment">%% Buffer freezing</span>
2270141 <span class="comment">% Enable freezing mechanism</span>
2280142 <span class="keyword">if</span> (FreezingFlag)
2290143 <span class="comment">%     hh = warndlg('BPMmanager must be stop and BPM mode be FT or TT');</span>
2300144 <span class="comment">%     uiwait(hh);</span>
2310145     disp([mfilename <span class="string">': Enabling freezing mecanism'</span>]);
2320146     <span class="keyword">for</span> k = 1:length(num)
2330147         tango_command_inout2(AO.DeviceName{num(k)},<span class="string">'EnableBufferFreezing'</span>);
2340148     <span class="keyword">end</span>
2350149     disp([mfilename <span class="string">': Freezing BPM: pseudo synchronism'</span>]);
2360150     <span class="keyword">for</span> k = 1:length(num)
2370151         tango_command_inout2(AO.DeviceName{num(k)},<span class="string">'UnFreezeBuffer'</span>);
2380152     <span class="keyword">end</span>   
2390153 <span class="keyword">end</span>
2400154
2410155 <span class="comment">%% loop of bpm list</span>
2420156 <span class="keyword">if</span> length(num) &gt; 1
2430157     AM.DeviceList=[];
2440158     <span class="keyword">for</span> k = 1:length(num)   
2450159         
2460160         AM0 = <a href="getbpmrawdata_mat.html" class="code" title="function varargout = getbpmrawdata_mat(varargin)">getbpmrawdata_mat</a>(num(k),varargin2{:},<span class="string">'Struct'</span>);
2470161         <span class="keyword">try</span>
2480162             AM.DeviceName{k} = AM0.DeviceName{:};
2490163             AM.Data.X(k,:) = AM0.Data.X(:); AM.Data.Z(k,:) = AM0.Data.Z(:);
2500164             AM.Data.Sum(k,:) = AM0.Data.Sum(:); AM.Data.Q(k,:) = AM0.Data.Q(:);
2510165             AM.Data.Va(k,:) = AM0.Data.Va(:); AM.Data.Vb(k,:) = AM0.Data.Vb(:);
2520166             AM.Data.Vc(k,:) = AM0.Data.Vc(:); AM.Data.Vd(k,:) = AM0.Data.Vd(:);
2530167             AM.TimeStamp = datestr(now);
2540168             AM.DataDescriptor = [<span class="string">'Turn by turn data for '</span> getfamilydata(<span class="string">'Machine'</span>)];
2550169             AM.CreatedBy = mfilename;
2560170             AM.DeviceList = [AM.DeviceList; AM0.DeviceList];
2570171         <span class="keyword">catch</span>
2580172             <span class="keyword">switch</span> lasterr
2590173                 <span class="keyword">case</span> <span class="string">'Subscripted assignment dimension mismatch.'</span>
2600174                     error(<span class="string">'BPM do not have the same number of samples !!!'</span>)
2610175             <span class="keyword">end</span>
2620176         <span class="keyword">end</span>
2630177     <span class="keyword">end</span>
2640178
2650179     <span class="comment">% Disable freezing mechanism</span>
2660180     <span class="keyword">if</span> (FreezingFlag)
2670181         disp([mfilename <span class="string">': disabling buffer freezing for BPM'</span>])
2680182         <span class="keyword">for</span> k = 1:length(num)
2690183             tango_command_inout2(AO.DeviceName{num(k)},<span class="string">'DisableBufferFreezing'</span>);
2700184         <span class="keyword">end</span>
2710185     <span class="keyword">end</span>
2720186
2730187 <span class="keyword">else</span>
2740188     <span class="comment">%% Loop for one BPM</span>
2750189     AO = getfamilydata(<span class="string">'BPMx'</span>);
2760190     AO.DeviceName;
2770191
2780192     attr_name = <span class="keyword">...</span>
2790193         {<span class="string">'XPosDD'</span>,<span class="string">'ZPosDD'</span>, <span class="string">'QuadDD'</span>, <span class="string">'SumDD'</span>, <span class="keyword">...</span>
2800194         <span class="string">'VaDD'</span>, <span class="string">'VbDD'</span>, <span class="string">'VcDD'</span>, <span class="string">'VdDD'</span>};
2810195     
2820196         
2830197     rep = tango_read_attributes2(AO.DeviceName{num},attr_name);
2840198
2850199     X   = rep(1).value;
2860200     Z   = rep(2).value;
2870201     Q   = rep(3).value;
2880202     Sum = rep(4).value;
2890203     Va  = rep(5).value;
2900204     Vb  = rep(6).value;
2910205     Vc  = rep(7).value;
2920206     Vd  = rep(8).value;
2930207
2940208     <span class="comment">%% Display part</span>
2950209
2960210     <span class="keyword">if</span> DisplayFlag
2970211         figure
2980212         subplot(2,2,1)
2990213         plot(X)
3000214         ylabel(<span class="string">'X (mm)'</span>)
3010215         grid on
3020216
3030217         subplot(2,2,2)
3040218         plot(Z)
3050219         ylabel(<span class="string">'Z (mm)'</span>)
3060220         grid on
3070221
3080222         subplot(2,2,3)
3090223         plot(Sum)
3100224         ylabel(<span class="string">'SUM'</span>)
3110225         xlabel(<span class="string">'turn number'</span>)
3120226         grid on
3130227
3140228         subplot(2,2,4)
3150229         plot(Q)
3160230         ylabel(<span class="string">'Q'</span>)
3170231         xlabel(<span class="string">'turn number'</span>)
3180232         grid on
3190233         addlabel(1,0,datestr(clock));
3200234         suptitle(sprintf(<span class="string">'Turn by turn data for %s'</span>,AO.DeviceName{num}))
3210235     <span class="keyword">end</span>
3220236
3230237     <span class="keyword">if</span> StructureFlag
3240238         AM.DeviceName = AO.DeviceName(num);
3250239         AM.Data.X   = X;
3260240         AM.Data.Z   = Z;
3270241         AM.Data.Sum = Sum;
3280242         AM.Data.Q   = Q;
3290243         AM.Data.Va  = Va;
3300244         AM.Data.Vb  = Vb;
3310245         AM.Data.Vc  = Vc;
3320246         AM.Data.Vd  = Vd;
3330247         <span class="comment">%time stamp of recording</span>
3340248         AM.TimeStamp = datestr(now);
3350249         AM.DataDescriptor = [<span class="string">'Turn by turn data for '</span> getfamilydata(<span class="string">'Machine'</span>)];
3360250         AM.CreatedBy = mfilename;
3370251         AM.DeviceList = tango2dev(AO.Monitor.TangoNames{num});
3380252     <span class="keyword">end</span>
3390253
3400254 <span class="keyword">end</span>
3410255
3420256 <span class="keyword">if</span> ArchiveFlag
3430257     <span class="comment">% filling up data</span>
3440258     <span class="comment">% Archive data structure</span>
3450259     <span class="keyword">if</span> isempty(FileName)
3460260         FileName = appendtimestamp(getfamilydata(<span class="string">'Default'</span>, <span class="string">'BPMArchiveFile'</span>));
3470261         DirectoryName = getfamilydata(<span class="string">'Directory'</span>,<span class="string">'BPMData'</span>);
3480262         <span class="keyword">if</span> isempty(DirectoryName)
3490263             DirectoryName = [getfamilydata(<span class="string">'Directory'</span>,<span class="string">'DataRoot'</span>) <span class="string">'BPM'</span>, filesep];
3500264         <span class="keyword">else</span>
3510265             <span class="comment">% Make sure default directory exists</span>
3520266             DirStart = pwd;
3530267             [DirectoryName, ErrorFlag] = gotodirectory(DirectoryName);
3540268             cd(DirStart);
3550269         <span class="keyword">end</span>
3560270         [DirectoryName FileName]
3570271         [FileName, DirectoryName] = uiputfile(<span class="string">'*.mat'</span>, <span class="string">'Select Dispersion File'</span>, [DirectoryName FileName]);
3580272         <span class="keyword">if</span> FileName == 0
3590273             ArchiveFlag = 0;
3600274             disp(<span class="string">'   BPM measurement canceled.'</span>);
3610275             FileName=<span class="string">''</span>;
3620276             <span class="keyword">return</span>
3630277         <span class="keyword">end</span>
3640278         FileName = [DirectoryName, FileName];
3650279     <span class="keyword">elseif</span> FileName == -1
3660280         FileName = appendtimestamp(getfamilydata(<span class="string">'Default'</span>, <span class="string">'BPMArchiveFile'</span>));
3670281         DirectoryName = getfamilydata(<span class="string">'Directory'</span>,<span class="string">'BPMData'</span>);
3680282         <span class="keyword">if</span> isempty(DirectoryName)
3690283             DirectoryName = [getfamilydata(<span class="string">'Directory'</span>,<span class="string">'DataRoot'</span>) <span class="string">'BPM'</span>, filesep];
3700284         <span class="keyword">end</span>
3710285         FileName = [DirectoryName, FileName];
3720286     <span class="keyword">end</span>
3730287
3740288     save(FileName,<span class="string">'AM'</span>);
3750289
3760290 <span class="keyword">end</span>
3770291
3780292 <span class="keyword">if</span> StructureFlag
3790293     varargout{1} = AM;
3800294 <span class="keyword">else</span>
3810295     <span class="keyword">if</span> exist(<span class="string">'AM'</span>,<span class="string">'var'</span>) <span class="comment">% not nice but it works</span>
3820296         varargout{1} = AM.Data.X; varargout{2} =   AM.Data.Z;
3830297         varargout{3} = AM.Data.Sum; varargout{4} =  AM.Data.Q;
3840298         varargout{5} = AM.Data.Va; varargout{6} =  AM.Data.Vb;
3850299         varargout{7} = AM.Data.Vc; varargout{8} =  AM.Data.Vd;
3860300     <span class="keyword">else</span>
3870301         varargout{1} = X;   varargout{2} =   Z;
3880302         varargout{3} = Sum; varargout{4} =  Q;
3890303         varargout{5} = Va;  varargout{6} =  Vb;
3900304         varargout{7} = Vc;  varargout{8} =  Vd;
3910305     <span class="keyword">end</span>
3920306 <span class="keyword">end</span></pre></div>
393<hr><address>Generated on Mon 21-May-2007 15:35:27 by <strong><a href="http://www.artefact.tk/software/matlab/m2html/">m2html</a></strong> &copy; 2003</address>
394</body>
395</html>
Note: See TracBrowser for help on using the repository browser.