Source code for webinterface.pages.base_pages.tab4_display_results_submitted

"""Display similar to Tab1 in the quant benchmarking modules, all of the data
next to the submitted data."""

import uuid
from typing import Callable

import streamlit as st

from proteobench.plotting.plot_quant import PlotDataPoint

from .filter import filter_data_using_slider


[docs] def initialize_submitted_slider(slider_id_submitted_uuid, default_val_slider) -> None: """ Initialize the slider for the submitted data. """ id_key_in_state = slider_id_submitted_uuid if id_key_in_state not in st.session_state.keys(): st.session_state[id_key_in_state] = uuid.uuid4() if st.session_state[id_key_in_state] not in st.session_state.keys(): value_key_in_state = st.session_state[id_key_in_state] # the uuid4 as key st.session_state[value_key_in_state] = default_val_slider
[docs] def generate_submitted_slider(variables_quant) -> None: """ Create a slider input. """ if variables_quant.slider_id_submitted_uuid not in st.session_state: st.session_state[variables_quant.slider_id_submitted_uuid] = uuid.uuid4() slider_key = st.session_state[variables_quant.slider_id_submitted_uuid] st.markdown(open(variables_quant.description_slider_md, "r", encoding="utf-8").read()) st.select_slider( label="Minimal precursor quantifications (# samples)", options=[1, 2, 3, 4, 5, 6], value=st.session_state.get(slider_key, variables_quant.default_val_slider), key=slider_key, )
[docs] def generate_submitted_selectbox(variables_quant) -> None: """ Create the selectbox for the Streamlit UI. """ if variables_quant.selectbox_id_submitted_uuid not in st.session_state.keys(): st.session_state[variables_quant.selectbox_id_submitted_uuid] = uuid.uuid4() try: st.selectbox( "Select label to plot", ["None", "precursor_mass_tolerance", "fragment_mass_tolerance"], key=st.session_state[variables_quant.selectbox_id_submitted_uuid], ) except Exception as e: st.error(f"Unable to create the selectbox: {e}", icon="🚨")
[docs] def display_submitted_results(variables_quant, ionmodule) -> None: """ Display the results section of the page for submitted data. """ # handled_submission = self.process_submission_form() # if handled_submission == False: # return key_all_datapoints_submitted = variables_quant.all_datapoints_submitted initialize_submitted_data_points(key_all_datapoints_submitted, ionmodule.obtain_all_data_points) data_points_filtered = filter_data_using_slider( slider_id_uuid=variables_quant.slider_id_submitted_uuid, all_datapoints=key_all_datapoints_submitted, filter_data_point=ionmodule.filter_data_point, ) metric = st.radio( "Select metric to plot", options=["Median", "Mean"], help="Toggle between median and mean absolute difference metrics.", key="placeholder2", # TODO: add to variables ) if len(data_points_filtered) == 0: st.error("No datapoints available for plotting", icon="🚨") return try: fig_metric = PlotDataPoint.plot_metric( data_points_filtered, metric=metric, label=st.session_state[st.session_state[variables_quant.selectbox_id_submitted_uuid]], ) try: st.plotly_chart(fig_metric, use_container_width=True) except Exception: st.error("No (new) datapoints available for plotting", icon="🚨") return except Exception as e: st.error(f"Unable to plot the datapoints: {e}", icon="🚨") st.session_state[variables_quant.table_id_uuid] = uuid.uuid4() st.data_editor( st.session_state[variables_quant.all_datapoints_submitted], key=st.session_state[variables_quant.table_id_uuid], on_change=handle_submitted_table_edits, args=(variables_quant,), ) st.title("Public submission") st.markdown( "If you want to make this point β€” and the associated data β€”" "publicly available, please go to β€œPublic Submission" )
######################################################################################## # helper functions
[docs] def initialize_submitted_data_points( all_datapoints_submitted: str, obtain_all_data_points: Callable, ) -> None: """ Initialize the all_datapoints variable in the session state. """ key_in_state = all_datapoints_submitted if key_in_state not in st.session_state.keys(): st.session_state[key_in_state] = None # ? So all_datapoints argument is always None? st.session_state[key_in_state] = obtain_all_data_points( all_datapoints=st.session_state[key_in_state], )
[docs] def handle_submitted_table_edits(variables_quant) -> None: """Callback function for handling edits made to the data table in the UI.""" edits = st.session_state[st.session_state[variables_quant.table_id_uuid]]["edited_rows"].items() for k, v in edits: try: # ToDo: check if this can be done more clearly # ? gets row k from the all_datapoints_submitted DataFrame # ? and ... modifies the first column specified in the keys of dictionary v # df = st.session_state[variables_quant.all_datapoints_submitted] # df[list(v.keys())[0]].iloc[k] = list(v.values())[0] st.session_state[variables_quant.all_datapoints_submitted][list(v.keys())[0]].iloc[k] = list(v.values())[0] except TypeError: return st.session_state[variables_quant.highlight_list_submitted] = list( st.session_state[variables_quant.all_datapoints_submitted]["Highlight"] ) st.session_state[variables_quant.placeholder_table] = st.session_state[variables_quant.all_datapoints_submitted] if len(st.session_state[variables_quant.all_datapoints]) == 0: st.error("No datapoints available for plotting", icon="🚨") try: fig_metric = PlotDataPoint.plot_metric( st.session_state[variables_quant.all_datapoints], label=st.session_state[st.session_state[variables_quant.selectbox_id_uuid]], ) except Exception as e: st.error(f"Unable to plot the datapoints: {e}", icon="🚨") st.session_state[variables_quant.fig_metric] = fig_metric