• Facebook
  • Twitter
  • Reddit
  • StumbleUpon
  • Digg
  • email

#!/usr/bin/env python
 
from TC import *
import AD
 
import GA
from grads.gacore import GaCore,GrADSError
from GA import GradsEnv,polyCircle,title
 
class G1(GaCore,MFbase):
 
    Quiet=True
    #Quiet=0
 
    def cmd ( self, gacmd, Quiet=Quiet, Block=True ):
        """
        Sends a command to GrADS. When Block=True, the output is captured 
        and can be retrieved by methods rline() and rword(). On input,
        *gacmd* can be a single GrADS command or several commands separated
        by a new line ('\n').
        """
        Verb = self.Verb
        for cmd_ in gacmd.split('\n'):
            cmd = cmd_ + '\n'
            self.Writer.write(cmd)
            self.Writer.flush()
            if Block:
                rc = self._parseReader(Quiet)
                if rc != 0: 
                    if Verb==1:   print "rc = ", rc, ' for ' + cmd_
                    raise GrADSError, 'GrADS returned rc=%d for <%s>'%(rc,cmd_)
                else:
                    if Verb>1:    print "rc = ", rc, ' for ' + cmd_
        return
 
    __call__ = cmd
 
 
class TcDiag(MFbase):
 
    dlat=12
    dlon=15
 
    dr=5
    dtheta=45
    rmax=200
 
    radinfIn=200
    radinfOut=800
    radinfInWind=0
    radinfOutWind=500
 
    radinfInnm=radinfIn*km2nm
    radinfOutnm=radinfOut*km2nm
 
    radinfInWindnm=radinfInWind*km2nm
    radinfOutWindnm=radinfOutWind*km2nm
 
    areaIn=radinfIn*radinfIn
    areaOut=radinfOut*radinfOut
    areaAnnulus=areaOut-areaIn
 
 
    def __init__(self,ga,ge,latc,lonc,stmid,dtg,tau,
                 dr=dr,dtheta=dtheta,rmax=rmax):
 
        self.ga=ga
 
        self.latc=latc
        self.lonc=lonc
 
        self.stmid=stmid
        self.dtg=dtg
        self.tau=tau
 
        self.vdtg=mf.dtginc(dtg,tau)
        self.vgtime=mf.dtg2gtime(self.vdtg)
 
        self.dr=dr
        self.dtheta=dtheta
        self.rmax=rmax
 
        # units are km for dr and rmax
        self.drnm=dr*km2nm
        self.rmaxnm=rmax*km2nm
 
        ge.lat1=latc-self.dlat
        ge.lat2=latc+self.dlat
        ge.lon1=lonc-self.dlon
        ge.lon2=lonc+self.dlon
 
        ge.getLevs()
        # -- set the lat/lon/lev/time dims
        ge.lev1=ge.Levs[0]
        ge.setLevs()
        ge.setLatLon()
        ge.setTimebyDtgTau(dtg,tau,verb=1)
 
        self.ge=ge
 
        self.pT=title(ga,ge,scale=0.80)
 
    def initGA(self,xlint=10,ylint=5):
 
        self.ga('c')
        self.ga('set grads off')
        self.ga('set timelab on')
        self.ga('set mpdset mres')
        self.ga('set map 15 0 5')
        self.ga('set xlint %d'%(xlint))
        self.ga('set ylint %d'%(ylint))
 
 
    def drawHurr(self):
 
        (xp,yp)=self.getW2xy(self.latc,self.lonc)
        self.ga("draw wxsym 41 %s %s 0.25 1"%(xp,yp))
 
    def drawRadinf(self,radinf):
 
        pC=polyCircle(self.ga,self.ge,self.latc,self.lonc,radinf)
        pC.border()
 
 
 
    def drawMark(self,lat,lon,cmarkval,markcol=3):
 
        (xp,yp)=self.getW2xy(lat,lon)
        self.ga('set line %d'%(markcol))
        self.ga("draw mark 3 %s %s 0.20"%(xp,yp))
        self.ga('set strsiz 0.07')
        self.ga('set string 0 c 5')
        self.ga("draw string  %s %s %s"%(xp,yp,cmarkval))
 
 
    def getW2xy(self,lat,lon):
 
        self.ga("q w2xy %f %f"%(lon,lat))
 
        xp=self.ga.rword(1,3)
        yp=self.ga.rword(1,6)
 
        return(xp,yp)
 
 
    def getVmaxRmax4Tcxy2rt(self):
 
 
        self.initGA()
 
        ga=self.ga
        ge=self.ge
 
        latc=self.latc
        lonc=self.lonc
 
        fld='w'
        ga("%s=mag(uas,vas)*%f"%(fld,ms2knots))
        ga('d %s'%(fld))
 
        # -- convert from x,y -> r,theta and parse result
        #
        ga("tcxy2rt %s %f %f %f %f %f"%(fld,latc,lonc,self.drnm,self.dtheta,self.rmaxnm))
 
        nlines=ga.nLines
 
        R=[]
        T=[]
        V={}
        Lat={}
        Lon={}
        Vmax={}
        Rmax={}
        Latmax={}
        Lonmax={}
 
        nr=ga.rword(2,2)
        nt=ga.rword(2,4)
 
        for n in range(4,nlines+1):
             #17    0   255    0    31.19  287.80       100974.12
 
             i=ga.rword(n,1)
             j=ga.rword(n,2)
             r=float(ga.rword(n,3))
             t=float(ga.rword(n,4))
             lat=float(ga.rword(n,5))
             lon=float(ga.rword(n,6))
             val=float(ga.rword(n,7))
 
             V[r,t]=val
             Lat[r,t]=lat
             Lon[r,t]=lon
 
             R.append(r)
             T.append(t)
 
 
        R=MF.uniq(R)
        T=MF.uniq(T)
 
        finalVmax=-999
        finalRmax=0.0
        nRmax=0
 
        nR=len(R)
        for t in T:
 
            Vm=-1e20
 
            for j in range(0,nR):
 
                r0=R[j]
                v0=V[r0,t]
 
                if(j==nR-1):
                    rp1=r0
                    vp1=V[r0,t]
                else:
                    rp1=R[j+1]
                    vp1=V[rp1,t]
 
                if(v0>Vm):
                    Vm=v0
                    Vmax[t]=v0
                    Rmax[t]=r0
                    Latmax[t]=Lat[r0,t]
                    Lonmax[t]=Lon[r0,t]
 
                #print 't ',t,r0,v0
 
            if(Vmax[t] > finalVmax): finalVmax=Vmax[t]
            finalRmax=finalRmax+Rmax[t]
            nRmax=nRmax+1
            print 'FFFF ',t,Vmax[t],Rmax[t],Latmax[t],Lonmax[t],v0,r0,Lat[r0,t],Lon[r0,t]
 
 
        if(nRmax > 0):
            print 'FFFF ',nRmax,finalRmax/nRmax
            finalRmax=(finalRmax/nRmax)*nm2km
 
 
        print 'Final Vmax: ',finalVmax,' finalRmax: ',finalRmax
 
        # -- draw the search radius (nm)
        #
        self.drawRadinf(self.rmaxnm)
 
        # -- draw the max points
        #
        for t in T:
            (xp,yp)=self.getW2xy(Latmax[t],Lonmax[t])
            ga('set line 2')
            ga("draw mark 3 %s %s 0.20"%(xp,yp))
            ga('set strsiz 0.09')
            ga('set string 0 c 5')
            ga("draw string  %s %s %2.0f"%(xp,yp,Vmax[t]))
 
 
        ga("mfhilo %s gr l d 100 %f %f"%(fld,self.latc,self.lonc))
        latvmin=float(ga.rword(2,2))
        lonvmin=float(ga.rword(2,3))
        vmin=float(ga.rword(2,5))
 
        self.drawMark(latvmin,lonvmin,"%02.0f"%(vmin))
        self.drawHurr()
 
        t1="TCdiag MAX WIND/RMX: for: %s  dtg: %s  tau: %d R=0-%2.0f km"%(self.stmid,self.dtg,self.tau,self.rmax)
        t2="sfc wind speed [kt]  latc: %4.1f  lonc: %4.1f"%(self.latc,self.lonc)
        self.pT.top(t1,t2)
 
        ga("printim vmax.%03d.png"%(self.tau))
 
        return(T,Vmax,Rmax,Latmax,Lonmax)
 
 
    def getPrw(self):
 
        self.initGA()
 
        ga=self.ga
        ge=self.ge
 
        fld='tpw'
        ga("%s=prw"%(fld))
 
        ga("tcprop %s %f %f %f"%(fld,self.latc,self.lonc,self.rmaxnm))
        meantpw=float(ga.rword(5,2))
 
        ga('d %s'%(fld))
 
        ga("mfhilo %s gr h d 100 %f %f"%(fld,self.latc,self.lonc))
        lattpw=float(ga.rword(2,2))
        lontpw=float(ga.rword(2,3))
        maxtpw=float(ga.rword(2,5))
 
        self.drawMark(lattpw,lontpw,"%02.0f"%(maxtpw))
        self.drawHurr()
        self.drawRadinf(self.rmaxnm)
 
        t1="TCdiag TPW: %2.0f for: %s  dtg: %s  tau: %d R=0-%2.0f km"%(meantpw,self.stmid,self.dtg,self.tau,self.rmax)
        t2="slp [mb]  latc: %4.1f  lonc: %4.1f"%(self.latc,self.lonc)
        self.pT.top(t1,t2)
 
        ga("printim prw.%03d.png"%(self.tau))
 
 
        return(meantpw)
 
 
 
    def getPmin(self):
 
        self.initGA()
 
        ga=self.ga
        ge=self.ge
 
        fld='slp'
        ga("%s=psl*0.01"%(fld))
        ga("mfhilo %s gr l d 100 %f %f"%(fld,self.latc,self.lonc))
 
        latpmin=float(ga.rword(2,2))
        lonpmin=float(ga.rword(2,3))
        pmin=float(ga.rword(2,5))
 
        pinc=2
        if(pmin < 980): pinc=4
        self.plotFldContour(fld,pinc)
 
        self.drawMark(latpmin,lonpmin,"%02.0f"%(pmin-1000.0))
        self.drawHurr()
 
        t1="TCdiag MINSLP: %4.0f for: %s  dtg: %s  tau: %d"%(pmin,self.stmid,self.dtg,self.tau)
        t2="slp [mb]  latc: %4.1f  lonc: %4.1f"%(self.latc,self.lonc)
        self.pT.top(t1,t2)
 
        ga("printim pmin.%03d.png"%(self.tau))
 
        return(pmin)
 
 
    def getShear(self):
 
        self.initGA()
 
        ga=self.ga
        ge=self.ge
 
        radinf=500
        radinfnm=radinf*km2nm
 
        fld='magshr'
        ga("%s=mag((ua(lev=200)-ua(lev=850)),(va(lev=200)-va(lev=850)))*%f"%(fld,ms2knots))
        ga("%s=re2(%s,0.25)"%(fld,fld))
        ga("tcprop %s %f %f %f"%(fld,self.latc,self.lonc,radinfnm))
        shrmag=float(ga.rword(5,2))
 
        ufld='ushr'
        ga("%s=(ua(lev=200)-ua(lev=850))*%f"%(ufld,ms2knots))
        ga("%s=re2(%s,0.25)"%(ufld,ufld))
        ga("tcprop %s %f %f %f"%(ufld,self.latc,self.lonc,radinfnm))
        meanu=float(ga.rword(5,2))
 
        vfld='vshr'
        ga("%s=(va(lev=200)-va(lev=850))*%f"%(vfld,ms2knots))
        ga("%s=re2(%s,0.25)"%(vfld,vfld))
        ga("tcprop %s %f %f %f"%(vfld,self.latc,self.lonc,radinfnm))
        meanv=float(ga.rword(5,2))
 
        shrdir=270.0-atan2(meanv,meanu)*rad2deg 
 
        if(shrdir < 0.0): shrdir=shrdir+360.0
        if(shrdir > 360.0): shrdir=360.0-shrdir
 
        self.plotFldContour(fld)
        ga('set gxout barb')
        ga('d ushr;skip(vshr,5))')
 
        ga("mfhilo %s gr l d 100 %f %f"%(fld,self.latc,self.lonc))
        latmshr=float(ga.rword(2,2))
        lonmshr=float(ga.rword(2,3))
        minshr=float(ga.rword(2,5))
 
        self.drawMark(latmshr,lonmshr,"%02.0f"%(minshr))
        self.drawHurr()
        self.drawRadinf(radinfnm)
 
        t1="TCdiag SHRMAG: %3.0f SHRDIR: %3.0f for: %s  dtg: %s  tau: %d R=0-%2.0f km"%(shrmag,shrdir,self.stmid,self.dtg,self.tau,radinf)
        t2="shear [kt] latc: %4.1f  lonc: %4.1f"%(self.latc,self.lonc)
        self.pT.top(t1,t2)
 
        ga("printim magshr.%03d.png"%(self.tau))
 
        return(shrmag)
 
 
    def getVort850(self):
 
        self.initGA()
 
        ga=self.ga
        ge=self.ge
 
        radinf=1000
        radinfnm=radinf*km2nm
 
        fld='vt8'
        ga("%s=hcurl(ua(lev=850),va(lev=850))*1e7"%(fld))
        ga("%s=re2(%s,0.25)"%(fld,fld))
        ga("tcprop %s %f %f %f"%(fld,self.latc,self.lonc,radinfnm))
 
        meanvt850=float(ga.rword(5,2))
        print 'MMMMMMMMMMMMMMMMMM ',meanvt850
 
        self.plotFldContour(fld)
 
        ga("mfhilo %s gr h d 100 %f %f"%(fld,self.latc,self.lonc))
        latvt8=float(ga.rword(2,2))
        lonvt8=float(ga.rword(2,3))
        maxvt8=float(ga.rword(2,5))*0.01
 
        self.drawMark(latvt8,lonvt8,"%02.0f"%(maxvt8))
        self.drawHurr()
        self.drawRadinf(radinfnm)
 
        t1="TCdiag 850VORT: %4.0f for: %s  dtg: %s  tau: %d  R=0-%2.0f km"%(meanvt850,self.stmid,self.dtg,self.tau,radinf)
        t2="10e-7 s`a-1`n  latc: %4.1f  lonc: %4.1f"%(self.latc,self.lonc)
        self.pT.top(t1,t2)
 
        ga("printim vt850.%03d.png"%(self.tau))
 
        return(meanvt850)
 
 
    def getDiv200(self):
 
        self.initGA()
 
        ga=self.ga
        ge=self.ge
 
        radinf=1000
        radinfnm=radinf*km2nm
 
        fld='vt8'
        ga("%s=hdivg(ua(lev=200),va(lev=200))*1e7"%(fld))
        ga("%s=re2(%s,0.25)"%(fld,fld))
        ga("tcprop %s %f %f %f"%(fld,self.latc,self.lonc,radinfnm))
 
        meandiv200=float(ga.rword(5,2))
        print 'MMMMMMMMMMMMMMMMMM ',meandiv200
 
        self.plotFldContour(fld)
 
        ga("mfhilo %s gr h d 100 %f %f"%(fld,self.latc,self.lonc))
        latdv2=float(ga.rword(2,2))
        londv2=float(ga.rword(2,3))
        maxdv2=float(ga.rword(2,5))*0.01
 
        self.drawMark(latdv2,londv2,"%02.0f"%(maxdv2))
        self.drawHurr()
        self.drawRadinf(radinfnm)
 
        t1="TCdiag 200DVRG: %4.0f for: %s  dtg: %s  tau: %d  R=0-%2.0f km"%(meandiv200,self.stmid,self.dtg,self.tau,radinf)
        t2="10e-7 s`a-1`n  latc: %4.1f  lonc: %4.1f"%(self.latc,self.lonc)
 
        self.pT.top(t1,t2)
 
        ga("printim div200.%03d.png"%(self.tau))
 
        return(meandiv200)
 
 
 
    def getTang850(self):
 
        self.initGA()
 
        ga=self.ga
        ge=self.ge
 
        radinf=600
        radinfnm=radinf*km2nm
 
        fld='tv8'
        ga("%s=uv2trw(ua(lev=850),va(lev=850),%f,%f,1)*10"%(fld,self.latc,self.lonc))
        ga("%s=re2(%s,0.25)"%(fld,fld))
        ga("tcprop %s %f %f %f"%(fld,self.latc,self.lonc,radinfnm))
 
        meantv850=float(ga.rword(5,2))
 
        ga("mfhilo %s gr l d 100 %f %f"%(fld,self.latc,self.lonc))
        lattv8=float(ga.rword(2,2))
        lontv8=float(ga.rword(2,3))
        mintv8=float(ga.rword(2,5))
 
        self.plotFldGrfill(fld)
 
        self.drawMark(lattv8,lontv8,"%02.0f"%(mintv8))
        self.drawHurr()
        self.drawRadinf(radinfnm)
 
        t1="TCdiag 850TANG: %2.0f for: %s  dtg: %s  tau: %d  R=0-%2.0f km"%(meantv850,self.stmid,self.dtg,self.tau,radinf)
        t2="10e1 kt  latc: %4.1f  lonc: %4.1f"%(self.latc,self.lonc)
        self.pT.top(t1,t2)
 
        ga("printim tv850.%03d.png"%(self.tau))
 
        return(meantv850)
 
 
    def fld2var(self,fld,level):
 
        fact='1.0'
        afact='0.0'
        cfact=fact
 
        format='%5.1f'
        if(fld == 'u' and level == 'sfc'):
            var='uas'
            fact=ms2knots
            cfact=''
        elif(fld == 'u' and level != 'sfc'):
            var='ua'
            fact=ms2knots
            cfact=''
        elif(fld == 'v' and level == 'sfc'):
            var='vas'
            fact=ms2knots
            cfact=''
        elif(fld == 'v' and level != 'sfc'):
            var='va'
            fact=ms2knots
            cfact=''
        elif(fld == 'r' and level == 'sfc'):
            var='hurs'
            format='%5.0f'
        elif(fld == 'r' and level != 'sfc'):
            var='hur'
            format='%5.0f'
        elif(fld == 't' and level == 'sfc'):
            var='tas'
            afact='-273.16'
        elif(fld == 't' and level != 'sfc'):
            var='ta'
            afact='-273.16'
        elif(fld == 'p' and level == 'sfc'):
            var='psl'
            fact='0.01'
            format='%5.0f'
            cfact=fact
        elif(fld == 'z' and level != 'sfc'):
            var='zg'
            fact='0.1'
            format='%5.0f'
            cfact=fact
 
        return(var,fact,afact,format,cfact)
 
 
 
    def getSounding(self,ifld,level):
 
        def printmean(ifld,level,meanfld):
            cmeanfld="%s"%(format)%(meanfld)
            print 'fld: %3s level: %4s  mean: %s'%(ifld,level,cmeanfld)
 
 
 
        self.initGA()
 
        ga=self.ga
        ge=self.ge
 
        (fld,fact,afact,format,cfact)=self.fld2var(ifld,level)
 
        try:
            if(level != 'sfc'):
                ga("set lev %s"%(level))
            ga("%s=re2(%s,0.25)*%s + %s"%(ifld,fld,fact,afact))
        except GrADSError:
            meanfld=9999.
            printmean(ifld,level,meanfld)
            return(meanfld)
 
        self.plotFldContour(ifld)
        self.drawHurr()
 
        if(ifld == 'u' or ifld == 'v'):
            ga("tcprop %s %f %f %f"%(ifld,self.latc,self.lonc,self.radinfOutWindnm))
            meanfld=float(ga.rword(5,2))
 
            self.drawRadinf(self.radinfOutWindnm)
 
            t1="TCdiag Var: %s Level: %s  Mean: %-2.1f for: %s  dtg: %s  tau: %d  R=0-%2.0f km"%\
                (ifld,level,meanfld,self.stmid,self.dtg,self.tau,self.radinfOutWind)
 
            t2="%s [kt] latc: %4.1f  lonc: %4.1f"%(cfact,self.latc,self.lonc)
 
        else:
            ga("tcprop %s %f %f %f"%(ifld,self.latc,self.lonc,self.radinfInnm))
            meanin=float(ga.rword(5,2))*self.areaIn
 
            ga("tcprop %s %f %f %f"%(ifld,self.latc,self.lonc,self.radinfOutnm))
            meanout=float(ga.rword(5,2))*self.areaOut
            meanfld=(meanout-meanin)/self.areaAnnulus
 
            self.drawRadinf(self.radinfInnm)
            self.drawRadinf(self.radinfOutnm)
 
            t1="TCdiag Var: %s Level: %s  Mean: %-2.1f for: %s  dtg: %s  tau: %d  R=%2.0f-%2.0f km"%\
                (ifld,level,meanfld,self.stmid,self.dtg,self.tau,self.radinfIn,self.radinfOut)
            t2="%s  latc: %4.1f  lonc: %4.1f"%(cfact,self.latc,self.lonc)
 
        self.pT.top(t1,t2)
 
        ga("printim %s_%s.%03d.png"%(ifld,level,self.tau))
 
        printmean(ifld,level,meanfld)
 
        if(ifld == 'u'):
 
            meanu=meanfld
            ufld=ifld
            vfld='v'
            (vvar,fact,afact,format,cfact)=self.fld2var(vfld,level)
            ga("%s=re2(%s,0.25)*%s + %s"%(vfld,vvar,fact,afact))
            ga("tcprop %s %f %f %f"%(vfld,self.latc,self.lonc,self.radinfOutWindnm))
            meanv=float(ga.rword(5,2))
            self.plotWindbarbs(ufld,vfld)
            self.drawHurr()
            self.drawRadinf(self.radinfOutWindnm)
            t1="TCdiag Winds Level: %s  U: %-2.1f V: %-2.1f for: %s dtg: %s tau: %d R=%2.0f-%2.0f km"%\
            (level,meanu,meanv,self.stmid,self.dtg,self.tau,self.radinfIn,self.radinfOut)
            t2="%s [kt] latc: %4.1f  lonc: %4.1f"%(cfact,self.latc,self.lonc)
            self.pT.top(t1,t2)
            ga("printim uv_%s.%03d.png"%(level,self.tau))
 
        return(meanfld)
 
 
    def plotFldGrfill(self,fld):
 
        ga('set gxout grfill')
        ga('d %s'%(fld))
        ga('cbarn')
        ga('set map 0 0 8')
        ga('draw map')
        ga('set map 1 0 4')
        ga('draw map')
 
    def plotWindbarbs(self,u,v):
 
        ga('c')
        ga('set gxout barb')
        ga('set clevs 10 25 35 50 65 120')
        ga('set ccols 0 7  3  2  8  4   5')
        ga('d %s;skip(%s,6);mag(%s,%s)'%(u,v,u,v))
        ga('cbarn')
        ga('set map 0 0 8')
        ga('draw map')
        ga('set map 1 0 4')
        ga('draw map')
 
    def plotFldContour(self,fld,cint=None):
 
        if(cint != None):
            ga('set cint %f'%(cint))
 
        ga('set gxout contour')
        ga('d %s'%(fld))
 
 
 
 
class MyCmdLine(CmdLine):
 
    def __init__(self,argv=sys.argv):
 
        if(argv == None): argv=sys.argv
 
        self.argv=argv
        self.argopts={
            1:['dtgopt',  'run dtgs'],
            2:['modelopt',    'model'],
            }
 
        self.defaults={
            'doupdate':0,
            }
 
        self.options={
            'override':['O',0,1,'override'],
            'verb':['V',0,1,'verb=1 is verbose'],
            'quiet':['q',0,1,' run GA in quiet mode'],
            'ropt':['N','','norun',' norun is norun'],
            'dowindow':['W',0,1,'1 - dowindow in GA.setGA()'],
            'doxv':['X',0,1,'1 - xv the plot'],
            }
 
        self.purpose='''
purpose -- generate TC large-scale 'diag' file for lgem/ships/stips intensity models
 '''
        self.examples='''
%s 2010052500 gfs2
'''
 
 
 
#mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
#
# main
#
 
argstr="pyfile 2010052500 gfs2"
argv=argstr.split()
#argv=sys.argv
CL=MyCmdLine(argv=argv)
CL.CmdLine()
exec(CL.estr)
if(verb): print CL.estr
 
gaopt='-g 1024x768'
ddir="%s/nwp2/w2flds/dat"%(W2BaseDirDat)
 
dtgs=mf.dtg_dtgopt_prc(dtgopt)
dtg=dtgs[0]
 
stmid='90L.2010'
 
models=modelopt.split(',')
model=models[0]
 
tD=TcData()
 
apath="%s/%s/w2flds/tctrk.atcf.%s.%s.txt"%(TcAdecksEsrlDir,dtg[0:4],dtg,model)
apath="%s/%s/tracks.all.%s.txt"%(TcAdecksNcepDir,dtg[0:4],dtg)
 
aid='avno'
aD=AD.Adeck(apath)
aT=aD.GetAidTrks(aid,stm1id=stmid)
 
try:
    trk=aT.atrks[dtg]
except:
    print 'EEE no traks for aid: ',aid,' stmid: ',stmid
    sys.exit()
 
#stmids=tD.getStmidDtg(dtg)
#print stmids
 
tau=0
(latc,lonc,vmaxc,pminc)=trk[tau]
print 'TTTT tau: ',tau,' latc: ',latc,' lonc: ',lonc,' vmaxc: ',vmaxc,' pminc: ',pminc
 
ctlpath='%s/%s/%s/%s.w2flds.%s.ctl'%(ddir,model,dtg,model,dtg)
ga=G1(Bin='grads2',Opts=gaopt,Window=dowindow)
 
#ga=GA.setGA(window=dowindow,opt=gaopt,type='gacore')
ga.fh=ga.open(ctlpath)
ge=GA.GradsEnv(ga)
ga('load udxt libmf.udxt')
 
 
tG=TcDiag(ga,ge,latc,lonc,stmid,dtg,tau)
 
levels=['sfc']+ge.Levs
 
fldssfc=['t','r','p','u','v']
fldua=['t','r','z','u','v']
for level in levels:
 
    if(level == 'sfc'):
        flds=fldssfc
    else:
        flds=fldua
        level="%2.0f"%(level)
 
    for fld in flds:
        rc=tG.getSounding(fld,level)
 
 
rc=tG.getVmaxRmax4Tcxy2rt()
rc=tG.getTang850()
rc=tG.getPmin()
rc=tG.getPrw()
rc=tG.getShear()
rc=tG.getVort850()
rc=tG.getDiv200()
 
sys.exit()