FUNCTION UlyssesOrbit, T, degrees=degrees
    @compile_opt.pro        ; On error, return to caller

dpm = ToDegrees(degrees=degrees)

jd = TimeGet(T, /njd)

p = replicate(BadValue(0.0),3,n_elements(jd))

; In-ecliptic phase

tt = TimeGet(TimeSet(yr=[1990,1991],month=['oct','dec'],day=[16,30]), /njd)

i = where( tt[0] LE jd AND jd LE tt[1] )

IF i[0] NE -1 THEN  $
    p[*,i] = KeplerOrbit(T[i], degrees=degrees  , $
        elements    = [9.030365512305314d+00,8.897464400966297d-01,7.973512530451710d+00/dpm,2448177.155379012693d0-2451545.0d0], $
        plane       = [1.336294632570382d+01,1.997907686222203d+00]/dpm)

; First orbit

tt = TimeGet(TimeSet(yr=[1992,1998],month=['mar','apr'],day=[19,18]), /njd)

i = where( tt[0] LE jd AND jd LE tt[1] )

IF i[0] NE -1 THEN  $
    p[*,i] = KeplerOrbit(T[i], degrees=degrees  , $
        elements    = [3.373607542718132d+00,6.031503055745338d-01,3.588812465846812d+02/dpm,2449788.991885926574d0-2451545.0d0], $
        plane       = [3.381812752049081d+02,7.913419307720035d+01]/dpm)

; Second orbit

tt = TimeGet(TimeSet(yr=[1998,2004],month=['apr','jul'],day=[18,01]), /njd)

i = where( tt[0] LT jd AND jd LE tt[1] )

IF i[0] NE -1 THEN  $
    p[*,i] = KeplerOrbit(T[i], degrees=degrees   , $
        elements    = [3.373734110021353d+00,6.031132414101130d-01,3.589804732058623d+02/dpm,2452053.178729594219d0-2451545.0d0], $
        plane       = [3.381356025082639d+02,7.912197709000114d+01]/dpm)

tt = TimeGet(TimeSet(yr=[2004,2008],month=['jul','dec'],day=[01,31]), /njd)

; Third orbit

i = where( tt[0] LT jd AND jd LE tt[1] )

IF i[0] NE -1 THEN  $
    p[*,i] = KeplerOrbit(T[i], degrees=degrees   , $
        elements    = [3.402423448713773d+00,5.905943668771040d-01,3.592550173721452d+02/dpm,2454330.786102185957d0-2451545.0d0], $
        plane       = [3.380855550555008d+02,7.864681204100637d+01]/dpm)

RETURN, p  &  END