Index: trunk/src/find_file_series.m
===================================================================
--- trunk/src/find_file_series.m	(revision 1195)
+++ trunk/src/find_file_series.m	(revision 1196)
@@ -50,5 +50,5 @@
 %% get input root name and info on the input file
 if isempty(regexp(FilePath,'^http://','once'))% case of usual file input
-fullfileinput=fullfile(FilePath,fileinput);% input file name with path
+  fullfileinput=fullfile(FilePath,fileinput);% input file name with path
 else
   fullfileinput=[FilePath '/' fileinput]; % case of web input
@@ -216,10 +216,10 @@
         
         if ~isempty(ind_select)
-            [tild,ifile_min]=min(ref_ij(ind_select));
-            [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)
+            [~,ifile_min]=min(ref_ij(ind_select));
+            [~,~,~,~,~,~,~,~,NomType]=fileparts_uvmat(ListFiles{ind_select(ifile_min)});% update the representation of indices (number of 0 before the number)
             NomType=regexprep(NomType,['^' NomTypePref],'');
             %% update the file type if the input file does not exist (pb of 0001)
             if isempty(FileInfo.FileName)
-                [FileInfo,MovieObject]=get_file_info(fullfile(FilePath,ListFiles{ifile_min}));
+                [FileInfo,MovieObject]=get_file_info(fullfile(FilePath,ListFiles{ind_select(ifile_min)}));
             end
         end
@@ -293,5 +293,5 @@
 if size(i2_series,3)>1 %pairs i1 -i2
     diff_index=abs(i2_series-i1_series);
-    [tild,ind_pair]=sort(diff_index,3,'descend');
+    [~,ind_pair]=sort(diff_index,3,'descend');
     for ref_i=1:size(i1_series,1)
         for ref_j=1:size(j1_series,2)
@@ -305,5 +305,5 @@
 elseif size(j2_series,3)>1 %pairs j1 -j2
     diff_index=abs(j2_series-j1_series);
-    [tild,ind_pair]=sort(diff_index,3,'descend');
+    [~,ind_pair]=sort(diff_index,3,'descend');
     for ref_i=1:size(i1_series,1)
         for ref_j=1:size(j1_series,2)
Index: trunk/src/get_field.m
===================================================================
--- trunk/src/get_field.m	(revision 1195)
+++ trunk/src/get_field.m	(revision 1196)
@@ -115,5 +115,5 @@
         check_singleton(idim)=isequal(Field.DimValue(dim_index),1);%check_singleton=1 for singleton
     end
-    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
+    Field.Check0D(ilist)=isequal(check_singleton,ones(1,NbDim));% =1 if the variable reduces to a single value
     if ~Field.Check0D(ilist)
     Field.Display.VarDimName{ilist}=Field.VarDimName{ilist}(~check_singleton);% eliminate singletons in the list of variable dimensions
@@ -123,5 +123,5 @@
     Field.VarAttribute={};
 end
-if numel(Field.VarAttribute)<NbVar% complement VarAttribute by blanjs if neded
+if numel(Field.VarAttribute)<NbVar% complement VarAttribute by blanks if neded
     Field.VarAttribute(numel(Field.VarAttribute)+1:NbVar)=cell(1,NbVar-numel(Field.VarAttribute));
 end
@@ -433,15 +433,15 @@
         if ~ischar(VarName)      
             %default scalar selection
-            test_coord=zeros(size(Field.Display.VarDimName)); %=1 when variable #ilist is eligible as structured coordiante
+            test_coord=false(size(Field.Display.VarDimName)); %=true when variable #ilist is eligible as structured coordinate
             for ilist=1:numel(Field.Display.VarDimName)
                 if isfield(Field.Display,'VarAttribute') && numel(Field.Display.VarAttribute)>=ilist && isfield(Field.Display.VarAttribute{ilist},'Role')
                     Role=Field.Display.VarAttribute{ilist}.Role;
                     if strcmp(Role,'coord_x')||strcmp(Role,'coord_y')
-                        test_coord(ilist)=1;
+                        test_coord(ilist)=true;
                     end
                 end
                 dimnames=Field.Display.VarDimName{ilist}; %list of dimensions for variable #ilist
                 if numel(dimnames)==1 && strcmp(dimnames{1},Field.Display.ListVarName{ilist})%dimension variable
-                    test_coord(ilist)=1;
+                    test_coord(ilist)=true;
                 end
             end
@@ -529,5 +529,5 @@
 set(handles.Coord_y,'String',ListCoord)
 val_y=1;
-if strcmp(VarName,ListCoord{1})&& numel(ListCoord)>=2
+if ~isempty(ListCoord) && strcmp(VarName,ListCoord{1})&& numel(ListCoord)>=2
     val_y=2;
 end
Index: trunk/src/get_file_info.m
===================================================================
--- trunk/src/get_file_info.m	(revision 1195)
+++ trunk/src/get_file_info.m	(revision 1196)
@@ -207,6 +207,10 @@
                         [Data,tild,tild,errormsg]=nc2struct(fileinput,[]);
                         if isempty(errormsg)
-                            if isfield(Data,'Conventions') && ~isempty(find(strcmp(Data.Conventions,{'uvmat/civdata','uvmat/civdata/compress'}), 1))
+                            if isfield(Data,'Conventions') && ismember(Data.Conventions,{'uvmat/civdata','uvmat/civdata/compress'})
+                               if strcmp(Data.Conventions,'uvmat/civdata')
                                 FileInfo.FileType='civdata'; % test for civ velocity fields
+                               else
+                                   FileInfo.FileType='civdata_compress'; % test for civ velocity fields
+                               end
                                 FileInfo.CivStage=Data.CivStage;
                                 MaskFile='';
@@ -285,9 +289,9 @@
     case {'image','multimage','video','mmreader','rdvision','image_DaVis','cine_phantom','telopsIR'}
         FileInfo.FieldType='image';
-    case {'civdata','pivdata_fluidimage'}
+    case {'civdata','civdata_compress','pivdata_fluidimage'}
         FileInfo.FieldType='civdata';
 end
 
-if strcmp(FileInfo.FieldType,'image') || ismember (FileInfo.FileType,{'mat','netcdf','civdata'})
+if strcmp(FileInfo.FieldType,'image') || ismember (FileInfo.FileType,{'mat','netcdf','civdata','civdata_compress'})
     FileInfo.FileIndexing='on'; % allow to detect file index for scanning series
 else
Index: trunk/src/nc2struct.m
===================================================================
--- trunk/src/nc2struct.m	(revision 1195)
+++ trunk/src/nc2struct.m	(revision 1196)
@@ -282,11 +282,14 @@
             Data.(VarName)=squeeze(Data.(VarName));%remove singeton dimension
         else
-                       disp(VarName)
-           xtype(var_index(ivar))
+%                        disp(VarName)
+%            xtype(var_index(ivar))
             Data.(VarName)=netcdf.getVar(nc,var_index(ivar)-1); %read the whole variable data
-        end       
-        Data.(VarName)=double(Data.(VarName)); %transform all variables to double  pecision
+        end   
+        if xtype(var_index(ivar))==5 %single precision
+             Data.(VarName)=double(Data.(VarName)); %transform all variables to double  pecision
+        end
+    %    Data.(VarName)=double(Data.(VarName)); %transform all variables to double  pecision
         if isfield(Data,'VarAttribute') && numel(Data.VarAttribute)>=ivar && isfield(Data.VarAttribute{ivar},'scale_factor')
-            Data.(VarName)=Data.VarAttribute{ivar}.scale_factor *Data.(VarName);
+            Data.(VarName)=Data.VarAttribute{ivar}.scale_factor *double(Data.(VarName));
         end
     end
Index: trunk/src/read_civdata.m
===================================================================
--- trunk/src/read_civdata.m	(revision 1195)
+++ trunk/src/read_civdata.m	(revision 1196)
@@ -121,6 +121,6 @@
 end
 if strcmp(Data.Conventions,'uvmat/civdata/compress')
-    Field.X=Field.X-0.5+Field.U/2;% shift to the convected position
-    Field.Y=Field.Y-0.5+Field.V/2;
+    Field.X=double(Field.X)-0.5+Field.U/2;% shift to the convected position
+    Field.Y=double(Field.Y)-0.5+Field.V/2;
 end
 switch VelTypeOut
Index: trunk/src/read_field.m
===================================================================
--- trunk/src/read_field.m	(revision 1195)
+++ trunk/src/read_field.m	(revision 1196)
@@ -81,5 +81,5 @@
 %% distingush different input file types
 switch FileType
-    case {'civdata','civdata_3D'}% format for civ results
+    case {'civdata','civdata_compress','civdata_3D'}% format for civ results
         [Field,ParamOut.VelType,errormsg]=read_civdata(FileName,InputField,ParamIn.VelType,frame_index);
         if ~isempty(errormsg),errormsg=['read_civdata / ' errormsg];return,end
Index: trunk/src/series.m
===================================================================
--- trunk/src/series.m	(revision 1195)
+++ trunk/src/series.m	(revision 1196)
@@ -609,7 +609,7 @@
     else
         [XmlFileName,Rank]=find_imadoc(InputTable{iview,1},InputTable{iview,2});
-        if ~isempty(XmlFileName) && Rank==0
+        if ~isempty(XmlFileName)
             XmlData=read_imadoc(XmlFileName);
-            if ~isempty(XmlData.FileSeries)
+            if  Rank==0 && ~isempty(XmlData.FileSeries)
                 set(handles.Relabel,'Visible','on')
                 answer='Yes';
@@ -637,9 +637,9 @@
                     end
                     [Param.FileInfo,VideoObject]=get_file_info(FirstFile);
+                else
+                    set(handles.Relabel,'Value',0)
                 end
             end
             Param.XmlData=XmlData;
-        else
-            set(handles.Relabel,'Value',0)
         end
     end
@@ -1086,10 +1086,15 @@
         nbfield=nbfield-1; %remove the possible index 0
         nbfield_j=nbfield_j-1; %remove the possible index 0
-        MaxIndex_i=get(handles.MaxIndex_i,'Data');
-        MaxIndex_j=get(handles.MaxIndex_j,'Data');
-        MaxIndex_i(1,:)=nbfield;
-        MaxIndex_j(1,:)=nbfield_j;
-        MinIndex_i(1,:)=1;
-        MinIndex_j(1,:)=1;
+%         MaxIndex_i=get(handles.MaxIndex_i,'Data');
+%         MaxIndex_j=get(handles.MaxIndex_j,'Data');
+%         MaxIndex_i(1,:)=nbfield;
+%         MaxIndex_j(1,:)=nbfield_j;
+%         MinIndex_i(1,:)=1;
+%         MinIndex_j(1,:)=1;
+         MaxIndex_i=nbfield;
+         MaxIndex_j=nbfield_j;
+         MinIndex_i=1;
+         MinIndex_j=1;
+
 
         first_i=str2double(get(handles.num_first_i,'String'));
@@ -2601,9 +2606,9 @@
 iview_netcdf=[];
 for iview=1:numel(SeriesData.FileInfo)
-    if strcmp(SeriesData.FileInfo{iview}.FileType,'civx')||strcmp(SeriesData.FileInfo{iview}.FileType,'civdata')
-      iview_civ=[iview_civ iview];
-      iview_netcdf=[iview_netcdf iview];% all nc files, icluding civ
-    elseif strcmp(SeriesData.FileInfo{iview}.FileType,'netcdf')
-      iview_netcdf=[iview_netcdf iview];
+    if ismember(SeriesData.FileInfo{iview}.FileType,{'civx','civdata','civdata_compress','netcdf'})
+         iview_netcdf=[iview_netcdf iview];
+         if ismember(SeriesData.FileInfo{iview}.FileType,{'civx','civdata','civdata_compress'})
+             iview_civ=[iview_civ iview];
+         end
     end
 end
@@ -2612,5 +2617,5 @@
 if ~iscell(FieldList),FieldList={FieldList};end
 FieldList_1=get(handles.FieldName_1,'String'); % previous list as default
-if ~iscell(FieldList_1),FieldList_1={FieldList_1};end
+% if ~iscell(FieldList_1),FieldList_1={FieldList_1};end
 CheckPivData_1=0; % indicate whether FieldName_1 has been updated with civ data, 0 by default
 handles_coord=[handles.Coord_x handles.Coord_y handles.Coord_z handles.Coord_x_title handles.Coord_y_title handles.Coord_z_title];
@@ -2977,5 +2982,5 @@
 field_index=get(handles.FieldName,'Value');
 field=FieldListInit{field_index(1)};
-if isequal(field,'add_field...')
+if strcmp(field,'add_field...')
     FieldListInit(field_index(1))=[];
     SeriesData=get(handles.series,'UserData');
@@ -2984,5 +2989,5 @@
     end
     % input line for which the field choice is relevant
-    iview=find(ismember(FileType,{'netcdf','civx','civdata'})); % all nc files, icluding civ
+    iview=find(ismember(FileType,{'netcdf','civx','civdata','civdata_compress'})); % all nc files, icluding civ
     hget_field=findobj(allchild(0),'name','get_field');
     if ~isempty(hget_field)
@@ -3861,38 +3866,42 @@
 %------------------------------------------------------------------------
 % --- set the visibility of relevant velocity type menus:
-function menu=set_veltype_display(Civ,FileType)
+function menu=set_veltype_display(CivStage,FileType)
 %------------------------------------------------------------------------
 if ~exist('FileType','var')
     FileType='civx';
 end
+imin=1;
 switch FileType
     case 'civx'
         menu={'civ1';'interp1';'filter1';'civ2';'interp2';'filter2'};
-        if isequal(Civ,0)
+        if isequal(CivStage,0)
             imax=0;
-        elseif isequal(Civ,1) || isequal(Civ,2)
+        elseif isequal(CivStage,1) || isequal(CivStage,2)
             imax=1;
-        elseif isequal(Civ,3)
+        elseif isequal(CivStage,3)
             imax=3;
-        elseif isequal(Civ,4) || isequal(Civ,5)
+        elseif isequal(CivStage,4) || isequal(CivStage,5)
             imax=4;
-        elseif isequal(Civ,6) %patch2
+        elseif isequal(CivStage,6) %patch2
             imax=6;
         end
-    case 'civdata'
+    case {'civdata','civdata_compress'}
         menu={'civ1';'filter1';'civ2';'filter2'};
-        if isequal(Civ,0)
+        if isequal(CivStage,0)
             imax=0;
-        elseif isequal(Civ,1) || isequal(Civ,2)
+        elseif isequal(CivStage,1) || isequal(CivStage,2)
             imax=1;
-        elseif isequal(Civ,3)
+        elseif isequal(CivStage,3)
             imax=2;
-        elseif isequal(Civ,4) || isequal(Civ,5)
+        elseif isequal(CivStage,4) || isequal(CivStage,5)
             imax=3;
-        else%if isequal(Civ,6) %patch2
+        else%if isequal(CivStage,6) %patch2
             imax=4;
         end
-end
-menu=menu(1:imax);
+        if strcmp(FileType,'civdata_compress') && CivStage>=4
+            imin=CivStage-3;
+        end
+end
+menu=menu(imin:imax);
 
 
Index: trunk/src/series/civ_input.m
===================================================================
--- trunk/src/series/civ_input.m	(revision 1195)
+++ trunk/src/series/civ_input.m	(revision 1196)
@@ -186,5 +186,5 @@
 % CoordUnit='';%default
 % pxcm_search=1;
-if isfield(SeriesData,'Time') &&numel(SeriesData.Time')>=1 && ~isempty(SeriesData.Time{1})
+if isfield(SeriesData,'Time') && numel(SeriesData.Time')>=1 && ~isempty(SeriesData.Time{1})
     time=SeriesData.Time{1};
 end
@@ -192,13 +192,4 @@
     TimeUnit=Param.IndexRange.TimeUnit;
 end 
-% if isfield(SeriesData,'GeometryCalib')
-%     tsai=SeriesData.GeometryCalib;
-%     if isfield(tsai,'fx_fy')
-%         pxcm_search=max(tsai.fx_fy(1),tsai.fx_fy(2));%pixels:cm estimated for the search range
-%     end
-%     if isfield(tsai,'CoordUnit')
-%         CoordUnit=tsai.CoordUnit;
-%     end
-% end
 
 %% timing display
@@ -249,4 +240,9 @@
         set(handles.(ListOptions{index}),'value',0)
         fill_civ_input(Data,handles); %fill civ_input with the parameters retrieved from an input Civ file
+        if index<=3
+        set(handles.(ListOptions{index}),'Visible','off')
+        PanelTag=regexprep(ListOptions{index},'Check','')
+        set(handles.(PanelTag),'Visible','off')
+        end
     end
     if isempty(FileInfo)
@@ -259,10 +255,7 @@
             set(handles.(ListOptions{index}),'String',regexprep(ListOptions{index},'Check','redo '))
         end
-%         for index = ind_opening+1:6
-%             set(handles.(ListOptions{index}),'value',1)
-%         end
         set(handles.CheckCiv3,'Visible','off')% make visible the switch 'iterate/repet' for Civ2.
-        set(handles.CheckCiv3,'Value',0)% select'iterate/repet' by default
-    else
+        %set(handles.CheckCiv3,'Value',0)% select'iterate/repet' by default
+    else %civ3 proposed
         for index = 1:3
             set(handles.(ListOptions{index}),'value',0)
@@ -273,4 +266,5 @@
         set(handles.CheckCiv3,'Visible','on')% make visible the switch 'iterate/repet' for Civ2.
         set(handles.CheckCiv3,'Value',1)% select'iterate/repet' by default
+        set(handles.CheckCiv3,'String',{'civ3'})% select'iterate/repet' by default
     end
     checkrefresh=1;
@@ -631,9 +625,6 @@
 for ilist=1:length(options)
     if checkbox(ilist)
-%          set(handles.(options{ilist}),'Visible','on')
         set(handles.(options{ilist}),'Enable','on')
-%         set(handles.(['Check' options{ilist}]),'Strin
     else
-%         set(handles.(options{ilist}),'Visible','off')
         set(handles.(options{ilist}),'Enable','off')
     end
Index: trunk/src/series/civ_series.m
===================================================================
--- trunk/src/series/civ_series.m	(revision 1195)
+++ trunk/src/series/civ_series.m	(revision 1196)
@@ -974,5 +974,5 @@
     Data.VarAttribute{4}.scale_factor=1/inv_scale_factor;
     Data.VarAttribute{5}.Role='ancillary';
-    Data.VarAttribute{5}.scale_factor=1/inv_scale_factor;
+    Data.VarAttribute{5}.scale_factor=1/100;%scla factor for correlation
     Data.VarAttribute{6}.Role='errorflag';
     Data.X=uint16(Civ_X);
@@ -980,11 +980,9 @@
     Data.U=int16(inv_scale_factor*Civ_U);
     Data.V=int16(inv_scale_factor*Civ_V);
-    Data.C=uint8(inv_scale_factor*Civ_C);
+    Data.C=uint8(100*Civ_C);
     Data.FF=uint8(Civ_FF);
+    % add smoothed field if ptch is done
     if (Param.ActionInput.CheckPatch1 && ~Param.ActionInput.CheckCiv2) ||Param.ActionInput.CheckPatch2
         nbvar=6;
-        %     Data.ListVarName=[Data.ListVarName {'U_smooth','V_smooth','SubRange','NbCentres','Coord_tps','U_tps','V_tps'}];
-        %         Data.VarDimName=[Data.VarDimName {'nb_vec','nb_vec',{'nb_coord','nb_bounds','nb_subdomain'},{'nb_subdomain'},...
-        %             {'nb_tps','nb_coord','nb_subdomain'},{'nb_tps','nb_subdomain'},{'nb_tps','nb_subdomain'}}];
         Data.ListVarName=[Data.ListVarName {'U_smooth','V_smooth'}];
         Data.VarDimName=[Data.VarDimName {'nb_vec','nb_vec'}];
@@ -995,19 +993,5 @@
         Data.U_smooth=int16(inv_scale_factor*Civ_U_smooth);
         Data.V_smooth=int16(inv_scale_factor*Civ_V_smooth);
-        %         Data.VarAttribute{nbvar+5}.Role='coord_tps';
-        %         Data.VarAttribute{nbvar+6}.Role='vector_x';
-        %         Data.VarAttribute{nbvar+7}.Role='vector_y';
-        %         Data.U_smooth=int16(inv_scale_factor*U_smooth);
-        %         Data.V_smooth=int16(inv_scale_factor*V_smooth);
-        %         Data.SubRange=SubRange;
-        %         Data.NbCentres=NbCentres;
-        %         Data.Coord_tps=Coord_tps;
-        %         Data.U_tps=U_tps;
-        %         Data.V_tps=V_tps;
-    end
-    %
-    %      if ~isempty(inv_scale_factor)
-    %              Data=compress_data(Data,inv_scale_factor);% compress the data using integers instead of (single precision)floating reals
-    %      end
+    end
     errormsg=struct2nc(ncfile_out,Data);
     if isempty(errormsg)
Index: trunk/src/series/merge_proj.m
===================================================================
--- trunk/src/series/merge_proj.m	(revision 1195)
+++ trunk/src/series/merge_proj.m	(revision 1196)
@@ -92,4 +92,25 @@
         msgbox_uvmat('WARNING',['the first input file ' FirstFileName ' does not exist'])
     end
+    VelocityRange=[];%default
+    VelGradientRange=[];%default
+    if isfield(Param,'ActionInput')
+        if isfield(Param.ActionInput,'VelocityRange') 
+           VelocityRange= Param.ActionInput.VelocityRange;
+        end
+        if isfield(Param.ActionInput,'VelGradientRange') 
+           VelGradientRange= Param.ActionInput.VelGradientRange;
+        end
+    end   
+    prompt = {'velocity range (max modulus) for 16 bit integer records (32 bit reals if empty)';...
+        'range (max modulus) for vel derivatives (curl, div...) for 16 bit integer records (32 bit reals if empty)'};
+    dlg_title = 'set scale_factor for result writing as 16 bit integer (instead of 32 bit reals by default)';
+    num_lines= 2;
+    def     = { num2str(VelocityRange),num2str(VelGradientRange)};
+    answer = inputdlg(prompt,dlg_title,num_lines,def);
+    if isempty(answer)
+        return
+    end
+    ParamOut.ActionInput.VelocityRange=str2num(answer{1});
+    ParamOut.ActionInput.VelGradientRange=str2num(answer{2});   
     return
 end
@@ -109,4 +130,12 @@
     WaitbarHandle=findobj(hseries,'Tag','Waitbar');%handle of waitbar in GUI series
 end
+scale_factor_inv_uv=[];
+if isfield(Param.ActionInput,'VelocityRange') && ~isempty(Param.ActionInput.VelocityRange)
+    scale_factor_inv_uv=floor(32767/Param.ActionInput.VelocityRange);
+end
+scale_factor_inv_dudv=[];
+if isfield(Param.ActionInput,'VelGradientRange') && ~isempty(Param.ActionInput.VelGradientRange)
+    scale_factor_inv_dudv=floor(32767/Param.ActionInput.VelGradientRange);
+end
 
 %% define the directory for result file (with path=RootPath{1})
@@ -139,5 +168,7 @@
 
 %% determine the file type on each line from the first input file 
-NcTypeOptions={'netcdf','civx','civdata','pivdata_fluidimage'};
+NcTypeOptions={'netcdf','civx','civdata','civdata_compress','pivdata_fluidimage'};
+frame_index=cell(NbView,1);FileInfo=cell(NbView,1);MovieObject=cell(NbView,1);ParamIn=cell(NbView,1);
+FileType=cell(NbView,1);CheckImage=zeros(NbView,1);CheckNc=zeros(NbView,1);
 for iview=1:NbView
     if ~exist(filecell{iview,1}','file')
@@ -150,11 +181,11 @@
         FileType{iview}='netcdf';
     end
-    CheckImage{iview}=strcmp(FileInfo{iview}.FieldType,'image');% =1 for images
-    if CheckImage{iview}
+    CheckImage(iview)=strcmp(FileInfo{iview}.FieldType,'image');% =1 for images
+    if CheckImage(iview)
         ParamIn{iview}=MovieObject{iview};
     else
         ParamIn{iview}=Param.InputFields;
     end
-    CheckNc{iview}=~isempty(find(strcmp(FileType{iview},NcTypeOptions)));% =1 for netcdf files
+    CheckNc(iview)=ismember(FileType{iview},NcTypeOptions);% =1 for netcdf files
     if ~isempty(j1_series{iview})
         frame_index{iview}=j1_series{iview};
@@ -163,5 +194,5 @@
     end
 end
-if NbView >1 && max(cell2mat(CheckImage))>0 && ~isfield(Param,'ProjObject')
+if NbView >1 && max(CheckImage)>0 && ~isfield(Param,'ProjObject')
     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)
     return
@@ -201,22 +232,18 @@
     end
 end
-%%%%%%%%%%%% END STANDARD PART  %%%%%%%%%%%%
- % EDIT FROM HERE
 
 %% check the validity of  input file types
-for iview=1:NbView
-    if ~isequal(CheckImage{iview},1)&&~isequal(CheckNc{iview},1)
-        disp_uvmat('ERROR','input set of input series: need  either netcdf either image series',checkrun)
+if ~(CheckImage | CheckNc)
+        disp_uvmat('ERROR',' netcdf or  image series needed as input',checkrun)
         return
-    end
 end
 
 %% output file type
-if min(cell2mat(CheckImage))==1 && (~Param.CheckObject || strcmp(Param.ProjObject.Type,'plane'))
+if min(CheckImage)==1 && (~Param.CheckObject || strcmp(Param.ProjObject.Type,'plane'))
     FileExtOut='.png'; %image output (input and proj result = image)
 else
     FileExtOut='.nc'; %netcdf output
 end
-if isempty(j1_series{1})
+if isempty(j1_series{1})||max(j1_series{1})==1
     NomTypeOut='_1';
 else
@@ -232,9 +259,5 @@
 
 
-%% Set field names and velocity types
-%use Param.InputFields for all views
-
 %% MAIN LOOP ON FIELDS
-%%%%%%%%%%%%% STANDARD PART (DO NOT EDIT) %%%%%%%%%%%%
 
     %%%%%%%%%%%%%%%% loop on field indices %%%%%%%%%%%%%%%%
@@ -261,5 +284,4 @@
     end
     j1=1;
-    j2=1;
     if ~isempty(j1_series{1})
         j1=j1_series{1}(index);
@@ -277,5 +299,5 @@
     for iview=1:NbView
         %% reading input file(s)      
-        [Data{iview},tild,errormsg] = read_field(filecell{iview,index},FileType{iview},ParamIn{iview},frame_index{iview}(index));
+        [Data{iview},~,errormsg] = read_field(filecell{iview,index},FileType{iview},ParamIn{iview},frame_index{iview}(index));
         if isempty(errormsg)
             disp([filecell{iview,index} ' read OK'])
@@ -307,9 +329,8 @@
         
         %% calculate tps coefficients if needed
-
-        check_proj_tps= strcmp(FileType{iview},'civdata') && isfield(Param,'ProjObject')&&~isempty(Param.ProjObject)...
+        check_proj_tps= ismember(FileType{iview},{'civdata','civdata_compress'}) && isfield(Param,'ProjObject')&&~isempty(Param.ProjObject)...
             && strcmp(Param.ProjObject.ProjMode,'interp_tps')&&~isfield(Data{iview},'Coord_tps');
         if check_proj_tps
-        Data{iview}=tps_coeff_field(Data{iview},check_proj_tps);
+            Data{iview}=tps_coeff_field(Data{iview},check_proj_tps);
         end
         
@@ -326,5 +347,5 @@
         if Param.CheckMask % introduce multilevel mask like for civ
             NbSlice=Param.MaskTable{iview,2};
-            [RootPath_mask,SubDir_mask,RootFile_mask,i1_mask,i2_mask,j1_mask,j2_mask,Ext_mask]=fileparts_uvmat(Param.MaskTable{iview,1});
+            [RootPath_mask,SubDir_mask,RootFile_mask,~,~,~,~,Ext_mask]=fileparts_uvmat(Param.MaskTable{iview,1});
             i1_mask=mod(i1-1,NbSlice)+1;
             maskname=fullfile_uvmat(RootPath_mask,SubDir_mask,RootFile_mask,Ext_mask,'_1',i1_mask);
@@ -334,6 +355,6 @@
             [MaskData,~,errormsg] = read_field(maskname,'image');
             if ~isempty(NbSlice_calib)
-            MaskData.ZIndex=mod(i1_series{iview}(index)-1,NbSlice_calib{iview})+1;%Zindex for phys transform
-        end
+                MaskData.ZIndex=mod(i1_series{iview}(index)-1,NbSlice_calib{iview})+1;%Zindex for phys transform
+            end
             if ~isempty(transform_fct) && nargin(transform_fct)>=2
                 MaskData=transform_fct(MaskData,XmlData{iview});
@@ -351,6 +372,4 @@
     else
         MergeData=transform_fct(Data{1},XmlData{1},Data{2}); %combine the two input file series
-    % else
-    %     MergeData=transform_fct(Data{1},XmlData{1},Data{2},XmlData{2});%combine the two input file series with calibration parameters
     end
     if ~isempty(errormsg)
@@ -362,5 +381,5 @@
     if ~isempty(time)
         timeread=time(index);   
-    elseif ~isempty(find(timeread))% time defined from ImaDoc
+    elseif ~isempty(find(timeread, 1))% time defined from ImaDoc
         timeread=mean(timeread(timeread~=0));% take average over times form the files (when defined)
     else
@@ -372,8 +391,8 @@
     if strcmp(FileExtOut,'.png')    %output as image
         if index==1
-            if strcmp(class(MergeData.A),'uint8')
-            BitDepth=8;
+            if isa(MergeData.A,'uint8')
+                BitDepth=8;
             else
-              BitDepth=16;  
+                BitDepth=16;
             end
             %write xml calibration file, using the first file
@@ -429,5 +448,5 @@
             MergeData.Time=timeread;
         end
-        % position of projection plane 
+        % position of projection plane
         if isfield(Data{1},'ProjObjectCoord')&& isfield(Data{1},'ProjObjectAngle')
             ProjObjectCoord=Data{1}.ProjObjectCoord;
@@ -471,4 +490,28 @@
             end
         end
+        if ~isempty(scale_factor_inv_uv)
+            index_U=find(strcmp(MergeData.ListVarName,'U'));
+            if ~isempty(index_U)
+                MergeData.VarAttribute{index_U}.scale_factor=1/scale_factor_inv_uv;
+                MergeData.U=int16(scale_factor_inv_uv*MergeData.U);
+            end
+            index_V=find(strcmp(MergeData.ListVarName,'V'));
+            if ~isempty(index_V)
+                MergeData.VarAttribute{index_V}.scale_factor=1/scale_factor_inv_uv;
+                MergeData.V=int16(scale_factor_inv_uv*MergeData.V);
+            end
+        end
+        if ~isempty(scale_factor_inv_dudv)
+            index_var=find(strcmp(MergeData.ListVarName,'curl'));
+            if ~isempty(index_var)
+                MergeData.VarAttribute{index_var}.scale_factor=1/scale_factor_inv_dudv;
+                MergeData.curl=int16(scale_factor_inv_uv*MergeData.curl);
+            end
+            index_var=find(strcmp(MergeData.ListVarName,'div'));
+            if ~isempty(index_var)
+                MergeData.VarAttribute{index_var}.scale_factor=1/scale_factor_inv_dudv;
+                MergeData.div=int16(scale_factor_inv_dudv*MergeData.div);
+            end
+        end
         error=struct2nc(OutputFile,MergeData);%save result file
         if isempty(error)
@@ -495,5 +538,5 @@
 NbView=length(Data);
 if NbView==1% if there is only one field, just reproduce it in MergeData
-    return 
+    return
 end
 
Index: trunk/src/uvmat.m
===================================================================
--- trunk/src/uvmat.m	(revision 1195)
+++ trunk/src/uvmat.m	(revision 1196)
@@ -298,5 +298,5 @@
         UvData.Field.coord_x=[0.5 size(input,2)-0.5];
         UvData.Field.coord_y=[size(input,1)-0.5 0.5];
-        testinputfield=1;
+        %testinputfield=1;
     end
 else
@@ -4439,4 +4439,5 @@
 end
 
+
 %% extract the fields to use
 % eliminate false data if relevant (false flag FF exists)
@@ -4488,12 +4489,13 @@
             end
         end
-        %unit
-        units=[]; %default
-        for ivar=1:numel(Field.ListVarName)
-            if strcmp(Field.ListVarName{ivar},FieldName)
-                if isfield(Field,'VarAttribute') && numel(Field.VarAttribute)>=ivar && isfield(Field.VarAttribute{ivar},'units')
-                    units=Field.VarAttribute{ivar}.units;
-                    break
-                end
+        units='';     scale_factor=NaN; %default
+        %determine the bin size for histogram
+        FieldIndex=find(strcmp(FieldName,Field.ListVarName));
+        if isfield(Field,'VarAttribute') && numel(Field.VarAttribute)>=FieldIndex
+            if isfield(Field.VarAttribute{FieldIndex},'units')
+                units=Field.VarAttribute{FieldIndex}.units;
+            end
+            if isfield(UvData.Field.VarAttribute{FieldIndex},'scale_factor')
+                scale_factor=UvData.Field.VarAttribute{FieldIndex}.scale_factor;
             end
         end
@@ -4503,15 +4505,22 @@
             Histo.VarAttribute{1}.units=units;
         end
-        VarMesh=(Amax-Amin)/100;
-        ord=10^(floor(log10(VarMesh)));%order of magnitude
-        if VarMesh/ord >=5
-            VarMesh=5*ord;
-        elseif VarMesh/ord >=2
-            VarMesh=2*ord;
+        %determine the bin size for histogram
+        if isa(FieldHisto,'integer')
+            VarMesh=max(1,(Amax-Amin)/100);
+        elseif (Amax-Amin)/scale_factor<100
+            VarMesh=scale_factor;% take the integer mesh used to store the field
         else
-            VarMesh=ord;
-        end
-        Amin=VarMesh*(ceil(Amin/VarMesh));
-        Amax=VarMesh*(floor(Amax/VarMesh));
+            VarMesh=(Amax-Amin)/100;
+            ord=10^(floor(log10(VarMesh)));%order of magnitude
+            if VarMesh/ord >=5
+                VarMesh=5*ord;
+            elseif VarMesh/ord >=2
+                VarMesh=2*ord;
+            else
+                VarMesh=ord;
+            end
+            Amin=VarMesh*(ceil(Amin/VarMesh));
+            Amax=VarMesh*(floor(Amax/VarMesh));
+        end
         Histo.(FieldName)=Amin:VarMesh:Amax; %absissa values for histo
         if isfield(Field,'NbDim') && isequal(Field.NbDim,3)
@@ -4521,15 +4530,17 @@
             for col=1:size(FieldHisto,3)
                 B=FieldHisto(:,:,col);
-                C=reshape(double(B),1,nxy(1)*nxy(2));% reshape in a vector
+                C=reshape(B,1,nxy(1)*nxy(2));% reshape in a vector
+                
                 Histo.histo(:,col)=hist(C, Histo.(FieldName));  %calculate histogram
+                % Histo.histo(:,col)=histogram(C);  %calculate histogram
                 switch get(handles.LogLinHisto,'Value')
                     case 1
                         PlotParam.Type='plot';
                     case 2
-                    PlotParam.Type='semilogy';
+                        PlotParam.Type='semilogy';
                     case 3
-                       PlotParam.Type='semilogx'; 
+                        PlotParam.Type='semilogx';
                     case 4
-                    PlotParam.Type='loglog';
+                        PlotParam.Type='loglog';
                 end
             end
@@ -5180,8 +5191,11 @@
             imax=6;
         end
-    case {'civdata','civdata_3D','pivdata_fluidimage'}
+    case {'civdata','civdata_compress','civdata_3D','pivdata_fluidimage'}
         menu={'civ1';'filter1';'civ2';'filter2'};
         imax=[0 1 1 2 3 3 4 5 5 6];
         imax=imax(min(CivStage+1,10));
+        if strcmp(FileType,'civdata_compress')&& CivStage>=4
+            imin=3;
+        end
 end
 menu=menu(imin:imax);
