112 lines
4.4 KiB
Prolog
112 lines
4.4 KiB
Prolog
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
|