source: trunk/UTIL/PYTHON/meso.py @ 357

Last change on this file since 357 was 351, checked in by aslmd, 14 years ago

PYTHON GRAPHICS: for mesoscale files section with vertically interpolated fields with alitude or pressure (through api wrapper) is now supported. the same thing might be useful to be done with zrecast for GCM.

  • Property svn:executable set to *
File size: 10.1 KB
Line 
1#!/usr/bin/env python
2
3### A. Spiga
4
5###########################################################################################
6###########################################################################################
7### What is below relate to running the file as a command line executable (very convenient)
8if __name__ == "__main__":
9    import sys
10    from optparse import OptionParser    ### to be replaced by argparse
11    from api_wrapper import api_onelevel
12    from netCDF4 import Dataset
13    from myplot import getlschar, separatenames, readslices, adjust_length
14    from os import system
15    from planetoplot import planetoplot
16    import numpy as np
17
18    #############################
19    ### Get options and variables
20    parser = OptionParser()
21    parser.add_option('-f', '--file',   action='append',dest='namefile', type="string",  default=None,  help='[NEEDED] name of WRF file (append)')
22    parser.add_option('-l', '--level',  action='store',dest='nvert',     type="string",  default="0",   help='level or start,stop,step (def=0)(-i 2: p,mbar)(-i 3,4: z,km)')
23    parser.add_option('-p', '--proj',   action='store',dest='proj',      type="string",  default=None,  help='projection')
24    parser.add_option('-b', '--back',   action='store',dest='back',      type="string",  default=None,  help='background image (def: None)')
25    parser.add_option('-t', '--target', action='store',dest='target',    type="string",  default=None,  help='destination folder')
26    parser.add_option('-s', '--stride', action='store',dest='stride',    type="int",     default=3,     help='stride vectors (def=3)')
27    parser.add_option('-v', '--var',    action='append',dest='var',      type="string",  default=None,  help='variable color-shaded (append)')
28    parser.add_option('-n', '--num',    action='store',dest='numplot',   type="int",     default=None,  help='plot number (def=2)(<0: plot LT -*numplot*)')
29    parser.add_option('-i', '--interp', action='store',dest='interp',    type="int",     default=None,  help='interpolation (2: p, 3: z-amr, 4:z-als)')
30    parser.add_option('-c', '--color',  action='store',dest='colorb',    type="string",  default="def", help='change colormap (nobar: no colorbar)')
31    parser.add_option('-x', '--no-vect',action='store_false',dest='winds',               default=True,  help='no wind vectors')
32    parser.add_option('-m', '--min',    action='append',dest='vmin',     type="float",   default=None,  help='bounding minimum value (append)')   
33    parser.add_option('-M', '--max',    action='append',dest='vmax',     type="float",   default=None,  help='bounding maximum value (append)') 
34    parser.add_option('-T', '--tiled',  action='store_true',dest='tile',                 default=False, help='draw a tiled plot (no blank zone)')
35    parser.add_option('-z', '--zoom',   action='store',dest='zoom',      type="float",   default=None,  help='zoom factor in %')
36    parser.add_option('-N', '--no-api', action='store_true',dest='nocall',               default=False, help='do not recreate api file')
37    parser.add_option('-d', '--display',action='store_false',dest='display',             default=True,  help='do not pop up created images')
38    parser.add_option('-e', '--itstep', action='store',dest='itstep',    type="int",     default=None,  help='stride time (def=4)')
39    parser.add_option('-H', '--hole',   action='store_true',dest='hole',                 default=False, help='holes above max and below min')
40    parser.add_option('-S', '--save',   action='store',dest='save',      type="string",  default="gui", help='save mode (png,eps,svg,pdf or gui)(def=gui)')
41    parser.add_option('-a', '--anomaly',action='store_true',dest='anomaly',              default=False, help='compute and plot relative anomaly in %')
42    parser.add_option('-w', '--with',   action='store',dest='var2',      type="string",  default=None,  help='variable contoured')
43    parser.add_option('--div',          action='store',dest='ndiv',      type="int",     default=10,    help='number of divisions in colorbar (def: 10)')
44    parser.add_option('-F', '--first',  action='store',dest='first',     type="int",     default=1,     help='first subscript to plot (def: 1)')
45    parser.add_option('--mult',         action='store',dest='mult',      type="float",   default=1.,    help='a multiplicative factor to plotted field')
46    parser.add_option('--title',        action='store',dest='zetitle',   type="string",  default="fill",help='customize the whole title')
47    #parser.add_option('-V', action='store', dest='comb',        type="float",   default=None,  help='a defined combination of variables')
48
49    ############# T.N. changes
50    #parser.add_option('-o','--operation',action='store',dest='operation',type="string",   default=None ,help='matrix of operations between files (for now see code, sorry)')
51    parser.add_option('--lat',          action='append',dest='slat',type="string",   default=None, help='slices along latitude. One value, or two values separated by comas for averaging')
52    parser.add_option('--lon',          action='append',dest='slon', type="string",   default=None, help='slices along longitude. One value, or two values separated by comas for averaging')
53    parser.add_option('--vert',         action='append',dest='svert',type="string",   default=None, help='slices along vertical axis. One value, or two values separated by comas for averaging') # quelles coordonnees ?
54    parser.add_option('--time',         action='append',dest='stime',type="string",   default=None, help='slices along time. One value, or two values separated by comas for averaging') # quelles coordonnees ?
55
56
57    (opt,args) = parser.parse_args()
58    if opt.namefile is None: 
59        print "I want to eat one file at least ! Use winds.py -f name_of_my_file. Or type winds.py -h"
60        exit()
61    if opt.var is None and opt.anomaly is True:
62        print "Cannot ask to compute anomaly if no variable is set"
63        exit()
64    print "Options:", opt
65
66    listvar = '' 
67    if opt.var is None:
68        zerange = [-999999]
69    else:
70        zelen = len(opt.var)
71        zerange = range(zelen)
72        #if zelen == 1: listvar = opt.var[0] + ','
73        #else         :
74        for jjj in zerange: listvar += opt.var[jjj] + ','
75        listvar = listvar[0:len(listvar)-1]
76        vmintab = adjust_length (opt.vmin, zelen) 
77        vmaxtab = adjust_length (opt.vmax, zelen)
78
79    print "namefile, length", opt.namefile, len(opt.namefile)
80
81    zeslat  = readslices(opt.slat)
82    zeslon  = readslices(opt.slon)
83    zesvert = readslices(opt.svert)
84    zestime = readslices(opt.stime)
85    print "slat,zeslat", opt.slat, zeslat
86    print "slon,zeslon", opt.slon, zeslon
87    print "svert,zesvert", opt.svert, zesvert
88    print "stime,zestime", opt.stime, zestime
89
90    for i in range(len(opt.namefile)):
91
92        zefile = opt.namefile[i]
93        print zefile   
94        #zelevel = opt.nvert   
95        stralt = None
96        [lschar,zehour,zehourin] = getlschar ( zefile )  ## getlschar from wrfout (or simply return "" if another file)
97   
98        inputnvert = separatenames(opt.nvert)
99        if np.array(inputnvert).size == 1:
100            zelevel = float(inputnvert[0])
101            ze_interp_levels = [-9999.]
102        else:
103            zelevel = -99.
104            ze_interp_levels = np.linspace(float(inputnvert[0]),float(inputnvert[1]),float(inputnvert[2]))
105        print 'level: ', zelevel
106        print 'interp_levels: ',ze_interp_levels
107
108        #####################################################
109        ### Call Fortran routines for vertical interpolations       
110        if opt.interp is not None:
111            if zelevel == 0. and opt.interp == 4:  zelevel = 0.010
112            ### winds or no winds
113            if opt.winds            :  zefields = 'uvmet'
114            else                    :  zefields = ''
115            ### var or no var
116            #if opt.var is None      :  pass
117            if zefields == ''       :  zefields = listvar
118            else                    :  zefields = zefields + "," + listvar
119            if opt.var2 is not None : zefields = zefields + "," + opt.var2 
120            print zefields
121            zefile = api_onelevel (  path_to_input   = '', \
122                                     input_name      = zefile, \
123                                     fields          = zefields, \
124                                     interp_method   = opt.interp, \
125                                     interp_level    = ze_interp_levels, \
126                                     onelevel        = zelevel, \
127                                     nocall          = opt.nocall )
128            print zefile
129            zelevel = 0 ## so that zelevel could play again the role of nvert
130
131        if opt.var is None: zerange = [-999999]
132        else:               zerange = range(zelen) 
133        for jjj in zerange:
134            if jjj == -999999: 
135                argvar  = None
136                zevmin = None
137                zevmax = None
138            else:
139                argvar = opt.var[jjj]
140                if vmintab[jjj] != -999999:  zevmin = vmintab[jjj]
141                else:                        zevmin = None
142                if vmaxtab[jjj] != -999999:  zevmax = vmaxtab[jjj] 
143                else:                        zevmax = None
144            #############
145            ### Main call
146            name = planetoplot (zefile,level=int(zelevel),vertmode=opt.interp,\
147                proj=opt.proj,back=opt.back,target=opt.target,stride=opt.stride,var=argvar,\
148                numplot=opt.numplot,colorb=opt.colorb,winds=opt.winds,\
149                addchar=lschar,interv=[zehour,zehourin],vmin=zevmin,vmax=zevmax,\
150                tile=opt.tile,zoom=opt.zoom,display=opt.display,\
151                itstep=opt.itstep,hole=opt.hole,save=opt.save,\
152                anomaly=opt.anomaly,var2=opt.var2,ndiv=opt.ndiv,first=opt.first,\
153                mult=opt.mult,zetitle=opt.zetitle,\
154                slon=zeslon,slat=zeslat,svert=zesvert,stime=zestime)
155        print 'Done: '+name
156        system("rm -f to_be_erased")
157 
158    #########################################################
159    ### Generate a .sh file with the used command saved in it
160    command = ""
161    for arg in sys.argv: command = command + arg + ' '
162    f = open(name+'.sh', 'w')
163    f.write(command)
Note: See TracBrowser for help on using the repository browser.