PRO dustem_plot_dataset, st, dustem_interp, dustem_spec, extra_spec, dataset=dataset, norm=norm, refresh=refresh, nodata=nodata, 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 ; CALLING SEQUENCE: ; dustem_plot_dataset, st, dustem_interp, dustem_spec, extra_spec, dataset=dataset, norm=norm, refresh=refresh, nodata=nodata, position=position,positive_only=positive_only, negative_only=negative_only, _extra=_extra ; INPUTS: ; p_dim ; OPTIONAL INPUT PARAMETERS: ; st ; dustem_interp ; dustem_spec ; extra_spec : used only in the plotting of polfrac and the parameters/plugins ; dataset=dataset ; norm=norm ; refresh=refresh : when used it plots the part of the dataset that changes with each mpfit iteration. Otherwhise it plots the data that does not wary with the mpfit iteration. ; nodata=nodata ; position=position ; positive_only=positive_only ; negative_only=negative_only ; OUTPUTS: ; NONE ; OPTIONAL OUTPUT PARAMETERS: ; ; ACCEPTED KEY-WORDS: ; help ; 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 ; Evolution details on the DustEMWrap gitlab. ;- IF keyword_set(help) THEN BEGIN doc_library,'dustem_plot_dataset' goto,the_end END 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 degtorad = !pi/180 ;factor that the arctan will be devided by in order to have an axis in degrees. Talk to JP maybe he wants angle in radians. 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(dataset) then begin ;!run_pol is implied for QSED/USED/POLSED etc... Case strupcase(dataset) of 'SED': begin ;This test will have to change. It will now depend on the content of the new system variable ;SETTING THE PLOT RANGE xr = !dustem_plot_range.sed.xr yr = !dustem_plot_range.sed.yr vectw=DINDGEN(1001)*(alog10(1E7) - alog10(1E5))/(1000 - 1L) + alog10(1E5) vectw=10^vectw[1:*] vectw=[wavs,vectw] vectx=vectw*0+1 idx_filt=where((*(*!dustem_data).sed).filt_names NE 'SPECTRUM',ct_filt) idx_spec=where((*(*!dustem_data).sed).filt_names EQ 'SPECTRUM',ct_spec) ;#1) get the plotting keywords (pertaining to each data set) @here when the _extra structure is ready if keyword_set(nodata) then begin ;when the data is not present if keyword_set(norm) then begin ;normalized plot xtit=textoidl('\lambda (\mum)') if !run_pol then xtit = '' cgplot,vectw,vectx,/xlog,/ys,xs=1,pos=position,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[0],pospltxt[1],textoidl('norm'),color=0,/normal,charsize=1.1 endif ;else begin ;normal plot if not keyword_set(norm) then begin ;/NODATA cgplot,wavs,wavs,/nodata,/ylog,/xlog,/ys,xs=9,pos=position,noerase=1,charsize=1.15,xtickformat='(A1)',color='Powder Blue',xr=xr,xtit='',yr=yr,psym=8,syms=0.8 axis, xaxis=1 ,xlog=1 ,xrange=((!const.c*1E6/xr)*1E-9),charsize=1.15,xtitle=textoidl('\nu (GHz)'),xticklen=0.05,xminor=10,color='black' xyouts,pospltxt[0],pospltxt[1],textoidl('I_{\nu} (MJy/sr)'),color=0,/normal,charsize=1.3;,charthick=2.0 ;endelse endif endif ;else begin ;when the data is present - to be replaced by if to test as a solution to the refreshing problem if not keyword_set(nodata) then begin if keyword_set(norm) then begin if keyword_set(refresh) then begin ;The data points in the plot that are being refreshed IF ct_spec NE 0 THEN BEGIN xx=((*(*!dustem_data).sed).wav)[idx_spec] yy=dustem_interp[idx_spec] rms=3.*((*(*!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 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' ENDIF IF ct_filt NE 0 THEN BEGIN xx=((*(*!dustem_data).sed).wav)[idx_filt] yy=dustem_interp[idx_filt] rms=3.*((*(*!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 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';,/overplot ENDIF endif ;else begin ;The data points in the plot that remain unchanged ; UNNECESSARY BLOCK but needede to limit erros when calls are made with missing keywords. ;stop if not keyword_set(refresh) then begin ;stop 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,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[0],pospltxt[1],textoidl('norm'),color=0,/normal,charsize=1.1 ;endelse endif endif ;else begin ; normal plot if not keyword_set(norm) then begin if keyword_set(refresh) then begin ;The data points in the plot are being refreshed ;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,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_SED') THEN begin cgoplot,st.sed.wav,((*(*!dustem_plugin).(i).spec)[*,0]),color=clrs_plgns[i],pos=position,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,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] cgoplot,xx,yy,color='red',pos=position,psym=6,syms=2,noerase=1 ENDIF ;Plotting of the total dust emission spectrum cgoplot,st.sed.wav,dustem_spec,pos=position,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,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=3.*((*(*!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,/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,/ys,xs=9,noerase=1,xtickformat='(A1)',xtit=' ',xr=xr,yr=yr,ytickformat='dstmwrp_exp',/ylog,/xlog ;Plotting of the filter error points rms=3.*((*(*!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 ;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 ;stop 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 ;stop 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,/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=3.*(((*(*!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,/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=3.*(((*(*!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 ;endelse endif ;endelse endif ;endelse endif ;stop end 'EXT': begin ;BE VERY CAREFUL THE EXTINCTION STRUCTURE AS REDERED BY DUSTEM IS DIFFERENT THAN THE EMISSION ONE ;SETTING THE PLOT RANGE xr = !dustem_plot_range.ext.xr yr = !dustem_plot_range.ext.yr vectw=DINDGEN(1001)*(alog10(1E7) - alog10(1E5))/(1000 - 1L) + alog10(1E5) vectw=10^vectw[1:*] vectw=[wavs,vectw] vectx=vectw*0+1 idx_filt=where((*(*!dustem_data).ext).filt_names NE 'SPECTRUM',ct_filt) idx_spec=where((*(*!dustem_data).ext).filt_names EQ 'SPECTRUM',ct_spec) ;#1) get the plotting keywords (pertaining to each data set) @here when the _extra structure is ready if keyword_set(nodata) then begin ;when the data is not present if keyword_set(norm) then begin ;normalized plot xtit=textoidl('1/\lambda (\mum^{-1})') if !run_pol then xtit = '' cgplot,1/vectw,vectx,/xlog,/ys,xs=1,pos=position,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[0],pospltxt[1],textoidl('norm'),color=0,/normal,charsize=1.1 endif ;else begin ;normal plot if not keyword_set(norm) then begin ;/NODATA cgplot,wavs,wavs,/nodata,/ylog,/xlog,/ys,xs=9,pos=position,noerase=1,charsize=1.15,xtickformat='(A1)',color='Powder Blue',xr=xr,xtit='',yr=yr,psym=8,syms=0.8 axis, xaxis=1 ,xlog=1 ,xrange=((!const.c*1E6*xr)*1E-9),charsize=1.15,xtitle=textoidl('\nu (GHz)'),xticklen=0.05,xminor=10,color='black' xyouts,pospltxt[0],pospltxt[1],textoidl('\tau_{EXT}'),color=0,/normal,charsize=1.3;,charthick=2.0 ;endelse endif endif ;else begin ;when the data is present - to be replaced by if to test as a solution to the refreshing problem if not keyword_set(nodata) then begin if keyword_set(norm) then begin if keyword_set(refresh) then begin ;The data points in the plot that are being refreshed IF ct_spec NE 0 THEN BEGIN xx=((*(*!dustem_data).ext).wav)[idx_spec] yy=dustem_interp[idx_spec] rms=3.*((*(*!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 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=3.*((*(*!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 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 ;else begin ;The data points in the plot that remain unchanged ; UNNECESSARY BLOCK but needede to limit erros when calls are made with missing keywords. ;stop if not keyword_set(refresh) then begin ;stop 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,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[0],pospltxt[1],textoidl('norm'),color=0,/normal,charsize=1.1 ;endelse endif endif ;else begin ; normal plot if not keyword_set(norm) then begin if keyword_set(refresh) then begin ;The data points in the plot are being refreshed ;not so sure about the multiplicative factor ;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,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,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,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,psym=6,syms=2,noerase=1 ENDIF ;Plotting of the total dust emission spectrum cgoplot,1/st.ext.wav,dustem_spec,pos=position,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,1/((*(*!dustem_data).ext).wav)(idx_spec),((*(*!dustem_data).ext).values)(idx_spec),/ylog,/xlog,/ys,xs=9,pos=position,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=3.*((*(*!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,/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,/ys,xs=9,noerase=1,xtickformat='(A1)',xtit=' ',xr=xr,yr=yr,ytickformat='dstmwrp_exp',/ylog,/xlog ;Plotting of the filter error points rms=3.*((*(*!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 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 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,/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=3.*(((*(*!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,/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=3.*(((*(*!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 ;endelse endif ;endelse endif ;endelse endif end 'POLEXT': begin ;SETTING THE PLOT RANGE xr = !dustem_plot_range.polext.xr yr = !dustem_plot_range.polext.yr vectw=DINDGEN(1001)*(alog10(1E7) - alog10(1E5))/(1000 - 1L) + alog10(1E5) vectw=10^vectw[1:*] vectw=[wavs,vectw] vectx=vectw*0+1 idx_filt=where((*(*!dustem_data).polext).filt_names NE 'SPECTRUM',ct_filt) idx_spec=where((*(*!dustem_data).polext).filt_names EQ 'SPECTRUM',ct_spec) ;#1) get the plotting keywords (pertaining to each data set) @here when the _extra structure is ready if keyword_set(nodata) then begin ;when the data is not present if keyword_set(norm) then begin ;normalized plot xtit=textoidl('1/\lambda (\mum^{_1})') if !run_pol then xtit = '' cgplot,1/vectw,vectx,/xlog,/ys,xs=1,pos=position,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[0],pospltxt[1],textoidl('norm'),color=0,/normal,charsize=1.1 endif else begin ;normal plot ;/NODATA cgplot,wavs,wavs,/nodata,/ylog,/xlog,/ys,xs=9,pos=position,noerase=1,charsize=1.15,xtickformat='(A1)',color='Powder Blue',xr=xr,xtit='',yr=yr,psym=8,syms=0.8 axis, xaxis=1 ,xlog=1 ,xrange=((!const.c*1E6*xr)*1E-9),charsize=1.15,xtitle=textoidl('\nu (GHz)'),xticklen=0.05,xminor=10,color='black' xyouts,pospltxt[0],pospltxt[1],textoidl('\tau_{PEXT}'),color=0,/normal,charsize=1.3;,charthick=2.0 endelse endif else begin ;when the data is present if keyword_set(norm) then begin if keyword_set(refresh) then begin ;The data points in the plot that are being refreshed IF ct_spec NE 0 THEN BEGIN xx=((*(*!dustem_data).polext).wav)[idx_spec] yy=dustem_interp[idx_spec] rms=3.*((*(*!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 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=3.*((*(*!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 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';,/overplot ENDIF ENDIF 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('1/\lambda (\mum^{-1})') if !run_pol then xtit = '' cgplot,1/vectw,vectx,/xlog,/ys,xs=1,pos=position,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[0],pospltxt[1],textoidl('norm'),color=0,/normal,charsize=1.1 endelse endif else begin ; normal plot if keyword_set(refresh) then begin ;The data points in the plot are being refreshed ;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,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,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,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,psym=6,syms=2,noerase=1 ENDIF ;Plotting of the total dust emission spectru cgoplot,1/st.polext.wav,dustem_spec,pos=position,noerase=1,/xlog,/ys,/xs,/ylog ;cgoplot,st.polsed.wav,st.polsed.em_tot*fact,pos=position,noerase=1,/xlog,/ys,/xs,/ylog 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).polext).wav)(idx_spec),((*(*!dustem_data).polext).values)(idx_spec),/ylog,/xlog,/ys,xs=9,pos=position,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=3.*((*(*!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,/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,/ys,xs=9,noerase=1,xtickformat='(A1)',xtit=' ',xr=xr,yr=yr,ytickformat='dstmwrp_exp',/ylog,/xlog ;Plotting of the filter error points rms=3.*((*(*!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 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 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,/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=3.*(((*(*!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,/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=3.*(((*(*!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 endelse endelse end 'POLSED': begin ;SETTING THE PLOT RANGE xr = !dustem_plot_range.polsed.xr yr = !dustem_plot_range.polsed.yr vectw=DINDGEN(1001)*(alog10(1E7) - alog10(1E5))/(1000 - 1L) + alog10(1E5) vectw=10^vectw[1:*] vectw=[wavs,vectw] vectx=vectw*0+1 idx_filt=where((*(*!dustem_data).polsed).filt_names NE 'SPECTRUM',ct_filt) idx_spec=where((*(*!dustem_data).polsed).filt_names EQ 'SPECTRUM',ct_spec) ;#1) get the plotting keywords (pertaining to each data set) @here when the _extra structure is ready if keyword_set(nodata) then begin ;when the data is not present if keyword_set(norm) then begin ;normalized plot xtit=textoidl('\lambda (\mum)') if !run_pol then xtit = '' cgplot,vectw,vectx,/xlog,/ys,xs=1,pos=position,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[0],pospltxt[1],textoidl('norm'),color=0,/normal,charsize=1.1 endif else begin ;normal plot cgplot,wavs,wavs,/nodata,/ylog,/xlog,/ys,xs=9,pos=position,noerase=1,charsize=1.15,xtickformat='(A1)',color='Powder Blue',xr=xr,xtit='',yr=yr,psym=8,syms=0.8 axis, xaxis=1 ,xlog=1 ,xrange=((!const.c*1E6/xr)*1E-9),charsize=1.15,xtitle=textoidl('\nu (GHz)'),xticklen=0.05,xminor=10,color='black' xyouts,pospltxt[0],pospltxt[1],textoidl('P_{\nu} (MJy/sr)'),color=0,/normal,charsize=1.3;,charthick=2.0 endelse endif else begin ;when the data is present if keyword_set(norm) then begin if keyword_set(refresh) then begin ;The data points in the plot that are being refreshed IF ct_spec NE 0 THEN BEGIN xx=((*(*!dustem_data).polsed).wav)[idx_spec] yy=dustem_interp[idx_spec] rms=3.*((*(*!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 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=3.*((*(*!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 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 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,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[0],pospltxt[1],textoidl('norm'),color=0,/normal,charsize=1.1 endelse endif else begin ; normal plot if keyword_set(refresh) then begin ;The data points in the plot are being refreshed ;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,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_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,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,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,psym=6,syms=2,noerase=1 ENDIF ;Plotting of the total dust emission spectru cgoplot,st.polsed.wav,dustem_spec,pos=position,noerase=1,/xlog,/ys,/xs,/ylog ;cgoplot,st.polsed.wav,st.polsed.em_tot*fact,pos=position,noerase=1,/xlog,/ys,/xs,/ylog 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).polsed).wav)(idx_spec),((*(*!dustem_data).polsed).values)(idx_spec),/ylog,/xlog,/ys,xs=9,pos=position,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=3.*((*(*!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,/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,/ys,xs=9,noerase=1,xtickformat='(A1)',xtit=' ',xr=xr,yr=yr,ytickformat='dstmwrp_exp',/ylog,/xlog ;Plotting of the filter error points rms=3.*((*(*!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 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 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,/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=3.*(((*(*!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,/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=3.*(((*(*!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 endelse endelse end '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(nodata) then begin ;when the data is not present xtit = '' cgplot,wavs,wavs*0.,/nodata,/xlog,/ys,xs=1,pos=position,noerase=1,charsize=1.15,xtickformat='(A1)',color='Powder Blue',xr=xr,xtit='',yr=yr,/ylog,psym=8,syms=0.8 xyouts,pospltxt[0],pospltxt[1],textoidl('p (%)'),color=0,/normal,charsize=1.3;,charthick=2.0 endif else begin ;when the data is present ; normal plot if keyword_set(refresh) then begin ;The data points in the plot are being refreshed 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,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 vecfin = st.polsed.em_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,st.polsed.wav,vecfin*100,color=clrs_plgns[i],pos=position,noerase=1,linestyle=2 ENDIF endif endfor ;STOPPED HERE. CHECK QSED NOW. MOVING ON NOW. ;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,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,psym=6,syms=2,noerase=1 ENDIF ;Plotting of the total dust emission spectrum cgoplot,st.polsed.wav,dustem_spec*100,pos=position,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,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=3.*((*(*!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,/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,/ys,xs=1,noerase=1,xtickformat='(A1)',xtit=' ',xr=xr,yr=yr,/xlog,/ylog;,ytickformat='dstmwrp_exp' ;Plotting of the filter error points rms=3.*((*(*!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,/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=3.*(((*(*!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,/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=3.*(((*(*!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 endelse end '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(nodata) then begin ;when the data is not present xtit = '' cgplot,wavs,wavs*0.,/nodata,/xlog,/ys,xs=1,pos=position,noerase=1,charsize=1.15,xtickformat='(A1)',color='Powder Blue',xr=xr,xtit='',yr=yr,/ylog,psym=8,syms=0.8 xyouts,pospltxt[0],pospltxt[1],textoidl('\tau_{PEXT}/\tau_{EXT} (%)'),color=0,/normal,charsize=1.3;,charthick=2.0 endif else begin ;when the data is present ; normal plot if keyword_set(refresh) then begin ;The data points in the plot are being refreshed 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,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,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,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,psym=6,syms=2,noerase=1 ENDIF ;Plotting of the total dust emission spectrum cgoplot,1/st.polext.wav,dustem_spec*100,pos=position,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,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=3.*((*(*!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,/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,/ys,xs=1,noerase=1,xtickformat='(A1)',xtit=' ',xr=xr,yr=yr,/xlog,/ylog;,ytickformat='dstmwrp_exp' ;Plotting of the filter error points rms=3.*((*(*!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,/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=3.*(((*(*!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,/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=3.*(((*(*!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 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) ;#1) get the plotting keywords (pertaining to each data set) @here when the _extra structure is ready if keyword_set(nodata) then begin ;when the data is not present xtit = '' cgplot,wavs,wavs*0.,/nodata,/xlog,/ys,xs=1,pos=position,noerase=1,charsize=1.15,xtickformat='(A1)',color='Powder Blue',xr=xr,xtit='',yr=yr,psym=8,syms=0.8 xyouts,pospltxt[0],pospltxt[1],textoidl('\Psi (deg)'),color=0,/normal,charsize=1.3;,charthick=2.0 endif else begin ;when the data is present ; normal plot if keyword_set(refresh) then begin ;The data points in the plot are being refreshed ;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,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])/degtorad,pos=position,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,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,psym=6,syms=2,noerase=1 ENDIF ;Plotting of the total dust emission spectrum ;cgoplot,st.sed.wav,0.5*atan(specu,specq)/degtorad,pos=position,noerase=1,/xlog,/ys,/xs cgoplot,st.sed.wav,dustem_spec,pos=position,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,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=3.*((*(*!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,/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,/ys,xs=1,noerase=1,xtickformat='(A1)',xtit=' ',xr=xr,yr=yr,/xlog;,ytickformat='dstmwrp_exp' ;Plotting of the filter error points rms=3.*((*(*!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,/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=3.*(((*(*!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,/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=3.*(((*(*!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 endelse end '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) ;#1) get the plotting keywords (pertaining to each data set) @here when the _extra structure is ready if keyword_set(nodata) then begin ;when the data is not present xtit = '' cgplot,wavs,wavs*0.,/nodata,/xlog,/ys,xs=1,pos=position,noerase=1,charsize=1.15,xtickformat='(A1)',color='Powder Blue',xr=xr,xtit='',yr=yr,psym=8,syms=0.8 xyouts,pospltxt[0],pospltxt[1],textoidl('\Psi_{EXT} (deg)'),color=0,/normal,charsize=1.3;,charthick=2.0 endif else begin ;when the data is present ; normal plot if keyword_set(refresh) then begin ;The data points in the plot are being refreshed ;##################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)/degtorad,pos=position,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])/degtorad,pos=position,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,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,psym=6,syms=2,noerase=1 ENDIF ;Plotting of the total dust emission spectrum ;cgoplot,st.sed.wav,0.5*atan(specu,specq)/degtorad,pos=position,noerase=1,/xlog,/ys,/xs cgoplot,1/st.ext.wav,dustem_spec,pos=position,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,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=3.*((*(*!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,/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,/ys,xs=1,noerase=1,xtickformat='(A1)',xtit=' ',xr=xr,yr=yr,/xlog;,ytickformat='dstmwrp_exp' ;Plotting of the filter error points rms=3.*((*(*!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,/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=3.*(((*(*!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,/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=3.*(((*(*!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 endelse end '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 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).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 ;#1) get the plotting keywords (pertaining to each data set) @here when the _extra structure is ready if keyword_set(nodata) then begin ;when the data is not present if keyword_set(norm) then begin ;normalized plot xtit=textoidl('\lambda (\mum)') if !run_pol then xtit = '' cgplot,vectw,vectx,/xlog,/ys,xs=1,pos=position,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[0],pospltxt[1],textoidl('norm'),color=0,/normal,charsize=1.1 endif else begin ;normal plot cgplot,wavs,wavs,/nodata,/ylog,/xlog,/ys,xs=1,pos=position,noerase=1,charsize=1.15,xtickformat='(A1)',color='Powder Blue',xr=xr,xtit='',yr=yr,psym=8,syms=0.8 ;cgaxis, xaxis=1 ,xlog=1 ,xrange=((!const.c*1E6/xr)*1E-9),charsize=1.15,title=textoidl('\nu (GHz)'),xticklen=0.05,xminor=10 xyouts,pospltxt[0],pospltxt[1],textoidl('Q_{\nu} (MJy/sr)'),color=0,/normal,charsize=1.3;,charthick=2.0 endelse endif else begin ;when the data is present if keyword_set(norm) then begin if keyword_set(refresh) then begin ;The data points in the plot that are being refreshed ;MAJOR LOOP OVER THE SING??? - YES BECAUSE YOU NEED TO KNOW WHICH ONE IS THE IF ct_spec NE 0 THEN BEGIN xx=((*(*!dustem_data).qsed).wav)[idx_spec] yy=dustem_interp[idx_spec] rms=3.*((*(*!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,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 ;stop xx=((*(*!dustem_data).qsed).wav)[idx_filt] yy=dustem_interp[idx_filt] rms=3.*((*(*!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,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 endif else begin ;The data points in the plot that remain unchanged ;stop ;stitching an array of 1000 more points (up to 1E7) after the end of the dustem wavelength array (dim=800 elements) xtit=textoidl('\lambda (\mum)') ;if !run_pol then xtit = '' cgplot,vectw,vectx,/xlog,/ys,xs=1,pos=position,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[0],pospltxt[1],textoidl('norm'),color=0,/normal,charsize=1.1 endelse endif else begin ; normal plot - STOPPED HERE FOR QSED if keyword_set(refresh) then begin ;The data points in the plot are being refreshed ;stop if keyword_set(positive_only) then begin if testpstv ne 0 then begin ;stop 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,/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,/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,/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,/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,/positive_only,/overplot,noerase=1,xr=xr,/xlog,/ylog,ytickformat='(A1)',yr=yr endif endif ;stop if keyword_set(negative_only) then begin ;stop if testngtv ne 0 then begin ;stop ;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,/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,/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,/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,/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,/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 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 keyword_set(positive_only) then begin ;stop if testpstv ne 0 then begin ;stop plotsym, 0 if ct_spec ne 0 then begin rms=3.*((*(*!dustem_data).qsed).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,((*(*!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,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,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=3.*((*(*!dustem_data).qsed).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,((*(*!dustem_data).qsed).wav)(idx_filt),((*(*!dustem_data).qsed).values)(idx_filt),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,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,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,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=3.*(((*(*!dustem_show).qsed).sigma)[idx_rmv_sed])(idx_spec_hdn_pstv)/2. dustem_plot_mlog,xx,yy,ppositions=position,/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,/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=3.*(((*(*!dustem_show).qsed).sigma)[idx_rmv_sed])(idx_filt_hdn_pstv)/2. dustem_plot_mlog,xx,yy,ppositions=position,/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,/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).qsed).wav)(idx_spec),-((*(*!dustem_data).qsed).values)(idx_spec),ppositions=position,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,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=3.*(((*(*!dustem_show).qsed).sigma)[idx_rmv_sed])(idx_spec_hdn_pstv)/2. dustem_plot_mlog,xx,yy,ppositions=position,/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,/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=3.*(((*(*!dustem_show).qsed).sigma)[idx_rmv_sed])(idx_filt_hdn_pstv)/2. dustem_plot_mlog,xx,yy,ppositions=position,/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,/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 keyword_set(negative_only) then begin if testngtv ne 0 then begin ;plotsym, 0 if ct_spec ne 0 then begin rms=3.*((*(*!dustem_data).qsed).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,((*(*!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,noerase=1,/negative_only,xtickformat='(A1)',xtit='',/xlog,/ylog,yr=yr;,ytickformat='(A1)' ;endelse;,ytickformat='(A1)' dustem_plot_mlog,((*(*!dustem_data).qsed).wav)(idx_spec),((*(*!dustem_data).qsed).values)(idx_spec),ppositions=position,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=3.*((*(*!dustem_data).qsed).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,((*(*!dustem_data).qsed).wav)(idx_filt),((*(*!dustem_data).qsed).values)(idx_filt),ppositions=position,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,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,((*(*!dustem_data).qsed).wav)(idx_filt),((*(*!dustem_data).qsed).values)(idx_filt),ppositions=position,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=3.*(((*(*!dustem_show).qsed).sigma)[idx_rmv_sed])(idx_spec_hdn_ngtv)/2. dustem_plot_mlog,xx,yy,ppositions=position,/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,/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=3.*(((*(*!dustem_show).qsed).sigma)[idx_rmv_sed])(idx_filt_hdn_ngtv)/2. dustem_plot_mlog,xx,yy,ppositions=position,/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,/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,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,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=3.*(((*(*!dustem_show).qsed).sigma)[idx_rmv_sed])(idx_spec_hdn_ngtv)/2. dustem_plot_mlog,xx,yy,ppositions=position,/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,/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=3.*(((*(*!dustem_show).qsed).sigma)[idx_rmv_sed])(idx_filt_hdn_ngtv)/2. dustem_plot_mlog,xx,yy,ppositions=position,/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,/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 endelse endelse ; END '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 ;#1) get the plotting keywords (pertaining to each data set) @here when the _extra structure is ready if keyword_set(nodata) then begin ;when the data is not present if keyword_set(norm) then begin ;normalized plot xtit=textoidl('\lambda (\mum)') if !run_pol then xtit = '' cgplot,vectw,vectx,/xlog,/ys,xs=1,pos=position,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[0],pospltxt[1],textoidl('norm'),color=0,/normal,charsize=1.1 endif else begin ;normal plot cgplot,wavs,wavs,/nodata,/ylog,/xlog,/ys,xs=1,pos=position,noerase=1,charsize=1.15,xtickformat='(A1)',color='Powder Blue',xr=xr,xtit='',yr=yr,psym=8,syms=0.8 ;cgaxis, xaxis=1 ,xlog=1 ,xrange=((!const.c*1E6/xr)*1E-9),charsize=1.15,title=textoidl('\nu (GHz)'),xticklen=0.05,xminor=10 xyouts,pospltxt[0],pospltxt[1],textoidl('U_{\nu} (MJy/sr)'),color=0,/normal,charsize=1.3;,charthick=2.0 endelse endif else begin ;when the data is present if keyword_set(norm) then begin if keyword_set(refresh) then begin ;The data points in the plot that are being refreshed ;MAJOR LOOP OVER THE SING??? - YES BECAUSE YOU NEED TO KNOW WHICH ONE IS THE IF ct_spec NE 0 THEN BEGIN xx=((*(*!dustem_data).used).wav)[idx_spec] yy=dustem_interp[idx_spec] rms=3.*((*(*!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,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=3.*((*(*!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,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 endif else begin ;The data points in the plot that remain unchanged xtit=textoidl('\lambda (\mum)') ;if !run_pol then xtit = '' cgplot,vectw,vectx,/xlog,/ys,xs=1,pos=position,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-[0],pospltxt[1],textoidl('norm'),color=0,/normal,charsize=1.1 endelse endif else begin ; normal plot - STOPPED HERE FOR used if keyword_set(refresh) then begin ;The data points in the plot are being refreshed if keyword_set(positive_only) then begin if testpstv ne 0 then begin ;stop 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,/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,/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,/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,/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,/positive_only,/overplot,noerase=1,xr=xr,/xlog,/ylog,ytickformat='(A1)',yr=yr endif endif if keyword_set(negative_only) then begin if testngtv ne 0 then begin ;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,/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,/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,/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,/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,/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. ;stop ;cgaxis, xaxis=1,xlog=1, xs=1,charsize=1.5,xtickformat='(A1)' xyouts,pospltxt[0],pospltxt[1],textoidl('U_{\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 ;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 keyword_set(positive_only) then begin ;stop if testpstv ne 0 then begin ;stop plotsym, 0 if ct_spec ne 0 then begin rms=3.*((*(*!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,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,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=3.*((*(*!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,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,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,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=3.*(((*(*!dustem_show).used).sigma)[idx_rmv_sed])(idx_spec_hdn_pstv)/2. dustem_plot_mlog,xx,yy,ppositions=position,/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,/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=3.*(((*(*!dustem_show).used).sigma)[idx_rmv_sed])(idx_filt_hdn_pstv)/2. dustem_plot_mlog,xx,yy,ppositions=position,/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,/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,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,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=3.*(((*(*!dustem_show).used).sigma)[idx_rmv_sed])(idx_spec_hdn_pstv)/2. dustem_plot_mlog,xx,yy,ppositions=position,/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,/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=3.*(((*(*!dustem_show).used).sigma)[idx_rmv_sed])(idx_filt_hdn_pstv)/2. dustem_plot_mlog,xx,yy,ppositions=position,/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,/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 keyword_set(negative_only) then begin ;stop if testngtv ne 0 then begin plotsym, 0 if ct_spec ne 0 then begin rms=3.*((*(*!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,/negative_only,xtickformat='(A1)',xtit='',/xlog,/ylog,yr=yr;,ytickformat='(A1)' ;if ct_spec_hdn_ngtv ne 0 then dustem_plot_mlog,((*(*!dustem_data).used).wav)(idx_spec),((*(*!dustem_data).used).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,((*(*!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,noerase=1,/negative_only,xtickformat='(A1)',xtit='',/xlog,/ylog,yr=yr;,ytickformat='(A1)' ;endelse;,ytickformat='(A1)' dustem_plot_mlog,((*(*!dustem_data).used).wav)(idx_spec),((*(*!dustem_data).used).values)(idx_spec),ppositions=position,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=3.*((*(*!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_ngtv ne 0 then dustem_plot_mlog,((*(*!dustem_data).used).wav)(idx_filt),((*(*!dustem_data).used).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,((*(*!dustem_data).used).wav)(idx_filt),((*(*!dustem_data).used).values)(idx_filt),ppositions=position,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,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,((*(*!dustem_data).used).wav)(idx_filt),((*(*!dustem_data).used).values)(idx_filt),ppositions=position,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=3.*(((*(*!dustem_show).used).sigma)[idx_rmv_sed])(idx_spec_hdn_ngtv)/2. dustem_plot_mlog,xx,yy,ppositions=position,/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,/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=3.*(((*(*!dustem_show).used).sigma)[idx_rmv_sed])(idx_filt_hdn_ngtv)/2. dustem_plot_mlog,xx,yy,ppositions=position,/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,/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,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,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=3.*(((*(*!dustem_show).used).sigma)[idx_rmv_sed])(idx_spec_hdn_ngtv)/2. dustem_plot_mlog,xx,yy,ppositions=position,/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,/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=3.*(((*(*!dustem_show).used).sigma)[idx_rmv_sed])(idx_filt_hdn_ngtv)/2. dustem_plot_mlog,xx,yy,ppositions=position,/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,/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 endelse 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 ;stop ;#1) get the plotting keywords (pertaining to each data set) @here when the _extra structure is ready if keyword_set(nodata) then begin ;when the data is not present if keyword_set(norm) then begin ;normalized plot xtit=textoidl('1/\lambda (\mum^{-1})') if !run_pol then xtit = '' cgplot,1/vectw,vectx,/xlog,/ys,xs=1,pos=position,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[0],pospltxt[1],textoidl('norm'),color=0,/normal,charsize=1.1 endif else begin ;normal plot cgplot,wavs,wavs,/nodata,/ylog,/xlog,/ys,xs=1,pos=position,noerase=1,charsize=1.15,xtickformat='(A1)',color='Powder Blue',xr=xr,xtit='',yr=yr,psym=8,syms=0.8 ;cgaxis, xaxis=1 ,xlog=1 ,xrange=((!const.c*1E6/xr)*1E-9),charsize=1.15,title=textoidl('\nu (GHz)'),xticklen=0.05,xminor=10 xyouts,pospltxt[0],pospltxt[1],textoidl('\tau_{QEXT}'),color=0,/normal,charsize=1.3;,charthick=2.0 endelse endif else begin ;when the data is present if keyword_set(norm) then begin if keyword_set(refresh) then begin ;The data points in the plot that are being refreshed ;MAJOR LOOP OVER THE SIGN??? - YES BECAUSE YOU NEED TO KNOW WHICH ONE IS THE IF ct_spec NE 0 THEN BEGIN xx=((*(*!dustem_data).qext).wav)[idx_spec] yy=dustem_interp[idx_spec] rms=3.*((*(*!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,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=3.*((*(*!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,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 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,/ys,xs=1,pos=position,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[0],pospltxt[1],textoidl('norm'),color=0,/normal,charsize=1.1 endelse endif else begin ; normal plot if keyword_set(refresh) then begin ;The data points in the plot are being refreshed if keyword_set(positive_only) then begin if testpstv ne 0 then begin 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,/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,/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,/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,/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,/positive_only,/overplot,noerase=1,xr=xr,/xlog,/ylog,ytickformat='(A1)',yr=yr endif endif ;stop if keyword_set(negative_only) then begin ;stop if testngtv ne 0 then begin ;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,/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,/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,/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,/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,/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_{QEXT}'),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).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=3.*((*(*!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,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,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=3.*((*(*!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,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,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,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=3.*(((*(*!dustem_show).qext).sigma)[idx_rmv_sed])(idx_spec_hdn_pstv)/2. dustem_plot_mlog,1/xx,yy,ppositions=position,/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,/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=3.*(((*(*!dustem_show).qext).sigma)[idx_rmv_sed])(idx_filt_hdn_pstv)/2. dustem_plot_mlog,1/xx,yy,ppositions=position,/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,/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,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,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=3.*((*(*!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,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,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=3.*((*(*!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,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,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,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=3.*(((*(*!dustem_show).qext).sigma)[idx_rmv_sed])(idx_spec_hdn_ngtv)/2. dustem_plot_mlog,1/xx,yy,ppositions=position,/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,/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=3.*(((*(*!dustem_show).qext).sigma)[idx_rmv_sed])(idx_filt_hdn_ngtv)/2. dustem_plot_mlog,1/xx,yy,ppositions=position,/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,/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,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,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 endelse 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 ;cgaxis, xaxis=1, xlog=1, xs=1, xminor=10;, xticklen=0.05, xrange=((!const.c*1E6/(_extra.(ind_xr)))*1E-9),charsize=1.15,title=textoidl('\nu (GHz)') ;stop ;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 ;#1) get the plotting keywords (pertaining to each data set) @here when the _extra structure is ready if keyword_set(nodata) then begin ;when the data is not present if keyword_set(norm) then begin ;normalized plot xtit=textoidl('1/\lambda (\mum^{-1})') if !run_pol then xtit = '' cgplot,1/vectw,vectx,/xlog,/ys,xs=1,pos=position,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[0],pospltxt[1],textoidl('norm'),color=0,/normal,charsize=1.1 endif else begin ;normal plot cgplot,wavs,wavs,/nodata,/ylog,/xlog,/ys,xs=1,pos=position,noerase=1,charsize=1.15,xtickformat='(A1)',color='Powder Blue',xr=xr,xtit='',yr=yr,psym=8,syms=0.8 ;cgaxis, xaxis=1 ,xlog=1 ,xrange=((!const.c*1E6/xr)*1E-9),charsize=1.15,title=textoidl('\nu (GHz)'),xticklen=0.05,xminor=10 xyouts,pospltxt[0],pospltxt[1],textoidl('\tau_{UEXT}'),color=0,/normal,charsize=1.3;,charthick=2.0 endelse endif else begin ;when the data is present if keyword_set(norm) then begin if keyword_set(refresh) then begin ;The data points in the plot that are being refreshed ;MAJOR LOOP OVER THE SING??? - YES BECAUSE YOU NEED TO KNOW WHICH ONE IS THE IF ct_spec NE 0 THEN BEGIN xx=((*(*!dustem_data).uext).wav)[idx_spec] yy=dustem_interp[idx_spec] rms=3.*((*(*!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,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=3.*((*(*!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,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,/ys,xs=1,pos=position,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[0],pospltxt[1],textoidl('norm'),color=0,/normal,charsize=1.1 endelse endif else begin ; normal plot - STOPPED HERE FOR QSED if keyword_set(refresh) then begin ;The data points in the plot are being refreshed if keyword_set(positive_only) then begin if testpstv ne 0 then begin 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,/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,/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,/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,/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,/positive_only,/overplot,noerase=1,xr=xr,/xlog,/ylog,ytickformat='(A1)',yr=yr endif endif ;stop if keyword_set(negative_only) then begin ;stop if testngtv ne 0 then begin ;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,/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,/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,/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,/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,/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=3.*((*(*!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,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,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=3.*((*(*!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,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,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,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=3.*(((*(*!dustem_show).uext).sigma)[idx_rmv_sed])(idx_spec_hdn_pstv)/2. dustem_plot_mlog,1/xx,yy,ppositions=position,/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,/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=3.*(((*(*!dustem_show).uext).sigma)[idx_rmv_sed])(idx_filt_hdn_pstv)/2. dustem_plot_mlog,1/xx,yy,ppositions=position,/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,/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,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,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=3.*((*(*!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,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,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=3.*((*(*!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,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,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,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=3.*(((*(*!dustem_show).uext).sigma)[idx_rmv_sed])(idx_spec_hdn_ngtv)/2. dustem_plot_mlog,1/xx,yy,ppositions=position,/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,/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=3.*(((*(*!dustem_show).uext).sigma)[idx_rmv_sed])(idx_filt_hdn_ngtv)/2. dustem_plot_mlog,1/xx,yy,ppositions=position,/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,/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,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,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 endelse endelse end 'PARAMETERS':begin ;needs the followingd data (errors+res+formats) p_dim = extra_spec ;stop 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) ;Not sure about the wrapper data type that is mentioned in this procedure 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 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' and testpop then begin indpop=fix(STRUPCASE(strmid(strtrim(parameter_description,2),12,1,/reverse_offset))) string_name=(((*!dustem_params). GRAINS).grain_type)[indpop] ;choosing a step of 0.03 in norm coordinates yypos = yypostmp - k*0.09 xxpos = 0.0 ;original line ;str=string(string_name+' = ',format=frmt0)+string(res[i],format=frmt1) str = strtrim(string(string_name+' = ',format=frmt0),2)+ string(res[i],format=frmt1) + textoidl(' \pm ') +string(errors(i),format=frmt1) ;will this work? cgtext, xxpos, yypos, str, charsize=-1, width=thiswidth, /normal xxpos = (1-thiswidth)/2 str = strtrim(string(string_name+' = ',format=frmt0),2) cgtext, xxpos, yypos, str, charsize=-1, width=thiswidth, /normal xxpos+= thiswidth str= string(res[i],format=frmt1) + textoidl(' \pm ') + string(errors(i),format=frmt1) ;stop xyouts,xxpos,yypos,str,color=0,/normal,charsize=1. k+=1 ENDIF IF parameter_type EQ 'FORTRAN' and ~testpop then begin ;indpop=fix(STRUPCASE(strmid(strtrim(parameter_description,2),12,1,/reverse_offset))) ;string_name=(((*!dustem_params). GRAINS).grain_type)[indpop] yypos = yypostmp - k*0.09 xxpos = 0.0 ;original line ;str=string(string_name+' = ',format=frmt0)+string(res[i],format=frmt1) str = strtrim(string(string_name+' = ',format=frmt0),2)+ string(res[i],format=frmt1) + textoidl(' \pm ') +string(errors(i),format=frmt1) ;will this work? cgtext, xxpos, yypos, str, charsize=-1, width=thiswidth, /normal xxpos = (1-thiswidth)/2 str = strtrim(string(string_name+' = ',format=frmt0),2) cgtext, xxpos, yypos, str, charsize=-1, width=thiswidth, /normal xxpos+= thiswidth str= string(res[i],format=frmt1) + textoidl(' \pm ') + string(errors(i),format=frmt1) ;stop xyouts,xxpos,yypos,str,color=0,/normal,charsize=1. k+=1 ENDIF ENDFOR ENDIF endif else begin ;data in the parameter window that is unchanged ;Trying to gather information on the fixed parameters ;Two pointers assuming one is sufficient for the following condition (unless dustem_init_fixed_parameters) ;WILL THIS WORK? 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 xxpos = 0.0 yypos = 0.9 ;xxpos = 0.0 ;might need to be modified cgtext, xxpos, yypos, '-FROZEN-', charsize=-1, width=thiswidth, /normal xxpos=(1-thiswidth)/2 xyouts, xxpos, yypos, '-FROZEN-', charsize=1.2, /normal, color=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) testpop = STRUPCASE(strmid(strtrim(parameter_description,2),3,1,/reverse_offset)) EQ 'O' IF parameter_type NE 'PLUGIN' THEN BEGIN IF parameter_type EQ 'FORTRAN' and 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.0 str=strtrim(string(string_name+' = ',format=frmt0),2) str1=str+string(res[i],format=frmt1) cgtext, xxpos, yypos, str1, charsize=-1, width=thiswidth, /normal xxpos=(1-thiswidth)/2 ;stop xyouts,xxpos,yypos,str1,color=0,/normal,charsize=1. k+=1 ENDIF ENDFOR ENDIF ;stop xxpos = 0.0;might need to be modified ;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 cgtext, xxpos, yypos, '-FREE-', charsize=-1,width=thiswidth, /normal xxpos=(1-thiswidth)/2 xyouts, xxpos, yypos, '-FREE-', charsize=1.2, /normal,color=0 ;stop k=0 res = dustem_interp errors = dustem_spec ;stop 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 ;STRUPCASE(strmid(strtrim(parameter_description,2),0,18)) eq '(*!DUSTEM_PARAMS).' IF parameter_type EQ 'FORTRAN' and testpop then begin indpop=fix(STRUPCASE(strmid(strtrim(parameter_description,2),12,1,/reverse_offset))) string_name=(((*!dustem_params). GRAINS).grain_type)[indpop] yypos = yypostmp - k*0.09 xxpos = 0.0 str=strtrim(string(string_name+' = ',format=frmt0),2) ;stop str1=str+string(res[i],format=frmt1)+textoidl(' \pm ')+string(errors(i),format=frmt1) ;stop cgtext, xxpos, yypos, str1, charsize=-1, width=thiswidth, /normal xxpos=(1-thiswidth)/2 ;stop xyouts,xxpos,yypos,str,color=0,/normal,charsize=1. k+=1 ;stop ENDIF ;STRUPCASE(strmid(strtrim(parameter_description,2),0,18)) eq '(*!DUSTEM_PARAMS).' IF parameter_type EQ 'FORTRAN' and ~testpop then begin ;indpop=fix(STRUPCASE(strmid(strtrim(parameter_description,2),12,1,/reverse_offset))) ;string_name=(((*!dustem_params). GRAINS).grain_type)[indpop] ;stop ;choosing a step of 0.03 in norm coordinates yypos = yypostmp - k*0.09 xxpos = 0.0 str=strtrim(string(string_name+' = ',format=frmt0),2) ;stop str1=str+string(res[i],format=frmt1)+textoidl(' \pm ')+string(errors(i),format=frmt1) ;stop cgtext, xxpos, yypos, str1, charsize=-1, width=thiswidth, /normal xxpos=(1-thiswidth)/2 ;stop xyouts,xxpos,yypos,str,color=0,/normal,charsize=1. k+=1 ;stop ENDIF ENDFOR ENDIF endelse end 'PLUGINS':begin ;NOT SO SURE ABOUT THIS BLOCK . TEST IT WHEN YOU GET HOME p_dim = extra_spec 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) ;Not sure about the wrapper data type that is mentioned in this procedure 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) 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.0 str = strtrim(string(strmid(string_name,7,ii-7)+' ['+strmid(string_name,ii+1)+']: '+prmtg+' = ',format=frmt0),2) str1 = str+string(res[i],format=frmt1)+textoidl(' \pm ')+string(errors(i),format=frmt1) cgtext, xxpos, yypos, str1, charsize=-1, width=thiswidth, /normal xxpos=(1-thiswidth)/2 cgtext, xxpos, yypos, str, charsize=-1, width=thiswidth, /normal xxpos+=thiswidth;(1-thiswidth)/2 str = string(res[i],format=frmt1)+textoidl(' \pm ')+string(errors(i),format=frmt1) xyouts,xxpos,yypos,str,color=0,/normal,charsize=1. k+=1 ENDIF ENDFOR ENDIF endif else begin ;(FROZEN RUN = title strings + fixed plugins (TBDONE)) 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.0 yypos = 0.9 ;xxpos = 0.0 ;might need to be modified cgtext, xxpos, yypos, '-FROZEN-', charsize=-1, width=thiswidth, /normal xxpos=(1-thiswidth)/2 xyouts, xxpos, yypos, '-FROZEN-', charsize=1.2, /normal, color=0 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) prmtg = prmtg[indtg-1] yypos = 0.8 - k*0.09 xxpos = 0.0 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) cgtext, xxpos, yypos, str1, charsize=-1, width=thiswidth, /normal xxpos=(1-thiswidth)/2 ;stop xyouts,xxpos,yypos,str1,color=0,/normal,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 ;stop ;xxpos = 0.0;might need to be modified cgtext, xxpos, yypos, '-FREE-', charsize=-1,width=thiswidth, /normal xxpos=(1-thiswidth)/2 xyouts, xxpos, yypos, '-FREE-', charsize=1.2, /normal,color=0 k=0 res = dustem_interp errors = dustem_spec yypos-=0.1 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) 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.0;15 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)+textoidl(' \pm ')+string(errors(i),format=frmt1) ;getting the width of the total string: string title +values +errors so we can place it the right way and not have to worry about its position cgtext, xxpos, yypos, str1, charsize=-1, width=thiswidth, /normal xxpos=(1-thiswidth)/2 xyouts,xxpos,yypos,str,color=0,/normal,charsize=1. k+=1 ENDIF ENDFOR ENDIF endelse end endcase endif the_end: END