source: trunk/src/uvmat_doc/FUNCTIONS_DOC/struct2nc.html @ 37

Last change on this file since 37 was 37, checked in by sommeria, 14 years ago

create_grid.fig ,
uvmat_doc and all the included files added

File size: 15.8 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 struct2nc</title>
6  <meta name="keywords" content="struct2nc">
7  <meta name="description" content="'struct2nc': create a netcdf file from a Matlab structure">
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">.</a> &gt; struct2nc.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 .&nbsp;<img alt=">" border="0" src="../right.png"></a></td></tr></table>-->
19
20<h1>struct2nc
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>'struct2nc': create a netcdf file from a Matlab structure</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 errormsg=struct2nc(flname,Data) </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">'struct2nc': create a netcdf file from a Matlab structure
31---------------------------------------------------------------------
32 error=struct2nc(flname,Data)
33
34OUPUT:
35error=error message, =0: default, no error
36INPUT:
37flname: name of the netcdf file to create (must end with the extension '.nc')
38  Data: structure containing all the information of the netcdf file (or netcdf object)
39           with fields:
40    .ListGlobalAttribute: cell listing the names of the global attributes (note that a global atribute with the same name as a variable is excluded)
41        .Att_1,Att_2... : values of the global attributes
42            .ListDimName: cell listing the names of the array dimensions
43               .DimValue: array dimension values (Matlab vector with the same length as .ListDimName
44            .ListVarName: cell listing the names of the variables
45            .VarDimIndex: cell containing the set of dimension indices (in list .ListDimName) for each variable of .ListVarName
46           .VarAttribute: cell of structures s containing names and values of variable attributes (s.name=value) for each variable of .ListVarName
47        .Var1, .Var2....: variables (Matlab arrays) with names listed in .ListVarName
48
49AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
50  Copyright Joel Sommeria, 2008, LEGI / CNRS-UJF-INPG, sommeria@coriolis-legi.org.
51AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
52     This file is part of the toolbox UVMAT.
53 
54     UVMAT is free software; you can redistribute it and/or modify
55     it under the terms of the GNU General Public License as published by
56     the Free Software Foundation; either version 2 of the License, or
57     (at your option) any later version.
58 
59     UVMAT is distributed in the hope that it will be useful,
60     but WITHOUT ANY WARRANTY; without even the implied warranty of
61     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
62     GNU General Public License (file UVMAT/COPYING.txt) for more details.
63AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</pre></div>
64
65<!-- crossreference -->
66<h2><a name="_cross"></a>CROSS-REFERENCE INFORMATION <a href="#_top"><img alt="^" border="0" src="../up.png"></a></h2>
67This function calls:
68<ul style="list-style-image:url(../matlabicon.gif)">
69<li><a href="check_field_structure.html" class="code" title="function [DataOut,errormsg]=check_field_structure(Data)">check_field_structure</a> 'check_field_structure': check the representation of fields by a Matlab structure</li><li><a href="struct2nc_toolbox.html" class="code" title="function errormsg=struct2nc_toolbox(flname,Data)">struct2nc_toolbox</a>  'struct2nc_toolbox': create a netcdf file from a Matlab structure: use of netcdf toolbox</li></ul>
70This function is called by:
71<ul style="list-style-image:url(../matlabicon.gif)">
72<li><a href="RUN_STLIN.html" class="code" title="function RUN_STLIN(file_A,file_B,vel_type,file_st,nx_patch,ny_patch,thresh_patch,fileAxml,fileBxml)">RUN_STLIN</a>     'RUN_STLIN': combine velocity fields for stereo PIV</li><li><a href="series.html" class="code" title="function varargout = series(varargin)">series</a> 'series': master function associated to the GUI series.m for analysis field series</li></ul>
73<!-- crossreference -->
74
75
76<h2><a name="_source"></a>SOURCE CODE <a href="#_top"><img alt="^" border="0" src="../up.png"></a></h2>
77<div class="fragment"><pre>0001 <span class="comment">%'struct2nc': create a netcdf file from a Matlab structure</span>
780002 <span class="comment">%---------------------------------------------------------------------</span>
790003 <span class="comment">% error=struct2nc(flname,Data)</span>
800004 <span class="comment">%</span>
810005 <span class="comment">%OUPUT:</span>
820006 <span class="comment">%error=error message, =0: default, no error</span>
830007 <span class="comment">%INPUT:</span>
840008 <span class="comment">%flname: name of the netcdf file to create (must end with the extension '.nc')</span>
850009 <span class="comment">%  Data: structure containing all the information of the netcdf file (or netcdf object)</span>
860010 <span class="comment">%           with fields:</span>
870011 <span class="comment">%    .ListGlobalAttribute: cell listing the names of the global attributes (note that a global atribute with the same name as a variable is excluded)</span>
880012 <span class="comment">%        .Att_1,Att_2... : values of the global attributes</span>
890013 <span class="comment">%            .ListDimName: cell listing the names of the array dimensions</span>
900014 <span class="comment">%               .DimValue: array dimension values (Matlab vector with the same length as .ListDimName</span>
910015 <span class="comment">%            .ListVarName: cell listing the names of the variables</span>
920016 <span class="comment">%            .VarDimIndex: cell containing the set of dimension indices (in list .ListDimName) for each variable of .ListVarName</span>
930017 <span class="comment">%           .VarAttribute: cell of structures s containing names and values of variable attributes (s.name=value) for each variable of .ListVarName</span>
940018 <span class="comment">%        .Var1, .Var2....: variables (Matlab arrays) with names listed in .ListVarName</span>
950019 <span class="comment">%</span>
960020 <span class="comment">%AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</span>
970021 <span class="comment">%  Copyright Joel Sommeria, 2008, LEGI / CNRS-UJF-INPG, sommeria@coriolis-legi.org.</span>
980022 <span class="comment">%AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</span>
990023 <span class="comment">%     This file is part of the toolbox UVMAT.</span>
1000024 <span class="comment">%</span>
1010025 <span class="comment">%     UVMAT is free software; you can redistribute it and/or modify</span>
1020026 <span class="comment">%     it under the terms of the GNU General Public License as published by</span>
1030027 <span class="comment">%     the Free Software Foundation; either version 2 of the License, or</span>
1040028 <span class="comment">%     (at your option) any later version.</span>
1050029 <span class="comment">%</span>
1060030 <span class="comment">%     UVMAT is distributed in the hope that it will be useful,</span>
1070031 <span class="comment">%     but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
1080032 <span class="comment">%     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
1090033 <span class="comment">%     GNU General Public License (file UVMAT/COPYING.txt) for more details.</span>
1100034 <span class="comment">%AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</span>
1110035
1120036 <a name="_sub0" href="#_subfunctions" class="code">function errormsg=struct2nc(flname,Data)</a>
1130037
1140038 hhh=which(<span class="string">'netcdf.create'</span>);<span class="comment">% look for built-in matlab library</span>
1150039
1160040 <span class="comment">%USE OF built-in  netcdf library</span>
1170041 <span class="keyword">if</span> ~isequal(hhh,<span class="string">''</span>)
1180042     FilePath=fileparts(flname);
1190043     <span class="keyword">if</span> ~exist(FilePath,<span class="string">'dir'</span>)
1200044         errormsg=[<span class="string">'directory '</span> FilePath <span class="string">' needs to be created'</span>];
1210045         <span class="keyword">return</span>
1220046     <span class="keyword">end</span>
1230047     [Data,errormsg]=<a href="check_field_structure.html" class="code" title="function [DataOut,errormsg]=check_field_structure(Data)">check_field_structure</a>(Data);
1240048     ListVarName=Data.ListVarName;
1250049     nc=netcdf.create(flname,<span class="string">'NC_CLOBBER'</span>);<span class="comment">%,'clobber'); %create the netcdf file with name flname</span>
1260050     <span class="comment">%write global constants</span>
1270051     <span class="keyword">if</span> isfield(Data,<span class="string">'ListGlobalAttribute'</span>)
1280052         keys=Data.ListGlobalAttribute;
1290053         <span class="keyword">for</span> iattr=1:length(keys)
1300054             <span class="keyword">if</span> isfield(Data,keys{iattr})
1310055                  testvar=0;
1320056                 <span class="keyword">for</span> ivar=1:length(ListVarName)<span class="comment">% eliminate possible global attributes with the same name as a variable</span>
1330057                     <span class="keyword">if</span> isequal(ListVarName{ivar}, keys{iattr})
1340058                         testvar=1;
1350059                         <span class="keyword">break</span>
1360060                     <span class="keyword">end</span>
1370061                 <span class="keyword">end</span>
1380062                 <span class="keyword">if</span> ~testvar               
1390063                     eval([<span class="string">'cte=Data.'</span> keys{iattr} <span class="string">';'</span>])
1400064                     <span class="keyword">if</span> (ischar(cte) ||isnumeric(cte)) &amp;&amp;  ~isempty(cte)&amp;&amp; ~isequal(cte,<span class="string">''</span>)
1410065                         netcdf.putAtt(nc,netcdf.getConstant(<span class="string">'NC_GLOBAL'</span>),keys{iattr},cte)
1420066                     <span class="keyword">else</span>
1430067                         errormsg=<span class="string">'global attributes must be characters or numbers'</span>;
1440068                         <span class="keyword">return</span>
1450069                     <span class="keyword">end</span>
1460070                 <span class="keyword">end</span>
1470071             <span class="keyword">end</span>
1480072         <span class="keyword">end</span>
1490073     <span class="keyword">end</span>
1500074     <span class="comment">%create dimensions</span>
1510075     dimid=[];
1520076     <span class="keyword">for</span> idim=1:length(Data.ListDimName)
1530077          dimid(idim) = netcdf.defDim(nc,Data.ListDimName{idim},Data.DimValue(idim));
1540078     <span class="keyword">end</span>
1550079     VarAttribute={}; <span class="comment">%default</span>
1560080     testattr=0;
1570081     <span class="keyword">if</span> isfield(Data,<span class="string">'VarAttribute'</span>)
1580082         VarAttribute=Data.VarAttribute;
1590083         testattr=1;
1600084     <span class="keyword">end</span>
1610085     varid=[];
1620086     <span class="keyword">for</span> ivar=1:length(ListVarName)
1630087         varid(ivar)=netcdf.defVar(nc,ListVarName{ivar},<span class="string">'double'</span>,dimid(Data.VarDimIndex{ivar}));<span class="comment">%define variable</span>
1640088     <span class="keyword">end</span>
1650089      <span class="comment">%write variable attributes</span>
1660090     <span class="keyword">if</span> testattr
1670091         <span class="keyword">for</span> ivar=1:length(VarAttribute) 
1680092             <span class="keyword">if</span> isstruct(VarAttribute{ivar})
1690093                 attr_names=fields(VarAttribute{ivar});
1700094                 <span class="keyword">for</span> iattr=1:length(attr_names)
1710095                     eval([<span class="string">'attr_val=VarAttribute{ivar}.'</span> attr_names{iattr} <span class="string">';'</span>]);
1720096                     netcdf.putAtt(nc,varid(ivar),attr_names{iattr},attr_val);
1730097                 <span class="keyword">end</span>
1740098             <span class="keyword">end</span>
1750099         <span class="keyword">end</span>
1760100     <span class="keyword">end</span>
1770101     netcdf.endDef(nc); <span class="comment">%put in data mode</span>
1780102     <span class="keyword">for</span> ivar=1:length(ListVarName)
1790103         <span class="keyword">if</span> isfield(Data,ListVarName{ivar})
1800104             eval([<span class="string">'VarVal=Data.'</span> ListVarName{ivar} <span class="string">';'</span>])<span class="comment">%varval=values of the current variable</span>
1810105             VarDimIndex=Data.VarDimIndex{ivar}; <span class="comment">%indices of the variable dimensions in the list of dimensions</span>
1820106             siz=size(VarVal);
1830107             VarDimName=Data.VarDimName{ivar};<span class="comment">%NEW</span>
1840108             <span class="keyword">if</span> ischar(VarDimName)<span class="comment">%NEW</span>
1850109                 VarDimName={VarDimName};<span class="comment">%NEW</span>
1860110             <span class="keyword">end</span><span class="comment">%NEW</span>
1870111             testrange=(numel(VarDimName)==1 &amp;&amp; strcmp(VarDimName{1},ListVarName{ivar}) &amp;&amp; numel(VarVal)==2); <span class="comment">%NEW</span>
1880112             testline=isequal(length(siz),2) &amp;&amp; isequal(siz(1),1)&amp;&amp; isequal(siz(2), Data.DimValue(VarDimIndex));
1890113             testcolumn=isequal(length(siz),2) &amp;&amp; isequal(siz(1), Data.DimValue(VarDimIndex))&amp;&amp; isequal(siz(2),1);
1900114             <span class="keyword">if</span> ~testline &amp;&amp; ~testcolumn &amp;&amp; ~isequal(siz,Data.DimValue(VarDimIndex))
1910115                 errormsg=[<span class="string">'wrong dimensions declared for '</span> ListVarName{ivar} <span class="string">' in struct2nc.m'</span>];
1920116                 <span class="keyword">break</span>
1930117             <span class="keyword">end</span> 
1940118             <span class="keyword">if</span> testline || testrange<span class="comment">%NEW</span>
1950119                 <span class="keyword">if</span> testrange
1960120                     VarVal=linspace(VarVal(1),VarVal(2),Data.DimValue(VarDimIndex));<span class="comment">%NEW</span>
1970121                 <span class="keyword">end</span>
1980122                <span class="comment">%nc{ListVarName{ivar}}=ncfloat(Data.ListDimName(VarDimIndex));%vector of x coordinates</span>
1990123                netcdf.putVar(nc,varid(ivar), VarVal');
2000124             <span class="keyword">else</span>
2010125                 netcdf.putVar(nc,varid(ivar), VarVal);
2020126                 <span class="comment">%nc{ListVarName{ivar}}(:) = VarVal;</span>
2030127             <span class="keyword">end</span>
2040128             
2050129         <span class="keyword">end</span>
2060130     <span class="keyword">end</span>
2070131 <span class="comment">%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%</span>
2080132 <span class="comment">%OLD netcdf toolbox</span>
2090133 <span class="keyword">else</span>
2100134     errormsg=<a href="struct2nc_toolbox.html" class="code" title="function errormsg=struct2nc_toolbox(flname,Data)">struct2nc_toolbox</a>(flname,Data);
2110135 <span class="keyword">end</span>
2120136</pre></div>
213<hr><address>Generated on Fri 13-Nov-2009 11:17:03 by <strong><a href="http://www.artefact.tk/software/matlab/m2html/">m2html</a></strong> &copy; 2003</address>
214</body>
215</html>
Note: See TracBrowser for help on using the repository browser.