Blame view

src/idl/dustem_fit_sed_ext_pol_example.pro 11.4 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 $
9e027842   Jean-Philippe Bernard   updated to new fu...
6
                                  ,wait=wait $
8f9df3fb   Annie Hughes   tidied up code, a...
7
8
9
                                   ,noobj=noobj $
                                   ,help=help $
                                  ,verbose=verbose
9e027842   Jean-Philippe Bernard   updated to new fu...
10
11
12
13
14

;+
; NAME:
;    dustem_fit_sed_ext_pol_example  
;
8f9df3fb   Annie Hughes   tidied up code, a...
15
16
17
; 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...
18
19
20
21
22
23
24
;  
; See the DustEMWrap User Guide for more information.
;
; CATEGORY:
;    DustEMWrap, Distributed, High-Level, User Example
;
; CALLING SEQUENCE:
6735604d   Annie Hughes   making FITS read ...
25
;    dustem_fit_sed_ext_pol_example[,model=][sed_file=][ext_file=][,Nitermax=][,fits_save=][,/help,/wait,/verbose,/noobj]
9e027842   Jean-Philippe Bernard   updated to new fu...
26
27
28
29
30
31
32
33
34
35
36
37
38
39
;
; 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 ...
40
41
42
;    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...
43
44
45
46
47
;    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...
48
;          'Data/EXAMPLE_OBSDATA/Mathis90Fitz99_DISM_NH20.xcat' is used.  
9e027842   Jean-Philippe Bernard   updated to new fu...
49
;    Nitermax = maximum number of fit iterations. Default is 5.
6735604d   Annie Hughes   making FITS read ...
50
;    fits_save = if set, save the fit results in a binary
9e027842   Jean-Philippe Bernard   updated to new fu...
51
52
53
54
55
56
;               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...
57
;    noobj     = if set, runs with no object graphics
9e027842   Jean-Philippe Bernard   updated to new fu...
58
59
60
61
62
63
64
65
66
67
68
69
;
; 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...
70
71
72
;
; EXAMPLES
;    dustem_fit_sed_ext_pol_example
6735604d   Annie Hughes   making FITS read ...
73
74
;    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...
75
76
77
78
79
80
;
; 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...
81
82

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

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

6735604d   Annie Hughes   making FITS read ...
93
94
95
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...
96

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

8f9df3fb   Annie Hughes   tidied up code, a...
103
104
dustem_define_la_common

2d758fdd   Annie Hughes   improved commenti...
105
106
107
108
;=== 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...
109
110
111
112
113
114
115
116
;=== 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 ...
117
;=== Example is provided for G17_MODELD 
8f9df3fb   Annie Hughes   tidied up code, a...
118
119
;=== If you choose a different dust model, you will need to adjust the
;=== parameter information accordingly.
2d758fdd   Annie Hughes   improved commenti...
120

8f9df3fb   Annie Hughes   tidied up code, a...
121
122
123
124
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...
125
     'dustem_plugin_modify_dust_pol_2', $
8f9df3fb   Annie Hughes   tidied up code, a...
126
127
     'dustem_plugin_modify_dust_polx_2' ]

2d758fdd   Annie Hughes   improved commenti...
128
129
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...
130
131
132

Npar=n_elements(pd)
ulimed=replicate(0,Npar)
2d758fdd   Annie Hughes   improved commenti...
133
llimed=replicate(1,Npar) & llimed[3]=0 & llimed[4]=0
97d6b02a   Annie Hughes   changed llims to ...
134
llims=replicate(1.e-15,Npar)
8f9df3fb   Annie Hughes   tidied up code, a...
135
136
137
138
139
140
141
142
143
144
145
146
147
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...
148
        
1d10fa6d   Ilyes Choubani   extinction exampl...
149
150


8f9df3fb   Annie Hughes   tidied up code, a...
151
152
153
154
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...
155
156

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

1d10fa6d   Ilyes Choubani   extinction exampl...
163

2d758fdd   Annie Hughes   improved commenti...
164
165
;=== 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...
166
dir=!dustem_wrap_soft_dir+'/Data/EXAMPLE_OBSDATA/'
2d758fdd   Annie Hughes   improved commenti...
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
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...
186
dir=!dustem_wrap_soft_dir+'/Data/EXAMPLE_OBSDATA/'
2d758fdd   Annie Hughes   improved commenti...
187
file=dir+'example_SED_3.xcat'
8f9df3fb   Annie Hughes   tidied up code, a...
188
if keyword_set(sed_file) then file=sed_file 
1d10fa6d   Ilyes Choubani   extinction exampl...
189
sed=read_xcat(file,/silent)
2d758fdd   Annie Hughes   improved commenti...
190
191
192
193
194
195
196
197
198
199
200
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...
201

1d10fa6d   Ilyes Choubani   extinction exampl...
202

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

8f9df3fb   Annie Hughes   tidied up code, a...
207
208
209
;== 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...
210

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

2d758fdd   Annie Hughes   improved commenti...
216
217
218
219
220
221
222
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...
223

2d758fdd   Annie Hughes   improved commenti...
224
225
226
227
228
229
230
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...
231

2d758fdd   Annie Hughes   improved commenti...
232
233
234
;=== 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 ...
235
   dustem_set_data, m_fit=sed,m_show=sed,x_fit=ext,x_show=ext
2d758fdd   Annie Hughes   improved commenti...
236
237
238
239
   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...
240
end
1d10fa6d   Ilyes Choubani   extinction exampl...
241

1d10fa6d   Ilyes Choubani   extinction exampl...
242

8f9df3fb   Annie Hughes   tidied up code, a...
243
244
245
246
247
;== 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...
248
xr_x = [0.01,30]
dc84fd94   Ilyes Choubani   Small corrections...
249
yr_x = [5.00E-8,10]
1d10fa6d   Ilyes Choubani   extinction exampl...
250
251
xr_m = [1.,5e5]
yr_m = [5e-8,1.00e6]
8f9df3fb   Annie Hughes   tidied up code, a...
252
253
tit_m='Spectral Energy Distribution' 
tit_x='Dust Optical Depth' 
3d0f6b67   Ilyes Choubani   rest of plotting ...
254

8f9df3fb   Annie Hughes   tidied up code, a...
255
;===  RUN THE FIT
1d10fa6d   Ilyes Choubani   extinction exampl...
256
257
t1=systime(0,/sec)
res=dustem_mpfit_data(tol=tol,Nitermax=use_Nitermax,gtol=gtol $
3d0f6b67   Ilyes Choubani   rest of plotting ...
258
                      ,/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...
259
                      ,legend_xpos=legend_xpos,legend_ypos=legend_ypos $
dc84fd94   Ilyes Choubani   Small corrections...
260
                      ,errors=errors,chi2=chi2,rchi2=rchi2,show_plot=show_plot)
1d10fa6d   Ilyes Choubani   extinction exampl...
261
262
t2=systime(0,/sec)

8f9df3fb   Annie Hughes   tidied up code, a...
263
264
265
266
267
268
269
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 ...
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
;=== MAKE THE FINAL PLOT
IF keyword_set(postscript) THEN BEGIN
    dir_ps='./'
    set_plot,'PS'
    ps_file=dir_ps+postscript
    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
  set_plot,'X'
  device,/close
  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...
311

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

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

END