;+ ; NAME: ; qLine_Curve ; PURPOSE: ; Plot curves in qLine widget ; CATEGORY: ; Widget qLine ; CALLING SEQUENCE: PRO qLine_Curve, state ; INPUTS: ; state array[1]; type: structure ; qLine state structure ; OUTPUTS: ; (to draw widget) ; INCLUDE: @compile_opt.pro ; On error, return to caller ; CALLS: ; IsDisplay, IsTime, TimeScale, TimeXAxis, PlotCurve, qLine_SequenceOrder ; qLine_FitPlot, destroyvar, TimeUnit, TimeLimits, TimeOp, TimeSet ; PROCEDURE: ; Curves are plotted using the information in the state structure ; MODIFICATION HISTORY: ; FEB-2000, Paul Hick ; JUN-2004, Paul Hick (UCSD/CASS; pphick@ucsd.edu) ; Improved handling of time axis ;- y = *state.y IF ptr_valid(state.t) THEN $ IF n_elements(*state.t) NE 0 THEN $ t = *state.t btime = IsTime(t) IF btime THEN BEGIN widget_control, state.wid_ymd , get_uvalue=ymd widget_control, state.wid_ydoy, get_uvalue=ydoy btime = ymd OR ydoy ENDIF CASE btime OF 0: BEGIN ; Find the curve number of the x-axis FOR i=0,state.n-1 DO BEGIN widget_control, state.wid_isx[i], get_uvalue=tmp IF tmp THEN isx = i ENDFOR x = y[isx,*] END 1: BEGIN isx = 0 x = t END ENDCASE widget_control, state.wid_exact[isx], get_uvalue=xstyle uday = TimeUnit(/day) CASE xstyle OF 0: IF btime THEN xrange = TimeLimits(/range, x) 1: BEGIN widget_control, state.wid_ymin[isx], get_value=tmp1 widget_control, state.wid_ymax[isx], get_value=tmp2 xrange = [tmp1, tmp2] IF btime THEN BEGIN ; Translate xrange into time range tmp = TimeOp(/subtract, t, t[0], uday) tmp = interpol(tmp, y[isx,*], xrange) xrange = TimeOp(/add, t[0], TimeSet(/diff, tmp, uday)) ENDIF END ENDCASE widget_control, state.wid_margin[0], get_value=tmp1 widget_control, state.wid_margin[1], get_value=tmp2 xmargin = [tmp1, tmp2] widget_control, state.wid_ytitle[isx], get_value=xtitle widget_control, state.wid_title, get_value=title widget_control, state.wid_chars, get_value=charsize wold = !d.window widget_control, state.wid_draw, get_value=wnr IF IsDisplay() THEN wset, wnr erase IF btime THEN BEGIN TimeXAxis , xrange, t0=TimeGet(x[0], uday, /bot), ydoy=ydoy, $ xmargin=xmargin, exact=xstyle, charsize=charsize destroyvar, xrange ENDIF no_first_yaxis = 1 xaxis_done = btime skip = 0 newy = 0 FOR i=0,state.n-1 DO BEGIN widget_control, state.wid_skip[i], get_uvalue=tmp skip = [skip,tmp] CASE tmp OF 0: BEGIN widget_control, state.wid_newyaxis[i], get_uvalue=tmp newy = [newy, tmp] END 1: newy = [newy,0] ENDCASE ENDFOR skip = skip[1:*] ; 'Skip' settings newy = newy[1:*] ; 'Newyaxis' settings dyaxis = 1.0/((total(newy)-newy[0]) > 1) seq = qLine_SequenceOrder(state) widget_control, state.wid_badvalue, get_value=bad bad = flt_string(bad) FOR i=0,state.n-1 DO BEGIN seq_i = seq[i] IF NOT skip[seq_i] THEN BEGIN widget_control, state.wid_exact[seq_i], get_uvalue=ystyle CASE ystyle OF 0: destroyvar, yrange 1: BEGIN widget_control, state.wid_ymin[seq_i], get_value=ymin widget_control, state.wid_ymax[seq_i], get_value=ymax yrange = [ymin,ymax] IF ymin EQ ymax THEN yrange = [ymin-1,ymax+1] END ENDCASE widget_control, state.wid_ynozero [seq_i], get_uvalue=ynozero widget_control, state.wid_ylog [seq_i], get_uvalue=ylog widget_control, state.wid_use_sigma [seq_i], get_uvalue=use_sigma y_sigma = 0 IF use_sigma THEN BEGIN widget_control, state.wid_sigma_index[seq_i], get_value=sigma_index IF sigma_index NE 0 THEN y_sigma = y[sigma_index,*] ENDIF widget_control, state.wid_linestyle [seq_i], get_value=linestyle widget_control, state.wid_ytitle [seq_i], get_value=ytitle IF newy[seq_i] THEN BEGIN CASE 1 OF no_first_yaxis: BEGIN yaxis = -1 no_first_yaxis = 0B END yaxis EQ -1 : yaxis = 0 ELSE : yaxis = yaxis+dyaxis ENDCASE ENDIF ELSE IF no_first_yaxis THEN BEGIN yaxis = -1 no_first_yaxis = 0B ENDIF ;yaxis = yaxis+(i gt 0)*newy[i]*dyaxis yy = y[seq_i,*] IF finite(bad) THEN BEGIN j = where(yy EQ bad) IF j[0] NE -1 THEN yy[j] = BadValue(yy) ENDIF PlotCurve, x, yy , $ /silent , $ sigma = y_sigma , $ oplot = xaxis_done, $ ; Only used if oplot=0B xmargin = xmargin , $ xrange = xrange , $ xstyle = xstyle , $ title = title[0] , $ xtitle = xtitle[0] , $ ; Only used for i>0 newyaxis= newy[seq_i],$ yaxis = yaxis , $ ; Always used ylog = ylog , $ ynozero = ynozero , $ yrange = yrange , $ ystyle = ystyle , $ ytitle = ytitle[0] , $ linestyle=linestyle , $ charsize= charsize qLine_FitPlot, state, seq_i, x, y[seq_i,*] xaxis_done = 1B ENDIF ENDFOR IF ptr_valid(state.plotstr) THEN $ FOR i=0,n_elements(*state.plotstr)-1 DO $ IF strlen((*state.plotstr)[i]) GT 0 THEN $ tmp = execute( (*state.plotstr)[i] ) IF IsDisplay() THEN wset, wold RETURN & END