- Timestamp:
- Aug 27, 2013, 11:25:59 PM (11 years ago)
- Location:
- trunk/src/series
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/series/civ_series.m
r668 r676 546 546 Data.Civ2_ImageA=ImageName_A; 547 547 Data.Civ2_ImageB=ImageName_B; 548 Data.Civ2_Time=1; 549 Data.Civ2_Dt=1; 548 i1=i1_series_Civ2(ifield); 549 i2=i1; 550 if ~isempty(i2_series_Civ2) 551 i2=i2_series_Civ2(ifield); 552 end 553 j1=1; 554 if ~isempty(j1_series_Civ2) 555 j1=j1_series_Civ2(ifield); 556 end 557 j2=j1; 558 if ~isempty(j2_series_Civ1) 559 j2=j2_series_Civ2(ifield); 560 end 561 Data.Civ2_Time=(time(i2+1,j2+1)+time(i1+1,j1+1))/2; 562 Data.Civ2_Dt=time(i2+1,j2+1)-time(i1+1,j1+1); 563 % Data.Civ2_Time=1; 564 % Data.Civ2_Dt=1; 550 565 for ilist=1:length(list_param) 551 566 Data.(Civ2_param{4+ilist})=Param.ActionInput.Civ2.(list_param{ilist}); -
trunk/src/series/merge_proj.m
r673 r676 129 129 diff_time=max(max(diff(time))); 130 130 if diff_time>0 131 disp_uvmat('WARNING',['times of series differ by (max) ' num2str(diff_time) ': t ime of first series chosen in result'],checkrun)131 disp_uvmat('WARNING',['times of series differ by (max) ' num2str(diff_time) ': the mean time is chosen in result'],checkrun) 132 132 end 133 133 end 134 if ~isempty(errormsg) 135 disp_uvmat('WARNING',erromsg,checkrun) 136 end 137 time=mean(time,1); %averaged time taken for the merged field 134 138 135 139 %% coordinate transform or other user defined transform … … 174 178 MaskData=cell(NbView,1); 175 179 if Param.CheckMask 180 if ischar(Param.MaskTable)% case of a single mask (char chain) 181 Param.MaskTable={Param.MaskTable}; 182 end 176 183 for iview=1:numel(Param.MaskTable) 177 184 if exist(Param.MaskTable{iview},'file') … … 204 211 %%%%%%%%%%%%%%%% loop on views (input lines) %%%%%%%%%%%%%%%% 205 212 Data=cell(1,NbView);%initiate the set Data 206 nbtime=0;213 timeread=zeros(1,NbView); 207 214 for iview=1:NbView 208 215 %% reading input file(s) … … 212 219 return 213 220 end 214 timeread(iview)=0;215 if isfield(Data{iview},'Time')221 % get the time defined in the current file if not already defined from the xml file 222 if ~isempty(time) && isfield(Data{iview},'Time') 216 223 timeread(iview)=Data{iview}.Time; 217 nbtime=nbtime+1;218 224 end 219 225 if ~isempty(NbSlice_calib) … … 258 264 259 265 %% time of the merged field: take the average of the different views 260 if ~isempty(time)% time defined from ImaDoc 261 timeread=time(:,index); 262 end 263 timeread=mean(timeread); 266 if ~isempty(time) 267 timeread=time(index); 268 elseif ~isempty(find(timeread))% time defined from ImaDoc 269 timeread=mean(timeread(timeread~=0));% take average over times form the files (when defined) 270 else 271 timeread=index;% take time=file index 272 end 264 273 265 274 %% generating the name of the merged field … … 320 329 321 330 else 322 MergeData.ListGlobalAttribute={'Conventions','Project','InputFile_1','InputFile_end','nb_coord','nb_dim' ,'dt','Time','civ'};331 MergeData.ListGlobalAttribute={'Conventions','Project','InputFile_1','InputFile_end','nb_coord','nb_dim'}; 323 332 MergeData.Conventions='uvmat'; 324 333 MergeData.nb_coord=2; … … 333 342 end 334 343 end 335 if isempty(dt) 336 MergeData.ListGlobalAttribute(6)=[]; 337 else 344 if ~isempty(timeread) 345 MergeData.ListGlobalAttribute=[MergeData.ListGlobalAttribute {'Time'}]; 346 MergeData.Time=timeread; 347 end 348 if ~isempty(dt) 349 MergeData.ListGlobalAttribute=[MergeData.ListGlobalAttribute {'dt'}]; 338 350 MergeData.dt=dt; 339 351 end 340 MergeData.Time=timeread;341 352 error=struct2nc(OutputFile,MergeData);%save result file 342 353 if isempty(error) … … 381 392 case 'grid' %case of fields defined on a structured grid 382 393 FFName=''; 383 if ~isempty(CellInfo{icell}.VarIndex_errorflag)394 if isfield(CellInfo{icell},'VarIndex_errorflag') && ~isempty(CellInfo{icell}.VarIndex_errorflag) 384 395 FFName=Data{1}.ListVarName{CellInfo{icell}.VarIndex_errorflag};% name of errorflag variable 385 396 end -
trunk/src/series/sub_background.m
r642 r676 53 53 function ParamOut=sub_background (Param) 54 54 55 %% input preparation mode (no RUN)55 %%%%%%%%%%%%%%%%% INPUT PREPARATION MODE (no RUN) %%%%%%%%%%%%%%%%% 56 56 if isstruct(Param) && isequal(Param.Action.RUN,0) 57 57 ParamOut.AllowInputSort='off';% allow alphabetic sorting of the list of input file SubDir (options 'off'/'on', 'off' by default) … … 65 65 ParamOut.OutputDirExt='.sback';%set the output dir extension 66 66 ParamOut.OutputFileMode='NbInput';% '=NbInput': 1 output file per input file index, '=NbInput_i': 1 file per input file index i, '=NbSlice': 1 file per slice 67 filecell=get_file_series(Param);%check existence of the first input file68 %%%%%%%%%%%% STANDARD PART (DO NOT EDIT) %%%%%%%%%%%%69 67 70 68 %% root input file(s) and type … … 74 72 return 75 73 end 76 %%%%%%%%%%%%77 % The cell array filecell is the list of input file names, while78 % filecell{iview,fileindex}:79 % iview: line in the table corresponding to a given file series80 % fileindex: file index within the file series,81 % i1_series(iview,ref_j,ref_i)... are the corresponding arrays of indices i1,i2,j1,j2, depending on the input line iview and the two reference indices ref_i,ref_j82 % i1_series(iview,fileindex) expresses the same indices as a 1D array in file indices83 %%%%%%%%%%%%84 NbSlice=1;%default85 if isfield(Param.IndexRange,'NbSlice')&&~isempty(Param.IndexRange.NbSlice)86 NbSlice=Param.IndexRange.NbSlice;87 end88 nbview=numel(i1_series);%number of input file series (lines in InputTable)89 nbfield_j=size(i1_series{1},1); %nb of fields for the j index (bursts or volume slices)90 nbfield_i=size(i1_series{1},2); %nb of fields for the i index91 nbfield=nbfield_j*nbfield_i; %total number of fields92 nbfield_i=floor(nbfield/NbSlice);%total number of indexes in a slice (adjusted to an integer number of slices)93 nbfield=nbfield_i*NbSlice; %total number of fields after adjustement94 95 %determine the file type on each line from the first input file96 97 98 %% calibration data and timing: read the ImaDoc files99 %not relevant here100 101 %% check coincidence in time for several input file series102 %not relevant here103 104 %% coordinate transform or other user defined transform105 %not relevant here106 107 %%%%%%%%%%%% END STANDARD PART %%%%%%%%%%%%108 % EDIT FROM HERE109 74 110 75 %% check the validity of input file types … … 117 82 end 118 83 119 %% Set field names and velocity types 120 %not relevant here 121 122 %% Initiate output fields 123 %not relevant here 124 125 %%% SPECIFIC PART BEGINS HERE 126 NbSlice=1; 127 if isfield(Param.IndexRange,'NbSlice') 128 NbSlice=Param.IndexRange.NbSlice; %number of slices 129 end 130 %siz=size(i1_series); 131 nbaver_init=23;%approximate number of images used for the sliding background: to be adjusted later to include an integer number of bursts 132 j1=[];%default 133 134 %% adjust the proposed number of images in the sliding average to include an integer number of bursts 84 %% numbers of fields 85 NbSlice=1;%default 86 if isfield(Param.IndexRange,'NbSlice')&&~isempty(Param.IndexRange.NbSlice) 87 NbSlice=Param.IndexRange.NbSlice; 88 end 89 %nbview=numel(i1_series);%number of input file series (lines in InputTable) 90 nbfield_j=size(i1_series{1},1); %nb of fields for the j index (bursts or volume slices) 91 nbfield_i=size(i1_series{1},2); %nb of fields for the i index 92 nbfield=nbfield_j*nbfield_i; %total number of fields 93 nbfield_i=floor(nbfield/NbSlice);%total number of indexes in a slice (adjusted to an integer number of slices) 94 95 %% setting of parameters specific to sub_background 96 nbaver_init=23; %default number of images used for the sliding background: to be adjusted later to include an integer number of bursts 135 97 if nbfield_i~=1 136 98 nbaver=floor(nbaver_init/nbfield_j); % number of bursts used for the sliding background, … … 141 103 end 142 104 143 %% input of specific parameters 144 %if checkrun %get specific parameters interactively 145 if isequal(Param.Action.RUN,0) 146 prompt = {'volume scan mode (Yes/No)';'Number of images for the sliding background (MUST FIT IN COMPUTER MEMORY)';... 147 'the luminosity rank chosen to define the background (0.1=for dense particle seeding, 0.5 (median) for sparse particles'}; 148 dlg_title = 'get (slice by slice) a sliding background and substract to each image'; 149 num_lines= 3; 150 def = { 'No';num2str(nbaver_init);'0.1'}; 151 answer = inputdlg(prompt,dlg_title,num_lines,def); 152 153 %check input consistency 154 if strcmp(answer{1},'No') && ~isequal(NbSlice,1) 155 check=msgbox_uvmat('INPUT_Y-N',['confirm the multi-level splitting into ' num2str(NbSlice) ' slices']); 156 if ~strcmp(check,'Yes') 157 return 158 end 159 end 160 if strcmp(answer{1},'Yes') 161 step=1; 162 else 163 step=nbfield_j;%case of bursts: the sliding background is shifted by the length of one burst 164 end 165 nbaver_ima=str2num(answer{2});%number of images for the sliding background 166 nbaver=ceil(nbaver_ima/step);%number of bursts for the sliding background 167 if isequal(floor(nbaver/2),nbaver) 168 nbaver=nbaver+1;%set the number of bursts to an odd number (so the middle burst is defined) 169 end 170 nbaver_ima=nbaver*step; 171 end 105 prompt = {'volume scan mode (Yes/No)';'Number of images for the sliding background (MUST FIT IN COMPUTER MEMORY)';... 106 'the luminosity rank chosen to define the background (0.1=for dense particle seeding, 0.5 (median) for sparse particles'}; 107 dlg_title = 'get (slice by slice) a sliding background and substract to each image'; 108 num_lines= 3; 109 def = { 'No';num2str(nbaver_init);'0.1'}; 110 answer = inputdlg(prompt,dlg_title,num_lines,def); 111 112 %check input consistency 113 if strcmp(answer{1},'No') && ~isequal(NbSlice,1) 114 check=msgbox_uvmat('INPUT_Y-N',['confirm the multi-level splitting into ' num2str(NbSlice) ' slices']); 115 if ~strcmp(check,'Yes') 116 return 117 end 118 end 119 if strcmp(answer{1},'Yes') 120 step=1; 121 else 122 step=nbfield_j;%case of bursts: the sliding background is shifted by the length of one burst 123 end 124 nbaver_ima=str2num(answer{2});%number of images for the sliding background 125 nbaver=ceil(nbaver_ima/step);%number of bursts for the sliding background 126 if isequal(floor(nbaver/2),nbaver) 127 nbaver=nbaver+1;%set the number of bursts to an odd number (so the middle burst is defined) 128 end 129 nbaver_ima=nbaver*step;% correct the nbre of images corresponding to nbaver 172 130 ParamOut.ActionInput.CheckVolume=strcmp(answer{1},'Yes'); 173 131 ParamOut.ActionInput.SlidingSequenceLength=nbaver_ima; … … 179 137 return 180 138 end 181 %%%%%%%%%%%%%%%%% %%%%% STOP HERE FOR PAMETER INPUT MODE %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%139 %%%%%%%%%%%%%%%%% STOP HERE FOR PAMETER INPUT MODE %%%%%%%%%%%%%%%%% 182 140 183 141 %% read input parameters from an xml file if input is a file name (batch mode) … … 190 148 RUNHandle=findobj(hseries,'Tag','RUN');%handle of RUN button in GUI series 191 149 WaitbarHandle=findobj(hseries,'Tag','Waitbar');%handle of waitbar in GUI series 192 %% Input preparation 150 151 %% input preparation 193 152 nbaver_ima=Param.ActionInput.SlidingSequenceLength; 194 153 NbSlice=Param.IndexRange.NbSlice; … … 202 161 FileExt=Param.InputTable(:,5); 203 162 [filecell,i1_series,i2_series,j1_series,j2_series]=get_file_series(Param); 163 %%%%%%%%%%%% 164 % The cell array filecell is the list of input file names, while 165 % filecell{iview,fileindex}: 166 % iview: line in the table corresponding to a given file series 167 % fileindex: file index within the file series, 168 % i1_series(iview,ref_j,ref_i)... are the corresponding arrays of indices i1,i2,j1,j2, depending on the input line iview and the two reference indices ref_i,ref_j 169 % i1_series(iview,fileindex) expresses the same indices as a 1D array in file indices 170 %%%%%%%%%%%% 204 171 [FileType{1},FileInfo{1},MovieObject{1}]=get_file_type(filecell{1,1}); 205 172 if ~isempty(j1_series{1}) … … 214 181 nbfield=nbfield_i*NbSlice; %total number of fields after adjustement 215 182 216 %% Output183 %% output 217 184 FileExtOut='.png'; % write result as .png images for image inputs 218 185 if strcmp(lower(NomType{1}(end)),'a') … … 264 231 end 265 232 266 %% update the xml file 267 % SubDirBase=regexprep(Param.InputTable{1,2},'\..*','');%take the root part of SubDir, before the first dot '.' 268 % filexml=fullfile(RootPath{1},[SubDirBase '.xml']); 269 % if ~exist(filexml,'file') && exist([fullfile(RootPath{1},SubDir{1},RootFile{1}) '.xml'],'file')% xml inside the image directory 270 % copyfile([filebase '.xml'],filexml);% copy the .xml file 271 % end 272 % if exist(filexml,'file') 273 % t=xmltree(filexml); 274 % %update information on the first image name in the series 275 % uid_Heading=find(t,'ImaDoc/Heading'); 276 % if isempty(uid_Heading) 277 % [t,uid_Heading]=add(t,1,'element','Heading'); 278 % end 279 % uid_ImageName=find(t,'ImaDoc/Heading/ImageName'); 280 % if ~isempty(j1_series{1}) 281 % j1=j1_series{1}(1); 282 % end 283 % ImageName=fullfile_uvmat([dir_images term],'',RootFile{1},'.png',NomType,i1_series(1,1),[],j1); 284 % [pth,ImageName]=fileparts(ImageName); 285 % ImageName=[ImageName '.png']; 286 % if isempty(uid_ImageName) 287 % [t,uid_ImageName]=add(t,uid_Heading,'element','ImageName'); 288 % end 289 % uid_value=children(t,uid_ImageName); 290 % if isempty(uid_value) 291 % t=add(t,uid_ImageName,'chardata',ImageName);%indicate name of the first image, with ;png extension 292 % else 293 % t=set(t,uid_value(1),'value',ImageName);%indicate name of the first image, with ;png extension 294 % end 295 % 296 % %add information about image transform 297 % [t,new_uid]=add(t,1,'element','ImageTransform'); 298 % [t,NameFunction_uid]=add(t,new_uid,'element','NameFunction'); 299 % [t]=add(t,NameFunction_uid,'chardata','sub_background'); 300 % if GUI_config.CheckLevel 301 % [t,NameFunction_uid]=add(t,new_uid,'element','NameFunction'); 302 % [t]=add(t,NameFunction_uid,'chardata','levels'); 303 % end 304 % [t,NbSlice_uid]=add(t,new_uid,'element','NbSlice'); 305 % [t]=add(t,new_uid,'chardata',num2str(NbSlice)); 306 % [t,NbSlidingImages_uid]=add(t,new_uid,'element','NbSlidingImages'); 307 % [t]=add(t,NbSlidingImages_uid,'chardata',num2str(nbaver)); 308 % [t,LuminosityRank_uid]=add(t,new_uid,'element','RankBackground'); 309 % [t]=add(t,LuminosityRank_uid,'chardata',num2str(rank));% luminosity rank almong the nbaver sliding images 310 % save(t,filexml) 311 % end 312 %copy the mask 313 % if exist([filebase '_1mask_1'],'file') 314 % copyfile([filebase '_1mask_1'],[filebase_b '_1mask_1']);% copy the mask file 315 % end 316 317 %MAIN LOOP ON SLICES 318 % for islice=1:NbSlice 319 %% select the series of image indices 233 %% summary of the parameters: 234 % nbfield : total number of images treated (in case of multislices the function sub_background is repeated for each slice) 235 % step: shift at each step of the sliding background (corresponding to the nbre of images in a burst) 236 % nbaver_ima: length of the sequence used for the sliding background 237 238 % nbaver=nbaver_ima/step: nbaver_ima has been adjusted so that nbaver is an odd integer 239 halfnbaver=floor(nbaver/2); % half width (in unit of bursts) of the sliding background 240 241 %% select the series of image indices to process 320 242 indselect=1:step:nbfield;% select file indices of the slice 321 243 for ifield=1:step-1 … … 335 257 Asort=sort(Ak,3);%sort the luminosity of images at each point 336 258 B=Asort(:,:,rank);%background image 259 260 %% substract the first background image to the first images 337 261 display( 'first background image will be substracted') 338 nbfirst=(ceil(nbaver/2))*step; 339 for ifield=1:nbfirst 262 for ifield=1:step*(halfnbaver+1);% nbre of images treated by the first background image 340 263 Acor=double(Ak(:,:,ifield))-double(B);%substract background to the current image 341 264 Acor=(Acor>0).*Acor; % put to 0 the negative elements in Acor … … 365 288 display('sliding background image will be substracted') 366 289 if nbfield_i > nbaver_ima 367 for ifield = step*ceil(nbaver/2)+1:step:nbfield_i-step*floor(nbaver/2) 368 update_waitbar(WaitbarHandle,ifield/nbfield_i) 369 if ~isempty(RUNHandle) &&ishandle(RUNHandle) && ~strcmp(get(RUNHandle,'BusyAction'),'queue') 370 disp('program stopped by user') 371 return 372 end 373 % if isequal(stopstate,'queue')% enable STOP command 374 Ak(:,:,1:nbaver_ima-step)=Ak(:,:,1+step:nbaver_ima);% shift the current image series by one burst (step) 375 %incorporate next burst in the current image series 376 for iburst=1:step 377 ifile=indselect(ifield+step*floor(nbaver/2)+iburst-1); 378 filename=fullfile_uvmat(RootPath{1},SubDir{1},RootFile{1},FileExt{1},NomType{1},i1_series{1}(ifile),[],j1_series{1}(ifile)); 379 Aread=read_image(filename,FileType{1},MovieObject{1},i1_series{1}(ifile)); 380 if ndims(Aread)==3;%color images 381 Aread=sum(double(Aread),3);% take the sum of color components 290 for ifield = step*(halfnbaver+1):step:nbfield_i-step*(halfnbaver+1)% ifield +iburst=index of the current processed image 291 update_waitbar(WaitbarHandle,ifield/nbfield_i) 292 if ~isempty(RUNHandle) &&ishandle(RUNHandle) && ~strcmp(get(RUNHandle,'BusyAction'),'queue') 293 disp('program stopped by user') 294 return 295 end 296 Ak(:,:,1:nbaver_ima-step)=Ak(:,:,1+step:nbaver_ima);% shift the current image series by one burst (step) 297 %incorporate next burst in the current image series 298 for iburst=1:step 299 ifile=indselect(ifield+iburst+step*halfnbaver); 300 filename=fullfile_uvmat(RootPath{1},SubDir{1},RootFile{1},FileExt{1},NomType{1},i1_series{1}(ifile),[],j1_series{1}(ifile)); 301 Aread=read_image(filename,FileType{1},MovieObject{1},i1_series{1}(ifile)); 302 if ndims(Aread)==3;%color images 303 Aread=sum(double(Aread),3);% take the sum of color components 304 end 305 Ak(:,:,nbaver_ima-step+iburst)=Aread;% fill the last burst of the current image series by the new image 306 end 307 Asort=sort(Ak,3);%sort the new current image series by luminosity 308 B=Asort(:,:,rank);%current background image 309 %substract the background for the current burst 310 for iburst=1:step 311 Acor=double(Ak(:,:,step*halfnbaver+iburst))-double(B); %the current image has been already read ans stored as index step*halfnbaver+iburst in the current series 312 Acor=(Acor>0).*Acor; % put to 0 the negative elements in Acor 313 ifile=indselect(ifield+iburst); 314 if ~isempty(j1_series{1}) 315 j1=j1_series{1}(ifile); 316 end 317 newname=fullfile_uvmat(RootPath{1},OutputDir,RootFile{1},FileExtOut,NomTypeOut,i1_series{1}(ifile),[],j1); 318 %write result file 319 if Param.ActionInput.CheckLevelTransform 320 C=levels(Acor); 321 imwrite(C,newname,'BitDepth',8); % save the new image 322 else 323 if isequal(FileInfo{1}.BitDepth,16) 324 C=uint16(Acor); 325 imwrite(C,newname,'BitDepth',16); % save the new image 326 else 327 C=uint8(Acor); 328 imwrite(C,newname,'BitDepth',8); % save the new image 382 329 end 383 Ak(:,:,nbaver_ima-step+iburst)=Aread;384 330 end 385 Asort=sort(Ak,3);%sort the new current image series by luminosity 386 B=Asort(:,:,rank);%current background image 387 for iburst=1:step 388 index=step*floor(nbaver/2)+iburst; 389 Acor=double(Ak(:,:,index))-double(B); 390 Acor=(Acor>0).*Acor; % put to 0 the negative elements in Acor 391 ifile=indselect(ifield+iburst-1); 392 if ~isempty(j1_series{1}) 393 j1=j1_series{1}(ifile); 394 end 395 newname=fullfile_uvmat(RootPath{1},OutputDir,RootFile{1},FileExtOut,NomTypeOut,i1_series{1}(ifile),[],j1); 396 %write result file 397 if Param.ActionInput.CheckLevelTransform 398 C=levels(Acor); 399 imwrite(C,newname,'BitDepth',8); % save the new image 400 else 401 if isequal(FileInfo{1}.BitDepth,16) 402 C=uint16(Acor); 403 imwrite(C,newname,'BitDepth',16); % save the new image 404 else 405 C=uint8(Acor); 406 imwrite(C,newname,'BitDepth',8); % save the new image 407 end 408 end 409 display([newname ' written']) 410 411 end 412 % else 413 % return 414 % end 331 display([newname ' written']) 332 end 415 333 end 416 334 end … … 418 336 %% substract the background from the last images 419 337 display('last background image will be substracted') 420 ifield=nbfield_i-(step*ceil(nbaver/2))+1:nbfield_i; 421 for ifield=nbfield_i-(step*floor(nbaver/2))+1:nbfield_i 422 index=ifield-nbfield_i+step*(2*floor(nbaver/2)+1); 423 Acor=double(Ak(:,:,index))-double(B); 338 for ifield=nbfield_i-step*halfnbaver+1:nbfield_i 339 Acor=double(Ak(:,:,ifield-nbfield_i+step*(2*halfnbaver+1)))-double(B); 424 340 Acor=(Acor>0).*Acor; % put to 0 the negative elements in Acor 425 341 ifile=indselect(ifield); … … 427 343 j1=j1_series{1}(ifile); 428 344 end 429 newname=fullfile_uvmat(RootPath{1},OutputDir,RootFile{1},FileExtOut,NomTypeOut,i1_series{1}(ifile),[],j1); 430 345 newname=fullfile_uvmat(RootPath{1},OutputDir,RootFile{1},FileExtOut,NomTypeOut,i1_series{1}(ifile),[],j1); 431 346 %write result file 432 347 if Param.ActionInput.CheckLevelTransform -
trunk/src/series/time_series.m
r668 r676 214 214 %%%%%%%%%%%%%%%% loop on field indices %%%%%%%%%%%%%%%% 215 215 for index=1:nbfield 216 index 216 217 update_waitbar(WaitbarHandle,index/nbfield) 217 218 if ~isempty(RUNHandle) && ~strcmp(get(RUNHandle,'BusyAction'),'queue')
Note: See TracChangeset
for help on using the changeset viewer.