0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041
0042
0043
0044
0045
0046
0047
0048
0049
0050
0051
0052
0053
0054
0055
0056
0057
0058
0059 function [Field,VelTypeOut]=read_civxdata(filename,FieldNames,VelType)
0060
0061 if ~exist('VelType','var')
0062 VelType=[];
0063 end
0064 if isequal(VelType,'*')
0065 VelType=[];
0066 end
0067 if ~exist('FieldNames','var')
0068 FieldNames=[];
0069 end
0070
0071 VelTypeOut=VelType;
0072 [var,role,units,vel_type_out_cell]=varcivx_generator(FieldNames,VelType);
0073 [Field,vardetect,ichoice]=nc2struct(filename,var);
0074 if isfield(Field,'Txt')
0075 return
0076 end
0077 if isequal(vardetect,0)
0078 Field.Txt=[FieldNames ' not accessible in ' filename '/' VelType];
0079 return
0080 end
0081 var_ind=find(vardetect);
0082 for ivar=1:length(var_ind)
0083 Field.VarAttribute{ivar}.Role=role{var_ind(ivar)};
0084
0085 end
0086 VelTypeOut=VelType;
0087 if ~isempty(ichoice)
0088 VelTypeOut=vel_type_out_cell{ichoice};
0089 end
0090
0091
0092 if isfield(Field,'DjUi')
0093 Field.ListVarName(end-2:end)=[];
0094 Field.ListVarName{end}='DjUi';
0095 Field.VarDimIndex(end-2:end)=[];
0096 Field.VarAttribute(end-2:end)=[];
0097 end
0098
0099
0100 test_civ1=isequal(VelTypeOut,'civ1')||isequal(VelTypeOut,'interp1')||isequal(VelTypeOut,'filter1');
0101 test_civ2=isequal(VelTypeOut,'civ2')||isequal(VelTypeOut,'interp2')||isequal(VelTypeOut,'filter2');
0102 if test_civ1
0103 Field.Time=Field.absolut_time_T0;
0104 elseif test_civ2
0105 Field.Time=Field.absolut_time_T0_2;
0106 Field.dt=Field.dt2;
0107 else
0108 Field.Txt='the input file is not civx';
0109 display(Field.Txt)
0110 end
0111
0112
0113 if isfield(Field,'patch2')&& isequal(Field.patch2,1)
0114 Field.CivStage=6;
0115 elseif isfield(Field,'fix2')&& isequal(Field.fix2,1)
0116 Field.CivStage=5;
0117 elseif isfield(Field,'civ2')&& isequal(Field.civ2,1)
0118 Field.CivStage=4;
0119 elseif isfield(Field,'patch')&& isequal(Field.patch,1)
0120 Field.CivStage=3;
0121 elseif isfield(Field,'fix')&& isequal(Field.fix,1)
0122 Field.CivStage=2;
0123 else
0124 Field.CivStage=1;
0125 end
0126
0127
0128 List=Field.ListGlobalAttribute;
0129 ind_remove=[];
0130 for ilist=1:length(List)
0131 switch(List{ilist})
0132 case {'patch2','fix2','civ2','patch','fix','dt2','absolut_time_T0','absolut_time_T0_2'}
0133 ind_remove=[ind_remove ilist];
0134 Field=rmfield(Field,List{ilist});
0135 end
0136 end
0137 List(ind_remove)=[];
0138 Field.ListGlobalAttribute=[List {'Time','CivStage','CoordUnit'}];
0139
0140
0141 Field.U=Field.U*Field.pixcmx;
0142 Field.V=Field.V*Field.pixcmy;
0143 Field.X=Field.X*Field.pixcmx;
0144 Field.Y=Field.Y*Field.pixcmy;
0145 if ~isequal(Field.dt,0)
0146 Field.U=Field.U*Field.dt;
0147 Field.V=Field.V*Field.dt;
0148 if isfield(Field,'DjUi')
0149 Field.DjUi(:,1,1)=Field.dt*Field.DjUi(:,1,1);
0150 Field.DjUi(:,2,2)=Field.dt*Field.DjUi(:,2,2);
0151 Field.DjUi(:,1,2)=(Field.pixcmy/Field.pixcmx)*Field.dt*Field.DjUi(:,1,2);
0152 Field.DjUi(:,2,1)=(Field.pixcmx/Field.pixcmy)*Field.dt*Field.DjUi(:,2,1);
0153 end
0154 end
0155 Field.CoordType='px';
0156 Field.CoordUnit='pixel';
0157
0158
0159
0160
0161
0162
0163
0164
0165
0166
0167
0168
0169
0170
0171 function [var,role,units,vel_type_out]=varcivx_generator(FieldNames,vel_type)
0172
0173
0174 if ~exist('vel_type','var'),vel_type=[];end;
0175 if iscell(vel_type),vel_type=vel_type{1}; end;
0176
0177 if ~exist('FieldNames','var'),FieldNames={'ima_cor'};end;
0178 if ischar(FieldNames), FieldNames={FieldNames}; end;
0179
0180
0181 testder=0;
0182 for ilist=1:length(FieldNames)
0183 if ~isempty(FieldNames{ilist})
0184 switch FieldNames{ilist}
0185 case {'vort','div','strain'}
0186 testder=1;
0187 end
0188 end
0189 end
0190 if isempty(vel_type) || isequal(vel_type,'*')
0191 if testder
0192 vel_type_out{1}='filter2';
0193 vel_type_out{2}='filter1';
0194 else
0195 vel_type_out{1}='civ2';
0196 vel_type_out{2}='civ1';
0197 end
0198 elseif isequal(vel_type,'filter')
0199 vel_type_out{1}='filter2';
0200 vel_type_out{2}='filter1';
0201 if ~testder
0202 vel_type_out{3}='civ1';
0203 end
0204 elseif testder
0205 test_civ1=isequal(vel_type,'civ1')||isequal(vel_type,'interp1')||isequal(vel_type,'filter1');
0206 if test_civ1
0207 vel_type_out{1}='filter1';
0208 else
0209 vel_type_out{1}='filter2';
0210 end
0211 else
0212 vel_type_out{1}=vel_type;
0213 end
0214 vel_type_out=vel_type_out';
0215
0216
0217 var={'X','Y','Z','U','V','W','C','F','FF'};
0218 role={'coord_x','coord_y','coord_z','vector_x','vector_y','vector_z','ancillary','warnflag','errorflag'};
0219 units={'pixel','pixel','pixel','pixel','pixel','pixel',[],[],[]};
0220 if testder
0221 var=[var {'DjUi(:,1,1)','DjUi(:,1,2)','DjUi(:,2,1)','DjUi(:,2,2)'}];
0222 role=[role {'tensor','tensor','tensor','tensor'}];
0223 units=[units {'pixel','pixel','pixel','pixel'}];
0224 end
0225 for ilist=1:length(vel_type_out)
0226 var=[var;varname1(vel_type_out{ilist},FieldNames)];
0227 end
0228
0229
0230
0231
0232
0233 function varin=varname1(vel_type,FieldNames)
0234
0235 testder=0;
0236 C1='';
0237 C2='';
0238 for ilist=1:length(FieldNames)
0239 if ~isempty(FieldNames{ilist})
0240 switch FieldNames{ilist}
0241 case 'ima_cor'
0242 C1='vec_C';
0243 C2='vec2_C';
0244 case 'error'
0245 C1='vec_E';
0246 C2='vec2_E';
0247 case {'vort','div','strain'}
0248 testder=1;
0249 end
0250 end
0251 end
0252 switch vel_type
0253 case 'civ1'
0254 varin={'vec_X','vec_Y','vec_Z','vec_U','vec_V','vec_W',C1,'vec_F','vec_FixFlag'};
0255 case 'interp1'
0256 varin={'vec_patch_X','vec_patch_Y','','vec_patch0_U','vec_patch0_V','','','',''};
0257 case 'filter1'
0258 varin={'vec_patch_X','vec_patch_Y','','vec_patch_U','vec_patch_V','','','',''};
0259 case 'civ2'
0260 varin={'vec2_X','vec2_Y','vec2_Z','vec2_U','vec2_V','vec2_W',C2,'vec2_F','vec2_FixFlag'};
0261 case 'interp2'
0262 varin={'vec2_patch_X','vec2_patch_Y','vec2_patch_Z','vec2_patch0_U','vec2_patch0_V','vec2_patch0_W','','',''};
0263 case 'filter2'
0264 varin={'vec2_patch_X','vec2_patch_Y','vec2_patch_Z','vec2_patch_U','vec2_patch_V','vec2_patch0_W','','',''};
0265 end
0266 if testder
0267 switch vel_type
0268 case 'filter1'
0269 varin=[varin {'vec_patch_DUDX','vec_patch_DVDX','vec_patch_DUDY','vec_patch_DVDY'}];
0270 case 'filter2'
0271 varin=[varin {'vec2_patch_DUDX','vec2_patch_DVDX','vec2_patch_DUDY','vec2_patch_DVDY'}];
0272 end
0273 end