Skip to content

Commit 8722df3

Browse files
committed
update index page
1 parent b4e160b commit 8722df3

File tree

10 files changed

+555
-30
lines changed

10 files changed

+555
-30
lines changed
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
from pyhdx.batch_processing import yaml_to_hdxm
1515
from pyhdx.fileIO import csv_to_dataframe, load_fitresult
1616
from pyhdx.fileIO import csv_to_protein
17-
from pyhdx.web.apps import folding_app
17+
from pyhdx.web.apps import rfu_app
1818
from pyhdx.web.base import STATIC_DIR
1919
from pyhdx.web.utils import load_state, fix_multiindex_dtypes
2020

@@ -41,7 +41,7 @@ def my_exception_hook(exctype, value, traceback):
4141
sys.excepthook = my_exception_hook
4242

4343

44-
ctrl, tmpl = folding_app()
44+
ctrl, tmpl = rfu_app()
4545

4646

4747
cwd = Path(__file__).parent.resolve()

pyhdx/cli.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ def main():
3535
print(f"Started new Dask LocalCluster at {scheduler_address}")
3636

3737
if args.serve:
38-
serve.run_main()
38+
serve.run_apps()
3939

4040

4141
if __name__ == '__main__':

pyhdx/web/apps.py

Lines changed: 13 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -12,24 +12,25 @@
1212

1313
#cache = HybridHDFCache(file_path ='test123.h5')
1414

15+
16+
fmt = {
17+
'header_color': '#ffffff', # this is the text
18+
'header_background': '#00407A',
19+
'accent_base_color': '#00407A',
20+
'theme_toggle': False
21+
}
22+
1523
@logger('pyhdx')
1624
def main_app():
1725
cwd = Path(__file__).parent.resolve()
18-
yaml_dict = yaml.safe_load((cwd / 'pyhdx_app.yaml').read_text(encoding='utf-8'))
26+
yaml_dict = yaml.safe_load((cwd / 'apps' / 'pyhdx_app.yaml').read_text(encoding='utf-8'))
1927

2028
ctr = AppConstructor(loggers={'pyhdx': main_app.logger}, cache=cache)
2129

2230
ctrl = ctr.parse(yaml_dict)
2331

2432
ctrl.start()
2533

26-
fmt = {
27-
'header_color': '#ffffff', # this is the text
28-
'header_background': '#00407A',
29-
'accent_base_color': '#00407A',
30-
'theme_toggle': False
31-
}
32-
3334
tmpl = pn.template.FastGridTemplate(title=f'{VERSION_STRING}', **fmt)
3435
controllers = ctrl.control_panels.values()
3536
controls = pn.Accordion(*[controller.panel for controller in controllers], toggle=True)
@@ -45,7 +46,6 @@ def main_app():
4546
'rates',
4647
'gibbs_overlay',
4748
'peptide_mse',
48-
#'peptide_scatter',
4949
'peptide_overlay',
5050
'loss_lines'
5151
]
@@ -89,22 +89,17 @@ def get_view(name):
8989

9090

9191
@logger('pyhdx')
92-
def folding_app():
92+
def rfu_app():
9393
cwd = Path(__file__).parent.resolve()
94-
yaml_dict = yaml.safe_load((cwd / 'folding_app.yaml').read_text(encoding='utf-8'))
94+
yaml_dict = yaml.safe_load((cwd / 'apps' / 'rfu_app.yaml').read_text(encoding='utf-8'))
9595

96-
ctr = AppConstructor(loggers={'pyhdx': folding_app.logger}, cache=cache)
96+
ctr = AppConstructor(loggers={'pyhdx': rfu_app.logger}, cache=cache)
9797

9898
ctrl = ctr.parse(yaml_dict)
9999

100100
ctrl.start()
101101

102-
fmt = {
103-
'header_color': '#ffffff', # this is the text
104-
'header_background': '#00407A',
105-
'accent_base_color': '#00407A',
106-
'theme_toggle': False
107-
}
102+
108103

109104
tmpl = pn.template.FastGridTemplate(title=f'{VERSION_STRING}', **fmt)
110105
controllers = ctrl.control_panels.values()
Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -189,9 +189,7 @@ modules:
189189

190190

191191
controllers:
192-
#- peptide_file_input # todo by name ?
193-
#- initial_guess
194-
- peptide_folding_file_input
192+
- peptide_rfu_file_input
195193
- color_transform
196194
- protein #rename: NGL?
197195
- graph

pyhdx/web/controllers.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -348,7 +348,7 @@ class PeptideFoldingFileInputControl(PyHDXControlPanel):
348348
349349
"""
350350

351-
_type = 'peptide_folding_file_input'
351+
_type = 'peptide_rfu_file_input'
352352

353353
header = 'Peptide Input'
354354

pyhdx/web/readme/molstar.png

98.5 KB
Loading

pyhdx/web/readme/pyhdx_diagram.py

Lines changed: 173 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,173 @@
1+
from functools import partial
2+
from pathlib import Path
3+
from urllib.request import urlretrieve
4+
5+
import yaml
6+
from diagrams import Cluster, Diagram
7+
from diagrams.aws.compute import Outposts, EC2, AutoScaling
8+
from diagrams.aws.cost import CostExplorer
9+
from diagrams.aws.database import Timestream, Redshift
10+
from diagrams.aws.management import CommandLineInterface
11+
from diagrams.custom import Custom
12+
13+
root_dir = Path(__file__).parent.parent.parent.parent
14+
15+
source_nodes = {
16+
'pyhdx': Timestream,
17+
'pdb': Redshift
18+
}
19+
20+
transform_nodes = {
21+
'table_source': Outposts,
22+
'cross_section': AutoScaling,
23+
}
24+
TRANSFORM_DEFAULT = EC2
25+
26+
opts_nodes = {}
27+
28+
OPTS_DEFAULT = CostExplorer
29+
30+
view_nodes = {
31+
'ngl_colors': partial(Custom, icon_path='molstar.png'),
32+
'logging': CommandLineInterface
33+
}
34+
35+
hv_logo_url = 'https://holoviews.org/_static/logo.png'
36+
hv_icon = "holoviews.png"
37+
urlretrieve(hv_logo_url, hv_icon)
38+
VIEW_DEFAULT = partial(Custom, icon_path=hv_icon)
39+
40+
sources = {}
41+
transforms = {}
42+
opts = {}
43+
views = {}
44+
45+
cluster_attr = {
46+
"fontsize": "20",
47+
"bgcolor": "#e3e5e6",
48+
}
49+
50+
diagram_attr = {
51+
# 'nodesep': '0.5',
52+
'layout': 'dot',
53+
# 'pack': 'true',
54+
# 'clusterrank': 'local',
55+
# 'packMode': 'clust'
56+
}
57+
58+
59+
def make_diagram(name, yaml_dict):
60+
add_opts = False # adding opts make the resulting scheme a bit messy
61+
opt_connections = []
62+
63+
with Diagram(name, show=False, outformat='png', graph_attr=diagram_attr):
64+
for src_name, spec in yaml_dict.get('sources', None).items():
65+
node = source_nodes[spec['type']]
66+
src = node(src_name)
67+
sources[src_name] = src
68+
69+
for trs_name, spec in yaml_dict.get('transforms', None).items():
70+
node = transform_nodes.get(spec['type'], TRANSFORM_DEFAULT)
71+
trs = node(trs_name)
72+
transforms[trs_name] = trs
73+
if 'source' in spec:
74+
source = sources.get(spec['source']) or transforms.get(spec['source'])
75+
source >> trs
76+
77+
# repeated code!
78+
for view_name, spec in yaml_dict.get('views', {}).items():
79+
node = view_nodes.get(spec['type'], VIEW_DEFAULT)
80+
view = node(view_name)
81+
views[view_name] = view
82+
if 'source' in spec:
83+
source = sources.get(spec['source']) or transforms.get(spec['source'])
84+
source >> view
85+
elif 'sources' in spec:
86+
for src_id, src_name in spec['sources'].items():
87+
source = sources.get(src_name) or transforms.get(src_name)
88+
source >> view
89+
elif 'views' in spec:
90+
for component_view_name in spec['views']:
91+
component_view = views.get(component_view_name)
92+
component_view >> view
93+
if add_opts and 'opts' in spec:
94+
for opt_name in spec['opts']:
95+
if isinstance(opt_name, dict):
96+
pass
97+
else:
98+
try:
99+
opt = opts[opt_name]
100+
view << opt
101+
except KeyError:
102+
opt_connections.append((opt_name, view))
103+
104+
for module_name, module_spec in yaml_dict['modules'].items():
105+
with Cluster(module_name, graph_attr=cluster_attr):
106+
for src_name, spec in module_spec.get('sources', {}).items():
107+
node = source_nodes[spec['type']]
108+
src = node(src_name)
109+
sources[src_name] = src
110+
111+
for trs_name, spec in module_spec.get('transforms', {}).items():
112+
node = transform_nodes.get(spec['type'], TRANSFORM_DEFAULT)
113+
trs = node(trs_name)
114+
transforms[trs_name] = trs
115+
if 'source' in spec:
116+
source = sources.get(spec['source']) or transforms.get(spec['source'])
117+
source >> trs
118+
119+
if add_opts:
120+
for opt_name, spec in module_spec.get('opts', {}).items():
121+
node = opts_nodes.get(spec['type'], OPTS_DEFAULT)
122+
opt = node(opt_name)
123+
opts[opt_name] = opt
124+
125+
for view_name, spec in module_spec.get('views', {}).items():
126+
node = view_nodes.get(spec['type'], VIEW_DEFAULT)
127+
view = node(view_name)
128+
views[view_name] = view
129+
if 'source' in spec:
130+
source = sources.get(spec['source']) or transforms.get(spec['source'])
131+
source >> view
132+
elif 'sources' in spec:
133+
for src_id, src_name in spec['sources'].items():
134+
source = sources.get(src_name) or transforms.get(src_name)
135+
source >> view
136+
elif 'views' in spec:
137+
for component_view_name in spec['views']:
138+
component_view = views.get(component_view_name)
139+
component_view >> view
140+
if add_opts and 'opts' in spec:
141+
for opt_name in spec['opts']:
142+
if isinstance(opt_name, dict):
143+
pass
144+
else:
145+
try:
146+
opt = opts[opt_name]
147+
view << opt
148+
except KeyError:
149+
opt_connections.append((opt_name, view))
150+
151+
if add_opts:
152+
with Cluster('Opts'):
153+
for opt_name, spec in yaml_dict['opts'].items():
154+
node = opts_nodes.get(spec['type'], OPTS_DEFAULT)
155+
opt = node(opt_name)
156+
opts[opt_name] = opt
157+
158+
for opt_name, view in opt_connections:
159+
view << opts[opt_name]
160+
161+
162+
if __name__ == '__main__':
163+
app_names = ['PyHDX_main_application', 'PyHDX_rfu']
164+
app_files = ['pyhdx_app.yaml', 'rfu_app.yaml']
165+
166+
d = {}
167+
for name, file in zip(app_names, app_files):
168+
yaml_dir = root_dir / 'pyhdx' / 'web' / 'apps' / file
169+
yaml_str = yaml_dir.read_text(encoding='utf-8')
170+
d[name] = yaml.safe_load(yaml_str)
171+
172+
for name, yaml_dict in d.items():
173+
make_diagram(name, yaml_dict)

pyhdx/web/serve.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,15 @@
88

99
from pyhdx.config import cfg
1010
from pyhdx.local_cluster import verify_cluster
11-
from pyhdx.web.apps import main_app # , diff_app, single_app, folding_app, full_deuteration_app
11+
from pyhdx.web.apps import main_app, rfu_app
1212
from pyhdx.web.base import STATIC_DIR
1313

1414
APP_DICT = {
1515
'main': lambda: main_app()[1],
16+
'rfu': lambda: rfu_app()[1]
1617
}
1718

18-
19-
def run_main():
19+
def run_apps():
2020
np.random.seed(43)
2121
torch.manual_seed(43)
2222

@@ -46,10 +46,10 @@ def run_main():
4646
tornado_logger.addHandler(fh)
4747

4848
print("Welcome to the PyHDX server!")
49-
pn.serve(APP_DICT, static_dirs={'pyhdx': STATIC_DIR})
49+
pn.serve(APP_DICT, static_dirs={'pyhdx': STATIC_DIR}, index=str(STATIC_DIR / 'index.html'))
5050

5151

5252
if __name__ == '__main__':
53-
run_main()
53+
run_apps()
5454

5555

0 commit comments

Comments
 (0)