source: MML/trunk/mml/doc_html/mml/getdata.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: 25.6 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 getdata</title>
6  <meta name="keywords" content="getdata">
7  <meta name="description" content="GETDATA - Searches through a file (or group of files) for a data structure which matches the family name">
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="index.html">mml</a> &gt; getdata.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 mml&nbsp;<img alt=">" border="0" src="../right.png"></a></td></tr></table>-->
19
20<h1>getdata
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>GETDATA - Searches through a file (or group of files) for a data structure which matches the family name</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 [S, FileName] = getdata(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">GETDATA - Searches through a file (or group of files) for a data structure which matches the family name
31  [Data, FileName] = getdata(FamilyName, FileName)
32  [Data, FileName] = getdata(FamilyName, DeviceList, FileName)
33
34  INPUTS
35  1. FamilyName - Family name to search for.  This function will search through all
36                  the variables in the file looking for a FamilyName match.  It will
37                  also look through any array or cell array.  Arrays within a cell
38                  array will also be searched through.
39  2. FileName - File name to search in (or cell array of file names) {default: []}
40                [] - prompt the user to choose a file
41  3. DeviceList - Device list to index by (optional input)
42  4. 'Field' - Sometime searching on FamilyName is not enough.  To contraint which
43               Field to search for, use the keyword 'Field' followed
44               by the desired name to look for (see example 3) (optional input).
45  5. 'Struct'  - Return a data structure
46     'Numeric' - Return numeric outputs  {Default}
47     'Object'  - Return a accelerator object (AccObj)
48
49  OUTPUTS
50  1. Data - Data found
51  2. FileName - File name where the data was found (including the path)
52
53  EXAMPLES
54  1. Get BPM data in file abc.mat
55     &gt;&gt; BPM = getdata('QF', 'abc.mat');
56  2. Get QF setpoint data in file abc.mat
57     &gt;&gt; SP = getdata('QF', 'Struct', 'Field', 'Setpoint', 'abc.mat');
58
59  See also <a href="getrespmat.html" class="code" title="function [S, FileName] = getrespmat(varargin)">getrespmat</a>
60
61  Written by Greg Portmann</pre></div>
62
63<!-- crossreference -->
64<h2><a name="_cross"></a>CROSS-REFERENCE INFORMATION <a href="#_top"><img alt="^" border="0" src="../up.png"></a></h2>
65This function calls:
66<ul style="list-style-image:url(../matlabicon.gif)">
67<li><a href="elem2dev.html" class="code" title="function Output = elem2dev(Family, ElementList)">elem2dev</a>   ELEM2DEV - Converts a device list to an element list</li><li><a href="ismemberof.html" class="code" title="function  [IsTest, Index] = ismemberof(FamilyName, Field, MemberString)">ismemberof</a>      ISMEMBEROF - Returns turn if the membership information of a family (cell of strings)</li></ul>
68This function is called by:
69<ul style="list-style-image:url(../matlabicon.gif)">
70<li><a href="getsigma.html" class="code" title="function [Data, FileName] = getsigma(varargin)">getsigma</a>    GETSIGMA - Return the standard deviation in the monitor for a family</li><li><a href="plotorbitdata.html" class="code" title="function [BPMx, BPMy] = plotorbitdata(varargin)">plotorbitdata</a>        PLOTORBITDATA - Plots BPM statistics</li><li><a href="setgolden.html" class="code" title="function varargout = setgolden(varargin)">setgolden</a>       SETGOLDEN - Set the golden values</li><li><a href="setoffset.html" class="code" title="function varargout = setoffset(varargin)">setoffset</a>  SETOFFSET - Set the offset</li></ul>
71<!-- crossreference -->
72
73
74<h2><a name="_source"></a>SOURCE CODE <a href="#_top"><img alt="^" border="0" src="../up.png"></a></h2>
75<div class="fragment"><pre>0001 <a name="_sub0" href="#_subfunctions" class="code">function [S, FileName] = getdata(varargin)</a>
760002 <span class="comment">%GETDATA - Searches through a file (or group of files) for a data structure which matches the family name</span>
770003 <span class="comment">%  [Data, FileName] = getdata(FamilyName, FileName)</span>
780004 <span class="comment">%  [Data, FileName] = getdata(FamilyName, DeviceList, FileName)</span>
790005 <span class="comment">%</span>
800006 <span class="comment">%  INPUTS</span>
810007 <span class="comment">%  1. FamilyName - Family name to search for.  This function will search through all</span>
820008 <span class="comment">%                  the variables in the file looking for a FamilyName match.  It will</span>
830009 <span class="comment">%                  also look through any array or cell array.  Arrays within a cell</span>
840010 <span class="comment">%                  array will also be searched through.</span>
850011 <span class="comment">%  2. FileName - File name to search in (or cell array of file names) {default: []}</span>
860012 <span class="comment">%                [] - prompt the user to choose a file</span>
870013 <span class="comment">%  3. DeviceList - Device list to index by (optional input)</span>
880014 <span class="comment">%  4. 'Field' - Sometime searching on FamilyName is not enough.  To contraint which</span>
890015 <span class="comment">%               Field to search for, use the keyword 'Field' followed</span>
900016 <span class="comment">%               by the desired name to look for (see example 3) (optional input).</span>
910017 <span class="comment">%  5. 'Struct'  - Return a data structure</span>
920018 <span class="comment">%     'Numeric' - Return numeric outputs  {Default}</span>
930019 <span class="comment">%     'Object'  - Return a accelerator object (AccObj)</span>
940020 <span class="comment">%</span>
950021 <span class="comment">%  OUTPUTS</span>
960022 <span class="comment">%  1. Data - Data found</span>
970023 <span class="comment">%  2. FileName - File name where the data was found (including the path)</span>
980024 <span class="comment">%</span>
990025 <span class="comment">%  EXAMPLES</span>
1000026 <span class="comment">%  1. Get BPM data in file abc.mat</span>
1010027 <span class="comment">%     &gt;&gt; BPM = getdata('QF', 'abc.mat');</span>
1020028 <span class="comment">%  2. Get QF setpoint data in file abc.mat</span>
1030029 <span class="comment">%     &gt;&gt; SP = getdata('QF', 'Struct', 'Field', 'Setpoint', 'abc.mat');</span>
1040030 <span class="comment">%</span>
1050031 <span class="comment">%  See also getrespmat</span>
1060032 <span class="comment">%</span>
1070033 <span class="comment">%  Written by Greg Portmann</span>
1080034
1090035
1100036 <span class="comment">% Input parsing</span>
1110037 <span class="comment">% [S, FileName] = getdata(Family, 'Field', 'Monitor', FileName, DeviceList)</span>
1120038 <span class="comment">% [S, FileName] = getdata(Family, FileName, DeviceList)</span>
1130039 <span class="comment">% [S, FileName] = getdata(Family, DeviceList)</span>
1140040 <span class="comment">% [S, FileName] = getdata(Family)</span>
1150041
1160042
1170043 <span class="comment">%%%%%%%%%%%%%%%%%</span>
1180044 <span class="comment">% Input Parsing %</span>
1190045 <span class="comment">%%%%%%%%%%%%%%%%%</span>
1200046 StructOutputFlag = 0;
1210047 ObjectOutputFlag = 0;
1220048 FileName = <span class="string">''</span>;
1230049 DeviceList = [];
1240050 FieldConstraint = <span class="string">''</span>;
1250051 <span class="keyword">for</span> i = length(varargin):-1:1
1260052     <span class="keyword">if</span> isstruct(varargin{i})
1270053         <span class="comment">% Ignor structures</span>
1280054     <span class="keyword">elseif</span> iscell(varargin{i})
1290055         <span class="comment">% Ignor cells</span>
1300056     <span class="keyword">elseif</span> strcmpi(varargin{i},<span class="string">'Struct'</span>)
1310057         StructOutputFlag = 1;
1320058         varargin(i) = [];
1330059     <span class="keyword">elseif</span> strcmpi(varargin{i},<span class="string">'Numeric'</span>)
1340060         StructOutputFlag = 0;
1350061         varargin(i) = [];
1360062     <span class="keyword">elseif</span> strcmpi(varargin{i},<span class="string">'Object'</span>)
1370063         ObjectOutputFlag = 1;
1380064         StructOutputFlag = 1;
1390065         varargin(i) = [];
1400066     <span class="keyword">elseif</span> strcmpi(varargin{i},<span class="string">'Field'</span>)
1410067         varargin(i) = [];
1420068         FieldConstraint = varargin{i};
1430069         varargin(i) = [];
1440070     <span class="keyword">end</span>
1450071 <span class="keyword">end</span>
1460072
1470073
1480074 <span class="keyword">if</span> isempty(varargin)
1490075     error(<span class="string">'FamilyName input required'</span>);
1500076 <span class="keyword">end</span>
1510077
1520078 <span class="keyword">if</span> length(varargin) &gt;= 1
1530079     Family = varargin{1};
1540080 <span class="keyword">end</span>
1550081
1560082 <span class="keyword">if</span> length(varargin) &gt;= 2
1570083     <span class="keyword">if</span> ischar(varargin{2})
1580084         FileName = varargin{2};
1590085     <span class="keyword">else</span>
1600086         DeviceList = varargin{2};
1610087     <span class="keyword">end</span>
1620088 <span class="keyword">end</span>
1630089
1640090 <span class="keyword">if</span> length(varargin) &gt;= 3
1650091     <span class="keyword">if</span> ischar(varargin{3})
1660092         FileName = varargin{3};
1670093     <span class="keyword">else</span>
1680094         DeviceList = varargin{3};
1690095     <span class="keyword">end</span>
1700096 <span class="keyword">end</span>
1710097
1720098 <span class="keyword">if</span> isempty(FieldConstraint)
1730099     <span class="keyword">if</span> <a href="ismemberof.html" class="code" title="function  [IsTest, Index] = ismemberof(FamilyName, Field, MemberString)">ismemberof</a>(Family,<span class="string">'BPM'</span>)
1740100         FieldConstraint = <span class="string">'Monitor'</span>;
1750101     <span class="keyword">else</span>
1760102         FieldConstraint = <span class="string">'Setpoint'</span>;       
1770103     <span class="keyword">end</span>
1780104 <span class="keyword">end</span>
1790105 <span class="comment">% End input parsing</span>
1800106
1810107
1820108 <span class="keyword">if</span> isempty(FileName)
1830109     [FileName, DirectoryName, FilterIndex] = uigetfile(<span class="string">'*.mat'</span>, <span class="string">'Select a Data File'</span>);
1840110     <span class="comment">%[FileName, DirectoryName, FilterIndex] = uigetfile('*.mat', 'Select a Data File', getfamilydata('Directory', 'DataRoot'));</span>
1850111     <span class="keyword">if</span> FilterIndex == 0
1860112         S=[]; FileName=[];
1870113         <span class="keyword">return</span>
1880114     <span class="keyword">end</span>
1890115     FileName = [DirectoryName FileName];
1900116 <span class="keyword">end</span>
1910117
1920118
1930119 <span class="comment">% Force FileNameCell to be a cell</span>
1940120 <span class="keyword">if</span> iscell(FileName)
1950121     FileNameCell = FileName;
1960122 <span class="keyword">else</span>
1970123     FileNameCell = {FileName};
1980124 <span class="keyword">end</span>
1990125
2000126 Data = [];
2010127 Found = 0;
2020128 <span class="keyword">for</span> i = 1:length(FileNameCell)
2030129     <span class="keyword">try</span>
2040130         <span class="comment">% FileStruct is a structure of all the variable inside FileNameCell</span>
2050131         FileStruct = load(FileNameCell{i});
2060132         
2070133         <span class="comment">% VarCell is a cell array of the field names of FileStruct</span>
2080134         VarCell = fieldnames(FileStruct); 
2090135         
2100136         <span class="keyword">for</span> j = 1:length(VarCell)
2110137             <span class="comment">% OneField is one of the fields of FileStruct</span>
2120138             OneField = FileStruct.(VarCell{j});
2130139             
2140140             <span class="comment">% Look through all the variable to find a structure with Monitor, Actuator, and Data fields</span>
2150141             <span class="keyword">for</span> ii = 1:size(OneField,1)
2160142                 <span class="keyword">for</span> jj = 1:size(OneField,2)
2170143                     
2180144                     <span class="keyword">if</span> iscell(OneField)
2190145                         
2200146                         <span class="comment">% If OneField is a cell</span>
2210147                         OneCell = OneField{ii,jj};
2220148                         <span class="keyword">for</span> mm = 1:size(OneCell,1)
2230149                             <span class="keyword">for</span> nn = 1:size(OneCell,2)
2240150                                 <span class="comment">% If OneCell is an array, look through OneCell to find a structure with FamilyName and Data</span>
2250151                                 <span class="keyword">if</span> isfield(OneCell(mm,nn),<span class="string">'FamilyName'</span>) &amp;&amp; isfield(OneCell(mm,nn),<span class="string">'Data'</span>)
2260152                                     <span class="keyword">if</span> strcmp(OneCell(mm,nn).FamilyName, Family)
2270153                                         <span class="keyword">if</span> ~isempty(FieldConstraint)
2280154                                             <span class="keyword">if</span> isfield(OneCell(mm,nn), <span class="string">'Field'</span>)
2290155                                                 <span class="keyword">if</span> strcmp(OneCell(mm,nn).Field, FieldConstraint)
2300156                                                     S = OneCell(mm,nn);
2310157                                                     Found = 1;
2320158                                                     <span class="keyword">break</span>
2330159                                                 <span class="keyword">end</span>
2340160                                             <span class="keyword">end</span>
2350161                                         <span class="keyword">else</span>
2360162                                             S = OneCell(mm,nn);
2370163                                             Found = 1;
2380164                                             <span class="keyword">break</span>
2390165                                         <span class="keyword">end</span>
2400166                                     <span class="keyword">end</span>
2410167                                     
2420168                                 <span class="keyword">elseif</span> isfield(OneField(mm,nn), Family)
2430169                                     <span class="comment">% Config data structure</span>
2440170                                     <span class="keyword">if</span> isfield(OneCell(mm,nn).(Family),<span class="string">'FamilyName'</span>) &amp;&amp; isfield(OneCell(mm,nn).(Family),<span class="string">'Data'</span>)
2450171                                         <span class="keyword">if</span> ~isempty(FieldConstraint)
2460172                                             <span class="keyword">if</span> isfield(OneCell(mm,nn).(Family), <span class="string">'Field'</span>)
2470173                                                 <span class="keyword">if</span> strcmp(OneCell(mm,nn).(Family).Field, FieldConstraint)
2480174                                                     S = OneCell(mm,nn).(Family);
2490175                                                     Found = 1;
2500176                                                     <span class="keyword">break</span>       
2510177                                                 <span class="keyword">end</span>
2520178                                             <span class="keyword">end</span>
2530179                                         <span class="keyword">else</span>
2540180                                             S = OneCell(mm,nn).(Family);
2550181                                             Found = 1;
2560182                                             <span class="keyword">break</span>       
2570183                                         <span class="keyword">end</span>
2580184                                     <span class="keyword">end</span>
2590185                                 <span class="keyword">end</span>
2600186                             <span class="keyword">end</span>
2610187                         <span class="keyword">end</span>
2620188                         
2630189                     <span class="keyword">else</span>
2640190                         <span class="comment">% Structure</span>
2650191                         <span class="comment">% If OneCell is an array, look through OneCell to find a structure with FamilyName and Data</span>
2660192                         <span class="keyword">if</span> isfield(OneField(ii,jj),<span class="string">'FamilyName'</span>) &amp;&amp; isfield(OneField(ii,jj),<span class="string">'Data'</span>)
2670193                             <span class="keyword">if</span> strcmp(OneField(ii,jj).FamilyName, Family)
2680194                                 <span class="keyword">if</span> ~isempty(FieldConstraint)
2690195                                     <span class="keyword">if</span> isfield(OneField(ii,jj), <span class="string">'Field'</span>)
2700196                                         <span class="keyword">if</span> strcmp(OneField(ii,jj).Field, FieldConstraint)
2710197                                             S = OneField(ii,jj);
2720198                                             Found = 1;
2730199                                             <span class="keyword">break</span>
2740200                                         <span class="keyword">end</span>
2750201                                     <span class="keyword">end</span>
2760202                                 <span class="keyword">else</span>
2770203                                     S = OneField(ii,jj);
2780204                                     Found = 1;
2790205                                     <span class="keyword">break</span>
2800206                                 <span class="keyword">end</span>
2810207                             <span class="keyword">end</span>
2820208                                     
2830209                         <span class="keyword">elseif</span> isfield(OneField(ii,jj), Family)
2840210                             <span class="keyword">if</span> isfield(OneField(ii,jj).(Family),<span class="string">'FamilyName'</span>) &amp;&amp; isfield(OneField(ii,jj).(Family),<span class="string">'Data'</span>)
2850211                                 <span class="comment">% Old config data structure</span>
2860212                                 <span class="keyword">if</span> ~isempty(FieldConstraint)
2870213                                     <span class="keyword">if</span> isfield(OneField(ii,jj).(Family), <span class="string">'Field'</span>)
2880214                                         <span class="keyword">if</span> strcmp(OneField(ii,jj).(Family).Field, FieldConstraint)
2890215                                             S = OneField(ii,jj).(Family);
2900216                                             Found = 1;
2910217                                             <span class="keyword">break</span>       
2920218                                         <span class="keyword">end</span>
2930219                                     <span class="keyword">end</span>
2940220                                 <span class="keyword">else</span>
2950221                                     S = OneField(ii,jj).(Family);
2960222                                     Found = 1;
2970223                                     <span class="keyword">break</span>       
2980224                                 <span class="keyword">end</span>
2990225                             <span class="keyword">elseif</span> isfield(OneField(ii,jj), Family) &amp;&amp; isfield(OneField(ii,jj).(Family),FieldConstraint)
3000226                                 <span class="comment">% New config data structure</span>
3010227                                 <span class="keyword">if</span> ~isempty(FieldConstraint)
3020228                                     <span class="keyword">if</span> isfield(OneField(ii,jj).(Family), FieldConstraint)
3030229                                         <span class="keyword">if</span> isfield(OneField(ii,jj).(Family).(FieldConstraint),<span class="string">'FamilyName'</span>) &amp;&amp; isfield(OneField(ii,jj).(Family).(FieldConstraint),<span class="string">'Data'</span>)
3040230                                             S = OneField(ii,jj).(Family).(FieldConstraint);
3050231                                             Found = 1;
3060232                                             <span class="keyword">break</span>       
3070233                                         <span class="keyword">end</span>
3080234                                     <span class="keyword">end</span>
3090235                                 <span class="keyword">end</span>
3100236                             <span class="keyword">end</span>
3110237                         <span class="keyword">end</span>
3120238                     <span class="keyword">end</span>
3130239                 <span class="keyword">end</span>
3140240                 <span class="keyword">if</span> Found
3150241                     <span class="keyword">break</span>;
3160242                 <span class="keyword">end</span>
3170243             <span class="keyword">end</span>
3180244             <span class="keyword">if</span> Found
3190245                 <span class="keyword">break</span>;
3200246             <span class="keyword">end</span>   
3210247         <span class="keyword">end</span>
3220248     <span class="keyword">catch</span>
3230249     <span class="keyword">end</span>
3240250     <span class="keyword">if</span> Found
3250251         <span class="keyword">break</span>;
3260252     <span class="keyword">end</span>
3270253 <span class="keyword">end</span>
3280254
3290255 <span class="keyword">if</span> ~Found
3300256     error(<span class="string">'Could not find the data structure'</span>);
3310257 <span class="keyword">end</span>
3320258
3330259
3340260 <span class="comment">% If a DeviceList exists, index .Data, .Status, and .DeviceList</span>
3350261 <span class="keyword">if</span> ~isempty(DeviceList)
3360262     <span class="keyword">if</span> size(DeviceList,2) == 1
3370263         <span class="comment">% Convert element list to a device list</span>
3380264         DeviceList = <a href="elem2dev.html" class="code" title="function Output = elem2dev(Family, ElementList)">elem2dev</a>(Family, DeviceList);
3390265     <span class="keyword">end</span>
3400266     
3410267     DeviceListTotal = S.DeviceList;
3420268     [Index, iNotFound, iMonitor] = findrowindex(DeviceList,  DeviceListTotal);
3430269     <span class="keyword">if</span> ~isempty(iNotFound)
3440270         <span class="comment">% Error if a monitor is not found</span>
3450271         <span class="comment">%for i = iNotFound(:)'</span>
3460272         <span class="comment">%    fprintf('   %s(%d,%d) not found\n', S.FamilyName, DeviceList(i,1), DeviceList(i,2));</span>
3470273         <span class="comment">%end</span>
3480274         <span class="comment">%error(sprintf('Not all the devices found in %s', FileName));</span>
3490275         
3500276         <span class="comment">% Fill the missing .Data with NaN</span>
3510277         Data = NaN * ones(size(DeviceList,1), size(S.Data,2));
3520278         Data(iMonitor,:) = S.Data(Index,:);
3530279         S.Data = Data;
3540280         
3550281         <span class="comment">% Fill the missing .Status with zeros</span>
3560282         <span class="keyword">if</span> length(S.Status) == 1
3570283             S.Status = S.Status * ones(size(S.Data,1),1);
3580284         <span class="keyword">end</span>
3590285         Data = zeros(size(DeviceList,1), 1);
3600286         Data(iMonitor,:) = S.Status(Index,:);
3610287         S.Status = Data;
3620288     <span class="keyword">else</span>
3630289         S.Data   = S.Data(Index, :);
3640290         S.Status = S.Status(Index, :);
3650291     <span class="keyword">end</span>
3660292     
3670293     <span class="comment">% Index the device list</span>
3680294     S.DeviceList = DeviceList;
3690295     
3700296     
3710297     <span class="comment">% Find other fields that need to be indexed</span>
3720298     SFields = fieldnames(S);
3730299     <span class="keyword">for</span> i = 1:length(SFields)
3740300         <span class="keyword">if</span> size(S.(SFields{i}),1) == size(DeviceListTotal,1)
3750301             <span class="keyword">if</span> ~isempty(iNotFound)
3760302                 Data = NaN * ones(size(DeviceList,1), size(S.(SFields{i}),2));
3770303                 Data(iMonitor,:) = S.(SFields{i})(Index,:);
3780304                 S.(SFields{i}) = Data;
3790305             <span class="keyword">else</span>
3800306                 <span class="comment">% Fill the missing .Data with NaN</span>
3810307                 Data = NaN * ones(size(DeviceList,1), size(S.(SFields{i}),2));
3820308                 Data(iMonitor,:) = S.(SFields{i})(Index,:);
3830309                 S.(SFields{i}) = Data;
3840310                 
3850311                 <span class="comment">%S.(SFields{i}) = S.(SFields{i})(Index,:);</span>
3860312             <span class="keyword">end</span>
3870313         <span class="keyword">end</span>
3880314     <span class="keyword">end</span>
3890315 <span class="keyword">end</span> 
3900316
3910317
3920318 <span class="comment">% Make the output an AccObj object</span>
3930319 <span class="keyword">if</span> ObjectOutputFlag
3940320     Data = AccObj(Data);
3950321 <span class="keyword">end</span>
3960322
3970323
3980324 <span class="keyword">if</span> ~StructOutputFlag
3990325     S = S.Data;
4000326 <span class="keyword">end</span>
4010327</pre></div>
402<hr><address>Generated on Mon 21-May-2007 15:29:18 by <strong><a href="http://www.artefact.tk/software/matlab/m2html/">m2html</a></strong> &copy; 2003</address>
403</body>
404</html>
Note: See TracBrowser for help on using the repository browser.