pro plotspec,ident,name,rv=rv,xrange=xr,lxrange=lxr,list_elem=elist,relative=relative,elem=ielem,_extra=pex,fwhm=fwhm,viewp=viewp,idsize=idsize ; ; made by Yeisson Osorio Feb 2020 ; if n_params() lt 2 then begin print,"plotspec,ident,name,rv=rv,fwhm=fwhm,xrange=xr,elem=elem,idsize=idsize,_extra=pex" print," ident = (real) if 0 just plot, if > 0 plot names of lines with weq >= iden (mAngs)" print," name = (str) name of synspec output files (with no sufix)" print," lxr = (real[2]) wavelength range to consider (default whole range)" print," rv = (real) radial velocity shift" print," elem = (str[]) name of the element(s) to plot (if empty plot all)" print," list_elem = (output) list of visible elements" return endif defsysv,'!gdl',exist=gdl ; 1 is GDL , 0 is IDL if keyword_set(ielem) then elem=strtrim(ielem,2)+' ' if n_elements(xr) eq 0 then xr=[0,0] if ident gt 0 and ~gdl then begin if n_elements(viewp) eq 4 then vp=viewp else vp=[0.13,0.95,0.1,0.65] set_viewport,vp[0],vp[1],vp[2],vp[3] endif if ident gt 0 and gdl then !p.position=[0.075,0.1,0.95,0.65] if name eq 'fort' then begin if keyword_set(relative) then rotin,'fort.7','fort.17','fort.10',/relative,wl,fl else readcol,'fort.7',wl,fl,format='(d,d)' endif else begin if keyword_set(relative) then readcol,name+'.10',wl,fl,format='(d,d)',/silent else readcol,name+'.7',wl,fl,format='(d,d)',/silent endelse wstart= xr[0] eq 0 ? min(wl) : xr[0] wend = xr[1] eq 0 ? max(wl) : xr[1] wl=reform(wl) fl=reform(fl) if n_elements(fwhm) eq 1 or n_elements(rv) eq 1 then fl=fconvol(wl,fl,wl,fwhm=fwhm,rv=rv) plot,wl,fl,xr=xr,_extra=pex if ident gt 0 then begin if n_elements(extend) gt 0 then begin if iplot ge 0 then begin nln=n_elements(wl) wla=fltarr(nln) fla=wla for i=0,nln-1 do begin wla(i)=wl(i) & fla(i)=fl(i) & endfor endif if n_elements(observ) eq 1 then begin nobs=n_elements(wlobs)-1 if iplot ge 0 then beyond=wl(nln-1) lt wlobs(0) or wl(0) gt wlobs(nobs-1) if iplot lt 0 then beyond=1 if extend lt 0 then begin extend = -extend beyond=1 endif nln=n_elements(wlobs) wla=fltarr(nln) fla=wla for i=0,nln-1 do begin wla(i)=wlobs(i) & fla(i)=flobs(i) & endfor endif endif if keyword_set(lxr) then ra=lxr else ra=[wstart,wend] ewl=ident ; the new version of synspec has fort.14 formatted the ; following way: ; 2 1 3721.935 H I -1.97 82259.250 1.06E-02 0.9 . 2 14 ; and should be ; 3721.935 H I -1.97 82259.250 1.06E-02 0.9 . 2 14 ; if name eq 'fort' then begin if file_test('fort.15') then begin spawn,"sed 's/^\(.............\)\(....\) /\1 \2 ./g' fort.15 > f15" spawn,'cat fort.12 f15 | sort -n -k 3,3 >| f12' endif else spawn,"cp fort.12 f12" endif else begin if file_test(name+'.15') then begin spawn,"sed 's/^\(.............\)\(....\) /\1 \2 ./g' "+name+".15 > f15" spawn,'cat '+name+'.iden f15 | sort -n -k 3,3 >| f12' endif else spawn,"cp "+name+".12 f12" endelse spawn,'rm tf12' if n_elements(elem) ne 0 then begin for ii=0, n_elements(elem)-1 do begin kas=strsplit(elem[ii],' ',/extract) if n_elements(kas) eq 1 then spawn,'grep "'+kas+'" f12 >> tf12' $ else spawn,'grep "'+kas[0]+'" f12 | grep "'+kas[1]+'" >> tf12' endfor spawn,'sort -n -k 3,3 tf12 > f12' endif else begin spc='" "' spawn,"awk '{print $2"+spc+"$3}' f12 | sort -u > tf12" readcol,'tf12',a,i,format='(a,a)',/silent elist=a+' '+i elist=strtrim(repstr(elist,'.',''),2) endelse line="awk '{if ($1 >= "+strtrim(min(ra),2)+" && $1 <= "+strtrim(max(ra),2)+") print $0 }' f12 > tf12" spawn,line if ident lt 1 then N=0 else N=2 lineid_select,'tf12',wli,lid,wst,st,ew,ewlim=ewl,range=ra,N=N if n_elements(rv) eq 1 then $ wli=wli*(1.-rv/2.9977925e5) if keyword_set(pex) then begin dum=where(strpos(tag_names(pex),'CO') ne -1) if dum ne -1 then dum=pex.(dum) else dum=!p.color endif lineid_annot,wla,fla,wli,ew,lid,wst,charsize=idsize,extend=extend,col=dum if ~gdl then set_viewport endif end