Ejemplo n.º 1
0
import polarizability
import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd

sns.set_palette("bright")
sns.set_style("whitegrid")
sns.set(font_scale=1.2)

expt = pd.read_csv("./tables/data_with_metadata.csv")
expt["temperature"] = expt["Temperature, K"]

pred = pd.read_csv("./tables/predictions.csv")
pred["polcorr"] = pd.Series(
    dict((cas,
          polarizability.dielectric_correction_from_formula(
              formula, density * u.grams / u.milliliter))
         for cas, (formula,
                   density) in pred[["formula", "density"]].iterrows()))
pred["corrected_dielectric"] = pred["polcorr"] + pred["dielectric"]

expt = expt.set_index(
    ["cas", "temperature"]
)  # Can't do this because of duplicates  # Should be fixed now, probably due to the CAS / name duplication issue found by Julie.
pred = pred.set_index(["cas", "temperature"])

pred["name"] = expt["components"]
pred["expt_density"] = expt["Mass density, kg/m3"]
pred["expt_dielectric"] = expt["Relative permittivity at zero frequency"]
pred["expt_density_std"] = expt["Mass density, kg/m3_uncertainty_bestguess"]
pred["expt_dielectric_std"] = expt[
    "Relative permittivity at zero frequency_uncertainty_bestguess"]
Ejemplo n.º 2
0
import polarizability
import simtk.unit as u
import numpy as np

alpha = (0.32 + 0.17 * 2 + 0.57) * u.angstrom**3
alpha1 = polarizability.polarizability_from_formula("H2O")
alpha, alpha1, alpha - alpha1

delta = 4 * pi * 55.4 * u.molar * alpha
delta = delta * u.AVOGADRO_CONSTANT_NA

r = polarizability.dielectric_correction_from_formula(
    "H2O", 1000. * (u.gram / u.milliliter))
r, delta, r - delta
Ejemplo n.º 3
0
def runner(expt_csv, pred_csv, dens_pdf, diff_pdf, diel_pdf, nocorr_pdf):
    FIGURE_SIZE = (6.5, 6.5)
    DPI = 1600

    expt = pd.read_csv(expt_csv)
    expt["temperature"] = expt["Temperature, K"]

    pred = pd.read_csv(pred_csv)
    pred["polcorr"] = pd.Series(
        dict((cas,
              polarizability.dielectric_correction_from_formula(
                  formula, density * u.grams / u.milliliter))
             for cas, (formula,
                       density) in pred[["formula", "density"]].iterrows()))
    pred["corrected_dielectric"] = pred["polcorr"] + pred["dielectric"]

    expt = expt.set_index(
        ["cas", "temperature"]
    )  # Can't do this because of duplicates  # Should be fixed now, probably due to the CAS / name duplication issue found by Julie.
    pred = pred.set_index(["cas", "temperature"])

    pred["expt_density"] = expt["Mass density, kg/m3"]
    pred["expt_dielectric"] = expt["Relative permittivity at zero frequency"]
    pred["expt_density_std"] = expt[
        "Mass density, kg/m3_uncertainty_bestguess"]
    pred["expt_dielectric_std"] = expt[
        "Relative permittivity at zero frequency_uncertainty_bestguess"]

    plt.figure(figsize=FIGURE_SIZE, dpi=DPI)

    for (formula, grp) in pred.groupby("formula"):
        x, y = grp["density"], grp["expt_density"]
        xerr = grp["density_sigma"]
        yerr = grp["expt_density_std"].replace(np.nan, 0.0)
        x = x / 1000.  # Convert kg / m3 to g / mL
        y = y / 1000.  # Convert kg / m3 to g / mL
        xerr = xerr / 1000.  # Convert kg / m3 to g / mL
        yerr = yerr / 1000.  # Convert kg / m3 to g / mL
        plt.errorbar(x, y, xerr=xerr, yerr=yerr, fmt='.', label=formula)

    plt.plot([.600, 1.400], [.600, 1.400], 'k', linewidth=1)
    plt.xlim((.600, 1.400))
    plt.ylim((.600, 1.400))
    plt.xlabel("Predicted (%s)" % FF_NAME)
    plt.ylabel("Experiment (ThermoML)")
    plt.gca().set_aspect('equal', adjustable='box')
    plt.draw()

    x, y = pred["density"], pred["expt_density"]
    plt.title(r"Density [g cm$^{-3}$]")
    plt.savefig(dens_pdf, bbox_inches="tight")

    plt.figure(figsize=FIGURE_SIZE, dpi=DPI)
    for (formula, grp) in pred.groupby("formula"):
        x, y = grp["density"], grp["expt_density"]
        xerr = grp["density_sigma"]
        yerr = grp["expt_density_std"].replace(np.nan, 0.0)
        x = x / 1000.  # Convert kg / m3 to g / mL
        y = y / 1000.  # Convert kg / m3 to g / mL
        xerr = xerr / 1000.  # Convert kg / m3 to g / mL
        yerr = yerr / 1000.  # Convert kg / m3 to g / mL
        plt.errorbar(x - y, y, xerr=xerr, yerr=yerr, fmt='.', label=formula)

    plt.xlim((-0.1, 0.1))
    plt.ylim((.600, 1.400))
    plt.xlabel("Predicted - Experiment")
    plt.ylabel("Experiment (ThermoML)")
    plt.gca().set_aspect('auto', adjustable='box')
    plt.draw()

    x, y = pred["density"], pred["expt_density"]
    plt.title(r"Density [g cm$^{-3}$]")

    plt.savefig(diff_pdf, bbox_inches="tight")

    yerr = pred["expt_dielectric_std"].replace(np.nan, 0.0)
    xerr = pred["dielectric_sigma"].replace(np.nan, 0.0)

    plt.figure(figsize=FIGURE_SIZE, dpi=DPI)

    plt.xlabel("Predicted (%s)" % FF_NAME)
    plt.ylabel("Experiment (ThermoML)")
    plt.title("Inverse Static Dielectric Constant")

    plt.plot([0.0, 1], [0.0, 1], 'k')  # Guide

    x, y = pred["dielectric"], pred["expt_dielectric"]
    plt.errorbar(x**-1,
                 y**-1,
                 xerr=xerr * x**-2,
                 yerr=yerr * y**-2,
                 fmt='.',
                 label=FF_NAME)  # Transform xerr and yerr for 1 / epsilon plot

    plt.xlim((0.0, 1))
    plt.ylim((0.0, 1))
    plt.legend(loc=0)
    plt.gca().set_aspect('equal', adjustable='box')
    plt.draw()
    plt.savefig(nocorr_pdf, bbox_inches="tight")

    x, y = pred["corrected_dielectric"], pred["expt_dielectric"]
    plt.errorbar(
        x**-1,
        y**-1,
        xerr=xerr * x**-2,
        yerr=yerr * y**-2,
        fmt='.',
        label="Corrected")  # Transform xerr and yerr for 1 / epsilon plot

    plt.xlim((0.0, 1.02))
    plt.ylim((0.0, 1.02))
    plt.legend(loc=0)
    plt.gca().set_aspect('equal', adjustable='box')
    plt.draw()
    plt.savefig(diel_pdf, bbox_inches="tight")
import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
import simtk.unit as u
import polarizability

sns.set_palette("bright")
sns.set_style("whitegrid")

metadata = pd.read_table("./virtualchemistry.tab").set_index("cas")

data = pd.read_csv("./vchem.csv").set_index("cas")
data["density"]["646-06-0"] = 1060.  # http://en.wikipedia.org/wiki/Dioxolane

data["formula"] = metadata.formula
data["polcorr"] = pd.Series(dict((cas, polarizability.dielectric_correction_from_formula(formula, density * u.grams / u.milliliter)) for cas, (formula, density) in data[["formula", "density"]].iterrows()))

data["gaff_corrected"] = data.gaff + data.polcorr
data["opls_corrected"] = data.opls + data.polcorr


figure()
x, y = data["expt"], data["gaff"]
ols_model = sm.OLS(y, x)
ols_results = ols_model.fit()
r2 = ols_results.rsquared
plot(x, y, 'o', label="GAFF (R^2 = %.3f)" % r2)

x, y = data["expt"], data["gaff_corrected"]
ols_model = sm.OLS(y, x)
ols_results = ols_model.fit()
import polarizability
import simtk.unit as u
import numpy as np

alpha = (0.32 + 0.17 * 2 + 0.57) * u.angstrom ** 3
alpha1 = polarizability.polarizability_from_formula("H2O")
alpha, alpha1, alpha - alpha1

delta = 4 * pi * 55.4 * u.molar * alpha
delta = delta * u.AVOGADRO_CONSTANT_NA

r = polarizability.dielectric_correction_from_formula("H2O", 1000. * (u.gram / u.milliliter))
r, delta, r - delta