「超新星のSEDから光度曲線を計算」でNugent templateを使って計算した光度曲先例。
Bバンド最大光度は、以下を参考。
A Comparative Study of the Absolute Magnitude Distributions of Supernovae
Richardson et al. 2002(ADS)
# Habble定数がになってるので注意。例えばに変換する時は、
を加えること。
「超新星のSEDから光度曲線を計算」でNugent templateを使って計算した光度曲先例。
Bバンド最大光度は、以下を参考。
A Comparative Study of the Absolute Magnitude Distributions of Supernovae
Richardson et al. 2002(ADS)
# Habble定数がになってるので注意。例えばに変換する時は、
を加えること。
計算式については「天体のfluxからBroad-band magnitudeを計算」を参照。
その他詳しい計算などは
K‐Corrections and Extinction Corrections for Type Ia Supernovae
Nugent et al. 2002 (ADS)
を参照。
import numpy as np import scipy.interpolate import cosmolopy.distance as cosmocd # convert wavelength to frequency def convert_nu(filter): filter_lam=filter[:,0]*1.0e-8 # [cm] filter_nu=np.array([0.0] * len(filter_lam)) for i in range(len(filter_lam)): filter_nu[i]=c/filter_lam[len(filter_lam)-1-i] # [Hz] return filter_nu*1.0e-15 # convert f_lambda to f_nu def convert_fnu(filter): filter_lam=filter[:,0]*1.0e-8 # [cm] filter_responce=np.array([0.0] * len(filter_lam)) for i in range(len(filter_lam)): filter_responce[i]=filter[len(filter_lam)-1-i,1] return filter_responce # calculate ABmag def abmagnitude(model_nu15,model_fnu,filter_nu15,filter_responce,z): flux=scipy.interpolate.interp1d(model_nu15,model_fnu,kind="linear") numerator=0.0 denominator=0.0 for i in range(len(filter_nu15)-1): for j in range(len(model_fnu)): if (filter_nu15[i]*(1.+z) = model_nu15[j-1]): dnu=(filter_nu15[i+1]-filter_nu15[i]) numerator+=flux(filter_nu15[i]*(1.+z))*(1.+z)*filter_responce[i]/filter_nu15[i]*dnu denominator+=filter_responce[i]/filter_nu15[i]*dnu mag=-2.5*np.log10(numerator/denominator)-48.6 return mag # cosmological parameters cosmo = {'omega_M_0':0.3, 'omega_lambda_0':0.7, 'omega_k_0':0.0, 'h':0.70} # speed of light [cm s-1] c = 2.989e10 # absolute V-band magnitude MaV=-19.2 # load filter information Bfilter=np.loadtxt('B-bandレスポンスファイル') Vfilter=np.loadtxt('V-bandレスポンスファイル') Rfilter=np.loadtxt('R-bandレスポンスファイル') ifilter=np.loadtxt('i-bandレスポンスファイル') zfilter=np.loadtxt('z-bandレスポンスファイル') # define responce (as a function of nu) Bfilter_nu15=convert_nu(Bfilter) # [E-15 Hz] Bfilter_responce=convert_fnu(Bfilter) Vfilter_nu15=convert_nu(Vfilter) # [E-15 Hz] Vfilter_responce=convert_fnu(Vfilter) Rfilter_nu15=convert_nu(Rfilter) # [E-15 Hz] Rfilter_responce=convert_fnu(Rfilter) ifilter_nu15=convert_nu(ifilter) # [E-15 Hz] ifilter_responce=convert_fnu(ifilter) zfilter_nu15=convert_nu(zfilter) # [E-15 Hz] zfilter_responce=convert_fnu(zfilter) # calculate AB magnitude from z=0 to z=1.2 in dz=0.05 interval for z in np.arange(0.0,1.21,0.05): fout=open('z%03d' % (z*100.0),'w') if z>0: comoving_distance=cosmocd.comoving_distance(z, **cosmo) # comoving distance [Mpc] distance_modulus=5.*np.log10(comoving_distance)+5.*np.log10(1.+z)+25. else: comoving_distance=0.0 distance_modulus=0.0 # epoch loop for epoch in np.arange(-20,86,1): if epoch < 0: specdata='spectrum_m%02d.dat' % -epoch else: specdata='spectrum_p%02d.dat' % epoch model_lam=np.loadtxt(specdata)[:,0]*1.0e-8 # [cm] model_flam=np.loadtxt(specdata)[:,1] NBIN=len(model_lam) model_fnu= np.array([0.0] * NBIN) model_nu= np.array([0.0] * NBIN) for i in range(NBIN): model_fnu[i]=model_lam[NBIN-1-i]*model_lam[NBIN-1-i]*(model_flam[NBIN-1-i]*1.0e8)/c model_nu[i]=c/model_lam[NBIN-1-i] model_nu15=model_nu*1.0e-15 # integration Bmag=abmagnitude(model_nu15,model_fnu,Bfilter_nu15,Bfilter_responce,z)+MaV+distance_modulus Vmag=abmagnitude(model_nu15,model_fnu,Vfilter_nu15,Vfilter_responce,z)+MaV+distance_modulus Rmag=abmagnitude(model_nu15,model_fnu,Rfilter_nu15,Rfilter_responce,z)+MaV+distance_modulus imag=abmagnitude(model_nu15,model_fnu,ifilter_nu15,ifilter_responce,z)+MaV+distance_modulus zmag=abmagnitude(model_nu15,model_fnu,zfilter_nu15,zfilter_responce,z)+MaV+distance_modulus print '%4.3f %5.1f %6.3f %6.3f %6.3f %6.3f %6.3f' % (z,epoch*(1.+z),Bmag,Vmag,Rmag,imag,zmag)
一度ちゃんとまとめておきたかったのでメモ。内容はLBLのNaoさんが院生時代に使っていたものを参考にしています。
まず、等級は天体のflux , reference spectrum , fileter response , reference magnitude を用いて以下のように定義できる。
Vega Mag, ST Mag, AB Magのうち、Vega MagはreferenceにVega fluxを使ったもの、ST MagとAB Magはreferenceとして一定のを使ったものと定義されている。詳しくは以下。
VEGAmag : Magnitude system where Vega has magnitude 0 at all wavelengths by definition. The vega magnitude of a star with flux F is -2.5 log10 (F/F_vega) where F_vega is the current flux spectrum of Vega from the CALSPEC archive.
STmag and ABmag: Both systems define the absolute physical flux density for a point source. The conversion is chosen so that the magnitude at V corresponds roughly to that in the Johnson system. In the STmag system, the flux density is expressed per unit wavelength, while in the ABmag system, the flux density is expressed per unit frequency.
Hubble Space Telescope ACS Flux Calibration and Zeropointsから引用。
ST Magはで固定したもの。
このfluxでSTMAGが0になるようにするには、
であればいいので、STMagは以下のように計算出来る。
AB Magはで固定したもの。
一番最初の定義式に戻ってからを以下のように変数変換する。
ABMAGが0になるようにするには、
であればいいので、結局ABMAGは以下のように計算出来る。
また、ABMAG⇄STMAGのconversionは(上記の変数変換を使って)計算すると以下のようになる。
これによって、ABMAGをで表すことも可能。
なので、
従って、
研究メモに使えそうなのでLatexプラグイン「WP Latex」と「SyntaxHighlighter Evolved」を入れてみた。
オプション | 説明 | 例 |
color | 色の変更 | color=”000000″ |
background | 背景色の変更 | |
size | サイズの変更(可能なサイズは-4から4まで)0がnormal size(12pt) | size=”4″ |
例えば
[ latex size="4" ]\displaystyle \int ^{\infty}_{-\infty} e^{-ax^2}dx=\sqrt{\frac{\pi}{a}}[ /latex ]
と入力すれば以下のように表示される(入力の際[]内のスペースは無視)。
その他詳しい説明はWP LaTeX FAQ参照。
from itertools import count from math import sqrt def prime_gen(): primes = [] for n in count(2): if all(n%p for p in primes if p <= sqrt(n)): primes.append(n) yield n g = prime_gen() for i in xrange(1000): print g.next()
References:
ソースコードをキレイに表示するWordPressプラグイン「SyntaxHighlighter Evolved」
Clojure prime numbers lazy sequence