source: trunk/src/uvmat_doc/FUNCTIONS_DOC/find_field_indices.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: 16.9 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 find_field_indices</title>
6  <meta name="keywords" content="find_field_indices">
7  <meta name="description" content="'find_file_indices': group the variables of a nc-formated Matlab structure into 'fields' with common dimensions">
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; find_field_indices.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>find_field_indices
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>'find_file_indices': group the variables of a nc-formated Matlab structure into 'fields' with common dimensions</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 [CellVarIndex,NbDim,VarType,errormsg]=find_field_indices(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">'find_file_indices': group the variables of a nc-formated Matlab structure into 'fields' with common dimensions
31----------------------------------------------------------------------
32 function [DimVarIndex,CellVarIndex,NbDim,VarType]=find_field_indices(Data)
33
34OUTPUT:
35 CellVaxIndex: cell whose elements are arrays of indices in the list data.ListVarName 
36              CellvarIndex{i} represents a set of variables with the same dimensions
37 NbDim: array with the length of CellVarIndex, giving its  space dimension
38 VarType: cell array of structures with fields
39      .coord_x, y, z: indices (in .ListVarname) of variables representing  unstructured coordinates x, y, z
40      .vector_x,_y,_z: indices of variables giving the vector components x, y, z
41      .warnflag: index of warnflag
42      .errorflag: index of error flag
43      .ancillary: indices of ancillary variables
44      .image   : B/W image, (behaves like scalar)
45      .color : color image, the last index, which is not a coordinate  variable, represent the color components
46      .scalar: scalar field</pre></div>
47
48<!-- crossreference -->
49<h2><a name="_cross"></a>CROSS-REFERENCE INFORMATION <a href="#_top"><img alt="^" border="0" src="../up.png"></a></h2>
50This function calls:
51<ul style="list-style-image:url(../matlabicon.gif)">
52</ul>
53This function is called by:
54<ul style="list-style-image:url(../matlabicon.gif)">
55<li><a href="get_field.html" class="code" title="function varargout = get_field(varargin)">get_field</a>        'get_field': display variables and attributes from a Netcdf file, and plot selected fields</li><li><a href="plot_field.html" class="code" title="function [PlotType,PlotParamOut,haxes]= plot_field(Data,haxes,PlotParam,KeepLim,PosColorbar)">plot_field</a>   'plot_field': plot any field with the structure defined in the uvmat package</li><li><a href="proj_field.html" class="code" title="function [ProjData,errormsg]=proj_field(FieldData,ObjectData,IndexObj)">proj_field</a>       'proj_field': projects the field on a projection object</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><li><a href="uvmat.html" class="code" title="function varargout = uvmat(varargin)">uvmat</a>     'uvmat': function associated with the GUI 'uvmat.fig' for images and data field visualization</li></ul>
56<!-- crossreference -->
57
58
59<h2><a name="_source"></a>SOURCE CODE <a href="#_top"><img alt="^" border="0" src="../up.png"></a></h2>
60<div class="fragment"><pre>0001 <span class="comment">%'find_file_indices': group the variables of a nc-formated Matlab structure into 'fields' with common dimensions</span>
610002 <span class="comment">%----------------------------------------------------------------------</span>
620003 <span class="comment">% function [DimVarIndex,CellVarIndex,NbDim,VarType]=find_field_indices(Data)</span>
630004 <span class="comment">%</span>
640005 <span class="comment">%OUTPUT:</span>
650006 <span class="comment">% CellVaxIndex: cell whose elements are arrays of indices in the list data.ListVarName</span>
660007 <span class="comment">%              CellvarIndex{i} represents a set of variables with the same dimensions</span>
670008 <span class="comment">% NbDim: array with the length of CellVarIndex, giving its  space dimension</span>
680009 <span class="comment">% VarType: cell array of structures with fields</span>
690010 <span class="comment">%      .coord_x, y, z: indices (in .ListVarname) of variables representing  unstructured coordinates x, y, z</span>
700011 <span class="comment">%      .vector_x,_y,_z: indices of variables giving the vector components x, y, z</span>
710012 <span class="comment">%      .warnflag: index of warnflag</span>
720013 <span class="comment">%      .errorflag: index of error flag</span>
730014 <span class="comment">%      .ancillary: indices of ancillary variables</span>
740015 <span class="comment">%      .image   : B/W image, (behaves like scalar)</span>
750016 <span class="comment">%      .color : color image, the last index, which is not a coordinate  variable, represent the color components</span>
760017 <span class="comment">%      .scalar: scalar field</span>
770018
780019 <span class="comment">%</span>
790020 <span class="comment">%INPUT:</span>
800021 <span class="comment">% Data: structure representing fields, output of check_field_structure</span>
810022 <span class="comment">%            .ListDimName: cell listing the names of the array dimensions</span>
820023 <span class="comment">%            .ListVarName: cell listing the names of the variables</span>
830024 <span class="comment">%            .VarDimIndex: cell containing the set of dimension indices (in list .ListDimName) for each variable of .ListVarName</span>
840025 <span class="comment">%</span>
850026 <span class="comment">% HELP:</span>
860027 <span class="comment">% to get the dimensions of arrays common to the field #icell</span>
870028 <span class="comment">%         VarIndex=CellVarIndex{icell}; % list of variable indices</span>
880029 <span class="comment">%         DimIndex=Data.VarDimIndex{VarIndex(1)} % list of dimensions for each variable in the cell #icell</span>
890030 <span class="comment">%</span>
900031 <span class="comment">%AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</span>
910032 <span class="comment">%  Copyright Joel Sommeria, 2008, LEGI / CNRS-UJF-INPG, sommeria@coriolis-legi.org.</span>
920033 <span class="comment">%AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</span>
930034 <span class="comment">%     This file is part of the toolbox UVMAT.</span>
940035 <span class="comment">%</span>
950036 <span class="comment">%     UVMAT is free software; you can redistribute it and/or modify</span>
960037 <span class="comment">%     it under the terms of the GNU General Public License as published by</span>
970038 <span class="comment">%     the Free Software Foundation; either version 2 of the License, or</span>
980039 <span class="comment">%     (at your option) any later version.</span>
990040 <span class="comment">%</span>
1000041 <span class="comment">%     UVMAT is distributed in the hope that it will be useful,</span>
1010042 <span class="comment">%     but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
1020043 <span class="comment">%     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
1030044 <span class="comment">%     GNU General Public License (file UVMAT/COPYING.txt) for more details.</span>
1040045 <span class="comment">%AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</span>
1050046
1060047 <a name="_sub0" href="#_subfunctions" class="code">function [CellVarIndex,NbDim,VarType,errormsg]=find_field_indices(Data)</a>
1070048 CellVarIndex={};
1080049 NbDim=[];
1090050 VarType=[];
1100051 errormsg=[];
1110052 nbvar=numel(Data.ListVarName);<span class="comment">%number of field variables</span>
1120053 icell=0;
1130054 ivardim=0;
1140055 VarDimIndex=[];
1150056 VarDimName={};
1160057
1170058 <span class="keyword">if</span> ~isfield(Data,<span class="string">'VarDimName'</span>)
1180059     errormsg=<span class="string">'missing .VarDimName'</span>;
1190060     <span class="keyword">return</span>
1200061 <span class="keyword">end</span>
1210062
1220063 <span class="comment">%loop on the list of variables</span>
1230064 <span class="keyword">for</span> ivar=1:nbvar
1240065     DimCell=Data.VarDimName{ivar}; <span class="comment">%dimensions associated with the variable #ivar</span>
1250066     <span class="keyword">if</span> ischar(DimCell)
1260067         DimCell={DimCell};
1270068         Data.VarDimName{ivar}={Data.VarDimName{ivar}};<span class="comment">%transform char chain into cell</span>
1280069     <span class="keyword">end</span>
1290070     testnewcell=1;
1300071     <span class="keyword">for</span> icell_prev=1:numel(CellVarIndex)<span class="comment">%detect whether the dimensions of ivar fit with an existing cell</span>
1310072         PrevVarIndex=CellVarIndex{icell_prev};
1320073         PrevDimName=Data.VarDimName{PrevVarIndex(1)};
1330074         <span class="keyword">if</span> isequal(PrevDimName,DimCell)
1340075             CellVarIndex{icell_prev}=[CellVarIndex{icell_prev} ivar];<span class="comment">% add variable index #ivar to the cell #icell_prev</span>
1350076             testnewcell=0; <span class="comment">%existing cell detected</span>
1360077             <span class="keyword">break</span>
1370078         <span class="keyword">end</span>
1380079     <span class="keyword">end</span>
1390080     <span class="keyword">if</span> testnewcell
1400081         icell=icell+1;
1410082         CellVarIndex{icell}=ivar;<span class="comment">%put the current variabl index in the new cell</span>
1420083     <span class="keyword">end</span>
1430084     
1440085     <span class="comment">%look for dimension variables</span>
1450086     <span class="keyword">if</span> numel(DimCell)==1<span class="comment">% if the variable has a single dimension</span>
1460087         Role=<span class="string">''</span>;
1470088         <span class="keyword">if</span> isfield(Data,<span class="string">'VarAttribute'</span>) &amp;&amp; length(Data.VarAttribute)&gt;=ivar &amp;&amp; isfield(Data.VarAttribute{ivar},<span class="string">'Role'</span>)
1480089             Role=Data.VarAttribute{ivar}.Role;
1490090         <span class="keyword">end</span>
1500091         <span class="keyword">if</span> strcmp(DimCell{1},Data.ListVarName{ivar}) || strcmp(Role,<span class="string">'dimvar'</span>)
1510092             ivardim=ivardim+1;
1520093             VarDimIndex(ivardim)=ivar;<span class="comment">%index of the variable</span>
1530094             VarDimName{ivardim}=DimCell{1};<span class="comment">%name of the dimension</span>
1540095         <span class="keyword">end</span>
1550096     <span class="keyword">end</span>
1560097 <span class="keyword">end</span>
1570098
1580099 <span class="comment">% find the spatial dimensions and vector components</span>
1590100 ListRole={<span class="string">'coord_x'</span>,<span class="string">'coord_y'</span>,<span class="string">'coord_z'</span>,<span class="string">'vector_x'</span>,<span class="string">'vector_y'</span>,<span class="string">'vector_z'</span>,<span class="string">'warnflag'</span>,<span class="string">'errorflag'</span>,<span class="keyword">...</span>
1600101     <span class="string">'ancillary'</span>,<span class="string">'image'</span>,<span class="string">'color'</span>,<span class="string">'discrete'</span>,<span class="string">'scalar'</span>};
1610102 <span class="keyword">for</span> icell=1:length(CellVarIndex)
1620103     <span class="keyword">for</span> ilist=1:numel(ListRole)
1630104         eval([<span class="string">'ivar_'</span> ListRole{ilist} <span class="string">'=[];'</span>])
1640105     <span class="keyword">end</span>
1650106     VarIndex=CellVarIndex{icell};<span class="comment">%set of variable indices with the same dim</span>
1660107     DimCell=Data.VarDimName{VarIndex(1)};<span class="comment">% list of dimensions for each variable in the cell #icell</span>
1670108     <span class="keyword">if</span> isfield(Data,<span class="string">'VarAttribute'</span>);
1680109         VarAttribute=Data.VarAttribute;
1690110     <span class="keyword">else</span>
1700111         VarAttribute={};
1710112     <span class="keyword">end</span>
1720113     test_2D=0;
1730114     <span class="keyword">for</span> ivar=VarIndex
1740115         <span class="keyword">if</span> length(VarAttribute)&gt;=ivar
1750116             <span class="keyword">if</span> isfield(VarAttribute{ivar},<span class="string">'Role'</span>)
1760117                 role=VarAttribute{ivar}.Role;
1770118                 <span class="keyword">switch</span> role
1780119                     <span class="keyword">case</span> ListRole
1790120                         eval([<span class="string">'ivar_'</span> role <span class="string">'=[ivar_'</span> role <span class="string">' ivar];'</span>])
1800121                     <span class="keyword">otherwise</span>
1810122                        ivar_scalar=[ivar_scalar ivar];
1820123                 <span class="keyword">end</span>
1830124             <span class="keyword">else</span>
1840125               ivar_scalar=[ivar_scalar ivar];<span class="comment">% variable considered as scalar in the absence of Role attribute</span>
1850126             <span class="keyword">end</span>
1860127             <span class="keyword">if</span> isfield(VarAttribute{ivar},<span class="string">'Coord_2'</span>)
1870128                 test_2D=1; <span class="comment">%obsolete convention</span>
1880129             <span class="keyword">end</span>
1890130         <span class="keyword">else</span>
1900131             ivar_scalar=[ivar_scalar ivar];<span class="comment">% variable considered as scalar in the absence of variable a  attribute</span>
1910132         <span class="keyword">end</span>
1920133     <span class="keyword">end</span>
1930134     <span class="keyword">for</span> ilist=1:numel(ListRole)
1940135         eval([<span class="string">'VarType{icell}.'</span> ListRole{ilist} <span class="string">'=ivar_'</span> ListRole{ilist} <span class="string">';'</span>])
1950136     <span class="keyword">end</span>   
1960137     <span class="keyword">if</span> numel(ivar_coord_x)&gt;1 || numel(ivar_coord_y)&gt;1 || numel(ivar_coord_z)&gt;1
1970138         errormsg=<span class="string">'multiply defined coordinates  in the same cell'</span>;
1980139         <span class="keyword">return</span>
1990140     <span class="keyword">end</span>
2000141     <span class="keyword">if</span> numel(ivar_vector_x)&gt;1 || numel(ivar_vector_y)&gt;1 || numel(ivar_vector_z)&gt;1
2010142         errormsg=<span class="string">'more than one vector fields in the same cell'</span>;
2020143         <span class="keyword">return</span>
2030144     <span class="keyword">end</span> 
2040145     NbDim(icell)=0;<span class="comment">% nbre of space dimensions</span>
2050146     <span class="keyword">if</span> ~isempty(ivar_coord_z)
2060147         NbDim(icell)=3;
2070148     <span class="keyword">elseif</span> ~isempty(ivar_coord_y)
2080149         NbDim(icell)=2;
2090150     <span class="keyword">elseif</span> ~isempty(ivar_coord_x)
2100151         NbDim(icell)=1;
2110152     <span class="keyword">end</span>
2120153           
2130154     <span class="comment">% look at coordinates variables</span>
2140155     coord=zeros(1,numel(DimCell));<span class="comment">%default</span>
2150156     <span class="keyword">if</span> NbDim(icell)==0 &amp;&amp; ~isempty(VarDimName)<span class="comment">% no unstructured coordinate found</span>
2160157         <span class="keyword">for</span> idim=1:numel(DimCell)   <span class="comment">%loop on the dimensions of the variables in cell #icell</span>
2170158             <span class="keyword">for</span> ivardim=1:numel(VarDimName)
2180159                 <span class="keyword">if</span> strcmp(VarDimName{ivardim},DimCell{idim})
2190160                     coord(idim)=VarDimIndex(ivardim);
2200161                     <span class="keyword">break</span>
2210162                 <span class="keyword">end</span>
2220163             <span class="keyword">end</span>
2230164         <span class="keyword">end</span>
2240165         NbDim(icell)=numel(find(coord)); 
2250166     <span class="keyword">end</span> 
2260167     VarType{icell}.coord=coord;
2270168     <span class="keyword">if</span> NbDim(icell)==0 &amp;&amp; test_2D <span class="comment">%look at attributes Coord_1, coord_2 (obsolete convention)</span>
2280169         NbDim(icell)=2;
2290170     <span class="keyword">end</span>
2300171 <span class="keyword">end</span></pre></div>
231<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>
232</body>
233</html>
Note: See TracBrowser for help on using the repository browser.