Changeset 871 for trunk/src/series/time_series.m
- Timestamp:
- Feb 16, 2015, 12:15:23 AM (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/series/time_series.m
r867 r871 73 73 ParamOut.OutputDirExt='.tseries';%set the output dir extension 74 74 ParamOut.OutputFileMode='NbSlice';% '=NbInput': 1 output file per input file index, '=NbInput_i': 1 file per input file index i, '=NbSlice': 1 file per slice 75 % check the existence of the first file in the series 76 first_j=[]; 75 % check for selection of a projection object 76 hseries=findobj(allchild(0),'Tag','series');% handles of the GUI series 77 if ~isfield(Param,'ProjObject') 78 answer=msgbox_uvmat('INPUT_Y-N','use a projection object for the time_series?'); 79 if strcmp(answer,'Yes') 80 hhseries=guidata(hseries); 81 set(hhseries.CheckObject,'Visible','on') 82 set(hhseries.CheckObject,'Value',1) 83 series('CheckObject_Callback',hseries,[],hhseries); %file input with xml reading in uvmat, show the image in phys coordinates 84 end 85 end 86 % introduce bin size for histograms 87 if Param.CheckObject 88 SeriesData=get(hseries,'UserData'); 89 if checkhisto 90 answer=msgbox_uvmat('INPUT_TXT','set bin size for histograms (or keep ''auto'' by default)?','auto'); 91 ParamOut.ActionInput.VarMesh=str2double(answer); 92 end 93 end 94 % check the existence of the first and last file in the series 95 first_j=[]; 77 96 if isfield(Param.IndexRange,'first_j'); first_j=Param.IndexRange.first_j; end 78 97 last_j=[]; … … 85 104 if ~exist(FirstFileName,'file') 86 105 msgbox_uvmat('WARNING',['the first input file ' FirstFileName ' does not exist']) 87 elseif isequal(size(Param.InputTable,1),1) && ~isfield(Param,'ProjObject') 88 msgbox_uvmat('WARNING','a projection object may be needed to select points for the time_series') 106 else 107 [i1,i2,j1,j2] = get_file_index(Param.IndexRange.last_i,last_j,PairString); 108 LastFileName=fullfile_uvmat(Param.InputTable{1,1},Param.InputTable{1,2},Param.InputTable{1,3},... 109 Param.InputTable{1,5},Param.InputTable{1,4},i1,i2,j1,j2); 110 if ~exist(LastFileName,'file') 111 msgbox_uvmat('WARNING',['the last input file ' LastFileName ' does not exist']) 112 end 89 113 end 90 114 return … … 251 275 end 252 276 253 nbmissing=0; %number of undetected files 254 % for i_slice=1:NbSlice 255 %index_slice=i_slice:NbSlice:nbfield;% select file indices of the slice 256 nbfile=0; 277 nbfile=0;% not used , to check 257 278 nbmissing=0; 258 279 VarMesh=NaN; 280 checkhisto=0; 281 if isfield(Param,'ProjObject') && ismember(Param.ProjObject.ProjMode,{'inside','outside'}) 282 checkhisto=1; 283 if isfield(Param.ActionInput,'VarMesh')%case of histograms 284 VarMesh=Param.ActionInput.VarMesh; 285 end 286 end 259 287 %%%%%%%%%%%%%%%% loop on field indices %%%%%%%%%%%%%%%% 260 288 for index=1:nbfield 261 289 update_waitbar(WaitbarHandle,index/nbfield) 262 290 if ~isempty(RUNHandle) && ~strcmp(get(RUNHandle,'BusyAction'),'queue') 263 291 disp('program stopped by user') … … 304 332 end 305 333 306 %field projection on an object 334 %field projection on an object 307 335 if Param.CheckObject 308 336 % calculate tps coefficients if needed … … 310 338 Field=tps_coeff_field(Field,check_proj_tps); 311 339 end 312 [Field,errormsg]=proj_field(Field,Param.ProjObject );340 [Field,errormsg]=proj_field(Field,Param.ProjObject,VarMesh); 313 341 if ~isempty(errormsg) 314 342 msgbox_uvmat('ERROR',['time_series / proj_field / ' errormsg]) … … 316 344 end 317 345 end 318 nbfile=nbfile+1;346 % nbfile=nbfile+1; 319 347 320 348 % initiate the time series at the first iteration 321 if nbfile==1349 if index==1 322 350 % stop program if the first field reading is in error 323 351 if ~isempty(errormsg) … … 326 354 end 327 355 DataOut=Field;%default 328 % DataOut.NbDim=Field.NbDim+1; %add the time dimension for plots329 356 nbvar=length(Field.ListVarName); 330 357 if nbvar==0 … … 332 359 return 333 360 end 334 testsum=2*ones(1,nbvar);%initiate flag for action on each variable 335 if isfield(Field,'VarAttribute') % look for coordinate and flag variables 361 if checkhisto%case of histograms 362 testsum=zeros(1,nbvar);%initiate flag for action on each variable 363 for ivar=1:numel(Field.ListVarName)% list of variable names before projection (histogram) 364 VarName=Field.ListVarName{ivar}; 365 if isfield(Data{1},VarName) 366 testsum(ivar)=1; 367 DataOut.(VarName)=Field.(VarName); 368 DataOut.([VarName 'Histo'])=zeros([nbfield numel(DataOut.(VarName))]); 369 VarMesh=Field.(VarName)(2)-Field.(VarName)(1); 370 end 371 end 372 disp(['mesh for histogram = ' num2str(VarMesh)]) 373 else 374 testsum=2*ones(1,nbvar);%initiate flag for action on each variable 375 if isfield(Field,'VarAttribute') % look for coordinate and flag variables 376 for ivar=1:nbvar 377 if length(Field.VarAttribute)>=ivar && isfield(Field.VarAttribute{ivar},'Role') 378 var_role=Field.VarAttribute{ivar}.Role;%'role' of the variable 379 if isequal(var_role,'errorflag') 380 disp_uvmat('ERROR','do not handle error flags in time series',checkrun) 381 return 382 end 383 if isequal(var_role,'warnflag') 384 testsum(ivar)=0; % not recorded variable 385 eval(['DataOut=rmfield(DataOut,''' Field.ListVarName{ivar} ''');']);%remove variable 386 end 387 if strcmp(var_role,'coord_x')||strcmp(var_role,'coord_y')||strcmp(var_role,'coord_z')||strcmp(var_role,'coord') 388 testsum(ivar)=1; %constant coordinates, record without time evolution 389 end 390 end 391 % check whether the variable ivar is a dimension variable 392 DimCell=Field.VarDimName{ivar}; 393 if ischar(DimCell) 394 DimCell={DimCell}; 395 end 396 if numel(DimCell)==1 && isequal(Field.ListVarName{ivar},DimCell{1})%detect dimension variables 397 testsum(ivar)=1; 398 end 399 end 400 end 336 401 for ivar=1:nbvar 337 if length(Field.VarAttribute)>=ivar && isfield(Field.VarAttribute{ivar},'Role') 338 var_role=Field.VarAttribute{ivar}.Role;%'role' of the variable 339 if isequal(var_role,'errorflag') 340 disp_uvmat('ERROR','do not handle error flags in time series',checkrun) 341 return 342 end 343 if isequal(var_role,'warnflag') 344 testsum(ivar)=0; % not recorded variable 345 eval(['DataOut=rmfield(DataOut,''' Field.ListVarName{ivar} ''');']);%remove variable 346 end 347 if strcmp(var_role,'coord_x')||strcmp(var_role,'coord_y')||strcmp(var_role,'coord_z')||strcmp(var_role,'coord') 348 testsum(ivar)=1; %constant coordinates, record without time evolution 349 end 350 end 351 % check whether the variable ivar is a dimension variable 352 DimCell=Field.VarDimName{ivar}; 353 if ischar(DimCell) 354 DimCell={DimCell}; 355 end 356 if numel(DimCell)==1 && isequal(Field.ListVarName{ivar},DimCell{1})%detect dimension variables 357 testsum(ivar)=1; 358 end 359 end 360 end 361 for ivar=1:nbvar 362 if testsum(ivar)==2 363 eval(['DataOut.' Field.ListVarName{ivar} '=[];']) 402 if testsum(ivar)==2 403 VarName=Field.ListVarName{ivar}; 404 siz=size(Field.(VarName)); 405 DataOut.(VarName)=zeros([nbfield siz]); 406 end 364 407 end 365 408 end … … 368 411 369 412 % add data to the current field 370 for ivar=1:length(Field.ListVarName) 371 VarName=Field.ListVarName{ivar}; 372 VarVal=Field.(VarName); 373 if testsum(ivar)==2% test for recorded variable 374 if isempty(errormsg) 375 if Param.CheckObject && strcmp(Param.ProjObject.ProjMode,'inside')% take the average in the domain for 'inside' projection mode 376 if isempty(VarVal) 377 disp_uvmat('ERROR',['empty result at frame index ' num2str(i1_series{iview}(index))],checkrun) 378 return 379 end 380 VarVal=mean(VarVal,1); 381 end 382 VarVal=shiftdim(VarVal,-1); %shift dimension 383 DataOut.(VarName)=cat(1,DataOut.(VarName),VarVal);%concanete the current field to the time series 384 else 385 DataOut.(VarName)=cat(1,DataOut.(VarName),0);% put each variable to 0 in case of input reading error 413 if checkhisto 414 for ivar=1:length(Field.ListVarName) 415 VarName=Field.ListVarName{ivar}; 416 if isfield(Data{1},VarName) 417 MaxValue=max(DataOut.(VarName));% current max of histogram absissa 418 MinValue=min(DataOut.(VarName));% current min of histogram absissa 419 MaxIndex=round(MaxValue/VarMesh); 420 MinIndex=round(MinValue/VarMesh); 421 MaxIndex_new=round(max(Field.(VarName)/VarMesh));% max of the current field 422 MinIndex_new=round(min(Field.(VarName)/VarMesh)); 423 if MaxIndex_new>MaxIndex% the variable max for the current field exceeds the previous one 424 DataOut.(VarName)=[DataOut.(VarName) VarMesh*(MaxIndex+1:MaxIndex_new)];% append the new variable values 425 DataOut.([VarName 'Histo'])=[DataOut.([VarName 'Histo']) zeros(nbfield,MaxIndex_new-MaxIndex)]; % append the new histo values 426 end 427 if MinIndex_new <= MinIndex-1 428 DataOut.(VarName)=[VarMesh*(MinIndex_new:MinIndex-1) DataOut.(VarName)];% insert the new variable values 429 DataOut.([VarName 'Histo'])=[zeros(nbfield,MinIndex-MinIndex_new) DataOut.([VarName 'Histo'])];% insert the new histo values 430 ind_start=1; 431 else 432 ind_start=MinIndex_new-MinIndex+1; 433 end 434 DataOut.([VarName 'Histo'])(index,ind_start:ind_start+MaxIndex_new-MinIndex_new)=... 435 DataOut.([VarName 'Histo'])(index,ind_start:ind_start+MaxIndex_new-MinIndex_new)+Field.([VarName 'Histo']); 386 436 end 387 elseif testsum(ivar)==1% variable representing fixed coordinates 388 VarInit=DataOut.(VarName); 389 if isempty(errormsg) && ~isequal(VarVal,VarInit) 390 disp_uvmat('ERROR',['time series requires constant coordinates ' VarName ': use projection mode interp'],checkrun) 391 return 437 end 438 else 439 for ivar=1:length(Field.ListVarName) 440 VarName=Field.ListVarName{ivar}; 441 VarVal=Field.(VarName); 442 if testsum(ivar)==2% test for recorded variable 443 if isempty(errormsg) 444 VarVal=shiftdim(VarVal,-1); %shift dimension 445 DataOut.(VarName)(index,:,:)=VarVal;%concanete the current field to the time series 446 end 447 elseif testsum(ivar)==1% variable representing fixed coordinates 448 VarInit=DataOut.(VarName); 449 if isempty(errormsg) && ~isequal(VarVal,VarInit) 450 disp_uvmat('ERROR',['time series requires constant coordinates ' VarName ': use projection mode interp'],checkrun) 451 return 452 end 392 453 end 393 454 end … … 397 458 if isempty(time)% time not set by xml filer(s) 398 459 if isfield(Data{1},'Time') 399 DataOut.Time( nbfile,1)=Field.Time;460 DataOut.Time(index,1)=Field.Time; 400 461 else 401 DataOut.Time( nbfile,1)=index;%default462 DataOut.Time(index,1)=index;%default 402 463 end 403 464 else % time from ImaDoc prevails TODO: correct 404 DataOut.Time( nbfile,1)=time(index);%465 DataOut.Time(index,1)=time(index);% 405 466 end 406 467 … … 411 472 end 412 473 end 413 414 474 end 415 475 %%%%%%% END OF LOOP WITHIN A SLICE … … 456 516 end 457 517 518 %case of histograms 519 if checkhisto 520 for ivar=1:numel(Field.ListVarName) 521 VarName=Field.ListVarName{ivar}; 522 if isfield(Data{1},VarName) 523 DataOut.ListVarName=[DataOut.ListVarName {[VarName 'Histo']}]; 524 DataOut.VarDimName=[DataOut.VarDimName {{'Time',VarName}}]; 525 end 526 end 527 end 458 528 % display nbmissing 459 529 if ~isequal(nbmissing,0)
Note: See TracChangeset
for help on using the changeset viewer.