Hide keyboard shortcuts

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 

4 

5import proteinsolver 

6from proteinsolver.dashboard.state import global_state 

7 

8 

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) 

21 

22 

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) 

28 

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") 

37 

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") 

46 

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) 

62 

63 target_sequence_dropdowns_wg = widgets.HBox( 

64 target_sequence_dropdowns, layout=widgets.Layout(width="100%", flex_flow="row wrap") 

65 ) 

66 

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 

72 

73 target_sequence_selection_wg = widgets.VBox( 

74 [widgets.VBox([reference_sequence_ta, target_sequence_ta]), accordion] 

75 ) 

76 return target_sequence_selection_wg