Blame view

src/idl/dustem_compute_ext.pro 3.03 KB
b74c4452   Ilyes Choubani   Treating extincti...
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
FUNCTION dustem_compute_ext,p_dim,st,EXT_spec,out_st=out_st,_extra=extra,wave0=wave0

;+
; NAME:
;    dustem_compute_sed
; PURPOSE:
;    Computes an EXT curve from a given Dustem spectrum
; CATEGORY:
;    Dustem
; CALLING SEQUENCE:
;    sed=dustem_compute_ext(p_dim[,st=][,_extra=][,/help])
; INPUTS:
;    p_dim      = parameter values (used only if st is not provided)
; OPTIONAL INPUT PARAMETERS:
;    st        = Dustem output structure, if provided, overrides p_dim
; OUTPUTS:
;    ext       = computed EXT for spectrum points in in !dustem_data (extinction)
; OPTIONAL OUTPUT PARAMETERS:
;    out_st      = same as ext
; ACCEPTED KEY-WORDS:
;    help      = If set, print this help
; COMMON BLOCKS:
;    None
; SIDE EFFECTS:
;    None
; RESTRICTIONS:
;    The dustem idl wrapper must be installed
;-

IF keyword_set(help) THEN BEGIN
  doc_library,'dustem_compute_ext'
  dustem_sed=0.
  goto,the_end
ENDIF

IF not keyword_set(st) THEN BEGIN
    
07372e26   Ilyes Choubani   Corrected huge pl...
38
39
  dustem_activate_plugins,p_dim/(*(*!dustem_fit).param_init_values),st  ; what about the 0/0 division case?
  ;st=dustem_run(p_dim)
b74c4452   Ilyes Choubani   Treating extincti...
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
    
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
out_st=st

;clean pointers
heap_gc

the_end:

;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
RETURN,dustem_ext

END