From 6f8535a7435faed2154f9aa7a0e38a11effcbb45 Mon Sep 17 00:00:00 2001 From: Chun Ly Date: Thu, 30 Jan 2020 08:43:14 -0700 Subject: [PATCH 1/8] temp_metallicity_calc: Use k_dict for cardelli attenuation --- Metallicity_Stack_Commons/temp_metallicity_calc.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/Metallicity_Stack_Commons/temp_metallicity_calc.py b/Metallicity_Stack_Commons/temp_metallicity_calc.py index 477d858..6aeffea 100644 --- a/Metallicity_Stack_Commons/temp_metallicity_calc.py +++ b/Metallicity_Stack_Commons/temp_metallicity_calc.py @@ -22,16 +22,22 @@ from astropy import units as u from chun_codes.cardelli import * +from . import k_dict + +k_4363 = k_dict['OIII_4363'] +k_5007 = k_dict['OIII_5007'] + #Constants a = 13205 b = 0.92506 c = 0.98062 -def R_calculation(OIII4363, OIII5007, EBV, k_4363, k_5007): + +def R_calculation(OIII4363, OIII5007, EBV): R_value = OIII4363/(OIII5007*(1+1/3.1))* 10**(0.4*EBV*(k_4363-k_5007)) - return R_value + return R_value def temp_calculation(R): #T_e = a(-log(R)-b)^(-c) From c883441648a50b7fca939653d6ac5446bf5599dd Mon Sep 17 00:00:00 2001 From: Chun Ly Date: Thu, 30 Jan 2020 08:43:14 -0700 Subject: [PATCH 2/8] temp_metallicity_calc: Use k_dict for cardelli attenuation (iss #6) --- Metallicity_Stack_Commons/temp_metallicity_calc.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/Metallicity_Stack_Commons/temp_metallicity_calc.py b/Metallicity_Stack_Commons/temp_metallicity_calc.py index 477d858..6aeffea 100644 --- a/Metallicity_Stack_Commons/temp_metallicity_calc.py +++ b/Metallicity_Stack_Commons/temp_metallicity_calc.py @@ -22,16 +22,22 @@ from astropy import units as u from chun_codes.cardelli import * +from . import k_dict + +k_4363 = k_dict['OIII_4363'] +k_5007 = k_dict['OIII_5007'] + #Constants a = 13205 b = 0.92506 c = 0.98062 -def R_calculation(OIII4363, OIII5007, EBV, k_4363, k_5007): + +def R_calculation(OIII4363, OIII5007, EBV): R_value = OIII4363/(OIII5007*(1+1/3.1))* 10**(0.4*EBV*(k_4363-k_5007)) - return R_value + return R_value def temp_calculation(R): #T_e = a(-log(R)-b)^(-c) From 62b72e403e48e6e0cf8f1fd771b40a9385aa8474 Mon Sep 17 00:00:00 2001 From: Chun Ly Date: Thu, 30 Jan 2020 08:58:39 -0700 Subject: [PATCH 3/8] temp_metallicity_calc: docstrings for documentation (iss #6) --- .../temp_metallicity_calc.py | 54 +++++++++++++++---- 1 file changed, 43 insertions(+), 11 deletions(-) diff --git a/Metallicity_Stack_Commons/temp_metallicity_calc.py b/Metallicity_Stack_Commons/temp_metallicity_calc.py index 6aeffea..4421334 100644 --- a/Metallicity_Stack_Commons/temp_metallicity_calc.py +++ b/Metallicity_Stack_Commons/temp_metallicity_calc.py @@ -35,32 +35,64 @@ def R_calculation(OIII4363, OIII5007, EBV): - + ''' + Computes the excitation flux ratio of [OIII]4363 to [OIII]5007. + Adopts a 3.1-to-1 ratio for 5007/4959 + + :param OIII4363: numpy array of OIII4363 fluxes + :param OIII5007: numpy array of OIII5007 fluxes + :param EBV: numpy array of E(B-V). Set to zero if not applying attenuation + + :return R_value: O++ excitation flux ratio + ''' + R_value = OIII4363/(OIII5007*(1+1/3.1))* 10**(0.4*EBV*(k_4363-k_5007)) + return R_value def temp_calculation(R): - #T_e = a(-log(R)-b)^(-c) - T_e = a*(-np.log10(R)-b)**(-1*c) - print(T_e) + ''' + Computes electron temperature (T_e) from O++ excitation flux ratio + + Formula is: + T_e = a(-log(R)-b)^(-c) + where a = 13025, b=0.92506, and c=0.98062 (Nicholls et al. 2014) + + :param R: numpy array of O++ excitation flux ratio (see R_calculation) + + :return T_e: numpy array of T_e (Kelvins) + ''' + + T_e = a*(-np.log10(R)-b)**(-1*c) + return T_e -def metallicity_calculation(T_e, TWO_BETA, THREE_BETA): #metallicity spelled wrong go back and change it if you have time -#(T_e,der_3727_HBETA, der_4959_HBETA, der_5007_HBETA, OIII5007, OIII4959, OIII4363, HBETA, OII3727, dustatt = False): - #12 +log(O+/H) = log(OII/Hb) +5.961 +1.676/t_2 - 0.4logt_2 - 0.034t_2 + log(1+1.35x) - #12 +log(O++/H) = log(OIII/Hb)+6.200+1.251/t_3 - 0.55log(t_3) - 0.014(t_3) - #t_2 = 0.7*t_3 +0.17 - +def metallicity_calculation(T_e, TWO_BETA, THREE_BETA): + ''' + Determines 12+log(O/H) from electron temperature and [OII]/Hb and [OIII]/Hb flux ratio + + :param T_e: numpy array of temperature (see temp_calculation) + :param TWO_BETA: numpy array of [OII]/Hb flux ratio + :param THREE_BETA: numpy array of [OIII]/Hb flux ratio + + :return O_s_ion: numpy array of O+/H + :return O_d_ion: numpy array of O++/H + :return com_O_log: numpy array of 12+log(O/H) + :return O_s_ion_log: numpy array of log(O+/H) + :return O_d_ion_log: numpy array of log(O++/H) + ''' + t_3 = T_e*1e-4 t_2 = 0.7*t_3 +0.17 x2 = 1e-4 * 1e3 * t_2**(-0.5) + # Equations from Izotov et al. (2006) O_s_ion_log = np.log10(TWO_BETA) +5.961 +1.676/t_2 - 0.4*np.log10(t_2) - 0.034*t_2 + np.log10(1+1.35*x2)-12 O_d_ion_log = np.log10(THREE_BETA)+6.200+1.251/t_3 - 0.55*np.log10(t_3) - 0.014*(t_3)-12 O_s_ion = 10**(O_s_ion_log) O_d_ion = 10**(O_d_ion_log) com_O = O_s_ion + O_d_ion - com_O_log = np.log10(com_O) +12 + com_O_log = np.log10(com_O) + 12 return O_s_ion , O_d_ion, com_O_log, O_s_ion_log, O_d_ion_log From 71a583d615371ea06ff501d0b31c3679ac481206 Mon Sep 17 00:00:00 2001 From: Chun Ly Date: Thu, 30 Jan 2020 09:07:49 -0700 Subject: [PATCH 4/8] temperature_metallicity_calc.metallicity_calculation: Simplify output with dict --- Metallicity_Stack_Commons/temp_metallicity_calc.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Metallicity_Stack_Commons/temp_metallicity_calc.py b/Metallicity_Stack_Commons/temp_metallicity_calc.py index 4421334..14fdd30 100644 --- a/Metallicity_Stack_Commons/temp_metallicity_calc.py +++ b/Metallicity_Stack_Commons/temp_metallicity_calc.py @@ -75,11 +75,8 @@ def metallicity_calculation(T_e, TWO_BETA, THREE_BETA): :param TWO_BETA: numpy array of [OII]/Hb flux ratio :param THREE_BETA: numpy array of [OIII]/Hb flux ratio - :return O_s_ion: numpy array of O+/H - :return O_d_ion: numpy array of O++/H :return com_O_log: numpy array of 12+log(O/H) - :return O_s_ion_log: numpy array of log(O+/H) - :return O_d_ion_log: numpy array of log(O++/H) + :return metal_dict: dictionary containing O+/H, O++/H, log(O+/H), log(O++/H) ''' t_3 = T_e*1e-4 @@ -95,4 +92,7 @@ def metallicity_calculation(T_e, TWO_BETA, THREE_BETA): com_O = O_s_ion + O_d_ion com_O_log = np.log10(com_O) + 12 - return O_s_ion , O_d_ion, com_O_log, O_s_ion_log, O_d_ion_log + metal_dict = dict(O_s_ion=O_s_ion, O_d_ion=O_d_ion, + O_s_ion_log=O_s_ion_log, O_d_ion_log=O_d_ion_log) + + return com_O_log, metal_dict From 0642be6f8494edf2da2e92412b63c196f9adc869 Mon Sep 17 00:00:00 2001 From: Chun Ly Date: Thu, 30 Jan 2020 09:07:49 -0700 Subject: [PATCH 5/8] temperature_metallicity_calc.metallicity_calculation: Simplify output with dict (iss #6) --- Metallicity_Stack_Commons/temp_metallicity_calc.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Metallicity_Stack_Commons/temp_metallicity_calc.py b/Metallicity_Stack_Commons/temp_metallicity_calc.py index 4421334..14fdd30 100644 --- a/Metallicity_Stack_Commons/temp_metallicity_calc.py +++ b/Metallicity_Stack_Commons/temp_metallicity_calc.py @@ -75,11 +75,8 @@ def metallicity_calculation(T_e, TWO_BETA, THREE_BETA): :param TWO_BETA: numpy array of [OII]/Hb flux ratio :param THREE_BETA: numpy array of [OIII]/Hb flux ratio - :return O_s_ion: numpy array of O+/H - :return O_d_ion: numpy array of O++/H :return com_O_log: numpy array of 12+log(O/H) - :return O_s_ion_log: numpy array of log(O+/H) - :return O_d_ion_log: numpy array of log(O++/H) + :return metal_dict: dictionary containing O+/H, O++/H, log(O+/H), log(O++/H) ''' t_3 = T_e*1e-4 @@ -95,4 +92,7 @@ def metallicity_calculation(T_e, TWO_BETA, THREE_BETA): com_O = O_s_ion + O_d_ion com_O_log = np.log10(com_O) + 12 - return O_s_ion , O_d_ion, com_O_log, O_s_ion_log, O_d_ion_log + metal_dict = dict(O_s_ion=O_s_ion, O_d_ion=O_d_ion, + O_s_ion_log=O_s_ion_log, O_d_ion_log=O_d_ion_log) + + return com_O_log, metal_dict From db7a916c256092135b9d948cdf7a0822566110cc Mon Sep 17 00:00:00 2001 From: Chun Ly Date: Fri, 31 Jan 2020 14:45:40 -0700 Subject: [PATCH 6/8] temp_metallicity_calc: Remove unused imports (iss #6) --- .../temp_metallicity_calc.py | 22 ------------------- 1 file changed, 22 deletions(-) diff --git a/Metallicity_Stack_Commons/temp_metallicity_calc.py b/Metallicity_Stack_Commons/temp_metallicity_calc.py index 14fdd30..0969b71 100644 --- a/Metallicity_Stack_Commons/temp_metallicity_calc.py +++ b/Metallicity_Stack_Commons/temp_metallicity_calc.py @@ -1,26 +1,4 @@ import numpy as np -import matplotlib.pyplot as plt -from astropy.io import fits -from astropy.io import ascii as asc -from astropy.table import vstack, hstack -from matplotlib.backends.backend_pdf import PdfPages -from astropy.table import Table, Column -from mpl_toolkits.axes_grid1.inset_locator import zoomed_inset_axes -from mpl_toolkits.axes_grid1.inset_locator import mark_inset -from os.path import exists -import numpy.ma as ma -from matplotlib.gridspec import GridSpec -from pylab import subplots_adjust -from astropy.convolution import Box1DKernel, convolve -from scipy.optimize import curve_fit -import scipy.integrate as integ -from mpl_toolkits.mplot3d import Axes3D -import sys - -#For generalizing for several users -from getpass import getuser -from astropy import units as u -from chun_codes.cardelli import * from . import k_dict From 40e9ef3685beb15761a46a8de6b0981890dcca3f Mon Sep 17 00:00:00 2001 From: Chun Ly Date: Fri, 31 Jan 2020 14:49:47 -0700 Subject: [PATCH 7/8] temp_metallicity_calc: PEP8 formating (docstrings, extra spaces) (iss #6) --- .../temp_metallicity_calc.py | 36 ++++++++++--------- 1 file changed, 20 insertions(+), 16 deletions(-) diff --git a/Metallicity_Stack_Commons/temp_metallicity_calc.py b/Metallicity_Stack_Commons/temp_metallicity_calc.py index 0969b71..ad89d37 100644 --- a/Metallicity_Stack_Commons/temp_metallicity_calc.py +++ b/Metallicity_Stack_Commons/temp_metallicity_calc.py @@ -5,7 +5,7 @@ k_4363 = k_dict['OIII_4363'] k_5007 = k_dict['OIII_5007'] -#Constants +# Constants a = 13205 b = 0.92506 @@ -13,7 +13,7 @@ def R_calculation(OIII4363, OIII5007, EBV): - ''' + """ Computes the excitation flux ratio of [OIII]4363 to [OIII]5007. Adopts a 3.1-to-1 ratio for 5007/4959 @@ -22,14 +22,15 @@ def R_calculation(OIII4363, OIII5007, EBV): :param EBV: numpy array of E(B-V). Set to zero if not applying attenuation :return R_value: O++ excitation flux ratio - ''' + """ - R_value = OIII4363/(OIII5007*(1+1/3.1))* 10**(0.4*EBV*(k_4363-k_5007)) + R_value = OIII4363 / (OIII5007 * (1 + 1 / 3.1)) * 10 ** (0.4 * EBV * (k_4363 - k_5007)) return R_value + def temp_calculation(R): - ''' + """ Computes electron temperature (T_e) from O++ excitation flux ratio Formula is: @@ -39,14 +40,15 @@ def temp_calculation(R): :param R: numpy array of O++ excitation flux ratio (see R_calculation) :return T_e: numpy array of T_e (Kelvins) - ''' + """ - T_e = a*(-np.log10(R)-b)**(-1*c) + T_e = a * (-np.log10(R) - b) ** (-1 * c) return T_e + def metallicity_calculation(T_e, TWO_BETA, THREE_BETA): - ''' + """ Determines 12+log(O/H) from electron temperature and [OII]/Hb and [OIII]/Hb flux ratio :param T_e: numpy array of temperature (see temp_calculation) @@ -55,18 +57,20 @@ def metallicity_calculation(T_e, TWO_BETA, THREE_BETA): :return com_O_log: numpy array of 12+log(O/H) :return metal_dict: dictionary containing O+/H, O++/H, log(O+/H), log(O++/H) - ''' + """ - t_3 = T_e*1e-4 - t_2 = 0.7*t_3 +0.17 - x2 = 1e-4 * 1e3 * t_2**(-0.5) + t_3 = T_e * 1e-4 + t_2 = 0.7 * t_3 + 0.17 + x2 = 1e-4 * 1e3 * t_2 ** (-0.5) # Equations from Izotov et al. (2006) - O_s_ion_log = np.log10(TWO_BETA) +5.961 +1.676/t_2 - 0.4*np.log10(t_2) - 0.034*t_2 + np.log10(1+1.35*x2)-12 - O_d_ion_log = np.log10(THREE_BETA)+6.200+1.251/t_3 - 0.55*np.log10(t_3) - 0.014*(t_3)-12 + O_s_ion_log = np.log10(TWO_BETA) + 5.961 + 1.676 / t_2 - 0.4 * np.log10(t_2) \ + - 0.034 * t_2 + np.log10(1 + 1.35 * x2) - 12 + O_d_ion_log = np.log10(THREE_BETA) + 6.200 + 1.251 / t_3 \ + - 0.55 * np.log10(t_3) - 0.014 * (t_3) - 12 - O_s_ion = 10**(O_s_ion_log) - O_d_ion = 10**(O_d_ion_log) + O_s_ion = 10 ** (O_s_ion_log) + O_d_ion = 10 ** (O_d_ion_log) com_O = O_s_ion + O_d_ion com_O_log = np.log10(com_O) + 12 From cad60888b7f22578c8bca573bf5446958b92891c Mon Sep 17 00:00:00 2001 From: Chun Ly Date: Fri, 31 Jan 2020 14:52:14 -0700 Subject: [PATCH 8/8] temp_metallicity_calc: PEP8 formatting (iss #6) --- Metallicity_Stack_Commons/temp_metallicity_calc.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/Metallicity_Stack_Commons/temp_metallicity_calc.py b/Metallicity_Stack_Commons/temp_metallicity_calc.py index ad89d37..839cdb6 100644 --- a/Metallicity_Stack_Commons/temp_metallicity_calc.py +++ b/Metallicity_Stack_Commons/temp_metallicity_calc.py @@ -6,7 +6,6 @@ k_5007 = k_dict['OIII_5007'] # Constants - a = 13205 b = 0.92506 c = 0.98062 @@ -61,7 +60,7 @@ def metallicity_calculation(T_e, TWO_BETA, THREE_BETA): t_3 = T_e * 1e-4 t_2 = 0.7 * t_3 + 0.17 - x2 = 1e-4 * 1e3 * t_2 ** (-0.5) + x2 = 1e-4 * 1e3 * t_2 ** (-0.5) # Equations from Izotov et al. (2006) O_s_ion_log = np.log10(TWO_BETA) + 5.961 + 1.676 / t_2 - 0.4 * np.log10(t_2) \ @@ -69,8 +68,8 @@ def metallicity_calculation(T_e, TWO_BETA, THREE_BETA): O_d_ion_log = np.log10(THREE_BETA) + 6.200 + 1.251 / t_3 \ - 0.55 * np.log10(t_3) - 0.014 * (t_3) - 12 - O_s_ion = 10 ** (O_s_ion_log) - O_d_ion = 10 ** (O_d_ion_log) + O_s_ion = 10 ** O_s_ion_log + O_d_ion = 10 ** O_d_ion_log com_O = O_s_ion + O_d_ion com_O_log = np.log10(com_O) + 12