def makeMilkyWayAtt(minWl, maxWl,Nsamp):
# Parameter values from Fitzpatrick & Massa 2007, table 5.
x0 = 4.592
gamma = 0.922
c1 = -0.175
c2 = 0.807
c3 = 2.991
c4 = 0.319
c5 = 6.097
O1 = 2.055
O2 = 1.322
O3 = 0.0
k_ir = 1.057
Rv = 3.001
#Rv = 5.5
wl_UV = np.logspace(np.log10(minWl),np.log10(0.2700),Nsamp/2) # UV part stops at 0.27 micron
wl_ir = np.logspace(np.log10(0.2700),np.log10(maxWl),Nsamp/2) # optical-IR part starts at 0.27 micron
idx = (np.abs(wl_ir-0.550)).argmin() # index closest to V band = 0.55 micron
idx_U2 = (np.abs(wl_UV-0.2700)).argmin() # index closest to U2 band = 0.27 micron
idx_U1 = (np.abs(wl_UV-0.2600)).argmin() # index closest to U1 band = 0.26 micron
# construct UV attenuation curve
x = 1./wl_UV
D = Lorentzian(x,x0,gamma)
k_UV = np.zeros(Nsamp/2)
for i in range(0,len(x)):
if x[i] <= c5:
k_UV[i] = c1 + c2*x[i] + c3*D[i]
else:
k_UV[i] = c1 + c2*x[i] + c3*D[i] + c4*(x[i]-c5)**2
# construct ir attenuation curve
sample_wl = np.array([10000., 4., 2., 1.3333, 0.5530, 0.4000, 0.3300, 0.2700, 0.2600])
sample_k = np.append( k_ir*sample_wl[0:4]**-1.84 - Rv, [O3,O2,O1, k_UV[idx_U2], k_UV[idx_U1]])
spline = interpolate.UnivariateSpline(1./sample_wl,sample_k)
k_ir = spline(1./wl_ir)
wl = np.append(wl_UV,wl_ir)
Al_Av = np.append(k_UV,k_ir)/Rv + 1.
return wl, Al_Av
评论列表
文章目录