;+
; FUNCTION: auroral_zone
;
; PURPOSE: IDL function to calculate auroral zone position as a
; function of magnetic local time (mlt: 0.0-24.0 hours),
; activity index Q (q: 0-6).
; Returns corrected geomagnetic colatitude in radians.
;
; OPTIONS: To return poleward edge, set poleward.
; To return latitude, set latitude.
; To return value for southern oval, set south.
; To return value in degrees, set degrees.
;
; See Holzworth & Meng, GRL 2, p. 377, 1975.
;
; Originally written by J. Clemmons, June 1993.
; Corrected by J.Rauchleiba under the direction of Mike Temerin Apr 1997.
;-
function auroral_zone, mlt, q, $
poleward=pole, $
latitude=lat, $
south=south, $
degrees=deg
; Arrays are indexed (An, Q) where An is the nth
; best-fit constant and Q is the activity index
; n = 0 1 2 3 4 5 6
apole=[[15.22,2.41,3.34,-0.85,1.01,0.32,0.90], $
[15.85,2.70,3.32,-0.67,1.15,0.49,1.00], $
[16.09,2.51,3.27,-0.56,1.30,0.42,0.94], $
[16.16,1.92,3.14,-0.46,1.43,0.32,0.96], $
[16.29,1.41,3.06,-0.09,1.35,0.40,1.03], $
[16.44,0.81,2.99,0.14,1.25,0.48,1.05], $
[16.71,0.37,2.90,0.63,1.59,0.60,1.00]]
aequa=[[17.36,3.03,3.46,0.42,2.11,-0.25,1.13], $
[18.66,3.90,3.37,0.16,2.55,-0.13,0.96], $
[19.73,4.69,3.34,-0.57,-1.41,-0.07,0.75], $
[20.63,4.95,3.31,-0.66,-1.28,0.30,-0.58], $
[21.56,4.93,3.31,-0.44,-0.81,-0.07,-0.75], $
[22.32,4.96,3.29,-0.39,-0.72,-0.16,-0.52], $
[23.18,4.85,3.34,-0.38,-0.62,-0.53,-0.16]]
; Columns 0, 1, 3, 5 in above arrays are in degrees.
; Columns 2, 4, 6 (args to cos function) are already in radians.
Andeg = [0,1,3,5] ; The An that are in degrees
apole(Andeg,*) = !dtor * apole(Andeg,*)
aequa(Andeg,*) = !dtor * aequa(Andeg,*)
; Phi relative to Sun pointer, in terms of MLT
; Since Holzworth mentions a different definition of phi(MLT)
p=(mlt-12.)/12.0*!pi
; Force i=q to within interval [0,6]
i=(fix(q)>0)<6
; Calculate corrected geomagnetic colattitude
if keyword_set(pole) then begin
t=apole(0,i) + $
apole(1,i)*cos(p+apole(2,i)) + $
apole(3,i)*cos(2*(p+apole(4,i))) + $
apole(5,i)*cos(3*(p+apole(6,i)))
endif else begin
t=aequa(0,i) + $
aequa(1,i)*cos(p+aequa(2,i)) + $
aequa(3,i)*cos(2*(p+aequa(4,i))) + $
aequa(5,i)*cos(3*(p+aequa(6,i)))
endelse
; Convert to magnetic lattitude
if keyword_set(lat) then t=!pi/2.0-t
; Southern auroral zone is merely a reflection
if keyword_set(south) then t=-t
; Conver to degrees if desired
if keyword_set(deg) then t=t*!radeg
return,t
end