;+
; NAME:
;    THM_ASI_CREATE_MOSAIC
;
; PURPOSE:
;    create mosaic with all THEMIS ASI
;
; CATEGORY:
;    None
;
; CALLING SEQUENCE:
;    THM_ASI_CREATE_MOSAIC,time
;
; INPUTS:
;    Time	like '2006-01-01/05:00:00'
;
; OPTIONAL INPUTS:
;    None
;
; KEYWORD PARAMETERS:
;    cal_files	calibration files if they do not need to be read
;    gif_out    create a gif-file
;    verbose    print some diagnostics
;    pgm_file   do not read CDF, but pgm-files
;    zbuffer    do in z-buffer, not on the screen
;    thumb      use thumbnails instead of full resolution images
;    exclude    string of station names that should not be plotted
;    show       string of station names that should only be plotted
;    top        top color to be used for polyfill
;    special    special treatment for not mapped thumbnail
;    scale               scale for map set
;    central_lon         geographic longitude of center of plot
;    central_lat         geographic latitude of center of plot
;    xsize               xsize of window
;    ysize               ysize of window
;    color_continent     shade of continent fill
;    color_background    shade of background
;    position=position   position of plot on window (normal coordinates)
;    noerase=noerase     do not erase current window (no effect if {x,y}size set
;    cursor     finish with cursor info
;    projection projection for map set
;
; OUTPUTS:
;    None
;
; OPTIONAL OUTPUTS:
;    None
;
; COMMON BLOCKS:
;    None
;
; SIDE EFFECTS:
;    None
;
; RESTRICTIONS:
;    None
;
; EXAMPLE:
;    THM_ASI_CREATE_MOSAIC,'2006-01-01/05:00:00'
;    THM_ASI_CREATE_MOSAIC,'2007-03-01/04:00:00',/thumb,exclude='ekat'
; 
;
; MODIFICATION HISTORY:
;    Written by: Harald Frey, 02/06/2007
;                based on example from Donovan/Jackel
;                2007-03-15, hfrey, thumbnails, keyword exclude
;                2007-03-27, hfrey, special treatment for not mapped thumbsnails
;
; NOTES:
;     
; VERSION:
;   $LastChangedBy: hfrey $
;   $LastChangedDate: 2007-04-25 16:58:17 -0700 (Wed, 25 Apr 2007) $
;   $LastChangedRevision: 613 $
;   $URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/thmsoc/tags/tdas_2_02/idl/themis/ground/thm_asi_create_mosaic.pro $
;
;-

PRO THM_ASI_CREATE_MOSAIC,time,cal_files=cal_files,gif_out=gif_out,$
    verbose=verbose,pgm_file=pgm_file,thumb=thumb,$
    exclude=exclude,top=top,special=special,show=show,$
    scale=scale,$                      ; scale for map set
    central_lat=central_lat,$          ; geographic latitude of center of plot
    central_lon=central_lon,$          ; geographic longitude of center of plot
    color_continent=color_continent,$  ; shade of continent fill
    color_background=color_background,$; shade of background
    position=position,$                ; position of plot on window (normal coordinates)
    xsize=xsize,$                      ; xsize of window
    ysize=ysize,$                      ; ysize of window
    noerase=noerase,$                  ; do not erase current window (no effect if {x,y}size set
    zbuffer=zbuffer,$		       ; do it in z-buffer
    cursor=cursor,$		       ; finish with cursor info
    projection=projection

	; input check
if keyword_set(verbose) then verbose=systime(1)
if (strlen(time) ne 19) then begin
  print,'Wrong time input'
  print,'Correct value like 2006-01-01/05:00:00'
  return
  endif

	; strip time
year=strmid(time,0,4)
month=strmid(time,5,2)
day=strmid(time,8,2)
hour=strmid(time,11,2)
minute=strmid(time,14,2)
second=strmid(time,17,2)

	; setup
thm_init
timespan,year+'-'+month+'-'+day+'/'+hour,1,/hour
thm_asi_stations,site,location
if keyword_set(zbuffer) then map_scale=2.6e7 else map_scale=4.e7
if keyword_set(scale) then map_scale=scale
if not keyword_set(central_lon) then central_lon=255.
if not keyword_set(central_lat) then central_lat=63.
if not keyword_set(xsize) then xsize=700
if not keyword_set(ysize) then ysize=410
if not keyword_set(top) then top=254

	; characters
if keyword_set(zbuffer) then chars=1.15 else chars=1.5

	; some setup
minimum_elevation_to_plot=8. ;degrees
if (keyword_set(thumb) and not keyword_set(special)) then n1=1024l else n1=256l*256l

     	; clean up before start
names=tnames('thg_asf*')
if (names[0] ne '') then store_data,delete=names
names=tnames('thg_ast*')
if (names[0] ne '') then store_data,delete=names

	; read available data
thm_mosaic_array,year,month,day,hour,minute,second,strlowcase(site),$
        image,corners,elevation,pixel_illuminated,n_sites,verbose=verbose,$
        cal_files=cal_files,pgm_file=pgm_file,thumb=thumb,special=special,$
        show=show

	; fill variables
bytval=fltarr(20)
if keyword_set(special) then $
for i=0,n_sites-1 do bytval[i]=(median(image[0:1023,i]) > 1) else $
for i=0,n_sites-1 do bytval[i]=(median(image[*,i]) > 1)	; prevent divide by zero
for i=0,n_sites-1 do image[*,i]=((image[*,i]/bytval[i])*64.) < 254

	; no images found
if (max(bytval) eq 1.) then begin
  print,'No images for ',time
  return
  endif

	; exclude unwanted sites
if keyword_set(exclude) then begin
  for i=0,n_elements(exclude)-1 do begin
    not_site=where(strlowcase(site) eq strlowcase(exclude[i]),count)
    if (count eq 0) then print,'Not a valid site: ',exclude[i] else $
        corners[*,*,*,not_site]=!values.f_nan
    endfor
  endif
   
	; set up the map
thm_map_set,scale=map_scale,$
     central_lat=central_lat,$           ; geographic latitude of center of plot
     central_lon=central_lon,$           ; geographic longitude of center of plot
     color_continent=color_continent,$   ; shade of continent fill
     color_background=color_background,$ ; shade of background
     position=position,$                 ; position of plot on window (normal coordinates)
     xsize=xsize,$                       ; xsize of window
     ysize=ysize,$                       ; ysize of window
     noerase=noerase,$                   ; do not erase current window (no effect if {x,y}size set
     zbuffer=zbuffer,$
     projection=projection
     
	; fill it
if keyword_set(special) then begin
  spec_illu=pixel_illuminated-2
  for i=0,n_elements(special)-1 do begin
    spec_stat=where(strlowcase(site) eq strlowcase(special[i]))
    spec_illu[*,spec_stat]=pixel_illuminated[*,spec_stat]
    endfor
;  for pixel=0l,n1-1l do begin
;    for i_site=0,n_sites-1 do begin
;      if ((spec_illu[pixel,i_site] eq 1) and $
;           (elevation[pixel,i_site] gt minimum_elevation_to_plot)) then $
;       polyfill,corners[pixel,[0,1,2,3,0],0,i_site],$
;            corners[pixel,[0,1,2,3,0],1,i_site],color=image[pixel,i_site] < top
;       endfor
;    endfor
;  for i=0,n_elements(special)-1 do begin
;    spec_stat=where(strlowcase(site) eq strlowcase(special[i]))
;    pixel_illuminated[*,spec_stat]=-1
;    endfor
  endif

	; normal filling
for pixel=0l,n1-1l do begin
  for i_site=0,n_sites-1 do begin
    if ((pixel_illuminated[pixel,i_site] eq 1) and $
           (elevation[pixel,i_site] gt minimum_elevation_to_plot)) then $
       polyfill,corners[pixel,[0,1,2,3,0],0,i_site],$
            corners[pixel,[0,1,2,3,0],1,i_site],color=image[pixel,i_site] < top
    if keyword_set(special) then if ((spec_illu[pixel*64 < (n1-1),i_site] eq 1) and $
           (elevation[pixel*64 < (n1-1),i_site] gt minimum_elevation_to_plot)) then begin
       for ijk=0,63 do polyfill,corners[pixel*64+ijk < (n1-1),[0,1,2,3,0],0,i_site],$
            corners[pixel*64+ijk < (n1-1),[0,1,2,3,0],1,i_site],color=image[pixel*64+ijk < (n1-1),i_site] < top
;       stop
       endif
    endfor
;if pixel eq 500 then stop
  if (keyword_set(special) and pixel ge 1024) then break
  endfor

	; finish map
thm_map_add,invariant_lats=[60,65,70,75],invariant_color=210,$
    invariant_linestyle=1
xyouts,0.005,0.018,time,color=0,/normal,charsize=chars
xyouts,0.005,0.060,'THEMIS-GBO ASI',color=0,/normal,charsize=chars

if keyword_set(verbose) then print,'After map: ',systime(1)-verbose,$
   ' Seconds'

	; search for midnight file
f=file_search('midnight.sav',count=count)
if (count eq 1) then begin
  midlons=fltarr(50)+!values.f_nan
  ut_hour=float(hour)+float(minute)/60.+float(second)/3600.
  restore,f
  for i=0,49 do begin
    lon=interpol(findgen(141)+start_longitude,reform(midnight[i,*]),ut_hour)
    midlons[i]=lon[0]
    endfor
  bad=where(midlons gt 360.,count)
  if (count gt 0) then midlons[bad]=!values.f_nan
  plots,smooth(midlons-360.,5),findgen(50)+40.,color=255,/data
  endif

	; gif output
if keyword_set(gif_out) then begin
   tvlct,r,g,b,/get
   img=tvrd()
   out_name='MOSA.'+year+'.'+month+'.'+day+'.'+hour+'.'+minute+'.'+second+'.gif'
   write_gif,out_name,img,r,g,b
   print,'Output in ',out_name
   endif
   
if keyword_set(zbuffer) then begin
   if (zbuffer eq 1) then begin
     device,/close
     set_plot,'x'
     endif
   endif

if keyword_set(cursor) then begin
   print,'Point cursor on map!'
   cursor,x,y,/data
   print,'Location: ',x,y
   endif

if keyword_set(verbose) then print,'Calculation took ',systime(1)-verbose,$
   ' Seconds'

;stop
end