PRO dustemwrap_plot_noobj,p_dim,st, $
                    dustem_sed,SED_spec, $
                    dustem_qsed,Q_spec, $
                    dustem_used,U_spec, $
                    dustem_polsed,P_spec, $
                    dustem_polfrac,SP_spec, $
                    dustem_psi_em,PSI_spec, $
                    dustem_ext,EXT_spec, $
                    dustem_qext,QEXT_spec, $
                    dustem_uext,UEXT_spec, $
                    dustem_polext,POLEXT_spec, $
                    dustem_fpolext,SPEXT_spec, $
                    dustem_psi_ext,PSIEXT_spec, $
                    _extra=_extra,help=help

;+
; NAME:
;    dustemwrap_plot_noobj
; PURPOSE:
;    plots dustemwrap observed sed, predicted sed, predicted spectra for total Intensity, polarization in emission and extinction without OOP routines
; CATEGORY:
;    DustEMWrap
; CALLING SEQUENCE:
;    dustemwrap_plot_noobj,p_dim,st,dustem_sed,SED_spec,dustem_qsed,Q_spec,dustem_used,U_spec,dustem_polsed,P_spec,dustem_polfrac,SP_spec,dustem_psi_em,PSI_spec,dustem_ext,EXT_spec,dustem_qext,QEXT_spec,dustem_uext,UEXT_spec,dustem_polext,POLEXT_spec,dustem_fpolext,SPEXT_spec,dustem_psi_ext,PSIEXT_spec,_extra=_extra 
; INPUTS:
;    p_dim
; OPTIONAL INPUT PARAMETERS:
;    st
;    dustem_sed
;    dustem_qsed
;    dustem_used
;    dustem_polsed
;    dustem_polfrac
;    dustem_psi_em
;    dustem_ext
;    dustem_qext
;    dustem_uext
;    dustem_polext
;    dustem_fpolext
;    dustem_psi_ext
; OUTPUTS:
;    dustem_sed
;    dustem_qsed
;    dustem_used
;    dustem_polsed
;    dustem_polfrac
;    dustem_psi_em
;    dustem_ext
;    dustem_qext
;    dustem_uext
;    dustem_polext
;    dustem_fpolext
;    dustem_psi_ext
;    SED_spec
;    Q_spec
;    U_spec
;    P_spec
;    SP_spec
;    PSI_spec
;    EXT_spec
;    QEXT_spec
;    UEXT_spec
;    POLEXT_spec
;    SPEXT_spec
;    PSIEXT_spec
; OPTIONAL OUTPUT PARAMETERS:
;    

; ACCEPTED KEY-WORDS:
;    help
; COMMON BLOCKS:
;    None
; SIDE EFFECTS:
;    Does a plot
; RESTRICTIONS:
;    The DustEM fortran code must be installed
;    The DustEMWrap IDL code must be installed
; PROCEDURES AND SUBROUTINES USED:
;
; EXAMPLES
;    
; MODIFICATION HISTORY:
;    Written by Ilyes Choubani
;    Evolution details on the DustEMWrap gitlab.
;-

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

;This is also necessary for the plotting of the results of the fit (Last iteration) 
IF not keyword_set(st) THEN BEGIN
  ;Activation of the plugins is needed because of the plotting of the total emission model that includes them. 
  dustem_activate_plugins,p_dim/(*(*!dustem_fit).param_init_values),st  ; 0/0 division case?
  
  ;# Emission
  ;if isa(!dustem_data.sed) then begin ;using !dustem_data instead of !dustem_show because in this release the user is compelled to fit IQU whether in M or X
  if not keyword_set(dustem_sed) and isa((*!dustem_data).sed) then begin ;better test?
  
      dustem_sed = dustem_compute_sed(p_dim,st,SED_spec)
      
      if !run_pol && !run_lin then begin
          
          dustem_polsed = dustem_compute_polsed(p_dim,st,P_spec,SP_spec,dustem_polfrac)
          toto = dustem_compute_stokes(p_dim,st,dustem_qsed,dustem_used,Q_spec,U_spec,PSI_spec,dustem_psi_em) 
        
          
      endif         
  endif
  
  ;# Extinction
;   if isa(!dustem_data.ext) then begin
  if not keyword_set(dustem_ext) and isa((*!dustem_data).ext) then begin
      dustem_ext = dustem_compute_ext(p_dim,st,EXT_spec)
      
      if !run_pol && !run_lin then begin
          
          dustem_polext = dustem_compute_polext(p_dim,st,POLEXT_spec,SPEXT_spec,dustem_fpolext)
          toto = dustem_compute_stokext(p_dim,st,dustem_qext,dustem_uext,QEXT_spec,UEXT_spec,PSIEXT_spec,dustem_psi_ext) 
          
      endif
  endif
  
ENDIF ELSE BEGIN ;st is provided 
    ;stop

    ;# Emission
    ;if isa(!dustem_data.sed) then begin
    if not keyword_set(dustem_sed) and isa((*!dustem_data).sed) then begin
        dustem_sed = dustem_compute_sed(p_dim,st,SED_spec)
        
        if !run_pol && !run_lin then begin
            
            dustem_polsed = dustem_compute_polsed(p_dim,st,P_spec,SP_spec,dustem_polfrac)
            toto = dustem_compute_stokes(p_dim,st,dustem_qsed,dustem_used,Q_spec,U_spec,PSI_spec,dustem_psi_em) 
            ;stop    
        endif
    endif
    
    ;# Extinction
    ;if isa(!dustem_data.ext) then begin
    
    if not keyword_set(dustem_ext) and isa((*!dustem_data).ext) then begin
    
        dustem_ext = dustem_compute_ext(p_dim,st,EXT_spec)
        
        if !run_pol && !run_lin then begin
            
            dustem_polext = dustem_compute_polext(p_dim,st,POLEXT_spec,SPEXT_spec,dustem_fpolext)
            toto = dustem_compute_stokext(p_dim,st,dustem_qext,dustem_uext,QEXT_spec,UEXT_spec,PSIEXT_spec,dustem_psi_ext) 
            
        endif
    endif
    
ENDELSE 

;IC: Will come back for this to include all datasets and their associated data.
;ADDING THIS BLOCK FOR COMPLETENESS
dd=(*(*!dustem_data).sed).values
ss=(*(*!dustem_data).sed).sigma
recomputed_chi2_sed   = total((dd-dustem_sed)^2/ss^2)
dof= n_elements((*(*!dustem_data).sed).values) - n_elements(*(*!dustem_fit).PARAM_DESCS)
recomputed_rchi2_sed  = recomputed_chi2_sed / dof

;print,'recomputed chi^2:',!dustem_iter.act,recomputed_rchi2_sed,recomputed_chi2_sed
mouchard=*!iteration_mouchard
new_mouchard=mouchard[0]
new_mouchard.iteration=!dustem_iter.act
new_mouchard.chi2=(*!dustem_fit).chi2
new_mouchard.rchi2=(*!dustem_fit).rchi2



;IC: I've commented this test below but it was uncommented. I don't understand its function. 
;Current parameter values including plugins have been available at each iteration prior to commenting this.
;Leaving as is.

;JPB: need here to store values of current parameter values (including plugins) into !iteration_mouchard
help,(*!dustem_fit).CURRENT_PARAM_VALUES   ;This is not currently filled up ...

;Below will work only for non plugin parameters
goto,skip1
param_descs=*(*!dustem_fit).param_descs
params_current=[0.D0]
FOR i=0L,n_elements(param_descs)-1 DO BEGIN
    str='params_current=[params_current,'+param_descs[i]+']'
    print,str
    toto=execute(str)
ENDFOR
params_current=params_current[1:*]
print,params_current

stop
skip1:
 
mouchard=[mouchard,new_mouchard]
!iteration_mouchard=ptr_new(mouchard)

;LIST OF TESTS THAT NEED TO BE RAN SO THAT THE PLOTTING OF THE MODEL SPECTRA OCCURS

test_sed = isa((*!dustem_show).sed)
test_ext = isa((*!dustem_show).ext)
if !run_pol then begin
    test_polext = isa((*!dustem_show).polext)
    test_polsed = isa((*!dustem_show).polsed)
    test_polfrac = isa((*!dustem_show).polfrac)
    test_fpolext = isa((*!dustem_show).fpolext)
    test_psi_em = isa((*!dustem_show).psi_em)
    test_psi_ext = isa((*!dustem_show).psi_ext)
    test_qsed = isa((*!dustem_show).qsed)
    test_used = isa((*!dustem_show).used)
    test_qext = isa((*!dustem_show).qext)
    test_uext = isa((*!dustem_show).uext)
    test_m = test_sed or test_polsed or test_polfrac or test_qsed or test_used or test_psi_em
    test_x = test_ext or test_polext or test_fpolext or test_qext or test_uext or test_psi_ext
endif else begin
    test_m = test_sed 
    test_x = test_ext 
endelse

;testing on the fitting of emission vs extinction data

n_plgns = n_tags(*!dustem_plugin)

frmt0='(A36)'
frmt1='(1E10.2)'
frmt2='(10F10.2)'

;Instead of setting the extra tags for plotting in dustemcgwin, we'll place them in this (parent) procedure. 
tgnms_extra = tag_names(_extra)



;I have decided to keep track of the command index manually as I did not find any command online that does this.
cmdind_m = 0 ;for emission
cmdind_x = 0 ;for extinction
;trying to do the same thing for parameters and plugins
cmdind_prms = 0 ;for parameters
cmdind_plgns = 0 ;for plugins

;ADDING PLUGIN(S) TO SPECTRUM----------------

;these following indices will be used to change the keep the same information in the _extra structure
;this is an initial solution until I finish coding the _extra-filtering procedure. 

iswinsed = !dustemcgwin_id.sed EQ la_undef()
iswinext = !dustemcgwin_id.ext EQ la_undef()

;trying to do the same thing for parameters and plugins
;But we need to know if the extinction or the emission mode is on.
;so the use of ths pointer will be different than the others
iswinprms = !dustemcgwin_id.prms EQ la_undef()
iswinplgns = !dustemcgwin_id.plgns EQ la_undef()


;plotstrct = !p
degtorad = !pi/180 ;factor that the arctan will be devided by in order to have an axis in degrees. Talk to JP maybe he wants angle in radians.

;I think I will test over the presence of the errors because they are not computed at that point.

;errors = ((*!dustem_fit).current_param_errors)
if isa((*!dustem_fit).current_param_errors) then begin
    errors = (*(*!dustem_fit).current_param_errors)
endif else begin
    errors = (*(*!dustem_fit).param_init_values)*0. 
ENDELSE 

if isa((*!dustem_fit).chi2) then begin
    chi2 = (*!dustem_fit).chi2    
endif else begin
    chi2 = la_undef()
endelse 

if isa((*!dustem_fit).rchi2) then begin
    rchi2 = (*!dustem_fit).rchi2    
endif else begin
    rchi2 = la_undef()
endelse 


if isa(p_dim) then res = p_dim  else res = (*(*!dustem_fit).param_init_values)*0.
 


;==== These are arameters for window positioning
if !run_pol then BEGIN
    wdelta_x=60
    main_wxsize=910
    main_wysize=658

    param_wxpos=main_wxsize+wdelta_x
    param_wypos=15
    param_wxsize=350
    param_wysize=200

    plugin_wxpos=main_wxsize+wdelta_x
    plugin_wypos=300
    plugin_wxsize=350
    plugin_wysize=200
ENDIF ELSE BEGIN
    wdelta_x=60
    main_wxsize=640  ;default of cgwindow
    main_wysize=512  ;default of cgwindow

    param_wxpos=main_wxsize+wdelta_x;700
    param_wypos=15
    param_wxsize=350
    param_wysize=200

    plugin_wxpos=main_wxsize+wdelta_x;700
    plugin_wypos=300
    plugin_wxsize=350
    plugin_wysize=200
ENDELSE

if test_m then begin
    ;Generating emission window and saving window ID
    
    ;if iswinsed then begin    ;This is when the cgwindow does not exist already
        
    TVLCT, 255, 255, 255, 254 ; White color
    !P.Color = 253
    !P.Background = 254
    
    if !run_pol then window,0, xsize=main_wxsize,ysize=main_wysize,title='DUSTEMWRAP '+!dustem_version.version+' (EMISSION)',xpos=0,ypos=0 else window, 0,xsize=main_wxsize,ysize=main_wysize,title='DUSTEMWRAP '+!dustem_version.version+' (EMISSION)',xpos=0, ypos=0;, wback='grey';,wobject=winobj_m
    
    ;Plotting model string (legend)
    xxpos = 0.015
    yypos = 0.97
    ;Plotting Hydrogen column density string (legend)
    cgtext, xxpos, yypos,'Model : '+!dustem_model,color=0,/normal,charsize = 1.2;,/addcmd ;& cmdind_m+=1 This is the first command in the window
    yypos = 0.95
    cgtext, xxpos, yypos,textoidl('N_{H}')+textoidl(' (H/cm^2) : ')+strmid(string(*!dustem_HCD,format='(1E10.2)'),2),color=0,/normal,charsize = 1.2;,/addcmd & cmdind_m+=1
    
    ;Plotting of the number of iterations completed by the fitter
    
    ;Plotting of the number of runs
    ;Getting the width of the unrefreshed string
    widthtot=0.
    ;cgtext, xxpos, yypos,'Runs : ',color=0,/normal,charsize=-1,width=thiswidth,/addcmd & cmdind_m+=1
    cgtext, xxpos, yypos,'Iteration : ',color=0,/normal,charsize=-1,width=thiswidth 
    widthtext = thiswidth
    widthtot+= thiswidth ;fixed width
    !dustemcgwin_ncmds.runs.txtwdth = thiswidth
    
    ;Getting the width of the refreshed string
    cgtext, xxpos, yypos,strtrim(!dustem_iter.act,2),color=0,/normal,charsize=-1,width=thiswidth 
    widthtot+= thiswidth;varying width        
    
    ;These two lines will also have to      be modified when plotting the refreshed values
    xxpos = 0.015 ;1.0 - widthtot - 0.03
    yypos = 0.015
    
    ;Displaying fixed part
    ;cgtext, xxpos, yypos,'Runs : ',color=0,/normal,charsize = 1.35,/addcmd & cmdind_m+=1
    cgtext, xxpos, yypos,'Iteration : ',color=0,/normal,charsize = 1.35 
    ;Displaying refreshed part (first run . This is the command that will be replaced)
    cgtext, xxpos + widthtext*1.35 + 0.015 , yypos,strtrim(!dustem_iter.act,2),color=0,/normal,charsize = 1.0 
    
    ;plotting of (mostly) fixed data for rchi2
    ;Since the format of the strings is specified, the length/width of the string in thex direction is fixed. 
    
    
    ;Getting the width of the unrefreshed string
    widthtot=0.
    cgtext, xxpos, yypos,textoidl('\chi^{2} : '),color=0,/normal,charsize=-1,width=thiswidth 
    widthtext = thiswidth
    widthtot+= thiswidth ;fixed width
    
    ;Getting the width of the refresh.ed string
    cgtext, xxpos, yypos,strtrim(string(chi2,format=frmt2),2),color=0,/normal,charsize=-1,width=thiswidth 
    widthtot+= thiswidth;varying width        
    ;saving the command string width to replace it
    
    xxpos = 1.0 - widthtot - 0.03
    
    yypos = 0.97
    
    ;Displaying fixed part
    cgtext, xxpos, yypos,textoidl('\chi^{2} : '),color=0,/normal,charsize = 1.0 
    ;Displaying refreshed part (first run . This is the command that will be replaced)
    
    cgtext, xxpos + widthtext , yypos,strtrim(string(chi2,format=frmt2),2),color=0,/normal,charsize = 1.0 
   
    
    ;plotting of (mostly) fixed data for rchi2
    
    ;Getting the width of the unrefreshed string
    widthtot=0.
    cgtext, xxpos, yypos,textoidl('r_{\chi^{2}} : '),color=0,/normal,charsize=-1,width=thiswidth 
    widthtext = thiswidth
    widthtot+= thiswidth ;fixed width
    ;!dustemcgwin_ncmds.rchi2.txtwdth1 = thiswidth
    ;Getting the width of the refreshed string
    cgtext, xxpos, yypos,strtrim(string(rchi2,format=frmt2),2),color=0,/normal,charsize=-1,width=thiswidth 
    widthtot+= thiswidth;varying width        
    
    
    ;These two lines will also have to      be modified when plotting the refreshed values
    xxpos = 1.0 - widthtot - 0.03
    yypos = 0.95
    
    ;Displaying fixed part
    cgtext, xxpos, yypos,textoidl('r_{\chi^{2}} : '),color=0,/normal,charsize = 1.35 
    ;Displaying refreshed part (first run . This is the command that will be replaced)
    cgtext, xxpos + widthtext , yypos,strtrim(string(rchi2,format=frmt2),2),color=0,/normal,charsize = 1.0 
    ;saving the command id to replace it 
    
    ;Plotting of the title of the dashboard (plot(s))
    
    
    ;NB issue here because the user can't modify the title after the dustem_mpfit_data call at the main procedure level (user proc)
    ;Getting the width of the title 
    tit=string(_extra.title);

    cgtext, 0.3, 0.95,tit+' (RUNNING)',color=0,/normal,charsize=-1,width=thiswidth 
    widthtot = thiswidth
    xxpos = (1 - thiswidth)/2
    yypos = 0.96
    
    cgtext, 0.3, 0.95,tit,color=0,/normal,charsize=-1,width=thiswidth 
     
    cgtext, xxpos, yypos,tit,color=0,/normal,charsize = 1.6 & cmdind_m+=1
    xxpos+=thiswidth*1.6
    cgtext, xxpos, yypos,' (RUNNING)',color=0,/normal,charsize = 1.6 
    
   if !run_pol then begin
        ;,wback='grey'
        
        ;position arrays for plot and normalized graph
        
        ;THIS IS HARD-CODED IN A VERY SILLY WAY
        
        p_sed = [0.05,0.67,0.475,0.90]
        p_psed = [0.525,0.67,0.95,0.90]
        p_spsed = [0.05,0.375,0.475,0.575]
        p_psised = [0.525,0.375,0.95,0.575]
        p_qsed = [0.05,0.12,0.475,0.35]  
        p_used = [0.525,0.12,0.95,0.35]
        
        np_sed = [0.05,0.60,0.475,0.67]
        np_psed = [0.525,0.60,0.95,0.67]
        np_qsed = [0.05,0.05,0.475,0.12] 
        np_used = [0.525,0.05,0.95,0.12]
        
        p_sed[1]+= 0.0125 & p_sed[3]+= 0.0125 
        p_psed[1]+= 0.0125 & p_psed[3]+= 0.0125
        p_spsed[1]+= 0.0125 & p_spsed[3]+= 0.0125
        p_psised[1]+= 0.0125 & p_psised[3]+= 0.0125
        p_qsed[1]+= 0.0125 & p_qsed[3]+= 0.0125
        p_used[1]+= 0.0125 & p_used[3]+= 0.0125
        
        np_sed[1]+= 0.0125 & np_sed[3]+= 0.0125 
        np_psed[1]+= 0.0125 & np_psed[3]+= 0.0125
        np_qsed[1]+= 0.0125 & np_qsed[3]+= 0.0125
        np_used[1]+= 0.0125 & np_used[3]+= 0.0125
        
        
          
    endif else begin
        p_sed  = [0.07,0.30,0.97,0.85]
        np_sed = [0.07,0.10,0.97,0.30]
    
    endelse

    ;Plotting of sed data axes (whether or not data is present)
    plotsym,0,/fill ;you might need to execute this again. hmm...
;stop

    ;This is not the right test the user might want to show the prediction for sed and fit the stokes parameters
    if ~test_sed then begin ; SED data is not present (For completeness) # This is only valid when !run_pol=1
        
        dustem_plot_dataset, st, dataset='SED', /nodata, position=p_sed, _extra=_extra 
        dustem_plot_dataset, st, dataset='SED', /nodata, /norm, position=np_sed, _extra=_extra 

    endif else begin ;SED exists
           ;this plots the observed SED
           dustem_plot_dataset, st, dataset='SED', position=p_sed, _extra=_extra
           ;this plots the predicted spectrum and predicted SED
           dustem_plot_dataset, st, dustem_sed,SED_spec, dataset='SED', /refresh ,position=p_sed, _extra=_extra 
           ;This plots an empty normalized plot
           dustem_plot_dataset, st, dataset='SED',/norm, position=np_sed, _extra=_extra ;I think nodata can also be used too
           ;This plots the normalized observed SED - best fit
           dustem_plot_dataset, st, dustem_sed,SED_spec, dataset='SED', /norm, /refresh,position=np_sed, _extra=_extra 
    endelse
    

      if !run_pol then begin ;then goto, end_m
        
        if ~test_qsed then begin ;Qsed is not present
            
            dustem_plot_dataset, st, dataset='QSED', /nodata, position=p_qsed, _extra=_extra 
            dustem_plot_dataset, st, dataset='QSED', /nodata, /norm, position=np_qsed, _extra=_extra 
        
        endif else begin ;Qsed data is present
                
            ;Plotting of postive values if they exist (if hidden data is present it is plotted if not an empty plot is rendered)
            dustem_plot_dataset, st, dataset='QSED', position=p_qsed,/positive_only, _extra=_extra 
            ;Refreshing the positive_only plot ONLY if there is data. If not do nothing
            dustem_plot_dataset, st, dustem_qsed,Q_spec, dataset='QSED',/positive_only, /refresh ,position=p_qsed, _extra=_extra 
            
             
            dustem_plot_dataset, st, dataset='QSED', position=p_qsed, /addcmd,/negative_only, _extra=_extra 
            ;Refreshing the negative_only plot ONLY if there is data. If not do nothing
            dustem_plot_dataset, st, dustem_qsed,Q_spec,dataset='QSED',/negative_only, /refresh ,position=p_qsed, _extra=_extra
            
            
            dustem_plot_dataset, st, dataset='QSED',/norm, position=np_qsed, _extra=_extra  ;I think nodata can also be uqsed too
            dustem_plot_dataset, st, dustem_qsed,Q_spec,dataset='QSED', /norm, /refresh,position=np_qsed, _extra=_extra 
               
      endelse
      
         
              
        if ~test_used then begin ;used is not present
            
            dustem_plot_dataset, st, dataset='USED', /nodata, position=p_used, _extra=_extra 
            dustem_plot_dataset, st, dataset='USED', /nodata, /norm, position=np_used, _extra=_extra 
            
        endif else begin ;used data is present
                       
            ;Plotting of postive values if they exist (if hidden data is present it is plotted if not an empty plot is rendred)
            dustem_plot_dataset, st, dataset='USED', position=p_used,/positive_only, _extra=_extra 
            ;Refreshing the positive_only plot ONLY if there is data. If not do nothing
            dustem_plot_dataset, st, dustem_used,U_spec, dataset='USED',/positive_only, /refresh ,position=p_used, _extra=_extra 
            
            dustem_plot_dataset, st, dataset='USED', position=p_used, winid=winid_m,/negative_only, _extra=_extra 
            ;Refreshing the negative_only plot ONLY if there is data. If not do nothing
            dustem_plot_dataset, st, dustem_used,U_spec, dataset='USED',/negative_only, /refresh ,position=p_used, _extra=_extra 
            
            dustem_plot_dataset, st, dataset='USED',/norm, position=np_used, _extra=_extra ;I think nodata can also be uused too
            dustem_plot_dataset, st, dustem_used,U_spec, dataset='USED', /norm, /refresh,position=np_used, _extra=_extra 
              
      endelse
      
      if ~test_psi_em then begin ; psi_em data is not present (For completeness) # This is only valid when !run_pol=1
          
          dustem_plot_dataset, st, dataset='psi_em', /nodata, position=p_psised, /addcmd, winid=winid_m, _extra=_extra

      endif else begin ;psi_em exists
         
        dustem_plot_dataset, st, dataset='psi_em', position=p_psised, _extra=_extra 
        dustem_plot_dataset, st, dustem_psi_em,PSI_spec, dataset='psi_em', /refresh ,position=p_psised, _extra=_extra
                   
      endelse
        
      
      if ~test_polsed then begin ; polsed data is not present (For completeness) # This is only valid when !run_pol=1
          
          dustem_plot_dataset, st, dataset='polsed', /nodata, position=p_psed, _extra=_extra 
          dustem_plot_dataset, st, dataset='polsed', /nodata, /norm, position=np_psed, _extra=_extra

      endif else begin 
      
        dustem_plot_dataset, st, dataset='polsed', position=p_psed, _extra=_extra
        dustem_plot_dataset, st, dustem_polsed,P_spec, dataset='polsed', /refresh ,position=p_psed, _extra=_extra 
      
        dustem_plot_dataset, st, dataset='polsed',/norm, position=np_psed, _extra=_extra ;I think nodata can also be upolsed too
        dustem_plot_dataset, st, dustem_polsed,P_spec, dataset='polsed', /norm, /refresh,position=np_psed, _extra=_extra
            
      endelse      
      
      
      if ~test_polfrac then begin ; polfrac data is not present (For completeness) # This is only valid when !run_pol=1
          
          dustem_plot_dataset, st, dataset='polfrac', /nodata, position=p_spsed, _extra=_extra

      endif else begin ;polfrac exists


         dustem_plot_dataset, st, dataset='polfrac', position=p_spsed, _extra=_extra 
         dustem_plot_dataset, st, dustem_polfrac,SP_spec,SED_spec, dataset='polfrac', /refresh ,position=p_spsed, _extra=_extra 

      endelse  
      

    ENDIF
    
         
ENDIF 



;stop
if test_x then begin
    ;Generating extinction window and saving window ID
    if !run_pol then window,1,xsize=main_wxsize,ysize=main_wysize,title='DUSTEMWRAP '+!dustem_version.version+' (EXTINCTION)' else window,1,xsize=main_wxsize,ysize=main_wysize,title='DUSTEMWRAP '+!dustem_version.version+' (EXTINCTION)';, wback='grey';,wobject=winobj_m
    
    
    ;Plotting model string (legend)
    xxpos = 0.015
    yypos = 0.97
    ;Plotting Hydrogen column density string (legend)
    cgtext, xxpos, yypos,'Model : '+!dustem_model,color=0,/normal,charsize = 1.2;,/addcmd ;& cmdind_m+=1 This is the first command in the window
    yypos = 0.95
    cgtext, xxpos, yypos,textoidl('N_{H}')+textoidl(' (H/cm^2) : ')+strmid(string(*!dustem_HCD,format='(1E10.2)'),2),color=0,/normal,charsize = 1.2
    
    ;Plotting of the number of iterations completed by the fitter
    
    ;Plotting of the number of runs
    ;Getting the width of the unrefreshed string
    widthtot=0.
    ;cgtext, xxpos, yypos,'Runs : ',color=0,/normal,charsize=-1,width=thiswidth,/addcmd & cmdind_x+=1
    cgtext, xxpos, yypos,'Iteration : ',color=0,/normal,charsize=-1,width=thiswidth
    widthtext = thiswidth
    widthtot+= thiswidth ;fixed width
    
    ;Getting the width of the refreshed string
    cgtext, xxpos, yypos,strtrim(!dustem_iter.act,2),color=0,/normal,charsize=-1,width=thiswidth
    widthtot+= thiswidth;varying width        
    
    ;These two lines will also have to      be modified when plotting the refreshed values
    xxpos = 0.015 ;1.0 - widthtot - 0.03
    yypos = 0.015
    
    ;Displaying fixed part
    ;cgtext, xxpos, yypos,'Runs : ',color=0,/normal,charsize = 1.35,/addcmd & cmdind_x+=1
    cgtext, xxpos, yypos,'Iteration : ',color=0,/normal,charsize = 1.35
    ;Displaying refreshed part (first run . This is the command that will be replaced)
    cgtext, xxpos + widthtext + 0.015 , yypos,strtrim(!dustem_iter.act,2),color=0,/normal,charsize = 1.0
    ;saving the command id to replace it
    
    
    ;plotting of (mostly) fixed data for rchi2
    ;Since the format of the strings is specified, the length/width of the string in thex direction is fixed. 
    
    
    ;Getting the width of the unrefreshed string
    widthtot=0.
    cgtext, xxpos, yypos,textoidl('\chi^{2} : '),color=0,/normal,charsize=-1,width=thiswidth
    widthtext = thiswidth
    widthtot+= thiswidth ;fixed width
    
    ;Getting the width of the refresh.ed string
    cgtext, xxpos, yypos,strtrim(string(chi2,format=frmt2),2),color=0,/normal,charsize=-1,width=thiswidth
    widthtot+= thiswidth;varying width        
    ;saving the command string width to replace it
    
    
    xxpos = 1.0 - widthtot - 0.03
    
    yypos = 0.97
    
    ;Displaying fixed part
    cgtext, xxpos, yypos,textoidl('\chi^{2} : '),color=0,/normal,charsize = 1.0
    ;Displaying refreshed part (first run . This is the command that will be replaced)
    
    cgtext, xxpos + widthtext , yypos,strtrim(string(chi2,format=frmt2),2),color=0,/normal,charsize = 1.0
    
    ;saving the command id to replace it
      
    
    
    ;plotting of (mostly) fixed data for rchi2
    
    ;Getting the width of the unrefreshed string
    widthtot=0.
    cgtext, xxpos, yypos,textoidl('r_{\chi^{2}} : '),color=0,/normal,charsize=-1,width=thiswidth
    widthtext = thiswidth
    widthtot+= thiswidth ;fixed width
    ;!dustemcgwin_ncmds.rchi2.txtwdth1 = thiswidth
    ;Getting the width of the refreshed string
    cgtext, xxpos, yypos,strtrim(string(rchi2,format=frmt2),2),color=0,/normal,charsize=-1,width=thiswidth
    widthtot+= thiswidth;varying width        
    
    ;These two lines will also have to      be modified when plotting the refreshed values
    xxpos = 1.0 - widthtot - 0.03
    yypos = 0.95
    
    ;Displaying fixed part
    cgtext, xxpos, yypos,textoidl('r_{\chi^{2}} : '),color=0,/normal,charsize = 1.35
    ;Displaying refreshed part (first run . This is the command that will be replaced)
    cgtext, xxpos + widthtext , yypos,strtrim(string(rchi2,format=frmt2),2),color=0,/normal,charsize = 1.0
    ;saving the command id to replace it
    
    
    ;Plotting of the title of the dashboard (plot(s))
    
    ;NB: JP is right, the user should be able to set the entirety of the title.
    ;Make this block aware of the saving of the data  (from the fits table)
    
    
    ;Getting the width of the title 
    tit=string(_extra.title);
    
    cgtext, 0.3, 0.95,tit+' (RUNNING)',color=0,/normal,charsize=-1,width=thiswidth
    widthtot = thiswidth
    xxpos = (1 - thiswidth)/2
    yypos = 0.96
    
    cgtext, 0.3, 0.95,tit,color=0,/normal,charsize=-1,width=thiswidth
      
    cgtext, xxpos, yypos,tit,color=0,/normal,charsize = 1.6
    xxpos+=thiswidth*1.6
    cgtext, xxpos, yypos,' (RUNNING)',color=0,/normal,charsize = 1.6
    
   
    if !run_pol then begin
       
        ;position arrays for plot and normalized graph
        
        ;THIS IS HARD-CODED IN A VERY SILLY WAY
        
        p_ext = [0.05,0.67,0.475,0.90]
        p_pext = [0.525,0.67,0.95,0.90]
        p_spext = [0.05,0.375,0.475,0.575] ; Should we plot this? tau_polext/tau_ext_tot. YES FOR NOW...
        p_psiext = [0.525,0.375,0.95,0.575]
        p_qext = [0.05,0.12,0.475,0.35]  
        p_uext = [0.525,0.12,0.95,0.35]
        
        np_ext = [0.05,0.60,0.475,0.67]
        np_pext = [0.525,0.60,0.95,0.67]
        np_qext = [0.05,0.05,0.475,0.12] 
        np_uext = [0.525,0.05,0.95,0.12]
        
        p_ext[1]+= 0.0125 & p_ext[3]+= 0.0125 
        p_pext[1]+= 0.0125 & p_pext[3]+= 0.0125
        p_spext[1]+= 0.0125 & p_spext[3]+= 0.0125
        p_psiext[1]+= 0.0125 & p_psiext[3]+= 0.0125
        p_qext[1]+= 0.0125 & p_qext[3]+= 0.0125
        p_uext[1]+= 0.0125 & p_uext[3]+= 0.0125
        
        np_ext[1]+= 0.0125 & np_ext[3]+= 0.0125 
        np_pext[1]+= 0.0125 & np_pext[3]+= 0.0125
        np_qext[1]+= 0.0125 & np_qext[3]+= 0.0125
        np_uext[1]+= 0.0125 & np_uext[3]+= 0.0125
        
        
          
    endif else begin
        p_ext  = [0.07,0.30,0.97,0.85]
        np_ext = [0.07,0.10,0.97,0.30]
    
    endelse

    ;Plotting of sed data axes (whether or not data is present)
    plotsym,0,/fill ;you might need to execute this again. hmm...


    ;This is not the right test the user might want to show the prediction for sed and fit the stokes parameters
    if ~test_ext then begin ; EXT data is not present (For completeness) # This is only valid when !run_pol=1
        
        dustem_plot_dataset, st, dataset='EXT', /nodata, position=p_ext, _extra=_extra 
        dustem_plot_dataset, st, dataset='EXT', /nodata, /norm, position=np_ext, _extra=_extra

    endif else begin ;EXT exists
      
        dustem_plot_dataset, st, dataset='EXT', position=p_ext, _extra=_extra
        dustem_plot_dataset, st, dustem_ext,EXT_spec, dataset='EXT', /refresh ,position=p_ext, _extra=_extra 
        
        dustem_plot_dataset, st, dataset='EXT',/norm, position=np_ext, _extra=_extra ;I think nodata can also be used too
        
        dustem_plot_dataset, st, dustem_ext,EXT_spec, dataset='EXT', /norm, /refresh,position=np_ext, _extra=_extra 
               
    endelse
    
    
      if !run_pol then begin 
        
        if ~test_qext then begin ;Qext is not present
            
            dustem_plot_dataset, st, dataset='QEXT', /nodata, position=p_qext, _extra=_extra 
            dustem_plot_dataset, st, dataset='QEXT', /nodata, /norm, position=np_qext, _extra=_extra 
        
        endif else begin ;Qext data is present
                    
            ;Plotting of postive values if they exist (if hidden data is present it is plotted if not an empty plot is rendered)
            dustem_plot_dataset, st, dataset='QEXT', position=p_qext,/positive_only, _extra=_extra 
            ;Refreshing the positive_only plot ONLY if there is data. If not do nothing
            
            dustem_plot_dataset, st, dustem_qext,QEXT_spec, dataset='QEXT',/positive_only, /refresh ,position=p_qext, _extra=_extra 
            
            dustem_plot_dataset, st, dataset='QEXT', position=p_qext,/negative_only, _extra=_extra
            ;Refreshing the negative_only plot ONLY if there is data. If not do nothing
            dustem_plot_dataset, st, dustem_qext,QEXT_spec,dataset='QEXT',/negative_only, /refresh ,position=p_qext, _extra=_extra
        
            dustem_plot_dataset, st, dataset='QEXT',/norm, position=np_qext, _extra=_extra ;I think nodata can also be uqsed too
            dustem_plot_dataset, st, dustem_qext,QEXT_spec,dataset='QEXT', /norm, /refresh,position=np_qext, _extra=_extra

      endelse
          ;stop        
        if ~test_uext then begin ;uext is not present
            
            dustem_plot_dataset, st, dataset='UEXT', /nodata, position=p_uext, _extra=_extra
            dustem_plot_dataset, st, dataset='UEXT', /nodata, /norm, position=np_uext, _extra=_extra 
        
        endif else begin ;uext data is present
            
            ;stop
                ;Plotting of postive values if they exist (if hidden data is present it is plotted if not an empty plot is rendred)
                dustem_plot_dataset, st, dataset='UEXT', position=p_uext,/positive_only, _extra=_extra
                
                ;Refreshing the positive_only plot ONLY if there is data. If not do nothing
                dustem_plot_dataset, st, dustem_uext,UEXT_spec, dataset='UEXT',/positive_only, /refresh ,position=p_uext, _extra=_extra 
                
              
                dustem_plot_dataset, st, dataset='UEXT', position=p_uext,/negative_only, _extra=_extra 
                ;Refreshing the negative_only plot ONLY if there is data. If not do nothing
                dustem_plot_dataset, st, dustem_uext,UEXT_spec, dataset='UEXT',/negative_only, /refresh ,position=p_uext, _extra=_extra
                
                
                dustem_plot_dataset, st, dataset='UEXT',/norm, position=np_uext, _extra=_extra ;I think nodata can also be uused too
                dustem_plot_dataset, st, dustem_uext,UEXT_spec, dataset='UEXT', /norm, /refresh,position=np_uext, _extra=_extra 
            
                      
      endelse
      
      if ~test_psi_ext then begin ; psi_ext data is not present (For completeness) # This is only valid when !run_pol=1
          
          dustem_plot_dataset, st, dataset='PSI_EXT', /nodata, position=p_psiext, _extra=_extra  

      endif else begin ;psi_ext exists

              dustem_plot_dataset, st, dataset='psi_ext', position=p_psiext, _extra=_extra 
              dustem_plot_dataset, st, dustem_psi_ext,PSIEXT_spec, dataset='psi_ext', /refresh ,position=p_psiext, _extra=_extra 
              
              
      endelse
        
      
      if ~test_polext then begin ; polext data is not present (For completeness) # This is only valid when !run_pol=1
          
          dustem_plot_dataset, st, dataset='polext', /nodata, position=p_pext, _extra=_extra 
          dustem_plot_dataset, st, dataset='polext', /nodata, /norm, position=np_pext, _extra=_extra 

      endif else begin ;polext exists

        dustem_plot_dataset, st, dataset='polext', position=p_pext, _extra=_extra 
        dustem_plot_dataset, st, dustem_polext,POLEXT_spec, dataset='polext', /refresh ,position=p_pext, _extra=_extra 
         
        dustem_plot_dataset, st, dataset='polext',/norm, position=np_pext, _extra=_extra  ;I think nodata can also be upolsed too
        dustem_plot_dataset, st, dustem_polext,POLEXT_spec, dataset='polext', /norm, /refresh,position=np_pext, _extra=_extra 
        
      endelse      
      
      
      if ~test_fpolext then begin ; fpolext data is not present (For completeness) # This is only valid when !run_pol=1
          
          dustem_plot_dataset, st, dataset='fpolext', /nodata, position=p_spext, _extra=_extra  
          

      endif else begin ;fpolext exists

        
        dustem_plot_dataset, st, dataset='fpolext', position=p_spext, _extra=_extra 
        dustem_plot_dataset, st, dustem_fpolext,SPEXT_spec,EXT_spec, dataset='fpolext', /refresh ,position=p_spext, _extra=_extra


      endelse  
      

    ENDIF
        
     
          
ENDIF 


;PLOTTING OF THE PARAMETERS
window,2,xpos=param_wxpos,ypos=param_wypos,xsize=param_wxsize,ysize=param_wysize,title='DUSTEMWRAP '+!dustem_version.version+' (PARAMETERS)' ; keeping the same y dimension of the emission/extinction plot? 
dustem_plot_dataset, st, res, errors, p_dim,dataset='PARAMETERS',_extra=_extra ;& cmdind_prms+=1
dustem_plot_dataset, st, res, errors, p_dim,dataset='PARAMETERS',/refresh, _extra=_extra 

;PLOTTING OF THE PLUGINS
IF (tag_names(*!dustem_plugin))(0) NE 'NONE' THEN BEGIN  
    
    window,3,xpos=plugin_wxpos,ypos=plugin_wypos,xsize=plugin_wxsize,ysize=plugin_wysize,title='DUSTEMWRAP '+!dustem_version.version+' (PLUGINS)' ; keeping the same y dimension of the emission/extinction plot? 
    dustem_plot_dataset, st, res, errors, p_dim,dataset='PLUGINS',_extra=_extra ;& cmdind_prms+=1
    dustem_plot_dataset, st, res, errors, p_dim,dataset='PLUGINS', /refresh , winid=winid_plgns, _extra=_extra 
     
ENDIF

the_end:

END