Changeset 1196


Ignore:
Timestamp:
Mar 10, 2026, 12:37:44 PM (4 days ago)
Author:
sommeria
Message:

bugs repaired

Location:
trunk/src
Files:
11 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/find_file_series.m

    r1194 r1196  
    5050%% get input root name and info on the input file
    5151if isempty(regexp(FilePath,'^http://','once'))% case of usual file input
    52 fullfileinput=fullfile(FilePath,fileinput);% input file name with path
     52  fullfileinput=fullfile(FilePath,fileinput);% input file name with path
    5353else
    5454  fullfileinput=[FilePath '/' fileinput]; % case of web input
     
    216216       
    217217        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)
    220220            NomType=regexprep(NomType,['^' NomTypePref],'');
    221221            %% update the file type if the input file does not exist (pb of 0001)
    222222            if isempty(FileInfo.FileName)
    223                 [FileInfo,MovieObject]=get_file_info(fullfile(FilePath,ListFiles{ifile_min}));
     223                [FileInfo,MovieObject]=get_file_info(fullfile(FilePath,ListFiles{ind_select(ifile_min)}));
    224224            end
    225225        end
     
    293293if size(i2_series,3)>1 %pairs i1 -i2
    294294    diff_index=abs(i2_series-i1_series);
    295     [tild,ind_pair]=sort(diff_index,3,'descend');
     295    [~,ind_pair]=sort(diff_index,3,'descend');
    296296    for ref_i=1:size(i1_series,1)
    297297        for ref_j=1:size(j1_series,2)
     
    305305elseif size(j2_series,3)>1 %pairs j1 -j2
    306306    diff_index=abs(j2_series-j1_series);
    307     [tild,ind_pair]=sort(diff_index,3,'descend');
     307    [~,ind_pair]=sort(diff_index,3,'descend');
    308308    for ref_i=1:size(i1_series,1)
    309309        for ref_j=1:size(j1_series,2)
  • trunk/src/get_field.m

    r1195 r1196  
    115115        check_singleton(idim)=isequal(Field.DimValue(dim_index),1);%check_singleton=1 for singleton
    116116    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 value
     117    Field.Check0D(ilist)=isequal(check_singleton,ones(1,NbDim));% =1 if the variable reduces to a single value
    118118    if ~Field.Check0D(ilist)
    119119    Field.Display.VarDimName{ilist}=Field.VarDimName{ilist}(~check_singleton);% eliminate singletons in the list of variable dimensions
     
    123123    Field.VarAttribute={};
    124124end
    125 if numel(Field.VarAttribute)<NbVar% complement VarAttribute by blanjs if neded
     125if numel(Field.VarAttribute)<NbVar% complement VarAttribute by blanks if neded
    126126    Field.VarAttribute(numel(Field.VarAttribute)+1:NbVar)=cell(1,NbVar-numel(Field.VarAttribute));
    127127end
     
    433433        if ~ischar(VarName)     
    434434            %default scalar selection
    435             test_coord=zeros(size(Field.Display.VarDimName)); %=1 when variable #ilist is eligible as structured coordiante
     435            test_coord=false(size(Field.Display.VarDimName)); %=true when variable #ilist is eligible as structured coordinate
    436436            for ilist=1:numel(Field.Display.VarDimName)
    437437                if isfield(Field.Display,'VarAttribute') && numel(Field.Display.VarAttribute)>=ilist && isfield(Field.Display.VarAttribute{ilist},'Role')
    438438                    Role=Field.Display.VarAttribute{ilist}.Role;
    439439                    if strcmp(Role,'coord_x')||strcmp(Role,'coord_y')
    440                         test_coord(ilist)=1;
     440                        test_coord(ilist)=true;
    441441                    end
    442442                end
    443443                dimnames=Field.Display.VarDimName{ilist}; %list of dimensions for variable #ilist
    444444                if numel(dimnames)==1 && strcmp(dimnames{1},Field.Display.ListVarName{ilist})%dimension variable
    445                     test_coord(ilist)=1;
     445                    test_coord(ilist)=true;
    446446                end
    447447            end
     
    529529set(handles.Coord_y,'String',ListCoord)
    530530val_y=1;
    531 if strcmp(VarName,ListCoord{1})&& numel(ListCoord)>=2
     531if ~isempty(ListCoord) && strcmp(VarName,ListCoord{1})&& numel(ListCoord)>=2
    532532    val_y=2;
    533533end
  • trunk/src/get_file_info.m

    r1195 r1196  
    207207                        [Data,tild,tild,errormsg]=nc2struct(fileinput,[]);
    208208                        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')
    210211                                FileInfo.FileType='civdata'; % test for civ velocity fields
     212                               else
     213                                   FileInfo.FileType='civdata_compress'; % test for civ velocity fields
     214                               end
    211215                                FileInfo.CivStage=Data.CivStage;
    212216                                MaskFile='';
     
    285289    case {'image','multimage','video','mmreader','rdvision','image_DaVis','cine_phantom','telopsIR'}
    286290        FileInfo.FieldType='image';
    287     case {'civdata','pivdata_fluidimage'}
     291    case {'civdata','civdata_compress','pivdata_fluidimage'}
    288292        FileInfo.FieldType='civdata';
    289293end
    290294
    291 if strcmp(FileInfo.FieldType,'image') || ismember (FileInfo.FileType,{'mat','netcdf','civdata'})
     295if strcmp(FileInfo.FieldType,'image') || ismember (FileInfo.FileType,{'mat','netcdf','civdata','civdata_compress'})
    292296    FileInfo.FileIndexing='on'; % allow to detect file index for scanning series
    293297else
  • trunk/src/nc2struct.m

    r1195 r1196  
    282282            Data.(VarName)=squeeze(Data.(VarName));%remove singeton dimension
    283283        else
    284                        disp(VarName)
    285            xtype(var_index(ivar))
     284%                        disp(VarName)
     285%            xtype(var_index(ivar))
    286286            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
    289292        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));
    291294        end
    292295    end
  • trunk/src/read_civdata.m

    r1195 r1196  
    121121end
    122122if strcmp(Data.Conventions,'uvmat/civdata/compress')
    123     Field.X=Field.X-0.5+Field.U/2;% shift to the convected position
    124     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;
    125125end
    126126switch VelTypeOut
  • trunk/src/read_field.m

    r1195 r1196  
    8181%% distingush different input file types
    8282switch FileType
    83     case {'civdata','civdata_3D'}% format for civ results
     83    case {'civdata','civdata_compress','civdata_3D'}% format for civ results
    8484        [Field,ParamOut.VelType,errormsg]=read_civdata(FileName,InputField,ParamIn.VelType,frame_index);
    8585        if ~isempty(errormsg),errormsg=['read_civdata / ' errormsg];return,end
  • trunk/src/series.m

    r1195 r1196  
    609609    else
    610610        [XmlFileName,Rank]=find_imadoc(InputTable{iview,1},InputTable{iview,2});
    611         if ~isempty(XmlFileName) && Rank==0
     611        if ~isempty(XmlFileName)
    612612            XmlData=read_imadoc(XmlFileName);
    613             if ~isempty(XmlData.FileSeries)
     613            if  Rank==0 && ~isempty(XmlData.FileSeries)
    614614                set(handles.Relabel,'Visible','on')
    615615                answer='Yes';
     
    637637                    end
    638638                    [Param.FileInfo,VideoObject]=get_file_info(FirstFile);
     639                else
     640                    set(handles.Relabel,'Value',0)
    639641                end
    640642            end
    641643            Param.XmlData=XmlData;
    642         else
    643             set(handles.Relabel,'Value',0)
    644644        end
    645645    end
     
    10861086        nbfield=nbfield-1; %remove the possible index 0
    10871087        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
    10941099
    10951100        first_i=str2double(get(handles.num_first_i,'String'));
     
    26012606iview_netcdf=[];
    26022607for iview=1:numel(SeriesData.FileInfo)
    2603     if strcmp(SeriesData.FileInfo{iview}.FileType,'civx')||strcmp(SeriesData.FileInfo{iview}.FileType,'civdata')
    2604       iview_civ=[iview_civ iview];
    2605       iview_netcdf=[iview_netcdf iview];% all nc files, icluding civ
    2606     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
    26082613    end
    26092614end
     
    26122617if ~iscell(FieldList),FieldList={FieldList};end
    26132618FieldList_1=get(handles.FieldName_1,'String'); % previous list as default
    2614 if ~iscell(FieldList_1),FieldList_1={FieldList_1};end
     2619% if ~iscell(FieldList_1),FieldList_1={FieldList_1};end
    26152620CheckPivData_1=0; % indicate whether FieldName_1 has been updated with civ data, 0 by default
    26162621handles_coord=[handles.Coord_x handles.Coord_y handles.Coord_z handles.Coord_x_title handles.Coord_y_title handles.Coord_z_title];
     
    29772982field_index=get(handles.FieldName,'Value');
    29782983field=FieldListInit{field_index(1)};
    2979 if isequal(field,'add_field...')
     2984if strcmp(field,'add_field...')
    29802985    FieldListInit(field_index(1))=[];
    29812986    SeriesData=get(handles.series,'UserData');
     
    29842989    end
    29852990    % input line for which the field choice is relevant
    2986     iview=find(ismember(FileType,{'netcdf','civx','civdata'})); % all nc files, icluding civ
     2991    iview=find(ismember(FileType,{'netcdf','civx','civdata','civdata_compress'})); % all nc files, icluding civ
    29872992    hget_field=findobj(allchild(0),'name','get_field');
    29882993    if ~isempty(hget_field)
     
    38613866%------------------------------------------------------------------------
    38623867% --- set the visibility of relevant velocity type menus:
    3863 function menu=set_veltype_display(Civ,FileType)
     3868function menu=set_veltype_display(CivStage,FileType)
    38643869%------------------------------------------------------------------------
    38653870if ~exist('FileType','var')
    38663871    FileType='civx';
    38673872end
     3873imin=1;
    38683874switch FileType
    38693875    case 'civx'
    38703876        menu={'civ1';'interp1';'filter1';'civ2';'interp2';'filter2'};
    3871         if isequal(Civ,0)
     3877        if isequal(CivStage,0)
    38723878            imax=0;
    3873         elseif isequal(Civ,1) || isequal(Civ,2)
     3879        elseif isequal(CivStage,1) || isequal(CivStage,2)
    38743880            imax=1;
    3875         elseif isequal(Civ,3)
     3881        elseif isequal(CivStage,3)
    38763882            imax=3;
    3877         elseif isequal(Civ,4) || isequal(Civ,5)
     3883        elseif isequal(CivStage,4) || isequal(CivStage,5)
    38783884            imax=4;
    3879         elseif isequal(Civ,6) %patch2
     3885        elseif isequal(CivStage,6) %patch2
    38803886            imax=6;
    38813887        end
    3882     case 'civdata'
     3888    case {'civdata','civdata_compress'}
    38833889        menu={'civ1';'filter1';'civ2';'filter2'};
    3884         if isequal(Civ,0)
     3890        if isequal(CivStage,0)
    38853891            imax=0;
    3886         elseif isequal(Civ,1) || isequal(Civ,2)
     3892        elseif isequal(CivStage,1) || isequal(CivStage,2)
    38873893            imax=1;
    3888         elseif isequal(Civ,3)
     3894        elseif isequal(CivStage,3)
    38893895            imax=2;
    3890         elseif isequal(Civ,4) || isequal(Civ,5)
     3896        elseif isequal(CivStage,4) || isequal(CivStage,5)
    38913897            imax=3;
    3892         else%if isequal(Civ,6) %patch2
     3898        else%if isequal(CivStage,6) %patch2
    38933899            imax=4;
    38943900        end
    3895 end
    3896 menu=menu(1:imax);
     3901        if strcmp(FileType,'civdata_compress') && CivStage>=4
     3902            imin=CivStage-3;
     3903        end
     3904end
     3905menu=menu(imin:imax);
    38973906
    38983907
  • trunk/src/series/civ_input.m

    r1188 r1196  
    186186% CoordUnit='';%default
    187187% pxcm_search=1;
    188 if isfield(SeriesData,'Time') &&numel(SeriesData.Time')>=1 && ~isempty(SeriesData.Time{1})
     188if isfield(SeriesData,'Time') && numel(SeriesData.Time')>=1 && ~isempty(SeriesData.Time{1})
    189189    time=SeriesData.Time{1};
    190190end
     
    192192    TimeUnit=Param.IndexRange.TimeUnit;
    193193end
    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 range
    198 %     end
    199 %     if isfield(tsai,'CoordUnit')
    200 %         CoordUnit=tsai.CoordUnit;
    201 %     end
    202 % end
    203194
    204195%% timing display
     
    249240        set(handles.(ListOptions{index}),'value',0)
    250241        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
    251247    end
    252248    if isempty(FileInfo)
     
    259255            set(handles.(ListOptions{index}),'String',regexprep(ListOptions{index},'Check','redo '))
    260256        end
    261 %         for index = ind_opening+1:6
    262 %             set(handles.(ListOptions{index}),'value',1)
    263 %         end
    264257        set(handles.CheckCiv3,'Visible','off')% make visible the switch 'iterate/repet' for Civ2.
    265         set(handles.CheckCiv3,'Value',0)% select'iterate/repet' by default
    266     else
     258        %set(handles.CheckCiv3,'Value',0)% select'iterate/repet' by default
     259    else %civ3 proposed
    267260        for index = 1:3
    268261            set(handles.(ListOptions{index}),'value',0)
     
    273266        set(handles.CheckCiv3,'Visible','on')% make visible the switch 'iterate/repet' for Civ2.
    274267        set(handles.CheckCiv3,'Value',1)% select'iterate/repet' by default
     268        set(handles.CheckCiv3,'String',{'civ3'})% select'iterate/repet' by default
    275269    end
    276270    checkrefresh=1;
     
    631625for ilist=1:length(options)
    632626    if checkbox(ilist)
    633 %          set(handles.(options{ilist}),'Visible','on')
    634627        set(handles.(options{ilist}),'Enable','on')
    635 %         set(handles.(['Check' options{ilist}]),'Strin
    636628    else
    637 %         set(handles.(options{ilist}),'Visible','off')
    638629        set(handles.(options{ilist}),'Enable','off')
    639630    end
  • trunk/src/series/civ_series.m

    r1195 r1196  
    974974    Data.VarAttribute{4}.scale_factor=1/inv_scale_factor;
    975975    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
    977977    Data.VarAttribute{6}.Role='errorflag';
    978978    Data.X=uint16(Civ_X);
     
    980980    Data.U=int16(inv_scale_factor*Civ_U);
    981981    Data.V=int16(inv_scale_factor*Civ_V);
    982     Data.C=uint8(inv_scale_factor*Civ_C);
     982    Data.C=uint8(100*Civ_C);
    983983    Data.FF=uint8(Civ_FF);
     984    % add smoothed field if ptch is done
    984985    if (Param.ActionInput.CheckPatch1 && ~Param.ActionInput.CheckCiv2) ||Param.ActionInput.CheckPatch2
    985986        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'}}];
    989987        Data.ListVarName=[Data.ListVarName {'U_smooth','V_smooth'}];
    990988        Data.VarDimName=[Data.VarDimName {'nb_vec','nb_vec'}];
     
    995993        Data.U_smooth=int16(inv_scale_factor*Civ_U_smooth);
    996994        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
    1012996    errormsg=struct2nc(ncfile_out,Data);
    1013997    if isempty(errormsg)
  • trunk/src/series/merge_proj.m

    r1194 r1196  
    9292        msgbox_uvmat('WARNING',['the first input file ' FirstFileName ' does not exist'])
    9393    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});   
    94115    return
    95116end
     
    109130    WaitbarHandle=findobj(hseries,'Tag','Waitbar');%handle of waitbar in GUI series
    110131end
     132scale_factor_inv_uv=[];
     133if isfield(Param.ActionInput,'VelocityRange') && ~isempty(Param.ActionInput.VelocityRange)
     134    scale_factor_inv_uv=floor(32767/Param.ActionInput.VelocityRange);
     135end
     136scale_factor_inv_dudv=[];
     137if isfield(Param.ActionInput,'VelGradientRange') && ~isempty(Param.ActionInput.VelGradientRange)
     138    scale_factor_inv_dudv=floor(32767/Param.ActionInput.VelGradientRange);
     139end
    111140
    112141%% define the directory for result file (with path=RootPath{1})
     
    139168
    140169%% determine the file type on each line from the first input file
    141 NcTypeOptions={'netcdf','civx','civdata','pivdata_fluidimage'};
     170NcTypeOptions={'netcdf','civx','civdata','civdata_compress','pivdata_fluidimage'};
     171frame_index=cell(NbView,1);FileInfo=cell(NbView,1);MovieObject=cell(NbView,1);ParamIn=cell(NbView,1);
     172FileType=cell(NbView,1);CheckImage=zeros(NbView,1);CheckNc=zeros(NbView,1);
    142173for iview=1:NbView
    143174    if ~exist(filecell{iview,1}','file')
     
    150181        FileType{iview}='netcdf';
    151182    end
    152     CheckImage{iview}=strcmp(FileInfo{iview}.FieldType,'image');% =1 for images
    153     if CheckImage{iview}
     183    CheckImage(iview)=strcmp(FileInfo{iview}.FieldType,'image');% =1 for images
     184    if CheckImage(iview)
    154185        ParamIn{iview}=MovieObject{iview};
    155186    else
    156187        ParamIn{iview}=Param.InputFields;
    157188    end
    158     CheckNc{iview}=~isempty(find(strcmp(FileType{iview},NcTypeOptions)));% =1 for netcdf files
     189    CheckNc(iview)=ismember(FileType{iview},NcTypeOptions);% =1 for netcdf files
    159190    if ~isempty(j1_series{iview})
    160191        frame_index{iview}=j1_series{iview};
     
    163194    end
    164195end
    165 if NbView >1 && max(cell2mat(CheckImage))>0 && ~isfield(Param,'ProjObject')
     196if NbView >1 && max(CheckImage)>0 && ~isfield(Param,'ProjObject')
    166197    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)
    167198    return
     
    201232    end
    202233end
    203 %%%%%%%%%%%% END STANDARD PART  %%%%%%%%%%%%
    204  % EDIT FROM HERE
    205234
    206235%% 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)
     236if ~(CheckImage | CheckNc)
     237        disp_uvmat('ERROR',' netcdf or  image series needed as input',checkrun)
    210238        return
    211     end
    212239end
    213240
    214241%% output file type
    215 if min(cell2mat(CheckImage))==1 && (~Param.CheckObject || strcmp(Param.ProjObject.Type,'plane'))
     242if min(CheckImage)==1 && (~Param.CheckObject || strcmp(Param.ProjObject.Type,'plane'))
    216243    FileExtOut='.png'; %image output (input and proj result = image)
    217244else
    218245    FileExtOut='.nc'; %netcdf output
    219246end
    220 if isempty(j1_series{1})
     247if isempty(j1_series{1})||max(j1_series{1})==1
    221248    NomTypeOut='_1';
    222249else
     
    232259
    233260
    234 %% Set field names and velocity types
    235 %use Param.InputFields for all views
    236 
    237261%% MAIN LOOP ON FIELDS
    238 %%%%%%%%%%%%% STANDARD PART (DO NOT EDIT) %%%%%%%%%%%%
    239262
    240263    %%%%%%%%%%%%%%%% loop on field indices %%%%%%%%%%%%%%%%
     
    261284    end
    262285    j1=1;
    263     j2=1;
    264286    if ~isempty(j1_series{1})
    265287        j1=j1_series{1}(index);
     
    277299    for iview=1:NbView
    278300        %% 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));
    280302        if isempty(errormsg)
    281303            disp([filecell{iview,index} ' read OK'])
     
    307329       
    308330        %% 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)...
    311332            && strcmp(Param.ProjObject.ProjMode,'interp_tps')&&~isfield(Data{iview},'Coord_tps');
    312333        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);
    314335        end
    315336       
     
    326347        if Param.CheckMask % introduce multilevel mask like for civ
    327348            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});
    329350            i1_mask=mod(i1-1,NbSlice)+1;
    330351            maskname=fullfile_uvmat(RootPath_mask,SubDir_mask,RootFile_mask,Ext_mask,'_1',i1_mask);
     
    334355            [MaskData,~,errormsg] = read_field(maskname,'image');
    335356            if ~isempty(NbSlice_calib)
    336             MaskData.ZIndex=mod(i1_series{iview}(index)-1,NbSlice_calib{iview})+1;%Zindex for phys transform
    337         end
     357                MaskData.ZIndex=mod(i1_series{iview}(index)-1,NbSlice_calib{iview})+1;%Zindex for phys transform
     358            end
    338359            if ~isempty(transform_fct) && nargin(transform_fct)>=2
    339360                MaskData=transform_fct(MaskData,XmlData{iview});
     
    351372    else
    352373        MergeData=transform_fct(Data{1},XmlData{1},Data{2}); %combine the two input file series
    353     % else
    354     %     MergeData=transform_fct(Data{1},XmlData{1},Data{2},XmlData{2});%combine the two input file series with calibration parameters
    355374    end
    356375    if ~isempty(errormsg)
     
    362381    if ~isempty(time)
    363382        timeread=time(index);   
    364     elseif ~isempty(find(timeread))% time defined from ImaDoc
     383    elseif ~isempty(find(timeread, 1))% time defined from ImaDoc
    365384        timeread=mean(timeread(timeread~=0));% take average over times form the files (when defined)
    366385    else
     
    372391    if strcmp(FileExtOut,'.png')    %output as image
    373392        if index==1
    374             if strcmp(class(MergeData.A),'uint8')
    375             BitDepth=8;
     393            if isa(MergeData.A,'uint8')
     394                BitDepth=8;
    376395            else
    377               BitDepth=16; 
     396                BitDepth=16;
    378397            end
    379398            %write xml calibration file, using the first file
     
    429448            MergeData.Time=timeread;
    430449        end
    431         % position of projection plane 
     450        % position of projection plane
    432451        if isfield(Data{1},'ProjObjectCoord')&& isfield(Data{1},'ProjObjectAngle')
    433452            ProjObjectCoord=Data{1}.ProjObjectCoord;
     
    471490            end
    472491        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
    473516        error=struct2nc(OutputFile,MergeData);%save result file
    474517        if isempty(error)
     
    495538NbView=length(Data);
    496539if NbView==1% if there is only one field, just reproduce it in MergeData
    497     return 
     540    return
    498541end
    499542
  • trunk/src/uvmat.m

    r1192 r1196  
    298298        UvData.Field.coord_x=[0.5 size(input,2)-0.5];
    299299        UvData.Field.coord_y=[size(input,1)-0.5 0.5];
    300         testinputfield=1;
     300        %testinputfield=1;
    301301    end
    302302else
     
    44394439end
    44404440
     4441
    44414442%% extract the fields to use
    44424443% eliminate false data if relevant (false flag FF exists)
     
    44884489            end
    44894490        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;
    44984500            end
    44994501        end
     
    45034505            Histo.VarAttribute{1}.units=units;
    45044506        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
    45114512        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
    45164525        Histo.(FieldName)=Amin:VarMesh:Amax; %absissa values for histo
    45174526        if isfield(Field,'NbDim') && isequal(Field.NbDim,3)
     
    45214530            for col=1:size(FieldHisto,3)
    45224531                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               
    45244534                Histo.histo(:,col)=hist(C, Histo.(FieldName));  %calculate histogram
     4535                % Histo.histo(:,col)=histogram(C);  %calculate histogram
    45254536                switch get(handles.LogLinHisto,'Value')
    45264537                    case 1
    45274538                        PlotParam.Type='plot';
    45284539                    case 2
    4529                     PlotParam.Type='semilogy';
     4540                        PlotParam.Type='semilogy';
    45304541                    case 3
    4531                        PlotParam.Type='semilogx';
     4542                        PlotParam.Type='semilogx';
    45324543                    case 4
    4533                     PlotParam.Type='loglog';
     4544                        PlotParam.Type='loglog';
    45344545                end
    45354546            end
     
    51805191            imax=6;
    51815192        end
    5182     case {'civdata','civdata_3D','pivdata_fluidimage'}
     5193    case {'civdata','civdata_compress','civdata_3D','pivdata_fluidimage'}
    51835194        menu={'civ1';'filter1';'civ2';'filter2'};
    51845195        imax=[0 1 1 2 3 3 4 5 5 6];
    51855196        imax=imax(min(CivStage+1,10));
     5197        if strcmp(FileType,'civdata_compress')&& CivStage>=4
     5198            imin=3;
     5199        end
    51865200end
    51875201menu=menu(imin:imax);
Note: See TracChangeset for help on using the changeset viewer.