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

Last change on this file since 481 was 479, checked in by aslmd, 14 years ago

previous commit, oops. forget something. also warn the user not to forget double quotes.

  • Property svn:executable set to *
File size: 8.2 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 winds.py -f name_of_my_file. Or type winds.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: 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","mesoapi","mesoideal"]:         
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:  opt.var = ["phisinit"] ; opt.clb = "nobar"
64
65      if opt.vmin is not None : zevmin  = opt.vmin[min(i,len(opt.vmin)-1)]
66      else:                     zevmin = None
67      if opt.vmax is not None : zevmax  = opt.vmax[min(i,len(opt.vmax)-1)]
68      else:                     zevmax = None
69      #print "vmin, zevmin", opt.vmin, zevmin ; print "vmax, zevmax", opt.vmax, zevmax
70
71      #############################
72      ### 2. LOOP ON VAR LISTS TO BE PUT IN DIFFERENT FIGURES
73      for j in range(len(opt.var)):
74
75        zevars = separatenames(opt.var[j])
76
77        inputnvert = separatenames(opt.lvl)
78        if np.array(inputnvert).size == 1:
79            zelevel = float(inputnvert[0])
80            ze_interp_levels = [-9999.]
81        else:
82            zelevel = -99.
83            ze_interp_levels = np.linspace(float(inputnvert[0]),float(inputnvert[1]),float(inputnvert[2]))
84
85        #########################################################
86        ### Call Fortran routines for vertical interpolations ###     
87        #########################################################
88        if opt.itp is not None:
89          #####
90          ##### MESOSCALE : written by AS
91          #####
92          if typefile in ["meso","mesoideal"]:
93            if zelevel == 0. and opt.itp == 4:  zelevel = 0.010
94            ### winds or no winds
95            if opt.winds            :  zefields = 'uvmet'
96            else                    :  zefields = ''
97            ### var or no var
98            if zefields == ''       :  zefields = opt.var[j] 
99            else                    :  zefields = zefields + "," + opt.var[j]
100            if opt.var2 is not None :  zefields = zefields + "," + opt.var2 
101            ### call fortran routines
102            for fff in range(len(zefiles)):
103                newname = api_onelevel (  path_to_input   = '', \
104                                               input_name      = zefiles[fff], \
105                                               fields          = zefields, \
106                                               interp_method   = opt.itp, \
107                                               interp_level    = ze_interp_levels, \
108                                               onelevel        = zelevel, \
109                                               nocall          = opt.nocall )
110                if fff == 0: zetab = newname
111                else:        zetab = np.append(zetab,newname)
112            zefiles = zetab #; print zefiles
113            zelevel = 0 ## so that zelevel could play again the role of nvert
114          #####
115          ##### GCM : written by AC
116          #####
117          elif typefile == "gcm":
118            inputvar = zevars
119            if opt.var2 is not None : inputvar = np.append(inputvar,opt.var2)
120            interpolated_files=""
121            interpolated_files=call_zrecast(interp_mode=opt.itp,\
122                    input_name=zefiles,\
123                    fields=inputvar,\
124                    predefined=opt.intas)
125
126            zefiles=interpolated_files
127            if interpref:
128               interpolated_ref=""
129               interpolated_ref=call_zrecast(interp_mode=opt.itp,\
130                    input_name=[opt.fref],\
131                    fields=zevars,\
132                    predefined=opt.intas)
133
134               reffile=interpolated_ref[0]
135          else:
136            print "type not supported"
137            exit()
138
139        #############
140        ### Main call
141        name = planetoplot (zefiles,level=int(zelevel),vertmode=opt.itp,\
142                proj=opt.proj,back=opt.back,target=opt.tgt,stride=opt.ste,var=zevars,\
143                colorb=opt.clb,winds=opt.winds,\
144                addchar=lschar,interv=[zehour,zehourin],vmin=zevmin,vmax=zevmax,\
145                tile=opt.tile,zoom=opt.zoom,display=opt.display,\
146                hole=opt.hole,save=opt.save,\
147                anomaly=opt.anomaly,var2=opt.var2,ndiv=opt.ndiv,\
148                mult=opt.mult,zetitle=opt.zetitle,\
149                slon=zeslon,slat=zeslat,svert=zesvert,stime=zestime,\
150                outputname=opt.out,resolution=opt.res,\
151                ope=opt.operat,fileref=reffile,minop=opt.vminope,maxop=opt.vmaxope,titleref=opt.titref,\
152                invert_y=opt.inverty,xaxis=zexaxis,yaxis=zeyaxis,ylog=opt.logy,yintegral=opt.column,\
153                blat=opt.blat,blon=opt.blon,tsat=opt.tsat,flagnolow=opt.nolow,\
154                mrate=opt.rate,mquality=opt.quality,trans=opt.trans,zarea=opt.area,axtime=opt.axtime)
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    #if typefile not in ["meso","mesoapi"]: name = 'pycommand'
163    if opt.save == "gui":    name = 'pycommand'
164    elif opt.save == "avi":  system("mv -f movie*.avi "+name+".avi")
165    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) 
166    f = open(name+'.sh', 'w')
167    f.write(command)
168
169    #print "********** OPTIONS: ", opt
170    print "********************************************************** END"
Note: See TracBrowser for help on using the repository browser.