Changeset 806


Ignore:
Timestamp:
Oct 15, 2012, 2:01:19 AM (12 years ago)
Author:
aslmd
Message:

UTIL PYTHON. mcd online. sections lon alt and lat alt. and set 'all' mode for any choice of vertical coordinates

Location:
trunk/UTIL/PYTHON/mcd
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/UTIL/PYTHON/mcd/mcd.py

    r805 r806  
    291291      return field,fieldlab
    292292
    293     def ininterv(self,dstart,dend,nd,start=None,end=None,yaxis=False):
     293    def ininterv(self,dstart,dend,nd,start=None,end=None,yaxis=False,vertcoord=False):
    294294    ### user-defined start and end are used to create xcoord (or ycoord) vector
    295       if start is not None and end is not None:  first, second = self.correctbounds(start,end)
    296       else:                                      first, second = self.correctbounds(dstart,dend
    297       if self.zkey != 4: tabtab = np.linspace(first,second,nd)
    298       else:              tabtab = np.logspace(first,second,nd)
     295      if start is not None and end is not None:  first, second = self.correctbounds(start,end,vertcoord)
     296      else:                                      first, second = self.correctbounds(dstart,dend,vertcoord
     297      if self.zkey != 4 or not vertcoord:  tabtab = np.linspace(first,second,nd)
     298      else:                                 tabtab = np.logspace(first,second,nd)
    299299      if not yaxis:      self.xcoord = tabtab
    300300      else:              self.ycoord = tabtab
    301301
    302     def correctbounds(self,start,end):
    303       if self.zkey != 4:
     302    def correctbounds(self,start,end,vertcoord):
     303      if self.zkey != 4 or not vertcoord:
    304304        # regular altitudes
    305305        if start > end: first = end ; second = start
     
    325325      elif self.zkey == 5: self.vunits = "m AMMRad"
    326326
     327    def vertaxis(self,number,yaxis=False):
     328      if self.zkey == 2:   self.ininterv(-5000.,100000.,number,start=self.xzs,end=self.xze,yaxis=yaxis,vertcoord=True)
     329      elif self.zkey == 3: self.ininterv(0.,120000.,number,start=self.xzs,end=self.xze,yaxis=yaxis,vertcoord=True)
     330      elif self.zkey == 5: self.ininterv(-5000.,100000.,number,start=self.xzs,end=self.xze,yaxis=yaxis,vertcoord=True)
     331      elif self.zkey == 4: self.ininterv(1000.,0.001,number,start=self.xzs,end=self.xze,yaxis=yaxis,vertcoord=True)
     332      elif self.zkey == 1: self.ininterv(3396000,3596000,number,start=self.xzs,end=self.xze,yaxis=yaxis,vertcoord=True)
     333
    327334###################
    328335### 1D analysis ###
     
    369376      if tabperso is not None: nd = len(tabperso)
    370377      correct = False
    371       self.prepare(ndx=nd) ; self.ininterv(0.,120000.,nd,start=self.xzs,end=self.xze)
     378      self.prepare(ndx=nd) ; self.vertaxis(nd)
    372379      if tabperso is not None: self.xcoord = tabperso
    373380      for i in range(nd): self.xz = self.xcoord[i] ; self.update() ; self.put1d(i)
     
    446453      if not fixedlt: self.loct = umst
    447454      self.lon = save1 ; self.lat = save2 ; self.loct = save3
     455
     456    def lonalt(self,ndx=37,ndy=20,fixedlt=False):
     457    ### retrieve a longitude/altitude slice
     458      save1 = self.lon ; save2 = self.xz ; save3 = self.loct
     459      self.vertlabel() ; self.ylabel = self.xlabel
     460      self.xlabel = "East longitude (degrees)"
     461      self.prepare(ndx=ndx,ndy=ndy)
     462      self.ininterv(-180.,180.,ndx,start=self.lons,end=self.lone)
     463      self.vertaxis(ndy,yaxis=True)
     464      if not fixedlt: umst = self.loct
     465      for i in range(ndx):
     466       for j in range(ndy):
     467         self.lon = self.xcoord[i] ; self.xz = self.ycoord[j]
     468         if not fixedlt:
     469           if self.lons is not None and self.lone is not None: self.loct = (umst + (self.lons+self.lone)/30.) % 24
     470           else:                                               self.loct = (umst + self.lon/15.) % 24
     471         self.update() ; self.put2d(i,j)
     472      if not fixedlt: self.loct = umst
     473      self.lon = save1 ; self.xz = save2 ; self.loct = save3
     474
     475    def latalt(self,ndx=19,ndy=20,fixedlt=False):
     476    ### retrieve a latitude/altitude slice
     477      save1 = self.lat ; save2 = self.xz ; save3 = self.loct
     478      self.vertlabel() ; self.ylabel = self.xlabel
     479      self.xlabel = "North latitude (degrees)"
     480      self.prepare(ndx=ndx,ndy=ndy)
     481      self.ininterv(-90.,90.,ndx,start=self.lats,end=self.late)
     482      self.vertaxis(ndy,yaxis=True)
     483      if not fixedlt: umst = self.loct
     484      for i in range(ndx):
     485       for j in range(ndy):
     486         self.lat = self.xcoord[i] ; self.xz = self.ycoord[j]
     487         if not fixedlt: self.loct = (umst + self.lon/15.) % 24
     488         self.update() ; self.put2d(i,j)
     489      if not fixedlt: self.loct = umst
     490      self.lat = save1 ; self.xz = save2 ; self.loct = save3
    448491
    449492    def put2d(self,i,j):
     
    547590      canvas.print_figure(figname, dpi=80)
    548591
     592    def htmlplot2d(self,tabtodo,fixedlt=False,figname="temp.png",title=""):
     593    ### complete 2D figure with possible multiplots
     594    ### added in 10/2012 for online MCD
     595    ### see http://www.dalkescientific.com/writings/diary/archive/2005/04/23/matplotlib_without_gui.html
     596      from matplotlib.figure import Figure
     597      from matplotlib.backends.backend_agg import FigureCanvasAgg
     598      from matplotlib.cm import get_cmap
     599      if isinstance(tabtodo,np.str): tabtodo=[tabtodo] ## so that asking one element without [] is possible.
     600      if isinstance(tabtodo,np.int): tabtodo=[tabtodo] ## so that asking one element without [] is possible.
     601      fig = Figure(figsize=(8,8)) ; subv,subh = myplot.definesubplot( len(tabtodo) , fig )
     602
     603      for i in range(len(tabtodo)):
     604        yeah = fig.add_subplot(subv,subh,i+1)
     605        choice = tabtodo[i]
     606
     607        if self.lons is not None:    self.lonalt(fixedlt=fixedlt)
     608        elif self.lats is not None:  self.latalt(fixedlt=fixedlt)
     609
     610        (field, fieldlab) = self.definefield(choice)
     611
     612        colorb="jet" ; ndiv=20 ; title=""
     613
     614        ## define field. bound field.
     615        what_I_plot = np.transpose(field)
     616        zevmin, zevmax = myplot.calculate_bounds(what_I_plot)  ## vmin=min(what_I_plot_frame), vmax=max(what_I_plot_frame))
     617        what_I_plot = myplot.bounds(what_I_plot,zevmin,zevmax)
     618        ## define contour field levels. define color palette
     619        ticks = ndiv + 1
     620        zelevels = np.linspace(zevmin,zevmax,ticks)
     621        palette = get_cmap(name=colorb)
     622        # contour field
     623        c = yeah.contourf( self.xcoord, self.ycoord, what_I_plot, zelevels, cmap = palette )
     624        clb = Figure.colorbar(fig,c,orientation='vertical',format="%.1e")
     625        clb.set_label(fieldlab)
     626        ax = fig.gca() ; ax.set_ylabel(self.ylabel) ; ax.set_xlabel(self.xlabel)
     627        if self.zkey == 4: ax.set_yscale('log') ; ax.set_ylim(ax.get_ylim()[::-1])
     628
     629        #ax.set_xticks(np.arange(-180,181,45)) ; ax.set_xbound(lower=self.lons, upper=self.lone)
     630        #ax.set_yticks(np.arange(-90,91,30)) ; ax.set_ybound(lower=self.lats, upper=self.late)
     631
     632      self.gettitle()
     633      fig.text(0.5, 0.95, self.title, ha='center')
     634      fig.text(0.5, 0.01, self.ack, ha='center')
     635      canvas = FigureCanvasAgg(fig)
     636      # The size * the dpi gives the final image size
     637      #   a4"x4" image * 80 dpi ==> 320x320 pixel image
     638      canvas.print_figure(figname, dpi=80)
     639
    549640
    550641    ### TODO: makeplot2d, plot2d, passer plot settings
  • trunk/UTIL/PYTHON/mcd/proto/cgi-bin/mcdcgi.py

    r805 r806  
    5959else:                isloctfree = 0 ; query.loct = float(getloct)
    6060
     61try: query.zkey = int(form.getvalue("zkey"))
     62except: query.zkey = int(3)
     63
    6164query.xz = -9999.
    6265getalt = form.getvalue("altitude")
    6366if getalt == None: getalt = "1"
    64 if getalt == "all":  isaltfree = 1 ; query.xzs = 0. ; query.xze = 120000.
     67if getalt == "all": 
     68    isaltfree = 1
     69    if query.zkey == 2:    query.xzs = -5000.   ; query.xze = 100000.
     70    elif query.zkey == 3:  query.xzs = 0.       ; query.xze = 120000.
     71    elif query.zkey == 5:  query.xzs = -5000.   ; query.xze = 100000.
     72    elif query.zkey == 4:  query.xzs = 1000.    ; query.xze = 0.001
     73    elif query.zkey == 1:  query.xzs = 3396000. ; query.xze = 3596000.
    6574elif ";" in getalt:  isaltfree = 1 ; ind = getalt.find(";") ; query.xzs = float(getalt[:ind]) ; query.xze = float(getalt[ind+1:])
    6675else:                isaltfree = 0 ; query.xz = float(getalt)
     
    8392try: query.dust = int(form.getvalue("dust"))
    8493except: query.dust  = int(1)
    85 try: query.zkey = int(form.getvalue("zkey"))
    86 except: query.zkey = int(3)
    8794#        self.perturkey = 0  #integer perturkey ! perturbation type (0: none)
    8895#        self.seedin    = 1  #random number generator seed (unused if perturkey=0)
     
    141148
    142149    ### getting data
    143     if islatfree == 1 and islonfree == 1:       query.latlon()   
    144     else:                                       exit() 
    145 
    146     ### figure   
    147     query.htmlmap2d(vartoplot,incwind=iswindlog,fixedlt=input_fixedlt,figname=figname)
    148     #mpl.savefig("img/temp.png",dpi=110,bbox_inches='tight',pad_inches=0.4)
    149     #Image.open("img/temp.png").save(figname,'JPEG') ##lighter images   
    150     ### http://www.pythonware.com/library/pil/handbook/introduction.htm
     150    if islatfree == 1 and islonfree == 1:       
     151        query.htmlmap2d(vartoplot,incwind=iswindlog,fixedlt=input_fixedlt,figname=figname)
     152        #mpl.savefig("img/temp.png",dpi=110,bbox_inches='tight',pad_inches=0.4)
     153        #Image.open("img/temp.png").save(figname,'JPEG') ##lighter images   
     154        ### http://www.pythonware.com/library/pil/handbook/introduction.htm
     155    elif isaltfree == 1 and islonfree == 1:     
     156        query.htmlplot2d(vartoplot,fixedlt=input_fixedlt,figname=figname)
     157    elif isaltfree == 1 and islatfree == 1:     
     158        query.htmlplot2d(vartoplot,fixedlt=input_fixedlt,figname=figname)
     159    else:
     160        exit() 
    151161
    152162## This is quite common
Note: See TracChangeset for help on using the changeset viewer.