FUNCTION dustem_read_dustem_lv,file,silent=silent,help=help ;+ ; NAME: ; dustem_read_dustem_lv ; PURPOSE: ; Reads all Dustem SED output ; CATEGORY: ; Dustem ; CALLING SEQUENCE: ; st=dustem_read_dustem_lv,file,[/silent],[/help]) ; INPUTS: ; file: file to be read ; OPTIONAL INPUT PARAMETERS: ; None ; OUTPUTS: ; st: Dustem output structure ; structure: ; IDL> help,st,/str ; ** Structure <1733e38>, 7 tags, length=28, data length=28, refs=2: ; WAV FLOAT 0.0400000 ; EM_GRAIN_1 FLOAT 0.00000 ; EM_GRAIN_2 FLOAT 0.00000 ; EM_GRAIN_3 FLOAT 0.00000 ; EM_GRAIN_4 FLOAT 0.00000 ; EM_GRAIN_5 FLOAT 0.00000 ; EM_TOT FLOAT 0.00000 ; OPTIONAL OUTPUT PARAMETERS: ; None ; ACCEPTED KEY-WORDS: ; help = If set, print this help ; silent = If set, function is silent ; COMMON BLOCKS: ; None ; SIDE EFFECTS: ; None ; RESTRICTIONS: ; The dustem idl wrapper must be installed ; PROCEDURE: ; None ; EXAMPLES ; ; MODIFICATION HISTORY: ; Written by J.-Ph. Bernard ; Contact J.-Ph. Bernard (Jean-Philippe.Bernard@cesr.fr) in case of problems. ;- IF keyword_set(help) THEN BEGIN doc_library,'dustem_read_dustem_lv' st=0. goto,the_end ENDIF message,'Reading file '+file,/continue ;=== 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] ;Ngrains=!dustem_params.Ngrains ;Read model output instruc='readcol,file,wav,' FOR i=0L,Ngrains-1 DO BEGIN instruc=instruc+'em_grain_'+strtrim(i+1,2)+',' ENDFOR instruc=instruc+'em_tot,silent=silent' message,'Executing '+instruc,/continue toto=execute(instruc) Nlines=n_elements(wav) instruc='one_st={wav:0.,' FOR i=0L,Ngrains-1 DO BEGIN instruc=instruc+'em_grain_'+strtrim(i+1,2)+':0.,' ENDFOR instruc=instruc+'em_tot:0.}' message,'Executing '+instruc,/continue toto=execute(instruc) st=replicate(one_st,Nlines) st.wav=wav FOR i=0L,Ngrains-1 DO BEGIN instruc='st.(i+1)='+'em_grain_'+strtrim(i+1,2) message,'Executing '+instruc,/continue toto=execute(instruc) ENDFOR st.em_tot=em_tot ;==== Longji, go ahaead there: IF !dustem_redshift NE 0. THEN BEGIN st.wav=st.wav*(1+!dustem_redshift) ;help,st,/str ;help,st.wav ENDIF ;stop the_end: RETURN,st END