{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# PEC correction" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Start by importing MagmaPEC and MagmaPandas and any other packages you want to use. Here we also import Pandas for importing pressure data. For details on the use of MagmaPandas, please see it's [documentation](https://magmapandas.readthedocs.io/en/latest/)." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import MagmaPEC as mpc\n", "import MagmaPandas as mp\n", "\n", "import pandas as pd" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Import your melt inclusion and olivine data as magmapandas dataframes. Expected units are wt.%, and in the column headers only the first letter of each element should be capitalized. Iron is expected to be expressed as FeO (total), with column name 'FeO'." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "melt_file = \"./data/melt.csv\"\n", "olivine_file = \"./data/olivine.csv\"\n", "\n", "melt = mp.read_melt(melt_file, index_col=[\"name\"], units=\"wt.%\")\n", "olivine = mp.read_olivine(olivine_file, index_col=[\"name\"], units=\"wt.%\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here's an example of the expected column header formatting:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "['SiO2' 'Al2O3' 'MgO' 'CaO' 'FeO' 'Na2O' 'K2O' 'MnO' 'TiO2' 'P2O5' 'Cr2O3'\n", " 'CO2' 'H2O' 'F' 'S' 'Cl']\n" ] } ], "source": [ "print(melt.columns.values)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "If you have data for internal inclusion pressures (in bars) you can also import those. The data need to be list-like (e.g. list, numpy array, pandas series) and if you use a pandas series you need to make sure the index matches those of the melt and olivine dataframes.\n", "\n", "The pressures we use here were calculated previously with CO2-H2O solubility models. CO2 from the glass only was used, i.e. not from the bubble, and resulting pressures are final pressures inside the inclusions, at the end of post-entrapment crystallization.\n", "\n", "In reality, pressures are not fixed during post-entrapment crystallisation. Olivine has a lower specific volume than silicate melt, so as inclusions crystallize olivine, their internal pressures decrease. However, many melt inclusions are trapped at high pressure (>5 kbar) and compared to that, PEC-driven pressure decreases are relatively minor (<2 kbar). Moreover, modelling pressure changes during post-entrapment crystallization is complicated and requires tight thermodynamic constraints. MagmaPEC therefore runs at fixed pressures. \n", "\n", "Suitable pressure options are final, post-PEC, pressures or an approximations of entrapment pressures. Entrapment pressures can be approximated by calculating CO2 saturation pressures of uncorrected inclusions with their total CO2 budgets (glass + bubble + carbonates), or by running PEC corrections iteratively. Note that the former results in overestimated saturation pressures as PEC corrections dilute inclusion CO2 concentrations. Modelled PEC extents increase with pressure. Post-PEC pressures will therefore yield slightly underestimated PEC extents, and entrapment pressures slightly overestimated PEC extents." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "name\n", "PI032-04-01 4104.410589\n", "PI032-04-02 4231.966408\n", "PI041-02-02 1956.244091\n", "PI041-03-01 3548.843351\n", "PI041-03-03 3500.514426\n", "PI041-05-04 1386.274577\n", "PI041-05-06 2512.013195\n", "PI041-07-01 3668.361134\n", "PI041-07-02 2449.116051\n", "PI052-01-02 1404.218415\n", "Name: IaconoMarziano, dtype: float64" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pressure_file =\"./data/pressure.csv\"\n", "\n", "pressure = pd.read_csv(pressure_file, index_col = [\"name\"]).squeeze()\n", "\n", "pressure" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Alternatively, if you have melt CO2 (and H2O) data, you can use MagmaPandas to calculate volatile saturation pressures. First calculate temperature with some initial pressure and then iteratively calculate pressure and temperature. See the [MagmaPandas documentation](https://magmapandas.readthedocs.io/en/latest/notebooks/melt_basics.html) for more details.\n", "\n", "The melt compositions in this example have been corrected for CO2 bubbles and the pressures calculated here are therefore overestimated approximations of inclusion entrapment pressures (see above).\n", "\n", "In the rest of this notebook we do not use these modelled pressures, and instead use the above imported post-PEC pressures." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SiO2Al2O3MgOCaOFeONa2OK2OMnOTiO2P2O5Cr2O3CO2H2OFSCl
name
PI032-04-0150.02886215.2269795.33000610.5220198.594543.9142800.7307980.1262662.6692160.303542NaN0.6582521.5083790.0825900.1523370.035565
PI032-04-0249.55886116.0415885.11747910.2660678.254713.7824080.9978260.1299692.8148070.356900NaN0.7134721.4122740.0890100.1755110.047265
PI041-02-0249.11204516.9720384.8641539.19571810.075403.7935121.0791840.1534562.8079670.561756NaN0.4645200.6563410.0477150.0681080.021185
PI041-03-0147.09851517.4485154.65064012.1541107.954023.7072631.2682820.1013703.4932710.611504NaN0.8837200.3249680.0880700.0962280.059958
PI041-03-0346.47887017.6371024.76275212.3640337.840273.7894461.2946030.0772213.6174840.574248NaN0.9104700.3449880.0906050.0881450.061584
PI041-05-0447.13829817.9567414.0241209.08072011.064604.4430801.5520790.1370082.4021990.797181NaN0.4927380.4459670.0847770.1173150.057016
PI041-05-0646.50128217.3116864.2284299.09712811.047404.0825531.4454130.1629753.7073470.631987NaN0.6529850.5975600.1095840.1307040.064655
PI041-07-0146.71925016.9337164.81194710.7344319.195773.4806761.4146400.1356733.9274580.616899NaN0.5200141.1349390.0834960.1816920.062622
PI041-07-0246.70383517.1526304.80779911.0706429.020663.5133641.4982420.1276133.8932340.678595NaN0.4099630.6787810.0810430.1546460.063188
PI052-01-0247.82072115.7050194.6047599.57929411.987004.5459541.4143190.2302381.6276130.6319080.0438550.2658841.0359200.0758490.1166140.049536
\n", "
" ], "text/plain": [ " SiO2 Al2O3 MgO CaO FeO Na2O \\\n", "name \n", "PI032-04-01 50.028862 15.226979 5.330006 10.522019 8.59454 3.914280 \n", "PI032-04-02 49.558861 16.041588 5.117479 10.266067 8.25471 3.782408 \n", "PI041-02-02 49.112045 16.972038 4.864153 9.195718 10.07540 3.793512 \n", "PI041-03-01 47.098515 17.448515 4.650640 12.154110 7.95402 3.707263 \n", "PI041-03-03 46.478870 17.637102 4.762752 12.364033 7.84027 3.789446 \n", "PI041-05-04 47.138298 17.956741 4.024120 9.080720 11.06460 4.443080 \n", "PI041-05-06 46.501282 17.311686 4.228429 9.097128 11.04740 4.082553 \n", "PI041-07-01 46.719250 16.933716 4.811947 10.734431 9.19577 3.480676 \n", "PI041-07-02 46.703835 17.152630 4.807799 11.070642 9.02066 3.513364 \n", "PI052-01-02 47.820721 15.705019 4.604759 9.579294 11.98700 4.545954 \n", "\n", " K2O MnO TiO2 P2O5 Cr2O3 CO2 \\\n", "name \n", "PI032-04-01 0.730798 0.126266 2.669216 0.303542 NaN 0.658252 \n", "PI032-04-02 0.997826 0.129969 2.814807 0.356900 NaN 0.713472 \n", "PI041-02-02 1.079184 0.153456 2.807967 0.561756 NaN 0.464520 \n", "PI041-03-01 1.268282 0.101370 3.493271 0.611504 NaN 0.883720 \n", "PI041-03-03 1.294603 0.077221 3.617484 0.574248 NaN 0.910470 \n", "PI041-05-04 1.552079 0.137008 2.402199 0.797181 NaN 0.492738 \n", "PI041-05-06 1.445413 0.162975 3.707347 0.631987 NaN 0.652985 \n", "PI041-07-01 1.414640 0.135673 3.927458 0.616899 NaN 0.520014 \n", "PI041-07-02 1.498242 0.127613 3.893234 0.678595 NaN 0.409963 \n", "PI052-01-02 1.414319 0.230238 1.627613 0.631908 0.043855 0.265884 \n", "\n", " H2O F S Cl \n", "name \n", "PI032-04-01 1.508379 0.082590 0.152337 0.035565 \n", "PI032-04-02 1.412274 0.089010 0.175511 0.047265 \n", "PI041-02-02 0.656341 0.047715 0.068108 0.021185 \n", "PI041-03-01 0.324968 0.088070 0.096228 0.059958 \n", "PI041-03-03 0.344988 0.090605 0.088145 0.061584 \n", "PI041-05-04 0.445967 0.084777 0.117315 0.057016 \n", "PI041-05-06 0.597560 0.109584 0.130704 0.064655 \n", "PI041-07-01 1.134939 0.083496 0.181692 0.062622 \n", "PI041-07-02 0.678781 0.081043 0.154646 0.063188 \n", "PI052-01-02 1.035920 0.075849 0.116614 0.049536 " ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "melt" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Saturation pressure... |█████████████████████████| 100% [10/10] in 2.6s \n", "Saturation pressure... |█████████████████████████| 100% [10/10] in 2.3s \n", "Saturation pressure... |█████████████████████████| 100% [10/10] in 2.3s \n" ] }, { "data": { "text/plain": [ "name\n", "PI032-04-01 6152.773380\n", "PI032-04-02 6822.817783\n", "PI041-02-02 4801.389400\n", "PI041-03-01 6957.131799\n", "PI041-03-03 6825.409494\n", "PI041-05-04 4012.681954\n", "PI041-05-06 5267.599946\n", "PI041-07-01 4966.863409\n", "PI041-07-02 4174.413404\n", "PI052-01-02 2387.565435\n", "dtype: float64" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "temperature = melt.temperature(P_bar = 5e3)\n", "pressure_calc = melt.volatile_saturation_pressure(T_K=temperature)\n", "\n", "while True:\n", " temperature = melt.temperature(P_bar=pressure_calc)\n", " pressure_calc_new = melt.volatile_saturation_pressure(T_K=temperature)\n", " dP = (pressure_calc_new - pressure_calc) / pressure_calc_new # calculate percentage change\n", " pressure_calc = pressure_calc_new.copy()\n", " if (dP < 0.01).all():\n", " # break when all pressure have converged within 1% of previous values.\n", " break\n", "\n", "pressure_calc" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here we will also use a whole-rock dataset to set up a model for predicting the initial FeO contents of our melt inclusions. For explanation of this model, follow the [Initial FeO prediction](https://magmapec.readthedocs.io/en/latest/notebooks/FeOi.html#) example." ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "wholerock_file = \"./data/wholerock.csv\"\n", "\n", "wholerock = mp.read_melt(wholerock_file, index_col=[\"name\"])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's begin by setting up the model to predict the initial FeO content of our melt inclusions according to the previous [example](https://magmapec.readthedocs.io/en/latest/notebooks/FeOi.html#). Here, the FeO prediction model is based on TiO2, Al2O3 and CaO, which we can check by accessing their coefficients:" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "x = wholerock.drop(columns=[\"FeO\"])\n", "FeOi_predict = mpc.FeOi_prediction(x=x, FeO=wholerock[\"FeO\"])\n", "\n", "do_not_use = [\"MnO\", \"P2O5\", \"Cr2O3\", \"total\"]\n", "\n", "model_fits = FeOi_predict.calculate_model_fits(exclude=do_not_use)\n", "FeOi_predict.select_predictors(idx=3)" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "intercept 11.585125\n", "TiO2 1.463365\n", "Al2O3 -0.230722\n", "CaO -0.169262\n", "dtype: float64" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "FeOi_predict.coefficients" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To use this model during PEC correction, we need to store this model as a callable function, which we can do with the *model* attribute:" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "FeO_model = FeOi_predict.model" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's first quickly test the model by predicting FeO contents for our uncorrected melt compositions:" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "name\n", "PI032-04-01 10.196984\n", "PI032-04-02 10.265411\n", "PI041-02-02 10.221895\n", "PI041-03-01 10.614069\n", "PI041-03-03 10.716794\n", "PI041-05-04 9.420381\n", "PI041-05-06 11.476340\n", "PI041-07-01 11.608516\n", "PI041-07-02 11.451018\n", "PI052-01-02 8.722012\n", "dtype: float32" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "FeO_model(melt)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This all looks good, so let continue with setting up the PEC correction model." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "First, preview the melt and olivine data to check everything looks ok:" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SiO2Al2O3MgOCaOFeONa2OK2OMnOTiO2P2O5Cr2O3CO2H2OFSCl
name
PI032-04-0150.02886215.2269795.33000610.5220198.594543.9142800.7307980.1262662.6692160.303542NaN0.6582521.5083790.0825900.1523370.035565
PI032-04-0249.55886116.0415885.11747910.2660678.254713.7824080.9978260.1299692.8148070.356900NaN0.7134721.4122740.0890100.1755110.047265
PI041-02-0249.11204516.9720384.8641539.19571810.075403.7935121.0791840.1534562.8079670.561756NaN0.4645200.6563410.0477150.0681080.021185
PI041-03-0147.09851517.4485154.65064012.1541107.954023.7072631.2682820.1013703.4932710.611504NaN0.8837200.3249680.0880700.0962280.059958
PI041-03-0346.47887017.6371024.76275212.3640337.840273.7894461.2946030.0772213.6174840.574248NaN0.9104700.3449880.0906050.0881450.061584
\n", "
" ], "text/plain": [ " SiO2 Al2O3 MgO CaO FeO Na2O \\\n", "name \n", "PI032-04-01 50.028862 15.226979 5.330006 10.522019 8.59454 3.914280 \n", "PI032-04-02 49.558861 16.041588 5.117479 10.266067 8.25471 3.782408 \n", "PI041-02-02 49.112045 16.972038 4.864153 9.195718 10.07540 3.793512 \n", "PI041-03-01 47.098515 17.448515 4.650640 12.154110 7.95402 3.707263 \n", "PI041-03-03 46.478870 17.637102 4.762752 12.364033 7.84027 3.789446 \n", "\n", " K2O MnO TiO2 P2O5 Cr2O3 CO2 \\\n", "name \n", "PI032-04-01 0.730798 0.126266 2.669216 0.303542 NaN 0.658252 \n", "PI032-04-02 0.997826 0.129969 2.814807 0.356900 NaN 0.713472 \n", "PI041-02-02 1.079184 0.153456 2.807967 0.561756 NaN 0.464520 \n", "PI041-03-01 1.268282 0.101370 3.493271 0.611504 NaN 0.883720 \n", "PI041-03-03 1.294603 0.077221 3.617484 0.574248 NaN 0.910470 \n", "\n", " H2O F S Cl \n", "name \n", "PI032-04-01 1.508379 0.082590 0.152337 0.035565 \n", "PI032-04-02 1.412274 0.089010 0.175511 0.047265 \n", "PI041-02-02 0.656341 0.047715 0.068108 0.021185 \n", "PI041-03-01 0.324968 0.088070 0.096228 0.059958 \n", "PI041-03-03 0.344988 0.090605 0.088145 0.061584 " ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "melt.head()" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SiO2FeOMgONiOMnOAl2O3CaOtotal
name
PI032-04-0138.20480015.98140044.1940000.1726650.2342560.0052290.24055299.032906
PI032-04-0238.63850015.89840043.4674000.1880240.219599-0.0073100.23462298.639236
PI041-02-0237.27010020.81590141.0150990.1047440.2936810.0165470.21493999.731003
PI041-03-0138.79579915.46930044.7509990.1801980.2121970.0313330.25991999.699745
PI041-03-0338.70190015.78250044.9207990.1643720.2148360.0372630.275049100.096718
\n", "
" ], "text/plain": [ " SiO2 FeO MgO NiO MnO Al2O3 \\\n", "name \n", "PI032-04-01 38.204800 15.981400 44.194000 0.172665 0.234256 0.005229 \n", "PI032-04-02 38.638500 15.898400 43.467400 0.188024 0.219599 -0.007310 \n", "PI041-02-02 37.270100 20.815901 41.015099 0.104744 0.293681 0.016547 \n", "PI041-03-01 38.795799 15.469300 44.750999 0.180198 0.212197 0.031333 \n", "PI041-03-03 38.701900 15.782500 44.920799 0.164372 0.214836 0.037263 \n", "\n", " CaO total \n", "name \n", "PI032-04-01 0.240552 99.032906 \n", "PI032-04-02 0.234622 98.639236 \n", "PI041-02-02 0.214939 99.731003 \n", "PI041-03-01 0.259919 99.699745 \n", "PI041-03-03 0.275049 100.096718 " ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "olivine.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Make sure that each row in *melt* and *olivine* is a matching pair of melt inclusion and olivine host. Here we use the sample names stored in the indices of both dataframes:" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Index(['PI032-04-01', 'PI032-04-02', 'PI041-02-02', 'PI041-03-01',\n", " 'PI041-03-03', 'PI041-05-04', 'PI041-05-06', 'PI041-07-01',\n", " 'PI041-07-02', 'PI052-01-02'],\n", " dtype='object', name='name') \n", "\n", " Index(['PI032-04-01', 'PI032-04-02', 'PI041-02-02', 'PI041-03-01',\n", " 'PI041-03-03', 'PI041-05-04', 'PI041-05-06', 'PI041-07-01',\n", " 'PI041-07-02', 'PI052-01-02'],\n", " dtype='object', name='name')\n" ] } ], "source": [ "print(melt.index, \"\\n\\n\", olivine.index)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can verify that the indices are the same with the *equals* method:" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "melt.index.equals(olivine.index)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Confirm the model and PEC configurations. If you want to change models or PEC settings, follow the [configuration example](https://magmapec.readthedocs.io/en/latest/notebooks/config.html)." ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "################## MagmaPandas ###################\n", "##################################################\n", "General settings__________________________________\n", "fO2 buffer.....................................QFM\n", "ΔfO2.............................................1\n", "Melt Fe3+/Fe2+.............................sun2024\n", "Kd Fe-Mg ol-melt........................toplis2005\n", "Melt thermometer....................putirka2008_15\n", "Volatile solubility model.......iaconomarziano2012\n", "Volatile species.............................mixed\n", "##################################################\n", "\n", "\n", "############ Post-entrapment crystallisation ############\n", "################### correction model ####################\n", "Settings_________________________________________________\n", "Fe2+ behaviour...................................buffered\n", "Stepsize equilibration (moles)...................0.002 \n", "Stepsize crystallisation (moles).................0.05 \n", "Decrease factor..................................5 \n", "FeO convergence (wt. %)..........................0.05 \n", "Kd convergence...................................0.005 \n", "#########################################################\n" ] } ], "source": [ "print(mpc.model_configuration)\n", "print(mpc.PEC_configuration)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we can initialise the PEC model, where we need the following data:\n", "\n", "- **inclusions**\n", "\n", " inclusion major element compositions in oxide wt. % as a MagmaPandas Melt frame.\n", "\n", "- **olivines**\n", "\n", " olivine major element compositions in oxide wt. % as a MagmaPandas Olivine frame.\n", "\n", "- **P_bar**\n", "\n", " pressures in bar at which to run the model. You can use a fixed pressure for all inclusions, e.g. *P_bar=2e3* for 2 kbar, or indicate specific pressures per inclusion. In this example we do the latter, by passing the above imported pandas Series with internal inclusion pressures\n", "\n", "- **FeO_target**\n", "\n", " Estimated initial FeO contents of melt inclusions. You can use a fixed value for all melt inclusions, e.g. FeO = 11, specific values for individual melt inclusions, stored in a pandas Series, or a predictive equation based on melt major element composition. This equation needs to be a callable function that accepts a Pandas DataFrame with melt compositions in oxide wt. % as input and return an array-like object with initial FeO contents per inclusion. In the example above we showed how to set up a function like this using MagmaPEC." ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [], "source": [ "pec_model = mpc.PEC(inclusions=melt, olivines=olivine, P_bar=pressure, FeO_target=FeO_model)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we simply run the model with the *correct* method. It runs in two stages: the first stage equilibrates Fe and Mg between melt inclusions and olivine hosts through Fe-Mg cation exchange and the second stage corrects melt inclusions back to their initial FeO contents by melting or crystallising olivine.\n", "\n", "This method returns three objects:\n", "\n", "- corrected melt compositions as a MagmaPandas Melt frame\n", "\n", "- PEC extents as a pandas DataFrame\n", " \n", "- checks to confirm the inclusions have equilibrated and reached FeOi" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "in equilibration_vector.py line 167, iterrows() now returns pandas series instead of MagmaSeries. _constructor_sliced needs to be modified to fix that" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Equilibrating ... |██████████████████████████████| 100% [10/10] in 6.7s \n", "Correcting ... |██████████████████████████████| 100% [10/10] in 19.8s \n" ] } ], "source": [ "melts_corrected, pec, checks = pec_model.correct()\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The `checks` dataframe shows that isothermal equilibration during stage [1], Kd equilibration in stage [2], and FeO convergence in stage [2] were successful for all inclusions. This is the expected result, but during [Monte Carlo error propagation](https://magmapec.readthedocs.io/en/latest/notebooks/pec_mc.html), extreme cases of random error sampling may yield melt-olivine pairs that cannot be equilibrated without requiring crystallising exceeding the mass of the inclusion inclusion or exchange of more Mg or Fe than the inclusion contains. If that is the case, no corrected compositions are calculated and the isothermal- of Kd-equilibration column is set to *False*." ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
isothermal_equilibrationKd_equilibrationFeO_converge
name
PI032-04-01TrueTrueTrue
PI032-04-02TrueTrueTrue
PI041-02-02TrueTrueTrue
PI041-03-01TrueTrueTrue
PI041-03-03TrueTrueTrue
PI041-05-04TrueTrueTrue
PI041-05-06TrueTrueTrue
PI041-07-01TrueTrueTrue
PI041-07-02TrueTrueTrue
PI052-01-02TrueTrueTrue
\n", "
" ], "text/plain": [ " isothermal_equilibration Kd_equilibration FeO_converge\n", "name \n", "PI032-04-01 True True True\n", "PI032-04-02 True True True\n", "PI041-02-02 True True True\n", "PI041-03-01 True True True\n", "PI041-03-03 True True True\n", "PI041-05-04 True True True\n", "PI041-05-06 True True True\n", "PI041-07-01 True True True\n", "PI041-07-02 True True True\n", "PI052-01-02 True True True" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "checks" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The `pec` dataframe has three columns:\n", "\n", "- equilibration_crystallisation: \n", " \n", " crystallisation extents during the equilibration stage.\n", "\n", "- PE_crystallisation:\n", "\n", " crystallisation extents during the crystallisation stage.\n", "\n", "- total_crystallisation:\n", "\n", " total amount of post-entrapment crystallisation\n", "\n", "with all data in percent and positive values indicating post-entrapment crystallisation and negative melting" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
equilibration_crystallisationPE_crystallisationtotal_crystallisation
name
PI032-04-01-2.60351612.49.796851
PI032-04-02-2.19335913.010.807312
PI041-02-02-0.4055180.4-0.005502
PI041-03-01-1.75488314.412.645239
PI041-03-03-0.86816413.012.131775
PI041-05-04-1.603516-2.8-4.403699
PI041-05-06-1.6054693.61.994775
PI041-07-01-2.98828115.212.212329
PI041-07-02-1.68164112.811.118481
PI052-01-02-3.164062-5.0-8.164673
\n", "
" ], "text/plain": [ " equilibration_crystallisation PE_crystallisation \\\n", "name \n", "PI032-04-01 -2.603516 12.4 \n", "PI032-04-02 -2.193359 13.0 \n", "PI041-02-02 -0.405518 0.4 \n", "PI041-03-01 -1.754883 14.4 \n", "PI041-03-03 -0.868164 13.0 \n", "PI041-05-04 -1.603516 -2.8 \n", "PI041-05-06 -1.605469 3.6 \n", "PI041-07-01 -2.988281 15.2 \n", "PI041-07-02 -1.681641 12.8 \n", "PI052-01-02 -3.164062 -5.0 \n", "\n", " total_crystallisation \n", "name \n", "PI032-04-01 9.796851 \n", "PI032-04-02 10.807312 \n", "PI041-02-02 -0.005502 \n", "PI041-03-01 12.645239 \n", "PI041-03-03 12.131775 \n", "PI041-05-04 -4.403699 \n", "PI041-05-06 1.994775 \n", "PI041-07-01 12.212329 \n", "PI041-07-02 11.118481 \n", "PI052-01-02 -8.164673 " ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pec" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "These crystallization extents result in the following corrected melt compositions:" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SiO2Al2O3MgOCaOFeONa2OK2OMnOTiO2P2O5Cr2O3CO2H2OFSCltotal
name
PI032-04-0148.93175813.9985987.6764139.69629710.3145433.5983780.6718190.1389182.4537980.2790440.0000000.6051281.3866460.0759250.1400430.032695100.0
PI032-04-0248.47748014.6288777.5411239.38632810.3503193.4494830.9099980.1408732.5670500.3254860.0000000.6506731.2879670.0811760.1600630.043104100.0
PI041-02-0249.15027016.9876064.8163009.20482310.1774793.7969801.0801700.1545512.8105330.5622690.0000000.4649440.6569410.0477590.0681700.021204100.0
PI041-03-0145.91720615.6647427.20840910.93697710.7046273.3275571.1383820.1136163.1354820.5488730.0000000.7932070.2916840.0790490.0863720.053817100.0
PI041-03-0345.33134715.8880187.02615611.16178910.8013483.4128751.1659530.0901813.2580020.5171830.0000000.8199930.3107060.0816010.0793860.055464100.0
PI041-05-0447.86175018.7679043.6061979.4863959.2789984.6439041.6222320.1366762.5107770.8332130.0000000.5150090.4661250.0886090.1226170.059593100.0
PI041-05-0646.42205717.0576084.6595238.96894711.4685774.0223501.4240990.1689463.6526770.6226670.0000000.6433560.5887480.1079680.1287760.063701100.0
PI041-07-0145.80037215.2434427.2795669.69133211.5555683.1328081.2732570.1488743.5349370.5552450.0000000.4680431.0215100.0751510.1635330.056363100.0
PI041-07-0245.86512315.5940016.87562110.08821711.4672933.1938681.3619960.1363683.5391930.6168850.0000000.3726820.6170540.0736730.1405830.057442100.0
PI052-01-0249.25186217.0771553.88496010.4162308.4673494.9431301.5378870.2381231.7698160.6871180.0476860.2891141.1264280.0824760.1268030.053864100.0
\n", "
" ], "text/plain": [ " SiO2 Al2O3 MgO CaO FeO Na2O \\\n", "name \n", "PI032-04-01 48.931758 13.998598 7.676413 9.696297 10.314543 3.598378 \n", "PI032-04-02 48.477480 14.628877 7.541123 9.386328 10.350319 3.449483 \n", "PI041-02-02 49.150270 16.987606 4.816300 9.204823 10.177479 3.796980 \n", "PI041-03-01 45.917206 15.664742 7.208409 10.936977 10.704627 3.327557 \n", "PI041-03-03 45.331347 15.888018 7.026156 11.161789 10.801348 3.412875 \n", "PI041-05-04 47.861750 18.767904 3.606197 9.486395 9.278998 4.643904 \n", "PI041-05-06 46.422057 17.057608 4.659523 8.968947 11.468577 4.022350 \n", "PI041-07-01 45.800372 15.243442 7.279566 9.691332 11.555568 3.132808 \n", "PI041-07-02 45.865123 15.594001 6.875621 10.088217 11.467293 3.193868 \n", "PI052-01-02 49.251862 17.077155 3.884960 10.416230 8.467349 4.943130 \n", "\n", " K2O MnO TiO2 P2O5 Cr2O3 CO2 \\\n", "name \n", "PI032-04-01 0.671819 0.138918 2.453798 0.279044 0.000000 0.605128 \n", "PI032-04-02 0.909998 0.140873 2.567050 0.325486 0.000000 0.650673 \n", "PI041-02-02 1.080170 0.154551 2.810533 0.562269 0.000000 0.464944 \n", "PI041-03-01 1.138382 0.113616 3.135482 0.548873 0.000000 0.793207 \n", "PI041-03-03 1.165953 0.090181 3.258002 0.517183 0.000000 0.819993 \n", "PI041-05-04 1.622232 0.136676 2.510777 0.833213 0.000000 0.515009 \n", "PI041-05-06 1.424099 0.168946 3.652677 0.622667 0.000000 0.643356 \n", "PI041-07-01 1.273257 0.148874 3.534937 0.555245 0.000000 0.468043 \n", "PI041-07-02 1.361996 0.136368 3.539193 0.616885 0.000000 0.372682 \n", "PI052-01-02 1.537887 0.238123 1.769816 0.687118 0.047686 0.289114 \n", "\n", " H2O F S Cl total \n", "name \n", "PI032-04-01 1.386646 0.075925 0.140043 0.032695 100.0 \n", "PI032-04-02 1.287967 0.081176 0.160063 0.043104 100.0 \n", "PI041-02-02 0.656941 0.047759 0.068170 0.021204 100.0 \n", "PI041-03-01 0.291684 0.079049 0.086372 0.053817 100.0 \n", "PI041-03-03 0.310706 0.081601 0.079386 0.055464 100.0 \n", "PI041-05-04 0.466125 0.088609 0.122617 0.059593 100.0 \n", "PI041-05-06 0.588748 0.107968 0.128776 0.063701 100.0 \n", "PI041-07-01 1.021510 0.075151 0.163533 0.056363 100.0 \n", "PI041-07-02 0.617054 0.073673 0.140583 0.057442 100.0 \n", "PI052-01-02 1.126428 0.082476 0.126803 0.053864 100.0 " ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "melts_corrected" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Results are also stored in the pec object and can be accessed via the `inclusions` and `olivine_corrected` attributes." ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SiO2Al2O3MgOCaOFeONa2OK2OMnOTiO2P2O5Cr2O3CO2H2OFSCltotal
name
PI032-04-0148.93175813.9985987.6764139.69629710.3145433.5983780.6718190.1389182.4537980.2790440.0000000.6051281.3866460.0759250.1400430.032695100.0
PI032-04-0248.47748014.6288777.5411239.38632810.3503193.4494830.9099980.1408732.5670500.3254860.0000000.6506731.2879670.0811760.1600630.043104100.0
PI041-02-0249.15027016.9876064.8163009.20482310.1774793.7969801.0801700.1545512.8105330.5622690.0000000.4649440.6569410.0477590.0681700.021204100.0
PI041-03-0145.91720615.6647427.20840910.93697710.7046273.3275571.1383820.1136163.1354820.5488730.0000000.7932070.2916840.0790490.0863720.053817100.0
PI041-03-0345.33134715.8880187.02615611.16178910.8013483.4128751.1659530.0901813.2580020.5171830.0000000.8199930.3107060.0816010.0793860.055464100.0
PI041-05-0447.86175018.7679043.6061979.4863959.2789984.6439041.6222320.1366762.5107770.8332130.0000000.5150090.4661250.0886090.1226170.059593100.0
PI041-05-0646.42205717.0576084.6595238.96894711.4685774.0223501.4240990.1689463.6526770.6226670.0000000.6433560.5887480.1079680.1287760.063701100.0
PI041-07-0145.80037215.2434427.2795669.69133211.5555683.1328081.2732570.1488743.5349370.5552450.0000000.4680431.0215100.0751510.1635330.056363100.0
PI041-07-0245.86512315.5940016.87562110.08821711.4672933.1938681.3619960.1363683.5391930.6168850.0000000.3726820.6170540.0736730.1405830.057442100.0
PI052-01-0249.25186217.0771553.88496010.4162308.4673494.9431301.5378870.2381231.7698160.6871180.0476860.2891141.1264280.0824760.1268030.053864100.0
\n", "
" ], "text/plain": [ " SiO2 Al2O3 MgO CaO FeO Na2O \\\n", "name \n", "PI032-04-01 48.931758 13.998598 7.676413 9.696297 10.314543 3.598378 \n", "PI032-04-02 48.477480 14.628877 7.541123 9.386328 10.350319 3.449483 \n", "PI041-02-02 49.150270 16.987606 4.816300 9.204823 10.177479 3.796980 \n", "PI041-03-01 45.917206 15.664742 7.208409 10.936977 10.704627 3.327557 \n", "PI041-03-03 45.331347 15.888018 7.026156 11.161789 10.801348 3.412875 \n", "PI041-05-04 47.861750 18.767904 3.606197 9.486395 9.278998 4.643904 \n", "PI041-05-06 46.422057 17.057608 4.659523 8.968947 11.468577 4.022350 \n", "PI041-07-01 45.800372 15.243442 7.279566 9.691332 11.555568 3.132808 \n", "PI041-07-02 45.865123 15.594001 6.875621 10.088217 11.467293 3.193868 \n", "PI052-01-02 49.251862 17.077155 3.884960 10.416230 8.467349 4.943130 \n", "\n", " K2O MnO TiO2 P2O5 Cr2O3 CO2 \\\n", "name \n", "PI032-04-01 0.671819 0.138918 2.453798 0.279044 0.000000 0.605128 \n", "PI032-04-02 0.909998 0.140873 2.567050 0.325486 0.000000 0.650673 \n", "PI041-02-02 1.080170 0.154551 2.810533 0.562269 0.000000 0.464944 \n", "PI041-03-01 1.138382 0.113616 3.135482 0.548873 0.000000 0.793207 \n", "PI041-03-03 1.165953 0.090181 3.258002 0.517183 0.000000 0.819993 \n", "PI041-05-04 1.622232 0.136676 2.510777 0.833213 0.000000 0.515009 \n", "PI041-05-06 1.424099 0.168946 3.652677 0.622667 0.000000 0.643356 \n", "PI041-07-01 1.273257 0.148874 3.534937 0.555245 0.000000 0.468043 \n", "PI041-07-02 1.361996 0.136368 3.539193 0.616885 0.000000 0.372682 \n", "PI052-01-02 1.537887 0.238123 1.769816 0.687118 0.047686 0.289114 \n", "\n", " H2O F S Cl total \n", "name \n", "PI032-04-01 1.386646 0.075925 0.140043 0.032695 100.0 \n", "PI032-04-02 1.287967 0.081176 0.160063 0.043104 100.0 \n", "PI041-02-02 0.656941 0.047759 0.068170 0.021204 100.0 \n", "PI041-03-01 0.291684 0.079049 0.086372 0.053817 100.0 \n", "PI041-03-03 0.310706 0.081601 0.079386 0.055464 100.0 \n", "PI041-05-04 0.466125 0.088609 0.122617 0.059593 100.0 \n", "PI041-05-06 0.588748 0.107968 0.128776 0.063701 100.0 \n", "PI041-07-01 1.021510 0.075151 0.163533 0.056363 100.0 \n", "PI041-07-02 0.617054 0.073673 0.140583 0.057442 100.0 \n", "PI052-01-02 1.126428 0.082476 0.126803 0.053864 100.0 " ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pec_model.inclusions" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
equilibration_crystallisationPE_crystallisationtotal_crystallisation
name
PI032-04-01-2.60351612.49.796851
PI032-04-02-2.19335913.010.807312
PI041-02-02-0.4055180.4-0.005502
PI041-03-01-1.75488314.412.645239
PI041-03-03-0.86816413.012.131775
PI041-05-04-1.603516-2.8-4.403699
PI041-05-06-1.6054693.61.994775
PI041-07-01-2.98828115.212.212329
PI041-07-02-1.68164112.811.118481
PI052-01-02-3.164062-5.0-8.164673
\n", "
" ], "text/plain": [ " equilibration_crystallisation PE_crystallisation \\\n", "name \n", "PI032-04-01 -2.603516 12.4 \n", "PI032-04-02 -2.193359 13.0 \n", "PI041-02-02 -0.405518 0.4 \n", "PI041-03-01 -1.754883 14.4 \n", "PI041-03-03 -0.868164 13.0 \n", "PI041-05-04 -1.603516 -2.8 \n", "PI041-05-06 -1.605469 3.6 \n", "PI041-07-01 -2.988281 15.2 \n", "PI041-07-02 -1.681641 12.8 \n", "PI052-01-02 -3.164062 -5.0 \n", "\n", " total_crystallisation \n", "name \n", "PI032-04-01 9.796851 \n", "PI032-04-02 10.807312 \n", "PI041-02-02 -0.005502 \n", "PI041-03-01 12.645239 \n", "PI041-03-03 12.131775 \n", "PI041-05-04 -4.403699 \n", "PI041-05-06 1.994775 \n", "PI041-07-01 12.212329 \n", "PI041-07-02 11.118481 \n", "PI052-01-02 -8.164673 " ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pec_model.olivine_corrected" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "pressures, temperatures, ol-melt Fe-Mg Kd (current inclusion value, not modelled), melt Fe3Fe2, and fO2 of corrected and uncorrected inclusions can be calculated with the `get_PTX` method. Pressures can be inputted as a method argument, or calculated as entrapment pressures with H2O-CO2 solubility models if concentrations for those elements are available." ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Fe3Fe2KdP_barT_KfO2_Pa
correcteduncorrectedcorrecteduncorrectedcorrecteduncorrectedcorrecteduncorrectedcorrecteduncorrected
name
PI032-04-010.1887070.1786020.3199150.264316111457.2242381395.4887942.514881e-084.262862e-09
PI032-04-020.1905490.1782940.3172630.267176111455.9280311391.6056412.426294e-083.794287e-09
PI041-02-020.2272420.2263820.2947510.300484111395.5786511396.9658544.274333e-094.455222e-09
PI041-03-010.2624100.2472930.2938570.252094111462.1900711392.9129642.883712e-083.946251e-09
PI041-03-030.2680130.2501840.2897960.266827111458.4466891396.6711312.601251e-084.416189e-09
PI041-05-040.2552780.2697580.2744880.259831111368.0944321384.5131711.850474e-093.062590e-09
PI041-05-060.2517620.2497610.2858800.268891111398.9765781385.7463634.730457e-093.179285e-09
PI041-07-010.2183060.2044380.3051010.250548111456.4485921387.7746882.461506e-083.380520e-09
PI041-07-020.2460880.2318090.2949810.259206111452.3913391394.2234492.199493e-084.104411e-09
PI052-01-020.2224660.2497660.2863410.245094111369.1399081397.2023371.911440e-094.486780e-09
\n", "
" ], "text/plain": [ " Fe3Fe2 Kd P_bar \\\n", " corrected uncorrected corrected uncorrected corrected uncorrected \n", "name \n", "PI032-04-01 0.188707 0.178602 0.319915 0.264316 1 1 \n", "PI032-04-02 0.190549 0.178294 0.317263 0.267176 1 1 \n", "PI041-02-02 0.227242 0.226382 0.294751 0.300484 1 1 \n", "PI041-03-01 0.262410 0.247293 0.293857 0.252094 1 1 \n", "PI041-03-03 0.268013 0.250184 0.289796 0.266827 1 1 \n", "PI041-05-04 0.255278 0.269758 0.274488 0.259831 1 1 \n", "PI041-05-06 0.251762 0.249761 0.285880 0.268891 1 1 \n", "PI041-07-01 0.218306 0.204438 0.305101 0.250548 1 1 \n", "PI041-07-02 0.246088 0.231809 0.294981 0.259206 1 1 \n", "PI052-01-02 0.222466 0.249766 0.286341 0.245094 1 1 \n", "\n", " T_K fO2_Pa \n", " corrected uncorrected corrected uncorrected \n", "name \n", "PI032-04-01 1457.224238 1395.488794 2.514881e-08 4.262862e-09 \n", "PI032-04-02 1455.928031 1391.605641 2.426294e-08 3.794287e-09 \n", "PI041-02-02 1395.578651 1396.965854 4.274333e-09 4.455222e-09 \n", "PI041-03-01 1462.190071 1392.912964 2.883712e-08 3.946251e-09 \n", "PI041-03-03 1458.446689 1396.671131 2.601251e-08 4.416189e-09 \n", "PI041-05-04 1368.094432 1384.513171 1.850474e-09 3.062590e-09 \n", "PI041-05-06 1398.976578 1385.746363 4.730457e-09 3.179285e-09 \n", "PI041-07-01 1456.448592 1387.774688 2.461506e-08 3.380520e-09 \n", "PI041-07-02 1452.391339 1394.223449 2.199493e-08 4.104411e-09 \n", "PI052-01-02 1369.139908 1397.202337 1.911440e-09 4.486780e-09 " ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# with fixed pressures \n", "ptx_1bar = pec_model.get_PTX(P_bar=1)\n", "ptx_1bar" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Saturation pressure... |█████████████████████████| 100% [10/10] in 2.1s \n", "Saturation pressure... |█████████████████████████| 100% [10/10] in 2.0s \n", "Saturation pressure... |█████████████████████████| 100% [10/10] in 2.1s \n", "Saturation pressure... |█████████████████████████| 100% [10/10] in 2.4s \n", "Saturation pressure... |█████████████████████████| 100% [10/10] in 3.8s \n", "Saturation pressure... |█████████████████████████| 100% [10/10] in 3.4s \n", "Saturation pressure... |█████████████████████████| 100% [10/10] in 3.3s \n", "Saturation pressure... |█████████████████████████| 100% [10/10] in 3.5s \n", "Saturation pressure... |█████████████████████████| 100% [10/10] in 3.3s \n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Fe3Fe2KdP_barT_KfO2_Pa
correcteduncorrectedcorrecteduncorrectedcorrecteduncorrectedcorrecteduncorrectedcorrecteduncorrected
name
PI032-04-010.1705810.1589490.3150370.2599095615.1055316537.2156561481.1521911421.0555491.213766e-072.773475e-08
PI032-04-020.1704260.1603290.3119000.2631026539.2073376844.7209431481.5316331418.6328661.426248e-072.730719e-08
PI041-02-020.2085050.2077410.2902510.2959174802.7046754806.0742561414.3821261415.7825241.704781e-081.775339e-08
PI041-03-010.2391780.2233520.2884490.2472556444.4922086959.9587211487.4227871420.1642381.636735e-072.907688e-08
PI041-03-030.2434320.2249270.2841780.2614366346.0147236828.6064101483.2937661423.4080301.446803e-073.113879e-08
PI041-05-040.2339760.2465230.2698300.2550774149.0810034019.2354931384.3383171400.2485816.331567e-099.896748e-09
PI041-05-060.2290900.2277190.2807030.2641495197.3094785276.6079311419.3253261406.4083892.099857e-081.471747e-08
PI041-07-010.2028290.1885070.3012250.2472344429.3315164968.6827661475.8728671407.2281338.691853e-081.428748e-08
PI041-07-020.2292210.2128820.2909880.2552243801.2169874179.2383771467.2729891410.5854316.228765e-081.373113e-08
PI052-01-020.2075450.2379720.2828460.2427812581.1491092393.3874861379.2437721406.5709274.120173e-098.973845e-09
\n", "
" ], "text/plain": [ " Fe3Fe2 Kd P_bar \\\n", " corrected uncorrected corrected uncorrected corrected \n", "name \n", "PI032-04-01 0.170581 0.158949 0.315037 0.259909 5615.105531 \n", "PI032-04-02 0.170426 0.160329 0.311900 0.263102 6539.207337 \n", "PI041-02-02 0.208505 0.207741 0.290251 0.295917 4802.704675 \n", "PI041-03-01 0.239178 0.223352 0.288449 0.247255 6444.492208 \n", "PI041-03-03 0.243432 0.224927 0.284178 0.261436 6346.014723 \n", "PI041-05-04 0.233976 0.246523 0.269830 0.255077 4149.081003 \n", "PI041-05-06 0.229090 0.227719 0.280703 0.264149 5197.309478 \n", "PI041-07-01 0.202829 0.188507 0.301225 0.247234 4429.331516 \n", "PI041-07-02 0.229221 0.212882 0.290988 0.255224 3801.216987 \n", "PI052-01-02 0.207545 0.237972 0.282846 0.242781 2581.149109 \n", "\n", " T_K fO2_Pa \n", " uncorrected corrected uncorrected corrected uncorrected \n", "name \n", "PI032-04-01 6537.215656 1481.152191 1421.055549 1.213766e-07 2.773475e-08 \n", "PI032-04-02 6844.720943 1481.531633 1418.632866 1.426248e-07 2.730719e-08 \n", "PI041-02-02 4806.074256 1414.382126 1415.782524 1.704781e-08 1.775339e-08 \n", "PI041-03-01 6959.958721 1487.422787 1420.164238 1.636735e-07 2.907688e-08 \n", "PI041-03-03 6828.606410 1483.293766 1423.408030 1.446803e-07 3.113879e-08 \n", "PI041-05-04 4019.235493 1384.338317 1400.248581 6.331567e-09 9.896748e-09 \n", "PI041-05-06 5276.607931 1419.325326 1406.408389 2.099857e-08 1.471747e-08 \n", "PI041-07-01 4968.682766 1475.872867 1407.228133 8.691853e-08 1.428748e-08 \n", "PI041-07-02 4179.238377 1467.272989 1410.585431 6.228765e-08 1.373113e-08 \n", "PI052-01-02 2393.387486 1379.243772 1406.570927 4.120173e-09 8.973845e-09 " ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# with entrapment pressures calculated from inclusions CO2-H2O\n", "ptx = pec_model.get_PTX()\n", "ptx" ] } ], "metadata": { "kernelspec": { "display_name": "py310", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.10.0" } }, "nbformat": 4, "nbformat_minor": 2 }