;+
; PROCEDURE erg_load_sdfit
;
; PURPOSE:
;    Load fitacf CDF files of SuperDARN as tplot variables.
;
;
;
; :KEYWORDS:
;    sites: 3-letter code of SD radar name.
;           Currently only the following station codes work:
;                 'ade', 'adw', 'bks', 'cly', 'cve', 'cvw', 'dce', 'fhe',
;                  'fhw', 'gbr', 'hal', 'han', 'hok', 'inv', 'kap', 'kod',
;                  'ksr', 'pgr', 'pyk', 'rkn', 'san', 'sas', 'sto', 'sye',
;                  'sys', 'tig', 'unw', 'wal', 'zho'
;    cdffn: File path of a CDF file if given explicitly.
;    get_support_data: Turn this on to load the supporting data
;    trange: time range for which data are loaded.
;            e.g., ['2008-10-01/00:00:00','2008-10-02/00:00:00']
;
; :AUTHOR:
;     Tomo Hori (E-mail: horit at isee.nagoya-u.ac.jp)
; :HISTORY:
;   2010/03/09: Created as a draft version
;   2010/07/01: now work for hok and ksr
;   2010/09/10: added some keywords
;
;---------------------------------------------------------------------------
;!!!!! NOTICE !!!!!
;The common time fitacf data of SuperDARN in CDF are distributed
;by Energization and Radiation in Geospace Science Center (ERG-SC) at
;Solar-Terrestrial Environment Laboratory, Nagoya University, in
;collaboration with the SuperDARN PI groups.
;
;It is required for users to read carefully and follow
;the rules of the road attached to the CDF files upon using the data for
;his/her scientific researches.
;
;As for questions and request for the data, please feel free to contact
;the ERG-SC office (E-mail:  erg-sc-core at st4a.isee.nagoya-u.ac.jp,
;please replace "at" by "@").
;------------------------------------------------------------------------------
;
;
; $LastChangedBy: nikos $
; $LastChangedDate: 2017-12-05 22:09:27 -0800 (Tue, 05 Dec 2017) $
; $LastChangedRevision: 24403 $
; $URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/tags/spedas_2_1/projects/erg/ground/radar/superdarn/erg_load_sdfit.pro $
;-
;---------------------------------------------------
;Internal routine to get the table of the pixel
;centers from the table of the pixel corners.
PRO get_pixel_cntr, tbl, cnttbl
  dim = SIZE( tbl, /dim )
  rgmax = dim[0]-1 & azmax = dim[1]-1
  cnttbl = fltarr(rgmax,azmax,2)
  for i=0L,rgmax-1 do begin
    for j=0L,azmax-1 do begin
      latarr = tbl[ [i,i+1,i+1,i],[j,j,j+1,j+1],1 ]
      lonarr = tbl[ [i,i+1,i+1,i],[j,j,j+1,j+1],0 ]
      pos = get_sphcntr( latarr, lonarr)
      cnttbl[i,j,1]=pos[0] & cnttbl[i,j,0]=pos[1]
    endfor
  endfor

  return
end
;----------------------------------------------------
PRO erg_load_sdfit, sites=sites, cdffn=cdffn, $
  get_support_data=get_support_data, $
  noacknowledgment=noacknowledgment, trange=trange, $
  downloadonly=downloadonly, no_download=no_download, $
  compact=compact

  ;Initialize the TDAS environment
  thm_init
  sd_init

  ;Set the list of the available sites
  valid_sites = [ 'ade', 'adw', 'bks', 'bpk', 'cly', 'cve', 'cvw', 'dce', 'fhe', $
    'fhw', 'fir', 'gbr', 'hal', 'han', 'hok', 'hkw', 'inv', 'kap', 'ker', 'kod', $
    'ksr', 'mcm', 'pgr', 'pyk', 'rkn', 'san', 'sas', 'sps', 'sto', 'sye', $
    'sys', 'tig', 'unw', 'wal', 'zho', 'lyr' ]

  ;If a CDF file path is not given explicitly
  IF ~KEYWORD_SET(cdffn) THEN BEGIN

    ;Check sites keyword
    if ~keyword_set(sites) then begin
      print, 'Please give a radar name with sites keyword.'
      print, 'Data currently available: ',valid_sites
      return
    endif

    ;Check the site name
    stns = ssl_check_valid_name( sites, valid_sites, /ignore_case, /include_all )
    if strlen(stns[0]) eq 0 then begin
      print, 'No valid radar name in sites!'
      print, 'Data currently available: ',valid_sites
      return
    endif

    ;If multiple radars are set, call this procedure recursively for each radar
    if n_elements(stns) gt 1 then begin
      for i=0, n_elements(stns)-1 do begin
        erg_load_sdfit, sites=stns[i], get_support_data=get_support_data,$
          noacknowledgment=noacknowledgment, trange=trange,$
          downloadonly=downloadonly, no_download=no_download, $
          compact=compact
      endfor
      return
    endif

    stn = stns[0]

    source = file_retrieve(/struct)
    source.local_data_dir = root_data_dir()+'ergsc/ground/radar/sd/fitacf/'+stn+'/'
    source.remote_data_dir = !sdarn.remote_data_dir+stn+'/'
    source.min_age_limit = 900
    if keyword_set(downloadonly) then source.downloadonly = 1
    if keyword_set(no_download) then begin
      source.no_download = 1
      source.nowait = 1
      source.no_update = 1
    endif

    ;Currently only the first element of array "sites" is adjusted.
    ;to be implemented in future for loading data of multiple stations
    datfileformat = 'YYYY/sd_fitacf_l2_'+stn+'_YYYYMMDD*cdf'
    relfnames = file_dailynames(file_format=datfileformat, trange=trange, times=times)

;    datfiles = file_retrieve(relfnames, $
;      local_data_dir=source.local_data_dir,remote_data_dir=source.remote_data_dir, _extra=source)
    datfiles = $
      spd_download( remote_file = relfnames, remote_path = source.remote_data_dir $
      , local_path = source.local_data_dir $
      , /last_version, no_download=no_download $
      )
    IF total(file_test(datfiles)) eq 0 THEN BEGIN
      print, 'Cannot download/find data file: '+datfiles
      PRINT, 'No data was loaded!'
      RETURN
    ENDIF
    ;If a CDF file path is given
  ENDIF ELSE BEGIN
    datfiles = cdffn
    IF FIX(TOTAL(FILE_TEST(datfiles))) LT 1 THEN BEGIN
      PRINT, 'Cannot find any of the data file(s): ', cdffn
      RETURN
    ENDIF
    IF KEYWORD_SET(sites) THEN stn = sites[0] ELSE stn='stn'
  ENDELSE

  ;for the case of "donwload only"
  if keyword_set(downloadonly) then return

  ;Read CDF files and create tplot variables
  prefix='sd_' + stn + '_'
  cdf2tplot,file=datfiles, prefix=prefix, $
    /get_support_data, $
    /convert_int1_to_int2, tplotnames=tplotn

  ;Quit if no data have been loaded
  if strlen( tplotn[0] ) lt 7 then begin
    print, 'No tplot var loaded.'
    return
  endif

  ;Set data values to NaN if abs(data) > 9000
  tclip, prefix+['pwr','spec','vlos'] +'*', -9000,9000, /over
  s = tnames(prefix+'elev*')
  if strlen(s[0]) gt 5 then begin
    tclip, prefix+'elev' +'*', -9000,9000, /over
  endif

  ;For the case of a CDF including multiple range gate data
  suf = strmid( tplotn[ where( strpos(tplotn, prefix+'azim_no_') ne -1) ], 0, 1, /reverse )
  for i=0, n_elements(suf)-1 do begin

    ;Set labels for some tplot variables
    options,prefix+'pwr_'+suf[i], ysubtitle='[range gate]',ztitle='Backscatter power [dB]'
    options,prefix+'pwr_'+suf[i], 'ytitle',strupcase(stn)+'!Call beams'
    options,prefix+'pwr_err_'+suf[i], ytitle=strupcase(stn)+'!Call beams',ysubtitle='[range gate]',ztitle='power err [dB]'
    options,prefix+'pwr_err_'+suf[i], 'ytitle',strupcase(stn)+'!Call beams'
    options,prefix+'spec_width_'+suf[i], ytitle=strupcase(stn)+'!Call beams',ysubtitle='[range gate]',ztitle='Spec. width [m/s]'
    options,prefix+'spec_width_'+suf[i], 'ytitle',strupcase(stn)+'!Call beams'
    options,prefix+'spec_width_err_'+suf[i], ytitle=strupcase(stn)+'!Call beams',ysubtitle='[range gate]',ztitle='Spec. width err [m/s]'
    options,prefix+'spec_width_err_'+suf[i], 'ytitle',strupcase(stn)+'!Call beams'
    options,prefix+'vlos_'+suf[i], ytitle=strupcase(stn)+'!Call beams',ysubtitle='[range gate]',ztitle='Doppler velocity [m/s]'
    options,prefix+'vlos_'+suf[i], 'ytitle',strupcase(stn)+'!Call beams'
    options,prefix+'vlos_err_'+suf[i], ytitle=strupcase(stn)+'!Call beams',ysubtitle='[range gate]',ztitle='Vlos err [m/s]'
    options,prefix+'vlos_err_'+suf[i], 'ytitle',strupcase(stn)+'!Call beams'
    options,prefix+'elev_angle_'+suf[i], ytitle=strupcase(stn)+'!Call beams',ysubtitle='[range gate]',ztitle='Elev. angle [deg]'
    options,prefix+'elev_angle_'+suf[i], 'ytitle',strupcase(stn)+'!Call beams'
    options,prefix+'echo_flag_'+suf[i], ytitle=strupcase(stn)+'!Call beams',ysubtitle='[range gate]',ztitle='1: iono. echo'
    options,prefix+'echo_flag_'+suf[i], 'ytitle',strupcase(stn)+'!Call beams'
    options,prefix+'quality_'+suf[i], ytitle=strupcase(stn)+'!Call beams',ysubtitle='[range gate]',ztitle='quality'
    options,prefix+'quality_'+suf[i], 'ytitle',strupcase(stn)+'!Call beams'
    options,prefix+'quality_flag_'+suf[i], ytitle=strupcase(stn)+'!Call beams',ysubtitle='[range gate]',ztitle='quality flg'
    options,prefix+'quality_flag_'+suf[i], 'ytitle',strupcase(stn)+'!Call beams'

    ;Split vlos_? tplot variable into 3 components
    get_data, prefix+'vlos_'+suf[i], data=d, dl=dl, lim=lim
    store_data, prefix+'vlos_'+suf[i], data={x:d.x, $
      y:d.y[*,*,2],v:d.v},dl=dl,lim=lim
    options,prefix+'vlos_'+suf[i],ztitle='LOS Doppler vel. [m/s]'
    store_data, prefix+'vnorth_'+suf[i], data={x:d.x, y:d.y[*,*,0],v:d.v},dl=dl,lim=lim
    options,prefix+'vnorth_'+suf[i],ztitle='LOS V Northward [m/s]'
    store_data, prefix+'veast_'+suf[i], data={x:d.x, y:d.y[*,*,1],v:d.v},dl=dl,lim=lim
    options,prefix+'veast_'+suf[i],ztitle='LOS V Eastward [m/s]'

    ;Combine iono. echo and ground echo for vlos
    nm = ['vlos_','vnorth_','veast_']
    for n=0L, n_elements(nm)-1 do begin
      get_data, prefix+nm[n]+suf[i], data=d, dl=dl, lim=lim
      get_data, prefix+'echo_flag_'+suf[i], data=flg, dl=flgdl, lim=flglim
      d_g = d
      idx = where( flg.y eq 1. )
      if idx[0] ne -1 then d_g.y[idx] = !values.f_nan
      idx = where( flg.y ne 1. )
      if idx[0] ne -1 then d.y[idx] = !values.f_nan
      maxrg = max(d.v, /nan)+1
      store_data, prefix+nm[n]+'iscat_'+suf[i], data=d, lim=lim, $
        dl={ytitle:'',ysubtitle:'',ztitle:'',spec:1}
      store_data, prefix+nm[n]+'gscat_'+suf[i], data=d_g, lim=lim, $
        dl={ytitle:'',ysubtitle:'',ztitle:'',spec:1,fill_color:5}
      store_data, prefix+nm[n]+'bothscat_'+suf[i], $
        data=[prefix+nm[n]+'iscat_'+suf[i],prefix+nm[n]+'gscat_'+suf[i]], $
        dl={yrange:[0,maxrg]}
    endfor

    ;Set the z range explicitly for some tplot variables
    zlim, prefix+'pwr_'+suf[i], 0,30
    zlim, prefix+'pwr_err_'+suf[i], 0,30
    zlim, prefix+'spec_width_'+suf[i], 0,200
    zlim, prefix+'spec_width_err_'+suf[i], 0,300
    zlim, prefix+'vlos_*_'+suf[i], -400,400
    zlim, prefix+'vnorth_*_'+suf[i], -400,400
    zlim, prefix+'veast_*_'+suf[i], -400,400
    zlim, prefix+'vlos_err_'+suf[i], 0,300

    ;Fill values --> NaN
    get_data, prefix+'pwr_'+suf[i], data=d & pwr = d.y
    idx = WHERE( ~FINITE(pwr) )

    tn=prefix+'echo_flag_'+suf[i]
    get_data, tn, data=d, dl=dl, lim=lim & val=FLOAT(d.y)
    IF idx[0] NE -1 THEN val[idx] = !values.f_nan
    store_data, tn, data={x:d.x, y:val, v:d.v}, dl=dl, lim=lim

    tn=prefix+'quality_'+suf[i]
    get_data, tn, data=d, dl=dl, lim=lim & val=FLOAT(d.y)
    IF idx[0] NE -1 THEN val[idx] = !values.f_nan
    store_data, tn, data={x:d.x, y:val, v:d.v}, dl=dl, lim=lim

    tn=prefix+'quality_flag_'+suf[i]
    get_data, tn, data=d, dl=dl, lim=lim & val=FLOAT(d.y)
    IF idx[0] NE -1 THEN val[idx] = !values.f_nan
    store_data, tn, data={x:d.x, y:val, v:d.v}, dl=dl, lim=lim

    ;Reassign scan numbers for the combined data
    tn=prefix+'scanstartflag_'+suf[i]
    get_data, tn, data=d, dl=dl, lim=lim & scflg = abs(d.y)
    scno = long(scflg) & scno[*] = -1
    scno_t = 0L & scno[0] = scno_t
    for n = 1L, n_elements(scno)-1 do begin
      if scflg[n] gt 0 then scno_t = scno_t + 1
      scno[n] = scno_t
    endfor
    tn=prefix+'scanno_'+suf[i]
    get_data, tn, data=d, dl=dl, lim=lim
    store_data, tn, data={x:d.x, y:scno}, dl=dl, lim=lim

    ;Apply tclip the vlos data temporarily for demo
    ;tclip, prefix+'vlos_'+suf[i] , -500.,500., /over

  endfor


  ;Load the position table(s) ;;;;;;;;;;;;;;;;;;
  ;Currently supports SD fitacf CDFs containing up to 4 pos. tables.
  ;tbl_0='' & tbl_1='' & tbl_2='' &tbl_3='' & tbl_4=''
  ;tbl_5='' & tbl_6='' & tbl_7='' &tbl_8=''&tbl_9=''
  ;time_0='' & time_1='' & time_2='' & time_3='' & time_4=''
  ;time_5='' & time_6='' & time_7='' & time_8=''& time_9=''
  tbllist = ['tbl_0', 'tbl_1' , 'tbl_2', 'tbl_3', 'tbl_4', $
    'tbl_5', 'tbl_6' , 'tbl_7', 'tbl_8', 'tbl_9' ]
  timelist = ['time_0','time_1','time_2','time_3', 'time_4', $
    'time_5','time_6','time_7','time_8','time_9']
  FOR i=0L, N_ELEMENTS(datfiles)-1 DO BEGIN
    if ~file_test(datfiles[i]) then continue
    cdfi = cdf_load_vars( datfiles[i], varformat='*',/convert_int1_to_int2 )
    timevn = strfilter( cdfi.vars.name, 'Epoch_?' )
    ptblvn = strfilter( cdfi.vars.name, 'position_tbl_?' )
    ;Error check
    IF N_ELEMENTS(timevn) EQ 0 OR N_ELEMENTS(ptblvn) EQ 0 OR $
      N_ELEMENTS(timevn) NE N_ELEMENTS(ptblvn) THEN BEGIN
      dprint, 'Epoch_x and position_tbl_x mismatch in CDF!'
      RETURN
    ENDIF
    timevn = timevn[ SORT(timevn) ] ;sort the variable names
    ptblvn = ptblvn[ SORT(ptblvn) ]

    FOR j=0, N_ELEMENTS(ptblvn)-1 DO BEGIN
      tvn = timevn[j] & pvn = ptblvn[j]
      stblno = STRMID(tvn, 0, 1, /reverse)
      tvnidx = (WHERE( STRCMP(cdfi.vars.name,tvn ) , nw))[0]
      pvnidx = (WHERE( STRCMP(cdfi.vars.name,pvn ) , nw))[0]
      time = *cdfi.vars[tvnidx].dataptr
      tbl  = *cdfi.vars[pvnidx].dataptr
      get_pixel_cntr, tbl, cnttbl ;Obtain the pixel centers
      dim = SIZE( tbl, /dim ) & tbl2 = REFORM( tbl, 1, dim[0],dim[1],dim[2] )
      cnttbl2 = REFORM( cnttbl, 1, dim[0]-1,dim[1]-1,dim[2] )
      case (fix(stblno)) of
        0: begin
          if n_elements(time_0) eq 0 then time_0 = [time[0],time[n_elements(time)-1]] $
          else time_0 = [ time_0, [time[0],time[n_elements(time)-1]] ]
          if n_elements(tbl_0) eq 0 then tbl_0 = [tbl2,tbl2] $
          else tbl_0 = [ tbl_0, tbl2, tbl2 ]
          if n_elements(cnttbl_0) eq 0 then cnttbl_0 = [cnttbl2,cnttbl2] $
          else cnttbl_0 = [ cnttbl_0, cnttbl2, cnttbl2 ]
        end
        1: begin
          if n_elements(time_1) eq 0 then time_1 = [time[0],time[n_elements(time)-1]] $
          else time_1 = [ time_1, [time[0],time[n_elements(time)-1]] ]
          if n_elements(tbl_1) eq 0 then tbl_1 = [tbl2,tbl2] $
          else tbl_1 = [ tbl_1, tbl2, tbl2 ]
          if n_elements(cnttbl_1) eq 0 then cnttbl_1 = [cnttbl2,cnttbl2] $
          else cnttbl_1 = [ cnttbl_1, cnttbl2, cnttbl2 ]
        end
        2: begin
          if n_elements(time_2) eq 0 then time_2 = [time[0],time[n_elements(time)-1]] $
          else time_2 = [ time_2, [time[0],time[n_elements(time)-1]] ]
          if n_elements(tbl_2) eq 0 then tbl_2 = [tbl2,tbl2] $
          else tbl_2 = [ tbl_2, tbl2, tbl2 ]
          if n_elements(cnttbl_2) eq 0 then cnttbl_2 = [cnttbl2,cnttbl2] $
          else cnttbl_2 = [ cnttbl_2, cnttbl2, cnttbl2 ]
        end
        3: begin
          if n_elements(time_3) eq 0 then time_3 = [time[0],time[n_elements(time)-1]] $
          else time_3 = [ time_3, [time[0],time[n_elements(time)-1]] ]
          if n_elements(tbl_3) eq 0 then tbl_3 = [tbl2,tbl2] $
          else tbl_3 = [ tbl_3, tbl2, tbl2 ]
          if n_elements(cnttbl_3) eq 0 then cnttbl_3 = [cnttbl2,cnttbl2] $
          else cnttbl_3 = [ cnttbl_3, cnttbl2, cnttbl2 ]
        end
        4: begin
          if n_elements(time_4) eq 0 then time_4 = [time[0],time[n_elements(time)-1]] $
          else time_4 = [ time_4, [time[0],time[n_elements(time)-1]] ]
          if n_elements(tbl_4) eq 0 then tbl_4 = [tbl2,tbl2] $
          else tbl_4 = [ tbl_4, tbl2, tbl2 ]
          if n_elements(cnttbl_4) eq 0 then cnttbl_4 = [cnttbl2,cnttbl2] $
          else cnttbl_4 = [ cnttbl_4, cnttbl2, cnttbl2 ]
        end
        5: begin
          if n_elements(time_5) eq 0 then time_5 = [time[0],time[n_elements(time)-1]] $
          else time_5 = [ time_5, [time[0],time[n_elements(time)-1]] ]
          if n_elements(tbl_5) eq 0 then tbl_5 = [tbl2,tbl2] $
          else tbl_5 = [ tbl_5, tbl2, tbl2 ]
          if n_elements(cnttbl_5) eq 0 then cnttbl_5 = [cnttbl2,cnttbl2] $
          else cnttbl_5 = [ cnttbl_5, cnttbl2, cnttbl2 ]
        end
        6: begin
          if n_elements(time_6) eq 0 then time_6 = [time[0],time[n_elements(time)-1]] $
          else time_6 = [ time_6, [time[0],time[n_elements(time)-1]] ]
          if n_elements(tbl_6) eq 0 then tbl_6 = [tbl2,tbl2] $
          else tbl_6 = [ tbl_6, tbl2, tbl2 ]
          if n_elements(cnttbl_6) eq 0 then cnttbl_6 = [cnttbl2,cnttbl2] $
          else cnttbl_6 = [ cnttbl_6, cnttbl2, cnttbl2 ]
        end
        7: begin
          if n_elements(time_7) eq 0 then time_7 = [time[0],time[n_elements(time)-1]] $
          else time_7 = [ time_7, [time[0],time[n_elements(time)-1]] ]
          if n_elements(tbl_7) eq 0 then tbl_7 = [tbl2,tbl2] $
          else tbl_7 = [ tbl_7, tbl2, tbl2 ]
          if n_elements(cnttbl_7) eq 0 then cnttbl_7 = [cnttbl2,cnttbl2] $
          else cnttbl_7 = [ cnttbl_7, cnttbl2, cnttbl2 ]
        end
        8: begin
          if n_elements(time_8) eq 0 then time_8 = [time[0],time[n_elements(time)-1]] $
          else time_8 = [ time_8, [time[0],time[n_elements(time)-1]] ]
          if n_elements(tbl_8) eq 0 then tbl_8 = [tbl2,tbl2] $
          else tbl_8 = [ tbl_8, tbl2, tbl2 ]
          if n_elements(cnttbl_8) eq 0 then cnttbl_8 = [cnttbl2,cnttbl2] $
          else cnttbl_8 = [ cnttbl_8, cnttbl2, cnttbl2 ]
        end
        9: begin
          if n_elements(time_9) eq 0 then time_9 = [time[0],time[n_elements(time)-1]] $
          else time_9 = [ time_9, [time[0],time[n_elements(time)-1]] ]
          if n_elements(tbl_9) eq 0 then tbl_9 = [tbl2,tbl2] $
          else tbl_9 = [ tbl_9, tbl2, tbl2 ]
          if n_elements(cnttbl_9) eq 0 then cnttbl_9 = [cnttbl2,cnttbl2] $
          else cnttbl_9 = [ cnttbl_9, cnttbl2, cnttbl2 ]
        end
        else: begin
        end
      endcase

    ENDFOR
  ENDFOR

  if n_elements(tbl_0) gt 2 then begin
    store_data, prefix+'position_tbl_0', $
      data={x:time_double(time_0,/epoch), y:tbl_0}
    store_data, prefix+'positioncnt_tbl_0', $
      data={x:time_double(time_0,/epoch), y:cnttbl_0}
  endif
  if n_elements(tbl_1) gt 2 then begin
    store_data, prefix+'position_tbl_1', $
      data={x:time_double(time_1,/epoch), y:tbl_1}
    store_data, prefix+'positioncnt_tbl_1', $
      data={x:time_double(time_1,/epoch), y:cnttbl_1}
  endif
  if n_elements(tbl_2) gt 2 then begin
    store_data, prefix+'position_tbl_2', $
      data={x:time_double(time_2,/epoch), y:tbl_2}
    store_data, prefix+'positioncnt_tbl_2', $
      data={x:time_double(time_2,/epoch), y:cnttbl_2}
  endif
  if n_elements(tbl_3) gt 2 then begin
    store_data, prefix+'position_tbl_3', $
      data={x:time_double(time_3,/epoch), y:tbl_3}
    store_data, prefix+'positioncnt_tbl_3', $
      data={x:time_double(time_3,/epoch), y:cnttbl_3}
  endif
  if n_elements(tbl_4) gt 2 then begin
    store_data, prefix+'position_tbl_4', $
      data={x:time_double(time_4,/epoch), y:tbl_4}
    store_data, prefix+'positioncnt_tbl_4', $
      data={x:time_double(time_4,/epoch), y:cnttbl_4}
  endif
  if n_elements(tbl_5) gt 2 then begin
    store_data, prefix+'position_tbl_5', $
      data={x:time_double(time_5,/epoch), y:tbl_5}
    store_data, prefix+'positioncnt_tbl_5', $
      data={x:time_double(time_5,/epoch), y:cnttbl_5}
  endif
  if n_elements(tbl_6) gt 2 then begin
    store_data, prefix+'position_tbl_6', $
      data={x:time_double(time_6,/epoch), y:tbl_6}
    store_data, prefix+'positioncnt_tbl_6', $
      data={x:time_double(time_6,/epoch), y:cnttbl_6}
  endif
  if n_elements(tbl_7) gt 2 then begin
    store_data, prefix+'position_tbl_7', $
      data={x:time_double(time_7,/epoch), y:tbl_7}
    store_data, prefix+'positioncnt_tbl_7', $
      data={x:time_double(time_7,/epoch), y:cnttbl_7}
  endif
  if n_elements(tbl_8) gt 2 then begin
    store_data, prefix+'position_tbl_8', $
      data={x:time_double(time_8,/epoch), y:tbl_8}
    store_data, prefix+'positioncnt_tbl_8', $
      data={x:time_double(time_8,/epoch), y:cnttbl_8}
  endif
  if n_elements(tbl_9) gt 2 then begin
    store_data, prefix+'position_tbl_9', $
      data={x:time_double(time_9,/epoch), y:tbl_9}
    store_data, prefix+'positioncnt_tbl_9', $
      data={x:time_double(time_9,/epoch), y:cnttbl_9}
  endif

  ;Release unused ptrs
  tplot_ptrs = ptr_extract(tnames(/dataquant))
  unused_ptrs = ptr_extract(cdfi,except=tplot_ptrs)
  PTR_FREE,unused_ptrs

  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

  ;Show the rules of the road
  ;unless keyword noacknowledgement is defined.
  if ~keyword_set(noacknowledgment) then begin
    vstr = tnames(prefix+'pwr_?')
    if strlen(vstr[0]) gt 5 then begin
      get_data, vstr[0], data=d, dl=dl
      ror = dl.cdf.gatt.rules_of_use

      print, ''
      print, '############## RULES OF THE ROAD ################'
      line_length = 78
      rorlen = strlen(ror)

      for i=0L, rorlen/line_length do begin
        print, strmid( ror, i*line_length, line_length )
      endfor

      print, '############## RULES OF THE ROAD ################'
    endif
  endif

  ;Leave only minimal set of the variables if keyword "compact" is set.
  if keyword_set(compact) then begin
    varn1= 'cpid channel int_time azim_no pwr_err spec_width_err vlos_err elev_angle elev_angle_err '
    varn2= 'phi0 phi0_err echo_flag quality quality_flag scanno scanstartflag '
    varn3= 'lagfr smsep nrang_max tfreq noise num_ave txpl vnorth veast '
    varn4= 'vlos_bothscat vlos_iscat vlos_gscat vnorth_iscat vnorth_gscat vnorth_bothscat '
    varn5= 'veast_iscat veast_gscat veast_bothscat position_tbl positioncnt_tbl '
    varn_removed = strsplit(varn1+varn2+varn3+varn4+varn5, /ext )
    store_data, 'sd_'+stn+'_'+varn_removed+'_?', /delete
  endif

  ;Normal end
  RETURN
END