;---------------------------------------------------------------------------
; Document name: LIMB_CHECK_SCAN.PRO
; Created by:    Dietmar Germerott, MPS Lindau, April 7, 2008
;
; Last Modified: Mon Apr  7 17:55:35 2008 (GERMEROTT@sumop1.nascom.nasa.gov)
;---------------------------------------------------------------------------
;
PRO limb_check_scan, filelist, errmsg=errmsg, verbose=verbose, level_=level_, $
                     helpp=helpp
;+
; PROJECT:
;       SOHO - SUMER
;
; NAME:
;       LIMB_CHECK_SCAN
;
; PURPOSE: 
;       Check limb with spetrohelio images
;
; CATEGORY:
;       
; 
; EXPLANATION:
;       This routine reads SUMER IDL save files into a header and data array
;       and makes plots of intensity over pointing positions.
;       It also calculates from the given mc positons and intensity, where
;       the limb is and where the SUMER point center should be.
;
; SYNTAX: 
;       limb_check_scan, filelist
;
; EXAMPLES:
;       
; INPUTS:
;       filelist of limb scan images in idl save file format
;
; OPTIONAL INPUTS: 
;       None.
;
; OUTPUTS:
;       None.
;
; OPTIONAL OUTPUTS:
;       None.
;
; KEYWORDS: 
;       errmsg - return processing status
;       helpp  - print help message
;       level_ - the intensity level at which the mc pos should be compared
;       verbose - be more eloquent during processing
;
; COMMON:
;       None.
;
; RESTRICTIONS: 
;       Images should be taken with SUMER in the following procedure:
;       SetMCPHighVoltage -3000 /for safety
;       slit 2
;       lambda11 511 1440
;       point -970,0    / point to where the limb is expected east
;       RestoreSettings
;       spectrohelio1 10 12 2 19 / 10s format 12 2 steps 20 images
;       point 970,0    / point to where the limb is expected west
;       spectrohelio1 10 12 2 19
;       SetMCPHighVoltage -3000   
;
; SIDE EFFECTS:
;       None.
;
; HISTORY:
;       Version 1, April 7, 2008, Dietmar Germerott, MPS Lindau. Written
;
; CONTACT:
;       Dietmar Germerott, MPS Lindau (germerott.nospam@linmpi.mpg.de)
;-
;
   ON_ERROR, 2
   
   IF ((N_ELEMENTS(filelist) LE 0) OR (KEYWORD_SET(helpp))) THEN BEGIN
      PRINT, 'LIMB_CHECK_SCAN -- Syntax error.'
      PRINT, '   Usage: LIMB_CHECK_SCAN, filelist [,errmsg=errmsg]'
      PRINT, ' '
      PRINT, ' Images should be taken with SUMER in the following procedure on SUMOP1:'
      PRINT, '' 
      PRINT, ' NRT SetMCPHighVoltage -3000 /for safety'
      PRINT, ' NRT slit 2'
      PRINT, ' NRT lambda11 511 1440'
      PRINT, ' NRT point -970,0    / point to where the limb is expected east'
      PRINT, ' NRT RestoreSettings'
      PRINT, ' NRT spectrohelio1 10 12 2 19 / 10s format 12 2 steps 20 images'
      PRINT, ' NRT point 970,0    / point to where the limb is expected west'
      PRINT, ' NRT spectrohelio1 10 12 2 19'
      PRINT, ' NRT SetMCPHighVoltage -3000'
      PRINT, '' 
      RETURN
   ENDIF
   _verbose = 0
   _level = 2000
   
   IF KEYWORD_SET(verbose) THEN _verbose = 1  
   IF KEYWORD_SET(level_) THEN _level = level_
   
   plevel = FLTARR(N_ELEMENTS(filelist))
   plevel(*) = _level
   
   RESTORE,verbose=KEYWORD_SET(verbose),filelist(0)
   hdr = header_data
   img = image_data
   FOR n=1, N_ELEMENTS(filelist)-1 DO BEGIN
      RESTORE, filelist(n), verbose=_verbose
      hdr = [[hdr], [header_data]]
      img = [[[img]], [[image_data]]]
   ENDFOR
   
   xhdr = sum_image_head(hdr)
                                ;look for east limb images
   ceast = WHERE(xhdr.p_suny LT 0, eastcnt)
   
                                ;look for west limb images
   cwest = WHERE(xhdr.p_suny GT 0, westcnt)
   
   WINDOW, 1, xsize=N_ELEMENTS(filelist) 
   IF eastcnt GT 0 THEN BEGIN
      sumeast = TOTAL(img(*, *, ceast), 1)
      ehdr = xhdr(ceast)
      TVSCL,SQRT(ROTATE(sumeast,1))
      se_pos = WHERE(TOTAL(sumeast, 1) GT _level, cnt)
      IF cnt GT 0 THEN mcestep = ehdr(MIN(se_pos)).ssmc2pos
      
   ENDIF
   
   IF westcnt GT 0 THEN BEGIN
      sumwest = TOTAL(img(*, *, cwest), 1)
      whdr = xhdr(cwest)
      TVSCL, SQRT(ROTATE(sumwest,1)), eastcnt, 0
      sw_pos = WHERE(TOTAL(sumwest, 1) GT _level, cnt)
      IF cnt GT 0 THEN mcwstep = whdr(MAX(sw_pos)).ssmc2pos
   ENDIF
   
   WINDOW,2,xsize=800
   !p.multi = [0,3,1]
   IF N_ELEMENTS(eastcnt) GT 0 THEN  PLOT, ehdr.ssmc2pos, TOTAL(sumeast, 1), /xstyle,$
      title='MC2POS East limb' ELSE PLOT, INDGEN(100), /nodata
   IF N_ELEMENTS(westcnt) GT 0 THEN  PLOT, whdr.ssmc2pos, TOTAL(sumwest, 1), /xstyle, $
      title='MC2POS West limb' ELSE PLOT, INDGEN(100), /nodata
   
   IF eastcnt GT 0 THEN  BEGIN
      PLOT, ABS(ehdr.p_suny), TOTAL(sumeast, 1), /xstyle , psym=2, title='ABS pointing pos'
      OPLOT, ABS(ehdr.p_suny), TOTAL(sumeast, 1) 
      OPLOT, ABS(ehdr.p_suny), plevel 
   ENDIF ELSE IF westcnt GT 0 THEN PLOT, ABS(ehdr.p_suny), TOTAL(sumeast, 1), /xstyle
   IF westcnt GT 0 THEN BEGIN 
      OPLOT, ABS(whdr.p_suny), TOTAL(sumwest, 1), psym=5
      OPLOT, ABS(whdr.p_suny), TOTAL(sumwest, 1)
   ENDIF
   
   IF ((N_ELEMENTS(eastcnt) GT 0) AND (N_ELEMENTS(westcnt)GT 0)) THEN BEGIN
      
      PRINT, 'MC2POS East at Level:', _level, ' is ', mcestep
      PRINT, 'MC2POS West at Level:', _level, ' is ', mcwstep
      PRINT, 'Calculated new SUMER Y point center is:', mcestep+(mcwstep-mcestep)/2.
   ENDIF
   
END


;---------------------------------------------------------------------------
; End of 'LIMB_CHECK_SCAN.PRO'.
;---------------------------------------------------------------------------
