Blame view

src/idl/dustem_write_fits_table.pro 15.3 KB
1cf58fd8   Jean-Philippe Bernard   First commit
1
2
3
4
5
PRO dustem_write_fits_table,filename=filename,help=help

;+
; NAME:
;    dustem_write_fits_table
fdf4c603   Annie Hughes   cosmetic changes ...
6
;
1cf58fd8   Jean-Philippe Bernard   First commit
7
; PURPOSE:
201cf7e2   Annie Hughes   minor changes to ...
8
;    Write a FITS table with content of current DustEMWrap system variables
fdf4c603   Annie Hughes   cosmetic changes ...
9
;
1cf58fd8   Jean-Philippe Bernard   First commit
10
; CATEGORY:
201cf7e2   Annie Hughes   minor changes to ...
11
;    DustEMWrap, Distributed, High-Level, User Convenience
fdf4c603   Annie Hughes   cosmetic changes ...
12
;
1cf58fd8   Jean-Philippe Bernard   First commit
13
14
; CALLING SEQUENCE:
;    dustem_write_fits_table,file[,/help]
fdf4c603   Annie Hughes   cosmetic changes ...
15
;
1cf58fd8   Jean-Philippe Bernard   First commit
16
; INPUTS:
201cf7e2   Annie Hughes   minor changes to ...
17
;    file      = File name to be written (default='./dustemwrap_results.fits')
fdf4c603   Annie Hughes   cosmetic changes ...
18
;
1cf58fd8   Jean-Philippe Bernard   First commit
19
20
; OPTIONAL INPUT PARAMETERS:
;    None
fdf4c603   Annie Hughes   cosmetic changes ...
21
;
1cf58fd8   Jean-Philippe Bernard   First commit
22
23
; OUTPUTS:
;    None
fdf4c603   Annie Hughes   cosmetic changes ...
24
;
1cf58fd8   Jean-Philippe Bernard   First commit
25
26
; OPTIONAL OUTPUT PARAMETERS:
;    None
fdf4c603   Annie Hughes   cosmetic changes ...
27
;
1cf58fd8   Jean-Philippe Bernard   First commit
28
29
; ACCEPTED KEY-WORDS:
;    help      = If set, print this help
fdf4c603   Annie Hughes   cosmetic changes ...
30
;
1cf58fd8   Jean-Philippe Bernard   First commit
31
32
; COMMON BLOCKS:
;    None
fdf4c603   Annie Hughes   cosmetic changes ...
33
;
1cf58fd8   Jean-Philippe Bernard   First commit
34
; SIDE EFFECTS:
201cf7e2   Annie Hughes   minor changes to ...
35
;    Output FITS file is written to disk.
fdf4c603   Annie Hughes   cosmetic changes ...
36
;
1cf58fd8   Jean-Philippe Bernard   First commit
37
; RESTRICTIONS:
201cf7e2   Annie Hughes   minor changes to ...
38
;    The DustEMWrap IDL code must be installed
fdf4c603   Annie Hughes   cosmetic changes ...
39
;
1cf58fd8   Jean-Philippe Bernard   First commit
40
41
; PROCEDURE:
;    None
fdf4c603   Annie Hughes   cosmetic changes ...
42
;
1cf58fd8   Jean-Philippe Bernard   First commit
43
44
45
; EXAMPLES
;    
; MODIFICATION HISTORY:
1cf2bf59   Annie Hughes   updated dustem_da...
46
47
48
;    Written by J.-Ph. Bernard July 2022
;    Evolution details on the DustEMWrap gitlab.
;    See http://dustemwrap.irap.omp.eu/ for FAQ and help.  
1cf58fd8   Jean-Philippe Bernard   First commit
49
50
;-

1cf58fd8   Jean-Philippe Bernard   First commit
51
52
53
54
55
56

IF keyword_set(help) THEN BEGIN
  doc_library,'dustem_write_fits_table'
  goto,the_end
ENDIF

762cbe48   Jean-Philippe Bernard   modifed to cope f...
57
58
59
60
61
62
63
64
used_model=!dustem_model

emission_sed_present=ptr_valid((*!dustem_data).sed)
extinction_sed_present=ptr_valid((*!dustem_data).ext)
;dustem_activate_plugins,p_dim/(*(*!dustem_fit).param_init_values),st=st  
;fact = 1.e4*(*!dustem_HCD)/(4.*!pi)/(3.e8/1.e-6/st.sed.wav)*1.e20/1.e7 ;this is correct despite the way it is presented (1.e4/1e.7*1e.20=1.e17 which is the factor to convert from ergs to Mega Janskys)
;SED_spec = st.sed.em_tot * fact

1cf58fd8   Jean-Philippe Bernard   First commit
65
;===== run dustem to get predicted spectrum and sed
762cbe48   Jean-Philippe Bernard   modifed to cope f...
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
IF emission_sed_present THEN BEGIN
	dustem_predicted_sed=dustem_compute_sed(*(*!dustem_fit).current_param_values,st=dustem_st)
	IF !run_pol THEN BEGIN
	;This is needed to compute Q,U of both SED and spectra
	   dustem_predicted_polsed=dustem_compute_stokes(*(*!dustem_fit).current_param_values, $
	                                                 Q_spec=dustem_predicted_Q_spec,U_spec=dustem_predicted_U_spec,PSI_spec=dustem_predicted_PSI_spec, $
	                                                 dustem_psi_em=dustem_psi_em)
	   dustem_predicted_Qsed=dustem_predicted_polsed[0]
	   dustem_predicted_Used=dustem_predicted_polsed[1]
	ENDIF

	;===== define structures containing results
	one_str_input_SED={FILTER:'',Wavelength:la_undef(4),I:la_undef(5),Q:la_undef(5),U:la_undef(5),varianceII:la_undef(5),varianceQQ:la_undef(5),varianceUU:la_undef(5)}
	one_str_predicted_SED={FILTER:'',Wavelength:la_undef(4),I:la_undef(5),Q:la_undef(5),U:la_undef(5)}
	;one_str_predicted_spectrum_tot={Wavelength:0.,I:0.,Q:0.,U:0.}
	;one_str_predicted_spectrum_grain1={Wavelength:0.,I:0.,Q:0.,U:0.}

	Nsed=n_elements((*(*!dustem_data).sed).filt_names)
	str_input_SED=replicate(one_str_input_SED,Nsed)
	str_input_SED.FILTER=(*(*!dustem_data).sed).filt_names
	str_input_SED.Wavelength=(*(*!dustem_data).sed).wav
	str_input_SED.I=(*(*!dustem_data).sed).values
	str_input_SED.varianceII=(*(*!dustem_data).sed).sigma   ;should it be squared ??

	N_predicted_sed=n_elements(dustem_predicted_sed)
	str_predicted_SED=replicate(one_str_predicted_SED,N_predicted_sed)
	;str_predicted_EXT=replicate(one_str_predicted_SED,N_predicted_sed)
	fully_undefined_sed=str_predicted_SED
	str_predicted_SED.FILTER=(*(*!dustem_data).sed).filt_names    ;taken from input SED
	str_predicted_SED.Wavelength=(*(*!dustem_data).sed).wav       ;taken from input SED
	str_predicted_SED.I=dustem_predicted_sed    
	;stop
	IF !run_pol THEN BEGIN
		str_predicted_SED.Q=dustem_predicted_Qsed
		str_predicted_SED.U=dustem_predicted_Used
		;str_predicted_EXT.Q=dustem_predicted_Qext
		;str_predicted_EXT.U=dustem_predicted_Uext
	ENDIF ELSE BEGIN
		str_predicted_SED.Q=fully_undefined_sed.Q
		str_predicted_SED.U=fully_undefined_sed.U
		;str_predicted_EXT.Q=fully_undefined_sed.Q
		;str_predicted_EXT.U=fully_undefined_sed.U
	ENDELSE
3a8e4128   Jean-Philippe Bernard   fixed writing pol...
109
ENDIF
1cf58fd8   Jean-Philippe Bernard   First commit
110

72089d7a   Jean-Philippe Bernard   improved to save ...
111

762cbe48   Jean-Philippe Bernard   modifed to cope f...
112
113
114
115
116
117
118
119
120
121
122
123
124
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
151
152
153
154
IF extinction_sed_present THEN BEGIN
	;stop
	dustem_predicted_ext=dustem_compute_ext(*(*!dustem_fit).current_param_values,st=dustem_st)
	IF !run_pol THEN BEGIN
	;This is needed to compute Q,U of both SED and spectra
	   dustem_predicted_polext=dustem_compute_stokext((*!dustem_fit).current_param_values,st=dustem_st)
	   ;dustem_predicted_polext=dustem_compute_polext(*(*!dustem_fit).current_param_values,st=dustem_st, $
	   ;                                              POLEXT_spec=POLEXT_spec,SPEXT_spec=SPEXT_spec,dustem_fpolext=dustem_fpolext,dustem_ext=dustem_ext)
	   dustem_predicted_Qext=dustem_predicted_polext[0]
	   dustem_predicted_Uext=dustem_predicted_polext[1]
	ENDIF

	;===== define structures containing results
	;one_str_input_EXT=dustem_initialize_internal_sed(1)
	one_str_input_EXT={FILTER:'',Wavelength:la_undef(4),I:la_undef(5),Q:la_undef(5),U:la_undef(5),varianceII:la_undef(5),varianceQQ:la_undef(5),varianceUU:la_undef(5)}
	one_str_predicted_EXT={FILTER:'',Wavelength:la_undef(4),I:la_undef(5),Q:la_undef(5),U:la_undef(5)}
	;one_str_predicted_spectrum_tot={Wavelength:0.,I:0.,Q:0.,U:0.}
	;one_str_predicted_spectrum_grain1={Wavelength:0.,I:0.,Q:0.,U:0.}

	Next=n_elements((*(*!dustem_data).ext).filt_names)
	str_input_EXT=replicate(one_str_input_EXT,Next)
	str_input_EXT.FILTER=(*(*!dustem_data).ext).filt_names
	str_input_EXT.Wavelength=(*(*!dustem_data).ext).wav
	str_input_EXT.I=(*(*!dustem_data).ext).values
	str_input_EXT.varianceII=(*(*!dustem_data).ext).sigma   ;should it be squared ??

	N_predicted_ext=n_elements(dustem_predicted_polext[0])
	str_predicted_EXT=replicate(one_str_predicted_EXT,N_predicted_EXT)
	fully_undefined_ext=str_predicted_ext
	str_predicted_EXT.FILTER=(*(*!dustem_data).ext).filt_names    ;taken from input SED
	str_predicted_EXT.Wavelength=(*(*!dustem_data).ext).wav       ;taken from input SED
	str_predicted_EXT.I=dustem_predicted_ext   
	IF !run_pol THEN BEGIN
		str_predicted_EXT.Q=dustem_predicted_Qext
		str_predicted_EXT.U=dustem_predicted_Uext
	ENDIF ELSE BEGIN
		str_predicted_EXT.Q=fully_undefined_ext.Q
		str_predicted_EXT.U=fully_undefined_ext.U
	ENDELSE
ENDIF

Ngrains=n_tags(dustem_st.sed)-2

3a8e4128   Jean-Philippe Bernard   fixed writing pol...
155
;stop
1cf58fd8   Jean-Philippe Bernard   First commit
156

762cbe48   Jean-Philippe Bernard   modifed to cope f...
157
;N_predicted_spectra=n_elements(dustem_spectra_st.sed)
1cf58fd8   Jean-Philippe Bernard   First commit
158
159
160
161
162
163
164
165

;===== Fill in header with parameter values
parameters_desc=*(*!dustem_fit).PARAM_DESCS
parameters_init_values=*(*!dustem_fit).PARAM_INIT_VALUES
best_parameters=*(*!dustem_fit).CURRENT_PARAM_VALUES
best_parameters_uncertainties=*(*!dustem_fit).CURRENT_PARAM_ERRORS
best_fit_chi2=(*!dustem_fit).CHI2
best_fit_rchi2=(*!dustem_fit).RCHI2
72089d7a   Jean-Philippe Bernard   improved to save ...
166
parameters_func_values=*(*!dustem_fit).PARAM_FUNC
1cf58fd8   Jean-Philippe Bernard   First commit
167
168
169

Nparams=n_elements(parameters_desc)

1cf58fd8   Jean-Philippe Bernard   First commit
170
;stop
3a8e4128   Jean-Philippe Bernard   fixed writing pol...
171
172
173
174
175
176
;This is what will be saved
;help,str_input_SED,/str
;help,str_predicted_SED,/str
;help,dustem_spectra_st.sed,/str
;help,dustem_spectra_st.ext,/str

3b2e1c40   Annie Hughes   updated default f...
177
file='./dustemwrap_tmp.fits'
1cf58fd8   Jean-Philippe Bernard   First commit
178
;==== Write the observed SED in extension 1
f2808c64   Jean-Philippe Bernard   improved
179
unit=1L
762cbe48   Jean-Philippe Bernard   modifed to cope f...
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
;Yes, toto does not exist. This is just to write a dummy input to allow for a general header
mwrfits,toto,file,/create
IF emission_sed_present THEN BEGIN
	;==== add the input emission SED
	mwrfits,str_input_SED,file
	unit_input_sed=unit
	unit=unit+1
	;==== add the predicted emission SED
	mwrfits,str_predicted_SED,file
	unit_predicted_sed=unit
	unit=unit+1
ENDIF ELSE BEGIN
	unit_input_sed=-1
	unit_predicted_sed=-1
ENDELSE
IF extinction_sed_present THEN BEGIN
	;stop
	mwrfits,str_input_EXT,file
	unit_input_ext=unit
	unit=unit+1
	;==== add the predicted emission SED
	mwrfits,str_predicted_EXT,file
	unit_predicted_ext=unit
	unit=unit+1
ENDIF ELSE BEGIN
	unit_input_ext=-1
	unit_predicted_ext=-1
ENDELSE
;==== add the predicted per-grain emission spectrum
mwrfits,dustem_st.sed,file
f2808c64   Jean-Philippe Bernard   improved
210
211
unit_predicted_spectra=unit
unit=unit+1
762cbe48   Jean-Philippe Bernard   modifed to cope f...
212
213
;==== add the predicted per-grain extinction spectrum
mwrfits,dustem_st.ext,file
f2808c64   Jean-Philippe Bernard   improved
214
unit_predicted_extinctions=unit
762cbe48   Jean-Philippe Bernard   modifed to cope f...
215
216
217
218
219
220
221
222
223
224
225
226
unit=unit+1
IF !run_pol EQ 1 THEN BEGIN
	mwrfits,dustem_st.polsed,file
	unit_predicted_spectra_pol=unit
	unit=unit+1
	mwrfits,dustem_st.polext,file
	unit_predicted_extinctions_pol=unit
	unit=unit+1
ENDIF ELSE BEGIN
	unit_predicted_spectra_pol=-1
	unit_predicted_extinctions_pol=-1
ENDELSE
f2808c64   Jean-Philippe Bernard   improved
227

762cbe48   Jean-Philippe Bernard   modifed to cope f...
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
extension_numbers=[unit_input_sed,unit_predicted_sed, $
				   unit_input_ext,unit_predicted_ext, $
				   unit_predicted_spectra,unit_predicted_extinctions, $
				   unit_predicted_spectra_pol,unit_predicted_extinctions_pol]
extensions_strs=['INPUT_EMISSION_SED','DUSTEM_PREDICTED_SED', $
				 'INPUT_EXTINCTION_SED','DUSTEM_PREDICTED_EXTINCTION_SED', $
				 'DUSTEM_PREDICTED_EMISSION_SPECTRA','DUSTEM_PREDICTED_EXTINCTION_SPECTRA', $
				 'DUSTEM_PREDICTED_EMISSION_SPECTRA_POL','DUSTEM_PREDICTED_EXTINCTION_SPECTRA_POL']

ind=where(extension_numbers NE -1,count)
extension_numbers=extension_numbers[ind]
extensions_strs=extensions_strs[ind]
order=sort(extension_numbers)
extension_numbers=extension_numbers[order]
extensions_strs=extensions_strs[order]
Nextensions=n_elements(extension_numbers)
f2808c64   Jean-Philippe Bernard   improved
244
245
;print,unit_input_sed,unit_predicted_sed,unit_predicted_spectra,unit_predicted_extinctions
;stop
1cf58fd8   Jean-Philippe Bernard   First commit
246

762cbe48   Jean-Philippe Bernard   modifed to cope f...
247
248
249
;stop

;===== read back fits file to get proper extension headers
3b2e1c40   Annie Hughes   updated default f...
250
file='./dustemwrap_tmp.fits'
762cbe48   Jean-Philippe Bernard   modifed to cope f...
251
252
253
254
255
256
toto=mrdfits(file,0,hdr)      ;this would be to get the main header
;stop
IF unit_input_sed NE -1 THEN sst_input_sed=mrdfits(file,unit_input_sed,header_input_sed)
IF unit_predicted_sed NE -1 THEN sst_predicted_SED=mrdfits(file,unit_predicted_sed,header_predicted_SED)
IF unit_input_ext NE -1 THEN sst_input_ext=mrdfits(file,unit_input_ext,header_input_ext)
IF unit_predicted_ext NE -1 THEN sst_predicted_ext=mrdfits(file,unit_predicted_ext,header_predicted_ext)
f2808c64   Jean-Philippe Bernard   improved
257
;sst_predicted_spectrum_tot=mrdfits(file,3,header_predicted_spectrum_tot)
762cbe48   Jean-Philippe Bernard   modifed to cope f...
258
259
260
261
262
263
264
265
266
267
dustem_st.sed=mrdfits(file,unit_predicted_spectra,header_predicted_spectra)
dustem_st.ext=mrdfits(file,unit_predicted_extinctions,header_predicted_extinctions)
IF !run_pol EQ 1 THEN BEGIN
	dustem_st.polsed=mrdfits(file,unit_predicted_spectra_pol,header_predicted_spectra)
	dustem_st.polext=mrdfits(file,unit_predicted_extinctions_pol,header_predicted_extinctions)
ENDIF
;===== write content of extensions in main header
FOR i=0L,Nextensions-1 DO BEGIN
	sxaddpar,hdr,'EXT'+strtrim(i+1,2),extensions_strs[i],'fits file extension'
ENDFOR
1cf58fd8   Jean-Philippe Bernard   First commit
268

762cbe48   Jean-Philippe Bernard   modifed to cope f...
269
270
271
272
273
274
275
276
;====== write dustem wrap parameter best fit values
sxaddpar,hdr,'COMMENT','======= Dustemwrap dust model used ======',after='COMMENT'
sxaddpar,hdr,'MODEL',used_model,'Dust model used'
sxaddpar,hdr,'WRAP_V',!dustem_version.version,'Dustwrap version used'
sxaddpar,hdr,'COMMENT','===================================================',after='MODEL'
sxaddpar,hdr,'CHI2',best_fit_chi2,'Dustemwrap best fit chi2 [-]'
sxaddpar,hdr,'RCHI2',best_fit_rchi2,'Dustemwrap best fit reduced chi2 [-]'
sxaddpar,hdr,'NGRAINS',Ngrains,'Number of grain species'
1cf58fd8   Jean-Philippe Bernard   First commit
277
;====== write dustem wrap parameter names
762cbe48   Jean-Philippe Bernard   modifed to cope f...
278
279
sxaddpar,hdr,'COMMENT','======= Dustemwrap parameter names ======',after='RCHI2'
sxaddpar,hdr,'NPARAMS',Nparams,' Number of DustemWrap free parameters'
1cf58fd8   Jean-Philippe Bernard   First commit
280
FOR i=0L,Nparams-1 DO BEGIN
762cbe48   Jean-Philippe Bernard   modifed to cope f...
281
	sxaddpar,hdr,'PARN'+strtrim(i+1,2),parameters_desc[i],' DustemWrap parameter name'
1cf58fd8   Jean-Philippe Bernard   First commit
282
ENDFOR
762cbe48   Jean-Philippe Bernard   modifed to cope f...
283
284
285
286
sxaddpar,hdr,'COMMENT','===================================================',after='PARN'+strtrim(i,2)
sxaddpar,hdr,'COMMENT','======= Dustemwrap dust model used in polarisation ? ======',after='COMMENT'
sxaddpar,hdr,'POL',!run_pol,'1 if pol was used, 0 otherwise'
sxaddpar,hdr,'COMMENT','===================================================',after='POL'
f2808c64   Jean-Philippe Bernard   improved
287
;====== write dustem wrap parameter best fit values
762cbe48   Jean-Philippe Bernard   modifed to cope f...
288
sxaddpar,hdr,'COMMENT','======= Dustemwrap parameter best fit values ======',after='COMMENT'
1cf58fd8   Jean-Philippe Bernard   First commit
289
FOR i=0L,Nparams-1 DO BEGIN
762cbe48   Jean-Philippe Bernard   modifed to cope f...
290
	sxaddpar,hdr,'PARV'+strtrim(i+1,2),best_parameters[i],'Param. '+parameters_desc[i]
1cf58fd8   Jean-Philippe Bernard   First commit
291
ENDFOR
762cbe48   Jean-Philippe Bernard   modifed to cope f...
292
sxaddpar,hdr,'COMMENT','===================================================',after='PARV'+strtrim(i,2)
1cf58fd8   Jean-Philippe Bernard   First commit
293

f2808c64   Jean-Philippe Bernard   improved
294
;====== write dustem wrap parameter best fit values uncertainties
762cbe48   Jean-Philippe Bernard   modifed to cope f...
295
sxaddpar,hdr,'COMMENT','======= Dustemwrap best fit parameter uncertainties ======',after='COMMENT'
f2808c64   Jean-Philippe Bernard   improved
296
FOR i=0L,Nparams-1 DO BEGIN
762cbe48   Jean-Philippe Bernard   modifed to cope f...
297
	sxaddpar,hdr,'PARU'+strtrim(i+1,2),best_parameters_uncertainties[i],'Param. '+parameters_desc[i]
f2808c64   Jean-Philippe Bernard   improved
298
ENDFOR
762cbe48   Jean-Philippe Bernard   modifed to cope f...
299
sxaddpar,hdr,'COMMENT','===================================================',after='PARU'+strtrim(i,2)
f2808c64   Jean-Philippe Bernard   improved
300
301

;====== write dustem wrap parameter initial fit values
762cbe48   Jean-Philippe Bernard   modifed to cope f...
302
sxaddpar,hdr,'COMMENT','======= Dustemwrap parameter initial fit values ======',after='COMMENT'
f2808c64   Jean-Philippe Bernard   improved
303
FOR i=0L,Nparams-1 DO BEGIN
762cbe48   Jean-Philippe Bernard   modifed to cope f...
304
	sxaddpar,hdr,'PARI'+strtrim(i+1,2),parameters_init_values[i],'Param. '+parameters_desc[i]
f2808c64   Jean-Philippe Bernard   improved
305
ENDFOR
762cbe48   Jean-Philippe Bernard   modifed to cope f...
306
sxaddpar,hdr,'COMMENT','===================================================',after='PARI'+strtrim(i,2)
72089d7a   Jean-Philippe Bernard   improved to save ...
307
308

;====== write dustem wrap parameter func values (not sure exactly what this is)
762cbe48   Jean-Philippe Bernard   modifed to cope f...
309
sxaddpar,hdr,'COMMENT','======= Dustemwrap parameter func values ======',after='COMMENT'
72089d7a   Jean-Philippe Bernard   improved to save ...
310
FOR i=0L,Nparams-1 DO BEGIN
762cbe48   Jean-Philippe Bernard   modifed to cope f...
311
	sxaddpar,hdr,'PARF'+strtrim(i+1,2),parameters_func_values[i],'Param. '+parameters_desc[i]
72089d7a   Jean-Philippe Bernard   improved to save ...
312
ENDFOR
762cbe48   Jean-Philippe Bernard   modifed to cope f...
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
sxaddpar,hdr,'COMMENT','===================================================',after='PARF'+strtrim(i,2)

;===== complement extension header for input SED
sxaddpar,header_input_sed,'TITLE','OBSERVED INPUT SED TO DUSTEMWRAP',before='COMMENT'
sxaddpar,header_input_sed,'TTYPE1','FILTER','Dustemwrap Filter name'
sxaddpar,header_input_sed,'TTYPE2','WAVELENGTH','Dustemwrap Filter reference wavelength [microns]'
sxaddpar,header_input_sed,'TTYPE3','I','Observed Total Stokes I Intensity [??]'
sxaddpar,header_input_sed,'TTYPE4','Q','Observed Stokes Q Intensity [??]'
sxaddpar,header_input_sed,'TTYPE5','U','Observed Stokes U Intensity [??]'
sxaddpar,header_input_sed,'TTYPE6','VARIANCEII','Observed Total Stokes I Variance [??]'
sxaddpar,header_input_sed,'TTYPE7','VARIANCEQQ','Observed Stokes Q Variance [??]'
sxaddpar,header_input_sed,'TTYPE8','VARIANCEUU','Observed Stokes U Variance [??]'

;===== complement extension header for predicted SED
sxaddpar,header_predicted_SED,'TITLE','OUTPUT BEST FIT SED BY DUSTEMWRAP'
sxaddpar,header_predicted_SED,'TTYPE1','FILTER','Dustemwrap Filter name'
sxaddpar,header_predicted_SED,'TTYPE2','WAVELENGTH','Dustemwrap Filter reference wavelength [microns]'
sxaddpar,header_predicted_SED,'TTYPE3','I','Observed Total Stokes I Intensity [??]'
sxaddpar,header_predicted_SED,'TTYPE4','Q','Observed Stokes Q Intensity [??]'
sxaddpar,header_predicted_SED,'TTYPE5','U','Observed Stokes U Intensity [??]'
f2808c64   Jean-Philippe Bernard   improved
333

1cf58fd8   Jean-Philippe Bernard   First commit
334
;===== complement extension header for predicted spectrum total
f2808c64   Jean-Philippe Bernard   improved
335
336
337
sxaddpar,header_predicted_spectra,'TITLE','OUTPUT BEST FIT PER-GRAIN AND TOTAL EMISSION SPECTRA BY DUSTEMWRAP'
sxaddpar,header_predicted_extinctions,'TITLE','OUTPUT BEST FIT PER-GRAIN AND TOTAL EXTINCTION BY DUSTEMWRAP'

762cbe48   Jean-Philippe Bernard   modifed to cope f...
338
;============== write final fits file
1cf58fd8   Jean-Philippe Bernard   First commit
339
340
341
IF keyword_set(filename) THEN BEGIN
	file=filename
ENDIF ELSE BEGIN
3b2e1c40   Annie Hughes   updated default f...
342
	file='./dustemwrap_results.fits'
1cf58fd8   Jean-Philippe Bernard   First commit
343
344
ENDELSE

762cbe48   Jean-Philippe Bernard   modifed to cope f...
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
;==== Write the observed SED (if any)
mwrfits,0,file,hdr,create=1
IF unit_input_sed NE -1 THEN BEGIN
	mwrfits,str_input_SED,file,header_input_sed
ENDIF
;==== add the predicted SED (if any)
IF unit_input_sed NE -1 THEN BEGIN
	mwrfits,str_predicted_SED,file,header_predicted_SED
ENDIF
IF unit_input_ext NE -1 THEN BEGIN
	mwrfits,str_input_EXT,file,header_input_sed
ENDIF
;==== add the predicted SED (if any)
IF unit_predicted_ext NE -1 THEN BEGIN
	mwrfits,str_predicted_EXT,file,header_predicted_SED
ENDIF
;==== add the predicted per-grain emission spectra
mwrfits,dustem_st.sed,file,header_predicted_spectra
;==== add the predicted per-grain extinction
mwrfits,dustem_st.ext,file,header_predicted_extinctions
IF !run_pol EQ 1 THEN BEGIN
	mwrfits,dustem_st.polsed,file
	mwrfits,dustem_st.polext,file
ENDIF
1cf58fd8   Jean-Philippe Bernard   First commit
369

762cbe48   Jean-Philippe Bernard   modifed to cope f...
370
message,'================================================',/info
1cf58fd8   Jean-Philippe Bernard   First commit
371
message,'Wrote '+file,/info
762cbe48   Jean-Philippe Bernard   modifed to cope f...
372
373
374
375
376
message,'File extenssions are: ',/info
FOR i=0L,Nextensions-1 DO BEGIN
	message,'extenssion '+strtrim(extension_numbers[i],2)+' : '+strtrim(extensions_strs[i],2),/info
ENDFOR
message,'================================================',/info
f2808c64   Jean-Philippe Bernard   improved
377
;stop
1cf58fd8   Jean-Philippe Bernard   First commit
378
379
380
381
382


the_end:

END