;+ ; NAME: ; InSitu ; PURPOSE: ; Plots in-situ data from various spacecraft ; CATEGORY: ; CALLING SEQUENCE: PRO InSitu, T, $ delt = delt, $ weight = weight, $ source = source, $ step = step, $ xtime = xtime, $ xlng = xlng, $ xlat = xlat, $ ylng = ylng, $ ylat = ylat, $ ydis = ydis, $ yden = yden, $ yvel = yvel, $ ybr = ybr , $ ybt = ybt , $ ybn = ybn , $ ybb = ybb , $ ykp = ykp , $ ydst = ydst, $ ypdyn = ypdyn, $ yvlng = yvlng, $ yvlat = yvlat, $ traceback=traceback,$ xrange = xrange, $ charsize=charsize, $ _extra = _extra ; INPUTS: ; T array[2], type: standard time structure ; time range for time series ; OPTIONAL INPUT PARAMETERS: ; /xtime, /xlng, /xlat ; select one to set the quantity plotted on the x-axis: time, heliographic longitude ; or heliographic latitude. Only one can be specified; if none is specified ; then /xtime is assumed ; source=source ; scalar; type: integer ; identifies in situ instrument (see function Instrument) ; /ylng, /ylat, /ydis, /yden, /yvel, /ybr, /ybt, /ybn, /ybb, /ykp, /ydst, /ypdyn, /yvlng, yvlat ; detemines quantity plotted on y-axis. Multiple keywords can be specified. ; If none is specified then velocity and density is plotted. ; traceback=traceback ; scalar; type: any; default:0 (no traceback) ; heliocentric traceback distance in AU; adjusts time and heliographic longitude to ; give a 'time and location of origin' at the traceback distance ; OUTPUTS: ; Output to screen ; OPTIONAL OUTPUT PARAMETERS: ; (none) ; INCLUDE: @compile_opt.pro ; On error, return to caller ; CALLS: ; IsType, InitVar ; Carrington, TimeUnit, TimeXAxis, PlotCurve, InsituTimeseries ; PROCEDURE: ; MODIFICATION HISTORY: ; SEP-1999, Paul Hick (UCSD/CASS) ; DEC-2001, Paul Hick (UCSD/CASS) ; added call to Carrington to allow input of time as Carrington variable ; SEP-2006, Paul Hick (UCSD/CASS) ; Added /ypdyn keyword to process Mars Global Surveyor dynamic pressure data ; SEP-2006, Paul Hick (UCSD/CASS; pphick@ucsd.edu) ; Added /yvlng and /yvlat keywords to plot velocity angles from the ; SOMNI and EOMNI databases. ;- IF IsType(T, /undefined) THEN $ message, 'syntax: insitu, T, source=instrument(/omni)' InitVar, xtime , /key InitVar, xlng , /key InitVar, xlat , /key IF xtime+xlng+xlat EQ 0 THEN xtime = 1 ; Set variable on horizontal axis InitVar, ylng , /key InitVar, ylat , /key InitVar, ydis , /key InitVar, yden , /key InitVar, yvel , /key InitVar, ybr , /key InitVar, ybt , /key InitVar, ybn , /key InitVar, ybb , /key InitVar, ykp , /key InitVar, ydst , /key InitVar, ypdyn , /key InitVar, yvlng , /key InitVar, yvlat , /key InitVar, step , TimeUnit(/days) yvar = [ylng,ylat,ydis,yden,yvel,ybr,ybt,ybn,ybb,ykp,ydst,ypdyn,yvlng,yvlat] IF total(yvar) EQ 0 THEN BEGIN ; Plot velocity and density by default yvel = 1 yden = 1 ENDIF cout = ['lng','lat','dis','den','vel','br','bt','bn','bb','kp','dst','pdyn','vlng','vlat'] yvar = [ylng ,ylat ,ydis ,yden ,yvel ,ybr ,ybt ,ybn ,ybb ,ykp ,ydst ,ypdyn ,yvlng ,yvlat ] ynozero = [ 0B , 1B , 1B , 0B , 0B , 0B , 0B , 0B , 0B , 0B , 0B , 0B , 0B , 0B ] lngout = (where(cout EQ 'lng'))[0] latout = (where(cout EQ 'lat'))[0] yout = [ lngout, $ latout, $ (where(cout EQ 'dis' ))[0], $ (where(cout EQ 'den' ))[0], $ (where(cout EQ 'vel' ))[0], $ (where(cout EQ 'br' ))[0], $ (where(cout EQ 'bt' ))[0], $ (where(cout EQ 'bn' ))[0], $ (where(cout EQ 'bb' ))[0], $ (where(cout EQ 'kp' ))[0], $ (where(cout EQ 'dst' ))[0], $ (where(cout EQ 'pdyn'))[0], $ (where(cout EQ 'vlng'))[0], $ (where(cout EQ 'vlat'))[0] ] vartitle = ['Heliolongitude (deg)', $ 'Heliolatitude (deg)', $ 'Distance (AU)', $ 'Density (cm!E-3!N)', $ 'Velocity (km/s)', $ 'B!Drad!N (nT)', $ 'B!Dtang!N (nT)', $ 'B!Dnorm!N (nT)', $ '|B| (nT)' , $ 'Kp' , $ 'DST' , $ 'P!Ddynamic!N (nPa)' , $ 'Vel azimuth (deg)', $ 'Vel elevation (deg)' ] CASE IsType(T,/string) OF 0: T = Carrington(T,/get_time) 1: T = TimeSet(T) ENDCASE IF InsituTimeseries(cout, T, tout, out, source=source, delt=delt, $ weight=weight, traceback=traceback) THEN BEGIN InitVar, charsize, 1.25 xmargin = [8,8] CASE 1 OF xlng: BEGIN ; Horizontal longitude axis xtitle = vartitle[lngout] xax = out[*,lngout] ; Pick up longitude array IF IsType(xrange,/undefined) THEN xrange = [min(out[*,lngout]),max(out[*,lngout])] dx = 60 xtickv = (floor(xrange[0]/dx)+indgen(ceil((xrange[1]-xrange[0])/dx)+2))*dx xtickv = xtickv[ where(xrange[0] LE xtickv AND xtickv LE xrange[1]) ] xtickn = xtickv mod 360 xtickn = strcompress(xtickn+360*(xtickn LT 0),/rem) END xlat: BEGIN ; Horizontal latitude axis xtitle = vartitle[latout] xax = out[*,latout] ; Pick up latitude array IF n_elements(xrange) EQ 0 THEN xrange = [-90., 90.] xtickv = -90+30*indgen(7) xtickv = xtickv[ where(xrange[0] LE xtickv AND xtickv LE xrange[1]) ] xtickn = strcompress(xtickv,/rem) END ELSE: xax = tout ; Horizontal time axis ENDCASE CASE xtime OF 0: plot, xax, 0*xax, /nodat , $ ; Plot horizontal longitude/latitude axis xstyle = 1 , $ ; Exact x-axis xtitle = xtitle , $ xrange = xrange , $ xmargin = xmargin , $ xticks = n_elements(xtickv)-1, $ xtickv = xtickv , $ xtickn = xtickn , $ ystyle = 4 , $ ; Invisible y-axis xminor = 2 , $ charsize= charsize , $ title = Instrument(source,/label) 1: TimeXAxis, tout, step, /exact, $ ; Plot horizontal time axis xmargin = xmargin , $ charsize= charsize , $ title = Instrument(source,/label), $ _extra = _extra ENDCASE yaxis = -2 linestyle = -2 FOR i=0,n_elements(yvar)-1 DO BEGIN IF yvar[i] THEN BEGIN yaxis = yaxis+1 ; Controls placement of y-axis linestyle = linestyle+2 yax = out[*,yout[i]] PlotCurve, /oplot, xax, yax,$ /newyaxis, $ linestyle=linestyle, $ yaxis = yaxis, $ charsize= charsize, $ ytitle = vartitle[i], $ ynozero = ynozero[i], $ _extra = _extra ENDIF ENDFOR IF total(yvar) EQ 1 THEN $ oplot, [!x.crange[1],!x.crange[1]], [!y.crange[0],!y.crange[1]] ENDIF RETURN & END