Supongamos que tengo una plantilla de espectro de población estelar (digamos, de Bruzual & Charlot 2003) que va desde 1000 Angstroms hasta 160 000 Angstroms y que tiene unidades de longitud de onda en el eje x de Angstroms y unidades de densidad de flujo en el eje y de por Angstrom. Ahora, digamos que quiero obtener la luminosidad integrada dentro de un paso de banda que va desde a Angstroms, y tengo otro "espectro" que me da la función de respuesta de filtro para este paso de banda fotométrico.
Sé que se supone que debo "convolucionar el espectro de plantilla estelar con la función de respuesta de paso de banda" para obtener la luminosidad estelar integrada dentro de mi paso de banda, pero ¿cómo hago esto exactamente (preferiblemente en Python)? La plantilla estelar y los espectros de respuesta del filtro no tienen el mismo número de puntos de datos y no están definidos en la misma cuadrícula de longitud de onda (el espectro de la plantilla estelar obviamente se extiende mucho más allá que la función de respuesta del filtro).
Siento que podría interpolar el espectro de respuesta del filtro en la matriz de longitudes de onda del espectro de plantilla estelar y asignar un valor de 0 al espectro de respuesta interpolado para longitudes de onda fuera a . Entonces podría hacer una simple multiplicación por elementos, pero este no parece ser el enfoque correcto usando la "convolución" tradicional.
Su sensación es correcta: no debe convolucionar el espectro y el filtro, solo debe multiplicar para que se suprima el flujo fuera del paso de banda. Posteriormente, integra la función resultante sobre la longitud de onda, de modo que la densidad de flujo (en energía/tiempo/área/longitud de onda) se convierte en flujo (en energía/tiempo/área).
Simplemente configurando el flujo a 0 fuera y (o, de manera equivalente, simplemente integrando de a ) corresponde a un " filtro de sombrero de copa ". La mayoría de los filtros realistas son más suaves.
Entonces, algo como (no probado):
import numpy as np
from scipy.integrate import simps
lamS,spec = np.loadtxt('spectrum.dat',unpack=True) #Two columns with wavelength and flux density
lamF,filt = np.loadtxt('filter.dat' ,unpack=True) #Two columns with wavelength and response in the range [0,1]
filt_int = np.interp(lamS,lamF,filt) #Interpolate to common wavelength axis
filtSpec = filt_int * spec #Calculate throughput
flux = simps(filtSpec,lamS) #Integrate over wavelength
print 'Total flux is {0:8.3e}'.format(flux)
Magnitud
Sin embargo, me pregunto si "la luminosidad total dentro del paso de banda" es realmente lo que le interesa. Esta cantidad realmente no tiene ningún significado físico para la fuente, ya que depende del filtro en particular. Por lo general, uno normalizaría al filtro, obteniendo así la magnitud , que es independiente de la forma del filtro.
En el sistema de magnitud AB , la magnitud de una fuente es ( Oke & Gunn 1983 ; tenga en cuenta que cometen un error de signo en su propia definición):
Asi que:
import numpy as np
from scipy.integrate import simps
c_AAs = 2.99792458e18 # Speed of light in Angstrom/s
lamS,spec = np.loadtxt('spectrum.dat',unpack=True) #Two columns with wavelength (in Angstrom) and flux density (in erg/s/cm2/AA)
lamF,filt = np.loadtxt('filter.dat' ,unpack=True) #Two columns with wavelength and response in the range [0,1]
filt_int = np.interp(lamS,lamF,filt) #Interpolate to common wavelength axis
I1 = simps(S*T*lam,lam) #Denominator
I2 = simps( T/lam,lam) #Numerator
fnu = I1/I2 / c_AAs #Average flux density
mAB = -2.5*np.log10(fnu) - 48.6 #AB magnitude
flash cuántico
pela
pela
flash cuántico
usuario1991
pela
pela
usuario1991
pela
flash cuántico
pela
flash cuántico
flash cuántico
pela