¿Cómo puedo convolucionar un espectro de plantilla con un espectro de respuesta de filtro fotométrico?

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 L por Angstrom. Ahora, digamos que quiero obtener la luminosidad integrada dentro de un paso de banda que va desde λ 1 a λ 2 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 λ 1 a λ 2 . Entonces podría hacer una simple multiplicación por elementos, pero este no parece ser el enfoque correcto usando la "convolución" tradicional.

Respuestas (1)

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 λ 1 y λ 2 (o, de manera equivalente, simplemente integrando de λ 1 a λ 2 ) 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 metro A B de una fuente es ( Oke & Gunn 1983 ; tenga en cuenta que cometen un error de signo en su propia definición):

metro A B = 2.5 Iniciar sesión F v 48.6 ,
donde el promedio F v en mi r gramo s 1 C metro 2 H z 1 es dado por
F v = 1 C S T λ d λ T / λ d λ ,
donde S es el espectro con unidades mi r gramo s 1 C metro 2 A 1 , T es la curva de filtro (no normalizada como arriba), λ es la longitud de onda en Ångström, y C es la velocidad de la luz en Å s 1 . Es decir, un espectro plano (en v ) de altura F v tendría el mismo flujo integrado sobre T como S haría.

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
Muchas gracias @pela. Una pregunta rápida: aunque mi función de respuesta de filtro está normalizada de modo que los valores mínimo y máximo sean 0 y 1 respectivamente, el área bajo la curva no es en sí misma 1,0 (es ~0,26). Entonces, ¿debo dividir su variable filtSpec anterior por el área de la función de respuesta del filtro (es decir, normalizar por ~ 0.26)? Como referencia, mi filtro es el filtro de banda Ks de 2MASS que se encuentra en la parte inferior de ipac.caltech.edu/2mass/releases/allsky/doc/sec6_4a.html
@quantumflash: el filtro no necesariamente debe llegar a 1, simplemente no debe ir por encima. Un valor de 1 (= 100%) significa que transmite toda la luz en esa longitud de onda, lo que no es necesariamente el caso. Asimismo, el área total bajo la curva no tiene especial importancia. Por lo tanto, si su filtro tiene valores de 0 a 1, debe asegurarse de que no se haya normalizado así, porque si es así, ha perdido la información del rendimiento real.
@quantumflash: 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. Si esto es realmente lo que quieres, puedo editar mi respuesta.
Tengo un espectro de plantilla de población estelar de Bruzual & Charlot 2003 que tiene unidades de eje y de L por Angstrom, y el espectro total se normaliza para corresponder a la luminosidad por salida de longitud de onda por 1 METRO . Si puedo integrar este espectro en la banda Ks de 2MASS dado el filtro del sitio web de 2MASS anterior, entonces puedo calcular la relación masa-luz en la banda K para mi población estelar sintética (antigua), que es lo que yo desear. No creo que necesite la magnitud ya que el eje y del espectro ya está en L por Angstrom. ¡Gracias por tu ayuda!
@pela, no es del todo cierto que la magnitud sea independiente del filtro, ¿verdad? Más bien se define con respecto al filtro.
@John: Tiene razón en que, en general, depende del filtro en el sentido de que en un rango de longitud de onda un objeto puede tener una magnitud, mientras que en otro rango puede ser otra. Luego se pueden definir varios sistemas de magnitud para que el objeto tenga la misma magnitud (por ejemplo, en el sistema AB, un espectro plano (en v ) es el mismo, mientras que en el sistema Vega, Vega tiene magnitud 0 en todas las bandas). [continúa a continuación]
Lo que quise decir es que la forma exacta del filtro no influye en el resultado, ya que esto se soluciona en la integral. Mida la magnitud en un rango determinado con un filtro de sombrero de copa, un filtro triangular y un filtro gaussiano y obtendrá el mismo resultado.
@Pela: Eso solo es cierto para un espectro plano, ¿no es así? De lo contrario, aunque dos filtros pueden tener el mismo rango de longitud de onda, creo que sus curvas de respuesta pueden dar resultados diferentes.
@John: Tienes razón, solo es completamente cierto para un espectro verdaderamente plano. Sin embargo, la mayoría de los espectros realistas son lo suficientemente planos en el rango de un filtro, y los filtros más realistas son lo suficientemente similares, que en realidad la forma exacta del filtro no importa. Los astrónomos no son matemáticos, por lo que generalmente están contentos con esto. Pero tienes toda la razón en que no es exactamente cierto.
@pela Estoy volviendo a esto y me preguntaba si puede ayudar a aclarar algunas confusiones (puede omitir las cosas anteriores). Plantillas teóricas como espectros de salida Bruzual y Charlot con unidades de densidad de luminosidad (Lsun/AA) vs AA. Pero para calcular el AB mag dentro del filtro de banda r SDSS, necesito que las unidades del eje y estén en unidades de densidad de flujo natural (erg/s/cm**2/AA). ¿Qué suele hacer la gente para esta conversión de densidad de luminosidad a densidad de flujo para plantillas teóricas? Me pregunto si puedo usar la fórmula normal F = L / (4piD ^ 2) con D = 10 pc, ya que las revistas abs y las luminosidades asumen D = 10 pc. ¡Gracias!
@quantumflash Tienes razón. la fórmula, pero solo debe usar d = 10 pc si la distancia al objeto observado es de 10 pc. Supongo que estás pensando en convertir entre magnitudes aparentes y absolutas. El propósito de un espectro de plantilla teórico es poder compararlo con uno observado, y el objeto observado estará a cierta distancia, por lo que coloca el teórico a la misma distancia.
Gracias @pela. Solo estoy haciendo "pruebas simuladas" con poblaciones estelares simples. A menudo, estos se dan en unidades de Lsun/AA frente a AA y se normalizan a 1 Msun de estrellas formadas (para que pueda calcular fácilmente cosas como la relación masa-luz estelar en algún paso de banda). Pero el problema ahora es que quiero comparar dos espectros de modelos diferentes y calcular la diferencia de magnitud en algunos pasos de banda. Supongo que en principio si solo me importa Δ diferencia de mag, puedo usar cualquiera D siempre que sea el mismo para las dos revistas individuales, ya que finalmente se cancelará cuando reste metro 1 metro 2 o (abdominales) METRO 1 METRO 2
@pela sí, creo que lo solucioné, ¡muchas gracias de nuevo!
@quantumflash Sí, exactamente, para comparar dos plantillas diferentes, puede asumir cualquier distancia (y 10 pc es una buena opción).