dfm / dfm/python-fsps

Odd behavior with optical emission lines

オープン
#199 コメント 4 件 リアクション 0 件 担当者 0 名 GitHub で見る

まだ誰も着手していません。

主要言語
Python
スター
76
フォーク
45
PR マージ指標
30日以内にマージされた PR はありません

説明

I noticed a strange behavior where after a logzsol value of 0.2 all points in a standard BPT diagram ([NII]/Hα, [OIII]/Hβ) are stuck to a certain value. I am using default stellar libraries: "mist" and "miles" to get the BPT emission-line ratios ([OIII]/Hβ and [NII]/Hα) for an SSP (sfh=0) observed at tage=1Myr (0.001Gyr) with a constant ionization parameter of logU=-2.5 but for different metallicities (logzsol=[-0.6,0.6]), also I set zcontinuous=1. The models are such that logzsol = gas_logz. I attach the resulted BPT diagram bellow. In an attempt to understand what is happening I have calculated the SEDs in two cases; 1) sfh=0 (SSP), logz=0, dust1=0, dust2=0 for different ages; 2) sfh=0 (SSP), dust1=0, dust2=0 for different metallicities (both with default stellar libraries). The UV produced by the two SSPs (I think that) look normal (attached bellow). Finally I am giving you the result of the [OIII]/Hβ as a function of metallicity (from the calculations of BPT).

Is this expected behavior?

Here is my code for the BPT calculations (the two SED tests are calculated from an other script)

import os
import numpy as np
import fsps
from tqdm import tqdm
import matplotlib.pyplot as plt
import time
import json
import pandas as pd
import warnings
import random as random
warnings.filterwarnings('ignore')

sp = fsps.StellarPopulation(zcontinuous=1)


sp.params['imf_type'] = 2
sp.params['sfh'] = 0 
sp.params['sf_start'] = 0.0 
sp.params['sf_trunc'] = 0.0
sp.params['tburst'] = 0.0
sp.params['fburst'] = 0.0
sp.params['tau'] = 10.0
sp.params['const'] = 0.0


sp.params['add_neb_emission'] = True
sp.params['nebemlineinspec'] = True
sp.params['add_neb_continuum'] = True

ilib, slib, dlib = sp.libraries
print(ilib, slib, dlib)

sample_size = 1000
logz_arr = np.linspace(-0.6,0.6,sample_size)

logu_arr = -2.5*np.ones(sample_size) 

comb_arr = np.stack([logz_arr, logu_arr], axis=1)

uid = time.strftime("%Y%m%d_%H%M%S")

file_name1 = 'sfg_syn_sed' #  uid
file_name2 = 'sfg_syn_emlines'

tage = 0.001

w, _ = sp.get_spectrum(tage=tage, peraa=True)

emwv = sp.emline_wavelengths
with open(file_name2 + '-' + uid + '.txt', 'w') as file:
    np.savetxt(file, emwv, newline=' ')
    file.write('\n')
file.close()

dict3 = vars(sp.params)['_params']

keys = []
for key, value in dict3.items():
    k = key
    keys.append(k)

df_params = pd.DataFrame(columns=keys)
 
for i in tqdm(range(len(comb_arr))):
    sp.params['logzsol'] = comb_arr[i][0]
    sp.params['gas_logz'] = comb_arr[i][0]
    sp.params['gas_logu'] = comb_arr[i][1]

    _, spec = sp.get_spectrum(tage=tage, peraa=True)

    # Write emission lines to a file
    with open(file_name2 + '-' + uid + '.txt', 'a') as file:
        np.savetxt(file, sp.emline_luminosity, newline=' ')
        file.write('\n')
    file.close()

    dict3 = vars(sp.params)['_params']

    values = []
    for key, value in dict3.items():
        v = value
        values.append(v)
        
    df1 = pd.DataFrame([values], columns=keys)
    df_params = pd.concat([df_params, df1], axis=0)


df_params.to_csv('params_' + uid + '.csv', index=False)

Figure_1_z
Figure_1
download (8)
oiii_hb_logz

コントリビューションガイド

このリポジトリのコントリビューションガイドは索引されていません

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

調査の方向性

まず、指定されたSSP、stellar-library、metallicity、ionization-parameterの設定で提供されたPythonスクリプトを実行し、次にlogzsol=0.2付近で生成された輝線の値を調べます。得られた[OIII]/Hβと[NII]/Hαの挙動を添付されたプロットと比較します。プラトーが予想されるものかどうかを確定するか、報告または修正すべき再現可能な問題を特定できれば完了です。

索引モデルが issue の本文から書いたものです。

評価

技術スタック
python
領域
data
issue の種類
バグ
難易度
4/5
見積もり時間
3〜5日
活発さ
停滞
明瞭さ
説明が足りない
初心者へのやさしさ
28/100

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。