Skip to content

Instantly share code, notes, and snippets.

@j-faria
Created June 20, 2018 17:51
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save j-faria/dd635ffdf47ae758e7f3ce8384da8c99 to your computer and use it in GitHub Desktop.
Save j-faria/dd635ffdf47ae758e7f3ce8384da8c99 to your computer and use it in GitHub Desktop.
Three slightly different ways to do get stellar mass using the Torres calibration
def massTorres(teff, erteff, logg, erlogg, feh, erfeh,
ntrials=10000, corrected=True):
randomteff = teff + erteff * np.random.randn(ntrials)
randomlogg = logg + erlogg * np.random.randn(ntrials)
randomfeh = feh + erfeh * np.random.randn(ntrials)
# Parameters for the Torres calibration
a1 = 1.5689
a2 = 1.3787
a3 = 0.4243
a4 = 1.139
a5 = -0.1425
a6 = 0.01969
a7 = 0.1010
X = np.log10(randomteff) - 4.1
logMass = a1 + a2*X + a3*X**2 + a4*X**3 + a5*randomlogg**2 \
+ a6*randomlogg**3 + a7*randomfeh
meanlogMass = np.mean(logMass)
siglogMass = np.sum((logMass - meanlogMass)**2) / (ntrials - 1)
siglogMassTot = np.sqrt(0.027*0.027 + siglogMass)
meanMass = 10**meanlogMass
sigMass = 10**(meanlogMass + siglogMassTot) - meanMass
if corrected:
# correction comes from Santos+(2013), the SWEET-Cat paper
corrected_meanMass = 0.791 * meanMass**2 - 0.575 * meanMass + 0.701
return corrected_meanMass, sigMass
else:
return meanMass, sigMass
import numba
@numba.jit
def massTorres3(teff, erteff, logg, erlogg, feh, erfeh,
ntrials=10000, corrected=True):
randomteff = teff + erteff * np.random.randn(ntrials)
randomlogg = logg + erlogg * np.random.randn(ntrials)
randomfeh = feh + erfeh * np.random.randn(ntrials)
# Parameters for the Torres calibration
a1 = 1.5689
a2 = 1.3787
a3 = 0.4243
a4 = 1.139
a5 = -0.1425
a6 = 0.01969
a7 = 0.1010
X = np.log10(randomteff) - 4.1
logMass = a1 + a2*X + a3*X**2 + a4*X**3 + a5*randomlogg**2 \
+ a6*randomlogg**3 + a7*randomfeh
meanlogMass = np.mean(logMass)
siglogMass = np.sum((logMass - meanlogMass)**2) / (ntrials - 1)
siglogMassTot = np.sqrt(0.027*0.027 + siglogMass)
meanMass = 10**meanlogMass
sigMass = 10**(meanlogMass + siglogMassTot) - meanMass
if corrected:
# correction comes from Santos+(2013), the SWEET-Cat paper
corrected_meanMass = 0.791 * meanMass**2 - 0.575 * meanMass + 0.701
return corrected_meanMass, sigMass
else:
return meanMass, sigMass
def massTorres(teff, erteff, logg, erlogg, feh, erfeh):
ntrials = 10000
randomteff = teff + erteff * np.random.randn(ntrials)
randomlogg = logg + erlogg * np.random.randn(ntrials)
randomfeh = feh + erfeh * np.random.randn(ntrials)
# Parameters for the Torres calibration:
a1 = 1.5689
a2 = 1.3787
a3 = 0.4243
a4 = 1.139
a5 = -0.1425
a6 = 0.01969
a7 = 0.1010
M = np.zeros(ntrials)
logM = np.zeros(ntrials)
for i in range(len(randomteff)):
X = np.log10(randomteff[i]) - 4.1
logMass = a1 + a2 * X + a3 * X * X + a4 * X * X * X + a5 *\
randomlogg[i] * randomlogg[i] + a6 * randomlogg[i] *\
randomlogg[i] * randomlogg[i] + a7 * randomfeh[i]
logM[i] = logMass
M[i] = 10 ** logMass
meanMasslog = np.mean(logM)
sigMasslog = np.sqrt(np.sum([(logMi - meanMasslog)**2 for logMi in logM]) /
(ntrials - 1))
sigMasslogTot = np.sqrt(0.027*0.027 + sigMasslog*sigMasslog)
meanMass = 10**meanMasslog
sigMass = 10**(meanMasslog + sigMasslogTot) - meanMass
corrected_meanMass = 0.791 * meanMass**2 - 0.575 * meanMass + 0.701
return corrected_meanMass, sigMass
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment