;+
; Project     : SOHO - LASCO/EIT
;
; Name	      : LAYOUT
;
; Purpose     : draw a layout to the image
;
; Category    : DISPLAY
;
; Explanation : 
;
; Syntax      : layout,image,name,head,hindex
;
; Examples    :
;
; Inputs      : 
;
; Opt. Inputs : 
;
; Outputs     : 
;
; Opt. Outputs:
;
; Keywords    : 
;
; Common      : wload.com
;
; Restrictions: 
;
; Side effects: 
;
; MODIFICATION HISTORY:
; 	Written by:	Borut Podlipnik, 15-jan-1993, MPAe 
;        
;
; Contact     : BP, borut@lasco1.mpae.gwdg.de
;-
;
PRO layout,image,name,head,hindex,hdr=hdr,mini=mini,maxi=maxi,imlay=imlay, sradius=sradius

@wload.com

IF datatype(lo) EQ 'UND' THEN $
 lo = { layout1, cmask:0, cgrid:0, clogo:0, cdate:0, cid:0, cgrp:0 }

   IF KEYWORD_SET(imlay) THEN lo = imlay
   IF KEYWORD_SET(mini) THEN min_img = mini
   IF KEYWORD_SET(maxi) THEN max_img = maxi

  sz  = size(image)
  detector = hdr.detector

  scale_f = 1
  og = 0
  IF detector NE 'EIT' THEN BEGIN    
                    
     IF (lo.cmask EQ 1) OR (lo.cgrid EQ 1) THEN BEGIN 
  
      r1col  = hdr.r1col - 20
      r1row  = hdr.r1row -  1
      r2col  = hdr.r2col - 20 
      r2row  = hdr.r2row -  1

      disk = 1.1  ; default
      radius = 0

      center_x = FXPAR(head,"OCLTR_X")
      center_y = FXPAR(head,"OCLTR_Y")
      radius   = FXPAR(head,"OCLTR_R")

      scale_f = float(sz(1)) / hdr.naxis1

      suncen = GETSUNCEN(hdr,/raw)	; for full image

      suncen.xcen = suncen.xcen - r1col ; when keyword /raw set
      suncen.ycen = suncen.ycen - r1row ; when keyword /raw set

      suncen.xcen = suncen.xcen / ((hdr.sumcol >1)*(hdr.lebxsum >1))
      suncen.ycen = suncen.ycen / ((hdr.sumcol >1)*(hdr.lebxsum >1))

      pan = scale_f / ((hdr.sumcol >1)*(hdr.lebxsum >1))

      CASE detector OF

      'C1':  BEGIN	; radius for full image
             disk = 1.1			; disk is ocltr_disk 
             radius = 182.0 * pan	; defined by bp.
             ;mf = 'mask_c1.fts'
             END
      'C2':  BEGIN
             disk = 2.0
             radius = 161.0 * pan
             ;mf = 'mask_c2.fts'
             END
      'C3':  BEGIN
             disk = 3.7
             radius = 67.0 * pan
             mf = 'mask_c3.fts'
             END
      'EIT': BEGIN
             disk = 1.0
             radius = 375.097 * pan
             END
      ELSE: mf = 'mask_c1.fts'
      ENDCASE

      IF NOT KEYWORD_SET(sradius) THEN $
          sradius = get_solar_radius(hdr,/pixel) * scale_f
 
      IF (sradius) GT radius THEN sradius = radius/disk ;ELSE sradius = solar_radius

      mask  = maskn(suncen.xcen*scale_f,suncen.ycen*scale_f,radius)
      maske = mask.img_mask
      mh    = mask.head

      msz = size(maske)

       og = 1	; could insert occultuer and grid.

       mnaxis1= FXPAR(mh,"NAXIS1")
       mnaxis2= FXPAR(mh,"NAXIS2")
       m1col  = FXPAR(mh,"R1COL")  
       m1row  = FXPAR(mh,"R1ROW")        
       m2col  = FXPAR(mh,"R2COL")   
       m2row  = FXPAR(mh,"R2ROW")   
       crpix1 = FXPAR(mh,"CRPIX1")
       crpix2 = FXPAR(mh,"CRPIX2")
       radius = FXPAR(mh,"RADIUS")

      tx1 = m1col
      tx2 = (tx1 + sz(1)) < m2col
      ty1 = m1row
      ty2 = (ty1 + sz(2)) < m2row

      scale = ((hdr.sumcol >1)*(hdr.lebxsum >1))

      catch,error_status
      IF error_status NE 0 THEN GOTO,no_mask_today

      tmp1 = image(tx1:tx2-1,ty1:ty2-1)

  ENDIF

   IF (lo.cmask EQ 1) THEN BEGIN  
       tmp2 = maske(tx1-m1col:tx2-m1col-1,ty1-m1row:ty2-m1row-1)
       inm  = WHERE( tmp2 EQ 255 )
       tmp1(inm) = 0          
       image(tx1:tx2-1,ty1:ty2-1) = tmp1
   ENDIF
           
   IF ( lo.cgrid EQ 1 ) THEN BEGIN 
                
    dt = hdr.date_obs + ' ' + hdr.time_obs
                  
     ephemerix,dt,p=0,b0=b0,l0=l0

     grid = tmp1
     grid(*,*)=0

     sz = size(grid)

     dia = FIX(sradius*2.0)

     IF sz(1) LT 300 THEN BEGIN
       cs = .7 
       thick = .6
     ENDIF ELSE BEGIN
       cs = 1.2
       thick = 1.0
     ENDELSE

     IF detector EQ 'C3' THEN BEGIN
         sungrid,0,b0,l0,grid=grid,size=[sz(1),sz(2)],pixeld=dia,charsize=cs, $
             center=[crpix1-tx1,crpix2-ty1]
     ENDIF ELSE BEGIN
     sungrid,0,b0,l0,grid=grid,size=[sz(1),sz(2)],pixeld=dia,charsize=cs, $
             center=[crpix1-tx1,crpix2-ty1],latlab=[-30,30],/label,thick=thick
     ENDELSE

     tmp1(where(grid GT 0)) = max_img
     image(tx1:tx2-1,ty1:ty2-1) = tmp1

   ENDIF 
  ENDIF            
     
 no_mask_today:
 error_status = 0
        
   IF lo.clogo EQ 1 then BEGIN	; layout LASCO logo.

      img_s = size(image) 

      IF img_s(1) GT 511 THEN logo_path = GETENV('HOMED') + !delimiter+'lasco_logo.dat' $
                         ELSE logo_path = GETENV('HOMED') + !delimiter+'lasco_small.dat'
      restore, logo_path

      i = WHERE(logo EQ 255)

      logo_s = size(logo)
      
      tmp1 = image((img_s(1)-1)-(logo_s(1)-1):img_s(1)-1, 0:img_s(2)-1) ; logo right-down

      tmp1(i) = max_img
      image((img_s(1)-1)-(logo_s(1)-1):img_s(1)-1, 0:img_s(2)-1) = tmp1  ; logo right-down
                                          
   ENDIF                

   IF lo.cdate EQ 1 THEN BEGIN	; layout date and time.
              
      dt = hdr.date_obs + ' ' + STRMID(hdr.time_obs,0,5) + ' UT'
      IF sz(1) LT 300 THEN cs = 1.2 ELSE cs = 1.5   
      ta = textarray(dt,charsize=cs)
 
      i = WHERE(ta EQ 255)
      ta_s = size(ta)

      img_s = size(image)
              
      IF ta_s(1) LT img_s(1) THEN BEGIN      
         tmp1 = image(0:ta_s(1)-1,(img_s(2)-1)-(ta_s(2)-1):(img_s(2)-1))
                                                      
         tmp1(i) = max_img 

         image(0:ta_s(1)-1,(img_s(2)-1)-(ta_s(2)-1):(img_s(2)-1)) = tmp1 
      ENDIF         
   ENDIF

   IF lo.cid EQ 1 THEN BEGIN	; layout for image ID.

     IF sz(1) LT 300 THEN cs = 0.8 ELSE cs = 1.0  
     IF datatype(name) EQ 'UND' THEN name =" "
     ta = textarray(name,charsize=cs)

     i = WHERE(ta EQ 255)
     ta_s = size(ta)
                                 
     img_s = size(image)
    
     IF ta_s(1) LT img_s(1) THEN BEGIN                
         tmp1 = image(0:ta_s(1)-1,0:ta_s(2)-1)
         tmp1(i) = max_img
         image(0:ta_s(1)-1,0:ta_s(2)-1) = tmp1 
     ENDIF          
   ENDIF
                                            
            ; next line was added for the mmod.pro  (07/02/96)
            ; were min_img and max_img are not defined yet.
            
            IF (datatype(min_img) EQ 'UND') AND (datatype(image) EQ 'FLO') THEN BEGIN
              min_img = -.5 & max_img = 50.
            ENDIF ELSE BEGIN
              ;min_img = min(image) & max_img = max(image)
            ENDELSE

            ;TVSCL,image > min_img < max_img ,r1col,r1row
	    
            ; also hindex is not known in mmod.pro (07/02/96)
            IF datatype(hindex) NE 'UND' THEN BEGIN
             IF hindex GT -1 THEN shandle,image,head,hindex
            ENDIF

RETURN
END
