Changeset 497


Ignore:
Timestamp:
07/21/14 23:55:18 (10 years ago)
Author:
smasson
Message:

add nankeep in file_interp

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/SRC/Interpolation/file_interp.pro

    r495 r497  
    44; 
    55;- 
    6 FUNCTION boxmean_interp, data, divx, divy 
     6FUNCTION boxmean_interp, data, divx, divy, nankeep = nankeep 
    77 ; 
    88  compile_opt idl2, strictarrsubs 
     
    1111  jpiout = sz[0] / divx 
    1212  jpjout = sz[1] / divy 
     13  IF keyword_set(nankeep) THEN divi = finite(data) 
    1314; 
    1415  data = reform(data, divx, jpiout, divy, jpjout, /overwrite) 
    15   data = total(temporary(data), 1)   ; ave along divx 
    16   data = total(temporary(data), 2)   ; ave along divy 
    17   data = temporary(data) / float(divx*divy) 
     16  data = total(temporary(data), 1, nan = nankeep)   ; ave along divx 
     17  data = total(temporary(data), 2, nan = nankeep)   ; ave along divy 
     18  IF keyword_set(nankeep) THEN BEGIN 
     19    divi = reform(temporary(divi), divx, jpiout, divy, jpjout, /overwrite) 
     20    divi = total(temporary(divi), 1, /nan) ; ave along divx 
     21    divi = total(temporary(divi), 2, /nan) ; ave along divy 
     22    data = temporary(data) / temporary(divi) 
     23  ENDIF ELSE data = temporary(data) / float(divx*divy) 
    1824 
    1925  RETURN, data 
     
    3137                        , DATA_SMWIN = data_smwin, DATA_NSMOOTH = data_nsmooth $ 
    3238                        , EXTRAP_SMWIN = extrap_smwin, EXTRAP_NSMOOTH = extrap_nsmooth $ 
    33                         , _EXTRA = ex 
     39                        , NANKEEP = nankeep, _EXTRA = ex 
    3440; 
    3541  compile_opt idl2, strictarrsubs 
     
    4854  IF totnanmask NE n_elements(nanmask) THEN BEGIN 
    4955    data[where(nanmask EQ 0b)] = 1.e20 ; put large value to be sure they are removed during the interpolation 
    50     IF inmask[0] NE -1 THEN mask = temporary(nanmask) * inmask ELSE mask = temporary(nanmask) 
     56    IF inmask[0] NE -1 THEN mask = nanmask * inmask ELSE mask = nanmask 
    5157  ENDIF ELSE mask = inmask 
    5258; take care of missing values 
     
    6066    ENDCASE 
    6167    IF total(missmask) EQ 0 THEN return, missing_value 
     68    IF keyword_set(nankeep) THEN nanmask = temporary(nanmask) * missmask 
    6269    IF mask[0] NE -1 THEN mask = temporary(missmask) * mask ELSE mask = temporary(missmask) 
    6370  ENDIF 
     
    8794    data = (temporary(data))[data_smwin:nx+data_smwin-1, data_smwin:ny+data_smwin-1] 
    8895  ENDIF 
     96; put back NaN if wanted... 
     97  IF keyword_set(nankeep) THEN BEGIN 
     98    nanmask = where(nanmask EQ 0b, cntnan) 
     99    IF cntnan NE 0 THEN data[temporary(nanmask)] = !values.f_nan 
     100  ENDIF 
    89101; interpolation 
    90102  IF method EQ 'boxmean' THEN BEGIN 
    91     data = boxmean_interp(temporary(data), divx, divy) 
     103; put back NaN if wanted... 
     104    data = boxmean_interp(temporary(data), divx, divy, nankeep = nankeep) 
    92105  ENDIF ELSE BEGIN 
    93106    IF NOT keyword_set(inirr) THEN BEGIN 
     
    298311; @keyword _EXTRA 
    299312; to use <pro>extrapolate</pro>, <pro>extrapsmooth</pro> and <pro>fromreg</pro> keywords 
     313; 
     314; @keyword NANKEEP {default=0}{type=scalar: 0 or 1} 
     315; switch on to keep NaN values before doing the interpolation. Note 
     316; that NaN values are not taken into account when doing bowmean method 
    300317; 
    301318; @uses 
     
    342359                 , DATA_SMWIN = data_smwin, DATA_NSMOOTH = data_nsmooth $ 
    343360                 , EXTRAP_SMWIN = extrap_smwin, EXTRAP_NSMOOTH = extrap_nsmooth $ 
    344                  , _EXTRA = ex 
     361                 , NANKEEP = nankeep, _EXTRA = ex 
    345362; 
    346363  compile_opt idl2, strictarrsubs 
     
    586603                                                  , DATA_SMWIN = data_smwin, DATA_NSMOOTH = data_nsmooth $ 
    587604                                                  , EXTRAP_SMWIN = extrap_smwin, EXTRAP_NSMOOTH = extrap_nsmooth $ 
    588                                                   , _extra = ex) 
     605                                                  , NANKEEP = nankeep, _extra = ex) 
    589606              IF interp AND n_elements(data) EQ 1 THEN data = replicate(data, jpiout, jpjout) 
    590607              ncdf_varput, outid, outvarid[i], temporary(data) 
     
    609626                                                    , DATA_SMWIN = data_smwin, DATA_NSMOOTH = data_nsmooth $ 
    610627                                                    , EXTRAP_SMWIN = extrap_smwin, EXTRAP_NSMOOTH = extrap_nsmooth $ 
    611                                                     , _extra = ex) 
     628                                                    , NANKEEP = nankeep, _extra = ex) 
    612629                IF interp AND n_elements(data) EQ 1 THEN data = replicate(data, jpiout, jpjout) 
    613630                ncdf_varput, outid, outvarid[i], temporary(data), offset = off, count = outcnt 
     
    633650                                                      , DATA_SMWIN = data_smwin, DATA_NSMOOTH = data_nsmooth $ 
    634651                                                      , EXTRAP_SMWIN = extrap_smwin, EXTRAP_NSMOOTH = extrap_nsmooth $ 
    635                                                       , _extra = ex) 
     652                                                      , NANKEEP = nankeep, _extra = ex) 
    636653                  IF interp AND n_elements(data) EQ 1 THEN data = replicate(data, jpiout, jpjout) 
    637654                  ncdf_varput, outid, outvarid[i], temporary(data), offset = off, count = outcnt 
Note: See TracChangeset for help on using the changeset viewer.