Skip to content

Commit 56584c8

Browse files
authored
Merge pull request #109 from AllenNeuralDynamics/han_use_bokeh
Use bokeh to show plots in hover messages
2 parents cc35ead + 7be713e commit 56584c8

File tree

7 files changed

+408
-77
lines changed

7 files changed

+408
-77
lines changed

code/Home.py

Lines changed: 14 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,10 @@
2020
import streamlit as st
2121
import streamlit_nested_layout
2222
from aind_auto_train import __version__ as auto_train_version
23-
from aind_auto_train.auto_train_manager import DynamicForagingAutoTrainManager
24-
from aind_auto_train.curriculum_manager import CurriculumManager
2523
from pygwalker.api.streamlit import StreamlitRenderer, init_streamlit_comm
26-
from util.aws_s3 import (draw_session_plots_quick_preview, load_data,
24+
from util.aws_s3 import (draw_session_plots_quick_preview,
25+
load_data,
26+
load_auto_train,
2727
show_debug_info,
2828
show_session_level_img_by_key_and_prefix)
2929
from util.fetch_data_docDB import load_data_from_docDB
@@ -287,6 +287,8 @@ def plot_x_y_session():
287287
def show_curriculums():
288288
pass
289289

290+
291+
290292
# ------- Layout starts here -------- #
291293
def init(if_load_bpod_data_override=None, if_load_docDB_override=None):
292294

@@ -323,23 +325,10 @@ def init(if_load_bpod_data_override=None, if_load_docDB_override=None):
323325
for source in ["dataframe", "plotly"]:
324326
st.session_state[f'df_selected_from_{source}'] = pd.DataFrame(columns=['h2o', 'session'])
325327

326-
# Init auto training database
327-
st.session_state.curriculum_manager = CurriculumManager(
328-
saved_curriculums_on_s3=dict(
329-
bucket='aind-behavior-data',
330-
root='foraging_auto_training/saved_curriculums/'
331-
),
332-
saved_curriculums_local=os.path.expanduser('~/curriculum_manager/'),
333-
)
334-
st.session_state.auto_train_manager = DynamicForagingAutoTrainManager(
335-
manager_name='447_demo',
336-
df_behavior_on_s3=dict(bucket='aind-behavior-data',
337-
root='foraging_nwb_bonsai_processed/',
338-
file_name='df_sessions.pkl'),
339-
df_manager_root_on_s3=dict(bucket='aind-behavior-data',
340-
root='foraging_auto_training/')
341-
)
342-
328+
# Load autotrain
329+
auto_train_manager, curriculum_manager = load_auto_train()
330+
st.session_state.auto_train_manager = auto_train_manager
331+
st.session_state.curriculum_manager = curriculum_manager
343332

344333
# Some ad-hoc modifications on df_sessions
345334
_df = st.session_state.df['sessions_bonsai'] # temporary df alias
@@ -544,7 +533,7 @@ def app():
544533
# with col1:
545534
# -- 1. unit dataframe --
546535

547-
cols = st.columns([2, 4, 1])
536+
cols = st.columns([4, 4, 4, 1])
548537
cols[0].markdown(f'### Filter the sessions on the sidebar\n'
549538
f'##### {len(st.session_state.df_session_filtered)} sessions, '
550539
f'{len(st.session_state.df_session_filtered.h2o.unique())} mice filtered')
@@ -570,7 +559,7 @@ def app():
570559
init()
571560
st.rerun() # Reload the page to apply the changes
572561

573-
table_height = slider_wrapper_for_url_query(st_prefix=cols[2],
562+
table_height = slider_wrapper_for_url_query(st_prefix=cols[-1],
574563
label='Table height',
575564
min_value=0,
576565
max_value=2000,
@@ -583,7 +572,8 @@ def app():
583572

584573

585574
if len(st.session_state.df_session_filtered) == 0:
586-
st.markdown('## No filtered results!')
575+
st.markdown('## No filtered results! :thinking_face:')
576+
st.markdown('### :bulb: Try clicking "Reset filters" and add your filters again!')
587577
return
588578

589579
aggrid_outputs = aggrid_interactive_table_session(
@@ -702,7 +692,7 @@ def add_main_tabs():
702692
st.markdown("#### Select auto training curriculums")
703693

704694
# Curriculum drop down selector
705-
cols = st.columns([0.8, 0.5, 0.8, 4])
695+
cols = st.columns([0.8, 0.8, 0.8, 3])
706696
cols[3].markdown(f"(aind_auto_train lib version = {auto_train_version})")
707697

708698
options = list(df_curriculums['curriculum_name'].unique())

code/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
__ver__ = 'v2.6.0'
1+
__ver__ = 'v3.0.0 beta'

code/util/aws_s3.py

Lines changed: 44 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,14 @@
11
import json
2-
2+
import os
3+
import numpy as np
34
import pandas as pd
45
import s3fs
56
import streamlit as st
67
from PIL import Image
78

9+
from aind_auto_train.auto_train_manager import DynamicForagingAutoTrainManager
10+
from aind_auto_train.curriculum_manager import CurriculumManager
11+
812
from .settings import (draw_type_layout_definition,
913
draw_type_mapper_session_level,
1014
draw_types_quick_preview)
@@ -44,6 +48,33 @@ def load_raw_sessions_on_VAST():
4448
raw_sessions_on_VAST = json.load(f)
4549
return raw_sessions_on_VAST
4650

51+
@st.cache_data(ttl=12*3600)
52+
def load_auto_train():
53+
# Init auto training database
54+
curriculum_manager = CurriculumManager(
55+
saved_curriculums_on_s3=dict(
56+
bucket='aind-behavior-data',
57+
root='foraging_auto_training/saved_curriculums/'
58+
),
59+
saved_curriculums_local=os.path.expanduser('~/curriculum_manager/'),
60+
)
61+
auto_train_manager = DynamicForagingAutoTrainManager(
62+
manager_name='447_demo',
63+
df_behavior_on_s3=dict(bucket='aind-behavior-data',
64+
root='foraging_nwb_bonsai_processed/',
65+
file_name='df_sessions.pkl'),
66+
df_manager_root_on_s3=dict(bucket='aind-behavior-data',
67+
root='foraging_auto_training/')
68+
)
69+
70+
_df = auto_train_manager.df_manager.copy()
71+
# Remove invalid subject_id
72+
_df = _df[(999999 > _df["subject_id"].astype(int))
73+
& (_df["subject_id"].astype(int) > 300000)]
74+
auto_train_manager.df_manager = _df
75+
76+
return auto_train_manager, curriculum_manager
77+
4778
def draw_session_plots_quick_preview(df_to_draw_session):
4879

4980
container_session_all_in_one = st.container()
@@ -138,4 +169,15 @@ def show_debug_info():
138169
with st.expander('NWB convertion and upload log', expanded=False):
139170
with fs.open(s3_nwb_folder['bonsai'] + 'bonsai_pipeline.log') as file:
140171
log_content = file.read().decode('utf-8')
141-
st.text(log_content)
172+
st.text(log_content)
173+
174+
175+
def get_s3_public_url(
176+
subject_id, session_date, nwb_suffix, figure_suffix="choice_history.png",
177+
result_path="foraging_nwb_bonsai_processed", bucket_name="aind-behavior-data",
178+
):
179+
nwb_suffix = "" if np.isnan(nwb_suffix) or int(nwb_suffix) == 0 else f"_{int(nwb_suffix)}"
180+
return (
181+
f"https://{bucket_name}.s3.us-west-2.amazonaws.com/{result_path}/"
182+
f"{subject_id}_{session_date}{nwb_suffix}/{subject_id}_{session_date}{nwb_suffix}_{figure_suffix}"
183+
)

0 commit comments

Comments
 (0)