Changeset 871 for trunk/src/series


Ignore:
Timestamp:
Feb 16, 2015, 12:15:23 AM (10 years ago)
Author:
sommeria
Message:

histo improved

Location:
trunk/src/series
Files:
1 deleted
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/series/aver_stat.m

    r869 r871  
    7171    ParamOut.OutputDirExt='.stat';%set the output dir extension
    7272    ParamOut.OutputFileMode='NbSlice';% '=NbInput': 1 output file per input file index, '=NbInput_i': 1 file per input file index i, '=NbSlice': 1 file per slice
    73     % check the existence of the first file in the series
     73     % check for selection of a projection object
     74    hseries=findobj(allchild(0),'Tag','series');% handles of the GUI series
     75    if  ~isfield(Param,'ProjObject')
     76        answer=msgbox_uvmat('INPUT_Y-N','use a projection object?');
     77        if strcmp(answer,'Yes')
     78            hhseries=guidata(hseries);
     79            set(hhseries.CheckObject,'Visible','on')
     80            set(hhseries.CheckObject,'Value',1)
     81            Param.CheckObject=1;
     82            series('CheckObject_Callback',hseries,[],hhseries); %file input with xml reading  in uvmat, show the image in phys coordinates
     83        end
     84    end
     85    % introduce bin size for histograms
     86    if Param.CheckObject
     87        SeriesData=get(hseries,'UserData');
     88        if ismember(SeriesData.ProjObject.ProjMode,{'inside','outside'})
     89            answer=msgbox_uvmat('INPUT_TXT','set bin size for histograms (or keep ''auto'' by default)?','auto');
     90            ParamOut.ActionInput.VarMesh=str2double(answer);
     91        end
     92    end
     93    % check the existence of the first and last file in the series
    7494    first_j=[];
    7595    if isfield(Param.IndexRange,'first_j'); first_j=Param.IndexRange.first_j; end
     
    87107        LastFileName=fullfile_uvmat(Param.InputTable{1,1},Param.InputTable{1,2},Param.InputTable{1,3},...
    88108        Param.InputTable{1,5},Param.InputTable{1,4},i1,i2,j1,j2);
    89         if ~exist(FirstFileName,'file')
     109        if ~exist(LastFileName,'file')
    90110             msgbox_uvmat('WARNING',['the last input file ' LastFileName ' does not exist'])
    91111        end
     
    170190 % EDIT FROM HERE
    171191
    172 %% check the validity of  input file types
     192%% check the validity of  input file types and set the output file type
    173193if CheckImage{1}
    174194    FileExtOut='.png'; % write result as .png images for image inputs
     
    182202    disp_uvmat('ERROR','input must be two image series or two netcdf file series',checkrun)
    183203    return
     204end
     205if isfield(Param,'ProjObject') && ~strcmp(Param.ProjObject.Type,'plane')
     206      FileExtOut='.nc';% write result as .nc files (even for image input)
    184207end
    185208
     
    212235    end
    213236end
    214 % for i_slice=1:NbSlice
    215 % index_slice=i_slice:NbSlice:nbfield;% select file indices of the slice
    216 nbfiles=0;
    217 % nbmissing=0;
    218 
     237nbfiles=0;%counter of the successfully read files (bad files are skipped)
     238VarMesh=NaN;
     239if isfield(Param,'ProjObject') && ismember(Param.ProjObject.ProjMode,{'inside','outside'})&& isfield(Param.ActionInput,'VarMesh')%case of histograms
     240     VarMesh=Param.ActionInput.VarMesh;
     241end
    219242%%%%%%%%%%%%%%%% loop on field indices %%%%%%%%%%%%%%%%
    220243for index=1:NbField
     
    243266    if isempty(errormsg)
    244267        Field=Data{1}; % default input field structure
     268        nbfiles=nbfiles+1; %increment the file counter
    245269        %% coordinate transform (or other user defined transform)
    246270        if ~isempty(transform_fct)
     
    265289        end
    266290       
    267         %% calculate tps coefficients if needed
    268         if isfield(Param,'ProjObject')&&isfield(Param.ProjObject,'ProjMode')&& strcmp(Param.ProjObject.ProjMode,'interp_tps')
    269             Field=tps_coeff_field(Field,check_proj_tps);
    270         end
    271        
    272         %field projection on an object
     291        %% field projection on an object
    273292        if Param.CheckObject
    274             [Field,errormsg]=proj_field(Field,Param.ProjObject);
     293            if strcmp(Param.ProjObject.ProjMode,'interp_tps')
     294                Field=tps_coeff_field(Field,check_proj_tps);% calculate tps coefficients if needed
     295            end
     296            [Field,errormsg]=proj_field(Field,Param.ProjObject,VarMesh);
    275297            if ~isempty(errormsg)
    276298                disp_uvmat('ERROR',['error in aver_stat/proj_field:' errormsg],checkrun)
     
    278300            end
    279301        end
    280         nbfiles=nbfiles+1;
    281        
     302             
    282303        %%%%%%%%%%%% MAIN RUNNING OPERATIONS  %%%%%%%%%%%%
    283304        if nbfiles==1 %first field
     
    286307                time_1=Field.Time(1);
    287308            end
    288             DataOut=Field;%default
    289             DataOut.Conventions='uvmat'; %suppress Conventions='uvmat/civdata' for civ input files
    290             errorvar=zeros(numel(Field.ListVarName));%index of errorflag associated to each variable
    291             for ivar=1:numel(Field.ListVarName)
    292                 VarName=Field.ListVarName{ivar};
    293                 DataOut.(VarName)=zeros(size(DataOut.(VarName)));% initiate each field to zero
    294                 NbData.(VarName)=zeros(size(DataOut.(VarName)));% initiate the nbre of good data to zero
    295                 for iivar=1:length(Field.VarAttribute)
    296                     if isequal(Field.VarDimName{iivar},Field.VarDimName{ivar})&& isfield(Field.VarAttribute{iivar},'Role')...
    297                             && strcmp(Field.VarAttribute{iivar}.Role,'errorflag')
    298                         errorvar(ivar)=iivar; % index of the errorflag variable corresponding to ivar
     309            DataOut=Field;%outcome reproduces the first (projected) field by default
     310            DataOut.Conventions='uvmat'; %suppress Conventions='uvmat/civdata' for civ input files         
     311            if ismember(Param.ProjObject.ProjMode,{'inside','outside'})%case of histograms
     312                for ivar=1:numel(Field.ListVarName)% list of variable names before projection (histogram)
     313                    VarName=Field.ListVarName{ivar};
     314                    if isfield(Data{1},VarName)
     315                        DataOut.(VarName)=Field.(VarName);
     316                        DataOut.([VarName 'Histo'])=zeros(size(DataOut.(VarName)));
     317                        VarMesh=DataOut.(VarName)(2)-DataOut.(VarName)(1);
    299318                    end
    300319                end
    301             end
    302             DataOut.ListVarName(errorvar(errorvar~=0))=[]; %remove errorflag from result
    303             DataOut.VarDimName(errorvar(errorvar~=0))=[]; %remove errorflag from result
    304             DataOut.VarAttribute(errorvar(errorvar~=0))=[]; %remove errorflag from result
     320                disp(['mesh for histogram = ' num2str(VarMesh)])
     321            else
     322                errorvar=zeros(numel(Field.ListVarName));%index of errorflag associated to each variable
     323                for ivar=1:numel(Field.ListVarName)
     324                    VarName=Field.ListVarName{ivar};
     325                    DataOut.(VarName)=zeros(size(DataOut.(VarName)));% initiate each field to zero
     326                    NbData.(VarName)=zeros(size(DataOut.(VarName)));% initiate the nbre of good data to zero
     327                    for iivar=1:length(Field.VarAttribute)
     328                        if isequal(Field.VarDimName{iivar},Field.VarDimName{ivar})&& isfield(Field.VarAttribute{iivar},'Role')...
     329                                && strcmp(Field.VarAttribute{iivar}.Role,'errorflag')
     330                            errorvar(ivar)=iivar; % index of the errorflag variable corresponding to ivar
     331                        end
     332                    end
     333                end
     334                DataOut.ListVarName(errorvar(errorvar~=0))=[]; %remove errorflag from result
     335                DataOut.VarDimName(errorvar(errorvar~=0))=[]; %remove errorflag from result
     336                DataOut.VarAttribute(errorvar(errorvar~=0))=[]; %remove errorflag from result
     337            end
    305338        end   %current field
    306339        for ivar=1:length(DataOut.ListVarName)
    307             VarName=Field.ListVarName{ivar};
     340            VarName=DataOut.ListVarName{ivar};
    308341            sizmean=size(DataOut.(VarName));
    309342            siz=size(Field.(VarName));
    310             if ~isequal(DataOut.(VarName),0)&& ~isequal(siz,sizmean)
     343            if ismember(Param.ProjObject.ProjMode,{'inside','outside'})
     344                if isfield(Data{1},VarName)
     345                    MaxValue=max(DataOut.(VarName));% current max of histogram absissa
     346                    MinValue=min(DataOut.(VarName));% current min of histogram absissa
     347%                     VarMesh=Field.VarAttribute{ivar}.Mesh;
     348                    MaxIndex=round(MaxValue/VarMesh);
     349                    MinIndex=round(MinValue/VarMesh);
     350                    MaxIndex_new=round(max(Field.(VarName)/VarMesh));% max of the current field
     351                    MinIndex_new=round(min(Field.(VarName)/VarMesh));
     352                    if MaxIndex_new>MaxIndex% the variable max for the current field exceeds the previous one
     353                        DataOut.(VarName)=[DataOut.(VarName) VarMesh*(MaxIndex+1:MaxIndex_new)];% append the new variable values
     354                        DataOut.([VarName 'Histo'])=[DataOut.([VarName 'Histo']) zeros(1,MaxIndex_new-MaxIndex)]; % append the new histo values                   
     355                    end
     356                    if MinIndex_new <= MinIndex-1
     357                        DataOut.(VarName)=[VarMesh*(MinIndex_new:MinIndex-1) DataOut.(VarName)];% insert the new variable values
     358                        DataOut.([VarName 'Histo'])=[zeros(1,MinIndex-MinIndex_new) DataOut.([VarName 'Histo'])];% insert the new histo values
     359                        ind_start=1;
     360                    else
     361                        ind_start=MinIndex_new-MinIndex+1;
     362                    end
     363                    DataOut.([VarName 'Histo'])(ind_start:ind_start+MaxIndex_new-MinIndex_new)=...
     364                        DataOut.([VarName 'Histo'])(ind_start:ind_start+MaxIndex_new-MinIndex_new)+Field.([VarName 'Histo']);   
     365                end
     366            elseif ~isequal(DataOut.(VarName),0)&& ~isequal(siz,sizmean)
    311367                disp_uvmat('ERROR',['unequal size of input field ' VarName ', need to project  on a grid'],checkrun)
    312368                return
     
    328384end
    329385%%%%%%%%%%%%%%%% end loop on field indices %%%%%%%%%%%%%%%%
    330 
    331 for ivar=1:length(Field.ListVarName)
    332     VarName=Field.ListVarName{ivar};
    333     DataOut.(VarName)=DataOut.(VarName)./NbData.(VarName); % normalize the mean
     386if ~ismember(Param.ProjObject.ProjMode,{'inside','outside'})
     387    for ivar=1:length(Field.ListVarName)
     388        VarName=Field.ListVarName{ivar};
     389        DataOut.(VarName)=DataOut.(VarName)./NbData.(VarName); % normalize the mean
     390    end
    334391end
    335392nbmissing=NbField-nbfiles;
    336393if nbmissing~=0
    337     disp_uvmat('WARNING',[num2str(nbmissing) ' input files are missing or skipted'],checkrun)
     394    disp_uvmat('WARNING',[num2str(nbmissing) ' input files are missing or skipped'],checkrun)
    338395end
    339396if isempty(time) % time is read from files
     
    352409%% writing the result file
    353410OutputFile=fullfile_uvmat(RootPath{1},OutputDir,RootFile{1},FileExtOut,NomTypeOut,first_i,last_i,first_j,last_j);
    354 if CheckImage{1} %case of images
     411if strcmp(FileExtOut,'.png') %case of images
    355412    if isequal(FileInfo{1}.BitDepth,16)||(numel(FileInfo)==2 &&isequal(FileInfo{2}.BitDepth,16))
    356413        DataOut.A=uint16(DataOut.A);
     
    361418    end
    362419    disp([OutputFile ' written']);
    363 else %case of netcdf input file , determine global attributes
     420else %case of netcdf file , determine global attributes
    364421    errormsg=struct2nc(OutputFile,DataOut); %save result file
    365422    if isempty(errormsg)
  • trunk/src/series/time_series.m

    r867 r871  
    7373    ParamOut.OutputDirExt='.tseries';%set the output dir extension
    7474    ParamOut.OutputFileMode='NbSlice';% '=NbInput': 1 output file per input file index, '=NbInput_i': 1 file per input file index i, '=NbSlice': 1 file per slice
    75     % check the existence of the first file in the series
    76         first_j=[];
     75    % check for selection of a projection object
     76    hseries=findobj(allchild(0),'Tag','series');% handles of the GUI series
     77    if  ~isfield(Param,'ProjObject')
     78        answer=msgbox_uvmat('INPUT_Y-N','use a projection object for the time_series?');
     79        if strcmp(answer,'Yes')
     80            hhseries=guidata(hseries);
     81            set(hhseries.CheckObject,'Visible','on')
     82            set(hhseries.CheckObject,'Value',1)
     83            series('CheckObject_Callback',hseries,[],hhseries); %file input with xml reading  in uvmat, show the image in phys coordinates
     84        end
     85    end
     86    % introduce bin size for histograms
     87    if Param.CheckObject
     88        SeriesData=get(hseries,'UserData');
     89        if checkhisto
     90             answer=msgbox_uvmat('INPUT_TXT','set bin size for histograms (or keep ''auto'' by default)?','auto');
     91            ParamOut.ActionInput.VarMesh=str2double(answer);
     92        end
     93    end
     94    % check the existence of the first and last file in the series
     95     first_j=[];
    7796    if isfield(Param.IndexRange,'first_j'); first_j=Param.IndexRange.first_j; end
    7897    last_j=[];
     
    85104    if ~exist(FirstFileName,'file')
    86105        msgbox_uvmat('WARNING',['the first input file ' FirstFileName ' does not exist'])
    87     elseif isequal(size(Param.InputTable,1),1) && ~isfield(Param,'ProjObject')
    88         msgbox_uvmat('WARNING','a projection object may be needed to select points for the time_series')
     106    else
     107        [i1,i2,j1,j2] = get_file_index(Param.IndexRange.last_i,last_j,PairString);
     108        LastFileName=fullfile_uvmat(Param.InputTable{1,1},Param.InputTable{1,2},Param.InputTable{1,3},...
     109            Param.InputTable{1,5},Param.InputTable{1,4},i1,i2,j1,j2);
     110        if ~exist(LastFileName,'file')
     111            msgbox_uvmat('WARNING',['the last input file ' LastFileName ' does not exist'])
     112        end
    89113    end
    90114    return
     
    251275end
    252276
    253 nbmissing=0; %number of undetected files
    254 % for i_slice=1:NbSlice
    255 %index_slice=i_slice:NbSlice:nbfield;% select file indices of the slice
    256 nbfile=0;
     277nbfile=0;% not used , to check
    257278nbmissing=0;
    258 
     279VarMesh=NaN;
     280checkhisto=0;
     281if isfield(Param,'ProjObject') && ismember(Param.ProjObject.ProjMode,{'inside','outside'})
     282    checkhisto=1;
     283    if isfield(Param.ActionInput,'VarMesh')%case of histograms
     284    VarMesh=Param.ActionInput.VarMesh;
     285    end
     286end
    259287%%%%%%%%%%%%%%%% loop on field indices %%%%%%%%%%%%%%%%
    260288for index=1:nbfield
    261             update_waitbar(WaitbarHandle,index/nbfield)
     289    update_waitbar(WaitbarHandle,index/nbfield)
    262290    if ~isempty(RUNHandle) && ~strcmp(get(RUNHandle,'BusyAction'),'queue')
    263291        disp('program stopped by user')
     
    304332        end
    305333       
    306         %field projection on an object 
     334        %field projection on an object
    307335        if Param.CheckObject
    308336            % calculate tps coefficients if needed
     
    310338                Field=tps_coeff_field(Field,check_proj_tps);
    311339            end
    312             [Field,errormsg]=proj_field(Field,Param.ProjObject);
     340            [Field,errormsg]=proj_field(Field,Param.ProjObject,VarMesh);
    313341            if ~isempty(errormsg)
    314342                msgbox_uvmat('ERROR',['time_series / proj_field / ' errormsg])
     
    316344            end
    317345        end
    318         nbfile=nbfile+1;
     346%         nbfile=nbfile+1;
    319347       
    320348        % initiate the time series at the first iteration
    321         if nbfile==1
     349        if index==1
    322350            % stop program if the first field reading is in error
    323351            if ~isempty(errormsg)
     
    326354            end
    327355            DataOut=Field;%default
    328 %             DataOut.NbDim=Field.NbDim+1; %add the time dimension for plots
    329356            nbvar=length(Field.ListVarName);
    330357            if nbvar==0
     
    332359                return
    333360            end
    334             testsum=2*ones(1,nbvar);%initiate flag for action on each variable
    335             if isfield(Field,'VarAttribute') % look for coordinate and flag variables
     361            if checkhisto%case of histograms
     362                testsum=zeros(1,nbvar);%initiate flag for action on each variable
     363                for ivar=1:numel(Field.ListVarName)% list of variable names before projection (histogram)
     364                    VarName=Field.ListVarName{ivar};
     365                    if isfield(Data{1},VarName)
     366                        testsum(ivar)=1;
     367                        DataOut.(VarName)=Field.(VarName);
     368                        DataOut.([VarName 'Histo'])=zeros([nbfield numel(DataOut.(VarName))]);
     369                        VarMesh=Field.(VarName)(2)-Field.(VarName)(1);
     370                    end
     371                end
     372                disp(['mesh for histogram = ' num2str(VarMesh)])
     373            else
     374                testsum=2*ones(1,nbvar);%initiate flag for action on each variable
     375                if isfield(Field,'VarAttribute') % look for coordinate and flag variables
     376                    for ivar=1:nbvar
     377                        if length(Field.VarAttribute)>=ivar && isfield(Field.VarAttribute{ivar},'Role')
     378                            var_role=Field.VarAttribute{ivar}.Role;%'role' of the variable
     379                            if isequal(var_role,'errorflag')
     380                                disp_uvmat('ERROR','do not handle error flags in time series',checkrun)
     381                                return
     382                            end
     383                            if isequal(var_role,'warnflag')
     384                                testsum(ivar)=0;  % not recorded variable
     385                                eval(['DataOut=rmfield(DataOut,''' Field.ListVarName{ivar} ''');']);%remove variable
     386                            end
     387                            if strcmp(var_role,'coord_x')||strcmp(var_role,'coord_y')||strcmp(var_role,'coord_z')||strcmp(var_role,'coord')
     388                                testsum(ivar)=1; %constant coordinates, record without time evolution
     389                            end
     390                        end
     391                        % check whether the variable ivar is a dimension variable
     392                        DimCell=Field.VarDimName{ivar};
     393                        if ischar(DimCell)
     394                            DimCell={DimCell};
     395                        end
     396                        if numel(DimCell)==1 && isequal(Field.ListVarName{ivar},DimCell{1})%detect dimension variables
     397                            testsum(ivar)=1;
     398                        end
     399                    end
     400                end
    336401                for ivar=1:nbvar
    337                     if length(Field.VarAttribute)>=ivar && isfield(Field.VarAttribute{ivar},'Role')
    338                         var_role=Field.VarAttribute{ivar}.Role;%'role' of the variable
    339                         if isequal(var_role,'errorflag')
    340                             disp_uvmat('ERROR','do not handle error flags in time series',checkrun)
    341                             return
    342                         end
    343                         if isequal(var_role,'warnflag')
    344                             testsum(ivar)=0;  % not recorded variable
    345                             eval(['DataOut=rmfield(DataOut,''' Field.ListVarName{ivar} ''');']);%remove variable
    346                         end
    347                         if strcmp(var_role,'coord_x')||strcmp(var_role,'coord_y')||strcmp(var_role,'coord_z')||strcmp(var_role,'coord')
    348                             testsum(ivar)=1; %constant coordinates, record without time evolution
    349                         end
    350                     end
    351                     % check whether the variable ivar is a dimension variable
    352                     DimCell=Field.VarDimName{ivar};
    353                     if ischar(DimCell)
    354                         DimCell={DimCell};
    355                     end
    356                     if numel(DimCell)==1 && isequal(Field.ListVarName{ivar},DimCell{1})%detect dimension variables
    357                         testsum(ivar)=1;
    358                     end
    359                 end
    360             end
    361             for ivar=1:nbvar
    362                 if testsum(ivar)==2
    363                     eval(['DataOut.' Field.ListVarName{ivar} '=[];'])
     402                    if testsum(ivar)==2
     403                        VarName=Field.ListVarName{ivar};
     404                        siz=size(Field.(VarName));
     405                        DataOut.(VarName)=zeros([nbfield siz]);
     406                    end
    364407                end
    365408            end
     
    368411       
    369412        % add data to the current field
    370         for ivar=1:length(Field.ListVarName)
    371             VarName=Field.ListVarName{ivar};
    372             VarVal=Field.(VarName);
    373             if testsum(ivar)==2% test for recorded variable
    374                 if isempty(errormsg)
    375                     if Param.CheckObject && strcmp(Param.ProjObject.ProjMode,'inside')% take the average in the domain for 'inside' projection mode
    376                         if isempty(VarVal)
    377                             disp_uvmat('ERROR',['empty result at frame index ' num2str(i1_series{iview}(index))],checkrun)
    378                             return
    379                         end
    380                         VarVal=mean(VarVal,1);
    381                     end
    382                     VarVal=shiftdim(VarVal,-1); %shift dimension
    383                     DataOut.(VarName)=cat(1,DataOut.(VarName),VarVal);%concanete the current field to the time series
    384                 else
    385                     DataOut.(VarName)=cat(1,DataOut.(VarName),0);% put each variable to 0 in case of input reading error
     413        if checkhisto
     414            for ivar=1:length(Field.ListVarName)
     415                VarName=Field.ListVarName{ivar};
     416                if isfield(Data{1},VarName)
     417                    MaxValue=max(DataOut.(VarName));% current max of histogram absissa
     418                    MinValue=min(DataOut.(VarName));% current min of histogram absissa
     419                    MaxIndex=round(MaxValue/VarMesh);
     420                    MinIndex=round(MinValue/VarMesh);
     421                    MaxIndex_new=round(max(Field.(VarName)/VarMesh));% max of the current field
     422                    MinIndex_new=round(min(Field.(VarName)/VarMesh));
     423                    if MaxIndex_new>MaxIndex% the variable max for the current field exceeds the previous one
     424                        DataOut.(VarName)=[DataOut.(VarName) VarMesh*(MaxIndex+1:MaxIndex_new)];% append the new variable values
     425                        DataOut.([VarName 'Histo'])=[DataOut.([VarName 'Histo']) zeros(nbfield,MaxIndex_new-MaxIndex)]; % append the new histo values
     426                    end
     427                    if MinIndex_new <= MinIndex-1
     428                        DataOut.(VarName)=[VarMesh*(MinIndex_new:MinIndex-1) DataOut.(VarName)];% insert the new variable values
     429                        DataOut.([VarName 'Histo'])=[zeros(nbfield,MinIndex-MinIndex_new) DataOut.([VarName 'Histo'])];% insert the new histo values
     430                        ind_start=1;
     431                    else
     432                        ind_start=MinIndex_new-MinIndex+1;
     433                    end
     434                    DataOut.([VarName 'Histo'])(index,ind_start:ind_start+MaxIndex_new-MinIndex_new)=...
     435                        DataOut.([VarName 'Histo'])(index,ind_start:ind_start+MaxIndex_new-MinIndex_new)+Field.([VarName 'Histo']);
    386436                end
    387             elseif testsum(ivar)==1% variable representing fixed coordinates
    388                 VarInit=DataOut.(VarName);
    389                 if isempty(errormsg) && ~isequal(VarVal,VarInit)
    390                     disp_uvmat('ERROR',['time series requires constant coordinates ' VarName ': use projection mode interp'],checkrun)
    391                     return
     437            end
     438        else
     439            for ivar=1:length(Field.ListVarName)
     440                VarName=Field.ListVarName{ivar};
     441                VarVal=Field.(VarName);
     442                if testsum(ivar)==2% test for recorded variable
     443                    if isempty(errormsg)                     
     444                        VarVal=shiftdim(VarVal,-1); %shift dimension
     445                        DataOut.(VarName)(index,:,:)=VarVal;%concanete the current field to the time series
     446                    end
     447                elseif testsum(ivar)==1% variable representing fixed coordinates
     448                    VarInit=DataOut.(VarName);
     449                    if isempty(errormsg) && ~isequal(VarVal,VarInit)
     450                        disp_uvmat('ERROR',['time series requires constant coordinates ' VarName ': use projection mode interp'],checkrun)
     451                        return
     452                    end
    392453                end
    393454            end
     
    397458        if isempty(time)% time not set by xml filer(s)
    398459            if isfield(Data{1},'Time')
    399                 DataOut.Time(nbfile,1)=Field.Time;
     460                DataOut.Time(index,1)=Field.Time;
    400461            else
    401                 DataOut.Time(nbfile,1)=index;%default
     462                DataOut.Time(index,1)=index;%default
    402463            end
    403464        else % time from ImaDoc prevails  TODO: correct
    404             DataOut.Time(nbfile,1)=time(index);%
     465            DataOut.Time(index,1)=time(index);%
    405466        end
    406467       
     
    411472        end
    412473    end
    413    
    414474end
    415475%%%%%%% END OF LOOP WITHIN A SLICE
     
    456516end
    457517
     518%case of histograms
     519if checkhisto
     520    for ivar=1:numel(Field.ListVarName)
     521        VarName=Field.ListVarName{ivar};
     522        if isfield(Data{1},VarName)
     523            DataOut.ListVarName=[DataOut.ListVarName {[VarName 'Histo']}];
     524            DataOut.VarDimName=[DataOut.VarDimName {{'Time',VarName}}];
     525        end
     526    end
     527end
    458528% display nbmissing
    459529if ~isequal(nbmissing,0)
Note: See TracChangeset for help on using the changeset viewer.