FUNCTION dustem_read_qabs,file,silent=silent,help=help ;+ ; NAME: ; dustem_read_qabs ; ; PURPOSE: ; reads information relating to the grain Qabs ; from the corresponding .DAT file ; ; CATEGORY: ; DustEMWrap, Distributed, LowLevel, Initialization ; ; CALLING SEQUENCE: ; st=dustem_read_qabs(file) ; ; INPUTS: ; file : input file to be read ; ; OPTIONAL INPUT PARAMETERS: ; ; OUTPUTS: ; st : dustem data structure ; ; OPTIONAL OUTPUT PARAMETERS: ; ; 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_qabs' full_st=0. goto,the_end ENDIF ;== find material name from file name Qstring='QABS_' Estring='.DAT' subs=str_sep(file,'/') filename=subs(n_elements(subs)-1) pos1=strpos(filename,Qstring) pos2=strpos(filename,Estring) material=strmid(filename,pos1+strlen(Qstring),pos2-(pos1+strlen(Qstring))) st='' Nmax=10000L sts=strarr(Nmax) OPENR,unit,file,/get_lun ;Get number of columns readf,unit,Nsizes ;Get sizes readf,unit,st sizes=float(str_sep(strcompress(strtrim(st,2)),' ')) Ncol=2*Nsizes nlines=0L WHILE not eof(unit) DO BEGIN readf,unit,st sts(nlines)=st nlines=nlines+1 ENDWHILE CLOSE,unit free_lun,unit values=fltarr(Ncol,Nlines) FOR i=0L,Nlines-1 DO BEGIN values(*,i)=str_sep(strcompress(strtrim(sts(i),2)),' ') ENDFOR ;== Make output structure cmd='one_st={' FOR i=0L,Ncol-1 DO BEGIN cmd=cmd+'v'+strtrim(i+1,2)+':'+'0.' IF i NE Ncol-1 THEN BEGIN cmd=cmd+',' ENDIF ELSE BEGIN cmd=cmd+'}' ENDELSE ENDFOR toto=execute(cmd) st=replicate(one_st,Nlines) ;=== fill in the structure FOR j=0,Ncol-1 DO BEGIN st.(j)=reform(values(j,*)) ENDFOR full_st={file:file,material:material,sizes:sizes,Qabs:st} the_end: return,full_st END