source: trunk/src/read_civdata.m @ 504

Last change on this file since 504 was 497, checked in by sommeria, 12 years ago

cleaning and small bug repair.
pb of histogram for filter data solved
display of uicontrol by right mouse selection improved

File size: 8.4 KB
Line 
1%'read_civdata': reads new civ data from netcdf files
2%------------------------------------------------------------------
3%
4% function [Field,VelTypeOut]=read_civxdata(filename,FieldNames,VelType)
5%
6% OUTPUT:
7% Field: structure representing the selected field, containing
8%            .Txt: (char string) error message if any
9%            .ListGlobalAttribute: list of global attributes containing:
10%                    .NbCoord: number of vector components
11%                    .NbDim: number of dimensions (=2 or 3)
12%                    .dt: time interval for the corresponding image pair
13%                    .Time: absolute time (average of the initial image pair)
14%                    .CivStage: =0,
15%                       =1, civ1 has been performed only
16%                       =2, fix1 has been performed
17%                       =3, pacth1 has been performed
18%                       =4, civ2 has been performed
19%                       =5, fix2 has been performed
20%                       =6, pacth2 has been performed
21%                     .CoordUnit: 'pixel'
22%             .ListVarName: {'X'  'Y'  'U'  'V'  'F'  'FF'}
23%                   .X, .Y, .Z: set of vector coordinates
24%                    .U,.V,.W: corresponding set of vector components
25%                    .F: warning flags
26%                    .FF: error flag, =0 for good vectors
27%                     .C: scalar associated with velocity (used for vector colors)
28%                    .DijU; matrix of spatial derivatives (DijU(1,1,:)=DUDX,
29%                        DijU(1,2,:)=DUDY, Dij(2,1,:)=DVDX, DijU(2,2,:)=DVDY
30%
31% VelTypeOut: velocity type corresponding to the selected field: ='civ1','interp1','interp2','civ2'....
32%
33% INPUT:
34% filename: file name (string).
35% FieldNames =cell of field names to get, which can contain the strings:
36%             'ima_cor': image correlation, vec_c or vec2_C
37%             'vort','div','strain': requires velocity derivatives DUDX...
38%             'error': error estimate (vec_E or vec2_E)
39%             
40% VelType : character string indicating the types of velocity fields to read ('civ1','civ2'...)
41%            if vel_type=[] or'*', a  priority choice, given by vel_type_out{1,2}, is done depending
42%            if vel_type='filter'; a structured field is sought (filter2 in priority, then filter1)
43
44
45% FUNCTIONS called:
46% 'varcivx_generator':, sets the names of vaiables to read in the netcdf file
47% 'nc2struct': reads a netcdf file
48
49function [Field,VelTypeOut,errormsg]=read_civdata(filename,FieldNames,VelType,CivStage)
50
51%% default input
52if ~exist('VelType','var')
53    VelType='';
54end
55if isequal(VelType,'*')
56    VelType='';
57end
58if isempty(VelType)
59    VelType='';
60end
61if ~exist('FieldNames','var')
62    FieldNames=[]; %default
63end
64errormsg='';
65
66%% reading data
67[varlist,role,units,VelTypeOut]=varcivx_generator(FieldNames,VelType,CivStage);
68if isempty(varlist)
69    erromsg=['error in read_civdata: unknow velocity type ' VelType];
70    return
71else
72    [Field,vardetect]=nc2struct(filename,varlist);%read the variables in the netcdf file
73end
74if isfield(Field,'Txt')
75    errormsg=Field.Txt;
76    return
77end
78if vardetect(1)==0
79     errormsg=[ 'requested field not available in ' filename '/' VelType ': need to run patch'];
80     return
81end
82switch VelTypeOut
83    case{'civ1','filter1'}
84        if isfield(Field,'Patch1_SubDomain')
85            Field.SubDomain=Field.Patch1_SubDomain;
86            Field.ListGlobalAttribute=[Field.ListGlobalAttribute {'SubDomain'}];
87        end     
88        Field.Dt=Field.Civ1_Dt;
89        Field.Time=Field.Civ1_Time;
90    case{'civ2','filter2'}
91        if isfield(Field,'Patch2_SubDomain')
92            Field.SubDomain=Field.Patch2_SubDomain;
93            Field.ListGlobalAttribute=[Field.ListGlobalAttribute {'SubDomain'}];
94        end
95        Field.Dt=Field.Civ2_Dt;
96        Field.Time=Field.Civ2_Time;
97end
98Field.ListGlobalAttribute=[Field.ListGlobalAttribute {'Dt','Time'}];
99var_ind=find(vardetect);
100for ivar=1:numel(var_ind)
101    Field.VarAttribute{ivar}.Role=role{var_ind(ivar)};
102    Field.VarAttribute{ivar}.Unit=units{var_ind(ivar)};
103    Field.VarAttribute{ivar}.Mesh=0.1;%typical mesh for histograms O.1 pixel
104end
105Field.ListGlobalAttribute=[Field.ListGlobalAttribute {'NbCoord','NbDim','TimeUnit','CoordUnit'}];
106% %% update list of global attributes
107Field.NbCoord=2;
108Field.NbDim=2;
109Field.TimeUnit='s';
110Field.CoordUnit='pixel';
111
112%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
113% [var,role,units,vel_type_out]=varcivx_generator(FieldNames,vel_type)
114%INPUT:
115% FieldNames =cell of field names to get, which can contain the strings:
116%             'ima_cor': image correlation, vec_c or vec2_C
117%             'vort','div','strain': requires velocity derivatives DUDX...
118%             'error': error estimate (vec_E or vec2_E)
119%             
120% vel_type: character string indicating the types of velocity fields to read ('civ1','civ2'...)
121%            if vel_type=[] or'*', a  priority choice is done, civ2 considered better than civ1 )
122
123function [var,role,units,vel_type_out,errormsg]=varcivx_generator(FieldNames,vel_type,CivStage)
124
125%% default input values
126if ~exist('vel_type','var'),vel_type='';end;
127if iscell(vel_type),vel_type=vel_type{1}; end;%transform cell to string if needed
128if ~exist('FieldNames','var'),FieldNames={'ima_cor'};end;%default scalar
129if ischar(FieldNames), FieldNames={FieldNames}; end;
130errormsg='';
131
132%% select the priority order for automatic vel_type selection
133testder=0;
134testpatch=0;
135for ilist=1:length(FieldNames)
136    if ~isempty(FieldNames{ilist})
137        switch FieldNames{ilist}
138            case{'u','v'}
139                testpatch=1;
140            case {'vort','div','strain'}
141                testder=1;
142        end
143    end
144end
145if strcmp(vel_type,'civ2') && testder
146    vel_type='filter2';
147elseif strcmp(vel_type,'civ1') && testder
148    vel_type='filter1';
149end
150if isempty(vel_type)||strcmp(vel_type,'*')
151    switch CivStage
152        case {6} %filter2 available
153            vel_type='filter2';
154        case {4,5}% civ2 available but not filter2
155            if testder% derivatives needed
156                vel_type='filter1';
157            else
158                vel_type='civ2';
159            end
160        case 3
161            vel_type='filter1';
162        case {1,2}% civ1 available but not filter1
163            vel_type='civ1';
164    end
165end
166
167var={};
168switch vel_type
169    case 'civ1'
170        var={'X','Y','Z','U','V','W','C','F','FF';...
171            'Civ1_X','Civ1_Y','Civ1_Z','Civ1_U','Civ1_V','Civ1_W','Civ1_C','Civ1_F','Civ1_FF'};
172        role={'coord_x','coord_y','coord_z','vector_x','vector_y','vector_z','ancillary','warnflag','errorflag'};
173        units={'pixel','pixel','pixel','pixel','pixel','pixel','','',''};
174    case 'filter1'
175        var={'X','Y','Z','U','V','W','C','F','FF','Coord_tps','U_tps','V_tps','W_tps','SubRange','NbSites';...
176            'Civ1_X','Civ1_Y','Civ1_Z','Civ1_U_smooth','Civ1_V_smooth','Civ1_W','Civ1_C','Civ1_F','Civ1_FF',...
177            'Civ1_Coord_tps','Civ1_U_tps','Civ1_V_tps','Civ1_W_tps','Civ1_SubRange','Civ1_NbSites'};
178        role={'coord_x','coord_y','coord_z','vector_x','vector_y','vector_z','ancillary','warnflag','errorflag','coord_tps','vector_x_tps',...
179            'vector_y_tps','vector_z_tps','ancillary','ancillary'};
180        units={'pixel','pixel','pixel','pixel','pixel','pixel','','','','pixel','pixel','pixel','pixel','pixel',''};
181    case 'civ2'
182        var={'X','Y','Z','U','V','W','C','F','FF';...
183            'Civ2_X','Civ2_Y','Civ2_Z','Civ2_U','Civ2_V','Civ2_W','Civ2_C','Civ2_F','Civ2_FF'};
184        role={'coord_x','coord_y','coord_z','vector_x','vector_y','vector_z','ancillary','warnflag','errorflag'};
185        units={'pixel','pixel','pixel','pixel','pixel','pixel','','',''};
186    case 'filter2'
187        var={'X','Y','Z','U','V','W','C','F','FF','Coord_tps','U_tps','V_tps','W_tps','SubRange','NbSites';...
188            'Civ2_X','Civ2_Y','Civ2_Z','Civ2_U_smooth','Civ2_V_smooth','Civ2_W','Civ2_C','Civ2_F','Civ2_FF',...
189            'Civ2_Coord_tps','Civ2_U_tps','Civ2_V_tps','','Civ2_SubRange','Civ2_NbSites'};
190        role={'coord_x','coord_y','coord_z','vector_x','vector_y','vector_z','ancillary','warnflag','errorflag','coord_tps','vector_x_tps',...
191            'vector_y_tps','vector_z_tps','ancillary','ancillary'};
192        units={'pixel','pixel','pixel','pixel','pixel','pixel','','','','pixel','pixel','pixel','pixel','pixel',''};
193end
194vel_type_out=vel_type;
195
196
197
198
199
Note: See TracBrowser for help on using the repository browser.