dustem_plot_ext.pro 6.95 KB
PRO dustem_plot_ext,st,ps=ps,UV=UV,win=win,print_Rv=print_Rv,mergePAH=mergePAH, $
	                ylog=ylog,xlog=xlog,yr=yr,ysty=ysty,xr=xr,xsty=xsty, $
	                donotclose=donotclose,noerrbars=noerrbars,albedo=albedo,multi=multi, $
	                _extra=_extra,help=help

;+
; NAME:
;     dustem_plot_ext
;
; PURPOSE:
;    Plots a Dustem extinction curve
;
; CATEGORY:
;    Dustem, Plotting, Low-level
;  
; CALLING SEQUENCE:
;    dustem_plot_ext,st[,/help]
;
; INPUTS:
;    st        = Dustem model output structure
;
; OPTIONAL INPUT PARAMETERS:
;    _extra    = extra parameters for the plot routine (currently not passed)
;
; OUTPUTS:
;    None
;
; OPTIONAL OUTPUT PARAMETERS:
;    None
;
; ACCEPTED KEY-WORDS:
;    help      = If set, print this help
;
; COMMON BLOCKS:
;    None
;
; SIDE EFFECTS:
;    model is plotted
;
; RESTRICTIONS:
;    The DustEMWrap idl code must be installed
;
; PROCEDURE:
;    None
;
; EXAMPLES
;    dustem_init,/wrap
;    dir_in=getenv('DUSTEM_SOFT_DIR')
;    dir=getenv('DUSTEM_RES')
;    st=dustem_read_all_res(dir_in)
;    loadct,13
;    dustem_plot_ext,st,yr=[1.e-6,1.e0],/ysty,xr=[1.,400],/xsty
;
; MODIFICATION HISTORY:
;    Written by J.-Ph. Bernard
;    Modified by VG with flags /UV,/IR
;    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_plot_ext'
  goto,the_end
ENDIF

IF not keyword_set(multi) THEN multi=0

defsysv,'!dustem_data',exists=data_exists

IF keyword_set(print_Rv) THEN BEGIN

	Vband = 0.55
	Bband = 0.44
	tauV = interpol(st.ext.ext_tot,st.ext.wav,Vband)
	tauB = interpol(st.ext.ext_tot,st.ext.wav,Bband)
	print
	print,"E(B-V) model/NH",1.086*(tauB-tauV)/1d21
	print,"Av model",1.086*tauV
	print,"Rv model = ",tauV/(tauB-tauV)
	print,"NH/Av model = ",1e21/(tauv*1.086)
    print
	IF data_exists THEN BEGIN
		tauV = interpol((*!dustem_data.ext).values,(*!dustem_data.ext).wav,Vband)
		tauB = interpol((*!dustem_data.ext).values,(*!dustem_data.ext).wav,Bband)
		print,"E(B-V) data/NH",1.086*(tauB-tauV)/1d21
		print,"Av data",1.086*tauV
		print,"Rv data = ",tauv/(tauB-tauV)
		print,"NH/Av data = ",1e21/(tauv*1.086)
        print
	ENDIF

ENDIF ELSE IF keyword_set(albedo) THEN BEGIN

	IF keyword_set(ps) THEN BEGIN
		previous_device=!d.name
   		set_plot, 'PS'
   		device, filename=ps, /color, /encapsulated
	ENDIF else BEGIN
		;set_plot,'X'
        IF keyword_set(win) THEN window,win
	ENDELSE
	
	Ngrains=n_tags(st.sed)-2

    abs_tot=st.ext.abs_grain(0)*0.
    sca_tot=st.ext.sca_grain(0)*0.
    FOR i=0L,Ngrains-1 DO BEGIN
        abs_tot=abs_tot+st.ext.abs_grain[i]
        sca_tot=sca_tot+st.ext.sca_grain[i]
    ENDFOR

    xrange=1./st.ext.wav
	xr=[0,10]
	yr=[0,1]
	xtit=textoidl('1/\lambda (\mum^{-1})')
	ytit=textoidl('albedo')
	;stop
	cgplot,xrange,/nodata,xtit=xtit,ytit=ytit,tit=tit,xlog=xlog,ylog=ylog,yr=yr,ys=ys,xr=xr,xsty=xsty
	cgoplot,xrange,sca_tot/(sca_tot+abs_tot)
	
ENDIF ELSE BEGIN

	IF multi NE 2 THEN BEGIN
		IF keyword_set(ps) THEN BEGIN
			previous_device=!d.name
   			set_plot, 'PS'
   			device, filename=ps, /color, /encapsulated
		ENDIF ELSE BEGIN
			;set_plot,'X'
        	IF keyword_set(win) THEN window,win
		ENDELSE
	ENDIF
	
	;Ngrains=n_tags(st.sed)-2
	;colors=dustem_grains_colors(Ngrains,ls,ps=ps)
	Ngrains=(*!dustem_params).Ngrains
	colors=['dark',dustem_grains_colors(Ngrains,ls,/cgplot,ps=ps)]   ;dark added because first color taken for total extinction
	use_lines=replicate(0,Ngrains)

;	stop
	ytit=textoidl('\sigma_{ext}/N_H (cm^2/H)') 
	IF NOT keyword_set(ps) THEN tit='DUSTEMWrapper extinction'
	
	abs_tot=st.ext.abs_grain(0)*0.
	sca_tot=st.ext.sca_grain(0)*0.
	FOR i=0L,Ngrains-1 DO BEGIN
  		abs_tot=abs_tot+st.ext.abs_grain(i)
  		sca_tot=sca_tot+st.ext.sca_grain(i)
	ENDFOR

	IF !dustem_show_plot EQ 2 OR multi EQ 2 THEN BEGIN
		norm = abs_tot+sca_tot
		yr=[0.,2.]
		ylog = 0
		ys = 1
	ENDIF ELSE BEGIN
		norm = abs_tot * 0. + 1.d21
		IF keyword_set(UV) THEN ylog = 0 ELSE ylog = 1
	ENDELSE
	
	;VG
	IF keyword_set(UV) THEN BEGIN
		xtit=textoidl('1/\lambda (\mum^{-1})')
        xrange=1./st.ext.wav
		xlog = 0
	ENDIF ELSE BEGIN
		xtit=textoidl('\lambda (\mum)')
        xrange=st.ext.wav
		xlog = 1
	ENDELSE
	IF multi EQ 0 THEN cgplot,xrange,/nodata,xtit=xtit,ytit=ytit,tit=tit,xlog=xlog,ylog=ylog,yr=yr,ys=ys,xr=xr,xsty=xsty
	IF multi EQ 1 THEN cgplot,xrange,/nodata,xtit='',ytit=ytit,tit=tit,xlog=xlog,ylog=ylog,yr=yr,/ys,xr=xr,xsty=xsty,position=[0.17,0.35,0.95,0.95],xtickformat='(A1)',yticks=3,yminor=10
	IF multi EQ 2 THEN cgplot,xrange,/nodata,xtit=xtit,xlog=xlog,ylog=ylog,ys=ys,xsty=xsty,ytit='Normalized',tit='',xr=xr,yr=[0,2],position=[0.17,0.14,0.95,0.35],/noerase,yticks=2,yminor=5,xticklen=0.1
	;VG
	
	;VG
	; Plot model
	FOR i=0L,Ngrains-1 DO BEGIN
		IF i LE 1 AND keyword_set(mergePAH) THEN BEGIN
  			;if i eq 0 then oplot,xrange,(st.ext.abs_grain(0)+st.ext.sca_grain(0)+st.ext.abs_grain(1)+st.ext.sca_grain(1))/norm,color=colors(1),psym=psym,line=ls(1) 
  			IF i EQ 0 THEN cgoplot,xrange,(st.ext.abs_grain(0)+st.ext.sca_grain(0)+st.ext.abs_grain(1)+st.ext.sca_grain(1))/norm,color=colors(1),psym=psym,line=ls(1) 
		ENDIF ELSE BEGIN
  			;oplot,xrange,(st.ext.abs_grain(i)+st.ext.sca_grain(i))/norm,color=colors(i+1),psym=psym,line=ls(i+1)
  			cgoplot,xrange,(st.ext.abs_grain(i)+st.ext.sca_grain(i))/norm,color=colors(i+1),psym=psym,line=ls(i+1)
		ENDELSE
	ENDFOR
	;cgoplot,xrange,(abs_tot+sca_tot)/norm,psym=psym
	
	;cgoplot,xrange,(abs_tot+sca_tot+powerlaw)/norm,psym=psym
	
	cgoplot,xrange,(st.ext.ext_tot)/norm,psym=psym
	
	
; 	; LINES OF CODE TO PLOT THE NEW ADDED PLUGINS TO THE EXTINCTION WILL HAVE TO BE ADDED HERE 
; 	
; 	cgoplot,xrange,(*(*!dustem_plugin).powerlaw)/norm,psym=psym,color='cadetblue'  
	
	
	
	
	IF !dustem_show_plot EQ 2 or multi EQ 2 THEN BEGIN
		norm = interpol(st.ext.ext_tot,st.ext.wav,(*!dustem_data.ext).wav)
	ENDIF ELSE BEGIN
		norm = st.ext.ext_tot * 0. + 1.d21
	ENDELSE
	
	; Plot data
	IF data_exists THEN BEGIN
   		IF ptr_valid(!dustem_data.ext) THEN BEGIN
      			IF keyword_set(UV) THEN xdata = 1./(*!dustem_data.ext).wav else xdata = (*!dustem_data.ext).wav
      			;if keyword_set(noerrbars) then oplot,xdata,(*!dustem_data.ext).values/norm,psym=4 $
      			IF keyword_set(noerrbars) THEN BEGIN
      				cgoplot,xdata,(*!dustem_data.ext).values/norm,psym=4
      			ENDIF ELSE BEGIN
        		    ;else oploterror,xdata,(*!dustem_data.ext).values/norm,xdata*0.,(*!dustem_data.ext).sigma/norm,psym=4
        			;oploterror,xdata,(*!dustem_data.ext).values/norm,xdata*0.,(*!dustem_data.ext).sigma/norm,psym=4
        			cgoplot,xdata,(*!dustem_data.ext).values/norm,psym=4
        			yy=(*!dustem_data.ext).values/norm
        			rms=3.*(*!dustem_data.ext).sigma/norm/2.
        			cgerrplot,xdata,yy-rms,yy+rms,color='black'
        	    ENDELSE
        		;oploterror,xdata,(*!dustem_data.ext).values/norm,xdata*0.,(*!dustem_data.ext).sigma/norm,psym=4
   		ENDIF
	ENDIF

	IF keyword_set(ps) AND NOT keyword_set(donotclose) THEN BEGIN
		device,/close
		set_plot,previous_device
		set_plot,'X'
	ENDIF

ENDELSE

the_end:

END