Source code for Scripts.DatabankLib.plottings

"""
@DRAFT
Network communication. Downloading files. Checking links etc.
"""

import json
import os

import matplotlib.pyplot as plt
import numpy as np

from DatabankLib import NMLDB_EXP_PATH, NMLDB_SIMU_PATH


def plotFormFactor(  # noqa: N802
    exp_form_factor,
    k,
    legend,
    plot_color,
):
    """:meta private:"""
    x_vals = []
    y_vals = []
    for i in exp_form_factor:
        x_vals.append(i[0])
        y_vals.append(k * i[1])
    plt.plot(x_vals, y_vals, label=legend, color=plot_color, linewidth=4.0)
    plt.xlabel(r"$q_{z} [Å^{-1}]$", size=20)
    plt.ylabel(r"$|F(q_{z})|$", size=20)
    plt.xticks(size=20)
    plt.yticks(size=20)
    plt.xlim([0, 0.69])
    plt.ylim([-10, 250])
    plt.legend(loc="upper right")
    plt.savefig("FormFactor.pdf")


def plotOrderParameters(OPsim, OPexp):  # noqa
    """:meta private:"""
    xValuesHG = []  # noqa: N806
    xValuesSN1 = []  # noqa: N806
    xValuesSN2 = []  # noqa: N806

    yValuesHGsim = []  # noqa: N806
    yValuesSN1sim = []  # noqa: N806
    yValuesSN2sim = []  # noqa: N806
    yValuesHGsimERR = []  # noqa: N806
    yValuesSN1simERR = []  # noqa: N806
    yValuesSN2simERR = []  # noqa: N806
    yValuesHGexp = []  # noqa: N806
    yValuesSN1exp = []  # noqa: N806
    yValuesSN2exp = []  # noqa: N806
    xValuesHGexp = []  # noqa: N806
    xValuesSN1exp = []  # noqa: N806
    xValuesSN2exp = []  # noqa: N806

    sn1carbons = {
        "M_G1C3_M M_G1C3H1_M": 2,
        "M_G1C3_M M_G1C3H2_M": 2,
        "M_G1C4_M M_G1C4H1_M": 3,
        "M_G1C4_M M_G1C4H2_M": 3,
        "M_G1C5_M M_G1C5H1_M": 4,
        "M_G1C5_M M_G1C5H2_M": 4,
        "M_G1C6_M M_G1C6H1_M": 5,
        "M_G1C6_M M_G1C6H2_M": 5,
        "M_G1C7_M M_G1C7H1_M": 6,
        "M_G1C7_M M_G1C7H2_M": 6,
        "M_G1C8_M M_G1C8H1_M": 7,
        "M_G1C8_M M_G1C8H2_M": 7,
        "M_G1C9_M M_G1C9H1_M": 8,
        "M_G1C9_M M_G1C9H2_M": 8,
        "M_G1C10_M M_G1C10H1_M": 9,
        "M_G1C10_M M_G1C10H2_M": 9,
        "M_G1C11_M M_G1C11H1_M": 10,
        "M_G1C11_M M_G1C11H2_M": 10,
        "M_G1C12_M M_G1C12H1_M": 11,
        "M_G1C12_M M_G1C12H2_M": 11,
        "M_G1C13_M M_G1C13H1_M": 12,
        "M_G1C13_M M_G1C13H2_M": 12,
        "M_G1C14_M M_G1C14H1_M": 13,
        "M_G1C14_M M_G1C14H2_M": 13,
        "M_G1C15_M M_G1C15H1_M": 14,
        "M_G1C15_M M_G1C15H2_M": 14,
        "M_G1C16_M M_G1C16H1_M": 15,
        "M_G1C16_M M_G1C16H2_M": 15,
        "M_G1C17_M M_G1C17H1_M": 16,
        "M_G1C17_M M_G1C17H2_M": 16,
        "M_G1C17_M M_G1C17H3_M": 16,
    }

    sn2carbons = {
        "M_G2C3_M M_G2C3H1_M": 2,
        "M_G2C3_M M_G2C3H2_M": 2,
        "M_G2C4_M M_G2C4H1_M": 3,
        "M_G2C4_M M_G2C4H2_M": 3,
        "M_G2C5_M M_G2C5H1_M": 4,
        "M_G2C5_M M_G2C5H2_M": 4,
        "M_G2C6_M M_G2C6H1_M": 5,
        "M_G2C6_M M_G2C6H2_M": 5,
        "M_G2C7_M M_G2C7H1_M": 6,
        "M_G2C7_M M_G2C7H2_M": 6,
        "M_G2C8_M M_G2C8H1_M": 7,
        "M_G2C8_M M_G2C8H2_M": 7,
        "M_G2C9_M M_G2C9H1_M": 8,
        "M_G2C9_M M_G2C9H2_M": 8,
        "M_G2C10_M M_G2C10H1_M": 9,
        "M_G2C10_M M_G2C10H2_M": 9,
        "M_G2C11_M M_G2C11H1_M": 10,
        "M_G2C11_M M_G2C11H2_M": 10,
        "M_G2C12_M M_G2C12H1_M": 11,
        "M_G2C12_M M_G2C12H2_M": 11,
        "M_G2C13_M M_G2C13H1_M": 12,
        "M_G2C13_M M_G2C13H2_M": 12,
        "M_G2C14_M M_G2C14H1_M": 13,
        "M_G2C14_M M_G2C14H2_M": 13,
        "M_G2C15_M M_G2C15H1_M": 14,
        "M_G2C15_M M_G2C15H2_M": 14,
        "M_G2C16_M M_G2C16H1_M": 15,
        "M_G2C16_M M_G2C16H2_M": 15,
        "M_G2C17_M M_G2C17H1_M": 16,
        "M_G2C17_M M_G2C17H2_M": 16,
        "M_G2C17_M M_G2C17H3_M": 16,
        "M_G2C18_M M_G2C18H1_M": 17,
        "M_G2C18_M M_G2C18H2_M": 17,
        "M_G2C18_M M_G2C18H3_M": 17,
        "M_G2C19_M M_G2C19H1_M": 18,
        "M_G2C19_M M_G2C19H2_M": 18,
        "M_G2C19_M M_G2C19H3_M": 18,
    }

    HGcarbons = {  # noqa: N806
        "M_G3N6C1_M M_G3N6C1H1_M": 1,
        "M_G3N6C1_M M_G3N6C1H2_M": 1,
        "M_G3N6C1_M M_G3N6C1H3_M": 1,
        "M_G3N6C2_M M_G3N6C2H1_M": 1,
        "M_G3N6C2_M M_G3N6C2H2_M": 1,
        "M_G3N6C2_M M_G3N6C2H3_M": 1,
        "M_G3N6C3_M M_G3N6C3H1_M": 1,
        "M_G3N6C3_M M_G3N6C3H2_M": 1,
        "M_G3N6C3_M M_G3N6C3H3_M": 1,
        "M_G3C5_M M_G3C5H1_M": 2,
        "M_G3C5_M M_G3C5H2_M": 2,
        "M_G3C4_M M_G3C4H1_M": 3,
        "M_G3C4_M M_G3C4H2_M": 3,
        "M_G3_M M_G3H1_M": 4,
        "M_G3_M M_G3H2_M": 4,
        "M_G2_M M_G2H1_M": 5,
        "M_G1_M M_G1H1_M": 6,
        "M_G1_M M_G1H2_M": 6,
    }

    for key in OPsim:
        if "M_G1C" in key:
            try:
                xValuesSN1.append(sn1carbons[key])
                yValuesSN1sim.append(float(OPsim[key][0][0]))
                yValuesSN1simERR.append(float(OPsim[key][0][2]))
                yValuesSN1exp.append(OPexp[key][0][0])
                xValuesSN1exp.append(sn1carbons[key])
            except Exception:
                pass
        elif "M_G2C" in key:
            try:
                xValuesSN2.append(sn2carbons[key])
                yValuesSN2sim.append(float(OPsim[key][0][0]))
                yValuesSN2simERR.append(float(OPsim[key][0][2]))
                yValuesSN2exp.append(OPexp[key][0][0])
                xValuesSN2exp.append(sn2carbons[key])
            except Exception:
                pass
        elif "M_G3" in key or "M_G2_M" in key or "M_G1_M" in key:
            try:
                xValuesHG.append(HGcarbons[key])
                yValuesHGsim.append(float(OPsim[key][0][0]))
                yValuesHGsimERR.append(float(OPsim[key][0][2]))
                yValuesHGexp.append(OPexp[key][0][0])
                xValuesHGexp.append(HGcarbons[key])
            except Exception:
                pass
    plt.rc("font", size=15)
    plt.errorbar(
        xValuesHGexp,
        yValuesHGexp,
        yerr=0.02,
        fmt=".",
        color="black",
        markersize=25,
    )
    plt.errorbar(
        xValuesHG,
        yValuesHGsim,
        yerr=yValuesHGsimERR,
        fmt=".",
        color="red",
        markersize=20,
    )
    my_xticks = ["\u03b3", "\u03b2", "\u03b1", "$g_{1}$", "$g_{2}$", "$g_{3}$"]
    plt.xticks([1, 2, 3, 4, 5, 6], my_xticks, size=20)
    plt.yticks(size=20)
    plt.ylabel(r"$S_{CH}$", size=25)
    plt.savefig("HG.pdf")
    plt.show()

    plt.text(2, -0.04, "sn-1", fontsize=25)
    plt.xticks(np.arange(min(xValuesSN1), max(xValuesSN1) + 1, 2.0))
    plt.plot(xValuesSN1, yValuesSN1sim, color="red")
    plt.plot(xValuesSN1exp, yValuesSN1exp, color="black")
    plt.errorbar(
        xValuesSN1,
        yValuesSN1sim,
        yerr=yValuesSN1simERR,
        fmt=".",
        color="red",
        markersize=25,
    )
    plt.errorbar(
        xValuesSN1exp,
        yValuesSN1exp,
        yerr=0.02,
        fmt=".",
        color="black",
        markersize=20,
    )
    plt.ylabel(r"$S_{CH}$", size=25)
    plt.xticks(size=20)
    plt.yticks(size=20)
    plt.savefig("sn-1.pdf")
    plt.show()

    plt.text(2, -0.04, "sn-2", fontsize=25)
    plt.xticks(np.arange(min(xValuesSN2), max(xValuesSN2) + 1, 2.0))
    plt.plot(xValuesSN2, yValuesSN2sim, color="red")
    plt.plot(xValuesSN2exp, yValuesSN2exp, color="black")
    plt.errorbar(
        xValuesSN2,
        yValuesSN2sim,
        yValuesSN2simERR,
        fmt=".",
        color="red",
        markersize=25,
    )
    plt.errorbar(
        xValuesSN2exp,
        yValuesSN2exp,
        yerr=0.02,
        fmt=".",
        color="black",
        markersize=20,
    )
    plt.xlabel("Carbon", size=25)
    plt.ylabel(r"$S_{CH}$", size=25)
    plt.xticks(size=20)
    plt.yticks(size=20)
    plt.savefig("sn-2.pdf")
    plt.show()


[docs] def plotSimulation(system, lipid: str): # noqa: N802 """ Creates plots of form factor and C-H bond order parameters for the selected ``lipid`` from a simulation given by system. :param system: NMRlipids databank ID number of the simulation :param lipid: universal molecul name of the lipid """ path = os.path.join(NMLDB_SIMU_PATH, system["path"]) ff_path_sim = os.path.join(path, "FormFactor.json") op_path_sim = os.path.join(path, lipid + "OrderParameters.json") ffqual_fpath = os.path.join(path, "FormFactorQuality.json") print("DOI: ", system["DOI"]) try: with open(ffqual_fpath) as json_file: ff_quality = json.load(json_file) print("Form factor quality: ", ff_quality[0]) ffdir = os.path.join(NMLDB_EXP_PATH, "FormFactors", system["EXPERIMENT"]["FORMFACTOR"]) for subdir, dirs, files in os.walk(ffdir): for filename in files: if filename.endswith("_FormFactor.json"): ff_path_exp = subdir + "/" + filename with open(ff_path_exp) as json_file: ff_exp = json.load(json_file) except Exception: print("Force field quality not found") with open(op_path_sim) as json_file: op_sim = json.load(json_file) op_exp = {} for exp_op_folder in list(system["EXPERIMENT"]["ORDERPARAMETER"][lipid].values()): op_path_exp = os.path.join(NMLDB_EXP_PATH, "OrderParameters", exp_op_folder, lipid + "_Order_Parameters.json") with open(op_path_exp) as json_file: op_exp.update(json.load(json_file)) try: with open(ff_path_sim) as json_file: ff_sim = json.load(json_file) plotFormFactor(ff_sim, 1, "Simulation", "red") plotFormFactor(ff_exp, ff_quality[1], "Experiment", "black") plt.show() except Exception: plt.show() print("Form factor plotting failed") plotOrderParameters(op_sim, op_exp)