Blame view

src/idl/dustem_plugin_phangs_stellar_continuum.pro 8.3 KB
b58e9569   Jean-Philippe Bernard   First commit
1
2
3
4
FUNCTION dustem_plugin_phangs_stellar_continuum,key=key $
                                			   ,val=val $
                                			   ,scope=scope $
                                			   ,paramtag=paramtag $
9a3272b1   Jean-Philippe Bernard   improved
5
6
                                			   ,age_values=age_values $
                                			   ,metalicity_values=metalicity_values $
b58e9569   Jean-Philippe Bernard   First commit
7
8
9
10
11
12
13
14
15
16
17
                                			   ,paramdefault=paramdefault $
                                			   ,help=help

;+
; NAME:
;    dustem_plugin_phangs_stellar_continuum
; PURPOSE:
;    DustEMWrap plugin to add EMILES stellar template emission to Dustemwrap SEDs
; CATEGORY:
;    DustEM, Distributed, Mid-Level, Plugin
; CALLING SEQUENCE:
25370043   Jean-Philippe Bernard   src/idl/dustem_ac...
18
;    stellar_ISRF=dustem_plugin_phangs_stellar_continuum([,key=][,val=][,scope=][,paramtag=][paramdefault=][,/help])
b58e9569   Jean-Philippe Bernard   First commit
19
20
21
22
; INPUTS:
;    None
; OPTIONAL INPUT PARAMETERS:
;    key  = input parameter number
25370043   Jean-Philippe Bernard   src/idl/dustem_ac...
23
24
;					  First parameter: Amplitude factor for the emission
;           Second parameter: E(B-V) for extinction to stars applied to the template, as used in Phangs
b58e9569   Jean-Philippe Bernard   First commit
25
26
27
;           Following 13*6 parameters are weights by which to multiply the MILES templates [Msun/pc^2]
;    val  = corresponding input parameter value
; OUTPUTS:
25370043   Jean-Philippe Bernard   src/idl/dustem_ac...
28
;    stellar_isrf = stellar ISRF spectrum resampled on dustem wavelengths [MJy/sr]
b58e9569   Jean-Philippe Bernard   First commit
29
; OPTIONAL OUTPUT PARAMETERS:
25370043   Jean-Philippe Bernard   src/idl/dustem_ac...
30
;    scope = if set, return the scope of the plugin
b58e9569   Jean-Philippe Bernard   First commit
31
;    paramdefault = default values of parameters
25370043   Jean-Philippe Bernard   src/idl/dustem_ac...
32
;    paramtag = if set, return the return plugin parameter names as strings
b58e9569   Jean-Philippe Bernard   First commit
33
34
; ACCEPTED KEY-WORDS:
;    help                  = if set, print this help
88f84272   Jean-Philippe Bernard   changed
35
;    method                = SSP used. can be EMILES or CB19. default='EMILES'
b58e9569   Jean-Philippe Bernard   First commit
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
; COMMON BLOCKS:
;    None
; SIDE EFFECTS:
;    None
; RESTRICTIONS:
;    The DustEMWrap IDL code must be installed
; PROCEDURE:
;    This is a DustEMWrap plugin for phangs
;    It differs from dustem_plugin_emiles_stellar_continuum.pro only by the way the extinction is applied to the output spectrum
; EXAMPLES
;    dustem_init
;    vec=dustem_plugin_phangs_stellar_continuum(scope=scope)
; MODIFICATION HISTORY:
;    Written by JPB June 2023
;    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_plugin_phangs_stellar_continuum'
  output=0.
  goto,the_end
ENDIF

25370043   Jean-Philippe Bernard   src/idl/dustem_ac...
60
61
IF keyword_set(scope) THEN BEGIN
    scope='ADD_SED' 
0ed06487   Jean-Philippe Bernard   new version now w...
62
63
64
65
    out=0
    goto, the_scope
ENDIF 

88f84272   Jean-Philippe Bernard   changed
66
67
;use_method='EMILES'
use_method='CB19'
b58e9569   Jean-Philippe Bernard   First commit
68
69
70
71
72

age_values=[0.03, 0.05, 0.08, 0.15, 0.25, 0.40, 0.60, 1.0, 1.75, 3.0, 5.0, 8.5, 13.5]
metalicity_values=[-1.48630, -0.961400, -0.351200, +0.0600000, +0.255900, +0.397100]

;read template info
88f84272   Jean-Philippe Bernard   changed
73
74
75
76
77
78
79
80
81
82
83
84
;==== This is actually not used
;info_st=dustem_read_emiles_stellar_templates(age_values,metalicity_values,/info_only)
;age_values_emiles=info_st.age
;order=sort(age_values_emiles)
;age_values_emiles=age_values_emiles[order]
;un=uniq(age_values_emiles)
;age_values_emiles=age_values_emiles[un]
;met_values_emiles=info_st.z
;order=sort(met_values_emiles)
;met_values_emiles=met_values_emiles[order]
;un=uniq(met_values_emiles)
;met_values_emiles=met_values_emiles[un]
b58e9569   Jean-Philippe Bernard   First commit
85

0ed06487   Jean-Philippe Bernard   new version now w...
86
87
88
;==== This does not work because the info files has many more entries than there are available ssps.
;age_values=age_values_emiles
;metalicity_values=met_values_emiles
9a3272b1   Jean-Philippe Bernard   improved
89
90
91
92
93
94
95
96
;This does not work either
;st_templates=read_muse_templates_info(age_values=age_values,metalicity_values=metalicity_values,Nbins=Nbins,Nage=Nage,NZ=Nmetalicity,bins=bins)
;print,age_values
;     0.030000000     0.050000000     0.080000000      0.15000000      0.25000000      0.40000000      0.60000000       1.0000000       1.7500000       3.0000000       5.0000000       8.5000000       13.500000
;print,metalicity_values
;     -1.49000    -0.960000    -0.350000    0.0600000     0.260000     0.400000

;stop
0ed06487   Jean-Philippe Bernard   new version now w...
97

b58e9569   Jean-Philippe Bernard   First commit
98
99
Nage=n_elements(age_values)
Nmetalicity=n_elements(metalicity_values)
25370043   Jean-Philippe Bernard   src/idl/dustem_ac...
100
Nparam=Nage*Nmetalicity+2    ;+2 is for Amplitude and E(B-V)
0ed06487   Jean-Philippe Bernard   new version now w...
101
102

;==== define parameter tags
4a2d1650   Jean-Philippe Bernard   improved
103
104
105
106
107
108
109
110
111
112
113
114
115
IF keyword_set(paramtag) THEN BEGIN
	paramtag=strarr(Nparam)
	paramtag[0]='Amplitude'
	paramtag[1]='E(B-V)'
	FOR i=2L,Nparam-1 DO BEGIN
		ij=index2ij([i-2],[Nage,Nmetalicity])
		paramtag[i]='Age'+strtrim(ij[0,0],2)+'Met'+strtrim(ij[0,1],2)
	ENDFOR
	GOTO,the_paramtag
ENDIF

paramdefault=dblarr(Nparam)
paramdefault[*]=0.D0         ;default parameter values is 0.
0ed06487   Jean-Philippe Bernard   new version now w...
116
117
118

;==== decode key keyword. 
;stop
b58e9569   Jean-Philippe Bernard   First commit
119
120
121
122
123
124
125
126
127
128
paramvalues=paramdefault
IF keyword_set(key) THEN BEGIN
  ind=where(key EQ 1,count)
  IF count NE 0 THEN paramvalues[0]=val[ind[0]]
  FOR i=1L,Nparam-1 DO BEGIN
  	ind=where(key EQ i+1,count)
  	IF count NE 0 THEN paramvalues[i]=val[ind[0]]
  ENDFOR
ENDIF

0ed06487   Jean-Philippe Bernard   new version now w...
129
;==== initialize templates if not already present
b58e9569   Jean-Philippe Bernard   First commit
130
131
132
133
134
135
defsysv,'!dustem_plugin_phangs_stellar_continuum',exist=exist
IF exist EQ 0 THEN BEGIN
	st={ssps:ptr_new(),wavs:ptr_new(),Mstars:ptr_new()}
	defsysv,'!dustem_plugin_phangs_stellar_continuum',st
ENDIF
IF not ptr_valid(!dustem_plugin_phangs_stellar_continuum.ssps) THEN BEGIN
88f84272   Jean-Philippe Bernard   changed
136
137
138
139
140
141
142
143
144
	message,'Initializing SSP templates',/info
	CASE use_method of
		'EMILES': BEGIN
			template_flux=dustem_read_emiles_stellar_templates(age_values,metalicity_values,template_wav=template_wav,Mstars=Mstars)
		END
		'CB19': BEGIN
			;== this is just to get the Mstars
			bidon=dustem_read_emiles_stellar_templates(age_values,metalicity_values,template_wav=template_wav,Mstars=Mstars)
			;== This is to read in the CB19 templates
4a2d1650   Jean-Philippe Bernard   improved
145
			;== Note, templates are already interpolated on dustem wavelenghts (!)
88f84272   Jean-Philippe Bernard   changed
146
147
148
			template_flux=dustem_read_cb19_stellar_templates(age_values=age_values,metalicity_values=metalicity_values,template_wav=template_wav,Mstars=Mstars)
		END
	ENDCASE
b58e9569   Jean-Philippe Bernard   First commit
149
150
151
152
153
154
155
156
157
	!dustem_plugin_phangs_stellar_continuum.ssps=ptr_new(template_flux)
	!dustem_plugin_phangs_stellar_continuum.wavs=ptr_new(template_wav)
	!dustem_plugin_phangs_stellar_continuum.mstars=ptr_new(Mstars)
ENDIF

;stop

lambir=dustem_get_wavelengths()
Nwavs=n_elements(lambir)
9a3272b1   Jean-Philippe Bernard   improved
158
output=dblarr(Nwavs,3)
b58e9569   Jean-Philippe Bernard   First commit
159
160
161
162
wavs=*!dustem_plugin_phangs_stellar_continuum.wavs
Mstars=*!dustem_plugin_phangs_stellar_continuum.mstars
;==== sum up the stellar spectrum
;stop
9a3272b1   Jean-Philippe Bernard   improved
163
FOR i=2L,Nparam-1 DO BEGIN
b58e9569   Jean-Philippe Bernard   First commit
164
165
166
	IF paramvalues[i] NE 0. THEN BEGIN
		;stop
		;only interpolate within the template wavelengths
4a2d1650   Jean-Philippe Bernard   improved
167
		;ind=where(lambir LE max(wavs) AND lambir GE min(wavs),count)
9a3272b1   Jean-Philippe Bernard   improved
168
		Mstar=Mstars[i-2]
4a2d1650   Jean-Philippe Bernard   improved
169
170
171
172
173
174
		;IF count NE 0 THEN BEGIN
		ssp=*(*!dustem_plugin_phangs_stellar_continuum.ssps)[i-2]
		;output[ind,0]=output[ind,0]+paramvalues[i]*Mstar*interpol(ssp,wavs,lambir[ind])
		output[*,0]=output[*,0]+paramvalues[i]*Mstar*ssp
		message,'Mstar='+strtrim(Mstar,2)+' paramvalue='+strtrim(paramvalues[i],2),/info
		;ENDIF
25370043   Jean-Philippe Bernard   src/idl/dustem_ac...
175
		;stop
b58e9569   Jean-Philippe Bernard   First commit
176
177
	ENDIF
ENDFOR
9a3272b1   Jean-Philippe Bernard   improved
178
output[*,0]=output[*,0]*paramvalues[0]
4a2d1650   Jean-Philippe Bernard   improved
179
;flux=output[*,0]
9a3272b1   Jean-Philippe Bernard   improved
180
;no polarization for now
4a2d1650   Jean-Philippe Bernard   improved
181
182
;output[*,1]=0.
;output[*,2]=0. 
9a3272b1   Jean-Philippe Bernard   improved
183
184
185
186
187
188
189
190
191
192
193
194


;==== Caution:
;output is Flambda in ergs/s/cm2/AA
;at this point, output is unredenned 
;==== must be transformed into MJy/sr
NHref=*!DUSTEM_HCD   ;NH dustemwrap reference [H/cm^2]
fact2=lambir*1.e4      ;[AA] to go from F_lambda in ergs/s/cm2/AA to Fnu ergs/s/cm2
fact3=1./NHref         ;[cm2/H] to go from ergs/s/cm2 to ergs/s/H
fact4=1.e4*(*!dustem_HCD)/(4.*!pi)/(3.e8/1.e-6/lambir)*1.e20/1.e7   ;This goes from ergs/s/H to MJy/sr (see dustem_plot_dataset)
fact=fact2*fact3*fact4

88f84272   Jean-Philippe Bernard   changed
195
196
197
198
199
200
;print,'flux(1mic)=',interpol(flux,lambir,1.),' ergs/s/cm2/AA'
;print,'fact2=',interpol(fact2,lambir,1.)
;print,'fact3=',fact3
;print,'fact4=',interpol(fact4,lambir,1.)
;print,'fact=',interpol(fact,lambir,1.)
;print,'flux(1mic)=',interpol(flux,lambir,1.)*interpol(fact,lambir,1.),' MJy/sr'
9a3272b1   Jean-Philippe Bernard   improved
201
202

;goto,no_unred
b58e9569   Jean-Philippe Bernard   First commit
203

b58e9569   Jean-Philippe Bernard   First commit
204
;==== reden spectrum using Calzetti's extinction law (which is what Phangs does)
9a3272b1   Jean-Philippe Bernard   improved
205
;cgplot,lambir,flux,/xlog,/ylog
b58e9569   Jean-Philippe Bernard   First commit
206
;factor -1 is to reden, instead of unreden. factor 1e4 is to go from microns to Angstroem
25370043   Jean-Philippe Bernard   src/idl/dustem_ac...
207
208
209
;This uses the prescription of Calzetti et al 2000. It is applied from 912AA to 2.2 mic, no correction applied before and beyound that.
;Note that the supplied color excess should be that derived for the stellar  continuum, EBV(stars), which (in Calzetti 2000) is related to the 
;reddening derived from the gas, EBV(gas), via the Balmer decrement by EBV(stars) = 0.44*EBV(gas)
4a2d1650   Jean-Philippe Bernard   improved
210
calz_unred, lambir*1.e4, output[*,0], -1.*paramvalues[1], flux_red, R_V = R_V
25370043   Jean-Philippe Bernard   src/idl/dustem_ac...
211
;Note: we could actually use our own dustemwrap extinction curve to do that.
b58e9569   Jean-Philippe Bernard   First commit
212
213
output[*,0]=flux_red

9a3272b1   Jean-Philippe Bernard   improved
214
215
no_unred:

9a3272b1   Jean-Philippe Bernard   improved
216
output[*,0]=output[*,0]*fact
4a2d1650   Jean-Philippe Bernard   improved
217
218
;output[*,1]=output[*,1]*fact
;output[*,2]=output[*,2]*fact
9a3272b1   Jean-Philippe Bernard   improved
219

88f84272   Jean-Philippe Bernard   changed
220
;print,'output=',interpol(output[*,0],lambir,1.),' MJy/sr'
9a3272b1   Jean-Philippe Bernard   improved
221
;stop
0ed06487   Jean-Philippe Bernard   new version now w...
222
223

the_scope:
0ed06487   Jean-Philippe Bernard   new version now w...
224
225

the_paramtag:
b58e9569   Jean-Philippe Bernard   First commit
226
227
228
229
230

the_end:
RETURN,output
  
END