PRO mkquery,inst=inst,day=day,filter=filter,polar=polar, $
              wave=wave,cols=cols,rows=rows,process=process, $
              img_hdr=img_hdr
;
;+
; NAME:
;	MKQUERY
;
; PURPOSE:
;	This procedure will generate a list of images for selected day, create
;       image reduce header catalog, sort images on date and time, write a list
;       of images in $HOME or ../work/$USER/list with name of the first 
;       (first_last) processed day:
;	960704.lst (960704_960710.lst)
;       and write processed images on ../work/$USER/fits.
;
; CATEGORY:
;	LASCO DATA ANALYSIS
;
; CALLING SEQUENCE:
;	MKQUERY
;
; INPUTS:
;
; KEYWORD PARAMETERS:
;	INST:   A string for instrument: 'C1' is default.
;       DAY:    A string array: day = ['960703','960704']
;       FILTER: A string for the filter: filter = 'Fe XIV'
;       POLAR:  A string for the polarizer: polar = 'Clear'
;       WAVE:   A float array for the wavelength: wave = [5309.2,5302.4]
;       PROCESS: If this keyword is set, C1 images will be processed.
; 
; 
; SIDE EFFECTS:
;
; PROCEDURE:
;      
;
; EXAMPLE:
;
;		MKQUERY,day='960704'
;               MKQUERY,day=['960703','960704'],inst='C1',filter='Fe XIV'
;
; MODIFICATION HISTORY:
; 	Written by:	B Podlipnik, 04 Jul 1996
;
;	Version:	1.0
;
;	@(#)mkquery.pro	1.1 11/02/01 LASCO IDL LIBRARY
;-
;


  IF NOT KEYWORD_SET(wave) THEN wave = [5309.2,5302.4] ; off-on line
  
  IF NOT KEYWORD_SET(filter) THEN filter = 'Fe XIV'   ; default filter
  IF NOT KEYWORD_SET(inst) THEN inst = 'C1'           ; default detector
  IF NOT KEYWORD_SET(process) THEN process = 0        ; default don't process images
  IF NOT KEYWORD_SET(polar) THEN polar = 'Clear'
  IF NOT KEYWORD_SET(rows) THEN rows = 672
  IF NOT KEYWORD_SET(cols) THEN cols = 832

  ih = 0
  IF KEYWORD_SET(img_hdr) THEN BEGIN
   ih = 1
  ENDIF
    
  CASE ih OF
  
  1: BEGIN 
      scat = rd_asc(img_hdr)
      files = STRARR(n_elements(scat))
      for i=0,n_elements(list)-1 do begin    
        files(i) = STRCOMPRESS(STRMID(list(i),0,12))
      endfor    
     END
     
  0: BEGIN
                                                           
  imgdir = GETENV('IMAGES')+!delimiter+'level_05'
  
  IF KEYWORD_SET(day) THEN BEGIN
     for i=0,n_elements(day)-1 do begin
        IF datatype(day(i))  NE 'STR' THEN BEGIN
          print," %DAY_MOVIE: Error: Not a valid data type:"
          print," %DAY_MOVIE: example:"
          print," %DAY_MOVIE: mmod,day=['960703','960704']
        RETURN
        ENDIF
        ;day(i) = STRCOMPRESS(STRING(day(i)),/REMOVE_ALL)
     endfor
  ENDIF
  
  IF NOT KEYWORD_SET(day) THEN BEGIN
    
    ff = yymmdd(FINDFILE(imgdir)) 

    n = n_elements(ff)
    for i=0,n-1 do begin
      ff(i) = STRMID(ff(i),0,6)
    endfor
    IF n GT 0 THEN BEGIN
     IF n GT 1 THEN day = [ff(n-2),ff(n-1)] ELSE day = [ff(n-1)]
     ; n is always GT 1! I hope!
     IF ABS(LONG(day(0))-LONG(day(1))) NE 1 THEN day = [ff(n-3),ff(n-2)] 
    ENDIF ELSE BEGIN
     print,"Can't find any 'yymmdd' folder!"
     RETURN
    ENDELSE
  ENDIF


files = ''
FOR j=0,n_elements(day)-1 do begin
print,day(j)
  ff = imgdir+!delimiter+day(j)+!delimiter+STRLOWCASE(inst)+'/*.fts' 
  
  files = [files,FINDFILE(ff)]

  ENDFOR

  pf = path_file(files)
  files_f = pf.files_f
  dirs_f  = pf.dirs_f

  f_index = WHERE(files_f GT '')
  IF  f_index(0) GT -1 THEN BEGIN
    files = files(f_index)
    files_f = files_f(f_index)
    dirs_f  = dirs_f(f_index)
  ENDIF ELSE BEGIN
      print,'No directory or file found!'
      RETURN
  ENDELSE

   n = n_elements(files_f)
  scat = STRARR(n)

  FOR i=0,n-1 DO BEGIN

    f = FINDFILE(dirs_f(i) + files_f(i))
    IF STRLEN(f(0)) GT 0 THEN BEGIN
      head = HEADFITSL(f(0))
      IF datatype(head) NE "INT" THEN BEGIN
        date_o = SXPAR(head,'DATE-OBS')
        date_x = SXPAR(head,'DATE-OBS')
        IF ( STRLEN(date_o) OR STRLEN(date_x) ) EQ 10 THEN $
          scat(i) = files_f(i) + head_info(head)
      ENDIF	
    ENDIF
  ENDFOR



 END
 
 ELSE: donothing = 0
 
 ENDCASE
 
  list = ''
  ind = WHERE( scat GT '' )
  scat = scat(ind)

  field = 3
  scat = QUERYCAT(scat,field,inst=inst)
  IF n_elements(scat) LT 2 THEN GOTO,finish

  field = 5
  scat = QUERYCAT(scat,field,cols=cols )
  IF n_elements(scat) LT 2 THEN GOTO,finish

  field = 6
  scat = QUERYCAT(scat,field,rows=rows )
  IF n_elements(scat) LT 2 THEN GOTO,finish

  field =  12 ; for wavelength
  scat = QUERYCAT(scat,field,wave=wave)
  IF n_elements(scat) LT 2 THEN GOTO,finish

  field = 9 ; if no wavelength present in reduce image header: field = 9
  scat = QUERYCAT(scat,field,filter=filter)
  IF n_elements(scat) LT 2 THEN GOTO,finish

  field = 10 ; polarizer
  scat = QUERYCAT(scat,field,filter=polar)

  IF n_elements(scat) LT 2 THEN GOTO,finish 
          
  ; ready to sort on scat:

  field = 1   ; field #1 and #2 are date and time in scat 
  dt = 1      ; sort on time ascending  
  
  tmp = ''
  n = n_elements(scat)
  IF n EQ 0 THEN GOTO,finish
  sorted = DBLARR(n)
  for i=0,n-1 do begin
    line = scat(i)
    
    fn = STRPOS(line,' ')
    IF fn NE 12 THEN BEGIN    
     fp1 = 14 + (fn-12); (fn-12) ????
     fp2 = 28 + (fn-12); (fn-12) ????
    ENDIF ELSE BEGIN
     fp1 = 14
     fp2 = 28 
    ENDELSE
     
    tmp1 = STRCOMPRESS(STRMID(line,fp1,12),/REMOVE_ALL)
    tmp2 = STRCOMPRESS(STRMID(line,fp2, 8),/REMOVE_ALL)
    
    ;tmp = STR_SEP(line,' ')
    ;ii = WHERE(tmp GT '')
    ;tmp = tmp(ii)
    tmp = tmp1 + " " + tmp2
    IF FIX(tmp) EQ 0 THEN sorted(i) = 0 ELSE sorted(i) = utc2tai(anytim2utc(tmp))
  endfor

  ind = SORT(sorted)

  scat = TEMPORARY(scat(ind))  
  sorted = TEMPORARY(sorted(ind))
  files = TEMPORARY(files(ind))

  fdt = sorted ; date_time array
  
  ; scat is sorted, dat_time array is present, field wavelength as array needed.
  
  field = 12
  swave = get_array(scat,field,fp=104,fl=14)

  fwave = FLTARR(n_elements(swave))
  
  for i=0,n_elements(swave)-1 do begin
  
   fwave(i) = FLOAT(STRMID(STRTRIM(swave(i),2),0,6)) ; 6 for 'xxxx.x' wl
  
  endfor

 iw0 = WHERE( fwave eq wave(0)) ; off line - continuum
 iw1 = WHERE( fwave eq wave(1)) ; on  line
 
 IF ih EQ 1 THEN BEGIN
  IF iw0(0) GT -1 THEN list = [list,scat(iw0)]
  IF iw1(0) GT -1 THEN list = [list,scat(iw1)]
   
 GOTO,finish
 ENDIF

 for i=0,n_elements(iw1)-1 do begin
 
  midl = where( iw0 lt iw1(i) )
 
  IF midl(0) GT -1 THEN  midl = iw0(midl(n_elements(midl)-1))
 
  midr = where( iw0 gt iw1(i) )
  IF midr(0) GT -1 THEN  midr = iw0(midr(0))
 
  IF (midl(0) EQ -1) AND (midr(0) EQ -1) THEN BEGIN 
   print," No continuum present"
   GOTO,finish 
  ENDIF

  IF midl(0) GT -1 AND midr(0) GT -1 THEN BEGIN
   ;print,midl(0),iw1(i),midr(0)
   deltal = ABS( fdt(midl(0)) - fdt(iw1(i)) )
   deltar = ABS( fdt(midr(0)) - fdt(iw1(i)) )
  
   if deltal ge deltar then begin
    ioff = midr(0)
   endif else begin
    ioff = midl(0)
   endelse
 
  ENDIF
 

  IF midl(0) LT 0 THEN ioff = midr(0)
 
  list = [ list,scat(iw1(i)),scat(ioff) ]

 endfor 

finish:

  ind = WHERE( list gt '',count )
  if ind(0) eq -1 then return
  
  list = list(ind)  
  if n_elements(list) LT 2 THEN RETURN
  
  IF ih EQ 0 THEN BEGIN
   for i=0,n_elements(list)-1 do begin    
    yymmdd = STRMID(list(i),18,2)+STRMID(list(i),21,2)+STRMID(list(i),24,2)
    path = imgdir+!delimiter+yymmdd+!delimiter+STRLOWCASE(inst)
    list(i) = path + !delimiter + STRCOMPRESS(STRMID(list(i),0,12))
   endfor
   
   IF n_elements(day) GT 1 THEN BEGIN
    filename = day(0) + '_' + day(n_elements(day)-1) + '.lst'
   ENDIF ELSE BEGIN
    filename = day(0) + '.lst'
   ENDELSE

   wrt_asc,filename,list
     
  ENDIF ELSE BEGIN
   for i=0,n_elements(list)-1 do begin    
    list(i) = STRCOMPRESS(STRMID(list(i),0,12))
   endfor 
     
    path = STRMID(img_hdr,0,RSTRPOS(img_hdr,'/')) + '/'
    filename = path + day(0) + '.lst'

    wrt_asc,filename,list   
      
  ENDELSE
  
  ; load and process images
  
  IF (process EQ 1) and (inst EQ 'C1') THEN BEGIN
   daylist = day(0) + ".lst"
   diff_of,filename,dark=1,net=1,wrt=1,list_out=daylist   
  ENDIF
  
RETURN
END                                                  

