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

Last change on this file since 381 was 380, checked in by aslmd, 14 years ago

PYTHON: added an operation cat (especially aimed at time series with multiple files, working well with wrfout files. updated meso.py with last gcm.py changes. added a tip in help to use regular expressions in option -f.

  • Property svn:executable set to *
File size: 6.7 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    from myscript import getparseroptions
17    import numpy as np
18
19    #############################
20    ### Get options and variables
21    parser = OptionParser()
22    getparseroptions(parser)
23    (opt,args) = parser.parse_args()
24
25    if opt.file is None: 
26        print "I want to eat one file at least ! Use winds.py -f name_of_my_file. Or type winds.py -h"
27        exit()
28    if opt.var is None and opt.anomaly is True:
29        print "Cannot ask to compute anomaly if no variable is set"
30        exit()
31    print "Options:", opt
32
33    listvar = '' 
34    if opt.var is None:
35        zerange = [-999999]
36    else:
37        zelen = len(opt.var)
38        zerange = range(zelen)
39        #if zelen == 1: listvar = opt.var[0] + ','
40        #else         :
41        for jjj in zerange: listvar += opt.var[jjj] + ','
42        listvar = listvar[0:len(listvar)-1]
43        vmintab = adjust_length (opt.vmin, zelen) 
44        vmaxtab = adjust_length (opt.vmax, zelen)
45
46
47    ################################
48    ### General check
49 
50    if opt.fref is not None:
51       if opt.operat is None:
52          print "you must specify an operation when using a reference file"
53          exit()
54    if opt.operat in ["+","-"]:
55       if opt.fref is None:
56          print "you must specifiy a reference file when using inter-file operations"
57          exit()
58
59    interpref=False
60    if opt.fref is not None:
61       if opt.operat is not None:
62          if opt.itp is not None:
63             interpref=True
64
65    ################################
66
67
68    print "file, length", opt.file, len(opt.file)
69
70    zeslat  = readslices(opt.slat)
71    zeslon  = readslices(opt.slon)
72    zesvert = readslices(opt.svert)
73    zestime = readslices(opt.stime)
74    print "slat,zeslat", opt.slat, zeslat
75    print "slon,zeslon", opt.slon, zeslon
76    print "svert,zesvert", opt.svert, zesvert
77    print "stime,zestime", opt.stime, zestime
78
79    for i in range(len(opt.file)):
80
81        zefiles = separatenames(opt.file[i])
82        print "zefiles", zefiles
83
84        #zefile = opt.file[i]
85        #print zefile   
86        zefile = zefiles[0]
87             
88        #zelevel = opt.lvl   
89        stralt = None
90        [lschar,zehour,zehourin] = getlschar ( zefile )  ## getlschar from wrfout (or simply return "" if another file)
91   
92        inputnvert = separatenames(opt.lvl)
93        if np.array(inputnvert).size == 1:
94            zelevel = float(inputnvert[0])
95            ze_interp_levels = [-9999.]
96        else:
97            zelevel = -99.
98            ze_interp_levels = np.linspace(float(inputnvert[0]),float(inputnvert[1]),float(inputnvert[2]))
99        print 'level: ', zelevel
100        print 'interp_levels: ',ze_interp_levels
101
102        #####################################################
103        ### Call Fortran routines for vertical interpolations       
104        if opt.itp is not None:
105            if zelevel == 0. and opt.itp == 4:  zelevel = 0.010
106            ### winds or no winds
107            if opt.winds            :  zefields = 'uvmet'
108            else                    :  zefields = ''
109            ### var or no var
110            #if opt.var is None      :  pass
111            if zefields == ''       :  zefields = listvar
112            else                    :  zefields = zefields + "," + listvar
113            if opt.var2 is not None : zefields = zefields + "," + opt.var2 
114            print zefields
115            zefile = api_onelevel (  path_to_input   = '', \
116                                     input_name      = zefile, \
117                                     fields          = zefields, \
118                                     interp_method   = opt.itp, \
119                                     interp_level    = ze_interp_levels, \
120                                     onelevel        = zelevel, \
121                                     nocall          = opt.nocall )
122            print zefile
123            zelevel = 0 ## so that zelevel could play again the role of nvert
124
125        if opt.var is None: zerange = [-999999]
126        else:               zerange = range(zelen) 
127
128
129
130
131
132
133
134
135        if interpref:
136           interpolated_ref=""
137           interpolated_ref=call_zrecast(interp_mode=opt.itp,\
138                    input_name=[opt.fref],\
139                    fields=zevars)
140
141           reffile=interpolated_ref[0]
142        else:
143           reffile=opt.fref
144# Divers ####################################################
145   
146        zexaxis=[opt.xmin,opt.xmax]
147        zeyaxis=[opt.ymin,opt.ymax]
148
149        for jjj in zerange:
150            if jjj == -999999: 
151                argvar  = None
152                zevmin = None
153                zevmax = None
154            else:
155                argvar = opt.var[jjj]
156                if vmintab[jjj] != -999999:  zevmin = vmintab[jjj]
157                else:                        zevmin = None
158                if vmaxtab[jjj] != -999999:  zevmax = vmaxtab[jjj] 
159                else:                        zevmax = None
160
161            #############
162            ### Main call
163            name = planetoplot (zefiles,level=int(zelevel),vertmode=opt.itp,\
164                proj=opt.proj,back=opt.back,target=opt.tgt,stride=opt.ste,var=argvar,\
165                numplot=opt.num,colorb=opt.clb,winds=opt.winds,\
166                addchar=lschar,interv=[zehour,zehourin],vmin=zevmin,vmax=zevmax,\
167                tile=opt.tile,zoom=opt.zoom,display=opt.display,\
168                itstep=opt.it,hole=opt.hole,save=opt.save,\
169                anomaly=opt.anomaly,var2=opt.var2,ndiv=opt.ndiv,first=opt.frt,\
170                mult=opt.mult,zetitle=opt.zetitle,\
171                slon=zeslon,slat=zeslat,svert=zesvert,stime=zestime,\
172                outputname=opt.out,resolution=opt.res,\
173                ope=opt.operat,fileref=reffile,minop=opt.vminope,maxop=opt.vmaxope,titleref=opt.titref,\
174                invert_y=opt.inverty,xaxis=zexaxis,yaxis=zeyaxis,ylog=opt.logy)
175        print 'Done: '+name
176        system("rm -f to_be_erased")
177 
178    #########################################################
179    ### Generate a .sh file with the used command saved in it
180    command = ""
181    for arg in sys.argv: command = command + arg + ' '
182    f = open(name+'.sh', 'w')
183    f.write(command)
Note: See TracBrowser for help on using the repository browser.