FUNCTION dustem_read_ext_lv,file,silent=silent,help=help ;+ ; NAME: ; dustem_read_ext_lv ; ; PURPOSE: ; reads information relating to the extinction from each grain type ; from the corresponding .DAT file ; ; CATEGORY: ; DustEMWrap, Distributed, LowLevel, Initialization ; ; CALLING SEQUENCE: ; st=dustem_read_ext_lv(file) ; ; INPUTS: ; file : output file to be read ; ; OPTIONAL INPUT PARAMETERS: ; None ; ; OUTPUTS: ; st : dustem data structure ; ; OPTIONAL OUTPUT PARAMETERS: ; None ; ; ACCEPTED KEY-WORDS: ; help : writes this help ; ; COMMON BLOCKS: ; None ; ; SIDE EFFECTS: ; ; RESTRICTIONS: ; The DustEM fortran code must be installed ; The DustEMWrap IDL code must be installed ; ; PROCEDURES AND SUBROUTINES USED: ; ; EXAMPLES: ; ; MODIFICATION HISTORY: ; Evolution details on the DustEMWrap gitlab. ; See http://dustemwrap.irap.omp.eu/ for FAQ and help. ;- IF keyword_set(help) THEN BEGIN doc_library,'dustem_read_ext_lv' st=0. goto,the_end ENDIF ;=== determine the number of grains str=' ' OPENR,unit,file,/get_lun ;==read comments str='' & first_char='#' WHILE first_char EQ '#' DO BEGIN readf,unit,str first_char=strmid(str,0,1) ENDWHILE ;readf,unit,str CLOSE,unit free_lun,unit str=strcompress(str) str=strtrim(str,2) vv=str_sep(str,' ') Ngrains=vv(0) ;Read model output instruc='readcol,file,wav,' FOR i=0L,Ngrains-1 DO BEGIN instruc=instruc+'abs_grain_'+strtrim(i+1,2)+',' ENDFOR FOR i=0L,Ngrains-1 DO BEGIN instruc=instruc+'sca_grain_'+strtrim(i+1,2)+',' ENDFOR ;VG read ext_tot from the file instruc=instruc+'ext_tot,silent=silent' toto=execute(instruc) ;stop ;Nlines=n_elements(wav)-1 Nlines=n_elements(wav) one_st = {wav:0., abs_grain:replicate(0.,Ngrains), sca_grain:replicate(0.,Ngrains),ext_tot:0.} st=replicate(one_st,Nlines) ;VG : EXT.RES now contains the total absorption & scattering cross-sections per grain type in cm2/H ; no need for GRAIN.DAT to plot extinction anymore ;mH=1.66e-24 ;fact=mH*1.e21 ;st.wav=wav(1:*) st.wav=wav FOR iwav=0L,Nlines-1 DO BEGIN FOR igrain=0L,Ngrains-1 DO BEGIN instruc = 'st(iwav).abs_grain(igrain) = abs_grain_'+strtrim(igrain+1,2)+'(iwav)' toto = execute(instruc) instruc = 'st(iwav).sca_grain(igrain) = sca_grain_'+strtrim(igrain+1,2)+'(iwav)' toto = execute(instruc) ;st(iwav).ext_tot = st(iwav).ext_tot + fact * (st(iwav).abs_grain(igrain) + st(iwav).sca_grain(igrain)) instruc = 'st(iwav).ext_tot = ext_tot(iwav)' toto = execute(instruc) ENDFOR ENDFOR the_end: return,st END