source: trunk/UTIL/PYTHON/pp.py @ 748

Last change on this file since 748 was 721, checked in by aslmd, 13 years ago

UTIL PYTHON. Added an option to set magnifying factor for winds. added support for GCM v5 files. added a handful of pretty cool background maps (titan, venus, triton, cobe, pluto). added the possibility to use div_var_only etc... instead of div_var to get only the operation plot. corrected bugs : if transparency is zero color for vectors must be set according to background not colorbar; added a line which avoid a bug with histograms and mesoscale files.

  • Property svn:executable set to *
File size: 9.6 KB
Line 
1#!/usr/bin/env python
2
3### A. Spiga + T. Navarro + A. Colaitis
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 gcm_transformations import call_zrecast
13    from netCDF4 import Dataset
14    from myplot import getlschar, separatenames, readslices, adjust_length, whatkindfile, errormess
15    from os import system
16    from planetoplot import planetoplot
17    from myscript import getparseroptions
18    import glob
19    import numpy as np
20
21
22    #############################
23    ### Get options and variables
24    parser = OptionParser() ; getparseroptions(parser) ; (opt,args) = parser.parse_args()
25    if opt.file is None:                                errormess("I want to eat one file at least ! Use pp.py -f name_of_my_file. Or type pp.py -h")
26    if opt.var is None and opt.anomaly is True:         errormess("Cannot ask to compute anomaly if no variable is set")
27    if opt.fref is not None and opt.operat is None:     errormess("you must specify an operation when using a reference file")
28    if opt.operat in ["+","-"] and opt.fref is None:    errormess("you must specifiy a reference file when using inter-file operations")
29    if opt.fref is not None and opt.operat is not None and opt.itp is not None: interpref=True
30    else:   interpref=False
31    if opt.rate is not None:      opt.save = "avi"
32    elif opt.save == "avi":       opt.rate = 8   ## this is a default value for -S avi
33    if opt.save == "html":        opt.rate = -1  ## this is convenient because everything is done in planetoplot with mrate
34
35    #############################
36    ### Get infos about slices
37    zeslat  = readslices(opt.slat) ; zeslon  = readslices(opt.slon) ; zesvert = readslices(opt.svert) ; zestime = readslices(opt.stime)
38    reffile = opt.fref
39    zexaxis = [opt.xmin,opt.xmax] ; zeyaxis=[opt.ymin,opt.ymax]
40
41    #############################
42    ### Catch multiple files
43    if "*" in opt.file[0] or "?" in opt.file[0]: 
44        yeah = glob.glob(opt.file[0]) ; yeah.sort()
45        opt.file[0] = yeah[0] 
46        for file in yeah[1:]: opt.file[0] = opt.file[0] + "," + file
47
48    #############################
49    ### 1. LOOP ON FILE LISTS TO BE PUT IN DIFFERENT FIGURES
50    for i in range(len(opt.file)):
51
52      zefiles = separatenames(opt.file[i])
53
54      typefile = whatkindfile(Dataset(zefiles[0])) ; stralt = None
55      if typefile in ["meso"]:         
56          [lschar,zehour,zehourin] = getlschar ( zefiles[0] )
57          if opt.var is None:  opt.var = ["HGT"] ; opt.clb = "nobar"
58      elif typefile in ["geo"]:
59          [lschar,zehour,zehourin] = ["",0,0]
60          if opt.var is None:  opt.var = ["HGT_M"] ; opt.clb = "nobar"
61      else:                                       
62          [lschar,zehour,zehourin] = ["",0,0]
63          if opt.var is None: 
64             opt.var = ["phisinit"] ; opt.clb = "nobar"
65             ### temporaire... en attendant mieux.
66             if opt.back == "titan": opt.var = ["phis"] ; opt.clb = "nobar"
67
68      if opt.vmin is not None : zevmin  = opt.vmin[min(i,len(opt.vmin)-1)]
69      else:                     zevmin = None
70      if opt.vmax is not None : zevmax  = opt.vmax[min(i,len(opt.vmax)-1)]
71      else:                     zevmax = None
72      #print "vmin, zevmin", opt.vmin, zevmin ; print "vmax, zevmax", opt.vmax, zevmax
73
74      #############################
75      ### 2. LOOP ON VAR LISTS TO BE PUT IN DIFFERENT FIGURES
76      for j in range(len(opt.var)):
77
78        zevars = separatenames(opt.var[j])
79
80        inputnvert = separatenames(opt.lvl)
81        if np.array(inputnvert).size == 1:
82            zelevel = float(inputnvert[0])
83            ze_interp_levels = [-9999.]
84        elif np.array(inputnvert).size > 2:
85            zelevel = -99.
86            start = float(inputnvert[0])
87            stop = float(inputnvert[1])
88            if np.array(inputnvert).size == 2:  numsample = 20
89            else:                               numsample = float(inputnvert[2])
90            if stop > start:   
91               ## altitude coordinates
92               ze_interp_levels = np.linspace(start,stop,numsample)
93            else:
94               ## pressure coordinates
95               ze_interp_levels = np.logspace(np.log10(start),np.log10(stop),numsample)
96
97        #########################################################
98        if opt.itp is not None:
99         if opt.itp > 0:
100          #####
101          ##### MESOSCALE : written by AS
102          #####
103          if typefile in ["meso"]:
104            if zelevel == 0. and opt.itp == 4:  zelevel = 0.010
105            ### winds or no winds
106            if opt.winds            :  zefields = 'uvmet'
107            elif opt.var[j] in ['deltat','DELTAT'] : zefields = 'tk,TSURF'
108            else                    :  zefields = ''
109            ### var or no var
110            if zefields == ''       :  zefields = opt.var[j] 
111            else                    :  zefields = zefields + "," + opt.var[j]
112            if opt.var2 is not None :  zefields = zefields + "," + opt.var2 
113            ### call fortran routines
114            for fff in range(len(zefiles)):
115                newname = api_onelevel (  path_to_input   = '', \
116                                               input_name      = zefiles[fff], \
117                                               fields          = zefields, \
118                                               interp_method   = opt.itp, \
119                                               interp_level    = ze_interp_levels, \
120                                               onelevel        = zelevel, \
121                                               nocall          = opt.nocall )
122                if fff == 0: zetab = newname
123                else:        zetab = np.append(zetab,newname)
124            if interpref:
125                reffile = api_onelevel (  path_to_input   = '', \
126                                               input_name      = opt.fref, \
127                                               fields          = zefields, \
128                                               interp_method   = opt.itp, \
129                                               interp_level    = ze_interp_levels, \
130                                               onelevel        = zelevel, \
131                                               nocall          = opt.nocall )
132            zefiles = zetab #; print zefiles
133            zelevel = 0 ## so that zelevel could play again the role of nvert
134          #####
135          ##### GCM : written by AC
136          #####
137          elif typefile == "gcm":
138            inputvar = zevars
139            if opt.var2 is not None : inputvar = np.append(inputvar,opt.var2)
140            interpolated_files=""
141            interpolated_files=call_zrecast(interp_mode=opt.itp,\
142                    input_name=zefiles,\
143                    fields=inputvar,\
144                    limites = ze_interp_levels,\
145                    predefined=opt.intas)
146
147            zefiles=interpolated_files
148            if interpref:
149               interpolated_ref=""
150               interpolated_ref=call_zrecast(interp_mode=opt.itp,\
151                    input_name=[opt.fref],\
152                    fields=zevars,\
153                    predefined=opt.intas)
154
155               reffile=interpolated_ref[0]
156          else:
157            print "type not supported"
158            exit()
159
160        #############
161        ### Main call
162        name = planetoplot (zefiles,level=int(zelevel),vertmode=opt.itp,\
163                proj=opt.proj,back=opt.back,target=opt.tgt,stride=opt.ste,var=zevars,\
164                colorb=opt.clb,winds=opt.winds,\
165                addchar=lschar,interv=[zehour,zehourin],vmin=zevmin,vmax=zevmax,\
166                tile=opt.tile,zoom=opt.zoom,display=opt.display,\
167                hole=opt.hole,save=opt.save,\
168                anomaly=opt.anomaly,var2=opt.var2,ndiv=opt.ndiv,\
169                mult=opt.mult,zetitle=separatenames(opt.zetitle),\
170                slon=zeslon,slat=zeslat,svert=zesvert,stime=zestime,\
171                outputname=opt.out,resolution=opt.res,\
172                ope=opt.operat,fileref=reffile,minop=opt.vminope,maxop=opt.vmaxope,titleref=opt.titref,\
173                invert_y=opt.inverty,xaxis=zexaxis,yaxis=zeyaxis,ylog=opt.logy,yintegral=opt.column,\
174                blat=opt.blat,blon=opt.blon,tsat=opt.tsat,flagnolow=opt.nolow,\
175                mrate=opt.rate,mquality=opt.quality,trans=opt.trans,zarea=opt.area,axtime=opt.axtime,\
176                redope=opt.redope,seevar=opt.seevar,xlab=opt.xlab,ylab=opt.ylab,lbls=separatenames(opt.labels),\
177                lstyle=separatenames(opt.linestyle),cross=readslices(opt.mark),facwind=opt.facwind,streamflag=opt.stream)
178        print 'DONE: '+name
179        system("rm -f to_be_erased")
180 
181    #########################################################
182    ### Generate a .sh file with the used command saved in it
183    command = "" 
184    for arg in sys.argv: command = command + arg + ' '
185    #if typefile not in ["meso","mesoapi"]: name = 'pycommand'
186    if opt.save == "gui":    name = 'pycommand'
187    elif opt.save == "avi":  system("mv -f movie*.avi "+name+".avi")
188    elif opt.save == "html": system("cat $PYTHONPATH/header.html > anim.html ; cat zepics >> anim.html ; cat $PYTHONPATH/body.html >> anim.html ; rm -rf zepics "+name+" ; mkdir "+name+" ; mv anim.html image*png "+name) 
189    f = open(name+'.sh', 'w')
190    f.write(command)
191
192    #print "********** OPTIONS: ", opt
193    print "********************************************************** END"
Note: See TracBrowser for help on using the repository browser.