pro make_xrt_ccd, XRT_ccd, ccd, qabort, define=define, caldir=caldir, $ debug=debug ; ========================================================================= ;+ ; PROJECT: ; Solar-B / XRT ; ; NAME: ; MAKE_XRT_CCD ; ; CATEGORY: ; Calibration ; ; PURPOSE: ; Generate the XRT CCD structure. Calculate CCD QE. ; ; CALLING SEQUENCE: ; MAKE_XRT_CCD, XRT_ccd, ccd, [,qabort] [,/define] [,caldir=caldir] ; ; INPUTS: ; XRT_CCD: [Mandatory] Variable to return XRT_CCD structure ; CCD: [Optional] ccd input structure from config file ; Also reads "atten_len_Si.txt", "atten_len_SiO2.txt" files from ; calibration directory. ; ; KEYWORDS: ; CALDIR: [Optional input] location of $SSW/hinode/xrt/calibration ; /DEFINE: [Optional] when set returns only XRT_ccd structure definition. ; ; OUTPUTS: ; XRT_CCD: (structure) Returns fully populated ccd structure ; QABORT: [Optional] program return status ; ; EXAMPLES: ; make_xrt_ccd, XRT_ccd, /define ; make_xrt_ccd, XRT_ccd, ccd, qabort ; ; ; COMMON BLOCKS: ; None. ; ; NOTES: ; Code and logic reuse from mk_xrt_ccd_genx.pro. Notes from that program. ; ; The QE formula and parameter values are taken from the "Gray Book - ; Solar-B XRT Flight CCD Camera System Data Package" (2003.Aug.26). ; The CCD Gain is also taken from the "Gray Book". ; Uses utility routines, timestamp.pro and resolve_caldir.pro. ; ; MODIFICATION HISTORY: ; progver = 'v2008.Sep.15' ; --- (Alisdair Davey/Mark Weber) ; First debugged version. Derived from ; , v2007-May-13. progver = 'v2008.Oct.01' ; --- (M.Weber) Reviewed version. ; ;- ; ========================================================================= qabort = 0 XRT_ccd = { XRT_ccd_v0001, $ type: '', $ ccd_str_version: '', $ ccd_str_descr: '', $ name: '', $ long_name: '', $ ev_per_el: float(0), $ ev_per_el_units: 'eV', $ full_well: float(0), $ full_well_units: 'electrons', $ gain_l: float(0), $ gain_r: float(0), $ gain_units: '', $ pixel_size: float(0), $ pixel_size_units: 'microns', $ wave: fltarr(5000), $ wave_units: 'Angstroms', $ qe: fltarr(5000), $ length: 0L, $ data_files: strarr(5), $ history: strarr(3), $ comments: strarr(5) $ } if keyword_set(define) then return ; Populate structure struct_assign, ccd, XRT_ccd, /nozero XRT_ccd.history[0] = 'MAKE_XRT_CCD '+progver+timestamp() XRT_ccd.ccd_str_version = tag_names(XRT_ccd,/structure) ; Various constants and variables needed for calculations d_Si = 1.50e5 d_SiO2 = 61.0 eta = 0.40 gamma = 1.0/2.1e3 h_planck = 4.136e-15 ;; eV s c_light = 2.998e18 ;; Angstroms / s ; Where are the calibration files? resolve_caldir, caldir=caldir, qabort if qabort then return infile_atten_Si = caldir+'/atten/atten_len_Si.txt' infile_atten_SiO2 = caldir+'/atten/atten_len_SiO2.txt' ; Calculate components - The Quantum Efficiency (QE) vtemp = rd_tfile(infile_atten_Si, 2, /hskip) wave_Si = reform(vtemp[0,*]) * 10. ;; Angstroms len_Si = reform(vtemp[1,*]) * 1e4 vtemp = rd_tfile(infile_atten_SiO2, 2, /hskip) wave_SiO2 = reform(vtemp[0,*]) * 10. ;; Angstroms len_SiO2 = reform(vtemp[1,*]) * 1e4 ph_energy = h_planck * c_light / wave_Si ;; eV aa = exp(-d_SiO2/len_SiO2) bb = (1-eta)/len_Si/(gamma+(1./len_Si)) cc = exp(-d_Si/len_Si) dd = bb * exp(-gamma*d_Si) qe = aa * (1 - bb - cc*(1-dd)) ; Finish populating structure XRT_ccd.qe = qe XRT_ccd.wave = wave_SiO2 XRT_ccd.length = n_elements(wave_SiO2) end