Changeset 1196
- Timestamp:
- Mar 10, 2026, 12:37:44 PM (4 days ago)
- Location:
- trunk/src
- Files:
-
- 11 edited
-
find_file_series.m (modified) (4 diffs)
-
get_field.m (modified) (4 diffs)
-
get_file_info.m (modified) (2 diffs)
-
nc2struct.m (modified) (1 diff)
-
read_civdata.m (modified) (1 diff)
-
read_field.m (modified) (1 diff)
-
series.m (modified) (8 diffs)
-
series/civ_input.m (modified) (6 diffs)
-
series/civ_series.m (modified) (3 diffs)
-
series/merge_proj.m (modified) (18 diffs)
-
uvmat.m (modified) (6 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/find_file_series.m
r1194 r1196 50 50 %% get input root name and info on the input file 51 51 if isempty(regexp(FilePath,'^http://','once'))% case of usual file input 52 fullfileinput=fullfile(FilePath,fileinput);% input file name with path52 fullfileinput=fullfile(FilePath,fileinput);% input file name with path 53 53 else 54 54 fullfileinput=[FilePath '/' fileinput]; % case of web input … … 216 216 217 217 if ~isempty(ind_select) 218 [ tild,ifile_min]=min(ref_ij(ind_select));219 [ tild,tild,tild,tild,tild,tild,tild,tild,NomType]=fileparts_uvmat(ListFiles{ind_select(ifile_min)});% update the representation of indices (number of 0 before the number)218 [~,ifile_min]=min(ref_ij(ind_select)); 219 [~,~,~,~,~,~,~,~,NomType]=fileparts_uvmat(ListFiles{ind_select(ifile_min)});% update the representation of indices (number of 0 before the number) 220 220 NomType=regexprep(NomType,['^' NomTypePref],''); 221 221 %% update the file type if the input file does not exist (pb of 0001) 222 222 if isempty(FileInfo.FileName) 223 [FileInfo,MovieObject]=get_file_info(fullfile(FilePath,ListFiles{i file_min}));223 [FileInfo,MovieObject]=get_file_info(fullfile(FilePath,ListFiles{ind_select(ifile_min)})); 224 224 end 225 225 end … … 293 293 if size(i2_series,3)>1 %pairs i1 -i2 294 294 diff_index=abs(i2_series-i1_series); 295 [ tild,ind_pair]=sort(diff_index,3,'descend');295 [~,ind_pair]=sort(diff_index,3,'descend'); 296 296 for ref_i=1:size(i1_series,1) 297 297 for ref_j=1:size(j1_series,2) … … 305 305 elseif size(j2_series,3)>1 %pairs j1 -j2 306 306 diff_index=abs(j2_series-j1_series); 307 [ tild,ind_pair]=sort(diff_index,3,'descend');307 [~,ind_pair]=sort(diff_index,3,'descend'); 308 308 for ref_i=1:size(i1_series,1) 309 309 for ref_j=1:size(j1_series,2) -
trunk/src/get_field.m
r1195 r1196 115 115 check_singleton(idim)=isequal(Field.DimValue(dim_index),1);%check_singleton=1 for singleton 116 116 end 117 Field.Check0D(ilist)= (isequal(check_singleton,ones(1,NbDim)))||(~isequal(Field.VarType(ilist),4)&&~isequal(Field.VarType(ilist),5)&&~isequal(Field.VarType(ilist),6));% =1 if the variable reduces to a single value117 Field.Check0D(ilist)=isequal(check_singleton,ones(1,NbDim));% =1 if the variable reduces to a single value 118 118 if ~Field.Check0D(ilist) 119 119 Field.Display.VarDimName{ilist}=Field.VarDimName{ilist}(~check_singleton);% eliminate singletons in the list of variable dimensions … … 123 123 Field.VarAttribute={}; 124 124 end 125 if numel(Field.VarAttribute)<NbVar% complement VarAttribute by blan js if neded125 if numel(Field.VarAttribute)<NbVar% complement VarAttribute by blanks if neded 126 126 Field.VarAttribute(numel(Field.VarAttribute)+1:NbVar)=cell(1,NbVar-numel(Field.VarAttribute)); 127 127 end … … 433 433 if ~ischar(VarName) 434 434 %default scalar selection 435 test_coord= zeros(size(Field.Display.VarDimName)); %=1 when variable #ilist is eligible as structured coordiante435 test_coord=false(size(Field.Display.VarDimName)); %=true when variable #ilist is eligible as structured coordinate 436 436 for ilist=1:numel(Field.Display.VarDimName) 437 437 if isfield(Field.Display,'VarAttribute') && numel(Field.Display.VarAttribute)>=ilist && isfield(Field.Display.VarAttribute{ilist},'Role') 438 438 Role=Field.Display.VarAttribute{ilist}.Role; 439 439 if strcmp(Role,'coord_x')||strcmp(Role,'coord_y') 440 test_coord(ilist)= 1;440 test_coord(ilist)=true; 441 441 end 442 442 end 443 443 dimnames=Field.Display.VarDimName{ilist}; %list of dimensions for variable #ilist 444 444 if numel(dimnames)==1 && strcmp(dimnames{1},Field.Display.ListVarName{ilist})%dimension variable 445 test_coord(ilist)= 1;445 test_coord(ilist)=true; 446 446 end 447 447 end … … 529 529 set(handles.Coord_y,'String',ListCoord) 530 530 val_y=1; 531 if strcmp(VarName,ListCoord{1})&& numel(ListCoord)>=2531 if ~isempty(ListCoord) && strcmp(VarName,ListCoord{1})&& numel(ListCoord)>=2 532 532 val_y=2; 533 533 end -
trunk/src/get_file_info.m
r1195 r1196 207 207 [Data,tild,tild,errormsg]=nc2struct(fileinput,[]); 208 208 if isempty(errormsg) 209 if isfield(Data,'Conventions') && ~isempty(find(strcmp(Data.Conventions,{'uvmat/civdata','uvmat/civdata/compress'}), 1)) 209 if isfield(Data,'Conventions') && ismember(Data.Conventions,{'uvmat/civdata','uvmat/civdata/compress'}) 210 if strcmp(Data.Conventions,'uvmat/civdata') 210 211 FileInfo.FileType='civdata'; % test for civ velocity fields 212 else 213 FileInfo.FileType='civdata_compress'; % test for civ velocity fields 214 end 211 215 FileInfo.CivStage=Data.CivStage; 212 216 MaskFile=''; … … 285 289 case {'image','multimage','video','mmreader','rdvision','image_DaVis','cine_phantom','telopsIR'} 286 290 FileInfo.FieldType='image'; 287 case {'civdata',' pivdata_fluidimage'}291 case {'civdata','civdata_compress','pivdata_fluidimage'} 288 292 FileInfo.FieldType='civdata'; 289 293 end 290 294 291 if strcmp(FileInfo.FieldType,'image') || ismember (FileInfo.FileType,{'mat','netcdf','civdata' })295 if strcmp(FileInfo.FieldType,'image') || ismember (FileInfo.FileType,{'mat','netcdf','civdata','civdata_compress'}) 292 296 FileInfo.FileIndexing='on'; % allow to detect file index for scanning series 293 297 else -
trunk/src/nc2struct.m
r1195 r1196 282 282 Data.(VarName)=squeeze(Data.(VarName));%remove singeton dimension 283 283 else 284 disp(VarName)285 xtype(var_index(ivar))284 % disp(VarName) 285 % xtype(var_index(ivar)) 286 286 Data.(VarName)=netcdf.getVar(nc,var_index(ivar)-1); %read the whole variable data 287 end 288 Data.(VarName)=double(Data.(VarName)); %transform all variables to double pecision 287 end 288 if xtype(var_index(ivar))==5 %single precision 289 Data.(VarName)=double(Data.(VarName)); %transform all variables to double pecision 290 end 291 % Data.(VarName)=double(Data.(VarName)); %transform all variables to double pecision 289 292 if isfield(Data,'VarAttribute') && numel(Data.VarAttribute)>=ivar && isfield(Data.VarAttribute{ivar},'scale_factor') 290 Data.(VarName)=Data.VarAttribute{ivar}.scale_factor * Data.(VarName);293 Data.(VarName)=Data.VarAttribute{ivar}.scale_factor *double(Data.(VarName)); 291 294 end 292 295 end -
trunk/src/read_civdata.m
r1195 r1196 121 121 end 122 122 if strcmp(Data.Conventions,'uvmat/civdata/compress') 123 Field.X= Field.X-0.5+Field.U/2;% shift to the convected position124 Field.Y= Field.Y-0.5+Field.V/2;123 Field.X=double(Field.X)-0.5+Field.U/2;% shift to the convected position 124 Field.Y=double(Field.Y)-0.5+Field.V/2; 125 125 end 126 126 switch VelTypeOut -
trunk/src/read_field.m
r1195 r1196 81 81 %% distingush different input file types 82 82 switch FileType 83 case {'civdata','civdata_ 3D'}% format for civ results83 case {'civdata','civdata_compress','civdata_3D'}% format for civ results 84 84 [Field,ParamOut.VelType,errormsg]=read_civdata(FileName,InputField,ParamIn.VelType,frame_index); 85 85 if ~isempty(errormsg),errormsg=['read_civdata / ' errormsg];return,end -
trunk/src/series.m
r1195 r1196 609 609 else 610 610 [XmlFileName,Rank]=find_imadoc(InputTable{iview,1},InputTable{iview,2}); 611 if ~isempty(XmlFileName) && Rank==0611 if ~isempty(XmlFileName) 612 612 XmlData=read_imadoc(XmlFileName); 613 if ~isempty(XmlData.FileSeries)613 if Rank==0 && ~isempty(XmlData.FileSeries) 614 614 set(handles.Relabel,'Visible','on') 615 615 answer='Yes'; … … 637 637 end 638 638 [Param.FileInfo,VideoObject]=get_file_info(FirstFile); 639 else 640 set(handles.Relabel,'Value',0) 639 641 end 640 642 end 641 643 Param.XmlData=XmlData; 642 else643 set(handles.Relabel,'Value',0)644 644 end 645 645 end … … 1086 1086 nbfield=nbfield-1; %remove the possible index 0 1087 1087 nbfield_j=nbfield_j-1; %remove the possible index 0 1088 MaxIndex_i=get(handles.MaxIndex_i,'Data'); 1089 MaxIndex_j=get(handles.MaxIndex_j,'Data'); 1090 MaxIndex_i(1,:)=nbfield; 1091 MaxIndex_j(1,:)=nbfield_j; 1092 MinIndex_i(1,:)=1; 1093 MinIndex_j(1,:)=1; 1088 % MaxIndex_i=get(handles.MaxIndex_i,'Data'); 1089 % MaxIndex_j=get(handles.MaxIndex_j,'Data'); 1090 % MaxIndex_i(1,:)=nbfield; 1091 % MaxIndex_j(1,:)=nbfield_j; 1092 % MinIndex_i(1,:)=1; 1093 % MinIndex_j(1,:)=1; 1094 MaxIndex_i=nbfield; 1095 MaxIndex_j=nbfield_j; 1096 MinIndex_i=1; 1097 MinIndex_j=1; 1098 1094 1099 1095 1100 first_i=str2double(get(handles.num_first_i,'String')); … … 2601 2606 iview_netcdf=[]; 2602 2607 for iview=1:numel(SeriesData.FileInfo) 2603 if strcmp(SeriesData.FileInfo{iview}.FileType,'civx')||strcmp(SeriesData.FileInfo{iview}.FileType,'civdata')2604 iview_civ=[iview_civiview];2605 iview_netcdf=[iview_netcdf iview];% all nc files, icluding civ2606 elseif strcmp(SeriesData.FileInfo{iview}.FileType,'netcdf')2607 iview_netcdf=[iview_netcdf iview];2608 if ismember(SeriesData.FileInfo{iview}.FileType,{'civx','civdata','civdata_compress','netcdf'}) 2609 iview_netcdf=[iview_netcdf iview]; 2610 if ismember(SeriesData.FileInfo{iview}.FileType,{'civx','civdata','civdata_compress'}) 2611 iview_civ=[iview_civ iview]; 2612 end 2608 2613 end 2609 2614 end … … 2612 2617 if ~iscell(FieldList),FieldList={FieldList};end 2613 2618 FieldList_1=get(handles.FieldName_1,'String'); % previous list as default 2614 if ~iscell(FieldList_1),FieldList_1={FieldList_1};end2619 % if ~iscell(FieldList_1),FieldList_1={FieldList_1};end 2615 2620 CheckPivData_1=0; % indicate whether FieldName_1 has been updated with civ data, 0 by default 2616 2621 handles_coord=[handles.Coord_x handles.Coord_y handles.Coord_z handles.Coord_x_title handles.Coord_y_title handles.Coord_z_title]; … … 2977 2982 field_index=get(handles.FieldName,'Value'); 2978 2983 field=FieldListInit{field_index(1)}; 2979 if isequal(field,'add_field...')2984 if strcmp(field,'add_field...') 2980 2985 FieldListInit(field_index(1))=[]; 2981 2986 SeriesData=get(handles.series,'UserData'); … … 2984 2989 end 2985 2990 % input line for which the field choice is relevant 2986 iview=find(ismember(FileType,{'netcdf','civx','civdata' })); % all nc files, icluding civ2991 iview=find(ismember(FileType,{'netcdf','civx','civdata','civdata_compress'})); % all nc files, icluding civ 2987 2992 hget_field=findobj(allchild(0),'name','get_field'); 2988 2993 if ~isempty(hget_field) … … 3861 3866 %------------------------------------------------------------------------ 3862 3867 % --- set the visibility of relevant velocity type menus: 3863 function menu=set_veltype_display(Civ ,FileType)3868 function menu=set_veltype_display(CivStage,FileType) 3864 3869 %------------------------------------------------------------------------ 3865 3870 if ~exist('FileType','var') 3866 3871 FileType='civx'; 3867 3872 end 3873 imin=1; 3868 3874 switch FileType 3869 3875 case 'civx' 3870 3876 menu={'civ1';'interp1';'filter1';'civ2';'interp2';'filter2'}; 3871 if isequal(Civ ,0)3877 if isequal(CivStage,0) 3872 3878 imax=0; 3873 elseif isequal(Civ ,1) || isequal(Civ,2)3879 elseif isequal(CivStage,1) || isequal(CivStage,2) 3874 3880 imax=1; 3875 elseif isequal(Civ ,3)3881 elseif isequal(CivStage,3) 3876 3882 imax=3; 3877 elseif isequal(Civ ,4) || isequal(Civ,5)3883 elseif isequal(CivStage,4) || isequal(CivStage,5) 3878 3884 imax=4; 3879 elseif isequal(Civ ,6) %patch23885 elseif isequal(CivStage,6) %patch2 3880 3886 imax=6; 3881 3887 end 3882 case 'civdata'3888 case {'civdata','civdata_compress'} 3883 3889 menu={'civ1';'filter1';'civ2';'filter2'}; 3884 if isequal(Civ ,0)3890 if isequal(CivStage,0) 3885 3891 imax=0; 3886 elseif isequal(Civ ,1) || isequal(Civ,2)3892 elseif isequal(CivStage,1) || isequal(CivStage,2) 3887 3893 imax=1; 3888 elseif isequal(Civ ,3)3894 elseif isequal(CivStage,3) 3889 3895 imax=2; 3890 elseif isequal(Civ ,4) || isequal(Civ,5)3896 elseif isequal(CivStage,4) || isequal(CivStage,5) 3891 3897 imax=3; 3892 else%if isequal(Civ ,6) %patch23898 else%if isequal(CivStage,6) %patch2 3893 3899 imax=4; 3894 3900 end 3895 end 3896 menu=menu(1:imax); 3901 if strcmp(FileType,'civdata_compress') && CivStage>=4 3902 imin=CivStage-3; 3903 end 3904 end 3905 menu=menu(imin:imax); 3897 3906 3898 3907 -
trunk/src/series/civ_input.m
r1188 r1196 186 186 % CoordUnit='';%default 187 187 % pxcm_search=1; 188 if isfield(SeriesData,'Time') && numel(SeriesData.Time')>=1 && ~isempty(SeriesData.Time{1})188 if isfield(SeriesData,'Time') && numel(SeriesData.Time')>=1 && ~isempty(SeriesData.Time{1}) 189 189 time=SeriesData.Time{1}; 190 190 end … … 192 192 TimeUnit=Param.IndexRange.TimeUnit; 193 193 end 194 % if isfield(SeriesData,'GeometryCalib')195 % tsai=SeriesData.GeometryCalib;196 % if isfield(tsai,'fx_fy')197 % pxcm_search=max(tsai.fx_fy(1),tsai.fx_fy(2));%pixels:cm estimated for the search range198 % end199 % if isfield(tsai,'CoordUnit')200 % CoordUnit=tsai.CoordUnit;201 % end202 % end203 194 204 195 %% timing display … … 249 240 set(handles.(ListOptions{index}),'value',0) 250 241 fill_civ_input(Data,handles); %fill civ_input with the parameters retrieved from an input Civ file 242 if index<=3 243 set(handles.(ListOptions{index}),'Visible','off') 244 PanelTag=regexprep(ListOptions{index},'Check','') 245 set(handles.(PanelTag),'Visible','off') 246 end 251 247 end 252 248 if isempty(FileInfo) … … 259 255 set(handles.(ListOptions{index}),'String',regexprep(ListOptions{index},'Check','redo ')) 260 256 end 261 % for index = ind_opening+1:6262 % set(handles.(ListOptions{index}),'value',1)263 % end264 257 set(handles.CheckCiv3,'Visible','off')% make visible the switch 'iterate/repet' for Civ2. 265 set(handles.CheckCiv3,'Value',0)% select'iterate/repet' by default266 else 258 %set(handles.CheckCiv3,'Value',0)% select'iterate/repet' by default 259 else %civ3 proposed 267 260 for index = 1:3 268 261 set(handles.(ListOptions{index}),'value',0) … … 273 266 set(handles.CheckCiv3,'Visible','on')% make visible the switch 'iterate/repet' for Civ2. 274 267 set(handles.CheckCiv3,'Value',1)% select'iterate/repet' by default 268 set(handles.CheckCiv3,'String',{'civ3'})% select'iterate/repet' by default 275 269 end 276 270 checkrefresh=1; … … 631 625 for ilist=1:length(options) 632 626 if checkbox(ilist) 633 % set(handles.(options{ilist}),'Visible','on')634 627 set(handles.(options{ilist}),'Enable','on') 635 % set(handles.(['Check' options{ilist}]),'Strin636 628 else 637 % set(handles.(options{ilist}),'Visible','off')638 629 set(handles.(options{ilist}),'Enable','off') 639 630 end -
trunk/src/series/civ_series.m
r1195 r1196 974 974 Data.VarAttribute{4}.scale_factor=1/inv_scale_factor; 975 975 Data.VarAttribute{5}.Role='ancillary'; 976 Data.VarAttribute{5}.scale_factor=1/ inv_scale_factor;976 Data.VarAttribute{5}.scale_factor=1/100;%scla factor for correlation 977 977 Data.VarAttribute{6}.Role='errorflag'; 978 978 Data.X=uint16(Civ_X); … … 980 980 Data.U=int16(inv_scale_factor*Civ_U); 981 981 Data.V=int16(inv_scale_factor*Civ_V); 982 Data.C=uint8( inv_scale_factor*Civ_C);982 Data.C=uint8(100*Civ_C); 983 983 Data.FF=uint8(Civ_FF); 984 % add smoothed field if ptch is done 984 985 if (Param.ActionInput.CheckPatch1 && ~Param.ActionInput.CheckCiv2) ||Param.ActionInput.CheckPatch2 985 986 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 987 Data.ListVarName=[Data.ListVarName {'U_smooth','V_smooth'}]; 990 988 Data.VarDimName=[Data.VarDimName {'nb_vec','nb_vec'}]; … … 995 993 Data.U_smooth=int16(inv_scale_factor*Civ_U_smooth); 996 994 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 995 end 1012 996 errormsg=struct2nc(ncfile_out,Data); 1013 997 if isempty(errormsg) -
trunk/src/series/merge_proj.m
r1194 r1196 92 92 msgbox_uvmat('WARNING',['the first input file ' FirstFileName ' does not exist']) 93 93 end 94 VelocityRange=[];%default 95 VelGradientRange=[];%default 96 if isfield(Param,'ActionInput') 97 if isfield(Param.ActionInput,'VelocityRange') 98 VelocityRange= Param.ActionInput.VelocityRange; 99 end 100 if isfield(Param.ActionInput,'VelGradientRange') 101 VelGradientRange= Param.ActionInput.VelGradientRange; 102 end 103 end 104 prompt = {'velocity range (max modulus) for 16 bit integer records (32 bit reals if empty)';... 105 'range (max modulus) for vel derivatives (curl, div...) for 16 bit integer records (32 bit reals if empty)'}; 106 dlg_title = 'set scale_factor for result writing as 16 bit integer (instead of 32 bit reals by default)'; 107 num_lines= 2; 108 def = { num2str(VelocityRange),num2str(VelGradientRange)}; 109 answer = inputdlg(prompt,dlg_title,num_lines,def); 110 if isempty(answer) 111 return 112 end 113 ParamOut.ActionInput.VelocityRange=str2num(answer{1}); 114 ParamOut.ActionInput.VelGradientRange=str2num(answer{2}); 94 115 return 95 116 end … … 109 130 WaitbarHandle=findobj(hseries,'Tag','Waitbar');%handle of waitbar in GUI series 110 131 end 132 scale_factor_inv_uv=[]; 133 if isfield(Param.ActionInput,'VelocityRange') && ~isempty(Param.ActionInput.VelocityRange) 134 scale_factor_inv_uv=floor(32767/Param.ActionInput.VelocityRange); 135 end 136 scale_factor_inv_dudv=[]; 137 if isfield(Param.ActionInput,'VelGradientRange') && ~isempty(Param.ActionInput.VelGradientRange) 138 scale_factor_inv_dudv=floor(32767/Param.ActionInput.VelGradientRange); 139 end 111 140 112 141 %% define the directory for result file (with path=RootPath{1}) … … 139 168 140 169 %% determine the file type on each line from the first input file 141 NcTypeOptions={'netcdf','civx','civdata','pivdata_fluidimage'}; 170 NcTypeOptions={'netcdf','civx','civdata','civdata_compress','pivdata_fluidimage'}; 171 frame_index=cell(NbView,1);FileInfo=cell(NbView,1);MovieObject=cell(NbView,1);ParamIn=cell(NbView,1); 172 FileType=cell(NbView,1);CheckImage=zeros(NbView,1);CheckNc=zeros(NbView,1); 142 173 for iview=1:NbView 143 174 if ~exist(filecell{iview,1}','file') … … 150 181 FileType{iview}='netcdf'; 151 182 end 152 CheckImage {iview}=strcmp(FileInfo{iview}.FieldType,'image');% =1 for images153 if CheckImage {iview}183 CheckImage(iview)=strcmp(FileInfo{iview}.FieldType,'image');% =1 for images 184 if CheckImage(iview) 154 185 ParamIn{iview}=MovieObject{iview}; 155 186 else 156 187 ParamIn{iview}=Param.InputFields; 157 188 end 158 CheckNc {iview}=~isempty(find(strcmp(FileType{iview},NcTypeOptions)));% =1 for netcdf files189 CheckNc(iview)=ismember(FileType{iview},NcTypeOptions);% =1 for netcdf files 159 190 if ~isempty(j1_series{iview}) 160 191 frame_index{iview}=j1_series{iview}; … … 163 194 end 164 195 end 165 if NbView >1 && max( cell2mat(CheckImage))>0 && ~isfield(Param,'ProjObject')196 if NbView >1 && max(CheckImage)>0 && ~isfield(Param,'ProjObject') 166 197 disp_uvmat('ERROR','projection on a common grid is needed to concatene images: use a Projection Object of type ''plane'' with ProjMode=''interp_lin''',checkrun) 167 198 return … … 201 232 end 202 233 end 203 %%%%%%%%%%%% END STANDARD PART %%%%%%%%%%%%204 % EDIT FROM HERE205 234 206 235 %% check the validity of input file types 207 for iview=1:NbView 208 if ~isequal(CheckImage{iview},1)&&~isequal(CheckNc{iview},1) 209 disp_uvmat('ERROR','input set of input series: need either netcdf either image series',checkrun) 236 if ~(CheckImage | CheckNc) 237 disp_uvmat('ERROR',' netcdf or image series needed as input',checkrun) 210 238 return 211 end212 239 end 213 240 214 241 %% output file type 215 if min( cell2mat(CheckImage))==1 && (~Param.CheckObject || strcmp(Param.ProjObject.Type,'plane'))242 if min(CheckImage)==1 && (~Param.CheckObject || strcmp(Param.ProjObject.Type,'plane')) 216 243 FileExtOut='.png'; %image output (input and proj result = image) 217 244 else 218 245 FileExtOut='.nc'; %netcdf output 219 246 end 220 if isempty(j1_series{1}) 247 if isempty(j1_series{1})||max(j1_series{1})==1 221 248 NomTypeOut='_1'; 222 249 else … … 232 259 233 260 234 %% Set field names and velocity types235 %use Param.InputFields for all views236 237 261 %% MAIN LOOP ON FIELDS 238 %%%%%%%%%%%%% STANDARD PART (DO NOT EDIT) %%%%%%%%%%%%239 262 240 263 %%%%%%%%%%%%%%%% loop on field indices %%%%%%%%%%%%%%%% … … 261 284 end 262 285 j1=1; 263 j2=1;264 286 if ~isempty(j1_series{1}) 265 287 j1=j1_series{1}(index); … … 277 299 for iview=1:NbView 278 300 %% reading input file(s) 279 [Data{iview}, tild,errormsg] = read_field(filecell{iview,index},FileType{iview},ParamIn{iview},frame_index{iview}(index));301 [Data{iview},~,errormsg] = read_field(filecell{iview,index},FileType{iview},ParamIn{iview},frame_index{iview}(index)); 280 302 if isempty(errormsg) 281 303 disp([filecell{iview,index} ' read OK']) … … 307 329 308 330 %% calculate tps coefficients if needed 309 310 check_proj_tps= strcmp(FileType{iview},'civdata') && isfield(Param,'ProjObject')&&~isempty(Param.ProjObject)... 331 check_proj_tps= ismember(FileType{iview},{'civdata','civdata_compress'}) && isfield(Param,'ProjObject')&&~isempty(Param.ProjObject)... 311 332 && strcmp(Param.ProjObject.ProjMode,'interp_tps')&&~isfield(Data{iview},'Coord_tps'); 312 333 if check_proj_tps 313 Data{iview}=tps_coeff_field(Data{iview},check_proj_tps);334 Data{iview}=tps_coeff_field(Data{iview},check_proj_tps); 314 335 end 315 336 … … 326 347 if Param.CheckMask % introduce multilevel mask like for civ 327 348 NbSlice=Param.MaskTable{iview,2}; 328 [RootPath_mask,SubDir_mask,RootFile_mask, i1_mask,i2_mask,j1_mask,j2_mask,Ext_mask]=fileparts_uvmat(Param.MaskTable{iview,1});349 [RootPath_mask,SubDir_mask,RootFile_mask,~,~,~,~,Ext_mask]=fileparts_uvmat(Param.MaskTable{iview,1}); 329 350 i1_mask=mod(i1-1,NbSlice)+1; 330 351 maskname=fullfile_uvmat(RootPath_mask,SubDir_mask,RootFile_mask,Ext_mask,'_1',i1_mask); … … 334 355 [MaskData,~,errormsg] = read_field(maskname,'image'); 335 356 if ~isempty(NbSlice_calib) 336 MaskData.ZIndex=mod(i1_series{iview}(index)-1,NbSlice_calib{iview})+1;%Zindex for phys transform337 end357 MaskData.ZIndex=mod(i1_series{iview}(index)-1,NbSlice_calib{iview})+1;%Zindex for phys transform 358 end 338 359 if ~isempty(transform_fct) && nargin(transform_fct)>=2 339 360 MaskData=transform_fct(MaskData,XmlData{iview}); … … 351 372 else 352 373 MergeData=transform_fct(Data{1},XmlData{1},Data{2}); %combine the two input file series 353 % else354 % MergeData=transform_fct(Data{1},XmlData{1},Data{2},XmlData{2});%combine the two input file series with calibration parameters355 374 end 356 375 if ~isempty(errormsg) … … 362 381 if ~isempty(time) 363 382 timeread=time(index); 364 elseif ~isempty(find(timeread ))% time defined from ImaDoc383 elseif ~isempty(find(timeread, 1))% time defined from ImaDoc 365 384 timeread=mean(timeread(timeread~=0));% take average over times form the files (when defined) 366 385 else … … 372 391 if strcmp(FileExtOut,'.png') %output as image 373 392 if index==1 374 if strcmp(class(MergeData.A),'uint8')375 BitDepth=8;393 if isa(MergeData.A,'uint8') 394 BitDepth=8; 376 395 else 377 BitDepth=16;396 BitDepth=16; 378 397 end 379 398 %write xml calibration file, using the first file … … 429 448 MergeData.Time=timeread; 430 449 end 431 % position of projection plane 450 % position of projection plane 432 451 if isfield(Data{1},'ProjObjectCoord')&& isfield(Data{1},'ProjObjectAngle') 433 452 ProjObjectCoord=Data{1}.ProjObjectCoord; … … 471 490 end 472 491 end 492 if ~isempty(scale_factor_inv_uv) 493 index_U=find(strcmp(MergeData.ListVarName,'U')); 494 if ~isempty(index_U) 495 MergeData.VarAttribute{index_U}.scale_factor=1/scale_factor_inv_uv; 496 MergeData.U=int16(scale_factor_inv_uv*MergeData.U); 497 end 498 index_V=find(strcmp(MergeData.ListVarName,'V')); 499 if ~isempty(index_V) 500 MergeData.VarAttribute{index_V}.scale_factor=1/scale_factor_inv_uv; 501 MergeData.V=int16(scale_factor_inv_uv*MergeData.V); 502 end 503 end 504 if ~isempty(scale_factor_inv_dudv) 505 index_var=find(strcmp(MergeData.ListVarName,'curl')); 506 if ~isempty(index_var) 507 MergeData.VarAttribute{index_var}.scale_factor=1/scale_factor_inv_dudv; 508 MergeData.curl=int16(scale_factor_inv_uv*MergeData.curl); 509 end 510 index_var=find(strcmp(MergeData.ListVarName,'div')); 511 if ~isempty(index_var) 512 MergeData.VarAttribute{index_var}.scale_factor=1/scale_factor_inv_dudv; 513 MergeData.div=int16(scale_factor_inv_dudv*MergeData.div); 514 end 515 end 473 516 error=struct2nc(OutputFile,MergeData);%save result file 474 517 if isempty(error) … … 495 538 NbView=length(Data); 496 539 if NbView==1% if there is only one field, just reproduce it in MergeData 497 return 540 return 498 541 end 499 542 -
trunk/src/uvmat.m
r1192 r1196 298 298 UvData.Field.coord_x=[0.5 size(input,2)-0.5]; 299 299 UvData.Field.coord_y=[size(input,1)-0.5 0.5]; 300 testinputfield=1;300 %testinputfield=1; 301 301 end 302 302 else … … 4439 4439 end 4440 4440 4441 4441 4442 %% extract the fields to use 4442 4443 % eliminate false data if relevant (false flag FF exists) … … 4488 4489 end 4489 4490 end 4490 %unit 4491 units=[]; %default 4492 for ivar=1:numel(Field.ListVarName) 4493 if strcmp(Field.ListVarName{ivar},FieldName) 4494 if isfield(Field,'VarAttribute') && numel(Field.VarAttribute)>=ivar && isfield(Field.VarAttribute{ivar},'units') 4495 units=Field.VarAttribute{ivar}.units; 4496 break 4497 end 4491 units=''; scale_factor=NaN; %default 4492 %determine the bin size for histogram 4493 FieldIndex=find(strcmp(FieldName,Field.ListVarName)); 4494 if isfield(Field,'VarAttribute') && numel(Field.VarAttribute)>=FieldIndex 4495 if isfield(Field.VarAttribute{FieldIndex},'units') 4496 units=Field.VarAttribute{FieldIndex}.units; 4497 end 4498 if isfield(UvData.Field.VarAttribute{FieldIndex},'scale_factor') 4499 scale_factor=UvData.Field.VarAttribute{FieldIndex}.scale_factor; 4498 4500 end 4499 4501 end … … 4503 4505 Histo.VarAttribute{1}.units=units; 4504 4506 end 4505 VarMesh=(Amax-Amin)/100; 4506 ord=10^(floor(log10(VarMesh)));%order of magnitude 4507 if VarMesh/ord >=5 4508 VarMesh=5*ord; 4509 elseif VarMesh/ord >=2 4510 VarMesh=2*ord; 4507 %determine the bin size for histogram 4508 if isa(FieldHisto,'integer') 4509 VarMesh=max(1,(Amax-Amin)/100); 4510 elseif (Amax-Amin)/scale_factor<100 4511 VarMesh=scale_factor;% take the integer mesh used to store the field 4511 4512 else 4512 VarMesh=ord; 4513 end 4514 Amin=VarMesh*(ceil(Amin/VarMesh)); 4515 Amax=VarMesh*(floor(Amax/VarMesh)); 4513 VarMesh=(Amax-Amin)/100; 4514 ord=10^(floor(log10(VarMesh)));%order of magnitude 4515 if VarMesh/ord >=5 4516 VarMesh=5*ord; 4517 elseif VarMesh/ord >=2 4518 VarMesh=2*ord; 4519 else 4520 VarMesh=ord; 4521 end 4522 Amin=VarMesh*(ceil(Amin/VarMesh)); 4523 Amax=VarMesh*(floor(Amax/VarMesh)); 4524 end 4516 4525 Histo.(FieldName)=Amin:VarMesh:Amax; %absissa values for histo 4517 4526 if isfield(Field,'NbDim') && isequal(Field.NbDim,3) … … 4521 4530 for col=1:size(FieldHisto,3) 4522 4531 B=FieldHisto(:,:,col); 4523 C=reshape(double(B),1,nxy(1)*nxy(2));% reshape in a vector 4532 C=reshape(B,1,nxy(1)*nxy(2));% reshape in a vector 4533 4524 4534 Histo.histo(:,col)=hist(C, Histo.(FieldName)); %calculate histogram 4535 % Histo.histo(:,col)=histogram(C); %calculate histogram 4525 4536 switch get(handles.LogLinHisto,'Value') 4526 4537 case 1 4527 4538 PlotParam.Type='plot'; 4528 4539 case 2 4529 PlotParam.Type='semilogy';4540 PlotParam.Type='semilogy'; 4530 4541 case 3 4531 PlotParam.Type='semilogx';4542 PlotParam.Type='semilogx'; 4532 4543 case 4 4533 PlotParam.Type='loglog';4544 PlotParam.Type='loglog'; 4534 4545 end 4535 4546 end … … 5180 5191 imax=6; 5181 5192 end 5182 case {'civdata','civdata_ 3D','pivdata_fluidimage'}5193 case {'civdata','civdata_compress','civdata_3D','pivdata_fluidimage'} 5183 5194 menu={'civ1';'filter1';'civ2';'filter2'}; 5184 5195 imax=[0 1 1 2 3 3 4 5 5 6]; 5185 5196 imax=imax(min(CivStage+1,10)); 5197 if strcmp(FileType,'civdata_compress')&& CivStage>=4 5198 imin=3; 5199 end 5186 5200 end 5187 5201 menu=menu(imin:imax);
Note: See TracChangeset
for help on using the changeset viewer.
