Hot-keys on this page
r m x p toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
1import ipywidgets as widgets
2from IPython.display import HTML, display
3from ipywidgets import Layout
5import proteinsolver
6from proteinsolver.dashboard.state import global_state
9def update_target_selection(target_selection_out):
10 html_string = (
11 '<p class="myheading">'
12 "2. (Optional) Specify target amino acids at specific positions "
13 "(or enter '-' to leave the position open for design)"
14 "</p>"
15 )
16 target_sequence_selection_widget = create_target_selection_widget()
17 target_selection_out.clear_output(wait=True)
18 with target_selection_out:
19 display(HTML(html_string))
20 display(target_sequence_selection_widget)
23def create_target_selection_widget():
24 def update_target_sequence(change):
25 residue_idx = int(change["owner"].description.split(" ")[0])
26 global_state.target_sequence[residue_idx] = change["new"]
27 target_sequence_ta.value = "".join(global_state.target_sequence)
29 reference_sequence_ta = widgets.Textarea(
30 value="".join(global_state.reference_sequence),
31 placeholder="AAAAA...",
32 description="<em>Reference</em><br>sequence:",
33 disabled=True,
34 layout=widgets.Layout(width="auto"),
35 )
36 _ = reference_sequence_ta.add_class("mysequence")
38 target_sequence_ta = widgets.Textarea(
39 value="".join(global_state.target_sequence),
40 placeholder="AAAAA...",
41 description="<em>Target</em><br>sequence:",
42 disabled=True,
43 layout=widgets.Layout(width="auto"),
44 )
45 _ = target_sequence_ta.add_class("mysequence")
47 target_sequence_dropdowns = []
48 for i, (aa_ref, aa_target) in enumerate(
49 zip(global_state.reference_sequence, global_state.target_sequence)
50 ):
51 dropdown = widgets.Dropdown(
52 options=["-"] + proteinsolver.utils.AMINO_ACIDS,
53 value=aa_target,
54 description=f"{i} ({aa_ref})",
55 # style={},
56 layout=widgets.Layout(width="120px"),
57 style={"font_family": "monospace", "font_weight": "bold"},
58 )
59 dropdown.observe(update_target_sequence, names="value")
60 _ = dropdown.add_class("mytext")
61 target_sequence_dropdowns.append(dropdown)
63 target_sequence_dropdowns_wg = widgets.HBox(
64 target_sequence_dropdowns, layout=widgets.Layout(width="100%", flex_flow="row wrap")
65 )
67 accordion = widgets.Accordion(
68 children=[target_sequence_dropdowns_wg], layout=Layout(margin="2px 0px 0px 90px")
69 )
70 accordion.set_title(0, "Target residue picker")
71 accordion.selected_index = None
73 target_sequence_selection_wg = widgets.VBox(
74 [widgets.VBox([reference_sequence_ta, target_sequence_ta]), accordion]
75 )
76 return target_sequence_selection_wg