Blame view

src/idl/dustem_fit_ext_pol_example.pro 9.73 KB
1d10fa6d   Ilyes Choubani   extinction exampl...
1
PRO dustem_fit_ext_pol_example,model=model $
2d758fdd   Annie Hughes   improved commenti...
2
3
4
5
6
7
8
                               ,ext_file=ext_file $
                               ,Nitermax=Nitermax $
                               ,fits_save_and_restore=fits_save_and_restore $
                               ,wait=wait $
                               ,noobj=noobj $
                               ,help=help $
                               ,verbose=verbose
9e027842   Jean-Philippe Bernard   updated to new fu...
9
10
11
12
13
14
15

;+
; NAME:
;    dustem_fit_ext_pol_example  
;
; PURPOSE:
; This routine is an example of how to fit an observational extinction SED
2d758fdd   Annie Hughes   improved commenti...
16
; (StokesI,Q,U) with DustEM and DustEMWrap.
9e027842   Jean-Philippe Bernard   updated to new fu...
17
18
19
20
21
22
23
;  
; See the DustEMWrap User Guide for more information.
;
; CATEGORY:
;    DustEMWrap, Distributed, High-Level, User Example
;
; CALLING SEQUENCE:
2d758fdd   Annie Hughes   improved commenti...
24
;    dustem_fit_ext_pol_example[,model=][ext_file=][,Nitermax=][,fits_save_and_restore=][,/help,/wait,/verbose,/noobj]
9e027842   Jean-Philippe Bernard   updated to new fu...
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
;
; INPUTS:
;    None
;
; OPTIONAL INPUT PARAMETERS:
;    None
;
; OUTPUTS:
;    None
;
; OPTIONAL OUTPUT PARAMETERS:
;    Plots, results structure in binary FITS table format
;
; ACCEPTED KEY-WORDS:
;    model = specifies the interstellar dust mixture used by DustEM
;           'MC10' model from Compiegne et al 2010 
;           'DBP90' model from Desert et al 1990
;           'DL01' model from Draine & Li 2001
2d758fdd   Annie Hughes   improved commenti...
43
;           'WD01_RV5P5B' model from Weingartner & Draine 2002 with Rv=5.5
9e027842   Jean-Philippe Bernard   updated to new fu...
44
45
46
47
48
49
50
51
52
;           'DL07' model from Draine & Li 2007
;           'J13' model from Jones et al 2013, as updated in
;                 Koehler et al 2014
;           'G17_ModelA' model A from Guillet et al (2018). Includes
;                 polarisation. See Tables 2 and 3 of that paper for details.
;           'G17_ModelB' model B from Guillet et al (2018)
;           'G17_ModelC' model C from Guillet et al (2018)
;           'G17_ModelD' model A from Guillet et al (2018)
;    ext_file = string naming the path to text file in .xcat format that
2d758fdd   Annie Hughes   improved commenti...
53
54
55
56
57
;          describes the observational extinction SED.
;           If not set, the file
;          'Data/EXAMPLE_OBSDATA/Mathis90Fitz99_DISM_NH20.xcat' is
;          used to define the observational structure, and a synthetic
;          observation is generated using the dust model.
9e027842   Jean-Philippe Bernard   updated to new fu...
58
59
60
61
62
63
64
65
;    Nitermax = maximum number of fit iterations. Default is 5.
;    fits_save_and_restore = if set, save the fit results in a binary
;               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
2d758fdd   Annie Hughes   improved commenti...
66
;    noobj     = if set, runs with no object graphics
9e027842   Jean-Philippe Bernard   updated to new fu...
67
68
69
70
71
72
73
74
75
76
77
78
;
; 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:
2d758fdd   Annie Hughes   improved commenti...
79
;    
9e027842   Jean-Philippe Bernard   updated to new fu...
80
81
82
83
84
85
86
87
88
89
90
91
;
; EXAMPLES
;    dustem_fit_ext_pol_example
;    dustem_fit_ext_pol_example,Nitermax=1,fits_save_and_restore='/tmp/mysavefile.fits'
;    dustem_fit_ext_pol_example,model='DBP90'
;
; 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...
92
93

IF keyword_set(help) THEN BEGIN
9e027842   Jean-Philippe Bernard   updated to new fu...
94
  doc_library,'dustem_fit_ext_pol_example'
1d10fa6d   Ilyes Choubani   extinction exampl...
95
96
97
98
99
100
  goto,the_end
END

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

2d758fdd   Annie Hughes   improved commenti...
104
105
106
107
108
109
110
known_mdls=['MC10','DBP90','DL01','WD01_RV5P5B','DL07','J13','G17_MODELA','G17_MODELB','G17_MODELC','G17_MODELD'] 
test_model = where(known_mdls eq use_model,ct)
if ct eq 0 then begin
   message,'ISM dust model '+use_model+' unknown',/continue
   message,'Known models are MC10,DBP90,DL01,WD01_RV5P5B,DL07,J13,G17_MODELA,G17_MODELB,G17_MODELC,G17_MODELD',/continue
   stop
end
dc84fd94   Ilyes Choubani   Small corrections...
111

2d758fdd   Annie Hughes   improved commenti...
112
use_polarization=0.   ;default is no polarization in models
1d10fa6d   Ilyes Choubani   extinction exampl...
113
use_window=2       ; default graphics window number to use for plotting the results
9e027842   Jean-Philippe Bernard   updated to new fu...
114
115
use_verbose=0
if keyword_set(verbose) then use_verbose=1
2d758fdd   Annie Hughes   improved commenti...
116
117
118
119
use_Nitermax=5        ; maximum number of iterations for the fit
IF keyword_set(Nitermax) THEN use_Nitermax=Nitermax

dustem_define_la_common
1d10fa6d   Ilyes Choubani   extinction exampl...
120
121
122
123
124

;=== 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

2d758fdd   Annie Hughes   improved commenti...
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
;=== 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.

;=== Example is provided for G17_MODELD
;=== If you choose a different dust model, you will need to adjust the
;=== parameter information accordingly.

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
     'dustem_plugin_modify_dust_polx_2' ]

true_vals = [7.1e-4, 1.3e-3,5.6e-3,35.] ; these are the true values that will be used to generate the data if no ext_file is specified
iv = true_vals+[5.00E-4,-7.00E-4,8.00E-4,10] ; this is the vector of starting guesses for the fit

Npar=n_elements(pd)
ulimed=replicate(0,Npar)
llimed=replicate(1,Npar) & llimed[3]=0
llims=replicate(0.,Npar)
use_polarization=1
1d10fa6d   Ilyes Choubani   extinction exampl...
151
        
2d758fdd   Annie Hughes   improved commenti...
152
153
154
155
;=== Fixed parameters
fpd=[]
;==initial parameter values for fixed parameters
fiv=[]
1d10fa6d   Ilyes Choubani   extinction exampl...
156
        
1d10fa6d   Ilyes Choubani   extinction exampl...
157

2d758fdd   Annie Hughes   improved commenti...
158
159
160
161
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...
162
163
164


;== INITIALISE DUSTEM
2d758fdd   Annie Hughes   improved commenti...
165
dustem_init,model=use_model,polarization=use_polarization
1d10fa6d   Ilyes Choubani   extinction exampl...
166
!dustem_nocatch=1
9e027842   Jean-Philippe Bernard   updated to new fu...
167
!dustem_verbose=use_verbose
2d758fdd   Annie Hughes   improved commenti...
168
169
IF keyword_set(noobj) THEN !dustem_noobj=1
!EXCEPT=2 ; for debugging
1d10fa6d   Ilyes Choubani   extinction exampl...
170
171


2d758fdd   Annie Hughes   improved commenti...
172
173
;=== 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...
174
175

dir=!dustem_wrap_soft_dir+'/Data/EXAMPLE_OBSDATA/'
2d758fdd   Annie Hughes   improved commenti...
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
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)
  ;;=== 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) = ext.EXT_I/1.E10
   endfor
ENDIF   
 
;=== HERE WE SET THE DATA SO THAT THE COMPUTE_ FUNCTIONS BELOW HAVE
;=== THE NECESSARY FIELDS AND INFORMATION
;== note that m_fit and m_show do not exist -- this is deliberate
;== since we are not treating emission data
dustem_set_data, m_fit,m_show,ext,ext

;== 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

  IF keyword_set(wait) THEN BEGIN
     message,'Finished initializing dustemwrap with parameters and plugins',/info
     wait,wait
  ENDIF


if not keyword_set(ext_file) then begin
;== GENERATE THE 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]
   
;== RESET THE OBSERVATIONAL STRUCTURE
;== note that m_fit and m_show do not exist -- this is deliberate
;== since we are not treating emission data
   dustem_set_data, m_fit,m_show,ext,ext

   IF keyword_set(wait) THEN BEGIN
      message,'Finished generating a synthetic EXT from the model',/info
     wait,wait
  ENDIF

end


;== INFORMATION TO RUN THE FIT
1d10fa6d   Ilyes Choubani   extinction exampl...
227
tol=1.e-10
1d10fa6d   Ilyes Choubani   extinction exampl...
228

2d758fdd   Annie Hughes   improved commenti...
229
230
;=== INFORMATION TO MAKE THE PLOTS
;=== _x/_extinction means extinction plots, _m/_emissions means emission plots
a73f6031   Ilyes Choubani   small corrections...
231
232
xr_x=[0.01,30]
yr_x=[1.00E-10,10]
2d758fdd   Annie Hughes   improved commenti...
233
tit='Dust Optical Depth'
1d10fa6d   Ilyes Choubani   extinction exampl...
234

2d758fdd   Annie Hughes   improved commenti...
235
;===  RUN THE FIT
1d10fa6d   Ilyes Choubani   extinction exampl...
236
237
t1=systime(0,/sec)
res=dustem_mpfit_data(tol=tol,Nitermax=use_Nitermax,gtol=gtol $
a73f6031   Ilyes Choubani   small corrections...
238
                      ,/xlog,/ylog,xr_x=xr_x,yr_x=yr_x,xtit=xtit,ytit=ytit,title=tit $
1d10fa6d   Ilyes Choubani   extinction exampl...
239
                      ,legend_xpos=legend_xpos,legend_ypos=legend_ypos $
dc84fd94   Ilyes Choubani   Small corrections...
240
                      ,errors=errors,chi2=chi2,rchi2=rchi2,show_plot=show_plot)
1d10fa6d   Ilyes Choubani   extinction exampl...
241
242
t2=systime(0,/sec)

2d758fdd   Annie Hughes   improved commenti...
243
244
245
246
247
248
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

9e027842   Jean-Philippe Bernard   updated to new fu...
249
250
251
252
253
254
IF keyword_set(fits_save_and_restore) THEN BEGIN
   message,'Writing out results structure: '+fits_save_and_restore,/info
   dustem_write_fits_table,filename=fits_save_and_restore,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
  ;stop
24ae49f0   Jean-Philippe Bernard   fixed for new def...
255
  dustem_read_fits_table,filename=fits_save_and_restore,dustem_st=dustem_st
9e027842   Jean-Philippe Bernard   updated to new fu...
256
257
258
  ;==== plot result taken from the saved fits table
  res=*(*!dustem_fit).CURRENT_PARAM_VALUES
  IF !dustem_noobj THEN BEGIN
24ae49f0   Jean-Philippe Bernard   fixed for new def...
259
     dustemwrap_plot_noobj,res,dustem_st,xr=xr,/xstyle,yr=yr,/ysty,/ylog,/xlog,title=tit+' (From Saved FITS file)'
9e027842   Jean-Philippe Bernard   updated to new fu...
260
  ENDIF ELSE BEGIN
24ae49f0   Jean-Philippe Bernard   fixed for new def...
261
    dustemwrap_plot,res,dustem_st,xr=xr,/xstyle,yr=yr,/ysty,/ylog,/xlog,title=tit+' (From Saved FITS file)'
9e027842   Jean-Philippe Bernard   updated to new fu...
262
263
264
265
266
  ENDELSE
  IF keyword_set(wait) THEN BEGIN
     message,'Saved the results as FITS in the file: '+fits_save_and_restore+', and made a plot using the data in this file',/info
     wait,wait
  ENDIF
1d10fa6d   Ilyes Choubani   extinction exampl...
267
268
ENDIF

9e027842   Jean-Philippe Bernard   updated to new fu...
269
message,'Finished dustem_fit_ext_pol_example',/info
1d10fa6d   Ilyes Choubani   extinction exampl...
270
271
272
273

the_end:

END