-
Notifications
You must be signed in to change notification settings - Fork 0
Add FLASHIda Support #8
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: develop
Are you sure you want to change the base?
Changes from all commits
24fab38
ba12395
ea2c197
d7f38e8
ab83f5f
c9d4b34
117c883
620ec30
c8e8725
fb0023f
6c505a0
ec82253
4aa74b2
c455a48
3395328
fabecf5
95d89cd
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| @@ -0,0 +1,126 @@ | ||||||||||||||||||||||||||
| import streamlit as st | ||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||
| from pathlib import Path | ||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||
| from src.common.common import page_setup, save_params | ||||||||||||||||||||||||||
| from src.workflow.FileManager import FileManager | ||||||||||||||||||||||||||
| from src.render.render import render_grid | ||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||
| DEFAULT_LAYOUT = [['ms1_deconv_heat_map']] | ||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||
| def select_experiment(): | ||||||||||||||||||||||||||
| st.session_state.selected_experiment0_ida = st.session_state.selected_experiment_dropdown_ida | ||||||||||||||||||||||||||
| print(st.session_state.selected_experiment0_ida) | ||||||||||||||||||||||||||
| if len(layout) > 1: | ||||||||||||||||||||||||||
| for exp_index in range(1, len(layout)): | ||||||||||||||||||||||||||
| if st.session_state[f'selected_experiment_dropdown_{exp_index}_ida'] is None: | ||||||||||||||||||||||||||
| continue | ||||||||||||||||||||||||||
| st.session_state[f"selected_experiment{exp_index}_ida"] = st.session_state[f'selected_experiment_dropdown_{exp_index}_ida'] | ||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||
| def validate_selected_index(file_manager, selected_experiment): | ||||||||||||||||||||||||||
| results = file_manager.get_results_list(['simulation_dfs']) | ||||||||||||||||||||||||||
| if selected_experiment in st.session_state: | ||||||||||||||||||||||||||
| if st.session_state[selected_experiment] in results: | ||||||||||||||||||||||||||
| return name_to_index[st.session_state[selected_experiment]] | ||||||||||||||||||||||||||
| else: | ||||||||||||||||||||||||||
| del st.session_state[selected_experiment] | ||||||||||||||||||||||||||
| return None | ||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||
| # page initialization | ||||||||||||||||||||||||||
| params = page_setup() | ||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||
| # Get available results | ||||||||||||||||||||||||||
| file_manager = FileManager( | ||||||||||||||||||||||||||
| st.session_state["workspace"], | ||||||||||||||||||||||||||
| Path(st.session_state['workspace'], 'flashidasimulator', 'cache') | ||||||||||||||||||||||||||
| ) | ||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||
| results = file_manager.get_results_list(['simulation_dfs']) | ||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||
| if file_manager.result_exists('layout', 'layout'): | ||||||||||||||||||||||||||
| layout = file_manager.get_results('layout', 'layout')['layout'] | ||||||||||||||||||||||||||
| side_by_side = layout['side_by_side'] | ||||||||||||||||||||||||||
| layout = layout['layout'] | ||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||
| else: | ||||||||||||||||||||||||||
| layout = [DEFAULT_LAYOUT] | ||||||||||||||||||||||||||
| side_by_side = False | ||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||
| ### if no input file is given, show blank page | ||||||||||||||||||||||||||
| if len(results) == 0: | ||||||||||||||||||||||||||
| st.error('No results to show yet. Please run a workflow first!') | ||||||||||||||||||||||||||
| st.stop() | ||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||
| # Map names to index | ||||||||||||||||||||||||||
| name_to_index = {n : i for i, n in enumerate(results)} | ||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||
| if len(layout) == 2 and side_by_side: | ||||||||||||||||||||||||||
| c1, c2 = st.columns(2) | ||||||||||||||||||||||||||
| with c1: | ||||||||||||||||||||||||||
| st.selectbox( | ||||||||||||||||||||||||||
| "choose experiment", results, | ||||||||||||||||||||||||||
| key="selected_experiment_dropdown_ida", | ||||||||||||||||||||||||||
| index=validate_selected_index(file_manager, 'selected_experiment0_ida'), | ||||||||||||||||||||||||||
| on_change=select_experiment | ||||||||||||||||||||||||||
| ) | ||||||||||||||||||||||||||
| if 'selected_experiment0_ida' in st.session_state: | ||||||||||||||||||||||||||
|
Comment on lines
+60
to
+66
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Selectbox index may be None; Streamlit expects an int validate_selected_index can return None, which makes selectbox(index=...) raise. Default the index to 0 when None. - st.selectbox(
+ st.selectbox(
"choose experiment", results,
key="selected_experiment_dropdown_ida",
- index=validate_selected_index(file_manager, 'selected_experiment0_ida'),
+ index=validate_selected_index(file_manager, 'selected_experiment0_ida') or 0,
on_change=select_experiment
)
...
- st.selectbox(
+ st.selectbox(
"choose experiment", results,
- key=f'selected_experiment_dropdown_1_ida',
- index=validate_selected_index(file_manager, 'selected_experiment1_ida'),
+ key='selected_experiment_dropdown_1_ida',
+ index=validate_selected_index(file_manager, 'selected_experiment1_ida') or 0,
on_change=select_experiment
)
...
- st.selectbox(
+ st.selectbox(
"choose experiment", results,
key="selected_experiment_dropdown_ida",
- index=validate_selected_index(file_manager, 'selected_experiment0_ida'),
+ index=validate_selected_index(file_manager, 'selected_experiment0_ida') or 0,
on_change=select_experiment
)
...
- st.selectbox(
+ st.selectbox(
"choose experiment", results,
key=f'selected_experiment_dropdown_{exp_index}_ida',
- index=validate_selected_index(file_manager, f'selected_experiment{exp_index}_ida'),
+ index=validate_selected_index(file_manager, f'selected_experiment{exp_index}_ida') or 0,
on_change=select_experiment
)Also applies to: 72-78, 88-93, 111-116 🤖 Prompt for AI Agents |
||||||||||||||||||||||||||
| render_grid( | ||||||||||||||||||||||||||
| st.session_state.selected_experiment0_ida, layout[0], file_manager, | ||||||||||||||||||||||||||
| 'flashidasimulator', "selected_experiment0_ida", 'flash_viewer_grid_0_ida' | ||||||||||||||||||||||||||
| ) | ||||||||||||||||||||||||||
| with c2: | ||||||||||||||||||||||||||
| st.selectbox( | ||||||||||||||||||||||||||
| "choose experiment", results, | ||||||||||||||||||||||||||
| key=f'selected_experiment_dropdown_1_ida', | ||||||||||||||||||||||||||
| index=validate_selected_index(file_manager, 'selected_experiment1_ida'), | ||||||||||||||||||||||||||
| on_change=select_experiment | ||||||||||||||||||||||||||
| ) | ||||||||||||||||||||||||||
| if f"selected_experiment1_ida" in st.session_state: | ||||||||||||||||||||||||||
| with st.spinner('Loading component...'): | ||||||||||||||||||||||||||
| render_grid( | ||||||||||||||||||||||||||
| st.session_state["selected_experiment1_ida"], layout[1], | ||||||||||||||||||||||||||
| file_manager, 'flashidasimulator', 'selected_experiment1_ida', | ||||||||||||||||||||||||||
| 'flash_viewer_grid_1_ida' | ||||||||||||||||||||||||||
| ) | ||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||
| else: | ||||||||||||||||||||||||||
| ### for only single experiment on one view | ||||||||||||||||||||||||||
| st.selectbox( | ||||||||||||||||||||||||||
| "choose experiment", results, | ||||||||||||||||||||||||||
| key="selected_experiment_dropdown_ida", | ||||||||||||||||||||||||||
| index=validate_selected_index(file_manager, 'selected_experiment0_ida'), | ||||||||||||||||||||||||||
| on_change=select_experiment | ||||||||||||||||||||||||||
| ) | ||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||
| if 'selected_experiment0_ida' in st.session_state: | ||||||||||||||||||||||||||
| print('Lets go!') | ||||||||||||||||||||||||||
| render_grid( | ||||||||||||||||||||||||||
| st.session_state.selected_experiment0_ida, layout[0], file_manager, | ||||||||||||||||||||||||||
| 'flashidasimulator', 'selected_experiment0_ida' | ||||||||||||||||||||||||||
| ) | ||||||||||||||||||||||||||
|
Comment on lines
+96
to
+101
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. render_grid call missing a stable grid key in single-experiment view Side-by-side paths pass a grid key; single-view doesn’t. This can cause state/key collisions and inconsistent UI updates. - render_grid(
- st.session_state.selected_experiment0_ida, layout[0], file_manager,
- 'flashidasimulator', 'selected_experiment0_ida'
- )
+ render_grid(
+ st.session_state.selected_experiment0_ida, layout[0], file_manager,
+ 'flashidasimulator', 'selected_experiment0_ida', 'flash_viewer_grid_0_ida'
+ )📝 Committable suggestion
Suggested change
🤖 Prompt for AI Agents |
||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||
| ### for multiple experiments on one view | ||||||||||||||||||||||||||
| if len(layout) > 1: | ||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||
| for exp_index, exp_layout in enumerate(layout): | ||||||||||||||||||||||||||
| if exp_index == 0: continue # skip the first experiment | ||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||
| st.divider() # horizontal line | ||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||
| st.selectbox( | ||||||||||||||||||||||||||
| "choose experiment", results, | ||||||||||||||||||||||||||
| key=f'selected_experiment_dropdown_{exp_index}_ida', | ||||||||||||||||||||||||||
| index=validate_selected_index(file_manager, f'selected_experiment{exp_index}_ida'), | ||||||||||||||||||||||||||
| on_change=select_experiment | ||||||||||||||||||||||||||
| ) | ||||||||||||||||||||||||||
| # if #experiment input files are less than #layouts, all the pre-selection will be the first experiment | ||||||||||||||||||||||||||
| if f"selected_experiment{exp_index}_ida" in st.session_state: | ||||||||||||||||||||||||||
| render_grid( | ||||||||||||||||||||||||||
| st.session_state["selected_experiment%d_ida" % exp_index], | ||||||||||||||||||||||||||
| layout[exp_index], file_manager, 'flashidasimulator', | ||||||||||||||||||||||||||
| "selected_experiment%d_ida" % exp_index, | ||||||||||||||||||||||||||
| 'flash_viewer_grid_%d_ida' % exp_index | ||||||||||||||||||||||||||
| ) | ||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||
| save_params(params) | ||||||||||||||||||||||||||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,21 @@ | ||
| import streamlit as st | ||
|
|
||
| from src.Workflow import IdaSimulatorWorkflow | ||
| from src.common.common import page_setup | ||
|
|
||
|
|
||
| params = page_setup() | ||
|
|
||
| wf = IdaSimulatorWorkflow() | ||
|
|
||
| st.title('FLASHIda - Intelligent Data Acquisition') | ||
|
|
||
| t = st.tabs(["📁 **File Upload**", "⚙️ **Configure**", "🚀 **Run**"]) | ||
| with t[0]: | ||
| wf.show_file_upload_section() | ||
|
|
||
| with t[1]: | ||
| wf.show_parameter_section() | ||
|
|
||
| with t[2]: | ||
| wf.show_execution_section() |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,119 @@ | ||
| import streamlit as st | ||
|
|
||
| from pathlib import Path | ||
|
|
||
| from src.common.common import page_setup, save_params | ||
| from src.workflow.FileManager import FileManager | ||
| from src.render.render import render_grid | ||
|
|
||
|
|
||
| DEFAULT_LAYOUT = [ | ||
| ['ms2_table'], | ||
| ['combined_spectrum'], | ||
| ['anno_spectrum', 'deconv_spectrum'] | ||
| ] | ||
|
|
||
|
|
||
|
|
||
| def select_experiment(): | ||
| st.session_state.selected_experiment0_ida = st.session_state.selected_experiment_dropdown_ida | ||
| if len(layout) > 1: | ||
| for exp_index in range(1, len(layout)): | ||
| if st.session_state[f'selected_experiment_dropdown_{exp_index}_ida'] is None: | ||
| continue | ||
| st.session_state[f"selected_experiment{exp_index}_ida"] = st.session_state[f'selected_experiment_dropdown_{exp_index}_ida'] | ||
|
|
||
| def validate_selected_index(file_manager, selected_experiment): | ||
| results = file_manager.get_results_list( | ||
| ['deconv_dfs', 'anno_dfs', 'ms2_dfs'] | ||
| ) | ||
| if selected_experiment in st.session_state: | ||
| if st.session_state[selected_experiment] in results: | ||
| return name_to_index[st.session_state[selected_experiment]] | ||
| else: | ||
| del st.session_state[selected_experiment] | ||
| return None | ||
|
|
||
| # page initialization | ||
| params = page_setup("IdaViewer") | ||
|
|
||
| # Get available results | ||
| file_manager = FileManager( | ||
| st.session_state["workspace"], | ||
| Path(st.session_state['workspace'], 'flashida', 'cache') | ||
| ) | ||
| results = file_manager.get_results_list( | ||
| ['deconv_dfs', 'anno_dfs', 'ms2_dfs'] | ||
| ) | ||
|
|
||
| if file_manager.result_exists('layout', 'layout'): | ||
| layout = file_manager.get_results('layout', 'layout')['layout'] | ||
| side_by_side = layout['side_by_side'] | ||
| layout = layout['layout'] | ||
|
|
||
| else: | ||
| layout = [DEFAULT_LAYOUT] | ||
| side_by_side = False | ||
|
|
||
| ### if no input file is given, show blank page | ||
| if len(results) == 0: | ||
| st.error('No results to show yet. Please run a workflow first!') | ||
| st.stop() | ||
|
|
||
| # Map names to index | ||
| name_to_index = {n : i for i, n in enumerate(results)} | ||
|
|
||
| if len(layout) == 2 and side_by_side: | ||
| c1, c2 = st.columns(2) | ||
| with c1: | ||
| st.selectbox( | ||
| "choose experiment", results, | ||
| key="selected_experiment_dropdown_ida", | ||
| index=validate_selected_index(file_manager, 'selected_experiment0_ida'), | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🛠️ Refactor suggestion Update function calls to pass required parameters. Since the helper functions now need additional parameters, update the function calls accordingly. - index=validate_selected_index(file_manager, 'selected_experiment0_ida'),
- on_change=select_experiment
+ index=validate_selected_index(file_manager, 'selected_experiment0_ida', name_to_index),
+ on_change=lambda: select_experiment(layout)Apply similar changes to other function calls. Also applies to: 75-75, 91-91, 114-114 🤖 Prompt for AI Agents |
||
| on_change=select_experiment | ||
| ) | ||
| if 'selected_experiment0_ida' in st.session_state: | ||
| render_grid(st.session_state.selected_experiment0_ida, layout[0], file_manager, 'flashida', 'selected_experiment0_ida') | ||
| with c2: | ||
| st.selectbox( | ||
| "choose experiment", results, | ||
| key=f'selected_experiment_dropdown_1_ida', | ||
| index=validate_selected_index(file_manager, 'selected_experiment1_ida'), | ||
| on_change=select_experiment | ||
| ) | ||
| if f"selected_experiment1_ida" in st.session_state: | ||
| render_grid(st.session_state.selected_experiment1_ida, layout[1], file_manager, 'flashida', 'selected_experiment1_ida', 'flash_viewer_grid_1') | ||
|
|
||
|
|
||
| else: | ||
| ### for only single experiment on one view | ||
| st.selectbox( | ||
| "choose experiment", results, | ||
| key="selected_experiment_dropdown_ida", | ||
| index=validate_selected_index(file_manager, 'selected_experiment0_ida'), | ||
| on_change=select_experiment | ||
| ) | ||
|
|
||
| if 'selected_experiment0_ida' in st.session_state: | ||
| render_grid(st.session_state.selected_experiment0_ida, layout[0], file_manager, 'flashida', 'selected_experiment0_ida') | ||
|
|
||
| ### for multiple experiments on one view | ||
| if len(layout) > 1: | ||
|
|
||
| for exp_index, exp_layout in enumerate(layout): | ||
| if exp_index == 0: continue # skip the first experiment | ||
|
|
||
| st.divider() # horizontal line | ||
|
|
||
| st.selectbox( | ||
| "choose experiment", results, | ||
| key=f'selected_experiment_dropdown_{exp_index}_ida', | ||
| index=validate_selected_index(file_manager, f'selected_experiment{exp_index}_ida'), | ||
| on_change=select_experiment | ||
| ) | ||
|
|
||
| # if #experiment input files are less than #layouts, all the pre-selection will be the first experiment | ||
| if f"selected_experiment{exp_index}_ida" in st.session_state: | ||
| render_grid(st.session_state["selected_experiment%d_ida" % exp_index], layout[exp_index], file_manager, 'flashida', f"selected_experiment{exp_index}_ida", 'flash_viewer_grid_%d' % exp_index) | ||
|
|
||
| save_params(params) | ||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fix component key mismatch: 'ms1_deconv_heat_map' vs 'ms1_deconv_heatmap'
Parser stores data under 'ms1_deconv_heatmap' (no extra underscore). The default layout uses a different key, so the component won’t render.
Apply this diff:
📝 Committable suggestion
🤖 Prompt for AI Agents