PRO dustem_plot_dataset,st $ ,dustem_interp $ ,dustem_spec $ ,extra_spec=extra_spec $ ,dataset=dataset $ ,refresh=refresh $ ,position=position $ ,positive_only=positive_only $ ,negative_only=negative_only $ ,_extra=_extra $ ,help=help ;+ ; NAME: ; dustem_plot_dataset ; ; PURPOSE: ; Allows the plotting of a (several) dataset(s) ; ; CATEGORY: ; DustEMWrap, Distributed, Low-level, Plotting ; ; CALLING SEQUENCE: ; dustem_plot_dataset, st, dustem_interp, dustem_spec, dataset ,extra_spec=extra_spec, refresh=refresh, position=position,positive_only=positive_only, negative_only=negative_only, _extra=_extra ; ; INPUTS: ; st = DustEM output structure ; ; INPUT and OUTPUT KEYWORDS: ; dustem_interp = dustem SED predictions - type = array or list of arrays. ; dustem_spec = dustem spectra predictions (Emission or Extinction) - type = array or list of arrays ; extra_spec = Specific to the use of polfrac that requires an extra spectrum (that of SED) - type = array or list of arrays ; dataset = Dataset(s) to be plotted - type = array. If absent, nothing gets plotted. ; position = Position(s) of the plot(s) - type = list ; positive_only = Plotting of positive data on a 'modified logarithm' axis/plot - type = Boolean array ; negative_only = Plotting of negative data on a 'modified logarithm' axis/plot - type = ; ; OUTPUTS: ; NONE ; ACCEPTED KEY-WORDS: ; help ; refresh = Plot the datasets that change after each DustEM run ; ; COMMON BLOCKS: ; None ; ; SIDE EFFECTS: ; Does a plot ; ; RESTRICTIONS: ; The DustEM fortran code must be installed ; The DustEMWrap IDL code must be installed ; ; PROCEDURES AND SUBROUTINES USED: ; ; EXAMPLES ; ; MODIFICATION HISTORY: ; Written by Ilyes Choubani 2022 ; 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_dataset' goto,the_end END ;****NB (Latest changes)****: ;Now all datasets can be plotted simultaneously ;In addition, for each dataset, the normalized plot and normal plot are plotted simultaneously ;This was not the case before. ;Since the new changes, I believe many of the plotting keywords can be removed. ;This is in part because I have added a /nodata plot at each update/refreshing step to guide the routine where to plot. ;REMOVED/OBSOLETE: kept to potentially help fix errors. ; if !run_pol then begin ; if isa(position) then begin ; if keyword_set(norm) then pospltxt = [position(0)+0.02,position(3)-0.02] else pospltxt = [position(0)+0.02,position(3)-0.03] ; endif ; endif else begin ; if isa(position) then pospltxt = [position(0)+0.02,position(3)-0.05] ;hard-coded but we can find a way ; endelse wavs=dustem_get_wavelengths() n_plgns = n_tags(*!dustem_plugin) Ngrains=(*!dustem_params).Ngrains use_cols=dustem_grains_colors(Ngrains,/cgplot) use_cols[1]='Cornflower' fact = 1.e4*(*!dustem_HCD)/(4.*!pi)/(3.e8/1.e-6/st.sed.wav)*1.e20/1.e7 ; st.sed.wav and st.polsed.wav should remain the same clrs_plgns = ['Rosy Brown','Gold','Light Coral','Slate Blue','Dark Khaki','Salmon','Dark Green'] ;FOR NOW ;NB: plugins need to have different colors for extinction because they are not the same plugins. New array required. scopes=tag_names((*!dustem_plugin)) tgnms_extra = tag_names(_extra) frmt0='(A46)' frmt1='(1E11.4)' frmt2='(10F10.2)' ; if keyword_set(refresh) then begin ; ; dustem_interp.reverse ; dustem_spec.reverse ; extra_spec.reverse ; dataset=reverse(dataset) ; position.reverse ; ; endif ;These were created to be able to utilize the existing structure of this procedure ;and to plot multiple datasets at once... ;The routine also allows to plot a single dataset but this will have to be set in the main plotting routine which is dustermwrap_plot. ;The following variables are created because I wanted to keep using the same variable names throughout the lines of the code. ;I can replace them in the future. if keyword_set(dustem_interp) then dustem_interp_sv = dustem_interp else dustem_interp_sv = list() if keyword_set(dustem_spec) then dustem_spec_sv = dustem_spec else dustem_spec_sv = list() if keyword_set(extra_spec) then extra_spec_sv = extra_spec else extra_spec_sv = list();assuming this is always called if keyword_set(position) then position_sv=position else position_sv = list() ;temporary solution. I'll clean up the code in the future positive_only=1 negative_only=1 ;Generating a fake vector that extends beyond the DustEM/DustEmWrap wavelength range (for display purposes only) vectw=DINDGEN(1001)*(alog10(1E7) - alog10(1E5))/(1000 - 1L) + alog10(1E5) vectw=10^vectw[1:*] vectw=[wavs,vectw] vectx=vectw*0+1 if keyword_set(dataset) then begin ; for ss=0L,n_elements(dataset)-1 do begin if n_elements(dustem_interp_sv) NE 0 then begin if typename(dustem_interp_sv) EQ 'LIST' then dustem_interp = dustem_interp_sv[ss] else dustem_interp = dustem_interp_sv endif if n_elements(dustem_spec_sv) NE 0 then begin if typename(dustem_spec_sv) EQ 'LIST' then dustem_spec = dustem_spec_sv[ss] else dustem_spec = dustem_spec_sv endif if n_elements(extra_spec_sv) NE 0 then begin if n_elements(extra_spec_sv[ss]) NE 1 then extra_spec = extra_spec_sv[ss] ;assuming this is always called endif if n_elements(position_sv) NE 0 then begin if (size(position_sv(0)))[2] NE 11 then position=position_sv else position=position_sv[ss] if n_elements(position) ne 1 then begin ;eq 1 is for datasets that don't have normalized curves. ie: polfrac and psi. if !run_pol then begin pospltxt = [(position[0])(0)+0.02,(position[0])(3)-0.03] pospltxt_n = [(position[1])(0)+0.02,(position[1])(3)-0.02];created this new array so that the normalized plot is automatically plotted for each dataset. endif else begin pospltxt = [(position[0])(0)+0.02,(position[0])(3)-0.05] pospltxt_n = [(position[1])(0)+0.02,(position[1])(3)-0.05] endelse endif else pospltxt = [(position[0])(0)+0.02,(position[0])(3)-0.05]; endif Case strupcase(dataset[ss]) of 'SED': begin ;SETTING THE PLOT RANGE xr = !dustem_plot_range.sed.xr yr = !dustem_plot_range.sed.yr idx_filt=where((*(*!dustem_data).sed).filt_names NE 'SPECTRUM',ct_filt) idx_spec=where((*(*!dustem_data).sed).filt_names EQ 'SPECTRUM',ct_spec) ;DISPLAYING OF NORMALIZED PLOT HERE IS DONE BEFORE THE PLOTTING OF THE NORMAL PLOT ;THIS SHOULD NOT INTERFERE WITH THE CODE. If n_elements(position) GT 1 THEN BEGIN ;Making the plotting of the normalized data optional because so far it was forced. ;REFRESHING OF NORMALIZED PLOT if keyword_set(refresh) then begin ;The data points in the plot that are being refreshed ;making sure we're on the plot we're consider (since cgwindow doesn't allow us to do what we want anyway...) cgplot,vectw,vectx,/nodata,/xlog,xs=9,ys=9,pos=position[1],noerase=1,ytickformat='(A1)',xtickformat='(A1)',color='Black',xr=xr,xtit='',yticks=0,xticks=0,xticklen=0.0,yticklen=0.0,yr=[0.0,2.0],ymino=2,charsize=1.0 IF ct_spec NE 0 THEN BEGIN xx=((*(*!dustem_data).sed).wav)[idx_spec] yy=dustem_interp[idx_spec] rms=2.*((*(*!dustem_data).sed).sigma)(idx_spec)/2. cgoplot,xx,((*(*!dustem_data).sed).values)[idx_spec]/yy,color='Powder Blue',psym=16,syms=0.8,noerase=1,pos=position[1];,noclip=0 cgerrplot,((*(*!dustem_data).sed).wav)(idx_spec),(((*(*!dustem_data).sed).values)[idx_spec]-rms)/yy,(((*(*!dustem_data).sed).values)[idx_spec]+rms)/yy,color='Powder Blue';,noclip=0 ENDIF IF ct_filt NE 0 THEN BEGIN xx=((*(*!dustem_data).sed).wav)[idx_filt] yy=dustem_interp[idx_filt] rms=2.*((*(*!dustem_data).sed).sigma)(idx_filt)/2. cgoplot,xx,((*(*!dustem_data).sed).values)[idx_filt]/yy,psym=16,color='Dodger Blue',syms=0.8,noerase=1,pos=position[1];,noclip=0 cgerrplot,((*(*!dustem_data).sed).wav)(idx_filt),(((*(*!dustem_data).sed).values)[idx_filt]-rms)/yy,(((*(*!dustem_data).sed).values)[idx_filt]+rms)/yy,color='Dodger Blue';,noclip=0;,/overplot ENDIF endif ;PLOTTING OF FROZEN PART OF NORMALIZED PLOT if not keyword_set(refresh) then begin ;This used to be an ELSE condition before. Made it like so for testing. xtit=textoidl('\lambda (\mum)') if !run_pol then begin xtit = '' xtickformat='(A1)' endif else xtickformat='(F10.2)' ;MAYBE YOU'LL CHANGE THIS FORMAT TO EXPONENTIAL NOTATION cgplot,vectw,vectx,/xlog,/ys,xs=1,pos=position[1],noerase=1,xtickformat=xtickformat,color='Black',xr=xr,xtit=xtit,yr=[0.0,2.0],yticks=2,ymino=2,xticklen=0.1,ytickformat='(F6.2)',charsize=1.0 xyouts,pospltxt_n[0],pospltxt_n[1],textoidl('norm'),color=0,/normal,charsize=1.1 ;endelse endif ENDIF ;REFRESHING OF NORMAL PLOT if keyword_set(refresh) then begin ;The data points in the plot are being refreshed ;stop ;making sure we're on the plot we're consider (since cgwindow doesn't allow us to do what we want anyway...) cgplot,vectw,vectx,/nodata,/xlog,/ylog,xs=8,ys=8,pos=position[0],noerase=1,ytickformat='(A1)',xtickformat='(A1)',color='Black',xr=xr,xtit='',yr=yr,yticks=0,xticks=0,xticklen=0.0,yticklen=0.0,charsize=1.0 ;stop ;Plotting of the spectra of the dust species FOR i=0L,Ngrains-1 DO BEGIN cgoplot,st.sed.wav,st.sed.(i+1)*fact,color=use_cols[i],pos=position[0],noerase=1 ENDFOR ;stop ;Plotting of the plugins. for i=0L,n_plgns-1 do begin if isa((*!dustem_plugin).(0).spec) then begin IF total(strsplit((*(*!dustem_plugin).(i).scope),'+',/extract) EQ 'ADD_SED') THEN begin cgoplot,st.sed.wav,((*(*!dustem_plugin).(i).spec)[*,0]),color=clrs_plgns[i],pos=position[0],noerase=1,linestyle=2 ENDIF endif endfor ;PLotting of the interpolates corresponding to spectrum and filter points IF ct_spec NE 0 THEN BEGIN xx=((*(*!dustem_data).sed).wav)[idx_spec] yy=dustem_interp[idx_spec] cgoplot,xx,yy,color='Indian Red',pos=position[0],psym=7,syms=1,noerase=1 ENDIF IF ct_filt NE 0 THEN BEGIN xx=((*(*!dustem_data).sed).wav)[idx_filt] yy=dustem_interp[idx_filt] ;stop cgoplot,xx,yy,color='red',pos=position[0],psym=6,syms=2,noerase=1 ENDIF ;Plotting of the total dust emission spectrum cgoplot,st.sed.wav,dustem_spec,pos=position[0],noerase=1,/xlog,/ys,/xs,/ylog endif ;else begin ;The data points in the plot that remain unchanged. ;stop if not keyword_set(refresh) then begin ;Spectrum points are treated before for plotting reasons. if ct_spec ne 0 then begin ;Plotting of spectrum data points (to be fitted) cgplot,((*(*!dustem_data).sed).wav)(idx_spec),((*(*!dustem_data).sed).values)(idx_spec),/ylog,/xlog,/ys,xs=9,pos=position[0],noerase=1,xtit=' ',charsize=1.15,xtickformat='(A1)',color='Powder Blue',xr=xr,yr=yr,psym=16,syms=0.8,ytickformat='dstmwrp_exp' ;Plotting of the spectrum error points rms=2.*((*(*!dustem_data).sed).sigma)(idx_spec)/2. cgerrplot,((*(*!dustem_data).sed).wav)(idx_spec),((*(*!dustem_data).sed).values)(idx_spec)-rms,((*(*!dustem_data).sed).values)(idx_spec)+rms,color='Powder Blue' endif if ct_filt ne 0 then begin ;Plotting of filter data points (to be fitted) + testing for prior plotting if ct_spec ne 0 then cgoplot,((*(*!dustem_data).sed).wav)(idx_filt),((*(*!dustem_data).sed).values)(idx_filt),charsize=1.15,color='Dodger Blue',psym=16,syms=0.8,pos=position[0],/ys,xs=9,noerase=1,xtickformat='(A1)',xr=xr,yr=yr,ytickformat='dstmwrp_exp',/ylog,/xlog else $ cgplot,((*(*!dustem_data).sed).wav)(idx_filt),((*(*!dustem_data).sed).values)(idx_filt),charsize=1.15,color='Dodger Blue',psym=16,syms=0.8,pos=position[0],/ys,xs=9,noerase=1,xtickformat='(A1)',xtit=' ',xr=xr,yr=yr,ytickformat='dstmwrp_exp',/ylog,/xlog ;Plotting of the filter error points rms=2.*((*(*!dustem_data).sed).sigma)(idx_filt)/2.;/dustem_sed(idx_filt) cgerrplot,((*(*!dustem_data).sed).wav)(idx_filt),((*(*!dustem_data).sed).values)(idx_filt)-rms,((*(*!dustem_data).sed).values)(idx_filt)+rms,color='Dodger Blue' endif ;Plotting of frequency axis ;what are these? tests? ;save_x=!x & save_y=!y & save_z=!z & save_p=!p & save_d=!d ;save_scaling=1 use_xrange=((!const.c*1E6/(xr))*1E-9) ;order=sort(use_xrange) ;use_xrange=use_xrange[order] ;print,use_xrange IF !dustemwrap_which_language NE 'fawlty' THEN BEGIN axis, xaxis=1, xlog=1, xs=1, xminor=10, xticklen=0.05, xrange=use_xrange,charsize=1.15,xtitle=textoidl('\nu (GHz)'),color=0 ENDIF xyouts,pospltxt[0],pospltxt[1],textoidl('I_{\nu} (MJy/sr)'),color=0,/normal,charsize=1.3;,charthick=2.0 ;Locating all the hidden data points (spectrum+filter) match2,((*(*!dustem_data).sed).wav),((*(*!dustem_show).sed).wav),show_sedpts,fit_sedpts ;only show_sedpts is needed idx_rmv_sed=where(fit_sedpts eq -1, ct_hdnpts) ; indices of the points to hide ;Locating the hidden spectrum and filter data points idx_filt_hdn = where((((*(*!dustem_show).sed).filt_names))(idx_rmv_sed) NE 'SPECTRUM',ct_filt_hdn) idx_spec_hdn = where(((*(*!dustem_show).sed).filt_names)(idx_rmv_sed) EQ 'SPECTRUM',ct_spec_hdn) if ct_hdnpts ne 0 then begin ;Hidden data points are present if ct_spec_hdn ne 0 then begin ;Plotting of hidden spectrum data points cgoplot,(((*(*!dustem_show).sed).wav)[idx_rmv_sed])(idx_spec_hdn),(((*(*!dustem_show).sed).values)[idx_rmv_sed])(idx_spec_hdn),pos=position[0],/ylog,/xlog,/ys,xs=9,noerase=1,charsize=1.15,xtickformat='(A1)',color='Black',xr=xr,yr=yr,psym=16,syms=0.8 ;Plotting of hidden spectrum error points rms=2.*(((*(*!dustem_show).sed).sigma)[idx_rmv_sed])(idx_spec_hdn)/2. cgerrplot,(((*(*!dustem_show).sed).wav)[idx_rmv_sed])(idx_spec_hdn),(((*(*!dustem_show).sed).values)[idx_rmv_sed])(idx_spec_hdn)-rms,(((*(*!dustem_show).sed).values)[idx_rmv_sed])(idx_spec_hdn)+rms,color='Black' endif if ct_filt_hdn then begin ;Plotting of hidden filter data points cgoplot,(((*(*!dustem_show).sed).wav)[idx_rmv_sed])(idx_filt_hdn),(((*(*!dustem_show).sed).values)[idx_rmv_sed])(idx_filt_hdn),pos=position[0],/ylog,/xlog,/ys,xs=9,noerase=1,charsize=1.15,xtickformat='(A1)',color='Black',xr=xr,yr=yr,psym=16,syms=0.8 ;Plotting of hidden filter error point rms=2.*(((*(*!dustem_show).sed).sigma)[idx_rmv_sed])(idx_filt_hdn)/2. cgerrplot,(((*(*!dustem_show).sed).wav)[idx_rmv_sed])(idx_filt_hdn),(((*(*!dustem_show).sed).values)[idx_rmv_sed])(idx_filt_hdn)-rms,(((*(*!dustem_show).sed).values)[idx_rmv_sed])(idx_filt_hdn)+rms,color='Black' endif endif endif end ;DONE BUT NOT TESTED 'EXT': begin ;SETTING THE PLOT RANGE xr = !dustem_plot_range.ext.xr yr = !dustem_plot_range.ext.yr idx_filt=where((*(*!dustem_data).ext).filt_names NE 'SPECTRUM',ct_filt) idx_spec=where((*(*!dustem_data).ext).filt_names EQ 'SPECTRUM',ct_spec) If n_elements(position) GT 1 THEN BEGIN ;Making the plotting of the normalized data optional because so far it was forced. ;PLOTTING OF NORMALIZED PLOT ;REFRESHING OF NORMALIZED PLOT if keyword_set(refresh) then begin ;The data points in the plot that are being refreshed ;making sure we're in the normalized plot so that overplotting happens here cgplot,1/vectw,vectx,/xlog,/nodata,ys=8,xs=8,pos=position[1],noerase=1,xtickformat='(A1)',ytickformat='(A1)',color='Black',xr=xr,xtit='',yr=[0.0,2.0],yticks=2,ymino=2,xticklen=0.1,charsize=1.0 IF ct_spec NE 0 THEN BEGIN xx=((*(*!dustem_data).ext).wav)[idx_spec] yy=dustem_interp[idx_spec] rms=2.*((*(*!dustem_data).ext).sigma)(idx_spec)/2. indzero = where(yy NE 0, ct_zero) IF ct_zero NE 0 THEN BEGIN cgoplot,(1/xx)[indzero],(((*(*!dustem_data).ext).values)[idx_spec])[indzero]/yy[indzero],color='Powder Blue',psym=16,syms=0.8,noerase=1,pos=position[1] cgerrplot,(1/((*(*!dustem_data).ext).wav)(idx_spec))[indzero],((((*(*!dustem_data).ext).values)[idx_spec])[indzero]-rms[indzero])/yy[indzero],((((*(*!dustem_data).ext).values)[idx_spec])[indzero]+rms[indzero])/yy[indzero],color='Powder Blue' ENDIF ENDIF IF ct_filt NE 0 THEN BEGIN ; There are no filter points for now... xx=((*(*!dustem_data).ext).wav)[idx_filt] yy=dustem_interp[idx_filt] rms=2.*((*(*!dustem_data).ext).sigma)(idx_filt)/2. indzero = where(yy NE 0, ct_zero) IF ct_zero NE 0 THEN BEGIN cgoplot,(1/xx)[indzero],(((*(*!dustem_data).ext).values)[idx_filt])[indzero]/yy[indzero],psym=16,color='Dodger Blue',syms=0.8,noerase=1,pos=position[1] cgerrplot,(1/((*(*!dustem_data).ext).wav)(idx_filt))[indzero],((((*(*!dustem_data).ext).values)[idx_filt])[indzero]-rms[indzero])/yy[indzero],((((*(*!dustem_data).ext).values)[idx_filt])[indzero]+rms[indzero])/yy[indzero],color='Dodger Blue';,/overplot ENDIF ENDIF endif ;plotting of frozen data in polarization plot if not keyword_set(refresh) then begin xtit=textoidl('1/\lambda (\mum^{-1})') if !run_pol then begin xtit = '' xtickformat='(A1)' endif else xtickformat='(F10.2)' ;MAYBE YOU'LL CHANGE THIS FORMAT TO EXPONENTIAL NOTATION cgplot,1/vectw,vectx,/xlog,/ys,xs=1,pos=position[1],noerase=1,xtickformat=xtickformat,color='Black',xr=xr,xtit=xtit,yr=[0.0,2.0],yticks=2,ymino=2,xticklen=0.1,ytickformat='(F6.2)',charsize=1.0 xyouts,pospltxt_n[0],pospltxt_n[1],textoidl('norm'),color=0,/normal,charsize=1.1 endif ENDIF ;PLOTTING OF NORMAL PLOT ;REFRESHING OF NORMAL PLOT if keyword_set(refresh) then begin ;The data points in the plot are being refreshed ;making sure we're in the normal plot so that overplotting happens here cgplot,1/vectw,vectx,/xlog,/ylog,/nodata,ys=8,xs=8,pos=position[0],noerase=1,xtickformat='(A1)',ytickformat='(A1)',color='Black',xr=xr,xtit='',yr=yr,yticks=2,ymino=2,xticklen=0.1,charsize=1.0 ;Plotting of the spectra of the dust species FOR i=0L,Ngrains-1 DO BEGIN cgoplot,1/st.ext.wav,transpose((st.ext.(1))[i,*]+(st.ext.(2))[i,*])*(*!dustem_HCD)/1.0e21,color=use_cols[i],pos=position[0],noerase=1 ENDFOR ;Plotting of the plugins. for i=0L,n_plgns-1 do begin if isa((*!dustem_plugin).(0).spec) then begin IF total(strsplit((*(*!dustem_plugin).(i).scope),'+',/extract) EQ 'ADD_EXT') THEN begin cgoplot,1/st.ext.wav,((*(*!dustem_plugin).(i).spec)[*,0]),color=clrs_plgns[i],pos=position[0],noerase=1,linestyle=2 ENDIF endif endfor ;PLotting of the interpolates corresponding to spectrum and filter points IF ct_spec NE 0 THEN BEGIN xx=((*(*!dustem_data).ext).wav)[idx_spec] yy=dustem_interp[idx_spec] cgoplot,1/xx,yy,color='Indian Red',pos=position[0],psym=7,syms=1,noerase=1 ENDIF IF ct_filt NE 0 THEN BEGIN xx=((*(*!dustem_data).ext).wav)[idx_filt] yy=dustem_interp[idx_filt] cgoplot,1/xx,yy,color='red',pos=position[0],psym=6,syms=2,noerase=1 ENDIF ;Plotting of the total dust emission spectrum cgoplot,1/st.ext.wav,dustem_spec,pos=position[0],noerase=1,/xlog,/ys,/xs,/ylog endif ;Plotting of the frozen data in the normal plot if not keyword_set(refresh) then begin ;Spectrum points are treated before for plotting reasons. if ct_spec ne 0 then begin ;Plotting of spectrum data points (to be fitted) cgplot,1/((*(*!dustem_data).ext).wav)(idx_spec),((*(*!dustem_data).ext).values)(idx_spec),/ylog,/xlog,ys=8,xs=8,pos=position[0],noerase=1,xtit=' ',charsize=1.15,xtickformat='(A1)',color='Powder Blue',xr=xr,yr=yr,psym=16,syms=0.8,ytickformat='dstmwrp_exp' ;Plotting of the spectrum error points rms=2.*((*(*!dustem_data).ext).sigma)(idx_spec)/2. cgerrplot,1/((*(*!dustem_data).ext).wav)(idx_spec),((*(*!dustem_data).ext).values)(idx_spec)-rms,((*(*!dustem_data).ext).values)(idx_spec)+rms,color='Powder Blue' endif if ct_filt ne 0 then begin ;Plotting of filter data points (to be fitted) + testing for prior plotting if ct_spec ne 0 then cgoplot,1/((*(*!dustem_data).ext).wav)(idx_filt),((*(*!dustem_data).ext).values)(idx_filt),charsize=1.15,color='Dodger Blue',psym=16,syms=0.8,pos=position[0],/ys,xs=9,noerase=1,xtickformat='(A1)',xr=xr,yr=yr,ytickformat='dstmwrp_exp',/ylog,/xlog else $ cgplot,1/((*(*!dustem_data).ext).wav)(idx_filt),((*(*!dustem_data).ext).values)(idx_filt),charsize=1.15,color='Dodger Blue',psym=16,syms=0.8,pos=position[0],ys=8,xs=8,noerase=1,xtickformat='(A1)',xtit=' ',xr=xr,yr=yr,ytickformat='dstmwrp_exp',/ylog,/xlog ;Plotting of the filter error points rms=2.*((*(*!dustem_data).ext).sigma)(idx_filt)/2.;/dustem_sed(idx_filt) cgerrplot,1/((*(*!dustem_data).ext).wav)(idx_filt),((*(*!dustem_data).ext).values)(idx_filt)-rms,((*(*!dustem_data).ext).values)(idx_filt)+rms,color='Dodger Blue' endif ;Plotting of frequency axis IF !dustemwrap_which_language NE 'fawlty' THEN BEGIN axis, xaxis=1, xlog=1, xs=1, xminor=10, xticklen=0.05, xrange=((!const.c*1E6*xr)*1E-9),charsize=1.15,xtitle=textoidl('\nu (GHz)'),color=0 ENDIF xyouts,pospltxt[0],pospltxt[1],textoidl('\tau_{EXT}'),color=0,/normal,charsize=1.3;,charthick=2.0 ;Locating all the hidden data points (spectrum+filter) match2,((*(*!dustem_data).ext).wav),((*(*!dustem_show).ext).wav),show_sedpts,fit_sedpts ;only show_sedpts is needed idx_rmv_sed=where(fit_sedpts eq -1, ct_hdnpts) ; indices of the points to hide ;Locating the hidden spectrum and filter data points idx_filt_hdn = where((((*(*!dustem_show).ext).filt_names))(idx_rmv_sed) NE 'SPECTRUM',ct_filt_hdn) idx_spec_hdn = where(((*(*!dustem_show).ext).filt_names)(idx_rmv_sed) EQ 'SPECTRUM',ct_spec_hdn) if ct_hdnpts ne 0 then begin ;Hidden data points are present ;stop if ct_spec_hdn ne 0 then begin ;Plotting of hidden spectrum data points cgoplot,1/(((*(*!dustem_show).ext).wav)[idx_rmv_sed])(idx_spec_hdn),(((*(*!dustem_show).ext).values)[idx_rmv_sed])(idx_spec_hdn),pos=position[0],/ylog,/xlog,ys=8,xs=8,noerase=1,charsize=1.15,xtickformat='(A1)',color='Black',xr=xr,yr=yr,psym=16,syms=0.8 ;Plotting of hidden spectrum error points rms=2.*(((*(*!dustem_show).ext).sigma)[idx_rmv_sed])(idx_spec_hdn)/2. cgerrplot,1/(((*(*!dustem_show).ext).wav)[idx_rmv_sed])(idx_spec_hdn),(((*(*!dustem_show).ext).values)[idx_rmv_sed])(idx_spec_hdn)-rms,(((*(*!dustem_show).ext).values)[idx_rmv_sed])(idx_spec_hdn)+rms,color='Black' endif if ct_filt_hdn then begin ;Plotting of hidden filter data points cgoplot,1/(((*(*!dustem_show).ext).wav)[idx_rmv_sed])(idx_filt_hdn),(((*(*!dustem_show).ext).values)[idx_rmv_sed])(idx_filt_hdn),pos=position[0],/ylog,/xlog,ys=8,xs=8,noerase=1,charsize=1.15,xtickformat='(A1)',color='Black',xr=xr,yr=yr,psym=16,syms=0.8 ;Plotting of hidden filter error point rms=2.*(((*(*!dustem_show).ext).sigma)[idx_rmv_sed])(idx_filt_hdn)/2. cgerrplot,1/(((*(*!dustem_show).ext).wav)[idx_rmv_sed])(idx_filt_hdn),(((*(*!dustem_show).ext).values)[idx_rmv_sed])(idx_filt_hdn)-rms,(((*(*!dustem_show).ext).values)[idx_rmv_sed])(idx_filt_hdn)+rms,color='Black' endif endif endif end ;DONE BUT NOT TESTED 'POLEXT': begin ;SETTING THE PLOT RANGE xr = !dustem_plot_range.polext.xr yr = !dustem_plot_range.polext.yr idx_filt=where((*(*!dustem_data).polext).filt_names NE 'SPECTRUM',ct_filt) idx_spec=where((*(*!dustem_data).polext).filt_names EQ 'SPECTRUM',ct_spec) If n_elements(position) GT 1 THEN BEGIN ;Plotting of refreshed data in normalized plot if keyword_set(refresh) then begin ;The data points in the plot that are being refreshed ;Making sure we're placed in the normalized plot cgplot,1/vectw,vectx,/xlog,/nodata,/ys,xs=1,pos=position[1],noerase=1,xtickformat='(A1)',ytickformat='(A1)',color='Black',xr=xr,xtit='',yr=[0.0,2.0],yticks=2,ymino=2,xticklen=0.1,charsize=1.0 IF ct_spec NE 0 THEN BEGIN xx=((*(*!dustem_data).polext).wav)[idx_spec] yy=dustem_interp[idx_spec] rms=2.*((*(*!dustem_data).polext).sigma)(idx_spec)/2. indzero = where(yy NE 0, ct_zero) IF ct_zero NE 0 THEN BEGIN cgoplot,(1/xx)[indzero],(((*(*!dustem_data).polext).values)[idx_spec])[indzero]/yy[indzero],color='Powder Blue',psym=16,syms=0.8,noerase=1,pos=position[1] cgerrplot,(1/((*(*!dustem_data).polext).wav)(idx_spec))[indzero],((((*(*!dustem_data).polext).values)[idx_spec])[indzero]-rms[indzero])/yy[indzero],((((*(*!dustem_data).polext).values)[idx_spec])[indzero]+rms[indzero])/yy[indzero],color='Powder Blue' ENDIF ENDIF IF ct_filt NE 0 THEN BEGIN xx=((*(*!dustem_data).polext).wav)[idx_filt] yy=dustem_interp[idx_filt] rms=2.*((*(*!dustem_data).polext).sigma)(idx_filt)/2. indzero = where(yy NE 0, ct_zero) IF ct_zero NE 0 THEN BEGIN cgoplot,(1/xx)[indzero],(((*(*!dustem_data).polext).values)[idx_filt])[indzero]/yy[indzero],psym=16,color='Dodger Blue',syms=0.8,noerase=1,pos=position[1] cgerrplot,(1/((*(*!dustem_data).polext).wav)(idx_filt))[indzero],((((*(*!dustem_data).polext).values)[idx_filt])[indzero]-rms[indzero])/yy[indzero],((((*(*!dustem_data).polext).values)[idx_filt])[indzero]+rms[indzero])/yy[indzero],color='Dodger Blue' ENDIF ENDIF ;Plotting of frozen data in normalized plot endif else begin xtit=textoidl('1/\lambda (\mum^{-1})') if !run_pol then xtit = '' cgplot,1/vectw,vectx,/xlog,/ys,xs=1,pos=position[1],noerase=1,xtickformat='(A1)',color='Black',xr=xr,xtit=xtit,yr=[0.0,2.0],yticks=2,ymino=2,xticklen=0.1,ytickformat='(F6.2)',charsize=1.0 xyouts,pospltxt_n[0],pospltxt_n[1],textoidl('norm'),color=0,/normal,charsize=1.1 endelse ENDIF ;Plotting of refreshed data in normal plot if keyword_set(refresh) then begin ;The data points in the plot are being refreshed ;Making sure we're placed in the normal plot cgplot,1/vectw,vectx,/nodata,/xlog,/ylog,/ys,xs=1,pos=position[0],noerase=1,xtickformat='(A1)',ytickformat='(A1)',color='Black',xr=xr,xtit='',yr=yr,yticks=2,ymino=2,xticklen=0.1,charsize=1.0 ;Plotting of the spectra of the dust species FOR i=0L,Ngrains-1 DO BEGIN vecto = transpose(((st.polext.(1))[i,*]+(st.polext.(2))[i,*])) cgoplot,1/st.polext.wav,vecto*(*!dustem_HCD)/1.0e21,color=use_cols[i],pos=position[0],noerase=1 ENDFOR ;stop ;Plotting of the plugins. for i=0L,n_plgns-1 do begin If isa((*!dustem_plugin).(0).spec) then begin IF total(strsplit((*(*!dustem_plugin).(i).scope),'+',/extract) EQ 'ADD_POLEXT') THEN begin cgoplot,1/st.polext.wav,sqrt(((*(*!dustem_plugin).(i).spec)[*,1])^2+((*(*!dustem_plugin).(i).spec)[*,2])^2),color=clrs_plgns[i],pos=position[0],noerase=1,linestyle=2 ENDIF endif endfor ;PLotting of the interpolates corresponding to spectrum and filter points IF ct_spec NE 0 THEN BEGIN xx=((*(*!dustem_data).polext).wav)[idx_spec] yy=dustem_interp[idx_spec] cgoplot,1/xx,yy,color='Indian Red',pos=position[0],psym=7,syms=2,noerase=1 ENDIF IF ct_filt NE 0 THEN BEGIN xx=((*(*!dustem_data).polext).wav)[idx_filt] yy=dustem_interp[idx_filt] cgoplot,1/xx,yy,color='red',pos=position[0],psym=6,syms=2,noerase=1 ENDIF ;Plotting of the total dust emission spectru cgoplot,1/st.polext.wav,dustem_spec,pos=position[0],noerase=1,/xlog,/ys,/xs,/ylog ;Plotting of frozen data in normal plot endif else begin ;Spectrum points are treated before for plotting reasons. if ct_spec ne 0 then begin ;Plotting of spectrum data points (to be fitted) cgplot,1/((*(*!dustem_data).polext).wav)(idx_spec),((*(*!dustem_data).polext).values)(idx_spec),/ylog,/xlog,/ys,xs=9,pos=position[0],noerase=1,xtit=' ',charsize=1.15,xtickformat='(A1)',color='Powder Blue',xr=xr,yr=yr,psym=8,syms=0.8,ytickformat='dstmwrp_exp' ;Plotting of the spectrum error points rms=2.*((*(*!dustem_data).polext).sigma)(idx_spec)/2. cgerrplot,1/((*(*!dustem_data).polext).wav)(idx_spec),((*(*!dustem_data).polext).values)(idx_spec)-rms,((*(*!dustem_data).polext).values)(idx_spec)+rms,color='Powder Blue' endif if ct_filt ne 0 then begin plotsym,0,/fill ;Plotting of filter data points (to be fitted) + testing for prior plotting if ct_spec ne 0 then cgoplot,1/((*(*!dustem_data).polext).wav)(idx_filt),((*(*!dustem_data).polext).values)(idx_filt),charsize=1.15,color='Dodger Blue',psym=8,syms=0.8,pos=position[0],/ys,xs=9,noerase=1,xtickformat='(A1)',xr=xr,yr=yr,ytickformat='dstmwrp_exp',/ylog,/xlog else $ cgplot,1/((*(*!dustem_data).polext).wav)(idx_filt),((*(*!dustem_data).polext).values)(idx_filt),charsize=1.15,color='Dodger Blue',psym=8,syms=0.8,pos=position[0],/ys,xs=9,noerase=1,xtickformat='(A1)',xtit=' ',xr=xr,yr=yr,ytickformat='dstmwrp_exp',/ylog,/xlog ;Plotting of the filter error points rms=2.*((*(*!dustem_data).polext).sigma)(idx_filt)/2.;/dustem_polsed(idx_filt) cgerrplot,1/((*(*!dustem_data).polext).wav)(idx_filt),((*(*!dustem_data).polext).values)(idx_filt)-rms,((*(*!dustem_data).polext).values)(idx_filt)+rms,color='Dodger Blue' endif ;Plotting of frequency axis IF !dustemwrap_which_language NE 'fawlty' THEN BEGIN axis, xaxis=1, xlog=1, xs=1, xminor=10, xticklen=0.05, xrange=((!const.c*1E6*xr)*1E-9),charsize=1.15,xtitle=textoidl('\nu (GHz)'),color=0 ENDIF xyouts,pospltxt[0],pospltxt[1],textoidl('\tau_{PEXT}'),color=0,/normal,charsize=1.3;,charthick=2.0 ;Locating all the hidden data points (spectrum+filter) match2,((*(*!dustem_data).polext).wav),((*(*!dustem_show).polext).wav),show_polsedpts,fit_polsedpts ;only show_polsedpts is needed idx_rmv_polsed=where(fit_polsedpts eq -1, ct_hdnpts) ; indices of the points to hide - not renaming this and keeping the polsed notation ;Locating the hidden spectrum and filter data points idx_filt_hdn = where((((*(*!dustem_show).polext).filt_names))(idx_rmv_polsed) NE 'SPECTRUM',ct_filt_hdn) idx_spec_hdn = where(((*(*!dustem_show).polext).filt_names)(idx_rmv_polsed) EQ 'SPECTRUM',ct_spec_hdn) ;stop if ct_hdnpts ne 0 then begin ;Hidden data points are present ;stop if ct_spec_hdn ne 0 then begin ;Plotting of hidden spectrum data points cgoplot,1/(((*(*!dustem_show).polext).wav)[idx_rmv_polsed])(idx_spec_hdn),(((*(*!dustem_show).polext).values)[idx_rmv_polsed])(idx_spec_hdn),pos=position[0],/ylog,/xlog,/ys,xs=9,noerase=1,charsize=1.15,xtickformat='(A1)',color='Black',xr=xr,yr=yr,psym=8,syms=0.8 ;Plotting of hidden spectrum error points rms=2.*(((*(*!dustem_show).polext).sigma)[idx_rmv_polsed])(idx_spec_hdn)/2. cgerrplot,1/(((*(*!dustem_show).polext).wav)[idx_rmv_polsed])(idx_spec_hdn),(((*(*!dustem_show).polext).values)[idx_rmv_polsed])(idx_spec_hdn)-rms,(((*(*!dustem_show).polext).values)[idx_rmv_polsed])(idx_spec_hdn)+rms,color='Black' endif if ct_filt_hdn ne 0 then begin ;Plotting of hidden filter data points cgoplot,1/(((*(*!dustem_show).polext).wav)[idx_rmv_polsed])(idx_filt_hdn),(((*(*!dustem_show).polext).values)[idx_rmv_polsed])(idx_filt_hdn),pos=position[0],/ylog,/xlog,/ys,xs=9,noerase=1,charsize=1.15,xtickformat='(A1)',color='Black',xr=xr,yr=yr,psym=8,syms=0.8 ;Plotting of hidden filter error point rms=2.*(((*(*!dustem_show).polext).sigma)[idx_rmv_polsed])(idx_filt_hdn)/2. cgerrplot,1/(((*(*!dustem_show).polext).wav)[idx_rmv_polsed])(idx_filt_hdn),(((*(*!dustem_show).polext).values)[idx_rmv_polsed])(idx_filt_hdn)-rms,(((*(*!dustem_show).polext).values)[idx_rmv_polsed])(idx_filt_hdn)+rms,color='Black' endif endif endelse end ;Done but not tested. 'POLSED': begin ;SETTING THE PLOT RANGE xr = !dustem_plot_range.polsed.xr yr = !dustem_plot_range.polsed.yr idx_filt=where((*(*!dustem_data).polsed).filt_names NE 'SPECTRUM',ct_filt) idx_spec=where((*(*!dustem_data).polsed).filt_names EQ 'SPECTRUM',ct_spec) If n_elements(position) GT 1 THEN BEGIN ;Refreshing of normalized plot if keyword_set(refresh) then begin ;The data points in the plot that are being refreshed ;making sure we're in the normalized plot cgplot,vectw,vectx,/nodata,/xlog,xs=5,ys=5,pos=position[1],noerase=1,xtickformat='(A1)',ytickformat='(A1)',color='Black',xr=xr,xtit='',yr=[0.0,2.0],yticks=2,ymino=2,xticklen=0.1,charsize=1.0 ;I think the fact we use the position keyword here might mean we can omit it in the following lines but I haven't tried removing it yet. IF ct_spec NE 0 THEN BEGIN xx=((*(*!dustem_data).polsed).wav)[idx_spec] yy=dustem_interp[idx_spec] rms=2.*((*(*!dustem_data).polsed).sigma)(idx_spec)/2. indzero = where(yy NE 0, ct_zero) IF ct_zero NE 0 THEN BEGIN cgoplot,xx[indzero],(((*(*!dustem_data).polsed).values)[idx_spec])[indzero]/yy[indzero],color='Powder Blue',psym=16,syms=0.8,noerase=1,pos=position[1] cgerrplot,(((*(*!dustem_data).polsed).wav)(idx_spec))[indzero],((((*(*!dustem_data).polsed).values)[idx_spec])[indzero]-rms[indzero])/yy[indzero],((((*(*!dustem_data).polsed).values)[idx_spec])[indzero]+rms[indzero])/yy[indzero],color='Powder Blue' ENDIF ENDIF IF ct_filt NE 0 THEN BEGIN xx=((*(*!dustem_data).polsed).wav)[idx_filt] yy=dustem_interp[idx_filt] rms=2.*((*(*!dustem_data).polsed).sigma)(idx_filt)/2. indzero = where(yy NE 0, ct_zero) IF ct_zero NE 0 THEN BEGIN cgoplot,xx[indzero],(((*(*!dustem_data).polsed).values)[idx_filt])[indzero]/yy[indzero],psym=16,color='Dodger Blue',syms=0.8,noerase=1,pos=position[1] cgerrplot,(((*(*!dustem_data).polsed).wav)(idx_filt))[indzero],((((*(*!dustem_data).polsed).values)[idx_filt])[indzero]-rms[indzero])/yy[indzero],((((*(*!dustem_data).polsed).values)[idx_filt])[indzero]+rms[indzero])/yy[indzero],color='Dodger Blue';,/overplot ENDIF ENDIF ;plotting of frozen data points in normalized plot endif else begin ;The data points in the plot that remain unchanged ; UNNECESSARY BLOCK but needed to limit erros when calls are made with missing keywords. xtit=textoidl('\lambda (\mum)') if !run_pol then xtit = '' cgplot,vectw,vectx,/xlog,/ys,xs=1,pos=position[1],noerase=1,xtickformat='(A1)',color='Black',xr=xr,xtit=xtit,yr=[0.0,2.0],yticks=2,ymino=2,xticklen=0.1,ytickformat='(F6.2)',charsize=1.0 xyouts,pospltxt_n[0],pospltxt_n[1],textoidl('norm'),color=0,/normal,charsize=1.1 endelse ENDIF ;Plotting the refreshed data in the normal plot if keyword_set(refresh) then begin ;The data points in the plot are being refreshed ;making sure we're placed in the normal window cgplot,vectw,vectx,/nodata,/xlog,/ylog,xs=5,ys=5,pos=position[0],noerase=1,xtickformat='(A1)',ytickformat='(A1)',color='Black',xr=xr,xtit='',yr=yr,yticks=2,ymino=2,xticklen=0.1,charsize=1.0 ;Plotting of the spectra of the dust species FOR i=0L,Ngrains-1 DO BEGIN cgoplot,st.polsed.wav,st.polsed.(i+1)*fact,color=use_cols[i],pos=position[0],noerase=1 ENDFOR ;Plotting of the plugins. for i=0L,n_plgns-1 do begin If isa((*!dustem_plugin).(i).spec) then begin IF total(strsplit((*(*!dustem_plugin).(i).scope),'+',/extract) EQ 'ADD_POLSED') THEN begin cgoplot,st.polsed.wav,sqrt(((*(*!dustem_plugin).(i).spec)[*,1])^2+((*(*!dustem_plugin).(i).spec)[*,2])^2),color=clrs_plgns[i],pos=position[0],noerase=1,linestyle=2 ENDIF endif endfor ;PLotting of the interpolates corresponding to spectrum and filter points IF ct_spec NE 0 THEN BEGIN xx=((*(*!dustem_data).polsed).wav)[idx_spec] yy=dustem_interp[idx_spec] cgoplot,xx,yy,color='Indian Red',pos=position[0],psym=7,syms=2,noerase=1 ENDIF IF ct_filt NE 0 THEN BEGIN xx=((*(*!dustem_data).polsed).wav)[idx_filt] yy=dustem_interp[idx_filt] cgoplot,xx,yy,color='red',pos=position[0],psym=6,syms=2,noerase=1 ENDIF ;Plotting of the total dust emission spectru cgoplot,st.polsed.wav,dustem_spec,pos=position[0],noerase=1,/xlog,/ys,/xs,/ylog ;Plotting of frozen data in normal plot endif else begin ;Spectrum points are treated before for plotting reasons. if ct_spec ne 0 then begin ;Plotting of spectrum data points (to be fitted) cgplot,((*(*!dustem_data).polsed).wav)(idx_spec),((*(*!dustem_data).polsed).values)(idx_spec),/ylog,/xlog,/ys,xs=9,pos=position[0],noerase=1,xtit=' ',charsize=1.15,xtickformat='(A1)',color='Powder Blue',xr=xr,yr=yr,psym=8,syms=0.8,ytickformat='dstmwrp_exp' ;Plotting of the spectrum error points rms=2.*((*(*!dustem_data).polsed).sigma)(idx_spec)/2. cgerrplot,((*(*!dustem_data).polsed).wav)(idx_spec),((*(*!dustem_data).polsed).values)(idx_spec)-rms,((*(*!dustem_data).polsed).values)(idx_spec)+rms,color='Powder Blue' endif if ct_filt ne 0 then begin plotsym,0,/fill ;Plotting of filter data points (to be fitted) + testing for prior plotting if ct_spec ne 0 then cgoplot,((*(*!dustem_data).polsed).wav)(idx_filt),((*(*!dustem_data).polsed).values)(idx_filt),charsize=1.15,color='Dodger Blue',psym=8,syms=0.8,pos=position[0],/ys,xs=9,noerase=1,xtickformat='(A1)',xr=xr,yr=yr,ytickformat='dstmwrp_exp',/ylog,/xlog else $ cgplot,((*(*!dustem_data).polsed).wav)(idx_filt),((*(*!dustem_data).polsed).values)(idx_filt),charsize=1.15,color='Dodger Blue',psym=8,syms=0.8,pos=position[0],/ys,xs=9,noerase=1,xtickformat='(A1)',xtit=' ',xr=xr,yr=yr,ytickformat='dstmwrp_exp',/ylog,/xlog ;Plotting of the filter error points rms=2.*((*(*!dustem_data).polsed).sigma)(idx_filt)/2.;/dustem_polsed(idx_filt) cgerrplot,((*(*!dustem_data).polsed).wav)(idx_filt),((*(*!dustem_data).polsed).values)(idx_filt)-rms,((*(*!dustem_data).polsed).values)(idx_filt)+rms,color='Dodger Blue' endif ;Plotting of frequency axis IF !dustemwrap_which_language NE 'fawlty' THEN BEGIN axis, xaxis=1, xlog=1, xs=1, xminor=10, xticklen=0.05, xrange=((!const.c*1E6/(xr))*1E-9),charsize=1.15,xtitle=textoidl('\nu (GHz)'),color=0 ENDIF xyouts,pospltxt[0],pospltxt[1],textoidl('P_{\nu} (MJy/sr)'),color=0,/normal,charsize=1.3;,charthick=2.0 ;Locating all the hidden data points (spectrum+filter) match2,((*(*!dustem_data).polsed).wav),((*(*!dustem_show).polsed).wav),show_polsedpts,fit_polsedpts ;only show_polsedpts is needed idx_rmv_polsed=where(fit_polsedpts eq -1, ct_hdnpts) ; indices of the points to hide ;Locating the hidden spectrum and filter data points idx_filt_hdn = where((((*(*!dustem_show).polsed).filt_names))(idx_rmv_polsed) NE 'SPECTRUM',ct_filt_hdn) idx_spec_hdn = where(((*(*!dustem_show).polsed).filt_names)(idx_rmv_polsed) EQ 'SPECTRUM',ct_spec_hdn) ;stop if ct_hdnpts ne 0 then begin ;Hidden data points are present ;stop if ct_spec_hdn ne 0 then begin ;Plotting of hidden spectrum data points cgoplot,(((*(*!dustem_show).polsed).wav)[idx_rmv_polsed])(idx_spec_hdn),(((*(*!dustem_show).polsed).values)[idx_rmv_polsed])(idx_spec_hdn),pos=position[0],/ylog,/xlog,/ys,xs=9,noerase=1,charsize=1.15,xtickformat='(A1)',color='Black',xr=xr,yr=yr,psym=8,syms=0.8 ;Plotting of hidden spectrum error points rms=2.*(((*(*!dustem_show).polsed).sigma)[idx_rmv_polsed])(idx_spec_hdn)/2. cgerrplot,(((*(*!dustem_show).polsed).wav)[idx_rmv_polsed])(idx_spec_hdn),(((*(*!dustem_show).polsed).values)[idx_rmv_polsed])(idx_spec_hdn)-rms,(((*(*!dustem_show).polsed).values)[idx_rmv_polsed])(idx_spec_hdn)+rms,color='Black' endif if ct_filt_hdn ne 0 then begin ;Plotting of hidden filter data points cgoplot,(((*(*!dustem_show).polsed).wav)[idx_rmv_polsed])(idx_filt_hdn),(((*(*!dustem_show).polsed).values)[idx_rmv_polsed])(idx_filt_hdn),pos=position[0],/ylog,/xlog,/ys,xs=9,noerase=1,charsize=1.15,xtickformat='(A1)',color='Black',xr=xr,yr=yr,psym=8,syms=0.8 ;Plotting of hidden filter error point rms=2.*(((*(*!dustem_show).polsed).sigma)[idx_rmv_polsed])(idx_filt_hdn)/2. cgerrplot,(((*(*!dustem_show).polsed).wav)[idx_rmv_polsed])(idx_filt_hdn),(((*(*!dustem_show).polsed).values)[idx_rmv_polsed])(idx_filt_hdn)-rms,(((*(*!dustem_show).polsed).values)[idx_rmv_polsed])(idx_filt_hdn)+rms,color='Black' endif endif endelse end ;DONE BUT NOT TESTED... 'POLFRAC': begin ;SETTING THE PLOT RANGE xr = !dustem_plot_range.polfrac.xr yr = !dustem_plot_range.polfrac.yr idx_filt=where((*(*!dustem_data).polfrac).filt_names NE 'SPECTRUM',ct_filt) idx_spec=where((*(*!dustem_data).polfrac).filt_names EQ 'SPECTRUM',ct_spec) if keyword_set(refresh) then begin ;The data points in the plot are being refreshed ;making sure we're refreshing the right dataset cgplot,vectw,vectx,/nodata,/xlog,/ylog,/ys,xs=1,pos=position[0],noerase=1,charsize=1.15,xtickformat='(A1)',ytickformat='(A1)',color='Powder Blue',xr=xr,xtit='',yr=yr,psym=8,syms=0.8 FOR i=0L,Ngrains-1 DO BEGIN testneq = where(st.polsed.(i+1) ne 0,countneq) if countneq ne 0 then begin vecfin = st.polsed.(i+1)*0.0 vecfin[testneq] = ((st.polsed.(i+1))[testneq])*fact[testneq]/extra_spec[testneq];(st.sed.em_tot)[testneq];;(st.sed.em_tot)[testneq];spec[testneq];(st.sed.(i+1))[testneq];*fact;(st.sed.(i+1))[testneq] cgoplot,st.polsed.wav,vecfin*100,pos=position[0],noerase=1,color=use_cols[i],xr=xr,/xlog,/ylog,ytickformat='(A1)',yr=yr endif ENDFOR ;Plotting of the plugins. for i=0L,n_plgns-1 do begin if isa((*!dustem_plugin).(i).spec) then begin IF total(strsplit((*(*!dustem_plugin).(i).scope),'+',/extract) EQ 'ADD_POLSED') THEN begin vecfin = st.polsed.em_tot*0.0 vecfin[testneq] = sqrt((((*(*!dustem_plugin).(i).spec)[*,1])^2)[testneq]+(((*(*!dustem_plugin).(i).spec)[*,2])^2)[testneq])/extra_spec[testneq];((*(*!dustem_plugin).(i).spec)[*,0])[testneq] cgoplot,st.polsed.wav,vecfin*100,color=clrs_plgns[i],pos=position[0],noerase=1,linestyle=2 ENDIF endif endfor ;PLotting of the interpolates corresponding to spectrum and filter points IF ct_spec NE 0 THEN BEGIN xx=((*(*!dustem_data).polfrac).wav)[idx_spec] yy=dustem_interp[idx_spec] cgoplot,xx,yy*100,color='Indian Red',pos=position[0],psym=7,syms=2,noerase=1 ENDIF IF ct_filt NE 0 THEN BEGIN xx=((*(*!dustem_data).polfrac).wav)[idx_filt] yy=dustem_interp[idx_filt] cgoplot,xx,yy*100,color='red',pos=position[0],psym=6,syms=2,noerase=1 ENDIF ;Plotting of the total dust emission spectrum cgoplot,st.polsed.wav,dustem_spec*100,pos=position[0],noerase=1,/xlog,/ys,/xs endif else begin ;The data points in the plot that remain unchanged. ;Spectrum points are treated before for plotting reasons. if ct_spec ne 0 then begin ;Plotting of spectrum data points (to be fitted) cgplot,((*(*!dustem_data).polfrac).wav)(idx_spec),((*(*!dustem_data).polfrac).values)(idx_spec)*100,/xlog,/ylog,/ys,xs=1,pos=position[0],noerase=1,xtit=' ',charsize=1.15,xtickformat='(A1)',color='Powder Blue',xr=xr,yr=yr,psym=16,syms=0.8;,ytickformat='dstmwrp_exp' ;Plotting of the spectrum error points rms=2.*((*(*!dustem_data).polfrac).sigma)(idx_spec)/2. cgerrplot,((*(*!dustem_data).polfrac).wav)(idx_spec),(((*(*!dustem_data).polfrac).values)(idx_spec)-rms)*100,(((*(*!dustem_data).polfrac).values)(idx_spec)+rms)*100,color='Powder Blue' endif if ct_filt ne 0 then begin ;Plotting of filter data points (to be fitted) + testing for prior plotting if ct_spec ne 0 then cgoplot,((*(*!dustem_data).polfrac).wav)(idx_filt),((*(*!dustem_data).polfrac).values)(idx_filt)*100,charsize=1.15,color='Dodger Blue',psym=16,syms=0.8,pos=position[0],/ys,xs=1,noerase=1,xtickformat='(A1)',xr=xr,yr=yr,/xlog,/ylog else $;,ytickformat='dstmwrp_exp' cgplot,((*(*!dustem_data).polfrac).wav)(idx_filt),((*(*!dustem_data).polfrac).values)(idx_filt)*100,charsize=1.15,color='Dodger Blue',psym=16,syms=0.8,pos=position[0],/ys,xs=1,noerase=1,xtickformat='(A1)',xtit=' ',xr=xr,yr=yr,/xlog,/ylog;,ytickformat='dstmwrp_exp' ;Plotting of the filter error points rms=2.*((*(*!dustem_data).polfrac).sigma)(idx_filt)/2.;/dustem_polfrac(idx_filt) cgerrplot,((*(*!dustem_data).polfrac).wav)(idx_filt),(((*(*!dustem_data).polfrac).values)(idx_filt)-rms)*100,(((*(*!dustem_data).polfrac).values)(idx_filt)+rms)*100,color='Dodger Blue' endif xyouts,pospltxt[0],pospltxt[1],textoidl('p (%)'),color=0,/normal,charsize=1.3;,charthick=2.0 ;Locating all the hidden data points (spectrum+filter) ;The filtering has been done prior (in the primary routine) match2,((*(*!dustem_data).polfrac).wav),((*(*!dustem_show).polfrac).wav),show_polfracpts,fit_polfracpts ;only show_polfracpts is needed idx_rmv_polfrac=where(fit_polfracpts eq -1, ct_hdnpts) ; indices of the points to hide ;stop ;Locating the hidden spectrum and filter data points idx_filt_hdn = where(((*(*!dustem_show).polfrac).filt_names)(idx_rmv_polfrac) NE 'SPECTRUM',ct_filt_hdn) idx_spec_hdn = where(((*(*!dustem_show).polfrac).filt_names)(idx_rmv_polfrac) EQ 'SPECTRUM',ct_spec_hdn) if ct_hdnpts ne 0 then begin ;Hidden data points are present ;stop if ct_spec_hdn ne 0 then begin ;Plotting of hidden spectrum data points cgplot,(((*(*!dustem_show).polfrac).wav)[idx_rmv_polfrac])(idx_spec_hdn),(((*(*!dustem_show).polfrac).values)[idx_rmv_polfrac])(idx_spec_hdn)*100,pos=position[0],/xlog,/ylog,/ys,xs=1,noerase=1,charsize=1.15,xtickformat='(A1)',color='Black',xr=xr,yr=yr,psym=8,syms=0.8 ;Plotting of hidden spectrum error points rms=2.*(((*(*!dustem_show).polfrac).sigma)[idx_rmv_polfrac])(idx_spec_hdn)/2. cgerrplot,(((*(*!dustem_show).polfrac).wav)[idx_rmv_polfrac])(idx_spec_hdn),((((*(*!dustem_show).polfrac).values)[idx_rmv_polfrac])(idx_spec_hdn)-rms)*100,((((*(*!dustem_show).polfrac).values)[idx_rmv_polfrac])(idx_spec_hdn)+rms)*100,color='Black' endif if ct_filt_hdn ne 0 then begin ;stop plotsym,0, /fill ;Plotting of hidden filter data points cgplot,(((*(*!dustem_show).polfrac).wav)[idx_rmv_polfrac])(idx_filt_hdn),(((*(*!dustem_show).polfrac).values)[idx_rmv_polfrac])(idx_filt_hdn)*100,pos=position[0],/xlog,/ylog,/ys,xs=1,noerase=1,charsize=1.15,xtickformat='(A1)',color='Black',xr=xr,yr=yr,psym=8,syms=0.8 ;stop ;Plotting of hidden filter error point rms=2.*(((*(*!dustem_show).polfrac).sigma)[idx_rmv_polfrac])(idx_filt_hdn)/2. cgerrplot,(((*(*!dustem_show).polfrac).wav)[idx_rmv_polfrac])(idx_filt_hdn),((((*(*!dustem_show).polfrac).values)[idx_rmv_polfrac])(idx_filt_hdn)-rms)*100,((((*(*!dustem_show).polfrac).values)[idx_rmv_polfrac])(idx_filt_hdn)+rms)*100,color='Black' endif endif endelse end ;DONE BUT NOT TESTED. 'FPOLEXT': BEGIN ; For completeness (not sure of the physical usefulness of this qauntity ) ;SETTING THE PLOT RANGE xr = !dustem_plot_range.fpolext.xr yr = !dustem_plot_range.fpolext.yr idx_filt=where((*(*!dustem_data).fpolext).filt_names NE 'SPECTRUM',ct_filt) idx_spec=where((*(*!dustem_data).fpolext).filt_names EQ 'SPECTRUM',ct_spec) if keyword_set(refresh) then begin ;The data points in the plot are being refreshed ;making sure we're plotting in the refreshed plot cgplot,1/vectw,vectx,/xlog,/ylog,/nodata,/ys,xs=1,pos=position[0],noerase=1,xtickformat='(A1)',ytickformat='(A1)',color='Black',xr=xr,xtit='',yr=yr,yticks=2,ymino=2,xticklen=0.1,charsize=1.0 FOR i=0L,Ngrains-1 DO BEGIN vecto = transpose((st.polext.(1))[i,*]+(st.polext.(2))[i,*]) testneq = where(vecto ne 0,countneq) if countneq ne 0 then begin vecfin = vecto*0.0 vecfin[testneq] = (vecto[testneq])*(*!dustem_HCD)/1.0e21/extra_spec[testneq];(st.sed.em_tot)[testneq];spec[testneq];(st.sed.(i+1))[testneq];*fact;(st.sed.(i+1))[testneq] cgoplot,1/st.polext.wav,vecfin*100,pos=position[0],noerase=1,color=use_cols[i],xr=xr,/xlog,/ylog,ytickformat='(A1)',yr=yr endif ENDFOR ;Plotting of the plugins. for i=0L,n_plgns-1 do begin if isa((*!dustem_plugin).(0).spec) then begin IF total(strsplit((*(*!dustem_plugin).(i).scope),'+',/extract) EQ 'ADD_POLEXT') THEN begin vecfin = st.polext.ext_tot*0.0 vecfin[testneq] = sqrt((((*(*!dustem_plugin).(i).spec)[*,1])^2)[testneq]+(((*(*!dustem_plugin).(i).spec)[*,2])^2)[testneq])/((*(*!dustem_plugin).(i).spec)[*,0])[testneq] cgoplot,1/st.polext.wav,vecfin*100,color=clrs_plgns[i],pos=position[0],noerase=1,linestyle=2 ENDIF endif endfor ;PLotting of the interpolates corresponding to spectrum and filter points IF ct_spec NE 0 THEN BEGIN xx=((*(*!dustem_data).fpolext).wav)[idx_spec] yy=dustem_interp[idx_spec] cgoplot,1/xx,yy*100,color='Indian Red',pos=position[0],psym=7,syms=2,noerase=1 ENDIF IF ct_filt NE 0 THEN BEGIN xx=((*(*!dustem_data).fpolext).wav)[idx_filt] yy=dustem_interp[idx_filt] cgoplot,1/xx,yy*100,color='red',pos=position[0],psym=6,syms=2,noerase=1 ENDIF ;Plotting of the total dust emission spectrum cgoplot,1/st.polext.wav,dustem_spec*100,pos=position[0],noerase=1,/xlog,/ys,/xs endif else begin ;The data points in the plot that remain unchanged. ;Spectrum points are treated before for plotting reasons. if ct_spec ne 0 then begin ;Plotting of spectrum data points (to be fitted) cgplot,1/((*(*!dustem_data).fpolext).wav)(idx_spec),((*(*!dustem_data).fpolext).values)(idx_spec)*100,/xlog,/ylog,/ys,xs=1,pos=position[0],noerase=1,xtit=' ',charsize=1.15,xtickformat='(A1)',color='Powder Blue',xr=xr,yr=yr,psym=16,syms=0.8;,ytickformat='dstmwrp_exp' ;Plotting of the spectrum error points rms=2.*((*(*!dustem_data).fpolext).sigma)(idx_spec)/2. cgerrplot,1/((*(*!dustem_data).fpolext).wav)(idx_spec),(((*(*!dustem_data).fpolext).values)(idx_spec)-rms)*100,(((*(*!dustem_data).fpolext).values)(idx_spec)+rms)*100,color='Powder Blue' endif if ct_filt ne 0 then begin ;Plotting of filter data points (to be fitted) + testing for prior plotting if ct_spec ne 0 then cgoplot,1/((*(*!dustem_data).fpolext).wav)(idx_filt),((*(*!dustem_data).fpolext).values)(idx_filt)*100,charsize=1.15,color='Dodger Blue',psym=16,syms=0.8,pos=position[0],/ys,xs=1,noerase=1,xtickformat='(A1)',xr=xr,yr=yr,/xlog,/ylog else $;,ytickformat='dstmwrp_exp' cgplot,1/((*(*!dustem_data).fpolext).wav)(idx_filt),((*(*!dustem_data).fpolext).values)(idx_filt)*100,charsize=1.15,color='Dodger Blue',psym=16,syms=0.8,pos=position[0],/ys,xs=1,noerase=1,xtickformat='(A1)',xtit=' ',xr=xr,yr=yr,/xlog,/ylog;,ytickformat='dstmwrp_exp' ;Plotting of the filter error points rms=2.*((*(*!dustem_data).fpolext).sigma)(idx_filt)/2.;/dustem_polfrac(idx_filt) cgerrplot,1/((*(*!dustem_data).fpolext).wav)(idx_filt),(((*(*!dustem_data).fpolext).values)(idx_filt)-rms)*100,(((*(*!dustem_data).fpolext).values)(idx_filt)+rms)*100,color='Dodger Blue' endif xyouts,pospltxt[0],pospltxt[1],textoidl('\tau_{PEXT}/\tau_{EXT} (%)'),color=0,/normal,charsize=1.3;,charthick=2.0 ;Locating all the hidden data points (spectrum+filter) ;The filtering has been done prior (in the primary routine) match2,((*(*!dustem_data).fpolext).wav),((*(*!dustem_show).fpolext).wav),show_polfracpts,fit_polfracpts ;only show_polfracpts is needed idx_rmv_polfrac=where(fit_polfracpts eq -1, ct_hdnpts) ; indices of the points to hide; ;Locating the hidden spectrum and filter data points idx_filt_hdn = where(((*(*!dustem_show).fpolext).filt_names)(idx_rmv_polfrac) NE 'SPECTRUM',ct_filt_hdn) idx_spec_hdn = where(((*(*!dustem_show).fpolext).filt_names)(idx_rmv_polfrac) EQ 'SPECTRUM',ct_spec_hdn) if ct_hdnpts ne 0 then begin ;Hidden data points are present ;stop if ct_spec_hdn ne 0 then begin ;Plotting of hidden spectrum data points cgplot,1/(((*(*!dustem_show).fpolext).wav)[idx_rmv_polfrac])(idx_spec_hdn),(((*(*!dustem_show).fpolext).values)[idx_rmv_polfrac])(idx_spec_hdn)*100,pos=position[0],/xlog,/ylog,/ys,xs=1,noerase=1,charsize=1.15,xtickformat='(A1)',color='Black',xr=xr,yr=yr,psym=8,syms=0.8 ;Plotting of hidden spectrum error points rms=2.*(((*(*!dustem_show).fpolext).sigma)[idx_rmv_polfrac])(idx_spec_hdn)/2. cgerrplot,1/(((*(*!dustem_show).fpolext).wav)[idx_rmv_polfrac])(idx_spec_hdn),((((*(*!dustem_show).fpolext).values)[idx_rmv_polfrac])(idx_spec_hdn)-rms)*100,((((*(*!dustem_show).fpolext).values)[idx_rmv_polfrac])(idx_spec_hdn)+rms)*100,color='Black' endif if ct_filt_hdn ne 0 then begin ;stop plotsym,0, /fill ;Plotting of hidden filter data points cgplot,1/(((*(*!dustem_show).fpolext).wav)[idx_rmv_polfrac])(idx_filt_hdn),(((*(*!dustem_show).fpolext).values)[idx_rmv_polfrac])(idx_filt_hdn)*100,pos=position[0],/xlog,/ylog,/ys,xs=1,noerase=1,charsize=1.15,xtickformat='(A1)',color='Black',xr=xr,yr=yr,psym=8,syms=0.8 ;stop ;Plotting of hidden filter error point rms=2.*(((*(*!dustem_show).fpolext).sigma)[idx_rmv_polfrac])(idx_filt_hdn)/2. cgerrplot,1/(((*(*!dustem_show).fpolext).wav)[idx_rmv_polfrac])(idx_filt_hdn),((((*(*!dustem_show).fpolext).values)[idx_rmv_polfrac])(idx_filt_hdn)-rms)*100,((((*(*!dustem_show).fpolext).values)[idx_rmv_polfrac])(idx_filt_hdn)+rms)*100,color='Black' endif endif endelse END 'PSI_EM': begin ;will be copying code from qsed and hopefully it will work. NB: THIS IS FALSE . YOU DO NOT NEED A LOGARITHMIC AXIS ;SETTING THE PLOT RANGE xr = !dustem_plot_range.psi_em.xr yr = !dustem_plot_range.psi_em.yr idx_filt=where((*(*!dustem_data).psi_em).filt_names NE 'SPECTRUM',ct_filt) idx_spec=where((*(*!dustem_data).psi_em).filt_names EQ 'SPECTRUM',ct_spec) if keyword_set(refresh) then begin ;The data points in the plot are being refreshed ;making sure we're placed in the considered plot. cgplot,vectw,vectx,/nodata,/xlog,xs=5,ys=5,pos=position[0],noerase=1,charsize=1.15,xtickformat='(A1)',ytickformat='(A1)',color='Powder Blue',xr=xr,xtit='',yr=yr,psym=8,syms=0.8 ;Plotting of the spectra of the dust species FOR i=0L,Ngrains-1 DO BEGIN testneq = where(st.polsed.(i+1) ne 0,countneq) if countneq ne 0 then begin vecfin = st.polsed.(i+1)*0.0 vecfin[testneq] = ((st.polsed.(i+1))[testneq])/(st.sed.(i+1))[testneq];extra_spec[testneq];(st.sed.em_tot)[testneq];spec[testneq] ;removed multiplication by 'fact'. ;*****NB: These two lines will have to be modified if the polarization angle varies with the dust species and/or with wavelength polar_ippsi2iqu,st.sed.(i+1)*fact,specqgrain,specugrain,vecfin,replicate(!dustem_psi,n_elements(vecfin)) ;temporary solution ;You can replace the -0 values by 0 in order to avoid atan giving wrong values testnzero = where(specqgrain EQ -0., ct_nzero) if ct_nzero ne 0 then specqgrain[testnzero] = 0 cgoplot,st.polsed.wav,0.5*atan(specugrain, specqgrain)/!dtor,pos=position[0],noerase=1,color=use_cols[i],xr=xr,/xlog,ytickformat='(A1)',yr=yr ;cgoplot,st.polsed.wav,replicate(!dustem_psi,n_elements(vecfin)),pos=position,noerase=1,color=use_cols[i],xr=xr,/xlog,ytickformat='(A1)',yr=[-90.00,90.00] endif ENDFOR ;Plotting of the plugins. for i=0L,n_plgns-1 do begin if isa((*!dustem_plugin).(0).spec) then begin IF total(strsplit((*(*!dustem_plugin).(i).scope),'+',/extract) EQ 'ADD_POLSED') THEN begin ;dustem_plot_mlog,st.polsed.wav,(*(*!dustem_plugin).(i))[*,1],ppositions=position, /overplot, noerase=1, color=clrs_plgns[i], linestyle=2,xr=xr,/xlog cgoplot,st.polsed.wav,0.5*atan((*(*!dustem_plugin).(i).spec)[*,2],(*(*!dustem_plugin).(i).spec)[*,1])/!dtor,pos=position[0],noerase=1, color=clrs_plgns[i], linestyle=2 ,xr=xr,/xlog,ytickformat='(A1)',yr=yr ENDIF ENDIF endfor ;PLotting of the interpolates corresponding to spectrum and filter points IF ct_spec NE 0 THEN BEGIN xx=((*(*!dustem_data).psi_em).wav)[idx_spec] yy=dustem_interp[idx_spec] cgoplot,xx,yy,color='Indian Red',pos=position[0],psym=7,syms=2,noerase=1 ENDIF IF ct_filt NE 0 THEN BEGIN xx=((*(*!dustem_data).psi_em).wav)[idx_filt] yy=dustem_interp[idx_filt] cgoplot,xx,yy,color='red',pos=position[0],psym=6,syms=2,noerase=1 ENDIF ;Plotting of the total dust emission spectrum ;cgoplot,st.sed.wav,0.5*atan(specu,specq)/!dtor,pos=position,noerase=1,/xlog,/ys,/xs cgoplot,st.sed.wav,dustem_spec,pos=position[0],noerase=1,/xlog,/ys,/xs endif else begin ;The data points in the plot that remain unchanged. ;Spectrum points are treated before for plotting reasons. if ct_spec ne 0 then begin ;Plotting of spectrum data points (to be fitted) cgplot,((*(*!dustem_data).psi_em).wav)(idx_spec),((*(*!dustem_data).psi_em).values)(idx_spec),/xlog,/ys,xs=1,pos=position[0],noerase=1,xtit=' ',charsize=1.15,xtickformat='(A1)',color='Powder Blue',xr=xr,yr=yr,psym=16,syms=0.8;,ytickformat='dstmwrp_exp' ;Plotting of the spectrum error points rms=2.*((*(*!dustem_data).psi_em).sigma)(idx_spec)/2. cgerrplot,((*(*!dustem_data).psi_em).wav)(idx_spec),((*(*!dustem_data).psi_em).values)(idx_spec)-rms,((*(*!dustem_data).psi_em).values)(idx_spec)+rms,color='Powder Blue' endif if ct_filt ne 0 then begin ;Plotting of filter data points (to be fitted) + testing for prior plotting if ct_spec ne 0 then cgoplot,((*(*!dustem_data).psi_em).wav)(idx_filt),((*(*!dustem_data).psi_em).values)(idx_filt),charsize=1.15,color='Dodger Blue',psym=16,syms=0.8,pos=position[0],/ys,xs=1,noerase=1,xtickformat='(A1)',xr=xr,yr=yr,/xlog else $;,ytickformat='dstmwrp_exp' cgplot,((*(*!dustem_data).psi_em).wav)(idx_filt),((*(*!dustem_data).psi_em).values)(idx_filt),charsize=1.15,color='Dodger Blue',psym=16,syms=0.8,pos=position[0],/ys,xs=1,noerase=1,xtickformat='(A1)',xtit=' ',xr=xr,yr=yr,/xlog;,ytickformat='dstmwrp_exp' ;Plotting of the filter error points rms=2.*((*(*!dustem_data).psi_em).sigma)(idx_filt)/2.;/dustem_psi_em(idx_filt) cgerrplot,((*(*!dustem_data).psi_em).wav)(idx_filt),((*(*!dustem_data).psi_em).values)(idx_filt)-rms,((*(*!dustem_data).psi_em).values)(idx_filt)+rms,color='Dodger Blue' endif xyouts,pospltxt[0],pospltxt[1],textoidl('\Psi (deg)'),color=0,/normal,charsize=1.3;,charthick=2.0 ;Locating all the hidden data points (spectrum+filter) ;The filtering has been done prior (in the primary routine) match2,((*(*!dustem_data).psi_em).wav),((*(*!dustem_show).psi_em).wav),show_psi_empts,fit_psi_empts ;only show_psi_empts is needed idx_rmv_psi_em=where(fit_psi_empts eq -1, ct_hdnpts) ; indices of the points to hide ;stop ;Locating the hidden spectrum and filter data points idx_filt_hdn = where(((*(*!dustem_show).psi_em).filt_names)(idx_rmv_psi_em) NE 'SPECTRUM',ct_filt_hdn) idx_spec_hdn = where(((*(*!dustem_show).psi_em).filt_names)(idx_rmv_psi_em) EQ 'SPECTRUM',ct_spec_hdn) if ct_hdnpts ne 0 then begin ;Hidden data points are present ;stop if ct_spec_hdn ne 0 then begin ;Plotting of hidden spectrum data points cgplot,(((*(*!dustem_show).psi_em).wav)[idx_rmv_psi_em])(idx_spec_hdn),(((*(*!dustem_show).psi_em).values)[idx_rmv_psi_em])(idx_spec_hdn),pos=position[0],/xlog,/ys,xs=1,noerase=1,charsize=1.15,xtickformat='(A1)',color='Black',xr=xr,yr=yr,psym=8,syms=0.8 ;Plotting of hidden spectrum error points rms=2.*(((*(*!dustem_show).psi_em).sigma)[idx_rmv_psi_em])(idx_spec_hdn)/2. cgerrplot,(((*(*!dustem_show).psi_em).wav)[idx_rmv_psi_em])(idx_spec_hdn),(((*(*!dustem_show).psi_em).values)[idx_rmv_psi_em])(idx_spec_hdn)-rms,(((*(*!dustem_show).psi_em).values)[idx_rmv_psi_em])(idx_spec_hdn)+rms,color='Black' endif if ct_filt_hdn ne 0 then begin ;stop plotsym,0, /fill ;Plotting of hidden filter data points cgplot,(((*(*!dustem_show).psi_em).wav)[idx_rmv_psi_em])(idx_filt_hdn),(((*(*!dustem_show).psi_em).values)[idx_rmv_psi_em])(idx_filt_hdn),pos=position[0],/xlog,/ys,xs=1,noerase=1,charsize=1.15,xtickformat='(A1)',color='Black',xr=xr,yr=yr,psym=8,syms=0.8 ;stop ;Plotting of hidden filter error point rms=2.*(((*(*!dustem_show).psi_em).sigma)[idx_rmv_psi_em])(idx_filt_hdn)/2. cgerrplot,(((*(*!dustem_show).psi_em).wav)[idx_rmv_psi_em])(idx_filt_hdn),(((*(*!dustem_show).psi_em).values)[idx_rmv_psi_em])(idx_filt_hdn)-rms,(((*(*!dustem_show).psi_em).values)[idx_rmv_psi_em])(idx_filt_hdn)+rms,color='Black' endif endif endelse end ;DONE BUT NOT TESTED. 'PSI_EXT': begin ;MODIFYING THIS NOW - You should write a plugin for the modification of polarized extinction so that !dustem_psi_ext is different than !dustem_psi. ;SETTING THE PLOT RANGE xr = !dustem_plot_range.psi_ext.xr yr = !dustem_plot_range.psi_ext.yr idx_filt=where((*(*!dustem_data).psi_ext).filt_names NE 'SPECTRUM',ct_filt) idx_spec=where((*(*!dustem_data).psi_ext).filt_names EQ 'SPECTRUM',ct_spec) if keyword_set(refresh) then begin ;The data points in the plot are being refreshed cgplot,1/vectw,vectx,/nodata,/xlog,/ys,xs=1,pos=position[0],noerase=1,charsize=1.15,xtickformat='(A1)',ytickformat='(A1)',color='Powder Blue',xr=xr,xtit='',yr=yr,psym=8,syms=0.8 ;##################TAKEN FROM SED ;Plotting of the spectra of the dust species FOR i=0L,Ngrains-1 DO BEGIN vecto = transpose((st.polext.(1))[i,*]+(st.polext.(2))[i,*]) vecte = transpose(((st.ext.(1))[i,*]+(st.ext.(2))[i,*])) testneq = where(vecto ne 0,countneq) ;testing whether the polext values contain negative ones testpos = where(vecto LT 0, countpos) IF countpos NE 0 THEN vecto[testpos] = 0 if countneq ne 0 then begin vecfin = vecto*0.0 vecfin[testneq] = (vecto[testneq])/vecte[testneq];extra_spec[testneq];(st.sed.em_tot)[testneq];spec[testneq] ;removed multiplication by 'fact'. polar_ippsi2iqu,vecte*(*!dustem_HCD)/1.0e21,specqgrain,specugrain,vecfin,replicate(!dustem_psi_ext,n_elements(vecfin)) ;temporary solution cgoplot,1/st.polext.wav,0.5*atan(specugrain,specqgrain)/!dtor,pos=position[0],noerase=1,color=use_cols[i],xr=xr,/xlog,ytickformat='(A1)',yr=yr endif ENDFOR ;Plotting of the plugins. for i=0L,n_plgns-1 do begin if isa((*!dustem_plugin).(0).spec) then begin IF total(strsplit((*(*!dustem_plugin).(i).scope),'+',/extract) EQ 'ADD_POLEXT') THEN begin ;dustem_plot_mlog,st.polsed.wav,(*(*!dustem_plugin).(i))[*,1],ppositions=position, /overplot, noerase=1, color=clrs_plgns[i], linestyle=2,xr=xr,/xlog cgoplot_mlog,1/st.polext.wav,0.5*atan((*(*!dustem_plugin).(i).spec)[*,2],(*(*!dustem_plugin).(i).spec)[*,1])/!dtor,pos=position[0],noerase=1, color=clrs_plgns[i], linestyle=2 ,xr=xr,/xlog,ytickformat='(A1)',yr=yr ENDIF ENDIF endfor ;PLotting of the interpolates corresponding to spectrum and filter points IF ct_spec NE 0 THEN BEGIN xx=((*(*!dustem_data).psi_ext).wav)[idx_spec] yy=dustem_interp[idx_spec] cgoplot,1/xx,yy,color='Indian Red',pos=position[0],psym=7,syms=2,noerase=1 ENDIF IF ct_filt NE 0 THEN BEGIN xx=((*(*!dustem_data).psi_ext).wav)[idx_filt] yy=dustem_interp[idx_filt] cgoplot,1/xx,yy,color='red',pos=position[0],psym=6,syms=2,noerase=1 ENDIF ;Plotting of the total dust emission spectrum ;cgoplot,st.sed.wav,0.5*atan(specu,specq)/!dtor,pos=position,noerase=1,/xlog,/ys,/xs cgoplot,1/st.ext.wav,dustem_spec,pos=position[0],noerase=1,/xlog,/ys,/xs endif else begin ;The data points in the plot that remain unchanged. ;Spectrum points are treated before for plotting reasons. if ct_spec ne 0 then begin ;Plotting of spectrum data points (to be fitted) cgplot,1/((*(*!dustem_data).psi_ext).wav)(idx_spec),((*(*!dustem_data).psi_ext).values)(idx_spec),/xlog,/ys,xs=1,pos=position[0],noerase=1,xtit=' ',charsize=1.15,xtickformat='(A1)',color='Powder Blue',xr=xr,yr=yr,psym=16,syms=0.8;,ytickformat='dstmwrp_exp' ;Plotting of the spectrum error points rms=2.*((*(*!dustem_data).psi_ext).sigma)(idx_spec)/2. cgerrplot,1/((*(*!dustem_data).psi_ext).wav)(idx_spec),((*(*!dustem_data).psi_ext).values)(idx_spec)-rms,((*(*!dustem_data).psi_ext).values)(idx_spec)+rms,color='Powder Blue' endif if ct_filt ne 0 then begin ;Plotting of filter data points (to be fitted) + testing for prior plotting if ct_spec ne 0 then cgoplot,1/((*(*!dustem_data).psi_ext).wav)(idx_filt),((*(*!dustem_data).psi_ext).values)(idx_filt),charsize=1.15,color='Dodger Blue',psym=16,syms=0.8,pos=position[0],/ys,xs=1,noerase=1,xtickformat='(A1)',xr=xr,yr=yr,/xlog else $;,ytickformat='dstmwrp_exp' cgplot,1/((*(*!dustem_data).psi_ext).wav)(idx_filt),((*(*!dustem_data).psi_ext).values)(idx_filt),charsize=1.15,color='Dodger Blue',psym=16,syms=0.8,pos=position[0],/ys,xs=1,noerase=1,xtickformat='(A1)',xtit=' ',xr=xr,yr=yr,/xlog;,ytickformat='dstmwrp_exp' ;Plotting of the filter error points rms=2.*((*(*!dustem_data).psi_ext).sigma)(idx_filt)/2.;/dustem_psi_em(idx_filt) cgerrplot,1/((*(*!dustem_data).psi_ext).wav)(idx_filt),((*(*!dustem_data).psi_ext).values)(idx_filt)-rms,((*(*!dustem_data).psi_ext).values)(idx_filt)+rms,color='Dodger Blue' endif xyouts,pospltxt[0],pospltxt[1],textoidl('\Psi_{EXT} (deg)'),color=0,/normal,charsize=1.3;,charthick=2.0 ;Locating all the hidden data points (spectrum+filter) ;The filtering has been done prior (in the primary routine) match2,((*(*!dustem_data).psi_ext).wav),((*(*!dustem_show).psi_ext).wav),show_psi_empts,fit_psi_empts ;only show_psi_empts is needed idx_rmv_psi_em=where(fit_psi_empts eq -1, ct_hdnpts) ; indices of the points to hide ;stop ;Locating the hidden spectrum and filter data points idx_filt_hdn = where(((*(*!dustem_show).psi_ext).filt_names)(idx_rmv_psi_em) NE 'SPECTRUM',ct_filt_hdn) ;keeping psi_em notation for counters... idx_spec_hdn = where(((*(*!dustem_show).psi_ext).filt_names)(idx_rmv_psi_em) EQ 'SPECTRUM',ct_spec_hdn) if ct_hdnpts ne 0 then begin ;Hidden data points are present ;stop if ct_spec_hdn ne 0 then begin ;Plotting of hidden spectrum data points cgplot,1/(((*(*!dustem_show).psi_ext).wav)[idx_rmv_psi_em])(idx_spec_hdn),(((*(*!dustem_show).psi_ext).values)[idx_rmv_psi_em])(idx_spec_hdn),pos=position[0],/xlog,/ys,xs=1,noerase=1,charsize=1.15,xtickformat='(A1)',color='Black',xr=xr,yr=yr,psym=8,syms=0.8 ;Plotting of hidden spectrum error points rms=2.*(((*(*!dustem_show).psi_ext).sigma)[idx_rmv_psi_em])(idx_spec_hdn)/2. cgerrplot,1/(((*(*!dustem_show).psi_ext).wav)[idx_rmv_psi_em])(idx_spec_hdn),(((*(*!dustem_show).psi_ext).values)[idx_rmv_psi_em])(idx_spec_hdn)-rms,(((*(*!dustem_show).psi_ext).values)[idx_rmv_psi_em])(idx_spec_hdn)+rms,color='Black' endif if ct_filt_hdn ne 0 then begin ;stop plotsym,0, /fill ;Plotting of hidden filter data points cgplot,1/(((*(*!dustem_show).psi_ext).wav)[idx_rmv_psi_em])(idx_filt_hdn),(((*(*!dustem_show).psi_ext).values)[idx_rmv_psi_em])(idx_filt_hdn),pos=position[0],/xlog,/ys,xs=1,noerase=1,charsize=1.15,xtickformat='(A1)',color='Black',xr=xr,yr=yr,psym=8,syms=0.8 ;stop ;Plotting of hidden filter error point rms=2.*(((*(*!dustem_show).psi_ext).sigma)[idx_rmv_psi_em])(idx_filt_hdn)/2. cgerrplot,1/(((*(*!dustem_show).psi_ext).wav)[idx_rmv_psi_em])(idx_filt_hdn),(((*(*!dustem_show).psi_ext).values)[idx_rmv_psi_em])(idx_filt_hdn)-rms,(((*(*!dustem_show).psi_ext).values)[idx_rmv_psi_em])(idx_filt_hdn)+rms,color='Black' endif endif endelse end ;DONE BUT NOT TESTED. 'QSED': begin ; THE ONE I WILL BE WORKING ON ;SETTING THE PLOT RANGE xr = !dustem_plot_range.qsed.xr yr = !dustem_plot_range.qsed.yr varvar=where((*(*!dustem_data).qsed).values GT 0, testpstv) varvar=where((*(*!dustem_data).qsed).values LT 0, testngtv) idx_filt=where((*(*!dustem_data).qsed).filt_names NE 'SPECTRUM', ct_filt) idx_spec=where((*(*!dustem_data).qsed).filt_names EQ 'SPECTRUM' , ct_spec) ;Locating all the hidden data points (spectrum+filter) match2,((*(*!dustem_data).qsed).wav),((*(*!dustem_show).qsed).wav),show_sedpts,fit_sedpts ;only show_sedpts is needed idx_rmv_sed=where(fit_sedpts eq -1, ct_hdnpts) ; indices of the points to hide If n_elements(position) GT 1 THEN BEGIN ;Plotting of the refreshed data in the normalized plot if keyword_set(refresh) then begin ;The data points in the plot that are being refreshed ;Making sure we're placed in the normalized plot cgplot,vectw,vectx,/nodata,/xlog,ys=5,xs=5,pos=position[1],noerase=1,charsize=1.15,xtickformat='(A1)',ytickformat='(A1)',ymin=0,color='Powder Blue',xr=xr,xtit='',yr=[0.0,2.0],psym=8,syms=0.8 IF ct_spec NE 0 THEN BEGIN xx=((*(*!dustem_data).qsed).wav)[idx_spec] yy=dustem_interp[idx_spec] rms=2.*((*(*!dustem_data).qsed).sigma)(idx_spec)/2. indzero = where(yy NE 0, ct_zero) IF ct_zero NE 0 THEN BEGIN cgoplot,xx[indzero],(((*(*!dustem_data).qsed).values)(idx_spec))[indzero]/yy[indzero],pos=position[1],psym=16,color='Powder Blue',syms=0.8,noerase=1 cgerrplot,(((*(*!dustem_data).qsed).wav)(idx_spec))[indzero],((((*(*!dustem_data).qsed).values)[idx_spec])[indzero]-rms[indzero])/yy[indzero],((((*(*!dustem_data).qsed).values)[idx_spec])[indzero]+rms[indzero])/yy[indzero],color='Powder Blue' ENDIF ENDIF IF ct_filt NE 0 THEN BEGIN xx=((*(*!dustem_data).qsed).wav)[idx_filt] yy=dustem_interp[idx_filt] rms=2.*((*(*!dustem_data).qsed).sigma)(idx_filt)/2. indzero = where(yy NE 0, ct_zero) IF ct_zero NE 0 THEN BEGIN cgoplot,xx[indzero],(((*(*!dustem_data).qsed).values)(idx_filt))[indzero]/yy[indzero],pos=position[1],psym=16,color='Dodger Blue',syms=0.8,noerase=1 cgerrplot,(((*(*!dustem_data).qsed).wav)(idx_filt))[indzero],((((*(*!dustem_data).qsed).values)[idx_filt])[indzero]-rms[indzero])/yy[indzero],((((*(*!dustem_data).qsed).values)[idx_filt])[indzero]+rms[indzero])/yy[indzero],color='Dodger Blue' ENDIF ENDIF ;Plotting of the frozen data points in the normalized plot endif else begin ;The data points in the plot that remain unchanged xtit=textoidl('\lambda (\mum)') cgplot,vectw,vectx,/xlog,/ys,xs=1,pos=position[1],noerase=1,color='Black',xr=xr,xtit=xtit,yr=[0.0,2.0],yticks=2,ymino=2,xticklen=0.1,ytickformat='(F6.2)',charsize=1.0 xyouts,pospltxt_n[0],pospltxt_n[1],textoidl('norm'),color=0,/normal,charsize=1.1 endelse ENDIF ;stop ;refreshing of the data of the normal plot if keyword_set(refresh) then begin ;The data points in the plot are being refreshed if positive_only EQ 1 then begin testsup=where(dustem_spec GT 0., countmodelsup) if testpstv ne 0 or countmodelsup ne 0 then begin ;making sure that we're placed in the positive_only normal plot dustem_plot_mlog,vectw,vectx,xs=5,ys=5,ppositions=position[0],/positive_only, noerase=1, color='Indian Red',psym=7,syms=2,xr=xr,/xlog,/ylog,yticks=0,xticks=0,xticklen=0.0,yticklen=0.0,/nodata,xtickformat='(A1)',xtit='',ytickformat='(A1)',yr=yr FOR i=0L,Ngrains-1 DO BEGIN testneq = where(st.polsed.(i+1) ne 0,countneq) ;stop if countneq ne 0 then begin vecfin = st.polsed.(i+1)*0.0 ;em_tot can be used here right? ;stop vecfin[testneq] = ((st.polsed.(i+1))[testneq])/((st.sed.(i+1))[testneq]);extra_spec[testneq];(st.sed.em_tot)[testneq];(st.sed.(i+1))[testneq];*fact;(st.sed.(i+1))[testneq] polar_ippsi2iqu,st.sed.(i+1)*fact,specqgrain,specugrain,vecfin,replicate(!dustem_psi,n_elements(vecfin)) ;temporary solution dustem_plot_mlog,st.polsed.wav,specqgrain,ppositions=position[0],/positive_only,/overplot,noerase=1,color=use_cols[i],xr=xr,/xlog,/ylog,ytickformat='(A1)',yr=yr endif ENDFOR for i=0L,n_plgns-1 do begin IF isa((*!dustem_plugin).(0).spec) THEN BEGIN IF total(strsplit((*(*!dustem_plugin).(i).scope),'+',/extract) EQ 'ADD_POLSED') THEN begin ;dustem_plot_mlog,st.polsed.wav,(*(*!dustem_plugin).(i))[*,1],ppositions=position, /overplot, noerase=1, color=clrs_plgns[i], linestyle=2,xr=xr,/xlog dustem_plot_mlog,st.polsed.wav,(*(*!dustem_plugin).(i).spec)[*,1],ppositions=position[0],/positive_only,/overplot,noerase=1, color=clrs_plgns[i], linestyle=2 ,xr=xr,/xlog,/ylog,ytickformat='(A1)',yr=yr ENDIF ENDIF endfor IF ct_spec NE 0 THEN BEGIN xx=((*(*!dustem_data).qsed).wav)[idx_spec] yy=dustem_interp[idx_spec] dustem_plot_mlog,xx,yy,ppositions=position[0],/positive_only, /overplot, noerase=1, color='Indian Red',psym=7,syms=2,xr=xr,/xlog,/ylog,ytickformat='(A1)',yr=yr ENDIF IF ct_filt NE 0 THEN BEGIN xx=((*(*!dustem_data).qsed).wav)[idx_filt] yy=dustem_interp[idx_filt] dustem_plot_mlog,xx,yy,ppositions=position[0],/positive_only, /overplot, noerase=1, color='red',psym=6,syms=2,xr=xr,/xlog,/ylog,ytickformat='(A1)',yr=yr ENDIF dustem_plot_mlog,st.polsed.wav,dustem_spec,ppositions=position[0],/positive_only,/overplot,noerase=1,xr=xr,/xlog,/ylog,ytickformat='(A1)',yr=yr endif endif if negative_only EQ 1 then begin testlow=where(dustem_spec LT 0., countmodellow) if testngtv ne 0 or countmodellow ne 0 then begin dustem_plot_mlog,vectw,-vectx,ppositions=position[0],xs=5,ys=5,/negative_only, noerase=1, color='Indian Red',psym=7,syms=2,xr=xr,/xlog,/ylog,/nodata,xtickformat='(A1)',xtit='',ytickformat='(A1)',yr=yr ;Plotting of the spectra of the dust species FOR i=0L,Ngrains-1 DO BEGIN testneq = where(st.polsed.(i+1) ne 0,countneq) ;stop if countneq ne 0 then begin vecfin = st.polsed.(i+1)*0.0 ;em_tot can be used here right? ;stop vecfin[testneq] = ((st.polsed.(i+1))[testneq])/((st.sed.(i+1))[testneq]);extra_spec[testneq];(st.sed.em_tot)[testneq];(st.sed.(i+1))[testneq];*fact;(st.sed.(i+1))[testneq] ;stop polar_ippsi2iqu,st.sed.(i+1)*fact,specqgrain,specugrain,vecfin,replicate(!dustem_psi,n_elements(vecfin)) ;temporary solution ;stop ;dustem_plot_mlog,st.polsed.wav,specqgrain,ppositions=position,/overplot,noerase=1,color=use_cols[i],xr=xr,/xlog dustem_plot_mlog,st.polsed.wav,specqgrain,ppositions=position[0],/negative_only,/overplot,noerase=1,color=use_cols[i],xr=xr,/xlog,/ylog,ytickformat='(A1)',yr=yr endif ENDFOR ;Plotting of the plugins for i=0L,n_plgns-1 do begin IF isa((*!dustem_plugin).(0).spec) THEN BEGIN IF total(strsplit((*(*!dustem_plugin).(i).scope),'+',/extract) EQ 'ADD_POLSED') THEN begin ;dustem_plot_mlog,st.polsed.wav,(*(*!dustem_plugin).(i))[*,1],ppositions=position, /overplot, noerase=1, color=clrs_plgns[i], linestyle=2,xr=xr,/xlog dustem_plot_mlog,st.polsed.wav,(*(*!dustem_plugin).(i).spec)[*,1],ppositions=position[0],/negative_only,/overplot,noerase=1, color=clrs_plgns[i], linestyle=2 ,xr=xr,/xlog,/ylog,ytickformat='(A1)',yr=yr ENDIF ENDIF endfor ;PLotting of the interpolates corresponding to spectrum and filter points IF ct_spec NE 0 THEN BEGIN xx=((*(*!dustem_data).qsed).wav)[idx_spec] yy=dustem_interp[idx_spec] dustem_plot_mlog,xx,yy,ppositions=position[0],/negative_only, /overplot, noerase=1, color='Indian Red',psym=7,syms=2,xr=xr,/xlog,/ylog,ytickformat='(A1)',yr=yr ENDIF IF ct_filt NE 0 THEN BEGIN xx=((*(*!dustem_data).qsed).wav)[idx_filt] yy=dustem_interp[idx_filt] dustem_plot_mlog,xx,yy,ppositions=position[0],/negative_only, /overplot, noerase=1, color='red',psym=6,syms=2,xr=xr,/xlog,/ylog,ytickformat='(A1)',yr=yr ENDIF ;Plotting of the total dust emission spectrum dustem_plot_mlog,st.polsed.wav,dustem_spec,ppositions=position[0],/negative_only,/overplot,noerase=1,xr=xr,/xlog,/ylog,ytickformat='(A1)',yr=yr endif endif ;Plotting of the froeen data in the normal plot endif else begin ;The data points in the plot that remain unchanged.; DO NOT USE AN ELSE HERE. xyouts,pospltxt[0],pospltxt[1],textoidl('Q_{\nu} (MJy/sr)'),color=0,/normal,charsize=1.3;,charthick=2.0 ;if ct_hdnpts ne 0 then begin ;Hidden data points are present ;Locating the hidden spectrum and filter data points if ct_hdnpts NE 0 then begin idx_filt_hdn_pstv = where(((*(*!dustem_show).qsed).filt_names)(idx_rmv_sed) NE 'SPECTRUM' and ((*(*!dustem_show).qsed).values)(idx_rmv_sed) gt 0,ct_filt_hdn_pstv) idx_spec_hdn_pstv = where(((*(*!dustem_show).qsed).filt_names)(idx_rmv_sed) EQ 'SPECTRUM' and ((*(*!dustem_show).qsed).values)(idx_rmv_sed) gt 0,ct_spec_hdn_pstv) idx_filt_hdn_ngtv = where(((*(*!dustem_show).qsed).filt_names)(idx_rmv_sed) NE 'SPECTRUM' and ((*(*!dustem_show).qsed).values)(idx_rmv_sed) lt 0,ct_filt_hdn_ngtv) idx_spec_hdn_ngtv = where(((*(*!dustem_show).qsed).filt_names)(idx_rmv_sed) EQ 'SPECTRUM' and ((*(*!dustem_show).qsed).values)(idx_rmv_sed) lt 0,ct_spec_hdn_ngtv) endif if positive_only EQ 1 then begin if testpstv ne 0 then begin plotsym, 0 if ct_spec ne 0 then begin rms=2.*((*(*!dustem_data).qsed).sigma)(idx_spec)/2. dustem_plot_mlog,((*(*!dustem_data).qsed).wav)(idx_spec),((*(*!dustem_data).qsed).values)(idx_spec),ppositions=position[0],charsize=1.15,color='Dodger Blue',psym=16,syms=0.8,xs=1,xr=xr,noerase=1,/positive_only,xtickformat='(A1)',xtit='',/xlog,/ylog,yr=yr;,ytickformat='(A1)' dustem_plot_mlog,((*(*!dustem_data).qsed).wav)(idx_spec),((*(*!dustem_data).qsed).values)(idx_spec),ppositions=position[0],color='Dodger Blue',/positive_only,noerase=1,/overplot,rms=rms,xtit='',charsize=1.15,xtickformat='(A1)',xs=1,psym=16,syms=0.8,xr=xr,/xlog,/ylog,yr=yr,ytickformat='(A1)' endif if ct_filt ne 0 then begin rms=2.*((*(*!dustem_data).qsed).sigma)(idx_filt)/2. if ct_spec ne 0 then dustem_plot_mlog,((*(*!dustem_data).qsed).wav)(idx_filt),((*(*!dustem_data).qsed).values)(idx_filt),ppositions=position[0],charsize=1.15,color='Dodger Blue',psym=16,syms=0.8,xs=1,xr=xr,noerase=1,/positive_only,xtickformat='(A1)',xtit='',/xlog,/ylog,yr=yr,/overplot,ytickformat='(A1)';,ytickformat='(A1)' if ct_spec eq 0 then dustem_plot_mlog,((*(*!dustem_data).qsed).wav)(idx_filt),((*(*!dustem_data).qsed).values)(idx_filt),ppositions=position[0],charsize=1.15,color='Dodger Blue',psym=16,syms=0.8,xs=1,xr=xr,noerase=1,/positive_only,xtickformat='(A1)',xtit='',/xlog,/ylog,yr=yr;,ytickformat='(A1)' dustem_plot_mlog,((*(*!dustem_data).qsed).wav)(idx_filt),((*(*!dustem_data).qsed).values)(idx_filt),ppositions=position[0],color='Dodger Blue',/positive_only,noerase=1,/overplot,rms=rms,xtit='',charsize=1.15,xtickformat='(A1)',xs=1,psym=16,syms=0.8,xr=xr,/xlog,/ylog,yr=yr,ytickformat='(A1)' endif if ct_hdnpts NE 0 then begin if ct_spec_hdn_pstv ne 0 then begin xx = (((*(*!dustem_show).qsed).wav)[idx_rmv_sed])(idx_spec_hdn_pstv) yy = (((*(*!dustem_show).qsed).values)[idx_rmv_sed])(idx_spec_hdn_pstv) rms=2.*(((*(*!dustem_show).qsed).sigma)[idx_rmv_sed])(idx_spec_hdn_pstv)/2. dustem_plot_mlog,xx,yy,ppositions=position[0],/positive_only,xs=1,noerase=1,charsize=1.15,xtickformat='(A1)',/overplot,xr=xr,color='Black',psym=16,syms=0.8,/xlog,/ylog,yr=yr,ytickformat='(A1)' dustem_plot_mlog,xx,yy,ppositions=position[0],/positive_only,noerase=1,color='Black',/overplot,rms=rms,yr=yr,xtickformat='(A1)',xr=xr,xs=1,/xlog,/ylog,ytickformat='(A1)' endif if ct_filt_hdn_pstv ne 0 then begin xx = (((*(*!dustem_show).qsed).wav)[idx_rmv_sed])(idx_filt_hdn_pstv) yy = (((*(*!dustem_show).qsed).values)[idx_rmv_sed])(idx_filt_hdn_pstv) rms=2.*(((*(*!dustem_show).qsed).sigma)[idx_rmv_sed])(idx_filt_hdn_pstv)/2. dustem_plot_mlog,xx,yy,ppositions=position[0],/positive_only,xs=1,noerase=1,charsize=1.15,/overplot,xtickformat='(A1)',xr=xr,color='Black',psym=16,syms=0.8,/xlog,/ylog,yr=yr,ytickformat='(A1)' dustem_plot_mlog,xx,yy,ppositions=position[0],/positive_only,xs=1,noerase=1,color='Black',/overplot,rms=rms,xr=xr,yr=yr,xtickformat='(A1)',/xlog,/ylog,ytickformat='(A1)' endif endif endif else begin if ct_spec ne 0 then dustem_plot_mlog,((*(*!dustem_data).qsed).wav)(idx_spec),-((*(*!dustem_data).qsed).values)(idx_spec),ppositions=position[0],charsize=1.15,/nodata,color='Dodger Blue',psym=16,syms=0.8,xs=1,xr=xr,noerase=1,/positive_only,xtickformat='(A1)',xtit='',/xlog,/ylog,yr=yr;,ytickformat='(A1)' if ct_filt ne 0 and ct_spec eq 0 then dustem_plot_mlog,((*(*!dustem_data).qsed).wav)(idx_filt),-((*(*!dustem_data).qsed).values)(idx_filt),/nodata,ppositions=position[0],charsize=1.15,color='Dodger Blue',psym=16,syms=0.8,xs=1,xr=xr,noerase=1,/positive_only,xtickformat='(A1)',xtit='',/xlog,/ylog,yr=yr;,ytickformat='(A1)' if ct_hdnpts NE 0 then begin if ct_spec_hdn_pstv ne 0 then begin xx = (((*(*!dustem_show).qsed).wav)[idx_rmv_sed])(idx_spec_hdn_pstv) yy = (((*(*!dustem_show).qsed).values)[idx_rmv_sed])(idx_spec_hdn_pstv) rms=2.*(((*(*!dustem_show).qsed).sigma)[idx_rmv_sed])(idx_spec_hdn_pstv)/2. dustem_plot_mlog,xx,yy,ppositions=position[0],/positive_only,xs=1,noerase=1,charsize=1.15,xtickformat='(A1)',/overplot,xr=xr,color='Black',psym=16,syms=0.8,/xlog,/ylog,yr=yr,ytickformat='(A1)' dustem_plot_mlog,xx,yy,ppositions=position[0],/positive_only,noerase=1,color='Black',/overplot,rms=rms,yr=yr,xtickformat='(A1)',xr=xr,xs=1,/xlog,/ylog,ytickformat='(A1)' ;,psym=8,syms=0.8 endif if ct_filt_hdn_pstv ne 0 then begin xx = (((*(*!dustem_show).qsed).wav)[idx_rmv_sed])(idx_filt_hdn_pstv) yy = (((*(*!dustem_show).qsed).values)[idx_rmv_sed])(idx_filt_hdn_pstv) rms=2.*(((*(*!dustem_show).qsed).sigma)[idx_rmv_sed])(idx_filt_hdn_pstv)/2. dustem_plot_mlog,xx,yy,ppositions=position[0],/positive_only,xs=1,noerase=1,charsize=1.15,/overplot,xtickformat='(A1)',xr=xr,color='Black',psym=16,syms=0.8,/xlog,/ylog,yr=yr,ytickformat='(A1)' dustem_plot_mlog,xx,yy,ppositions=position[0],/positive_only,xs=1,noerase=1,color='Black',/overplot,rms=rms,xr=xr,yr=yr,xtickformat='(A1)',/xlog,/ylog,ytickformat='(A1)' ;,psym=8,syms=0.8 endif endif endelse endif if negative_only EQ 1 then begin if testngtv ne 0 then begin ;plotsym, 0 if ct_spec ne 0 then begin rms=2.*((*(*!dustem_data).qsed).sigma)(idx_spec)/2. dustem_plot_mlog,((*(*!dustem_data).qsed).wav)(idx_spec),((*(*!dustem_data).qsed).values)(idx_spec),ppositions=position[0],charsize=1.15,color='Dodger Blue',psym=16,syms=0.8,xs=1,xr=xr,noerase=1,/negative_only,xtickformat='(A1)',xtit='',/xlog,/ylog,yr=yr;,ytickformat='(A1)' dustem_plot_mlog,((*(*!dustem_data).qsed).wav)(idx_spec),((*(*!dustem_data).qsed).values)(idx_spec),ppositions=position[0],color='Dodger Blue',/negative_only,noerase=1,/overplot,rms=rms,xtit='',charsize=1.15,xtickformat='(A1)',xs=1,xr=xr,/xlog,/ylog,yr=yr,ytickformat='(A1)';,psym=16,syms=0.8 endif if ct_filt ne 0 then begin rms=2.*((*(*!dustem_data).qsed).sigma)(idx_filt)/2. if ct_spec ne 0 then dustem_plot_mlog,((*(*!dustem_data).qsed).wav)(idx_filt),((*(*!dustem_data).qsed).values)(idx_filt),ppositions=position[0],charsize=1.15,color='Dodger Blue',psym=16,syms=0.8,xs=1,xr=xr,noerase=1,/negative_only,xtickformat='(A1)',xtit='',/xlog,/ylog,yr=yr,ytickformat='(A1)' if ct_spec eq 0 then dustem_plot_mlog,((*(*!dustem_data).qsed).wav)(idx_filt),((*(*!dustem_data).qsed).values)(idx_filt),ppositions=position[0],charsize=1.15,color='Dodger Blue',psym=16,syms=0.8,xs=1,xr=xr,noerase=1,/negative_only,xtickformat='(A1)',xtit='',/xlog,/ylog,yr=yr dustem_plot_mlog,((*(*!dustem_data).qsed).wav)(idx_filt),((*(*!dustem_data).qsed).values)(idx_filt),ppositions=position[0],color='Dodger Blue',/negative_only,noerase=1,/overplot,rms=rms,xtit='',charsize=1.15,xtickformat='(A1)',xs=1,xr=xr,/xlog,/ylog,yr=yr,ytickformat='(A1)' endif if ct_hdnpts NE 0 then begin if ct_spec_hdn_ngtv ne 0 then begin xx = (((*(*!dustem_show).qsed).wav)[idx_rmv_sed])(idx_spec_hdn_ngtv) yy = (((*(*!dustem_show).qsed).values)[idx_rmv_sed])(idx_spec_hdn_ngtv) rms=2.*(((*(*!dustem_show).qsed).sigma)[idx_rmv_sed])(idx_spec_hdn_ngtv)/2. dustem_plot_mlog,xx,yy,ppositions=position[0],/negative_only,xs=1,noerase=1,charsize=1.15,/overplot,xtickformat='(A1)',xr=xr,color='Black',psym=16,syms=0.8,/xlog,/ylog,yr=yr,ytickformat='(A1)' dustem_plot_mlog,xx,yy,ppositions=position[0],/negative_only,noerase=1,color='Black',/overplot,rms=rms,yr=yr,xtickformat='(A1)',xr=xr,xs=1,/xlog,/ylog,ytickformat='(A1)';,psym=8,syms=0.8 endif if ct_filt_hdn_ngtv ne 0 then begin xx = (((*(*!dustem_show).qsed).wav)[idx_rmv_sed])(idx_filt_hdn_ngtv) yy = (((*(*!dustem_show).qsed).values)[idx_rmv_sed])(idx_filt_hdn_ngtv) rms=2.*(((*(*!dustem_show).qsed).sigma)[idx_rmv_sed])(idx_filt_hdn_ngtv)/2. dustem_plot_mlog,xx,yy,ppositions=position[0],/negative_only,xs=1,noerase=1,charsize=1.15,/overplot,xtickformat='(A1)',xr=xr,color='Black',psym=16,syms=0.8,/xlog,/ylog,yr=yr ,ytickformat='(A1)' dustem_plot_mlog,xx,yy,ppositions=position[0],/negative_only,xs=1,noerase=1,color='Black',/overplot,rms=rms,xr=xr,yr=yr,xtickformat='(A1)',/xlog,/ylog,ytickformat='(A1)';,psym=8,syms=0.8 endif endif endif else begin if ct_spec ne 0 then dustem_plot_mlog,((*(*!dustem_data).qsed).wav)(idx_spec),-((*(*!dustem_data).qsed).values)(idx_spec),ppositions=position[0],charsize=1.15,/nodata,color='Dodger Blue',psym=16,syms=0.8,xs=1,xr=xr,noerase=1,/negative_only,xtickformat='(A1)',xtit='',/xlog,/ylog,yr=yr;,ytickformat='(A1)' if ct_filt ne 0 and ct_spec eq 0 then dustem_plot_mlog,((*(*!dustem_data).qsed).wav)(idx_filt),-((*(*!dustem_data).qsed).values)(idx_filt),/nodata,ppositions=position[0],charsize=1.15,color='Dodger Blue',psym=16,syms=0.8,xs=1,xr=xr,noerase=1,/negative_only,xtickformat='(A1)',xtit='',/xlog,/ylog,yr=yr;,ytickformat='(A1)' if ct_hdnpts NE 0 then begin if ct_spec_hdn_ngtv ne 0 then begin xx = (((*(*!dustem_show).qsed).wav)[idx_rmv_sed])(idx_spec_hdn_ngtv) yy = (((*(*!dustem_show).qsed).values)[idx_rmv_sed])(idx_spec_hdn_ngtv) rms=2.*(((*(*!dustem_show).qsed).sigma)[idx_rmv_sed])(idx_spec_hdn_ngtv)/2. dustem_plot_mlog,xx,yy,ppositions=position[0],/negative_only,xs=1,noerase=1,charsize=1.15,/overplot,xtickformat='(A1)',xr=xr,color='Black',psym=16,syms=0.8,/xlog,/ylog,yr=yr,ytickformat='(A1)' dustem_plot_mlog,xx,yy,ppositions=position[0],/negative_only,noerase=1,color='Black',/overplot,rms=rms,yr=yr,xtickformat='(A1)',xr=xr,xs=1,/xlog,/ylog,ytickformat='(A1)';,psym=8,syms=0.8 endif if ct_filt_hdn_ngtv ne 0 then begin xx = (((*(*!dustem_show).qsed).wav)[idx_rmv_sed])(idx_filt_hdn_ngtv) yy = (((*(*!dustem_show).qsed).values)[idx_rmv_sed])(idx_filt_hdn_ngtv) rms=2.*(((*(*!dustem_show).qsed).sigma)[idx_rmv_sed])(idx_filt_hdn_ngtv)/2. dustem_plot_mlog,xx,yy,ppositions=position[0],/negative_only,xs=1,noerase=1,charsize=1.15,/overplot,xtickformat='(A1)',xr=xr,color='Black',psym=16,syms=0.8,/xlog,/ylog,yr=yr ,ytickformat='(A1)' dustem_plot_mlog,xx,yy,ppositions=position[0],/negative_only,xs=1,noerase=1,color='Black',/overplot,rms=rms,xr=xr,yr=yr,xtickformat='(A1)',/xlog,/ylog,ytickformat='(A1)';,psym=8,syms=0.8 endif endif endelse ;stop endif endelse END ;DONE BUT NOT TESTED... 'USED': begin ;SETTING THE PLOT RANGE xr = !dustem_plot_range.used.xr yr = !dustem_plot_range.used.yr vectw=DINDGEN(1001)*(alog10(1E7) - alog10(1E5))/(1000 - 1L) + alog10(1E5) vectw=10^vectw[1:*] vectw=[wavs,vectw] vectx=vectw*0+1 ;SIGN-RELATED PARAMETERS/LOOPS HERE? ;negative & positive values regardless of data type (SPECTRUM or FILTER data points) varvar=where((*(*!dustem_data).used).values LT 0, testngtv) varvar=where((*(*!dustem_data).used).values GT 0, testpstv) ;stop idx_filt=where((*(*!dustem_data).used).filt_names NE 'SPECTRUM', ct_filt) idx_spec=where((*(*!dustem_data).used).filt_names EQ 'SPECTRUM' , ct_spec) ;Locating all the hidden data points (spectrum+filter) match2,((*(*!dustem_data).used).wav),((*(*!dustem_show).used).wav),show_sedpts,fit_sedpts ;only show_sedpts is needed idx_rmv_sed=where(fit_sedpts eq -1, ct_hdnpts) ; indices of the points to hide If n_elements(position) GT 1 THEN BEGIN ;Refreshing of the data in the normalized plot if keyword_set(refresh) then begin ;The data points in the plot that are being refreshed ;Making sure we're placed in the normalized plot cgplot,vectw,vectx,/nodata,/xlog,xs=5,ys=5,pos=position[1],noerase=1,charsize=1.15,xtickformat='(A1)',ytickformat='(A1)',color='Powder Blue',xr=xr,xtit='',yr=[0.0,2.0],psym=8,syms=0.8 IF ct_spec NE 0 THEN BEGIN xx=((*(*!dustem_data).used).wav)[idx_spec] yy=dustem_interp[idx_spec] rms=2.*((*(*!dustem_data).used).sigma)(idx_spec)/2. indzero = where(yy NE 0, ct_zero) IF ct_zero NE 0 THEN BEGIN cgoplot,xx[indzero],(((*(*!dustem_data).used).values)(idx_spec))[indzero]/yy[indzero],pos=position[1],psym=16,color='Powder Blue',syms=0.8,noerase=1 cgerrplot,(((*(*!dustem_data).used).wav)(idx_spec))[indzero],((((*(*!dustem_data).used).values)[idx_spec])[indzero]-rms[indzero])/yy[indzero],((((*(*!dustem_data).used).values)[idx_spec])[indzero]+rms[indzero])/yy[indzero],color='Powder Blue' ENDIF ENDIF IF ct_filt NE 0 THEN BEGIN xx=((*(*!dustem_data).used).wav)[idx_filt] yy=dustem_interp[idx_filt] rms=2.*((*(*!dustem_data).used).sigma)(idx_filt)/2. indzero = where(yy NE 0, ct_zero) IF ct_zero NE 0 THEN BEGIN cgoplot,xx[indzero],(((*(*!dustem_data).used).values)(idx_filt))[indzero]/yy[indzero],pos=position[1],psym=16,color='Dodger Blue',syms=0.8,noerase=1 cgerrplot,(((*(*!dustem_data).used).wav)(idx_filt))[indzero],((((*(*!dustem_data).used).values)[idx_filt])[indzero]-rms[indzero])/yy[indzero],((((*(*!dustem_data).used).values)[idx_filt])[indzero]+rms[indzero])/yy[indzero],color='Dodger Blue' ENDIF ENDIF ;plotting of the frozen data in the normalized plot endif else begin xtit=textoidl('\lambda (\mum)') cgplot,vectw,vectx,/xlog,/ys,xs=1,pos=position[1],noerase=1,color='Black',xr=xr,xtit=xtit,yr=[0.0,2.0],yticks=2,ymino=2,xticklen=0.1,ytickformat='(F6.2)',charsize=1.0 xyouts,pospltxt_n[0],pospltxt_n[1],textoidl('norm'),color=0,/normal,charsize=1.1 endelse ENDIF ;refreshig of the data in the normal plot. if keyword_set(refresh) then begin if positive_only EQ 1 then begin testsup=where(dustem_spec GT 0., countmodelsup) if testpstv ne 0 or countmodelsup ne 0 then begin ;Making sure we're refreshing data in the positive_only plot dustem_plot_mlog,vectw,vectx,ppositions=position[0],/positive_only, noerase=1, color='Indian Red',xs=5,ys=5,psym=7,syms=2,xr=xr,/xlog,/ylog,/nodata,xtickformat='(A1)',xtit='',ytickformat='(A1)',yr=yr FOR i=0L,Ngrains-1 DO BEGIN testneq = where(st.polsed.(i+1) ne 0,countneq) if countneq ne 0 then begin vecfin = st.polsed.(i+1)*0.0 ;em_tot can be used here right? vecfin[testneq] = ((st.polsed.(i+1))[testneq])/((st.sed.(i+1))[testneq]);extra_spec[testneq];(st.sed.em_tot)[testneq];(st.sed.(i+1))[testneq];*fact;(st.sed.(i+1))[testneq] polar_ippsi2iqu,st.sed.(i+1)*fact,specqgrain,specugrain,vecfin,replicate(!dustem_psi,n_elements(vecfin)) ;temporary solution ;dustem_plot_mlog,st.polsed.wav,specqgrain,ppositions=position,/overplot,noerase=1,color=use_cols[i],xr=xr,/xlog dustem_plot_mlog,st.polsed.wav,specugrain,ppositions=position[0],/positive_only,/overplot,noerase=1,color=use_cols[i],xr=xr,/xlog,/ylog,ytickformat='(A1)',yr=yr endif ;stop ENDFOR ;stop for i=0L,n_plgns-1 do begin IF isa((*!dustem_plugin).(0).spec) THEN BEGIN IF total(strsplit((*(*!dustem_plugin).(i).scope),'+',/extract) EQ 'ADD_POLSED') THEN begin dustem_plot_mlog,st.polsed.wav,(*(*!dustem_plugin).(i).spec)[*,2],ppositions=position[0],/positive_only,/overplot,noerase=1, color=clrs_plgns[i], linestyle=2 ,xr=xr,/xlog,/ylog,ytickformat='(A1)',yr=yr ENDIF ENDIF endfor IF ct_spec NE 0 THEN BEGIN xx=((*(*!dustem_data).used).wav)[idx_spec] yy=dustem_interp[idx_spec] ;dustem_plot_mlog,xx,yy,ppositions=position,/overplot, noerase=1, color='red',psym=7,syms=2,xr=xr,/xlog dustem_plot_mlog,xx,yy,ppositions=position[0],/positive_only, /overplot, noerase=1, color='Indian Red',psym=7,syms=2,xr=xr,/xlog,/ylog,ytickformat='(A1)',yr=yr ENDIF IF ct_filt NE 0 THEN BEGIN xx=((*(*!dustem_data).used).wav)[idx_filt] yy=dustem_interp[idx_filt] ;dustem_plot_mlog,xx,yy,ppositions=position, /overplot, noerase=1, color='red',psym=6,syms=2,xr=xr,/xlog dustem_plot_mlog,xx,yy,ppositions=position[0],/positive_only, /overplot, noerase=1, color='red',psym=6,syms=2,xr=xr,/xlog,/ylog,ytickformat='(A1)',yr=yr ENDIF dustem_plot_mlog,st.polsed.wav,dustem_spec,ppositions=position[0],/positive_only,/overplot,noerase=1,xr=xr,/xlog,/ylog,ytickformat='(A1)',yr=yr endif endif if negative_only EQ 1 then begin testlow=where(dustem_spec LT 0., countmodelow) if testngtv ne 0 or countmodelow ne 0 then begin ;Making sure we're refreshing data in the positive_only plot dustem_plot_mlog,vectw,-vectx,ppositions=position[0],/negative_only, noerase=1, color='Indian Red',psym=7,syms=2,xr=xr,xs=5,ys=5,/xlog,/ylog,/nodata,xtickformat='(A1)',xtit='',ytickformat='(A1)',yr=yr ;Plotting of the spectra of the dust species FOR i=0L,Ngrains-1 DO BEGIN testneq = where(st.polsed.(i+1) ne 0,countneq) if countneq ne 0 then begin vecfin = st.polsed.(i+1)*0.0 ;em_tot can be used here right? vecfin[testneq] = ((st.polsed.(i+1))[testneq])/((st.sed.(i+1))[testneq]);extra_spec[testneq];(st.sed.em_tot)[testneq];(st.sed.(i+1))[testneq];*fact;(st.sed.(i+1))[testneq] polar_ippsi2iqu,st.sed.(i+1)*fact,specqgrain,specugrain,vecfin,replicate(!dustem_psi,n_elements(vecfin)) ;temporary solution dustem_plot_mlog,st.polsed.wav,specugrain,ppositions=position[0],/negative_only,/overplot,noerase=1,color=use_cols[i],xr=xr,/xlog,/ylog,ytickformat='(A1)',yr=yr endif ENDFOR ;Plotting of the plugins FOR i=0L,n_plgns-1 do begin IF isa((*!dustem_plugin).(0).spec) THEN BEGIN IF total(strsplit((*(*!dustem_plugin).(i).scope),'+',/extract) EQ 'ADD_POLSED') THEN begin ;dustem_plot_mlog,st.polsed.wav,(*(*!dustem_plugin).(i))[*,1],ppositions=position, /overplot, noerase=1, color=clrs_plgns[i], linestyle=2,xr=xr,/xlog dustem_plot_mlog,st.polsed.wav,(*(*!dustem_plugin).(i).spec)[*,2],ppositions=position[0],/negative_only,/overplot,noerase=1, color=clrs_plgns[i], linestyle=2 ,xr=xr,/xlog,/ylog,ytickformat='(A1)',yr=yr ENDIF ENDIF ENDFOR ;PLotting of the interpolates corresponding to spectrum and filter points IF ct_spec NE 0 THEN BEGIN xx=((*(*!dustem_data).used).wav)[idx_spec] yy=dustem_interp[idx_spec] ;dustem_plot_mlog,xx,yy,ppositions=position,/overplot, noerase=1, color='red',psym=7,syms=2,xr=xr,/xlog dustem_plot_mlog,xx,yy,ppositions=position[0],/negative_only, /overplot, noerase=1, color='Indian Red',psym=7,syms=2,xr=xr,/xlog,/ylog,ytickformat='(A1)',yr=yr ENDIF IF ct_filt NE 0 THEN BEGIN xx=((*(*!dustem_data).used).wav)[idx_filt] yy=dustem_interp[idx_filt] ;dustem_plot_mlog,xx,yy,ppositions=position, /overplot, noerase=1, color='red',psym=6,syms=2,xr=xr,/xlog dustem_plot_mlog,xx,yy,ppositions=position[0],/negative_only, /overplot, noerase=1, color='red',psym=6,syms=2,xr=xr,/xlog,/ylog,ytickformat='(A1)',yr=yr ENDIF ;Plotting of the total dust emission spectrum dustem_plot_mlog,st.polsed.wav,dustem_spec,ppositions=position[0],/negative_only,/overplot,noerase=1,xr=xr,/xlog,/ylog,ytickformat='(A1)',yr=yr endif endif ;Plotting of frozen data in the normal plot endif else begin xyouts,pospltxt[0],pospltxt[1],textoidl('U_{\nu} (MJy/sr)'),color=0,/normal,charsize=1.3;,charthick=2.0 ;Locating the hidden spectrum and filter data points ;SADLY I STILL DON'T HAVE A SOLUTION FOR THE PLOTTING OF NULL VALUES. if ct_hdnpts NE 0 then begin idx_filt_hdn_pstv = where(((*(*!dustem_show).used).filt_names)(idx_rmv_sed) NE 'SPECTRUM' and ((*(*!dustem_show).used).values)(idx_rmv_sed) gt 0,ct_filt_hdn_pstv) idx_spec_hdn_pstv = where(((*(*!dustem_show).used).filt_names)(idx_rmv_sed) EQ 'SPECTRUM' and ((*(*!dustem_show).used).values)(idx_rmv_sed) gt 0,ct_spec_hdn_pstv) idx_filt_hdn_ngtv = where(((*(*!dustem_show).used).filt_names)(idx_rmv_sed) NE 'SPECTRUM' and ((*(*!dustem_show).used).values)(idx_rmv_sed) lt 0,ct_filt_hdn_ngtv) idx_spec_hdn_ngtv = where(((*(*!dustem_show).used).filt_names)(idx_rmv_sed) EQ 'SPECTRUM' and ((*(*!dustem_show).used).values)(idx_rmv_sed) lt 0,ct_spec_hdn_ngtv) endif ;stop if positive_only EQ 1 then begin ;stop if testpstv ne 0 then begin ;stop plotsym, 0 if ct_spec ne 0 then begin rms=2.*((*(*!dustem_data).used).sigma)(idx_spec)/2. ;dustem_plot_mlog,((*(*!dustem_data).used).wav)(idx_spec),-((*(*!dustem_data).used).values)(idx_spec),ppositions=position,charsize=1.15,color='Dodger Blue',psym=16,syms=0.8,xs=1,xr=xr,/nodata,noerase=1,/positive_only,xtickformat='(A1)',xtit='',/xlog,/ylog,yr=yr;,ytickformat='(A1)' ;if ct_spec_hdn_pstv ne 0 then dustem_plot_mlog,((*(*!dustem_data).used).wav)(idx_spec),((*(*!dustem_data).used).values)(idx_spec),ppositions=position,charsize=1.15,/overplot,color='Dodger Blue',psym=16,syms=0.8,xs=1,xr=xr,noerase=1,/positive_only,xtickformat='(A1)',xtit='',/xlog,/ylog,yr=yr else begin dustem_plot_mlog,((*(*!dustem_data).used).wav)(idx_spec),((*(*!dustem_data).used).values)(idx_spec),ppositions=position[0],charsize=1.15,color='Dodger Blue',psym=16,syms=0.8,xs=1,xr=xr,noerase=1,/positive_only,xtickformat='(A1)',xtit='',/xlog,/ylog,yr=yr ;endelse;,ytickformat='(A1)' dustem_plot_mlog,((*(*!dustem_data).used).wav)(idx_spec),((*(*!dustem_data).used).values)(idx_spec),ppositions=position[0],color='Dodger Blue',/positive_only,noerase=1,/overplot,rms=rms,xtit='',xtickformat='(A1)',xs=1,xr=xr,/xlog,/ylog,yr=yr,ytickformat='(A1)' ;,charsize=1.15,psym=16,syms=0.8 endif if ct_filt ne 0 then begin rms=2.*((*(*!dustem_data).used).sigma)(idx_filt)/2. ; dustem_plot_mlog,((*(*!dustem_data).used).wav)(idx_filt),-1.*((*(*!dustem_data).used).values)(idx_filt),ppositions=position,charsize=1.15,color='Dodger Blue',psym=16,syms=0.8,xs=1,xr=xr,/nodata,noerase=1,/negative_only,xtickformat='(A1)',xtit='',/xlog,/ylog,yr=yr;,ytickformat='(A1)' ;if ct_filt_hdn_pstv ne 0 then dustem_plot_mlog,((*(*!dustem_data).used).wav)(idx_filt),((*(*!dustem_data).used).values)(idx_filt),/overplot,ppositions=position,charsize=1.15,color='Dodger Blue',psym=16,syms=0.8,xs=1,xr=xr,noerase=1,/positive_only,xtickformat='(A1)',xtit='',/xlog,/ylog,yr=yr else begin if ct_spec ne 0 then dustem_plot_mlog,((*(*!dustem_data).used).wav)(idx_filt),((*(*!dustem_data).used).values)(idx_filt),ppositions=position[0],charsize=1.15,color='Dodger Blue',psym=16,syms=0.8,xs=1,xr=xr,noerase=1,/positive_only,xtickformat='(A1)',xtit='',/xlog,/ylog,yr=yr,ytickformat='(A1)' if ct_spec eq 0 then dustem_plot_mlog,((*(*!dustem_data).used).wav)(idx_filt),((*(*!dustem_data).used).values)(idx_filt),ppositions=position[0],charsize=1.15,color='Dodger Blue',psym=16,syms=0.8,xs=1,xr=xr,noerase=1,/positive_only,xtickformat='(A1)',xtit='',/xlog,/ylog,yr=yr ;endelse;,ytickformat='(A1)' dustem_plot_mlog,((*(*!dustem_data).used).wav)(idx_filt),((*(*!dustem_data).used).values)(idx_filt),ppositions=position[0],color='Dodger Blue',/positive_only,noerase=1,/overplot,rms=rms,xtit='',xtickformat='(A1)',xs=1,xr=xr,/xlog,/ylog,yr=yr,ytickformat='(A1)';,charsize=1.15,psym=16,syms=0.8 endif if ct_hdnpts NE 0 then begin if ct_spec_hdn_pstv ne 0 then begin ;stop xx = (((*(*!dustem_show).used).wav)[idx_rmv_sed])(idx_spec_hdn_pstv) yy = (((*(*!dustem_show).used).values)[idx_rmv_sed])(idx_spec_hdn_pstv) rms=2.*(((*(*!dustem_show).used).sigma)[idx_rmv_sed])(idx_spec_hdn_pstv)/2. dustem_plot_mlog,xx,yy,ppositions=position[0],/positive_only,xs=1,noerase=1,charsize=1.15,xtickformat='(A1)',/overplot,xr=xr,color='Black',psym=16,syms=0.8,/xlog,/ylog,yr=yr,ytickformat='(A1)' dustem_plot_mlog,xx,yy,ppositions=position[0],/positive_only,noerase=1,color='Black',/overplot,rms=rms,yr=yr,xtickformat='(A1)',xr=xr,xs=1,/xlog,/ylog,ytickformat='(A1)';,psym=8,syms=0.8 endif if ct_filt_hdn_pstv ne 0 then begin ;stop xx = (((*(*!dustem_show).used).wav)[idx_rmv_sed])(idx_filt_hdn_pstv) yy = (((*(*!dustem_show).used).values)[idx_rmv_sed])(idx_filt_hdn_pstv) rms=2.*(((*(*!dustem_show).used).sigma)[idx_rmv_sed])(idx_filt_hdn_pstv)/2. dustem_plot_mlog,xx,yy,ppositions=position[0],/positive_only,xs=1,noerase=1,charsize=1.15,/overplot,xtickformat='(A1)',xr=xr,color='Black',psym=16,syms=0.8,/xlog,/ylog,yr=yr,ytickformat='(A1)' dustem_plot_mlog,xx,yy,ppositions=position[0],/positive_only,xs=1,noerase=1,color='Black',/overplot,rms=rms,xr=xr,yr=yr,xtickformat='(A1)',/xlog,/ylog,ytickformat='(A1)';,psym=8,syms=0.8 endif endif endif else begin if ct_spec ne 0 then dustem_plot_mlog,((*(*!dustem_data).used).wav)(idx_spec),-((*(*!dustem_data).used).values)(idx_spec),ppositions=position[0],charsize=1.15,/nodata,color='Dodger Blue',psym=16,syms=0.8,xs=1,xr=xr,noerase=1,/positive_only,xtickformat='(A1)',xtit='',/xlog,/ylog,yr=yr;,ytickformat='(A1)' if ct_filt ne 0 and ct_spec eq 0 then dustem_plot_mlog,((*(*!dustem_data).used).wav)(idx_filt),-((*(*!dustem_data).used).values)(idx_filt),/nodata,ppositions=position[0],charsize=1.15,color='Dodger Blue',psym=16,syms=0.8,xs=1,xr=xr,noerase=1,/positive_only,xtickformat='(A1)',xtit='',/xlog,/ylog,yr=yr;,ytickformat='(A1)' if ct_hdnpts NE 0 then begin if ct_spec_hdn_pstv ne 0 then begin ;stop xx = (((*(*!dustem_show).used).wav)[idx_rmv_sed])(idx_spec_hdn_pstv) yy = (((*(*!dustem_show).used).values)[idx_rmv_sed])(idx_spec_hdn_pstv) rms=2.*(((*(*!dustem_show).used).sigma)[idx_rmv_sed])(idx_spec_hdn_pstv)/2. dustem_plot_mlog,xx,yy,ppositions=position[0],/positive_only,xs=1,noerase=1,charsize=1.15,xtickformat='(A1)',/overplot,xr=xr,color='Black',psym=16,syms=0.8,/xlog,/ylog,yr=yr,ytickformat='(A1)' dustem_plot_mlog,xx,yy,ppositions=position[0],/positive_only,noerase=1,color='Black',/overplot,rms=rms,yr=yr,xtickformat='(A1)',xr=xr,xs=1,/xlog,/ylog,ytickformat='(A1)';,psym=8,syms=0.8 endif if ct_filt_hdn_pstv ne 0 then begin ;stop xx = (((*(*!dustem_show).used).wav)[idx_rmv_sed])(idx_filt_hdn_pstv) yy = (((*(*!dustem_show).used).values)[idx_rmv_sed])(idx_filt_hdn_pstv) rms=2.*(((*(*!dustem_show).used).sigma)[idx_rmv_sed])(idx_filt_hdn_pstv)/2. dustem_plot_mlog,xx,yy,ppositions=position[0],/positive_only,xs=1,noerase=1,charsize=1.15,/overplot,xtickformat='(A1)',xr=xr,color='Black',psym=16,syms=0.8,/xlog,/ylog,yr=yr,ytickformat='(A1)' dustem_plot_mlog,xx,yy,ppositions=position[0],/positive_only,xs=1,noerase=1,color='Black',/overplot,rms=rms,xr=xr,yr=yr,xtickformat='(A1)',/xlog,/ylog,ytickformat='(A1)';,psym=8,syms=0.8 endif endif endelse endif if negative_only EQ 1 then begin ;stop if testngtv ne 0 then begin plotsym, 0 if ct_spec ne 0 then begin rms=2.*((*(*!dustem_data).used).sigma)(idx_spec)/2. dustem_plot_mlog,((*(*!dustem_data).used).wav)(idx_spec),((*(*!dustem_data).used).values)(idx_spec),ppositions=position[0],charsize=1.15,color='Dodger Blue',psym=16,syms=0.8,xs=1,xr=xr,noerase=1,/negative_only,xtickformat='(A1)',xtit='',/xlog,/ylog,yr=yr;,ytickformat='(A1)' dustem_plot_mlog,((*(*!dustem_data).used).wav)(idx_spec),((*(*!dustem_data).used).values)(idx_spec),ppositions=position[0],color='Dodger Blue',/negative_only,noerase=1,/overplot,rms=rms,xtit='',charsize=1.15,xtickformat='(A1)',xs=1,psym=16,syms=0.8,xr=xr,/xlog,/ylog,yr=yr,ytickformat='(A1)' endif if ct_filt ne 0 then begin rms=2.*((*(*!dustem_data).used).sigma)(idx_filt)/2. if ct_spec ne 0 then dustem_plot_mlog,((*(*!dustem_data).used).wav)(idx_filt),((*(*!dustem_data).used).values)(idx_filt),ppositions=position[0],charsize=1.15,color='Dodger Blue',psym=16,syms=0.8,xs=1,xr=xr,noerase=1,/negative_only,xtickformat='(A1)',xtit='',/xlog,/ylog,yr=yr,ytickformat='(A1)' if ct_spec eq 0 then dustem_plot_mlog,((*(*!dustem_data).used).wav)(idx_filt),((*(*!dustem_data).used).values)(idx_filt),ppositions=position[0],charsize=1.15,color='Dodger Blue',psym=16,syms=0.8,xs=1,xr=xr,noerase=1,/negative_only,xtickformat='(A1)',xtit='',/xlog,/ylog,yr=yr;,ytickformat='(A1)' dustem_plot_mlog,((*(*!dustem_data).used).wav)(idx_filt),((*(*!dustem_data).used).values)(idx_filt),ppositions=position[0],color='Dodger Blue',/negative_only,noerase=1,/overplot,rms=rms,xtit='',charsize=1.15,xtickformat='(A1)',xs=1,psym=16,syms=0.8,xr=xr,/xlog,/ylog,yr=yr,ytickformat='(A1)' endif if ct_hdnpts NE 0 then begin if ct_spec_hdn_ngtv ne 0 then begin xx = (((*(*!dustem_show).used).wav)[idx_rmv_sed])(idx_spec_hdn_ngtv) yy = (((*(*!dustem_show).used).values)[idx_rmv_sed])(idx_spec_hdn_ngtv) rms=2.*(((*(*!dustem_show).used).sigma)[idx_rmv_sed])(idx_spec_hdn_ngtv)/2. dustem_plot_mlog,xx,yy,ppositions=position[0],/negative_only,xs=1,noerase=1,charsize=1.15,xtickformat='(A1)',/overplot,xr=xr,color='Black',psym=16,syms=0.8,/xlog,/ylog,yr=yr,ytickformat='(A1)' dustem_plot_mlog,xx,yy,ppositions=position[0],/negative_only,noerase=1,color='Black',/overplot,rms=rms,yr=yr,xtickformat='(A1)',xr=xr,xs=1,/xlog,/ylog,ytickformat='(A1)';,psym=8,syms=0.8 endif if ct_filt_hdn_ngtv ne 0 then begin xx = (((*(*!dustem_show).used).wav)[idx_rmv_sed])(idx_filt_hdn_ngtv) yy = (((*(*!dustem_show).used).values)[idx_rmv_sed])(idx_filt_hdn_ngtv) rms=2.*(((*(*!dustem_show).used).sigma)[idx_rmv_sed])(idx_filt_hdn_ngtv)/2. dustem_plot_mlog,xx,yy,ppositions=position[0],/negative_only,xs=1,noerase=1,charsize=1.15,xtickformat='(A1)',/overplot,xr=xr,color='Black',psym=16,syms=0.8,/xlog,/ylog,yr=yr,ytickformat='(A1)' dustem_plot_mlog,xx,yy,ppositions=position[0],/negative_only,xs=1,noerase=1,color='Black',/overplot,rms=rms,xr=xr,yr=yr,xtickformat='(A1)',/xlog,/ylog,ytickformat='(A1)';,psym=8,syms=0.8 endif endif endif else begin if ct_spec ne 0 then dustem_plot_mlog,((*(*!dustem_data).used).wav)(idx_spec),-((*(*!dustem_data).used).values)(idx_spec),ppositions=position[0],charsize=1.15,/nodata,color='Dodger Blue',psym=16,syms=0.8,xs=1,xr=xr,noerase=1,/negative_only,xtickformat='(A1)',xtit='',/xlog,/ylog,yr=yr;,ytickformat='(A1)' if ct_filt ne 0 and ct_spec eq 0 then dustem_plot_mlog,((*(*!dustem_data).used).wav)(idx_filt),-((*(*!dustem_data).used).values)(idx_filt),/nodata,ppositions=position[0],charsize=1.15,color='Dodger Blue',psym=16,syms=0.8,xs=1,xr=xr,noerase=1,/negative_only,xtickformat='(A1)',xtit='',/xlog,/ylog,yr=yr;,ytickformat='(A1)' if ct_hdnpts NE 0 then begin if ct_spec_hdn_ngtv ne 0 then begin xx = (((*(*!dustem_show).used).wav)[idx_rmv_sed])(idx_spec_hdn_ngtv) yy = (((*(*!dustem_show).used).values)[idx_rmv_sed])(idx_spec_hdn_ngtv) rms=2.*(((*(*!dustem_show).used).sigma)[idx_rmv_sed])(idx_spec_hdn_ngtv)/2. dustem_plot_mlog,xx,yy,ppositions=position[0],/negative_only,xs=1,noerase=1,charsize=1.15,xtickformat='(A1)',/overplot,xr=xr,color='Black',psym=16,syms=0.8,/xlog,/ylog,yr=yr,ytickformat='(A1)' dustem_plot_mlog,xx,yy,ppositions=position[0],/negative_only,noerase=1,color='Black',/overplot,rms=rms,yr=yr,xtickformat='(A1)',xr=xr,xs=1,/xlog,/ylog,ytickformat='(A1)';,psym=8,syms=0.8 endif if ct_filt_hdn_ngtv ne 0 then begin xx = (((*(*!dustem_show).used).wav)[idx_rmv_sed])(idx_filt_hdn_ngtv) yy = (((*(*!dustem_show).used).values)[idx_rmv_sed])(idx_filt_hdn_ngtv) rms=2.*(((*(*!dustem_show).used).sigma)[idx_rmv_sed])(idx_filt_hdn_ngtv)/2. dustem_plot_mlog,xx,yy,ppositions=position[0],/negative_only,xs=1,noerase=1,charsize=1.15,xtickformat='(A1)',/overplot,xr=xr,color='Black',psym=16,syms=0.8,/xlog,/ylog,yr=yr,ytickformat='(A1)' dustem_plot_mlog,xx,yy,ppositions=position[0],/negative_only,xs=1,noerase=1,color='Black',/overplot,rms=rms,xr=xr,yr=yr,xtickformat='(A1)',/xlog,/ylog,ytickformat='(A1)';,psym=8,syms=0.8 endif endif endelse endif endelse end 'QEXT': begin ;Correct this like you corrected extinction... ;SETTING THE PLOT RANGE xr = !dustem_plot_range.qext.xr yr = !dustem_plot_range.qext.yr vectw=DINDGEN(1001)*(alog10(1E7) - alog10(1E5))/(1000 - 1L) + alog10(1E5) vectw=10^vectw[1:*] vectw=[wavs,vectw] vectx=vectw*0+1 varvar=where((*(*!dustem_data).qext).values GT 0, testpstv) varvar=where((*(*!dustem_data).qext).values LT 0, testngtv) ;stop idx_filt=where((*(*!dustem_data).qext).filt_names NE 'SPECTRUM', ct_filt) idx_spec=where((*(*!dustem_data).qext).filt_names EQ 'SPECTRUM' , ct_spec) ;Locating all the hidden data points (spectrum+filter) match2,((*(*!dustem_data).qext).wav),((*(*!dustem_show).qext).wav),show_sedpts,fit_sedpts ;only show_sedpts is needed idx_rmv_sed=where(fit_sedpts eq -1, ct_hdnpts) ; indices of the points to hide If n_elements(position) GT 1 THEN BEGIN ;refreshing of the normalized plot if keyword_set(refresh) then begin ;The data points in the plot that are being refreshed ;Making sure we're placed in the right plot to refresh. Here normalized plot for QEXT. cgplot,1/vectw,vectx,/nodata,/xlog,xs=1,pos=position[1],noerase=1,charsize=1.15,xtickformat='(A1)',ytickformat='(A1)',color='Powder Blue',xr=xr,xtit='',yr=[0.0,2.0],psym=8,syms=0.8 IF ct_spec NE 0 THEN BEGIN xx=((*(*!dustem_data).qext).wav)[idx_spec] yy=dustem_interp[idx_spec] rms=2.*((*(*!dustem_data).qext).sigma)(idx_spec)/2. ;testing so that data/yy is finite: ;avoiding zero points in yy since we divide by it ;testing also if the data is full of zeros (ie: PSI=0 for U and PSI=90 for Q) indzero = where(yy NE 0, ct_zero) if ct_zero ne 0 then begin cgoplot,(1/xx)[indzero],(((*(*!dustem_data).qext).values)(idx_spec))[indzero]/yy[indzero],pos=position[1],psym=16,color='Powder Blue',syms=0.8,noerase=1 cgerrplot,(1/((*(*!dustem_data).qext).wav)(idx_spec))[indzero],((((*(*!dustem_data).qext).values)[idx_spec])[indzero]-rms[indzero])/yy[indzero],((((*(*!dustem_data).qext).values)[idx_spec])[indzero]+rms[indzero])/yy[indzero],color='Powder Blue' endif ENDIF IF ct_filt NE 0 THEN BEGIN ;stop xx=((*(*!dustem_data).qext).wav)[idx_filt] yy=dustem_interp[idx_filt] rms=2.*((*(*!dustem_data).qext).sigma)(idx_filt)/2. indzero = where(yy NE 0, ct_zero) IF ct_zero NE 0 THEN BEGIN cgoplot,(1/xx)[indzero],(((*(*!dustem_data).qext).values)(idx_filt))[indzero]/yy[indzero],pos=position[1],psym=16,color='Dodger Blue',syms=0.8,noerase=1 cgerrplot,(1/((*(*!dustem_data).qext).wav)(idx_filt))[indzero],((((*(*!dustem_data).qext).values)[idx_filt])[indzero]-rms[indzero])/yy[indzero],((((*(*!dustem_data).qext).values)[idx_filt])[indzero]+rms[indzero])/yy[indzero],color='Dodger Blue' ENDIF ENDIF ;Plotting of thr frozen data in the normalized plot endif else begin ;The data points in the plot that remain unchanged xtit=textoidl('1/\lambda (\mum^{-1})') cgplot,1/vectw,vectx,/xlog,xs=1,pos=position[1],noerase=1,color='Black',xr=xr,xtit=xtit,yr=[0.0,2.0],yticks=2,ymino=2,xticklen=0.1,ytickformat='(F6.2)',charsize=1.0 xyouts,pospltxt_n[0],pospltxt_n[1],textoidl('norm'),color=0,/normal,charsize=1.1 endelse ENDIF if keyword_set(refresh) then begin ;The data points in the plot are being refreshed if keyword_set(positive_only) then begin ;stop testsup=where(dustem_spec GT 0., countmodelsup) if testpstv ne 0 or countmodelsup ne 0 then begin dustem_plot_mlog,1/vectw,vectx,ppositions=position[0],/positive_only, noerase=1, color='Indian Red',psym=7,syms=2,xr=xr,/xlog,/ylog,/nodata,xtickformat='(A1)',xtit='',ytickformat='(A1)',yr=yr ;I don't think the position keyword in the following lines is needed. I haven't verified to see if I encouter any errors. ;Since we added the /nodata (new), I think we can omit some of these keywords. But this requires testing. I don't know passing keywords will be affected. FOR i=0L,Ngrains-1 DO BEGIN vecto = transpose((st.polext.(1))[i,*]+(st.polext.(2))[i,*]) vecte = transpose((st.ext.(1))[i,*]+(st.ext.(2))[i,*]) testneq = where( vecto ne 0,countneq) if countneq ne 0 then begin vecfin = vecto*0.0 ;em_tot can be used here right? ;stop vecfin[testneq] = (vecto[testneq])/vecte[testneq];extra_spec[testneq];(st.sed.em_tot)[testneq];(st.sed.(i+1))[testneq];*fact;(st.sed.(i+1))[testneq] ;stop ;polar_ippsi2iqu,st.sed.(i+1)*fact,specqgrain,specugrain,st.polsed.(i+1)*fact/spec,replicate(!dustem_psi,n_elements(spec)) ;temporary solution polar_ippsi2iqu,vecte*(*!dustem_HCD)/1.0e21,specqgrain,specugrain,vecfin,replicate(!dustem_psi_ext,n_elements(vecfin)) ;temporary solution ;if countneg ne 0 and cos(!dustem_psi_ext) gt 0 then specqgrain[testneg] = 0 ;dustem_plot_mlog,st.polsed.wav,specqgrain,ppositions=position,/overplot,noerase=1,color=use_cols[i],xr=xr,/xlog dustem_plot_mlog,1/st.polext.wav,specqgrain,ppositions=position[0],/positive_only,/overplot,noerase=1,color=use_cols[i],xr=xr,/xlog,/ylog,ytickformat='(A1)',yr=yr endif ENDFOR for i=0L,n_plgns-1 do begin IF isa((*!dustem_plugin).(0).spec) THEN BEGIN IF total(strsplit((*(*!dustem_plugin).(i).scope),'+',/extract) EQ 'ADD_POLEXT') THEN begin ;dustem_plot_mlog,st.polsed.wav,(*(*!dustem_plugin).(i))[*,1],ppositions=position, /overplot, noerase=1, color=clrs_plgns[i], linestyle=2,xr=xr,/xlog dustem_plot_mlog,1/st.polext.wav,(*(*!dustem_plugin).(i).spec)[*,1],ppositions=position[0],/positive_only,/overplot,noerase=1, color=clrs_plgns[i], linestyle=2 ,xr=xr,/xlog,/ylog,ytickformat='(A1)',yr=yr ENDIF ENDIF endfor IF ct_spec NE 0 THEN BEGIN xx=((*(*!dustem_data).qext).wav)[idx_spec] yy=dustem_interp[idx_spec] ;dustem_plot_mlog,xx,yy,ppositions=position,/overplot, noerase=1, color='red',psym=7,syms=2,xr=xr,/xlog dustem_plot_mlog,1/xx,yy,ppositions=position[0],/positive_only, /overplot, noerase=1, color='Indian Red',psym=7,syms=2,xr=xr,/xlog,/ylog,ytickformat='(A1)',yr=yr ENDIF IF ct_filt NE 0 THEN BEGIN xx=((*(*!dustem_data).qext).wav)[idx_filt] yy=dustem_interp[idx_filt] ;dustem_plot_mlog,xx,yy,ppositions=position, /overplot, noerase=1, color='red',psym=6,syms=2,xr=xr,/xlog dustem_plot_mlog,1/xx,yy,ppositions=position[0],/positive_only, /overplot, noerase=1, color='red',psym=6,syms=2,xr=xr,/xlog,/ylog,ytickformat='(A1)',yr=yr ENDIF dustem_plot_mlog,1/st.polext.wav,dustem_spec,ppositions=position[0],/positive_only,/overplot,noerase=1,xr=xr,/xlog,/ylog,ytickformat='(A1)',yr=yr endif endif ;stop if keyword_set(negative_only) then begin ;stop testlow=where(dustem_spec LT 0., countmodellow) if testngtv ne 0 or countmodellow ne 0 then begin ;Making sure we're plotting in the negative_only plot. dustem_plot_mlog,1/vectw,vectx,ppositions=position[0],/negative_only, noerase=1, color='Indian Red',psym=7,syms=2,xr=xr,/xlog,/ylog,/nodata,xtickformat='(A1)',xtit='',ytickformat='(A1)',yr=yr ;stop ;Plotting of the spectra of the dust species FOR i=0L,Ngrains-1 DO BEGIN vecto = transpose(((st.polext.(1))[i,*]+(st.polext.(2))[i,*])) vecte = transpose(((st.ext.(1))[i,*]+(st.ext.(2))[i,*])) testneq = where(vecto ne 0,countneq) ;stop if countneq ne 0 then begin vecfin = vecto*0.0 ;em_tot can be used here right? ;stop vecfin[testneq] = (vecto[testneq])/vecte[testneq];extra_spec[testneq];(st.sed.em_tot)[testneq];(st.sed.(i+1))[testneq];*fact;(st.sed.(i+1))[testneq] ;stop polar_ippsi2iqu,vecte*(*!dustem_HCD)/1.0e21,specqgrain,specugrain,vecfin,replicate(!dustem_psi_ext,n_elements(vecfin)) ;temporary solution ;dustem_plot_mlog,st.polsed.wav,specqgrain,ppositions=position,/overplot,noerase=1,color=use_cols[i],xr=xr,/xlog dustem_plot_mlog,1/st.polext.wav,specqgrain,ppositions=position[0],/negative_only,/overplot,noerase=1,color=use_cols[i],xr=xr,/xlog,/ylog,ytickformat='(A1)',yr=yr endif ENDFOR ;Plotting of the plugins for i=0L,n_plgns-1 do begin IF isa((*!dustem_plugin).(0).spec) THEN BEGIN IF total(strsplit((*(*!dustem_plugin).(i).scope),'+',/extract) EQ 'ADD_POLEXT') THEN begin ;dustem_plot_mlog,st.polsed.wav,(*(*!dustem_plugin).(i))[*,1],ppositions=position, /overplot, noerase=1, color=clrs_plgns[i], linestyle=2,xr=xr,/xlog dustem_plot_mlog,1/st.polext.wav,(*(*!dustem_plugin).(i).spec)[*,1],ppositions=position[0],/negative_only,/overplot,noerase=1, color=clrs_plgns[i], linestyle=2 ,xr=xr,/xlog,/ylog,ytickformat='(A1)',yr=yr ENDIF ENDIF endfor ;PLotting of the interpolates corresponding to spectrum and filter points IF ct_spec NE 0 THEN BEGIN xx=((*(*!dustem_data).qext).wav)[idx_spec] yy=dustem_interp[idx_spec] ;dustem_plot_mlog,xx,yy,ppositions=position,/overplot, noerase=1, color='red',psym=7,syms=2,xr=xr,/xlog dustem_plot_mlog,1/xx,yy,ppositions=position[0],/negative_only, /overplot, noerase=1, color='Indian Red',psym=7,syms=2,xr=xr,/xlog,/ylog,ytickformat='(A1)',yr=yr ENDIF IF ct_filt NE 0 THEN BEGIN xx=((*(*!dustem_data).qext).wav)[idx_filt] yy=dustem_interp[idx_filt] ;dustem_plot_mlog,xx,yy,ppositions=position, /overplot, noerase=1, color='red',psym=6,syms=2,xr=xr,/xlog dustem_plot_mlog,1/xx,yy,ppositions=position[0],/negative_only, /overplot, noerase=1, color='red',psym=6,syms=2,xr=xr,/xlog,/ylog,ytickformat='(A1)',yr=yr ENDIF ;Plotting of the total dust emission spectrum dustem_plot_mlog,1/st.polext.wav,dustem_spec,ppositions=position[0],/negative_only,/overplot,noerase=1,xr=xr,/xlog,/ylog,ytickformat='(A1)',yr=yr endif endif ;stop endif else begin ;The data points in the plot that remain unchanged.; DO NOT USE AN ELSE HERE. xyouts,pospltxt[0],pospltxt[1],textoidl('\tau_{QEXT}'),color=0,/normal,charsize=1.3;,charthick=2.0 ;Locating the hidden spectrum and filter data points ;SADLY I STILL DON'T HAVE A SOLUTION FOR THE PLOTTING OF NULL VALUES. if ct_hdnpts then begin idx_filt_hdn_pstv = where(((*(*!dustem_show).qext).filt_names)(idx_rmv_sed) NE 'SPECTRUM' and ((*(*!dustem_show).qext).values)(idx_rmv_sed) gt 0,ct_filt_hdn_pstv) idx_spec_hdn_pstv = where(((*(*!dustem_show).qext).filt_names)(idx_rmv_sed) EQ 'SPECTRUM' and ((*(*!dustem_show).qext).values)(idx_rmv_sed) gt 0,ct_spec_hdn_pstv) idx_filt_hdn_ngtv = where(((*(*!dustem_show).qext).filt_names)(idx_rmv_sed) NE 'SPECTRUM' and ((*(*!dustem_show).qext).values)(idx_rmv_sed) lt 0,ct_filt_hdn_ngtv) idx_spec_hdn_ngtv = where(((*(*!dustem_show).qext).filt_names)(idx_rmv_sed) EQ 'SPECTRUM' and ((*(*!dustem_show).qext).values)(idx_rmv_sed) lt 0,ct_spec_hdn_ngtv) endif if keyword_set(positive_only) then begin if testpstv ne 0 then begin plotsym, 0 if ct_spec ne 0 then begin rms=2.*((*(*!dustem_data).qext).sigma)(idx_spec)/2. ;dustem_plot_mlog,((*(*!dustem_data).qsed).wav)(idx_spec),-((*(*!dustem_data).qsed).values)(idx_spec),ppositions=position,charsize=1.15,color='Dodger Blue',psym=16,syms=0.8,xs=1,xr=xr,/nodata,noerase=1,/positive_only,xtickformat='(A1)',xtit='',/xlog,/ylog,yr=yr;,ytickformat='(A1)' dustem_plot_mlog,1/((*(*!dustem_data).qext).wav)(idx_spec),((*(*!dustem_data).qext).values)(idx_spec),ppositions=position[0],charsize=1.15,color='Powder Blue',psym=16,syms=0.8,xs=1,xr=xr,noerase=1,/positive_only,xtickformat='(A1)',xtit='',/xlog,/ylog,yr=yr;,ytickformat='(A1)' dustem_plot_mlog,1/((*(*!dustem_data).qext).wav)(idx_spec),((*(*!dustem_data).qext).values)(idx_spec),ppositions=position[0],color='Powder Blue',/positive_only,noerase=1,/overplot,rms=rms,xtit='',charsize=1.15,xtickformat='(A1)',xs=1,psym=16,syms=0.8,xr=xr,/xlog,/ylog,yr=yr,ytickformat='(A1)' endif if ct_filt ne 0 then begin rms=2.*((*(*!dustem_data).qext).sigma)(idx_filt)/2. ; dustem_plot_mlog,((*(*!dustem_data).qsed).wav)(idx_filt),-1.*((*(*!dustem_data).qsed).values)(idx_filt),ppositions=position,charsize=1.15,color='Dodger Blue',psym=16,syms=0.8,xs=1,xr=xr,/nodata,noerase=1,/negative_only,xtickformat='(A1)',xtit='',/xlog,/ylog,yr=yr;,ytickformat='(A1)' if ct_spec ne 0 then dustem_plot_mlog,1/((*(*!dustem_data).qext).wav)(idx_filt),((*(*!dustem_data).qext).values)(idx_filt),ppositions=position[0],charsize=1.15,color='Dodger Blue',psym=16,syms=0.8,xs=1,xr=xr,noerase=1,/positive_only,xtickformat='(A1)',xtit='',/xlog,/ylog,yr=yr,ytickformat='(A1)' if ct_spec eq 0 then dustem_plot_mlog,1/((*(*!dustem_data).qext).wav)(idx_filt),((*(*!dustem_data).qext).values)(idx_filt),ppositions=position[0],charsize=1.15,color='Dodger Blue',psym=16,syms=0.8,xs=1,xr=xr,noerase=1,/positive_only,xtickformat='(A1)',xtit='',/xlog,/ylog,yr=yr;,ytickformat='(A1)' dustem_plot_mlog,1/((*(*!dustem_data).qext).wav)(idx_filt),((*(*!dustem_data).qext).values)(idx_filt),ppositions=position[0],color='Dodger Blue',/positive_only,noerase=1,/overplot,rms=rms,xtit='',charsize=1.15,xtickformat='(A1)',xs=1,psym=16,syms=0.8,xr=xr,/xlog,/ylog,yr=yr,ytickformat='(A1)' endif if ct_hdnpts NE 0 then begin if ct_spec_hdn_pstv ne 0 then begin xx = (((*(*!dustem_show).qext).wav)[idx_rmv_sed])(idx_spec_hdn_pstv) yy = (((*(*!dustem_show).qext).values)[idx_rmv_sed])(idx_spec_hdn_pstv) rms=2.*(((*(*!dustem_show).qext).sigma)[idx_rmv_sed])(idx_spec_hdn_pstv)/2. dustem_plot_mlog,1/xx,yy,ppositions=position[0],/positive_only,xs=1,noerase=1,/overplot,charsize=1.15,xtickformat='(A1)',xr=xr,color='Black',psym=16,syms=0.8,/xlog,/ylog,yr=yr dustem_plot_mlog,1/xx,yy,ppositions=position[0],/positive_only,noerase=1,color='Black',/overplot,rms=rms,yr=yr,xtickformat='(A1)',xr=xr,xs=1,/xlog,/ylog;,psym=8,syms=0.8 endif if ct_filt_hdn_pstv ne 0 then begin xx = (((*(*!dustem_show).qext).wav)[idx_rmv_sed])(idx_filt_hdn_pstv) yy = (((*(*!dustem_show).qext).values)[idx_rmv_sed])(idx_filt_hdn_pstv) rms=2.*(((*(*!dustem_show).qext).sigma)[idx_rmv_sed])(idx_filt_hdn_pstv)/2. dustem_plot_mlog,1/xx,yy,ppositions=position[0],/positive_only,xs=1,noerase=1,/overplot,charsize=1.15,xtickformat='(A1)',xr=xr,color='Black',psym=16,syms=0.8,/xlog,/ylog,yr=yr dustem_plot_mlog,1/xx,yy,ppositions=position[0],/positive_only,xs=1,noerase=1,color='Black',/overplot,rms=rms,xr=xr,yr=yr,xtickformat='(A1)',/xlog,/ylog;,psym=8,syms=0.8 endif endif endif else begin if ct_spec ne 0 then dustem_plot_mlog,1/((*(*!dustem_data).qext).wav)(idx_spec),-((*(*!dustem_data).qext).values)(idx_spec),ppositions=position[0],charsize=1.15,/nodata,color='Dodger Blue',psym=16,syms=0.8,xs=1,xr=xr,noerase=1,/positive_only,xtickformat='(A1)',xtit='',/xlog,/ylog,yr=yr;,ytickformat='(A1)' if ct_filt ne 0 and ct_spec eq 0 then dustem_plot_mlog,1/((*(*!dustem_data).qext).wav)(idx_filt),-((*(*!dustem_data).qext).values)(idx_filt),/nodata,ppositions=position[0],charsize=1.15,color='Dodger Blue',psym=16,syms=0.8,xs=1,xr=xr,noerase=1,/positive_only,xtickformat='(A1)',xtit='',/xlog,/ylog,yr=yr;,ytickformat='(A1)' endelse endif if keyword_set(negative_only) then begin if testngtv ne 0 then begin plotsym, 0 if ct_spec ne 0 then begin rms=2.*((*(*!dustem_data).qext).sigma)(idx_spec)/2. ;dustem_plot_mlog,((*(*!dustem_data).qsed).wav)(idx_spec),-((*(*!dustem_data).qsed).values)(idx_spec),ppositions=position,charsize=1.15,color='Dodger Blue',psym=16,syms=0.8,xs=1,xr=xr,/nodata,noerase=1,/negative_only,xtickformat='(A1)',xtit='',/xlog,/ylog,yr=yr;,ytickformat='(A1)' ; if ct_spec_hdn_ngtv ne 0 then dustem_plot_mlog,((*(*!dustem_data).qsed).wav)(idx_spec),((*(*!dustem_data).qsed).values)(idx_spec),ppositions=position,/overplot,charsize=1.15,color='Dodger Blue',psym=16,syms=0.8,xs=1,xr=xr,noerase=1,/negative_only,xtickformat='(A1)',xtit='',/xlog,/ylog,yr=yr else begin dustem_plot_mlog,1/((*(*!dustem_data).qext).wav)(idx_spec),((*(*!dustem_data).qext).values)(idx_spec),ppositions=position[0],charsize=1.15,color='Powder Blue',psym=16,syms=0.8,xs=1,xr=xr,noerase=1,/negative_only,xtickformat='(A1)',xtit='',/xlog,/ylog,yr=yr;,ytickformat='(A1)' ;endelse;,ytickformat='(A1)' dustem_plot_mlog,1/((*(*!dustem_data).qext).wav)(idx_spec),((*(*!dustem_data).qext).values)(idx_spec),ppositions=position[0],color='Powder Blue',/negative_only,noerase=1,/overplot,rms=rms,xtit='',charsize=1.15,xtickformat='(A1)',xs=1,xr=xr,/xlog,/ylog,yr=yr,ytickformat='(A1)';,psym=16,syms=0.8 endif if ct_filt ne 0 then begin rms=2.*((*(*!dustem_data).qext).sigma)(idx_filt)/2. ; dustem_plot_mlog,((*(*!dustem_data).qsed).wav)(idx_filt),-1.*((*(*!dustem_data).qsed).values)(idx_filt),ppositions=position,charsize=1.15,color='Dodger Blue',psym=16,syms=0.8,xs=1,xr=xr,/nodata,noerase=1,/negative_only,xtickformat='(A1)',xtit='',/xlog,/ylog,yr=yr;,ytickformat='(A1)' ;if ct_filt_hdn_ngtv ne 0 then dustem_plot_mlog,((*(*!dustem_data).qsed).wav)(idx_filt),((*(*!dustem_data).qsed).values)(idx_filt),ppositions=position,charsize=1.15,color='Dodger Blue',/overplot,psym=16,syms=0.8,xs=1,xr=xr,noerase=1,/negative_only,xtickformat='(A1)',xtit='',/xlog,/ylog,yr=yr else begin if ct_spec ne 0 then dustem_plot_mlog,1/((*(*!dustem_data).qext).wav)(idx_filt),((*(*!dustem_data).qext).values)(idx_filt),ppositions=position[0],charsize=1.15,color='Dodger Blue',psym=16,syms=0.8,xs=1,xr=xr,noerase=1,/negative_only,xtickformat='(A1)',xtit='',/xlog,/ylog,yr=yr,ytickformat='(A1)' if ct_spec eq 0 then dustem_plot_mlog,1/((*(*!dustem_data).qext).wav)(idx_filt),((*(*!dustem_data).qext).values)(idx_filt),ppositions=position[0],charsize=1.15,color='Dodger Blue',psym=16,syms=0.8,xs=1,xr=xr,noerase=1,/negative_only,xtickformat='(A1)',xtit='',/xlog,/ylog,yr=yr ;endelse ;,ytickformat='(A1)' dustem_plot_mlog,1/((*(*!dustem_data).qext).wav)(idx_filt),((*(*!dustem_data).qext).values)(idx_filt),ppositions=position[0],color='Dodger Blue',/negative_only,noerase=1,/overplot,rms=rms,xtit='',charsize=1.15,xtickformat='(A1)',xs=1,xr=xr,/xlog,/ylog,yr=yr,ytickformat='(A1)' endif if ct_hdnpts then begin if ct_spec_hdn_ngtv ne 0 then begin xx = (((*(*!dustem_show).qext).wav)[idx_rmv_sed])(idx_spec_hdn_ngtv) yy = (((*(*!dustem_show).qext).values)[idx_rmv_sed])(idx_spec_hdn_ngtv) rms=2.*(((*(*!dustem_show).qext).sigma)[idx_rmv_sed])(idx_spec_hdn_ngtv)/2. dustem_plot_mlog,1/xx,yy,ppositions=position[0],/negative_only,xs=1,noerase=1,charsize=1.15,/overplot,xtickformat='(A1)',xr=xr,color='Black',psym=16,syms=0.8,/xlog,/ylog,yr=yr dustem_plot_mlog,1/xx,yy,ppositions=position[0],/negative_only,noerase=1,color='Black',/overplot,rms=rms,yr=yr,xtickformat='(A1)',xr=xr,xs=1,/xlog,/ylog;,psym=8,syms=0.8 endif if ct_filt_hdn_ngtv ne 0 then begin xx = (((*(*!dustem_show).qext).wav)[idx_rmv_sed])(idx_filt_hdn_ngtv) yy = (((*(*!dustem_show).qext).values)[idx_rmv_sed])(idx_filt_hdn_ngtv) rms=2.*(((*(*!dustem_show).qext).sigma)[idx_rmv_sed])(idx_filt_hdn_ngtv)/2. dustem_plot_mlog,1/xx,yy,ppositions=position[0],/negative_only,xs=1,noerase=1,charsize=1.15,/overplot,xtickformat='(A1)',xr=xr,color='Black',psym=16,syms=0.8,/xlog,/ylog,yr=yr dustem_plot_mlog,1/xx,yy,ppositions=position[0],/negative_only,xs=1,noerase=1,color='Black',/overplot,rms=rms,xr=xr,yr=yr,xtickformat='(A1)',/xlog,/ylog;,psym=8,syms=0.8 endif endif endif else begin if ct_spec ne 0 then dustem_plot_mlog,((*(*!dustem_data).qext).wav)(idx_spec),-((*(*!dustem_data).qext).values)(idx_spec),ppositions=position[0],charsize=1.15,/nodata,color='Dodger Blue',psym=16,syms=0.8,xs=1,xr=xr,noerase=1,/negative_only,xtickformat='(A1)',xtit='',/xlog,/ylog,yr=yr;,ytickformat='(A1)' if ct_filt ne 0 and ct_spec eq 0 then dustem_plot_mlog,((*(*!dustem_data).qext).wav)(idx_filt),-((*(*!dustem_data).qext).values)(idx_filt),/nodata,ppositions=position[0],charsize=1.15,color='Dodger Blue',psym=16,syms=0.8,xs=1,xr=xr,noerase=1,/negative_only,xtickformat='(A1)',xtit='',/xlog,/ylog,yr=yr;,ytickformat='(A1)' endelse endif endelse end 'UEXT': begin ;SETTING THE PLOT RANGE xr = !dustem_plot_range.uext.xr yr = !dustem_plot_range.uext.yr vectw=DINDGEN(1001)*(alog10(1E7) - alog10(1E5))/(1000 - 1L) + alog10(1E5) vectw=10^vectw[1:*] vectw=[wavs,vectw] vectx=vectw*0+1 varvar=where((*(*!dustem_data).uext).values GT 0, testpstv) varvar=where((*(*!dustem_data).uext).values LT 0, testngtv) ;stop idx_filt=where((*(*!dustem_data).uext).filt_names NE 'SPECTRUM', ct_filt) idx_spec=where((*(*!dustem_data).uext).filt_names EQ 'SPECTRUM' , ct_spec) ;Plotting of frequency axis ;Locating all the hidden data points (spectrum+filter) match2,((*(*!dustem_data).uext).wav),((*(*!dustem_show).uext).wav),show_sedpts,fit_sedpts ;only show_sedpts is needed idx_rmv_sed=where(fit_sedpts eq -1, ct_hdnpts) ; indices of the points to hide If n_elements(position) GT 1 THEN BEGIN if keyword_set(refresh) then begin ;The data points in the plot that are being refreshed ;Making sure we're placed in the right plot to refresh. Here normalized plot for QEXT. cgplot,1/vectw,vectx,/nodata,/xlog,xs=1,pos=position[1],noerase=1,charsize=1.15,xtickformat='(A1)',ytickformat='(A1)',color='Powder Blue',xr=xr,xtit='',yr=[0.0,2.0],psym=8,syms=0.8 IF ct_spec NE 0 THEN BEGIN xx=((*(*!dustem_data).uext).wav)[idx_spec] yy=dustem_interp[idx_spec] rms=2.*((*(*!dustem_data).uext).sigma)(idx_spec)/2. indzero = where(yy NE 0, ct_zero) If ct_zero NE 0 THEN BEGIN cgoplot,(1/xx)[indzero],(((*(*!dustem_data).uext).values)(idx_spec))[indzero]/yy[indzero],pos=position[1],psym=16,color='Powder Blue',syms=0.8,noerase=1 cgerrplot,(1/((*(*!dustem_data).uext).wav)(idx_spec))[indzero],((((*(*!dustem_data).uext).values)[idx_spec])[indzero]-rms[indzero])/yy[indzero],((((*(*!dustem_data).uext).values)[idx_spec])[indzero]+rms[indzero])/yy[indzero],color='Powder Blue' ENDIF ENDIF IF ct_filt NE 0 THEN BEGIN ;stop xx=((*(*!dustem_data).uext).wav)[idx_filt] yy=dustem_interp[idx_filt] rms=2.*((*(*!dustem_data).uext).sigma)(idx_filt)/2. indzero = where(yy NE 0, ct_zero) IF ct_zero NE 0 THEN BEGIN cgoplot,(1/xx)[indzero],(((*(*!dustem_data).uext).values)(idx_filt))[indzero]/yy[indzero],pos=position[1],psym=16,color='Dodger Blue',syms=0.8,noerase=1 cgerrplot,(1/((*(*!dustem_data).uext).wav)(idx_filt))[indzero],((((*(*!dustem_data).uext).values)[idx_filt])[indzero]-rms[indzero])/yy[indzero],((((*(*!dustem_data).uext).values)[idx_filt])[indzero]+rms[indzero])/yy[indzero],color='Dodger Blue' ENDIF ENDIF endif else begin ;The data points in the plot that remain unchanged ;stop xtit=textoidl('1/\lambda (\mum^{-1})') ;if !run_pol then xtit = '' cgplot,1/vectw,vectx,/xlog,xs=1,pos=position[1],noerase=1,color='Black',xr=xr,xtit=xtit,yr=[0.0,2.0],yticks=2,ymino=2,xticklen=0.1,ytickformat='(F6.2)',charsize=1.0 xyouts,pospltxt_n[0],pospltxt_n[1],textoidl('norm'),color=0,/normal,charsize=1.1 endelse ENDIF if keyword_set(refresh) then begin ;The data points in the plot are being refreshed if keyword_set(positive_only) then begin testsup=where(dustem_spec GT 0., countmodelsup) if testpstv ne 0 or countmodelsup ne 0 then begin dustem_plot_mlog,1/vectw,vectx,ppositions=position[0],/positive_only, noerase=1, color='Indian Red',psym=7,syms=2,xr=xr,/xlog,/ylog,/nodata,xtickformat='(A1)',xtit='',ytickformat='(A1)',yr=yr FOR i=0L,Ngrains-1 DO BEGIN vecto = transpose(((st.polext.(1))[i,*]+(st.polext.(2))[i,*])) vecte = transpose(((st.ext.(1))[i,*]+(st.ext.(2))[i,*])) testneq = where( vecto ne 0,countneq) ;stop if countneq ne 0 then begin vecfin = vecto*0.0 ;em_tot can be used here right? ;stop vecfin[testneq] = (vecto[testneq])/vecte[testneq];extra_spec[testneq];(st.sed.em_tot)[testneq];(st.sed.(i+1))[testneq];*fact;(st.sed.(i+1))[testneq] ;stop ;polar_ippsi2iqu,st.sed.(i+1)*fact,specqgrain,specugrain,st.polsed.(i+1)*fact/spec,replicate(!dustem_psi,n_elements(spec)) ;temporary solution polar_ippsi2iqu,vecte*(*!dustem_HCD)/1.0e21,specqgrain,specugrain,vecfin,replicate(!dustem_psi_ext,n_elements(vecfin)) ;temporary solution ;stop ;dustem_plot_mlog,st.polsed.wav,specqgrain,ppositions=position,/overplot,noerase=1,color=use_cols[i],xr=xr,/xlog dustem_plot_mlog,1/st.polext.wav,specugrain,ppositions=position[0],/positive_only,/overplot,noerase=1,color=use_cols[i],xr=xr,/xlog,/ylog,ytickformat='(A1)',yr=yr ;stop endif ;stop ENDFOR for i=0L,n_plgns-1 do begin IF isa((*!dustem_plugin).(0).spec) THEN BEGIN IF total(strsplit((*(*!dustem_plugin).(i).scope),'+',/extract) EQ 'ADD_POLEXT') THEN begin ;dustem_plot_mlog,st.polsed.wav,(*(*!dustem_plugin).(i))[*,1],ppositions=position, /overplot, noerase=1, color=clrs_plgns[i], linestyle=2,xr=xr,/xlog dustem_plot_mlog,1/st.polext.wav,(*(*!dustem_plugin).(i).spec)[*,2],ppositions=position[0],/positive_only,/overplot,noerase=1, color=clrs_plgns[i], linestyle=2 ,xr=xr,/xlog,/ylog,ytickformat='(A1)',yr=yr ENDIF ENDIF endfor IF ct_spec NE 0 THEN BEGIN xx=((*(*!dustem_data).uext).wav)[idx_spec] yy=dustem_interp[idx_spec] ;dustem_plot_mlog,xx,yy,ppositions=position,/overplot, noerase=1, color='red',psym=7,syms=2,xr=xr,/xlog dustem_plot_mlog,1/xx,yy,ppositions=position[0],/positive_only, /overplot, noerase=1, color='Indian Red',psym=7,syms=2,xr=xr,/xlog,/ylog,ytickformat='(A1)',yr=yr ENDIF IF ct_filt NE 0 THEN BEGIN xx=((*(*!dustem_data).uext).wav)[idx_filt] yy=dustem_interp[idx_filt] ;dustem_plot_mlog,xx,yy,ppositions=position, /overplot, noerase=1, color='red',psym=6,syms=2,xr=xr,/xlog dustem_plot_mlog,1/xx,yy,ppositions=position[0],/positive_only, /overplot, noerase=1, color='red',psym=6,syms=2,xr=xr,/xlog,/ylog,ytickformat='(A1)',yr=yr ENDIF dustem_plot_mlog,1/st.polext.wav,dustem_spec,ppositions=position[0],/positive_only,/overplot,noerase=1,xr=xr,/xlog,/ylog,ytickformat='(A1)',yr=yr endif endif ;stop if keyword_set(negative_only) then begin ;stop testlow=where(dustem_spec LT 0., countmodellow) if testngtv ne 0 or countmodellow ne 0 then begin dustem_plot_mlog,1/vectw,vectx,ppositions=position[0],/negative_only, noerase=1, color='Indian Red',psym=7,syms=2,xr=xr,/xlog,/ylog,/nodata,xtickformat='(A1)',xtit='',ytickformat='(A1)',yr=yr ;Plotting of the spectra of the dust species FOR i=0L,Ngrains-1 DO BEGIN vecto = transpose(((st.polext.(1))[i,*]+(st.polext.(2))[i,*])) vecte = transpose(((st.ext.(1))[i,*]+(st.ext.(2))[i,*])) testneq = where( vecto ne 0,countneq) ;stop if countneq ne 0 then begin vecfin = vecto*0.0 ;em_tot can be used here right? ;stop vecfin[testneq] = vecto[testneq]/vecte[testneq];extra_spec[testneq];(st.sed.em_tot)[testneq];(st.sed.(i+1))[testneq];*fact;(st.sed.(i+1))[testneq] ;stop polar_ippsi2iqu,vecte*(*!dustem_HCD)/1.0e21,specqgrain,specugrain,vecfin,replicate(!dustem_psi_ext,n_elements(vecfin)) ;temporary solution ;stop ;dustem_plot_mlog,st.polsed.wav,specqgrain,ppositions=position,/overplot,noerase=1,color=use_cols[i],xr=xr,/xlog dustem_plot_mlog,1/st.polext.wav,specugrain,ppositions=position[0],/negative_only,/overplot,noerase=1,color=use_cols[i],xr=xr,/xlog,/ylog,ytickformat='(A1)',yr=yr endif ENDFOR ;Plotting of the plugins for i=0L,n_plgns-1 do begin IF isa((*!dustem_plugin).(0).spec) THEN BEGIN IF total(strsplit((*(*!dustem_plugin).(i).scope),'+',/extract) EQ 'ADD_POLEXT') THEN begin ;dustem_plot_mlog,st.polsed.wav,(*(*!dustem_plugin).(i))[*,1],ppositions=position, /overplot, noerase=1, color=clrs_plgns[i], linestyle=2,xr=xr,/xlog dustem_plot_mlog,1/st.polext.wav,(*(*!dustem_plugin).(i).spec)[*,2],ppositions=position[0],/negative_only,/overplot,noerase=1, color=clrs_plgns[i], linestyle=2 ,xr=xr,/xlog,/ylog,ytickformat='(A1)',yr=yr ENDIF ENDIF endfor ;PLotting of the interpolates corresponding to spectrum and filter points IF ct_spec NE 0 THEN BEGIN xx=((*(*!dustem_data).uext).wav)[idx_spec] yy=dustem_interp[idx_spec] ;dustem_plot_mlog,xx,yy,ppositions=position,/overplot, noerase=1, color='red',psym=7,syms=2,xr=xr,/xlog dustem_plot_mlog,1/xx,yy,ppositions=position[0],/negative_only, /overplot, noerase=1, color='Indian Red',psym=7,syms=2,xr=xr,/xlog,/ylog,ytickformat='(A1)',yr=yr ENDIF IF ct_filt NE 0 THEN BEGIN xx=((*(*!dustem_data).uext).wav)[idx_filt] yy=dustem_interp[idx_filt] ;dustem_plot_mlog,xx,yy,ppositions=position, /overplot, noerase=1, color='red',psym=6,syms=2,xr=xr,/xlog dustem_plot_mlog,1/xx,yy,ppositions=position[0],/negative_only, /overplot, noerase=1, color='red',psym=6,syms=2,xr=xr,/xlog,/ylog,ytickformat='(A1)',yr=yr ENDIF ;Plotting of the total dust emission spectrum dustem_plot_mlog,1/st.polext.wav,dustem_spec,ppositions=position[0],/negative_only,/overplot,noerase=1,xr=xr,/xlog,/ylog,ytickformat='(A1)',yr=yr endif endif ;stop endif else begin ;The data points in the plot that remain unchanged.; DO NOT USE AN ELSE HERE. ;stop ;cgaxis, xaxis=1,xlog=1, xs=1,charsize=1.5,xtickformat='(A1)' xyouts,pospltxt[0],pospltxt[1],textoidl('\tau_{UEXT}'),color=0,/normal,charsize=1.3;,charthick=2.0 ;if ct_hdnpts ne 0 then begin ;Hidden data points are present ;Locating the hidden spectrum and filter data points ;SADLY I STILL DON'T HAVE A SOLUTION FOR THE PLOTTING OF NULL VALUES. ;idx_filt_hdn = where(((*(*!dustem_show).qsed).filt_names)(idx_rmv_sed) NE 'SPECTRUM',ct_filt_hdn) ;idx_spec_hdn = where(((*(*!dustem_show).qsed).filt_names)(idx_rmv_sed) EQ 'SPECTRUM',ct_spec_hdn) if ct_hdnpts then begin idx_filt_hdn_pstv = where(((*(*!dustem_show).uext).filt_names)(idx_rmv_sed) NE 'SPECTRUM' and ((*(*!dustem_show).uext).values)(idx_rmv_sed) gt 0,ct_filt_hdn_pstv) idx_spec_hdn_pstv = where(((*(*!dustem_show).uext).filt_names)(idx_rmv_sed) EQ 'SPECTRUM' and ((*(*!dustem_show).uext).values)(idx_rmv_sed) gt 0,ct_spec_hdn_pstv) idx_filt_hdn_ngtv = where(((*(*!dustem_show).uext).filt_names)(idx_rmv_sed) NE 'SPECTRUM' and ((*(*!dustem_show).uext).values)(idx_rmv_sed) lt 0,ct_filt_hdn_ngtv) idx_spec_hdn_ngtv = where(((*(*!dustem_show).uext).filt_names)(idx_rmv_sed) EQ 'SPECTRUM' and ((*(*!dustem_show).uext).values)(idx_rmv_sed) lt 0,ct_spec_hdn_ngtv) endif if keyword_set(positive_only) then begin if ct_spec ne 0 then begin rms=2.*((*(*!dustem_data).uext).sigma)(idx_spec)/2. ;dustem_plot_mlog,((*(*!dustem_data).qsed).wav)(idx_spec),-((*(*!dustem_data).qsed).values)(idx_spec),ppositions=position,charsize=1.15,color='Dodger Blue',psym=16,syms=0.8,xs=1,xr=xr,/nodata,noerase=1,/positive_only,xtickformat='(A1)',xtit='',/xlog,/ylog,yr=yr;,ytickformat='(A1)' dustem_plot_mlog,1/((*(*!dustem_data).uext).wav)(idx_spec),((*(*!dustem_data).uext).values)(idx_spec),ppositions=position[0],charsize=1.15,color='Powder Blue',psym=16,syms=0.8,xs=1,xr=xr,noerase=1,/positive_only,xtickformat='(A1)',xtit='',/xlog,/ylog,yr=yr;,ytickformat='(A1)' dustem_plot_mlog,1/((*(*!dustem_data).uext).wav)(idx_spec),((*(*!dustem_data).uext).values)(idx_spec),ppositions=position[0],color='Powder Blue',/positive_only,noerase=1,/overplot,rms=rms,xtit='',charsize=1.15,xtickformat='(A1)',xs=1,psym=16,syms=0.8,xr=xr,/xlog,/ylog,yr=yr,ytickformat='(A1)' endif if ct_filt ne 0 then begin rms=2.*((*(*!dustem_data).uext).sigma)(idx_filt)/2. ; dustem_plot_mlog,((*(*!dustem_data).qsed).wav)(idx_filt),-1.*((*(*!dustem_data).qsed).values)(idx_filt),ppositions=position,charsize=1.15,color='Dodger Blue',psym=16,syms=0.8,xs=1,xr=xr,/nodata,noerase=1,/negative_only,xtickformat='(A1)',xtit='',/xlog,/ylog,yr=yr;,ytickformat='(A1)' if ct_spec ne 0 then dustem_plot_mlog,1/((*(*!dustem_data).uext).wav)(idx_filt),((*(*!dustem_data).uext).values)(idx_filt),ppositions=position[0],charsize=1.15,color='Dodger Blue',psym=16,syms=0.8,xs=1,xr=xr,noerase=1,/positive_only,xtickformat='(A1)',xtit='',/xlog,/ylog,yr=yr,ytickformat='(A1)' if ct_spec eq 0 then dustem_plot_mlog,1/((*(*!dustem_data).uext).wav)(idx_filt),((*(*!dustem_data).uext).values)(idx_filt),ppositions=position[0],charsize=1.15,color='Dodger Blue',psym=16,syms=0.8,xs=1,xr=xr,noerase=1,/positive_only,xtickformat='(A1)',xtit='',/xlog,/ylog,yr=yr;,ytickformat='(A1)' dustem_plot_mlog,1/((*(*!dustem_data).uext).wav)(idx_filt),((*(*!dustem_data).uext).values)(idx_filt),ppositions=position[0],color='Dodger Blue',/positive_only,noerase=1,/overplot,rms=rms,xtit='',charsize=1.15,xtickformat='(A1)',xs=1,psym=16,syms=0.8,xr=xr,/xlog,/ylog,yr=yr,ytickformat='(A1)' endif if testpstv ne 0 then begin plotsym, 0 if ct_hdnpts NE 0 then begin if ct_spec_hdn_pstv ne 0 then begin xx = (((*(*!dustem_show).uext).wav)[idx_rmv_sed])(idx_spec_hdn_pstv) yy = (((*(*!dustem_show).uext).values)[idx_rmv_sed])(idx_spec_hdn_pstv) rms=2.*(((*(*!dustem_show).uext).sigma)[idx_rmv_sed])(idx_spec_hdn_pstv)/2. dustem_plot_mlog,1/xx,yy,ppositions=position[0],/positive_only,xs=1,noerase=1,charsize=1.15,/overplot,xtickformat='(A1)',xr=xr,color='Black',psym=16,syms=0.8,/xlog,/ylog,yr=yr dustem_plot_mlog,1/xx,yy,ppositions=position[0],/positive_only,noerase=1,color='Black',/overplot,rms=rms,yr=yr,xtickformat='(A1)',xr=xr,xs=1,/xlog,/ylog;,psym=8,syms=0.8 endif if ct_filt_hdn_pstv ne 0 then begin xx = (((*(*!dustem_show).uext).wav)[idx_rmv_sed])(idx_filt_hdn_pstv) yy = (((*(*!dustem_show).uext).values)[idx_rmv_sed])(idx_filt_hdn_pstv) rms=2.*(((*(*!dustem_show).uext).sigma)[idx_rmv_sed])(idx_filt_hdn_pstv)/2. dustem_plot_mlog,1/xx,yy,ppositions=position[0],/positive_only,xs=1,noerase=1,charsize=1.15,/overplot,xtickformat='(A1)',xr=xr,color='Black',psym=16,syms=0.8,/xlog,/ylog,yr=yr dustem_plot_mlog,1/xx,yy,ppositions=position[0],/positive_only,xs=1,noerase=1,color='Black',/overplot,rms=rms,xr=xr,yr=yr,xtickformat='(A1)',/xlog,/ylog;,psym=8,syms=0.8 endif endif endif else begin if ct_spec ne 0 then dustem_plot_mlog,1/((*(*!dustem_data).uext).wav)(idx_spec),((*(*!dustem_data).uext).values)(idx_spec),ppositions=position[0],charsize=1.15,/nodata,color='Powder Blue',psym=16,syms=0.8,xs=1,xr=xr,noerase=1,/positive_only,xtickformat='(A1)',xtit='',/xlog,/ylog,yr=yr;,ytickformat='(A1)' if ct_filt ne 0 and ct_spec eq 0 then dustem_plot_mlog,1/((*(*!dustem_data).uext).wav)(idx_filt),-((*(*!dustem_data).uext).values)(idx_filt),/nodata,ppositions=position[0],charsize=1.15,color='Dodger Blue',psym=16,syms=0.8,xs=1,xr=xr,noerase=1,/positive_only,xtickformat='(A1)',xtit='',/xlog,/ylog,yr=yr;,ytickformat='(A1)' endelse endif if keyword_set(negative_only) then begin if testngtv ne 0 then begin plotsym, 0 if ct_spec ne 0 then begin rms=2.*((*(*!dustem_data).uext).sigma)(idx_spec)/2. ;dustem_plot_mlog,((*(*!dustem_data).qsed).wav)(idx_spec),-((*(*!dustem_data).qsed).values)(idx_spec),ppositions=position,charsize=1.15,color='Dodger Blue',psym=16,syms=0.8,xs=1,xr=xr,/nodata,noerase=1,/negative_only,xtickformat='(A1)',xtit='',/xlog,/ylog,yr=yr;,ytickformat='(A1)' ; if ct_spec_hdn_ngtv ne 0 then dustem_plot_mlog,((*(*!dustem_data).qsed).wav)(idx_spec),((*(*!dustem_data).qsed).values)(idx_spec),ppositions=position,/overplot,charsize=1.15,color='Dodger Blue',psym=16,syms=0.8,xs=1,xr=xr,noerase=1,/negative_only,xtickformat='(A1)',xtit='',/xlog,/ylog,yr=yr else begin dustem_plot_mlog,1/((*(*!dustem_data).uext).wav)(idx_spec),((*(*!dustem_data).uext).values)(idx_spec),ppositions=position[0],charsize=1.15,color='Powder Blue',psym=16,syms=0.8,xs=1,xr=xr,noerase=1,/negative_only,xtickformat='(A1)',xtit='',/xlog,/ylog,yr=yr;,ytickformat='(A1)' ;endelse;,ytickformat='(A1)' dustem_plot_mlog,1/((*(*!dustem_data).uext).wav)(idx_spec),((*(*!dustem_data).uext).values)(idx_spec),ppositions=position[0],color='Powder Blue',/negative_only,noerase=1,/overplot,rms=rms,xtit='',charsize=1.15,xtickformat='(A1)',xs=1,xr=xr,/xlog,/ylog,yr=yr,ytickformat='(A1)';,psym=16,syms=0.8 endif if ct_filt ne 0 then begin rms=2.*((*(*!dustem_data).uext).sigma)(idx_filt)/2. ; dustem_plot_mlog,((*(*!dustem_data).qsed).wav)(idx_filt),-1.*((*(*!dustem_data).qsed).values)(idx_filt),ppositions=position,charsize=1.15,color='Dodger Blue',psym=16,syms=0.8,xs=1,xr=xr,/nodata,noerase=1,/negative_only,xtickformat='(A1)',xtit='',/xlog,/ylog,yr=yr;,ytickformat='(A1)' ;if ct_filt_hdn_ngtv ne 0 then dustem_plot_mlog,((*(*!dustem_data).qsed).wav)(idx_filt),((*(*!dustem_data).qsed).values)(idx_filt),ppositions=position,charsize=1.15,color='Dodger Blue',/overplot,psym=16,syms=0.8,xs=1,xr=xr,noerase=1,/negative_only,xtickformat='(A1)',xtit='',/xlog,/ylog,yr=yr else begin if ct_spec ne 0 then dustem_plot_mlog,1/((*(*!dustem_data).uext).wav)(idx_filt),((*(*!dustem_data).uext).values)(idx_filt),ppositions=position[0],charsize=1.15,color='Dodger Blue',psym=16,syms=0.8,xs=1,xr=xr,noerase=1,/negative_only,xtickformat='(A1)',xtit='',/xlog,/ylog,yr=yr,ytickformat='(A1)' if ct_spec eq 0 then dustem_plot_mlog,1/((*(*!dustem_data).uext).wav)(idx_filt),((*(*!dustem_data).uext).values)(idx_filt),ppositions=position[0],charsize=1.15,color='Dodger Blue',psym=16,syms=0.8,xs=1,xr=xr,noerase=1,/negative_only,xtickformat='(A1)',xtit='',/xlog,/ylog,yr=yr;,ytickformat='(A1)' ;endelse ;,ytickformat='(A1)' dustem_plot_mlog,1/((*(*!dustem_data).uext).wav)(idx_filt),((*(*!dustem_data).uext).values)(idx_filt),ppositions=position[0],color='Dodger Blue',/negative_only,noerase=1,/overplot,rms=rms,xtit='',charsize=1.15,xtickformat='(A1)',xs=1,xr=xr,/xlog,/ylog,yr=yr,ytickformat='(A1)' endif if ct_hdnpts NE 0 then begin if ct_spec_hdn_ngtv ne 0 then begin xx = (((*(*!dustem_show).uext).wav)[idx_rmv_sed])(idx_spec_hdn_ngtv) yy = (((*(*!dustem_show).uext).values)[idx_rmv_sed])(idx_spec_hdn_ngtv) rms=2.*(((*(*!dustem_show).uext).sigma)[idx_rmv_sed])(idx_spec_hdn_ngtv)/2. dustem_plot_mlog,1/xx,yy,ppositions=position[0],/negative_only,xs=1,noerase=1,charsize=1.15,/overplot,xtickformat='(A1)',xr=xr,color='Black',psym=16,syms=0.8,/xlog,/ylog,yr=yr dustem_plot_mlog,1/xx,yy,ppositions=position[0],/negative_only,noerase=1,color='Black',/overplot,rms=rms,yr=yr,xtickformat='(A1)',xr=xr,xs=1,/xlog,/ylog;,psym=8,syms=0.8 endif if ct_filt_hdn_ngtv ne 0 then begin xx = (((*(*!dustem_show).uext).wav)[idx_rmv_sed])(idx_filt_hdn_ngtv) yy = (((*(*!dustem_show).uext).values)[idx_rmv_sed])(idx_filt_hdn_ngtv) rms=2.*(((*(*!dustem_show).uext).sigma)[idx_rmv_sed])(idx_filt_hdn_ngtv)/2. dustem_plot_mlog,1/xx,yy,ppositions=position[0],/negative_only,xs=1,noerase=1,charsize=1.15,/overplot,xtickformat='(A1)',xr=xr,color='Black',psym=16,syms=0.8,/xlog,/ylog,yr=yr dustem_plot_mlog,1/xx,yy,ppositions=position[0],/negative_only,xs=1,noerase=1,color='Black',/overplot,rms=rms,xr=xr,yr=yr,xtickformat='(A1)',/xlog,/ylog;,psym=8,syms=0.8 endif endif endif else begin if ct_spec ne 0 then dustem_plot_mlog,1/((*(*!dustem_data).uext).wav)(idx_spec),-((*(*!dustem_data).uext).values)(idx_spec),ppositions=position[0],charsize=1.15,/nodata,color='Powder Blue',psym=16,syms=0.8,xs=1,xr=xr,noerase=1,/negative_only,xtickformat='(A1)',xtit='',/xlog,/ylog,yr=yr;,ytickformat='(A1)' if ct_filt ne 0 and ct_spec eq 0 then dustem_plot_mlog,1/((*(*!dustem_data).uext).wav)(idx_filt),-((*(*!dustem_data).uext).values)(idx_filt),/nodata,ppositions=position[0],charsize=1.15,color='Dodger Blue',psym=16,syms=0.8,xs=1,xr=xr,noerase=1,/negative_only,xtickformat='(A1)',xtit='',/xlog,/ylog,yr=yr;,ytickformat='(A1)' endelse ;stop endif endelse end 'PARAMETERS':begin ;needs the followingd data (errors+res+formats) p_dim = dustem_interp Npar=n_elements(p_dim) if keyword_set(refresh) then begin ;data in the parameter window that is being refreshed k=0 IF isa((*!dustem_fit).fixed_param_descs) THEN BEGIN Nfpar = n_elements((*(*!dustem_fit).fixed_param_descs)) res = (*(*!dustem_fit).fixed_param_init_values) FOR i=0L,Nfpar-1 DO BEGIN parameter_description = (*(*!dustem_fit).fixed_param_descs)[i] parameter_type = dustem_parameter_description2type(parameter_description,string_name=string_name) IF parameter_type NE 'PLUGIN' THEN BEGIN yypos = 0.8 - k*0.09 k+=1 ENDIF ENDFOR ENDIF prms_dscs = (*(*!dustem_fit).param_descs) prms_tps = strarr(n_elements(prms_dscs)) for i=0L,n_elements(prms_dscs)-1 do begin prms_tps[i] = dustem_parameter_description2type(prms_dscs[i]) endfor testprms = where(prms_tps ne 'PLUGIN', ct_data) if ct_data ne 0 then begin if ~isa(yypos) then yypos = 0.8 else yypos-=0.22 ;not sure about this res = dustem_interp errors = dustem_spec yypostmp = yypos k=0 FOR i=0L,Npar-1 DO BEGIN ;---refreshing--- parameter_description = (*(*!dustem_fit).param_descs)[i] parameter_type = dustem_parameter_description2type(parameter_description,string_name=string_name) testpop = STRUPCASE(strmid(strtrim(parameter_description,2),3,1,/reverse_offset)) EQ 'O' IF parameter_type EQ 'FORTRAN' then begin if testpop then begin indpop=fix(STRUPCASE(strmid(strtrim(parameter_description,2),12,1,/reverse_offset))) string_name=(((*!dustem_params). GRAINS).grain_type)[indpop] endif ;choosing a step of 0.09 in norm coordinates yypos = yypostmp - k*0.09 ;xxpos = 0.0 str= strtrim(string(res[i],format=frmt1) + textoidl(' \pm ') + string(errors(i),format=frmt1),2) esc_txt = strjoin(replicate(' ', strlen(strtrim(string(string_name+' = ',format=frmt0),2)))) esc_txt = esc_txt+' ' IF !dustem_end NE 0 THEN esc_txt=strtrim(string(string_name+' = ',format=frmt0),2)+' ' ;so that ps file isn't distorted xyouts,0.5,yypos,string(esc_txt+str),color=0,alignment=0.5,/normal,charsize=1. k+=1 ENDIF ENDFOR ENDIF endif else begin ;data in the parameter window that is unchanged IF isa((*!dustem_fit).fixed_param_descs) THEN BEGIN Nfpar = n_elements((*(*!dustem_fit).fixed_param_descs)) res = (*(*!dustem_fit).fixed_param_init_values) iii=0 FOR i=0L,Nfpar-1 DO BEGIN parameter_description = (*(*!dustem_fit).fixed_param_descs)[i] parameter_type = dustem_parameter_description2type(parameter_description,string_name=string_name) if parameter_type NE 'PLUGIN' then iii+=1 ENDFOR k = 0 if iii ne 0 then begin xxpos = 0.5 yypos = 0.9 xyouts, xxpos, yypos, '___FROZEN___', charsize=1.2, alignment=0.5,/normal, color=cgcolor('red') endif FOR i=0L,Nfpar-1 DO BEGIN parameter_description = (*(*!dustem_fit).fixed_param_descs)[i] parameter_type = dustem_parameter_description2type(parameter_description,string_name=string_name) testpop = STRUPCASE(strmid(strtrim(parameter_description,2),3,1,/reverse_offset)) EQ 'O' IF parameter_type NE 'PLUGIN' THEN BEGIN ; don't know why I'm using this instead of EQ 'FORTRAN', they should be equivalent right since we don't use the 'wrapper' type. IF testpop then begin indpop=fix(STRUPCASE(strmid(strtrim(parameter_description,2),12,1,/reverse_offset))) string_name=(((*!dustem_params). GRAINS).grain_type)[indpop] ENDIF yypos = 0.8 - k*0.09 xxpos = 0.5 str=strtrim(string(string_name+' = ',format=frmt0)+string(res[i],format=frmt1),2) xyouts,xxpos,yypos,str,color=0,/normal,alignment=0.5,charsize=1. k+=1 ENDIF ENDFOR ENDIF xxpos = 0.5 ;test so that this string isn't displayed when there are no free parameters: prms_dscs = (*(*!dustem_fit).param_descs) prms_tps = strarr(n_elements(prms_dscs)) for i=0L,n_elements(prms_dscs)-1 do begin prms_tps[i] = dustem_parameter_description2type(prms_dscs[i]) endfor testprms = where(prms_tps ne 'PLUGIN', ct_data) IF ct_data ne 0 then begin if ~isa(yypos) then yypos = 0.9 else yypos-=0.1*1.2 ;not sure about this xyouts, xxpos, yypos, '___FREE___', charsize=1.2, alignment=0.5,/normal,color=cgcolor('forest green') k=0 res = dustem_interp errors = dustem_spec yypos-=0.1 yypostmp = yypos FOR i=0L,Npar-1 DO BEGIN parameter_description = (*(*!dustem_fit).param_descs)[i] parameter_type = dustem_parameter_description2type(parameter_description,string_name=string_name) testpop = STRUPCASE(strmid(strtrim(parameter_description,2),3,1,/reverse_offset)) EQ 'O' ;stop IF parameter_type EQ 'FORTRAN' then begin if testpop then begin indpop=fix(STRUPCASE(strmid(strtrim(parameter_description,2),12,1,/reverse_offset))) string_name=(((*!dustem_params). GRAINS).grain_type)[indpop] endif yypos = yypostmp - k*0.09 xxpos = 0.5 str=strtrim(string(string_name+' = ',format=frmt0),2) esc_txt = strjoin(replicate(' ', strlen(strtrim(string(res[i],format=frmt1)+textoidl(' \pm ')+string(errors(i),format=frmt1),2)))) esc_txt = ' '+esc_txt ;using cgwindow's weakness we can erase the last iteration so that the refreshed block does it. This is so that the ps file isn't scrambeld. ;cgwindow runs all commands when the window is erased. Which happens at each refreshing (this means that cgwindow runs this block anyway). These are the rules when using the /replacecmd keyword. IF !dustem_end NE 0 THEN BEGIN esc_txt='' str='' ENDIF xyouts,xxpos,yypos,str+esc_txt,color=0,alignment=0.5,/normal,charsize=1. k+=1 ENDIF ENDFOR ENDIF endelse end 'PLUGINS':begin ;plugins use the cgwindow 'bug' in another way. Instead of replacing the refreshed run by the last string we want displayed, it removes it and relies on the 'extra' run of the fixed part of the data that cgwindow carries. p_dim = dustem_interp Npar=n_elements(p_dim) if keyword_set(refresh) then begin ;(REFRESHED RUN) IF isa((*!dustem_fit).fixed_param_descs) THEN BEGIN Nfpar = n_elements((*(*!dustem_fit).fixed_param_descs)) res = (*(*!dustem_fit).fixed_param_init_values) k=0 FOR i=0L,Nfpar-1 DO BEGIN parameter_description = (*(*!dustem_fit).fixed_param_descs)[i] parameter_type = dustem_parameter_description2type(parameter_description,string_name=string_name) ;stop IF parameter_type EQ 'PLUGIN' THEN BEGIN yypos = 0.8 - k*0.09 k+=1 ENDIF ENDFOR ENDIF prms_dscs = (*(*!dustem_fit).param_descs) prms_tps = strarr(n_elements(prms_dscs)) for i=0L,n_elements(prms_dscs)-1 do begin prms_tps[i] = dustem_parameter_description2type(prms_dscs[i]) endfor testprms = where(prms_tps EQ 'PLUGIN', ct_data) if ct_data ne 0 then begin if ~isa(yypos) then yypos = 0.8 else yypos-=0.22 ;not sure about this k=0 res = dustem_interp errors = dustem_spec yypostmp = yypos FOR i=0L,Npar-1 DO BEGIN ;stop parameter_description = (*(*!dustem_fit).param_descs)[i] parameter_type = dustem_parameter_description2type(parameter_description,string_name=string_name) ;stop IF parameter_type EQ 'PLUGIN' THEN BEGIN ii = strsplit(string_name,'_',count=countx) & ii = ii(countx-1)-1 ; Locating the last underscore to automate the extraction of the plugin's keyword mm = where(tag_names(*!dustem_plugin) eq strupcase(strmid(string_name,7,ii-7))) ;,coun) ; Selecting a plugin through matching the string name of the plugin form the scope system variable with the one read from the parameter description vector prmtg = (*(*!dustem_plugin).(mm).paramtag) indtg = (strmid(string_name,ii+1)) ;indtg = strmid(indtg,0,/reverse_offset) indtg = fix(indtg) prmtg = prmtg[indtg-1] yypos = yypostmp - k*0.09 xxpos = 0.5 ;copied from params str= strtrim(string(res[i],format=frmt1) + textoidl(' \pm ') + string(errors(i),format=frmt1),2) esc_txt = strjoin(replicate(' ', strlen(strtrim(string(strmid(string_name,7,ii-7)+' ['+strmid(string_name,ii+1)+']: '+prmtg+' = ',format=frmt0),2)))) ;esc_txt = strjoin(replicate(' ', strlen(strtrim(string(string_name+' = ',format=frmt0),2)))) esc_txt = esc_txt+' ' IF !dustem_end NE 0 THEN esc_txt = strtrim(string(strmid(string_name,7,ii-7)+' ['+strmid(string_name,ii+1)+']: '+prmtg+' = ',format=frmt0),2);esc_txt=strtrim(string(string_name+' = ',format=frmt0),2)+' ' ;so that ps file isn't distorted xyouts,0.5,yypos,string(esc_txt+str),color=0,alignment=0.5,/normal,charsize=1. k+=1 ENDIF ENDFOR ENDIF endif else begin ;plotting of strings that are fixed IF isa((*!dustem_fit).fixed_param_descs) THEN BEGIN Nfpar = n_elements((*(*!dustem_fit).fixed_param_descs)) res = (*(*!dustem_fit).fixed_param_init_values) iii=0 FOR i=0L,Nfpar-1 DO BEGIN parameter_description = (*(*!dustem_fit).fixed_param_descs)[i] parameter_type = dustem_parameter_description2type(parameter_description,string_name=string_name) if parameter_type EQ 'PLUGIN' then iii+=1 ENDFOR k = 0 if iii ne 0 then begin xxpos = 0.5 yypos = 0.9 xyouts, xxpos, yypos, '___FROZEN___', charsize=1.2,alignment=0.5, /normal, color=cgcolor('red') endif FOR i=0L,Nfpar-1 DO BEGIN parameter_description = (*(*!dustem_fit).fixed_param_descs)[i] parameter_type = dustem_parameter_description2type(parameter_description,string_name=string_name) testpop = STRUPCASE(strmid(strtrim(parameter_description,2),3,1,/reverse_offset)) EQ 'O' IF parameter_type EQ 'PLUGIN' THEN BEGIN ii = strsplit(string_name,'_',count=countx) & ii = ii(countx-1)-1 ; Locating the last underscore to automate the extraction of the plugin's keyword mm = where(tag_names(*!dustem_plugin) eq strupcase(strmid(string_name,7,ii-7))) ;,coun) ; Selecting a plugin through matching the string name of the plugin form the scope system variable with the one read from the parameter description vector prmtg = (*(*!dustem_plugin).(mm).paramtag) indtg = (strmid(string_name,ii+1)) ;indtg = strmid(indtg,0,/reverse_offset) indtg = fix(indtg) ;stop prmtg = prmtg[indtg-1] yypos = 0.8 - k*0.09 xxpos = 0.5 str = string(strmid(string_name,7,ii-7)+' ['+strmid(string_name,ii+1)+']: '+prmtg+' = ',format=frmt0) str=strtrim(str,2) str1=str+string(res[i],format=frmt1) xyouts,xxpos,yypos,str1,color=0,/normal,alignment=0.5,charsize=1. k+=1 ENDIF ENDFOR ENDIF xxpos = 0 prms_dscs = (*(*!dustem_fit).param_descs) prms_tps = strarr(n_elements(prms_dscs)) for i=0L,n_elements(prms_dscs)-1 do begin prms_tps[i] = dustem_parameter_description2type(prms_dscs[i]) endfor testprms = where(prms_tps EQ 'PLUGIN', ct_data) IF ct_data ne 0 then begin if ~isa(yypos) then yypos = 0.9 else yypos-=0.1*1.2 ;not sure about this xxpos = 0.5 xyouts, xxpos, yypos, '___FREE___', charsize=1.2, alignment=0.5,/normal,color=cgcolor('forest green') k=0 res = dustem_interp errors = dustem_spec yypos-=0.1 yypostmp = yypos FOR i=0L,Npar-1 DO BEGIN parameter_description = (*(*!dustem_fit).param_descs)[i] parameter_type = dustem_parameter_description2type(parameter_description,string_name=string_name) ;stop IF parameter_type EQ 'PLUGIN' THEN BEGIN ii = strsplit(string_name,'_',count=countx) & ii = ii(countx-1)-1 ; Locating the last underscore to automate the extraction of the plugin's keyword mm = where(tag_names(*!dustem_plugin) eq strupcase(strmid(string_name,7,ii-7))) ; ; Selecting a plugin through matching the string name of the plugin form the scope system variable with the one read from the parameter description vector prmtg = (*(*!dustem_plugin).(mm).paramtag) ;these are all plugin parameter names indtg = (strmid(string_name,ii+1)) ;string giving the parameter number ;JPB: I don't see why the following line is needed. When parameter number is larger than 10, leads to an error ;indtg = strmid(indtg,0,/reverse_offset) indtg = fix(indtg) prmtg = prmtg[indtg-1] yypos = yypostmp - k*0.09 xxpos = 0.5;15 ;copied from params ;str=strtrim(string(string_name+' = ',format=frmt0),2) str = strtrim(string(strmid(string_name,7,ii-7)+' ['+strmid(string_name,ii+1)+']: '+prmtg+' = ',format=frmt0),2) esc_txt = strjoin(replicate(' ', strlen(strtrim(string(res[i],format=frmt1)+textoidl(' \pm ')+string(errors(i),format=frmt1),2)))) ;esc_txt = strjoin(replicate(' ', strlen(strtrim(string(res[i],format=frmt1)+textoidl(' \pm ')+string(errors(i),format=frmt1),2)))) esc_txt = ' '+esc_txt IF !dustem_end NE 0 THEN BEGIN esc_txt='' str='' ENDIF xyouts,xxpos,yypos,str+esc_txt,color=0,alignment=0.5,/normal,charsize=1. k+=1 ENDIF ENDFOR ENDIF endelse end endcase endfor endif ;This is because I stupidly gave arrays/lists and their elements the same variable names. ;check beginning of loop. if keyword_set(dustem_interp) then dustem_interp = dustem_interp_sv if keyword_set(dustem_spec) then dustem_spec = dustem_spec_sv if keyword_set(extra_spec) then extra_spec = extra_spec_sv if keyword_set(position) then position = position_sv the_end: END