PRO dustem_plot_dataset,st $
                       ,dustem_interp $
                       ,dustem_spec $
                       ,extra_spec=extra_spec $
                       ,dataset=dataset $
                       ,refresh=refresh $
                       ,position=position $
                       ,positive_only=positive_only $
                       ,negative_only=negative_only $
                       ,_extra=_extra $
                       ,help=help

;+
; NAME:
;    dustem_plot_dataset
;
; PURPOSE:
;    Allows the plotting of a (several) dataset(s) 
;
; CATEGORY:
;    DustEMWrap, Distributed, Low-level, Plotting
;
; CALLING SEQUENCE:
;    dustem_plot_dataset, st, dustem_interp, dustem_spec, dataset ,extra_spec=extra_spec, refresh=refresh, position=position,positive_only=positive_only, negative_only=negative_only, _extra=_extra 
;
; INPUTS:
;    st = DustEM output structure
;
; INPUT and OUTPUT KEYWORDS:
;    dustem_interp = dustem SED predictions - type = array or list of arrays.
;    dustem_spec = dustem spectra predictions (Emission or Extinction) - type = array or list of arrays 
;    extra_spec = Specific to the use of polfrac that requires an extra spectrum (that of SED) - type = array or list of arrays
;    dataset = Dataset(s) to be plotted - type = array. If absent, nothing gets plotted.
;    position =  Position(s) of the plot(s) - type = list 
;    positive_only = Plotting of positive data on a 'modified logarithm' axis/plot - type = Boolean array   
;    negative_only = Plotting of negative data on a 'modified logarithm' axis/plot - type =  
;
; OUTPUTS:
;    NONE
; ACCEPTED KEY-WORDS:
;    help
;    refresh = Plot the datasets that change after each DustEM run 
; COMMON BLOCKS:
;    None
;
; SIDE EFFECTS:
;    Does a plot
;
; RESTRICTIONS:
;    The DustEM fortran code must be installed
;    The DustEMWrap IDL code must be installed
;
; PROCEDURES AND SUBROUTINES USED:
;
; EXAMPLES
;    
; MODIFICATION HISTORY:
;    Written by Ilyes Choubani 2022
;    Evolution details on the DustEMWrap gitlab.
;    See http://dustemwrap.irap.omp.eu/ for FAQ and help.  
;-


IF keyword_set(help) THEN BEGIN
  doc_library,'dustem_plot_dataset'
  goto,the_end
END


;****NB (Latest changes)****:  
;Now all datasets can be plotted simultaneously
;In addition, for each dataset, the normalized plot and normal plot are plotted simultaneously
;This was not the case before.
;Since the new changes, I believe many of the plotting keywords can be removed. 
;This is in part because I have added a /nodata plot at each update/refreshing step to guide the routine where to plot.

;REMOVED/OBSOLETE: kept to potentially help fix errors.

; if !run_pol then begin
;     if isa(position) then begin
;         if keyword_set(norm) then pospltxt = [position(0)+0.02,position(3)-0.02] else pospltxt = [position(0)+0.02,position(3)-0.03]  
;     endif
; endif else begin
;     if isa(position) then pospltxt = [position(0)+0.02,position(3)-0.05] ;hard-coded but we can find a way 
; endelse 

wavs=dustem_get_wavelengths()
n_plgns = n_tags(*!dustem_plugin)
Ngrains=(*!dustem_params).Ngrains
use_cols=dustem_grains_colors(Ngrains,/cgplot)
use_cols[1]='Cornflower'
fact = 1.e4*(*!dustem_HCD)/(4.*!pi)/(3.e8/1.e-6/st.sed.wav)*1.e20/1.e7 ; st.sed.wav and st.polsed.wav should remain the same

clrs_plgns = ['Rosy Brown','Gold','Light Coral','Slate Blue','Dark Khaki','Salmon','Dark Green'] ;FOR NOW
;NB: plugins need to have different colors for extinction because they are not the same plugins. New array required.

scopes=tag_names((*!dustem_plugin))
tgnms_extra = tag_names(_extra)


frmt0='(A46)'
frmt1='(1E11.4)'
frmt2='(10F10.2)'


; if keyword_set(refresh) then begin
; 
;     dustem_interp.reverse
;     dustem_spec.reverse
;     extra_spec.reverse
;     dataset=reverse(dataset)
;     position.reverse
;     
; endif

;These were created to be able to utilize the existing structure of this procedure 
;and to plot multiple datasets at once... 
;The routine also allows to plot a single dataset but this will have to be set in the main plotting routine which is dustermwrap_plot.

;The following variables are created because I wanted to keep using the same variable names throughout the lines of the code.
;I can replace them in the future.

if keyword_set(dustem_interp) then dustem_interp_sv = dustem_interp else dustem_interp_sv = list()
if keyword_set(dustem_spec) then dustem_spec_sv = dustem_spec else dustem_spec_sv = list()
if keyword_set(extra_spec) then extra_spec_sv = extra_spec else extra_spec_sv = list();assuming this is always called
if keyword_set(position) then position_sv=position else position_sv = list()

;temporary solution. I'll clean up the code in the future
positive_only=1
negative_only=1

;Generating a fake vector that extends beyond the DustEM/DustEmWrap wavelength range (for display purposes only)
vectw=DINDGEN(1001)*(alog10(1E7) - alog10(1E5))/(1000 - 1L) + alog10(1E5)
vectw=10^vectw[1:*]
vectw=[wavs,vectw]
vectx=vectw*0+1

if keyword_set(dataset) then begin ;

    for ss=0L,n_elements(dataset)-1 do begin
            
            
            if n_elements(dustem_interp_sv) NE 0 then begin
                if typename(dustem_interp_sv) EQ 'LIST' then  dustem_interp = dustem_interp_sv[ss] else dustem_interp = dustem_interp_sv
            endif
            if n_elements(dustem_spec_sv) NE 0  then begin
                if typename(dustem_spec_sv) EQ 'LIST' then dustem_spec = dustem_spec_sv[ss] else dustem_spec = dustem_spec_sv
            endif
            if n_elements(extra_spec_sv) NE 0 then begin
                if n_elements(extra_spec_sv[ss]) NE 1 then extra_spec = extra_spec_sv[ss] ;assuming this is always called
            endif
            
            
            if n_elements(position_sv) NE 0 then begin
            
                if (size(position_sv(0)))[2] NE 11 then position=position_sv else position=position_sv[ss]
                
                if n_elements(position) ne 1 then begin ;eq 1 is for datasets that don't have normalized curves. ie: polfrac and psi.
                    
                    if !run_pol then begin
                        
                        pospltxt = [(position[0])(0)+0.02,(position[0])(3)-0.03]
                        pospltxt_n = [(position[1])(0)+0.02,(position[1])(3)-0.02];created this new array so that the normalized plot is automatically plotted for each dataset. 
                        
                    endif else begin
                    
                        pospltxt = [(position[0])(0)+0.02,(position[0])(3)-0.05]
                        pospltxt_n = [(position[1])(0)+0.02,(position[1])(3)-0.05]
                    
                    endelse 
                
                endif else pospltxt = [(position[0])(0)+0.02,(position[0])(3)-0.05];
                
            endif
            
            Case strupcase(dataset[ss]) of 
            
                'SED': begin
                
                    ;SETTING THE PLOT RANGE
                    xr = !dustem_plot_range.sed.xr
                    yr = !dustem_plot_range.sed.yr
                    
                    idx_filt=where((*(*!dustem_data).sed).filt_names NE 'SPECTRUM',ct_filt)
                    idx_spec=where((*(*!dustem_data).sed).filt_names EQ 'SPECTRUM',ct_spec)
                            
                    ;DISPLAYING OF NORMALIZED PLOT HERE IS DONE BEFORE THE PLOTTING OF THE NORMAL PLOT
                    ;THIS SHOULD NOT INTERFERE WITH THE CODE.
                    
                    If n_elements(position) GT 1 THEN BEGIN ;Making the plotting of the normalized data optional because so far it was forced.
                        ;REFRESHING OF NORMALIZED PLOT
                        if keyword_set(refresh) then begin ;The data points in the plot that are being refreshed 
                            ;making sure we're on the plot we're consider (since cgwindow doesn't allow us to do what we want anyway...)
                            cgplot,vectw,vectx,/nodata,/xlog,xs=9,ys=9,pos=position[1],noerase=1,ytickformat='(A1)',xtickformat='(A1)',color='Black',xr=xr,xtit='',yticks=0,xticks=0,xticklen=0.0,yticklen=0.0,yr=[0.0,2.0],ymino=2,charsize=1.0
                            
                            IF ct_spec NE 0 THEN BEGIN
                                xx=((*(*!dustem_data).sed).wav)[idx_spec]
                                yy=dustem_interp[idx_spec]
                                rms=2.*((*(*!dustem_data).sed).sigma)(idx_spec)/2.
                                cgoplot,xx,((*(*!dustem_data).sed).values)[idx_spec]/yy,color='Powder Blue',psym=16,syms=0.8,noerase=1,pos=position[1]
                                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=2.*((*(*!dustem_data).sed).sigma)(idx_filt)/2. 
                                cgoplot,xx,((*(*!dustem_data).sed).values)[idx_filt]/yy,psym=16,color='Dodger Blue',syms=0.8,noerase=1,pos=position[1]
                                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 
                    
                        ;PLOTTING OF FROZEN PART OF NORMALIZED PLOT    
                        if not keyword_set(refresh) then begin        ;This used to be an ELSE condition before. Made it like so for testing.
                            
                            xtit=textoidl('\lambda (\mum)')
                            if !run_pol then begin
                                xtit = ''
                                xtickformat='(A1)'
                            endif else xtickformat='(F10.2)' ;MAYBE YOU'LL CHANGE THIS FORMAT TO EXPONENTIAL NOTATION
                            
                            cgplot,vectw,vectx,/xlog,/ys,xs=1,pos=position[1],noerase=1,xtickformat=xtickformat,color='Black',xr=xr,xtit=xtit,yr=[0.0,2.0],yticks=2,ymino=2,xticklen=0.1,ytickformat='(F6.2)',charsize=1.0
                            xyouts,pospltxt_n[0],pospltxt_n[1],textoidl('norm'),color=0,/normal,charsize=1.1
                        
                        ;endelse
                        endif
                    ENDIF
                    
                    
                    ;REFRESHING OF NORMAL PLOT                 
                    if keyword_set(refresh) then begin ;The data points in the plot are being refreshed
                        
                        ;stop
                        ;making sure we're on the plot we're consider (since cgwindow doesn't allow us to do what we want anyway...)
                        cgplot,vectw,vectx,/nodata,/xlog,/ylog,xs=8,ys=8,pos=position[0],noerase=1,ytickformat='(A1)',xtickformat='(A1)',color='Black',xr=xr,xtit='',yr=yr,yticks=0,xticks=0,xticklen=0.0,yticklen=0.0,charsize=1.0
                        
                        ;stop
                        
                        ;Plotting of the spectra of the dust species
                        FOR i=0L,Ngrains-1 DO BEGIN
                            cgoplot,st.sed.wav,st.sed.(i+1)*fact,color=use_cols[i],pos=position[0],noerase=1
                        ENDFOR
                        ;stop
                                                
                        ;Plotting of the plugins.
                        for i=0L,n_plgns-1 do begin
                            
                            if isa((*!dustem_plugin).(0).spec) then begin 
                            
                                IF total(strsplit((*(*!dustem_plugin).(i).scope),'+',/extract) EQ 'ADD_SED') THEN begin
                                    cgoplot,st.sed.wav,((*(*!dustem_plugin).(i).spec)[*,0]),color=clrs_plgns[i],pos=position[0],noerase=1,linestyle=2               
                                ENDIF
                                
                            endif
                            
                        endfor
                                                
                        ;PLotting of the interpolates corresponding to spectrum and filter points
                           
                        IF ct_spec NE 0 THEN BEGIN
                        
                            xx=((*(*!dustem_data).sed).wav)[idx_spec]
                            yy=dustem_interp[idx_spec]
                            cgoplot,xx,yy,color='Indian Red',pos=position[0],psym=7,syms=1,noerase=1   
                        ENDIF
                        
                        
                        IF ct_filt NE 0 THEN BEGIN
                            xx=((*(*!dustem_data).sed).wav)[idx_filt]
                            yy=dustem_interp[idx_filt]
                            ;stop
                            cgoplot,xx,yy,color='red',pos=position[0],psym=6,syms=2,noerase=1
                        ENDIF
                        
                        
                        ;Plotting of the total dust emission spectrum
                        cgoplot,st.sed.wav,dustem_spec,pos=position[0],noerase=1,/xlog,/ys,/xs,/ylog
                                
                    endif ;else begin ;The data points in the plot that remain unchanged.
                        ;stop
                    if not keyword_set(refresh) then begin
                        ;Spectrum points are treated before for plotting reasons. 
                        if ct_spec ne 0 then begin 
                            
                            ;Plotting of spectrum data points (to be fitted)
                            cgplot,((*(*!dustem_data).sed).wav)(idx_spec),((*(*!dustem_data).sed).values)(idx_spec),/ylog,/xlog,/ys,xs=9,pos=position[0],noerase=1,xtit=' ',charsize=1.15,xtickformat='(A1)',color='Powder Blue',xr=xr,yr=yr,psym=16,syms=0.8,ytickformat='dstmwrp_exp'                
                            
                            ;Plotting of the spectrum error points
                            rms=2.*((*(*!dustem_data).sed).sigma)(idx_spec)/2.
                            cgerrplot,((*(*!dustem_data).sed).wav)(idx_spec),((*(*!dustem_data).sed).values)(idx_spec)-rms,((*(*!dustem_data).sed).values)(idx_spec)+rms,color='Powder Blue'

                        endif
                        
                        if ct_filt ne 0 then begin
                            
                            ;Plotting of filter data points (to be fitted) + testing for prior plotting                         
                            if ct_spec ne 0 then cgoplot,((*(*!dustem_data).sed).wav)(idx_filt),((*(*!dustem_data).sed).values)(idx_filt),charsize=1.15,color='Dodger Blue',psym=16,syms=0.8,pos=position[0],/ys,xs=9,noerase=1,xtickformat='(A1)',xr=xr,yr=yr,ytickformat='dstmwrp_exp',/ylog,/xlog else $
                                cgplot,((*(*!dustem_data).sed).wav)(idx_filt),((*(*!dustem_data).sed).values)(idx_filt),charsize=1.15,color='Dodger Blue',psym=16,syms=0.8,pos=position[0],/ys,xs=9,noerase=1,xtickformat='(A1)',xtit=' ',xr=xr,yr=yr,ytickformat='dstmwrp_exp',/ylog,/xlog
                            
                            
                            ;Plotting of the filter error points
                            rms=2.*((*(*!dustem_data).sed).sigma)(idx_filt)/2.;/dustem_sed(idx_filt)
                            cgerrplot,((*(*!dustem_data).sed).wav)(idx_filt),((*(*!dustem_data).sed).values)(idx_filt)-rms,((*(*!dustem_data).sed).values)(idx_filt)+rms,color='Dodger Blue'
                            
                        endif
                        
                        ;Plotting of frequency axis
                        ;what are these? tests?
                        ;save_x=!x & save_y=!y & save_z=!z & save_p=!p & save_d=!d
                        ;save_scaling=1
                        use_xrange=((!const.c*1E6/(xr))*1E-9)
                        ;order=sort(use_xrange)
                        ;use_xrange=use_xrange[order]
                        ;print,use_xrange
                        
                        IF !dustemwrap_which_language NE 'fawlty' THEN BEGIN
                            axis, xaxis=1, xlog=1, xs=1, xminor=10, xticklen=0.05, xrange=use_xrange,charsize=1.15,xtitle=textoidl('\nu (GHz)'),color=0
                        ENDIF
                        
                        xyouts,pospltxt[0],pospltxt[1],textoidl('I_{\nu} (MJy/sr)'),color=0,/normal,charsize=1.3;,charthick=2.0
                         
                        ;Locating all the hidden data points (spectrum+filter)
                        match2,((*(*!dustem_data).sed).wav),((*(*!dustem_show).sed).wav),show_sedpts,fit_sedpts ;only show_sedpts is needed
                        idx_rmv_sed=where(fit_sedpts eq -1, ct_hdnpts) ; indices of the points to hide
                        ;Locating the hidden spectrum and filter data points                                        
                        idx_filt_hdn = where((((*(*!dustem_show).sed).filt_names))(idx_rmv_sed) NE 'SPECTRUM',ct_filt_hdn)
                        idx_spec_hdn = where(((*(*!dustem_show).sed).filt_names)(idx_rmv_sed) EQ 'SPECTRUM',ct_spec_hdn)
                         
                        if ct_hdnpts ne 0 then begin ;Hidden data points are present 
                            
                            if ct_spec_hdn ne 0 then begin
                                ;Plotting of hidden spectrum data points
                                cgoplot,(((*(*!dustem_show).sed).wav)[idx_rmv_sed])(idx_spec_hdn),(((*(*!dustem_show).sed).values)[idx_rmv_sed])(idx_spec_hdn),pos=position[0],/ylog,/xlog,/ys,xs=9,noerase=1,charsize=1.15,xtickformat='(A1)',color='Black',xr=xr,yr=yr,psym=16,syms=0.8
                                
                                ;Plotting of hidden spectrum error points
                                rms=2.*(((*(*!dustem_show).sed).sigma)[idx_rmv_sed])(idx_spec_hdn)/2.
                                cgerrplot,(((*(*!dustem_show).sed).wav)[idx_rmv_sed])(idx_spec_hdn),(((*(*!dustem_show).sed).values)[idx_rmv_sed])(idx_spec_hdn)-rms,(((*(*!dustem_show).sed).values)[idx_rmv_sed])(idx_spec_hdn)+rms,color='Black'
                            endif                                            
                            
                            if ct_filt_hdn then begin
                            ;Plotting of hidden filter data points 
                                cgoplot,(((*(*!dustem_show).sed).wav)[idx_rmv_sed])(idx_filt_hdn),(((*(*!dustem_show).sed).values)[idx_rmv_sed])(idx_filt_hdn),pos=position[0],/ylog,/xlog,/ys,xs=9,noerase=1,charsize=1.15,xtickformat='(A1)',color='Black',xr=xr,yr=yr,psym=16,syms=0.8                                           
                                
                                ;Plotting of hidden filter error point
                                rms=2.*(((*(*!dustem_show).sed).sigma)[idx_rmv_sed])(idx_filt_hdn)/2.
                                cgerrplot,(((*(*!dustem_show).sed).wav)[idx_rmv_sed])(idx_filt_hdn),(((*(*!dustem_show).sed).values)[idx_rmv_sed])(idx_filt_hdn)-rms,(((*(*!dustem_show).sed).values)[idx_rmv_sed])(idx_filt_hdn)+rms,color='Black'
                                
                            endif
                                                           
                        endif    
                         
                    endif
    
                end
            
            ;DONE BUT NOT TESTED
            
            'EXT': begin 
            
                ;SETTING THE PLOT RANGE
                xr = !dustem_plot_range.ext.xr
                yr = !dustem_plot_range.ext.yr
                
                idx_filt=where((*(*!dustem_data).ext).filt_names NE 'SPECTRUM',ct_filt)
                idx_spec=where((*(*!dustem_data).ext).filt_names EQ 'SPECTRUM',ct_spec)         
                        
                
                If n_elements(position) GT 1 THEN BEGIN ;Making the plotting of the normalized data optional because so far it was forced.
                    ;PLOTTING OF NORMALIZED PLOT
                    
                    ;REFRESHING OF NORMALIZED PLOT 
                    if keyword_set(refresh) then begin ;The data points in the plot that are being refreshed 
                        
                        ;making sure we're in the normalized plot so that overplotting happens here
                        cgplot,1/vectw,vectx,/xlog,/nodata,ys=8,xs=8,pos=position[1],noerase=1,xtickformat='(A1)',ytickformat='(A1)',color='Black',xr=xr,xtit='',yr=[0.0,2.0],yticks=2,ymino=2,xticklen=0.1,charsize=1.0
                        
                        IF ct_spec NE 0 THEN BEGIN
                            xx=((*(*!dustem_data).ext).wav)[idx_spec]
                            yy=dustem_interp[idx_spec]
                            rms=2.*((*(*!dustem_data).ext).sigma)(idx_spec)/2.
                            indzero = where(yy NE 0, ct_zero)
                            IF ct_zero NE 0 THEN BEGIN
                                cgoplot,(1/xx)[indzero],(((*(*!dustem_data).ext).values)[idx_spec])[indzero]/yy[indzero],color='Powder Blue',psym=16,syms=0.8,noerase=1,pos=position[1]
                                cgerrplot,(1/((*(*!dustem_data).ext).wav)(idx_spec))[indzero],((((*(*!dustem_data).ext).values)[idx_spec])[indzero]-rms[indzero])/yy[indzero],((((*(*!dustem_data).ext).values)[idx_spec])[indzero]+rms[indzero])/yy[indzero],color='Powder Blue'
                            ENDIF
                        ENDIF
                        
                        IF ct_filt NE 0 THEN BEGIN ; There are no filter points for now...
                            xx=((*(*!dustem_data).ext).wav)[idx_filt]
                            yy=dustem_interp[idx_filt]
                            rms=2.*((*(*!dustem_data).ext).sigma)(idx_filt)/2.
                            indzero = where(yy NE 0, ct_zero)
                            IF ct_zero NE 0 THEN BEGIN
                                cgoplot,(1/xx)[indzero],(((*(*!dustem_data).ext).values)[idx_filt])[indzero]/yy[indzero],psym=16,color='Dodger Blue',syms=0.8,noerase=1,pos=position[1]
                                cgerrplot,(1/((*(*!dustem_data).ext).wav)(idx_filt))[indzero],((((*(*!dustem_data).ext).values)[idx_filt])[indzero]-rms[indzero])/yy[indzero],((((*(*!dustem_data).ext).values)[idx_filt])[indzero]+rms[indzero])/yy[indzero],color='Dodger Blue';,/overplot 
                            ENDIF
                        ENDIF
                            
                        
                    endif 
                    
                    ;plotting of frozen data in polarization plot                            
                    if not keyword_set(refresh) then begin 
                           
                        xtit=textoidl('1/\lambda (\mum^{-1})')
                        if !run_pol then begin
                            xtit = ''
                            xtickformat='(A1)'
                        endif else xtickformat='(F10.2)' ;MAYBE YOU'LL CHANGE THIS FORMAT TO EXPONENTIAL NOTATION
                        cgplot,1/vectw,vectx,/xlog,/ys,xs=1,pos=position[1],noerase=1,xtickformat=xtickformat,color='Black',xr=xr,xtit=xtit,yr=[0.0,2.0],yticks=2,ymino=2,xticklen=0.1,ytickformat='(F6.2)',charsize=1.0
                        xyouts,pospltxt_n[0],pospltxt_n[1],textoidl('norm'),color=0,/normal,charsize=1.1
                    
                    endif
                
                ENDIF
            
            ;PLOTTING OF NORMAL PLOT
                
                ;REFRESHING OF NORMAL PLOT
                if keyword_set(refresh) then begin ;The data points in the plot are being refreshed
                    
                    
                    ;making sure we're in the normal plot so that overplotting happens here
                    cgplot,1/vectw,vectx,/xlog,/ylog,/nodata,ys=8,xs=8,pos=position[0],noerase=1,xtickformat='(A1)',ytickformat='(A1)',color='Black',xr=xr,xtit='',yr=yr,yticks=2,ymino=2,xticklen=0.1,charsize=1.0
                    
                    ;Plotting of the spectra of the dust species
                
                    FOR i=0L,Ngrains-1 DO BEGIN
                        cgoplot,1/st.ext.wav,transpose((st.ext.(1))[i,*]+(st.ext.(2))[i,*])*(*!dustem_HCD)/1.0e21,color=use_cols[i],pos=position[0],noerase=1
                    ENDFOR
                        
                                            
                    ;Plotting of the plugins.
                    for i=0L,n_plgns-1 do begin
                        
                        if isa((*!dustem_plugin).(0).spec) then begin 
                        
                            IF total(strsplit((*(*!dustem_plugin).(i).scope),'+',/extract) EQ 'ADD_EXT') THEN begin
                                cgoplot,1/st.ext.wav,((*(*!dustem_plugin).(i).spec)[*,0]),color=clrs_plgns[i],pos=position[0],noerase=1,linestyle=2               
                            ENDIF
                            
                        endif
                        
                    endfor
                                            
                    ;PLotting of the interpolates corresponding to spectrum and filter points
                       
                    IF ct_spec NE 0 THEN BEGIN
                    
                        xx=((*(*!dustem_data).ext).wav)[idx_spec]
                        yy=dustem_interp[idx_spec]
                        cgoplot,1/xx,yy,color='Indian Red',pos=position[0],psym=7,syms=1,noerase=1   
                    ENDIF
                    
                    
                    IF ct_filt NE 0 THEN BEGIN
                        xx=((*(*!dustem_data).ext).wav)[idx_filt]
                        yy=dustem_interp[idx_filt]
                        cgoplot,1/xx,yy,color='red',pos=position[0],psym=6,syms=2,noerase=1
                    ENDIF
                    
                    
                    ;Plotting of the total dust emission spectrum
                    cgoplot,1/st.ext.wav,dustem_spec,pos=position[0],noerase=1,/xlog,/ys,/xs,/ylog
                     
                                    
                            
                endif 
                
                ;Plotting of the frozen data in the normal plot
                
                if not keyword_set(refresh) then begin
                    ;Spectrum points are treated before for plotting reasons. 
                    if ct_spec ne 0 then begin 
                        
                        ;Plotting of spectrum data points (to be fitted)
                        cgplot,1/((*(*!dustem_data).ext).wav)(idx_spec),((*(*!dustem_data).ext).values)(idx_spec),/ylog,/xlog,ys=8,xs=8,pos=position[0],noerase=1,xtit=' ',charsize=1.15,xtickformat='(A1)',color='Powder Blue',xr=xr,yr=yr,psym=16,syms=0.8,ytickformat='dstmwrp_exp'                
                        
                        ;Plotting of the spectrum error points
                        rms=2.*((*(*!dustem_data).ext).sigma)(idx_spec)/2.
                        cgerrplot,1/((*(*!dustem_data).ext).wav)(idx_spec),((*(*!dustem_data).ext).values)(idx_spec)-rms,((*(*!dustem_data).ext).values)(idx_spec)+rms,color='Powder Blue'

                    endif
                    
                    if ct_filt ne 0 then begin
                    
                        ;Plotting of filter data points (to be fitted) + testing for prior plotting                         
                        if ct_spec ne 0 then cgoplot,1/((*(*!dustem_data).ext).wav)(idx_filt),((*(*!dustem_data).ext).values)(idx_filt),charsize=1.15,color='Dodger Blue',psym=16,syms=0.8,pos=position[0],/ys,xs=9,noerase=1,xtickformat='(A1)',xr=xr,yr=yr,ytickformat='dstmwrp_exp',/ylog,/xlog else $
                            cgplot,1/((*(*!dustem_data).ext).wav)(idx_filt),((*(*!dustem_data).ext).values)(idx_filt),charsize=1.15,color='Dodger Blue',psym=16,syms=0.8,pos=position[0],ys=8,xs=8,noerase=1,xtickformat='(A1)',xtit=' ',xr=xr,yr=yr,ytickformat='dstmwrp_exp',/ylog,/xlog
                        
                        
                        ;Plotting of the filter error points
                        rms=2.*((*(*!dustem_data).ext).sigma)(idx_filt)/2.;/dustem_sed(idx_filt)
                        cgerrplot,1/((*(*!dustem_data).ext).wav)(idx_filt),((*(*!dustem_data).ext).values)(idx_filt)-rms,((*(*!dustem_data).ext).values)(idx_filt)+rms,color='Dodger Blue'
                        
                    endif
                    
                    
                    ;Plotting of frequency axis
                    IF !dustemwrap_which_language NE 'fawlty' THEN BEGIN
                        axis, xaxis=1, xlog=1, xs=1, xminor=10, xticklen=0.05, xrange=((!const.c*1E6*xr)*1E-9),charsize=1.15,xtitle=textoidl('\nu (GHz)'),color=0
                    ENDIF
                    xyouts,pospltxt[0],pospltxt[1],textoidl('\tau_{EXT}'),color=0,/normal,charsize=1.3;,charthick=2.0
                     
                    ;Locating all the hidden data points (spectrum+filter)
                    match2,((*(*!dustem_data).ext).wav),((*(*!dustem_show).ext).wav),show_sedpts,fit_sedpts ;only show_sedpts is needed
                    idx_rmv_sed=where(fit_sedpts eq -1, ct_hdnpts) ; indices of the points to hide
                    ;Locating the hidden spectrum and filter data points                                        
                    idx_filt_hdn = where((((*(*!dustem_show).ext).filt_names))(idx_rmv_sed) NE 'SPECTRUM',ct_filt_hdn)
                    idx_spec_hdn = where(((*(*!dustem_show).ext).filt_names)(idx_rmv_sed) EQ 'SPECTRUM',ct_spec_hdn)
                     
                    if ct_hdnpts ne 0 then begin ;Hidden data points are present 
                        ;stop
                        if ct_spec_hdn ne 0 then begin
                            ;Plotting of hidden spectrum data points
                            cgoplot,1/(((*(*!dustem_show).ext).wav)[idx_rmv_sed])(idx_spec_hdn),(((*(*!dustem_show).ext).values)[idx_rmv_sed])(idx_spec_hdn),pos=position[0],/ylog,/xlog,ys=8,xs=8,noerase=1,charsize=1.15,xtickformat='(A1)',color='Black',xr=xr,yr=yr,psym=16,syms=0.8
                            
                            ;Plotting of hidden spectrum error points
                            rms=2.*(((*(*!dustem_show).ext).sigma)[idx_rmv_sed])(idx_spec_hdn)/2.
                            cgerrplot,1/(((*(*!dustem_show).ext).wav)[idx_rmv_sed])(idx_spec_hdn),(((*(*!dustem_show).ext).values)[idx_rmv_sed])(idx_spec_hdn)-rms,(((*(*!dustem_show).ext).values)[idx_rmv_sed])(idx_spec_hdn)+rms,color='Black'
                        endif                                            
                        
                        if ct_filt_hdn then begin
                        ;Plotting of hidden filter data points 
                            cgoplot,1/(((*(*!dustem_show).ext).wav)[idx_rmv_sed])(idx_filt_hdn),(((*(*!dustem_show).ext).values)[idx_rmv_sed])(idx_filt_hdn),pos=position[0],/ylog,/xlog,ys=8,xs=8,noerase=1,charsize=1.15,xtickformat='(A1)',color='Black',xr=xr,yr=yr,psym=16,syms=0.8                                           
                            
                            ;Plotting of hidden filter error point
                            rms=2.*(((*(*!dustem_show).ext).sigma)[idx_rmv_sed])(idx_filt_hdn)/2.
                            cgerrplot,1/(((*(*!dustem_show).ext).wav)[idx_rmv_sed])(idx_filt_hdn),(((*(*!dustem_show).ext).values)[idx_rmv_sed])(idx_filt_hdn)-rms,(((*(*!dustem_show).ext).values)[idx_rmv_sed])(idx_filt_hdn)+rms,color='Black'
                            
                        endif
                                                       
                    endif    
                
                endif        
              
            end
            
            ;DONE BUT NOT TESTED
            'POLEXT': begin 
                
                ;SETTING THE PLOT RANGE
                xr = !dustem_plot_range.polext.xr
                yr = !dustem_plot_range.polext.yr
                
                idx_filt=where((*(*!dustem_data).polext).filt_names NE 'SPECTRUM',ct_filt)
                idx_spec=where((*(*!dustem_data).polext).filt_names EQ 'SPECTRUM',ct_spec)
                        
                
                If n_elements(position) GT 1 THEN BEGIN
                
                    ;Plotting of refreshed data in normalized plot
                    if keyword_set(refresh) then begin ;The data points in the plot that are being refreshed 
                        
                        ;Making sure we're placed in the normalized plot
                        cgplot,1/vectw,vectx,/xlog,/nodata,/ys,xs=1,pos=position[1],noerase=1,xtickformat='(A1)',ytickformat='(A1)',color='Black',xr=xr,xtit='',yr=[0.0,2.0],yticks=2,ymino=2,xticklen=0.1,charsize=1.0
                        
                        IF ct_spec NE 0 THEN BEGIN
                            
                            xx=((*(*!dustem_data).polext).wav)[idx_spec]
                            yy=dustem_interp[idx_spec]
                            rms=2.*((*(*!dustem_data).polext).sigma)(idx_spec)/2.
                            indzero = where(yy NE 0, ct_zero)
                            
                            IF ct_zero NE 0 THEN BEGIN
                            
                                cgoplot,(1/xx)[indzero],(((*(*!dustem_data).polext).values)[idx_spec])[indzero]/yy[indzero],color='Powder Blue',psym=16,syms=0.8,noerase=1,pos=position[1]
                                cgerrplot,(1/((*(*!dustem_data).polext).wav)(idx_spec))[indzero],((((*(*!dustem_data).polext).values)[idx_spec])[indzero]-rms[indzero])/yy[indzero],((((*(*!dustem_data).polext).values)[idx_spec])[indzero]+rms[indzero])/yy[indzero],color='Powder Blue'
                            
                            ENDIF
                        ENDIF
                        
                        IF ct_filt NE 0 THEN BEGIN
                            xx=((*(*!dustem_data).polext).wav)[idx_filt]
                            yy=dustem_interp[idx_filt]
                            rms=2.*((*(*!dustem_data).polext).sigma)(idx_filt)/2.
                            indzero = where(yy NE 0, ct_zero)
                            IF ct_zero NE 0 THEN BEGIN
                             
                                cgoplot,(1/xx)[indzero],(((*(*!dustem_data).polext).values)[idx_filt])[indzero]/yy[indzero],psym=16,color='Dodger Blue',syms=0.8,noerase=1,pos=position[1]
                                cgerrplot,(1/((*(*!dustem_data).polext).wav)(idx_filt))[indzero],((((*(*!dustem_data).polext).values)[idx_filt])[indzero]-rms[indzero])/yy[indzero],((((*(*!dustem_data).polext).values)[idx_filt])[indzero]+rms[indzero])/yy[indzero],color='Dodger Blue'
                            
                            ENDIF
                        ENDIF
                            
                    ;Plotting of frozen data in normalized plot    
                    endif else begin 
                        
                        xtit=textoidl('1/\lambda (\mum^{-1})')
                        if !run_pol then xtit = ''
                        cgplot,1/vectw,vectx,/xlog,/ys,xs=1,pos=position[1],noerase=1,xtickformat='(A1)',color='Black',xr=xr,xtit=xtit,yr=[0.0,2.0],yticks=2,ymino=2,xticklen=0.1,ytickformat='(F6.2)',charsize=1.0
                        xyouts,pospltxt_n[0],pospltxt_n[1],textoidl('norm'),color=0,/normal,charsize=1.1
                    
                    endelse
                ENDIF
                
                ;Plotting of refreshed data in normal plot
                
                if keyword_set(refresh) then begin ;The data points in the plot are being refreshed
                    
                    
                    ;Making sure we're placed in the normal plot
                    cgplot,1/vectw,vectx,/nodata,/xlog,/ylog,/ys,xs=1,pos=position[0],noerase=1,xtickformat='(A1)',ytickformat='(A1)',color='Black',xr=xr,xtit='',yr=yr,yticks=2,ymino=2,xticklen=0.1,charsize=1.0
                    
                    
                    ;Plotting of the spectra of the dust species
                    FOR i=0L,Ngrains-1 DO BEGIN
                        vecto = transpose(((st.polext.(1))[i,*]+(st.polext.(2))[i,*]))
                        cgoplot,1/st.polext.wav,vecto*(*!dustem_HCD)/1.0e21,color=use_cols[i],pos=position[0],noerase=1
                    ENDFOR
                    
                    ;stop
                                            
                    ;Plotting of the plugins.
                    for i=0L,n_plgns-1 do begin
                        If isa((*!dustem_plugin).(0).spec) then begin
                            IF total(strsplit((*(*!dustem_plugin).(i).scope),'+',/extract) EQ 'ADD_POLEXT') THEN begin
                                cgoplot,1/st.polext.wav,sqrt(((*(*!dustem_plugin).(i).spec)[*,1])^2+((*(*!dustem_plugin).(i).spec)[*,2])^2),color=clrs_plgns[i],pos=position[0],noerase=1,linestyle=2               
                            ENDIF 
                        endif
                    endfor
                                            
                    ;PLotting of the interpolates corresponding to spectrum and filter points
                       
                    IF ct_spec NE 0 THEN BEGIN
                    
                        xx=((*(*!dustem_data).polext).wav)[idx_spec]
                        yy=dustem_interp[idx_spec]
                        cgoplot,1/xx,yy,color='Indian Red',pos=position[0],psym=7,syms=2,noerase=1   
                    ENDIF
                    
                    
                    IF ct_filt NE 0 THEN BEGIN
                        xx=((*(*!dustem_data).polext).wav)[idx_filt]
                        yy=dustem_interp[idx_filt]
                        cgoplot,1/xx,yy,color='red',pos=position[0],psym=6,syms=2,noerase=1
                    ENDIF
                    
                    ;Plotting of the total dust emission spectru
                    cgoplot,1/st.polext.wav,dustem_spec,pos=position[0],noerase=1,/xlog,/ys,/xs,/ylog
                   
                ;Plotting of frozen data in normal plot            
                endif else begin 
                    
                    ;Spectrum points are treated before for plotting reasons. 
                    if ct_spec ne 0 then begin 
                        
                        ;Plotting of spectrum data points (to be fitted)
                        cgplot,1/((*(*!dustem_data).polext).wav)(idx_spec),((*(*!dustem_data).polext).values)(idx_spec),/ylog,/xlog,/ys,xs=9,pos=position[0],noerase=1,xtit=' ',charsize=1.15,xtickformat='(A1)',color='Powder Blue',xr=xr,yr=yr,psym=8,syms=0.8,ytickformat='dstmwrp_exp'                
                        
                        ;Plotting of the spectrum error points
                        rms=2.*((*(*!dustem_data).polext).sigma)(idx_spec)/2.
                        cgerrplot,1/((*(*!dustem_data).polext).wav)(idx_spec),((*(*!dustem_data).polext).values)(idx_spec)-rms,((*(*!dustem_data).polext).values)(idx_spec)+rms,color='Powder Blue'

                    endif
                    
                    if ct_filt ne 0 then begin
                        plotsym,0,/fill
                        ;Plotting of filter data points (to be fitted) + testing for prior plotting                         
                        if ct_spec ne 0 then cgoplot,1/((*(*!dustem_data).polext).wav)(idx_filt),((*(*!dustem_data).polext).values)(idx_filt),charsize=1.15,color='Dodger Blue',psym=8,syms=0.8,pos=position[0],/ys,xs=9,noerase=1,xtickformat='(A1)',xr=xr,yr=yr,ytickformat='dstmwrp_exp',/ylog,/xlog else $
                            cgplot,1/((*(*!dustem_data).polext).wav)(idx_filt),((*(*!dustem_data).polext).values)(idx_filt),charsize=1.15,color='Dodger Blue',psym=8,syms=0.8,pos=position[0],/ys,xs=9,noerase=1,xtickformat='(A1)',xtit=' ',xr=xr,yr=yr,ytickformat='dstmwrp_exp',/ylog,/xlog
                        
                        
                        ;Plotting of the filter error points
                        rms=2.*((*(*!dustem_data).polext).sigma)(idx_filt)/2.;/dustem_polsed(idx_filt)
                        cgerrplot,1/((*(*!dustem_data).polext).wav)(idx_filt),((*(*!dustem_data).polext).values)(idx_filt)-rms,((*(*!dustem_data).polext).values)(idx_filt)+rms,color='Dodger Blue'
                        
                    endif
                    
                    
                    ;Plotting of frequency axis
                    IF !dustemwrap_which_language NE 'fawlty' THEN BEGIN
                        axis, xaxis=1, xlog=1, xs=1, xminor=10, xticklen=0.05, xrange=((!const.c*1E6*xr)*1E-9),charsize=1.15,xtitle=textoidl('\nu (GHz)'),color=0
                    ENDIF
                    xyouts,pospltxt[0],pospltxt[1],textoidl('\tau_{PEXT}'),color=0,/normal,charsize=1.3;,charthick=2.0
                     
                    ;Locating all the hidden data points (spectrum+filter)
                    match2,((*(*!dustem_data).polext).wav),((*(*!dustem_show).polext).wav),show_polsedpts,fit_polsedpts ;only show_polsedpts is needed
                    idx_rmv_polsed=where(fit_polsedpts eq -1, ct_hdnpts) ; indices of the points to hide  - not renaming this and keeping the polsed notation
                    ;Locating the hidden spectrum and filter data points                                        
                    idx_filt_hdn = where((((*(*!dustem_show).polext).filt_names))(idx_rmv_polsed) NE 'SPECTRUM',ct_filt_hdn)
                    idx_spec_hdn = where(((*(*!dustem_show).polext).filt_names)(idx_rmv_polsed) EQ 'SPECTRUM',ct_spec_hdn)
                    
                    ;stop
                    if ct_hdnpts ne 0 then begin ;Hidden data points are present 
                        ;stop
                        
                        if ct_spec_hdn ne 0 then begin
                            ;Plotting of hidden spectrum data points
                            cgoplot,1/(((*(*!dustem_show).polext).wav)[idx_rmv_polsed])(idx_spec_hdn),(((*(*!dustem_show).polext).values)[idx_rmv_polsed])(idx_spec_hdn),pos=position[0],/ylog,/xlog,/ys,xs=9,noerase=1,charsize=1.15,xtickformat='(A1)',color='Black',xr=xr,yr=yr,psym=8,syms=0.8
                            
                            ;Plotting of hidden spectrum error points
                            rms=2.*(((*(*!dustem_show).polext).sigma)[idx_rmv_polsed])(idx_spec_hdn)/2.
                            cgerrplot,1/(((*(*!dustem_show).polext).wav)[idx_rmv_polsed])(idx_spec_hdn),(((*(*!dustem_show).polext).values)[idx_rmv_polsed])(idx_spec_hdn)-rms,(((*(*!dustem_show).polext).values)[idx_rmv_polsed])(idx_spec_hdn)+rms,color='Black'
                        endif                                            
                        
                        if ct_filt_hdn ne 0 then begin
                        ;Plotting of hidden filter data points 
                            cgoplot,1/(((*(*!dustem_show).polext).wav)[idx_rmv_polsed])(idx_filt_hdn),(((*(*!dustem_show).polext).values)[idx_rmv_polsed])(idx_filt_hdn),pos=position[0],/ylog,/xlog,/ys,xs=9,noerase=1,charsize=1.15,xtickformat='(A1)',color='Black',xr=xr,yr=yr,psym=8,syms=0.8                                           
                            
                            ;Plotting of hidden filter error point
                            rms=2.*(((*(*!dustem_show).polext).sigma)[idx_rmv_polsed])(idx_filt_hdn)/2.
                            cgerrplot,1/(((*(*!dustem_show).polext).wav)[idx_rmv_polsed])(idx_filt_hdn),(((*(*!dustem_show).polext).values)[idx_rmv_polsed])(idx_filt_hdn)-rms,(((*(*!dustem_show).polext).values)[idx_rmv_polsed])(idx_filt_hdn)+rms,color='Black'
                            
                        endif
                                                       
                    endif    
                    
                endelse 
              
            end
            
            ;Done but not tested.
            'POLSED': begin 
                
                
                ;SETTING THE PLOT RANGE
                xr = !dustem_plot_range.polsed.xr
                yr = !dustem_plot_range.polsed.yr
                
                idx_filt=where((*(*!dustem_data).polsed).filt_names NE 'SPECTRUM',ct_filt)
                idx_spec=where((*(*!dustem_data).polsed).filt_names EQ 'SPECTRUM',ct_spec)
                
                
                
                If n_elements(position) GT 1 THEN BEGIN
                    ;Refreshing of normalized plot        
                    if keyword_set(refresh) then begin ;The data points in the plot that are being refreshed 
                        
                        ;making sure we're in the normalized plot
                        cgplot,vectw,vectx,/nodata,/xlog,xs=5,ys=5,pos=position[1],noerase=1,xtickformat='(A1)',ytickformat='(A1)',color='Black',xr=xr,xtit='',yr=[0.0,2.0],yticks=2,ymino=2,xticklen=0.1,charsize=1.0
                        
                        ;I think the fact we use the position keyword here might mean we can omit it in the following lines but I haven't tried removing it yet.
                        IF ct_spec NE 0 THEN BEGIN
                            xx=((*(*!dustem_data).polsed).wav)[idx_spec]
                            yy=dustem_interp[idx_spec]
                            rms=2.*((*(*!dustem_data).polsed).sigma)(idx_spec)/2.
                            indzero = where(yy NE 0, ct_zero)
                            IF ct_zero NE 0 THEN BEGIN
                                cgoplot,xx[indzero],(((*(*!dustem_data).polsed).values)[idx_spec])[indzero]/yy[indzero],color='Powder Blue',psym=16,syms=0.8,noerase=1,pos=position[1]
                                cgerrplot,(((*(*!dustem_data).polsed).wav)(idx_spec))[indzero],((((*(*!dustem_data).polsed).values)[idx_spec])[indzero]-rms[indzero])/yy[indzero],((((*(*!dustem_data).polsed).values)[idx_spec])[indzero]+rms[indzero])/yy[indzero],color='Powder Blue'
                            ENDIF
                        ENDIF
                        
                        IF ct_filt NE 0 THEN BEGIN
                            xx=((*(*!dustem_data).polsed).wav)[idx_filt]
                            yy=dustem_interp[idx_filt]
                            rms=2.*((*(*!dustem_data).polsed).sigma)(idx_filt)/2.
                            indzero = where(yy NE 0, ct_zero)
                            IF ct_zero NE 0 THEN BEGIN 
                                cgoplot,xx[indzero],(((*(*!dustem_data).polsed).values)[idx_filt])[indzero]/yy[indzero],psym=16,color='Dodger Blue',syms=0.8,noerase=1,pos=position[1]
                                cgerrplot,(((*(*!dustem_data).polsed).wav)(idx_filt))[indzero],((((*(*!dustem_data).polsed).values)[idx_filt])[indzero]-rms[indzero])/yy[indzero],((((*(*!dustem_data).polsed).values)[idx_filt])[indzero]+rms[indzero])/yy[indzero],color='Dodger Blue';,/overplot 
                            ENDIF
                        ENDIF
                            
                    ;plotting of frozen data points in normalized plot    
                    endif else begin ;The data points in the plot that remain unchanged ; UNNECESSARY BLOCK but needed to limit erros when calls are made with missing keywords.
                        
                        xtit=textoidl('\lambda (\mum)')
                        if !run_pol then xtit = ''
                        cgplot,vectw,vectx,/xlog,/ys,xs=1,pos=position[1],noerase=1,xtickformat='(A1)',color='Black',xr=xr,xtit=xtit,yr=[0.0,2.0],yticks=2,ymino=2,xticklen=0.1,ytickformat='(F6.2)',charsize=1.0
                        xyouts,pospltxt_n[0],pospltxt_n[1],textoidl('norm'),color=0,/normal,charsize=1.1
                    
                    endelse
                ENDIF
                ;Plotting the refreshed data in the normal plot                       
                if keyword_set(refresh) then begin ;The data points in the plot are being refreshed
                    
                    ;making sure we're placed in the normal window
                    
                    cgplot,vectw,vectx,/nodata,/xlog,/ylog,xs=5,ys=5,pos=position[0],noerase=1,xtickformat='(A1)',ytickformat='(A1)',color='Black',xr=xr,xtit='',yr=yr,yticks=2,ymino=2,xticklen=0.1,charsize=1.0
                    
                    
                    ;Plotting of the spectra of the dust species
                    FOR i=0L,Ngrains-1 DO BEGIN
                        cgoplot,st.polsed.wav,st.polsed.(i+1)*fact,color=use_cols[i],pos=position[0],noerase=1
                    ENDFOR
                    
                                            
                    ;Plotting of the plugins.
                    for i=0L,n_plgns-1 do begin
                        If isa((*!dustem_plugin).(i).spec) then begin
                            IF total(strsplit((*(*!dustem_plugin).(i).scope),'+',/extract) EQ 'ADD_POLSED') THEN begin
                                cgoplot,st.polsed.wav,sqrt(((*(*!dustem_plugin).(i).spec)[*,1])^2+((*(*!dustem_plugin).(i).spec)[*,2])^2),color=clrs_plgns[i],pos=position[0],noerase=1,linestyle=2               
                            ENDIF 
                        endif
                    endfor
                   
                    ;PLotting of the interpolates corresponding to spectrum and filter points
                       
                    IF ct_spec NE 0 THEN BEGIN
                    
                        xx=((*(*!dustem_data).polsed).wav)[idx_spec]
                        yy=dustem_interp[idx_spec]
                        cgoplot,xx,yy,color='Indian Red',pos=position[0],psym=7,syms=2,noerase=1   
                    ENDIF
                    
                    
                    IF ct_filt NE 0 THEN BEGIN
                        xx=((*(*!dustem_data).polsed).wav)[idx_filt]
                        yy=dustem_interp[idx_filt]
                        cgoplot,xx,yy,color='red',pos=position[0],psym=6,syms=2,noerase=1
                    ENDIF
                    
                    ;Plotting of the total dust emission spectru
                    cgoplot,st.polsed.wav,dustem_spec,pos=position[0],noerase=1,/xlog,/ys,/xs,/ylog
                                    
                ;Plotting of frozen data in normal plot            
                endif else begin 
                
                    ;Spectrum points are treated before for plotting reasons. 
                    if ct_spec ne 0 then begin 
                        
                        ;Plotting of spectrum data points (to be fitted)
                        cgplot,((*(*!dustem_data).polsed).wav)(idx_spec),((*(*!dustem_data).polsed).values)(idx_spec),/ylog,/xlog,/ys,xs=9,pos=position[0],noerase=1,xtit=' ',charsize=1.15,xtickformat='(A1)',color='Powder Blue',xr=xr,yr=yr,psym=8,syms=0.8,ytickformat='dstmwrp_exp'                
                        
                        ;Plotting of the spectrum error points
                        rms=2.*((*(*!dustem_data).polsed).sigma)(idx_spec)/2.
                        cgerrplot,((*(*!dustem_data).polsed).wav)(idx_spec),((*(*!dustem_data).polsed).values)(idx_spec)-rms,((*(*!dustem_data).polsed).values)(idx_spec)+rms,color='Powder Blue'

                    endif
                    
                    if ct_filt ne 0 then begin
                        plotsym,0,/fill
                        ;Plotting of filter data points (to be fitted) + testing for prior plotting                         
                        if ct_spec ne 0 then cgoplot,((*(*!dustem_data).polsed).wav)(idx_filt),((*(*!dustem_data).polsed).values)(idx_filt),charsize=1.15,color='Dodger Blue',psym=8,syms=0.8,pos=position[0],/ys,xs=9,noerase=1,xtickformat='(A1)',xr=xr,yr=yr,ytickformat='dstmwrp_exp',/ylog,/xlog else $
                            cgplot,((*(*!dustem_data).polsed).wav)(idx_filt),((*(*!dustem_data).polsed).values)(idx_filt),charsize=1.15,color='Dodger Blue',psym=8,syms=0.8,pos=position[0],/ys,xs=9,noerase=1,xtickformat='(A1)',xtit=' ',xr=xr,yr=yr,ytickformat='dstmwrp_exp',/ylog,/xlog
                        
                        
                        ;Plotting of the filter error points
                        rms=2.*((*(*!dustem_data).polsed).sigma)(idx_filt)/2.;/dustem_polsed(idx_filt)
                        cgerrplot,((*(*!dustem_data).polsed).wav)(idx_filt),((*(*!dustem_data).polsed).values)(idx_filt)-rms,((*(*!dustem_data).polsed).values)(idx_filt)+rms,color='Dodger Blue'
                        
                    endif
                    
                    
                    ;Plotting of frequency axis
                    IF !dustemwrap_which_language NE 'fawlty' THEN BEGIN
                        axis, xaxis=1, xlog=1, xs=1, xminor=10, xticklen=0.05, xrange=((!const.c*1E6/(xr))*1E-9),charsize=1.15,xtitle=textoidl('\nu (GHz)'),color=0
                    ENDIF
                    xyouts,pospltxt[0],pospltxt[1],textoidl('P_{\nu} (MJy/sr)'),color=0,/normal,charsize=1.3;,charthick=2.0
                     
                    ;Locating all the hidden data points (spectrum+filter)
                    match2,((*(*!dustem_data).polsed).wav),((*(*!dustem_show).polsed).wav),show_polsedpts,fit_polsedpts ;only show_polsedpts is needed
                    idx_rmv_polsed=where(fit_polsedpts eq -1, ct_hdnpts) ; indices of the points to hide
                    ;Locating the hidden spectrum and filter data points                                        
                    idx_filt_hdn = where((((*(*!dustem_show).polsed).filt_names))(idx_rmv_polsed) NE 'SPECTRUM',ct_filt_hdn)
                    idx_spec_hdn = where(((*(*!dustem_show).polsed).filt_names)(idx_rmv_polsed) EQ 'SPECTRUM',ct_spec_hdn)
                    
                    ;stop
                    if ct_hdnpts ne 0 then begin ;Hidden data points are present 
                        ;stop
                        
                        if ct_spec_hdn ne 0 then begin
                            ;Plotting of hidden spectrum data points
                            cgoplot,(((*(*!dustem_show).polsed).wav)[idx_rmv_polsed])(idx_spec_hdn),(((*(*!dustem_show).polsed).values)[idx_rmv_polsed])(idx_spec_hdn),pos=position[0],/ylog,/xlog,/ys,xs=9,noerase=1,charsize=1.15,xtickformat='(A1)',color='Black',xr=xr,yr=yr,psym=8,syms=0.8
                            
                            ;Plotting of hidden spectrum error points
                            rms=2.*(((*(*!dustem_show).polsed).sigma)[idx_rmv_polsed])(idx_spec_hdn)/2.
                            cgerrplot,(((*(*!dustem_show).polsed).wav)[idx_rmv_polsed])(idx_spec_hdn),(((*(*!dustem_show).polsed).values)[idx_rmv_polsed])(idx_spec_hdn)-rms,(((*(*!dustem_show).polsed).values)[idx_rmv_polsed])(idx_spec_hdn)+rms,color='Black'
                        endif                                            
                        
                        if ct_filt_hdn ne 0 then begin
                        ;Plotting of hidden filter data points 
                            cgoplot,(((*(*!dustem_show).polsed).wav)[idx_rmv_polsed])(idx_filt_hdn),(((*(*!dustem_show).polsed).values)[idx_rmv_polsed])(idx_filt_hdn),pos=position[0],/ylog,/xlog,/ys,xs=9,noerase=1,charsize=1.15,xtickformat='(A1)',color='Black',xr=xr,yr=yr,psym=8,syms=0.8                                           
                            
                            ;Plotting of hidden filter error point
                            rms=2.*(((*(*!dustem_show).polsed).sigma)[idx_rmv_polsed])(idx_filt_hdn)/2.
                            cgerrplot,(((*(*!dustem_show).polsed).wav)[idx_rmv_polsed])(idx_filt_hdn),(((*(*!dustem_show).polsed).values)[idx_rmv_polsed])(idx_filt_hdn)-rms,(((*(*!dustem_show).polsed).values)[idx_rmv_polsed])(idx_filt_hdn)+rms,color='Black'
                            
                        endif
                                                       
                    endif    
                    
                endelse 
            
            end
            
            ;DONE BUT NOT TESTED...
            
            'POLFRAC': begin 
                
                ;SETTING THE PLOT RANGE
                xr = !dustem_plot_range.polfrac.xr
                yr = !dustem_plot_range.polfrac.yr
                
                idx_filt=where((*(*!dustem_data).polfrac).filt_names NE 'SPECTRUM',ct_filt)
                idx_spec=where((*(*!dustem_data).polfrac).filt_names EQ 'SPECTRUM',ct_spec)
                            
                        
                if keyword_set(refresh) then begin ;The data points in the plot are being refreshed
                    
                    ;making sure we're refreshing the right dataset
                    
                    cgplot,vectw,vectx,/nodata,/xlog,/ylog,/ys,xs=1,pos=position[0],noerase=1,charsize=1.15,xtickformat='(A1)',ytickformat='(A1)',color='Powder Blue',xr=xr,xtit='',yr=yr,psym=8,syms=0.8  
                    
                    FOR i=0L,Ngrains-1 DO BEGIN
                        
                        testneq = where(st.polsed.(i+1) ne 0,countneq)
                        
                        if countneq ne 0 then begin 
                            vecfin = st.polsed.(i+1)*0.0
                            
                            vecfin[testneq] = ((st.polsed.(i+1))[testneq])*fact[testneq]/extra_spec[testneq];(st.sed.em_tot)[testneq];;(st.sed.em_tot)[testneq];spec[testneq];(st.sed.(i+1))[testneq];*fact;(st.sed.(i+1))[testneq]
                            
                            cgoplot,st.polsed.wav,vecfin*100,pos=position[0],noerase=1,color=use_cols[i],xr=xr,/xlog,/ylog,ytickformat='(A1)',yr=yr
                        endif   
                    ENDFOR
                   
                    ;Plotting of the plugins. 
                     
                    for i=0L,n_plgns-1 do begin
                        
                        if isa((*!dustem_plugin).(i).spec) then begin
                        
                            IF total(strsplit((*(*!dustem_plugin).(i).scope),'+',/extract) EQ 'ADD_POLSED') THEN begin
                                vecfin = st.polsed.em_tot*0.0
                                vecfin[testneq] = sqrt((((*(*!dustem_plugin).(i).spec)[*,1])^2)[testneq]+(((*(*!dustem_plugin).(i).spec)[*,2])^2)[testneq])/extra_spec[testneq];((*(*!dustem_plugin).(i).spec)[*,0])[testneq]        
                                cgoplot,st.polsed.wav,vecfin*100,color=clrs_plgns[i],pos=position[0],noerase=1,linestyle=2               
                            
                            ENDIF
                        endif
                        
                    endfor
                    
                     ;PLotting of the interpolates corresponding to spectrum and filter points
                    
                     IF ct_spec NE 0 THEN BEGIN
                     
                         xx=((*(*!dustem_data).polfrac).wav)[idx_spec]
                         yy=dustem_interp[idx_spec]
                         cgoplot,xx,yy*100,color='Indian Red',pos=position[0],psym=7,syms=2,noerase=1   
                     ENDIF
                     
                     
                     IF ct_filt NE 0 THEN BEGIN
                         xx=((*(*!dustem_data).polfrac).wav)[idx_filt]
                         yy=dustem_interp[idx_filt]
                         cgoplot,xx,yy*100,color='red',pos=position[0],psym=6,syms=2,noerase=1
                     ENDIF
                     
                     
                     ;Plotting of the total dust emission spectrum
                     cgoplot,st.polsed.wav,dustem_spec*100,pos=position[0],noerase=1,/xlog,/ys,/xs               
                            
                endif else begin ;The data points in the plot that remain unchanged.
                    
                    ;Spectrum points are treated before for plotting reasons. 
                    
                    if ct_spec ne 0 then begin 
                        
                        ;Plotting of spectrum data points (to be fitted)
                        cgplot,((*(*!dustem_data).polfrac).wav)(idx_spec),((*(*!dustem_data).polfrac).values)(idx_spec)*100,/xlog,/ylog,/ys,xs=1,pos=position[0],noerase=1,xtit=' ',charsize=1.15,xtickformat='(A1)',color='Powder Blue',xr=xr,yr=yr,psym=16,syms=0.8;,ytickformat='dstmwrp_exp'                
                        
                        ;Plotting of the spectrum error points
                        rms=2.*((*(*!dustem_data).polfrac).sigma)(idx_spec)/2.
                        cgerrplot,((*(*!dustem_data).polfrac).wav)(idx_spec),(((*(*!dustem_data).polfrac).values)(idx_spec)-rms)*100,(((*(*!dustem_data).polfrac).values)(idx_spec)+rms)*100,color='Powder Blue'

                    endif
                    
                    if ct_filt ne 0 then begin
                    
                        ;Plotting of filter data points (to be fitted) + testing for prior plotting                         
                        if ct_spec ne 0 then cgoplot,((*(*!dustem_data).polfrac).wav)(idx_filt),((*(*!dustem_data).polfrac).values)(idx_filt)*100,charsize=1.15,color='Dodger Blue',psym=16,syms=0.8,pos=position[0],/ys,xs=1,noerase=1,xtickformat='(A1)',xr=xr,yr=yr,/xlog,/ylog else $;,ytickformat='dstmwrp_exp'
                            cgplot,((*(*!dustem_data).polfrac).wav)(idx_filt),((*(*!dustem_data).polfrac).values)(idx_filt)*100,charsize=1.15,color='Dodger Blue',psym=16,syms=0.8,pos=position[0],/ys,xs=1,noerase=1,xtickformat='(A1)',xtit=' ',xr=xr,yr=yr,/xlog,/ylog;,ytickformat='dstmwrp_exp'
                        
                        
                        ;Plotting of the filter error points
                        rms=2.*((*(*!dustem_data).polfrac).sigma)(idx_filt)/2.;/dustem_polfrac(idx_filt)
                        cgerrplot,((*(*!dustem_data).polfrac).wav)(idx_filt),(((*(*!dustem_data).polfrac).values)(idx_filt)-rms)*100,(((*(*!dustem_data).polfrac).values)(idx_filt)+rms)*100,color='Dodger Blue'
                        
                    endif
                    
                    
                    
                    xyouts,pospltxt[0],pospltxt[1],textoidl('p (%)'),color=0,/normal,charsize=1.3;,charthick=2.0
                     
                    ;Locating all the hidden data points (spectrum+filter)
                    
                    ;The filtering has been done prior (in the primary routine)
                    match2,((*(*!dustem_data).polfrac).wav),((*(*!dustem_show).polfrac).wav),show_polfracpts,fit_polfracpts ;only show_polfracpts is needed
                    idx_rmv_polfrac=where(fit_polfracpts eq -1, ct_hdnpts) ; indices of the points to hide
                    ;stop
                    ;Locating the hidden spectrum and filter data points                                        
                    idx_filt_hdn = where(((*(*!dustem_show).polfrac).filt_names)(idx_rmv_polfrac) NE 'SPECTRUM',ct_filt_hdn)
                    idx_spec_hdn = where(((*(*!dustem_show).polfrac).filt_names)(idx_rmv_polfrac) EQ 'SPECTRUM',ct_spec_hdn)
                    if ct_hdnpts ne 0 then begin ;Hidden data points are present 
                        ;stop
                        
                        if ct_spec_hdn ne 0 then begin
                            ;Plotting of hidden spectrum data points
                            cgplot,(((*(*!dustem_show).polfrac).wav)[idx_rmv_polfrac])(idx_spec_hdn),(((*(*!dustem_show).polfrac).values)[idx_rmv_polfrac])(idx_spec_hdn)*100,pos=position[0],/xlog,/ylog,/ys,xs=1,noerase=1,charsize=1.15,xtickformat='(A1)',color='Black',xr=xr,yr=yr,psym=8,syms=0.8
                            
                            ;Plotting of hidden spectrum error points
                            rms=2.*(((*(*!dustem_show).polfrac).sigma)[idx_rmv_polfrac])(idx_spec_hdn)/2.
                            cgerrplot,(((*(*!dustem_show).polfrac).wav)[idx_rmv_polfrac])(idx_spec_hdn),((((*(*!dustem_show).polfrac).values)[idx_rmv_polfrac])(idx_spec_hdn)-rms)*100,((((*(*!dustem_show).polfrac).values)[idx_rmv_polfrac])(idx_spec_hdn)+rms)*100,color='Black'
                        endif                                           
                        
                        if ct_filt_hdn ne 0 then begin
                            ;stop
                            plotsym,0, /fill
                            ;Plotting of hidden filter data points 
                            cgplot,(((*(*!dustem_show).polfrac).wav)[idx_rmv_polfrac])(idx_filt_hdn),(((*(*!dustem_show).polfrac).values)[idx_rmv_polfrac])(idx_filt_hdn)*100,pos=position[0],/xlog,/ylog,/ys,xs=1,noerase=1,charsize=1.15,xtickformat='(A1)',color='Black',xr=xr,yr=yr,psym=8,syms=0.8                                           
                            ;stop
                            ;Plotting of hidden filter error point
                            rms=2.*(((*(*!dustem_show).polfrac).sigma)[idx_rmv_polfrac])(idx_filt_hdn)/2.
                            cgerrplot,(((*(*!dustem_show).polfrac).wav)[idx_rmv_polfrac])(idx_filt_hdn),((((*(*!dustem_show).polfrac).values)[idx_rmv_polfrac])(idx_filt_hdn)-rms)*100,((((*(*!dustem_show).polfrac).values)[idx_rmv_polfrac])(idx_filt_hdn)+rms)*100,color='Black'
                             
                        endif 
                                                       
                    endif 
                    
                
                endelse 
            
            end
            
            ;DONE BUT NOT TESTED.
            'FPOLEXT': BEGIN ; For completeness (not sure of the physical usefulness of this qauntity )
                
                
                ;SETTING THE PLOT RANGE
                xr = !dustem_plot_range.fpolext.xr
                yr = !dustem_plot_range.fpolext.yr
                
                
                idx_filt=where((*(*!dustem_data).fpolext).filt_names NE 'SPECTRUM',ct_filt)
                idx_spec=where((*(*!dustem_data).fpolext).filt_names EQ 'SPECTRUM',ct_spec)
                
                            
                if keyword_set(refresh) then begin ;The data points in the plot are being refreshed
                    
                    ;making sure we're plotting in the refreshed plot

                    cgplot,1/vectw,vectx,/xlog,/ylog,/nodata,/ys,xs=1,pos=position[0],noerase=1,xtickformat='(A1)',ytickformat='(A1)',color='Black',xr=xr,xtit='',yr=yr,yticks=2,ymino=2,xticklen=0.1,charsize=1.0
                        
                    
                    FOR i=0L,Ngrains-1 DO BEGIN
                        
                        vecto = transpose((st.polext.(1))[i,*]+(st.polext.(2))[i,*])
                        
                        testneq = where(vecto ne 0,countneq)
                        
                        if countneq ne 0 then begin 
                            vecfin = vecto*0.0
                            
                            vecfin[testneq] = (vecto[testneq])*(*!dustem_HCD)/1.0e21/extra_spec[testneq];(st.sed.em_tot)[testneq];spec[testneq];(st.sed.(i+1))[testneq];*fact;(st.sed.(i+1))[testneq]
                             
                            cgoplot,1/st.polext.wav,vecfin*100,pos=position[0],noerase=1,color=use_cols[i],xr=xr,/xlog,/ylog,ytickformat='(A1)',yr=yr
                        endif   
                    ENDFOR
                   
                    ;Plotting of the plugins. 
                     
                    for i=0L,n_plgns-1 do begin
                        
                        if isa((*!dustem_plugin).(0).spec) then begin
                        
                            IF total(strsplit((*(*!dustem_plugin).(i).scope),'+',/extract) EQ 'ADD_POLEXT') THEN begin
                                vecfin = st.polext.ext_tot*0.0
                                vecfin[testneq] = sqrt((((*(*!dustem_plugin).(i).spec)[*,1])^2)[testneq]+(((*(*!dustem_plugin).(i).spec)[*,2])^2)[testneq])/((*(*!dustem_plugin).(i).spec)[*,0])[testneq]        
                                cgoplot,1/st.polext.wav,vecfin*100,color=clrs_plgns[i],pos=position[0],noerase=1,linestyle=2               
                            
                            ENDIF
                        endif
                        
                    endfor
                   
                     ;PLotting of the interpolates corresponding to spectrum and filter points
                    
                     IF ct_spec NE 0 THEN BEGIN
                     
                         xx=((*(*!dustem_data).fpolext).wav)[idx_spec]
                         yy=dustem_interp[idx_spec]
                         cgoplot,1/xx,yy*100,color='Indian Red',pos=position[0],psym=7,syms=2,noerase=1   
                     ENDIF
                     
                     
                     IF ct_filt NE 0 THEN BEGIN
                         xx=((*(*!dustem_data).fpolext).wav)[idx_filt]
                         yy=dustem_interp[idx_filt]
                         cgoplot,1/xx,yy*100,color='red',pos=position[0],psym=6,syms=2,noerase=1
                     ENDIF
                     
                     
                     ;Plotting of the total dust emission spectrum
                     cgoplot,1/st.polext.wav,dustem_spec*100,pos=position[0],noerase=1,/xlog,/ys,/xs
                                    
                            
                endif else begin ;The data points in the plot that remain unchanged.
                     
                    
                    ;Spectrum points are treated before for plotting reasons. 
                    
                    if ct_spec ne 0 then begin 
                        
                        ;Plotting of spectrum data points (to be fitted)
                        cgplot,1/((*(*!dustem_data).fpolext).wav)(idx_spec),((*(*!dustem_data).fpolext).values)(idx_spec)*100,/xlog,/ylog,/ys,xs=1,pos=position[0],noerase=1,xtit=' ',charsize=1.15,xtickformat='(A1)',color='Powder Blue',xr=xr,yr=yr,psym=16,syms=0.8;,ytickformat='dstmwrp_exp'                
                        
                        ;Plotting of the spectrum error points
                        rms=2.*((*(*!dustem_data).fpolext).sigma)(idx_spec)/2.
                        cgerrplot,1/((*(*!dustem_data).fpolext).wav)(idx_spec),(((*(*!dustem_data).fpolext).values)(idx_spec)-rms)*100,(((*(*!dustem_data).fpolext).values)(idx_spec)+rms)*100,color='Powder Blue'

                    endif
                    
                    if ct_filt ne 0 then begin
                    
                        ;Plotting of filter data points (to be fitted) + testing for prior plotting                         
                        if ct_spec ne 0 then cgoplot,1/((*(*!dustem_data).fpolext).wav)(idx_filt),((*(*!dustem_data).fpolext).values)(idx_filt)*100,charsize=1.15,color='Dodger Blue',psym=16,syms=0.8,pos=position[0],/ys,xs=1,noerase=1,xtickformat='(A1)',xr=xr,yr=yr,/xlog,/ylog else $;,ytickformat='dstmwrp_exp'
                            cgplot,1/((*(*!dustem_data).fpolext).wav)(idx_filt),((*(*!dustem_data).fpolext).values)(idx_filt)*100,charsize=1.15,color='Dodger Blue',psym=16,syms=0.8,pos=position[0],/ys,xs=1,noerase=1,xtickformat='(A1)',xtit=' ',xr=xr,yr=yr,/xlog,/ylog;,ytickformat='dstmwrp_exp'
                        
                        
                        ;Plotting of the filter error points
                        rms=2.*((*(*!dustem_data).fpolext).sigma)(idx_filt)/2.;/dustem_polfrac(idx_filt)
                        cgerrplot,1/((*(*!dustem_data).fpolext).wav)(idx_filt),(((*(*!dustem_data).fpolext).values)(idx_filt)-rms)*100,(((*(*!dustem_data).fpolext).values)(idx_filt)+rms)*100,color='Dodger Blue'
                        
                    endif
                    
                    xyouts,pospltxt[0],pospltxt[1],textoidl('\tau_{PEXT}/\tau_{EXT} (%)'),color=0,/normal,charsize=1.3;,charthick=2.0
                     
                    ;Locating all the hidden data points (spectrum+filter)
                    
                    ;The filtering has been done prior (in the primary routine)
                    match2,((*(*!dustem_data).fpolext).wav),((*(*!dustem_show).fpolext).wav),show_polfracpts,fit_polfracpts ;only show_polfracpts is needed
                    idx_rmv_polfrac=where(fit_polfracpts eq -1, ct_hdnpts) ; indices of the points to hide; 
                    
                    ;Locating the hidden spectrum and filter data points                                        
                    idx_filt_hdn = where(((*(*!dustem_show).fpolext).filt_names)(idx_rmv_polfrac) NE 'SPECTRUM',ct_filt_hdn)
                    idx_spec_hdn = where(((*(*!dustem_show).fpolext).filt_names)(idx_rmv_polfrac) EQ 'SPECTRUM',ct_spec_hdn)
                    if ct_hdnpts ne 0 then begin ;Hidden data points are present 
                        ;stop
                        
                        if ct_spec_hdn ne 0 then begin
                            ;Plotting of hidden spectrum data points
                            cgplot,1/(((*(*!dustem_show).fpolext).wav)[idx_rmv_polfrac])(idx_spec_hdn),(((*(*!dustem_show).fpolext).values)[idx_rmv_polfrac])(idx_spec_hdn)*100,pos=position[0],/xlog,/ylog,/ys,xs=1,noerase=1,charsize=1.15,xtickformat='(A1)',color='Black',xr=xr,yr=yr,psym=8,syms=0.8
                            
                            ;Plotting of hidden spectrum error points
                            rms=2.*(((*(*!dustem_show).fpolext).sigma)[idx_rmv_polfrac])(idx_spec_hdn)/2.
                            cgerrplot,1/(((*(*!dustem_show).fpolext).wav)[idx_rmv_polfrac])(idx_spec_hdn),((((*(*!dustem_show).fpolext).values)[idx_rmv_polfrac])(idx_spec_hdn)-rms)*100,((((*(*!dustem_show).fpolext).values)[idx_rmv_polfrac])(idx_spec_hdn)+rms)*100,color='Black'
                        endif                                           
                        
                        if ct_filt_hdn ne 0 then begin
                            ;stop
                            plotsym,0, /fill
                            ;Plotting of hidden filter data points 
                            cgplot,1/(((*(*!dustem_show).fpolext).wav)[idx_rmv_polfrac])(idx_filt_hdn),(((*(*!dustem_show).fpolext).values)[idx_rmv_polfrac])(idx_filt_hdn)*100,pos=position[0],/xlog,/ylog,/ys,xs=1,noerase=1,charsize=1.15,xtickformat='(A1)',color='Black',xr=xr,yr=yr,psym=8,syms=0.8                                           
                            ;stop
                            ;Plotting of hidden filter error point
                            rms=2.*(((*(*!dustem_show).fpolext).sigma)[idx_rmv_polfrac])(idx_filt_hdn)/2.
                            cgerrplot,1/(((*(*!dustem_show).fpolext).wav)[idx_rmv_polfrac])(idx_filt_hdn),((((*(*!dustem_show).fpolext).values)[idx_rmv_polfrac])(idx_filt_hdn)-rms)*100,((((*(*!dustem_show).fpolext).values)[idx_rmv_polfrac])(idx_filt_hdn)+rms)*100,color='Black'
                             
                        endif 
                                                       
                    endif 
                
                endelse 
                    
            END
            
            
             
            'PSI_EM': begin ;will be copying code from qsed and hopefully it will work. NB: THIS IS FALSE . YOU DO NOT NEED A LOGARITHMIC AXIS
                
         
                ;SETTING THE PLOT RANGE
                xr = !dustem_plot_range.psi_em.xr
                yr = !dustem_plot_range.psi_em.yr
                
                idx_filt=where((*(*!dustem_data).psi_em).filt_names NE 'SPECTRUM',ct_filt)
                idx_spec=where((*(*!dustem_data).psi_em).filt_names EQ 'SPECTRUM',ct_spec)
                            
                if keyword_set(refresh) then begin ;The data points in the plot are being refreshed
                    
                    ;making sure we're placed in the considered plot.
                    cgplot,vectw,vectx,/nodata,/xlog,xs=5,ys=5,pos=position[0],noerase=1,charsize=1.15,xtickformat='(A1)',ytickformat='(A1)',color='Powder Blue',xr=xr,xtit='',yr=yr,psym=8,syms=0.8
                    
                    ;Plotting of the spectra of the dust species
                    FOR i=0L,Ngrains-1 DO BEGIN
                        testneq = where(st.polsed.(i+1) ne 0,countneq)
                        if countneq ne 0 then begin
                            vecfin = st.polsed.(i+1)*0.0
                        
                            vecfin[testneq] = ((st.polsed.(i+1))[testneq])/(st.sed.(i+1))[testneq];extra_spec[testneq];(st.sed.em_tot)[testneq];spec[testneq] ;removed multiplication by 'fact'. 
                            
                            ;*****NB: These two lines will have to be modified if the polarization angle varies with the dust species and/or with wavelength
                            polar_ippsi2iqu,st.sed.(i+1)*fact,specqgrain,specugrain,vecfin,replicate(!dustem_psi,n_elements(vecfin)) ;temporary solution
                            
                            ;You can replace the -0 values by 0 in order to avoid atan giving wrong values 
                            testnzero = where(specqgrain EQ -0., ct_nzero)
                            if ct_nzero ne 0 then specqgrain[testnzero] = 0
                            
                            cgoplot,st.polsed.wav,0.5*atan(specugrain, specqgrain)/!dtor,pos=position[0],noerase=1,color=use_cols[i],xr=xr,/xlog,ytickformat='(A1)',yr=yr
                            ;cgoplot,st.polsed.wav,replicate(!dustem_psi,n_elements(vecfin)),pos=position,noerase=1,color=use_cols[i],xr=xr,/xlog,ytickformat='(A1)',yr=[-90.00,90.00]
                            
                        endif 
                    ENDFOR
                                                                    
                    ;Plotting of the plugins.
                    for i=0L,n_plgns-1 do begin
                        
                        if isa((*!dustem_plugin).(0).spec) then begin
                            IF total(strsplit((*(*!dustem_plugin).(i).scope),'+',/extract) EQ 'ADD_POLSED') THEN begin
                                ;dustem_plot_mlog,st.polsed.wav,(*(*!dustem_plugin).(i))[*,1],ppositions=position, /overplot, noerase=1, color=clrs_plgns[i], linestyle=2,xr=xr,/xlog
                                cgoplot,st.polsed.wav,0.5*atan((*(*!dustem_plugin).(i).spec)[*,2],(*(*!dustem_plugin).(i).spec)[*,1])/!dtor,pos=position[0],noerase=1, color=clrs_plgns[i], linestyle=2 ,xr=xr,/xlog,ytickformat='(A1)',yr=yr   
                            ENDIF
                        ENDIF
                    endfor
                    
                     ;PLotting of the interpolates corresponding to spectrum and filter points
                    
                     IF ct_spec NE 0 THEN BEGIN
                     
                         xx=((*(*!dustem_data).psi_em).wav)[idx_spec]
                         yy=dustem_interp[idx_spec]
                         cgoplot,xx,yy,color='Indian Red',pos=position[0],psym=7,syms=2,noerase=1   
                     ENDIF
                     
                     
                     IF ct_filt NE 0 THEN BEGIN
                         xx=((*(*!dustem_data).psi_em).wav)[idx_filt]
                         yy=dustem_interp[idx_filt]
                         cgoplot,xx,yy,color='red',pos=position[0],psym=6,syms=2,noerase=1
                     ENDIF
                     
                     
                     ;Plotting of the total dust emission spectrum
                     ;cgoplot,st.sed.wav,0.5*atan(specu,specq)/!dtor,pos=position,noerase=1,/xlog,/ys,/xs
                     cgoplot,st.sed.wav,dustem_spec,pos=position[0],noerase=1,/xlog,/ys,/xs               
                            
                endif else begin ;The data points in the plot that remain unchanged.
                     
                    
                    ;Spectrum points are treated before for plotting reasons. 
                    if ct_spec ne 0 then begin 
                        
                        ;Plotting of spectrum data points (to be fitted)
                        cgplot,((*(*!dustem_data).psi_em).wav)(idx_spec),((*(*!dustem_data).psi_em).values)(idx_spec),/xlog,/ys,xs=1,pos=position[0],noerase=1,xtit=' ',charsize=1.15,xtickformat='(A1)',color='Powder Blue',xr=xr,yr=yr,psym=16,syms=0.8;,ytickformat='dstmwrp_exp'                
                        
                        ;Plotting of the spectrum error points
                        rms=2.*((*(*!dustem_data).psi_em).sigma)(idx_spec)/2.
                        cgerrplot,((*(*!dustem_data).psi_em).wav)(idx_spec),((*(*!dustem_data).psi_em).values)(idx_spec)-rms,((*(*!dustem_data).psi_em).values)(idx_spec)+rms,color='Powder Blue'

                    endif
                    
                    if ct_filt ne 0 then begin
                    
                        ;Plotting of filter data points (to be fitted) + testing for prior plotting                         
                        if ct_spec ne 0 then cgoplot,((*(*!dustem_data).psi_em).wav)(idx_filt),((*(*!dustem_data).psi_em).values)(idx_filt),charsize=1.15,color='Dodger Blue',psym=16,syms=0.8,pos=position[0],/ys,xs=1,noerase=1,xtickformat='(A1)',xr=xr,yr=yr,/xlog else $;,ytickformat='dstmwrp_exp'
                            cgplot,((*(*!dustem_data).psi_em).wav)(idx_filt),((*(*!dustem_data).psi_em).values)(idx_filt),charsize=1.15,color='Dodger Blue',psym=16,syms=0.8,pos=position[0],/ys,xs=1,noerase=1,xtickformat='(A1)',xtit=' ',xr=xr,yr=yr,/xlog;,ytickformat='dstmwrp_exp'
                        
                        
                        ;Plotting of the filter error points
                        rms=2.*((*(*!dustem_data).psi_em).sigma)(idx_filt)/2.;/dustem_psi_em(idx_filt)
                        cgerrplot,((*(*!dustem_data).psi_em).wav)(idx_filt),((*(*!dustem_data).psi_em).values)(idx_filt)-rms,((*(*!dustem_data).psi_em).values)(idx_filt)+rms,color='Dodger Blue'
                        
                    endif
                    
                    xyouts,pospltxt[0],pospltxt[1],textoidl('\Psi (deg)'),color=0,/normal,charsize=1.3;,charthick=2.0
                     
                    ;Locating all the hidden data points (spectrum+filter)
                    
                    ;The filtering has been done prior (in the primary routine)
                    match2,((*(*!dustem_data).psi_em).wav),((*(*!dustem_show).psi_em).wav),show_psi_empts,fit_psi_empts ;only show_psi_empts is needed
                    idx_rmv_psi_em=where(fit_psi_empts eq -1, ct_hdnpts) ; indices of the points to hide
                    ;stop
                    ;Locating the hidden spectrum and filter data points                                        
                    idx_filt_hdn = where(((*(*!dustem_show).psi_em).filt_names)(idx_rmv_psi_em) NE 'SPECTRUM',ct_filt_hdn)
                    idx_spec_hdn = where(((*(*!dustem_show).psi_em).filt_names)(idx_rmv_psi_em) EQ 'SPECTRUM',ct_spec_hdn)
                    if ct_hdnpts ne 0 then begin ;Hidden data points are present 
                        ;stop
                        
                        if ct_spec_hdn ne 0 then begin
                            ;Plotting of hidden spectrum data points
                            cgplot,(((*(*!dustem_show).psi_em).wav)[idx_rmv_psi_em])(idx_spec_hdn),(((*(*!dustem_show).psi_em).values)[idx_rmv_psi_em])(idx_spec_hdn),pos=position[0],/xlog,/ys,xs=1,noerase=1,charsize=1.15,xtickformat='(A1)',color='Black',xr=xr,yr=yr,psym=8,syms=0.8
                            
                            ;Plotting of hidden spectrum error points
                            rms=2.*(((*(*!dustem_show).psi_em).sigma)[idx_rmv_psi_em])(idx_spec_hdn)/2.
                            cgerrplot,(((*(*!dustem_show).psi_em).wav)[idx_rmv_psi_em])(idx_spec_hdn),(((*(*!dustem_show).psi_em).values)[idx_rmv_psi_em])(idx_spec_hdn)-rms,(((*(*!dustem_show).psi_em).values)[idx_rmv_psi_em])(idx_spec_hdn)+rms,color='Black'
                        endif                                           
                        
                        if ct_filt_hdn ne 0 then begin
                            ;stop
                            plotsym,0, /fill
                            ;Plotting of hidden filter data points 
                            cgplot,(((*(*!dustem_show).psi_em).wav)[idx_rmv_psi_em])(idx_filt_hdn),(((*(*!dustem_show).psi_em).values)[idx_rmv_psi_em])(idx_filt_hdn),pos=position[0],/xlog,/ys,xs=1,noerase=1,charsize=1.15,xtickformat='(A1)',color='Black',xr=xr,yr=yr,psym=8,syms=0.8                                           
                            ;stop
                            ;Plotting of hidden filter error point
                            rms=2.*(((*(*!dustem_show).psi_em).sigma)[idx_rmv_psi_em])(idx_filt_hdn)/2.
                            cgerrplot,(((*(*!dustem_show).psi_em).wav)[idx_rmv_psi_em])(idx_filt_hdn),(((*(*!dustem_show).psi_em).values)[idx_rmv_psi_em])(idx_filt_hdn)-rms,(((*(*!dustem_show).psi_em).values)[idx_rmv_psi_em])(idx_filt_hdn)+rms,color='Black'
                             
                        endif 
                                                       
                    endif 
                
                endelse 
                   
            end
            
            ;DONE BUT NOT TESTED.
            
            'PSI_EXT': begin ;MODIFYING THIS NOW - You should write a plugin for the modification of polarized extinction so that !dustem_psi_ext is different than !dustem_psi. 
                
                ;SETTING THE PLOT RANGE
                xr = !dustem_plot_range.psi_ext.xr
                yr = !dustem_plot_range.psi_ext.yr
                
            
                idx_filt=where((*(*!dustem_data).psi_ext).filt_names NE 'SPECTRUM',ct_filt)
                idx_spec=where((*(*!dustem_data).psi_ext).filt_names EQ 'SPECTRUM',ct_spec)
                
                            
                if keyword_set(refresh) then begin ;The data points in the plot are being refreshed
                    
                    cgplot,1/vectw,vectx,/nodata,/xlog,/ys,xs=1,pos=position[0],noerase=1,charsize=1.15,xtickformat='(A1)',ytickformat='(A1)',color='Powder Blue',xr=xr,xtit='',yr=yr,psym=8,syms=0.8
                    
                    ;##################TAKEN FROM SED
                    
                    ;Plotting of the spectra of the dust species
                    
                    FOR i=0L,Ngrains-1 DO BEGIN
                        
                        vecto = transpose((st.polext.(1))[i,*]+(st.polext.(2))[i,*])
                        vecte = transpose(((st.ext.(1))[i,*]+(st.ext.(2))[i,*]))
                        testneq = where(vecto ne 0,countneq)
                        
                        ;testing whether the polext values contain negative ones
                        testpos = where(vecto LT 0, countpos)
                        IF countpos NE 0 THEN vecto[testpos] = 0
                          
                        if countneq ne 0 then begin
                            
                            vecfin = vecto*0.0
                            
                            vecfin[testneq] = (vecto[testneq])/vecte[testneq];extra_spec[testneq];(st.sed.em_tot)[testneq];spec[testneq] ;removed multiplication by 'fact'. 
                            
                            polar_ippsi2iqu,vecte*(*!dustem_HCD)/1.0e21,specqgrain,specugrain,vecfin,replicate(!dustem_psi_ext,n_elements(vecfin)) ;temporary solution
                             
                            cgoplot,1/st.polext.wav,0.5*atan(specugrain,specqgrain)/!dtor,pos=position[0],noerase=1,color=use_cols[i],xr=xr,/xlog,ytickformat='(A1)',yr=yr
                        endif 
                    ENDFOR
                                                                          
                    ;Plotting of the plugins.
                    for i=0L,n_plgns-1 do begin
                        
                        if isa((*!dustem_plugin).(0).spec) then begin
                            IF total(strsplit((*(*!dustem_plugin).(i).scope),'+',/extract) EQ 'ADD_POLEXT') THEN begin
                                ;dustem_plot_mlog,st.polsed.wav,(*(*!dustem_plugin).(i))[*,1],ppositions=position, /overplot, noerase=1, color=clrs_plgns[i], linestyle=2,xr=xr,/xlog
                                cgoplot_mlog,1/st.polext.wav,0.5*atan((*(*!dustem_plugin).(i).spec)[*,2],(*(*!dustem_plugin).(i).spec)[*,1])/!dtor,pos=position[0],noerase=1, color=clrs_plgns[i], linestyle=2 ,xr=xr,/xlog,ytickformat='(A1)',yr=yr   
                            ENDIF
                        ENDIF
                    endfor
                    
                     ;PLotting of the interpolates corresponding to spectrum and filter points
                    
                     IF ct_spec NE 0 THEN BEGIN
                     
                         xx=((*(*!dustem_data).psi_ext).wav)[idx_spec]
                         yy=dustem_interp[idx_spec]
                         cgoplot,1/xx,yy,color='Indian Red',pos=position[0],psym=7,syms=2,noerase=1   
                     ENDIF
                     
                     
                     IF ct_filt NE 0 THEN BEGIN
                         xx=((*(*!dustem_data).psi_ext).wav)[idx_filt]
                         yy=dustem_interp[idx_filt]
                         cgoplot,1/xx,yy,color='red',pos=position[0],psym=6,syms=2,noerase=1
                     ENDIF
                     
                     ;Plotting of the total dust emission spectrum
                     ;cgoplot,st.sed.wav,0.5*atan(specu,specq)/!dtor,pos=position,noerase=1,/xlog,/ys,/xs
                     cgoplot,1/st.ext.wav,dustem_spec,pos=position[0],noerase=1,/xlog,/ys,/xs               
                            
                endif else begin ;The data points in the plot that remain unchanged.
                    
                    ;Spectrum points are treated before for plotting reasons. 
                    if ct_spec ne 0 then begin 
                        
                        ;Plotting of spectrum data points (to be fitted)
                        cgplot,1/((*(*!dustem_data).psi_ext).wav)(idx_spec),((*(*!dustem_data).psi_ext).values)(idx_spec),/xlog,/ys,xs=1,pos=position[0],noerase=1,xtit=' ',charsize=1.15,xtickformat='(A1)',color='Powder Blue',xr=xr,yr=yr,psym=16,syms=0.8;,ytickformat='dstmwrp_exp'                
                        
                        ;Plotting of the spectrum error points
                        rms=2.*((*(*!dustem_data).psi_ext).sigma)(idx_spec)/2.
                        cgerrplot,1/((*(*!dustem_data).psi_ext).wav)(idx_spec),((*(*!dustem_data).psi_ext).values)(idx_spec)-rms,((*(*!dustem_data).psi_ext).values)(idx_spec)+rms,color='Powder Blue'

                    endif
                    
                    if ct_filt ne 0 then begin
                    
                        ;Plotting of filter data points (to be fitted) + testing for prior plotting                         
                        if ct_spec ne 0 then cgoplot,1/((*(*!dustem_data).psi_ext).wav)(idx_filt),((*(*!dustem_data).psi_ext).values)(idx_filt),charsize=1.15,color='Dodger Blue',psym=16,syms=0.8,pos=position[0],/ys,xs=1,noerase=1,xtickformat='(A1)',xr=xr,yr=yr,/xlog else $;,ytickformat='dstmwrp_exp'
                            cgplot,1/((*(*!dustem_data).psi_ext).wav)(idx_filt),((*(*!dustem_data).psi_ext).values)(idx_filt),charsize=1.15,color='Dodger Blue',psym=16,syms=0.8,pos=position[0],/ys,xs=1,noerase=1,xtickformat='(A1)',xtit=' ',xr=xr,yr=yr,/xlog;,ytickformat='dstmwrp_exp'
                        
                        
                        ;Plotting of the filter error points
                        rms=2.*((*(*!dustem_data).psi_ext).sigma)(idx_filt)/2.;/dustem_psi_em(idx_filt)
                        cgerrplot,1/((*(*!dustem_data).psi_ext).wav)(idx_filt),((*(*!dustem_data).psi_ext).values)(idx_filt)-rms,((*(*!dustem_data).psi_ext).values)(idx_filt)+rms,color='Dodger Blue'
                        
                    endif
                    
                    xyouts,pospltxt[0],pospltxt[1],textoidl('\Psi_{EXT} (deg)'),color=0,/normal,charsize=1.3;,charthick=2.0
                     
                    ;Locating all the hidden data points (spectrum+filter)
                    
                    ;The filtering has been done prior (in the primary routine)
                    match2,((*(*!dustem_data).psi_ext).wav),((*(*!dustem_show).psi_ext).wav),show_psi_empts,fit_psi_empts ;only show_psi_empts is needed
                    idx_rmv_psi_em=where(fit_psi_empts eq -1, ct_hdnpts) ; indices of the points to hide
                    ;stop
                    ;Locating the hidden spectrum and filter data points                                        
                    idx_filt_hdn = where(((*(*!dustem_show).psi_ext).filt_names)(idx_rmv_psi_em) NE 'SPECTRUM',ct_filt_hdn) ;keeping psi_em notation for counters...
                    idx_spec_hdn = where(((*(*!dustem_show).psi_ext).filt_names)(idx_rmv_psi_em) EQ 'SPECTRUM',ct_spec_hdn)
                    if ct_hdnpts ne 0 then begin ;Hidden data points are present 
                        ;stop
                        
                        if ct_spec_hdn ne 0 then begin
                            ;Plotting of hidden spectrum data points
                            cgplot,1/(((*(*!dustem_show).psi_ext).wav)[idx_rmv_psi_em])(idx_spec_hdn),(((*(*!dustem_show).psi_ext).values)[idx_rmv_psi_em])(idx_spec_hdn),pos=position[0],/xlog,/ys,xs=1,noerase=1,charsize=1.15,xtickformat='(A1)',color='Black',xr=xr,yr=yr,psym=8,syms=0.8
                            
                            ;Plotting of hidden spectrum error points
                            rms=2.*(((*(*!dustem_show).psi_ext).sigma)[idx_rmv_psi_em])(idx_spec_hdn)/2.
                            cgerrplot,1/(((*(*!dustem_show).psi_ext).wav)[idx_rmv_psi_em])(idx_spec_hdn),(((*(*!dustem_show).psi_ext).values)[idx_rmv_psi_em])(idx_spec_hdn)-rms,(((*(*!dustem_show).psi_ext).values)[idx_rmv_psi_em])(idx_spec_hdn)+rms,color='Black'
                        endif                                           
                        
                        if ct_filt_hdn ne 0 then begin
                            ;stop
                            plotsym,0, /fill
                            ;Plotting of hidden filter data points 
                            cgplot,1/(((*(*!dustem_show).psi_ext).wav)[idx_rmv_psi_em])(idx_filt_hdn),(((*(*!dustem_show).psi_ext).values)[idx_rmv_psi_em])(idx_filt_hdn),pos=position[0],/xlog,/ys,xs=1,noerase=1,charsize=1.15,xtickformat='(A1)',color='Black',xr=xr,yr=yr,psym=8,syms=0.8                                           
                            ;stop
                            ;Plotting of hidden filter error point
                            rms=2.*(((*(*!dustem_show).psi_ext).sigma)[idx_rmv_psi_em])(idx_filt_hdn)/2.
                            cgerrplot,1/(((*(*!dustem_show).psi_ext).wav)[idx_rmv_psi_em])(idx_filt_hdn),(((*(*!dustem_show).psi_ext).values)[idx_rmv_psi_em])(idx_filt_hdn)-rms,(((*(*!dustem_show).psi_ext).values)[idx_rmv_psi_em])(idx_filt_hdn)+rms,color='Black'
                             
                        endif 
                                                       
                    endif 
                    
                endelse 
                    
            
            end
            
            
            ;DONE BUT NOT TESTED.
            'QSED': begin ; THE ONE I WILL BE WORKING ON
                
                ;SETTING THE PLOT RANGE
                xr = !dustem_plot_range.qsed.xr
                yr = !dustem_plot_range.qsed.yr
                
                
                varvar=where((*(*!dustem_data).qsed).values GT 0, testpstv)
                varvar=where((*(*!dustem_data).qsed).values LT 0, testngtv)
                
                idx_filt=where((*(*!dustem_data).qsed).filt_names NE 'SPECTRUM', ct_filt)
                idx_spec=where((*(*!dustem_data).qsed).filt_names EQ 'SPECTRUM' , ct_spec)
               
                ;Locating all the hidden data points (spectrum+filter)
                match2,((*(*!dustem_data).qsed).wav),((*(*!dustem_show).qsed).wav),show_sedpts,fit_sedpts ;only show_sedpts is needed
                idx_rmv_sed=where(fit_sedpts eq -1, ct_hdnpts) ; indices of the points to hide
            
                
                
                If n_elements(position) GT 1 THEN BEGIN
                
                        
                    ;Plotting of the refreshed data in the normalized plot
                    
                    if keyword_set(refresh) then begin ;The data points in the plot that are being refreshed 
                        
                       ;Making sure we're placed in the normalized plot
                       cgplot,vectw,vectx,/nodata,/xlog,ys=5,xs=5,pos=position[1],noerase=1,charsize=1.15,xtickformat='(A1)',ytickformat='(A1)',ymin=0,color='Powder Blue',xr=xr,xtit='',yr=[0.0,2.0],psym=8,syms=0.8
                      
                        IF ct_spec NE 0 THEN BEGIN
                            xx=((*(*!dustem_data).qsed).wav)[idx_spec]
                            yy=dustem_interp[idx_spec]
                            rms=2.*((*(*!dustem_data).qsed).sigma)(idx_spec)/2.
                            indzero = where(yy NE 0, ct_zero)
                            IF ct_zero NE 0 THEN BEGIN
                                cgoplot,xx[indzero],(((*(*!dustem_data).qsed).values)(idx_spec))[indzero]/yy[indzero],pos=position[1],psym=16,color='Powder Blue',syms=0.8,noerase=1 
                                cgerrplot,(((*(*!dustem_data).qsed).wav)(idx_spec))[indzero],((((*(*!dustem_data).qsed).values)[idx_spec])[indzero]-rms[indzero])/yy[indzero],((((*(*!dustem_data).qsed).values)[idx_spec])[indzero]+rms[indzero])/yy[indzero],color='Powder Blue'
                            ENDIF 
                        ENDIF
                        
                        IF ct_filt NE 0 THEN BEGIN
                            
                            xx=((*(*!dustem_data).qsed).wav)[idx_filt]
                            yy=dustem_interp[idx_filt]
                            rms=2.*((*(*!dustem_data).qsed).sigma)(idx_filt)/2.
                            indzero = where(yy NE 0, ct_zero)
                            IF ct_zero NE 0 THEN BEGIN
                                cgoplot,xx[indzero],(((*(*!dustem_data).qsed).values)(idx_filt))[indzero]/yy[indzero],pos=position[1],psym=16,color='Dodger Blue',syms=0.8,noerase=1 
                                cgerrplot,(((*(*!dustem_data).qsed).wav)(idx_filt))[indzero],((((*(*!dustem_data).qsed).values)[idx_filt])[indzero]-rms[indzero])/yy[indzero],((((*(*!dustem_data).qsed).values)[idx_filt])[indzero]+rms[indzero])/yy[indzero],color='Dodger Blue' 
                            ENDIF
                        ENDIF
      
                    ;Plotting of the frozen data points in the normalized plot    
                    endif else begin ;The data points in the plot that remain unchanged
                     
                        xtit=textoidl('\lambda (\mum)')
                        cgplot,vectw,vectx,/xlog,/ys,xs=1,pos=position[1],noerase=1,color='Black',xr=xr,xtit=xtit,yr=[0.0,2.0],yticks=2,ymino=2,xticklen=0.1,ytickformat='(F6.2)',charsize=1.0
                        xyouts,pospltxt_n[0],pospltxt_n[1],textoidl('norm'),color=0,/normal,charsize=1.1
                    
                    endelse
                ENDIF
                ;stop          
                ;refreshing of the data of the normal plot          
                if keyword_set(refresh) then begin ;The data points in the plot are being refreshed
                    
                    if positive_only EQ 1 then begin
                        
                        testsup=where(dustem_spec GT 0., countmodelsup)
                        if testpstv ne 0 or countmodelsup ne 0 then begin
                            
                            ;making sure that we're placed in the positive_only normal plot
                            dustem_plot_mlog,vectw,vectx,xs=5,ys=5,ppositions=position[0],/positive_only, noerase=1, color='Indian Red',psym=7,syms=2,xr=xr,/xlog,/ylog,yticks=0,xticks=0,xticklen=0.0,yticklen=0.0,/nodata,xtickformat='(A1)',xtit='',ytickformat='(A1)',yr=yr 
                            
                            FOR i=0L,Ngrains-1 DO BEGIN
                                
                                testneq = where(st.polsed.(i+1) ne 0,countneq)
                                ;stop
                                if countneq ne 0 then begin 
                                    vecfin = st.polsed.(i+1)*0.0 ;em_tot can be used here right? 
                                    ;stop
                                    vecfin[testneq] = ((st.polsed.(i+1))[testneq])/((st.sed.(i+1))[testneq]);extra_spec[testneq];(st.sed.em_tot)[testneq];(st.sed.(i+1))[testneq];*fact;(st.sed.(i+1))[testneq]
                                    
                                    polar_ippsi2iqu,st.sed.(i+1)*fact,specqgrain,specugrain,vecfin,replicate(!dustem_psi,n_elements(vecfin)) ;temporary solution
                                                                        
                                    dustem_plot_mlog,st.polsed.wav,specqgrain,ppositions=position[0],/positive_only,/overplot,noerase=1,color=use_cols[i],xr=xr,/xlog,/ylog,ytickformat='(A1)',yr=yr
                                    
                                endif
                                
                            ENDFOR
                            
                            for i=0L,n_plgns-1 do begin
                                
                                IF isa((*!dustem_plugin).(0).spec) THEN BEGIN
                                    IF total(strsplit((*(*!dustem_plugin).(i).scope),'+',/extract) EQ 'ADD_POLSED') THEN begin
                                     
                                        ;dustem_plot_mlog,st.polsed.wav,(*(*!dustem_plugin).(i))[*,1],ppositions=position, /overplot, noerase=1, color=clrs_plgns[i], linestyle=2,xr=xr,/xlog
                                        dustem_plot_mlog,st.polsed.wav,(*(*!dustem_plugin).(i).spec)[*,1],ppositions=position[0],/positive_only,/overplot,noerase=1, color=clrs_plgns[i], linestyle=2 ,xr=xr,/xlog,/ylog,ytickformat='(A1)',yr=yr      
                                    ENDIF
                                ENDIF
                            endfor
                            
                            IF ct_spec NE 0 THEN BEGIN
                                xx=((*(*!dustem_data).qsed).wav)[idx_spec]
                                yy=dustem_interp[idx_spec]
                                
                                dustem_plot_mlog,xx,yy,ppositions=position[0],/positive_only, /overplot, noerase=1, color='Indian Red',psym=7,syms=2,xr=xr,/xlog,/ylog,ytickformat='(A1)',yr=yr 
                            ENDIF
                            
                            IF ct_filt NE 0 THEN BEGIN
                                xx=((*(*!dustem_data).qsed).wav)[idx_filt]
                                yy=dustem_interp[idx_filt]
                                
                                dustem_plot_mlog,xx,yy,ppositions=position[0],/positive_only, /overplot, noerase=1, color='red',psym=6,syms=2,xr=xr,/xlog,/ylog,ytickformat='(A1)',yr=yr
                            ENDIF
                            
                            dustem_plot_mlog,st.polsed.wav,dustem_spec,ppositions=position[0],/positive_only,/overplot,noerase=1,xr=xr,/xlog,/ylog,ytickformat='(A1)',yr=yr                                    
                        
                        endif
                                
                    
                    endif
                    

                    if negative_only EQ 1 then begin
                                                         
                        testlow=where(dustem_spec LT 0., countmodellow)   
                        if testngtv ne 0 or countmodellow ne 0 then begin
                            
                            dustem_plot_mlog,vectw,-vectx,ppositions=position[0],xs=5,ys=5,/negative_only, noerase=1, color='Indian Red',psym=7,syms=2,xr=xr,/xlog,/ylog,/nodata,xtickformat='(A1)',xtit='',ytickformat='(A1)',yr=yr
                            
                            ;Plotting of the spectra of the dust species
                            FOR i=0L,Ngrains-1 DO BEGIN
                                
                                testneq = where(st.polsed.(i+1) ne 0,countneq)
                                ;stop
                                if countneq ne 0 then begin 
                                    vecfin = st.polsed.(i+1)*0.0 ;em_tot can be used here right? 
                                    ;stop
                                    vecfin[testneq] = ((st.polsed.(i+1))[testneq])/((st.sed.(i+1))[testneq]);extra_spec[testneq];(st.sed.em_tot)[testneq];(st.sed.(i+1))[testneq];*fact;(st.sed.(i+1))[testneq] 
                                    ;stop    
                                    polar_ippsi2iqu,st.sed.(i+1)*fact,specqgrain,specugrain,vecfin,replicate(!dustem_psi,n_elements(vecfin)) ;temporary solution
                                    ;stop
                                    ;dustem_plot_mlog,st.polsed.wav,specqgrain,ppositions=position,/overplot,noerase=1,color=use_cols[i],xr=xr,/xlog 
                                    dustem_plot_mlog,st.polsed.wav,specqgrain,ppositions=position[0],/negative_only,/overplot,noerase=1,color=use_cols[i],xr=xr,/xlog,/ylog,ytickformat='(A1)',yr=yr
                                    
                                endif 
                            ENDFOR
                            
                            ;Plotting of the plugins
                            for i=0L,n_plgns-1 do begin
                                IF isa((*!dustem_plugin).(0).spec) THEN BEGIN
                                
                                    IF total(strsplit((*(*!dustem_plugin).(i).scope),'+',/extract) EQ 'ADD_POLSED') THEN begin
 
                                        ;dustem_plot_mlog,st.polsed.wav,(*(*!dustem_plugin).(i))[*,1],ppositions=position, /overplot, noerase=1, color=clrs_plgns[i], linestyle=2,xr=xr,/xlog
                                        dustem_plot_mlog,st.polsed.wav,(*(*!dustem_plugin).(i).spec)[*,1],ppositions=position[0],/negative_only,/overplot,noerase=1, color=clrs_plgns[i], linestyle=2 ,xr=xr,/xlog,/ylog,ytickformat='(A1)',yr=yr      
                                    ENDIF
                                    
                                ENDIF
                            endfor
                            ;PLotting of the interpolates corresponding to spectrum and filter points
                            IF ct_spec NE 0 THEN BEGIN
                                xx=((*(*!dustem_data).qsed).wav)[idx_spec]
                                yy=dustem_interp[idx_spec]
                                
                                dustem_plot_mlog,xx,yy,ppositions=position[0],/negative_only, /overplot, noerase=1, color='Indian Red',psym=7,syms=2,xr=xr,/xlog,/ylog,ytickformat='(A1)',yr=yr 
                            ENDIF
                            
                            IF ct_filt NE 0 THEN BEGIN
                                xx=((*(*!dustem_data).qsed).wav)[idx_filt]
                                yy=dustem_interp[idx_filt]
                                dustem_plot_mlog,xx,yy,ppositions=position[0],/negative_only, /overplot, noerase=1, color='red',psym=6,syms=2,xr=xr,/xlog,/ylog,ytickformat='(A1)',yr=yr
                            ENDIF
                            ;Plotting of the total dust emission spectrum
                            dustem_plot_mlog,st.polsed.wav,dustem_spec,ppositions=position[0],/negative_only,/overplot,noerase=1,xr=xr,/xlog,/ylog,ytickformat='(A1)',yr=yr                                    
                        
                        endif
                                
                    
                    endif
                                               
                ;Plotting of the froeen data in the normal plot           
                endif else begin ;The data points in the plot that remain unchanged.; DO NOT USE AN ELSE HERE. 
                 
                    xyouts,pospltxt[0],pospltxt[1],textoidl('Q_{\nu} (MJy/sr)'),color=0,/normal,charsize=1.3;,charthick=2.0  
                    ;if ct_hdnpts ne 0 then begin ;Hidden data points are present 
                        
                    ;Locating the hidden spectrum and filter data points     
                   
                    if ct_hdnpts NE 0 then begin
                        idx_filt_hdn_pstv = where(((*(*!dustem_show).qsed).filt_names)(idx_rmv_sed) NE 'SPECTRUM' and ((*(*!dustem_show).qsed).values)(idx_rmv_sed) gt 0,ct_filt_hdn_pstv)
                        idx_spec_hdn_pstv = where(((*(*!dustem_show).qsed).filt_names)(idx_rmv_sed) EQ 'SPECTRUM' and ((*(*!dustem_show).qsed).values)(idx_rmv_sed) gt 0,ct_spec_hdn_pstv)
                        idx_filt_hdn_ngtv = where(((*(*!dustem_show).qsed).filt_names)(idx_rmv_sed) NE 'SPECTRUM' and ((*(*!dustem_show).qsed).values)(idx_rmv_sed) lt 0,ct_filt_hdn_ngtv)
                        idx_spec_hdn_ngtv = where(((*(*!dustem_show).qsed).filt_names)(idx_rmv_sed) EQ 'SPECTRUM' and ((*(*!dustem_show).qsed).values)(idx_rmv_sed) lt 0,ct_spec_hdn_ngtv)
                    endif
                    
                    if positive_only EQ 1 then begin
                        
                        if testpstv ne 0 then begin
                        
                            plotsym, 0
                            
                            if ct_spec ne 0 then begin
                            
                                rms=2.*((*(*!dustem_data).qsed).sigma)(idx_spec)/2.
                                
                                dustem_plot_mlog,((*(*!dustem_data).qsed).wav)(idx_spec),((*(*!dustem_data).qsed).values)(idx_spec),ppositions=position[0],charsize=1.15,color='Dodger Blue',psym=16,syms=0.8,xs=1,xr=xr,noerase=1,/positive_only,xtickformat='(A1)',xtit='',/xlog,/ylog,yr=yr;,ytickformat='(A1)'
                                dustem_plot_mlog,((*(*!dustem_data).qsed).wav)(idx_spec),((*(*!dustem_data).qsed).values)(idx_spec),ppositions=position[0],color='Dodger Blue',/positive_only,noerase=1,/overplot,rms=rms,xtit='',charsize=1.15,xtickformat='(A1)',xs=1,psym=16,syms=0.8,xr=xr,/xlog,/ylog,yr=yr,ytickformat='(A1)'     
                             
                            endif
                            
                            if ct_filt ne 0 then begin
                                
                                rms=2.*((*(*!dustem_data).qsed).sigma)(idx_filt)/2.
                               
                               
                                if ct_spec ne 0 then dustem_plot_mlog,((*(*!dustem_data).qsed).wav)(idx_filt),((*(*!dustem_data).qsed).values)(idx_filt),ppositions=position[0],charsize=1.15,color='Dodger Blue',psym=16,syms=0.8,xs=1,xr=xr,noerase=1,/positive_only,xtickformat='(A1)',xtit='',/xlog,/ylog,yr=yr,/overplot,ytickformat='(A1)';,ytickformat='(A1)'
                                if ct_spec eq 0 then dustem_plot_mlog,((*(*!dustem_data).qsed).wav)(idx_filt),((*(*!dustem_data).qsed).values)(idx_filt),ppositions=position[0],charsize=1.15,color='Dodger Blue',psym=16,syms=0.8,xs=1,xr=xr,noerase=1,/positive_only,xtickformat='(A1)',xtit='',/xlog,/ylog,yr=yr;,ytickformat='(A1)'
                                dustem_plot_mlog,((*(*!dustem_data).qsed).wav)(idx_filt),((*(*!dustem_data).qsed).values)(idx_filt),ppositions=position[0],color='Dodger Blue',/positive_only,noerase=1,/overplot,rms=rms,xtit='',charsize=1.15,xtickformat='(A1)',xs=1,psym=16,syms=0.8,xr=xr,/xlog,/ylog,yr=yr,ytickformat='(A1)'
                                    
                            endif
                            
                            
                            if ct_hdnpts NE 0 then begin
                            
                                if ct_spec_hdn_pstv ne 0 then begin
                                    xx = (((*(*!dustem_show).qsed).wav)[idx_rmv_sed])(idx_spec_hdn_pstv)
                                    yy = (((*(*!dustem_show).qsed).values)[idx_rmv_sed])(idx_spec_hdn_pstv)
                                    rms=2.*(((*(*!dustem_show).qsed).sigma)[idx_rmv_sed])(idx_spec_hdn_pstv)/2.
                                    
                                    dustem_plot_mlog,xx,yy,ppositions=position[0],/positive_only,xs=1,noerase=1,charsize=1.15,xtickformat='(A1)',/overplot,xr=xr,color='Black',psym=16,syms=0.8,/xlog,/ylog,yr=yr,ytickformat='(A1)'  
                                    dustem_plot_mlog,xx,yy,ppositions=position[0],/positive_only,noerase=1,color='Black',/overplot,rms=rms,yr=yr,xtickformat='(A1)',xr=xr,xs=1,/xlog,/ylog,ytickformat='(A1)'  
                                
                                endif 
                                
                                if ct_filt_hdn_pstv ne 0 then begin
                                
                                    xx = (((*(*!dustem_show).qsed).wav)[idx_rmv_sed])(idx_filt_hdn_pstv)
                                    yy = (((*(*!dustem_show).qsed).values)[idx_rmv_sed])(idx_filt_hdn_pstv)
                                    rms=2.*(((*(*!dustem_show).qsed).sigma)[idx_rmv_sed])(idx_filt_hdn_pstv)/2.
                                    
                                    dustem_plot_mlog,xx,yy,ppositions=position[0],/positive_only,xs=1,noerase=1,charsize=1.15,/overplot,xtickformat='(A1)',xr=xr,color='Black',psym=16,syms=0.8,/xlog,/ylog,yr=yr,ytickformat='(A1)'     
                                    dustem_plot_mlog,xx,yy,ppositions=position[0],/positive_only,xs=1,noerase=1,color='Black',/overplot,rms=rms,xr=xr,yr=yr,xtickformat='(A1)',/xlog,/ylog,ytickformat='(A1)'  
                                
                                endif
                                
                            endif
                            
                            
                        endif else begin
                            
                            
                        
                            if ct_spec ne 0 then dustem_plot_mlog,((*(*!dustem_data).qsed).wav)(idx_spec),-((*(*!dustem_data).qsed).values)(idx_spec),ppositions=position[0],charsize=1.15,/nodata,color='Dodger Blue',psym=16,syms=0.8,xs=1,xr=xr,noerase=1,/positive_only,xtickformat='(A1)',xtit='',/xlog,/ylog,yr=yr;,ytickformat='(A1)'
                                
                            
                            if ct_filt ne 0 and ct_spec eq 0 then  dustem_plot_mlog,((*(*!dustem_data).qsed).wav)(idx_filt),-((*(*!dustem_data).qsed).values)(idx_filt),/nodata,ppositions=position[0],charsize=1.15,color='Dodger Blue',psym=16,syms=0.8,xs=1,xr=xr,noerase=1,/positive_only,xtickformat='(A1)',xtit='',/xlog,/ylog,yr=yr;,ytickformat='(A1)'
                               
                            
                            if ct_hdnpts NE 0 then begin
                            
                                if ct_spec_hdn_pstv ne 0 then begin
                                    xx = (((*(*!dustem_show).qsed).wav)[idx_rmv_sed])(idx_spec_hdn_pstv)
                                    yy = (((*(*!dustem_show).qsed).values)[idx_rmv_sed])(idx_spec_hdn_pstv)
                                    rms=2.*(((*(*!dustem_show).qsed).sigma)[idx_rmv_sed])(idx_spec_hdn_pstv)/2.
                                    
                                    dustem_plot_mlog,xx,yy,ppositions=position[0],/positive_only,xs=1,noerase=1,charsize=1.15,xtickformat='(A1)',/overplot,xr=xr,color='Black',psym=16,syms=0.8,/xlog,/ylog,yr=yr,ytickformat='(A1)'  
                                    dustem_plot_mlog,xx,yy,ppositions=position[0],/positive_only,noerase=1,color='Black',/overplot,rms=rms,yr=yr,xtickformat='(A1)',xr=xr,xs=1,/xlog,/ylog,ytickformat='(A1)'  ;,psym=8,syms=0.8
                                
                                endif 
                                
                                if ct_filt_hdn_pstv ne 0 then begin
                                
                                    xx = (((*(*!dustem_show).qsed).wav)[idx_rmv_sed])(idx_filt_hdn_pstv)
                                    yy = (((*(*!dustem_show).qsed).values)[idx_rmv_sed])(idx_filt_hdn_pstv)
                                    rms=2.*(((*(*!dustem_show).qsed).sigma)[idx_rmv_sed])(idx_filt_hdn_pstv)/2.
                                    
                                    dustem_plot_mlog,xx,yy,ppositions=position[0],/positive_only,xs=1,noerase=1,charsize=1.15,/overplot,xtickformat='(A1)',xr=xr,color='Black',psym=16,syms=0.8,/xlog,/ylog,yr=yr,ytickformat='(A1)'     
                                    dustem_plot_mlog,xx,yy,ppositions=position[0],/positive_only,xs=1,noerase=1,color='Black',/overplot,rms=rms,xr=xr,yr=yr,xtickformat='(A1)',/xlog,/ylog,ytickformat='(A1)'  ;,psym=8,syms=0.8
                                
                                endif
                                
                            endif
                            
                        endelse                           
                    
                    endif 
                    
                    
                    if negative_only EQ 1 then begin
                        
                        if testngtv ne 0 then begin
                             
                             ;plotsym, 0
                            
                             if ct_spec ne 0 then begin
                             
                                 rms=2.*((*(*!dustem_data).qsed).sigma)(idx_spec)/2.
                                 
                                 dustem_plot_mlog,((*(*!dustem_data).qsed).wav)(idx_spec),((*(*!dustem_data).qsed).values)(idx_spec),ppositions=position[0],charsize=1.15,color='Dodger Blue',psym=16,syms=0.8,xs=1,xr=xr,noerase=1,/negative_only,xtickformat='(A1)',xtit='',/xlog,/ylog,yr=yr;,ytickformat='(A1)'
                                 dustem_plot_mlog,((*(*!dustem_data).qsed).wav)(idx_spec),((*(*!dustem_data).qsed).values)(idx_spec),ppositions=position[0],color='Dodger Blue',/negative_only,noerase=1,/overplot,rms=rms,xtit='',charsize=1.15,xtickformat='(A1)',xs=1,xr=xr,/xlog,/ylog,yr=yr,ytickformat='(A1)';,psym=16,syms=0.8     
                              
                             endif
                             
                             if ct_filt ne 0 then begin
                                 
                                 rms=2.*((*(*!dustem_data).qsed).sigma)(idx_filt)/2.
                                
                                 if ct_spec ne 0 then dustem_plot_mlog,((*(*!dustem_data).qsed).wav)(idx_filt),((*(*!dustem_data).qsed).values)(idx_filt),ppositions=position[0],charsize=1.15,color='Dodger Blue',psym=16,syms=0.8,xs=1,xr=xr,noerase=1,/negative_only,xtickformat='(A1)',xtit='',/xlog,/ylog,yr=yr,ytickformat='(A1)'
                                 if ct_spec eq 0 then dustem_plot_mlog,((*(*!dustem_data).qsed).wav)(idx_filt),((*(*!dustem_data).qsed).values)(idx_filt),ppositions=position[0],charsize=1.15,color='Dodger Blue',psym=16,syms=0.8,xs=1,xr=xr,noerase=1,/negative_only,xtickformat='(A1)',xtit='',/xlog,/ylog,yr=yr
                                 
                                 dustem_plot_mlog,((*(*!dustem_data).qsed).wav)(idx_filt),((*(*!dustem_data).qsed).values)(idx_filt),ppositions=position[0],color='Dodger Blue',/negative_only,noerase=1,/overplot,rms=rms,xtit='',charsize=1.15,xtickformat='(A1)',xs=1,xr=xr,/xlog,/ylog,yr=yr,ytickformat='(A1)'
                                     
                             endif 
                             
                             if ct_hdnpts NE 0 then begin
                             
                                 if ct_spec_hdn_ngtv ne 0 then begin
                                     xx = (((*(*!dustem_show).qsed).wav)[idx_rmv_sed])(idx_spec_hdn_ngtv)
                                     yy = (((*(*!dustem_show).qsed).values)[idx_rmv_sed])(idx_spec_hdn_ngtv)
                                     rms=2.*(((*(*!dustem_show).qsed).sigma)[idx_rmv_sed])(idx_spec_hdn_ngtv)/2.
                                     
                                     dustem_plot_mlog,xx,yy,ppositions=position[0],/negative_only,xs=1,noerase=1,charsize=1.15,/overplot,xtickformat='(A1)',xr=xr,color='Black',psym=16,syms=0.8,/xlog,/ylog,yr=yr,ytickformat='(A1)'
                                     dustem_plot_mlog,xx,yy,ppositions=position[0],/negative_only,noerase=1,color='Black',/overplot,rms=rms,yr=yr,xtickformat='(A1)',xr=xr,xs=1,/xlog,/ylog,ytickformat='(A1)';,psym=8,syms=0.8
                                 
                                 endif 
                                 
                                 if ct_filt_hdn_ngtv ne 0 then begin
                                 
                                     xx = (((*(*!dustem_show).qsed).wav)[idx_rmv_sed])(idx_filt_hdn_ngtv)
                                     yy = (((*(*!dustem_show).qsed).values)[idx_rmv_sed])(idx_filt_hdn_ngtv)
                                     rms=2.*(((*(*!dustem_show).qsed).sigma)[idx_rmv_sed])(idx_filt_hdn_ngtv)/2.
                                     
                                     dustem_plot_mlog,xx,yy,ppositions=position[0],/negative_only,xs=1,noerase=1,charsize=1.15,/overplot,xtickformat='(A1)',xr=xr,color='Black',psym=16,syms=0.8,/xlog,/ylog,yr=yr ,ytickformat='(A1)'  
                                     dustem_plot_mlog,xx,yy,ppositions=position[0],/negative_only,xs=1,noerase=1,color='Black',/overplot,rms=rms,xr=xr,yr=yr,xtickformat='(A1)',/xlog,/ylog,ytickformat='(A1)';,psym=8,syms=0.8
                                 
                                 endif
                            
                             endif

                        
                        endif else begin
                            
                            
                            if ct_spec ne 0 then dustem_plot_mlog,((*(*!dustem_data).qsed).wav)(idx_spec),-((*(*!dustem_data).qsed).values)(idx_spec),ppositions=position[0],charsize=1.15,/nodata,color='Dodger Blue',psym=16,syms=0.8,xs=1,xr=xr,noerase=1,/negative_only,xtickformat='(A1)',xtit='',/xlog,/ylog,yr=yr;,ytickformat='(A1)'
                                
                            
                            if ct_filt ne 0 and ct_spec eq 0 then  dustem_plot_mlog,((*(*!dustem_data).qsed).wav)(idx_filt),-((*(*!dustem_data).qsed).values)(idx_filt),/nodata,ppositions=position[0],charsize=1.15,color='Dodger Blue',psym=16,syms=0.8,xs=1,xr=xr,noerase=1,/negative_only,xtickformat='(A1)',xtit='',/xlog,/ylog,yr=yr;,ytickformat='(A1)'
                            
                            if ct_hdnpts NE 0 then begin
                            
                                if ct_spec_hdn_ngtv ne 0 then begin
                                    xx = (((*(*!dustem_show).qsed).wav)[idx_rmv_sed])(idx_spec_hdn_ngtv)
                                    yy = (((*(*!dustem_show).qsed).values)[idx_rmv_sed])(idx_spec_hdn_ngtv)
                                    rms=2.*(((*(*!dustem_show).qsed).sigma)[idx_rmv_sed])(idx_spec_hdn_ngtv)/2.
                                    
                                    dustem_plot_mlog,xx,yy,ppositions=position[0],/negative_only,xs=1,noerase=1,charsize=1.15,/overplot,xtickformat='(A1)',xr=xr,color='Black',psym=16,syms=0.8,/xlog,/ylog,yr=yr,ytickformat='(A1)'
                                    dustem_plot_mlog,xx,yy,ppositions=position[0],/negative_only,noerase=1,color='Black',/overplot,rms=rms,yr=yr,xtickformat='(A1)',xr=xr,xs=1,/xlog,/ylog,ytickformat='(A1)';,psym=8,syms=0.8
                                
                                endif 
                                
                                if ct_filt_hdn_ngtv ne 0 then begin
                                
                                    xx = (((*(*!dustem_show).qsed).wav)[idx_rmv_sed])(idx_filt_hdn_ngtv)
                                    yy = (((*(*!dustem_show).qsed).values)[idx_rmv_sed])(idx_filt_hdn_ngtv)
                                    rms=2.*(((*(*!dustem_show).qsed).sigma)[idx_rmv_sed])(idx_filt_hdn_ngtv)/2.
                                    
                                    dustem_plot_mlog,xx,yy,ppositions=position[0],/negative_only,xs=1,noerase=1,charsize=1.15,/overplot,xtickformat='(A1)',xr=xr,color='Black',psym=16,syms=0.8,/xlog,/ylog,yr=yr ,ytickformat='(A1)'  
                                    dustem_plot_mlog,xx,yy,ppositions=position[0],/negative_only,xs=1,noerase=1,color='Black',/overplot,rms=rms,xr=xr,yr=yr,xtickformat='(A1)',/xlog,/ylog,ytickformat='(A1)';,psym=8,syms=0.8
                                
                                endif
                                
                                endif
                              
                        endelse
                        ;stop
                    endif
                    
                
                endelse 
                    
            
            END
            
            ;DONE BUT NOT TESTED...
            'USED': begin
                
                ;SETTING THE PLOT RANGE
                xr = !dustem_plot_range.used.xr
                yr = !dustem_plot_range.used.yr
                
                vectw=DINDGEN(1001)*(alog10(1E7) - alog10(1E5))/(1000 - 1L) + alog10(1E5)
                vectw=10^vectw[1:*]
                vectw=[wavs,vectw]
                vectx=vectw*0+1
            
                ;SIGN-RELATED PARAMETERS/LOOPS HERE?
                ;negative & positive values regardless of data type (SPECTRUM or FILTER data points)
                varvar=where((*(*!dustem_data).used).values LT 0, testngtv)
                varvar=where((*(*!dustem_data).used).values GT 0, testpstv)
                ;stop
                idx_filt=where((*(*!dustem_data).used).filt_names NE 'SPECTRUM', ct_filt)
                idx_spec=where((*(*!dustem_data).used).filt_names EQ 'SPECTRUM' , ct_spec)
                
                ;Locating all the hidden data points (spectrum+filter)
                match2,((*(*!dustem_data).used).wav),((*(*!dustem_show).used).wav),show_sedpts,fit_sedpts ;only show_sedpts is needed
                idx_rmv_sed=where(fit_sedpts eq -1, ct_hdnpts) ; indices of the points to hide
                
                
                If n_elements(position) GT 1 THEN BEGIN
                    ;Refreshing of the data in the normalized plot
                    if keyword_set(refresh) then begin ;The data points in the plot that are being refreshed 
                        
                        ;Making sure we're placed in the normalized plot
                        cgplot,vectw,vectx,/nodata,/xlog,xs=5,ys=5,pos=position[1],noerase=1,charsize=1.15,xtickformat='(A1)',ytickformat='(A1)',color='Powder Blue',xr=xr,xtit='',yr=[0.0,2.0],psym=8,syms=0.8
                        
                        IF ct_spec NE 0 THEN BEGIN
                            xx=((*(*!dustem_data).used).wav)[idx_spec]
                            yy=dustem_interp[idx_spec]
                            rms=2.*((*(*!dustem_data).used).sigma)(idx_spec)/2.
                            indzero = where(yy NE 0, ct_zero)
                            IF ct_zero NE 0 THEN BEGIN
                                cgoplot,xx[indzero],(((*(*!dustem_data).used).values)(idx_spec))[indzero]/yy[indzero],pos=position[1],psym=16,color='Powder Blue',syms=0.8,noerase=1 
                                cgerrplot,(((*(*!dustem_data).used).wav)(idx_spec))[indzero],((((*(*!dustem_data).used).values)[idx_spec])[indzero]-rms[indzero])/yy[indzero],((((*(*!dustem_data).used).values)[idx_spec])[indzero]+rms[indzero])/yy[indzero],color='Powder Blue'
                            ENDIF
                        ENDIF
                        
                        IF ct_filt NE 0 THEN BEGIN
                            
                            xx=((*(*!dustem_data).used).wav)[idx_filt]
                            yy=dustem_interp[idx_filt]
                            rms=2.*((*(*!dustem_data).used).sigma)(idx_filt)/2. 
                            indzero = where(yy NE 0, ct_zero)
                            
                            IF ct_zero NE 0 THEN BEGIN
                                cgoplot,xx[indzero],(((*(*!dustem_data).used).values)(idx_filt))[indzero]/yy[indzero],pos=position[1],psym=16,color='Dodger Blue',syms=0.8,noerase=1 
                                cgerrplot,(((*(*!dustem_data).used).wav)(idx_filt))[indzero],((((*(*!dustem_data).used).values)[idx_filt])[indzero]-rms[indzero])/yy[indzero],((((*(*!dustem_data).used).values)[idx_filt])[indzero]+rms[indzero])/yy[indzero],color='Dodger Blue' 
                            ENDIF
                        ENDIF
      
                    ;plotting of the frozen data in the normalized plot
                    endif else begin 
                        
                        xtit=textoidl('\lambda (\mum)')
                        
                        cgplot,vectw,vectx,/xlog,/ys,xs=1,pos=position[1],noerase=1,color='Black',xr=xr,xtit=xtit,yr=[0.0,2.0],yticks=2,ymino=2,xticklen=0.1,ytickformat='(F6.2)',charsize=1.0
                        xyouts,pospltxt_n[0],pospltxt_n[1],textoidl('norm'),color=0,/normal,charsize=1.1
                    
                    endelse
                ENDIF
                
                ;refreshig of the data in the normal plot.
                          
                if keyword_set(refresh) then begin 
                    
                    if positive_only EQ 1 then begin
                    
                        testsup=where(dustem_spec GT 0., countmodelsup)      
                        if testpstv ne 0 or countmodelsup ne 0 then begin
                            
                            ;Making sure we're refreshing data in the positive_only plot
                            dustem_plot_mlog,vectw,vectx,ppositions=position[0],/positive_only, noerase=1, color='Indian Red',xs=5,ys=5,psym=7,syms=2,xr=xr,/xlog,/ylog,/nodata,xtickformat='(A1)',xtit='',ytickformat='(A1)',yr=yr
                        
                            FOR i=0L,Ngrains-1 DO BEGIN
                                
                                testneq = where(st.polsed.(i+1) ne 0,countneq)
                                
                                if countneq ne 0 then begin 
                                    vecfin = st.polsed.(i+1)*0.0 ;em_tot can be used here right? 
                                    
                                    vecfin[testneq] = ((st.polsed.(i+1))[testneq])/((st.sed.(i+1))[testneq]);extra_spec[testneq];(st.sed.em_tot)[testneq];(st.sed.(i+1))[testneq];*fact;(st.sed.(i+1))[testneq]
                                        
                                    polar_ippsi2iqu,st.sed.(i+1)*fact,specqgrain,specugrain,vecfin,replicate(!dustem_psi,n_elements(vecfin)) ;temporary solution
                                    ;dustem_plot_mlog,st.polsed.wav,specqgrain,ppositions=position,/overplot,noerase=1,color=use_cols[i],xr=xr,/xlog 
                                    dustem_plot_mlog,st.polsed.wav,specugrain,ppositions=position[0],/positive_only,/overplot,noerase=1,color=use_cols[i],xr=xr,/xlog,/ylog,ytickformat='(A1)',yr=yr
                                endif 
                                ;stop
                            ENDFOR
                            ;stop
                            for i=0L,n_plgns-1 do begin
                                
                                IF isa((*!dustem_plugin).(0).spec) THEN BEGIN
                                
                                    IF total(strsplit((*(*!dustem_plugin).(i).scope),'+',/extract) EQ 'ADD_POLSED') THEN begin
                                        
                                        
                                        dustem_plot_mlog,st.polsed.wav,(*(*!dustem_plugin).(i).spec)[*,2],ppositions=position[0],/positive_only,/overplot,noerase=1, color=clrs_plgns[i], linestyle=2 ,xr=xr,/xlog,/ylog,ytickformat='(A1)',yr=yr      
                                    ENDIF
                                    
                                ENDIF
                                
                            endfor
                            
                            IF ct_spec NE 0 THEN BEGIN
                                xx=((*(*!dustem_data).used).wav)[idx_spec]
                                yy=dustem_interp[idx_spec]
                                ;dustem_plot_mlog,xx,yy,ppositions=position,/overplot, noerase=1, color='red',psym=7,syms=2,xr=xr,/xlog
                                dustem_plot_mlog,xx,yy,ppositions=position[0],/positive_only, /overplot, noerase=1, color='Indian Red',psym=7,syms=2,xr=xr,/xlog,/ylog,ytickformat='(A1)',yr=yr 
                            ENDIF
                            
                            IF ct_filt NE 0 THEN BEGIN
                                xx=((*(*!dustem_data).used).wav)[idx_filt]
                                yy=dustem_interp[idx_filt]
                                ;dustem_plot_mlog,xx,yy,ppositions=position, /overplot, noerase=1, color='red',psym=6,syms=2,xr=xr,/xlog
                                dustem_plot_mlog,xx,yy,ppositions=position[0],/positive_only, /overplot, noerase=1, color='red',psym=6,syms=2,xr=xr,/xlog,/ylog,ytickformat='(A1)',yr=yr
                            ENDIF
                            
                            dustem_plot_mlog,st.polsed.wav,dustem_spec,ppositions=position[0],/positive_only,/overplot,noerase=1,xr=xr,/xlog,/ylog,ytickformat='(A1)',yr=yr                                    
                        
                        endif
                                
                    endif
                    
                    
                    if negative_only EQ 1 then begin
                    
                        testlow=where(dustem_spec LT 0., countmodelow)  
                        if testngtv ne 0 or countmodelow ne 0 then begin
                            
                            ;Making sure we're refreshing data in the positive_only plot
                            dustem_plot_mlog,vectw,-vectx,ppositions=position[0],/negative_only, noerase=1, color='Indian Red',psym=7,syms=2,xr=xr,xs=5,ys=5,/xlog,/ylog,/nodata,xtickformat='(A1)',xtit='',ytickformat='(A1)',yr=yr
                                
                            ;Plotting of the spectra of the dust species
                            FOR i=0L,Ngrains-1 DO BEGIN
                                testneq = where(st.polsed.(i+1) ne 0,countneq)
                                if countneq ne 0 then begin
                                    vecfin = st.polsed.(i+1)*0.0 ;em_tot can be used here right? 
                                    
                                    vecfin[testneq] = ((st.polsed.(i+1))[testneq])/((st.sed.(i+1))[testneq]);extra_spec[testneq];(st.sed.em_tot)[testneq];(st.sed.(i+1))[testneq];*fact;(st.sed.(i+1))[testneq]
                                    
                                    polar_ippsi2iqu,st.sed.(i+1)*fact,specqgrain,specugrain,vecfin,replicate(!dustem_psi,n_elements(vecfin)) ;temporary solution
                                     
                                    dustem_plot_mlog,st.polsed.wav,specugrain,ppositions=position[0],/negative_only,/overplot,noerase=1,color=use_cols[i],xr=xr,/xlog,/ylog,ytickformat='(A1)',yr=yr
                                endif    
                            ENDFOR
                            ;Plotting of the plugins
                            FOR i=0L,n_plgns-1 do begin
                                IF isa((*!dustem_plugin).(0).spec) THEN BEGIN
                                
                                    IF total(strsplit((*(*!dustem_plugin).(i).scope),'+',/extract) EQ 'ADD_POLSED') THEN begin
                                        ;dustem_plot_mlog,st.polsed.wav,(*(*!dustem_plugin).(i))[*,1],ppositions=position, /overplot, noerase=1, color=clrs_plgns[i], linestyle=2,xr=xr,/xlog
                                        dustem_plot_mlog,st.polsed.wav,(*(*!dustem_plugin).(i).spec)[*,2],ppositions=position[0],/negative_only,/overplot,noerase=1, color=clrs_plgns[i], linestyle=2 ,xr=xr,/xlog,/ylog,ytickformat='(A1)',yr=yr      
                                    ENDIF
                                ENDIF
                            ENDFOR
                            ;PLotting of the interpolates corresponding to spectrum and filter points
                            IF ct_spec NE 0 THEN BEGIN
                                xx=((*(*!dustem_data).used).wav)[idx_spec]
                                yy=dustem_interp[idx_spec]
                                ;dustem_plot_mlog,xx,yy,ppositions=position,/overplot, noerase=1, color='red',psym=7,syms=2,xr=xr,/xlog
                                dustem_plot_mlog,xx,yy,ppositions=position[0],/negative_only, /overplot, noerase=1, color='Indian Red',psym=7,syms=2,xr=xr,/xlog,/ylog,ytickformat='(A1)',yr=yr 
                            ENDIF
                            
                            IF ct_filt NE 0 THEN BEGIN
                                xx=((*(*!dustem_data).used).wav)[idx_filt]
                                yy=dustem_interp[idx_filt]
                                ;dustem_plot_mlog,xx,yy,ppositions=position, /overplot, noerase=1, color='red',psym=6,syms=2,xr=xr,/xlog
                                dustem_plot_mlog,xx,yy,ppositions=position[0],/negative_only, /overplot, noerase=1, color='red',psym=6,syms=2,xr=xr,/xlog,/ylog,ytickformat='(A1)',yr=yr
                            ENDIF
                            
                            ;Plotting of the total dust emission spectrum
                            dustem_plot_mlog,st.polsed.wav,dustem_spec,ppositions=position[0],/negative_only,/overplot,noerase=1,xr=xr,/xlog,/ylog,ytickformat='(A1)',yr=yr                                    
                        
                        endif
                                
                    
                    endif
                                               
                ;Plotting of frozen data in the normal plot    
                       
                endif else begin 
                    
                    xyouts,pospltxt[0],pospltxt[1],textoidl('U_{\nu} (MJy/sr)'),color=0,/normal,charsize=1.3;,charthick=2.0  
                    
                    ;Locating the hidden spectrum and filter data points     
                    ;SADLY I STILL DON'T HAVE A SOLUTION FOR THE PLOTTING OF NULL VALUES.                                   
                    
                    if ct_hdnpts NE 0 then begin
                        idx_filt_hdn_pstv = where(((*(*!dustem_show).used).filt_names)(idx_rmv_sed) NE 'SPECTRUM' and ((*(*!dustem_show).used).values)(idx_rmv_sed) gt 0,ct_filt_hdn_pstv)
                        idx_spec_hdn_pstv = where(((*(*!dustem_show).used).filt_names)(idx_rmv_sed) EQ 'SPECTRUM' and ((*(*!dustem_show).used).values)(idx_rmv_sed) gt 0,ct_spec_hdn_pstv)
                        idx_filt_hdn_ngtv = where(((*(*!dustem_show).used).filt_names)(idx_rmv_sed) NE 'SPECTRUM' and ((*(*!dustem_show).used).values)(idx_rmv_sed) lt 0,ct_filt_hdn_ngtv)
                        idx_spec_hdn_ngtv = where(((*(*!dustem_show).used).filt_names)(idx_rmv_sed) EQ 'SPECTRUM' and ((*(*!dustem_show).used).values)(idx_rmv_sed) lt 0,ct_spec_hdn_ngtv)
                    endif
                    ;stop
                    
                    if positive_only EQ 1 then begin
                        ;stop
                        if testpstv ne 0 then begin
                        ;stop
                            plotsym, 0
                            
                             
                            if ct_spec ne 0 then begin
                            
                                rms=2.*((*(*!dustem_data).used).sigma)(idx_spec)/2.
                                ;dustem_plot_mlog,((*(*!dustem_data).used).wav)(idx_spec),-((*(*!dustem_data).used).values)(idx_spec),ppositions=position,charsize=1.15,color='Dodger Blue',psym=16,syms=0.8,xs=1,xr=xr,/nodata,noerase=1,/positive_only,xtickformat='(A1)',xtit='',/xlog,/ylog,yr=yr;,ytickformat='(A1)'
                                ;if ct_spec_hdn_pstv ne 0 then dustem_plot_mlog,((*(*!dustem_data).used).wav)(idx_spec),((*(*!dustem_data).used).values)(idx_spec),ppositions=position,charsize=1.15,/overplot,color='Dodger Blue',psym=16,syms=0.8,xs=1,xr=xr,noerase=1,/positive_only,xtickformat='(A1)',xtit='',/xlog,/ylog,yr=yr else begin
                                dustem_plot_mlog,((*(*!dustem_data).used).wav)(idx_spec),((*(*!dustem_data).used).values)(idx_spec),ppositions=position[0],charsize=1.15,color='Dodger Blue',psym=16,syms=0.8,xs=1,xr=xr,noerase=1,/positive_only,xtickformat='(A1)',xtit='',/xlog,/ylog,yr=yr
                                ;endelse;,ytickformat='(A1)'
                                dustem_plot_mlog,((*(*!dustem_data).used).wav)(idx_spec),((*(*!dustem_data).used).values)(idx_spec),ppositions=position[0],color='Dodger Blue',/positive_only,noerase=1,/overplot,rms=rms,xtit='',xtickformat='(A1)',xs=1,xr=xr,/xlog,/ylog,yr=yr,ytickformat='(A1)'  ;,charsize=1.15,psym=16,syms=0.8
                             
                            endif
                            
                            if ct_filt ne 0 then begin
                                
                                rms=2.*((*(*!dustem_data).used).sigma)(idx_filt)/2.
                               ; dustem_plot_mlog,((*(*!dustem_data).used).wav)(idx_filt),-1.*((*(*!dustem_data).used).values)(idx_filt),ppositions=position,charsize=1.15,color='Dodger Blue',psym=16,syms=0.8,xs=1,xr=xr,/nodata,noerase=1,/negative_only,xtickformat='(A1)',xtit='',/xlog,/ylog,yr=yr;,ytickformat='(A1)'
                                ;if ct_filt_hdn_pstv ne 0 then dustem_plot_mlog,((*(*!dustem_data).used).wav)(idx_filt),((*(*!dustem_data).used).values)(idx_filt),/overplot,ppositions=position,charsize=1.15,color='Dodger Blue',psym=16,syms=0.8,xs=1,xr=xr,noerase=1,/positive_only,xtickformat='(A1)',xtit='',/xlog,/ylog,yr=yr else begin
                                if ct_spec ne 0 then dustem_plot_mlog,((*(*!dustem_data).used).wav)(idx_filt),((*(*!dustem_data).used).values)(idx_filt),ppositions=position[0],charsize=1.15,color='Dodger Blue',psym=16,syms=0.8,xs=1,xr=xr,noerase=1,/positive_only,xtickformat='(A1)',xtit='',/xlog,/ylog,yr=yr,ytickformat='(A1)'
                                if ct_spec eq 0 then dustem_plot_mlog,((*(*!dustem_data).used).wav)(idx_filt),((*(*!dustem_data).used).values)(idx_filt),ppositions=position[0],charsize=1.15,color='Dodger Blue',psym=16,syms=0.8,xs=1,xr=xr,noerase=1,/positive_only,xtickformat='(A1)',xtit='',/xlog,/ylog,yr=yr
                                ;endelse;,ytickformat='(A1)'
                                dustem_plot_mlog,((*(*!dustem_data).used).wav)(idx_filt),((*(*!dustem_data).used).values)(idx_filt),ppositions=position[0],color='Dodger Blue',/positive_only,noerase=1,/overplot,rms=rms,xtit='',xtickformat='(A1)',xs=1,xr=xr,/xlog,/ylog,yr=yr,ytickformat='(A1)';,charsize=1.15,psym=16,syms=0.8
                                    
                            endif
                            
                            if ct_hdnpts NE 0 then begin
                            
                                if ct_spec_hdn_pstv ne 0 then begin
                                    ;stop
                                    xx = (((*(*!dustem_show).used).wav)[idx_rmv_sed])(idx_spec_hdn_pstv)
                                    yy = (((*(*!dustem_show).used).values)[idx_rmv_sed])(idx_spec_hdn_pstv)
                                    rms=2.*(((*(*!dustem_show).used).sigma)[idx_rmv_sed])(idx_spec_hdn_pstv)/2.
                                    
                                    dustem_plot_mlog,xx,yy,ppositions=position[0],/positive_only,xs=1,noerase=1,charsize=1.15,xtickformat='(A1)',/overplot,xr=xr,color='Black',psym=16,syms=0.8,/xlog,/ylog,yr=yr,ytickformat='(A1)'
                                    dustem_plot_mlog,xx,yy,ppositions=position[0],/positive_only,noerase=1,color='Black',/overplot,rms=rms,yr=yr,xtickformat='(A1)',xr=xr,xs=1,/xlog,/ylog,ytickformat='(A1)';,psym=8,syms=0.8
                                
                                endif 
                                
                                if ct_filt_hdn_pstv ne 0 then begin
                                    ;stop
                                    xx = (((*(*!dustem_show).used).wav)[idx_rmv_sed])(idx_filt_hdn_pstv)
                                    yy = (((*(*!dustem_show).used).values)[idx_rmv_sed])(idx_filt_hdn_pstv)
                                    rms=2.*(((*(*!dustem_show).used).sigma)[idx_rmv_sed])(idx_filt_hdn_pstv)/2.
                                    
                                    dustem_plot_mlog,xx,yy,ppositions=position[0],/positive_only,xs=1,noerase=1,charsize=1.15,/overplot,xtickformat='(A1)',xr=xr,color='Black',psym=16,syms=0.8,/xlog,/ylog,yr=yr,ytickformat='(A1)' 
                                    dustem_plot_mlog,xx,yy,ppositions=position[0],/positive_only,xs=1,noerase=1,color='Black',/overplot,rms=rms,xr=xr,yr=yr,xtickformat='(A1)',/xlog,/ylog,ytickformat='(A1)';,psym=8,syms=0.8
                                
                                endif
                            endif   
                        endif else begin
                            
                            if ct_spec ne 0 then dustem_plot_mlog,((*(*!dustem_data).used).wav)(idx_spec),-((*(*!dustem_data).used).values)(idx_spec),ppositions=position[0],charsize=1.15,/nodata,color='Dodger Blue',psym=16,syms=0.8,xs=1,xr=xr,noerase=1,/positive_only,xtickformat='(A1)',xtit='',/xlog,/ylog,yr=yr;,ytickformat='(A1)'
                                
                            
                            if ct_filt ne 0 and ct_spec eq 0 then  dustem_plot_mlog,((*(*!dustem_data).used).wav)(idx_filt),-((*(*!dustem_data).used).values)(idx_filt),/nodata,ppositions=position[0],charsize=1.15,color='Dodger Blue',psym=16,syms=0.8,xs=1,xr=xr,noerase=1,/positive_only,xtickformat='(A1)',xtit='',/xlog,/ylog,yr=yr;,ytickformat='(A1)'
                            
                            if ct_hdnpts NE 0 then begin
                            
                                if ct_spec_hdn_pstv ne 0 then begin
                                    ;stop
                                    xx = (((*(*!dustem_show).used).wav)[idx_rmv_sed])(idx_spec_hdn_pstv)
                                    yy = (((*(*!dustem_show).used).values)[idx_rmv_sed])(idx_spec_hdn_pstv)
                                    rms=2.*(((*(*!dustem_show).used).sigma)[idx_rmv_sed])(idx_spec_hdn_pstv)/2.
                                    
                                    dustem_plot_mlog,xx,yy,ppositions=position[0],/positive_only,xs=1,noerase=1,charsize=1.15,xtickformat='(A1)',/overplot,xr=xr,color='Black',psym=16,syms=0.8,/xlog,/ylog,yr=yr,ytickformat='(A1)'
                                    dustem_plot_mlog,xx,yy,ppositions=position[0],/positive_only,noerase=1,color='Black',/overplot,rms=rms,yr=yr,xtickformat='(A1)',xr=xr,xs=1,/xlog,/ylog,ytickformat='(A1)';,psym=8,syms=0.8
                                
                                endif 
                                
                                if ct_filt_hdn_pstv ne 0 then begin
                                    ;stop
                                    xx = (((*(*!dustem_show).used).wav)[idx_rmv_sed])(idx_filt_hdn_pstv)
                                    yy = (((*(*!dustem_show).used).values)[idx_rmv_sed])(idx_filt_hdn_pstv)
                                    rms=2.*(((*(*!dustem_show).used).sigma)[idx_rmv_sed])(idx_filt_hdn_pstv)/2.
                                    
                                    dustem_plot_mlog,xx,yy,ppositions=position[0],/positive_only,xs=1,noerase=1,charsize=1.15,/overplot,xtickformat='(A1)',xr=xr,color='Black',psym=16,syms=0.8,/xlog,/ylog,yr=yr,ytickformat='(A1)' 
                                    dustem_plot_mlog,xx,yy,ppositions=position[0],/positive_only,xs=1,noerase=1,color='Black',/overplot,rms=rms,xr=xr,yr=yr,xtickformat='(A1)',/xlog,/ylog,ytickformat='(A1)';,psym=8,syms=0.8
                                
                                endif
                            endif   
                        endelse                          
                    
                    endif 
                    
                    if negative_only EQ 1 then begin
                        ;stop
                        if testngtv ne 0 then begin
                             
                             plotsym, 0
                             
                             
                             if ct_spec ne 0 then begin
                             
                                 rms=2.*((*(*!dustem_data).used).sigma)(idx_spec)/2.
                                 
                                 dustem_plot_mlog,((*(*!dustem_data).used).wav)(idx_spec),((*(*!dustem_data).used).values)(idx_spec),ppositions=position[0],charsize=1.15,color='Dodger Blue',psym=16,syms=0.8,xs=1,xr=xr,noerase=1,/negative_only,xtickformat='(A1)',xtit='',/xlog,/ylog,yr=yr;,ytickformat='(A1)'
                                 
                                 dustem_plot_mlog,((*(*!dustem_data).used).wav)(idx_spec),((*(*!dustem_data).used).values)(idx_spec),ppositions=position[0],color='Dodger Blue',/negative_only,noerase=1,/overplot,rms=rms,xtit='',charsize=1.15,xtickformat='(A1)',xs=1,psym=16,syms=0.8,xr=xr,/xlog,/ylog,yr=yr,ytickformat='(A1)'     
                              
                             endif
                             
                             if ct_filt ne 0 then begin
                                 
                                 rms=2.*((*(*!dustem_data).used).sigma)(idx_filt)/2.

                                 if ct_spec ne 0 then dustem_plot_mlog,((*(*!dustem_data).used).wav)(idx_filt),((*(*!dustem_data).used).values)(idx_filt),ppositions=position[0],charsize=1.15,color='Dodger Blue',psym=16,syms=0.8,xs=1,xr=xr,noerase=1,/negative_only,xtickformat='(A1)',xtit='',/xlog,/ylog,yr=yr,ytickformat='(A1)'
                                 if ct_spec eq 0 then dustem_plot_mlog,((*(*!dustem_data).used).wav)(idx_filt),((*(*!dustem_data).used).values)(idx_filt),ppositions=position[0],charsize=1.15,color='Dodger Blue',psym=16,syms=0.8,xs=1,xr=xr,noerase=1,/negative_only,xtickformat='(A1)',xtit='',/xlog,/ylog,yr=yr;,ytickformat='(A1)'
                                 
                                 dustem_plot_mlog,((*(*!dustem_data).used).wav)(idx_filt),((*(*!dustem_data).used).values)(idx_filt),ppositions=position[0],color='Dodger Blue',/negative_only,noerase=1,/overplot,rms=rms,xtit='',charsize=1.15,xtickformat='(A1)',xs=1,psym=16,syms=0.8,xr=xr,/xlog,/ylog,yr=yr,ytickformat='(A1)'
                                     
                             endif
                             
                             if ct_hdnpts NE 0 then begin
                             
                                 if ct_spec_hdn_ngtv ne 0 then begin
                                     xx = (((*(*!dustem_show).used).wav)[idx_rmv_sed])(idx_spec_hdn_ngtv)
                                     yy = (((*(*!dustem_show).used).values)[idx_rmv_sed])(idx_spec_hdn_ngtv)
                                     rms=2.*(((*(*!dustem_show).used).sigma)[idx_rmv_sed])(idx_spec_hdn_ngtv)/2.
                                     
                                     dustem_plot_mlog,xx,yy,ppositions=position[0],/negative_only,xs=1,noerase=1,charsize=1.15,xtickformat='(A1)',/overplot,xr=xr,color='Black',psym=16,syms=0.8,/xlog,/ylog,yr=yr,ytickformat='(A1)'
                                     dustem_plot_mlog,xx,yy,ppositions=position[0],/negative_only,noerase=1,color='Black',/overplot,rms=rms,yr=yr,xtickformat='(A1)',xr=xr,xs=1,/xlog,/ylog,ytickformat='(A1)';,psym=8,syms=0.8
                                 
                                 endif 
                                 
                                 if ct_filt_hdn_ngtv ne 0 then begin
                                 
                                     xx = (((*(*!dustem_show).used).wav)[idx_rmv_sed])(idx_filt_hdn_ngtv)
                                     yy = (((*(*!dustem_show).used).values)[idx_rmv_sed])(idx_filt_hdn_ngtv)
                                     rms=2.*(((*(*!dustem_show).used).sigma)[idx_rmv_sed])(idx_filt_hdn_ngtv)/2.
                                     
                                     dustem_plot_mlog,xx,yy,ppositions=position[0],/negative_only,xs=1,noerase=1,charsize=1.15,xtickformat='(A1)',/overplot,xr=xr,color='Black',psym=16,syms=0.8,/xlog,/ylog,yr=yr,ytickformat='(A1)'  
                                     dustem_plot_mlog,xx,yy,ppositions=position[0],/negative_only,xs=1,noerase=1,color='Black',/overplot,rms=rms,xr=xr,yr=yr,xtickformat='(A1)',/xlog,/ylog,ytickformat='(A1)';,psym=8,syms=0.8
                                 
                                 endif

                             endif 
                        
                        endif else begin
                        
                            if ct_spec ne 0 then dustem_plot_mlog,((*(*!dustem_data).used).wav)(idx_spec),-((*(*!dustem_data).used).values)(idx_spec),ppositions=position[0],charsize=1.15,/nodata,color='Dodger Blue',psym=16,syms=0.8,xs=1,xr=xr,noerase=1,/negative_only,xtickformat='(A1)',xtit='',/xlog,/ylog,yr=yr;,ytickformat='(A1)'
                                
                            
                            if ct_filt ne 0 and ct_spec eq 0 then  dustem_plot_mlog,((*(*!dustem_data).used).wav)(idx_filt),-((*(*!dustem_data).used).values)(idx_filt),/nodata,ppositions=position[0],charsize=1.15,color='Dodger Blue',psym=16,syms=0.8,xs=1,xr=xr,noerase=1,/negative_only,xtickformat='(A1)',xtit='',/xlog,/ylog,yr=yr;,ytickformat='(A1)'
                            
                            
                            if ct_hdnpts NE 0 then begin
                            
                                if ct_spec_hdn_ngtv ne 0 then begin
                                    xx = (((*(*!dustem_show).used).wav)[idx_rmv_sed])(idx_spec_hdn_ngtv)
                                    yy = (((*(*!dustem_show).used).values)[idx_rmv_sed])(idx_spec_hdn_ngtv)
                                    rms=2.*(((*(*!dustem_show).used).sigma)[idx_rmv_sed])(idx_spec_hdn_ngtv)/2.
                                    
                                    dustem_plot_mlog,xx,yy,ppositions=position[0],/negative_only,xs=1,noerase=1,charsize=1.15,xtickformat='(A1)',/overplot,xr=xr,color='Black',psym=16,syms=0.8,/xlog,/ylog,yr=yr,ytickformat='(A1)'
                                    dustem_plot_mlog,xx,yy,ppositions=position[0],/negative_only,noerase=1,color='Black',/overplot,rms=rms,yr=yr,xtickformat='(A1)',xr=xr,xs=1,/xlog,/ylog,ytickformat='(A1)';,psym=8,syms=0.8
                                
                                endif 
                                
                                if ct_filt_hdn_ngtv ne 0 then begin
                                
                                    xx = (((*(*!dustem_show).used).wav)[idx_rmv_sed])(idx_filt_hdn_ngtv)
                                    yy = (((*(*!dustem_show).used).values)[idx_rmv_sed])(idx_filt_hdn_ngtv)
                                    rms=2.*(((*(*!dustem_show).used).sigma)[idx_rmv_sed])(idx_filt_hdn_ngtv)/2.
                                    
                                    dustem_plot_mlog,xx,yy,ppositions=position[0],/negative_only,xs=1,noerase=1,charsize=1.15,xtickformat='(A1)',/overplot,xr=xr,color='Black',psym=16,syms=0.8,/xlog,/ylog,yr=yr,ytickformat='(A1)'  
                                    dustem_plot_mlog,xx,yy,ppositions=position[0],/negative_only,xs=1,noerase=1,color='Black',/overplot,rms=rms,xr=xr,yr=yr,xtickformat='(A1)',/xlog,/ylog,ytickformat='(A1)';,psym=8,syms=0.8
                                
                                endif

                            endif     
                             
                        endelse
                        
                    endif
                    
                
                endelse 
                    
                
            end
            
            'QEXT': begin   ;Correct this like you corrected extinction...
                
                ;SETTING THE PLOT RANGE
                xr = !dustem_plot_range.qext.xr
                yr = !dustem_plot_range.qext.yr
                
                vectw=DINDGEN(1001)*(alog10(1E7) - alog10(1E5))/(1000 - 1L) + alog10(1E5)
                vectw=10^vectw[1:*]
                vectw=[wavs,vectw]
                vectx=vectw*0+1
                
                
                varvar=where((*(*!dustem_data).qext).values GT 0, testpstv)
                varvar=where((*(*!dustem_data).qext).values LT 0, testngtv)
                
                ;stop
                idx_filt=where((*(*!dustem_data).qext).filt_names NE 'SPECTRUM', ct_filt)
                idx_spec=where((*(*!dustem_data).qext).filt_names EQ 'SPECTRUM' , ct_spec)
                
                
                ;Locating all the hidden data points (spectrum+filter)
                match2,((*(*!dustem_data).qext).wav),((*(*!dustem_show).qext).wav),show_sedpts,fit_sedpts ;only show_sedpts is needed
                idx_rmv_sed=where(fit_sedpts eq -1, ct_hdnpts) ; indices of the points to hide
                        
                        
                If n_elements(position) GT 1 THEN BEGIN        
                    ;refreshing of the normalized plot
                    
                    if keyword_set(refresh) then begin ;The data points in the plot that are being refreshed 
                        
                        ;Making sure we're placed in the right plot to refresh. Here normalized plot for QEXT.
                        cgplot,1/vectw,vectx,/nodata,/xlog,xs=1,pos=position[1],noerase=1,charsize=1.15,xtickformat='(A1)',ytickformat='(A1)',color='Powder Blue',xr=xr,xtit='',yr=[0.0,2.0],psym=8,syms=0.8
                        
                        IF ct_spec NE 0 THEN BEGIN
                            
                            xx=((*(*!dustem_data).qext).wav)[idx_spec]
                            yy=dustem_interp[idx_spec]
                            rms=2.*((*(*!dustem_data).qext).sigma)(idx_spec)/2.
                            
                            ;testing so that data/yy is finite: 
                            ;avoiding zero points in yy since we divide by it
                            ;testing also if the data is full of zeros (ie: PSI=0 for U and PSI=90 for Q)
                            
                            indzero = where(yy NE 0, ct_zero)
                            if ct_zero ne 0 then begin  
    
                                cgoplot,(1/xx)[indzero],(((*(*!dustem_data).qext).values)(idx_spec))[indzero]/yy[indzero],pos=position[1],psym=16,color='Powder Blue',syms=0.8,noerase=1 
                                cgerrplot,(1/((*(*!dustem_data).qext).wav)(idx_spec))[indzero],((((*(*!dustem_data).qext).values)[idx_spec])[indzero]-rms[indzero])/yy[indzero],((((*(*!dustem_data).qext).values)[idx_spec])[indzero]+rms[indzero])/yy[indzero],color='Powder Blue'
                            endif
                        ENDIF
                        
                        IF ct_filt NE 0 THEN BEGIN
                            ;stop
                            xx=((*(*!dustem_data).qext).wav)[idx_filt]
                            yy=dustem_interp[idx_filt]
                            rms=2.*((*(*!dustem_data).qext).sigma)(idx_filt)/2. 
                            indzero = where(yy NE 0, ct_zero)
                            IF ct_zero NE 0 THEN BEGIN
                                cgoplot,(1/xx)[indzero],(((*(*!dustem_data).qext).values)(idx_filt))[indzero]/yy[indzero],pos=position[1],psym=16,color='Dodger Blue',syms=0.8,noerase=1 
                                cgerrplot,(1/((*(*!dustem_data).qext).wav)(idx_filt))[indzero],((((*(*!dustem_data).qext).values)[idx_filt])[indzero]-rms[indzero])/yy[indzero],((((*(*!dustem_data).qext).values)[idx_filt])[indzero]+rms[indzero])/yy[indzero],color='Dodger Blue' 
                            ENDIF
                        ENDIF
      
                    ;Plotting of thr frozen data in the normalized plot    
                    endif else begin ;The data points in the plot that remain unchanged
                        
                        xtit=textoidl('1/\lambda (\mum^{-1})')
                        
                        cgplot,1/vectw,vectx,/xlog,xs=1,pos=position[1],noerase=1,color='Black',xr=xr,xtit=xtit,yr=[0.0,2.0],yticks=2,ymino=2,xticklen=0.1,ytickformat='(F6.2)',charsize=1.0
                        xyouts,pospltxt_n[0],pospltxt_n[1],textoidl('norm'),color=0,/normal,charsize=1.1
                    
                    endelse
                ENDIF
                      
                if keyword_set(refresh) then begin ;The data points in the plot are being refreshed
                    
                    if keyword_set(positive_only) then begin
                        ;stop
                        testsup=where(dustem_spec GT 0., countmodelsup) 
                        if testpstv ne 0 or countmodelsup ne 0 then begin
                            
                            dustem_plot_mlog,1/vectw,vectx,ppositions=position[0],/positive_only, noerase=1, color='Indian Red',psym=7,syms=2,xr=xr,/xlog,/ylog,/nodata,xtickformat='(A1)',xtit='',ytickformat='(A1)',yr=yr
                            
                            
                            ;I don't think the position keyword in the following lines is needed. I haven't verified to see if I encouter any errors.
                            ;Since we added the /nodata (new), I think we can omit some of these keywords. But this requires testing. I don't know passing keywords will be affected.
                            
                            FOR i=0L,Ngrains-1 DO BEGIN
                                
                                vecto = transpose((st.polext.(1))[i,*]+(st.polext.(2))[i,*])
                                vecte = transpose((st.ext.(1))[i,*]+(st.ext.(2))[i,*])
                                testneq = where( vecto ne 0,countneq)
                                

                                if countneq ne 0 then begin 
                                    vecfin = vecto*0.0 ;em_tot can be used here right? 
                                    ;stop
                                    vecfin[testneq] = (vecto[testneq])/vecte[testneq];extra_spec[testneq];(st.sed.em_tot)[testneq];(st.sed.(i+1))[testneq];*fact;(st.sed.(i+1))[testneq]
                                    ;stop
                                    ;polar_ippsi2iqu,st.sed.(i+1)*fact,specqgrain,specugrain,st.polsed.(i+1)*fact/spec,replicate(!dustem_psi,n_elements(spec)) ;temporary solution
                                    polar_ippsi2iqu,vecte*(*!dustem_HCD)/1.0e21,specqgrain,specugrain,vecfin,replicate(!dustem_psi_ext,n_elements(vecfin)) ;temporary solution
                                    
                                    ;if countneg ne 0 and cos(!dustem_psi_ext) gt 0 then specqgrain[testneg] = 0
                                    
                                    ;dustem_plot_mlog,st.polsed.wav,specqgrain,ppositions=position,/overplot,noerase=1,color=use_cols[i],xr=xr,/xlog 
                                    dustem_plot_mlog,1/st.polext.wav,specqgrain,ppositions=position[0],/positive_only,/overplot,noerase=1,color=use_cols[i],xr=xr,/xlog,/ylog,ytickformat='(A1)',yr=yr
                                    
                                endif
                                
                                
                            ENDFOR
                            
                            for i=0L,n_plgns-1 do begin
                                
                                IF isa((*!dustem_plugin).(0).spec) THEN BEGIN
                                    IF total(strsplit((*(*!dustem_plugin).(i).scope),'+',/extract) EQ 'ADD_POLEXT') THEN begin
                                     
                                        ;dustem_plot_mlog,st.polsed.wav,(*(*!dustem_plugin).(i))[*,1],ppositions=position, /overplot, noerase=1, color=clrs_plgns[i], linestyle=2,xr=xr,/xlog
                                        dustem_plot_mlog,1/st.polext.wav,(*(*!dustem_plugin).(i).spec)[*,1],ppositions=position[0],/positive_only,/overplot,noerase=1, color=clrs_plgns[i], linestyle=2 ,xr=xr,/xlog,/ylog,ytickformat='(A1)',yr=yr      
                                    ENDIF
                                ENDIF
                            endfor
                            
                            IF ct_spec NE 0 THEN BEGIN
                                xx=((*(*!dustem_data).qext).wav)[idx_spec]
                                yy=dustem_interp[idx_spec]
                                ;dustem_plot_mlog,xx,yy,ppositions=position,/overplot, noerase=1, color='red',psym=7,syms=2,xr=xr,/xlog
                                dustem_plot_mlog,1/xx,yy,ppositions=position[0],/positive_only, /overplot, noerase=1, color='Indian Red',psym=7,syms=2,xr=xr,/xlog,/ylog,ytickformat='(A1)',yr=yr 
                            ENDIF
                            
                            IF ct_filt NE 0 THEN BEGIN
                                xx=((*(*!dustem_data).qext).wav)[idx_filt]
                                yy=dustem_interp[idx_filt]
                                ;dustem_plot_mlog,xx,yy,ppositions=position, /overplot, noerase=1, color='red',psym=6,syms=2,xr=xr,/xlog
                                dustem_plot_mlog,1/xx,yy,ppositions=position[0],/positive_only, /overplot, noerase=1, color='red',psym=6,syms=2,xr=xr,/xlog,/ylog,ytickformat='(A1)',yr=yr
                            ENDIF
                            
                            dustem_plot_mlog,1/st.polext.wav,dustem_spec,ppositions=position[0],/positive_only,/overplot,noerase=1,xr=xr,/xlog,/ylog,ytickformat='(A1)',yr=yr                                    
                            
                        endif
                                
                    
                    endif
                    
                    ;stop
                    if keyword_set(negative_only) then begin
                        ;stop     
                        testlow=where(dustem_spec LT 0., countmodellow)
                        if testngtv ne 0 or countmodellow ne 0 then begin
                        
                            ;Making sure we're plotting in the negative_only plot.
                            dustem_plot_mlog,1/vectw,vectx,ppositions=position[0],/negative_only, noerase=1, color='Indian Red',psym=7,syms=2,xr=xr,/xlog,/ylog,/nodata,xtickformat='(A1)',xtit='',ytickformat='(A1)',yr=yr
                            ;stop    
                            ;Plotting of the spectra of the dust species
                            FOR i=0L,Ngrains-1 DO BEGIN
                                vecto = transpose(((st.polext.(1))[i,*]+(st.polext.(2))[i,*]))
                                vecte = transpose(((st.ext.(1))[i,*]+(st.ext.(2))[i,*]))
                                testneq = where(vecto ne 0,countneq)
                                ;stop
                                if countneq ne 0 then begin 
                                    vecfin = vecto*0.0 ;em_tot can be used here right? 
                                    ;stop
                                    vecfin[testneq] = (vecto[testneq])/vecte[testneq];extra_spec[testneq];(st.sed.em_tot)[testneq];(st.sed.(i+1))[testneq];*fact;(st.sed.(i+1))[testneq] 
                                    ;stop    
                                    polar_ippsi2iqu,vecte*(*!dustem_HCD)/1.0e21,specqgrain,specugrain,vecfin,replicate(!dustem_psi_ext,n_elements(vecfin)) ;temporary solution
                                    
                                    ;dustem_plot_mlog,st.polsed.wav,specqgrain,ppositions=position,/overplot,noerase=1,color=use_cols[i],xr=xr,/xlog 
                                    dustem_plot_mlog,1/st.polext.wav,specqgrain,ppositions=position[0],/negative_only,/overplot,noerase=1,color=use_cols[i],xr=xr,/xlog,/ylog,ytickformat='(A1)',yr=yr
                                endif 
                            ENDFOR
                            ;Plotting of the plugins
                            for i=0L,n_plgns-1 do begin
                                IF isa((*!dustem_plugin).(0).spec) THEN BEGIN
                                
                                    IF total(strsplit((*(*!dustem_plugin).(i).scope),'+',/extract) EQ 'ADD_POLEXT') THEN begin
 
                                        ;dustem_plot_mlog,st.polsed.wav,(*(*!dustem_plugin).(i))[*,1],ppositions=position, /overplot, noerase=1, color=clrs_plgns[i], linestyle=2,xr=xr,/xlog
                                        dustem_plot_mlog,1/st.polext.wav,(*(*!dustem_plugin).(i).spec)[*,1],ppositions=position[0],/negative_only,/overplot,noerase=1, color=clrs_plgns[i], linestyle=2 ,xr=xr,/xlog,/ylog,ytickformat='(A1)',yr=yr      
                                    ENDIF
                                    
                                ENDIF
                            endfor
                            ;PLotting of the interpolates corresponding to spectrum and filter points
                            IF ct_spec NE 0 THEN BEGIN
                                xx=((*(*!dustem_data).qext).wav)[idx_spec]
                                yy=dustem_interp[idx_spec]
                                ;dustem_plot_mlog,xx,yy,ppositions=position,/overplot, noerase=1, color='red',psym=7,syms=2,xr=xr,/xlog
                                dustem_plot_mlog,1/xx,yy,ppositions=position[0],/negative_only, /overplot, noerase=1, color='Indian Red',psym=7,syms=2,xr=xr,/xlog,/ylog,ytickformat='(A1)',yr=yr 
                            ENDIF
                            
                            IF ct_filt NE 0 THEN BEGIN
                                xx=((*(*!dustem_data).qext).wav)[idx_filt]
                                yy=dustem_interp[idx_filt]
                                ;dustem_plot_mlog,xx,yy,ppositions=position, /overplot, noerase=1, color='red',psym=6,syms=2,xr=xr,/xlog
                                dustem_plot_mlog,1/xx,yy,ppositions=position[0],/negative_only, /overplot, noerase=1, color='red',psym=6,syms=2,xr=xr,/xlog,/ylog,ytickformat='(A1)',yr=yr
                            ENDIF
                            ;Plotting of the total dust emission spectrum
                            dustem_plot_mlog,1/st.polext.wav,dustem_spec,ppositions=position[0],/negative_only,/overplot,noerase=1,xr=xr,/xlog,/ylog,ytickformat='(A1)',yr=yr                                    
                        
                        endif
                                
                    
                    endif
                                               
                  ;stop             
                endif else begin ;The data points in the plot that remain unchanged.; DO NOT USE AN ELSE HERE. 
                   
                    xyouts,pospltxt[0],pospltxt[1],textoidl('\tau_{QEXT}'),color=0,/normal,charsize=1.3;,charthick=2.0  
                        
                    ;Locating the hidden spectrum and filter data points     
                    ;SADLY I STILL DON'T HAVE A SOLUTION FOR THE PLOTTING OF NULL VALUES.                                   
                   
                    if ct_hdnpts then begin
                        idx_filt_hdn_pstv = where(((*(*!dustem_show).qext).filt_names)(idx_rmv_sed) NE 'SPECTRUM' and ((*(*!dustem_show).qext).values)(idx_rmv_sed) gt 0,ct_filt_hdn_pstv)
                        idx_spec_hdn_pstv = where(((*(*!dustem_show).qext).filt_names)(idx_rmv_sed) EQ 'SPECTRUM' and ((*(*!dustem_show).qext).values)(idx_rmv_sed) gt 0,ct_spec_hdn_pstv)
                        idx_filt_hdn_ngtv = where(((*(*!dustem_show).qext).filt_names)(idx_rmv_sed) NE 'SPECTRUM' and ((*(*!dustem_show).qext).values)(idx_rmv_sed) lt 0,ct_filt_hdn_ngtv)
                        idx_spec_hdn_ngtv = where(((*(*!dustem_show).qext).filt_names)(idx_rmv_sed) EQ 'SPECTRUM' and ((*(*!dustem_show).qext).values)(idx_rmv_sed) lt 0,ct_spec_hdn_ngtv)
                    endif
                    
                    
                    if keyword_set(positive_only) then begin
                        
                        if testpstv ne 0 then begin
                    
                            plotsym, 0
                            
                            
                            if ct_spec ne 0 then begin
                            
                                rms=2.*((*(*!dustem_data).qext).sigma)(idx_spec)/2.
                                ;dustem_plot_mlog,((*(*!dustem_data).qsed).wav)(idx_spec),-((*(*!dustem_data).qsed).values)(idx_spec),ppositions=position,charsize=1.15,color='Dodger Blue',psym=16,syms=0.8,xs=1,xr=xr,/nodata,noerase=1,/positive_only,xtickformat='(A1)',xtit='',/xlog,/ylog,yr=yr;,ytickformat='(A1)'
                            
                                dustem_plot_mlog,1/((*(*!dustem_data).qext).wav)(idx_spec),((*(*!dustem_data).qext).values)(idx_spec),ppositions=position[0],charsize=1.15,color='Powder Blue',psym=16,syms=0.8,xs=1,xr=xr,noerase=1,/positive_only,xtickformat='(A1)',xtit='',/xlog,/ylog,yr=yr;,ytickformat='(A1)'
                                
                                dustem_plot_mlog,1/((*(*!dustem_data).qext).wav)(idx_spec),((*(*!dustem_data).qext).values)(idx_spec),ppositions=position[0],color='Powder Blue',/positive_only,noerase=1,/overplot,rms=rms,xtit='',charsize=1.15,xtickformat='(A1)',xs=1,psym=16,syms=0.8,xr=xr,/xlog,/ylog,yr=yr,ytickformat='(A1)'     
                                 
                            endif
                            
                            if ct_filt ne 0 then begin
                                
                                rms=2.*((*(*!dustem_data).qext).sigma)(idx_filt)/2.
                               ; dustem_plot_mlog,((*(*!dustem_data).qsed).wav)(idx_filt),-1.*((*(*!dustem_data).qsed).values)(idx_filt),ppositions=position,charsize=1.15,color='Dodger Blue',psym=16,syms=0.8,xs=1,xr=xr,/nodata,noerase=1,/negative_only,xtickformat='(A1)',xtit='',/xlog,/ylog,yr=yr;,ytickformat='(A1)'
                                if ct_spec ne 0 then dustem_plot_mlog,1/((*(*!dustem_data).qext).wav)(idx_filt),((*(*!dustem_data).qext).values)(idx_filt),ppositions=position[0],charsize=1.15,color='Dodger Blue',psym=16,syms=0.8,xs=1,xr=xr,noerase=1,/positive_only,xtickformat='(A1)',xtit='',/xlog,/ylog,yr=yr,ytickformat='(A1)'
                                if ct_spec eq 0 then dustem_plot_mlog,1/((*(*!dustem_data).qext).wav)(idx_filt),((*(*!dustem_data).qext).values)(idx_filt),ppositions=position[0],charsize=1.15,color='Dodger Blue',psym=16,syms=0.8,xs=1,xr=xr,noerase=1,/positive_only,xtickformat='(A1)',xtit='',/xlog,/ylog,yr=yr;,ytickformat='(A1)'
                                dustem_plot_mlog,1/((*(*!dustem_data).qext).wav)(idx_filt),((*(*!dustem_data).qext).values)(idx_filt),ppositions=position[0],color='Dodger Blue',/positive_only,noerase=1,/overplot,rms=rms,xtit='',charsize=1.15,xtickformat='(A1)',xs=1,psym=16,syms=0.8,xr=xr,/xlog,/ylog,yr=yr,ytickformat='(A1)'
                                    
                            endif
                            
                            
                            if ct_hdnpts NE 0 then begin
                            
                                if ct_spec_hdn_pstv ne 0 then begin
                                    xx = (((*(*!dustem_show).qext).wav)[idx_rmv_sed])(idx_spec_hdn_pstv)
                                    yy = (((*(*!dustem_show).qext).values)[idx_rmv_sed])(idx_spec_hdn_pstv)
                                    rms=2.*(((*(*!dustem_show).qext).sigma)[idx_rmv_sed])(idx_spec_hdn_pstv)/2.
                                    
                                    dustem_plot_mlog,1/xx,yy,ppositions=position[0],/positive_only,xs=1,noerase=1,/overplot,charsize=1.15,xtickformat='(A1)',xr=xr,color='Black',psym=16,syms=0.8,/xlog,/ylog,yr=yr
                                    dustem_plot_mlog,1/xx,yy,ppositions=position[0],/positive_only,noerase=1,color='Black',/overplot,rms=rms,yr=yr,xtickformat='(A1)',xr=xr,xs=1,/xlog,/ylog;,psym=8,syms=0.8
                                
                                endif 
                                
                                if ct_filt_hdn_pstv ne 0 then begin
                                
                                    xx = (((*(*!dustem_show).qext).wav)[idx_rmv_sed])(idx_filt_hdn_pstv)
                                    yy = (((*(*!dustem_show).qext).values)[idx_rmv_sed])(idx_filt_hdn_pstv)
                                    rms=2.*(((*(*!dustem_show).qext).sigma)[idx_rmv_sed])(idx_filt_hdn_pstv)/2.
                                    
                                    dustem_plot_mlog,1/xx,yy,ppositions=position[0],/positive_only,xs=1,noerase=1,/overplot,charsize=1.15,xtickformat='(A1)',xr=xr,color='Black',psym=16,syms=0.8,/xlog,/ylog,yr=yr   
                                    dustem_plot_mlog,1/xx,yy,ppositions=position[0],/positive_only,xs=1,noerase=1,color='Black',/overplot,rms=rms,xr=xr,yr=yr,xtickformat='(A1)',/xlog,/ylog;,psym=8,syms=0.8
                                
                                endif
                                
                            endif
                            
                            
                        endif else begin
                        
                        
                            if ct_spec ne 0 then dustem_plot_mlog,1/((*(*!dustem_data).qext).wav)(idx_spec),-((*(*!dustem_data).qext).values)(idx_spec),ppositions=position[0],charsize=1.15,/nodata,color='Dodger Blue',psym=16,syms=0.8,xs=1,xr=xr,noerase=1,/positive_only,xtickformat='(A1)',xtit='',/xlog,/ylog,yr=yr;,ytickformat='(A1)'
                                
                            
                            if ct_filt ne 0 and ct_spec eq 0 then  dustem_plot_mlog,1/((*(*!dustem_data).qext).wav)(idx_filt),-((*(*!dustem_data).qext).values)(idx_filt),/nodata,ppositions=position[0],charsize=1.15,color='Dodger Blue',psym=16,syms=0.8,xs=1,xr=xr,noerase=1,/positive_only,xtickformat='(A1)',xtit='',/xlog,/ylog,yr=yr;,ytickformat='(A1)'
                            

                        endelse                           
                    
                    endif 
                    
                    
                    if keyword_set(negative_only) then begin
                        
                        if testngtv ne 0 then begin
                             
                             plotsym, 0
                             
                             
                             if ct_spec ne 0 then begin
                             
                                 rms=2.*((*(*!dustem_data).qext).sigma)(idx_spec)/2.
                                 ;dustem_plot_mlog,((*(*!dustem_data).qsed).wav)(idx_spec),-((*(*!dustem_data).qsed).values)(idx_spec),ppositions=position,charsize=1.15,color='Dodger Blue',psym=16,syms=0.8,xs=1,xr=xr,/nodata,noerase=1,/negative_only,xtickformat='(A1)',xtit='',/xlog,/ylog,yr=yr;,ytickformat='(A1)'
                                ; if ct_spec_hdn_ngtv ne 0 then dustem_plot_mlog,((*(*!dustem_data).qsed).wav)(idx_spec),((*(*!dustem_data).qsed).values)(idx_spec),ppositions=position,/overplot,charsize=1.15,color='Dodger Blue',psym=16,syms=0.8,xs=1,xr=xr,noerase=1,/negative_only,xtickformat='(A1)',xtit='',/xlog,/ylog,yr=yr else begin
                                 dustem_plot_mlog,1/((*(*!dustem_data).qext).wav)(idx_spec),((*(*!dustem_data).qext).values)(idx_spec),ppositions=position[0],charsize=1.15,color='Powder Blue',psym=16,syms=0.8,xs=1,xr=xr,noerase=1,/negative_only,xtickformat='(A1)',xtit='',/xlog,/ylog,yr=yr;,ytickformat='(A1)'
                                     
                                 ;endelse;,ytickformat='(A1)'
                                 dustem_plot_mlog,1/((*(*!dustem_data).qext).wav)(idx_spec),((*(*!dustem_data).qext).values)(idx_spec),ppositions=position[0],color='Powder Blue',/negative_only,noerase=1,/overplot,rms=rms,xtit='',charsize=1.15,xtickformat='(A1)',xs=1,xr=xr,/xlog,/ylog,yr=yr,ytickformat='(A1)';,psym=16,syms=0.8     
                                                                          
                             endif
                             
                             if ct_filt ne 0 then begin
                                 
                                 rms=2.*((*(*!dustem_data).qext).sigma)(idx_filt)/2.
                                ; dustem_plot_mlog,((*(*!dustem_data).qsed).wav)(idx_filt),-1.*((*(*!dustem_data).qsed).values)(idx_filt),ppositions=position,charsize=1.15,color='Dodger Blue',psym=16,syms=0.8,xs=1,xr=xr,/nodata,noerase=1,/negative_only,xtickformat='(A1)',xtit='',/xlog,/ylog,yr=yr;,ytickformat='(A1)'
                                 ;if ct_filt_hdn_ngtv ne 0 then  dustem_plot_mlog,((*(*!dustem_data).qsed).wav)(idx_filt),((*(*!dustem_data).qsed).values)(idx_filt),ppositions=position,charsize=1.15,color='Dodger Blue',/overplot,psym=16,syms=0.8,xs=1,xr=xr,noerase=1,/negative_only,xtickformat='(A1)',xtit='',/xlog,/ylog,yr=yr else begin
                                 if ct_spec ne 0 then dustem_plot_mlog,1/((*(*!dustem_data).qext).wav)(idx_filt),((*(*!dustem_data).qext).values)(idx_filt),ppositions=position[0],charsize=1.15,color='Dodger Blue',psym=16,syms=0.8,xs=1,xr=xr,noerase=1,/negative_only,xtickformat='(A1)',xtit='',/xlog,/ylog,yr=yr,ytickformat='(A1)'
                                 if ct_spec eq 0 then dustem_plot_mlog,1/((*(*!dustem_data).qext).wav)(idx_filt),((*(*!dustem_data).qext).values)(idx_filt),ppositions=position[0],charsize=1.15,color='Dodger Blue',psym=16,syms=0.8,xs=1,xr=xr,noerase=1,/negative_only,xtickformat='(A1)',xtit='',/xlog,/ylog,yr=yr
                                 ;endelse ;,ytickformat='(A1)'
                                 
                                 dustem_plot_mlog,1/((*(*!dustem_data).qext).wav)(idx_filt),((*(*!dustem_data).qext).values)(idx_filt),ppositions=position[0],color='Dodger Blue',/negative_only,noerase=1,/overplot,rms=rms,xtit='',charsize=1.15,xtickformat='(A1)',xs=1,xr=xr,/xlog,/ylog,yr=yr,ytickformat='(A1)'
                                     
                             endif
                             
                             if ct_hdnpts then begin
                             
                                 if ct_spec_hdn_ngtv ne 0 then begin
                                     xx = (((*(*!dustem_show).qext).wav)[idx_rmv_sed])(idx_spec_hdn_ngtv)
                                     yy = (((*(*!dustem_show).qext).values)[idx_rmv_sed])(idx_spec_hdn_ngtv)
                                     rms=2.*(((*(*!dustem_show).qext).sigma)[idx_rmv_sed])(idx_spec_hdn_ngtv)/2.
                                     
                                     dustem_plot_mlog,1/xx,yy,ppositions=position[0],/negative_only,xs=1,noerase=1,charsize=1.15,/overplot,xtickformat='(A1)',xr=xr,color='Black',psym=16,syms=0.8,/xlog,/ylog,yr=yr
                                     dustem_plot_mlog,1/xx,yy,ppositions=position[0],/negative_only,noerase=1,color='Black',/overplot,rms=rms,yr=yr,xtickformat='(A1)',xr=xr,xs=1,/xlog,/ylog;,psym=8,syms=0.8
                                 
                                 endif 
                                 
                                 if ct_filt_hdn_ngtv ne 0 then begin
                                 
                                     xx = (((*(*!dustem_show).qext).wav)[idx_rmv_sed])(idx_filt_hdn_ngtv)
                                     yy = (((*(*!dustem_show).qext).values)[idx_rmv_sed])(idx_filt_hdn_ngtv)
                                     rms=2.*(((*(*!dustem_show).qext).sigma)[idx_rmv_sed])(idx_filt_hdn_ngtv)/2.
                                     
                                     dustem_plot_mlog,1/xx,yy,ppositions=position[0],/negative_only,xs=1,noerase=1,charsize=1.15,/overplot,xtickformat='(A1)',xr=xr,color='Black',psym=16,syms=0.8,/xlog,/ylog,yr=yr   
                                     dustem_plot_mlog,1/xx,yy,ppositions=position[0],/negative_only,xs=1,noerase=1,color='Black',/overplot,rms=rms,xr=xr,yr=yr,xtickformat='(A1)',/xlog,/ylog;,psym=8,syms=0.8
                                 
                                 endif
                            
                             endif 
                        
                        endif else begin
                        
                            if ct_spec ne 0 then dustem_plot_mlog,((*(*!dustem_data).qext).wav)(idx_spec),-((*(*!dustem_data).qext).values)(idx_spec),ppositions=position[0],charsize=1.15,/nodata,color='Dodger Blue',psym=16,syms=0.8,xs=1,xr=xr,noerase=1,/negative_only,xtickformat='(A1)',xtit='',/xlog,/ylog,yr=yr;,ytickformat='(A1)'
                                
                            
                            if ct_filt ne 0 and ct_spec eq 0 then  dustem_plot_mlog,((*(*!dustem_data).qext).wav)(idx_filt),-((*(*!dustem_data).qext).values)(idx_filt),/nodata,ppositions=position[0],charsize=1.15,color='Dodger Blue',psym=16,syms=0.8,xs=1,xr=xr,noerase=1,/negative_only,xtickformat='(A1)',xtit='',/xlog,/ylog,yr=yr;,ytickformat='(A1)'
                            
                        endelse
            
                    endif
                
                endelse 
                    
            end
            
            'UEXT': begin
                
               ;SETTING THE PLOT RANGE
                xr = !dustem_plot_range.uext.xr
                yr = !dustem_plot_range.uext.yr
                    
                vectw=DINDGEN(1001)*(alog10(1E7) - alog10(1E5))/(1000 - 1L) + alog10(1E5)
                vectw=10^vectw[1:*]
                vectw=[wavs,vectw]
                vectx=vectw*0+1
            
                varvar=where((*(*!dustem_data).uext).values GT 0, testpstv)
                varvar=where((*(*!dustem_data).uext).values LT 0, testngtv)
                
                ;stop
                idx_filt=where((*(*!dustem_data).uext).filt_names NE 'SPECTRUM', ct_filt)
                idx_spec=where((*(*!dustem_data).uext).filt_names EQ 'SPECTRUM' , ct_spec)
                
                ;Plotting of frequency axis
                
                ;Locating all the hidden data points (spectrum+filter)
                match2,((*(*!dustem_data).uext).wav),((*(*!dustem_show).uext).wav),show_sedpts,fit_sedpts ;only show_sedpts is needed
                idx_rmv_sed=where(fit_sedpts eq -1, ct_hdnpts) ; indices of the points to hide
                
                
                If n_elements(position) GT 1 THEN BEGIN        
                    if keyword_set(refresh) then begin ;The data points in the plot that are being refreshed 
                        
                        ;Making sure we're placed in the right plot to refresh. Here normalized plot for QEXT.
                        cgplot,1/vectw,vectx,/nodata,/xlog,xs=1,pos=position[1],noerase=1,charsize=1.15,xtickformat='(A1)',ytickformat='(A1)',color='Powder Blue',xr=xr,xtit='',yr=[0.0,2.0],psym=8,syms=0.8
                        
                        IF ct_spec NE 0 THEN BEGIN
                            
                            xx=((*(*!dustem_data).uext).wav)[idx_spec]
                            yy=dustem_interp[idx_spec]
                            rms=2.*((*(*!dustem_data).uext).sigma)(idx_spec)/2.
                            
                            indzero = where(yy NE 0, ct_zero)
                            If ct_zero NE 0 THEN BEGIN
                                cgoplot,(1/xx)[indzero],(((*(*!dustem_data).uext).values)(idx_spec))[indzero]/yy[indzero],pos=position[1],psym=16,color='Powder Blue',syms=0.8,noerase=1 
                                cgerrplot,(1/((*(*!dustem_data).uext).wav)(idx_spec))[indzero],((((*(*!dustem_data).uext).values)[idx_spec])[indzero]-rms[indzero])/yy[indzero],((((*(*!dustem_data).uext).values)[idx_spec])[indzero]+rms[indzero])/yy[indzero],color='Powder Blue'
                            ENDIF
                        ENDIF
                        
                        IF ct_filt NE 0 THEN BEGIN
                            ;stop
                            xx=((*(*!dustem_data).uext).wav)[idx_filt]
                            yy=dustem_interp[idx_filt]
                            rms=2.*((*(*!dustem_data).uext).sigma)(idx_filt)/2. 
                            indzero = where(yy NE 0, ct_zero)
                            IF ct_zero NE 0 THEN BEGIN
                                cgoplot,(1/xx)[indzero],(((*(*!dustem_data).uext).values)(idx_filt))[indzero]/yy[indzero],pos=position[1],psym=16,color='Dodger Blue',syms=0.8,noerase=1 
                                cgerrplot,(1/((*(*!dustem_data).uext).wav)(idx_filt))[indzero],((((*(*!dustem_data).uext).values)[idx_filt])[indzero]-rms[indzero])/yy[indzero],((((*(*!dustem_data).uext).values)[idx_filt])[indzero]+rms[indzero])/yy[indzero],color='Dodger Blue' 
                            ENDIF
                        ENDIF
      
                        
                    endif else begin ;The data points in the plot that remain unchanged
                        ;stop
                        
                        xtit=textoidl('1/\lambda (\mum^{-1})')
                        ;if !run_pol then xtit = ''
                        cgplot,1/vectw,vectx,/xlog,xs=1,pos=position[1],noerase=1,color='Black',xr=xr,xtit=xtit,yr=[0.0,2.0],yticks=2,ymino=2,xticklen=0.1,ytickformat='(F6.2)',charsize=1.0
                        xyouts,pospltxt_n[0],pospltxt_n[1],textoidl('norm'),color=0,/normal,charsize=1.1
                    
                    endelse
                ENDIF
                      
                if keyword_set(refresh) then begin ;The data points in the plot are being refreshed
                    
                    if keyword_set(positive_only) then begin
                        testsup=where(dustem_spec GT 0., countmodelsup) 
                         
                        if testpstv ne 0 or countmodelsup ne 0 then begin
                            
                            dustem_plot_mlog,1/vectw,vectx,ppositions=position[0],/positive_only, noerase=1, color='Indian Red',psym=7,syms=2,xr=xr,/xlog,/ylog,/nodata,xtickformat='(A1)',xtit='',ytickformat='(A1)',yr=yr
                            
                            FOR i=0L,Ngrains-1 DO BEGIN
                            
                                vecto = transpose(((st.polext.(1))[i,*]+(st.polext.(2))[i,*]))
                                vecte = transpose(((st.ext.(1))[i,*]+(st.ext.(2))[i,*]))
                                
                                testneq = where( vecto ne 0,countneq)
                                ;stop
                                if countneq ne 0 then begin 
                                    vecfin = vecto*0.0 ;em_tot can be used here right? 
                                    ;stop
                                    vecfin[testneq] = (vecto[testneq])/vecte[testneq];extra_spec[testneq];(st.sed.em_tot)[testneq];(st.sed.(i+1))[testneq];*fact;(st.sed.(i+1))[testneq]
                                    ;stop
                                    ;polar_ippsi2iqu,st.sed.(i+1)*fact,specqgrain,specugrain,st.polsed.(i+1)*fact/spec,replicate(!dustem_psi,n_elements(spec)) ;temporary solution
                                    polar_ippsi2iqu,vecte*(*!dustem_HCD)/1.0e21,specqgrain,specugrain,vecfin,replicate(!dustem_psi_ext,n_elements(vecfin)) ;temporary solution
                                    
                                    ;stop
                                    ;dustem_plot_mlog,st.polsed.wav,specqgrain,ppositions=position,/overplot,noerase=1,color=use_cols[i],xr=xr,/xlog 
                                    dustem_plot_mlog,1/st.polext.wav,specugrain,ppositions=position[0],/positive_only,/overplot,noerase=1,color=use_cols[i],xr=xr,/xlog,/ylog,ytickformat='(A1)',yr=yr
                                    ;stop
                                endif
                                ;stop
                            ENDFOR
                            
                            for i=0L,n_plgns-1 do begin
                                
                                IF isa((*!dustem_plugin).(0).spec) THEN BEGIN
                                    IF total(strsplit((*(*!dustem_plugin).(i).scope),'+',/extract) EQ 'ADD_POLEXT') THEN begin
                                     
                                        ;dustem_plot_mlog,st.polsed.wav,(*(*!dustem_plugin).(i))[*,1],ppositions=position, /overplot, noerase=1, color=clrs_plgns[i], linestyle=2,xr=xr,/xlog
                                        dustem_plot_mlog,1/st.polext.wav,(*(*!dustem_plugin).(i).spec)[*,2],ppositions=position[0],/positive_only,/overplot,noerase=1, color=clrs_plgns[i], linestyle=2 ,xr=xr,/xlog,/ylog,ytickformat='(A1)',yr=yr      
                                    ENDIF
                                ENDIF
                            endfor
                            
                            IF ct_spec NE 0 THEN BEGIN
                                xx=((*(*!dustem_data).uext).wav)[idx_spec]
                                yy=dustem_interp[idx_spec]
                                ;dustem_plot_mlog,xx,yy,ppositions=position,/overplot, noerase=1, color='red',psym=7,syms=2,xr=xr,/xlog
                                dustem_plot_mlog,1/xx,yy,ppositions=position[0],/positive_only, /overplot, noerase=1, color='Indian Red',psym=7,syms=2,xr=xr,/xlog,/ylog,ytickformat='(A1)',yr=yr 
                            ENDIF
                            
                            IF ct_filt NE 0 THEN BEGIN
                                xx=((*(*!dustem_data).uext).wav)[idx_filt]
                                yy=dustem_interp[idx_filt]
                                ;dustem_plot_mlog,xx,yy,ppositions=position, /overplot, noerase=1, color='red',psym=6,syms=2,xr=xr,/xlog
                                dustem_plot_mlog,1/xx,yy,ppositions=position[0],/positive_only, /overplot, noerase=1, color='red',psym=6,syms=2,xr=xr,/xlog,/ylog,ytickformat='(A1)',yr=yr
                            ENDIF
                            
                            dustem_plot_mlog,1/st.polext.wav,dustem_spec,ppositions=position[0],/positive_only,/overplot,noerase=1,xr=xr,/xlog,/ylog,ytickformat='(A1)',yr=yr                                    
                        
                        endif
                                
                    
                    endif
                    
                    ;stop
                    if keyword_set(negative_only) then begin
                        ;stop 
                        testlow=where(dustem_spec LT 0., countmodellow)     
                        if testngtv ne 0 or countmodellow ne 0 then begin
                            
                            dustem_plot_mlog,1/vectw,vectx,ppositions=position[0],/negative_only, noerase=1, color='Indian Red',psym=7,syms=2,xr=xr,/xlog,/ylog,/nodata,xtickformat='(A1)',xtit='',ytickformat='(A1)',yr=yr
                                
                            ;Plotting of the spectra of the dust species
                            FOR i=0L,Ngrains-1 DO BEGIN
                                vecto = transpose(((st.polext.(1))[i,*]+(st.polext.(2))[i,*]))
                                vecte = transpose(((st.ext.(1))[i,*]+(st.ext.(2))[i,*]))
                                testneq = where( vecto ne 0,countneq)
                                ;stop
                                if countneq ne 0 then begin 
                                    vecfin = vecto*0.0 ;em_tot can be used here right? 
                                    ;stop
                                    vecfin[testneq] = vecto[testneq]/vecte[testneq];extra_spec[testneq];(st.sed.em_tot)[testneq];(st.sed.(i+1))[testneq];*fact;(st.sed.(i+1))[testneq] 
                                    ;stop    
                                    polar_ippsi2iqu,vecte*(*!dustem_HCD)/1.0e21,specqgrain,specugrain,vecfin,replicate(!dustem_psi_ext,n_elements(vecfin)) ;temporary solution
                                    ;stop
                                    ;dustem_plot_mlog,st.polsed.wav,specqgrain,ppositions=position,/overplot,noerase=1,color=use_cols[i],xr=xr,/xlog 
                                    dustem_plot_mlog,1/st.polext.wav,specugrain,ppositions=position[0],/negative_only,/overplot,noerase=1,color=use_cols[i],xr=xr,/xlog,/ylog,ytickformat='(A1)',yr=yr
                                endif 
                            ENDFOR
                            ;Plotting of the plugins
                            for i=0L,n_plgns-1 do begin
                                IF isa((*!dustem_plugin).(0).spec) THEN BEGIN
                                
                                    IF total(strsplit((*(*!dustem_plugin).(i).scope),'+',/extract) EQ 'ADD_POLEXT') THEN begin
 
                                        ;dustem_plot_mlog,st.polsed.wav,(*(*!dustem_plugin).(i))[*,1],ppositions=position, /overplot, noerase=1, color=clrs_plgns[i], linestyle=2,xr=xr,/xlog
                                        dustem_plot_mlog,1/st.polext.wav,(*(*!dustem_plugin).(i).spec)[*,2],ppositions=position[0],/negative_only,/overplot,noerase=1, color=clrs_plgns[i], linestyle=2 ,xr=xr,/xlog,/ylog,ytickformat='(A1)',yr=yr      
                                    ENDIF
                                    
                                ENDIF
                            endfor
                            ;PLotting of the interpolates corresponding to spectrum and filter points
                            IF ct_spec NE 0 THEN BEGIN
                                xx=((*(*!dustem_data).uext).wav)[idx_spec]
                                yy=dustem_interp[idx_spec]
                                ;dustem_plot_mlog,xx,yy,ppositions=position,/overplot, noerase=1, color='red',psym=7,syms=2,xr=xr,/xlog
                                dustem_plot_mlog,1/xx,yy,ppositions=position[0],/negative_only, /overplot, noerase=1, color='Indian Red',psym=7,syms=2,xr=xr,/xlog,/ylog,ytickformat='(A1)',yr=yr 
                            ENDIF
                            
                            IF ct_filt NE 0 THEN BEGIN
                                xx=((*(*!dustem_data).uext).wav)[idx_filt]
                                yy=dustem_interp[idx_filt]
                                ;dustem_plot_mlog,xx,yy,ppositions=position, /overplot, noerase=1, color='red',psym=6,syms=2,xr=xr,/xlog
                                dustem_plot_mlog,1/xx,yy,ppositions=position[0],/negative_only, /overplot, noerase=1, color='red',psym=6,syms=2,xr=xr,/xlog,/ylog,ytickformat='(A1)',yr=yr
                            ENDIF
                            ;Plotting of the total dust emission spectrum
                            dustem_plot_mlog,1/st.polext.wav,dustem_spec,ppositions=position[0],/negative_only,/overplot,noerase=1,xr=xr,/xlog,/ylog,ytickformat='(A1)',yr=yr                                    
                        
                        endif
                                
                    
                    endif
                                               
                  ;stop             
                endif else begin ;The data points in the plot that remain unchanged.; DO NOT USE AN ELSE HERE. 
                    ;stop
                    ;cgaxis, xaxis=1,xlog=1, xs=1,charsize=1.5,xtickformat='(A1)'
                    xyouts,pospltxt[0],pospltxt[1],textoidl('\tau_{UEXT}'),color=0,/normal,charsize=1.3;,charthick=2.0  
                    ;if ct_hdnpts ne 0 then begin ;Hidden data points are present 
                        
                    ;Locating the hidden spectrum and filter data points     
                    ;SADLY I STILL DON'T HAVE A SOLUTION FOR THE PLOTTING OF NULL VALUES.                                   
                    ;idx_filt_hdn = where(((*(*!dustem_show).qsed).filt_names)(idx_rmv_sed) NE 'SPECTRUM',ct_filt_hdn)
                    ;idx_spec_hdn = where(((*(*!dustem_show).qsed).filt_names)(idx_rmv_sed) EQ 'SPECTRUM',ct_spec_hdn)
                    if ct_hdnpts then begin
                        idx_filt_hdn_pstv = where(((*(*!dustem_show).uext).filt_names)(idx_rmv_sed) NE 'SPECTRUM' and ((*(*!dustem_show).uext).values)(idx_rmv_sed) gt 0,ct_filt_hdn_pstv)
                        idx_spec_hdn_pstv = where(((*(*!dustem_show).uext).filt_names)(idx_rmv_sed) EQ 'SPECTRUM' and ((*(*!dustem_show).uext).values)(idx_rmv_sed) gt 0,ct_spec_hdn_pstv)
                        idx_filt_hdn_ngtv = where(((*(*!dustem_show).uext).filt_names)(idx_rmv_sed) NE 'SPECTRUM' and ((*(*!dustem_show).uext).values)(idx_rmv_sed) lt 0,ct_filt_hdn_ngtv)
                        idx_spec_hdn_ngtv = where(((*(*!dustem_show).uext).filt_names)(idx_rmv_sed) EQ 'SPECTRUM' and ((*(*!dustem_show).uext).values)(idx_rmv_sed) lt 0,ct_spec_hdn_ngtv)
                    endif
                    
                    
                    if keyword_set(positive_only) then begin
                        
                            
                            
                            if ct_spec ne 0 then begin
                            
                                rms=2.*((*(*!dustem_data).uext).sigma)(idx_spec)/2.
                                ;dustem_plot_mlog,((*(*!dustem_data).qsed).wav)(idx_spec),-((*(*!dustem_data).qsed).values)(idx_spec),ppositions=position,charsize=1.15,color='Dodger Blue',psym=16,syms=0.8,xs=1,xr=xr,/nodata,noerase=1,/positive_only,xtickformat='(A1)',xtit='',/xlog,/ylog,yr=yr;,ytickformat='(A1)'
                                dustem_plot_mlog,1/((*(*!dustem_data).uext).wav)(idx_spec),((*(*!dustem_data).uext).values)(idx_spec),ppositions=position[0],charsize=1.15,color='Powder Blue',psym=16,syms=0.8,xs=1,xr=xr,noerase=1,/positive_only,xtickformat='(A1)',xtit='',/xlog,/ylog,yr=yr;,ytickformat='(A1)'
                                dustem_plot_mlog,1/((*(*!dustem_data).uext).wav)(idx_spec),((*(*!dustem_data).uext).values)(idx_spec),ppositions=position[0],color='Powder Blue',/positive_only,noerase=1,/overplot,rms=rms,xtit='',charsize=1.15,xtickformat='(A1)',xs=1,psym=16,syms=0.8,xr=xr,/xlog,/ylog,yr=yr,ytickformat='(A1)'     
                             
                            endif
                            
                            if ct_filt ne 0 then begin
                                
                                rms=2.*((*(*!dustem_data).uext).sigma)(idx_filt)/2.
                               ; dustem_plot_mlog,((*(*!dustem_data).qsed).wav)(idx_filt),-1.*((*(*!dustem_data).qsed).values)(idx_filt),ppositions=position,charsize=1.15,color='Dodger Blue',psym=16,syms=0.8,xs=1,xr=xr,/nodata,noerase=1,/negative_only,xtickformat='(A1)',xtit='',/xlog,/ylog,yr=yr;,ytickformat='(A1)'
                                if ct_spec ne 0 then dustem_plot_mlog,1/((*(*!dustem_data).uext).wav)(idx_filt),((*(*!dustem_data).uext).values)(idx_filt),ppositions=position[0],charsize=1.15,color='Dodger Blue',psym=16,syms=0.8,xs=1,xr=xr,noerase=1,/positive_only,xtickformat='(A1)',xtit='',/xlog,/ylog,yr=yr,ytickformat='(A1)'
                                if ct_spec eq 0 then dustem_plot_mlog,1/((*(*!dustem_data).uext).wav)(idx_filt),((*(*!dustem_data).uext).values)(idx_filt),ppositions=position[0],charsize=1.15,color='Dodger Blue',psym=16,syms=0.8,xs=1,xr=xr,noerase=1,/positive_only,xtickformat='(A1)',xtit='',/xlog,/ylog,yr=yr;,ytickformat='(A1)'
                                dustem_plot_mlog,1/((*(*!dustem_data).uext).wav)(idx_filt),((*(*!dustem_data).uext).values)(idx_filt),ppositions=position[0],color='Dodger Blue',/positive_only,noerase=1,/overplot,rms=rms,xtit='',charsize=1.15,xtickformat='(A1)',xs=1,psym=16,syms=0.8,xr=xr,/xlog,/ylog,yr=yr,ytickformat='(A1)'
                                    
                            endif
                            
                            
                            if testpstv ne 0 then begin
                            
                                plotsym, 0
                                
                                if ct_hdnpts NE 0 then begin
                                
                                    if ct_spec_hdn_pstv ne 0 then begin
                                        xx = (((*(*!dustem_show).uext).wav)[idx_rmv_sed])(idx_spec_hdn_pstv)
                                        yy = (((*(*!dustem_show).uext).values)[idx_rmv_sed])(idx_spec_hdn_pstv)
                                        rms=2.*(((*(*!dustem_show).uext).sigma)[idx_rmv_sed])(idx_spec_hdn_pstv)/2.
                                        
                                        dustem_plot_mlog,1/xx,yy,ppositions=position[0],/positive_only,xs=1,noerase=1,charsize=1.15,/overplot,xtickformat='(A1)',xr=xr,color='Black',psym=16,syms=0.8,/xlog,/ylog,yr=yr
                                        dustem_plot_mlog,1/xx,yy,ppositions=position[0],/positive_only,noerase=1,color='Black',/overplot,rms=rms,yr=yr,xtickformat='(A1)',xr=xr,xs=1,/xlog,/ylog;,psym=8,syms=0.8
                                    
                                    endif 
                                    
                                    if ct_filt_hdn_pstv ne 0 then begin
                                    
                                        xx = (((*(*!dustem_show).uext).wav)[idx_rmv_sed])(idx_filt_hdn_pstv)
                                        yy = (((*(*!dustem_show).uext).values)[idx_rmv_sed])(idx_filt_hdn_pstv)
                                        rms=2.*(((*(*!dustem_show).uext).sigma)[idx_rmv_sed])(idx_filt_hdn_pstv)/2.
                                        
                                        dustem_plot_mlog,1/xx,yy,ppositions=position[0],/positive_only,xs=1,noerase=1,charsize=1.15,/overplot,xtickformat='(A1)',xr=xr,color='Black',psym=16,syms=0.8,/xlog,/ylog,yr=yr   
                                        dustem_plot_mlog,1/xx,yy,ppositions=position[0],/positive_only,xs=1,noerase=1,color='Black',/overplot,rms=rms,xr=xr,yr=yr,xtickformat='(A1)',/xlog,/ylog;,psym=8,syms=0.8
                                    
                                    endif
                                    
                                endif
                        endif else begin
                            
                            if ct_spec ne 0 then dustem_plot_mlog,1/((*(*!dustem_data).uext).wav)(idx_spec),((*(*!dustem_data).uext).values)(idx_spec),ppositions=position[0],charsize=1.15,/nodata,color='Powder Blue',psym=16,syms=0.8,xs=1,xr=xr,noerase=1,/positive_only,xtickformat='(A1)',xtit='',/xlog,/ylog,yr=yr;,ytickformat='(A1)'
                                
                            
                            if ct_filt ne 0 and ct_spec eq 0 then  dustem_plot_mlog,1/((*(*!dustem_data).uext).wav)(idx_filt),-((*(*!dustem_data).uext).values)(idx_filt),/nodata,ppositions=position[0],charsize=1.15,color='Dodger Blue',psym=16,syms=0.8,xs=1,xr=xr,noerase=1,/positive_only,xtickformat='(A1)',xtit='',/xlog,/ylog,yr=yr;,ytickformat='(A1)'
                               
                            
                        endelse                           
                    
                    
                    endif 
                    
                    
                    if keyword_set(negative_only) then begin
                        
                        if testngtv ne 0 then begin
                             
                             plotsym, 0
                             
                             
                             if ct_spec ne 0 then begin
                                 
                                 rms=2.*((*(*!dustem_data).uext).sigma)(idx_spec)/2.
                                 ;dustem_plot_mlog,((*(*!dustem_data).qsed).wav)(idx_spec),-((*(*!dustem_data).qsed).values)(idx_spec),ppositions=position,charsize=1.15,color='Dodger Blue',psym=16,syms=0.8,xs=1,xr=xr,/nodata,noerase=1,/negative_only,xtickformat='(A1)',xtit='',/xlog,/ylog,yr=yr;,ytickformat='(A1)'
                                ; if ct_spec_hdn_ngtv ne 0 then dustem_plot_mlog,((*(*!dustem_data).qsed).wav)(idx_spec),((*(*!dustem_data).qsed).values)(idx_spec),ppositions=position,/overplot,charsize=1.15,color='Dodger Blue',psym=16,syms=0.8,xs=1,xr=xr,noerase=1,/negative_only,xtickformat='(A1)',xtit='',/xlog,/ylog,yr=yr else begin
                                 dustem_plot_mlog,1/((*(*!dustem_data).uext).wav)(idx_spec),((*(*!dustem_data).uext).values)(idx_spec),ppositions=position[0],charsize=1.15,color='Powder Blue',psym=16,syms=0.8,xs=1,xr=xr,noerase=1,/negative_only,xtickformat='(A1)',xtit='',/xlog,/ylog,yr=yr;,ytickformat='(A1)'
                                 ;endelse;,ytickformat='(A1)'
                                 dustem_plot_mlog,1/((*(*!dustem_data).uext).wav)(idx_spec),((*(*!dustem_data).uext).values)(idx_spec),ppositions=position[0],color='Powder Blue',/negative_only,noerase=1,/overplot,rms=rms,xtit='',charsize=1.15,xtickformat='(A1)',xs=1,xr=xr,/xlog,/ylog,yr=yr,ytickformat='(A1)';,psym=16,syms=0.8     
                              
                             endif
                             
                             if ct_filt ne 0 then begin
                                 
                                 rms=2.*((*(*!dustem_data).uext).sigma)(idx_filt)/2.
                                ; dustem_plot_mlog,((*(*!dustem_data).qsed).wav)(idx_filt),-1.*((*(*!dustem_data).qsed).values)(idx_filt),ppositions=position,charsize=1.15,color='Dodger Blue',psym=16,syms=0.8,xs=1,xr=xr,/nodata,noerase=1,/negative_only,xtickformat='(A1)',xtit='',/xlog,/ylog,yr=yr;,ytickformat='(A1)'
                                 ;if ct_filt_hdn_ngtv ne 0 then  dustem_plot_mlog,((*(*!dustem_data).qsed).wav)(idx_filt),((*(*!dustem_data).qsed).values)(idx_filt),ppositions=position,charsize=1.15,color='Dodger Blue',/overplot,psym=16,syms=0.8,xs=1,xr=xr,noerase=1,/negative_only,xtickformat='(A1)',xtit='',/xlog,/ylog,yr=yr else begin
                                 if ct_spec ne 0 then dustem_plot_mlog,1/((*(*!dustem_data).uext).wav)(idx_filt),((*(*!dustem_data).uext).values)(idx_filt),ppositions=position[0],charsize=1.15,color='Dodger Blue',psym=16,syms=0.8,xs=1,xr=xr,noerase=1,/negative_only,xtickformat='(A1)',xtit='',/xlog,/ylog,yr=yr,ytickformat='(A1)'
                                 if ct_spec eq 0 then dustem_plot_mlog,1/((*(*!dustem_data).uext).wav)(idx_filt),((*(*!dustem_data).uext).values)(idx_filt),ppositions=position[0],charsize=1.15,color='Dodger Blue',psym=16,syms=0.8,xs=1,xr=xr,noerase=1,/negative_only,xtickformat='(A1)',xtit='',/xlog,/ylog,yr=yr;,ytickformat='(A1)'
                                 ;endelse ;,ytickformat='(A1)'
                                 
                                 dustem_plot_mlog,1/((*(*!dustem_data).uext).wav)(idx_filt),((*(*!dustem_data).uext).values)(idx_filt),ppositions=position[0],color='Dodger Blue',/negative_only,noerase=1,/overplot,rms=rms,xtit='',charsize=1.15,xtickformat='(A1)',xs=1,xr=xr,/xlog,/ylog,yr=yr,ytickformat='(A1)'
                                     
                             endif 
                             
                             if ct_hdnpts NE 0 then begin
                             
                                 if ct_spec_hdn_ngtv ne 0 then begin
                                     xx = (((*(*!dustem_show).uext).wav)[idx_rmv_sed])(idx_spec_hdn_ngtv)
                                     yy = (((*(*!dustem_show).uext).values)[idx_rmv_sed])(idx_spec_hdn_ngtv)
                                     rms=2.*(((*(*!dustem_show).uext).sigma)[idx_rmv_sed])(idx_spec_hdn_ngtv)/2.
                                     
                                     dustem_plot_mlog,1/xx,yy,ppositions=position[0],/negative_only,xs=1,noerase=1,charsize=1.15,/overplot,xtickformat='(A1)',xr=xr,color='Black',psym=16,syms=0.8,/xlog,/ylog,yr=yr
                                     dustem_plot_mlog,1/xx,yy,ppositions=position[0],/negative_only,noerase=1,color='Black',/overplot,rms=rms,yr=yr,xtickformat='(A1)',xr=xr,xs=1,/xlog,/ylog;,psym=8,syms=0.8
                                 
                                 endif 
                                 
                                 if ct_filt_hdn_ngtv ne 0 then begin
                                 
                                     xx = (((*(*!dustem_show).uext).wav)[idx_rmv_sed])(idx_filt_hdn_ngtv)
                                     yy = (((*(*!dustem_show).uext).values)[idx_rmv_sed])(idx_filt_hdn_ngtv)
                                     rms=2.*(((*(*!dustem_show).uext).sigma)[idx_rmv_sed])(idx_filt_hdn_ngtv)/2.
                                     
                                     dustem_plot_mlog,1/xx,yy,ppositions=position[0],/negative_only,xs=1,noerase=1,charsize=1.15,/overplot,xtickformat='(A1)',xr=xr,color='Black',psym=16,syms=0.8,/xlog,/ylog,yr=yr   
                                     dustem_plot_mlog,1/xx,yy,ppositions=position[0],/negative_only,xs=1,noerase=1,color='Black',/overplot,rms=rms,xr=xr,yr=yr,xtickformat='(A1)',/xlog,/ylog;,psym=8,syms=0.8
                                 
                                 endif
                            
                             endif
                        
                        endif else begin
                            
                            if ct_spec ne 0 then dustem_plot_mlog,1/((*(*!dustem_data).uext).wav)(idx_spec),-((*(*!dustem_data).uext).values)(idx_spec),ppositions=position[0],charsize=1.15,/nodata,color='Powder Blue',psym=16,syms=0.8,xs=1,xr=xr,noerase=1,/negative_only,xtickformat='(A1)',xtit='',/xlog,/ylog,yr=yr;,ytickformat='(A1)'
                                
                            
                            if ct_filt ne 0 and ct_spec eq 0 then  dustem_plot_mlog,1/((*(*!dustem_data).uext).wav)(idx_filt),-((*(*!dustem_data).uext).values)(idx_filt),/nodata,ppositions=position[0],charsize=1.15,color='Dodger Blue',psym=16,syms=0.8,xs=1,xr=xr,noerase=1,/negative_only,xtickformat='(A1)',xtit='',/xlog,/ylog,yr=yr;,ytickformat='(A1)'
                            
                    
                        endelse
                        ;stop
                    endif
                
                endelse 
              
            end
            
            'PARAMETERS':begin ;needs the followingd data (errors+res+formats)
                
                p_dim = dustem_interp
                
                Npar=n_elements(p_dim)
                
                if keyword_set(refresh) then begin ;data in the parameter window that is being refreshed
                    
                    k=0    
                        
                    IF isa((*!dustem_fit).fixed_param_descs) THEN BEGIN
                        
                        Nfpar = n_elements((*(*!dustem_fit).fixed_param_descs))
                        res = (*(*!dustem_fit).fixed_param_init_values)
                        
                        FOR i=0L,Nfpar-1 DO BEGIN
                            
                            parameter_description = (*(*!dustem_fit).fixed_param_descs)[i]     
                            parameter_type = dustem_parameter_description2type(parameter_description,string_name=string_name)
                            
                            IF parameter_type NE 'PLUGIN' THEN BEGIN                       
                                yypos = 0.8 - k*0.09
                                k+=1
                            ENDIF 
                            
                        ENDFOR  
                         
                    ENDIF
                    
                    prms_dscs = (*(*!dustem_fit).param_descs)
                    prms_tps = strarr(n_elements(prms_dscs))
                    
                    for i=0L,n_elements(prms_dscs)-1 do begin
                        prms_tps[i] = dustem_parameter_description2type(prms_dscs[i])
                    endfor
                    
                    testprms = where(prms_tps ne 'PLUGIN', ct_data)
                    if ct_data ne 0 then begin
                    
                        if ~isa(yypos) then yypos = 0.8 else yypos-=0.22 ;not sure about this
                        
                        
                        res = dustem_interp
                        errors = dustem_spec
                        yypostmp = yypos
                        k=0
                        FOR i=0L,Npar-1 DO BEGIN ;---refreshing--- 
                          
                          parameter_description = (*(*!dustem_fit).param_descs)[i]
                          parameter_type = dustem_parameter_description2type(parameter_description,string_name=string_name)
                          testpop = STRUPCASE(strmid(strtrim(parameter_description,2),3,1,/reverse_offset)) EQ 'O'
                              
                            IF parameter_type EQ 'FORTRAN' then begin
                                if testpop then begin
                                      indpop=fix(STRUPCASE(strmid(strtrim(parameter_description,2),12,1,/reverse_offset)))
                                      string_name=(((*!dustem_params). GRAINS).grain_type)[indpop]
                                endif
                              
                                ;choosing a step of 0.09 in norm coordinates 
                                yypos = yypostmp - k*0.09 
                                ;xxpos = 0.0
                                
                                str= strtrim(string(res[i],format=frmt1) + textoidl(' \pm ') + string(errors(i),format=frmt1),2)
                                 
                                esc_txt = strjoin(replicate(' ', strlen(strtrim(string(string_name+' = ',format=frmt0),2))))
                                esc_txt = esc_txt+'   '
                                 
                                IF !dustem_end NE 0 THEN  esc_txt=strtrim(string(string_name+' = ',format=frmt0),2)+' ' ;so that ps file isn't distorted
                                                          
                                xyouts,0.5,yypos,string(esc_txt+str),color=0,alignment=0.5,/normal,charsize=1.
                                  
                                k+=1            
                                
                            ENDIF
                               
                        ENDFOR        
                        
                    ENDIF                        
                    
                endif else begin ;data in the parameter window that is unchanged 
                    
                    IF isa((*!dustem_fit).fixed_param_descs) THEN BEGIN
                        
                        Nfpar = n_elements((*(*!dustem_fit).fixed_param_descs))
                        res = (*(*!dustem_fit).fixed_param_init_values)
                        
                        iii=0
                        FOR i=0L,Nfpar-1 DO BEGIN
                            
                            parameter_description = (*(*!dustem_fit).fixed_param_descs)[i]     
                            parameter_type = dustem_parameter_description2type(parameter_description,string_name=string_name)
                            if parameter_type NE 'PLUGIN' then iii+=1 
                            
                        ENDFOR
                        
                        k = 0
                        if iii ne 0 then begin
                            xxpos = 0.5
                            yypos = 0.9 
                            
                            xyouts, xxpos, yypos, '___FROZEN___', charsize=1.2, alignment=0.5,/normal, color=cgcolor('red')
                        endif
                        
                        FOR i=0L,Nfpar-1 DO BEGIN
                            
                            parameter_description = (*(*!dustem_fit).fixed_param_descs)[i]     
                            parameter_type = dustem_parameter_description2type(parameter_description,string_name=string_name)
                            testpop = STRUPCASE(strmid(strtrim(parameter_description,2),3,1,/reverse_offset)) EQ 'O'
                            
                            IF parameter_type NE 'PLUGIN' THEN BEGIN ; don't know why I'm using this instead of EQ 'FORTRAN', they should be equivalent right since we don't use the 'wrapper' type.
                                
                                IF  testpop then begin
                                     
                                    indpop=fix(STRUPCASE(strmid(strtrim(parameter_description,2),12,1,/reverse_offset)))
                                    string_name=(((*!dustem_params). GRAINS).grain_type)[indpop]
                                    
                                ENDIF
                                
                                yypos = 0.8 - k*0.09
                                xxpos = 0.5  
                                
                                str=strtrim(string(string_name+' = ',format=frmt0)+string(res[i],format=frmt1),2)
                                
                                xyouts,xxpos,yypos,str,color=0,/normal,alignment=0.5,charsize=1.
                                k+=1
                            
                            ENDIF    
                             
                        ENDFOR  
                         
                    ENDIF
                    
                    
                    xxpos = 0.5 
                    
                    ;test so that this string isn't displayed when there are no free parameters: 
                    
                    prms_dscs = (*(*!dustem_fit).param_descs)
                    prms_tps = strarr(n_elements(prms_dscs))
                    
                    for i=0L,n_elements(prms_dscs)-1 do begin
                        prms_tps[i] = dustem_parameter_description2type(prms_dscs[i])
                    endfor
                    
                    testprms = where(prms_tps ne 'PLUGIN', ct_data)
                    
                    IF ct_data ne 0 then begin
                    
                        if ~isa(yypos) then yypos = 0.9 else yypos-=0.1*1.2 ;not sure about this
                    
                        xyouts, xxpos, yypos, '___FREE___', charsize=1.2, alignment=0.5,/normal,color=cgcolor('forest green')
                    
                        k=0   
                        res = dustem_interp
                        errors = dustem_spec
                    
                        yypos-=0.1
                        yypostmp = yypos
                        FOR i=0L,Npar-1 DO BEGIN  
                          
                          parameter_description = (*(*!dustem_fit).param_descs)[i]
                          parameter_type = dustem_parameter_description2type(parameter_description,string_name=string_name)
                          testpop = STRUPCASE(strmid(strtrim(parameter_description,2),3,1,/reverse_offset)) EQ 'O'
                          
                          IF  parameter_type EQ 'FORTRAN' then begin
                                
                                if testpop then begin
                                    indpop=fix(STRUPCASE(strmid(strtrim(parameter_description,2),12,1,/reverse_offset)))
                                    string_name=(((*!dustem_params). GRAINS).grain_type)[indpop]
                                endif
                                
                                yypos = yypostmp -  k*0.09
                                xxpos = 0.5   
                                                            
                                str=strtrim(string(string_name+' = ',format=frmt0),2)
                                  
                                esc_txt = strjoin(replicate(' ', strlen(strtrim(string(res[i],format=frmt1)+textoidl(' \pm ')+string(errors(i),format=frmt1),2))))  
                                
                                esc_txt = '   '+esc_txt
                                ;using cgwindow's weakness we can erase the last iteration so that the refreshed block does it. This is so that the ps file isn't scrambeld.
                                ;cgwindow runs all commands when the window is erased. Which happens at each refreshing (this means that cgwindow runs this block anyway). These are the rules when using the /replacecmd keyword.
                                 IF !dustem_end NE 0 THEN BEGIN
                                     esc_txt=''
                                     str=''
                                 ENDIF
                                 
                                xyouts,xxpos,yypos,str+esc_txt,color=0,alignment=0.5,/normal,charsize=1.
                                
                                k+=1            
                                
                          ENDIF
                          
                        
                        ENDFOR
                        
                    ENDIF
                        
                    
                endelse
            
            end
            
            'PLUGINS':begin ;plugins use the cgwindow 'bug' in another way. Instead of replacing the refreshed run by the last string we want displayed, it removes it and relies on the 'extra' run of the fixed part of the data that cgwindow carries.
                
                p_dim = dustem_interp
            
                Npar=n_elements(p_dim)
            
                if keyword_set(refresh) then begin ;(REFRESHED RUN) 
                    
                    IF isa((*!dustem_fit).fixed_param_descs) THEN BEGIN
                        
                        Nfpar = n_elements((*(*!dustem_fit).fixed_param_descs))
                        res = (*(*!dustem_fit).fixed_param_init_values)
                        k=0
                        FOR i=0L,Nfpar-1 DO BEGIN
                            
                            parameter_description = (*(*!dustem_fit).fixed_param_descs)[i]     
                            parameter_type = dustem_parameter_description2type(parameter_description,string_name=string_name)
                            
                            
                            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.5 
                                                                    
                                ;copied from params
                                
                                str= strtrim(string(res[i],format=frmt1) + textoidl(' \pm ') + string(errors(i),format=frmt1),2)
                                  
                                 
                                esc_txt = strjoin(replicate(' ', strlen(strtrim(string(strmid(string_name,7,ii-7)+' ['+strmid(string_name,ii+1)+']: '+prmtg+' = ',format=frmt0),2))))   
                                ;esc_txt = strjoin(replicate(' ', strlen(strtrim(string(string_name+' = ',format=frmt0),2))))
                                 
                                esc_txt = esc_txt+'   '
                            
                                 
                                IF !dustem_end NE 0 THEN  esc_txt = strtrim(string(strmid(string_name,7,ii-7)+' ['+strmid(string_name,ii+1)+']: '+prmtg+' = ',format=frmt0),2);esc_txt=strtrim(string(string_name+' = ',format=frmt0),2)+' ' ;so that ps file isn't distorted
                                                           
                                xyouts,0.5,yypos,string(esc_txt+str),color=0,alignment=0.5,/normal,charsize=1.                               
                               
                                k+=1
                                
                            ENDIF          
                                    
                        
                        ENDFOR
                    
                 ENDIF
                    
                endif else begin ;plotting of strings that are fixed
                    
                    
                    IF isa((*!dustem_fit).fixed_param_descs) THEN BEGIN
                        
                        Nfpar = n_elements((*(*!dustem_fit).fixed_param_descs))
                        res = (*(*!dustem_fit).fixed_param_init_values)
                        
                        iii=0
                        FOR i=0L,Nfpar-1 DO BEGIN
                            
                            parameter_description = (*(*!dustem_fit).fixed_param_descs)[i]     
                            parameter_type = dustem_parameter_description2type(parameter_description,string_name=string_name)
                            if parameter_type EQ 'PLUGIN' then iii+=1 
                            
                        ENDFOR
                        k = 0
                        if iii ne 0 then begin
                            xxpos = 0.5
                            yypos = 0.9
                            
                            xyouts, xxpos, yypos, '___FROZEN___', charsize=1.2,alignment=0.5, /normal, color=cgcolor('red')
                        endif
                        FOR i=0L,Nfpar-1 DO BEGIN
                            
                            parameter_description = (*(*!dustem_fit).fixed_param_descs)[i]     
                            parameter_type = dustem_parameter_description2type(parameter_description,string_name=string_name)
                            testpop = STRUPCASE(strmid(strtrim(parameter_description,2),3,1,/reverse_offset)) EQ 'O'
                            
                            IF parameter_type EQ 'PLUGIN' THEN BEGIN
                            
                                ii = strsplit(string_name,'_',count=countx) & ii = ii(countx-1)-1 ; Locating the last underscore to automate the extraction of the plugin's keyword 
                                mm = where(tag_names(*!dustem_plugin) eq strupcase(strmid(string_name,7,ii-7))) ;,coun) ; Selecting a plugin through matching the string name of the plugin form the scope system variable with the one read from the parameter description vector
                                prmtg = (*(*!dustem_plugin).(mm).paramtag)
                                indtg = (strmid(string_name,ii+1)) & indtg = strmid(indtg,0,/reverse_offset)     
                                indtg = fix(indtg)
                                prmtg = prmtg[indtg-1] 
                                
                                yypos = 0.8 - k*0.09
                                xxpos = 0.5  
                                
                                str = string(strmid(string_name,7,ii-7)+' ['+strmid(string_name,ii+1)+']: '+prmtg+' = ',format=frmt0)
                                str=strtrim(str,2)
                                str1=str+string(res[i],format=frmt1)
                    
                                xyouts,xxpos,yypos,str1,color=0,/normal,alignment=0.5,charsize=1.
                                k+=1
                             
                            ENDIF    
                             
                        ENDFOR  
                         
                    ENDIF
                    
                    xxpos = 0
                    
                    prms_dscs = (*(*!dustem_fit).param_descs)
                    prms_tps = strarr(n_elements(prms_dscs))
                     
                    for i=0L,n_elements(prms_dscs)-1 do begin
                        prms_tps[i] = dustem_parameter_description2type(prms_dscs[i])
                    endfor
                    
                    testprms = where(prms_tps EQ 'PLUGIN', ct_data)
                    
                    IF ct_data ne 0 then begin
                    
                    
                        if ~isa(yypos) then yypos = 0.9 else yypos-=0.1*1.2 ;not sure about this
    
                         xxpos = 0.5
    
                        xyouts, xxpos, yypos, '___FREE___', charsize=1.2, alignment=0.5,/normal,color=cgcolor('forest green')
                        
                        
                        k=0
                        res = dustem_interp
                        errors = dustem_spec
                        yypos-=0.1
                        yypostmp = yypos
                            
                        FOR i=0L,Npar-1 DO BEGIN  
                          
                            parameter_description = (*(*!dustem_fit).param_descs)[i]
                            parameter_type = dustem_parameter_description2type(parameter_description,string_name=string_name)
                            
                            
                            IF parameter_type EQ 'PLUGIN' THEN BEGIN
                                
                                ii = strsplit(string_name,'_',count=countx) & ii = ii(countx-1)-1 ; Locating the last underscore to automate the extraction of the plugin's keyword 
                                mm = where(tag_names(*!dustem_plugin) eq strupcase(strmid(string_name,7,ii-7))) ; ; Selecting a plugin through matching the string name of the plugin form the scope system variable with the one read from the parameter description vector
                                prmtg = (*(*!dustem_plugin).(mm).paramtag)
                                indtg = (strmid(string_name,ii+1)) & indtg = strmid(indtg,0,/reverse_offset)     
                                indtg = fix(indtg)
                                prmtg = prmtg[indtg-1] 
                                
                                yypos = yypostmp - k*0.09
                                xxpos = 0.5;15 
                                
                                
                                ;copied from params
                                ;str=strtrim(string(string_name+' = ',format=frmt0),2)
                                str = strtrim(string(strmid(string_name,7,ii-7)+' ['+strmid(string_name,ii+1)+']: '+prmtg+' = ',format=frmt0),2) 
                                esc_txt = strjoin(replicate(' ', strlen(strtrim(string(res[i],format=frmt1)+textoidl(' \pm ')+string(errors(i),format=frmt1),2))))   
                                ;esc_txt = strjoin(replicate(' ', strlen(strtrim(string(res[i],format=frmt1)+textoidl(' \pm ')+string(errors(i),format=frmt1),2))))  
                                 
                                esc_txt = '   '+esc_txt
                                
                                
                                 IF !dustem_end NE 0 THEN BEGIN
                                     esc_txt=''
                                     str=''
                                 ENDIF
                                 
                                 
                                xyouts,xxpos,yypos,str+esc_txt,color=0,alignment=0.5,/normal,charsize=1.
                                  
                                k+=1
                                
                            ENDIF
                              
                            
                        
                        ENDFOR
                    ENDIF
                endelse
             
            
            
            end
            
        
        endcase
    
    endfor

endif


;This is because I stupidly gave arrays/lists and their elements the same variable names.
;check beginning of loop. 
if keyword_set(dustem_interp) then dustem_interp = dustem_interp_sv
if keyword_set(dustem_spec) then dustem_spec = dustem_spec_sv 
if keyword_set(extra_spec) then extra_spec = extra_spec_sv 
if keyword_set(position) then position = position_sv


the_end:


END