Index: trunk/src/geometry_calib.m
===================================================================
--- trunk/src/geometry_calib.m	(revision 1111)
+++ trunk/src/geometry_calib.m	(revision 1112)
@@ -256,12 +256,14 @@
     [num2str(numel(ind_removed)) ' points removed']});
 % SliceCoord_ref=[0 0 0]; %default reference plane
+checkslice=0;
 if strcmp(answer,'Yes') %store the calibration data
     Z=Coord(:,3);
     if strcmp(calib_cell{val}(1:2),'3D') && isequal(max(Z),min(Z))%set the plane position for 3D (projection) calibration
         %set the Z position of the reference plane used for calibration
-        answer=msgbox_uvmat('INPUT_Y-N',{['Assume that the illuminated plane is at z=' num2str(Z(1)) ] ; 'can be later modified by MenuSetSlice in the upper bar menu of uvmat'});
+        answer=msgbox_uvmat('INPUT_Y-N',{['Do you assume that the illuminated plane is at z=' num2str(Z(1)) '?' ] ; 'can be later modified by MenuSetSlice in the upper bar menu of uvmat'});
         if strcmp(answer,'Yes')
-            GeometryCalib.NbSlice=1;
-            GeometryCalib.SliceCoord=[0 0 Z(1)];
+            Slice.NbSlice=1;
+            Slice.SliceCoord=[0 0 Z(1)];
+            checkslice=1;% will document the item <Slice> in ImaDoc
         end
     end
@@ -319,13 +321,17 @@
                 end
                 errormsg=update_imadoc(GeometryCalib,XmlName,'GeometryCalib');% introduce the calibration data in the xml file
+                dispmessage='';
+                if checkslice
+                    errormsg=update_imadoc(Slice,XmlName,'Slice');% introduce the slice position in the xml file
+                    dispmessage=' and slice position';
+                end
                 if ~strcmp(errormsg,'')
                     msgbox_uvmat('ERROR',errormsg);
                 else
                     if check_update
-                        display([XmlName ' updated with calibration parameters'])
+                        display([XmlName ' updated with calibration parameters' dispmessage])
                     else
-                        display([XmlName ' created with calibration parameters'])
+                        display([XmlName ' created with calibration parameters' dispmessage])
                     end
-                    %nbcalib=nbcalib+1;
                 end
             end
@@ -333,6 +339,6 @@
         msgbox_uvmat('CONFIMATION',['calibration replicated for ' num2str(NbExp) ' experiments']);
     else
-        %% copy the xml file from the old location if appropriate, then update with the calibration parameters
-        if ~exist(outputfile,'file') && ~isempty(SubDirBase)
+        %% update the calibration parameters in the currently opened uvmat GUI
+        if ~exist(outputfile,'file') && ~isempty(SubDirBase) %copy the xml file from the old location if appropriate
             oldxml=[fullfile(RootPath,SubDirBase,get(hhuvmat.RootFile,'String')) '.xml'];
             if exist(oldxml,'file')
@@ -341,9 +347,12 @@
         end
         errormsg=update_imadoc(GeometryCalib,outputfile,'GeometryCalib');% introduce the calibration data in the xml file
+        if checkslice
+                    errormsg=update_imadoc(Slice,outputfile,'Slice');% introduce the slice position in the xml file
+        end
         if ~strcmp(errormsg,'')
             msgbox_uvmat('ERROR',errormsg);
         end
         
-        %% display image with new calibration in the currently opened uvmat interface
+        %% display image with new calibration in the currently opened uvmat GUI
         FieldList=get(hhuvmat.FieldName,'String');
         val=get(hhuvmat.FieldName,'Value');
@@ -413,5 +422,5 @@
 x_ima=Coord(:,4);
 y_ima=Coord(:,5);
-[Xpoints,Ypoints]=px_XYZ(GeometryCalib,Coord(:,1),Coord(:,2),Coord(:,3));% convention of downward z coordinate (facing the camera)
+[Xpoints,Ypoints]=px_XYZ(GeometryCalib,[],Coord(:,1),Coord(:,2),Coord(:,3));% convention of downward z coordinate (facing the camera)
 GeometryCalib.ErrorRms(1)=sqrt(mean((Xpoints-x_ima).*(Xpoints-x_ima)));
 GeometryCalib.ErrorRms(2)=sqrt(mean((Ypoints-y_ima).*(Ypoints-y_ima)));
@@ -436,5 +445,5 @@
     x_ima=Coord(:,4);
     y_ima=Coord(:,5);
-    [Xpoints,Ypoints]=px_XYZ(GeometryCalib,X,Y,Z);
+    [Xpoints,Ypoints]=px_XYZ(GeometryCalib,[],X,Y,Z);
     GeometryCalib.ErrorRms(1)=sqrt(mean((Xpoints-x_ima).*(Xpoints-x_ima)));
     GeometryCalib.ErrorRms(2)=sqrt(mean((Ypoints-y_ima).*(Ypoints-y_ima)));
@@ -805,5 +814,5 @@
 x_ima=Coord(:,4);
 y_ima=Coord(:,5);
-[Xpoints,Ypoints]=px_XYZ(Calib,X,Y,Z);
+[Xpoints,Ypoints]=px_XYZ(Calib,[],X,Y,Z);
 ErrorRms(1)=sqrt(mean((Xpoints-x_ima).*(Xpoints-x_ima)));
 ErrorRms(2)=sqrt(mean((Ypoints-y_ima).*(Ypoints-y_ima)));
Index: trunk/src/mouse_motion.m
===================================================================
--- trunk/src/mouse_motion.m	(revision 1111)
+++ trunk/src/mouse_motion.m	(revision 1112)
@@ -497,5 +497,5 @@
 %% draw ruler
 if test_ruler && isfield(AxeData,'Drawing') && isequal(AxeData.Drawing,'ruler')
-    if isfield(AxeData,'RulerHandle')
+    if isfield(AxeData,'RulerHandle') && ~isempty(findobj(AxeData.RulerHandle)) && size(xy,2)>=2
         pointershape='crosshair'; %give  the mouse pointer a cross shape
         RulerCoord=[AxeData.RulerCoord ;xy(1,1:2)]; %coordinates defining the ruler segment
Index: trunk/src/mouse_up.m
===================================================================
--- trunk/src/mouse_up.m	(revision 1111)
+++ trunk/src/mouse_up.m	(revision 1112)
@@ -363,10 +363,12 @@
     RulerCoord=[AxeData.RulerCoord ;xy(1,1:2)];% append the recorded ruler origin to the current mouse coordinates
     RulerCoord=diff(RulerCoord,1);% coordiante difference between segment end and beginning
-    RulerCoord=RulerCoord(1)+i*RulerCoord(2);
+    RulerCoord=RulerCoord(1)+1i*RulerCoord(2);
     distance=abs(RulerCoord);
     azimuth=(180/pi)*angle(RulerCoord);
     msgbox_uvmat('RULER','',['length: ' num2str(distance,3) ',  angle(degrees): ' num2str(azimuth,3)])
+    if isfield(AxeData,'RulerHanle')&&~isempty(findobj(AxeData.RulerHandle))
     delete(AxeData.RulerHandle)%delete the ruler graphic object
     AxeData=rmfield(AxeData,'RulerHandle');%remove the ruler handle in AxeData
+    end
     AxeData.Drawing='off';%exit the ruler drawing mode
 end
Index: trunk/src/phys_XYZ.m
===================================================================
--- trunk/src/phys_XYZ.m	(revision 1111)
+++ trunk/src/phys_XYZ.m	(revision 1112)
@@ -33,20 +33,23 @@
 %=======================================================================
 
-function [Xphys,Yphys,Zphys]=phys_XYZ(Calib,X,Y,Zindex)
+function [Xphys,Yphys,Zphys]=phys_XYZ(Calib,Slice,X,Y,Zindex)
 %------------------------------------------------------------------------
 testangle=0;% =1 if the illumination plane is tilted with respect to the horizontal plane Xphys Yphys
 test_refraction=0;% =1 if the considered points are viewed through an horizontal interface (located at z=Calib.InterfaceCoord(3)') 
 Zphys=0; %default output
-if exist('Zindex','var')&& isequal(Zindex,round(Zindex))&& Zindex>0 && isfield(Calib,'SliceCoord')&&size(Calib.SliceCoord,1)>=Zindex
-    if isfield(Calib, 'SliceAngle') && size(Calib.SliceAngle,1)>=Zindex && ~isequal(Calib.SliceAngle(Zindex,:),[0 0 0])
+if isempty(Slice)
+    Slice=Calib;%old convention < 2022
+end
+if exist('Zindex','var')&& isequal(Zindex,round(Zindex))&& Zindex>0 && isfield(Slice,'SliceCoord')&&size(Slice.SliceCoord,1)>=Zindex
+    if isfield(Slice, 'SliceAngle') && size(Slice.SliceAngle,1)>=Zindex && ~isequal(Slice.SliceAngle(Zindex,:),[0 0 0])
         testangle=1;
-        norm_plane=angle2normal(Calib.SliceAngle(Zindex,:));% coordinates UVMAT-httpsof the unit vector normal to the current illumination plane
+        norm_plane=angle2normal(Slice.SliceAngle(Zindex,:));% coordinates UVMAT-httpsof the unit vector normal to the current illumination plane
     end
-    Z0=Calib.SliceCoord(Zindex,3);%horizontal plane z=cte
+    Z0=Slice.SliceCoord(Zindex,3);%horizontal plane z=cte
     Z0virt=Z0;
-    if isfield(Calib,'InterfaceCoord') && isfield(Calib,'RefractionIndex')
-        H=Calib.InterfaceCoord(3);% z position of the water surface
+    if isfield(Slice,'InterfaceCoord') && isfield(Slice,'RefractionIndex')
+        H=Slice.InterfaceCoord(3);% z position of the water surface
         if H>Z0
-            Z0virt=H-(H-Z0)/Calib.RefractionIndex; %corrected z (virtual object)
+            Z0virt=H-(H-Z0)/Slice.RefractionIndex; %corrected z (virtual object)
             test_refraction=1;
         end
@@ -86,13 +89,13 @@
         b=-norm_plane(2)/norm_plane(3);
         if test_refraction
-            avirt=a/Calib.RefractionIndex;
-            bvirt=b/Calib.RefractionIndex;
+            avirt=a/Slice.RefractionIndex;
+            bvirt=b/Slice.RefractionIndex;
         else
             avirt=a;
             bvirt=b;
         end
-        cvirt=Z0virt-avirt*Calib.SliceCoord(Zindex,1)-bvirt*Calib.SliceCoord(Zindex,2);% Z0 = (virtual) z coordinate on the rotation axis (assumed horizontal)
+        cvirt=Z0virt-avirt*Slice.SliceCoord(Zindex,1)-bvirt*Slice.SliceCoord(Zindex,2);% Z0 = (virtual) z coordinate on the rotation axis (assumed horizontal)
                                % c=z coordinate at (x,y)=(0,0)
-        c=Z0-a*Calib.SliceCoord(Zindex,1)-b*Calib.SliceCoord(Zindex,2);
+        c=Z0-a*Slice.SliceCoord(Zindex,1)-b*Slice.SliceCoord(Zindex,2);
         R(1)=R(1)+avirt*R(3);
         R(2)=R(2)+bvirt*R(3);
Index: trunk/src/phys_ima.m
===================================================================
--- trunk/src/phys_ima.m	(revision 1111)
+++ trunk/src/phys_ima.m	(revision 1112)
@@ -27,5 +27,9 @@
     npx=[npx siz(2)];
     npy=[npy siz(1)];
-    Calib=XmlData{icell}.GeometryCalib;
+    Calib{icell}=XmlData{icell}.GeometryCalib;
+    Slice{icell}=Calib{icell};
+    if isfield(XmlData{icell},'Slice')
+    Slice{icell}=XmlData{icell}.Slice;
+    end
     coord_x=[0.5 siz(2)-0.5];
     coord_y=[0.5 siz(1)-0.5];
@@ -34,5 +38,5 @@
     y_edge=[coord_y(1)*ones(1,npx(icell)) linspace(coord_y(1),coord_y(end),npy(icell))...
         coord_y(end)*ones(1,npx(icell)) linspace(coord_y(end),coord_y(1),npy(icell))];%y coordinates of the image edge(four sides)
-    [xcorner_new,ycorner_new]=phys_XYZ(Calib,x_edge,y_edge,ZIndex);%corresponding physical coordinates
+    [xcorner_new,ycorner_new]=phys_XYZ(Calib{icell},Slice{icell},x_edge,y_edge,ZIndex);%corresponding physical coordinates
     dx(icell)=(max(xcorner_new)-min(xcorner_new))/(siz(2)-1);
     dy(icell)=(max(ycorner_new)-min(ycorner_new))/(siz(1)-1);
@@ -54,21 +58,20 @@
 A_out=cell(1,numel(A));
 
-for icell=1:length(A)
-    Calib=XmlData{icell}.GeometryCalib;
+for icell=1:numel(A)
     % rescaling of the image coordinates without change of the image array
-    if strcmp(Calib.CalibrationType,'rescale') && isequal(Calib,XmlData{1}.GeometryCalib)
+    if strcmp(Calib{icell}.CalibrationType,'rescale') && isequal(Calib,XmlData{1}.GeometryCalib)
         A_out{icell}=A{icell};%no transform
         Rangx=[0.5 npx-0.5];%image coordiantes of corners
         Rangy=[npy-0.5 0.5];
-        [Rangx]=phys_XYZ(Calib,Rangx,[0.5 0.5],ZIndex);%case of translations without rotation and quadratic deformation
-        [~,Rangy]=phys_XYZ(Calib,[0.5 0.5],Rangy,ZIndex);
+        [Rangx]=phys_XYZ(Calib{icell},[],Rangx,[0.5 0.5],ZIndex);%case of translations without rotation and quadratic deformation
+        [~,Rangy]=phys_XYZ(Calib{icell},[],[0.5 0.5],Rangy,ZIndex);
     else
         % the image needs to be interpolated to the new coordinates
         Z=0; %default
-        if isfield(Calib,'SliceCoord')&& size(Calib.SliceCoord,1)>=ZIndex %.Z= index of plane
-            SliceCoord=Calib.SliceCoord(ZIndex,:);
+        if isfield(Slice{icell},'SliceCoord')&& size(Slice{icell}.SliceCoord,1)>=ZIndex %.Z= index of plane
+            SliceCoord=Slice{icell}.SliceCoord(ZIndex,:);
             Z=SliceCoord(3);
-            if isfield(Calib, 'SliceAngle') && size(Calib.SliceAngle,1)>=ZIndex && ~isequal(Calib.SliceAngle(ZIndex,:),[0 0 0])
-                norm_plane=angle2normal(Calib.SliceAngle(ZIndex,:));
+            if isfield(Slice{icell}, 'SliceAngle') && size(Slice{icell}.SliceAngle,1)>=ZIndex && ~isequal(Slice{icell}.SliceAngle(ZIndex,:),[0 0 0])
+                norm_plane=angle2normal(Slice{icell}.SliceAngle(ZIndex,:));
                 Z=Z-(norm_plane(1)*(X-SliceCoord(1))+norm_plane(2)*(Y-SliceCoord(2)))/norm_plane(3);
             end
@@ -77,5 +80,5 @@
         yima=npy(icell)-0.5:-1:0.5;
         [XIMA_init,YIMA_init]=meshgrid(xima,yima);%grid of initial image in px coordinates
-        [XIMA,YIMA]=px_XYZ(XmlData{icell}.GeometryCalib,X,Y,Z);% image coordinates for each point in the real
+        [XIMA,YIMA]=px_XYZ(Calib{icell},Slice{icell},X,Y,Z);% image coordinates for each point in the real
         testuint8=isa(A{icell},'uint8');
         testuint16=isa(A{icell},'uint16');
Index: trunk/src/px_XYZ.m
===================================================================
--- trunk/src/px_XYZ.m	(revision 1111)
+++ trunk/src/px_XYZ.m	(revision 1112)
@@ -28,5 +28,5 @@
 %=======================================================================
 
-function [X,Y]=px_XYZ(Calib,Xphys,Yphys,Zphys)
+function [X,Y]=px_XYZ(Calib,Slice,Xphys,Yphys,Zphys)
 if ~exist('Zphys','var')
     Zphys=0;
@@ -40,12 +40,15 @@
 
 %%%%%%%%%%%%%
+if isempty(Slice)
+    Slice=Calib;
+end
 % general case
 if isfield(Calib,'R')
     R=(Calib.R)';
     %correct z for refraction if needed
-    if isfield(Calib,'InterfaceCoord') && isfield(Calib,'RefractionIndex')
-        H=Calib.InterfaceCoord(3);
+    if isfield(Slice,'InterfaceCoord') && isfield(Slice,'RefractionIndex')
+        H=Slice.InterfaceCoord(3);
         if H>Zphys
-            Zphys=H-(H-Zphys)/Calib.RefractionIndex; %corrected z (virtual object)Calib
+            Zphys=H-(H-Zphys)/Slice.RefractionIndex; %corrected z (virtual object)Calib
             
           %  test_refraction=1;
Index: trunk/src/series/extract_rdvision.m
===================================================================
--- trunk/src/series/extract_rdvision.m	(revision 1111)
+++ trunk/src/series/extract_rdvision.m	(revision 1112)
@@ -1,3 +1,3 @@
-%'extract_rdvision': relabel an image series with two indices, and correct errors from the RDvision transfer program
+%'extunningact_rdvision': relabel an image series with two indices, and correct errors from the RDvision transfer program
 %------------------------------------------------------------------------
 % function ParamOut=extract_rdvision(Param)
Index: trunk/src/set_grid.m
===================================================================
--- trunk/src/set_grid.m	(revision 1111)
+++ trunk/src/set_grid.m	(revision 1112)
@@ -258,4 +258,5 @@
     end
     tsaiA=[];%default
+    SliceA=[];
     if exist(fileAxml,'file')
         [XmlDataA,errormsg]=imadoc2struct(fileAxml);
@@ -266,4 +267,8 @@
         if isfield(XmlDataA,'GeometryCalib')
             tsaiA=XmlDataA.GeometryCalib;
+            SliceA=tsaiA;%default
+        end
+        if isfield(XmlDataA,'Slice')
+            SliceA=XmlDataA.Slice;
         end
     end
@@ -271,5 +276,5 @@
         msgbox_uvmat('WARNING','no geometric calibration available for image A, phys =pixel')
     else
-        [grid_x_imaA,grid_y_imaA]=px_XYZ(tsaiA,grid_x,grid_y,GUI.Z);
+        [grid_x_imaA,grid_y_imaA]=px_XYZ(tsaiA,SliceA,grid_x,grid_y,GUI.Z);
     end
 end
@@ -293,4 +298,5 @@
     end
     tsaiB=[];%default
+    SliceB=[];
     if exist(fileBxml,'file')
         [XmlDataB,errormsg]=imadoc2struct(fileBxml);
@@ -301,4 +307,8 @@
         if isfield(XmlDataB,'GeometryCalib')
             tsaiB=XmlDataB.GeometryCalib;
+            SliceB=tsaiB;%default
+        end
+        if isfield(XmlDataB,'Slice')
+            SliceB=XmlDataB.Slice;
         end
     end
@@ -308,5 +318,5 @@
         grid_y_imaB=grid_y;
     else
-        [grid_x_imaB,grid_y_imaB]=px_XYZ(tsaiB,grid_x,grid_y,GUI.Z);
+        [grid_x_imaB,grid_y_imaB]=px_XYZ(tsaiB,SliceB,grid_x,grid_y,GUI.Z);
     end
     B=imread(GUI.ImageB);
Index: trunk/src/transform_field/phys.m
===================================================================
--- trunk/src/transform_field/phys.m	(revision 1111)
+++ trunk/src/transform_field/phys.m	(revision 1112)
@@ -55,15 +55,23 @@
 DataOut=DataIn;%default first output field
 if nargin>=2 % nargin =nbre of input variables
+     Calib{1}=[];
     if isfield(XmlData,'GeometryCalib')
         Calib{1}=XmlData.GeometryCalib;
-    else
-        Calib{1}=[];
+    end
+    Slice{1}=Calib{1};
+    if isfield(XmlData,'Slice')
+        Slice{1}=XmlData.Slice;
     end
     if nargin>=3  %two input fields
         DataOut_1=DataIn_1;%default second output field
-        if nargin>=4 && isfield(XmlData_1,'GeometryCalib')
-            Calib{2}=XmlData_1.GeometryCalib;
-        else
-            Calib{2}=Calib{1}; 
+        Calib{2}=Calib{1};
+        if nargin>=4 
+            if isfield(XmlData_1,'GeometryCalib')
+                Calib{2}=XmlData_1.GeometryCalib;
+            end
+            Slice{2}=Calib{2};
+            if isfield(XmlData_1,'Slice')
+                Slice{2}=XmlData_1.Slice;
+            end
         end
     end
@@ -71,8 +79,7 @@
 
 %% get the z index defining the section plane
+ZIndex=1;
 if isfield(DataIn,'ZIndex')&&~isempty(DataIn.ZIndex)&&~isnan(DataIn.ZIndex)
     ZIndex=DataIn.ZIndex;
-else
-    ZIndex=1;
 end
 
@@ -82,5 +89,5 @@
 if  ~isempty(Calib{1})
     if isfield(Calib{1},'CalibrationType')&& isfield(Calib{1},'CoordUnit') && isfield(DataIn,'CoordUnit')&& strcmp(DataIn.CoordUnit,'pixel')   
-        DataOut=phys_1(DataIn,Calib{1},ZIndex);% transform coordinates and velocity components
+        DataOut=phys_1(DataIn,Calib{1},Slice{1},ZIndex);% transform coordinates and velocity components
         %case of images or scalar: in case of two input fields, we need to project the transform  on the same regular grid
         if isfield(DataIn,'A') && isfield(DataIn,'Coord_x') && ~isempty(DataIn.Coord_x) && isfield(DataIn,'Coord_y')&&...
@@ -94,11 +101,11 @@
 
 %% document the selected  plane position and angle if relevant
-if  checktransform && isfield(Calib{1},'SliceCoord')&&size(Calib{1}.SliceCoord,1)>=ZIndex
-    DataOut.PlaneCoord=Calib{1}.SliceCoord(ZIndex,:);% transfer the slice position corresponding to index ZIndex
-    if isfield(Calib{1},'SliceAngle') % transfer the slice rotation angles
-        if isequal(size(Calib{1}.SliceAngle,1),1)% case of a unique angle
-            DataOut.PlaneAngle=Calib{1}.SliceAngle;
+if  checktransform && isfield(Slice{1},'SliceCoord')&&size(Slice{1}.SliceCoord,1)>=ZIndex
+    DataOut.PlaneCoord=Slice{1}.SliceCoord(ZIndex,:);% transfer the slice position corresponding to index ZIndex
+    if isfield(Slice{1},'SliceAngle') % transfer the slice rotation angles
+        if isequal(size(Slice{1}.SliceAngle,1),1)% case of a unique angle
+            DataOut.PlaneAngle=Slice{1}.SliceAngle;
         else  % case of multiple planes with different angles: select the plane with index ZIndex
-            DataOut.PlaneAngle=Calib{1}.SliceAngle(ZIndex,:);
+            DataOut.PlaneAngle=Slice{1}.SliceAngle(ZIndex,:);
         end
     end
@@ -113,13 +120,13 @@
     end
     if isfield(Calib{2},'CalibrationType')&&isfield(Calib{2},'CoordUnit') && isfield(DataIn_1,'CoordUnit')&& strcmp(DataIn_1.CoordUnit,'pixel')
-        DataOut_1=phys_1(DataOut_1,Calib{2},ZIndex);
-        if isfield(Calib{1},'SliceCoord')
-            if ~(isfield(Calib{2},'SliceCoord') && isequal(Calib{2}.SliceCoord,Calib{1}.SliceCoord))
+        DataOut_1=phys_1(DataOut_1,Calib{2},Slice{2},ZIndex);
+        if isfield(Slice{2},'SliceCoord')
+            if ~(isfield(Slice{2},'SliceCoord') && isequal(Slice{2}.SliceCoord,Slice{1}.SliceCoord))
                 DataOut_1.Txt='different plane positions for the two input fields';
                 return
             end
             DataOut_1.PlaneCoord=DataOut.PlaneCoord;% same plane position for the two input fields
-            if isfield(Calib{1},'SliceAngle')
-                if ~(isfield(Calib{2},'SliceAngle') && isequal(Calib{2}.SliceAngle,Calib{1}.SliceAngle))
+            if isfield(Slice{1},'SliceAngle')
+                if ~(isfield(Slice{2},'SliceAngle') && isequal(Slice{2}.SliceAngle,Slice{1}.SliceAngle))
                     DataOut_1.Txt='different plane angles for the two input fields';
                     return
@@ -131,5 +138,5 @@
                 ~isempty(DataIn_1.Coord_y)&&length(DataIn_1.A)>1
             iscalar=iscalar+1;
-            Calib{iscalar}=Calib{2};
+%             Calib{iscalar}=Calib{2};
             A{iscalar}=DataIn_1.A;
         end
@@ -163,5 +170,5 @@
 %------------------------------------------------
 %--- transform a single field
-function DataOut=phys_1(Data,Calib,ZIndex)
+function DataOut=phys_1(Data,Calib,Slice,ZIndex)
 %------------------------------------------------
 %% set default output
@@ -171,5 +178,5 @@
 %% transform  X,Y coordinates for velocity fields (transform of an image or scalar done in phys_ima)
 if isfield(Data,'X') &&isfield(Data,'Y')&&~isempty(Data.X) && ~isempty(Data.Y)
-  [DataOut.X,DataOut.Y]=phys_XYZ(Calib,Data.X,Data.Y,ZIndex);
+  [DataOut.X,DataOut.Y]=phys_XYZ(Calib,Slice,Data.X,Data.Y,ZIndex);
     Dt=1; %default
     if isfield(Data,'dt')&&~isempty(Data.dt)
@@ -180,6 +187,6 @@
     end
     if isfield(Data,'U')&&isfield(Data,'V')&&~isempty(Data.U) && ~isempty(Data.V)
-        [XOut_1,YOut_1]=phys_XYZ(Calib,Data.X-Data.U/2,Data.Y-Data.V/2,ZIndex);
-        [XOut_2,YOut_2]=phys_XYZ(Calib,Data.X+Data.U/2,Data.Y+Data.V/2,ZIndex);
+        [XOut_1,YOut_1]=phys_XYZ(Calib,Slice,Data.X-Data.U/2,Data.Y-Data.V/2,ZIndex);
+        [XOut_2,YOut_2]=phys_XYZ(Calib,Slice,Data.X+Data.U/2,Data.Y+Data.V/2,ZIndex);
         DataOut.U=(XOut_2-XOut_1)/Dt;
         DataOut.V=(YOut_2-YOut_1)/Dt;
@@ -213,8 +220,8 @@
     % estimate the Jacobian matrix DXpx/DXphys
     for ip=1:length(Data.X)
-        [Xp1,Yp1]=phys_XYZ(Calib,Data.X(ip)+0.5,Data.Y(ip),ZIndex);
-        [Xm1,Ym1]=phys_XYZ(Calib,Data.X(ip)-0.5,Data.Y(ip),ZIndex);
-        [Xp2,Yp2]=phys_XYZ(Calib,Data.X(ip),Data.Y(ip)+0.5,ZIndex);
-        [Xm2,Ym2]=phys_XYZ(Calib,Data.X(ip),Data.Y(ip)-0.5,ZIndex);
+        [Xp1,Yp1]=phys_XYZ(Calib,Slice,Data.X(ip)+0.5,Data.Y(ip),ZIndex);
+        [Xm1,Ym1]=phys_XYZ(Calib,Slice,Data.X(ip)-0.5,Data.Y(ip),ZIndex);
+        [Xp2,Yp2]=phys_XYZ(Calib,Slice,Data.X(ip),Data.Y(ip)+0.5,ZIndex);
+        [Xm2,Ym2]=phys_XYZ(Calib,Slice,Data.X(ip),Data.Y(ip)-0.5,ZIndex);
         %Jacobian matrix DXpphys/DXpx
         DjXi(1,1)=(Xp1-Xm1);
Index: trunk/src/transform_field/phys_polar.m
===================================================================
--- trunk/src/transform_field/phys_polar.m	(revision 1111)
+++ trunk/src/transform_field/phys_polar.m	(revision 1112)
@@ -78,5 +78,5 @@
 Data=DataIn; %default output
 if isfield(Data,'CoordUnit')
-Data=rmfield(Data,'CoordUnit');
+    Data=rmfield(Data,'CoordUnit');
 end
 Data.ListVarName = {};
@@ -85,7 +85,8 @@
 DataCell{1}=DataIn;
 Calib{1}=[];
+Slice{1}=[];
 DataCell{2}=[];%default
 checkpixel(1)=0;
-if isfield(DataCell{1},'CoordUnit')&& strcmp(DataCell{1}.CoordUnit,'pixel') 
+if isfield(DataCell{1},'CoordUnit')&& strcmp(DataCell{1}.CoordUnit,'pixel')
     checkpixel(1)=1;
 end
@@ -94,5 +95,10 @@
         Calib{1}=XmlData.GeometryCalib;
     end
+    Slice{1}=Calib{1};
+    if isfield(XmlData,'Slice')
+        Slice{1}=XmlData.Slice;
+    end
     Calib{2}=Calib{1};
+    Slice{2}=Slice{1};
 else
     Data.Txt='wrong input: need two or four structures';
@@ -101,10 +107,13 @@
 if nargin==4% case of two input fields
     checkpixel(2)=0;
-if isfield(DataCell{2},'CoordUnit')&& strcmp(DataCell{2}.CoordUnit,'pixel') 
-    checkpixel(2)=1;
-end
+    if isfield(DataCell{2},'CoordUnit')&& strcmp(DataCell{2}.CoordUnit,'pixel')
+        checkpixel(2)=1;
+    end
     DataCell{2}=DataIn_1;%default
     if isfield(XmlData_1,'GeometryCalib')&& ~isempty(XmlData_1.GeometryCalib) && checkpixel(2)
         Calib{2}=XmlData_1.GeometryCalib;
+    end
+    if isfield(XmlData_1,'Slice')
+        Slice{2}=XmlData_1.Slice;
     end
     nbinput=2;
@@ -218,5 +227,5 @@
                     if ~isempty(Calib{ifield})
                         [X,Y,Z,DataCell{ifield}.(UName),DataCell{ifield}.(VName)]=...
-                            phys_XYUV(DataCell{ifield},Calib{ifield},ZIndex);
+                            phys_XYUV(DataCell{ifield},Calib{ifield},Slice{ifield},ZIndex);
                     end
                 end
@@ -304,4 +313,5 @@
                     ZInd(nbgrid)=ZIndex;
                     Calib_new{nbgrid}=Calib{ifield};
+                    Slice_new{nbgrid}=Slice{ifield};
                 end
                 if isfield(CellInfo{icell},'VarIndex_vector_x')&& isfield(CellInfo{icell},'VarIndex_vector_y')
@@ -325,4 +335,6 @@
                     Calib_new{nbgrid+1}=Calib{ifield};
                     Calib_new{nbgrid+2}=Calib{ifield};
+                    Slice_new{nbgrid+1}=Calib{ifield};
+                    Slice_new{nbgrid+2}=Calib{ifield};
                     nbgrid=nbgrid+2;
                     nbvar=nbvar+2;
@@ -335,5 +347,5 @@
 %% tranform cartesian to polar coordinates for gridded data
 if nbgrid~=0
-    [A,Data.radius,Data.theta]=phys_Ima_polar(A,coord_x,coord_y,Calib_new,ZInd,origin_xy,radius_offset,angle_offset,angle_scale);
+    [A,Data.radius,Data.theta]=phys_Ima_polar(A,coord_x,coord_y,Calib_new,Slice_new,ZInd,origin_xy,radius_offset,angle_offset,angle_scale);
     for icell=1:numel(A)
         if icell<=numel(A)-1 && check_vector(icell)==1 && check_vector(icell+1)==1   %transform u,v into polar coordinates
@@ -373,5 +385,5 @@
 %------------------------------------------------
 %--- transform a single field into phys coordiantes
-function [X,Y,Z,U,V]=phys_XYUV(Data,Calib,ZIndex)
+function [X,Y,Z,U,V]=phys_XYUV(Data,Calib,Slice,ZIndex)
 %------------------------------------------------
 %% set default output
@@ -385,5 +397,5 @@
 %% transform  X,Y coordinates for velocity fields (transform of an image or scalar done in phys_ima)
 if isfield(Data,'X') &&isfield(Data,'Y')&&~isempty(Data.X) && ~isempty(Data.Y)
-    [X,Y,Z]=phys_XYZ(Calib,Data.X,Data.Y,ZIndex);
+    [X,Y,Z]=phys_XYZ(Calib,Slice,Data.X,Data.Y,ZIndex);
     Dt=1; %default
     if isfield(Data,'dt')&&~isempty(Data.dt)
@@ -394,6 +406,6 @@
     end
     if isfield(Data,'U')&&isfield(Data,'V')&&~isempty(Data.U) && ~isempty(Data.V)
-        [XOut_1,YOut_1]=phys_XYZ(Calib,Data.X-Data.U/2,Data.Y-Data.V/2,ZIndex);
-        [XOut_2,YOut_2]=phys_XYZ(Calib,Data.X+Data.U/2,Data.Y+Data.V/2,ZIndex);
+        [XOut_1,YOut_1]=phys_XYZ(Calib,Slice,Data.X-Data.U/2,Data.Y-Data.V/2,ZIndex);
+        [XOut_2,YOut_2]=phys_XYZ(Calib,Slice,Data.X+Data.U/2,Data.Y+Data.V/2,ZIndex);
         U=(XOut_2-XOut_1)/Dt;
         V=(YOut_2-YOut_1)/Dt;
@@ -404,5 +416,5 @@
 % tranform gridded field into polar coordiantes on a regular polar grid,
 % transform to phys coordiantes if requested by calibration input
-function [A_out,radius,theta]=phys_Ima_polar(A,coord_x,coord_y,CalibIn,ZIndex,origin_xy,radius_offset,angle_offset,angle_scale)
+function [A_out,radius,theta]=phys_Ima_polar(A,coord_x,coord_y,CalibIn,SliceIn,ZIndex,origin_xy,radius_offset,angle_offset,angle_scale)
 rcorner=[];
 thetacorner=[];
@@ -420,5 +432,5 @@
     % transform edges into phys coordinates if requested
     if ~isempty(CalibIn{icell})
-        [x_edge,y_edge]=phys_XYZ(CalibIn{icell},x_edge,y_edge,ZIndex(icell));% physical coordinates of the image edge
+        [x_edge,y_edge]=phys_XYZ(CalibIn{icell},SliceIn{icell},x_edge,y_edge,ZIndex(icell));% physical coordinates of the image edge
     end
     
Index: trunk/src/uvmat.m
===================================================================
--- trunk/src/uvmat.m	(revision 1111)
+++ trunk/src/uvmat.m	(revision 1112)
@@ -1208,30 +1208,34 @@
 
 UvData=get(handles.uvmat,'UserData');%read UvData properties stored on the uvmat interface
-% check=0;
-if isfield(UvData,'XmlData')&&isfield(UvData.XmlData{1},'GeometryCalib')&& isfield(UvData.XmlData{1}.GeometryCalib,'SliceCoord')
-    GeometryCalib=UvData.XmlData{1}.GeometryCalib;
-else
-    msgbox_uvmat('ERROR','3D geometric calibration needed before defining slices')
-    return
-end
-SliceCoord=GeometryCalib.SliceCoord;
-InterfaceCoord=min(SliceCoord(:,3));
-if isfield(GeometryCalib,'InterfaceCoord')
-    InterfaceCoord=GeometryCalib.InterfaceCoord(1,3);
-end
-NbSlice=size(SliceCoord,1);
+Slice=[];
+if isfield(UvData,'XmlData')
+    if isfield(UvData.XmlData{1},'GeometryCalib')&& isfield(UvData.XmlData{1}.GeometryCalib,'SliceCoord')
+        Slice=UvData.XmlData{1}.GeometryCalib;%old convention < 2022
+    elseif isfield(UvData.XmlData{1},'Slice')
+        Slice=UvData.XmlData{1}.Slice;% new convention ( 2022)
+    end
+end
+% default input
+if ~(isfield(Slice,'SliceCoord') && size(Slice.SliceCoord,2)==3)
+    Slice.SliceCoord=[0 0 0];
+end
+InterfaceCoord=min(Slice.SliceCoord(:,3));
+if isfield(Slice,'InterfaceCoord')
+    InterfaceCoord=Slice.InterfaceCoord(1,3);
+end
+NbSlice=size(Slice.SliceCoord,1);
 CheckVolumeScan=0;
-if isfield(GeometryCalib,'CheckVolumeScan')
-    CheckVolumeScan=GeometryCalib.CheckVolumeScan;
+if isfield(Slice,'CheckVolumeScan')
+    CheckVolumeScan=Slice.CheckVolumeScan;
 end
 RefractionIndex=1.33;
 CheckRefraction=0;% default value of the check box refraction
-if isfield(GeometryCalib,'RefractionIndex')
-    RefractionIndex=GeometryCalib.RefractionIndex;
+if isfield(Slice,'RefractionIndex')
+    RefractionIndex=Slice.RefractionIndex;
     CheckRefraction=1;
 end
 SliceAngle=[0 0 0];
-if isfield(GeometryCalib,'SliceAngle')
-    SliceAngle=GeometryCalib.SliceAngle;
+if isfield(Slice,'SliceAngle')
+    SliceAngle=Slice.SliceAngle;
 end
 
@@ -1244,6 +1248,6 @@
 Bottom=ScreenSize(4)-Height-40; %put fig at top right
 hfig=findobj(allchild(0),'Tag','set_slice');
-if ~isempty(hfig),delete(hfig), end; %delete existing version of the GUI
-hfig=figure('name','set_slices','tag','set_slice','MenuBar','none','NumberTitle','off','Units','pixels','Position',[Left,Bottom,Width,Height],'UserData',GeometryCalib);
+if ~isempty(hfig),delete(hfig), end %delete existing version of the GUI
+hfig=figure('name','set_slices','tag','set_slice','MenuBar','none','NumberTitle','off','Units','pixels','Position',[Left,Bottom,Width,Height],'UserData',Slice);
 BackgroundColor=get(hfig,'Color');
 hh=0.14; % box height (relative)
@@ -1262,7 +1266,7 @@
     'String','Z','FontUnits','points','FontSize',12,'FontWeight','bold','ForegroundColor','blue','HorizontalAlignment','right');%title
 uicontrol('Style','edit','Units','normalized', 'Position', [2*ii+ww 0.95-2*ii-hh ww hh],'tag','num_Z_1','BackgroundColor',[1 1 1],...
-    'String',num2str(SliceCoord(1,3)),'FontUnits','points','FontSize',12,'FontWeight','bold','TooltipString','''num_Z_1'': z position of first slice');%edit box
+    'String',num2str(Slice.SliceCoord(1,3)),'FontUnits','points','FontSize',12,'FontWeight','bold','TooltipString','''num_Z_1'': z position of first slice');%edit box
 uicontrol('Style','edit','Units','normalized', 'Position', [3*ii+2*ww 0.95-2*ii-hh ww hh],'tag','num_Z_2','BackgroundColor',[1 1 1],...
-    'String',num2str(SliceCoord(end,3)),'FontUnits','points','FontSize',12,'FontWeight','bold','TooltipString','''num_Z_2'': z position of last slice');%edit box
+    'String',num2str(Slice.SliceCoord(end,3)),'FontUnits','points','FontSize',12,'FontWeight','bold','TooltipString','''num_Z_2'': z position of last slice');%edit box
 uicontrol('Style','edit','Units','normalized', 'Position', [4*ii+3*ww 0.95-2*ii-hh ww hh],'tag','num_H','BackgroundColor',[1 1 1],...
     'String',num2str(InterfaceCoord),'Visible','off','FontUnits','points','FontSize',12,'FontWeight','bold','TooltipString','''num_H'': z position of the water surface (=Z_1 in air)');%edit box
@@ -1291,7 +1295,7 @@
 
 uicontrol('Style','edit','Units','normalized', 'Position', [3*ii+ww 0.95-5*ii-4.2*hh ww hh],'tag','num_SliceCoord_1','BackgroundColor',[1 1 1],...
-    'String',num2str(SliceCoord(1)),'FontUnits','points','FontSize',12,'FontWeight','bold','TooltipString','''num_SliceCoord_1'':x position of the tild origin');%edit box
+    'String',num2str(Slice.SliceCoord(1)),'FontUnits','points','FontSize',12,'FontWeight','bold','TooltipString','''num_SliceCoord_1'':x position of the tild origin');%edit box
 uicontrol('Style','edit','Units','normalized', 'Position', [3*ii+ww 0.95-6*ii-5.2*hh ww hh],'tag','num_SliceCoord_2','BackgroundColor',[1 1 1],...
-    'String',num2str(SliceCoord(2)),'FontUnits','points','FontSize',12,'FontWeight','bold','TooltipString','''num_SliceCoord_2'':y position of the tild origin');%edit box
+    'String',num2str(Slice.SliceCoord(2)),'FontUnits','points','FontSize',12,'FontWeight','bold','TooltipString','''num_SliceCoord_2'':y position of the tild origin');%edit box
 
 uicontrol('Style','text','Units','normalized', 'Position', [ii 0.95-5*ii-4*hh 1.3*ww hh/2],'BackgroundColor',BackgroundColor,'Tag','Angle_title_1',...
@@ -1349,10 +1353,10 @@
 [RootPath,SubDir,RootFile,tild,tild,tild,tild,FileExt]=fileparts_uvmat(FileName);
 XmlFile=find_imadoc(RootPath,SubDir,RootFile,FileExt);%find name of the relevant xml file
-[s,errormsg]=imadoc2struct(XmlFile,'GeometryCalib');%read the xml file
-if~isempty(errormsg)
-    msgbox_uvmat('ERROR',errormsg)
-    return
-end
-GeometryCalib=s.GeometryCalib;% get thegeometric calibration data
+% [s,errormsg]=imadoc2struct(XmlFile,'Slice');%read the xml file
+% if~isempty(errormsg)
+%     msgbox_uvmat('ERROR',errormsg)
+%     return
+% end
+% Slice=s.Slice;% get thegeometric calibration data
 
 %% read the content of the GUI set_slice
@@ -1361,6 +1365,6 @@
 Z_plane=str2num(get(hZ,'String'));% set of Z positions explicitly entered as a Matlab vector
 SliceData=read_GUI(hset_slice);
-GeometryCalib.NbSlice=SliceData.NbSlice;
-GeometryCalib.CheckVolumeScan=SliceData.CheckVolumeScan;
+Slice.NbSlice=SliceData.NbSlice;
+Slice.CheckVolumeScan=SliceData.CheckVolumeScan;
 if numel(Z_plane)<=2
     Z_plane=linspace(SliceData.Z(1),SliceData.Z(2),SliceData.NbSlice);
@@ -1368,19 +1372,19 @@
     set(hZ,'String',num2str(Z_plane))% restitute the display qfter reqding by read_GUI
 end
-GeometryCalib.SliceCoord=Z_plane'*[0 0 1];
-GeometryCalib.SliceCoord(:,1)=SliceData.SliceCoord(1);
-GeometryCalib.SliceCoord(:,2)=SliceData.SliceCoord(2);
-GeometryCalib.SliceAngle=zeros(GeometryCalib.NbSlice,3);
+Slice.SliceCoord=Z_plane'*[0 0 1];
+Slice.SliceCoord(:,1)=SliceData.SliceCoord(1);
+Slice.SliceCoord(:,2)=SliceData.SliceCoord(2);
+Slice.SliceAngle=zeros(Slice.NbSlice,3);
 Angle_1=linspace(SliceData.SliceAngle_1(1),SliceData.SliceAngle_1(2),SliceData.NbSlice);
 Angle_2=linspace(SliceData.SliceAngle_2(1),SliceData.SliceAngle_2(2),SliceData.NbSlice);
-GeometryCalib.SliceAngle(:,1)=Angle_1';%rotation angle around x axis 
-GeometryCalib.SliceAngle(:,2)=Angle_2';%rotation angle around y axis 
-GeometryCalib.SliceAngle(:,3)=0;
+Slice.SliceAngle(:,1)=Angle_1';%rotation angle around x axis 
+Slice.SliceAngle(:,2)=Angle_2';%rotation angle around y axis 
+Slice.SliceAngle(:,3)=0;
 if SliceData.CheckRefraction
-    GeometryCalib.InterfaceCoord=[0 0 SliceData.H];
-    GeometryCalib.RefractionIndex=SliceData.RefractionIndex;
-elseif isfield(GeometryCalib,'RefractionIndex')
-    GeometryCalib=rmfield(GeometryCalib,'RefractionIndex');
-    GeometryCalib=rmfield(GeometryCalib,'InterfaceCoord');
+    Slice.InterfaceCoord=[0 0 SliceData.H];
+    Slice.RefractionIndex=SliceData.RefractionIndex;
+elseif isfield(Slice,'RefractionIndex')
+    Slice=rmfield(Slice,'RefractionIndex');
+    Slice=rmfield(Slice,'InterfaceCoord');
 end
 
@@ -1430,5 +1434,5 @@
                 check_update=0;
             end
-            errormsg=update_imadoc(GeometryCalib,XmlName,'GeometryCalib');% introduce the calibration data in the xml file
+            errormsg=update_imadoc(Slice,XmlName,'Slice');% introduce the calibration data in the xml file
             if ~strcmp(errormsg,'')
                 msgbox_uvmat('ERROR',errormsg);
@@ -1446,5 +1450,5 @@
     
     %% store the result in the xml file used for calibration
-    errormsg=update_imadoc(GeometryCalib,XmlFile,'GeometryCalib');% introduce the calibration data in the xml file
+    errormsg=update_imadoc(Slice,XmlFile,'Slice');% introduce the calibration data in the xml file
     if strcmp(errormsg,'')
         msgbox_uvmat('CONFIRMATION',['slice positions saved in ' XmlFile]);
@@ -1925,5 +1929,5 @@
                             pos(:,3)=pos(:,3)+Calib.SliceCoord(3);
                         end
-                        [X,Y]=px_XYZ(Calib,pos(:,1),pos(:,2),pos(:,3));
+                        [X,Y]=px_XYZ(Calib,Slice,pos(:,1),pos(:,2),pos(:,3));
                     end
                     flagobj=~inpolygon(Xi,Yi,X',Y');%=0 inside the polygon, 1 outside
@@ -2479,20 +2483,24 @@
         drawnow
         if isfield(XmlDataRead, 'GeometryCalib') && ~isempty(XmlDataRead.GeometryCalib)
-            XmlData.GeometryCalib=XmlDataRead.GeometryCalib;
-            if isfield(XmlData.GeometryCalib,'CheckVolumeScan') && isequal(XmlData.GeometryCalib.CheckVolumeScan,1)
+            XmlData.GeometryCalib=XmlDataRead.GeometryCalib;      
+        end
+        XmlData.Slice=XmlData.GeometryCalib;%default
+        if isfield(XmlDataRead, 'Slice') && ~isempty(XmlDataRead.Slice)
+            XmlData.Slice=XmlDataRead.Slice;
+            % check whether the GUI geometry_calib is opened
+%             hgeometry_calib=findobj('tag','geometry_calib');
+%             if ~isempty(hgeometry_calib) % check whether the display of the GUI geometry_calib is consistent with the current calib param
+%                 GUserData=get(hgeometry_calib,'UserData');
+%                 if ~(isfield(GUserData,'XmlInputFile') && strcmp(GUserData.XmlInputFile,XmlFileName))
+%                     answer=msgbox_uvmat('INPUT_Y-N','refresh the display of the GUI geometry_calib with the new input data?');
+%                     if strcmp(answer,'Yes')
+%                         geometry_calib(XmlFileName);%diplay the new calibration points and parameters in geometry_calib
+%                     end
+%                 end
+%             end
+        end
+        if isfield(XmlData.Slice,'CheckVolumeScan') && isequal(XmlData.Slice.CheckVolumeScan,1)
                 set (handles.slices,'String','volume')
             end
-            % check whether the GUI geometry_calib is opened
-            hgeometry_calib=findobj('tag','geometry_calib');
-            if ~isempty(hgeometry_calib) % check whether the display of the GUI geometry_calib is consistent with the current calib param
-                GUserData=get(hgeometry_calib,'UserData');
-                if ~(isfield(GUserData,'XmlInputFile') && strcmp(GUserData.XmlInputFile,XmlFileName))
-                    answer=msgbox_uvmat('INPUT_Y-N','refresh the display of the GUI geometry_calib with the new input data?');
-                    if strcmp(answer,'Yes')
-                        geometry_calib(XmlFileName);%diplay the new calibration points and parameters in geometry_calib
-                    end
-                end
-            end
-        end
         if isfield(XmlDataRead, 'LIFCalib')
             XmlData.LIFCalib=XmlDataRead.LIFCalib;
@@ -2571,6 +2579,6 @@
             set(handles.TransformName,'Value',3); % phys transform by default if fixedLimits is off
         end
-        if isfield(GeometryCalib,'SliceCoord')
-           siz=size(GeometryCalib.SliceCoord);
+        if isfield(XmlData.Slice,'SliceCoord')
+           siz=size(XmlData.Slice.SliceCoord);
            if siz(1)>1
                NbSlice=siz(1);
@@ -2578,5 +2586,5 @@
                set(handles.slices,'Value',1)
            end
-           if isfield(GeometryCalib,'CheckVolumeScan') && isequal(GeometryCalib.CheckVolumeScan,1)
+           if isfield(XmlData.Slice,'CheckVolumeScan') && isequal(XmlData.Slice.CheckVolumeScan,1)
                set(handles.num_NbSlice,'Visible','off')
            else
@@ -5183,5 +5191,5 @@
                     Y=ObjectData.Coord(:,2);
                     if testphys
-                        [X,Y]=px_XYZ(Calib,X,Y,0);% to generalise with 3D cases
+                        [X,Y]=px_XYZ(Calib,[],X,Y,0);% to generalise with 3D cases
                     end
                     flagobj=~inpolygon(Xi,Yi,X',Y');%=0 inside the polygon, 1 outside
