- Timestamp:
- May 9, 2024, 6:51:30 PM (8 months ago)
- Location:
- trunk/src
- Files:
-
- 12 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/filter_tps.m
r1142 r1143 64 64 NbVecSub=NbVec/NbSubDomain;% refined estimation of the nbre of vectors per subdomain 65 65 smoothing=sqrt(Siz(1)*Siz(2)/NbVecSub)*FieldSmooth;%optimum smoothing increase as the typical mesh size =sqrt(SizX*SizY/NbVecSub)^1/2 66 66 67 %% default output 67 68 SubRange=zeros(NbCoord,2,NbSubDomain);%initialise the boundaries of subdomains … … 78 79 check_empty=zeros(1,NbSubDomain); 79 80 80 81 81 %% calculate tps coeff in each subdomain 82 82 for isub=1:NbSubDomain … … 87 87 %increase iteratively the subdomain if it contains less than SubDomainNbVec/4 source vectors 88 88 while numel(ind_sel)>numel(ind_sel_previous) 89 ind_sel_previous=ind_sel;% record the set of selected vector indices for next iteration 90 ind_sel=find(Coord(:,1)>=SubRange(1,1,isub) & Coord(:,1)<=SubRange(1,2,isub) & Coord(:,2)>=SubRange(2,1,isub) & Coord(:,2)<=SubRange(2,2,isub)); 91 %disp([numel(ind_sel) ' vectors in subdomain #' num2str(isub)]) 89 ind_sel_previous=ind_sel;% record the set of selected vector indices for next iteration 90 ind_sel= find(FF==0 & Coord(:,1)>=SubRange(1,1,isub) & Coord(:,1)<=SubRange(1,2,isub) & Coord(:,2)>=SubRange(2,1,isub) & Coord(:,2)<=SubRange(2,2,isub));% indices of vectors in the subdomain #isub 92 91 % if no vector in the subdomain #isub, skip the subdomain 93 92 if isempty(ind_sel) 94 93 check_empty(isub)=1; 95 break % go to next subdomain94 break 96 95 % if too few selected vectors, increase the subrange for next iteration 97 96 elseif numel(ind_sel)<SubDomainSize/4 && ~isequal( ind_sel,ind_sel_previous) … … 107 106 ind_ind_sel=1:numel(ind_sel);%default 108 107 if exist('Threshold','var')&&~isempty(Threshold) 109 FF(ind_sel)=2 0*(NormDiff>Threshold);%put FF value to 20to identify the criterium of elimmination110 ind_ind_sel=find(FF(ind_sel)==0); % select the indices of ind_sel corresponding to the remaining vectors108 FF(ind_sel)=2*(NormDiff>Threshold);%put FF value to 2 to identify the criterium of elimmination 109 ind_ind_sel=find(FF(ind_sel)==0); % select the indices of remaining vectors in the subset of ind_sel vectors 111 110 end 112 111 % if no value exceeds threshold, the result is recorded … … 146 145 V_tps(1:NbCentre(isub)+3,isub)=V_tps_sub; 147 146 nb_select(ind_sel(ind_ind_sel))=nb_select(ind_sel(ind_ind_sel))+weight; 148 display(['tps redone with ' num2str(numel(ind_sel)) ' vectors after elimination of ' num2str(numel(ind_ ind_sel)) ' erratic vectors in subdomain # ' num2str(isub) ' among ' num2str(NbSubDomain)])147 display(['tps redone with ' num2str(numel(ind_sel)) ' vectors after elimination of ' num2str(numel(ind_sel)-numel(ind_ind_sel)) ' erratic vectors in subdomain # ' num2str(isub) ' among ' num2str(NbSubDomain)]) 149 148 break 150 149 end … … 167 166 U_smooth=U_smooth./nb_select;% take the average at the intersection of several subdomains 168 167 V_smooth=V_smooth./nb_select; 169 U_smooth(FF==2 0)=U(FF==20);% set to the initial values the eliminated vectors (flagged as false)170 V_smooth(FF==2 0)=V(FF==20);168 U_smooth(FF==2)=U(FF==2);% set to the initial values the eliminated vectors (flagged as false) 169 V_smooth(FF==2)=V(FF==2); 171 170 fill=zeros(NbCoord+1,NbCoord,size(SubRange,3)); %matrix of zeros to complement the matrix Data.Civ1_Coord_tps (conveninent for file storage) 172 171 Coord_tps=cat(1,Coord_tps,fill); -
trunk/src/geometry_calib.m
r1127 r1143 325 325 end 326 326 end 327 NbErrors=0; 327 328 for iexp=1:NbExp 328 329 XmlName=fullfile(ListPath{iexp},[ListSubdir{iexp} '.xml']); … … 340 341 if ~strcmp(errormsg,'') 341 342 msgbox_uvmat('ERROR',errormsg); 343 NbErrors=NbErrors+1; 342 344 else 343 345 if check_update … … 349 351 end 350 352 end 351 msgbox_uvmat('CONFIMATION',['calibration replicated for ' num2str(NbExp) ' experiments']); 353 msgout=['calibration replicated for ' num2str(NbExp-NbErrors) ' experiments']; 354 if NbErrors~=0 355 msgout={msgout;['error for ' num2str(NbErrors) ' experiments']}; 356 end 357 msgbox_uvmat('CONFIMATION',msgout); 352 358 else 353 359 %% update the calibration parameters in the currently opened uvmat GUI -
trunk/src/mouse_motion.m
r1127 r1143 469 469 %set(hh,'UserData',index_point) 470 470 index_point=get(hh,'UserData'); 471 if isnumeric(index_point) 471 472 XCoord(index_point)=xy(1,1); 472 473 YCoord(index_point)=xy(1,2); 473 474 set(hh,'XData',XCoord) 474 475 set(hh,'YData',YCoord) 475 end 476 if ~isempty(index_point) 476 end 477 end 478 if ~isempty(index_point)&& isnumeric(index_point) 477 479 set(hh_geometry_calib.CoordLine,'String',num2str(index_point)) 478 480 % Data=get(h_ListCoord,'Data'); -
trunk/src/plot_field.m
r1133 r1143 730 730 end 731 731 end 732 if ~isempty(ivar_F)%~(isfield(PlotParam.Vectors,'HideWarning')&& isequal(PlotParam.Vectors.HideWarning,1)) 733 vec_F=Data.(Data.ListVarName{ivar_F}); % warning flags for dubious vectors 734 if ~(isfield(PlotParam.Vectors,'CheckHideWarning') && isequal(PlotParam.Vectors.CheckHideWarning,1)) 735 test_black=1; 736 end 737 end 732 733 % if ~(isfield(PlotParam.Vectors,'CheckHideWarning') && isequal(PlotParam.Vectors.CheckHideWarning,1)) 734 % test_black=1; 735 % end 736 738 737 if ~isempty(ivar_FF_vec) %&& ~test_false 739 738 vec_FF=Data.(Data.ListVarName{ivar_FF_vec}); % flags for false vectors 739 if ~isempty(ivar_F)%~(isfield(PlotParam.Vectors,'HideWarning')&& isequal(PlotParam.Vectors.HideWarning,1)) 740 vec_F=Data.(Data.ListVarName{ivar_F}); % warning flags for dubious vectors 741 vec_FF(find(vec_F==-2))=-2;%set alseFlag to -2 (edge of the search box) 742 end 740 743 end 741 744 end … … 1195 1198 vec_V=vec_V(ind_sel); 1196 1199 vec_C=vec_C(ind_sel); 1197 if ~isempty(ivar_F)1198 vec_F=vec_F(ind_sel);1199 end1200 % if ~isempty(ivar_F) 1201 % vec_F=vec_F(ind_sel); 1202 % end 1200 1203 if ~isempty(ivar_FF_vec) 1201 1204 vec_FF=vec_FF(ind_sel); … … 1208 1211 % take flags into account: add flag colors to the list of colors 1209 1212 nbcolor=size(colorlist,1); 1210 if test_black1211 nbcolor=nbcolor+1;1212 colorlist(nbcolor,:)=[0 0 0]; %add black to the list of colors1213 if ~isempty(ivar_FF_vec)1214 col_vec(vec_F~=1 & vec_F~=0 & vec_FF==0)=nbcolor;1215 else1216 col_vec(vec_F~=1 & vec_F~=0)=nbcolor;1217 end1218 end1213 % % % if test_black 1214 % % % nbcolor=nbcolor+1; 1215 % % % colorlist(nbcolor,:)=[0 0 0]; %add black to the list of colors 1216 % % % if ~isempty(ivar_FF_vec) 1217 % % % col_vec(vec_F~=1 & vec_F~=0 & vec_FF==0)=nbcolor; 1218 % % % else 1219 % % % col_vec(vec_F~=1 & vec_F~=0)=nbcolor; 1220 % % % end 1221 % % % end 1219 1222 nbcolor=nbcolor+1; 1220 1223 if ~isempty(ivar_FF_vec) 1221 if isfield(PlotParam.Vectors,'CheckHideFalse') && PlotParam.Vectors.CheckHideFalse==1 1224 if isfield(PlotParam.Vectors,'CheckShowFalse') && PlotParam.Vectors.CheckShowFalse==1 1225 % colorlist(nbcolor,:)=[1 0 1];% magenta color 1226 colorlist(nbcolor,:)=[0 0 0];% blackcolor 1227 if strcmp(PlotParam.Vectors.FalseCriteria,'ALL') 1228 col_vec(vec_FF~=0)=nbcolor; 1229 else 1230 ind_dot=regexp(PlotParam.Vectors.FalseCriteria,':'); 1231 FalseValue=str2num(PlotParam.Vectors.FalseCriteria(1:ind_dot-1));%get the selected flg number 1232 col_vec(vec_FF==FalseValue)=nbcolor; 1233 nbcolor=nbcolor+1; 1234 colorlist(nbcolor,:)=[NaN NaN NaN];% 1235 col_vec(vec_FF~=0 & vec_FF~=FalseValue)=nbcolor; 1236 end 1237 else 1222 1238 colorlist(nbcolor,:)=[NaN NaN NaN];% no plot of false vectors 1223 else 1224 colorlist(nbcolor,:)=[1 0 1];% magenta color 1225 end 1226 col_vec(vec_FF~=0)=nbcolor; 1239 col_vec(vec_FF~=0)=nbcolor; 1240 end 1227 1241 end 1228 1242 %plot vectors: -
trunk/src/series/civ_input.m
r1141 r1143 81 81 set(handles.CheckThreshold,'Visible','on') 82 82 set(handles.CheckDeformation,'Value',0)% desactivate 83 set(handles.num_SubDomainSize(1),'String','250')84 set(handles.num_SubDomainSize(2),'String','500')83 % set(handles.num_SubDomainSize(1),'String','250') 84 % set(handles.num_SubDomainSize(2),'String','500') 85 85 end 86 86 switch Param.Action.ActionName … … 97 97 FileType='image';%fdefault 98 98 FileInfo=[]; 99 if isfield(SeriesData,'FileInfo') ...99 if isfield(SeriesData,'FileInfo') 100 100 FileType=SeriesData.FileInfo{1}.FileType;% info on the first input file series 101 101 FieldType=SeriesData.FileInfo{1}.FieldType;% info on the first input file series -
trunk/src/series/civ_series.m
r1137 r1143 2 2 % --- call the sub-functions: 3 3 % civ: PIV function itself 4 % fix: removesfalse vectors after detection by various criteria4 % detect_false: put a flag to false vectors after detection by various criteria 5 5 % filter_tps: make interpolation-smoothing 6 6 %------------------------------------------------------------------------ … … 22 22 % Param.ActionInput: substructure with the parameters provided by the GUI civ_input 23 23 % .Civ1: parameters for civ1cc 24 % .Fix1: parameters for fix124 % .Fix1: parameters for detect_false1 25 25 % .Patch1: 26 26 % .Civ2: for civ2 … … 131 131 iview_A=2;% the second line is used for the input images of Civ2 132 132 end 133 % if strcmp(Param.ActionInput.ListCompareMode,'shift')134 % iview_B=iview_A+1; % the second image series is on the next line of the input table135 % end136 133 if iview_A~=0 137 134 RootPath_A=Param.InputTable{iview_A,1}; … … 237 234 NbField=numel(i1_series_Civ2); 238 235 else 239 NbField=numel(i1_series_Civ1);% no image used (only fixor patch) TO CHECK236 NbField=numel(i1_series_Civ1);% no image used (only detect_false or patch) TO CHECK 240 237 end 241 238 … … 347 344 ImageName_A='';ImageName_B='';%default 348 345 VideoObject_A=[];VideoObject_B=[]; 346 349 347 %% Civ1 350 348 % if Civ1 computation is requested … … 544 542 %% Fix1 545 543 if isfield (Param.ActionInput,'Fix1') 546 disp(' fix1 started')544 disp('detect_false1 started') 547 545 if ~isfield (Param.ActionInput,'Civ1')% if we use existing Civ1, remove previous data beyond Civ1 548 546 Fix1_attr=find(strcmp('Fix1',Data.ListGlobalAttribute)); … … 563 561 nbvar=length(Data.ListVarName); 564 562 Data.VarAttribute{nbvar}.Role='errorflag'; 565 Data.Civ1_FF=int8( fix(Param.ActionInput.Fix1,Data.Civ1_F,Data.Civ1_C,Data.Civ1_U,Data.Civ1_V));563 Data.Civ1_FF=int8(detect_false(Param.ActionInput.Fix1,Data.Civ1_F,Data.Civ1_C,Data.Civ1_U,Data.Civ1_V)); 566 564 Data.CivStage=2; 567 565 end … … 823 821 if exist('ncfile','var') 824 822 CivFile=ncfile; 825 [Data,tild,tild,errormsg]=nc2struct(CivFile);%read civ1 and fix1 data in the existing netcdf file823 [Data,tild,tild,errormsg]=nc2struct(CivFile);%read civ1 and detect_false1 data in the existing netcdf file 826 824 if ~isempty(errormsg) 827 825 disp_uvmat('ERROR',errormsg,checkrun) … … 842 840 %% Fix2 843 841 if isfield (Param.ActionInput,'Fix2') 844 disp(' fix2 started')842 disp('detect_false2 started') 845 843 list_param=fieldnames(Param.ActionInput.Fix2)'; 846 844 Fix2_param=regexprep(list_param,'^.+','Fix2_$0');% insert 'Fix1_' before each string in ListFixParam … … 857 855 Data.VarDimName=[Data.VarDimName {'nb_vectors2'}]; 858 856 end 859 Data.vec_FixFlag= fix(Param.Fix2,Data.vec2_F,Data.vec2_C,Data.vec2_U,Data.vec2_V,Data.vec2_X,Data.vec2_Y);857 Data.vec_FixFlag=detect_false(Param.Fix2,Data.vec2_F,Data.vec2_C,Data.vec2_U,Data.vec2_V); 860 858 else 861 859 Data.ListVarName=[Data.ListVarName {'Civ2_FF'}]; … … 863 861 nbvar=length(Data.ListVarName); 864 862 Data.VarAttribute{nbvar}.Role='errorflag'; 865 Data.Civ2_FF=double( fix(Param.ActionInput.Fix2,Data.Civ2_F,Data.Civ2_C,Data.Civ2_U,Data.Civ2_V));863 Data.Civ2_FF=double(detect_false(Param.ActionInput.Fix2,Data.Civ2_F,Data.Civ2_C,Data.Civ2_U,Data.Civ2_V)); 866 864 Data.CivStage=Data.CivStage+1; 867 865 end … … 1293 1291 end 1294 1292 1295 %'RUN_FIX': function for fixing velocity fields: 1296 %----------------------------------------------- 1297 % RUN_FIX(filename,field,flagindex,thresh_vecC,thresh_vel,iter,flag_mask,maskname,fileref,fieldref) 1298 % 1299 %filename: name of the netcdf file (used as input and output) 1300 %field: structure specifying the names of the fields to fix (depending on civ1 or civ2) 1301 %.vel_type='civ1' or 'civ2'; 1302 %.nb=name of the dimension common to the field to fix ('nb_vectors' for civ1); 1303 %.fixflag=name of fix flag variable ('vec_FixFlag' for civ1) 1304 %flagindex: flag specifying which values of vec_f are removed: 1305 % if flagindex(1)=1: vec_f=-2 vectors are removed 1306 % if flagindex(2)=1: vec_f=3 vectors are removed 1307 % if flagindex(3)=1: vec_f=2 vectors are removed (if iter=1) or vec_f=4 vectors are removed (if iter=2) 1308 %iter=1 for civ1 fields and iter=2 for civ2 fields 1309 %thresh_vecC: threshold in the image correlation vec_C 1310 %flag_mask: =1 mask used to remove vectors (0 else) 1311 %maskname: name of the mask image file for fix 1312 %thresh_vel: threshold on velocity, or on the difference with the reference file fileref if exists 1313 %inf_sup=1: remove values smaller than threshold thresh_vel, =2, larger than threshold 1314 %fileref: .nc file name for a reference velocity (='': refrence 0 used) 1315 %fieldref: 'civ1','filter1'...feld used in fileref 1316 1317 function FF=fix(Param,F,C,U,V,X,Y) 1293 1294 function FF=detect_false(Param,F,C,U,V) 1318 1295 FF=zeros(size(F));%default 1319 1320 %criterium on warn flags 1321 FlagName={'CheckFmin2','CheckF2','CheckF3','CheckF4'}; 1322 FlagVal=[-2 2 3 4]; 1323 for iflag=1:numel(FlagName) 1324 if isfield(Param,FlagName{iflag}) && Param.(FlagName{iflag}) 1325 FF=(FF==1| F==FlagVal(iflag)); 1326 end 1327 end 1328 %criterium on correlation values 1296 % FF=-2, for correlation max at edge 1297 % FF=-1, for too small correlation 1298 % FF=1, for velocity outside bounds 1299 % FF=2 for exclusion by difference with the smoothed field 1300 FF(F==-2)=-2; 1329 1301 if isfield (Param,'MinCorr') 1330 FF=FF==1 | C<Param.MinCorr;1302 FF(C<Param.MinCorr)=-1; 1331 1303 end 1332 1304 if (isfield(Param,'MinVel')&&~isempty(Param.MinVel))||(isfield (Param,'MaxVel')&&~isempty(Param.MaxVel)) 1333 1305 Umod= U.*U+V.*V; 1334 1306 if isfield (Param,'MinVel')&&~isempty(Param.MinVel) 1335 FF=FF==1 | Umod<(Param.MinVel*Param.MinVel); 1307 U2Min=Param.MinVel*Param.MinVel; 1308 FF(Umod<U2Min)=1; 1336 1309 end 1337 1310 if isfield (Param,'MaxVel')&&~isempty(Param.MaxVel) 1338 FF=FF==1 | Umod>(Param.MaxVel*Param.MaxVel); 1339 end 1340 end 1311 U2Max=Param.MaxVel*Param.MaxVel; 1312 FF(Umod>U2Max)=1; 1313 end 1314 end 1315 1316 1317 %criterium on warn flags 1318 % FlagName={'CheckFmin2','CheckF2','CheckF3','CheckF4'}; 1319 % FlagVal=[-2 2 3 4]; 1320 % for iflag=1:numel(FlagName) 1321 % if isfield(Param,FlagName{iflag}) && Param.(FlagName{iflag}) 1322 % FF=(FF==1| F==FlagVal(iflag)); 1323 % end 1324 % end 1325 % %criterium on correlation values 1326 % if isfield (Param,'MinCorr') 1327 % FF=FF==1 | C<Param.MinCorr; 1328 % end 1329 % if (isfield(Param,'MinVel')&&~isempty(Param.MinVel))||(isfield (Param,'MaxVel')&&~isempty(Param.MaxVel)) 1330 % Umod= U.*U+V.*V; 1331 % if isfield (Param,'MinVel')&&~isempty(Param.MinVel) 1332 % FF=FF==1 | Umod<(Param.MinVel*Param.MinVel); 1333 % end 1334 % if isfield (Param,'MaxVel')&&~isempty(Param.MaxVel) 1335 % FF=FF==1 | Umod>(Param.MaxVel*Param.MaxVel); 1336 % end 1337 % end 1341 1338 1342 1339 -
trunk/src/series/extract_rdvision.m
r1134 r1143 308 308 % m.Data=data; 309 309 %%%%%%% 310 311 312 313 314 310 timestamp=zeros(1,numel(m.Data)); 311 for ii=1: numel(m.Data) 312 timestamp(ii)=m.Data(ii).timestamp; 313 end 314 if isequal(Param.IndexRange.first_i,1) 315 315 [nbfield1,nbfield2,msg]=copyfile_modif(filexml,timestamp,newxml); %copy the xml file in the upper folder 316 316 [XmlData,errormsg]=imadoc2struct(newxml);% check reading of the new xml file … … 319 319 return 320 320 end 321 timestamp=timestamp(1:nbfield1*nbfield2); 322 timestamp=reshape(timestamp,nbfield2,nbfield1); 323 difftime=XmlData.Time(2:end,2:end)'-timestamp; 324 disp(['time from xml and timestamp differ by ' num2str(max(max(abs(difftime))))]) 325 if max(abs(difftime))>0.01 326 checkpreserve=1;% will not erase the initial files, possibility of error 327 end 328 % checking consistency with the xml file 329 % if ~isequal(SeqData.nb_frames,numel(timestamp)) 330 % disp_uvmat('ERRROR',['inconsistent number of images ' num2str(SeqData.nb_frames) ' with respect to the xml file: ' num2str(numel(timestamp))] ,checkrun); 331 % return 332 % end 321 if numel(timestamp)~=nbfield1*nbfield2 322 disp('WARNING: total image number defined by the xml file differs from the number of frames ') 323 else 324 timestamp=reshape(timestamp,nbfield2,nbfield1); 325 difftime=XmlData.Time(2:end,2:end)'-timestamp; 326 disp(['time from xml and timestamp differ by ' num2str(max(max(abs(difftime))))]) 327 if max(abs(difftime))>0.01 328 checkpreserve=1;% will not erase the initial files, possibility of error 329 end 330 end 333 331 else 334 332 [nbfield1,nbfield2,msg]=copyfile_modif(filexml,timestamp,''); -
trunk/src/series/test_patch_tps.m
r1142 r1143 220 220 for index=1:1%numel(filecell) 221 221 Data=read_field(filecell{1,index},'civdata',Param.InputFields); 222 ind_good=find(Data.FF==0|Data.FF==20 );%keep good civ data, and also the ones excluded by the criterium of discrepancy betwween smoothed and raw fields (FF=20)222 ind_good=find(Data.FF==0|Data.FF==20|Data.FF==2);%keep good civ data, and also the ones excluded by the criterium of discrepancy betwween smoothed and raw fields (FF=2 or 20 (old convention)) 223 223 NbGood=numel(ind_good); 224 224 Xin=Data.X(ind_good); … … 252 252 DataOut.(['U_' str_i{irho}])=U_smooth; 253 253 DataOut.(['V_' str_i{irho}])=V_smooth; 254 % DataOut.FF(ind_false)=FieldSmooth(irho);255 254 end 256 255 time=toc -
trunk/src/tps_coeff_field.m
r1137 r1143 43 43 Smoothing=0; 44 44 end 45 SubDomainNbPoint= 300; %default, estimated nbre of data source points in a subdomain used for tps45 SubDomainNbPoint=250; %default, estimated nbre of data source points in a subdomain used for tps 46 46 if isfield(DataIn,'SubDomain') 47 47 SubDomainNbPoint=DataIn.SubDomain;%old convention -
trunk/src/uvmat.m
r1137 r1143 5569 5569 % Vector representation 5570 5570 %%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5571 % % %------------------------------------------------------------------- 5572 % % function CheckHideWarning_Callback(hObject, eventdata, handles) 5573 % % %------------------------------------------------------------------- 5574 % % update_plot(handles); 5575 5571 5576 %------------------------------------------------------------------- 5572 function Check HideWarning_Callback(hObject, eventdata, handles)5577 function CheckShowFalse_Callback(hObject, eventdata, handles) 5573 5578 %------------------------------------------------------------------- 5574 update_plot(handles); 5575 5576 %------------------------------------------------------------------- 5577 function CheckHideFalse_Callback(hObject, eventdata, handles) 5578 %------------------------------------------------------------------- 5579 if get(handles.CheckShowFalse,'Value') 5580 set(handles.FalseCriteria,'Visible','on') 5581 set(handles.FalseCriteria,'Value',1) 5582 else 5583 set(handles.FalseCriteria,'Visible','off') 5584 end 5585 5579 5586 update_plot(handles); 5580 5587 … … 5611 5618 set(handles.CheckDecimate4,'Value',0) 5612 5619 end 5620 update_plot(handles); 5621 5622 %------------------------------------------------------------------------ 5623 % --- Executes on selection change in FalseCriteria. 5624 %------------------------------------------------------------------------ 5625 function FalseCriteria_Callback(hObject, eventdata, handles) 5613 5626 update_plot(handles); 5614 5627 … … 6195 6208 6196 6209 6210 6211 6212
Note: See TracChangeset
for help on using the changeset viewer.