Source code for fairmd.idp.jpyroutines

"""
Databank routines designed for calling from inside jupyter notebooks.
"""

import pandas as pd
import numpy as np
from IPython.display import display
from IPython.display import Markdown


[docs] def showTable(sorted_qualities, quality): # noqa: N802 (API) """ Shows a table of simulation qualities against experimental data. :param sorted_qualities: list of dictionaries to be shown, available in folder ``Data/Ranking/`` :param quality: should be either ``TotalQuality`` or universal lipid name. First one shows the system total quality. Latter shows the individual lipid quality. """ rounding = ['headgroup', 'sn-1', 'sn-2', 'total', 'tails', 'FFQuality'] quality_table = [] pd.set_option('display.max_rows', None) for i in sorted_qualities: stored_to_table = [] for k, v in i[quality].items(): if k in rounding: if v and v != float("inf") and not np.isnan(v): i[quality][k] = round(float(v), 2) stored_to_table = i[quality] try: stored_to_table['Forcefield'] = i['system']['FF'] except (KeyError, TypeError): display(Markdown('**FAILURE:** no FF defined for the system')) display(i['system']['path']) continue molecules = '' mol_numbers = '' for lipid in i['system']['COMPOSITION']: molecules = molecules + lipid + ':' mol_numbers = ( mol_numbers + str(np.sum(i['system']['COMPOSITION'][lipid]['COUNT'])) + ':') stored_to_table['Molecules'] = molecules[:-1] stored_to_table['Number of molecules'] = ' (' + mol_numbers[:-1] + ')' stored_to_table['Temperature'] = i['system']['TEMPERATURE'] stored_to_table['ID'] = i['system']['ID'] quality_table.append(stored_to_table) display(pd.json_normalize(quality_table))