pro fu_spec2d,funct,dat, $
PSYM = psym, $
LIMITS = limits, $
TITLE = title, $
YTITLE = ytitle, $
XTITLE = xtitle, $
ANGLE=an, $
ARANGE=ar, $
BINS=bins, $
INTEG_F = integ_f, $
INTEG_R = integ_r, $
MPLOT = mplot
if n_params() lt 2 then begin
print,'Wrong Format, Use: fu_spec2d,funct,dat,[ANGLE=angle,...]'
return
endif
!y.omargin =[2,3]
nenergy=dat.nenergy
y=fltarr(nenergy)
for a=0,nenergy-1 do begin
y(a) = call_function(funct,dat,ERANGE=[a,a],ANGLE=an,ARANGE=ar,BINS=bins)
endfor
x=reform(dat.energy(*,0))
if x(1) gt x(2) then begin
y=reverse(y)
x=reverse(x)
endif
if not keyword_set(title) then title = dat.project_name+' '+dat.data_name+' '+funct
if not keyword_set(ytitle) then ytitle='Differential '+funct
if not keyword_set(xtitle) then xtitle='Energy (eV)'
plot={title:title, $
xtitle:xtitle,x:x,xlog:1, $
ytitle:ytitle,y:y,ylog:1 }
if keyword_set(limits) then limits2=limits
str_element,limits2,'xrange',index=index
if index lt 0 then add_str_element,limits2,'xrange',[(min(x(*))-1. > .1),max(x(*))]
str_element,limits2,'xstyle',index=index
if index lt 0 then add_str_element,limits2,'xstyle',1
str_element,limits2,'xmargin',index=index
if index lt 0 then add_str_element,limits2,'xmargin',[10,10]
if keyword_set(mplot) then begin
mplot,data=plot,limits=limits2,colors=2
endif else pmplot,data=plot,limits=limits2
if keyword_set(psym) then oplot,x,y,psym=psym
if keyword_set(integ_f) or keyword_set(integ_r) then begin
ar1=fltarr(nenergy,nenergy)
ar2=fltarr(nenergy,nenergy)
for a=0,nenergy-1 do begin
ar1(a,a:nenergy-1)=1.
ar2(a:nenergy-1,a)=1.
endfor
if keyword_set(integ_f) then begin
y1=ar1#y
plot1={title:title, $
xtitle:xtitle,x:x,xlog:1, $
ytitle:ytitle,y:y1,ylog:1 }
if keyword_set(mplot) then begin
mplot,data=plot1,overplot=1,colors=4
endif else pmplot,data=plot1,overplot=1
endif
if keyword_set(integ_r) then begin
y2=ar2#y
plot2={title:title, $
xtitle:xtitle,x:x,xlog:1, $
ytitle:ytitle,y:y2,ylog:1 }
if keyword_set(mplot) then begin
mplot,data=plot2,overplot=1,colors=6
endif else pmplot,data=plot2,overplot=1
endif
endif
!y.omargin = [0,0]
return
end