Changeset 1195 for trunk/src/series/civ_series.m
- Timestamp:
- Feb 26, 2026, 4:16:03 PM (5 days ago)
- File:
-
- 1 edited
-
trunk/src/series/civ_series.m (modified) (28 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/series/civ_series.m
r1188 r1195 96 96 return 97 97 end 98 %iview_A=0;%default values 99 NbField=1; 100 RUNHandle=[]; 101 % CheckInputFile=isfield(Param,'InputTable');%= 1 in test use for TestCiv (no nc file involved) 102 % CheckOutputFile=isfield(Param,'OutputSubDir');%= 1 in test use for TestPatch (no nc file produced) 103 104 %% input files and indexing 98 99 inv_scale_factor=100; % scale factor of displacements for uin16 records in netcdf files (dx expressed in pixels) 100 %inv_scale_factor=[];% no scale factor, displacements written as single precision real 101 102 %% input files and indexing 105 103 hseries=findobj(allchild(0),'Tag','series'); 106 104 RUNHandle=findobj(hseries,'Tag','RUN');%handle of RUN button in GUI series … … 188 186 j2_series_Civ1=ones(size(i1_series_Civ1)); 189 187 end 188 Check_j_Civ1=false; 190 189 else % movie for each burst or volume (index j) 191 190 FrameIndex_A_Civ1=j1_series_Civ1; 192 191 FrameIndex_B_Civ1=j2_series_Civ1; 192 Check_j_Civ1=true; 193 193 end 194 194 if isempty(PairCiv2) … … 203 203 j2_series_Civ2=ones(size(i1_series_Civ2)); 204 204 end 205 Check_j_Civ2=false; 205 206 else 206 207 FrameIndex_A_Civ2=j1_series_Civ2; 207 208 FrameIndex_B_Civ2=j2_series_Civ2; 209 Check_j_Civ2=true; 208 210 end 209 211 end … … 226 228 OutputDir=[Param.OutputSubDir Param.OutputDirExt]; 227 229 ListGlobalAttribute={'Conventions','Program','CivStage'}; 228 Data.Conventions='uvmat/civdata ';% states the conventions used for the description of field variables and attributes230 Data.Conventions='uvmat/civdata/compress';% states the conventions used for the description of field variables and attributes 229 231 Data.Program='civ_series'; 230 232 if isfield(Param,'UvmatRevision') … … 282 284 OutputPath=fullfile(Param.OutputPath,Param.Experiment,Param.Device); 283 285 if CheckRelabel 284 RootFileOut=index2filename(XmlData.FileSeries,1,1,MaxIndex_j);286 RootFileOut=index2filename(XmlData.FileSeries,1,1,MaxIndex_j); 285 287 else 286 288 RootFileOut=RootFile_A; … … 322 324 ImageName_A='';ImageName_B='';%default 323 325 VideoObject_A=[];VideoObject_B=[]; 326 Civ_FF=[];%default 324 327 325 328 %% Civ1 … … 388 391 end 389 392 [par_civ1.ImageB,VideoObject_B] = read_image(ImageName_B,FileType_B,VideoObject_B,FrameIndex_B); 390 393 391 394 catch ME % display errors in reading input images 392 395 if ~isempty(ME.message) … … 395 398 end 396 399 end 397 398 % case of background image to subtract400 401 % case of background image to subtract 399 402 if par_civ1.CheckBackground &&~isempty(par_civ1.Background) 400 403 [RootPath_background,SubDir_background,RootFile_background,~,~,~,~,Ext_background]=fileparts_uvmat(Param.ActionInput.Civ1.Background); 401 j1=1;402 if ~isempty(j1_series_Civ1)403 j1=j1_series_Civ1(ifield);404 end405 404 if ~isempty(i2_series_Civ1)% case of volume,backgrounds act on different j levels 406 backgroundname=fullfile_uvmat(RootPath_background,SubDir_background,RootFile_background,Ext_background,'_1',j1 );405 backgroundname=fullfile_uvmat(RootPath_background,SubDir_background,RootFile_background,Ext_background,'_1',j1_series_Civ1(ifield)); 407 406 elseif isfield(par_civ1,'NbSlice') 408 407 i1_background=mod(i1-1,par_civ1.NbSlice)+1; … … 436 435 par_civ1.ImageB=par_civ1.ImageB-par_civ1.Background; 437 436 end 438 439 % case of image luminosity rescaling440 if par_civ1.CheckRescale &&~isempty(par_civ1.Maxtanh)441 par_civ1.ImageA =par_civ1.Maxtanh*tanh(double(par_civ1.ImageA)/par_civ1.Maxtanh);442 par_civ1.ImageB=par_civ1.Maxtanh*tanh(double(par_civ1.ImageB)/par_civ1.Maxtanh);437 438 % case of image luminosity rescaling 439 if par_civ1.CheckRescale &&~isempty(par_civ1.Maxtanh) 440 par_civ1.ImageA =par_civ1.Maxtanh*tanh(double(par_civ1.ImageA)/par_civ1.Maxtanh); 441 par_civ1.ImageB=par_civ1.Maxtanh*tanh(double(par_civ1.ImageB)/par_civ1.Maxtanh); 443 442 end 444 443 … … 457 456 i2=i2_series_Civ1(ifield); 458 457 end 459 j1=1; 460 if ~isempty(j1_series_Civ1) 461 j1=j1_series_Civ1(ifield); 462 end 458 459 j1=j1_series_Civ1(ifield); 460 463 461 j2=j1; 464 if ~isempty(j2_series_Civ1)462 if Check_j_Civ1 465 463 j2=j2_series_Civ1(ifield); 466 464 end … … 479 477 480 478 % set the list of variables 481 Data.ListVarName={'Civ1_X','Civ1_Y','Civ1_U','Civ1_V','Civ1_C','Civ1_FF'};% cell array containing the names of the fields to record482 Data.VarDimName={'nb_vec_1','nb_vec_1','nb_vec_1','nb_vec_1','nb_vec_1','nb_vec_1'};483 Data.VarAttribute{1}.Role='coord_x';484 Data.VarAttribute{2}.Role='coord_y';485 Data.VarAttribute{3}.Role='vector_x';486 Data.VarAttribute{4}.Role='vector_y';487 Data.VarAttribute{5}.Role='ancillary';488 Data.VarAttribute{6}.Role='errorflag';479 % Data.ListVarName={'Civ1_X','Civ1_Y','Civ1_U','Civ1_V','Civ1_C','Civ1_FF'};% cell array containing the names of the fields to record 480 % Data.VarDimName={'nb_vec_1','nb_vec_1','nb_vec_1','nb_vec_1','nb_vec_1','nb_vec_1'}; 481 % Data.VarAttribute{1}.Role='coord_x'; 482 % Data.VarAttribute{2}.Role='coord_y'; 483 % Data.VarAttribute{3}.Role='vector_x'; 484 % Data.VarAttribute{4}.Role='vector_y'; 485 % Data.VarAttribute{5}.Role='ancillary'; 486 % Data.VarAttribute{6}.Role='errorflag'; 489 487 490 488 % case of mask 491 489 if par_civ1.CheckMask&&~isempty(par_civ1.Mask) 492 490 [RootPath_mask,SubDir_mask,RootFile_mask,~,~,~,~,Ext_mask]=fileparts_uvmat(Param.ActionInput.Civ1.Mask); 493 j1=1; 494 if ~isempty(j1_series_Civ1) 491 if Check_j_Civ1 495 492 j1=j1_series_Civ1(ifield); 493 else 494 j1=[]; 496 495 end 497 496 if ~isempty(i2_series_Civ1)&& ~isequal(i1_series_Civ1,i2_series_Civ1)% case of volume,masks act on different j levels … … 528 527 end 529 528 end 530 529 531 530 % case of input grid 532 531 if par_civ1.CheckGrid &&~isempty(par_civ1.Grid) … … 537 536 538 537 % caluclate velocity data 539 [Data.Civ1_X,Data.Civ1_Y,Data.Civ1_U,Data.Civ1_V,Data.Civ1_C,Data.Civ1_FF, result_conv, errormsg] = civ (par_civ1); 538 % [Data.Civ1_X,Data.Civ1_Y,Data.Civ1_U,Data.Civ1_V,Data.Civ1_C,Data.Civ1_FF, result_conv, errormsg] = civ (par_civ1); 539 [Civ_X,Civ_Y,Civ_U,Civ_V,Civ_C,Civ_FF, result_conv, errormsg] = civ (par_civ1); 540 Civ_X_shifted=Civ_X-0.5+Civ_U/2;% get the exact positions 541 Civ_Y_shifted=Civ_Y-0.5+Civ_V/2; 540 542 if ~isempty(errormsg) 541 543 disp_uvmat('ERROR',errormsg,checkrun) … … 562 564 end 563 565 Data.ListGlobalAttribute=[Data.ListGlobalAttribute Fix1_param]; 564 Data.Civ1_FF=uint8(detect_false(Param.ActionInput.Fix1,Data.Civ1_C,Data.Civ1_U,Data.Civ1_V,Data.Civ1_FF)); 566 % Data.Civ1_FF=uint8(detect_false(Param.ActionInput.Fix1,Data.Civ1_C,Data.Civ1_U,Data.Civ1_V,Data.Civ1_FF)); 567 Civ_FF=uint8(detect_false(Param.ActionInput.Fix1,Civ_C,Civ_U,Civ_V,Civ_FF)); 565 568 Data.CivStage=2; 566 569 end … … 581 584 582 585 % list the variables to record 583 nbvar=length(Data.ListVarName); 584 Data.ListVarName=[Data.ListVarName {'Civ1_U_smooth','Civ1_V_smooth','Civ1_SubRange','Civ1_NbCentres','Civ1_Coord_tps','Civ1_U_tps','Civ1_V_tps'}]; 585 Data.VarDimName=[Data.VarDimName {'nb_vec_1','nb_vec_1',{'nb_coord','nb_bounds','nb_subdomain_1'},'nb_subdomain_1',... 586 {'nb_tps_1','nb_coord','nb_subdomain_1'},{'nb_tps_1','nb_subdomain_1'},{'nb_tps_1','nb_subdomain_1'}}]; 587 Data.VarAttribute{nbvar+1}.Role='vector_x'; 588 Data.VarAttribute{nbvar+2}.Role='vector_y'; 589 Data.VarAttribute{nbvar+5}.Role='coord_tps'; 590 Data.VarAttribute{nbvar+6}.Role='vector_x'; 591 Data.VarAttribute{nbvar+7}.Role='vector_y'; 592 Data.Civ1_U_smooth=Data.Civ1_U; % zeros(size(Data.Civ1_X)); 593 Data.Civ1_V_smooth=Data.Civ1_V; %zeros(size(Data.Civ1_X)); 594 if isfield(Data,'Civ1_FF') 595 ind_good=find(Data.Civ1_FF==0); 586 % nbvar=length(Data.ListVarName); 587 % Data.ListVarName=[Data.ListVarName {'Civ1_U_smooth','Civ1_V_smooth','Civ1_SubRange','Civ1_NbCentres','Civ1_Coord_tps','Civ1_U_tps','Civ1_V_tps'}]; 588 % Data.VarDimName=[Data.VarDimName {'nb_vec_1','nb_vec_1',{'nb_coord','nb_bounds','nb_subdomain_1'},'nb_subdomain_1',... 589 % {'nb_tps_1','nb_coord','nb_subdomain_1'},{'nb_tps_1','nb_subdomain_1'},{'nb_tps_1','nb_subdomain_1'}}]; 590 % Data.VarAttribute{nbvar+1}.Role='vector_x'; 591 % Data.VarAttribute{nbvar+2}.Role='vector_y'; 592 % Data.VarAttribute{nbvar+5}.Role='coord_tps'; 593 % Data.VarAttribute{nbvar+6}.Role='vector_x'; 594 % Data.VarAttribute{nbvar+7}.Role='vector_y'; 595 %Data.Civ1_U_smooth=Data.Civ1_U; % zeros(size(Data.Civ1_X)); 596 %Data.Civ1_V_smooth=Data.Civ1_V; %zeros(size(Data.Civ1_X)); 597 % if isfield(Data,'Civ1_FF') 598 if isempty(Civ_FF) 599 ind_good=1:numel(Civ_X); 596 600 else 597 ind_good= 1:numel(Data.Civ1_X);601 ind_good=find(Civ_FF==0); 598 602 end 599 603 if isempty(ind_good) … … 603 607 604 608 % perform Patch calculation using the UVMAT fct 'filter_tps' 605 [Data.Civ1_SubRange,Data.Civ1_NbCentres,Data.Civ1_Coord_tps,Data.Civ1_U_tps,Data.Civ1_V_tps,~,Ures, Vres,~,FFres]=... 606 filter_tps([Data.Civ1_X(ind_good) Data.Civ1_Y(ind_good)],Data.Civ1_U(ind_good),Data.Civ1_V(ind_good),[],Data.Patch1_SubDomainSize,Data.Patch1_FieldSmooth,Data.Patch1_MaxDiff); 607 Data.Civ1_U_smooth(ind_good)=Ures;% take the interpolated (smoothed) velocity values for good vectors, keep civ1 data for the other 608 Data.Civ1_V_smooth(ind_good)=Vres; 609 Data.Civ1_FF(ind_good)=uint8(4*FFres);%set FF to value =4 for vectors eliminated by filter_tps 609 [SubRange,NbCentres,Coord_tps,U_tps,V_tps,~,Ures, Vres,~,FFres]=... 610 filter_tps([Civ_X_shifted(ind_good),Civ_Y_shifted(ind_good)],Civ_U(ind_good),Civ_V(ind_good),[],Data.Patch1_SubDomainSize,Data.Patch1_FieldSmooth,Data.Patch1_MaxDiff); 611 Civ_U_smooth=Civ_U;% false vectors kept unchanged 612 Civ_V_smooth=Civ_V; 613 Civ_U_smooth(ind_good)=Ures;% take the interpolated (smoothed) velocity values for good vectors, keep civ1 data for the other 614 Civ_V_smooth(ind_good)=Vres; 615 Civ_FF(ind_good)=uint8(4*FFres);%set FF to value =4 for vectors eliminated by filter_tps 610 616 time_patch1=toc(tstart_patch1); 611 617 disp('patch1 performed') … … 666 672 end 667 673 668 % %% user defined image transform669 % if ~isempty(transform_fct)670 % par_civ2 =transform_fct(par_civ2,Param);671 % end672 %% case of image luminosity rescaling673 if par_civ2.CheckRescale &&~isempty(par_civ2.Maxtanh)674 par_civ2.ImageA =par_civ2.Maxtanh*tanh(double(par_civ2.ImageA)/par_civ2.Maxtanh);675 par_civ2.ImageB=par_civ2.Maxtanh*tanh(double(par_civ2.ImageB)/par_civ2.Maxtanh);674 % %% user defined image transform 675 % if ~isempty(transform_fct) 676 % par_civ2 =transform_fct(par_civ2,Param); 677 % end 678 %% case of image luminosity rescaling 679 if par_civ2.CheckRescale &&~isempty(par_civ2.Maxtanh) 680 par_civ2.ImageA =par_civ2.Maxtanh*tanh(double(par_civ2.ImageA)/par_civ2.Maxtanh); 681 par_civ2.ImageB=par_civ2.Maxtanh*tanh(double(par_civ2.ImageB)/par_civ2.Maxtanh); 676 682 end 677 683 … … 688 694 U_tps=DataIn.Civ2_U_tps; 689 695 V_tps=DataIn.Civ2_V_tps; 690 %CivStage=DataIn.CivStage;%store the current CivStage691 696 Civ1_Dt=DataIn.Civ2_Dt; 692 697 Data=[];%reinitialise the result structure Data … … 694 699 Data.Conventions='uvmat/civdata';% states the conventions used for the description of field variables and attributes 695 700 Data.Program='civ_series'; 696 % Data.CivStage=CivStage+1;%update the current civStage after reinitialisation of Data697 701 Data.ListVarName={}; 698 702 Data.VarDimName={}; 699 703 else % get the guess from patch1 700 SubRange= Data.Civ1_SubRange;701 NbCentres=Data.Civ1_NbCentres;702 Coord_tps=Data.Civ1_Coord_tps;703 U_tps=Data.Civ1_U_tps;704 V_tps=Data.Civ1_V_tps;704 % SubRange= Data.Civ_SubRange; 705 % NbCentres=Data.Civ_NbCentres; 706 % Coord_tps=Data.Civ_Coord_tps; 707 % U_tps=Data.Civ_U_tps; 708 % V_tps=Data.Civ_V_tps; 705 709 Civ1_Dt=Data.Civ1_Dt; 706 % Data.CivStage=4; 707 end 708 Data.CivStage=4; 709 % SubRange= par_civ2.Civ1_SubRange; 710 % NbCentres=par_civ2.Civ1_NbCentres; 711 % Coord_tps=par_civ2.Civ1_Coord_tps; 712 % U_tps=par_civ2.Civ1_U_tps; 713 % V_tps=par_civ2.Civ1_V_tps; 714 % Civ1_Dt=par_civ2.Civ1_Dt; 715 % Civ2_Dt=par_civ2.Civ1_Dt; 716 % Data.ListVarName={}; 717 % Data.VarDimName={}; 718 % end 710 end 711 Data.CivStage=4; 719 712 Shiftx=zeros(size(par_civ2.Grid,1),1);% initialise the shift expected from civ1 data 720 713 Shifty=zeros(size(par_civ2.Grid,1),1); … … 761 754 [RootPath_mask,SubDir_mask,RootFile_mask,~,~,~,~,Ext_mask]=fileparts_uvmat(Param.ActionInput.Civ2.Mask); 762 755 if ~isempty(i2_series_Civ2) && ~isequal(i1_series_Civ2,i2_series_Civ2) % we do PIV among indices i, at given indices j (volume scan), mask depends on position j 763 j1=1; 764 if ~isempty(j1_series_Civ2) 765 j1=j1_series_Civ1(ifield); 756 if Check_j_Civ2 757 j1=j1_series_Civ2(ifield); 758 else 759 j1=[]; 766 760 end 767 761 maskname=fullfile_uvmat(RootPath_mask,SubDir_mask,RootFile_mask,Ext_mask,'_1',j1); … … 859 853 % calculate velocity data (y and v in image indices, reverse to y component) 860 854 861 [Data.Civ2_X,Data.Civ2_Y,Data.Civ2_U,Data.Civ2_V,Data.Civ2_C,Data.Civ2_FF,~, errormsg] = civ (par_civ2); 862 855 [Civ_X,Civ_Y,Civ_U,Civ_V,Civ_C,Civ_FF,~, errormsg] = civ (par_civ2); 856 Civ_X_shifted=Civ_X-0.5+Civ_U/2;% get the exact positions 857 Civ_Y_shifted=Civ_Y-0.5+Civ_V/2; 863 858 list_param=(fieldnames(Param.ActionInput.Civ2))'; 864 859 list_param(strcmp('TestCiv2',list_param))=[];% remove the parameter TestCiv2 from the list … … 882 877 Data.ListGlobalAttribute=[Data.ListGlobalAttribute Civ2_param]; 883 878 884 nbvar=numel(Data.ListVarName);879 % nbvar=numel(Data.ListVarName); 885 880 % define the Civ2 variable (if Civ2 data are not replaced from previous calculation) 886 if isempty(find(strcmp('Civ2_X',Data.ListVarName),1))887 Data.ListVarName=[Data.ListVarName {'Civ2_X','Civ2_Y','Civ2_U','Civ2_V','Civ2_C','Civ2_FF'}];% cell array containing the names of the fields to record888 Data.VarDimName=[Data.VarDimName {'nb_vec_2','nb_vec_2','nb_vec_2','nb_vec_2','nb_vec_2','nb_vec_2'}];889 Data.VarAttribute{nbvar+1}.Role='coord_x';890 Data.VarAttribute{nbvar+2}.Role='coord_y';891 Data.VarAttribute{nbvar+3}.Role='vector_x';892 Data.VarAttribute{nbvar+4}.Role='vector_y';893 Data.VarAttribute{nbvar+5}.Role='ancillary';894 Data.VarAttribute{nbvar+6}.Role='errorflag';895 end881 % if isempty(find(strcmp('Civ2_X',Data.ListVarName),1)) 882 % Data.ListVarName=[Data.ListVarName {'Civ2_X','Civ2_Y','Civ2_U','Civ2_V','Civ2_C','Civ2_FF'}];% cell array containing the names of the fields to record 883 % Data.VarDimName=[Data.VarDimName {'nb_vec_2','nb_vec_2','nb_vec_2','nb_vec_2','nb_vec_2','nb_vec_2'}]; 884 % Data.VarAttribute{nbvar+1}.Role='coord_x'; 885 % Data.VarAttribute{nbvar+2}.Role='coord_y'; 886 % Data.VarAttribute{nbvar+3}.Role='vector_x'; 887 % Data.VarAttribute{nbvar+4}.Role='vector_y'; 888 % Data.VarAttribute{nbvar+5}.Role='ancillary'; 889 % Data.VarAttribute{nbvar+6}.Role='errorflag'; 890 % end 896 891 disp('civ2 performed') 897 892 time_civ2=toc(tstart_civ2); 898 elseif ~isfield(Data,'ListVarName') % we start there, using existing Civ2 data893 elseif Param.ActionInput.CheckFix2 && isfield (Param.ActionInput,'Fix2') % we start there, using existing Civ2 data 899 894 if exist('ncfile','var') 900 895 CivFile=ncfile; … … 908 903 909 904 %% Fix2 910 if Param.ActionInput.CheckFix2 && isfield (Param.ActionInput,'Fix2')% if Fix2 computation is requested905 if (Param.ActionInput.CheckFix2 && isfield (Param.ActionInput,'Fix2'))||(Param.ActionInput.CheckPatch2 && isfield (Param.ActionInput,'Patch2'))%% if Fix2 computation is requested 911 906 disp('detect_false2 started') 912 907 list_param=fieldnames(Param.ActionInput.Fix2)'; … … 917 912 end 918 913 Data.ListGlobalAttribute=[Data.ListGlobalAttribute Fix2_param]; 919 Data.Civ2_FF=double(detect_false(Param.ActionInput.Fix2,Data.Civ2_C,Data.Civ2_U,Data.Civ2_V,Data.Civ2_FF));914 Civ_FF=uint8(detect_false(Param.ActionInput.Fix2,Civ_C,Civ_U,Civ_V,Civ_FF)); 920 915 Data.CivStage=Data.CivStage+1; 921 916 end … … 935 930 Data.ListGlobalAttribute=[Data.ListGlobalAttribute Patch2_param]; 936 931 937 nbvar=length(Data.ListVarName); 938 Data.ListVarName=[Data.ListVarName {'Civ2_U_smooth','Civ2_V_smooth','Civ2_SubRange','Civ2_NbCentres','Civ2_Coord_tps','Civ2_U_tps','Civ2_V_tps'}]; 939 Data.VarDimName=[Data.VarDimName {'nb_vec_2','nb_vec_2',{'nb_coord','nb_bounds','nb_subdomain_2'},{'nb_subdomain_2'},... 940 {'nb_tps_2','nb_coord','nb_subdomain_2'},{'nb_tps_2','nb_subdomain_2'},{'nb_tps_2','nb_subdomain_2'}}]; 941 942 Data.VarAttribute{nbvar+1}.Role='vector_x'; 943 Data.VarAttribute{nbvar+2}.Role='vector_y'; 944 Data.VarAttribute{nbvar+5}.Role='coord_tps'; 945 Data.VarAttribute{nbvar+6}.Role='vector_x'; 946 Data.VarAttribute{nbvar+7}.Role='vector_y'; 947 Data.Civ2_U_smooth=Data.Civ2_U; 948 Data.Civ2_V_smooth=Data.Civ2_V; 949 if isfield(Data,'Civ2_FF') 950 ind_good=find(Data.Civ2_FF==0); 932 % nbvar=length(Data.ListVarName); 933 % Data.ListVarName=[Data.ListVarName {'Civ2_U_smooth','Civ2_V_smooth','Civ2_SubRange','Civ2_NbCentres','Civ2_Coord_tps','Civ2_U_tps','Civ2_V_tps'}]; 934 % Data.VarDimName=[Data.VarDimName {'nb_vec_2','nb_vec_2',{'nb_coord','nb_bounds','nb_subdomain_2'},{'nb_subdomain_2'},... 935 % {'nb_tps_2','nb_coord','nb_subdomain_2'},{'nb_tps_2','nb_subdomain_2'},{'nb_tps_2','nb_subdomain_2'}}]; 936 937 % Data.VarAttribute{nbvar+1}.Role='vector_x'; 938 % Data.VarAttribute{nbvar+2}.Role='vector_y'; 939 % Data.VarAttribute{nbvar+5}.Role='coord_tps'; 940 % Data.VarAttribute{nbvar+6}.Role='vector_x'; 941 % Data.VarAttribute{nbvar+7}.Role='vector_y'; 942 943 if isempty(Civ_FF) 944 ind_good=1:numel(Civ_X); 951 945 else 952 ind_good= 1:numel(Data.Civ2_X);946 ind_good=find(Civ_FF==0); 953 947 end 954 948 if isempty(ind_good) … … 957 951 end 958 952 959 [Data.Civ2_SubRange,Data.Civ2_NbCentres,Data.Civ2_Coord_tps,Data.Civ2_U_tps,Data.Civ2_V_tps,tild,Ures,Vres,tild,FFres]=... 960 filter_tps([Data.Civ2_X(ind_good) Data.Civ2_Y(ind_good)],Data.Civ2_U(ind_good),Data.Civ2_V(ind_good),[],Data.Patch2_SubDomainSize,Data.Patch2_FieldSmooth,Data.Patch2_MaxDiff); 961 Data.Civ2_U_smooth(ind_good)=Ures; 962 Data.Civ2_V_smooth(ind_good)=Vres; 963 Data.Civ2_FF(ind_good)=uint8(4*FFres); 953 [Civ_SubRange,Civ_NbCentres,Civ_Coord_tps,Civ_U_tps,Civ_V_tps,~,Ures,Vres,~,FFres]=... 954 filter_tps([Civ_X_shifted(ind_good) Civ_Y_shifted(ind_good)],Civ_U(ind_good),Civ_V(ind_good),[],Data.Patch2_SubDomainSize,Data.Patch2_FieldSmooth,Data.Patch2_MaxDiff); 955 Civ_U_smooth=Civ_U;% keep the false vectors unchanged 956 Civ_V_smooth=Civ_V; 957 Civ_U_smooth(ind_good)=Ures; 958 Civ_V_smooth(ind_good)=Vres; 959 Civ_FF(ind_good)=uint8(4*FFres); 964 960 Data.CivStage=Data.CivStage+1; 965 961 time_patch2=toc(tstart_patch2); … … 968 964 969 965 %% write result in a netcdf file 966 967 Data.ListVarName={'X','Y','U','V','C','FF'};% cell array containing the names of the fields to record 968 Data.VarDimName={'nb_vec','nb_vec','nb_vec','nb_vec','nb_vec','nb_vec'}; 969 Data.VarAttribute{1}.Role='coord_x'; 970 Data.VarAttribute{2}.Role='coord_y'; 971 Data.VarAttribute{3}.Role='vector_x'; 972 Data.VarAttribute{3}.scale_factor=1/inv_scale_factor; 973 Data.VarAttribute{4}.Role='vector_y'; 974 Data.VarAttribute{4}.scale_factor=1/inv_scale_factor; 975 Data.VarAttribute{5}.Role='ancillary'; 976 Data.VarAttribute{5}.scale_factor=1/inv_scale_factor; 977 Data.VarAttribute{6}.Role='errorflag'; 978 Data.X=uint16(Civ_X); 979 Data.Y=uint16(Civ_Y); 980 Data.U=int16(inv_scale_factor*Civ_U); 981 Data.V=int16(inv_scale_factor*Civ_V); 982 Data.C=uint8(inv_scale_factor*Civ_C); 983 Data.FF=uint8(Civ_FF); 984 if (Param.ActionInput.CheckPatch1 && ~Param.ActionInput.CheckCiv2) ||Param.ActionInput.CheckPatch2 985 nbvar=6; 986 % Data.ListVarName=[Data.ListVarName {'U_smooth','V_smooth','SubRange','NbCentres','Coord_tps','U_tps','V_tps'}]; 987 % Data.VarDimName=[Data.VarDimName {'nb_vec','nb_vec',{'nb_coord','nb_bounds','nb_subdomain'},{'nb_subdomain'},... 988 % {'nb_tps','nb_coord','nb_subdomain'},{'nb_tps','nb_subdomain'},{'nb_tps','nb_subdomain'}}]; 989 Data.ListVarName=[Data.ListVarName {'U_smooth','V_smooth'}]; 990 Data.VarDimName=[Data.VarDimName {'nb_vec','nb_vec'}]; 991 Data.VarAttribute{nbvar+1}.Role='vector_x'; 992 Data.VarAttribute{nbvar+1}.scale_factor=1/inv_scale_factor; 993 Data.VarAttribute{nbvar+2}.Role='vector_y'; 994 Data.VarAttribute{nbvar+2}.scale_factor=1/inv_scale_factor; 995 Data.U_smooth=int16(inv_scale_factor*Civ_U_smooth); 996 Data.V_smooth=int16(inv_scale_factor*Civ_V_smooth); 997 % Data.VarAttribute{nbvar+5}.Role='coord_tps'; 998 % Data.VarAttribute{nbvar+6}.Role='vector_x'; 999 % Data.VarAttribute{nbvar+7}.Role='vector_y'; 1000 % Data.U_smooth=int16(inv_scale_factor*U_smooth); 1001 % Data.V_smooth=int16(inv_scale_factor*V_smooth); 1002 % Data.SubRange=SubRange; 1003 % Data.NbCentres=NbCentres; 1004 % Data.Coord_tps=Coord_tps; 1005 % Data.U_tps=U_tps; 1006 % Data.V_tps=V_tps; 1007 end 1008 % 1009 % if ~isempty(inv_scale_factor) 1010 % Data=compress_data(Data,inv_scale_factor);% compress the data using integers instead of (single precision)floating reals 1011 % end 970 1012 errormsg=struct2nc(ncfile_out,Data); 971 1013 if isempty(errormsg) … … 1074 1116 end 1075 1117 1076 1077 1118 % % --- compress the data using integers instead of (single precision)floating reals 1119 % function DataOut=compress_data(DataIn,inv_scale_factor) 1120 % DataOut=DataIn; %default 1121 % DataOut.Conventions= 'uvmat/civdata/compress'; 1122 % ListVarName=DataIn.ListVarName; 1123 % for ilist=1:numel(ListVarName) 1124 % switch ListVarName{ilist} 1125 % case {'Civ1_C','Civ2_C'} 1126 % DataOut.(ListVarName{ilist})=uint8(inv_scale_factor*DataIn.(ListVarName{ilist})); 1127 % DataOut.VarAttribute{ilist}.scale_factor=1/inv_scale_factor; 1128 % case {'Civ1_U','Civ1_V','Civ2_U','Civ2_V','Civ1_U_smooth','Civ1_V_smooth','Civ2_U_smooth','Civ2_V_smooth'} 1129 % DataOut.(ListVarName{ilist})=int16(inv_scale_factor*DataIn.(ListVarName{ilist})); 1130 % DataOut.VarAttribute{ilist}.scale_factor=1/inv_scale_factor; 1131 % case 'Civ1_X' 1132 % DataOut.Civ1_X=uint16(DataIn.Civ1_X); 1133 % case 'Civ1_Y' 1134 % DataOut.Civ1_Y=uint16(DataIn.Civ1_Y); 1135 % case 'Civ2_X' 1136 % DataOut.Civ2_X=uint16(DataIn.Civ2_X); 1137 % case 'Civ2_Y' 1138 % DataOut.Civ2_Y=uint16(DataIn.Civ2_Y); 1139 % end 1140 % end
Note: See TracChangeset
for help on using the changeset viewer.
