Index: /trunk/src/browse_data.m
===================================================================
--- /trunk/src/browse_data.m	(revision 930)
+++ /trunk/src/browse_data.m	(revision 931)
@@ -47,5 +47,5 @@
 %------------------------------------------------------------------------
 % --- Executes just before browse_data is made visible.
-function browse_data_OpeningFcn(hObject, eventdata, handles, DataSeries,EnableMirror)
+function browse_data_OpeningFcn(hObject, eventdata, handles, DataSeries,EnableMirror,MultiDevices)
 %------------------------------------------------------------------------
 
@@ -73,4 +73,9 @@
 set(hObject, 'Position', FigPos);
 set(hObject, 'Units', OldUnits);
+if exist('MultiDevices','var') && strcmp(MultiDevices,'on')
+    set(handles.ListDevices,'Max',2)
+else
+    set(handles.ListDevices,'Max',1)
+end
 if exist('EnableMirror','var') && strcmp(EnableMirror,'on')
     set(handles.CreateMirror,'Visible','on')
@@ -608,4 +613,5 @@
     Campaign=get(handles.SourceDir,'String');
 end
+handles.output=[];
 handles.output.Campaign=Campaign;
 Experiment=get(handles.ListExperiments,'String');
Index: /trunk/src/series/extract_multitif.m
===================================================================
--- /trunk/src/series/extract_multitif.m	(revision 930)
+++ /trunk/src/series/extract_multitif.m	(revision 931)
@@ -142,6 +142,6 @@
 ImagesPerLevel=100;%100;
 count=0;
-%count=933;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%CORRECTION EXP08: 67->_11_1
-%count=1934%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%CORRECTION EXP07: 
+%count=316;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%CORRECTION EXP08: 4684 images -> start at 316 start 67->_11_1
+%count=1934%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%CORRECTION EXP07: 3066 images
 %% loop on the files 
 for ifile=1:numel(ListFile)
@@ -156,8 +156,8 @@
     for iframe=1:NbFrames      
         A=imread(ImageName,iframe);
-        count=count+1;
+
         if isequal(ImagesPerLevel,1)% mode series 
             
-            OutputFile=fullfile(OutputDir,['img_' num2str(count) '.png']);
+            OutputFile=fullfile(OutputDir,['img_' num2str(count+1) '.png']);
         else % mode multilevel or volume (indices i and j)
             i_index=fix(count/ImagesPerLevel)+1;
@@ -166,4 +166,5 @@
         end
         imwrite(A,OutputFile,'BitDepth',16)
+        count=count+1;
     end
 end
Index: /trunk/src/series/extract_rdvision.m
===================================================================
--- /trunk/src/series/extract_rdvision.m	(revision 930)
+++ /trunk/src/series/extract_rdvision.m	(revision 931)
@@ -4,5 +4,6 @@
 %------------------------------------------------------------------------
 %
-%%%%%%%%%%% GENERAL TO ALL SERIES ACTION FCTS %%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%% GENERAL TO ALL SERIES ACTION FCTS %
+%%%%%%%%%%%%%%%%%%%%%%%%%%
 %
 %OUTPUT
@@ -243,4 +244,5 @@
    
     
+    
     %% reading the .sqb file
     m = memmapfile(filename_sqb,'Format', { 'uint32' [1 1] 'offset'; ...
@@ -286,4 +288,11 @@
         checkpreserve=1;% will not erase the initial files, possibility of error
     end
+    
+        %% checking consistency with the xml file
+    if ~isequal(SeqData.nb_frames,numel(timestamp))
+        disp_uvmat('ERRROR',['inconsistent number of images ' num2str(SeqData.nb_frames) ' with respect to the xml file: ' num2str(numel(timestamp))] ,checkrun);
+        return
+    end    
+    
     if nbfield2>1
         NomTypeNew='_1_1';
@@ -301,8 +310,13 @@
     FileDir=SeqData.sequencename;
      FileDir=regexprep(FileDir,'_Master_Dalsa_4M180$','');%suppress '_Master_Dalsa_4M180'
-    for i1=1:npi-1
-        for j1=1:npj-1
+    for i1=1:numel(timestamp)/nbfield2
+        for j1=1:nbfield2
             OutputFile=fullfile_uvmat(RootPath,FileDir,'img','.png',NomTypeNew,i1,[],j1);% TODO: set NomTypeNew from SeqData.mode
+            try 
             A=imread(OutputFile);% check image reading (stop if error)
+            catch ME
+                disp(['checking ' OutputFile])
+                disp(ME.message)
+            end
         end
     end
@@ -378,5 +392,5 @@
     OutputFile=fullfile_uvmat(PathDir,FileDir,'img','.png',NomTypeNew,i1,[],j1);% TODO: set NomTypeNew from SeqData.mode
     fname=fullfile(binrepertoire,sprintf('%s%.5d.bin',SeqData.binfile,SqbData(ii).file_idx));
-    if exist(OutputFile,'file')
+    if exist(OutputFile,'file')% do not recreate existing image file
         fid=0;
     else
Index: /trunk/src/uvmat.m
===================================================================
--- /trunk/src/uvmat.m	(revision 930)
+++ /trunk/src/uvmat.m	(revision 931)
@@ -1273,43 +1273,47 @@
 RootPath=read_file_boxes(hhuvmat);
 
-OutPutDir=uigetfile_uvmat('choosean image folder to calibrate with slice position?',fileparts(RootPath),'uigetdir');
-OutPut=browse_data(OutPutDir);
+OutPutDir=uigetfile_uvmat('choose an image folder to document with slice position?',fileparts(RootPath),'uigetdir');
+OutPut=browse_data(OutPutDir,'off','on');
 nbcalib=0;
 for ilist=1:numel(OutPut.Experiment)
-    SubDirBase=regexprep(OutPut.DataSeries{1},'\..+$','');
-    XmlFile=fullfile(OutPut.Campaign,OutPut.Experiment{ilist},[SubDirBase '.xml']);
-    
-    % read the current xml file
-    [s,errormsg]=imadoc2struct(XmlFile,'GeometryCalib');
-    if ~isempty(errormsg)
-        msgbox_uvmat('ERROR',['error in reading ' XmlFile ': ' errormsg])
-        return
-    end
-    GeometryCalib=s.GeometryCalib;
-    GeometryCalib.NbSlice=SliceData.NbSlice;
-    GeometryCalib.CheckVolumeScan=SliceData.CheckVolumeScan;
-    Z_plane=linspace(SliceData.Z(1),SliceData.Z(2),SliceData.NbSlice);
-    GeometryCalib.SliceCoord=Z_plane'*[0 0 1];
-    GeometryCalib.SliceAngle=zeros(GeometryCalib.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 around x axis (to generalise)
-    GeometryCalib.SliceAngle(:,2)=Angle_2';%rotation around y axis (to generalise)
-    GeometryCalib.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');
-    end
-    
-    % update the current xml file
-    errormsg=update_imadoc(GeometryCalib,XmlFile,'GeometryCalib');% introduce the calibration data in the xml file
-    if ~strcmp(errormsg,'')
-        msgbox_uvmat('ERROR',errormsg);
-    else
-        display([XmlFile ' updated with slice positions'])
-        nbcalib=nbcalib+1;
+    for idevice=1:numel(OutPut.DataSeries)
+        SubDirBase=regexprep(OutPut.DataSeries{idevice},'\..+$','');
+        XmlFile=fullfile(OutPut.Campaign,OutPut.Experiment{ilist},[SubDirBase '.xml']);
+        
+        % read the current xml file
+        if  exist(XmlFile,'file')
+            [s,errormsg]=imadoc2struct(XmlFile,'GeometryCalib');
+            if ~isempty(errormsg)
+                msgbox_uvmat('ERROR',['error in reading ' XmlFile ': ' errormsg])
+                return
+            end
+            GeometryCalib=s.GeometryCalib;
+            GeometryCalib.NbSlice=SliceData.NbSlice;
+            GeometryCalib.CheckVolumeScan=SliceData.CheckVolumeScan;
+            Z_plane=linspace(SliceData.Z(1),SliceData.Z(2),SliceData.NbSlice);
+            GeometryCalib.SliceCoord=Z_plane'*[0 0 1];
+            GeometryCalib.SliceAngle=zeros(GeometryCalib.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 around x axis (to generalise)
+            GeometryCalib.SliceAngle(:,2)=Angle_2';%rotation around y axis (to generalise)
+            GeometryCalib.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');
+            end
+            
+            % update the current xml file
+            errormsg=update_imadoc(GeometryCalib,XmlFile,'GeometryCalib');% introduce the calibration data in the xml file
+            if ~strcmp(errormsg,'')
+                msgbox_uvmat('ERROR',errormsg);
+            else
+                display([XmlFile ' updated with slice positions'])
+                nbcalib=nbcalib+1;
+            end
+        end
     end
 end
