Blame view

src/idl/dustem_compute_sed.pro 2.93 KB
427f1205   Jean-Michel Glorian   version 4.2 merged
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
FUNCTION dustem_compute_sed,p_dim,st,cont=cont,_extra=extra,out_st=out_st,wave0=wave0

;+
; NAME:
;    dustem_compute_sed
; PURPOSE:
;    Computes an SED from a given Dustem spectrum
; CATEGORY:
;    Dustem
; CALLING SEQUENCE:
;    sed=dustem_compute_sed(p_dim[,st=][,cont=][,_extra=][,/help])
; INPUTS:
;    p_dim      = parameter values
; OPTIONAL INPUT PARAMETERS:
;    None
; OUTPUTS:
;    sed       = computed SED for filters in !dustem_data
; OPTIONAL OUTPUT PARAMETERS:
;    st        = Dustem output structure
;    cont      = NIR continuum
; ACCEPTED KEY-WORDS:
;    help      = If set, print this help
; COMMON BLOCKS:
;    None
; SIDE EFFECTS:
;    None
; RESTRICTIONS:
;    The dustem idl wrapper must be installed
; PROCEDURE:
;    None
; EXAMPLES
;    
; MODIFICATION HISTORY:
;    Written by J.-Ph. Bernard
;    see evolution details on the dustem cvs maintained at CESR
;    Contact J.-Ph. Bernard (Jean-Philippe.Bernard@cesr.fr) in case of problems.
;-

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

077af04e   Jean-Philippe Bernard   modified to be co...
45
46
;stop

427f1205   Jean-Michel Glorian   version 4.2 merged
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
IF not keyword_set(st) THEN BEGIN
  ;st=dustem_run(p_dim)
  IF !dustem_idl_continuum THEN cont=dustem_create_continuum()
  dustem_create_functions,p_dim/(*(*!dustem_fit).param_init_values),cont=cont,res=res
  st=dustem_run(p_dim)
ENDIF

If keyword_set(result) THEN result=st
if not keyword_set(wave0) then wave0 = 0.

; Convert into MJy/sr/1d20
fact = 1.e4*1.E20/(4.*!pi)/(3.e8/1.e-6/st.sed.wav)*1.e20/1.e7
spec = st.sed.em_tot * fact
IF !dustem_idl_continuum THEN spec=spec+cont
if not isarray(spec) THEN stop 
;COMPUTE THE MODEL SED
dustem_sed = (*!dustem_data.sed).values * 0.

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)
  ;FOR ii=0L,n_elements(filter_names)-1 DO BEGIN
  ssed=dustem_cc(st.sed.wav,spec,filter_names,cc=cc)
  ;ENDFOR
  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).
ind_spec=where((*!dustem_data.sed).filt_names EQ 'SPECTRUM',count_spec)
IF count_spec NE 0 THEN BEGIN
  dustem_sed(ind_spec)=interpol(spec,st.sed.wav,(((*!dustem_data.sed).wav)(ind_spec)))
;  dustem_sed(ind_spec)=10^interpol(alog10(spec),alog10(st.sed.wav),alog10((((*!dustem_data.sed).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.

RETURN,dustem_sed

END