Ignore:
Timestamp:
Feb 12, 2015, 9:31:47 PM (9 years ago)
Author:
sommeria
Message:

python option added in series and bug corrections

File:
1 edited

Legend:

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

    r810 r867  
    136136for iview=1:NbView
    137137    if ~exist(filecell{iview,1}','file')
    138         msgbox_uvmat('ERROR',['the first input file ' filecell{iview,1} ' does not exist'])
     138        disp_uvmat('ERROR',['the first input file ' filecell{iview,1} ' does not exist'],checkrun)
    139139        return
    140140    end
     
    155155    diff_time=max(max(diff(time)));
    156156    if diff_time>0
    157         msgbox_uvmat('WARNING',['times of series differ by (max) ' num2str(diff_time)])
     157        disp_uvmat('WARNING',['times of series differ by (max) ' num2str(diff_time)],checkrun)
    158158    end   
    159159end
     
    176176    FileExtOut='.nc';% write result as .nc files for netcdf inputs
    177177else
    178     msgbox_uvmat('ERROR',['invalid file type input ' FileType{1}])
     178    disp_uvmat('ERROR',['invalid file type input ' FileType{1}],checkrun)
    179179    return
    180180end
    181181if NbView==2 && ~isequal(CheckImage{1},CheckImage{2})
    182     msgbox_uvmat('ERROR','input must be two image series or two netcdf file series')
     182    disp_uvmat('ERROR','input must be two image series or two netcdf file series',checkrun)
    183183    return
    184184end
     
    216216% index_slice=i_slice:NbSlice:nbfield;% select file indices of the slice
    217217nbfiles=0;
    218 nbmissing=0;
     218% nbmissing=0;
    219219
    220220%%%%%%%%%%%%%%%% loop on field indices %%%%%%%%%%%%%%%%
     
    275275            [Field,errormsg]=proj_field(Field,Param.ProjObject);
    276276            if ~isempty(errormsg)
    277                 msgbox_uvmat('ERROR',['error in aver_stat/proj_field:' errormsg])
     277                disp_uvmat('ERROR',['error in aver_stat/proj_field:' errormsg],checkrun)
    278278                return
    279279            end
     
    289289            DataOut=Field;%default
    290290            DataOut.Conventions='uvmat'; %suppress Conventions='uvmat/civdata' for civ input files
    291             for ivar=1:length(Field.ListVarName)
     291            errorvar=zeros(numel(Field.ListVarName));%index of errorflag associated to each variable
     292            for ivar=1:numel(Field.ListVarName)
    292293                VarName=Field.ListVarName{ivar};
    293                 DataOut.(VarName)=double(DataOut.(VarName));
    294             end
    295         else   %current field
    296             for ivar=1:length(Field.ListVarName)
    297                 VarName=Field.ListVarName{ivar};
    298                 sizmean=size(DataOut.(VarName));
    299                 siz=size(Field.(VarName));
    300                 if ~isequal(DataOut.(VarName),0)&& ~isequal(siz,sizmean)
    301                     disp_uvmat('ERROR',['unequal size of input field ' VarName ', need to project  on a grid'],checkrun)
    302                     return
     294                DataOut.(VarName)=zeros(size(DataOut.(VarName)));% initiate each field to zero
     295                NbData.(VarName)=zeros(size(DataOut.(VarName)));% initiate the nbre of good data to zero
     296                for iivar=1:length(Field.VarAttribute)
     297                    if isequal(Field.VarDimName{iivar},Field.VarDimName{ivar})&& isfield(Field.VarAttribute{iivar},'Role')...
     298                            && strcmp(Field.VarAttribute{iivar}.Role,'errorflag')
     299                        errorvar(ivar)=iivar; % index of the errorflag variable corresponding to ivar
     300                    end
     301                end
     302            end
     303            DataOut.ListVarName(errorvar(errorvar~=0))=[]; %remove errorflag from result
     304            DataOut.VarDimName(errorvar(errorvar~=0))=[]; %remove errorflag from result
     305            DataOut.VarAttribute(errorvar(errorvar~=0))=[]; %remove errorflag from result
     306        end   %current field
     307        for ivar=1:length(DataOut.ListVarName)
     308            VarName=Field.ListVarName{ivar};
     309            sizmean=size(DataOut.(VarName));
     310            siz=size(Field.(VarName));
     311            if ~isequal(DataOut.(VarName),0)&& ~isequal(siz,sizmean)
     312                disp_uvmat('ERROR',['unequal size of input field ' VarName ', need to project  on a grid'],checkrun)
     313                return
     314            else
     315                if errorvar(ivar)==0
     316                    check_bad=isnan(Field.(VarName));%=0 for NaN data values, 1 else
    303317                else
    304                     DataOut.(VarName)=DataOut.(VarName)+ double(Field.(VarName)); % update the sum
     318                    check_bad=isnan(Field.(VarName)) | Field.(Field.ListVarName{errorvar(ivar)})~=0;%=0 for NaN or error flagged data values, 1 else
    305319                end
     320                Field.(VarName)(check_bad)=0; %set to zero NaN or data marked by error flag
     321                DataOut.(VarName)=DataOut.(VarName)+ double(Field.(VarName)); % update the sum
     322                NbData.(VarName)=NbData.(VarName)+ ~check_bad;% records the number of data for each point
    306323            end
    307324        end
     
    315332for ivar=1:length(Field.ListVarName)
    316333    VarName=Field.ListVarName{ivar};
    317     DataOut.(VarName)=DataOut.(VarName)/nbfiles; % normalize the mean
    318 end
     334    DataOut.(VarName)=DataOut.(VarName)./NbData.(VarName); % normalize the mean
     335end
     336nbmissing=NbField-nbfiles;
    319337if nbmissing~=0
    320     msgbox_uvmat('WARNING',[num2str(nbmissing) ' input files are missing or skipted'])
     338    disp_uvmat('WARNING',[num2str(nbmissing) ' input files are missing or skipted'],checkrun)
    321339end
    322340if isempty(time) % time is read from files
Note: See TracChangeset for help on using the changeset viewer.