PRO dustemwrap_plot_noobj, p_dim, $ st = st, $ dustem_sed = dustem_sed, $ SED_spec = SED_spec, $ dustem_qsed = dustem_qsed, $ Q_spec = Q_spec, $ dustem_used = dustem_used, $ U_spec = U_spec, $ dustem_polsed = dustem_polsed, $ P_spec = P_spec, $ dustem_polfrac = dustem_polfrac, $ SP_spec = SP_spec, $ dustem_psi_em = dustem_psi_em, $ PSI_spec = PSI_spec, $ dustem_ext = dustem_ext, $ EXT_spec = EXT_spec, $ dustem_qext = dustem_qext, $ QEXT_spec = QEXT_spec, $ dustem_uext = dustem_uext, $ UEXT_spec = UEXT_spec, $ dustem_polext = dustem_polext, $ POLEXT_spec = POLEXT_spec, $ dustem_fpolext = dustem_fpolext, $ SPEXT_spec = SPEXT_spec, $ dustem_psi_ext = dustem_psi_ext, $ PSIEXT_spec = 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 = dustemwrap free parameter values ; OPTIONAL INPUT PARAMETERS: ; st = dustemwrap structure. ; 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: ; OPTIONAL OUTPUT PARAMETERS: ; st = currently returns dustemwrap structure if not provided as an entry. ; 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 ; 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=st ENDIF ;==== compute emission and emission polarization SED if not provided IF NOT keyword_set(dustem_sed) AND isa((*!dustem_data).sed) THEN BEGIN dustem_sed = dustem_compute_sed(p_dim,st=st,SED_spec=SED_spec) IF !run_pol AND !run_lin AND tag_exist(*!dustem_show,'qsed') THEN BEGIN dustem_polsed = dustem_compute_polsed(p_dim,st=st,P_spec=P_spec,SP_spec=SP_spec,dustem_polfrac=dustem_polfrac) toto = dustem_compute_stokes(p_dim,st=st,Q_spec=Q_spec,U_spec=U_spec,PSI_spec=PSI_spec,dustem_psi_em=dustem_psi_em) dustem_qsed = toto[0] dustem_used = toto[1] ENDIF ENDIF ;==== compute extinction and extinction polarization SED if not provided IF NOT keyword_set(dustem_ext) AND isa((*!dustem_data).ext) THEN BEGIN dustem_ext = dustem_compute_ext(p_dim,st=st,EXT_spec=EXT_spec) IF !run_pol AND !run_lin AND tag_exist(*!dustem_show,'qext') THEN BEGIN dustem_polext = dustem_compute_polext(p_dim,st=st,polext_spec=POLEXT_spec,spext_spec=SPEXT_spec,dustem_fpolext=dustem_fpolext) toto = dustem_compute_stokext(p_dim,st=st,QEXT_spec=QEXT_spec,UEXT_spec=UEXT_spec,PSIEXT_spe=PSIEXT_spec,dustem_psi_ext=dustem_psi_ext) dustem_qext = toto[0] dustem_uext = toto[1] ENDIF ENDIF ;==== This section is to keep track of chi2 evolution during fit iterations. 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 mouchard=[mouchard,new_mouchard] !iteration_mouchard=ptr_new(mouchard) ;===========Initializing tests test_sed = isa((*!dustem_data).sed) test_ext = isa((*!dustem_data).ext) ;===========Bunch of tests that are not important now but that ;might be in future releases. To adjust the layout of the dashboard for instance if !run_pol then begin if tag_exist(*!dustem_show,'qsed') then begin ;testing to account for the fact that the user can activate the !run_pol keyword without knowing ;ie: using a dust model with polarization w/o polarization data present... test_polsed = isa((*!dustem_show).polsed) test_polfrac = isa((*!dustem_show).polfrac) test_qsed = isa((*!dustem_show).qsed) test_used = isa((*!dustem_show).used) test_psi_em = isa((*!dustem_show).psi_em) endif if tag_exist(*!dustem_show,'qext') then begin test_polext = isa((*!dustem_show).polext) test_psi_ext = isa((*!dustem_show).psi_ext) test_fpolext = isa((*!dustem_show).fpolext) test_qext = isa((*!dustem_show).qext) test_uext = isa((*!dustem_show).uext) endif if tag_exist(*!dustem_show,'qsed') then test_m = test_sed or test_polsed $ or test_polfrac or test_qsed $ or test_used or test_psi_em if tag_exist(*!dustem_show,'qext') then test_x = test_ext or test_polext $ or test_fpolext or test_qext $ or test_uext or test_psi_ext if ~tag_exist(*!dustem_show,'qsed') then test_m = test_sed if ~tag_exist(*!dustem_show,'qext') then test_x = test_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) dustem_set_plot_range,test_sed, test_ext,_extra= _extra ;change starts form here!!!! ;===========Retrieving some data relevant to the plotting if isa((*!dustem_fit).current_param_errors) then begin errors = (*(*!dustem_fit).current_param_errors) ;* (*(*!dustem_fit).param_init_values) ;multiplied internally in dustem_mpfit. Should maybe be changed. endif else begin errors = (*(*!dustem_fit).param_init_values)*0.;+la_undef();Initialized to 0 instead of la_undef() ENDELSE if isa((*!dustem_fit).chi2) then begin chi2 = (*!dustem_fit).chi2 endif else begin chi2 = la_undef();maybe not the best initialization endelse if isa((*!dustem_fit).rchi2) then begin rchi2 = (*!dustem_fit).rchi2 endif else begin rchi2 = la_undef();maybe not the best initialization endelse ;===========Window positionning parameters if !run_pol and tag_exist(*!dustem_show,'qsed') 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 ;JPB: I moved these 3 lines out of the if test, so that they apply also ;when only extinction is present TVLCT, 255, 255, 255, 254 ; White color !P.Color = 253 !P.Background = 254 if test_m then begin ;Generating emission window and saving window ID IF !d.name NE 'PS' THEN BEGIN ;What if we're trying to create a ps file with the exact display of the dashboard? window,0, xsize=main_wxsize,ysize=main_wysize,title='DUSTEMWRAP '+!dustem_version.version+' (EMISSION)',xpos=0,ypos=0 ENDIF ;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 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 xxpos = 1.0 - widthtot - 0.03 yypos = 0.97 ;Displaying fixed part cgtext, xxpos, yypos,textoidl('\chi^{2} : '),color=0,/normal,charsize = 1.0 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 cgtext, xxpos + widthtext , yypos,strtrim(string(rchi2,format=frmt2),2),color=0,/normal,charsize = 1.0 ;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=!dustem_plot_range.title_m xxpos = 0.5 yypos =0.96 ;the runs inbetween if !dustem_end EQ 0 then cgtext, xxpos , yypos,tit+' (RUNNING)',color=0,/normal,charsize = 1.6,alignment=0.5 ;subsequent iterations to the end of the fit if !dustem_end EQ -1 then cgtext, xxpos , yypos,tit,color=0,/normal,charsize = 1.6,alignment=0.5 ;last iteration of the fit if !dustem_end EQ 1 then cgtext, xxpos , yypos,tit+' (FINAL RUN)',color=0,/normal,charsize = 1.6,alignment=0.5 if !run_pol and tag_exist(*!dustem_show,'qsed') 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 plotsym,0,/fill ;block for the collective plotting of the datasets - copied as is if !run_pol and tag_exist(*!dustem_show,'qsed') then begin ;This part can be adjusted for future releases if the user wants to plot ;specific datasets ;lists because elements have different dimensions and/or we want entire arrays as elements dustem_interp = list(dustem_sed,dustem_polfrac,dustem_qsed,dustem_used,dustem_psi_em,dustem_polsed) ;DustEmWrap SED predictions dustem_spec = list(SED_spec,SP_spec,Q_spec,U_spec,PSI_spec,P_spec) ;DustEM spectra predictions extra_spec = list(0,SED_spec,0,0,0,0) ;extra spectra that the dataset needs in order to be plotted. ;This (extra_spec use) actually should not be generalized since the only case we need an extra spectrum is when plotting the polarization fraction. position = list(list(p_sed,np_sed),list(p_spsed),list(p_qsed,np_qsed),list(p_used,np_used),list(p_psised),list(p_psed,np_psed)) ;these don't have to be lists datasets = ['SED','POLFRAC','QSED','USED','PSI_EM','POLSED'] ;but these can be combined using a list but we're leaving it as is for the moment... positiveonly = [0,0,1,1,0,0] ;used for q and u negativeonly = [0,0,1,1,0,0] ;used for q and u ENDIF ELSE BEGIN dustem_interp = list(dustem_sed) ;DustEmWrap SED predictions . dustem_spec = list(SED_spec) ;DustEM spectra predictions position = list(p_sed,np_sed);list(list(p_sed,np_sed)) ; I think I need this ... ;position_n =list(np_sed) datasets = ['SED'] ;replace by one keyword? positiveonly=[0] ;kept it for completeness. Also this loop reminds me that JP also wants the user to be able to display one dataset. negativeonly=[0] ENDELSE ; PLOTTING OF DATA THAT IS UNCHAED dustem_plot_dataset,st,dataset=datasets,position=position $ ,positive_only=positiveonly,negative_only=negativeonly, _extra=_extra ; REFRESHING DATA - to plot the refreshed data for the first time. dustem_plot_dataset,st,dustem_interp,dustem_spec,extra_spec=extra_spec $ ,dataset=datasets,positive_only=positiveonly,negative_only=negativeonly $ ,/refresh,position=position,_extra=_extra ENDIF ;stop if test_x then begin ;Generating extinction window and saving window ID ;the 'PS' condition pertaining to fawlty debugging is not present here... window,1,xsize=main_wxsize,ysize=main_wysize,title='DUSTEMWRAP '+!dustem_version.version+' (EXTINCTION)' ;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 cgtext, xxpos + widthtext + 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 xxpos = 1.0 - widthtot - 0.03 yypos = 0.97 ;Displaying fixed part cgtext, xxpos, yypos,textoidl('\chi^{2} : '),color=0,/normal,charsize = 1.0 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 cgtext, xxpos + widthtext , yypos,strtrim(string(rchi2,format=frmt2),2),color=0,/normal,charsize = 1.0 ;plotting of title tit=!dustem_plot_range.title_x xxpos = 0.5 yypos =0.96 ;the runs inbetween if !dustem_end EQ 0 then cgtext, xxpos , yypos,tit+' (RUNNING)',color=0,/normal,charsize = 1.6,alignment=0.5 ;subsequent iterations to the end of the fit if !dustem_end EQ -1 then cgtext, xxpos , yypos,tit,color=0,/normal,charsize = 1.6,alignment=0.5 ;last iteration of the fit if !dustem_end EQ 1 then cgtext, xxpos , yypos,tit+' (FINAL RUN)',color=0,/normal,charsize = 1.6,alignment=0.5 if !run_pol and tag_exist(*!dustem_show,'qext') 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 plotsym,0,/fill ; what's the reason behind this? if !run_pol and tag_exist(*!dustem_show,'qext') then begin ;This part can be adjusted for future releases if the user wants to plot ;specific datasets ;lists because elements have different dimensions and/or we want entire arrays as elements dustem_interp = list(dustem_ext,dustem_fpolext,dustem_qext,dustem_uext,dustem_psi_ext,dustem_polext) ;DustEmWrap SED predictions dustem_spec = list(EXT_spec,SPEXT_spec,QEXT_spec,UEXT_spec,PSIEXT_spec,POLEXT_spec) ;DustEM spectra predictions extra_spec = list(0,EXT_spec,0,0,0,0) ;extra spectra that the dataset needs in order to be plotted. ;This (extra_spec use) actually should not be generalized since the only case we need an extra spectrum is when plotting the polarization fraction. position = list(list(p_ext,np_ext),list(p_spext),list(p_qext,np_qext),list(p_uext,np_uext),list(p_psiext),list(p_pext,np_pext)) ;these don't have to be lists datasets = ['EXT','FPOLEXT','QEXT','UEXT','PSI_EXT','POLEXT'] ;but these can be combined using a list but we're leaving it as is for the moment... positiveonly = [0,0,1,1,0,0] ;used for q and u negativeonly = [0,0,1,1,0,0] ;used for q and u ENDIF ELSE BEGIN dustem_interp = list(dustem_ext) ;DustEmWrap EXT predictions . dustem_spec = list(EXT_spec) ;DustEM spectra predictions position = list(p_ext,np_ext);list(list(p_sed,np_sed)) ; I think I need this ... ;position_n =list(np_sed) datasets = ['EXT'] ;replace by one keyword? positiveonly=[0] ;kept it for completeness. Also this loop reminds me that JP also wants the user to be able to display one dataset. negativeonly=[0] ENDELSE ; PLOTTING OF DATA THAT IS UNCHAED dustem_plot_dataset, st, dataset=datasets, position=position,positive_only=positiveonly,negative_only=negativeonly, _extra=_extra ; REFRESHING DATA - to plot the refreshed data for the first time. dustem_plot_dataset, st, dustem_interp,dustem_spec,extra_spec=extra_spec,dataset=datasets,positive_only=positiveonly,negative_only=negativeonly, /refresh ,position=position, _extra=_extra ENDIF if !dustem_end then !dustem_end = -1 ;so that the last iteration is only plotted once. ;PLOTTING OF THE PARAMETERS IF !d.name NE 'PS' THEN BEGIN ;What happens when we want to create a ps file of the exact content of the parameters' window? 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? ENDIF dustem_plot_dataset, st, p_dim, errors,dataset=['PARAMETERS'],_extra=_extra dustem_plot_dataset, st, p_dim,errors,dataset=['PARAMETERS'],/refresh, _extra=_extra ;PLOTTING OF THE PLUGINS IF (tag_names(*!dustem_plugin))(0) NE 'NONE' THEN BEGIN IF !d.name NE 'PS' 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? ENDIF dustem_plot_dataset, st, p_dim, errors,dataset=['PLUGINS'],_extra=_extra ;& cmdind_prms+=1 dustem_plot_dataset, st, p_dim, errors,dataset=['PLUGINS'], /refresh , winid=winid_plgns, _extra=_extra ENDIF the_end: END