Skip to content

Commit 9856aa8

Browse files
committed
🎨 Improve layouting and visual
Use ColorCode for the coloring of the edges + their labels
1 parent afb6dfc commit 9856aa8

6 files changed

Lines changed: 727 additions & 41 deletions

File tree

docs/notebooks/kinetic_scheme_visualization.ipynb

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -242,11 +242,9 @@
242242
"from glotaran.io import load_model, load_parameters\n",
243243
"\n",
244244
"model = load_model(\n",
245-
" \"../../reference_only/kinetic-scheme-visualizer/example/\"\n",
246245
" \"target_rcg_gcrcg_rcgcr_refine.yml\"\n",
247246
")\n",
248247
"params = load_parameters(\n",
249-
" \"../../reference_only/kinetic-scheme-visualizer/example/\"\n",
250248
" \"target_rcg_gcrcg_rcgcr_refine-params.yml\"\n",
251249
")"
252250
]
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
inputs1:
2+
- ["s1", 1, { vary: False }]
3+
- ["0", 0, { vary: False }]
4+
- ["g_rcg", 0.12, { vary: False }]
5+
- ["g_gcrcg", 1, { "expr": "$inputs1.g_rcg*2" }]
6+
- ["g_rcgcr", 1, { "expr": "$inputs1.g_rcg*0.5" }]
7+
8+
ratesrcgcr:
9+
- ["k55", 0.521E-03, { "vary": False }]
10+
11+
ratesgcrcg:
12+
- ["k55", 1.06102962E-03, { "vary": False }]
13+
- ["k52", 1, { "expr": "$ratesgcrcg.k51" }]
14+
- ["k51", 0.635131359, { "vary": False }]
15+
- ["k54", 1, { "expr": "$ratesgcrcg.k53" }]
16+
- ["k53", 0.975641429, { "vary": False }]
17+
- ["k62", 1, { "expr": "$ratesgcrcg.k61" }]
18+
- ["k61", 1, { "expr": "$rates.k61*2" }]
19+
20+
rates:
21+
- ["k21", 7.72667789, { "vary": False }]
22+
- ["k32", 1.57667196, { "vary": False }]
23+
- ["k43", 0.150893405, { "vary": False }]
24+
- ["k44", 5.71769197E-04, { "vary": False }]
25+
- ["k55", 3.31293675E-04, { "vary": False }]
26+
- ["k52", 1, { "expr": "$rates.k51" }]
27+
- ["k51", 0.318180293, { "vary": False }]
28+
- ["k54", 1, { "expr": "$rates.k53" }]
29+
- ["k53", 0.458410978, { "vary": False }]
30+
- ["k62", 1, { "expr": "$rates.k61" }]
31+
- ["k61", 0.147264779, { "vary": False }]
32+
- ["k66", 9.56490561E-02, { "vary": False }]
33+
34+
area:
35+
- ["1", 1, { "vary": False }]
36+
37+
rel:
38+
- ["r1", 1, { "vary": False }]
39+
40+
scale:
41+
- ["rcg_dcm", 1, { "vary": False }]
42+
- ["gcrcg_dcm", 1.48898424443862, { "vary": True }]
43+
- ["rcgcr_dcm", 0.57328491578764, { "vary": True }]
44+
- ["guide_rcg_r1", 1.13646911340376, { "vary": True }]
45+
- ["guide_rcg_r2", 1, { "expr": "$scale.guide_rcg_r1" }]
46+
- ["guide_rcg_r3", 1, { "expr": "$scale.guide_rcg_r1" }]
47+
- ["guide_rcg_r4", 1, { "expr": "$scale.guide_rcg_r1" }]
48+
- ["guide_rcg_g", 504.658491592697, { "vary": True }]
49+
- ["guide_gcrcg_g", 1, { "expr": "$scale.guide_rcg_g" }]
50+
- ["guide_rcgcr_g", 1, { "expr": "$scale.guide_rcg_g" }]
51+
- ["guide_gcrcg_r1", 1, { "expr": "$scale.guide_rcg_r1 * 1000" }]
52+
- ["guide_gcrcg_r2", 1, { "expr": "$scale.guide_rcg_r1 * 1000" }]
53+
- ["guide_gcrcg_r3", 1, { "expr": "$scale.guide_rcg_r1 * 1000" }]
54+
- ["guide_gcrcg_r4", 1, { "expr": "$scale.guide_rcg_r1 * 1000" }]
55+
- ["guide_rcgcr_r1", 1, { "expr": "$scale.guide_rcg_r1 * 1000" }]
56+
- ["guide_rcgcr_r2", 1, { "expr": "$scale.guide_rcg_r1 * 1000" }]
57+
- ["guide_rcgcr_r3", 1, { "expr": "$scale.guide_rcg_r1 * 1000" }]
58+
- ["guide_rcgcr_r4", 1, { "expr": "$scale.guide_rcg_r1 * 1000" }]
59+
60+
irf:
61+
- ["common_dispcenter", 550, { "vary": False }]
62+
- ["data1_disp1", -0.840490937, { "vary": False }]
63+
- ["data1_disp2", -0.354524136, { "vary": False }]
64+
- ["center1", 1.04188406, { "vary": False }]
65+
- ["center2", 1.03445363, { "vary": False }]
66+
- ["center7", 1.08, { "vary": True }]
67+
- ["width1", 5.79295903E-02, { "vary": False }]
68+
- ["width2", 5.19465879E-02, { "vary": False }]
69+
- ["width7", 7.2146E-02, { "vary": False }]
Lines changed: 271 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,271 @@
1+
default_megacomplex: decay
2+
dataset_groups:
3+
default:
4+
residual_function: variable_projection
5+
link_clp: True
6+
# residual_function: non_negative_least_squares
7+
8+
dataset:
9+
tas_rcg_dcm:
10+
megacomplex: [artifact_rcg_dcm, complex_rcg_dcm]
11+
initial_concentration: input_rcg
12+
irf: irf_rcg
13+
scale: scale.rcg_dcm
14+
tas_gcrcg_dcm:
15+
megacomplex: [artifact_gcrcg_dcm, complex_gcrcg_dcm]
16+
initial_concentration: input_gcrcg
17+
irf: irf_gcrcg
18+
scale: scale.gcrcg_dcm
19+
tas_rcgcr_dcm:
20+
megacomplex: [artifact_rcgcr_dcm, complex_rcgcr_dcm]
21+
initial_concentration: input_rcgcr
22+
irf: irf_rcgcr
23+
scale: scale.rcgcr_dcm
24+
guide_rcg_r1:
25+
megacomplex: [complex_guide_rcg_r1]
26+
scale: scale.guide_rcg_r1
27+
guide_rcg_r2:
28+
megacomplex: [complex_guide_rcg_r2]
29+
scale: scale.guide_rcg_r2
30+
guide_rcg_r3:
31+
megacomplex: [complex_guide_rcg_r3]
32+
scale: scale.guide_rcg_r3
33+
guide_rcg_r4:
34+
megacomplex: [complex_guide_rcg_r4]
35+
scale: scale.guide_rcg_r4
36+
guide_rcg_g:
37+
megacomplex: [complex_guide_rcg_g]
38+
scale: scale.guide_rcg_g
39+
guide_gcrcg_r1:
40+
megacomplex: [complex_guide_gcrcg_r1]
41+
scale: scale.guide_gcrcg_r1
42+
guide_gcrcg_r2:
43+
megacomplex: [complex_guide_gcrcg_r2]
44+
scale: scale.guide_gcrcg_r2
45+
guide_gcrcg_r3:
46+
megacomplex: [complex_guide_gcrcg_r3]
47+
scale: scale.guide_gcrcg_r3
48+
guide_gcrcg_r4:
49+
megacomplex: [complex_guide_gcrcg_r4]
50+
scale: scale.guide_gcrcg_r4
51+
guide_gcrcg_g:
52+
megacomplex: [complex_guide_gcrcg_g]
53+
scale: scale.guide_gcrcg_g
54+
guide_rcgcr_r1:
55+
megacomplex: [complex_guide_rcgcr_r1]
56+
scale: scale.guide_rcgcr_r1
57+
guide_rcgcr_r2:
58+
megacomplex: [complex_guide_rcgcr_r2]
59+
scale: scale.guide_rcgcr_r2
60+
guide_rcgcr_r3:
61+
megacomplex: [complex_guide_rcgcr_r3]
62+
scale: scale.guide_rcgcr_r3
63+
guide_rcgcr_r4:
64+
megacomplex: [complex_guide_rcgcr_r4]
65+
scale: scale.guide_rcgcr_r4
66+
guide_rcgcr_g:
67+
megacomplex: [complex_guide_rcgcr_g]
68+
scale: scale.guide_rcgcr_g
69+
70+
megacomplex:
71+
complex_rcg_dcm:
72+
k_matrix: [km_rcg_common, kmrcg, kmg]
73+
artifact_rcg_dcm:
74+
type: coherent-artifact
75+
order: 3
76+
complex_gcrcg_dcm:
77+
k_matrix: [km_gcrcg_common, km_gcrcg_rcg, km_gcrcg_g]
78+
artifact_gcrcg_dcm:
79+
type: coherent-artifact
80+
order: 3
81+
complex_rcgcr_dcm:
82+
k_matrix: [km_rcgcr_common, km_rcgcr_rcg, km_rcgcr_g]
83+
artifact_rcgcr_dcm:
84+
type: coherent-artifact
85+
order: 3
86+
complex_guide_rcg_r1:
87+
dimension: time
88+
target: rcg_r1
89+
type: clp-guide
90+
complex_guide_rcg_r2:
91+
dimension: time
92+
target: rcg_r2
93+
type: clp-guide
94+
complex_guide_rcg_r3:
95+
dimension: time
96+
target: rcg_r3
97+
type: clp-guide
98+
complex_guide_rcg_r4:
99+
dimension: time
100+
target: rcg_r4
101+
type: clp-guide
102+
complex_guide_rcg_g:
103+
dimension: time
104+
target: rcg_g
105+
type: clp-guide
106+
complex_guide_gcrcg_r1:
107+
dimension: time
108+
target: gcrcg_r1
109+
type: clp-guide
110+
complex_guide_gcrcg_r2:
111+
dimension: time
112+
target: gcrcg_r2
113+
type: clp-guide
114+
complex_guide_gcrcg_r3:
115+
dimension: time
116+
target: gcrcg_r3
117+
type: clp-guide
118+
complex_guide_gcrcg_r4:
119+
dimension: time
120+
target: gcrcg_r4
121+
type: clp-guide
122+
complex_guide_gcrcg_g:
123+
dimension: time
124+
target: gcrcg_g
125+
type: clp-guide
126+
complex_guide_rcgcr_r1:
127+
dimension: time
128+
target: rcgcr_r1
129+
type: clp-guide
130+
complex_guide_rcgcr_r2:
131+
dimension: time
132+
target: rcgcr_r2
133+
type: clp-guide
134+
complex_guide_rcgcr_r3:
135+
dimension: time
136+
target: rcgcr_r3
137+
type: clp-guide
138+
complex_guide_rcgcr_r4:
139+
dimension: time
140+
target: rcgcr_r4
141+
type: clp-guide
142+
complex_guide_rcgcr_g:
143+
dimension: time
144+
target: rcgcr_g
145+
type: clp-guide
146+
147+
k_matrix:
148+
km_rcg_common:
149+
matrix:
150+
(rcg_r2, rcg_r1): rates.k21
151+
(rcg_r3, rcg_r2): rates.k32
152+
(rcg_r4, rcg_r3): rates.k43
153+
(rcg_r4, rcg_r4): rates.k44
154+
kmg:
155+
matrix:
156+
(rcg_g, rcg_g): rates.k55
157+
kmrcg:
158+
matrix:
159+
(rcg_g, rcg_r1): rates.k51
160+
(rcg_g, rcg_r2): rates.k52
161+
(rcg_g, rcg_r3): rates.k53
162+
(rcg_g, rcg_r4): rates.k54
163+
(rcg_s6, rcg_r1): rates.k61
164+
(rcg_s6, rcg_r2): rates.k62
165+
(rcg_s6, rcg_s6): rates.k66
166+
km_rcgcr_common:
167+
matrix:
168+
(rcgcr_r2, rcgcr_r1): rates.k21
169+
(rcgcr_r3, rcgcr_r2): rates.k32
170+
(rcgcr_r4, rcgcr_r3): rates.k43
171+
(rcgcr_r4, rcgcr_r4): rates.k44
172+
km_rcgcr_g:
173+
matrix:
174+
(rcgcr_g, rcgcr_g): ratesrcgcr.k55
175+
km_rcgcr_rcg:
176+
matrix:
177+
(rcgcr_g, rcgcr_r1): rates.k51
178+
(rcgcr_g, rcgcr_r2): rates.k52
179+
(rcgcr_g, rcgcr_r3): rates.k53
180+
(rcgcr_g, rcgcr_r4): rates.k54
181+
(rcgcr_s6, rcgcr_r1): rates.k61
182+
(rcgcr_s6, rcgcr_r2): rates.k62
183+
(rcgcr_s6, rcgcr_s6): rates.k66
184+
km_gcrcg_common:
185+
matrix:
186+
(gcrcg_r2, gcrcg_r1): rates.k21
187+
(gcrcg_r3, gcrcg_r2): rates.k32
188+
(gcrcg_r4, gcrcg_r3): rates.k43
189+
(gcrcg_r4, gcrcg_r4): rates.k44
190+
km_gcrcg_g:
191+
matrix:
192+
(gcrcg_g, gcrcg_g): ratesgcrcg.k55
193+
km_gcrcg_rcg:
194+
matrix:
195+
(gcrcg_g, gcrcg_r1): ratesgcrcg.k51
196+
(gcrcg_g, gcrcg_r2): ratesgcrcg.k52
197+
(gcrcg_g, gcrcg_r3): ratesgcrcg.k53
198+
(gcrcg_g, gcrcg_r4): ratesgcrcg.k54
199+
(gcrcg_s6, gcrcg_r1): ratesgcrcg.k61
200+
(gcrcg_s6, gcrcg_r2): ratesgcrcg.k62
201+
(gcrcg_s6, gcrcg_s6): rates.k66
202+
203+
initial_concentration:
204+
input_rcg:
205+
compartments: [rcg_r1, rcg_r2, rcg_r3, rcg_r4, rcg_g, rcg_s6]
206+
parameters:
207+
[inputs1.s1, inputs1.0, inputs1.0, inputs1.0, inputs1.g_rcg, inputs1.0]
208+
input_gcrcg:
209+
compartments: [gcrcg_r1, gcrcg_r2, gcrcg_r3, gcrcg_r4, gcrcg_g, gcrcg_s6]
210+
parameters:
211+
[inputs1.s1, inputs1.0, inputs1.0, inputs1.0, inputs1.g_gcrcg, inputs1.0]
212+
input_rcgcr:
213+
compartments: [rcgcr_r1, rcgcr_r2, rcgcr_r3, rcgcr_r4, rcgcr_g, rcgcr_s6]
214+
parameters:
215+
[inputs1.s1, inputs1.0, inputs1.0, inputs1.0, inputs1.g_rcgcr, inputs1.0]
216+
# exclude_from_normalize: [s7]
217+
# 6 needed ! why is it called compartment here and source with equal_area? does this mean that s2=s1*rel.r1 ?
218+
clp_relations:
219+
- source: rcg_s6
220+
target: rcgcr_s6
221+
parameter: rel.r1
222+
interval: [[0, 1000]]
223+
- source: rcg_s6
224+
target: gcrcg_s6
225+
parameter: rel.r1
226+
interval: [[0, 1000]]
227+
228+
irf:
229+
irf_rcg:
230+
type: spectral-gaussian
231+
center: irf.center1
232+
width: irf.width1
233+
dispersion_center: irf.common_dispcenter
234+
center_dispersion_coefficients: [irf.data1_disp1, irf.data1_disp2]
235+
model_dispersion_with_wavenumber: true
236+
irf_gcrcg:
237+
type: spectral-gaussian
238+
center: irf.center2
239+
width: irf.width2
240+
dispersion_center: irf.common_dispcenter
241+
center_dispersion_coefficients: [irf.data1_disp1, irf.data1_disp2]
242+
model_dispersion_with_wavenumber: true
243+
irf_rcgcr:
244+
type: spectral-gaussian
245+
center: irf.center7
246+
width: irf.width7
247+
dispersion_center: irf.common_dispcenter
248+
center_dispersion_coefficients: [irf.data1_disp1, irf.data1_disp2]
249+
model_dispersion_with_wavenumber: true
250+
weights:
251+
- datasets: [tas_rcg_dcm, tas_gcrcg_dcm, tas_rcgcr_dcm]
252+
global_interval: [520, 535]
253+
value: 0.4
254+
- datasets: [tas_rcg_dcm, tas_gcrcg_dcm, tas_rcgcr_dcm]
255+
global_interval: [1, 420]
256+
value: 0.2
257+
- datasets:
258+
[
259+
guide_rcg_g,
260+
guide_gcrcg_r1,
261+
guide_gcrcg_r2,
262+
guide_gcrcg_r3,
263+
guide_gcrcg_r4,
264+
guide_gcrcg_g,
265+
guide_rcgcr_r1,
266+
guide_rcgcr_r2,
267+
guide_rcgcr_r3,
268+
guide_rcgcr_r4,
269+
guide_rcgcr_g,
270+
]
271+
value: 0.001

pyglotaran_extras/inspect/kinetic_scheme/_constants.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
# Default edge styling
1919
DEFAULT_EDGE_COLOR: str = "#555555"
2020
DEFAULT_EDGE_LINEWIDTH: float = 1.5
21-
DEFAULT_ARROWSTYLE: str = "->,head_length=0.4,head_width=0.2"
21+
DEFAULT_ARROWSTYLE: str = "-|>,head_length=8,head_width=5"
2222
DEFAULT_RATE_FONTSIZE: int = 9
2323

2424
# Ground state bar styling
@@ -28,8 +28,9 @@
2828

2929
# Layout defaults
3030
DEFAULT_FIGSIZE: tuple[float, float] = (10.0, 8.0)
31-
DEFAULT_HORIZONTAL_SPACING: float = 2.0
32-
DEFAULT_VERTICAL_SPACING: float = 1.5
31+
DEFAULT_HORIZONTAL_SPACING: float = 0.0
32+
"""Sentinel: when 0, computed as 3 × node_width at render time (200% gap)."""
33+
DEFAULT_VERTICAL_SPACING: float = 2.0
3334
DEFAULT_GROUND_STATE_OFFSET: float = 1.2
3435
DEFAULT_COMPONENT_GAP: float = 3.0
3536
"""Horizontal gap between disconnected graph components in side-by-side layout."""

0 commit comments

Comments
 (0)