PRO mk_xrt_filt_genx, outvar=outvar, qabort=qabort

; =========================================================================
;+
; PROJECT:
;       Solar-B / XRT 
;
; NAME:
;       
;       MK_XRT_FILT_GENX
;
; CATEGORY:
;       
;       Calibration
;
; PURPOSE:
;       
;       Generate the XRT Filter description structures.
;       Calculates the transmissions for elements in thicknesses
;       using <multifilt.pro>.
;
; CALLING SEQUENCE:
;
;       MK_XRT_FILT_GENX [, outvar=outvar] [, qabort=qabort]
;       
; INPUTS:
;       
;       Reads element indices of refraction from the "refr" directory.
;
; KEYWORDS:
;
;
; OUTPUTS:
;
;       OUTVAR  - [Optional] (structure array) The filter structures as 
;                 written to the genx file.
;       QABORT  - [Optional] (Boolean) Indicates that the program
;                 exited gracefully without completing. (Might be
;                 useful for calling programs.)
;                 0: Program ran to completion.
;                 1: Program aborted before completion.
;
; EXAMPLES:
;      
;       Full auto:
;       IDL> mk_xrt_filt_genx
;
;       Want to see result in IDL:
;       IDL> outvar = 1
;       IDL> mk_xrt_filt_genx, outvar=outvar
;       IDL> help, outvar 
;
; COMMON BLOCKS:
;
; 	none 
;
; NOTES:
;
;       none
;
; CONTACT:
;
;       Comments, feedback, and bug reports regarding this routine may be 
;       directed to this email address: 
;                xrt_manager ~at~ head.cfa.harvard.edu 
;       
; MODIFICATION HISTORY:
;
progver = 'v2003-Feb-10' ;--- (M.Weber) Generated from someone else's 
;                             version of <mk_mir_save.pro> for DECODE 
;                             and AIA.
progver = 'v2005-Mar-09' ;--- (MW) Generated from <mk_aia_mirr_genx.pro>.
progver = 'v2005-Mar-10' ;--- (MW) Generated from <mk_xrt_mirr_genx.pro>.
progver = 'v2007-May-13' ;--- (MW) Modified for XRT analysis tree.
;                      
;-
; =========================================================================


;=== Initial setup =======================================

  prognam           = 'MK_XRT_FILT_GENX'
  XRT_CALIB         = get_logenv('$SSW_XRT_CALIB')
  qabort            = 0B

  filt_descrip = 'Luxell. Calculated with multifilt.pro. Data for ' +     $
                 'material indices of refraction from the database at ' + $
                 'http://www.cxro.lbl.gov/optical_constants/getdb2.html;' $
                 + ' density = -1'

  filt_name = ['Al-mesh', 'Al-poly', 'C-poly', 'Ti-poly', 'Be-thin',   $
               'Be-med', 'Al-med', 'Al-thick', 'Be-thick', 'Entrance', $
               'Open']
  long_name = 'Hinode_XRT_FM_filter_' + filt_name
  filt_elem = [['Al2O3', 'Al',        'Al2O3', ''],          $
               ['Al2O3', 'Al',        'Al2O3', 'polyimide'], $
               ['C',     'polyimide', '',      ''],          $
               ['TiO2',  'Ti',        'TiO2',  'polyimide'], $
               ['BeO',   'Be',        'BeO',   ''],          $
               ['BeO',   'Be',        'BeO',   ''],          $
               ['Al2O3', 'Al',        'Al2O3', ''],          $
               ['Al2O3', 'Al',        'Al2O3', ''],          $
               ['BeO',   'Be',        'BeO',   ''],          $
               ['Al2O3', 'Al',        'Al2O3', 'polyimide'], $
               ['',      '',          '',      '']            ]
  ele_thick = [[50.,  1503,    50,   0],    $
               [75,   1183,    25,   2656], $
               [6038, 3478,    0,    0],    $
               [75,   3245,    25,   2522], $
               [75,   89850,   75,   0],    $
               [75,   299850,  75,   0],    $
               [75,   124850,  75,   0],    $
               [75,   249850,  75,   0],    $
               [3000, 2994000, 3000, 0],    $
               [75,   1600,    25,   2200], $
               [0,    0,       0,    0]      ]
  filt_mesh      = [0.80, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0]
  filt_substrate = ['0.80 mesh', 'polyimide', 'polyimide', 'polyimide', $
                    '', '', '', '', '', 'polyimide','']

  n_filts = n_elements(filt_name)


;=== Check inputs ========================================

;; None currently.


;=== Make filter structure ===============================

  str_temp = {type:'filter', name:'', long_name:'',        $
              descrip:filt_descrip, material:strarr(4),    $
              thick:fltarr(4), thick_units:'Angstroms',    $
              dens:fltarr(4), dens_units:'g cm^-3',        $
              wave:fltarr(4000), wave_units:'Angstroms',   $
              trans:fltarr(4000), substrate:'', length:1L, $
              data_files:strarr(4)                          }


;=== Calculate transmission and write file ===============

  densities = 1
  n_files   = 1

  for ii = 0,(n_filts-1) do begin

    print, filt_name[ii], '--- ' + strcompress(ii+1,/rem) + ' of ' $
           + strcompress(n_filts,/rem)

    if (filt_name[ii] ne 'Open') then begin
      multifilt, wave, trans, filt_elem[*,ii], ele_thick[*,ii],    $
                 filt_mesh[ii], densities=densities, n_files=n_files
    ss = where(filt_elem[*,ii] ne '', nelem)
    endif else begin
      wave  = outvar[0].wave[0:outvar[0].length-1]
      trans = (wave * 0.) + 1.0
      densities = fltarr(4)
      n_files = strarr(4)
      nelem = 4
    endelse

    nwave = n_elements(wave)
    str_out = str_temp

    str_out.name                   = filt_name[ii]
    str_out.long_name              = long_name[ii]
    str_out.material               = filt_elem[*,ii]
    str_out.thick                  = ele_thick[*,ii]
    str_out.dens[0:nelem-1]        = densities
    str_out.wave[0:nwave-1]        = wave
    str_out.trans[0:nwave-1]       = trans
    str_out.substrate              = filt_substrate[ii]
    str_out.length                 = nwave
    str_out.data_files[0:nelem-1]  = n_files

    outfile = 'xrt_filter_'+filt_name[ii]
    savegenx, str_out, file=outfile

    if (ii eq 0) then outvar = str_out         $
                 else outvar = [outvar, str_out]

  endfor


END ;======================================================================
