Blame view

src/idl/dustem_stellarpopisrf_example.pro 11.1 KB
85803503   Annie Hughes   corrected proc name
1
PRO dustem_stellarpopisrf_example,model=model $
0dda35a7   Jean-Philippe Bernard   modified to inclu...
2
                                 ,sed_file=sed_file $
233b4f64   Annie Hughes   finalised ISRF ex...
3
                                 ,isrf_file=isrf_file $
0dda35a7   Jean-Philippe Bernard   modified to inclu...
4
                                 ,Nitermax=Nitermax $
0dda35a7   Jean-Philippe Bernard   modified to inclu...
5
6
                                 ,fits_save_and_restore=fits_save_and_restore $
                                 ,wait=wait $
27bec12a   Annie Hughes   tidied up help an...
7
                                 ,noobj=noobj $
0dda35a7   Jean-Philippe Bernard   modified to inclu...
8
9
                                 ,verbose=verbose $
                                 ,help=help
c9abf9b4   Ilyes Choubani   Uploading stellar...
10
11
12
13
14
15
16

;+
; NAME:
;    dustem_fit_stellarpopisrf_example  
;
; PURPOSE:
; This routine is an example of how to fit an observational SED
27bec12a   Annie Hughes   tidied up help an...
17
18
; (StokesI only) with DustEM and DustEMWrap, and an ISRF that is due
; to a user-defined population of nearby main sequence stars.
c9abf9b4   Ilyes Choubani   Uploading stellar...
19
;
27bec12a   Annie Hughes   tidied up help an...
20
21
22
23
24
25
26
27
; DustEMWrap reads information about the stellar spectral types (effective
; temperature, radius) from the EEM_dwarf_UBVIJHK_colors_Teff.txt file
; that is located in the Data/STELLARPOPS/ directory. This data file was
; authored by Prof. Erik Mamajek (see the file for more details).
;  
; For this example, we generate an SED using an input model and then
; launch the fit with a starting guess that has been shifted away from
; the true parameter values.
c9abf9b4   Ilyes Choubani   Uploading stellar...
28
29
30
31
32
;
; CATEGORY:
;    DustEMWrap, Distributed, High-Level, User Example
;
; CALLING SEQUENCE:
233b4f64   Annie Hughes   finalised ISRF ex...
33
;    dustem_fit_stellarpopisrf_example[,model=][sed_file=][isrf_file=][,postscript=][,Nitermax=][,fits_save_and_restore=][,/help,/wait,/verbose]
c9abf9b4   Ilyes Choubani   Uploading stellar...
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
;
; 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
;           'WD01_RV5p5B' model from Weingartner & Draine 2002 with Rv=5.5
;           'DL07' model from Draine & Li 2007
;           'J13' model from Jones et al 2013, as updated in
;                 Koehler et al 2014
233b4f64   Annie Hughes   finalised ISRF ex...
56
57
58
59
60
;           '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)
c9abf9b4   Ilyes Choubani   Uploading stellar...
61
62
63
;    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.  
233b4f64   Annie Hughes   finalised ISRF ex...
64
;    isrf_file = text file describing ISRF
c9abf9b4   Ilyes Choubani   Uploading stellar...
65
66
67
68
69
70
71
72
73
74
;    postscript = if set, final plot is saved as postscript in the
;                 current working directory
;    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
27bec12a   Annie Hughes   tidied up help an...
75
;    noobj     = if set, runs with no object graphics
c9abf9b4   Ilyes Choubani   Uploading stellar...
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
;
; 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:
;    
;
; EXAMPLES
;    dustem_fit_stellarpopisrf_example
233b4f64   Annie Hughes   finalised ISRF ex...
92
93
;    dustem_fit_stellarpopisrf_example,Nitermax=10,fits_save_and_restore='/tmp/mysavefile.fits'
;    dustem_fit_stellarpopisrf_example,model='DBP90',isrf_file='./myisrf_habing.dat',sed_file='./mysed.xcat'
c9abf9b4   Ilyes Choubani   Uploading stellar...
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
;
; MODIFICATION HISTORY:
;    Evolution details on the DustEMWrap gitlab.
;    See http://dustemwrap.irap.omp.eu/ for FAQ and help.  
;-


IF keyword_set(help) THEN BEGIN
  doc_library,'dustem_stellarpopisrf_example'
  goto,the_end
END

IF keyword_set(model) THEN BEGIN
  use_model=strupcase(model)
ENDIF ELSE BEGIN
233b4f64   Annie Hughes   finalised ISRF ex...
109
  use_model='DBP90'    ;Default is last dustem model
c9abf9b4   Ilyes Choubani   Uploading stellar...
110
111
ENDELSE

27bec12a   Annie Hughes   tidied up help an...
112
113
114
115
116
117
118
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
c9abf9b4   Ilyes Choubani   Uploading stellar...
119

27bec12a   Annie Hughes   tidied up help an...
120
use_polarization=0   ; initialize Dustemwrap in no polarization mode 
c9abf9b4   Ilyes Choubani   Uploading stellar...
121
122
123
124
125
126
127
128
129
use_verbose=0
if keyword_set(verbose) then use_verbose=1
use_Nitermax=5        ; maximum number of iterations for the fit
IF keyword_set(Nitermax) THEN use_Nitermax=Nitermax

dustem_define_la_common

;=== Set the (model-dependent) parameters that you want to fit
;=== Refer to the DustEM and DustEMWrap userguides for an explanation
233b4f64   Annie Hughes   finalised ISRF ex...
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
;=== of the different grain properties and types

;;===============================
;; example parameter initialisation 1
;; Here we aim to fit the distance to a single O7V star
;; other ISRF contributions are fixed to ~zero

pd = ['dustem_plugin_stellar_population_O7V3'];          ;distance to O7V star
true_vals =   [20]                ; true distance to the star
iv = true_vals+[4.]               ; distance we use as an initial guess

fpd=['dustem_plugin_stellar_population_O7V4' , $ ;number of O7V star (FIXED)
     '(*!dustem_params).G0'] ; Mathis field (FIXED TO ~ZERO)
fiv=[1.,1.e-12]

27bec12a   Annie Hughes   tidied up help an...
145
Npar=n_elements(pd)
233b4f64   Annie Hughes   finalised ISRF ex...
146
147
ulimed=replicate(0,Npar) & ulimed[0]=1 
ulims=replicate(0,Npar) & ulims[0]=25.
27bec12a   Annie Hughes   tidied up help an...
148
llimed=replicate(1,Npar)
233b4f64   Annie Hughes   finalised ISRF ex...
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
llims=replicate(1.e-15,Npar) & llims[0]=15.        

;;=== end example part 1
;;===============================

;; ;;===============================
;; ;;=== example parameter initialisation 2
;; ;;=== Here we aim to fit the distance to a single O7V star
;; ;;=== We also include a diffuse Habing ISRF that we generate below
;; ;;=== dustem_create_rfield

;; pd = [ 'dustem_plugin_stellar_population_O7V3' , $          ;distance to O7V star
;;      'dustem_plugin_modify_isrf_1']                         ; amplitude of user-ISRF
;; true_vals =   [20,1.]                ;  distance to the star and true Habing ISRF amplitude
;; iv = true_vals+[4.,-0.2]               ; distance and ISRF amplitude we use as initial guesses

;; fpd=['dustem_plugin_stellar_population_O7V4' , $ ;number of O7V star (FIXED)
;;      '(*!dustem_params).G0'] ; Mathis field (FIXED TO ~ZERO)
;; fiv=[1.,1.e-12]

;; Npar=n_elements(pd)
;; ulimed=replicate(0,Npar) & ulimed[0]=1 
;; ulims=replicate(0,Npar) & ulims[0]=25.
;; llimed=replicate(1,Npar)
;; llims=replicate(1.e-15,Npar) & llims[0]=15.        

;; mywaves=[]
;; my_isrf_file='./myisrf_habing.dat'
;; myisrf=dustem_create_rfield([0],isrf=2,fname=my_isrf_file,x=mywaves)
;; isrf_file=my_isrf_file

;; 
;;=== end example part 2
;; ;;===============================

;=== INITIALIZE DUSTEMWRAP
27bec12a   Annie Hughes   tidied up help an...
185

27bec12a   Annie Hughes   tidied up help an...
186
dustem_init,model=use_model,polarization=use_polarization
c9abf9b4   Ilyes Choubani   Uploading stellar...
187
188
189

!dustem_nocatch=1
!dustem_verbose=1
233b4f64   Annie Hughes   finalised ISRF ex...
190
IF keyword_set(noobj) THEN !dustem_noobj=1
27bec12a   Annie Hughes   tidied up help an...
191
192
193
194
195
;; ;!dustem_dim=1 ; this option is to dim the stellar population ISRF with the current Dustem extinction
;; ;We're fitting total optical depths so the dimmed-ISRF scenario is a reasonable assumption.
;; ;Because of this the final parameter values are slightly lower than the initial (real) values.
;; ;But this is because the first run was not extinct with the current dustem extinction 
;; ;since it comes prior to the dustem run. Meaning the first ISRF has to be extinct to see if the paramters are retrieved.
c9abf9b4   Ilyes Choubani   Uploading stellar...
196

233b4f64   Annie Hughes   finalised ISRF ex...
197
198
199
200
if keyword_set(isrf_file) then begin
   message,'Setting ISRF component from file: '+isrf_file,/info
   !dustem_isrf_file=ptr_new(isrf_file)
endif
c9abf9b4   Ilyes Choubani   Uploading stellar...
201

233b4f64   Annie Hughes   finalised ISRF ex...
202
;=== GENERATE DATA:
27bec12a   Annie Hughes   tidied up help an...
203
;NB: HERE WE ARE READING AN SED FILE JUST TO SET-UP THE SED STRUCTURE
233b4f64   Annie Hughes   finalised ISRF ex...
204
205
;AND FILTERS. WE REPLACE THE STOKES I and STOKES I UNCERTAINTY VALUES
;LATER USING THE MODEL ITSELF
c9abf9b4   Ilyes Choubani   Uploading stellar...
206
dir=!dustem_wrap_soft_dir+'/Data/EXAMPLE_OBSDATA/'
27bec12a   Annie Hughes   tidied up help an...
207
file=dir+'example_SED_1.xcat'
0dda35a7   Jean-Philippe Bernard   modified to inclu...
208
IF keyword_set(sed_file) THEN file=sed_file
c9abf9b4   Ilyes Choubani   Uploading stellar...
209
210
211
212
213
214
215
216
sed=read_xcat(file,/silent)

if keyword_set(wait) then begin
   message,'Finished reading SED data: '+file,/info
   wait,wait
end


c9abf9b4   Ilyes Choubani   Uploading stellar...
217
;=== initializing IQU and associated errors to avoid problems when checking SED in dustem_set_data.pro
c9abf9b4   Ilyes Choubani   Uploading stellar...
218
219
220
for i=4l,n_tags(sed)-1 do begin
    sed.(i) = sed.sigmaii
endfor
c9abf9b4   Ilyes Choubani   Uploading stellar...
221
222
dustem_set_data,sed,sed

233b4f64   Annie Hughes   finalised ISRF ex...
223
224
;;== SET INITIAL VALUES AND LIMITS OF THE PARAMETERS THAT WILL BE
;;== ADJUSTED DURING THE FIT
c9abf9b4   Ilyes Choubani   Uploading stellar...
225
226
dustem_init_params,use_model,pd,iv,fpd=fpd,fiv=fiv,ulimed=ulimed,llimed=llimed,ulims=ulims,llims=llims

233b4f64   Annie Hughes   finalised ISRF ex...
227
228
229
;=== Generate the emission data using the dust model
sed.StokesI = dustem_compute_sed(true_vals,st=st)
sed.SigmaII = sed.StokesI*0.01
c9abf9b4   Ilyes Choubani   Uploading stellar...
230
231

;== SET THE OBSERVATIONAL STRUCTURE
27bec12a   Annie Hughes   tidied up help an...
232
dustem_set_data, sed, sed
c9abf9b4   Ilyes Choubani   Uploading stellar...
233
234
235
236
237
238
239
240


if keyword_set(wait) then begin
   message,'Finished initializing DustEMWrap, including plugins and fixed parameters',/info
   wait,wait
end

;== RUN THE FIT
233b4f64   Annie Hughes   finalised ISRF ex...
241
tol=1.e-16
c9abf9b4   Ilyes Choubani   Uploading stellar...
242
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

xr_m = [1.,5e5]
yr_m = [5e-8,1.00e6]


tit='Spectral Energy Distribution'
ytit=textoidl('I_\nu (MJy/sr) for N_H=10^{20} H/cm^2')
xtit=textoidl('\lambda (\mum)')
;Set show_plot to 0 to hide plot
;Commented or set to 1 is the same since !dustem_show_plot (existing sysvar) is initialized to 1 in dustem_init
;show_plot = 0 
t1=systime(0,/sec)
res=dustem_mpfit_data(tol=tol,Nitermax=use_Nitermax,gtol=gtol $
                      ,/xlog,/ylog,xr_m=xr_m,yr_m=yr_m,xtit=xtit,ytit=ytit,title=tit $
                      ,legend_xpos=legend_xpos,legend_ypos=legend_ypos $
                      ,errors=errors,chi2=chi2,rchi2=rchi2,show_plot=show_plot)
t2=systime(0,/sec)


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


c9abf9b4   Ilyes Choubani   Uploading stellar...
268
269
270
271
272
273
IF !dustem_noobj THEN BEGIN
  dustemwrap_plot_noobj,*(*!dustem_fit).CURRENT_PARAM_VALUES,dummy,xr=xr,/xstyle,yr=yr,/ysty,/ylog,/xlog,title=tit+' (Final fit)'
 ENDIF ELSE BEGIN
  dustemwrap_plot,*(*!dustem_fit).CURRENT_PARAM_VALUES,dummy,xr=xr,/xstyle,yr=yr,/ysty,/ylog,/xlog,title=tit+' (Final fit)'
ENDELSE

c9abf9b4   Ilyes Choubani   Uploading stellar...
274
275
276
277
278
279
280
281
282
283
284
if keyword_set(wait) then begin
   message,'Made the plot of the final results',/info
   wait,wait
end

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
0dda35a7   Jean-Philippe Bernard   modified to inclu...
285
  dustem_read_fits_table,filename=fits_save_and_restore,dustem_st=dustem_spectra_st
c9abf9b4   Ilyes Choubani   Uploading stellar...
286
287
288
289
290
291
292
293
294
295
296
297
298
  ;==== plot result taken from the saved fits table
  res=*(*!dustem_fit).CURRENT_PARAM_VALUES
  IF !dustem_noobj THEN BEGIN
    dustemwrap_plot_noobj,res,dustem_spectra_st,xr=xr,/xstyle,yr=yr,/ysty,/ylog,/xlog,title=tit+' (From Saved FITS file)'
  ENDIF ELSE BEGIN
    dustemwrap_plot,res,dustem_spectra_st,xr=xr,/xstyle,yr=yr,/ysty,/ylog,/xlog,title=tit+' (From Saved FITS file)'
  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
ENDIF

27bec12a   Annie Hughes   tidied up help an...
299
message,'Finished dustem_stellarpopisrf_example',/info
c9abf9b4   Ilyes Choubani   Uploading stellar...
300
301
302
303
304


the_end:

END