%'read_multimadoc': read a set of Imadoc files for different file series and compare their timing %------------------------------------------------------------------------ % [XmlData,NbSlice_calib,time,warnmsg]=read_multimadoc(RootPath,SubDir,RootFile,FileExt,i1_series,i2_series,j1_series,j2_series) % % OUTPUT: % XmlData(iview): cell array of structures representing the contents of the xml files, iview =index of the input file series % NbSlice_calib: nbre of slices detected in the geometric calibration data % Time(iview,i,j): matrix of times, iview =index of the series, i,j=file indices within the series % if the time is not consistent in all series, the time from the first series is chosen % warnmsg: warning message, ='' if OK % % INPUT: % RootPath,SubDir,RootFile,FileExt: cell arrays characterizing the input file series % i1_series,i2_series,j1_series,j2_series: cell arrays of file index arrays, as given by the fct uvmat/get_file_series %======================================================================= % Copyright 2008-2016, LEGI UMR 5519 / CNRS UGA G-INP, Grenoble, France % http://www.legi.grenoble-inp.fr % Joel.Sommeria - Joel.Sommeria (A) legi.cnrs.fr % % This file is part of the toolbox UVMAT. % % UVMAT is free software; you can redistribute it and/or modify % it under the terms of the GNU General Public License as published % by the Free Software Foundation; either version 2 of the license, % or (at your option) any later version. % % UVMAT is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License (see LICENSE.txt) for more details. %======================================================================= function [XmlData,NbSlice_calib,Time,warnmsg]=read_multimadoc(RootPath,SubDir,RootFile,FileExt,i1_series,i2_series,j1_series,j2_series) warnmsg=''; if ischar(RootPath) RootPath={RootPath};SubDir={SubDir};RootFile={RootFile};FileExt={FileExt}; end nbview=numel(RootPath); XmlData=cell(1,nbview);%initiate the structures containing the data from the xml file (calibration and timing) NbSlice_calib=cell(1,nbview); timecell=cell(1,nbview); for iview=1:nbview%Loop on views XmlFileName=find_imadoc(RootPath{iview},SubDir{iview},RootFile{iview},FileExt{iview}); if ~isempty(XmlFileName) [XmlData{iview},warnmsg]=imadoc2struct(XmlFileName);% read the ImaDoc xml file end if isfield(XmlData{iview},'Time') timecell{iview}=XmlData{iview}.Time; end if isfield(XmlData{iview},'GeometryCalib') && isfield(XmlData{iview}.GeometryCalib,'SliceCoord') NbSlice_calib{iview}=size(XmlData{iview}.GeometryCalib.SliceCoord,1);%nbre of slices for Zindex in phys transform if ~isequal(NbSlice_calib{iview},NbSlice_calib{1}) warnmsg='inconsistent number of Z indices in field series'; end end end %% check coincidence in time for several input file series if isempty(timecell) Time=[]; else Time=get_time(timecell{1},i1_series{1},i2_series{1},j1_series{1},j2_series{1}); end if nbview>1 Time=shiftdim(Time,-1); % add a singleton dimension for nbview for icell=2:nbview if isequal(size(timecell{icell}),size(timecell{1})) time_line=get_time(timecell{icell},i1_series{icell},i2_series{icell},j1_series{icell},j2_series{icell}); Time=cat(1,Time,shiftdim(time_line,-1)); else warnmsg='inconsistent time array dimensions in ImaDoc fields, the time for the first series is used'; Time=cat(1,Time,Time(1,:,:));% copy times of the first line break end end end function time=get_time(timeimadoc,i1_series,i2_series,j1_series,j2_series) time=[]; if ~ (isempty(i2_series)||size(timeimadoc,1) < i2_series(end) ||( ~isempty(j2_series) && size(timeimadoc,2) < j2_series(end)))% time array absent or too short in ImaDoc xml file' if isempty(j1_series) j1_series=1; end time=timeimadoc(i1_series+1,j1_series+1); if ~isempty(j2_series) time=[time timeimadoc(i1_series+1,j2_series+1)]; end if ~isempty(i2_series) time=[time timeimadoc(i2_series+1,j1_series+1)]; if ~isempty(j2_series) time=[time timeimadoc(i2_series+1,j2_series+1)]; end end time=mean(time,2); time=time'; end