;+
;PROCEDURE:	mag_to_geo
;
;PURPOSE:	Converts lattitude and longitude between MAG 
;		and GEO coordinates.
;		Uses a simple transformation matrix from Kivelson
;		and Russell, "Intro to Space Physics" which is not
;		very accurate in the polar regions.
;
;PARAMETERS:	lat	The array of lattitudes.(In radians unless
;			degrees keyword set.)
;		lon	The array of longitudes.(in radians unless
;			degrees keyword set.)
;
;KEYWORDS:	degrees	Set this if both input and output are to be
;			in degrees.
;		mag	Set this to do the inverse transformation,
;			GEO to MAG coordinates.
;Created by:	J.Rauchleiba	1/7/97
;-
pro mag_to_geo, lat, lon, degrees=deg, mag=mag

; Convert to radians if necessary

if keyword_set(deg) then begin
	lat = lat*!dtor
	lon = lon*!dtor
endif

; The transformation matrix

maggeo = [ 	[ .32110, .94498,  .06252], $
		[-.92756, .32713, -.18060], $
		[-.19112,      0,  .98157]	]

if keyword_set(mag) then maggeo = transpose(maggeo)

lat = !pi/2. - lat	; theta is measured from pole in spherics.

; Create array of column vectors (lats and lons in cartesian coords.)

Vmag = [	[sin(lat)*cos(lon)], $
		[sin(lat)*sin(lon)], $
		[cos(lat)	  ]	]

; Transform each column vector

Vgeo = maggeo ## Vmag	; array of 3-element column vectors

lat = acos( Vgeo(*,2) )
lon = atan( Vgeo(*,1)/Vgeo(*,0) )

flip = where(Vgeo(*,0) LT 0)	; 0 < lon < pi,	Vmag(1) > 0
if flip(0) NE -1 then $
	lon(flip) = lon(flip) + !pi	; pi < lon < 2pi, Vmag(1) < 0

lat = !pi/2. - lat	; theta is measured from equator in GEO.

if keyword_set(deg) then begin
	lat = lat*!radeg
	lon = lon*!radeg
endif

return
end
