dustem_compute_ext.pro
3.58 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
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
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
FUNCTION dustem_compute_ext,p_dim,$
<<<<<<< HEAD
st=st,$
EXT_spec=EXT_spec,$
help=help
=======
st=st,$
EXT_spec=EXT_spec,$
help=help
>>>>>>> 3d0f6b674607769b0cbaf3703a82f722877e253d
;+
; NAME:
; dustem_compute_ext
;
; PURPOSE:
; Computes Extinction in units of optical depth for a given Dustem spectrum
;
; CATEGORY:
; DustEMWrap, Mid-level, Distributed
;
; CALLING SEQUENCE:
; ext=dustem_compute_ext(p_dim[,st=][,ext_spec=][,/help])
<<<<<<< HEAD
=======
;
>>>>>>> 3d0f6b674607769b0cbaf3703a82f722877e253d
; INPUTS:
; p_dim = parameter values
;
; OPTIONAL INPUT PARAMETERS:
; st = Dustem output structure
;
; OUTPUTS:
; ext_spec = computed EXT for spectrum points in !dustem_data
;
; OPTIONAL OUTPUT PARAMETERS:
<<<<<<< HEAD
; st = Dustem output structure
=======
; st = Dustem output structure
;
>>>>>>> 3d0f6b674607769b0cbaf3703a82f722877e253d
; ACCEPTED KEY-WORDS:
; help = If set, print this help
;
; COMMON BLOCKS:
; None
;
; SIDE EFFECTS:
; None
;
; RESTRICTIONS:
; The DustEMWrap IDL code must be installed
;
; MODIFICATION HISTORY:
; Written ?
; 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_compute_ext'
dustem_ext=0.
goto,the_end
ENDIF
;stop
IF not keyword_set(st) THEN BEGIN
dustem_activate_plugins,p_dim/(*(*!dustem_fit).param_init_values),st=st ; what about the 0/0 division case?
ENDIF
;if not keyword_set(wave0) then wave0 = 0.
EXT_spec = st.ext.ext_tot * (*!dustem_HCD)/1.0e21 ;For any column density. Default is 10^20 H/cm^2
;ADDING PLUGIN TO SPECTRUM----------------
scopes=tag_names((*!dustem_plugin))
IF scopes[0] NE 'NONE' THEN BEGIN
;IF ptr_valid(!dustem_plugin) THEN BEGIN
for i=0L,n_tags(*!dustem_plugin)-1 do begin
if total(strsplit((*(*!dustem_plugin).(i).scope),'+',/extract) eq 'ADD_EXT') then EXT_spec+=(*(*!dustem_plugin).(i).spec)[*,0]
endfor
ENDIF
;------------------------------------------
if not isarray(EXT_spec) THEN stop
;COMPUTE THE MODEL SED
dustem_ext = (*(*!dustem_data).ext).values * 0.
;####For now no color corrections are performed (spectrum points)####
; IF !dustem_do_cc NE 0 AND !dustem_never_do_cc EQ 0 THEN BEGIN
; message,'DOING color correction calculations',/info
; ENDIF ELSE BEGIN
; message,'SKIPPING color correction calculations: we take previous values of cc',/info
; ENDELSE
; ind_sed=where((*(*!dustem_data).sed).filt_names NE 'SPECTRUM' and (*(*!dustem_data).sed).wav gt wave0,count_sed)
; IF count_sed NE 0 THEN BEGIN
; filter_names=((*(*!dustem_data).sed).filt_names)[ind_sed]
; ssed=dustem_cc(st.sed.wav,SED_spec,filter_names,cc=cc)
; dustem_sed[ind_sed]=ssed
; ENDIF ELSE BEGIN
; print,"**** WARNING **** NO FILTER defined in DATA for COLOUR CORRECTION"
; ENDELSE
;For spectrum data points, interpolate in log-log
;Linear interpolation leads to wrong values, in particular where few
;wavelengths points exist in the model (long wavelengths). (done automatically because the dustem grid is sampled in already log-log space)
ind_spec=where((*(*!dustem_data).ext).filt_names EQ 'SPECTRUM',count_spec)
IF count_spec NE 0 THEN BEGIN
dustem_ext[ind_spec]=interpol(EXT_spec,st.ext.wav,(((*(*!dustem_data).ext).wav)[ind_spec]))
ENDIF
;clean pointers
heap_gc
;VG : error in cc IRAS1 when no PAH
; j=where(dustem_sed ne dustem_sed,count)
; if count gt 0 then dustem_sed[j]=0.
;stop
the_end:
RETURN,dustem_ext
END