source: trunk/src/read_civdata.m @ 501

Last change on this file since 501 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
RevLine 
[237]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
[380]49function [Field,VelTypeOut,errormsg]=read_civdata(filename,FieldNames,VelType,CivStage)
[406]50
[237]51%% default input
52if ~exist('VelType','var')
[246]53    VelType='';
[237]54end
55if isequal(VelType,'*')
[246]56    VelType='';
[237]57end
[246]58if isempty(VelType)
59    VelType='';
60end
[237]61if ~exist('FieldNames','var')
62    FieldNames=[]; %default
63end
[406]64errormsg='';
[237]65
66%% reading data
[380]67[varlist,role,units,VelTypeOut]=varcivx_generator(FieldNames,VelType,CivStage);
[406]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
[237]74if isfield(Field,'Txt')
75    errormsg=Field.Txt;
76    return
77end
78if vardetect(1)==0
[379]79     errormsg=[ 'requested field not available in ' filename '/' VelType ': need to run patch'];
[237]80     return
81end
[380]82switch VelTypeOut
[494]83    case{'civ1','filter1'}
84        if isfield(Field,'Patch1_SubDomain')
85            Field.SubDomain=Field.Patch1_SubDomain;
86            Field.ListGlobalAttribute=[Field.ListGlobalAttribute {'SubDomain'}];
87        end     
[380]88        Field.Dt=Field.Civ1_Dt;
[494]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
[380]95        Field.Dt=Field.Civ2_Dt;
[494]96        Field.Time=Field.Civ2_Time;
[372]97end
[494]98Field.ListGlobalAttribute=[Field.ListGlobalAttribute {'Dt','Time'}];
[237]99var_ind=find(vardetect);
[389]100for ivar=1:numel(var_ind)
[237]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'...)
[380]121%            if vel_type=[] or'*', a  priority choice is done, civ2 considered better than civ1 )
[237]122
[406]123function [var,role,units,vel_type_out,errormsg]=varcivx_generator(FieldNames,vel_type,CivStage)
[237]124
125%% default input values
[246]126if ~exist('vel_type','var'),vel_type='';end;
[237]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;
[406]130errormsg='';
[237]131
132%% select the priority order for automatic vel_type selection
133testder=0;
[246]134testpatch=0;
[237]135for ilist=1:length(FieldNames)
136    if ~isempty(FieldNames{ilist})
[389]137        switch FieldNames{ilist}
138            case{'u','v'}
139                testpatch=1;
140            case {'vort','div','strain'}
141                testder=1;
142        end
[237]143    end
[389]144end
[492]145if strcmp(vel_type,'civ2') && testder
146    vel_type='filter2';
147elseif strcmp(vel_type,'civ1') && testder
148    vel_type='filter1';
149end
[406]150if isempty(vel_type)||strcmp(vel_type,'*')
[380]151    switch CivStage
152        case {6} %filter2 available
[492]153            vel_type='filter2';
[380]154        case {4,5}% civ2 available but not filter2
155            if testder% derivatives needed
[492]156                vel_type='filter1';
[380]157            else
158                vel_type='civ2';
159            end
[492]160        case 3
161            vel_type='filter1';
162        case {1,2}% civ1 available but not filter1
[380]163            vel_type='civ1';
164    end
165end
[492]166
[406]167var={};
[246]168switch vel_type
[389]169    case 'civ1'
[492]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','','',''};
[389]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'};
[497]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'};
[389]180        units={'pixel','pixel','pixel','pixel','pixel','pixel','','','','pixel','pixel','pixel','pixel','pixel',''};
181    case 'civ2'
[492]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','','',''};
[389]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'};
[497]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'};
[389]192        units={'pixel','pixel','pixel','pixel','pixel','pixel','','','','pixel','pixel','pixel','pixel','pixel',''};
[246]193end
[380]194vel_type_out=vel_type;
[237]195
196
197
[246]198
199
Note: See TracBrowser for help on using the repository browser.