; Plots trajectories on maps and using any two attributes as coordinates. ; ; J.Methven 10/07/00. ; J.Methven 25/03/03. ; ; *********************************************************************** ; *********************************************************************** ; Plot trajectories on map. ; ; John Methven 10/07/00. ; pro baltraj,posn,lev0,dlev,nclev,limits,attrchoice,attit COMMON INPUT,FNAME,TFORC,INIY,INIM,INID,INIH,NTIME,TIMARR,KFORW,CFLAG NPART=n_elements(posn(0,*,0)) NATTR=n_elements(posn(0,0,*))-4 IPTS=n_elements(posn(*,0,0))-1 ; ZEL=NATTR ZEL=0 maintit=$ +STRTRIM(INIH,2)+'UT '+STRTRIM(INID,2) $ +'/'+STRTRIM(INIM,2)+'/'+STRTRIM(INIY,2) LPTRAJ=1 LREVSCAL=0 NCOLS=256 LOW=LEV0 HIGH=LEV0+NCLEV*DLEV IF ATTRCHOICE EQ 2 THEN BEGIN LREVSCAL=1 IF MAX(POSN(*,*,2)) GT 10 THEN HIGH=1100. ENDIF SCAL=FLOAT(NCOLS)/(NCLEV*DLEV) COLTRAJ=FLOAT(NCOLS)*(0.8+FINDGEN(NPART))/FLOAT(NPART) ; ; Set up the layout for the output window. ; PTEXT=[60,40] dlon=limits(3)-limits(1) dlat=limits(2)-limits(0) FAC=COS((LIMITS(2)+LIMITS(0))/(2.*!RADEG))*DLON/DLAT FROMBOT=10 HEIGHT=260 H2=150 UPOFF=2*FROMBOT+H2 PFIELD=[PTEXT(0),PTEXT(1)+UPOFF,0,HEIGHT,0,0] PFIELD(2)=PFIELD(3)*FAC PFIELD(4)=PFIELD(0)+PFIELD(2) PFIELD(5)=PFIELD(1)+PFIELD(3) PF2=[PTEXT(0),PTEXT(1)+FROMBOT,0,H2,0,0] PF2(2)=PFIELD(2) PF2(4)=PF2(0)+PF2(2) PF2(5)=PF2(1)+PF2(3) PWIN=[1,31,640,512] ; ; Set up the map projection with titles. ; POSMEM=!P.POSITION erase !P.MULTI=[0,2,1] !P.POSITION=[PFIELD(0)/FLOAT(PWIN(2)), PFIELD(1)/FLOAT(PWIN(3)) $ , PFIELD(4)/FLOAT(PWIN(2)), PFIELD(5)/FLOAT(PWIN(3))] MAP_SET,0,-5 $ ,/CYLINDRICAL $ ,LIMIT=LIMITS $ ,TITLE=MAINTIT DDEG=10. NLONG=360./DDEG NLATG=180./DDEG ALONG=FINDGEN(NLONG+1)*DDEG ALATG=FINDGEN(NLATG)*DDEG-89.9999 MAP_GRID,LATS=ALATG,LONS=ALONG,GLINESTYLE=1 map_continents,mlinestyle=0,/hires ;map_continents,mlinestyle=0 ; ; Plot on the particles. ; IST=0 LAST=NPART-1 ILP=IST+FINDGEN(LAST+1-IST) ISTLP=IST LASTLP=LAST FOR I=IST,LAST DO BEGIN II=ILP(I-IST) INFL=WHERE(POSN(*,II,2+ZEL) GE 0.) IPTS=N_ELEMENTS(INFL) PLOTS,POSN(INFL(IPTS-1),II,0),POSN(INFL(IPTS-1),II,1) $ ,COLOR=COLTRAJ(II) $ ,PSYM=7,SYMSIZE=1.,THICK=2 ENDFOR IF LPTRAJ EQ 1 AND IPTS GT 0 THEN BEGIN LTHICK=6 FOR I=ISTLP,LASTLP DO BEGIN II=ILP(I-ISTLP) INFL=WHERE(POSN(*,II,2+ZEL) GE 0.) IPTS=N_ELEMENTS(INFL) PLOTS,POSN(INFL(0:IPTS-1),II,0),POSN(INFL(0:IPTS-1),II,1) $ ,COLOR=COLTRAJ(II) $ ,PSYM=0,THICK=LTHICK LTHICK=4 ENDFOR ENDIF ; ; Longitude height plot. ; !P.MULTI=[1,2,1] !P.POSITION=[PF2(0)/FLOAT(PWIN(2)), PF2(1)/FLOAT(PWIN(3)) $ , PF2(4)/FLOAT(PWIN(2)), PF2(5)/FLOAT(PWIN(3))] LR=LOW HR=HIGH IF LREVSCAL EQ 1 THEN BEGIN LR=HIGH HR=LOW ENDIF PLOT,[LIMITS(1),LIMITS(3)],[LEV0,LEV0],PSYM=3,/NOERASE $ ,XTITLE='Longitude (degrees)' $ ,XRANGE=[LIMITS(1),LIMITS(3)],XSTYLE=1 $ ,YTITLE=ATTIT,YRANGE=[LR,HR],YSTYLE=1 $ ,TITLE=TYTIT ; ; Plot on the particles. ; POSNCOP=POSN(*,*,0) GT180=WHERE(POSNCOP GT 180.) ; IF (GT180(0) NE -1) THEN POSNCOP(GT180)=POSNCOP(GT180)-360. FOR I=IST,LAST DO BEGIN II=ILP(I-IST) INFL=WHERE(POSN(*,II,2+ZEL) GE 0.) IPTS=N_ELEMENTS(INFL) PLOTS,POSNCOP(INFL(IPTS-1),II),POSN(INFL(IPTS-1),II,ATTRCHOICE) $ ,COLOR=COLTRAJ(II) $ ,PSYM=7,SYMSIZE=1.,THICK=2 ENDFOR IF LPTRAJ EQ 1 AND IPTS GT 0 THEN BEGIN LTHICK=6 FOR I=ISTLP,LASTLP DO BEGIN II=ILP(I-ISTLP) INFL=WHERE(POSN(*,II,2+ZEL) GE 0.) IPTS=N_ELEMENTS(INFL) X1=POSNCOP(INFL(0),II) J1=0 FOR J=1,IPTS-1 DO BEGIN X2=POSNCOP(INFL(J),II) IF ABS(X2-X1) GT 180. THEN BEGIN PLOTS,POSNCOP(INFL(J1:J-1),II),POSN(INFL(J1:J-1),II,ATTRCHOICE) $ ,COLOR=COLTRAJ(II) $ ,PSYM=0,THICK=LTHICK J1=J ENDIF X1=X2 ENDFOR PLOTS,POSNCOP(INFL(J1:IPTS-1),II),POSN(INFL(J1:IPTS-1),II,ATTRCHOICE) $ ,COLOR=COLTRAJ(II) $ ,PSYM=0,THICK=LTHICK LTHICK=4 ENDFOR ENDIF !P.MULTI=[0,1,1] !P.POSITION=POSMEM return end ; *********************************************************************** ; Plot attr x vs attr y for balloon track. ; ; John Methven 10/07/00. ; pro balxvy,posn,nclev,limits,xlev0,xdlev,xattr,xattit $ ,ylev0,ydlev,yattr,yattit COMMON INPUT,FNAME,TFORC,INIY,INIM,INID,INIH,NTIME,TIMARR,KFORW,CFLAG NPART=n_elements(posn(0,*,0)) NATTR=n_elements(posn(0,0,*))-4 IPTS=n_elements(posn(*,0,0))-1 ;ZEL=NATTR ZEL=0 maintit=$ +STRTRIM(INIH,2)+'UT '+STRTRIM(INID,2) $ +'/'+STRTRIM(INIM,2)+'/'+STRTRIM(INIY,2) LPTRAJ=1 NCOLS=256 ; ; Deal with the x-attribute. ; xlrevscal=0 xlr=xlev0 xhr=xlev0+nclev*xdlev if xattr eq 2 then begin xlrevscal=1 IF MAX(POSN(*,*,2)) GT 10 THEN XHR=1100. endif if xlrevscal eq 1 then begin xlr=xhr xhr=xlev0-xdlev endif ; ; Deal with the y-attribute. ; ylrevscal=0 ylr=ylev0 yhr=ylev0+nclev*ydlev if yattr eq 2 then begin ylrevscal=1 IF MAX(POSN(*,*,2)) GT 10 THEN YHR=1100. endif if ylrevscal eq 1 then begin ylr=yhr yhr=ylev0-ydlev endif COLTRAJ=FLOAT(NCOLS)*(0.8+FINDGEN(NPART))/FLOAT(NPART) PLOT,[XLR,XHR],[YLR,YLR],PSYM=3 $ ,XTITLE=XATTIT,XRANGE=[XLR,XHR],XSTYLE=1 $ ,YTITLE=YATTIT,YRANGE=[YLR,YHR],YSTYLE=1 $ ,TITLE=MAINTIT,CHARSIZE=1.5 ; ; Plot on the particles. ; IST=0 LAST=NPART-1 ILP=IST+FINDGEN(LAST+1-IST) FOR I=IST,LAST DO BEGIN II=ILP(I-IST) INFL=WHERE(POSN(*,II,2+ZEL) GE 0.) IPTS=N_ELEMENTS(INFL)-1 PLOTS,POSN(INFL(IPTS),II,XATTR),POSN(INFL(IPTS),II,YATTR) $ ,COLOR=COLTRAJ(II) $ ,PSYM=7,SYMSIZE=1.,THICK=2 ENDFOR IF LPTRAJ EQ 1 AND IPTS GT 0 THEN BEGIN LTHICK=2 FOR I=IST,LAST DO BEGIN II=ILP(I-IST) INFL=WHERE(POSN(*,II,2+ZEL) GE 0.) IPTS=N_ELEMENTS(INFL)-1 J1=0 PLOTS,POSN(INFL(J1:IPTS),II,XATTR),POSN(INFL(J1:IPTS),II,YATTR) $ ,COLOR=COLTRAJ(II) $ ,PSYM=0,THICK=LTHICK LTHICK=2 ENDFOR ENDIF return end ; *********************************************************************** ; Widget event control loop for trajectories. ; pro trajplot_event, ev common comdata, posn common comlevd, lev0, dlev, ylev0, ydlev, nclev, minval, limits, limsav $ , attrchoice, attry, units, ciarr common comslic, set, tjcount, scount, lcomputer, colfile COMMON INPUT,FNAME,TFORC,INIY,INIM,INID,INIH,NTIME,TIMARR,KFORW,CFLAG ; Basestruct contains the current values of several widgets: widget_control, ev.top, get_uvalue=basestruct, /draw_button_events widget_control, ev.id, get_uvalue=uv case uv of 'about': info = dialog_message($ ['Dr John Methven fax +44 118 3788905', $ 'Dept of Meteorology tel +44 118 3786721', $ 'University of Reading', $ 'Earley Gate', $ 'PO Box 243 J.Methven@reading.ac.uk', $ 'Reading RG6 6BB, UK http://www.met.rdg.ac.uk/~swrmethn'], $ /information, dialog_parent=ev.top ) 'attrchoice': begin attrchoice=ev.index lev0=ciarr(0,attrchoice) dlev=ciarr(1,attrchoice) ; widget_control, basestruct.tx0id $ ; ,set_value=strcompress(string(lev0,format='(G8.3)'),/remove_all) ; widget_control, basestruct.tx1id $ ; ,set_value=strcompress(string(dlev,format='(G8.3)'),/remove_all) end 'attry': begin attry=ev.index ylev0=ciarr(0,attry) ydlev=ciarr(1,attry) widget_control, basestruct.tx0id $ ,set_value=strcompress(string(ylev0,format='(G8.3)'),/remove_all) widget_control, basestruct.tx1id $ ,set_value=strcompress(string(ydlev,format='(G8.3)'),/remove_all) end 'ctab': begin if colfile ne 'no' then begin loadct, ev.index, /silent, file=colfile endif else begin loadct, ev.index, /silent endelse end 'done': widget_control, ev.top, /destroy 'print': begin widget_control, /hourglass if lcomputer eq 0 then begin set_plot, 'ps', /interpolate case set of 1: begin psname='tj_a'+strtrim(attry,2)+'.ps' ; device, file=psname, /landscape, /color, bits=8, /encapsulated device, file=psname, /landscape, /color, bits=8 end 2: begin psname='xvy_x'+strtrim(attrchoice,2)+'_y'+strtrim(attry,2)+'.ps' device, file=psname, /landscape, /color, bits=8 end endcase endif else begin set_plot, 'printer' device, /landscape endelse tvlct, r, g, b, /get r0 = r[0] & g0 = g[0] & b0 = b[0] r[0] = 0B & g[0] = 0B & b[0] = 0B tvlct, r, g, b case set of 1: begin yattit=units(attry) baltraj,posn,ylev0,ydlev,nclev,limits,attry,yattit end 2: begin xattit=units(attrchoice) yattit=units(attry) balxvy,posn,nclev,limits,lev0,dlev,attrchoice,xattit $ ,ylev0,ydlev,attry,yattit end endcase r[0] = r0 & g[0] = g0 & b[0] = b0 tvlct, r, g, b if lcomputer eq 0 then begin device, /close set_plot, 'x' device, pseudo_color=8 endif else begin device, /close_document set_plot, 'win' device, decomposed=0 endelse info = dialog_message('printed to file '+psname,/information,$ dialog_parent=ev.top ) wset, basestruct.drawid end 'reverse': begin tvlct, r, g, b, /get nc = n_elements(r) & nh = nc/2 for i=1, nh do begin s=r(i-1) & r(i-1)=r(nc-i) & r(nc-i)=s & end for i=1, nh do begin s=g(i-1) & g(i-1)=g(nc-i) & g(nc-i)=s & end for i=1, nh do begin s=b(i-1) & b(i-1)=b(nc-i) & b(nc-i)=s & end tvlct, r, g, b end 'texl0': begin widget_control, ev.id, get_value=new ylev0 = float(new[0]) end 'texdl': begin widget_control, ev.id, get_value=new ydlev = float(new[0]) end 'texlat1': begin widget_control, ev.id, get_value=new limits(0) = float(new[0]) end 'texlon1': begin widget_control, ev.id, get_value=new limits(1) = float(new[0]) end 'texlat2': begin widget_control, ev.id, get_value=new limits(2) = float(new[0]) end 'texlon2': begin widget_control, ev.id, get_value=new limits(3) = float(new[0]) end 'traj': begin yattit=units(attry) baltraj,posn,ylev0,ydlev,nclev,limits,attry,yattit set = 1 end 'xvsy': begin xattit=units(attrchoice) yattit=units(attry) balxvy,posn,nclev,limits,lev0,dlev,attrchoice,xattit $ ,ylev0,ydlev,attry,yattit set = 2 end endcase end ; *********************************************************************** ; MAIN PROGRAM trajplot ; *********************************************************************** common comdata, posn common comlevd, lev0, dlev, ylev0, ydlev, nclev, minval, limits, limsav $ , attrchoice, attry, units, ciarr common comslic, set, tjcount, scount, lcomputer, colfile COMMON INPUT,FNAME,TFORC,INIY,INIM,INID,INIH,NTIME,TIMARR,KFORW,CFLAG print,'******************************************************' print,'****** TRAJPLOT **************************************' print,'******************************************************' print,'****** Date: 23/05/2003 ******************************' print,'****** Author: John Methven, University of Reading ***' print,'******************************************************' print,' ' ; ; Set defaults for non-interactive mode. ; In order of appearance in program below. ; lcomputer=0 colfile='no' ; colfile='~/prolib/colorsj.tbl' IDATA=1 logp='n' t2th=1 logq='y' ; ; Set LQUEST=1 for interactive changes; 0 to use defaults. ; LQUEST=1 if LQUEST eq 0 then begin print,'Using default start-up.' endif else begin print,'Interactive start-up.' endelse ; ; Set lcomputer = 0: UNIX workstation ; = 1: PC (Windows) if LQUEST eq 1 then begin print,' ' read,lcomputer,prompt='Enter 0 for UNIX workstation; 1 for PC: ' endif if lcomputer eq 0 then begin set_plot, 'x' device, pseudo_color=8 print,'Selected UNIX workstation' endif else begin set_plot, 'win' device, decomposed=0 print,'Selected Microsoft Windows' endelse ; ; Choose IDL colour tables. ; if LQUEST eq 1 then begin print,' ' read,colfile,prompt= $ 'Enter filename for IDL colour table (no for default): ' endif ; ; Read trajectory data from ec format file. ; DATE=LONG(1) DATE=2000070112 READ,DATE,PROMPT='Enter year, mon, day, hour (e.g. 1995010100): ' FSTEM='traj' IF LQUEST EQ 1 THEN BEGIN READ,FSTEM,PROMPT='Enter filename stem (e.g. bal): ' ENDIF FNAME=FSTEM+STRTRIM(DATE,2) IF DATE GT 99999999 THEN BEGIN INIY=STRMID(STRTRIM(DATE,2),0,4) INIM=STRMID(STRTRIM(DATE,2),4,2) INID=STRMID(STRTRIM(DATE,2),6,2) INIH=STRMID(STRTRIM(DATE,2),8,2) ENDIF ELSE BEGIN INIY=STRMID(STRTRIM(DATE,2),0,2) INIM=STRMID(STRTRIM(DATE,2),2,2) INID=STRMID(STRTRIM(DATE,2),4,2) INIH=STRMID(STRTRIM(DATE,2),6,2) ENDELSE IF LQUEST EQ 1 THEN BEGIN PRINT,' ' PRINT,'CHOOSE PATH FOR DATA (refer to IDATA in TRAJREAD routine)' PRINT,'e.g. IDATA = 1 = Trajectory file in current directory' PRINT,' ' READ,IDATA,PROMPT='Enter IDATA code: ' ENDIF PRINT,' ' PRINT,'READING TRAJECTORY DATA ...' RDFTREAD,IDATA,FSTEM,DATE,NPART,IPTS,NATTR,RPOSN,IATTRTYP,IPOINTER $ ,CFLAG,KFORW,DT PRINT,' ',kforw,dt POSN=FLTARR(IPTS,NPART,4+NATTR) POSN(*,*,0:2+NATTR)=RPOSN(*,*,*) FOR I=0,NPART-1 DO BEGIN POSN(*,I,3+NATTR)=FINDGEN(IPTS)*DT*24. ENDFOR PTMP=POSN(*,*,2) ITYP=LONARR(4+NATTR) ITYP(0:2)=[-3,-2,-1] IF DATE LT 99999999 THEN IATTRTYP=2+FINDGEN(NATTR) IF NATTR GT 0 THEN ITYP(3:2+NATTR)=IATTRTYP(*) ITYP(3+NATTR)=-4 UNITS=STRARR(4+NATTR) CIARR=FLTARR(2,4+NATTR) minval=-1.e12 outob=1.1*minval RADEA=6371229. FOR I=0,NATTR+3 DO BEGIN INTYPE=ITYP(I) CASE INTYPE OF -4: BEGIN UNITS(I)='Time (hrs)' CIARR(*,I)=[0.,4.] END -3: BEGIN lontmp=posn(*,*,i) wrap=where(lontmp gt 180.) if wrap(0) ne -1 then lontmp(wrap)=lontmp(wrap)-360. posn(*,*,i)=lontmp UNITS(I)='Longitude' CIARR(*,I)=[-100.,5.] END -2: BEGIN UNITS(I)='Latitude' CIARR(*,I)=[20.,2.] END -1: BEGIN logp='n' if LQUEST eq 1 then begin print,' ' read,logp,prompt='Convert p to log(p) (y/n)?: ' endif if logp eq 'y' then begin QCOP=POSN(*,*,I) QPOS=WHERE(QCOP GT 0.) QNEG=WHERE(QCOP LE 0.) IF QNEG(0) NE -1 THEN QCOP(QNEG)=OUTOB QCOP(QPOS)=ALOG10(QCOP(QPOS)) POSN(*,*,I)=QCOP UNITS(I)='log (p)' CIARR(*,I)=[0.,0.1] endif else begin UNITS(I)='Pressure (hPa)' CIARR(*,I)=[200.,40.] endelse END 0: BEGIN UNITS(I)='Surface p (hPa)' CIARR(*,I)=[750.,10.] END 1: BEGIN if LQUEST eq 1 then begin print,' ' print,'Choose thermodynamic variable' print,'0: temperature' print,'1: dry potential temperature' read,t2th,prompt='?: ' endif UNITS(I)='Temperature (K)' CIARR(*,I)=[230.,3.] case t2th of 0: begin end 1: begin POSN(*,*,I)=POSN(*,*,I)*((PTMP(*,*)/1000.)^(-2./7.)) UNITS(I)='Dry PT (K)' CIARR(*,I)=[280.,2.] end endcase print,' ' print,'Thermodynamic variable is '+units(i) END 2: BEGIN UNITS(I)='Theta (K)' CIARR(*,I)=[250.,5.] END 3: BEGIN UNITS(I)='PV (PVU)' CIARR(*,I)=[-11.0,0.75] END 4: BEGIN logq='y' if LQUEST eq 1 then begin print,' ' read,logq,prompt='Convert q to log(q) (y/n)?: ' endif if logq eq 'y' then begin QCOP=POSN(*,*,I) QPOS=WHERE(QCOP GT 0.) QNEG=WHERE(QCOP LE 0.) IF QNEG(0) NE -1 THEN QCOP(QNEG)=OUTOB QCOP(QPOS)=ALOG10(QCOP(QPOS)) POSN(*,*,I)=QCOP UNITS(I)='log (q)' CIARR(*,I)=[-5.,0.15] endif else begin UNITS(I)='Specific humidity' CIARR(*,I)=[0.,1.E-4] endelse END 7: BEGIN POSN(*,*,I)=POSN(*,*,I)*(2*KFORW-1)*RADEA*COS(POSN(*,*,0)/!RADEG)/86400. UNITS(I)='u (ms!e-1!n)' CIARR(*,I)=[-45.,3.] END 8: BEGIN POSN(*,*,I)=POSN(*,*,I)*(2*KFORW-1)*RADEA/86400. UNITS(I)='v (ms!e-1!n)' CIARR(*,I)=[-30.,2.] END 10: BEGIN POSN(*,*,I)=POSN(*,*,I)/1000. UNITS(I)='z (km)' CIARR(*,I)=[0.,0.3] END ELSE: BEGIN UNITS(I)='?' CIARR(*,I)=[0.,1.] END ENDCASE ENDFOR attrchoice=1+nattr attry=2 ntime=ipts-1 set=1 tjcount=0 scount=0 ; limsav=[25.,-120.,80.,60.] limsav=[-15.,-10.,45.,120.] ; limsav=[40.,-50.,70.,20.] ; ; Set up the widgets common to all operations. ; base = widget_base(/column,title='TRAJPLOT') bdrw = widget_base(base) bwd1 = widget_base(base, /row, /align_center) bwd2b = widget_base(base, /row, /align_center) bwd2 = widget_base(base, /row, /align_center) bwd3 = widget_base(base, /row, /align_center) draw = widget_draw(bdrw, xsize=640, ysize=512, frame=4, /button_events,$ uvalue='mouse_event') ; ; Attribution row. ; attrwid = widget_droplist(bwd1, value=units, uvalue='attrchoice', $ title='attr x') widget_control, attrwid, set_droplist_select=attrchoice attrwid = widget_droplist(bwd1, value=units, uvalue='attry', $ title='attr y') widget_control, attrwid, set_droplist_select=attry limits=limsav texlat1 = widget_text(bwd2b, xsize=8, /editable, /all_events $ , uvalue='texlat1') widget_control, texlat1 $ ,set_value=strcompress(string(limits(0),format='(G8.3)'),/remove_all) texlon1 = widget_text(bwd2b, xsize=8, /editable, /all_events $ , uvalue='texlon1') widget_control, texlon1 $ ,set_value=strcompress(string(limits(1),format='(G8.3)'),/remove_all) texlat2 = widget_text(bwd2b, xsize=8, /editable, /all_events $ , uvalue='texlat2') widget_control, texlat2 $ ,set_value=strcompress(string(limits(2),format='(G8.3)'),/remove_all) texlon2 = widget_text(bwd2b, xsize=8, /editable, /all_events $ , uvalue='texlon2') widget_control, texlon2 $ ,set_value=strcompress(string(limits(3),format='(G8.3)'),/remove_all) ; ; Contouring and colouring row. ; lev0=ciarr(0,attrchoice) dlev=ciarr(1,attrchoice) ylev0=ciarr(0,attry) ydlev=ciarr(1,attry) nclev=30 texl0 = widget_text(bwd2, xsize=8, /editable, /all_events $ , uvalue='texl0') widget_control, texl0 $ ,set_value=strcompress(string(ylev0,format='(G8.3)'),/remove_all) texdl = widget_text(bwd2, xsize=8, /editable, /all_events $ , uvalue='texdl') widget_control, texdl $ ,set_value=strcompress(string(ydlev,format='(G8.3)'),/remove_all) colfile='no' ;colfile='~/prolib/colorsj.tbl' ;colfile='C:/ACTO/rdf/colorsj.tbl' ctabs = 0 if colfile ne 'no' then begin loadct, get_names=ctabs, /silent, file=colfile endif else begin loadct, get_names=ctabs, /silent endelse ctab = widget_droplist(bwd2, value=ctabs, uvalue='ctab', $ title="colours") ctab0 = 27 if colfile ne 'no' then begin ctab0 = 2 loadct, ctab0, /silent, file=colfile endif else begin loadct, ctab0, /silent endelse widget_control, ctab, set_droplist_select=ctab0 ibutt = widget_button(bwd2, value='reverse', uvalue='reverse') ; ; Bottom widget row - the operations. ; tbutt=widget_button(bwd3,xsize=80,frame=4,value='traj',uvalue='traj') tbutt=widget_button(bwd3,xsize=80,frame=4,value='x vs y',uvalue='xvsy') pbutt=widget_button(bwd3,xsize=80,frame=4,value='print',uvalue='print') hbutt=widget_button(bwd3,xsize=80,frame=4,value='about',uvalue='about') dbutt=widget_button(bwd3,xsize=80,frame=4,value='done',uvalue='done') controller='trajplot' widget_control,base,/realize widget_control,draw,get_value=draw_id widget_control,base,set_uvalue=$ {basestruct,tx0id:texl0,tx1id:texdl,drawid:draw_id $ ,tx2id:texlat1,tx3id:texlon1,tx4id:texlat2,tx5id:texlon2} wset,draw_id xmanager,controller,base end ; ************************************************************************