Index: /trunk/src/geometry_calib.m
===================================================================
--- /trunk/src/geometry_calib.m	(revision 564)
+++ /trunk/src/geometry_calib.m	(revision 565)
@@ -1367,5 +1367,5 @@
 %------------------------------------------------------------------------
 Heading=[];%default
-[s,errormsg]=imadoc2struct(fileinput,'GeometryCalib');
+[s,errormsg]=imadoc2struct(fileinput,'Heading','GeometryCalib');
 if ~isempty(errormsg)
     msgbox_uvmat('ERROR',errormsg)
@@ -1405,5 +1405,5 @@
         set(handles.Psi,'String',num2str(GeometryCalib.omc(3),4))
     end
-    calib=reshape(GeometryCalib.PointCoord,[],1);
+    calib=reshape(GeometryCalib.SourceCalib.PointCoord,[],1);
     for ilist=1:numel(calib)
         CoordCell{ilist}=num2str(calib(ilist));
Index: /trunk/src/imadoc2struct.m
===================================================================
--- /trunk/src/imadoc2struct.m	(revision 564)
+++ /trunk/src/imadoc2struct.m	(revision 565)
@@ -17,9 +17,10 @@
 function [s,errormsg]=imadoc2struct(ImaDoc,varargin) 
 %% default input and output
-errormsg=[];%default
-s.Heading=[];%default
-s.Time=[]; %default
-s.TimeUnit=[]; %default
-s.GeometryCalib=[];
+errormsg='';%default
+s=[];
+% s.Heading=[];%default
+% s.Time=[]; %default
+% s.TimeUnit=[]; %default
+% s.GeometryCalib=[];
 % tsai=[];%default
 
@@ -33,8 +34,10 @@
 
 %% case of xml files
-if nargin >1
-    [s,Heading]=xml2struct(ImaDoc,varargin);% convert the xml file in a structure s, keeping only the subtree defined in input
-else
+if nargin ==1
     [s,Heading]=xml2struct(ImaDoc);% convert the whole xml file in a structure s
+elseif nargin ==2
+    [s,Heading]=xml2struct(ImaDoc,varargin{1});% convert the xml file in a structure s, keeping only the subtree defined in input
+else %TODO: deal with more than two subtrees?
+    [s,Heading]=xml2struct(ImaDoc,varargin{1},varargin{2});% convert the xml file in a structure s, keeping only the subtree defined in input
 end
 if ~strcmp(Heading,'ImaDoc')
@@ -43,59 +46,60 @@
 end
 %% reading timing
-Timing=s.Camera.BurstTiming;
-if ~iscell(Timing)
-    Timing={Timing};
-end
-s.Time=[];
-for k=1:length(Timing)
-    Frequency=1;
-    if isfield(Timing{k},'Frequency')
-        Frequency=Timing{k}.FrameFrequency;
+if isfield(s,'Camera')
+    Timing=s.Camera.BurstTiming;
+    if ~iscell(Timing)
+        Timing={Timing};
     end
-    Dtj=[];
-    if isfield(Timing{k},'Dtj')
-        Dtj=Timing{k}.Dtj/Frequency;%Dtj converted from frame unit to TimeUnit (e.g. 's');
+    s.Time=[];
+    for k=1:length(Timing)
+        Frequency=1;
+        if isfield(Timing{k},'Frequency')
+            Frequency=Timing{k}.FrameFrequency;
+        end
+        Dtj=[];
+        if isfield(Timing{k},'Dtj')
+            Dtj=Timing{k}.Dtj/Frequency;%Dtj converted from frame unit to TimeUnit (e.g. 's');
+        end
+        NbDtj=1;
+        if isfield(Timing{k},'NbDtj')&&~isempty(Timing{k}.NbDtj)
+            NbDtj=Timing{k}.NbDtj;
+        end
+        Dti=[];
+        if isfield(Timing{k},'Dti')
+            Dti=Timing{k}.Dti/Frequency;%Dti converted from frame unit to TimeUnit (e.g. 's');
+        end
+        NbDti=1;
+        if isfield(Timing{k},'NbDti')&&~isempty(Timing{k}.NbDti)
+            NbDti=Timing{k}.NbDti;
+        end
+        Time_val=Timing{k}.Time;%time in TimeUnit
+        if ~isempty(Dti)
+            Dti=reshape(Dti'*ones(1,NbDti),NbDti*numel(Dti),1); %concatene Dti vector NbDti times
+            Time_val=[Time_val;Time_val(end)+cumsum(Dti)];%append the times defined by the intervals  Dti
+        end
+        if ~isempty(Dtj)
+            Dtj=reshape(Dtj'*ones(1,NbDtj),1,NbDtj*numel(Dtj)); %concatene Dtj vector NbDtj times
+            Dtj=[0 Dtj];
+            Time_val=Time_val*ones(1,numel(Dtj))+ones(numel(Time_val),1)*cumsum(Dtj);% produce a time matrix with Dtj
+        end
+        % reading Dtk
+        Dtk=[];%default
+        NbDtk=1;%default
+        if isfield(Timing,'Dtk')
+            Dtk=Timing{k}.Dtk;
+        end
+        if isfield(Timing,'NbDtk')&&~isempty(Timing{k}.NbDtk)
+            NbDtk=Timing{k}.NbDtk;
+        end
+        if isempty(Dtk)
+            s.Time=[s.Time;Time_val];
+        else
+            for kblock=1:NbDtk+1
+                Time_val_k=Time_val+(kblock-1)*Dtk;
+                s.Time=[s.Time;Time_val_k];
+            end
+        end
     end
-    NbDtj=1;
-    if isfield(Timing{k},'NbDtj')&&~isempty(Timing{k}.NbDtj)
-        NbDtj=Timing{k}.NbDtj;
-    end
-    Dti=[];
-    if isfield(Timing{k},'Dti')
-        Dti=Timing{k}.Dti/Frequency;%Dti converted from frame unit to TimeUnit (e.g. 's');
-    end
-    NbDti=1;
-    if isfield(Timing{k},'NbDti')&&~isempty(Timing{k}.NbDti)
-        NbDti=Timing{k}.NbDti;
-    end
-    Time_val=Timing{k}.Time;%time in TimeUnit
-    if ~isempty(Dti)
-        Dti=reshape(Dti'*ones(1,NbDti),NbDti*numel(Dti),1); %concatene Dti vector NbDti times
-        Time_val=[Time_val;Time_val(end)+cumsum(Dti)];%append the times defined by the intervals  Dti
-    end
-    if ~isempty(Dtj)
-        Dtj=reshape(Dtj'*ones(1,NbDtj),1,NbDtj*numel(Dtj)); %concatene Dtj vector NbDtj times
-        Dtj=[0 Dtj];
-        Time_val=Time_val*ones(1,numel(Dtj))+ones(numel(Time_val),1)*cumsum(Dtj);% produce a time matrix with Dtj
-    end
-    % reading Dtk
-    Dtk=[];%default
-    NbDtk=1;%default
-    if isfield(Timing,'Dtk')
-        Dtk=Timing{k}.Dtk;
-    end
-    if isfield(Timing,'NbDtk')&&~isempty(Timing{k}.NbDtk)
-        NbDtk=Timing{k}.NbDtk;
-    end
-    if isempty(Dtk)
-        s.Time=[s.Time;Time_val];
-    else
-        for kblock=1:NbDtk+1
-            Time_val_k=Time_val+(kblock-1)*Dtk;
-            s.Time=[s.Time;Time_val_k];
-        end
-    end
-end
-           
+end
 
 % try
Index: /trunk/src/series/aver_stat.m
===================================================================
--- /trunk/src/series/aver_stat.m	(revision 564)
+++ /trunk/src/series/aver_stat.m	(revision 565)
@@ -303,10 +303,12 @@
         end
     else  % time from ImaDoc prevails if it exists
-        j1=1;%default
-        if ~isempty(j1_series{1})
-            j1=j1_series{1};
-        end
-        DataOut.Time=time(1,i1_series{1}(1),j1filexml);
-        DataOut.Time_end=time(end,i1_series{end}(end),j1_series{end}(end));
+%         j1=1;%default
+%         if ~isempty(j1_series{1})
+%             j1=j1_series{1};
+%         end
+        %DataOut.Time=time(1,i1_series{1}(1),j1);
+        %DataOut.Time_end=time(end,i1_series{end}(end),j1_series{end}(end));
+        DataOut.Time=time(1);
+        DataOut.Time_end=time(end);
     end
     
Index: /trunk/src/struct2xml.m
===================================================================
--- /trunk/src/struct2xml.m	(revision 564)
+++ /trunk/src/struct2xml.m	(revision 565)
@@ -31,7 +31,7 @@
           if isstruct(fieldnames_sub{ilist_sub})
                 t=struct2xml(fieldnames_sub{ilist_sub},t,uid);
-                save(t)
+%                 save(t)
           else
-              eval(['val_sub=val.' fieldnames_sub{ilist_sub} ';'])
+              val_sub=val.(fieldnames_sub{ilist_sub});
               t=add_element(t,uid,fieldnames_sub{ilist_sub},val_sub);
           end
Index: /trunk/src/xml2struct.m
===================================================================
--- /trunk/src/xml2struct.m	(revision 564)
+++ /trunk/src/xml2struct.m	(revision 565)
@@ -12,11 +12,22 @@
 function [s,Heading]=xml2struct(filename,varargin)
 t=xmltree(filename);
-Heading=get(t,1,'name');
+iline=0;
+Heading='';
+while isempty(Heading)
+    iline=iline+1;
+    if strcmp(get(t,iline,'type'),'element')
+        Heading=get(t,iline,'name');
+    end
+end
 if nargin>1
     for isub=1:nargin-1
         uid_sub=find(t,['/' Heading '/' varargin{isub}]);
+        if isempty(uid_sub)
+            s.(varargin{isub})=[];
+        else
         tsub=branch(t,uid_sub);
         ss=convert(tsub);
         s.(varargin{isub})=convert_string(ss);
+        end
     end
 else
