Blame view

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

;+
; 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...
17
; (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:
e431104b   Annie Hughes   general updates f...
25
;    dustem_fit_ext_pol_example[,model=][ext_file=][,postscript=][,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:
489c1f73   Annie Hughes   updated call to d...
40
41
42
;    model = specifies the interstellar dust mixture used by
;            DustEM. See userguide or dustem_init.pro for more details about
;            available models.
9e027842   Jean-Philippe Bernard   updated to new fu...
43
;    ext_file = string naming the path to text file in .xcat format that
2d758fdd   Annie Hughes   improved commenti...
44
45
46
47
48
;          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...
49
;    Nitermax = maximum number of fit iterations. Default is 5.
e431104b   Annie Hughes   general updates f...
50
;    postscript = if set, final plot is saved as postscript file
6735604d   Annie Hughes   making FITS read ...
51
;    fits_save = if set, save the fit results in a binary
e431104b   Annie Hughes   general updates f...
52
;               FITS file. 
9e027842   Jean-Philippe Bernard   updated to new fu...
53
54
55
;    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...
56
;    noobj     = if set, runs with no object graphics
9e027842   Jean-Philippe Bernard   updated to new fu...
57
58
59
60
61
62
63
64
65
66
67
68
;
; 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...
69
;    
9e027842   Jean-Philippe Bernard   updated to new fu...
70
71
72
;
; EXAMPLES
;    dustem_fit_ext_pol_example
6735604d   Annie Hughes   making FITS read ...
73
;    dustem_fit_ext_pol_example,Nitermax=1,fits_save='/tmp/mysavefile.fits'
489c1f73   Annie Hughes   updated call to d...
74
;    dustem_fit_ext_pol_example,model='G17_MODELD'
9e027842   Jean-Philippe Bernard   updated to new fu...
75
76
;
; MODIFICATION HISTORY:
489c1f73   Annie Hughes   updated call to d...
77
;    Written by JPB Apr-2021
9e027842   Jean-Philippe Bernard   updated to new fu...
78
79
80
81
;    Evolution details on the DustEMWrap gitlab.
;    See http://dustemwrap.irap.omp.eu/ for FAQ and help.  
;-

1d10fa6d   Ilyes Choubani   extinction exampl...
82
83

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

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

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

2d758fdd   Annie Hughes   improved commenti...
98
use_polarization=0.   ;default is no polarization in models
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
88872c38   Ilyes Choubani   small update. Cha...
102
use_Nitermax=1        ; maximum number of iterations for the fit
2d758fdd   Annie Hughes   improved commenti...
103
104
105
IF keyword_set(Nitermax) THEN use_Nitermax=Nitermax

dustem_define_la_common
1d10fa6d   Ilyes Choubani   extinction exampl...
106
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

2d758fdd   Annie Hughes   improved commenti...
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
;=== 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
478a4d49   Ilyes Choubani   Correcting some p...
130
iv = true_vals+[5.00E-4,-7.00E-4,8.00E-4,5] ; this is the vector of starting guesses for the fit
2d758fdd   Annie Hughes   improved commenti...
131
132
133
134

Npar=n_elements(pd)
ulimed=replicate(0,Npar)
llimed=replicate(1,Npar) & llimed[3]=0
97d6b02a   Annie Hughes   changed llims to ...
135
llims=replicate(1.e-15,Npar)
2d758fdd   Annie Hughes   improved commenti...
136
use_polarization=1
1d10fa6d   Ilyes Choubani   extinction exampl...
137
        
2d758fdd   Annie Hughes   improved commenti...
138
139
140
141
;=== Fixed parameters
fpd=[]
;==initial parameter values for fixed parameters
fiv=[]
1d10fa6d   Ilyes Choubani   extinction exampl...
142
        
1d10fa6d   Ilyes Choubani   extinction exampl...
143

2d758fdd   Annie Hughes   improved commenti...
144
145
146
147
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...
148
149
150


;== INITIALISE DUSTEM
2d758fdd   Annie Hughes   improved commenti...
151
dustem_init,model=use_model,polarization=use_polarization
1d10fa6d   Ilyes Choubani   extinction exampl...
152
!dustem_nocatch=1
9e027842   Jean-Philippe Bernard   updated to new fu...
153
!dustem_verbose=use_verbose
2d758fdd   Annie Hughes   improved commenti...
154
155
IF keyword_set(noobj) THEN !dustem_noobj=1
!EXCEPT=2 ; for debugging
1d10fa6d   Ilyes Choubani   extinction exampl...
156
157


2d758fdd   Annie Hughes   improved commenti...
158
159
;=== 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...
160
161

dir=!dustem_wrap_soft_dir+'/Data/EXAMPLE_OBSDATA/'
2d758fdd   Annie Hughes   improved commenti...
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
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
88872c38   Ilyes Choubani   small update. Cha...
180
dustem_set_data, m_fit=m_fit,m_show=m_show,x_fit=ext,x_show=ext
2d758fdd   Annie Hughes   improved commenti...
181
182
183
184
185
186
187
188
189
190

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

52a3c8dc   Jean-Philippe Bernard   mise a jour
191
  ;stop
489c1f73   Annie Hughes   updated call to d...
192
  
2d758fdd   Annie Hughes   improved commenti...
193
194
195
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)
88872c38   Ilyes Choubani   small update. Cha...
196
   toto = dustem_compute_stokext(true_vals,st=st)
2d758fdd   Annie Hughes   improved commenti...
197
198
   ext.EXT_Q = toto[0]
   ext.EXT_U = toto[1]
489c1f73   Annie Hughes   updated call to d...
199

52a3c8dc   Jean-Philippe Bernard   mise a jour
200
   ;stop
2d758fdd   Annie Hughes   improved commenti...
201
202
203
204
   
;== RESET THE OBSERVATIONAL STRUCTURE
;== note that m_fit and m_show do not exist -- this is deliberate
;== since we are not treating emission data
489c1f73   Annie Hughes   updated call to d...
205
   dustem_set_data, m_fit=m_fit,m_show=m_show,x_fit=ext,x_show=ext
2d758fdd   Annie Hughes   improved commenti...
206
207

   IF keyword_set(wait) THEN BEGIN
b125205a   Annie Hughes   updated examples ...
208
      message,'Finished generating a synthetic EXT from the model '+use_model,/info
2d758fdd   Annie Hughes   improved commenti...
209
210
211
212
213
     wait,wait
  ENDIF

end

52a3c8dc   Jean-Philippe Bernard   mise a jour
214
;stop
2d758fdd   Annie Hughes   improved commenti...
215
216

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

2d758fdd   Annie Hughes   improved commenti...
219
220
;=== INFORMATION TO MAKE THE PLOTS
;=== _x/_extinction means extinction plots, _m/_emissions means emission plots
a73f6031   Ilyes Choubani   small corrections...
221
xr_x=[0.01,30]
88872c38   Ilyes Choubani   small update. Cha...
222
yr_fpolext=[1.00E-10,50]
478a4d49   Ilyes Choubani   Correcting some p...
223
224

;yr_fpolext=[1e-4,30]
2d758fdd   Annie Hughes   improved commenti...
225
tit='Dust Optical Depth'
1d10fa6d   Ilyes Choubani   extinction exampl...
226

2d758fdd   Annie Hughes   improved commenti...
227
;===  RUN THE FIT
52a3c8dc   Jean-Philippe Bernard   mise a jour
228
;stop
1d10fa6d   Ilyes Choubani   extinction exampl...
229
t1=systime(0,/sec)
489c1f73   Annie Hughes   updated call to d...
230

1d10fa6d   Ilyes Choubani   extinction exampl...
231
res=dustem_mpfit_data(tol=tol,Nitermax=use_Nitermax,gtol=gtol $
478a4d49   Ilyes Choubani   Correcting some p...
232
                      ,/xlog,/ylog,xr_x=xr_x,yr_fpolext=yr_fpolext,xtit=xtit,ytit=ytit,title=tit $
1d10fa6d   Ilyes Choubani   extinction exampl...
233
                      ,legend_xpos=legend_xpos,legend_ypos=legend_ypos $
dc84fd94   Ilyes Choubani   Small corrections...
234
                      ,errors=errors,chi2=chi2,rchi2=rchi2,show_plot=show_plot)
1d10fa6d   Ilyes Choubani   extinction exampl...
235
236
t2=systime(0,/sec)

2d758fdd   Annie Hughes   improved commenti...
237
238
239
240
241
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
489c1f73   Annie Hughes   updated call to d...
242

e431104b   Annie Hughes   general updates f...
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
;=== MAKE THE FINAL PLOT
IF keyword_set(postscript) THEN BEGIN
;    dir_ps='./'
    mydevice=!d.name
    set_plot,'PS'
;    ps_file=dir_ps+postscript
    ps_file=postscript
    device,filename=ps_file,/color
ENDIF

;stop

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

IF keyword_set(postscript) THEN BEGIN
  device,/close
  set_plot,mydevice
  message,'Wrote '+ps_file,/info
ENDIF




6735604d   Annie Hughes   making FITS read ...
270
271
272
IF keyword_set(fits_save) THEN BEGIN
   message,'Writing out results structure: '+fits_save,/info
   dustem_write_fits_table,filename=fits_save,help=help
9e027842   Jean-Philippe Bernard   updated to new fu...
273
274
;=== 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
6735604d   Annie Hughes   making FITS read ...
275
276
277
278
279
280
281
282
283
284
285

;; Moved the following to dustem_fitsio_example.pro
;; dustem_read_fits_table,filename=fits_save,dustem_st=dustem_st
  ;; ;==== plot result taken from the saved fits table
  ;; res=*(*!dustem_fit).CURRENT_PARAM_VALUES
  ;; !dustem_end=-1; subsequent calls to the fit. 0 is intialization an 1 is for the last iteration. It's initialized to 0 after the creation of the fits file.
  ;; IF !dustem_noobj THEN BEGIN
  ;;    dustemwrap_plot_noobj,res,st=dustem_st,xr=xr,/xstyle,yr=yr,/ysty,/ylog,/xlog,title=tit+' (From Saved FITS file)'
  ;; ENDIF ELSE BEGIN
  ;;   dustemwrap_plot,res,st=dustem_st,xr=xr,/xstyle,yr=yr,/ysty,/ylog,/xlog,title=tit+' (From Saved FITS file)'
  ;; ENDELSE
9e027842   Jean-Philippe Bernard   updated to new fu...
286
  IF keyword_set(wait) THEN BEGIN
6735604d   Annie Hughes   making FITS read ...
287
     message,'Saved the results as FITS in the file: '+fits_save+', and made a plot using the data in this file',/info
9e027842   Jean-Philippe Bernard   updated to new fu...
288
289
     wait,wait
  ENDIF
1d10fa6d   Ilyes Choubani   extinction exampl...
290
291
ENDIF

1d10fa6d   Ilyes Choubani   extinction exampl...
292
293

the_end:
e431104b   Annie Hughes   general updates f...
294
message,'Finished dustem_fit_ext_pol_example',/info
1d10fa6d   Ilyes Choubani   extinction exampl...
295
296

END