Blame view

src/idl/dustem_fit_sed_ext_pol_example.pro 11.6 KB
1d10fa6d   Ilyes Choubani   extinction exampl...
1
PRO dustem_fit_sed_ext_pol_example,model=model $
9e027842   Jean-Philippe Bernard   updated to new fu...
2
3
4
                                  ,sed_file=sed_file $
                                  ,ext_file=ext_file $
                                  ,Nitermax=Nitermax $
6735604d   Annie Hughes   making FITS read ...
5
                                  ,fits_save=fits_save $
e431104b   Annie Hughes   general updates f...
6
                                  ,postscript=postscript $
9e027842   Jean-Philippe Bernard   updated to new fu...
7
                                  ,wait=wait $
8f9df3fb   Annie Hughes   tidied up code, a...
8
9
10
                                   ,noobj=noobj $
                                   ,help=help $
                                  ,verbose=verbose
9e027842   Jean-Philippe Bernard   updated to new fu...
11
12
13
14
15

;+
; NAME:
;    dustem_fit_sed_ext_pol_example  
;
8f9df3fb   Annie Hughes   tidied up code, a...
16
17
18
; PURPOSE: This routine is an example of how to fit an observational
; data in emission + extinction SED (StokesI,Q,U) with DustEM and
; DustEMWrap.
9e027842   Jean-Philippe Bernard   updated to new fu...
19
20
21
22
23
24
25
;  
; See the DustEMWrap User Guide for more information.
;
; CATEGORY:
;    DustEMWrap, Distributed, High-Level, User Example
;
; CALLING SEQUENCE:
e431104b   Annie Hughes   general updates f...
26
;    dustem_fit_sed_ext_pol_example[,model=][sed_file=][ext_file=][postscript=][,Nitermax=][,fits_save=][,/help,/wait,/verbose,/noobj]
9e027842   Jean-Philippe Bernard   updated to new fu...
27
28
29
30
31
32
33
34
35
36
37
38
39
40
;
; INPUTS:
;    None
;
; OPTIONAL INPUT PARAMETERS:
;    None
;
; OUTPUTS:
;    None
;
; OPTIONAL OUTPUT PARAMETERS:
;    Plots, results structure in binary FITS table format
;
; ACCEPTED KEY-WORDS:
6735604d   Annie Hughes   making FITS read ...
41
42
43
;    model = specifies the interstellar dust mixture used by
;            DustEM. See userguide or dustem_test_model_exists.pro
;            for more details about available models in current release.
9e027842   Jean-Philippe Bernard   updated to new fu...
44
45
46
47
48
;    sed_file = string naming the path to text file in .xcat format that
;          describes the observational SED. If not set, the file
;          'Data/EXAMPLE_OBSDATA/example_SED_2.xcat' is used.  
;    ext_file = string naming the path to text file in .xcat format that
;          describes the observational extinction SED. If not set, the file
2d758fdd   Annie Hughes   improved commenti...
49
;          'Data/EXAMPLE_OBSDATA/Mathis90Fitz99_DISM_NH20.xcat' is used.  
e431104b   Annie Hughes   general updates f...
50
;    postscript = if set, final plot is saved as postscript file
9e027842   Jean-Philippe Bernard   updated to new fu...
51
;    Nitermax = maximum number of fit iterations. Default is 5.
6735604d   Annie Hughes   making FITS read ...
52
;    fits_save = if set, save the fit results in a binary
9e027842   Jean-Philippe Bernard   updated to new fu...
53
54
55
56
57
58
;               FITS file. The code then restore this file and plots
;               the results using the saved results information.
;    help      = if set, print this help
;    wait      = if set, wait this many seconds between each step of
;                the code (for illustration purposes)
;    verbose      = if set, subroutines will run in verbose mode
8f9df3fb   Annie Hughes   tidied up code, a...
59
;    noobj     = if set, runs with no object graphics
9e027842   Jean-Philippe Bernard   updated to new fu...
60
61
62
63
64
65
66
67
68
69
70
71
;
; COMMON BLOCKS:
;    None
;
; SIDE EFFECTS:
;    None
;
; RESTRICTIONS:
;    The DustEM fortran code must be installed
;    The DustEMWrap IDL code must be installed
;
; PROCEDURES AND SUBROUTINES USED:
9e027842   Jean-Philippe Bernard   updated to new fu...
72
73
74
;
; EXAMPLES
;    dustem_fit_sed_ext_pol_example
6735604d   Annie Hughes   making FITS read ...
75
76
;    dustem_fit_sed_ext_pol_example,Nitermax=1,fits_save='/tmp/mysavefile.fits'
;    dustem_fit_sed_ext_pol_example,model='G17_MODELC'
9e027842   Jean-Philippe Bernard   updated to new fu...
77
78
79
80
81
82
;
; MODIFICATION HISTORY:
;    Written by JPB Apr-2011
;    Evolution details on the DustEMWrap gitlab.
;    See http://dustemwrap.irap.omp.eu/ for FAQ and help.  
;-
1d10fa6d   Ilyes Choubani   extinction exampl...
83
84

IF keyword_set(help) THEN BEGIN
9e027842   Jean-Philippe Bernard   updated to new fu...
85
  doc_library,'dustem_fit_sed_ext_pol_example'
1d10fa6d   Ilyes Choubani   extinction exampl...
86
87
88
89
90
91
  goto,the_end
END

IF keyword_set(model) THEN BEGIN
  use_model=strupcase(model)
ENDIF ELSE BEGIN
2d758fdd   Annie Hughes   improved commenti...
92
  use_model='G17_MODELD'    
1d10fa6d   Ilyes Choubani   extinction exampl...
93
94
ENDELSE

6735604d   Annie Hughes   making FITS read ...
95
96
97
exists=dustem_test_model_exists(use_model,/pol)
if exists ne 1 then $
   message,'Unknown/unpolarized dust model: '+use_model
dc84fd94   Ilyes Choubani   Small corrections...
98

1d10fa6d   Ilyes Choubani   extinction exampl...
99
use_window=2       ; default graphics window number to use for plotting the results
9e027842   Jean-Philippe Bernard   updated to new fu...
100
101
use_verbose=0
if keyword_set(verbose) then use_verbose=1
8f9df3fb   Annie Hughes   tidied up code, a...
102
103
use_Nitermax=5        ; maximum number of iterations for the fit
IF keyword_set(Nitermax) THEN use_Nitermax=Nitermax
1d10fa6d   Ilyes Choubani   extinction exampl...
104

8f9df3fb   Annie Hughes   tidied up code, a...
105
106
dustem_define_la_common

2d758fdd   Annie Hughes   improved commenti...
107
108
109
110
;=== Set the (model-dependent) parameters that you want to fit
;=== Refer to the DustEM and DustEMWrap userguides for an explanation
;    of the different grain types

8f9df3fb   Annie Hughes   tidied up code, a...
111
112
113
114
115
116
117
118
;=== Set the (model-dependent) parameters that you want to fit (pd),
;=== their initial values (iv)
;=== and whether they are bounded (ulimed,llimed,llims,ulims).
;=== Fixed parameters (fpd) and their values (fiv) are also set here.
;=== Refer to the DustEM and DustEMWrap User guides for an explanation
;=== of the physical meaning of dust model and plug-in parameters, and
;=== how to specify them.

97d6b02a   Annie Hughes   changed llims to ...
119
;=== Example is provided for G17_MODELD 
8f9df3fb   Annie Hughes   tidied up code, a...
120
121
;=== If you choose a different dust model, you will need to adjust the
;=== parameter information accordingly.
2d758fdd   Annie Hughes   improved commenti...
122

8f9df3fb   Annie Hughes   tidied up code, a...
123
124
125
126
pd = [ $
     '(*!dustem_params).grains(0).mdust_o_mh',$         ;PAH0 mass fraction
     '(*!dustem_params).grains(1).mdust_o_mh',$         ;amCBE mass fraction
     '(*!dustem_params).grains(2).mdust_o_mh',$         ;aSil
2d758fdd   Annie Hughes   improved commenti...
127
     'dustem_plugin_modify_dust_pol_2', $
8f9df3fb   Annie Hughes   tidied up code, a...
128
129
     'dustem_plugin_modify_dust_polx_2' ]

2d758fdd   Annie Hughes   improved commenti...
130
131
true_vals = [5.4e-4, 6.4e-4,4.8e-4, 48., 52] ; these are the true values that will be used to generate the data
iv = true_vals+[2.00E-4,-2.00E-4,2.00E-4,10, -10] ; this is the vector of starting guesses for the fit
8f9df3fb   Annie Hughes   tidied up code, a...
132
133
134

Npar=n_elements(pd)
ulimed=replicate(0,Npar)
2d758fdd   Annie Hughes   improved commenti...
135
llimed=replicate(1,Npar) & llimed[3]=0 & llimed[4]=0
97d6b02a   Annie Hughes   changed llims to ...
136
llims=replicate(1.e-15,Npar)
8f9df3fb   Annie Hughes   tidied up code, a...
137
138
139
140
141
142
143
144
145
146
147
148
149
use_polarization=1

;=== Fixed parameters
fpd=[ $
    '(*!dustem_params).G0' ,  $     ;multiplicative factor to total ISRF
    'dustem_plugin_continuum_2' $       ;intensity of a BB continuum
    ]

;=== Initial parameter values for fixed parameters
fiv=[ $
    1. , $                      ;multiplicative factor to total ISRF
    3.e-3$                      ;intensity of BB continuum
]
1d10fa6d   Ilyes Choubani   extinction exampl...
150
        
1d10fa6d   Ilyes Choubani   extinction exampl...
151
152


8f9df3fb   Annie Hughes   tidied up code, a...
153
154
155
156
if keyword_set(wait) then begin
   message,'Finished setting dust model and plug-in parameters: '+use_model,/info
   wait,wait
end
1d10fa6d   Ilyes Choubani   extinction exampl...
157
158

;== INITIALISE DUSTEM
8f9df3fb   Annie Hughes   tidied up code, a...
159
dustem_init,model=use_model,polarization=use_polarization
1d10fa6d   Ilyes Choubani   extinction exampl...
160
!dustem_nocatch=1
9e027842   Jean-Philippe Bernard   updated to new fu...
161
!dustem_verbose=use_verbose
8f9df3fb   Annie Hughes   tidied up code, a...
162
163
IF keyword_set(noobj) THEN !dustem_noobj=1
!EXCEPT=2 ; for debugging
1d10fa6d   Ilyes Choubani   extinction exampl...
164

1d10fa6d   Ilyes Choubani   extinction exampl...
165

2d758fdd   Annie Hughes   improved commenti...
166
167
;=== READ OBSERVATIONAL EXTINCTION DATA 
;=== IF THE USER DOES NOT PROVIDE AN EXTINCTION CURVE FILE , WE READ MATHIS TO INITIALISE THE OBSERVATIONAL STRUCTURE.
1d10fa6d   Ilyes Choubani   extinction exampl...
168
dir=!dustem_wrap_soft_dir+'/Data/EXAMPLE_OBSDATA/'
2d758fdd   Annie Hughes   improved commenti...
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
use_ext_file=dir+'Mathis90Fitz99_DISM_NH20.xcat' 
IF keyword_set(ext_file) THEN use_ext_file=ext_file
ext=read_xcat(use_ext_file,/silent)
IF not keyword_set(ext_file) THEN BEGIN
   message, 'You have not provided an extinction curve. I will generate one from the '+use_model+' model',/info
   ;;=== CREATE ENTRIES FOR ALL STOKES (OTHERWISE NEXT CALL TO
   ;;=== DUSTEM_SET_DATA WILL COMPLAIN SINCE WE HAVE INITIALISED
   ;;=== DUSTEM IN POLARIZATION MODE
   ;;=== WE ASSUME THAT A USER-PROVIDED EXT CURVE WILL SATISFY ALL REQUIREMENTS
   ext.EXT_I=1.
   for i=4l,n_tags(ext)-1 do begin
      ext.(i) = 1.E-15
   endfor
ENDIF   



;=== READ OBSERVATIONAL EMISSION DATA 
;=== IF THE USER DOES NOT PROVIDE A SED FILE , WE READ AN EXAMPLE_SED FILE TO INITIALISE THE OBSERVATIONAL STRUCTURE.
1d10fa6d   Ilyes Choubani   extinction exampl...
188
dir=!dustem_wrap_soft_dir+'/Data/EXAMPLE_OBSDATA/'
2d758fdd   Annie Hughes   improved commenti...
189
file=dir+'example_SED_3.xcat'
8f9df3fb   Annie Hughes   tidied up code, a...
190
if keyword_set(sed_file) then file=sed_file 
1d10fa6d   Ilyes Choubani   extinction exampl...
191
sed=read_xcat(file,/silent)
2d758fdd   Annie Hughes   improved commenti...
192
193
194
195
196
197
198
199
200
201
202
IF not keyword_set(sed_file) THEN BEGIN
   message, 'You have not provided an SED. I will generate one from the '+use_model+' model',/info
 ;;=== CREATE ENTRIES FOR ALL STOKES (OTHERWISE NEXT CALL TO
   ;;=== DUSTEM_SET_DATA WILL COMPLAIN SINCE WE HAVE INITIALISED
   ;;=== DUSTEM IN POLARIZATION MODE
   ;;=== WE ASSUME THAT A USER-PROVIDED SED CURVE WILL SATISFY ALL REQUIREMENTS
   sed.StokesI=1.
   for i=4l,n_tags(sed)-1 do begin
      sed.(i) = 1.E-15
   endfor
ENDIF   
1d10fa6d   Ilyes Choubani   extinction exampl...
203

1d10fa6d   Ilyes Choubani   extinction exampl...
204

8f9df3fb   Annie Hughes   tidied up code, a...
205
206
;=== HERE WE SET THE DATA SO THAT THE COMPUTE_ FUNCTIONS BELOW HAVE
;=== THE NECESSARY FIELDS AND INFORMATION
88872c38   Ilyes Choubani   small update. Cha...
207
dustem_set_data,m_fit=sed,m_show=sed,x_fit=ext,x_show=ext 
1d10fa6d   Ilyes Choubani   extinction exampl...
208

8f9df3fb   Annie Hughes   tidied up code, a...
209
210
211
;== SET INITIAL VALUES AND LIMITS OF THE PARAMETERS FOR THE FIT 
;== AND ACTIVATE ANY PLUGINS (HENCE WE NEED TO DO THIS BEFORE THE COMPUTE_ CALLS)
dustem_init_params,use_model,pd,iv,fpd=fpd,fiv=fiv,ulimed=ulimed,llimed=llimed,ulims=ulims,llims=llims,polarization=use_polarization
1d10fa6d   Ilyes Choubani   extinction exampl...
212

8f9df3fb   Annie Hughes   tidied up code, a...
213
214
215
216
if keyword_set(wait) then begin
   message,'Finished initializing DustEMWrap, including plugins and fixed parameters',/info
   wait,wait
end
1d10fa6d   Ilyes Choubani   extinction exampl...
217

2d758fdd   Annie Hughes   improved commenti...
218
219
220
221
222
223
224
if not keyword_set(ext_file) then begin
;== GENERATE THE EXTINCTION DATA USING THE MODEL AND TRUE VALUES
   ext.EXT_I = dustem_compute_ext(true_vals,st=st)
   toto = dustem_compute_stokext(true_vals,st=st,Qext_spec=dustem_qext,Uext_spec=dustem_uext)
   ext.EXT_Q = toto[0]
   ext.EXT_U = toto[1]
end
1d10fa6d   Ilyes Choubani   extinction exampl...
225

2d758fdd   Annie Hughes   improved commenti...
226
227
228
229
230
231
232
IF not keyword_set(sed_file) THEN BEGIN
;== GENERATE THE EMISSION DATA USING THE MODEL AND TRUE VALUES
   sed.StokesI = dustem_compute_sed(true_vals,st=st)
   toto = dustem_compute_stokes(true_vals,st=st,Q_spec=dustem_qsed,U_spec=dustem_used)
   sed.StokesQ = toto[0]
   sed.StokesU = toto[1]
end
1d10fa6d   Ilyes Choubani   extinction exampl...
233

2d758fdd   Annie Hughes   improved commenti...
234
235
236
;=== RESET THE OBSERVATIONAL STRUCTURE IF WE HAVE GENERATED DATA USING
;=== A MODEL
if not keyword_set(ext_file) or  not keyword_set(sed_file) THEN BEGIN
6735604d   Annie Hughes   making FITS read ...
237
   dustem_set_data, m_fit=sed,m_show=sed,x_fit=ext,x_show=ext
2d758fdd   Annie Hughes   improved commenti...
238
239
240
241
   if keyword_set(wait) then begin
      message,'Finished generating data from the model '+use_model,/info
      wait,wait
   end
8f9df3fb   Annie Hughes   tidied up code, a...
242
end
1d10fa6d   Ilyes Choubani   extinction exampl...
243

1d10fa6d   Ilyes Choubani   extinction exampl...
244

8f9df3fb   Annie Hughes   tidied up code, a...
245
246
247
248
249
;== INFORMATION TO RUN THE FIT
tol=1.e-10  ;fit tolerence

;=== INFORMATION TO MAKE THE PLOT
;=== _x/_extinction means extinction plots, _m/_emissions means emission plots
1d10fa6d   Ilyes Choubani   extinction exampl...
250
xr_x = [0.01,30]
dc84fd94   Ilyes Choubani   Small corrections...
251
yr_x = [5.00E-8,10]
1d10fa6d   Ilyes Choubani   extinction exampl...
252
253
xr_m = [1.,5e5]
yr_m = [5e-8,1.00e6]
8f9df3fb   Annie Hughes   tidied up code, a...
254
255
tit_m='Spectral Energy Distribution' 
tit_x='Dust Optical Depth' 
3d0f6b67   Ilyes Choubani   rest of plotting ...
256

8f9df3fb   Annie Hughes   tidied up code, a...
257
;===  RUN THE FIT
1d10fa6d   Ilyes Choubani   extinction exampl...
258
259
t1=systime(0,/sec)
res=dustem_mpfit_data(tol=tol,Nitermax=use_Nitermax,gtol=gtol $
3d0f6b67   Ilyes Choubani   rest of plotting ...
260
                      ,/xlog,/ylog,xr_m=xr_m,yr_m=yr_m,xr_x=xr_x,yr_x=yr_x,xtit=xtit,ytit=ytit,tit_m=tit_m,tit_x=tit_x $
1d10fa6d   Ilyes Choubani   extinction exampl...
261
                      ,legend_xpos=legend_xpos,legend_ypos=legend_ypos $
dc84fd94   Ilyes Choubani   Small corrections...
262
                      ,errors=errors,chi2=chi2,rchi2=rchi2,show_plot=show_plot)
1d10fa6d   Ilyes Choubani   extinction exampl...
263
264
t2=systime(0,/sec)

8f9df3fb   Annie Hughes   tidied up code, a...
265
266
267
268
269
270
271
if keyword_set(wait) then begin
   message,'Finished running DustEMWrap, using Niters: '+strtrim(string(use_Nitermax),2),/info
   message,'Time taken [sec]: '+sigfig(t2-t1,2,/sci),/info
   wait,wait
end


6735604d   Annie Hughes   making FITS read ...
272
273
;=== MAKE THE FINAL PLOT
IF keyword_set(postscript) THEN BEGIN
e431104b   Annie Hughes   general updates f...
274
275
;    dir_ps='./'
   mydevice=!d.name
6735604d   Annie Hughes   making FITS read ...
276
    set_plot,'PS'
e431104b   Annie Hughes   general updates f...
277
    ps_file=postscript
6735604d   Annie Hughes   making FITS read ...
278
279
280
281
282
283
284
285
286
287
    device,filename=ps_file,/color
ENDIF

IF !dustem_noobj THEN BEGIN 
  dustemwrap_plot_noobj,(*(*!dustem_fit).CURRENT_PARAM_VALUES),st=dummy,xr=xr,/xstyle,yr=yr,/ysty,/ylog,/xlog,tit_m=tit_m+' (Final fit)',tit_x=tit_x+' (Final fit)' 
ENDIF ELSE BEGIN
  dustemwrap_plot,(*(*!dustem_fit).CURRENT_PARAM_VALUES),st=dummy,xr=xr,/xstyle,yr=yr,/ysty,/ylog,/xlog,tit_m=tit_m+' (Final fit)',tit_x=tit_x+' (Final fit)' 
ENDELSE

IF keyword_set(postscript) THEN BEGIN
6735604d   Annie Hughes   making FITS read ...
288
  device,/close
e431104b   Annie Hughes   general updates f...
289
  set_plot,mydevice
6735604d   Annie Hughes   making FITS read ...
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
  message,'Wrote '+ps_file,/info
ENDIF

if keyword_set(wait) then begin
   message,'Made the plot of the final results',/info
   wait,wait
end


IF keyword_set(fits_save) THEN BEGIN
   message,'Writing out results structure: '+fits_save,/info
   dustem_write_fits_table,filename=fits_save,help=help
;=== At this point, you could erase all dustem system variables, or exit idl... all the
;=== information needed to recover the results and remake the plots has been saved in the FITS table

;;    dustem_read_fits_table,filename=fits_save,dustem_st=dustem_spectra_st
;; ;==== plot result taken from the saved fits table
;;    res=*(*!dustem_fit).CURRENT_PARAM_VALUES
;;   ;If the user prefers non-OOP plotting then reset !dustem_noobj=1 here since dustem_init is called in reads_fits_table.
;;    IF !dustem_noobj THEN BEGIN
;;       dustemwrap_plot_noobj,res,st=dustem_spectra_st,xr=xr,/xstyle,yr=yr,/ysty,/ylog,/xlog,tit_m=tit_m+' (From Saved FITS file)',tit_x=tit_x+' (From Saved FITS file)'
;;    ENDIF ELSE BEGIN
;;       dustemwrap_plot,res,st=dustem_spectra_st,xr=xr,/xstyle,yr=yr,/ysty,/ylog,/xlog,tit_m=tit_m+' (From Saved FITS file)',tit_x=tit_x+' (From Saved FITS file)'
;;    ENDELSE
8f9df3fb   Annie Hughes   tidied up code, a...
314

8f9df3fb   Annie Hughes   tidied up code, a...
315
   IF keyword_set(wait) THEN BEGIN
6735604d   Annie Hughes   making FITS read ...
316
      message,'Saved the results as FITS in the file: '+fits_save,/info
8f9df3fb   Annie Hughes   tidied up code, a...
317
318
      wait,wait
   ENDIF
1d10fa6d   Ilyes Choubani   extinction exampl...
319
320
ENDIF

1d10fa6d   Ilyes Choubani   extinction exampl...
321
the_end:
6735604d   Annie Hughes   making FITS read ...
322
message,'Finished dustem_fit_sed_ext_pol_example',/info
1d10fa6d   Ilyes Choubani   extinction exampl...
323
324

END