Skip to content

Commit 3bb428a

Browse files
committed
adding back models under development
1 parent 1425d63 commit 3bb428a

10 files changed

+1113
-0
lines changed
Lines changed: 136 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,136 @@
1+
from .OdeModel import OdeModel
2+
from .KorakianitisModel_parameters import KorakianitisModel_parameters as k2006
3+
from .ParametersObject import ParametersObject as po
4+
from ..Components import Rlc_component, Valve_simple_bernoulli, HC_mixed_elastance
5+
6+
FULL_NAMES =[
7+
'LeftA',
8+
'MiValve',
9+
'LeftV',
10+
'AoV',
11+
'SysAoSin',
12+
'SysArt',
13+
'SysVen',
14+
'RightA',
15+
'TriValve',
16+
'RightV',
17+
'PulV',
18+
'PulArtSin',
19+
'PulArt0',
20+
'PulArt1',
21+
'PulArt2',
22+
'PulArt3',
23+
'PulArt4',
24+
'PulVen',
25+
]
26+
27+
class KPat5MixedModel(OdeModel):
28+
def __init__(self, time_setup_dict, parobj:po=k2006, suppress_printing:bool=False) -> None:
29+
super().__init__(time_setup_dict)
30+
self.name = 'KorakianitisModel'
31+
32+
if not suppress_printing: print(parobj)
33+
34+
# The components...
35+
for key, name in zip(parobj.components.keys(), FULL_NAMES):
36+
if key in parobj._vessels:
37+
class_ = Rlc_component
38+
elif key in parobj._valves:
39+
class_ = Valve_simple_bernoulli
40+
elif key in parobj._chambers:
41+
class_ = HC_mixed_elastance
42+
else:
43+
raise Exception(f'Component name {key} not in the model list.')
44+
self.components[key] = class_(name=name,
45+
time_object=self.time_object,
46+
**parobj[key].to_dict())
47+
if key not in parobj._valves:
48+
self.set_v_sv(key)
49+
# else:
50+
# self.set_phi_sv(key)
51+
self.components[key].setup()
52+
53+
self.connect_modules(self.components['lv'],
54+
self.components['ao'],
55+
plabel='p_lv',
56+
qlabel='q_ao')
57+
self.connect_modules(self.components['ao'],
58+
self.components['sas'],
59+
plabel='p_sas',
60+
qlabel='q_ao')
61+
self.connect_modules(self.components['sas'],
62+
self.components['sat'],
63+
plabel='p_sat',
64+
qlabel='q_sas')
65+
self.connect_modules(self.components['sat'],
66+
self.components['svn'],
67+
plabel='p_svn',
68+
qlabel='q_sat')
69+
self.connect_modules(self.components['svn'],
70+
self.components['ra'],
71+
plabel='p_ra',
72+
qlabel='q_svn')
73+
self.connect_modules(self.components['ra'],
74+
self.components['ti'],
75+
plabel='p_ra',
76+
qlabel='q_ti')
77+
self.connect_modules(self.components['ti'],
78+
self.components['rv'],
79+
plabel='p_rv',
80+
qlabel='q_ti')
81+
self.connect_modules(self.components['rv'],
82+
self.components['po'],
83+
plabel='p_rv',
84+
qlabel='q_po')
85+
self.connect_modules(self.components['po'],
86+
self.components['pas'],
87+
plabel='p_pas',
88+
qlabel='q_po')
89+
############################################
90+
self.connect_modules(self.components['pas'],
91+
self.components['pat0'],
92+
plabel='p_pat0',
93+
qlabel='q_pas')
94+
self.connect_modules(self.components['pat0'],
95+
self.components['pat1'],
96+
plabel='p_pat1',
97+
qlabel='q_pat0')
98+
self.connect_modules(self.components['pat1'],
99+
self.components['pat2'],
100+
plabel='p_pat2',
101+
qlabel='q_pat1')
102+
self.connect_modules(self.components['pat2'],
103+
self.components['pat3'],
104+
plabel='p_pat3',
105+
qlabel='q_pat2')
106+
self.connect_modules(self.components['pat3'],
107+
self.components['pat4'],
108+
plabel='p_pat4',
109+
qlabel='q_pat3')
110+
############################################
111+
self.connect_modules(self.components['pat4'],
112+
self.components['pvn'],
113+
plabel='p_pvn',
114+
qlabel='q_pat4')
115+
############################################
116+
self.connect_modules(self.components['pvn'],
117+
self.components['la'],
118+
plabel='p_la',
119+
qlabel='q_pvn')
120+
self.connect_modules(self.components['la'],
121+
self.components['mi'],
122+
plabel='p_la',
123+
qlabel='q_mi')
124+
self.connect_modules(self.components['mi'],
125+
self.components['lv'],
126+
plabel='p_lv',
127+
qlabel='q_mi')
128+
129+
for component in self.components.values():
130+
component.setup()
131+
132+
# def set_phi_sv(self, comp_key:str) -> None:
133+
# phi_key = 'phi_' + comp_key
134+
# self._state_variable_dict[phi_key] = self.components[comp_key]._PHI
135+
# self._state_variable_dict[phi_key].set_name(phi_key)
136+
# self.all_sv_data[phi_key] = self.components[comp_key].PHI
Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
1+
from ..HelperRoutines import activation_function_2, activation_function_3
2+
from .ParametersObject import ParametersObject
3+
import pandas as pd
4+
5+
6+
KKPat10_COMPONENTS = [
7+
'la', # left atrium
8+
'mi', # mitral valve
9+
'lv', # left ventricle
10+
'ao', # aortic valve
11+
'sas', # systemic aortic sinus
12+
'sat', # systemic artery
13+
'svn', # systemic vein
14+
'ra', # right atrium
15+
'ti', # tricuspid vale
16+
'rv', # right ventricle
17+
'po', # pulmonary valve
18+
'pas', # pulmonary artery sinus
19+
###############################
20+
'pat0', # pulmonary artery
21+
'pat1', # pulmonary artery
22+
'pat2', # pulmonary artery
23+
'pat3', # pulmonary artery
24+
'pat4', # pulmonary artery
25+
###############################
26+
'pvn' # pulmonary vein
27+
]
28+
VESSELS = ['sas', 'sat', 'svn', 'pas', 'pat0', 'pat1', 'pat2', 'pat3', 'pat4', 'pvn']
29+
VESSELS_PAR = ['r', 'c', 'l', 'v_ref', 'v', 'p']
30+
31+
VALVES = ['mi', 'ao', 'ti', 'po']
32+
VALVES_PAR = ['CQ', 'RRA']
33+
34+
CHAMBERS = ['la', 'lv', 'ra', 'rv']
35+
CHAMBERS_PAR = ['E_pas', 'E_act', 'v_ref', 'k_pas', 'af', 'v', 'p', 'tr', 'td', 'delay', 'tpww', 'tpwb']
36+
37+
38+
class KPat5MixedModel_parameters(ParametersObject):
39+
"""
40+
Intro
41+
-----
42+
Model Parameters based on Korakianitis and Shi (2006)
43+
"""
44+
def __init__(self, name='Korakianitis 2006') -> None:
45+
super().__init__(name=name)
46+
self.components = {key : None for key in KKPat10_COMPONENTS}
47+
for type_, type_var in [[VESSELS, VESSELS_PAR], [VALVES, VALVES_PAR], [CHAMBERS, CHAMBERS_PAR]]:
48+
for key in type_:
49+
self[key] = pd.Series(index=type_var, dtype=object)
50+
51+
self._vessels = VESSELS
52+
self._valves = VALVES
53+
self._chambers= CHAMBERS
54+
55+
self.set_chamber_comp('lv', E_pas= 0.1, k_pas=0.01, E_act= 2.5, v_ref=50.0, tr = 0.30, td = 0.450, v=100.)
56+
self.set_chamber_comp('la', E_pas= 0.15, k_pas=0.01, E_act= 0.25, v_ref=10.0, tpwb = 0.0, tpww = 0.09, delay=0.08, v=0.0)
57+
self.set_chamber_comp('rv', E_pas= 0.1, k_pas=0.01, E_act= 1.15, v_ref=50., tr=0.30, td=0.45, v=100.)
58+
self.set_chamber_comp('ra', E_pas= 0.15, k_pas=0.01, E_act= 0.25, v_ref=10., tpwb=0.0, tpww=0.09, delay=0.08, v=0.0)
59+
60+
61+
self.set_activation_function('lv', af=activation_function_2)
62+
self.set_activation_function('rv', af=activation_function_2)
63+
64+
self.set_activation_function('la', af=activation_function_3)
65+
self.set_activation_function('ra', af=activation_function_3)
66+
67+
68+
# systemic circulation
69+
self.set_rlc_comp('sas', r=0.003, c=0.08, l=0.000062, v=0.0, v_ref=0.0)
70+
self.set_rlc_comp('sat', r=(0.05 + 0.5 + 0.52), c=1.6 , l=0.0017 , v=550.0, v_ref=0.0)
71+
self.set_rlc_comp('svn', r=0.075, c=20.5, v=0.0, v_ref=0.0)
72+
73+
# pulmonary circulation
74+
self.set_rlc_comp('pas', r=0.002 , c=0.18, l=0.000052, v=0.0, v_ref=0.0)
75+
#############################################################################################
76+
self.set_rlc_comp('pat0', r=(0.01/5.), c=(3.8/5.) , l=(0.0017/5.) , v=0.0, v_ref=0.0)
77+
self.set_rlc_comp('pat1', r=(0.01/5.), c=(3.8/5.) , l=(0.0017/5.) , v=0.0, v_ref=0.0)
78+
self.set_rlc_comp('pat2', r=(0.01/5.), c=(3.8/5.) , l=(0.0017/5.) , v=0.0, v_ref=0.0)
79+
self.set_rlc_comp('pat3', r=(0.01/5.), c=(3.8/5. ), l=(0.0017/5. ) , v=0.0, v_ref=0.0)
80+
self.set_rlc_comp('pat4', r=(0.01/5.+0.05+0.25), c=(3.8/5.) , l=(0.0017/5.), v=0.0, v_ref=0.0)
81+
#############################################################################################
82+
self.set_rlc_comp('pvn', r=0.006 , c=20.5 , v=0.0, v_ref=0.0)
83+
84+
# valves
85+
self.set_valve_comp('ao', CQ=350., RRA=0.0)
86+
self.set_valve_comp('mi', CQ=400., RRA=0.0)
87+
self.set_valve_comp('po', CQ=350., RRA=0.0)
88+
self.set_valve_comp('ti', CQ=400., RRA=0.0)
89+
90+
def set_chamber_comp(self, key, **kwargs):
91+
self._set_comp(key=key, set=CHAMBERS, **kwargs)
92+
93+
def set_activation_function(self, key, af):
94+
self._set_comp(key, set=CHAMBERS, af=af)
95+
96+
def set_rlc_comp(self, key, **kwargs):
97+
self._set_comp(key=key, set=VESSELS, **kwargs)
98+
99+
def set_valve_comp(self, key, **kwargs):
100+
self._set_comp(key=key, set=VALVES, **kwargs)
101+
102+
def set(self, key, **kwargs):
103+
if key in CHAMBERS:
104+
self._set_comp(key=key, set=CHAMBERS, **kwargs)
105+
if key in VESSELS:
106+
self._set_comp(key=key, set=VESSELS, **kwargs)
107+
if key in VALVES:
108+
self._set_comp(key=key, set=VALVES, **kwargs)
Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
from .OdeModel import OdeModel
2+
from .KorakianitisModel_parameters import KorakianitisModel_parameters as k2006
3+
from .ParametersObject import ParametersObject as po
4+
from ..Components import Rlc_component, Valve_maynard, HC_constant_elastance
5+
6+
FULL_NAMES =[
7+
'LeftA',
8+
'MiValve',
9+
'LeftV',
10+
'AoV',
11+
'SysAoSin',
12+
'SysArt',
13+
'SysVen',
14+
'RightA',
15+
'TriValve',
16+
'RightV',
17+
'PulV',
18+
'PulArtSin',
19+
'PulArt',
20+
'PulVen',
21+
]
22+
23+
class KorakianitisMaynardModel(OdeModel):
24+
def __init__(self, time_setup_dict, parobj:po=k2006) -> None:
25+
super().__init__(time_setup_dict)
26+
self.name = 'KorakianitisModel'
27+
28+
print(parobj)
29+
30+
# The components...
31+
for key, name in zip(parobj.components.keys(), FULL_NAMES):
32+
if key in parobj._vessels:
33+
class_ = Rlc_component
34+
elif key in parobj._valves:
35+
class_ = Valve_maynard
36+
elif key in parobj._chambers:
37+
class_ = HC_constant_elastance
38+
else:
39+
raise Exception(f'Component name {key} not in the model list.')
40+
self.components[key] = class_(name=name,
41+
time_object=self.time_object,
42+
**parobj[key].to_dict())
43+
if key not in parobj._valves:
44+
self.set_v_sv(key)
45+
else:
46+
self.set_phi_sv(key)
47+
self.components[key].setup()
48+
49+
self.connect_modules(self.components['lv'],
50+
self.components['ao'],
51+
plabel='p_lv',
52+
qlabel='q_ao')
53+
self.connect_modules(self.components['ao'],
54+
self.components['sas'],
55+
plabel='p_sas',
56+
qlabel='q_ao')
57+
self.connect_modules(self.components['sas'],
58+
self.components['sat'],
59+
plabel='p_sat',
60+
qlabel='q_sas')
61+
self.connect_modules(self.components['sat'],
62+
self.components['svn'],
63+
plabel='p_svn',
64+
qlabel='q_sat')
65+
self.connect_modules(self.components['svn'],
66+
self.components['ra'],
67+
plabel='p_ra',
68+
qlabel='q_svn')
69+
self.connect_modules(self.components['ra'],
70+
self.components['ti'],
71+
plabel='p_ra',
72+
qlabel='q_ti')
73+
self.connect_modules(self.components['ti'],
74+
self.components['rv'],
75+
plabel='p_rv',
76+
qlabel='q_ti')
77+
self.connect_modules(self.components['rv'],
78+
self.components['po'],
79+
plabel='p_rv',
80+
qlabel='q_po')
81+
self.connect_modules(self.components['po'],
82+
self.components['pas'],
83+
plabel='p_pas',
84+
qlabel='q_po')
85+
self.connect_modules(self.components['pas'],
86+
self.components['pat'],
87+
plabel='p_pat',
88+
qlabel='q_pas')
89+
self.connect_modules(self.components['pat'],
90+
self.components['pvn'],
91+
plabel='p_pvn',
92+
qlabel='q_pat')
93+
self.connect_modules(self.components['pvn'],
94+
self.components['la'],
95+
plabel='p_la',
96+
qlabel='q_pvn')
97+
self.connect_modules(self.components['la'],
98+
self.components['mi'],
99+
plabel='p_la',
100+
qlabel='q_mi')
101+
self.connect_modules(self.components['mi'],
102+
self.components['lv'],
103+
plabel='p_lv',
104+
qlabel='q_mi')
105+
106+
for component in self.components.values():
107+
component.setup()
108+
109+
def set_phi_sv(self, comp_key:str) -> None:
110+
phi_key = 'phi_' + comp_key
111+
self._state_variable_dict[phi_key] = self.components[comp_key]._PHI
112+
self._state_variable_dict[phi_key].set_name(phi_key)
113+
self.all_sv_data[phi_key] = self.components[comp_key].PHI
114+
self.components[comp_key]._PHI._u = self.all_sv_data[phi_key]

0 commit comments

Comments
 (0)