# First, load various python things. If you haven't installed Thermobar do so now
# by removing the # next to !pip install
#!pip install Thermobar
import Thermobar as pt
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
out=pt.import_excel('teneguia1971_py.xlsx', sheet_name="Liquid")
Liquids1=out['Liqs']
out2=pt.import_excel('teneguia1971_py.xlsx', sheet_name="Pyroxene")
Cpxs1=out2['Cpxs']
out3=pt.import_excel('teneguia1971_py.xlsx', sheet_name="Amphibole")
Amps1=out3['Amps']
C:\Users\penny\anaconda3\lib\site-packages\openpyxl\worksheet\_reader.py:312: UserWarning: Unknown extension is not supported and will be removed warn(msg)
help(pt.generic_cali_plot)
Help on function generic_cali_plot in module Thermobar.calibration_plots: generic_cali_plot(df, model=None, x=None, y=None, P_kbar=None, T_K=None, figsize=(7, 5), shape_cali='o', mfc_cali='white', mec_cali='k', ms_cali=5, shape_data='^', mfc_data='red', alpha_cali=1, alpha_data=1, mec_data='k', ms_data=10, order='cali bottom') This function plots your compositions amongst the calibration dataset for a variety of models where we could obtain the exact calibration dataset. see model for option. Parameters ------- df: pandas DataFrame dataframe of your compositions, e.g. a dataframe of Cpx composition x and y: str What you want to plotted against each other. E.g. x="SiO2_Cpx", y="Al2O3_Cpx" model: str AMPHIBOLE: Ridolfi2021: Ridolfi et al. (2012) Putirka2016: Putirka (2016) Mutch2016: Mutch et al. (2016) CPX: Putirka2008: Putirka (2008) - entire database for Cpx-Liq, (not used for all equations). Masotta2013: Masotta et al. (2013) Petrelli2020: Petrelli et al. (2020) for Cpx and Cpx-Liq Neave2017: Neave and Putirka (2017) for Cpx-Liq Brugman2019: Brugman and Till 2019 PLAGIOCLASE Waters2015: Waters and Lange (2015) for plag-liq hygrometry Masotta2019: Masotta et al. (2019) plag-liq hygrometry P_kbar and T_K: pd.Series if you want to plot calculated pressure and temperature against the calibration range, specify those panda series here, and it will append them onto your dataframe Plot customization options. ------- figsize: (x, y) figure size order: 'cali top' or 'cali bottom': whether cali or user data is plotted ontop. default, cali data bottom shape_cali, shape_data: matplotlib symbol, e.g. shape_cali='o' and shape_data='^' are the defaults ms_cali, ms_data: marker size for cali and user data mfc_cali, mfc_data: marker face color for cali and data (can be different) mec_cali, mfc_data: marker edge color for cali and data. alpha_cali, alpha_data: transparency of symbols liq_comps: pandas DataFrame liquid compositions (SiO2_Liq, TiO2_Liq etc.)
# Here we specify we want mutch, that we want calibration data
# on the bottom, and alpha (Transparency) at 80% for our data
a=pt.generic_cali_plot(df=Amps1, model="Mutch2016",
x='Mgno_FeT', y='Al2O3_Amp', order="cali bottom",
alpha_cali=1, alpha_data=0.8)
# Here we specify we want mutch, that we want calibration data
# on the bottom, and alpha (Transparency) at 80% for our data
a=pt.generic_cali_plot(df=Amps1, model="Ridolfi2021",
x='Mgno_FeT', y='Al2O3_Amp', order="cali bottom",
alpha_cali=1, alpha_data=0.8)
Cali_Dataset_Mutch=pt.return_cali_dataset(model="Mutch2016")
Cali_Dataset_Ridolfi=pt.return_cali_dataset(model="Ridolfi2021")
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(10,5))
ax1.plot(Cali_Dataset_Mutch['Na2O_Amp'], Cali_Dataset_Mutch['MgO_Amp'],
'ok', mfc='white')
ax1.plot(Amps1['Na2O_Amp'], Amps1['MgO_Amp'], '^k', mfc='red')
ax1.set_xlabel('Na$_2$O Amp')
ax1.set_ylabel('MgO Amp')
ax2.plot(Cali_Dataset_Ridolfi['Na2O_Amp'], Cali_Dataset_Ridolfi['MgO_Amp'],
'ok', mfc='white')
ax2.plot(Amps1['Na2O_Amp'], Amps1['MgO_Amp'], '^k', mfc='red')
ax2.set_xlabel('Na$_2$O Amp')
ax2.set_ylabel('MgO Amp')
Text(0, 0.5, 'MgO Amp')
P_Mutch=pt.calculate_amp_only_press(amp_comps=Amps1, equationP="P_Mutch2016")
P_Ridolfi=pt.calculate_amp_only_press_temp(amp_comps=Amps1,
equationP="P_Ridolfi2021",
equationT="T_Ridolfi2012")
a=pt.generic_cali_plot(df=Amps1, model="Ridolfi2021",
x='P_kbar', y='Mgno_FeT', P_kbar=P_Ridolfi['P_kbar_calc'],
order="cali bottom",
alpha_cali=1, alpha_data=0.8)
a=pt.generic_cali_plot(df=Amps1, model="Ridolfi2021",
x='P_kbar', y='T_K', P_kbar=P_Ridolfi['P_kbar_calc'],
T_K=P_Ridolfi['T_K_calc'],
order="cali bottom",
alpha_cali=1, alpha_data=0.4)
a=pt.generic_cali_plot(df=Amps1, model="Mutch2016",
x='P_kbar', y='Mgno_FeT', P_kbar=P_Mutch['P_kbar_calc'],
order="cali bottom",
alpha_cali=1, alpha_data=0.8)
Brugman_Cali=pt.return_cali_dataset(model='Brugman2019')
Petrelli_Cali=pt.return_cali_dataset(model='Petrelli2020')
Neave_Cali=pt.return_cali_dataset(model='Neave2017')
Masotta_Cali=pt.return_cali_dataset(model='Masotta2013')
# And calculate Cpx components for loaded cpx
input_cpx_comps=pt.calculate_clinopyroxene_components(cpx_comps=Cpxs1)
## Lets have a look at these
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(10,4))
ax1.plot(Masotta_Cali['Mgno_Cpx'],
Masotta_Cali['Na2O_Liq']+Masotta_Cali['K2O_Liq'],
'pk', mfc='yellow', ms=5, alpha=0.6, label='Masotta2013')
ax1.plot(Petrelli_Cali['Mgno_Cpx'],
Petrelli_Cali['Na2O_Liq']+Petrelli_Cali['K2O_Liq'],
'sk', mfc='blue', ms=3, alpha=0.6, label='Petrelli2020')
ax1.plot(Neave_Cali['Mgno_Cpx'],
Neave_Cali['Na2O_Liq']+Neave_Cali['K2O_Liq'],
'sk', mfc='red', label='Neave2017')
ax1.plot(Brugman_Cali['Mgno_Cpx'],
Brugman_Cali['Na2O_Liq']+Brugman_Cali['K2O_Liq'],
'ok', mfc='white', label='Brugman2019')
# Then calc
ax1.legend()
ax1.set_xlabel('Mg# (Cpx)')
ax1.set_ylabel('Na$_2$O + K$_2$O (Liq)')
y2='T_K'
x2='P_kbar'
ax2.plot(Masotta_Cali[x2],
Masotta_Cali[y2],
'pk', mfc='yellow', ms=5, alpha=0.6, label='Masotta2013')
ax2.plot(Petrelli_Cali[x2],
Petrelli_Cali[y2],
'sk', mfc='blue', ms=3, alpha=0.6, label='Petrelli2020')
ax2.plot(Neave_Cali[x2],
Neave_Cali[y2],
'sk', mfc='red', label='Neave2017')
ax2.plot(Brugman_Cali[x2],
Brugman_Cali[y2],
'ok', mfc='white', label='Brugman2019')
ax2.set_xlabel(x2)
ax2.set_ylabel(y2)
Text(0, 0.5, 'T_K')
a=pt.generic_cali_plot(df=Cpxs1, model="Neave2017",
x='Mgno_Cpx', y='Na2O_Cpx',
order="cali bottom",
alpha_cali=1, alpha_data=0.2)
PT_Pet20=pt.calculate_cpx_only_press_temp(cpx_comps=Cpxs1, equationP="P_Petrelli2020_Cpx_only",
equationT="T_Petrelli2020_Cpx_only")
Youve selected a P-independent function Youve selected a T-independent function
a=pt.generic_cali_plot(df=Cpxs1, model="Petrelli2020",
x='P_kbar', y='T_K', P_kbar=PT_Pet20['P_kbar_calc'],
T_K=PT_Pet20['T_K_calc'],
order="cali bottom",
alpha_cali=1, alpha_data=0.2)
# First, lets calculate matched Cpx-Liq pairs.
cpx_liq_out=pt.calculate_cpx_liq_press_temp_matching(cpx_comps=Cpxs1, liq_comps=Liquids1, equationT="T_Mas2013_Talk2012",
equationP="P_Mas2013_Palk2012")
all_matches=cpx_liq_out['All_PTs']
av_matches=cpx_liq_out['Av_PTs']
Considering 29274 Liq-Cpx pairs, be patient if this is >>1 million! Youve selected a P-independent function Youve selected a P-independent function 2207 Matches remaining after initial Kd filter. Now moving onto iterative calculations Youve selected a P-independent function Youve selected a T-independent function Youve selected a T-independent function Finished calculating Ps and Ts, now just averaging the results. Almost there! Done!
## Lets have a look at these
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(10,4))
ax1.plot(Masotta_Cali['Mgno_Cpx'],
Masotta_Cali['Na2O_Liq']+Masotta_Cali['K2O_Liq'],
'pk', mfc='yellow', ms=5, alpha=0.6, label='Masotta2013')
ax1.plot(Petrelli_Cali['Mgno_Cpx'],
Petrelli_Cali['Na2O_Liq']+Petrelli_Cali['K2O_Liq'],
'sk', mfc='blue', ms=3, alpha=0.6, label='Petrelli2020')
ax1.plot(Neave_Cali['Mgno_Cpx'],
Neave_Cali['Na2O_Liq']+Neave_Cali['K2O_Liq'],
'sk', mfc='red', label='Neave2017', alpha=0.6)
ax1.plot(Brugman_Cali['Mgno_Cpx'],
Brugman_Cali['Na2O_Liq']+Brugman_Cali['K2O_Liq'],
'ok', mfc='white', label='Brugman2019', alpha=0.6)
ax1.plot(all_matches['Mgno_Cpx'], all_matches['Na2O_Liq']+all_matches['K2O_Liq'],
'*c', ms=10, mfc='None', label='Data', alpha=1)
# Then calc
ax1.legend()
ax1.set_xlabel('Mg# (Cpx)')
ax1.set_ylabel('Na$_2$O + K$_2$O (Liq)')
y2='T_K'
x2='P_kbar'
ax2.plot(Masotta_Cali[x2],
Masotta_Cali[y2],
'pk', mfc='yellow', ms=5, label='Masotta2013', alpha=0.6)
ax2.plot(Petrelli_Cali[x2],
Petrelli_Cali[y2],
'sk', mfc='blue', ms=3, label='Petrelli2020', alpha=0.6)
ax2.plot(Neave_Cali[x2],
Neave_Cali[y2],
'sk', mfc='red', label='Neave2017', alpha=0.6)
ax2.plot(Brugman_Cali[x2],
Brugman_Cali[y2],
'ok', mfc='white', label='Brugman2019', alpha=0.6)
ax2.plot( all_matches['P_kbar_calc'],all_matches['T_K_calc'],
'*c', ms=10, mfc='None', label='Data', alpha=1)
ax2.set_xlabel(x2)
ax2.set_ylabel(y2)
Text(0, 0.5, 'T_K')
a=pt.generic_cali_plot(df=all_matches, model="Petrelli2020",
x='Mgno_Cpx', y='T_K', P_kbar=all_matches['P_kbar_calc'],
T_K=all_matches['T_K_calc'],
order="cali bottom",
alpha_cali=1, alpha_data=0.2)
a=pt.generic_cali_plot(df=all_matches, model="Masotta2013",
x='Mgno_Cpx', y='T_K',
T_K=all_matches['T_K_calc'],
order="cali bottom",
alpha_cali=1, alpha_data=0.2)