;+
; PROCEDURE aacgmconvcoord 
; 
; :PURPOSE:
; A wrapper procedure to choose AACGM DLM or IDL-native routines 
; to convert (lat,lon) between Geographic coordinates and AACGM.  
; 
; The wrapper procedures/functions check !sdarn.aacgm_dlm_exists 
; (if not defined, then define it by sd_init) to select appropriate 
; AACGM routines (DLM, or IDL native ones attached to TDAS). 
; 
; :Params:
;   glat, glon:   Geographic latitude and longitude. 
;   mlat, mlon:   AACGM latitude and longitude. 
;   alt:          Altitude for conversion.
;   err:          Error status of coordinate transformation. 
;   
; :Keywords:
;   TO_AACGM:   Set to convert from geographic to AACGM coordinates.
;   TO_GEO:     Set to convert from AACGM to geographic coordinates.
; 
; :Examples:
;   aacgmconvcoord, glat,glon,alt, mlat,mlon,err, /TO_AACGM
;   aacgmconvcoord, mlat,mlon,alt, glat,glon,err, /TO_GEO
;   
; :AUTHOR: 
;   Tomo Hori (E-mail: horit@stelab.nagoya-u.ac.jp)
;   
; :HISTORY:
;   2011/10/04: created and got through the initial bug fixes
;
; $LastChangedBy: lphilpott $
; $LastChangedDate: 2011-10-14 09:20:31 -0700 (Fri, 14 Oct 2011) $
; $LastChangedRevision: 9113 $
; $URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/thmsoc/tags/tdas_8_00/idl/erg/ground/radar/superdarn/sdaacgmlib/aacgmconvcoord.pro $
;-

pro aacgmconvcoord, glat,glon,alt,mlat,mlon,err, TO_AACGM=TO_AACGM, TO_GEO=TO_GEO

;Initialize !sdarn if not defined
help, name='!sdarn',out=out
if out eq '' then sd_init

glon = (glon + 360.) mod 360.

if !sdarn.aacgm_dlm_exists then begin 
  ;print, 'using AACGM_DLM'
  aacgm_conv_coord, glat,glon,alt,mlat,mlon,err,$
    TO_AACGM=TO_AACGM, TO_GEO=TO_GEO
endif else begin
  mlat=glat & mlon=glon
  mlat[*]=0. & mlon[*]=0.
  err = fix(glat) & err[*] = 0
  for i=0L, n_elements(glat)-1 do begin
    cnv_aacgm,glat[i],glon[i],alt[i],tmlat,tmlon,r,terr,geo=TO_GEO
    mlat[i]=tmlat & mlon[i]=tmlon & err[i] = fix(terr)
    ;print, 'cnv_aacgm was executed'
    ;print, glat[i],glon[i],alt[i],'   ',mlat[i],mlon[i],r,err
  endfor
endelse

mlon = (mlon + 360.) mod 360.

return
end