Changeset 458 in lmdz_wrf for trunk/tools


Ignore:
Timestamp:
Jun 5, 2015, 3:10:26 PM (10 years ago)
Author:
lfita
Message:

Adding `read_ISD.py' to read observations in ASCII in ISD format (single no spaces line) to netCDF
Adding `wdismean' to compute mean distance weighted values
Adding `radial_points' to provide grid points following an angle and radii
Adding (NOT WORKING yet) `compute_tevolboxtraj_radialsec' to retrieve radial sections of values following a trajectory
l

Location:
trunk/tools
Files:
1 added
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/tools/nc_var_tools.py

    r447 r458  
    1486414864    return tB
    1486514865
     14866def wdismean(pos,val4):
     14867    """ Function to compute the mean value weighted to its 4 distances
     14868      pos= x,y position within the 'square'
     14869      val4= values at the four vertexs (2,2)
     14870    >>>position = [0.005,0.005]
     14871    >>>val4 = np.zeros((2,2), dtype=np.float)
     14872    >>>val4 = np.arange(4).reshape(2,2)
     14873    0.035707955234
     14874    """
     14875    fname = 'wdismean'
     14876
     14877    dist = np.zeros((2,2), dtype=np.float)   
     14878    dist[0,0] = np.sqrt(pos[0]*pos[0]+pos[1]*pos[1])
     14879    dist[0,1] = np.sqrt(pos[0]*pos[0]+(1.-pos[1])*(1.-pos[1]))
     14880    dist[1,0] = np.sqrt((1.-pos[0])*(1.-pos[0])+pos[1]*pos[1])
     14881    dist[1,1] = np.sqrt((1.-pos[0])*(1.-pos[0])+(1.-pos[1])*(1.-pos[1]))
     14882
     14883    if np.min(dist) == 0.:
     14884        pos0 = index_mat(dist, 0.)
     14885        dist[:,:] = 0.
     14886        posmean = val4[pos0[0], pos0[1]]
     14887    else:
     14888        totdist = np.sum(1./dist)
     14889        posmean = np.sum(val4.flatten()/dist.flatten())/totdist
     14890
     14891    return posmean
     14892
     14893def radial_points(angle,dist):
     14894    """ Function to provide a number of grid point positions for a given angle
     14895      angle= desired angle (rad)
     14896      dist= number of grid points
     14897    >>> radial_points(0.5*np.pi,5)
     14898    [[  6.12323400e-17   1.00000000e+00]
     14899     [  1.22464680e-16   2.00000000e+00]
     14900     [  1.83697020e-16   3.00000000e+00]
     14901     [  2.44929360e-16   4.00000000e+00]
     14902     [  3.06161700e-16   5.00000000e+00]]
     14903    """
     14904    fname = 'radial_points'
     14905    radpos = np.zeros((dist,2), dtype=np.float)
     14906
     14907    for ip in range(dist):
     14908        radpos[ip,0] = (ip+1.)*np.cos(angle)
     14909        radpos[ip,1] = (ip+1.)*np.sin(angle)
     14910
     14911    return radpos
     14912
     14913def compute_tevolboxtraj_radialsec(values, ncfile, varn):
     14914    """ Function to compute tevolboxtraj_radialsec: temporal evolution at a given point along
     14915          a number of radii at a given frequency following a trajectory
     14916      values= [trajfile]@[Tbeg],[lonname],[latname],[zname],[timename],[timekind],[Nangle],[radii]
     14917        [trajfile]: ASCII file with the trajectory ('#' not readed)
     14918          [time] [xpoint] [ypoint]
     14919        [Tbeg]: equivalent first time-step of the trajectory within the netCDF file
     14920        [lonname],[latname],[zname],[timename]: longitude, latitude, z and time variables names
     14921        [timekind]: kind of time
     14922          'cf': cf-compilant
     14923          'wrf': WRF kind
     14924        [Nangle]: Number of angles
     14925        [radii]: length in grtid points of the angle
     14926      ncfile= netCDF file to use
     14927      varn= ',' list of variables' name ('all', for all variables)
     14928    """
     14929    import numpy.ma as ma
     14930    import subprocess as sub
     14931
     14932    fname='compute_tevolboxtraj_radialsec'
     14933
     14934    if values == 'h':
     14935        print fname + '_____________________________________________________________'
     14936        print compute_tevolboxtraj_radialsec.__doc__
     14937        quit()
     14938
     14939    arguments = '[trajfile]@[Tbeg],[lonname],[latname],[zname],[timename],' +        \
     14940      '[timekind],[Nangle],[radii]]'
     14941    check_arguments(fname,len(arguments.split(',')),arguments,',',8)
     14942
     14943    trajfile = values.split(',')[0].split('@')[0]
     14944    Tbeg = int(values.split(',')[0].split('@')[1])
     14945    lonn = values.split(',')[1]
     14946    latn = values.split(',')[2]
     14947    zn = values.split(',')[3]
     14948    timn = values.split(',')[4]
     14949    timekind = values.split(',')[5]
     14950    Nangle = int(values.split(',')[6])
     14951    radii = int(values.split(',')[7])
     14952
     14953    if not os.path.isfile(ncfile):
     14954        print errormsg
     14955        print '  ' + fname + " netCDF file: '" + ncfile + "' does not exist !!"
     14956        quit(-1)
     14957
     14958    if not os.path.isfile(trajfile):
     14959        print errormsg
     14960        print '  ' + fname + " trajectory file: '" + trajfile + "' does not exist !!"
     14961        quit(-1)
     14962
     14963    objfile = NetCDFFile(ncfile, 'r')
     14964    lonobj = objfile.variables[lonn]
     14965    latobj = objfile.variables[latn]
     14966    timobj = objfile.variables[timn]
     14967
     14968    if varn.find(',') != -1:
     14969        varns = varn.split(',')
     14970    else:
     14971        if varn == 'all':
     14972            varns = objfile.variables
     14973        else:
     14974            varns = [varn]
     14975
     14976    lonv, latv = lonlat2D(lonobj[:],latobj[:])
     14977
     14978    dimx = lonv.shape[1]
     14979    dimy = lonv.shape[0]
     14980
     14981    timv = timobj[:]
     14982
     14983# Selecting accordingly a trajectory
     14984##
     14985    Ttraj = file_nlines(trajfile,'#')
     14986    if timekind == 'wrf':
     14987        dimt = objfile.variables[timn].shape[0]
     14988    else:
     14989        dimt = objfile.variables[timn].shape
     14990
     14991    if Tbeg + Ttraj > dimt:
     14992        print errormsg
     14993        print '  ' + fname + ': trajectory has ', Ttraj, ' time steps and starts ' + \
     14994        ' at',Tbeg,' and data',varobj.shape[0], '" !!!!!'
     14995        quit(-1)
     14996
     14997    print '    ' + fname + ': Number of time-steps in trajectory file: ',Ttraj
     14998
     14999    trajobj = open(trajfile,'r')
     15000
     15001# Trajectory values/slices
     15002##
     15003    iline = 0
     15004    it = 0
     15005
     15006    xrangeslice = []
     15007    yrangeslice = []
     15008    xrangeslice2D = []
     15009    yrangeslice2D = []
     15010
     15011    cslicev = []
     15012    cslice2D = []
     15013    cslicevnoT = []
     15014
     15015    gtrajvals = np.zeros((Ttraj,3), dtype=int)
     15016    trajvals = np.zeros((Ttraj,3), dtype=np.float)
     15017
     15018    trajpos = np.zeros(Ttraj,Nangle,raddi)
     15019
     15020    it = 0
     15021    iline = 0
     15022    for line in trajobj:
     15023
     15024## Skipping first line
     15025##        if not iline == 0:
     15026##        it = iline - 1
     15027##        it = iline
     15028
     15029# Slicing brings to reduce 1 time-step.... ???
     15030        if line[0:1] != '#':
     15031            gtrajvals[it,0] = Tbeg + iline
     15032            gtrajvals[it,1] = int(line.split(' ')[1])
     15033            gtrajvals[it,2] = int(line.split(' ')[2])
     15034#            print it,'t:',gtrajvals[it,0],'x y:', gtrajvals[it,1], gtrajvals[it,2]
     15035       
     15036            if timekind == 'wrf':
     15037                gdate = datetimeStr_conversion(timv[gtrajvals[it,0]],'WRFdatetime',  \
     15038                  'matYmdHMS')
     15039                trajvals[it,0] = realdatetime1_CFcompilant(gdate, '19491201000000',  \
     15040                  'hours')
     15041                tunits = 'hours since 1949-12-01 00:00:00'
     15042            elif timekind == 'cf':
     15043                trajvals[it,0] = timv[gtrajvals[it,0]]
     15044                tunits = timobj.getncattr('units')
     15045            else:
     15046                print errormsg
     15047                print '  ' + fname + ' time kind: "' + timekind + '" not ready !!'
     15048                quit(-1)
     15049
     15050            trajvals[it,1] = lonv[gtrajvals[it,2],gtrajvals[it,1]]
     15051            trajvals[it,2] = latv[gtrajvals[it,2],gtrajvals[it,1]]
     15052
     15053#            print iline, it,'time:',trajvals[it,0],'lon lat:', trajvals[it,1],       \
     15054#              trajvals[it,2]
     15055
     15056# Assuming time as the first dimension in a fortran like way (t=0 as 1)
     15057#            trajcut[0] = tstept - 1
     15058# Assuming time as the first dimension in a C/python like way (t=0)
     15059
     15060            varvalst = np.ones((Nangle, radii), dtype=np.float)*fillValue
     15061            posangle = np.zeros((radii,2), dtype=np.float)
     15062
     15063# Angle loop
     15064            for ia in range(Nangle):
     15065                angle = 2.*np.pi*ia/Nangle
     15066
     15067# Points at that given angle
     15068                pangle = radial_points(angle,radii)
     15069                posangle[:,0] = pangle[:,0] + trajvals[it,1]
     15070                posangle[:,1] = pangle[:,1] + trajvals[it,2]
     15071
     15072                for ip in range(radii):
     15073                    iipos = int(posangle[ip,0])
     15074                    jjpos = int(posangle[ip,1])
     15075
     15076# Creation of a matrix with all the grid points at each time-step
     15077                    if iipos >= 0 and iipos < dimx and jjpos >= 0 and jjpos < dimy:
     15078                         print 'Hola'
     15079                         quit()
     15080#                        varvalst[ia,ip] =
     15081
     15082
     15083                if gtrajvals[it,2]-radii < 0:
     15084                    yinit = 0
     15085                    yinit2D = radii - gtrajvals[it,2]
     15086                else:
     15087                    yinit = gtrajvals[it,2]-radii
     15088                    yinit2D = 0
     15089
     15090                if gtrajvals[it,2]+radii + 1 > dimy + 1:
     15091                    yend = dimy + 1
     15092                    yend2D = dimy + 1 - gtrajvals[it,2] + radii
     15093                else:
     15094                    yend = gtrajvals[it,2]+radii + 1
     15095                    yend2D = radi
     15096
     15097                if gtrajvals[it,1]-box2 < 0:
     15098                    xinit = 0
     15099                    xinit2D = box2 - gtrajvals[it,1]
     15100                else:
     15101                    xinit = gtrajvals[it,1]-box2
     15102                    xinit2D = 0
     15103
     15104                if gtrajvals[it,1]+box2 + 1 > dimx + 1:
     15105                    xend = dimx + 1
     15106                    xend2D = dimx + 1 - gtrajvals[it,1] - box2
     15107                else:
     15108                    xend = gtrajvals[it,1]+box2 + 1
     15109                    xend2D = boxs
     15110
     15111                yrangeslice.append([yinit, yend])
     15112                xrangeslice.append([xinit, xend])
     15113                yrangeslice2D.append([yinit2D, yend2D])
     15114                xrangeslice2D.append([xinit2D, xend2D])
     15115            else:
     15116                yrangeslice.append([gtrajvals[it,2]-box2, gtrajvals[it,2]+box2 + 1])
     15117                xrangeslice.append([gtrajvals[it,1]-box2, gtrajvals[it,1]+box2 + 1])
     15118                yrangeslice2D.append([gtrajvals[it,2]-box2, gtrajvals[it,2]+box2 + 1])
     15119                xrangeslice2D.append([gtrajvals[it,1]-box2, gtrajvals[it,1]+box2 + 1])
     15120
     15121# circle values
     15122            circdist[it,:,:] = radius_dist(dimy,dimx,gtrajvals[it,2],gtrajvals[it,1])
     15123
     15124            if gtrajvals[it,2]-Nrad < 0 or gtrajvals[it,2]+Nrad + 1 > dimy + 1 \
     15125              or gtrajvals[it,1]-Nrad < 0 or gtrajvals[it,1]+Nrad + 1 > dimx + 1:
     15126
     15127                if gtrajvals[it,2]-Nrad < 0:
     15128                    yinit = 0
     15129                    yinit2D = Nrad - gtrajvals[it,2]
     15130                else:
     15131                    yinit = gtrajvals[it,2]-Nrad
     15132                    yinit2D = 0
     15133
     15134                if gtrajvals[it,2]+Nrad + 1 > dimy + 1:
     15135                    yend = dimy + 1
     15136                    yend2D = dimy + 1 - gtrajvals[it,2] + Nrad
     15137                else:
     15138                    yend = gtrajvals[it,2]+Nrad + 1
     15139                    yend2D = 2*Nrad+1
     15140
     15141                if gtrajvals[it,1]-Nrad < 0:
     15142                    xinit = 0
     15143                    xinit2D = Nrad - gtrajvals[it,1]
     15144                else:
     15145                    xinit = gtrajvals[it,1]-Nrad
     15146                    xinit2D = 0
     15147
     15148                if gtrajvals[it,1]+Nrad + 1 > dimx + 1:
     15149                    xend = dimx + 1
     15150                    xend2D = dimx + 1 - gtrajvals[it,1] - Nrad
     15151                else:
     15152                    xend = gtrajvals[it,1]+Nrad + 1
     15153                    xend2D = 2*Nrad+1
     15154
     15155                cyrangeslice.append([yinit, yend])
     15156                cxrangeslice.append([xinit, xend])
     15157                cyrangeslice2D.append([yinit2D, yend2D])
     15158                cxrangeslice2D.append([xinit2D, xend2D])
     15159            else:
     15160                cyrangeslice.append([gtrajvals[it,2]-Nrad, gtrajvals[it,2]+Nrad + 1])
     15161                cxrangeslice.append([gtrajvals[it,1]-Nrad, gtrajvals[it,1]+Nrad + 1])
     15162                cyrangeslice2D.append([gtrajvals[it,2]-Nrad, gtrajvals[it,2]+Nrad+1])
     15163                cxrangeslice2D.append([gtrajvals[it,1]-Nrad, gtrajvals[it,1]+Nrad+1])
     15164            it = it + 1
     15165            iline = iline + 1
     15166
     15167    trajobj.close()
     15168# Creation of the netCDF file
     15169##
     15170    if varn.find(',') != -1:
     15171        varnS = 'multi-var'
     15172    else:
     15173        varnS = varn.replace(',','-')
     15174
     15175    ofile = 'tevolboxtraj_' + varnS + '.nc'
     15176    objofile = NetCDFFile(ofile, 'w')
     15177
     15178# Dimensions
     15179    newdim = objofile.createDimension('x', boxs)
     15180    newdim = objofile.createDimension('y', boxs)
     15181    newdim = objofile.createDimension('xr', Nrad*2+1)
     15182    newdim = objofile.createDimension('yr', Nrad*2+1)
     15183    newdim = objofile.createDimension('time', None)
     15184
     15185    stsn = ['min', 'max', 'mean', 'mean2', 'stdev', 'ac']
     15186    vstlname = ['minimum value within', 'maximum value within', 'mean value within', \
     15187      'squared mean value within', 'standard deviation value within',                \
     15188      'accumulated value within']
     15189    Nsts = len(stsn)
     15190    statnames = []
     15191    cstatnames = []
     15192    for i in range(Nsts):
     15193        statnames.append(stsn[i] + 'box')
     15194        cstatnames.append(stsn[i] + 'circle')
     15195
     15196# Getting values
     15197##
     15198    ivar = 0
     15199
     15200    for vn in varns:
     15201        vnst = variables_values(vn)[0]
     15202        if not searchInlist(objfile.variables, vn):
     15203            print errormsg
     15204            print '  ' + fname + ": variable name '" + vn + "' is not in file " +    \
     15205              ncfile + '" !!!!!'
     15206            quit(-1)
     15207
     15208        varobj = objfile.variables[vn]
     15209        Nvardims = len(varobj.shape)
     15210
     15211        print '  ' + fname + ": getting '" + vn + "' ... .. ."
     15212
     15213        slicev = []
     15214        slice2D = []
     15215        slicevnoT = []
     15216        cslicev = []
     15217        cslice2D = []
     15218        cslicevnoT = []
     15219
     15220        if Nvardims == 4:
     15221# Too optimistic, but at this stage...
     15222            if not objofile.dimensions.has_key('z'):
     15223                varzobj = objfile.variables[zn]
     15224                if len(varzobj.shape) == 1:
     15225                    dimz = varzobj.shape
     15226                    zvals = varzobj[:]
     15227                elif len(varzobj.shape) == 2:
     15228                    dimz = varzobj.shape[1]
     15229                    zvals = varzobj[0,:]
     15230                elif len(varzobj.shape) == 3:
     15231                    dimz = varzobj.shape[2]
     15232                    zvals = varzobj[0,0,:]
     15233
     15234                objofile.createDimension('z', dimz)
     15235                newvar = objofile.createVariable(zn, 'f4', ('z'),fill_value=fillValue)
     15236                if searchInlist(varzobj.ncattrs(),'standard_name'):
     15237                    vsname = varzobj.getncattr('standard_name')
     15238                else:
     15239                    vsname = variables_values(zn)[1]
     15240                if searchInlist(varzobj.ncattrs(),'long_name'):
     15241                    vlname = varzobj.getncattr('long_name')
     15242                else:
     15243                    vlname = variables_values(zn)[4].replace('|',' ')
     15244                if searchInlist(varzobj.ncattrs(),'units'):
     15245                    vunits = varzobj.getncattr('units')
     15246                else:
     15247                    vunits = variables_values(zn)[5].replace('|',' ')
     15248   
     15249                newattr = basicvardef(newvar, vsname, vlname, vunits)
     15250                newvar[:] = zvals
     15251 
     15252            varvals = np.ones(tuple([Ttraj,dimz,boxs,boxs]), dtype=np.float)
     15253            lonvals = np.ones(tuple([Ttraj,dimz,boxs,boxs]), dtype=np.float)
     15254            latvals = np.ones(tuple([Ttraj,boxs,boxs]), dtype=np.float)
     15255            rvarvals = np.ones(tuple([Ttraj,dimz,Nrad*2+1,Nrad*2+1]), dtype=np.float)
     15256            rlonvals = np.ones(tuple([Ttraj,dimz,Nrad*2+1,Nrad*2+1]), dtype=np.float)
     15257            rlatvals = np.ones(tuple([Ttraj,dimz,Nrad*2+1,Nrad*2+1]), dtype=np.float)
     15258
     15259# One dimension plus for the values at the center of the trajectory
     15260            statvarvals = np.ones(tuple([Ttraj,dimz,Nsts+1]), dtype=np.float)
     15261            rstatvarvals = np.ones(tuple([Ttraj,dimz,Nsts+1]), dtype=np.float)
     15262
     15263            for it in range(Ttraj):
     15264                it0 = Tbeg + it
     15265
     15266                slicev = []
     15267                slice2D = []
     15268                slicevnoT = []
     15269                cslicev = []
     15270                cslice2D = []
     15271                cslice2Dhor = []
     15272                cslicevnoT = []
     15273                cslicevnoThor = []
     15274
     15275                slicev.append(gtrajvals[it,0])
     15276                if gtrajvals[it,2]-box2 < 0 or gtrajvals[it,2]+box2 + 1 > dimy + 1   \
     15277                  or gtrajvals[it,1]-box2 < 0 or gtrajvals[it,1]+box2 + 1 > dimx +1:
     15278# box values
     15279                    slicev.append(slice(0,dimz))
     15280                    slicev.append(slice(yrangeslice[it][0],yrangeslice[it][1]))
     15281                    slicev.append(slice(xrangeslice[it][0],xrangeslice[it][1]))
     15282
     15283                    slicevnoT.append(slice(0,dimz))
     15284                    slicevnoT.append(slice(yrangeslice[it][0],yrangeslice[it][1]))
     15285                    slicevnoT.append(slice(xrangeslice[it][0],xrangeslice[it][1]))
     15286
     15287                    slice2D.append(slice(0,dimz))
     15288                    slice2D.append(slice(0,yrangeslice[it][1]-yrangeslice[it][0]))
     15289                    slice2D.append(slice(0,xrangeslice[it][1]-xrangeslice[it][0]))
     15290
     15291                    rvarvalst = np.ones((dimz, Nrad*2+1, Nrad*2+1),dtype=np.float)*  \
     15292                      fillValue
     15293
     15294                    varvalst[tuple(slice2D)] = varobj[tuple(slicev)]
     15295                    varvals[it,:,:,:] = varvalst
     15296   
     15297# box stats values
     15298                    maskedvals = ma.masked_values (varvalst, fillValue)
     15299                    maskedvals2 = maskedvals*maskedvals
     15300                    for iz in range(dimz):
     15301                        statvarvals[it,iz,0] = varvalst[iz,box2,box2]
     15302                        statvarvals[it,iz,1] = np.min(varvalst[iz,:,:])
     15303                        statvarvals[it,iz,2] = np.max(varvalst[iz,:,:])
     15304                        statvarvals[it,iz,3] = np.mean(varvalst[iz,:,:])
     15305                        statvarvals[it,iz,4] = maskedvals2[iz,:,:].mean()
     15306                        statvarvals[it,iz,5] = np.sqrt(statvarvals[it,iz,4] -        \
     15307                          statvarvals[it,iz,3]*statvarvals[it,iz,3])
     15308                        statvarvals[it,iz,6] = np.sum(varvalst[iz,:,:])
     15309
     15310                else:
     15311                    slicev.append(slice(0,dimz))
     15312                    slicev.append(slice(gtrajvals[it,2]-box2, gtrajvals[it,2]+box2+1))
     15313                    slicev.append(slice(gtrajvals[it,1]-box2, gtrajvals[it,1]+box2+1))
     15314                    slicevnoT.append(slice(0,dimz))
     15315                    slicevnoT.append(slice(gtrajvals[it,2]-box2, gtrajvals[it,2]+    \
     15316                      box2+1))
     15317                    slicevnoT.append(slice(gtrajvals[it,1]-box2, gtrajvals[it,1]+    \
     15318                      box2+1))
     15319                    slice2D.append(slice(0,dimz))
     15320                    slice2D.append(slice(gtrajvals[it,2]-box2, gtrajvals[it,2] +     \
     15321                      box2 + 1))
     15322                    slice2D.append(slice(gtrajvals[it,1]-box2, gtrajvals[it,1] +     \
     15323                      box2 + 1))
     15324
     15325                    varvalst = varobj[tuple(slicev)]
     15326# box values
     15327
     15328                    varvals[it,:,:,:] = varvalst
     15329#                    print 'values at time t______'
     15330#                    print varvalst
     15331
     15332# box stats values
     15333                    for iz in range(dimz):
     15334                        statvarvals[it,:,0] = varvalst[:,box2,box2]
     15335                        statvarvals[it,iz,1] = np.min(varvalst[iz,:,:])
     15336                        statvarvals[it,iz,2] = np.max(varvalst[iz,:,:])
     15337                        statvarvals[it,iz,3] = np.mean(varvalst[iz,:,:])
     15338                        statvarvals[it,iz,4] = np.mean(varvalst[iz,:,:]*             \
     15339                          varvalst[iz,:,:])
     15340                        statvarvals[it,iz,5] = np.sqrt(statvarvals[it,iz,4] -        \
     15341                          statvarvals[it,iz,3]*statvarvals[it,iz,3])
     15342                        statvarvals[it,iz,6] = np.sum(varvalst[iz,:,:])
     15343
     15344# Circle values
     15345                cslicev.append(gtrajvals[it,0])
     15346                if gtrajvals[it,2]-Nrad < 0 or gtrajvals[it,2]+Nrad + 1 >= dimy       \
     15347                  or gtrajvals[it,1]-Nrad < 0 or gtrajvals[it,1]+Nrad + 1 >= dimx:
     15348
     15349                    maxx = np.min([cxrangeslice[it][1], dimx])
     15350                    maxy = np.min([cyrangeslice[it][1], dimy])
     15351                    cslicev.append(slice(0,dimz))
     15352                    cslicev.append(slice(cyrangeslice[it][0], maxy))
     15353                    cslicev.append(slice(cxrangeslice[it][0], maxx))
     15354
     15355                    cslicevnoT.append(slice(0,dimz))
     15356                    cslicevnoT.append(slice(cyrangeslice[it][0], cyrangeslice[it][1]))
     15357                    cslicevnoT.append(slice(cxrangeslice[it][0], cxrangeslice[it][1]))
     15358
     15359                    cslice2D.append(slice(0,dimz))
     15360                    cslice2D.append(slice(0,maxy-cyrangeslice[it][0]))
     15361                    cslice2D.append(slice(0,maxx-cxrangeslice[it][0]))
     15362                    cslice2Dhor.append(slice(0, maxy - cyrangeslice[it][0]))
     15363                    cslice2Dhor.append(slice(0, maxx -cxrangeslice[it][0]))
     15364
     15365                    rvarvalst = np.ones((dimz,Nrad*2+1,Nrad*2+1),dtype=np.float)*    \
     15366                      fillValue
     15367                    rvarvalst[tuple(cslice2D)] = varobj[tuple(cslicev)]
     15368                    for iz in range(dimz):
     15369                        tslice = [slice(it,it)]+cslice2Dhor
     15370                        zslice = [slice(iz,iz)]+cslice2Dhor
     15371                        rvarvalst[tuple(zslice)] = np.where(circdist[tuple(tslice)] > \
     15372                          np.float(Nrad), fillValue, rvarvalst[tuple(zslice)])
     15373
     15374                    rvarvals[it,:,:,:] = rvarvalst
     15375
     15376# circle stats values
     15377                    maskedvals = ma.masked_values (rvarvalst, fillValue)
     15378                    maskedvals2 = maskedvals*maskedvals
     15379                    for iz in range(dimz):
     15380                        rstatvarvals[it,iz,0] = varvalst[iz,box2,box2]
     15381                        rstatvarvals[it,iz,1] = np.min(varvalst[iz,:,:])
     15382                        rstatvarvals[it,iz,2] = np.max(varvalst[iz,:,:])
     15383                        rstatvarvals[it,iz,3] = np.mean(varvalst[iz,:,:])
     15384                        rstatvarvals[it,iz,4] = maskedvals2[iz,:,:].mean()
     15385                        rstatvarvals[it,iz,5] = np.sqrt(rstatvarvals[it,iz,4] -      \
     15386                          rstatvarvals[it,iz,3]*rstatvarvals[it,iz,3])
     15387                        rstatvarvals[it,iz,6] = np.sum(varvalst[iz,:,:])
     15388
     15389                else:
     15390                    cslicev.append(slice(0,dimz))
     15391                    cslicev.append(slice(gtrajvals[it,2]-Nrad,gtrajvals[it,2]+Nrad+1))
     15392                    cslicev.append(slice(gtrajvals[it,1]-Nrad,gtrajvals[it,1]+Nrad+1))
     15393                    cslicevnoT.append(slice(0,dimz))
     15394                    cslicevnoT.append(slice(gtrajvals[it,2]-Nrad, gtrajvals[it,2]+   \
     15395                      Nrad+1))
     15396                    cslicevnoT.append(slice(gtrajvals[it,1]-Nrad, gtrajvals[it,1]+   \
     15397                      Nrad+1))
     15398                    cslicevnoThor.append(slice(gtrajvals[it,2]-Nrad,                 \
     15399                      gtrajvals[it,2] + Nrad+1))
     15400                    cslicevnoThor.append(slice(gtrajvals[it,1]-Nrad,                 \
     15401                      gtrajvals[it,1] + Nrad+1))
     15402                    cslice2D.append(slice(0,dimz))
     15403                    cslice2D.append(slice(gtrajvals[it,2]-Nrad,gtrajvals[it,2] +     \
     15404                      Nrad+1))
     15405                    cslice2D.append(slice(gtrajvals[it,1]-Nrad,gtrajvals[it,1] +     \
     15406                      Nrad+1))
     15407
     15408                    rvarvalst = varobj[tuple(cslicev)]
     15409# circle values
     15410                    for iz in range(dimz):
     15411                        tslice = [it]+cslicevnoThor
     15412                        rvarvalst[iz,:,:] = np.where(circdist[tuple(tslice)] >       \
     15413                          np.float(Nrad), fillValue, rvarvalst[iz,:,:])
     15414
     15415                    rvarvals[it,:,:,:] = rvarvalst
     15416
     15417# circle stats values
     15418                    maskedvals = ma.masked_values (rvarvalst, fillValue)
     15419                    maskedvals2 = maskedvals*maskedvals
     15420                    for iz in range(dimz):
     15421                        rstatvarvals[it,iz,0] = rvarvalst[iz,Nrad,Nrad]
     15422                        rstatvarvals[it,iz,1] = maskedvals[iz,:,:].min()
     15423                        rstatvarvals[it,iz,2] = maskedvals[iz,:,:].max()
     15424                        rstatvarvals[it,iz,3] = maskedvals[iz,:,:].mean()
     15425                        rstatvarvals[it,iz,4] = maskedvals2[iz,:,:].mean()
     15426                        rstatvarvals[it,iz,5] = np.sqrt(rstatvarvals[it,iz,4] -      \
     15427                          rstatvarvals[it,iz,3]*rstatvarvals[it,iz,3])
     15428                        rstatvarvals[it,iz,6] = maskedvals[iz,:,:].sum()
     15429
     15430#            print 'statistics:',rstatvarvals[it,:]
     15431
     15432# variable box values
     15433            newvar = objofile.createVariable(vnst + 'box', 'f4', ('time','z','y','x'),\
     15434              fill_value=fillValue)
     15435            if searchInlist(varobj.ncattrs(),'standard_name'):
     15436                vsname = varobj.getncattr('standard_name')
     15437            else:
     15438                vsname = variables_values(vn)[1]
     15439            if searchInlist(varobj.ncattrs(),'long_name'):
     15440                vlname = varobj.getncattr('long_name')
     15441            else:
     15442                vlname = variables_values(vn)[4].replace('|',' ')
     15443            if searchInlist(varobj.ncattrs(),'units'):
     15444                vunits = varobj.getncattr('units')
     15445            else:
     15446                vunits = variables_values(vn)[5].replace('|',' ')
     15447
     15448            newattr = basicvardef(newvar, vsname, vlname, vunits)
     15449            newattr = newvar.setncattr('projection','lon lat')
     15450            newvar[:] = varvals
     15451
     15452# center of the trajectory
     15453            newvar = objofile.createVariable('trj_' + vnst, 'f', ('time','z'),     \
     15454              fill_value=fillValue)
     15455            newattr = basicvardef(newvar, 'trj_' + vsname, 'value along the ' +    \
     15456              'trajectory of '+ vn, vunits)
     15457            newvar[:] = statvarvals[:,:,0]
     15458
     15459# variable box statistics
     15460            ist = 0
     15461            for statn in statnames:
     15462                newvar = objofile.createVariable(statn + '_' + vnst,'f',('time','z'),\
     15463                  fill_value=fillValue)
     15464                newattr = basicvardef(newvar, statn + '_' + vsname, vstlname[ist] +  \
     15465                  ' the box ('+str(boxs)+'x'+str(boxs)+') of ' + vnst, vunits)
     15466                newvar[:] = statvarvals[:,:,ist+1]
     15467#                newattr = set_attributek(newvar,'_FillValue',fillValue,'npfloat')
     15468                ist = ist + 1
     15469       
     15470# variable circle values
     15471            newvar = objofile.createVariable(vnst + 'circle','f4',('time','z','yr',    \
     15472              'xr'), fill_value=fillValue)
     15473            if searchInlist(varobj.ncattrs(),'standard_name'):
     15474                vsname = varobj.getncattr('standard_name')
     15475            else:
     15476                vsname = variables_values(vn)[1]
     15477            if searchInlist(varobj.ncattrs(),'long_name'):
     15478                vlname = varobj.getncattr('long_name')
     15479            else:
     15480                vlname = variables_values(vn)[4].replace('|',' ')
     15481            if searchInlist(varobj.ncattrs(),'units'):
     15482                vunits = varobj.getncattr('units')
     15483            else:
     15484                vunits = variables_values(vn)[5].replace('|',' ')
     15485
     15486            newattr = basicvardef(newvar, vsname, vlname, vunits)
     15487            newattr = newvar.setncattr('projection','lon lat')
     15488            newvar[:] = rvarvals
     15489
     15490# variable circle statistics
     15491            ist = 0
     15492            for statn in cstatnames:
     15493                newvar = objofile.createVariable(statn + '_' + vnst,'f',('time','z'),\
     15494                  fill_value=fillValue)
     15495                newattr = basicvardef(newvar, statn + '_' + vsname, vstlname[ist] +  \
     15496                  ' the circle of radius ('+ str(circler)+') of ' + vnst, vunits)
     15497                newvar[:] = rstatvarvals[:,:,ist+1]
     15498#                newattr = set_attributek(newvar,'_FillValue',fillValue,'npfloat')
     15499                ist = ist + 1
     15500
     15501        elif Nvardims == 3:
     15502# Too optimistic, but at this stage...
     15503            dimt = varobj.shape[0]
     15504 
     15505            varvals = np.ones(tuple([Ttraj,boxs,boxs]), dtype=np.float)
     15506            lonvals = np.ones(tuple([Ttraj,boxs,boxs]), dtype=np.float)
     15507            latvals = np.ones(tuple([Ttraj,boxs,boxs]), dtype=np.float)
     15508            rvarvals = np.ones(tuple([Ttraj,Nrad*2+1,Nrad*2+1]), dtype=np.float)
     15509            rlonvals = np.ones(tuple([Ttraj,Nrad*2+1,Nrad*2+1]), dtype=np.float)
     15510            rlatvals = np.ones(tuple([Ttraj,Nrad*2+1,Nrad*2+1]), dtype=np.float)
     15511
     15512# One dimension plus for the values at the center of the trajectory
     15513            statvarvals = np.ones(tuple([Ttraj,Nsts+1]), dtype=np.float)
     15514            rstatvarvals = np.ones(tuple([Ttraj,Nsts+1]), dtype=np.float)
     15515
     15516            for it in range(Ttraj):
     15517                it0 = Tbeg + it
     15518
     15519                slicev = []
     15520                slice2D = []
     15521                slicevnoT = []
     15522                cslicev = []
     15523                cslice2D = []
     15524                cslicevnoT = []
     15525                cslicevC = []
     15526
     15527                slicev.append(gtrajvals[it,0])
     15528                if gtrajvals[it,2]-box2 < 0 or gtrajvals[it,2]+box2 + 1 > dimy + 1   \
     15529                  or gtrajvals[it,1]-box2 < 0 or gtrajvals[it,1]+box2 + 1 > dimx + 1:
     15530# box values
     15531                    slicev.append(slice(yrangeslice[it][0],yrangeslice[it][1]))
     15532                    slicev.append(slice(xrangeslice[it][0],xrangeslice[it][1]))
     15533
     15534                    slicevnoT.append(slice(yrangeslice[it][0],yrangeslice[it][1]))
     15535                    slicevnoT.append(slice(xrangeslice[it][0],xrangeslice[it][1]))
     15536
     15537                    slice2D.append(slice(0,yrangeslice[it][1]-yrangeslice[it][0]))
     15538                    slice2D.append(slice(0,xrangeslice[it][1]-xrangeslice[it][0]))
     15539
     15540                    rvarvalst = np.ones((Nrad*2+1, Nrad*2+1),dtype=np.float)*fillValue
     15541
     15542                    varvalst[tuple(slice2D)] = varobj[tuple(slicev)]
     15543                    varvals[it,:,:] = varvalst
     15544   
     15545# box stats values
     15546                    maskedvals = ma.masked_values (varvalst, fillValue)
     15547                    statvarvals[it,0] = varvalst[box2,box2]
     15548                    statvarvals[it,1] = maskedvals.min()
     15549                    statvarvals[it,2] = maskedvals.max()
     15550                    statvarvals[it,3] = maskedvals.mean()
     15551                    maskedvals2 = maskedvals*maskedvals
     15552                    statvarvals[it,4] = maskedvals2.mean()
     15553                    statvarvals[it,5] = np.sqrt(statvarvals[it,4] -                   \
     15554                      statvarvals[it,3]*statvarvals[it,3])
     15555                    statvarvals[it,6] = maskedvals.sum()
     15556
     15557                    varvalst[tuple(slice2D)] = lonv[tuple(slicevnoT)]
     15558                    lonvals[it,:,:] = varvalst
     15559                    varvalst[tuple(slice2D)] = latv[tuple(slicevnoT)]           
     15560                    latvals[it,:,:] = varvalst
     15561
     15562                else:
     15563                    slicev.append(slice(gtrajvals[it,2]-box2, gtrajvals[it,2]+box2+1))
     15564                    slicev.append(slice(gtrajvals[it,1]-box2, gtrajvals[it,1]+box2+1))
     15565                    slicevnoT.append(slice(gtrajvals[it,2]-box2, gtrajvals[it,2]+    \
     15566                      box2+1))
     15567                    slicevnoT.append(slice(gtrajvals[it,1]-box2, gtrajvals[it,1]+    \
     15568                      box2+1))
     15569
     15570                    slice2D.append(slice(gtrajvals[it,2]-box2, gtrajvals[it,2]+box2 +\
     15571                      1))
     15572                    slice2D.append(slice(gtrajvals[it,1]-box2, gtrajvals[it,1]+box2 +\
     15573                      1))
     15574
     15575                    varvalst = varobj[tuple(slicev)]
     15576# box values
     15577
     15578                    varvals[it,:,:] = varvalst
     15579#                    print 'values at time t______'
     15580#                    print varvalst
     15581
     15582# box stats values
     15583                    statvarvals[it,0] = varvalst[box2,box2]
     15584                    statvarvals[it,1] = np.min(varvalst)
     15585                    statvarvals[it,2] = np.max(varvalst)
     15586                    statvarvals[it,3] = np.mean(varvalst)
     15587                    statvarvals[it,4] = np.mean(varvalst*varvalst)
     15588                    statvarvals[it,5] = np.sqrt(statvarvals[it,4] -                  \
     15589                      statvarvals[it,3]*statvarvals[it,3])
     15590                    statvarvals[it,6] = np.sum(varvalst)
     15591
     15592                    varvalst = lonv[tuple(slicevnoT)]
     15593                    lonvals[it,:,:] = varvalst
     15594                    varvalst = latv[tuple(slicevnoT)]           
     15595                    latvals[it,:,:] = varvalst
     15596
     15597# Circle values
     15598                cslicev.append(gtrajvals[it,0])
     15599                if gtrajvals[it,2]-Nrad < 0 or gtrajvals[it,2]+Nrad + 1 >= dimy      \
     15600                  or gtrajvals[it,1]-Nrad < 0 or gtrajvals[it,1]+Nrad + 1 >= dimx:
     15601                    maxx = np.min([cxrangeslice[it][1], dimx])
     15602                    maxy = np.min([cyrangeslice[it][1], dimy])
     15603                    cslicev.append(slice(cyrangeslice[it][0],maxy))
     15604                    cslicev.append(slice(cxrangeslice[it][0],maxx))
     15605
     15606                    cslicevnoT.append(slice(cyrangeslice[it][0],cyrangeslice[it][1]))
     15607                    cslicevnoT.append(slice(cxrangeslice[it][0],cxrangeslice[it][1]))
     15608
     15609                    cslice2D.append(slice(0,maxy - cyrangeslice[it][0]))
     15610                    cslice2D.append(slice(0,maxx - cxrangeslice[it][0]))
     15611
     15612                    rvarvalst = np.ones((Nrad*2+1,Nrad*2+1),dtype=np.float)*fillValue
     15613                    rvarvalst[tuple(cslice2D)] = varobj[tuple(cslicev)]
     15614                    rvarvalst[tuple(cslice2D)] = np.where(circdist[tuple(cslicev)] >\
     15615                      np.float(Nrad), fillValue, rvarvalst[tuple(cslice2D)])
     15616
     15617                    rvarvals[it,:,:] = rvarvalst
     15618
     15619# circle stats values
     15620                    maskedvals = ma.masked_values (rvarvalst, fillValue)
     15621                    rstatvarvals[it,0] = rvarvalst[Nrad,Nrad]
     15622                    rstatvarvals[it,1] = maskedvals.min()
     15623                    rstatvarvals[it,2] = maskedvals.max()
     15624                    rstatvarvals[it,3] = maskedvals.mean()
     15625                    maskedvals2 = maskedvals*maskedvals
     15626                    rstatvarvals[it,4] = maskedvals2.mean()
     15627                    rstatvarvals[it,5] = np.sqrt(rstatvarvals[it,4] -                \
     15628                      rstatvarvals[it,3]*rstatvarvals[it,3])
     15629                    rstatvarvals[it,6] = maskedvals2.sum()
     15630
     15631                else:
     15632                    cslicev.append(slice(gtrajvals[it,2]-Nrad,gtrajvals[it,2]+Nrad+1))
     15633                    cslicev.append(slice(gtrajvals[it,1]-Nrad,gtrajvals[it,1]+Nrad+1))
     15634                    cslicevnoT.append(slice(gtrajvals[it,2]-Nrad, gtrajvals[it,2]+    \
     15635                      Nrad+1))
     15636                    cslicevnoT.append(slice(gtrajvals[it,1]-Nrad, gtrajvals[it,1]+    \
     15637                      Nrad+1))
     15638
     15639                    cslice2D.append(slice(gtrajvals[it,2]-Nrad,gtrajvals[it,2]+Nrad+1))
     15640                    cslice2D.append(slice(gtrajvals[it,1]-Nrad,gtrajvals[it,1]+Nrad+1))
     15641
     15642                    cslicevC.append(it)
     15643                    cslicevC.append(slice(gtrajvals[it,2]-Nrad,gtrajvals[it,2]+Nrad+1))
     15644                    cslicevC.append(slice(gtrajvals[it,1]-Nrad,gtrajvals[it,1]+Nrad+1))
     15645
     15646                    rvarvalst = varobj[tuple(cslicev)]
     15647                    cdist = circdist[tuple(cslicevC)]
     15648# circle values
     15649                    rvarvalst = np.where(cdist > np.float(Nrad),fillValue,rvarvalst)
     15650                    rvarvals[it,:,:] = rvarvalst
     15651
     15652# circle stats values
     15653                    maskedvals = ma.masked_values (rvarvalst, fillValue)
     15654                    rstatvarvals[it,0] = rvarvalst[Nrad,Nrad]
     15655                    rstatvarvals[it,1] = maskedvals.min()
     15656                    rstatvarvals[it,2] = maskedvals.max()
     15657                    rstatvarvals[it,3] = maskedvals.mean()
     15658                    maskedvals2 = maskedvals*maskedvals
     15659                    rstatvarvals[it,4] = maskedvals2.mean()
     15660                    rstatvarvals[it,5] = np.sqrt(rstatvarvals[it,4] -                \
     15661                      rstatvarvals[it,3]*rstatvarvals[it,3])
     15662                    rstatvarvals[it,6] = maskedvals.sum()
     15663
     15664#            print 'statistics:',rstatvarvals[it,:]
     15665
     15666# variable box values
     15667            newvar = objofile.createVariable(vnst + 'box', 'f4', ('time', 'y', 'x'), \
     15668              fill_value=fillValue)
     15669            if searchInlist(varobj.ncattrs(),'standard_name'):
     15670                vsname = varobj.getncattr('standard_name')
     15671            else:
     15672                vsname = variables_values(vn)[1]
     15673            if searchInlist(varobj.ncattrs(),'long_name'):
     15674                vlname = varobj.getncattr('long_name')
     15675            else:
     15676                vlname = variables_values(vn)[4].replace('|',' ')
     15677            if searchInlist(varobj.ncattrs(),'units'):
     15678                vunits = varobj.getncattr('units')
     15679            else:
     15680                vunits = variables_values(vn)[5].replace('|',' ')
     15681
     15682            newattr = basicvardef(newvar, vsname, vlname, vunits)
     15683            newattr = newvar.setncattr('projection','lon lat')
     15684            newvar[:] = varvals
     15685
     15686# center of the trajectory
     15687            newvar = objofile.createVariable('trj_' + vnst, 'f', ('time'),           \
     15688              fill_value=fillValue)
     15689            newattr = basicvardef(newvar, 'trj_' + vsname, 'value along the ' +      \
     15690              'trajectory of '+ vnst, vunits)
     15691            newvar[:] = statvarvals[:,0]
     15692
     15693# variable box statistics
     15694            ist = 0
     15695            for statn in statnames:
     15696                newvar = objofile.createVariable(statn + '_' + vnst, 'f', ('time'),  \
     15697                  fill_value=fillValue)
     15698                newattr = basicvardef(newvar, statn + '_' + vsname, vstlname[ist] +  \
     15699                  ' the box ('+str(boxs)+'x'+str(boxs)+') of ' + vnst, vunits)
     15700                newvar[:] = statvarvals[:,ist+1]
     15701#                newattr = set_attributek(newvar,'_FillValue',fillValue,'npfloat')
     15702                ist = ist + 1
     15703       
     15704# variable circle values
     15705            newvar = objofile.createVariable(vnst + 'circle','f4',('time','yr','xr'),\
     15706              fill_value=fillValue)
     15707            if searchInlist(varobj.ncattrs(),'standard_name'):
     15708                vsname = varobj.getncattr('standard_name')
     15709            else:
     15710                vsname = variables_values(vn)[1]
     15711            if searchInlist(varobj.ncattrs(),'long_name'):
     15712                vlname = varobj.getncattr('long_name')
     15713            else:
     15714                vlname = variables_values(vn)[4].replace('|',' ')
     15715            if searchInlist(varobj.ncattrs(),'units'):
     15716                vunits = varobj.getncattr('units')
     15717            else:
     15718                vunits = variables_values(vn)[5].replace('|',' ')
     15719
     15720            newattr = basicvardef(newvar, vsname, vlname, vunits)
     15721            newattr = newvar.setncattr('projection','lon lat')
     15722            newvar[:] = rvarvals
     15723
     15724# variable circle statistics
     15725            ist = 0
     15726            for statn in cstatnames:
     15727                newvar = objofile.createVariable(statn + '_' + vnst, 'f', ('time'),  \
     15728                  fill_value=fillValue)
     15729                newattr = basicvardef(newvar, statn + '_' + vsname, vstlname[ist] +  \
     15730                  ' the circle of radius ('+ str(circler)+') of ' + vnst, vunits)
     15731                newvar[:] = rstatvarvals[:,ist+1]
     15732#                newattr = set_attributek(newvar,'_FillValue',fillValue,'npfloat')
     15733                ist = ist + 1
     15734        else:
     15735# Other variables
     15736            print warnmsg
     15737            print '  ' + fname + ": variable '" + vn + "' shape:",varobj.shape,' not'\
     15738              + ' ready!!'
     15739            print '    skipping variable'
     15740            if len(varns) == 1:
     15741                objofile.close()
     15742                sub.call(['rm', ofile])
     15743                print '    uniq variable! removing file and finishing program'
     15744                quit()
     15745
     15746        if not objofile.variables.has_key('trlon') and Nvardims == 3:
     15747# var dimensions
     15748            newvar = objofile.createVariable('trlon', 'f8', ('time'))
     15749            newattr = basicvardef(newvar,'trlon','trajectory longitude',             \
     15750              'degrees west_east')
     15751            newvar[:] = trajvals[:,1]
     15752
     15753            newvar = objofile.createVariable('trlat', 'f8', ('time'))
     15754            newattr = basicvardef(newvar,'trlat','trajectory latitude',              \
     15755              'degrees north_south')
     15756            newvar[:] = trajvals[:,2]
     15757
     15758            newvar = objofile.createVariable('time', 'f8', ('time'))
     15759            newattr = basicvardef(newvar, 'time', 'time', tunits)
     15760            newvar[:] = trajvals[:,0]
     15761
     15762            newvar = objofile.createVariable('lon', 'f8', ('time', 'y', 'x'),        \
     15763              fill_value=fillValue)
     15764            newattr = basicvardef(newvar, 'longitude', 'longitude',                  \
     15765              'degrees west_east')
     15766            newvar[:] = lonvals
     15767
     15768            newvar = objofile.createVariable('lat', 'f8', ('time', 'y', 'x'),        \
     15769              fill_value=fillValue)
     15770            newattr = basicvardef(newvar, 'latitude', 'latitude',                    \
     15771              'degrees north_south')
     15772            newvar[:] = latvals
     15773           
     15774        ivar = ivar + 1
     15775
     15776
     15777# global attributes
     15778    objofile.setncattr('author', 'L. Fita')
     15779    objofile.setncattr('institution', 'Laboratire de Meteorologie Dynamique')
     15780    objofile.setncattr('university', 'Pierre Marie Curie - Jussieu')
     15781    objofile.setncattr('center', 'Centre National de Recherches Scientifiques')
     15782    objofile.setncattr('city', 'Paris')
     15783    objofile.setncattr('country', 'France')
     15784    objofile.setncattr('script', 'nc_var_tools.py')
     15785    objofile.setncattr('function', 'compute_tevolboxtraj')
     15786    objofile.setncattr('version', '1.0')
     15787    objofile.setncattr('data_file',ncfile)
     15788
     15789    objfile.close()
     15790
     15791    objofile.sync()
     15792    objofile.close()
     15793
     15794    print '  ' + fname + ': successful creation of file "' + ofile + '" !!!'
     15795
     15796    return
     15797
    1486615798
    1486715799#quit()
Note: See TracChangeset for help on using the changeset viewer.